Redis HyperLogLog

Redis добавил структуру HyperLogLog в версии 2.8.9.

Redis HyperLogLog — это алгоритм, используемый для статистики кардинальности. Преимущество HyperLogLog в том, что когда количество или объём входных элементов очень-очень велики, пространство, необходимое для вычисления кардинальности, всегда фиксировано и очень мало.

В Redis каждый ключ HyperLogLog требует всего 12 KB памяти для вычисления кардинальности почти 2^64 различных элементов. Это резко контрастирует с множествами, где чем больше элементов, тем больше памяти расходуется при вычислении кардинальности.

Однако, поскольку HyperLogLog вычисляет кардинальность только на основе входных элементов и не хранит сами входные элементы, HyperLogLog не может вернуть отдельные входные элементы, как это могут делать множества.


Что такое кардинальность?

Например, для набора данных {1, 3, 5, 7, 5, 7, 8} множество кардинальности этого набора данных — {1, 3, 5, 7, 8}, а кардинальность (количество различных элементов) равна 5. Оценка кардинальности — это быстрый расчёт кардинальности в допустимом диапазоне погрешности.


Пример

Следующий пример демонстрирует, как работает HyperLogLog:

redis 127.0.0.1:6379> PFADD examplekey "redis"

1) (integer) 1

redis 127.0.0.1:6379> PFADD examplekey "mongodb"

1) (integer) 1

redis 127.0.0.1:6379> PFADD examplekey "mysql"

1) (integer) 1

redis 127.0.0.1:6379> PFCOUNT examplekey

(integer) 3

Команды Redis HyperLogLog

В следующей таблице перечислены основные команды Redis HyperLogLog:

Нет.Команда и описание
1PFADD key element [element ...]
Добавляет указанный элемент в HyperLogLog.
2PFCOUNT key [key ...]
Возвращает оценку кардинальности указанного HyperLogLog.
3PFMERGE destkey sourcekey [sourcekey ...]
Объединяет несколько HyperLogLog в один HyperLogLog.
Другие расширения