主要知识点:
- 什么是易并行算法
- 什么是不易并行算法
- 什么是三角选择原则
- 什么是近似聚合算法
一、易并行聚合算法(如max)
es是多分步式的结构的,所以当你做下个搜索或计算时都是会在各个node上执行,所以有些聚合分析的算法,是很容易就可以并行执行的,比如说max,你要在你的数据库中找一个最大的但,只需要两步
- 各个node都返回最大值给coordinary node
- coordinary node 根据各个node返回的值计算出最大值返回给应用程序
这两步在es中都是容易执行的(不会在coordinary node中占用大量内存,也不会在coordinary node占用大量cpu)
二、不易并行聚合算法(如count(distinct)
现在假设要计算count(distinct)。也就是说找出所有唯一值的总和,要执行这个算法es会执行以下几步
- 各个node找到当前node的唯一值(比如有100万条)返回给coordinary node。
- coordinary node接收到各个node所返回的唯一值后,再进行去重处理,然后根据去重后的结果求和,再返回给应用程序。
在这个过程中coordinary node会至少保留300万条(假设只有3个node)数据,并要对这300万条数据做处理,这样对coordinary node,不管是内存还是cpu的压力都很大,这就是不易并行聚合算法。
三、三角选择原则
在精准、实时、大数据 这三个条件中只能选择2个放弃一个。
- 精准+实时: 这样就不能处理大数据
- 精准+大数据:典型的就是hadoop,利用批处理技术,可以处理海量数据并保证精准,但是可能会跑几个小时
- 大数据+实时:典型的是es,采用近似估计的方式,可能会有百分之几的错误率,但是处理是近实时。
四、近似聚合算法
es对那些不易平行处理的算法是采用会近似聚合的方式,就是采用在每个node上进行近估计的方式,得到最终的结论,近似估计后的结果,不完全准确,但是速度会很快,一般会达到完全精准算法的性能的数十倍。es如果采取近似估计算未能延时在100ms左右,0.5%错误率。