Elasticsearch的游标查询

4 4月

在做大批量查询的时候,比如批量导出数据的时候可以使用游标(scroll)查询,单纯的setFrom分页的方式在数据量变大以后性能下降。

用游标可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价。

具体的时候很简单就是需要维持一个scrollId,也就是首次查询以后就会获得一个scrollId,然后后面的查询传递这个scrollId就可以查询下一批数据。

游标查询的本质其实就是缓存了一个查询结果,然后分批返回,scrollId用base64解码可以查看,本质上对应了缓存的结果。

既然用到了缓存那肯定存在缓存管理的问题,这里有两个点

  1. 所有游标查询都需要设置一个过期时间,超过过期时间以后的查询会报错。这里的过期时间在每次请求之后会延长,所以这里的过期时间是每批次的过期时间,而不是整个查询集合的时间
  2. 到了过期时间就会自动过期,释放空间,如果要提前释放可以主动调用ClearScrollRequest

如果缓存有效时间设置的过长,且没有回收,容易导致整个集群出现空间,所以这个值最好精确设置。

在当前场景(批量导出数据)下其实请求是连续的,只需要设置一个比较小的值,考虑本身的响应时间和可能的网络问题,根据具体场景1s~2s都是可以的。文档示例中是1分钟,最好根据自己的情况修改。

发表评论

电子邮件地址不会被公开。