Algorithm 合并排序分布式索引日志以进行分页的有效方法

Algorithm 合并排序分布式索引日志以进行分页的有效方法,algorithm,sorting,search,search-engine,Algorithm,Sorting,Search,Search Engine,这是一个分布式搜索引擎系统,在1秒内处理50~100个请求 每个搜索请求都需要在多个服务器之间合并排序搜索的文档 共有1台主服务器和N台从服务器 每个从属服务器都有带有分数数据的文档id列表(条目[]) 条目如下所示 |文档id(int)|分数数据(字节[])| 主服务器必须合并排序每个从属服务器条目列表并生成页面数据(例如:5000~5100) 限制1)不要使用大内存。无法对内存中的整个文档进行合并排序。 限制2)不要使用临时文件。临时文件可能会使搜索系统变慢 如果用户希望N个文档从R开始(表

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

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

共有1台主服务器和N台从服务器

每个从属服务器都有带有分数数据的文档id列表(条目[])

条目如下所示

|文档id(int)|分数数据(字节[])|

主服务器必须合并排序每个从属服务器条目列表并生成页面数据(例如:5000~5100)

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

如果用户希望N个文档从R开始(表示秩R),则


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

问题1) 1.每个从属服务器都必须在内存中维护顶级R+N文档 2.如果主服务器在内存中获取每个从属服务器的R+N文档,则可能会发生Outofmemory错误


解决方案2) 1.每个从属服务器将未排序的文档列表和分数数据发送到主服务器。(按内存限制的数据块) 2.主服务器不进行n向合并排序

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


这个案子还有其他好的解决办法吗

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

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

我上个星期被卡住了


提前谢谢。

你应该从另一个角度考虑这个问题。 后期显示结果页是一项高成本的工作,而且很少使用。 搜索引擎必须为用户提供排名靠前的所需文档。 用户必须能够在10页以内找到有意义的文档。 例如,amazon仅为总搜索结果提供前20页,为Category指定的搜索结果提供400页。 这意味着,若搜索引擎提供高质量的结果,那个么并没有人需要数千个结果页面。 查看此文档: