Серия статей «Играем с Redis» в основном описывает базовые и расширенные приложения Redis. Эта статья является [9] статьей из серии «Игра с Redis». Чтобы просмотреть последнюю серию статей, перейдите по ссылкеПубличный аккаунт "zxiaofan"просмотр, илиПоиск Baidu «играть в Redis zxiaofan»Вот и все.
Ключевые слова в этой статье: игра с Redis, ежедневная/ежемесячная активность Weibo, UV-статистика, HyperLogLog;
контур
- С какими проблемами сталкивается ежедневная статистика данных
- Можно ли использовать растровые изображения для подсчета ежедневных действий?
- Особенности ежедневной статистики активности
- Введение в Гиперлоглог
- Гиперлоглог должен знать
- Разница между HyperLogLog и наборами
- Как используется HyperLogLog
- Сравнительный анализ команд HyperLogLog
- Подробное объяснение команды HyperLogLog
- Меры предосторожности при использовании команды HyperLogLog
- Пример команды HyperLogLog
- Сценарии применения HyperLogLog
Глоссарий
- DAU (Daily Active User) количество активных пользователей в день
Он часто используется для отображения работы веб-сайтов, интернет-приложений или онлайн-игр. DAU обычно подсчитывает количество пользователей, которые вошли в систему или использовали продукт в течение одного дня (статистический день) (удалить пользователей, которые повторно вошли в систему);
- Ежемесячный активный пользователь (MAU)
Количество ежемесячно активных пользователей обычно подсчитывается в течение одного месяца (статистический месяц), количество пользователей, которые вошли в систему или использовали продукт (исключая пользователей, которые повторно вошли в систему);
- Примечание. Ежедневная активность и ежемесячная активность отражают активность пользователя, но не могут отражать прилипчивость пользователя.
1. С какими проблемами сталкивается ежедневная статистика данных
26 февраля 2020 года Weibo опубликовала финансовый отчет за четвертый квартал и полный год за 2019 год. Данные показывают, что по состоянию на конец 2019 года число активных пользователей Weibo в месяц достигло 516 миллионов человек, что на 54 миллиона больше, чем на конец 2018 года, из которых на мобильные устройства приходится 94%. В 2019 году годовой доход Weibo увеличился до 12,24 млрд юаней, из которых доход от рекламы достиг 10,6 млрд юаней.
1.1 Можно ли использовать растровые изображения для подсчета ежедневных действий?
Преамбула«Как играть с Redis-JD.com, чтобы войти и получить Jingdou»Упоминается применение растровых изображений в больших данных, поэтому можно ли использовать растровые изображения для подсчета данных о ежедневной активности? Проведем расчетный анализ (для примера возьмем 100 миллионов пользователей):
Статистические методы | Расчет занятости | 100 миллионов пользователей занимают место (M) |
---|---|---|
MySQL 32-битный тип данных int | Место для хранения, необходимое для 1 int, составляет 4 байта, что может хранить 32 бита. | 10 ^ 8 / (1024 * 1024 * 8 / 32) ≈ 381 М |
Redis Bitmaps | Bitmaps single поддерживает 512M, в отличие от int, который хранит только 32 бита. | 10 ^ 8 / (1024 * 1024 * 8) ≈ 12М |
Используйте растровые изображения для расчета ежедневной активности и ежемесячной активности:
- Рассчитать ежедневную активность: битовый ключ, чтобы получить номер ключа 1;
- Рассчитать ежемесячную активность: Либо посчитать все битмапы за 30 дней, а потом посчитать биткаунт;
- Рассчитать коэффициент удержания: Вчерашнее удержание = количество людей, которые непрерывно входили в систему вчера и сегодня / количество людей, которые входили в систему вчера, то есть вчерашнее и сегодняшнее растровое изображение вычисляются и делятся на количество битовых отсчетов вчера.
С помощью приведенных выше расчетов мы обнаружили, что растровые изображения уже очень экономят место. Подсчитать суточную активность сайта уже не проблема, но помимо ежедневной активности крупным интернет-компаниям также необходимо считать UV, PV и т.д. Перед лицом тысяч или даже более модулей, которые необходимо посчитать, 1 модуль требует 12M в один день, 12M*365/1024 ≈ 4,3G в год, а 1000 модулей в год требует 12M*365/1024/1024 ≈ 4,2 т. Так что революция еще не удалась, надо еще спасать!
1.2 Особенности ежедневной статистики активности
- Данные должны быть дедуплицированы;
- Данные могут иметь определенное отклонение, и разница между 101 Вт и 102 Вт невелика;
- Занимать как можно меньше места;
2. Введение в HyperLogLog
2.1. HyperLogLog должен знать
HyperLogLog (HLL) — этоВероятностные структуры данных для расчета кардинальности, с точки зрения непрофессионала, заключается в поддержке статистики неповторяющихся элементов в коллекции.
Регулярный расчет количества элементов требует подготовки памяти для хранения подсчитанных элементов, чтобы избежать повторного подсчета некоторых элементов. Redis предоставляетОбменяйте точность на объем памятиалгоритм со стандартной ошибкой менее 1%. Для завершения статистики нужно всего 12 КБ (плюс немного байтов, требуемых самим HLL), и чем меньше элементов в HyperLogLog, тем меньше требуемый объем памяти.Стандартная ошибка HyperLogLogs составляет 0,81%..
Когда количество или объем входных элементов очень велико, пространство, требуемое HLL, фиксировано и мало.12 КБ памяти для вычисления оснований, близких к 2^64 различным элементам.
Хотя техническая реализация HyperLogLog представляет собой другую структуру данных, базовым уровнем по-прежнему являются строки Redis, поэтому вы можете использовать команду GET для получения сериализованных данных и использовать команду SET для десериализации данных и сохранения их в Redis.
2.2 Разница между HyperLogLog и Sets
Контраст/тип данных | Sets | HyperLogLog |
---|---|---|
Действительно ли хранить статистические элементы | место хранения | Не сохранять элементы, хранить только существующие теги |
добавить элемент | SADD | PFADD |
количество элементов | SCARD | PFCOUNT |
удалить элемент | SREM | Удаление элементов не поддерживается |
3. Как использовать Гиперлоглог
[базовые команды HyperLogLog]: PFADD, PFCOUNT, PFMERGE;
3.1 Сравнительный анализ команд HyperLogLog
Заказ | Функции | параметр |
---|---|---|
PFADD | Добавьте элементы в структуру данных HLL | key element [element ...] |
PFCOUNT | Возвращает базовое значение HLL | key [key ...] |
PFMERGE | Объединить несколько данных структуры HLL в ключ назначения | destkey sourcekey [sourcekey ...] |
Значение PF в рабочей команде HLL: аббревиатура имени Филиппа Флажоле, изобретателя структуры данных HyperLogLog.
3.2 Подробное объяснение команды HyperLogLog
3.3 Меры предосторожности для команд HyperLogLog
- PFADD хранит только тег, а не сам элемент;
- PFCOUNT на самом деле является командой записи, и значение счетчика может быть пересчитано и сохранено при выполнении PFCOUNT;
- При наличии нескольких ключей PFCOUNT будет динамически комбинироваться и вычисляться, а результаты расчета не будут кэшироваться, поэтому старайтесь избегать использования нескольких ключей при выполнении PFCOUNT в производственной среде;
- При наличии нескольких ключей PFCOUNT сначала объединяется, а затем вычисляется, и результатом является значение кардинальности после объединения нескольких объектов (примечание: не сумма значений кардинальности);
- PFMERGE вычисляет объединение исходных ключей;
- Если ключ назначения уже существует, конечным результатом ключа назначения после выполнения PFMERGE является объединение получателя+источника;
3.4 Пример команды HyperLogLog
// pfadd、pfcount 示例 @zxiaofan
127.0.0.1:6379> pfadd hll 1
(integer) 1
127.0.0.1:6379> pfadd hll 1
(integer) 0
127.0.0.1:6379> pfadd hll 2 3 4
(integer) 1
127.0.0.1:6379> pfcount hll
(integer) 4
127.0.0.1:6379> pfcount hll:notexist
(integer) 0
127.0.0.1:6379> pfadd hll2 a b
(integer) 1
127.0.0.1:6379> pfcount hll2
(integer) 2
127.0.0.1:6379> pfcount hll hll2
(integer) 6
127.0.0.1:6379> get hll
"HYLL\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00A\xee\x84[v\x80Mt\x80Q,\x8cC\xf3"
127.0.0.1:6379> set hll:error error666
OK
127.0.0.1:6379> pfcount hll:error
(error) WRONGTYPE Key is not a valid HyperLogLog string value.
// pfmerge 示例 @zxiaofan
127.0.0.1:6379> pfadd hllm1 1 2 3 4 5
(integer) 1
127.0.0.1:6379> pfadd hllm2 5 6 7 8
(integer) 1
127.0.0.1:6379> pfmerge hllm3 hllm1 hllm2
OK
127.0.0.1:6379> pfcount hllm3
(integer) 8
127.0.0.1:6379> pfadd hllm4 7 8 9 10 11 12 14 14
(integer) 1
127.0.0.1:6379> pfmerge hllm4 hllm1 hllm2
OK
127.0.0.1:6379> pfcount hllm4
(integer) 13
4. Сценарии применения HyperLogLog
4.1 Ежедневная активность веб-сайта
Ежедневная активность: один HLL в день, идентификатор пользователя PFADD HLL20200719 при входе пользователя в систему;
Ежемесячная активность: объедините все данные о ежедневной активности за текущий месяц, PFMERGE HLL202007 HLL20200701 HLL20200702 HLL20200703...
4.2. УФ веб-страницы
UV (уникальный посетитель) уникальный посетитель: в течение 1 дня; cookie является идентификатором; несколько посещений одним и тем же клиентом учитываются только как 1 посетитель.
Например, начальник хочет видеть в режиме реального времени, сколько уникальных посетителей посетили те или иные страницы сайта компании с 0:00 сегодняшнего дня по настоящее время.
4.3 Другие сценарии
- Объем поиска по ключевому слову поисковой системы;
- Статистика по количеству пользователей онлайн;
- Сценарии анализа данных на основе подсчета кардинальности.
[Серия статей Fun with Redis @zxiaofan]
«Как играть с Redis-JD.com, чтобы войти и получить Jingdou»
«Игра с Redis — Boss поможет вам понять распределенные блокировки»
«Игра с Redis — как эффективно получать доступ к массивным данным в Redis»
«Игра с Redis — ключевые команды, которые должны знать продвинутые программисты»
«Игра с Redis — команды подключения, которые должен знать отдел исследований и разработок»
«Поиграйте с Redis-Redis Advanced Data Structure and Core Commands-ZSet»
«Поиграйте с базовой структурой данных Redis-Redis и основными командами»
«Поиграйте с установкой Redis-Redis, фоновым запуском, удалением»
Удачи тебе!