Random &引用;“随机文章”;wikipedia.com上的功能

Random &引用;“随机文章”;wikipedia.com上的功能,random,wiki,Random,Wiki,我想知道wikipedia使用什么算法和编程语言来随机选择要显示的文章 我也想知道它是如何工作得这么快的?来自: MediaWiki是一个自由软件wiki 最初是用PHP编写的包 在维基百科上使用。现在已经使用了 该项目的其他几个项目 非营利维基媒体基金会 许多其他维基,包括 网站,MediaWiki的家 MediaWiki是开源的,因此您可以下载并检查代码,以了解他们是如何实现此功能的。相关信息 每个项目在创建时都会被分配一个介于0和1之间的随机数(这些项目在SQL中被编入索引,这是快速选择的

我想知道wikipedia使用什么算法和编程语言来随机选择要显示的文章

我也想知道它是如何工作得这么快的?

来自:

MediaWiki是一个自由软件wiki 最初是用PHP编写的包 在维基百科上使用。现在已经使用了 该项目的其他几个项目 非营利维基媒体基金会 许多其他维基,包括 网站,MediaWiki的家

MediaWiki是开源的,因此您可以下载并检查代码,以了解他们是如何实现此功能的。

相关信息

每个项目在创建时都会被分配一个介于0和1之间的随机数(这些项目在SQL中被编入索引,这是快速选择的原因)。单击“随机文章”时,它会生成一个目标随机数,然后返回记录的随机数最接近此目标的文章

如果您感兴趣,可以阅读实际代码。


如果你看一下,他们使用PHP/MySQL对页面进行排序,并通过预先生成的随机值(
page\u random
column)过滤页面,这些随机值上有一个索引。

它如何返回记录的随机数最接近此目标的文章?你认为它会先对整个桌子排序吗?我想桌子已经排序了,是的。通过这种方式,您可以使用二进制搜索非常快速地插入和查找项目(应该是O(log(N))。如果对其进行排序,则会保留已排序的表,并以某种方式将新项目集成到其中。
 "SELECT cur_id,cur_title
        FROM cur USE INDEX (cur_random)
        WHERE cur_namespace=0 AND cur_is_redirect=0
        AND cur_random>RAND()
        ORDER BY cur_random
        LIMIT 1"