官网有写到
理解为什么深度分页是有问题的,我们可以假设在一个有 5 个主分片的索引中搜索。 当我们请求结果的第一页(结果从 1 到 10 ),每一个分片产生前 10 的结果,并且返回给 协调节点 ,协调节点对 50 个结果排序得到全部结果的前 10 个。
现在假设我们请求第 1000 页—结果从 10001 到 10010 。所有都以相同的方式工作除了每个分片不得不产生前 10010 个结果以外。 然后协调节点对全部 50050 个结果排序最后丢弃掉这些结果中的 50040 个结果。
可以看到,在分布式系统中,对结果排序的成本随分页的深度成指数上升。这就是 web 搜索引擎对任何查询都不要返回超过 1000 个结果的原因。
为啥说 查询 10001-10010 需要 每个分片不得不产生前 10010 个结果?
1
Olament 2021-02-20 18:18:39 +08:00 1
我们简化一下这个问题,我现在有 5 个数字的集合,我要找出这 5 个集合中第 10 大的数字,那么我是不是要找到每个集合前 10 大的数字然后汇总产生第 10 大的数字。
|
2
Vegetable 2021-02-20 18:34:12 +08:00 1
因为最靠前的 10010 个结果,可能集中在某一个节点上
|
3
fucUup 2021-02-20 18:48:35 +08:00
mapreduce 会遇到一样的问题
|