我需要根据他们发布的文章的某些因素来计算用户的观点。这是一个每小时运行一次的cron工作。
目前,我就是这样做的:
基本上,就像:
$userList = getList();
foreach ($userList as $user)
{
$articleList = getArticles($user);
$point = 0;
foreach ($articleList as $article)
{
// Do calculation here
}
updateUserPoint($point);
}
这可以正常工作。但是,当你来到大型数据库(> 10k用户和> 100k文章)时,这个脚本运行得越来越慢,因为列表越来越长,这些循环需要更长的时间。 MySQL查询的数量也在迅速增加。
请帮我一个好方法。我认为我的效率不够好。
非常感谢。
答案 0 :(得分:0)
需要在getArticles函数中更改代码,查询应该使用sum和group by user_id一起获取该特定用户的点总和,然后需要在函数updateUserPoint函数中使用该用户id更新点。
如果你提供getArticals函数完成,我会改变它以获得该特定用户的积分总和,然后你可以用它来更新。