这一周把第二部分知识点的PPT过了一遍,对于深分页查询比较有感触,我们在使用关系型数据库MySQL也经常遇到这样的问题,ElasticSearch有三种解决方案,以及各自适用场景如下:
from+size
使用from+size方式进行分页,受max_result_window默认参数10000条文档的限制,不建议针对该参数进行修改。
默认分页方式,适用小数据量场景,大数据量场景应避免使用。
通过性能测试,随着分页越来越深,执行时间和堆内存使用逐渐升高的趋势,在并发情况下from+size容易 造成集群服务的OutOfMemory问题。
Scroll
Scroll游标方式分页查询适用大数据量场景,只能向后增量查找,无法向前或者跳页查询,适用增量滚动抽取、数据迁移、重建索引等场景。
通过性能案例分析,滚动分页查找性能消耗相差不大,不会像from+size方式随着分页的深入性能逐渐升高的问题,且不会存在OOM问题。
该分页方式是查询的历史快照,对文档的更改(索引的更新或者删除)只会影响以后的搜索请求,不适用实时性查询场景。
search_after
分页方式弥补了 scroll 方式打开scroll 占用内存资源问题。
search_after可并行的拉取大量数据。
search_after分页方式通过唯一排序值定位,将每次需要处理的数据控制在一定范围,避免深度分页带来的开销,适用深度分页的场景。
下一周还需要重点看下这章相关知识点。