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条去满足
- 精准查找+实时要求: 那就没有大数据,数据量很小,数据量小的情况下,随便处理都可是实时满足要求
- 精准查找+大数据量:如hadoop,批处理,非实时,可以处理海量数据,保证精准,时间有可能几个小时,甚至十几个小时
- 大数据量+实时要求:采用近似估计,es结果不精准,可能会存在一定的错误率
至此 我们已经学习了 ES聚合算法易并行聚合算法及近似聚合算法及三角选择原则,要根据自己的场景去选择合适的计算方式,这样才能得出想要的结果