我正在尝试学习如何对像Reddit.com这样的网站算法进行编码,其中有数千个帖子需要排名。他们的排名算法就像这样(你不必阅读它,它更像是我的一般性问题):http://amix.dk/blog/post/19588
现在我有一些存储在数据库中的帖子,我记录了他们的日期,他们每个都有一个upvotes和downvotes字段,所以我正在存储他们的记录。我想知道你如何存储他们的排名?当特定帖子具有排名值,但它们随时间变化时,您如何存储其排名?
如果没有存储,那么每次用户加载页面时,您是否对每个帖子进行排名?
你什么时候存储帖子?你是否运行一个cron作业来每隔x分钟自动为每个帖子提供一个新值?你存储它们的价值吗?这是暂时的。也许,直到那篇文章达到最低分并被遗忘?
答案 0 :(得分:1)
我确实阅读了排名系统的解释,如果我是正确的,他们不关心当前的时间,但提交帖子的时间 。这意味着得分将在两点上改变; 1)提交帖子时,2)当某人上传或下调帖子时
所以你必须(重新)计算你发布的东西,以及当某人上升或下降时的分数。要重新计算得分对于服务器来说并不重要(实际上根本没有),所以只需重新计算投票更改!
答案 1 :(得分:0)
你很可能会使用某种缓存。除了post_time
,up_votes
和down_votes
之外,您还拥有current_rank
和last_ranked
。如果last_ranked
超过20分钟,则会再次对其进行排名,如果没有,则显示缓存的排名。
不同的方法是在每次帖子被投票或投票时,以及定期(每X分钟)对排名(即current_rank
)进行排名和保存,然后您可以向数据库询问等级,它会(非常)最新。