Reddit为Top帖子提供了不同的存储桶。他们有“今小时”,“今天”,“本周”,“本月”“今年”“所有时间”。我可以想到创建这些列表的最佳方法是使用时间戳保存每个投票,以便您可以计算每个存储桶的帖子得分。这将是一个昂贵的查询,但他们可以逃脱它,因为Top对所有用户都是相同的,并且不会发生太大变化,因此他们可以缓存查询结果。
这只是我对正在发生的事情的最好猜测,但我很好奇,这是Reddit实际上在做什么还是有更好的方法?
答案 0 :(得分:5)
首先,“这个小时”,“今天”,“本周”等都是指创建提交(链接/评论)时,而不是投票时。我将专注于此处的链接,但同样处理注释以在用户页面上显示。
简短回答:一堆cron作业拉出相关时间段,对链接进行排序并按subreddit对它们进行分组,然后存储缓存的链接列表以供快速阅读。
详细说明,对于每个时间段,都有不同的cron作业。例如,“今小时最佳”工作的运行频率远高于“今年最佳”工作。每个作业所做的第一件事是从数据库中下载所有在感兴趣的时间段内创建的链接的列表。这将被转储到文本文件中,其中原始map-reduce系统处理数据。链接被分组和排序。然后将最终的结果列表作为链接ID的简单列表放入Cassandra中,这些链接ID可以非常快速地在请求中查找。
来源:https://github.com/reddit/reddit/blob/master/scripts/compute_time_listings
FWIW,个人投票做附加了时间戳,但它们并不直接用于跟踪Top。