elastic search中易并行聚合算法,三角选择原则,近似聚合算法浅析

本文探讨了Elasticsearch中的并行聚合算法,如易并行的max,以及如何通过近似聚合处理大数据量的count(distinct)。Elasticsearch采用三角选择原则,在精准、实时和大数据之间进行权衡。文章还介绍了Cardinality指标用于去重,其错误率通常在5%,而HyperLogLog++ (HLL)算法则优化了性能。此外,文章还讨论了_percentiles算法用于统计访问时延和SLA,并提到了percentile ranks metric的优化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、有些聚合分析的算法,是很容易就可以并行的,比如说max

有些聚合分析的算法,是不好并行的,比如说,count(distinct),并不是说,在每个node上,直接就出一些distinct value,就可以的,因为数据可能会很多

es会采取近似聚合的方式,就是采用在每个node上进行近估计的方式,得到最终的结论,cuont(distcint),可能会有5%左右的错误率,近似估计后的结果,不完全准确,但是速度会很快,一般会达到完全精准的算法的性能的数十倍。

2、三角选择原则

精准+实时+大数据 --> 选择2个

(1)精准+实时: 没有大数据,数据量很小,一般就是单机跑;
(2)精准+大数据:hadoop,批处理,非实时,可以处理海量数据,保证精准,可能会跑几个小时;
(3)大数据+实时:es,不精准,近似估计,可能会有百分之几的错误率;

3、近似聚合算法

如果采取近似估计的算法:延时在100ms左右,0.5%错误;
如果采取100%精准的算法:延时一般在5s~几十s,甚至几十分钟,几小时, 但是0%错误;

4、es中去重操作;

使用cartinality metric,对每个bucket中的指定的field进行去重,取去重后的count,类似于count(distcint)

GET /tvs/sales/_search
{
  "size" : 0,
  "aggs" : {
      "months" : {
        "date_histogram": {
          "field": "sold_date",
          "interval": "month"
        },
        "aggs": {
          "distinct_colors" : {
              "cardinality" : {
                "field
### Elasticsearch 8 中的并行算法及其实现机制 Elasticsearch 是一种分布式搜索引擎,其设计目标之一就是高效利用集群中的多个节点来完成复杂的查询操作。在 Elasticsearch 8 版本中,并行化主要体现在以下几个方面: #### 1. 易并行聚合算法 Elasticsearch 提供了一种高效的易并行聚合算法,该算法的核心在于将大规模的数据集划分为更小的部分,在不同的分片上独立执行计算任务[^2]。这些子任务的结果随后被汇总到协调节点(coordinating node),最终形成完整的聚合结果。 具体来说,当用户发起一个聚合请求时,Elasticsearch 将会把此请求广播至所有相关的分片。每个分片都会在其本地数据范围内运行相应的聚合逻辑,生成部分结果。之后,协调节点负责收集来自各个分片的部分结果,并将其合并成全局视图。这种方式显著提高了性能,因为大部分工作负载可以分布在不同机器上并行处理。 #### 2. 近似计算聚合算法 除了精确的聚合外,Elasticsearch 还引入了近似计算方法以进一步提升效率。对于某些场景下不需要绝对精准度的应用程序而言,这种方法非常有用。例如 `cardinality` 聚合可以通过 HyperLogLog++ 算法估计唯一值的数量而无需完全遍历整个字段集合[^4]。这不仅减少了内存消耗还加快了响应速度。 以下是使用 cardinality metric 的示例代码: ```json GET /tvs/sales/_search { "size": 0, "aggs": { "months": { "date_histogram": { "field": "sold_date", "interval": "month" }, "aggs": { "distinct_colors": { "cardinality": { "field": "brand" } } } } } } ``` 在此例子中,“distinct_colors” 使用的是近似的 distinct count 方法来进行品牌数量统计。 #### 3. 向量化加速与 SIMD 支持 随着 Elasticsearch 对向量搜索的支持不断增强,特别是在版本 8 中加入了更多优化措施,其中包括对现代 CPU 架构特性的充分利用——即单指令多数据流(SIMD)[^3]。通过编译器自动矢量化或者手动编写汇编代码的方式,使得同一时间单位内能同时处理更多的数值运算,这对于涉及大量浮点数比较的操作尤为重要。 此外,RAG (Retrieval-Augmented Generation) 技术也被应用于提高检索质量的同时降低延迟成本。这项技术结合了传统 IR 和神经网络模型的优点,能够在不牺牲太多召回率的前提下大幅减少候选文档数目,进而简化后续排序阶段的工作负担[^3]。 #### 总结 综上所述,Elasticsearch 8 的并行算法主要包括但不限于:基于分片划分的任务分布模式;采用近似估算手段代替全盘扫描;以及借助底层硬件特性如 SIMD 来增强特定类型算式的吞吐表现等等。以上种种改进共同构成了当前这一代产品卓越性能的基础。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值