HyperLogLog 是 Redis 的一种数据类型。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。HyperLogLog 的典型应用场景就是计算 uv。
但是 HyperLogLog 是存在误判的,官方介绍其标准误差为0.81%,所以如果你想精确的统计 uv,仅仅使用 HyperLogLog 是不够的。
我们不妨测试下:
import Redis |
输出如下:
➜ user-sai git:(main) ✗ python3 codesnippets/python/hyperloglog.py |
可以看到是有一些误判的。
因而,如果需要很精确地做类似去重计数任务, HyperLogLog 并不是一个好的方案,即便 HyperLogLog 又快又节省内存。
参考: