Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Hyperloglog 简析
Search
onlyice
January 25, 2021
Programming
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Hyperloglog 简析
描述了在面对海量数据时,如何利用 HyperLogLog 做去重和统计,以及它背后的概率原理。
onlyice
January 25, 2021
Other Decks in Programming
See All in Programming
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
300
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
ChromeでローカルLLM
ryu1013
0
140
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
260
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
残高管理から台帳サービスへの進化
artoy
1
200
AmebaブログはKMPから卒業します
kmars0605
0
190
Event is what happens
moro
2
780
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.9k
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
170
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
150
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Chasing Engaging Ingredients in Design
codingconduct
0
360
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
The Curious Case for Waylosing
cassininazir
1
570
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
400
Building Applications with DynamoDB
mza
96
7.2k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
4 Signs Your Business is Dying
shpigford
187
23k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Transcript
HyperLogLog 简析 林志衡 blog.zhiheng.io 2021/01/23
问题 大数据量去重统计,比如页面 UV。 2
传统方法 把全部数据加入 Set。 优点:精确 缺点:内存消耗巨大 概率方法 HyperLogLog 算法。 优点:内在消耗很少 缺点:不精确,但误差可以控
制在 1% 以内 3
什么是概率方法? 4
一个简单例子 将原始数据通过哈希算法随机生成一批均匀 分布在 [0, 1) 的数字。 只要随机过程足够均匀,比如图中的 hash(x)。 那么: 估算的元素个数
= 1 / 最小的 hash 值 缺点: 如果最小的哈希值碰巧很小,那么估算误差 巨大。 5
另外一种方法 计算末尾连续 0 个数。 前提: 1. 哈希算法计算出来的值是均匀分布的整数 2. 均匀分布的整数中,末位是连续 n
个 0 的 概率为 2^n 结论: 计算一批哈希值中,末位连续 0 最多的数字, 比如是连续 R 位。那么: 估算的元素个数 = 2^R 6
连续末尾 0 计数法 缺点: 1. 估算出来的元素个数 只能是 2 的次方 2.
估算结果可能 不精确(当碰巧出现末尾连 续 0 比较多时) 7
优化精确度 使用多个 hash 函数,生成多批哈希值并估算 出多个元素个数值,再做平均值。 优点: 避免单个 hash 函数带来可能的大误差。 缺点:
计算量成倍增加。 8 LogLog 算法, 1. 取哈希值的前几位作为桶(bucket,也称 register) 2. 按前几位的不同,把数字分入不同的桶中 3. 各个桶分别计算出元素个数,再估算出总 数 优点: 1. 通过分桶实现与多个 hash 函数一样的效果 2. 计算量不会大量增加
LogLog 算法 9 比如取前 4 位来生成桶。 有 2^4 即 16
个桶( 表示)。 数字按其前 4 位分到不同桶。 每个桶可以统计出最长的连续末 尾 0 位数,比如图中桶 11 的结 果为 5(R11 表示)。 将不同桶的结果取算术平均数。 套入下面的公式: 即可计算出更精确的元素个数。 CARDINALITY = ⋅ ⋅ 2 1 σ=1 R 没有研究数学推导的过程。 constant 取值为 0.79402。 这种方式的误差在 1.3/ 。
进一步提升精确度 10 SuperLogLog: 去掉异常值、使用几何平均数。 精确度提升到 1.05 。 HyperLogLog: 使用调和平均数。 精确度提升到
1.04 。
Redis 的 HyperLogLog 实现 11 • Hash 值为 64 位整数
• 使用前 14 位作为桶(register),一共 16K 个桶(16384 ) • 误差在 0.81%
参考 12 1. HyperLogLog in Presto: A significantly faster way
to handle cardinality estimation https://engineering.fb.com/2018/12/13/data-infrastructure/hyperloglog/ 2. Redis new data structure: the HyperLogLog http://antirez.com/news/75
Thanks! 林志衡 blog.zhiheng.io 13