OLAP и OLTP: в чём разница

Коротко

  • OLTP (Online Transaction Processing) — системы для быстрых транзакций (заказы, платежи, регистрации). Работает с маленькими объёмами часто.
  • OLAP (Online Analytical Processing) — системы для анализа больших объёмов (агрегаты, отчёты, BI). Работает с большими объёмами редко.

Разные задачи — разная архитектура.

Примеры

OLTP

  • Оформление заказа в интернет-магазине.
  • Перевод денег в банковском приложении.
  • Регистрация пользователя.
  • Лайк в соцсети.

Характеристики: коротко, часто, точно, много параллельных операций.

OLAP

  • Отчёт «продажи по регионам за квартал».
  • Дашборд DAU/MAU.
  • Когортный анализ retention.
  • A/B-анализ метрик.

Характеристики: долго, редко, миллионы строк, агрегаты.

Таблица отличий

Критерий OLTP OLAP
Основная задача Транзакции Аналитика
Пример операции INSERT / UPDATE SELECT + GROUP BY
Объём данных в запросе 1–10 строк миллионы строк
Частота операций Тысячи/сек Десятки/сек
Время ответа <100 мс секунды — минуты
Нормализация Высокая (3NF) Низкая (denormalized)
Индексы B-tree на PK/FK Колоночные (ClickHouse)
Хранение Строковое (row) Колоночное (column)

Строковое vs колоночное хранение

OLTP — row storage

Строки хранятся целиком:

Row 1: [id, name, email, age, city]
Row 2: [id, name, email, age, city]

Быстро читать/писать одну строку. Идеально для SELECT * FROM users WHERE id = 1.

OLAP — column storage

Колонки хранятся отдельно:

Col id: [1, 2, 3, 4, ...]
Col age: [25, 30, 22, ...]

Быстро агрегировать по колонке (SUM(amount), AVG(price)). Идеально для аналитики, которая читает 2-3 колонки из таблицы с 50.

Бонус: колоночное лучше сжимается (повторяющиеся значения в колонке) — меньше памяти.

Попробовать силы на подобных вопросах проще всего в тренажёре Карьерник — прямо в Telegram, без регистрации через сайт.

Популярные базы

OLTP

  • PostgreSQL — стандарт.
  • MySQL / MariaDB — часто в e-commerce.
  • Oracle — корпорации, финансы.
  • SQL Server — Microsoft-стек.

OLAP

  • ClickHouse — open-source, российский, популярен в РФ.
  • Snowflake — облачный, стандарт для enterprise.
  • BigQuery (Google) — облачный, pay-per-query.
  • Redshift (AWS) — облачный.
  • Apache Druid — real-time OLAP.
  • Vertica — on-prem enterprise.

Гибридные

  • HTAP (Hybrid): PostgreSQL с columnstore, TiDB. Нишевое решение.

Когда что использовать

OLTP

  • Production database для приложения.
  • Checkout, регистрации, платежи.
  • Где 1000+ параллельных пользователей делают микро-операции.

OLAP

  • Dashboards.
  • Аналитические отчёты.
  • ML-training.
  • Data Warehouse.

В больших компаниях данные из OLTP ежедневно копируются в OLAP через ETL.

Архитектура современного стека

Пользовательские действия
        ↓
   OLTP (Postgres)
        ↓ ETL (Airflow / dbt)
   Data Lake (S3)
        ↓
   DWH / OLAP (ClickHouse, Snowflake)
        ↓
   BI (Tableau, DataLens) — аналитик

Данные движутся слева направо. Аналитик работает справа, разработчики — слева.

Аналитический запрос в OLTP — плохая идея

-- В Postgres на 100M строк
SELECT DATE_TRUNC('month', created_at), SUM(amount)
FROM orders GROUP BY 1;
-- 5 минут, блокирует запись

Тот же запрос в ClickHouse — 1–5 секунд без блокировок.

Вывод: для аналитики запросы лучше отправлять в OLAP, не в прод-базу.

Пройти 30–50 задач по теме за вечер можно в Telegram-тренажёре. Это то, что отличает «знаю» от «уверенно отвечу на собесе».

Когда PostgreSQL достаточно

Если у вас:

  • <10M строк в основных таблицах.
  • Аналитические запросы редко.
  • Один сервер, без кластера.

→ PostgreSQL справится. Не нужен ClickHouse, если нет реальной потребности.

Типичные ошибки

1. Писать аналитику прямо в OLTP

Убивает перформанс production. Всегда копировать в DWH.

2. Использовать OLAP для транзакций

ClickHouse плохо работает с INSERT по одной строке. Только batch-инсерты.

3. Не понимать разницу в индексах

В OLTP — B-tree на FK. В OLAP — сортировка (ORDER BY в определении таблицы ClickHouse).

Читайте также

FAQ

Почему ClickHouse быстрее Postgres в аналитике?

Колоночное хранение + сжатие + параллелизм. Для агрегата на миллионах строк ClickHouse в 10-100x быстрее.

Можно ли Postgres использовать для OLAP?

Можно для небольших объёмов (<100M строк) и нечастых запросов. С расширениями типа cstore_fdw можно сделать колоночное хранение.

MongoDB — это OLAP?

Нет. MongoDB — документная OLTP-база. Для аналитики её используют реже, через отдельные инструменты (Mongo Aggregations, но ограничения).

Нужно ли аналитику знать OLTP?

Базово — да. Понимать, откуда берутся данные в DWH, как работают транзакции, что такое PK/FK.