我最近一直在研究排名算法,特别是Reddit和Hacker News使用的算法.算法本身很简单,但我不太明白它们是如何使用的.
我可以做的一件事是直接在SQL中实现算法,这样每次用户访问显示排名帖子的页面时,这样的事情就会运行:
SELECT thing1, thing2 FROM table
ORDER BY ranking_algorithm DESC
LIMIT page*20, 20
Run Code Online (Sandbox Code Playgroud)
在SO上有几个类似的问题,但唯一的答案是将排名算法放在SQL查询中.然后线程死了......
将算法放在SQL查询中的规模较小,但如果网站有大量用户和大量帖子会怎么样?这意味着每次任何用户打开显示排名帖子的页面时,都会运行该查询.这不是非常有效.
现在,Reddit和Hacker News不会将他们的排名算法作为SQL查询运行,而是分别在python和ark中运行.那么它们究竟是如何以及何时使用的?
一种可能的解决方案是从每个帖子中获取所有相关信息,并将其存储在Web服务器上的某些数据结构中.然后对此数据结构进行排序和排序.
每当有人打开显示排名帖子的页面时,您只需转到数据结构,检索正确的帖子范围并显示它们.
然后每半小时左右,您从服务器检索最新信息,对其进行排名,排序并更新数据结构.
其他较便宜的查询,例如检索和显示特定帖子的所有信息,或显示最新帖子(而不是最佳得分)可以在每次打开相关页面时在SQL中完成.
优点是您的数据库每半小时才被命中(对于昂贵的排名查询).缺点是您需要复制大量数据库.