2017-09-04 5 views
0

私はRedis HyperLogLogがどのように機能し、いつ使用するかについての基本的な考え方を持っています。
私はテストをしました:私はpfadd(ユーザーIDを模倣するために)いくつかの連続した数字をHLLエントリに書きました。そしてすぐにRedisは偽陽性結果を出しました。正確には、HLLエントリにpfaddという番号193がある場合、そのエントリに既に存在する202番が報告されます。あなたはRedisの-CLIでそれをテストすることがあります。Redis HyperLogLogはいつ避けるべきですか?

127.0.0.1:6379> del ns 
(integer) 0 
127.0.0.1:6379> PFADD ns 193 
(integer) 1 
127.0.0.1:6379> PFADD ns 202 
(integer) 0 

私はHyperLogLogは、確率的なデータ構造ですが、HLLは、このような偽陽性を与えるために、それはあまりにも簡単ではないことを知っていますか?私は何かを誤解しましたか?

答えて

2
  1. あなたは、PFADDの返事を誤解しました。それは存在を示すのではなく、データ構造の内部レジスタが変更されたかどうかを示します。
  2. HLLの使い方も誤解しています。メンバーシップを設定するのではなく、集合の基数(サイズ)を見積もります。

メンバーシップを設定する同様の(確率論的な意味で)データ構造については、Bloom FiltersとそのRedis実装、Rebloom(http://rebloom.io)をチェックしてください。

+0

こんにちは@Itamar、遅く返事を申し訳ありません。しかし、私はまだ混乱しています。それ以外の場合にはない、そのことは存在する - 一つのこととHLLエントリの基数の変更を追加します: 'PFADD'の返信は内部の変化を示し、HLLは単に見積もりカーディナリティに使用されている場合、私はHLLでメンバーシップをテストするために自然だと思うだろう。私は正しい? – adamsmith

関連する問題