我正在尝试使用mysql在我的网站上创建类似于stackoverflow“用户得分”的东西。我不希望每次访问用户时计算此分数,因为将同时显示多个用户分数,并且计算方式不需要经常更新。我的想法是定时更新用户表中的所有分数行(每小时,每天等)。这是它的样子:
user.score = user.score + x_actions_since_last_update *2 + y_actions_since_last_update - z_actions_since_last_update*3
但是我如何以定时间隔运行呢?这甚至是完成我想要做的最好的方法吗?我应该做一些缓存吗?谢谢!
答案 0 :(得分:3)
除了以给定的时间间隔计算得分外,您还可以在用户执行影响总得分的操作时更新用户的得分。
使用您的示例,每当用户执行操作X时,将2添加到用户的分数。对于动作Y,将分数加1,对于动作Z减去3。
如果您不想在每次操作时更新分数,您可以编写一个更新分数的Rake任务;有关使用Rake with Rails的介绍,请查看this tutorial。如果您在类似Unix的操作系统上部署应用程序,请使用cron定期运行该任务。