2012-10-01 20 views
0

我試圖學習如何編寫像Reddit.com這樣的網站算法,其中有成千上萬的帖子需要排名。他們的排名算法就像這樣工作(你不必閱讀它,它更像是我的一個普遍問題):http://amix.dk/blog/post/19588如何儲存隨時間變化的帖子排名?

現在我有帖子存儲在數據庫中,我記錄他們的日期,他們每個人都有upvotes和downvotes領域,所以我存儲他們的記錄。我想弄清楚你如何存儲他們的排名?當具體職位具有排名值,但他們隨時間變化時,您如何存儲他們的排名?

如果沒有存儲它們,您是否每次用戶加載頁面時都對每篇文章進行排名?

你什麼時候會存儲文章?你運行一個cron作業,每隔x分鐘自動給每個帖子一個新的值?你存儲他們的價值?這是暫時的。也許,直到這個職位達到最低分數並被遺忘?

+0

可以將排名存儲在帖子行中,並且每當用戶上/下行/不行時更新它。然後,你可以得到一些,按排名排序。 –

+0

我很確定這個問題在6個月前被問到。你應該尋找那個線程。 –

回答

0

你很可能會使用某種緩存。除了post_time,up_votesdown_votes之外,您還有current_ranklast_ranked。如果last_ranked將超過20分鐘,則您將再次排名,如果不是,則顯示緩存的排名。

一種不同的方法是每次帖子投票或投票時,以及定期(每X分鐘)排名和保存排名(即current_rank),那麼你可以問數據庫的排名,在它會(很漂亮)最新。

1

我沒有真正閱讀的排名系統中說明,如果我是正確的,他們不關心當前時間,但時間提交後的。這意味着得分將在兩點上改變; 1)當帖子被提交時,2)當某人發起或降低發帖

因此,當你發佈某些東西時,以及某人發起或降低發言時,你必須(重新)計算得分。重新計算分數對於服務器來說並不那麼重(實際上根本不是),所以只需重新計算票數即可!