Ruby on Rails: обновление записи таблицы по времени - PullRequest
0 голосов
/ 04 мая 2010

Я пытаюсь создать что-то похожее на "оценку пользователей" на моем сайте с помощью mysql. Я не хочу рассчитывать эту оценку каждый раз, когда к пользователю обращаются, потому что несколько пользовательских оценок будут отображаться одновременно, и способ расчета не требует его частого обновления. Я думаю об обновлении всех строк с оценками в пользовательской таблице по времени (ежечасно, ежедневно и т. Д.). Вот как это будет выглядеть:

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

Но как мне запустить это через определенный промежуток времени? Это даже лучший способ сделать то, что я пытаюсь сделать? Есть ли какое-то кэширование, которое я должен сделать вместо этого? Спасибо!

1 Ответ

3 голосов
/ 04 мая 2010

Вместо того, чтобы вычислять оценку через заданные интервалы, вы можете обновлять оценку для пользователя всякий раз, когда пользователь выполняет действие, влияющее на общую оценку.

Используя ваш пример, всякий раз, когда пользователь выполняет действие X, добавьте 2 к баллу пользователя. Для действия Y добавьте 1 к счету, а для действия Z вычтите 3.

Если вы не хотите обновлять счет при каждом действии, вы можете написать задачу Rake, которая обновляет счет; взгляните на этот урок , чтобы узнать, как использовать Rake с Rails. Если вы развертываете свое приложение в Unix-подобной ОС, запускайте задачу через регулярные интервалы, используя cron .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...