美文网首页Elastic Search
Elasticsearch cardinality度量误差实测

Elasticsearch cardinality度量误差实测

作者: RaferYY | 来源:发表于2017-11-28 19:47 被阅读92次

cardinality度量是一个近似算法。它是基于HyperLogLog++(HLL)算法的。HLL 会先对我们的输入作哈希运算,然后根据哈希运算的结果中的 bits 做概率估算从而得到基数。
我们不需要理解技术细节(如果确实感兴趣,可以阅读这篇论文),但我们最好应该关注一下这个算法的特性
可配置的精度,用来控制内存的使用(更精确 = 更多内存)。
小的数据集精度是非常高的。
我们可以通过配置参数,来设置去重需要的固定内存使用量。无论数千还是数十亿的唯一值,内存使用量只与你配置的精确度相关。
要配置精度,我们必须指定precision_threshold参数的值。这个阈值定义了在何种基数水平下我们希望得到一个近乎精确的结果。参考以下示例:
precision_threshold接受 0–40,000 之间的数字,更大的值还是会被当作 40,000 来处理。
示例会确保当字段唯一值在 100 以内时会得到非常准确的结果。尽管算法是无法保证这点的,但如果基数在阈值以下,几乎总是 100% 正确的。高于阈值的基数会开始节省内存而牺牲准确度,同时也会对度量结果带入误差。
对于指定的阈值,HLL 的数据结构会大概使用precision_threshold * 8字节的内存,所以就必须在牺牲内存和获得额外的准确度间做平衡。
在实际应用中,100的阈值可以在唯一值为百万的情况下仍然将误差维持 5% 以内。

上面是官方文档的描述

实际上,我的请求测试,当文档很多的时候,这个误差还是很可观的:
Req

POST /xxx/_search
{
    "size" : 0,
    "aggs" : {
        "distinc_count" : {
            "cardinality" : {
                "field" : "xx.keyword",
                "precision_threshold": 100
            }
        }
    }
}

Resp

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "hits": {
    "total": 570470,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "distinc_count": {
      "value": 11158
    }
  }
}

Req

POST /xxx/_search
{
    "size" : 0,
    "aggs" : {
        "distinc_count" : {
            "cardinality" : {
                "field" : "xx.keyword",
                "precision_threshold": 10000
            }
        }
    }
}

Resp

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "hits": {
    "total": 570470,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "distinc_count": {
      "value": 10736
    }
  }
}

提高了precision_threshold,得到高的精度估算精度,耗时当然也提高了点(因为之前请求过,所以有缓存,这么低的时延,正常应该几十毫秒)。精度到10000,就基本没误差了。

相关文章

  • Elasticsearch cardinality度量误差实测

    cardinality度量是一个近似算法。它是基于HyperLogLog++(HLL)算法的。HLL 会先对我们的...

  • High cardinality下对持续写入的Elasticse

    High cardinality下对持续写入的Elasticsearch索引进行聚合查询的性能优化 背景 最近使用...

  • D33 线性方程的最优化学习

    一元线性回归方程中怎么确保与真实测量值的可靠程度? 我们所知的是测量值与真实值存在误差,这种误差为参差,这种误差是...

  • 线性模型

    一般向量形式为 1.线性回归 性能度量 均方误差 (square loss)= ...

  • 2.机器学习_模型误差

    模型误差=偏差+方差+数据本身误差 偏差:度量了学习算法的期望预测与真实结果的偏离程度,既刻画了算法本身的拟合能力...

  • 统计反馈(以前叫 Cardinality Feedback)

    Cardinality Feedback Cardinality Feedback基数反馈是版本11.2(11.2...

  • 均方根误差-RMSE

    RMSE是精确度的度量,用于比较特定数据集的不同模型的预测误差,而不是数据集之间的预测误差,因为它与比例相关。 R...

  • 偏差和方差

    偏差度量的是函数或者参数的误差期望。对于机器学习,偏差意味着样本的输出与真实值之间的误差,即模型本身的精确程度。 ...

  • About Loss Function All You Need

    损失函数 namemeaningcost function成本函数是模型预测的值与实际值之间的误差的度量,成本函数...

  • 机器学习 Chapter 3 线性模型

    均方误差 是回归任务中最常用的性能度量, 对应几何的“欧氏距离”最小二乘法基于均方误差最小化进行模型求解的方法 广...

网友评论

    本文标题:Elasticsearch cardinality度量误差实测

    本文链接:https://www.haomeiwen.com/subject/mqnebxtx.html