Data & Analytics

OLAP

Online Analytical Processing — режим работы с данными, рассчитанный на тяжёлые аналитические запросы по большим объёмам, а не на короткие транзакции.

Что такое OLAP

OLAP (Online Analytical Processing, оперативная аналитическая обработка) — класс систем, заточенных под аналитические запросы: прочитать десятки миллионов строк, сгруппировать по нескольким измерениям и вернуть агрегаты. «Выручка по регионам и месяцам за три года» — типичный OLAP-запрос.

Термин появился в противопоставление OLTP (Online Transaction Processing) — режиму боевых баз приложений, где запросы короткие и точечные: взять заказ по ID, списать деньги, обновить статус. Это два принципиально разных профиля нагрузки, и одна СУБД редко хороша в обоих.

OLTP vs OLAP

OLTP OLAP
Типичный запрос WHERE id = 42GROUP BY region, month
Строк за запрос Единицы Миллионы — миллиарды
Колонок за запрос Все 3–5 из 200
Запись Постоянная, мелкая Пачками, по расписанию
Что важно Задержка в миллисекундах, ACID Пропускная способность скана
Хранение Построчное Колоночное
Модель данных Нормализованная Звезда, денормализация
Одновременных клиентов Тысячи Десятки
Примеры PostgreSQL, MySQLClickHouse, Greenplum

Разница сводится к тому, как данные лежат на диске. Построчное хранение кладёт всю запись рядом — идеально, когда нужна одна строка целиком. Колоночное хранит каждую колонку отдельным файлом: запросу, читающему 3 колонки из 200, не придётся поднимать с диска остальные 197. Плюс однотипные значения в колонке сжимаются в разы лучше, чем разнородная строка. На аналитике это даёт не проценты, а порядки — и никакие индексы не компенсируют разницу построчной СУБД на полном скане.

OLAP-куб

OLAP-куб — модель данных, где числа (меры) лежат на пересечении нескольких измерений. Мера — то, что считаем: выручка, количество, средний чек. Измерение — разрез: время, регион, товар, канал продаж. «Куб» — метафора: измерений может быть и два, и двадцать, просто три рисуются на доске.

Операции над кубом, чьи названия вы увидите в любой BI-системе:

  • Slice — зафиксировать одно измерение: только 2024 год.
  • Dice — подкуб по нескольким фильтрам: Москва и Питер, ноутбуки, Q1.
  • Drill-down — детализировать: год → квартал → месяц → день.
  • Roll-up — обратное, свернуть до общего итога.
  • Pivot — развернуть, поменяв измерения на осях местами.

Пользователь BI-дашборда делает всё это мышью, не зная слова «куб». Смысл модели в том, что она позволяет заранее посчитать агрегаты по всем комбинациям измерений — тогда любой срез отдаётся мгновенно.

MOLAP, ROLAP, HOLAP

Три способа реализации, встречающиеся в документации и на собеседованиях:

Как хранит Плюс Минус
MOLAP Предрассчитанный куб в своём формате Ответ мгновенный Долгий пересчёт, взрыв объёма
ROLAP Обычные таблицы, SQL на лету Свежие данные, любой срез Каждый запрос считается заново
HOLAP Агрегаты в кубе, детали в таблицах Компромисс Сложнее в эксплуатации

Классический MOLAP (SSAS в MS SQL Server, Oracle Essbase) строился в эпоху, когда пересчитать миллиард строк на лету было немыслимо. Колоночные движки эту предпосылку сняли: ClickHouse сканирует сотни миллионов строк за доли секунды, и отдельный предрассчитанный куб стал не нужен. Поэтому современные системы — почти всегда ROLAP, а слово «куб» осталось как название модели, а не технологии.

На чём делают сегодня

  • ClickHouse — колоночная СУБД, дефолтный выбор под события и витрины; частый ответ на вопрос «нам нужен OLAP».
  • Greenplum — MPP на базе PostgreSQL, корпоративные хранилища.
  • Apache Druid, Apache Pinot — низкая задержка на потоковых данных.
  • DuckDB — колоночный движок в одном процессе, OLAP без сервера.
  • Trino — SQL поверх файлов в object storage.

Оговорка, экономящая деньги: PostgreSQL с расширением columnar или просто с нормальными агрегирующими таблицами закрывает аналитику на сотни гигабайт. Отдельный OLAP-контур нужен, когда запросы перестают укладываться в приемлемое время, а не когда о нём прочитали.

Инфраструктура

OLAP упирается в диск и память, а не в частоту CPU: запрос читает колонки целиком, поэтому решают пропускная способность NVMe и объём RAM под кеш. Профиль нагрузки — пиковый и предсказуемый: витрины пересчитывают ночью ETL-процессом, днём идут запросы аналитиков. GPU в классических OLAP-движках не участвуют — векторизация на SIMD обычных ядер закрывает задачу.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер