[pLog-svn] r3227 - in
plog/trunk:class/summary/actionclass/summary/dao
class/summary/viewtemplates/summary
Mark Wu
markplace at gmail.com
Tue Apr 11 10:42:46 GMT 2006
Hi Oscar:
In our original getRecentArticles() we use "group by a.id", so I think the
performance is at least the same, right?
If the performance still bad, I agree we need to create extra tables for
these information is needed. :(
BTW, I won'i suggest we update the list erverytime our user add/edit/delete
objects... That means we need to modify some methods for adapt this idea.
I am consdering we can write a script that called by cron job and update
those table every hours.. That will be better then update anytime... I
guess.
How do you think?
Hi Christopher:
Can you kindly take look at those sqls and give us some suggestions?
Mark
> -----Original Message-----
> From: plog-svn-bounces at devel.lifetype.net
> [mailto:plog-svn-bounces at devel.lifetype.net] On Behalf Of
> Oscar Renalias
> Sent: Tuesday, April 11, 2006 6:27 PM
> To: plog-svn at devel.lifetype.net
> Subject: Re: [pLog-svn] r3227 - in
> plog/trunk:class/summary/actionclass/summary/dao
> class/summary/viewtemplates/summary
>
> As far as I can tell, using GROUP BY is not a good thing
> because the database still has to generate the full list and
> then remove repetitions from it. I know we're using GROUP BY
> modifiers in other places but that doesn't mean that it's
> good :-) Besides, being the summary.php what we're talking
> about, we should be careful with performance.
>
> If somebody has an idea about how to optimize these queries,
> please go ahead.
>
> Or if the summary queries are too slow we can always
> pregenerate the data and store it in another table. For
> example every time an article is added, updated or modified,
> we could precalculate the values for all the lists in the
> summary. Additions would be a bit slower but generating the
> front page of the site should be much faster because queries
> would be simpler.
>
> Oscar
>
> On 4/11/06, Mark Wu <markplace at gmail.com> wrote:
> > Hi Oscar:
> >
> > I thnik most of the summary changes already done. And still has one
> > todo .... Add rss feed for post list and blog list.
> >
> > And, can you take a look at summarystats, there are two functions:
> >
> > getRecentArticles() and getRecentPostsByGlobalCategory(). Actaully
> > they are 90% the same..
> >
> > The only different is I use "group by (a.blog_id)" to get the
> > articles list with distinct blog_id ...
> >
> > I have no idea about the performance is better or worse if we use
> > "group by (a.blog_id)", but it get the same results as
> > getRecentArticles()
> >
> > So, if the performance is the same, I will considering to combine
> > these two functions and make the code more clean.
> >
> > Mark
> >
> > > -----Original Message-----
> > > From: plog-svn-bounces at devel.lifetype.net
> > > [mailto:plog-svn-bounces at devel.lifetype.net] On Behalf Of
> > > mark at devel.lifetype.net
> > > Sent: Tuesday, April 11, 2006 4:54 PM
> > > To: plog-svn at devel.lifetype.net
> > > Subject: [pLog-svn] r3227 - in plog/trunk:
> > > class/summary/actionclass/summary/dao class/summary/view
> > > templates/summary
> > >
> > > Author: mark
> > > Date: 2006-04-11 08:53:41 +0000 (Tue, 11 Apr 2006) New Revision:
> > > 3227
> > >
> > > Modified:
> > > plog/trunk/class/summary/action/summarydefaultaction.class.php
> > > plog/trunk/class/summary/action/summaryrssaction.class.php
> > > plog/trunk/class/summary/dao/summarystats.class.php
> > > plog/trunk/class/summary/view/summarypostlistview.class.php
> > > plog/trunk/templates/summary/index.template
> > > plog/trunk/templates/summary/recent.template
> > > Log:
> > > Now, when we click on the globalarticlecategory, we will stay in
> > > summary front page, instead of jumping to postlist page.
> > >
> > > Modified:
> > > plog/trunk/class/summary/action/summarydefaultaction.class.php
> > >
> ===================================================================
> > > ---
> > > plog/trunk/class/summary/action/summarydefaultaction.cl
> > > ass.php 2006-04-11 07:42:56 UTC (rev 3226)
> > > +++
> > > plog/trunk/class/summary/action/summarydefaultaction.cl
> > > ass.php 2006-04-11 08:53:41 UTC (rev 3227)
> > > @@ -2,7 +2,8 @@
> > >
> > > include_once(
> > > PLOG_CLASS_PATH."class/summary/action/summaryaction.class.php" );
> > > include_once(
> > > PLOG_CLASS_PATH."class/summary/dao/summarystats.class.php" );
> > > - include_once(
> > > PLOG_CLASS_PATH."class/dao/globalarticlecategories.class.php" );
> > > + include_once(
> > > PLOG_CLASS_PATH."class/dao/globalarticlecategories.class.php" );
> > > + include_once(
> > > +
> PLOG_CLASS_PATH."class/data/validator/integervalidator.class.php"
> > > + );
> > >
> > > /**
> > > * This is the one and only default action. It
> simply fetches
> > > all the most recent @@ -24,27 +25,52 @@
> > > {
> > > include_once(
> > > PLOG_CLASS_PATH."class/dao/blogs.class.php" );
> > >
> > > - $this->_view = new SummaryCachedView(
> > > "index", Array( "summary" => "default" ));
> > > + // get the blogCategoryId from request
> > > + $globalArticleCategoryId =
> > > $this->_request->getValue( "globalArticleCategoryId" );
> > > + $val = new IntegerValidator();
> > > + if( !$val->validate(
> $globalArticleCategoryId ))
> > > + $globalArticleCategoryId =
> > > ALL_GLOBAL_ARTICLE_CATEGORIES;
> > > +
> > > + $this->_view = new
> SummaryCachedView( "index",
> > > +
> > > Array( "summary" => "default",
> > > +
> > > "globalArticleCategoryId" =>
> > > $globalArticleCategoryId ));
> > > if( $this->_view->isCached()) {
> > > // if the view is already cached...
> > > move along! nothing to see here
> > > return true;
> > > }
> > > -
> > > +
> > > $blogs = new Blogs();
> > > $stats = new SummaryStats();
> > >
> > > // get all blog category
> > > $categories = new GlobalArticleCategories();
> > > $globalArticleCategories =
> > > $categories->getGlobalArticleCategories();
> > > - $min = $categories->getMinNumActiveArticles();
> > > - $max = $categories->getMaxNumActiveArticles();
> > > +
> > > + $min = 0;
> > > + $max = 0;
> > > +
> > > + foreach( $globalArticleCategories as
> > > $globalArticleCategory ){
> > > + $numActiveArticles =
> > > $globalArticleCategory->getNumActiveArticles();
> > > + if( $numActiveArticles < $min ) {
> > > + $min = $numActiveArticles;
> > > + continue;
> > > + }
> > > + if( $numActiveArticles > $max ) {
> > > + $max = $numActiveArticles;
> > > + continue;
> > > + }
> > > + }
> > > +
> > > $step = ( $max - $min )/6;
> > > if($step == 0)
> > > - $step = $min + 1;
> > > + $step = $min + 1;
> > >
> > > + $currentGlobalArticleCategory =
> > > +$categories->getGlobalArticleCategory(
> $globalArticleCategoryId );
> > > +
> > > // export the value for global article
> > > categories
> > > $this->_view->setValue(
> "summaryStats", $stats
> > > );
> > > $this->_view->setValue(
> > > "globalArticleCategories", $globalArticleCategories );
> > > + $this->_view->setValue(
> > > "currentGlobalArticleCategory",
> > > +$currentGlobalArticleCategory);
> > > $this->_view->setValue( "min", $min );
> > > $this->_view->setValue( "step", $step );
> > >
> > >
> > > Modified:
> plog/trunk/class/summary/action/summaryrssaction.class.php
> > >
> ===================================================================
> > > ---
> > > plog/trunk/class/summary/action/summaryrssaction.class.php
> > > 2006-04-11 07:42:56 UTC (rev 3226)
> > > +++
> > > plog/trunk/class/summary/action/summaryrssaction.class.php
> > > 2006-04-11 08:53:41 UTC (rev 3227)
> > > @@ -6,6 +6,8 @@
> > > include_once( PLOG_CLASS_PATH."class/dao/blogs.class.php" );
> > > include_once(
> > > PLOG_CLASS_PATH."class/summary/view/summaryrssview.class.php" );
> > > include_once(
> > > PLOG_CLASS_PATH."class/net/rawrequestgenerator.class.php" );
> > > + include_once(
> > > PLOG_CLASS_PATH."class/dao/globalarticlecategories.class.php" );
> > > + include_once(
> > > +
> PLOG_CLASS_PATH."class/data/validator/integervalidator.class.php"
> > > + );
> > >
> > > define( "SUMMARY_RSS_TYPE_DEFAULT", "default" );
> > > define( "SUMMARY_RSS_TYPE_MOST_COMMENTED",
> > > "mostcommented" ); @@ -41,7 +43,7 @@
> > > $this->_mode =
> SUMMARY_RSS_TYPE_DEFAULT;
> > > }
> > >
> > > - $this->_profile =
> > > $this->_request->getValue( "profile" );
> > > + $this->_profile =
> > > $this->_request->getValue( "profile" );
> > >
> > > return true;
> > > }
> > > @@ -55,8 +57,15 @@
> > > $this->_mode == SUMMARY_RSS_TYPE_MOST_READ ||
> > > $this->_mode == SUMMARY_RSS_TYPE_DEFAULT ) {
> > >
> > >
> > > + // get the blogCategoryId from request
> > > + $globalArticleCategoryId =
> > > $this->_request->getValue( "globalArticleCategoryId" );
> > > + $val = new IntegerValidator();
> > > + if( !$val->validate(
> > > $globalArticleCategoryId ))
> > > +
> > > $globalArticleCategoryId = ALL_GLOBAL_ARTICLE_CATEGORIES;
> > > +
> > > // RSS feeds for posts stuff
> > > $this->_view = new SummaryRssView(
> > > $this->_profile, Array( "summary" => "rss",
> > > +
> > > "globalArticleCategoryId" =>
> > > +$globalArticleCategoryId,
> > >
> > > "mode" => $this->_mode,
> > >
> > > "profile" => $this->_profile ));
> > > if( $this->_view->isCached()) { @@
> > > -73,7 +82,13 @@
> > > $posts =
> > > $stats->getMostReadArticles();
> > > }
> > > else {
> > > - $posts =
> > > $stats->getRecentArticles();
> > > + $categories = new
> > > GlobalArticleCategories();
> > > +
> $currentGlobalArticleCategory
> > > += $categories->getGlobalArticleCategory(
> $globalArticleCategoryId
> > > +);
> > > +
> > > + if(
> > > empty($currentGlobalArticleCategory) )
> > > +
> > > $globalArticleCategoryId = ALL_GLOBAL_ARTICLE_CATEGORIES;
> > > +
> > > + $posts =
> > > $stats->getRecentArticles( $globalArticleCategoryId );
> > > }
> > >
> > > if( !$posts ) {
> > >
> > > Modified: plog/trunk/class/summary/dao/summarystats.class.php
> > >
> ===================================================================
> > > --- plog/trunk/class/summary/dao/summarystats.class.php
> > > 2006-04-11 07:42:56 UTC (rev 3226)
> > > +++ plog/trunk/class/summary/dao/summarystats.class.php
> > > 2006-04-11 08:53:41 UTC (rev 3227)
> > > @@ -229,7 +229,7 @@
> > > * @param maxPosts The maximum number of posts to return
> > > * @return An array of Article objects with the
> most recent
> > > articles.
> > > */
> > > - function getRecentArticles( $maxPosts = 0 )
> > > + function getRecentArticles( $globaArticleCategoryId =
> > > + ALL_GLOBAL_ARTICLE_CATEGORIES, $maxPosts = 0 )
> > > {
> > > include_once( PLOG_CLASS_PATH .
> > > "class/data/timestamp.class.php" );
> > > include_once(
> > > PLOG_CLASS_PATH."class/dao/articles.class.php" ); @@
> -247,6 +247,9 @@
> > > AND a.status =
> > > ".POST_STATUS_PUBLISHED."
> > > AND
> > > a.in_summary_page = '1'";
> > >
> > > + if($globaArticleCategoryId !=
> > > ALL_GLOBAL_ARTICLE_CATEGORIES)
> > > + $query .= " AND
> a.global_category_id =
> > > +'".Db::qstr($globaArticleCategoryId)."'";
> > > +
> > > $query .= " GROUP BY a.id ORDER BY a.date
> > > DESC";
> > >
> > > if( $maxPosts <= 0 )
> > >
> > > Modified:
> > > plog/trunk/class/summary/view/summarypostlistview.class.php
> > >
> ===================================================================
> > > ---
> > > plog/trunk/class/summary/view/summarypostlistview.class.php
> > > 2006-04-11 07:42:56 UTC (rev 3226)
> > > +++
> > > plog/trunk/class/summary/view/summarypostlistview.class.php
> > > 2006-04-11 08:53:41 UTC (rev 3227)
> > > @@ -61,7 +61,7 @@
> > > $currentGlobalArticleCategory =
> > > $categories->getGlobalArticleCategory( $globalArticleCategoryId );
> > >
> > > if( empty($currentGlobalArticleCategory) )
> > > - $globalArticleCategoryId =
> > > ALL_GLOBAL_ARTICLE_CATEGORIES;
> > > + $globalArticleCategoryId =
> > > ALL_GLOBAL_ARTICLE_CATEGORIES;
> > >
> > > // get the data itself
> > > $stats = new SummaryStats();
> > >
> > > Modified: plog/trunk/templates/summary/index.template
> > >
> ===================================================================
> > > --- plog/trunk/templates/summary/index.template
> > > 2006-04-11 07:42:56 UTC (rev 3226)
> > > +++ plog/trunk/templates/summary/index.template
> > > 2006-04-11 08:53:41 UTC (rev 3227)
> > > @@ -48,7 +48,7 @@
> > > <h4>{$locale->tr("global_article_categories")}</h4>
> > > {foreach from=$globalArticleCategories
> > > item=globalArticleCategory}
> > > {math assign=fontSize
> > > equation="(int)((x-y)/step)+12"
> > > x=$globalArticleCategory->getNumActiveArticles() y=$min
> step=$step}
> > > - <span class="tag"><a style="font-size:
> > > {$fontSize}px"
> > > href="?op=PostList&globalArticleCategoryId={$globalArticle
> > > Category->getId()}">{$globalArticleCategory->getName()}</a></span>
> > > + <span class="tag"><a style="font-size:
> {$fontSize}px"
> > > +href="?op=Summary&globalArticleCategoryId={$globalArticle
> > > Category->
> > > +getId()}">{$globalArticleCategory->getName()}</a></span>
> > > {/foreach}
> > > </div>
> > > {include file="summary/recent.template"}
> > >
> > > Modified: plog/trunk/templates/summary/recent.template
> > >
> ===================================================================
> > > --- plog/trunk/templates/summary/recent.template
> > > 2006-04-11 07:42:56 UTC (rev 3226)
> > > +++ plog/trunk/templates/summary/recent.template
> > > 2006-04-11 08:53:41 UTC (rev 3227)
> > > @@ -1,9 +1,25 @@
> > > -<h4>{$locale->tr("summary_latest_posts")}
> > > - {assign var=posts value=$summaryStats->getRecentArticles()}
> > > +<h4>{$locale->tr("summary_latest_posts")} (
> > > + {if empty($currentGlobalArticleCategory)}
> > > + {$locale->tr("all")}
> > > + {else}
> > > + {$currentGlobalArticleCategory->getName()}
> > > + {/if})
> > > + {if $currentGlobalArticleCategory}
> > > + {assign var=globalArticleCategoryId
> > > value=$currentGlobalArticleCategory->getId()}
> > > + {assign var=posts
> > > +value=$summaryStats->getRecentArticles($globalArticleCategoryId)}
> > > + {else}
> > > + {assign var=posts value=$summaryStats->getRecentArticles()}
> > > + {/if}
> > > {if $posts}
> > > - <a href="{$url->getRssUrl()}?summary=1">
> > > - <img src="{$url->getUrl("/imgs/rss_logo_small.gif")}"
> > > - alt="RSS" /></a>
> > > + {if $currentGlobalArticleCategory}
> > > + <a
> > > href="{$url->getRssUrl()}?summary=1&globalArticleCategoryI
> > > d={$globalArticleCategoryId}">
> > > + <img
> > > src="{$url->getUrl("/imgs/rss_logo_small.gif")}" alt="RSS" />
> > > + </a>
> > > + {else}
> > > + <a href="{$url->getRssUrl()}?summary=1">
> > > + <img
> > > src="{$url->getUrl("/imgs/rss_logo_small.gif")}" alt="RSS" />
> > > + </a>
> > > + {/if}
> > > {/if}
> > > </h4>
> > > {foreach from=$posts item=post}
> > >
> > > _______________________________________________
> > > pLog-svn mailing list
> > > pLog-svn at devel.lifetype.net
> > > http://devel.lifetype.net/mailman/listinfo/plog-svn
> >
> > _______________________________________________
> > pLog-svn mailing list
> > pLog-svn at devel.lifetype.net
> > http://devel.lifetype.net/mailman/listinfo/plog-svn
> >
> _______________________________________________
> pLog-svn mailing list
> pLog-svn at devel.lifetype.net
> http://devel.lifetype.net/mailman/listinfo/plog-svn
More information about the pLog-svn
mailing list