Redis HyperLogLog

Redis はバージョン 2.8.9 で HyperLogLog 構造を追加しました。

Redis HyperLogLog は基数を統計するためのアルゴリズムです。HyperLogLog の利点は、入力要素の数または量が非常に非常に大きい場合でも、基数の計算に必要なスペースが常に固定されており、かつ非常に小さいことです。

Redis では、各 HyperLogLog キーは 12 KB のメモリを消費するだけで、2^64 に近い個数の異なる要素の基数を計算できます。これは、基数を計算するときに要素が多ければ多いほどメモリを消費する集合(セット)とは対照的です。

ただし、HyperLogLog は入力要素に基づいて基数を計算するだけで、入力要素自体を保存しないため、集合(セット)のように入力された個々の要素を返すことはできません。


基数とは何か?

例えば、データセット {1, 3, 5, 7, 5, 7, 8} の場合、このデータセットの基数集合は {1, 3, 5, 7, 8} で、基数(重複しない要素の数)は 5 です。基数推定とは、許容可能な誤差の範囲内で、基数を高速に計算することです。


例

以下の例は HyperLogLog の動作プロセスを示しています:

redis 127.0.0.1:6379> PFADD サンプルkey "redis"

1) (integer) 1

redis 127.0.0.1:6379> PFADD サンプルkey "mongodb"

1) (integer) 1

redis 127.0.0.1:6379> PFADD サンプルkey "mysql"

1) (integer) 1

redis 127.0.0.1:6379> PFCOUNT サンプルkey

(integer) 3

Redis HyperLogLog コマンド

以下の表に Redis HyperLogLog の基本的なコマンドを示します:

番号コマンドと説明
1PFADD key element [element ...]
指定した要素を HyperLogLog に追加します。
2PFCOUNT key [key ...]
指定された HyperLogLog の基数推定値を返します。
3PFMERGE destkey sourcekey [sourcekey ...]
複数の HyperLogLog を 1 つの HyperLogLog にマージします。
その他の拡張