加载中...
HyperLogLog是一种用极小内存估算海量数据集不重复元素个数(基数)的概率算法。它以牺牲少量精度为代价,用几千字节即可估计上亿量级的基数,被Redis等系统用于快速统计独立访客等去重计数场景。

| 中文名 | 超对数计数 |
| 英文名 | HyperLogLog |
| 提出者 | Philippe Flajolet等 |
| 提出年份 | 2007年 |
| 用途 | 基数估计 |
| 代表实现 | Redis PFCOUNT |
HyperLogLog是一种用于估计数据集中不同元素个数(即基数)的概率型算法。它无需存储全部元素,仅用固定的、极小的内存就能对海量数据的去重数量给出较高精度的估计,是大数据统计的经典利器。
精确统计一个大集合有多少个不重复元素,传统做法是把所有元素存进哈希集合,内存随基数线性增长,面对上亿量级时代价难以承受。HyperLogLog由研究者Philippe Flajolet等人于二零零七年提出,它基于对哈希值二进制前导零的观察进行概率推断,在保证误差可控的前提下把内存压缩到极致。
HyperLogLog广泛用于需要海量去重计数又不要求绝对精确的统计场景。Redis内置了PFADD、PFCOUNT等命令实现它,常用于统计网站独立访客数、独立IP数;大数据平台用它做用户去重、漏斗分析;数据库和分析引擎也用它加速COUNT DISTINCT类查询,以少量精度损失换取巨大的内存和性能收益。
问:HyperLogLog的结果准确吗?答:它是估计值而非精确值,存在约百分之一量级的标准误差。对于需要绝对准确的计费、对账等场景不适用,但对趋势性统计足够可靠。
问:为什么它这么省内存?答:因为它不保存任何原始元素,只维护固定数量桶里的前导零计数,内存与实际基数无关,这正是它能用几千字节估计上亿基数的原因。

| 中文名 | 超对数计数 |
| 英文名 | HyperLogLog |
| 提出者 | Philippe Flajolet等 |
| 提出年份 | 2007年 |
| 用途 | 基数估计 |
| 代表实现 | Redis PFCOUNT |
登录 后参与讨论
暂无讨论,来发表第一条评论吧