@kirill-93

Как правильно выносить данные аналитики в отдельное хранилище?

Есть база данных на MySQL, в которой лежат данные по музыкальным трекам и аналитика по ним.
Аналитики много, поэтому в какой-то момент было решено таблицу с аналитикой вынести в ClickHouse.
Это очень сильно помогло. Скорость выполнения запросов выросла на порядок.
Но из-за этого появилась другая неприятность. Теперь сделать запрос из двух таблиц - большая проблема. Например, мне нужно выбрать все треки (таблица в MySQL), которые были созданы в январе и отобрать 30 самых прослушиваемых (ClickHouse). Для того, чтоб выполнить такой запрос, нужно или выбирать id треков в MySQL, затем подставлять их в запрос ClickHouse, или хранить в ClickHouse дубликат таблицы с треками. Оба варианта ужасны.
В общем, перенос аналитики в CH - отличная штука, но как быть с вот такими неудобствами? Как вы работаете с несколькими хранилищами для связных данных?
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 3
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Ну, проблема в концептуальном не понимании что такое аналитика и Warehouse или Data Lake.
Во-первых давайте определимся чем аналитика отличается от метрик, агрегатов и отчетов.
  • Аналитику делают люди, не регулярно, скорость для них не важна
  • Отчеты происходят автоматически на регулярной основе. Для них важна периодичность
  • Метрики нужны чтобы что-то измерять во временном ряду
  • Агрегаты - сбор данных из разных источников вне зависимости от остальных факторов


Если мы все еще говорим про аналитику то она не должна обращаться к живым данным вообще. Ее складывают в отдельный Warehouse или Data Lake и анализируют по необходимости. Основными инструментами являются Power BI, Tableau или даже пресловутый Excel.

Если мы говорим про репортинг то чтобы не нагружать живую систему к нему применяются те же правила что и для аналитики.

Если мы говорим про метрики то для них отдельный сервис строится, из которого получают дашборды, API и все в таком духе
Ответ написан
Комментировать
@vitaly_il1
DevOps Consulting
хранить в ClickHouse дубликат таблицы с треками

Я за этот вариант. То есть все нужное для аналитики хранить в ClickHouse.
Ответ написан
Комментировать
2ord
@2ord
Рекомендательные системы, как правило, необязательно выдают данные в реальном времени. Поэтому я предлагаю другой вариант работы с данными:
некоторый фоновый процесс будет получать какие-то метрики из API сервиса и будет временно хранить данные в Mysql в количестве, достаточном для пакетной отправки в ClickHouse. Другой процесс будет периодически производить запросы в ClickHouse, а результаты рекомендаций хранить в Mysql. Таким образом, все запросы из API сервиса можно обрабатывать обращаясь только к Mysql.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы