源码分析elasticsearch python的scan及scroll实现

上篇文章已经讲过elasticsearch scan scroll的用途, 他们是用来解决获取大数据返回时的性能问题.  有兴趣的朋友可以回顾下 scan,scroll的作用一篇. http://xiaorui.cc/?p=3072

这次聊下elasticsearch python客户端的实现。

该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。

http://xiaorui.cc/?p=3080


这里再废话说下scan scroll的作用:

scroll用来避免深度分页查找数据时的性能消耗,他会像curosr那样做数据的快照。

scan能避免scroll的排序性能消耗,from size分页查询模式会对数据集进行整体排序, 性能损耗是很大的. 如果我们关闭排序,那么可以消耗极少资源返回所有的文档。scan就是不去,而是仅仅从每个有结果的分片中返回数据.

下面是python elasticsearch helpers.scan的源码。对照elasticsearch scroll scan基本用法,很容易就能理解下面的代码。  话说elasticsearch-py把高性能的功能都继承在了helpers模块里,比如helpers.scan helpers.reindex streaming_bulk helpers.bulk  parallel_bulk .  

file: helpers/__init__.py

file: client/__init__.py

对于elasticsearch scanscroll的使用方法, 大家注意一下异常情况. 

Elasticsearch博大精深… …  经过我的线下线上测试,使用scroll scan的性能还是不错的,返回的速度不错,明显比那种from size分页要快速,而且节省了elasticsearch的检索资源。 

1 Response

  1. 巭孬嫑夯昆 2016年9月7日 / 上午11:12

    django 中的api开发 使用helper.scan 获取个50M左右的数据 就报 timeout 是什么原因呢

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">