elasticsearch学习系列-分布式系统中深度分页


本文介绍下ES中搜索的分页功能,据此也引出分布式系统中深度分页的问题

ES分页功能

  • elasticsearch接收form(开始返回的结果位置,从0开始)和size(返回的数量)参数;
  • 结果集在返回之前先排序,每个分片产生自己的排序结果,再集中排序保证整体顺序;

深度分页

  • 在分布式系统中,对结果排序的成本随分页的深度成指数上升;
  • 例:如我们有10个分片,要获取第1000页的数据,默认size为10,则没个分片产生100010个数据,最后
    对全部的1000100个结果排序并丢弃掉其中大部分的数据;
  • 参考大部分web搜索引擎对任何查询都不返回过多的结果;

游标查询 scoll

  • es可使用scoll进行大批量的文档查询,而不需要付出深度分页的代价;
  • 游标查询会取某个时间点的快照数据。 查询初始化之后索引上的任何变化会被它忽略。 它通过保存旧的数据文件来实现这个特性,结果就像保留初始化时的索引视图一样;
  • 深度分页的代价根源是结果集全局排序,如果去掉全局排序的特性的话查询结果的成本就会很低。 游标查询用字段 _doc 来排序。这个指令让 Elasticsearch 仅仅从还有结果的分片返回下一批结果

文章作者: Xudong Jiang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Xudong Jiang !
 上一篇
redis学习-复制功能 redis学习-复制功能
今天介绍下redis的复制功能 复制配置 参与复制的Redis实例划分为主节点(master)和从节点(slave) 复制的数据流是单向的,只能由主节点复制到从节 点。配置复制的方式有以下三种 在配置文件中加入slaveof{masterH
2020-02-11
下一篇 
qmq消息队列-高可用 qmq消息队列-高可用
今天分享下qmq高可用的特性 高可用说明qmq高可用主要从两个角度提供: 分片:qmq不是基于partition,可以很容易通过添加更多的记起提高一个subject的可用性,消息按照一定的负载均衡策略分布在不同的机器上,某台机器离线后pr
2020-01-19
  目录