12 KB 里数清一千亿件事:HyperLogLog
来源:dev.to — 2026-09-16
📋 概述
作者用一个面试场景解释 HyperLogLog:若用哈希集合对上千亿请求 ID 精确去重,需要约 1TB 内存,或者干脆拆成四十台机器分片,为了回答「今天有多少不同的人来过」而维护一整套分布式系统。HyperLogLog 主动放弃精确性,用一组寄存器加调和平均数,把内存固定在约 12 KB。
🔑 核心要点
- 哈希集合精确的原因是记得一切,内存随去重数线性增长,分片和压缩都改不了这点。
- 日活只有几十万时哈希集合完全够用,到了数十亿就变成对云账单的赌注。
- 出路不是更大的哈希集合,而是有意识地放弃「精确」,换一个能塞进寄存器数组的估计量。
- 它不需要记住访客本身,因此数据结构的大小与请求量无关,只和精度参数有关。
- 作者把「用哈希表精确计数」和「绕一大圈做分片」都列为错解,正解是回到一个寄存器数组加调和平均数。
💡 金句
出路不是更大的哈希集合,而是有意识地放弃「精确」。
👍 0
👎 0
← 返回 dev.to 首页