0

我正在尝试学习如何编写像 Reddit.com 这样的网站算法,其中有成千上万的帖子需要排名。他们的排名算法是这样工作的(你不必阅读它,它更像是我的一个普遍问题):http ://amix.dk/blog/post/19588

现在我有帖子存储在数据库中,我记录了他们的日期,他们每个人都有一个赞成和反对的字段,所以我正在存储他们的记录。我想知道你如何存储他们的排名?当特定帖子具有排名值,但随着时间而变化时,您如何存储它们的排名?

如果它们没有被存储,您是否会在每次用户加载页面时对每个帖子进行排名?

你什么时候存储这些帖子?您是否运行 cron 作业以每 x 分钟自动为每个帖子赋予一个新值?你存储它们的价值吗?这是暂时的。也许,直到该帖子达到其最低分数并被遗忘?

4

2 回答 2

1

我确实阅读了排名系统的解释,如果我是正确的,他们不关心当前时间,而是提交帖子的时间。这意味着分数将改变两分;1) 当帖子被提交时,2) 当有人对帖子投赞成票或反对票时

因此,当您发布某些内容以及有人支持或反对投票时,您必须(重新)计算分数。重新计算分数对服务器来说并没有那么重(实际上根本没有),所以只需重新计算投票变化!

于 2012-10-01T11:39:16.387 回答
0

您很可能会使用某种缓存。除了post_time,up_votesdown_votes, 你还有一个current_rank, 和last_ranked。如果last_ranked超过 20 分钟,您将再次对其进行排名,如果没有,则显示缓存的排名。

一种不同的方法是current_rank在帖子被赞成或反对时以及定期(每 X 分钟)进行排名并保存排名(即) 最新。

于 2012-10-01T11:33:36.850 回答