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 !
 上一篇
项目中接口性能优化 项目中接口性能优化
今天分享下项目中使用缓存对项目进行性能优化 背景 项目中流量高峰时,db的qps达到15k左右,线程数达到5k(服务器设置的最大连接数),创建链接最高耗费达到2s。数据库服务器的连接数以及cpu升高,处理能力下降,响应时间变长 接口提供的批
2020-04-13
下一篇 
记一次上线后服务器cpu飙升异常问题 记一次上线后服务器cpu飙升异常问题
今天记录分享一次服务上线后cpu飙升问题 问题经过和分析 项目的场景是接收各个系统的消息进行处理, 项目消费上线前,一些发消息的业务逻辑先上线,消息在消息队列内大量挤压 服务上线,没有对消息队列内消息reset处理,大量消息涌入 服务内部并
2020-01-11
  目录