Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql RubyonRails:定时更新表记录_Mysql_Ruby On Rails - Fatal编程技术网

Mysql RubyonRails:定时更新表记录

Mysql RubyonRails:定时更新表记录,mysql,ruby-on-rails,Mysql,Ruby On Rails,我试图用mysql在我的网站上创建类似stackoverflow的“用户分数”。我不想每次访问一个用户时都计算这个分数,因为多个用户分数将同时显示,而且计算方式不需要经常更新。我的想法是定时(每小时、每天等)更新用户表中的所有分数行,如下所示: user.score = user.score + x_actions_since_last_update *2 + y_actions_since_last_update - z_actions_since_last_update*3 但是我如何在一

我试图用mysql在我的网站上创建类似stackoverflow的“用户分数”。我不想每次访问一个用户时都计算这个分数,因为多个用户分数将同时显示,而且计算方式不需要经常更新。我的想法是定时(每小时、每天等)更新用户表中的所有分数行,如下所示:

user.score = user.score + x_actions_since_last_update *2 + y_actions_since_last_update - z_actions_since_last_update*3

但是我如何在一段时间间隔内运行它呢?这是完成我想做的事情的最好方法吗?我应该做些缓存吗?谢谢大家!

您可以在用户执行影响总分的操作时更新用户的分数,而不是在给定的时间间隔计算分数

以您的示例为例,每当用户执行操作X时,将2添加到用户的分数中。对于动作Y,分数加1,对于动作Z,分数减3


如果您不想在每次操作时更新分数,您可以编写一个Rake任务来更新分数;请看一下Rake与Rails的使用介绍。如果要在类unix操作系统上部署应用程序,请使用定期运行任务。

而不是在给定的时间间隔计算分数,您可以在用户执行影响总分的操作时更新用户的分数

以您的示例为例,每当用户执行操作X时,将2添加到用户的分数中。对于动作Y,分数加1,对于动作Z,分数减3


如果您不想在每次操作时更新分数,您可以编写一个Rake任务来更新分数;请看一下Rake与Rails的使用介绍。如果您要在类unix操作系统上部署应用程序,请使用定期运行任务。

很抱歉让您重复,但如果对分数中的任何内容进行了更改(例如,当他们或某人做了导致他们失去/获得分数的事),为什么不更新分数,请看我为Pär所做的评论。很抱歉让你重复一遍,但是当分数中的任何内容发生变化时(例如,当他们或某人做了导致他们失去/获得分数的事情时),为什么不更新分数?是的,请看我为Pär所做的评论。太好了!唯一的问题是,我不想立即奖励用户,因为“x_action”的工作方式是,他们正在注册一个将在未来举行的活动,我只想在活动时间结束后更新他们的分数。我宁愿使用你的第一个选择,如果有一种方法可以这样做…好的,这是一个完全有效的理由不立即更新分数。在这种情况下,编写一个小的rake任务来更新分数,并添加一个cron作业来定期运行任务,这可能是最好的选择。太好了!唯一的问题是,我不想立即奖励用户,因为“x_action”的工作方式是,他们正在注册一个将在未来举行的活动,我只想在活动时间结束后更新他们的分数。我宁愿使用你的第一个选择,如果有一种方法可以这样做…好的,这是一个完全有效的理由不立即更新分数。在这种情况下,编写一个更新分数的小型rake任务,并添加一个定期运行该任务的cron作业可能是一种方法。