Що таке HyperLogLog?
HyperLogLog (HLL) у Redis - це імовірнісна структура даних для підрахунку кількості унікальних елементів (cardinality) з мінімальними витратами пам'яті.
Простими словами
Якщо тобі потрібно дізнатися:
- скільки унікальних користувачів зайшло на сайт,
- скільки унікальних IP / подій / ID було,
- і при цьому не зберігати всі значення,
→ HyperLogLog вирішує цю задачу дуже ефективно.
Ключові властивості
| Властивість | Значення |
|---|---|
| Тип | Імовірнісний алгоритм |
| Призначення | Підрахунок унікальних значень |
| Пам'ять | ~12 КБ незалежно від кількості елементів |
| Точність | ≈ ±0.81% |
| Швидкість | Дуже висока |
| Зберігає самі значення? | Ні |
Важливо: HLL не повертає самі елементи, лише наближену кількість.
Як працює (інтуїтивно)
- Елементи хешуються
- Аналізується розподіл бітів
- За математичною моделлю оцінюється кількість унікальних значень
Redis зберігає компактне статистичне представлення, а не список значень.
Команди Redis для HyperLogLog
PFADD - додати елементи
redis
PFADD users 1 2 3 4PFCOUNT - отримати кількість унікальних
redis
PFCOUNT usersPFMERGE - об'єднати кілька HLL
redis
PFMERGE all_users users_day1 users_day2Приклад реального кейсу
Унікальні користувачі за день
redis
PFADD visitors:2025-12-22 user_123
PFADD visitors:2025-12-22 user_456
PFCOUNT visitors:2025-12-22Навіть якщо користувачів 10 млн, пам'ять все одно ~12 КБ.
Порівняння з іншими підходами
Set
redis
SADD users user1 user2 user3
SCARD users| Set | HyperLogLog |
|---|---|
| Точно | Наближено |
| Зберігає значення | Ні |
| Пам'ять росте | Пам'ять фіксована |
| Підходить для аналітики | Так |
Коли варто використовувати HyperLogLog
Чудово підходить для:
- DAU / MAU / WAU
- аналітики трафіку
- подій, кліків, переглядів
- великих систем (мільйони / мільярди ID)
Не підходить, якщо:
- потрібна 100% точність
- потрібно перебирати елементи
- потрібен
exists,remove
Часті питання
Наскільки велика похибка?
Близько 0.81% Наприклад:
- реальне значення:
1 000 000 - результат:
~992 000 - 1 008 000
Чи можна зменшити похибку?
Ні, у Redis - розмір і точність фіксовані реалізацією.
Чи можна видаляти елементи?
Ні. Лише додавання.
Коротка формула вибору
Потрібна унікальна кількість + багато даних + мінімальна пам'ять → HyperLogLog
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.