2017-03-21 2 views
1

HyperlogログはRedisのHLLの文書によると、確率的アルゴリズム あるHLL、我々はエラーの0.81パーセントを得ることができるが、私は17から20パーセントRedisのは、あまりにも多くの偽陽性

私は間違って何かがあると思うのようなエラーが発生します。これは私の単純な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"; 
+1

ユニークなものを数えることに関してhyperloglogはありません。同じことを何度も繰り返していますか? – Sobrique

答えて

3

HyperLogLogはユニークなアイテムのカウントに使用されます。これは、少しのメモリを持つ多数のアイテムをカウントすることができます。ただし、返されるカーディナリティは正確ではありませんが、standard errorで近似されます。

0.81%は、standard errorであり、偽陽性ではありません。あなたの場合、PFCOUNT HLLに電話して、HyperLogLogに入れた固有のアイテムの近似数を得ることができます。返される数値は[10000 * (1 - 0.81%), 10000 * (1 + 0.81%)]の範囲にある必要があります。

PFADDは、コマンドの実行後に推定基数が変更された場合は1を返します。それ以外の場合は0を返します。それはfalse positiveとは関係ありません。

あなたが必要と思われるものはBloom Filterです。アイテムが偽陽性のデータセットに既に存在するかどうかを知ることができます。もちろん、RedisでBloom Filterを実装することもできます。そして、そのためのオープンソースプロジェクトがいくつかあるはずです。

+0

はい、私はBloom Filterが必要ですが、サーバーとして使用してください。私は複数あるので – Ram

+0

はい、私はブルームフィルタが、サーバーとして必要です。私は異なるサーバーから複数のアプリケーションを持っているからです。それらのすべては、特定の要素がセット内に存在するかどうかをチェックする必要があります。これは非常に効率的でなければならず、セットは2〜3ヶ月間永続的です。使用可能な準備完了Bloomフィルタサーバがありますか? – Ram

+1

@Ram前述したように、ブルームフィルタを実装するバックエンドサーバとしてRedisを使用できます。あなたはオープンソースプロジェクトのためにgoogleすることができます。また、luaスクリプトと 'GETBIT'コマンドと' SETBIT'コマンドで自分で実装するのは難しくありません。 –

関連する問題