HyperLogLog Introduction

Redis 開発者教育の申込 Redis 定期点検/技術サポート
Redis Technical Support
Redis エンタープライズサーバー
Redis Enterprise Server

紹介

HyperLogLog は集合の要素数を推定する方法で、2014年4月22日に発表された Redis version 2.8.9 に新たに追加されました。   この文書は version 4.0.9 を基準に作成しました。
  • 用途: 主に非常に大きなデータで誤差 1% 以下の近似値を求めるときに使います。 例えば、ある検索エンジンの1日の検索語数を計算するときに使えます。 メモリは非常に少なく使い、誤差は小さいです。
  • メモリ使用量: 最大の利点はメモリを非常に少なく使うことです。   Java HashSet や Redis Set を使う場合、要素数に応じてメモリを使います。 例えば Redis Set に100万個の数字を保存すると 4,848kb、1000万個の数字を保存すると 46,387kb を使いますが、 Redis HyperLogLog を使うと要素数に関係なく固定で 12kb だけ使います。 これは100万個の数字の Set と比べるとわずか 0.25% だけ使うことになります。
    Redis HyperLogLog では 16384 個のレジスタ(register)を使い、レジスタあたり 6bits を使うので使用メモリ量は 12kb です。   計算式: 16,384 * 6bits = 98,304bits / 8 = 12,288bytes
  • 要素数推定誤差: HyperLogLog の誤差は 1.04/SQRT(m) です。 m はレジスタ(register)数で、Redis では 16384 個を使うので誤差は 0.81% です。
  • HyperLogLog は 2007年に Philippe Flajolet が発表したアルゴリズムです。 HyperLogLog という名前は、以前のアルゴリズム Loglog Counting を発展させたため Hyper を付けたものです。
  • サルヴァトーレ(Salvatore)は Philippe Flajolet を称えるため HyperLogLog 関連コマンドに PF 接頭辞を使いました。
  • 保存(add)速度: HyperLogLog と Set の保存速度を比較するため100万件のデータを PFADD と SADD で入れました。 PFADD は 5.23秒、SADD は 8.64秒で、PFADD が約 1.6倍速かったです。
  • 取得速度: PFCOUNT と SCARD はどちらも O(1) です。Slowlog で確認したところどちらも 4 microseconds かかりました。
  • HyperLogLog データは別の data structure を使わず String を使います。String 内部は HyperLogLog data structure です。
  • 参考資料
  • Test Data

HyperLogLog コマンドリスト

CommandsVersionSyntaxDescription
PFADD2.8.9key ele [ele ...]要素(element)追加
PFCOUNT2.8.9key [key ...]要素数取得
PFMERGE2.8.9destkey sourcekey [sourcekey ...]集合マージ(Merge)

Total : 3


<< SCRIPT DEBUG HyperLogLog PFADD >>

Email 返事がかかってなれば、メールでお知らせします。