我正在尝试使用Redis Hyperloglog以hacky的方式解决问题,但是我试图理解的是Hyperloglog对数据或分布的限制和假设。

count-min和Bloom过滤器有其自身的局限性,但是google在提供有关Hyperloglog的应用程序和局限性的信息方面并没有帮助。

我正在使用Redis Hyperloglog,并且Antirez描述there are no practical limits to the cardinality of the sets we can count.,但是从理论的 Angular 来看,Hyperloglog是否对数据或分布做出任何假设/约束?

最佳答案

HyperLogLog算法假定使用了强大的通用哈希函数。 Redis使用MurmurHash64A,从实际 Angular 来看应该足够好。 Redis HyperLogLog实现每个寄存器使用6位,从而可以表示64位哈希值内的任何位游程长度。因此,我看到的唯一限制是64位哈希值本身。如果基数在2 ^ 64的数量级,则将有许多哈希冲突,最终将导致较大的估计误差。但是,这种数量级的基数在实践中永远不会发生。

关于redis - Redis Hyperloglog限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36431499/

10-16 05:31