]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Add time-based cutoffs for public tag cloud, favorited lists to speed up those queries.
authorBrion Vibber <brion@pobox.com>
Thu, 4 Feb 2010 19:06:01 +0000 (11:06 -0800)
committerBrion Vibber <brion@pobox.com>
Thu, 4 Feb 2010 19:06:01 +0000 (11:06 -0800)
Defaulting to only looking at last 90 days of activity, can be adjusted up or down.

$config['tag']['cutoff'] = 86400 * 90;
$config['popular']['cutoff'] = 86400 * 90;

Per-user and per-group tag clouds do not use the cutoff (and it doesn't help with indexing on them).

actions/favorited.php
actions/publictagcloud.php
lib/default.php
lib/grouptagcloudsection.php
lib/personaltagcloudsection.php
lib/popularnoticesection.php

index 9ffa5b84454093fde32b98460751b60bbab32745..d8980440d17529a73db33990f72fed90f740b247 100644 (file)
@@ -186,10 +186,13 @@ class FavoritedAction extends Action
     function showContent()
     {
         $weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff'));
+        $cutoff = sprintf("fave.modified > '%s'",
+                          common_sql_date(time() - common_config('popular', 'cutoff')));
 
         $qry = 'SELECT notice.*, '.
           $weightexpr . ' as weight ' .
           'FROM notice JOIN fave ON notice.id = fave.notice_id ' .
+          "WHERE $cutoff " .
           'GROUP BY id,profile_id,uri,content,rendered,url,created,notice.modified,reply_to,is_local,source,notice.conversation ' .
           'ORDER BY weight DESC';
 
index 9e4478dbb13165e1e908e9dbc02114f137e496ee..9993b2d3fde0b3473a84dbdb8e0c17151d0902cb 100644 (file)
@@ -106,7 +106,10 @@ class PublictagcloudAction extends Action
         #Add the aggregated columns...
         $tags->selectAdd('max(notice_id) as last_notice_id');
         $calc = common_sql_weight('created', common_config('tag', 'dropoff'));
+        $cutoff = sprintf("notice_tag.created > '%s'",
+                          common_sql_date(time() - common_config('tag', 'cutoff')));
         $tags->selectAdd($calc . ' as weight');
+        $tags->addWhere($cutoff);
         $tags->groupBy('tag');
         $tags->orderBy('weight DESC');
 
index 2bedc4bf08489076675b77b83085b71b04a25d33..485a08ba44e427a4ffc4bb341ed955b0dc204775 100644 (file)
@@ -144,9 +144,11 @@ $default =
         'invite' =>
         array('enabled' => true),
         'tag' =>
-        array('dropoff' => 864000.0),
+        array('dropoff' => 864000.0,   # controls weighting based on age
+              'cutoff' => 86400 * 90), # only look at notices posted in last 90 days
         'popular' =>
-        array('dropoff' => 864000.0),
+        array('dropoff' => 864000.0,   # controls weighting based on age
+              'cutoff' => 86400 * 90), # only look at notices favorited in last 90 days
         'daemon' =>
         array('piddir' => '/var/run',
               'user' => false,
index 14ceda0850b09b6918c4da00517370f6b31bad42..f1106cc7bf9caeb3151595e5e2d5b022ea8427c5 100644 (file)
@@ -59,6 +59,7 @@ class GroupTagCloudSection extends TagCloudSection
     function getTags()
     {
         $weightexpr = common_sql_weight('notice_tag.created', common_config('tag', 'dropoff'));
+        // @fixme should we use the cutoff too? Doesn't help with indexing per-group.
 
         $names = $this->group->getAliases();
 
index 091425f926d296f8959322e63c2a3ac770bae41d..5ea3f188dbf61b2385ad85fde65d15831a381154 100644 (file)
@@ -59,6 +59,7 @@ class PersonalTagCloudSection extends TagCloudSection
     function getTags()
     {
         $weightexpr = common_sql_weight('notice_tag.created', common_config('tag', 'dropoff'));
+        // @fixme should we use the cutoff too? Doesn't help with indexing per-user.
 
         $qry = 'SELECT notice_tag.tag, '.
           $weightexpr . ' as weight ' .
index fbf9a60ab8112395156ffa26b9a5021293f816b6..296ddbbb5034b273e5486d25484cdd191142f0d4 100644 (file)
@@ -59,12 +59,15 @@ class PopularNoticeSection extends NoticeSection
             }
         }
         $weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff'));
+        $cutoff = sprintf("fave.modified > '%s'",
+                          common_sql_date(time() - common_config('popular', 'cutoff')));
         $qry = "SELECT notice.*, $weightexpr as weight ";
         if(isset($tag)) {
             $qry .= 'FROM notice_tag, notice JOIN fave ON notice.id = fave.notice_id ' .
-                    "WHERE notice.id = notice_tag.notice_id and '$tag' = notice_tag.tag";
+                    "WHERE $cutoff and notice.id = notice_tag.notice_id and '$tag' = notice_tag.tag";
         } else {
-            $qry .= 'FROM notice JOIN fave ON notice.id = fave.notice_id';
+            $qry .= 'FROM notice JOIN fave ON notice.id = fave.notice_id ' .
+                    "WHERE $cutoff";
         }
         $qry .= ' GROUP BY notice.id,notice.profile_id,notice.content,notice.uri,' .
                 'notice.rendered,notice.url,notice.created,notice.modified,' .