forked from GNUsocial/gnu-social
Add time-based cutoffs for public tag cloud, favorited lists to speed up those queries.
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).
This commit is contained in:
parent
7a7e2162dd
commit
5a1cbdc6f1
@ -186,10 +186,13 @@ class FavoritedAction extends Action
|
|||||||
function showContent()
|
function showContent()
|
||||||
{
|
{
|
||||||
$weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff'));
|
$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.*, '.
|
$qry = 'SELECT notice.*, '.
|
||||||
$weightexpr . ' as weight ' .
|
$weightexpr . ' as weight ' .
|
||||||
'FROM notice JOIN fave ON notice.id = fave.notice_id ' .
|
'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 ' .
|
'GROUP BY id,profile_id,uri,content,rendered,url,created,notice.modified,reply_to,is_local,source,notice.conversation ' .
|
||||||
'ORDER BY weight DESC';
|
'ORDER BY weight DESC';
|
||||||
|
|
||||||
|
@ -106,7 +106,10 @@ class PublictagcloudAction extends Action
|
|||||||
#Add the aggregated columns...
|
#Add the aggregated columns...
|
||||||
$tags->selectAdd('max(notice_id) as last_notice_id');
|
$tags->selectAdd('max(notice_id) as last_notice_id');
|
||||||
$calc = common_sql_weight('created', common_config('tag', 'dropoff'));
|
$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->selectAdd($calc . ' as weight');
|
||||||
|
$tags->addWhere($cutoff);
|
||||||
$tags->groupBy('tag');
|
$tags->groupBy('tag');
|
||||||
$tags->orderBy('weight DESC');
|
$tags->orderBy('weight DESC');
|
||||||
|
|
||||||
|
@ -144,9 +144,11 @@ $default =
|
|||||||
'invite' =>
|
'invite' =>
|
||||||
array('enabled' => true),
|
array('enabled' => true),
|
||||||
'tag' =>
|
'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' =>
|
'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' =>
|
'daemon' =>
|
||||||
array('piddir' => '/var/run',
|
array('piddir' => '/var/run',
|
||||||
'user' => false,
|
'user' => false,
|
||||||
|
@ -59,6 +59,7 @@ class GroupTagCloudSection extends TagCloudSection
|
|||||||
function getTags()
|
function getTags()
|
||||||
{
|
{
|
||||||
$weightexpr = common_sql_weight('notice_tag.created', common_config('tag', 'dropoff'));
|
$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();
|
$names = $this->group->getAliases();
|
||||||
|
|
||||||
|
@ -59,6 +59,7 @@ class PersonalTagCloudSection extends TagCloudSection
|
|||||||
function getTags()
|
function getTags()
|
||||||
{
|
{
|
||||||
$weightexpr = common_sql_weight('notice_tag.created', common_config('tag', 'dropoff'));
|
$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, '.
|
$qry = 'SELECT notice_tag.tag, '.
|
||||||
$weightexpr . ' as weight ' .
|
$weightexpr . ' as weight ' .
|
||||||
|
@ -59,12 +59,15 @@ class PopularNoticeSection extends NoticeSection
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff'));
|
$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 ";
|
$qry = "SELECT notice.*, $weightexpr as weight ";
|
||||||
if(isset($tag)) {
|
if(isset($tag)) {
|
||||||
$qry .= 'FROM notice_tag, notice JOIN fave ON notice.id = fave.notice_id ' .
|
$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 {
|
} 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,' .
|
$qry .= ' GROUP BY notice.id,notice.profile_id,notice.content,notice.uri,' .
|
||||||
'notice.rendered,notice.url,notice.created,notice.modified,' .
|
'notice.rendered,notice.url,notice.created,notice.modified,' .
|
||||||
|
Loading…
Reference in New Issue
Block a user