2010-05-04 136 views
0

我正嘗試在我的網站上用mysql創建類似於stackoverflow「user score」的東西。我不希望每次訪問用戶時計算此分數,因爲多個用戶分數將同時顯示,並且計算方式不需要頻繁更新。我的想法是更新所有用戶表中的分數行的定時的基礎上(每小時,每天,等等),這是它會是什麼樣子:Ruby on Rails:定時更新表記錄

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

但我如何去在這個運行定時間隔?這甚至是完成我想要做的最好的方法嗎?有沒有我應該做的某種緩存呢?謝謝!

+2

對不起,讓你重複,但爲什麼不更新分數時,對任何進入該分數進行了一些改變(例如,當他們或某人做某些事情導致他們失去/獲得積分)? – 2010-05-04 14:21:09

+0

是的,請參閱我爲Pär所做的評論。 – JackCA 2010-05-04 15:04:28

回答

3

您可以在給定時間間隔內計算得分,而不必每當用戶執行影響總得分的操作時更新用戶的得分。

使用您的示例,每當用戶執行操作X時,將2添加到用戶的分數。對於動作Y,將分數加1,對於動作Z減去3.

如果您不想在每個動作中更新分數,則可以編寫一個更新分數的Rake任務;請參閱this tutorial以瞭解如何使用Rake with Rails。如果您要在類似unix的操作系統上部署應用程序,請使用cron定期運行任務。

+0

太棒了!唯一的一點是我不想立即獎勵用​​戶,因爲「x_action」的作用方式是他們正在註冊一個將來會發生的事件,並且我只想在事件時間後更新他們的分數已經過去了*。我寧願使用你的第一個選項,如果有辦法像這樣做... – JackCA 2010-05-04 15:03:48

+0

好吧,這是一個完全有效的理由,不立即更新比分。在這種情況下,編寫一個更新分數並添加定期運行任務的cron作業的小型rake任務可能是一條可行的路。 – 2010-05-04 15:08:17