Во второй версии мы решили оставить промежуточную postgress базу, но не делать на ней таблички, готовые для дашборда. Вместо этого мы сделали промежуточные таблички, которые потом можно использовать для нескольких дашбордов сразу. Следующим шагом понесли таблички в Clickhouse и сверху с помощью serverless функций делали таблицы для дашбордов.
Это решение сработало, но тратило дополнительные деньги на промежуточную базу.
Все эти сложности возникли потому, что изначально мы не хотели нагружать базу первоисточника, чтобы её не шатало. Создание промежуточного слоя данных – сложная операция, которая нагружает базу по ЦПУ и оперативке.
Clickhouse в принципе не предназначен для большого количества объединений. На большом объёме данных он плохо преобразует 20 таблиц в 3, потому туда нужно переносить только уже готовые таблицы.
Потому мы и пытались сделать промежуточную postgress базу, которая хорошо умеет соединять много таблиц в одну. Но в итоге получилась одна огромная таблица, которую было сложно читать на два раза на выходе.
Ещё это приводило к двум трансферам – из одной postgress базы в другую промежуточную, а затем в Clickhouse.
Весь этот процесс был дорогим, потому решили пойти другим путём. Протестировали, какая нагрузка будет на продовой базе, посмотрели, не перегружаем ли мы её запросами. Сделали фильтры, чтобы показывались не все данные, а только те, которые нужны клиентам, купившим аналитику.
В итоге мы решили собирать промежуточные слои данных сразу из продовой базы, нести их сразу в clickhouse и там уже делаем витрины для дашбордов. Сами витрины делаем физическими таблицами, прописываем для них индексацию для более быстрой работы.
Как реализовали итоговое решениеДанные мы складывали в Clickhouse (
Load), где уже раскладывали на витрины данных от клиентов (
Transformed).
Вычисление метрик происходит в базе данных, и уже готовые таблицы с метриками визуализируются дашбордами.
ELT процесс прокручивали с помощью Яндекс функций с ограниченным временем исполнения, для MVP времени выполнения хватало.
Под каждого клиента был отдельный дашборд и витрина, чтобы физически изолировать данные друг от друга.
https://datalens.yandex/938ncx75hvaqv тут можно посмотреть демодашбордПервую итерацию дашбордов мы сделали на postgress, который уже использовался в oltp базе. Тестовую базу сделали так, чтобы не шатать прод. Да, витрины были кривые, источники косые, но зато можно было увидеть конечный результат, как он будет выглядеть.
Дальше мы показали первую итерацию клиентам Teachbase, получили обратную связь и полностью пересобрали систему. Оказалось, что некоторые данные клиентам были не нужны, зато другие – в приоритете.
Например, внутри программы или курса обучения есть много видов данных: тесты, задания, документы, скормы и т.д. Мы оставили только данные по тестам и заданиям, а все остальные не собирали. Тем самым мы снизили нагрузку на систему.
Даже когда мы брали данные из системы только за последний месяц, то обработка была супер медленная, потому перенесли данные на кликхаус и вторую итерацию по разработке дашборда делали уже там.
Вторая итерация оказалась финальной.
ИтогУ Teachbase возник продукт, который компания может продавать своим клиентам. Бизнесу это даёт повышение конверсии/среднего чека, а заодно и конкурентное преимущество.
Для разработки этой системы мы не привлекали инженеров и обошлись силами двух дата аналитиков. Дата инженеров привлекали только в том случае, когда упирались в хардовый SQL.