最近我一直在研究排名算法,特别是Reddit和Hacker News使用的算法。这些算法本身很简单,但我不太明白它们是如何被使用的。
我可以做的一件事是直接在SQL中实现该算法,这样每次用户访问显示排名帖子的页面时,会运行类似以下代码:
SELECT thing1, thing2 FROM table
ORDER BY ranking_algorithm DESC
LIMIT page*20, 20
在SO上有几个类似的问题,但唯一给出的答案是将排名算法放入SQL查询中。然后线程就死了...
把算法放到SQL查询中在小规模上是没问题的,但如果网站有大量用户和大量帖子呢?这意味着每当任何用户打开显示排名帖子的页面时,都会运行该查询。这肯定不够有效率。
现在,Reddit和Hacker News并没有在SQL查询中运行它们的排名算法,而是分别使用Python和Ark。那么它们究竟是如何使用的?
一个可能的解决方案是从每篇文章中获取所有相关信息,并将其存储在Web服务器上的某个数据结构中。然后对该数据结构进行排名和排序。
每次有人打开显示排名帖子的页面时,您只需访问数据结构,检索正确范围的帖子,并显示它们。
然后,每隔半小时左右,您就可以从服务器检索最新的信息,对其进行排名、排序并更新数据结构。
其他较少消耗资源的查询,比如检索并显示特定帖子的所有信息,或者显示最新的帖子(而不是最佳评分),可以在每次打开相关页面时使用SQL完成。
优点是您的数据库仅在每半小时进行一次昂贵的排名查询。缺点是您需要有大量数据库副本。