• Elasticsearch实战(十九)---ES聚合算法易并行聚合算法及近似聚合算法及三角选择原则


    Elasticsearch实战-ES聚合算法易并行聚合算法及近似聚合算法及三角选择原则


    ElasticSearch聚合分析中的算法有三种

    • 易并行聚合算法
    • 近似聚合算法
    • 三角选择原则

    1.易并行聚合算法

    易并行聚合算法,存在多个分片节点和一个协调节点,协调节点会把所有所有共享节点的结果汇总进行最终计算,得出最终结果,比如聚合中的 max,min等
    所有分片节点计算max后,传递到协调节点,协调节点将所有的max值进行比较后得出最大的max值,然后返回客户端,这种方式就是易并行聚合算法

    如图:所有的shard分片 各自取数据,然后汇总到coordinate协调节点取处理,得出max
    在这里插入图片描述

    2.近似计算聚合算法

    近似聚合算法就是用近似值来进行统计计算,并不是完全准确,但是统计的效率非常高,效率是精准算法的数十倍,比如count(distinct)去重统计,就是采用的近似聚合算法
    每个分片都有1w的全部非重复数据,但是无法保证不同的几点钟数据一定不重复,如果是精确计算,需要把每个节点的1w全部非重复数据全复制传输到协调节点,比如有3个shard节点,1个协调节点

    • 如果是精确计算 那么协调节点需要传输3w的数据+自身1w的数据,等于协调节点需要处理4w的数据,进行去重统计,最终的到结果,精确计算适用于大数据批量处理,精度要求高,但是对于实时性要求低的这种场景,精确计算对于节点的计算和网络传输压力都非常大,所以ES对于count采用的是近似计算
    • 近似计算会出现5%的错误率,比如你现在有100条精确结果,如果使用近似聚合计算,得出的结果是 95-105条 之间,近似估计后的结果,不完全准确,但是速度会很快,一般会达到完全精准的算法的性能的数十倍

    如图,每个节点取100w个值,然后对每个节点都取count,然后对他们汇总处理,这里协调节点不是处理的全部数据,而是部分数据,所以就会有误差
    在这里插入图片描述

    3.三角选择原则

    对于聚合场景,无非以下三种场景,但是我们不能同时满足三条,比如你想精确查找且数据量较大,那么实时性要求就要降低,因为这么大的数据做精确计算,肯定耗时比较久,比如你想大数据量而且实时性要求高,那么你就采用近似计算,不要用精确查找,精确查找实时性肯定不能满足

    • 精准查找
    • 实时要求
    • 大数据量

    所以只能选择其中2条去满足

    1. 精准查找+实时要求: 那就没有大数据,数据量很小,数据量小的情况下,随便处理都可是实时满足要求
    2. 精准查找+大数据量:如hadoop,批处理,非实时,可以处理海量数据,保证精准,时间有可能几个小时,甚至十几个小时
    3. 大数据量+实时要求:采用近似估计,es结果不精准,可能会存在一定的错误率

    至此 我们已经学习了 ES聚合算法易并行聚合算法及近似聚合算法及三角选择原则,要根据自己的场景去选择合适的计算方式,这样才能得出想要的结果

  • 相关阅读:
    FRDM-MCXN947开发板之i2c应用
    vue3前端开发-flex布局篇
    AI:原来Nacos还能这么玩儿
    编写一个油猴脚本
    Python+Pytest+Allure+Git+Jenkins数据驱动接口自动化测试框架
    【Apache Flink】基于时间和窗口的算子-配置时间特性
    ElasticSearch笔记(四)--集群搭建
    【JDBC笔记】向数据表中插入Blob类型数据
    playwright自动化项目搭建
    Azure | AZ-204 认证之旅-应用服务(一)
  • 原文地址:https://blog.csdn.net/u010134642/article/details/125834396