В чем разница OLTP и OLAP систем
Что проверяют
Понимаете ли вы, что разница в характере нагрузки и что она определяет способ хранения. Для data-ролей важно ещё, откуда вы берёте данные для аналитики и обучения и почему не из боевой базы. Следом часто просят объяснить, почему колоночная база быстрее на агрегатах.
Как отвечать
- нагрузка: OLTP это много коротких транзакций по одной или нескольким строкам (оформить заказ, списать деньги). OLAP это редкие тяжёлые запросы, которые читают миллионы строк, но несколько колонок (выручка по регионам за год);
- хранение: OLTP хранит данные построчно, строку удобно прочитать и изменить целиком. OLAP хранит по колонкам: запрос читает только нужные столбцы, а однотипные значения сжимаются в разы лучше;
- схема: OLTP нормализуют, обычно до 3НФ, чтобы не было аномалий обновления. В OLAP схема звезда или снежинка с таблицей фактов и измерениями либо широкие витрины;
- механика: в OLTP важны ACID, блокировки, точечные B-tree индексы. В OLAP важнее параллельное сканирование, партиции, ключи сортировки, а обновление отдельных строк дорого или ограничено;
- примеры: OLTP это PostgreSQL, MySQL. OLAP это ClickHouse, Greenplum, BigQuery, Snowflake, Redshift.
Данные перетекают между ними через ETL или ELT: пакетная выгрузка или CDC, например Debezium читает журнал PostgreSQL и пишет изменения в Kafka, а оттуда они попадают в хранилище. Трансформации внутри хранилища часто описывают в dbt.
Для ML это важно напрямую: обучающие выборки собирают в OLAP, а признаки для онлайн-инференса отдают из хранилища с низкой задержкой. Так устроен feature store: офлайн-часть для обучения, онлайн-часть для прода.
Где спотыкаются
Описывают OLAP как «кубы». Это устаревшая картина: сейчас под OLAP чаще понимают колоночные MPP-хранилища, а кубы лишь один из вариантов.
Предлагают гонять аналитику прямо на боевом PostgreSQL. Тяжёлый запрос съедает ресурсы и мешает транзакциям; минимум нужна реплика, лучше отдельное хранилище.
Путают колоночное хранение с отказом от реляционной модели. ClickHouse тоже SQL-база с таблицами, отличается она способом хранения и выполнения, а не моделью данных.