OLAP
Online Analytical Processing — режим работы с данными, рассчитанный на тяжёлые аналитические запросы по большим объёмам, а не на короткие транзакции.
Что такое OLAP
OLAP (Online Analytical Processing, оперативная аналитическая обработка) — класс систем, заточенных под аналитические запросы: прочитать десятки миллионов строк, сгруппировать по нескольким измерениям и вернуть агрегаты. «Выручка по регионам и месяцам за три года» — типичный OLAP-запрос.
Термин появился в противопоставление OLTP (Online Transaction Processing) — режиму боевых баз приложений, где запросы короткие и точечные: взять заказ по ID, списать деньги, обновить статус. Это два принципиально разных профиля нагрузки, и одна СУБД редко хороша в обоих.
OLTP vs OLAP
| OLTP | OLAP | |
|---|---|---|
| Типичный запрос | WHERE id = 42 | GROUP BY region, month |
| Строк за запрос | Единицы | Миллионы — миллиарды |
| Колонок за запрос | Все | 3–5 из 200 |
| Запись | Постоянная, мелкая | Пачками, по расписанию |
| Что важно | Задержка в миллисекундах, ACID | Пропускная способность скана |
| Хранение | Построчное | Колоночное |
| Модель данных | Нормализованная | Звезда, денормализация |
| Одновременных клиентов | Тысячи | Десятки |
| Примеры | PostgreSQL, MySQL | ClickHouse, 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 обычных ядер закрывает задачу.
Связанные термины
- DWH / хранилища данных — контур, внутри которого живёт OLAP
- ClickHouse — самый ходовой OLAP-движок сегодня
- BI-системы — интерфейс, через который с кубом работают
- ETL / интеграция данных — чем наполняются аналитические таблицы
- Greenplum — MPP-СУБД для корпоративной аналитики
- Индексы в БД — то, чем OLTP решает задачу, а OLAP нет
Готовы запустить GPU-задачу?
Запустить GPU-сервер