Hyperlog日志是一种概率算法
根据 redis HLL 文档,我们可能会得到 0.81% 的错误,但我得到的错误是 17-20%
我认为有问题..这是我的简单 perl 测试脚本。有没有什么错误
#!/usr/bin/perl -w
use Redis;
my $redis = Redis->new(server=>'192.168.50.166:6379') or die;
my $fp=0;
my $HLL="HLL";
$redis->del($HLL);
foreach my $i (1..10000) {
my $s1 = $redis->pfadd($HLL,$i);
if($s1 == 0){
print "False positive on $i\n";
$fp++;
}
}
print "count of false positives $fp\n";
HyperLogLog
用于计算唯一项目。它可以用很少的内存来计算大量的项目。但是,返回的基数并不精确,而是近似为standard error
.
0.81% is the standard error
,而不是误报。对于您的实例,您可以调用PFCOUNT HLL
获取您放入的唯一项目的大约数量HyperLogLog
。返回的数字应该在以下范围内[10000 * (1 - 0.81%), 10000 * (1 + 0.81%)]
.
PFADD
如果执行命令后估计基数发生更改,则返回 1。否则返回 0。与以下无关false positive
.
看来你需要的是布隆过滤器 https://en.wikipedia.org/wiki/Bloom_filter,它可以告诉您数据集中是否已存在某个项目,并且存在误报。您可以实施一个Bloom Filter
当然是使用 Redis。应该有一些开源项目来实现这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)