【问题标题】:Efficient way to merge-sort distributed index postings for pagination合并排序分布式索引发布以进行分页的有效方法
【发布时间】:2014-01-14 13:21:19
【问题描述】:

这是分布式搜索引擎系统,在 1 秒内处理 50 ~ 100 个请求。

每个搜索请求都需要在多个服务器之间合并排序搜索的文档。

有1个主服务器和N个从服务器。

每个从服务器都有带有分数数据的文档 ID 列表 (Entry[])。

条目如下。

|文档 ID (int) |分数数据 (byte[]) |

主服务器必须对每个从服务器条目列表进行合并排序并制作页面数据(例如:5000~5100)

限制1) 不要使用大内存。无法一次对内存中的整个文档进行合并排序。 限制2)不要使用临时文件。临时文件可能会使搜索系统变慢。

如果用户想要 N 个文档从 R 开始(表示排名 R)然后 ..


解决方案-1) 1.在每个从服务器上制作top R + N排序列表并将其发送到主服务器。 (使用堆结构) 2. 主服务器归并排序,使Top R+N 3. 返回从R开始的N个文档

问题-1) 1.每个从服务器都要维护内存中的Top R+N个文档 2.如果master在内存中获取每个slave服务器R + N个文档,可能会出现Outofmemory错误。


解决方案-2) 1.每个从服务器向主服务器发送未排序的带有分数数据的文档列表。(以数据块为内存限制) 2. 主服务器做n-way归并排序

问题 2) 1.用户只需要N个文档,但从服务器必须发送整个文档列表。(网络传输数据太大)


对于这种情况还有其他好的解决方案吗?

我认为从 R 制作排序的 N 个文档需要计算每个文档列表驻留在从服务器之间,对吗?

哪个好? “本地排序和远程合并”还是“远程整个列表”?

我在过去 1 周遇到了困难。

提前致谢。

【问题讨论】:

    标签: algorithm sorting search search-engine


    【解决方案1】:

    你应该从不同的角度来看待这个问题。 显示稍后的结果页面是一项高成本的工作,并且很少使用。 搜索引擎必须提供排名靠前的用户想要的文档。 用户必须能够在不到 10 页的时间内找到有意义的文档。 例如,亚马逊只为总搜索结果提供前 20 个页面,为特定类别的搜索结果提供 400 个页面。 这意味着如果搜索引擎提供高质量的结果,没有人需要数千个结果页面。 查看此文档:http://www.slideshare.net/songaal/ss-30031348

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-25
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多