Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке HyperLogLog?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)HyperLogLog (HLL) у Redis - імовірнісна структура даних для підрахунку кількості унікальних елементів (cardinality) з мінімальними витратами пам'яті: займає ~12 КБ незалежно від кількості елементів, з точністю приблизно ±0.81%, і не зберігає самі значення. **Ключове:** на відміну від Set, HyperLogLog не дає точний результат і не дозволяє перебирати елементи чи перевіряти належність - лише наближену кількість, тому підходить для DAU/MAU, аналітики трафіку й великих обсягів подій, а не там, де потрібна 100% точність.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**HyperLogLog (HLL) у Redis** - це **імовірнісна структура даних** для **підрахунку кількості унікальних елементів** (cardinality) **з мінімальними витратами пам'яті**. ## Простими словами Якщо тобі потрібно дізнатися: - скільки **унікальних користувачів** зайшло на сайт, - скільки **унікальних IP / подій / ID** було, - і при цьому **не зберігати всі значення**, → **HyperLogLog** вирішує цю задачу **дуже ефективно**. ## Ключові властивості | Властивість | Значення | |---|---| | Тип | Імовірнісний алгоритм | | Призначення | Підрахунок унікальних значень | | Пам'ять | ~12 КБ **незалежно від кількості елементів** | | Точність | ≈ **±0.81%** | | Швидкість | Дуже висока | | Зберігає самі значення? | Ні | Важливо: HLL **не повертає самі елементи**, лише **наближену кількість**. ## Як працює (інтуїтивно) 1. Елементи **хешуються** 2. Аналізується розподіл бітів 3. За математичною моделлю оцінюється кількість унікальних значень Redis зберігає **компактне статистичне представлення**, а не список значень. ## Команди Redis для HyperLogLog ### `PFADD` - додати елементи ```redis PFADD users 1 2 3 4 ``` ### `PFCOUNT` - отримати кількість унікальних ```redis PFCOUNT users ``` ### `PFMERGE` - об'єднати кілька 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**Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.