Почему для аналитики данные лучше хранить в OLAP-базе, а не в OLTP?

«Почему для аналитики данные лучше хранить в OLAP-базе, а не в OLTP?» — вопрос из категории Моделирование данных и DWH, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

OLAP-системы (как ClickHouse, Amazon Redshift, Google BigQuery) проектируются с учетом паттернов аналитических запросов, которые кардинально отличаются от транзакционных (OLTP).

Основные преимущества OLAP для анализа:

  • Колоночное хранение: Данные хранятся по столбцам, а не по строкам. Это дает два ключевых преимущества:

    1. Высокая степень сжатия: Значения в одном столбце часто однотипны и повторяются, что позволяет применять эффективные алгоритмы сжатия (например, LZ4, ZSTD).
    2. Минимизация операций ввода-вывода: Аналитический запрос обычно затрагивает лишь несколько столбцов из сотен. Колоночное хранилище считывает с диска только эти нужные столбцы, а не всю строку целиком.
  • Массовая параллельная обработка (MPP): OLAP-системы распределяют данные и вычисления по множеству узлов кластера, позволяя обрабатывать терабайты данных за секунды за счет параллельного выполнения запросов.

  • Оптимизации для агрегаций: Внутренние механизмы (специализированные индексы, предварительная агрегация, векторизация вычислений) заточены под операции GROUP BY, JOIN больших таблиц и оконные функции.

  • Схема, ориентированная на анализ: Поддерживаются денормализованные схемы (звезда, снежинка), которые уменьшают количество дорогостоящих JOIN во время выполнения запросов.

Сравнение на примере:

-- Запрос в OLTP (PostgreSQL): Сканирование по индексу и точечные чтения строк.
-- Может быть медленным при агрегации по всему большому табличному пространству.
SELECT user_id, SUM(amount)
FROM transactions
WHERE transaction_date >= '2023-01-01'
GROUP BY user_id;

-- Тот же запрос в OLAP (ClickHouse):
-- 1. Читаются только столбцы `user_id`, `amount`, `transaction_date`.
-- 2. Данные в столбцах сильно сжаты.
-- 3. Агрегация выполняется параллельно по всем партициям и блокам данных.
-- 4. Результат возвращается на порядки быстрее при работе с большими объемами.
SELECT user_id, SUM(amount)
FROM transactions
WHERE transaction_date >= '2023-01-01'
GROUP BY user_id
SETTINGS max_threads = 16; -- Использование параллелизма

Таким образом, OLAP обеспечивает предсказуемо высокую скорость выполнения сложных аналитических запросов над огромными наборами данных, что является критичным требованием для систем бизнес-аналитики и отчетности.