Elasticsearch聚合优化 | 聚合速度提升5倍!

这篇具有很好参考价值的文章主要介绍了Elasticsearch聚合优化 | 聚合速度提升5倍!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、聚合为什么慢?

大多数时候对单个字段的聚合查询还是非常快的, 但是当需要同时聚合多个字段时,就可能会产生大量的分组,最终结果就是占用 Elasticsearch大量内存,从而导致 OOM 的情况发生。 实践应用发现,以下情况都会比较慢:

  • 1)待聚合文档数比较多(千万、亿、十亿甚至更多);
  • 2)聚合条件比较复杂(多重条件聚合);
  • 3)全量聚合(翻页的场景用)。

2、聚合优化方案探讨

优化方案一:默认深度优先聚合改为广度优先聚合。

"collect_mode" : "breadth_first"

复制

  • depth_first 直接进行子聚合的计算
  • breadth_first 先计算出当前聚合的结果,针对这个结果在对子聚合进行计算。

优化方案二: 每一层terms aggregation内部加一个 “execution_hint”: “map”。

 "execution_hint": "map"

复制

国内解释最详细的版本来自Wood大叔:

Elasticsearch聚合优化 | 聚合速度提升5倍!,elasticsearch,大数据

Map方式的结论可简要概括如下: 1)查询结果直接放入内存中构建map,在查询结果集小的场景下,速度极快; 2)但如果待结果集合很大的情况,map方式不一定也快。

优化方案N

待进一步深入实践......

3、做个实验

聚合的平衡点是多少呢?

3.1 实验场景

场景一:在近亿的document中,检索满足给定条件的数据,并对聚合结果全量聚合。 场景二:在百万级别的document中,全量聚合。 场景三:在近亿级别的document中,全量聚合。

3.2 聚合操作

POST index_*/_search { "sort": [ { "nrply": "desc" } ], "aggs": { "count_over_sin": { "terms": { "field": "sin_id", "execution_hint": "map", "size": 1000, "collect_mode": "breadth_first" } } }, "size":0 }

1)修改索引名称,以获取更多的文档。 2)map模式添加 “execution_hint”: “map”,默认是global_ordinals模式。 3)”size”: 1000,设定聚合取值。

3.3 聚合结果

Elasticsearch聚合优化 | 聚合速度提升5倍!,elasticsearch,大数据

3.4 结果分析

对比场景一与场景二、三,说明:

  • 当结果集合比较少的时候,map聚合方式明显速度更快,速度提升了接近5倍!
  • 当结果集合比较大的时候(百万——亿级别)的时候,传统的聚合方式会比map方式快。

4、小结

  • global_ordinals是关键字字段( keyword field )的默认选项,它使用 全局顺序(global ordinals) 来动态分配存储区,因此内存使用情况与作为聚合作用域一部分的文档值的数量成线性关系。
  • 只有极少数文档与查询匹配匹配时才应考虑使用map方式。 默认情况下,只有在脚本上运行聚合时才会使用map,因为它们没有序号( ordinals )。否则,基于 顺序(ordinals) 的执行模式会相对更快。

参考: http://t.cn/R8WI6QD http://t.cn/R8WIKta https://elasticsearch.cn/question/1008 http://t.cn/R8WIpYn文章来源地址https://www.toymoban.com/news/detail-789470.html

到了这里,关于Elasticsearch聚合优化 | 聚合速度提升5倍!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch-数据聚合

    目录 介绍  实际操作 DSL实现Metrics聚合(嵌套聚合) RestClient实现聚合(以酒店品牌为例) 实现对酒店品牌、城市、星级的过滤 补6.20: (32条消息) Elasticsearch 聚合查询(aggs)_龙源lll的博客-CSDN博客_elasticsearch聚合查询 介绍 聚合: 实现对文档数据的统计、分析以及运算,类似于

    2023年04月09日
    浏览(34)
  • elasticsearch——数据聚合

    聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类: 桶(Bucket)聚合:用来对文档做分组       TermAggregation:按照文档字段值分组        Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组 度量(Metric)聚合:用以计算一

    2023年04月24日
    浏览(32)
  • elasticsearch的数据聚合

    聚合可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近实时搜索效果 聚

    2024年02月09日
    浏览(35)
  • Elasticsearch 8.X DSL 如何优化更有助于提升检索性能?

    根据我的实战和咨询经验,我发现如下几个问题。 当然,这是在和球友交流确认问题之后总结出来的。 2.1 问题1:bool 组合嵌套过深。 官方实际是有参数来约束的,indices.query.bool.max_nested_depth——bool 最大支持的嵌套层数是 20 ,并且过大的嵌套层数会导致“堆栈溢出”异常问

    2024年02月16日
    浏览(43)
  • Elasticsearch的数据聚合与报表

    Elasticsearch是一个分布式、实时的搜索和分析引擎,它可以处理大量数据并提供快速、准确的搜索结果。Elasticsearch的数据聚合功能可以帮助用户对搜索结果进行聚合和分析,从而生成报表和挖掘有价值的信息。在本文中,我们将深入探讨Elasticsearch的数据聚合与报表功能,揭示

    2024年02月22日
    浏览(32)
  • Elasticsearch --- 数据聚合、自动补全

    聚合(aggregations) 可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近实

    2024年02月04日
    浏览(45)
  • 【ElasticSearch】数据聚合语法与Java实现

    聚合(aggregations)可以实现 对文档数据的统计、分析、运算 。(类比MySQL的聚合函数)ES聚合常见的有三类: 桶(Bucket)聚合:用来对文档做分组 度量(Metric)聚合:用以计算一些值,比如:最大值、最小值、平均值等 管道(pipeline)聚合:基于其它聚合的结果为基础做聚

    2024年02月14日
    浏览(50)
  • 微服务学习|elasticsearch:数据聚合、自动补全、数据同步

    聚合 (aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类: 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组 Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组 度量(Metric)聚合:用以计算一些值,比如: 最大值、最小值、平均

    2024年02月04日
    浏览(57)
  • Elasticsearch 聚合数据结果不精确问题解决方案

    近期我们项目中出现使用ES聚合某个索引的数据取TOP 10的数据和相同条件下查询所有数据然后按数据量排序取的TOP 10的数据不一致的问题。 下面我们简单分析一下这个问题,列出一些常见的解决方案。 Elasticsearch分片机制 Elasticsearch索引(index)有一个主分片(primary shard)和

    2024年02月11日
    浏览(38)
  • ElasticSearch 数据聚合、自动补全(自定义分词器)、数据同步

    官方文档 = 聚合 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html 聚合:对文档信息的统计、分类、运算。类似mysql sum、avg、count 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组(相当于mysql group by) Date Histogram:按照日期阶梯分组,

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包