“Наш проект успешен и растёт! Нам нужно знать, что происходит в системе, давайте собирать статистику.”
Что ж, легко!… Но… нет.
Если в 2011 году мы запихнули бы все данные в MySQL и радовались, то в 2021 году вариантов много, и придётся выбирать.
Допустим, нам понадобилось как-то хранить, обрабатывать статистику и выводить пользователю данные. Куда всё это запишем? Рассмотрим некоторые решения.
Здесь не буду рассматривать ElasticSearch, так как ещё не внедрял его ни на один проект, в отличие от остальных решений.
1. MySQL, PostgreSQL
- ✅ Скорее всего одна из этих БД уже есть в вашем проекте и не нужно устанавливать, достаточно добавить таблицы.
- ✅ Программисты уже умеют с ними работать.
- ❌ Агрегация, очистка данных ложится на плечи программиста
MySQL, PostgreSQL я бы выбрал если есть жёсткие ограничения по стеку. Админы отказываются ставить “ещё одну чёртову БД”, или нет времени на обучение программиста, потому что “надо уже вчера”.
Агрегацию и очистку данных придётся делать самостоятельно, поэтому будет больше работы. Но если поначалу объёмы данных небольшие, агрегацию и очистку данных можно отложить на потом… Когда-нибудь 😏
2. Redis
- ✅ Встроенная очистка данных
- ✅ Держит большие нагрузки без дополнительной настройки
- ❌ Ограниченный объём
- ❌ Нельзя делать сложные выборки, нет SQL
Redis хорошо подходит, если данные очень просты, небольшие по объёму и их не страшно потерять. Например, стоит задача сделать Realtime мониторинг инфраструктуры с обзором за неделю. Redis великолепно справится.
Максимальное быстродействие достигается когда все данные умещаются в память, поэтому лучше держать объём базы не более нескольких сотен мегабайт.
Не забываем ставить “время жизни” для данных, чтобы Redis почистил всё за вас.
3. ClickHouse
- ✅ Достаточно удобная агрегация средствами БД через “Materialized View”
- ✅ Развитые аналитические функции
- ✅ Высокая скорость на чтение
- ✅ Используется во многих проектах
- ❌ Очистку данных делать самому
- ❌ Сложна в поддержке - жёсткие схемы таблиц, дополнительный прокси для вставки данных пачками, документация ниже среднего
ClickHouse идеально подходит для бизнес-данных, где каждая строка имеет значение.
Например, у нас рекламная система и мы считаем клики, заказы, вырученные суммы, процент подтверждённых заказов. Всё это нам нужно исследовать с разрезами по источникам трафика, типам устройств, дням, времени суток, геолокации и прочим параметрам, влияющим на конверсию.
Грубо говоря, мы считаем суммы по разным критериям и сравниваем, где больше, ищем что для нас более выгодно.
4. InfluxDB
- ✅ Встроенная очистка данных
- ✅ Встроенная агрегация
- ✅ Развитые аналитические функции
- ✅ Отличная интеграция с Grafana
- ❌ Нужно уговорить админов поставить малознакомую им БД
- ❌ Начиная с версии 2.0 нет поддержки SQL
- ❌ Начиная с версии 2.0 сильно ухудшились командные утилиты для бесплатной версии
InfluxDB больше подойдёт в случае, если каждая отдельная строка неважна и важны только измерения.
Пример - мониторинг инфраструктуры с хранением данных за долгий период. Нам не так важно, 10 раз в час замерили скорость или 5 раз в час.
Главное, чтобы общая картина не изменилась и мы могли отследить пики, провалы, улучшения и ухудшения метрик.
В отличие от бизнес-данных, мы здесь ничего не суммируем.
Всё это вполне рабочие решения, на каждом из них я делал статистику.
Что выбрать, зависит от вашей задачи и характера данных.
Самое время пойти к бизнесу и задать уточняющие вопросы )