日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

白话Elasticsearch47-深入聚合数据分析之Cardinality Aggs-cardinality算法之优化内存开销以及HLL算法

發布時間:2025/3/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 白话Elasticsearch47-深入聚合数据分析之Cardinality Aggs-cardinality算法之优化内存开销以及HLL算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • 官方說明
  • precision_threshold優化準確率和內存開銷
  • HyperLogLog++ (HLL)算法性能優化


概述

繼續跟中華石杉老師學習ES,第47篇

課程地址: https://www.roncoo.com/view/55


官方說明

Cardinality Aggregation:戳這里


precision_threshold優化準確率和內存開銷

原始數據:

統計下有多少個不同的品牌

DSL:

GET /tvs/sales/_search {"size" : 0,"aggs" : {"distinct_brand" : {"cardinality" : {"field" : "brand","precision_threshold" : 100 }}} }

注意下 "precision_threshold" : 100 的意思是: brand去重,如果brand的unique value,在100個以內,小米,長虹,三星,TCL,HTL。。。 在多少個unique value以內,cardinality,幾乎保證100%準確 。

cardinality算法,會占用precision_threshold * 8 byte 內存消耗,100 * 8 = 800個字節 占用內存很小。。。而且unique value如果的確在值以內,那么可以確保100%準確

precision_threshold,值設置的越大,占用內存越大, 假設設置 1000,那么1000 * 8 = 8000 / 1000 = 8KB,可以確保更多unique value的場景下,100%的準確

field,去重,count,這時候,unique value,10000, precision_threshold=10000,10000 * 8 = 80000個byte,80KB


HyperLogLog++ (HLL)算法性能優化

cardinality底層算法:HLL算法,HLL算法的性能會對所有的uqniue value取hash值,通過hash值近似去求distcint count,存在誤差 .

默認情況下,發送一個cardinality請求的時候,會動態地對所有的field value,取hash值;

優化的話: 將取hash值的操作,前移到建立索引的時候 ,如下

PUT /tvs/ {"mappings": {"sales": {"properties": {"brand": {"type": "text","fields": {"hash": {"type": "murmur3" }}}}}} }

這樣在執行同樣的查詢的話,就不會在請求的時候執行hash值了。

GET /tvs/sales/_search {"size" : 0,"aggs" : {"distinct_brand" : {"cardinality" : {"field" : "brand.hash","precision_threshold" : 100 }}} }

總結

以上是生活随笔為你收集整理的白话Elasticsearch47-深入聚合数据分析之Cardinality Aggs-cardinality算法之优化内存开销以及HLL算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。