Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mediawiki 维基百科';s";这里有什么链接;工作_Mediawiki_Wikipedia - Fatal编程技术网

Mediawiki 维基百科';s";这里有什么链接;工作

Mediawiki 维基百科';s";这里有什么链接;工作,mediawiki,wikipedia,Mediawiki,Wikipedia,我最近使用了Wikipedia的函数“What links here”(该函数位于任何条目左侧菜单的“Toolbox”元素下),这让我开始想知道该函数实际上是如何工作的。 我猜在链接之后搜索所有文章条目不是很有效,所有链接都存储在单独的数据库中吗?如果是这样的话,这是在编辑文章时更新的还是在其他时间更新的 谢谢。每当编辑Wikipedia上的页面时,都会将其放入后台队列中进行进一步处理。在那里发生的一些事情有: 其他页面的“此处链接”更新 类别索引页的更新 更新现有页面的全局缓存,以帮助在其他

我最近使用了Wikipedia的函数“What links here”(该函数位于任何条目左侧菜单的“Toolbox”元素下),这让我开始想知道该函数实际上是如何工作的。
我猜在链接之后搜索所有文章条目不是很有效,所有链接都存储在单独的数据库中吗?如果是这样的话,这是在编辑文章时更新的还是在其他时间更新的


谢谢。

每当编辑Wikipedia上的页面时,都会将其放入后台队列中进行进一步处理。在那里发生的一些事情有:

  • 其他页面的“此处链接”更新
  • 类别索引页的更新
  • 更新现有页面的全局缓存,以帮助在其他页面上呈现“红链接”
当您点击“提交”时,这种信息不需要立即更新,因此后台处理队列会处理它。有时,这个队列可能会变得相当大,但通常是在控制之下的


关于这方面的更多信息,请访问。

我实现的方法是在编辑后获取所有链接,然后将它们存储在一个单独的表中,其中键为当前url。然后,我可以用用户当前所在的URL查询表,并获取所有标记为链接到该页面的链接


它可能不会那么简单,但这是一个普遍的,简化的想法。存储页面ID等可能比存储URL更明智。

文章的“更新事件”触发链接解析器是有意义的,因为这是文章唯一要更改的时间。更新事件只需扫描链接,然后查询数据库中wikipedia内部的链接

我设想每个页面都有一个主键,并创建一个简单的关联表,将页面PK与链接到它的所有其他页面关联起来


在这样一个大的站点上,可能会添加一些额外的位来提高性能,但这将是基本的机制。

您可以认为这是一个更普遍的问题。如果你有一个从a到B的链接(或指针或其他什么),B怎么知道a有一个指向那里的链接


答案是将信息存储到目标位置。也就是说,当编辑页面A并创建到B的链接时,同时存储关于到B的链接源的信息(反向链接)。对于网页,反向链接可以直接写入“what links here”页面。只需在静态页面中写入一次。无需执行任何搜索或数据库查询。

一个简单算法的伪代码

procedure updateChanges(editedPage):
    for_each(link on editedPage):
        if(link is not to another wikipedia page): continue
        pageToUpdate = open(link):
        if(pageToUpdate->whatLinksHere.contains(editedPage)): continue
        pageToUpdate->whatLinksHere.insert(editedPage)
对不起,我刚刚完成了我的算法课程,所以我很想写伪代码。在此上下文中,
updateChanges()
过程将在Greg Hewgill提到的“更新其他页面的“此处链接”阶段调用