gpt4 book ai didi

php - 如何使用 Reddit 和 Hacker News 排名算法?

转载 作者:IT老高 更新时间:2023-10-29 00:00:41 31 4
gpt4 key购买 nike

我最近一直在研究排名算法,特别是 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 中运行。那么它们究竟是如何以及何时使用的呢?

一种可能的解决方案是从每个帖子中获取所有相关信息,并将其存储在网络服务器上的某种数据结构中。然后对这个数据结构进行排序和排序。

每次有人打开显示排名帖子的页面时,您只需转到数据结构,检索正确的帖子范围并显示它们。

然后每半小时左右,您从服务器检索最新信息,对其进行排名、排序并更新数据结构。

每次打开相关页面时,都可以在 SQL 中完成其他成本较低的查询,例如从特定帖子中检索和显示所有信息,或显示最新帖子(而不是最高得分)。

优点是您的数据库每半小时只被访问一次(对于昂贵的排名查询)。缺点是您需要复制大量数据库。

最佳答案

我为视频聚合器实现了 Reddit 排名算法的 SQL 版本,如下所示:

SELECT id, title
FROM videos
ORDER BY
LOG10(ABS(cached_votes_total) + 1) * SIGN(cached_votes_total)
+ (UNIX_TIMESTAMP(created_at) / 300000) DESC
LIMIT 50

cached_votes_total 会在每次投出新投票时由触发器更新。它在我们当前的站点上运行得足够快,但我计划添加一个排名值列并使用与 cached_votes_total 列相同的触发器对其进行更新。经过优化后,它对于大多数任何规模的网站都应该足够快。

编辑:更多信息请访问 Reddit Hotness Algorithm in SQL

关于php - 如何使用 Reddit 和 Hacker News 排名算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5262224/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com