Граница между OLTP и OLAP объясняет, почему обычно нельзя просто построить аналитику в боевой базе и зачем нужны отдельные хранилища.
OLTP
- Рассчитан на короткие транзакции со строгими гарантиями ACID.
- Хранение по строкам — удобно для записи и точечных чтений.
- Объёмы: миллионы, максимум сотни миллионов строк.
- Примеры: PostgreSQL, MySQL, MS SQL Server, Oracle.
OLAP
- Рассчитан на аналитические запросы по огромным таблицам.
- Колоночное хранение и сжатие — агрегаты считаются гораздо быстрее.
- Объёмы: миллиарды и триллионы строк.
- Примеры: BigQuery, Snowflake, Redshift, ClickHouse, Vertica.
Почему важно различать
- Тяжёлые аналитические запросы в боевой базе роняют продукт.
- OLAP плохо подходит для записи единичных строк и операций в реальном времени.
- В современных архитектурах эти роли разделяют намеренно и связывают регулярными загрузками данных.
- При проектировании архитектуры данных компании
- При выборе базы под новый продукт или новый аналитический проект
- В обсуждении скорости отчётов и нагрузки на продукт
- В очень маленьком проекте отдельная аналитическая система не нужна — всё помещается в одну транзакционную базу с представлениями для отчётов
Команда продукта решила построить сводный экран для руководства прямо в базе сервиса на PostgreSQL. После пары запросов с агрегатами по миллионам строк продукт лёг на 10 минут. Через неделю подняли отдельный ClickHouse, залили туда нужные данные регулярной загрузкой, и нагрузка от аналитики перестала касаться продукта. Один и тот же отчёт в PostgreSQL считался 45 секунд, в ClickHouse — 200 миллисекунд.
Договоритесь в команде: новые продуктовые таблицы живут в OLTP, аналитические витрины — в OLAP, а данные между ними двигаются регулярными загрузками. Любая попытка временно посчитать аналитику в боевой базе имеет неприятную привычку становиться постоянной. Зафиксируйте правило в базе знаний Shtab, чтобы новые разработчики видели его до инцидента, а не после.