“Наш проект успешен и растёт! Нам нужно знать, что происходит в системе, давайте собирать статистику.”

Что ж, легко!… Но… нет.

Если в 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 раз в час.

Главное, чтобы общая картина не изменилась и мы могли отследить пики, провалы, улучшения и ухудшения метрик.

В отличие от бизнес-данных, мы здесь ничего не суммируем.


Всё это вполне рабочие решения, на каждом из них я делал статистику.

Что выбрать, зависит от вашей задачи и характера данных.

Самое время пойти к бизнесу и задать уточняющие вопросы )