Hyperloglog 算法简介
这个网站简单地介绍了 Hyperloglog 这个算法。该算法适用于非精确估计 count(distinct)
这种场景,它的优点是只用几KB内存就能处理上G的数据,而不像常规的 len(set(e for e in data))
这样耗内存或者上 map-reduce 那样架构复杂。
- 算法
- 添加一条记录:获得
hash(row)
, 将 hash 剩余的0计数,归纳进 hash 头几位标记的 bucket 中。 - 计数:找出 bucket 中最大的数,应用上纠正算法(例如 LinearCount,即可得到估计的数值,在示例的数据集上做实验,偏离率在 2% 左右。
- 添加一条记录:获得
- Redis 实现了 pfcount 算法,即是 hyperloglog 的应用。
- Hyperloglog++ 做了一些算法上的升级使内存消耗更低,小数据集上的错误率更小。
简而言之:这个算法快猛糙,快速做估计时很有用。