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