易并行聚合算法,存在多个分片节点和一个协调节点,协调节点会把所有所有共享节点的结果汇总进行最终计算,得出最终结果,比如聚合中的 max,min等
所有分片节点计算max后,传递到协调节点,协调节点将所有的max值进行比较后得出最大的max值,然后返回客户端,这种方式就是易并行聚合算法
如图:所有的shard分片 各自取数据,然后汇总到coordinate协调节点取处理,得出max
近似聚合算法就是用近似值来进行统计计算,并不是完全准确,但是统计的效率非常高,效率是精准算法的数十倍,比如count(distinct)去重统计,就是采用的近似聚合算法
每个分片都有1w的全部非重复数据,但是无法保证不同的几点钟数据一定不重复,如果是精确计算,需要把每个节点的1w全部非重复数据全复制传输到协调节点,比如有3个shard节点,1个协调节点
如图,每个节点取100w个值,然后对每个节点都取count,然后对他们汇总处理,这里协调节点不是处理的全部数据,而是部分数据,所以就会有误差
对于聚合场景,无非以下三种场景,但是我们不能同时满足三条,比如你想精确查找且数据量较大,那么实时性要求就要降低,因为这么大的数据做精确计算,肯定耗时比较久,比如你想大数据量而且实时性要求高,那么你就采用近似计算,不要用精确查找,精确查找实时性肯定不能满足
所以只能选择其中2条去满足
至此 我们已经学习了 ES聚合算法易并行聚合算法及近似聚合算法及三角选择原则,要根据自己的场景去选择合适的计算方式,这样才能得出想要的结果