Паттерны нагрузок: OLTP, OLAP и как их измерять
Архитектура СУБД всегда строится вокруг того, как именно ты будешь читать и писать данные. В System Design выделяют два классических лагеря, у каждого из которых свои метрики.
OLTP (Online Transaction Processing)
Это транзакции в реальном времени.
- Суть: Короткие, точечные запросы на чтение и запись. Нагрузка состоит из тысяч мелких операций в секунду.
- Хранение: Строковое (Row-oriented). Данные одной сущности лежат рядом на диске, чтобы их можно было быстро обновить целиком.
- Примеры: Банкоматы, биллинг такси, корзина в e-commerce.
- Ключевые метрики железа: Упирается в Latency (задержку одной операции) и IOPS (кол-во операций ввода-вывода в секунду диска).
OLAP (Online Analytical Processing)
Это многомерная аналитика.
- Суть: Длинные, тяжелые запросы, сканирующие гигабайты и терабайты данных. В основном read-only (или редкие массивные загрузки данных батчами).
- Хранение: Колоночное (Column-oriented). Значения одного столбца лежат рядом, что позволяет сжимать их и читать только нужные колонки, не трогая остальные.
- Примеры: Финансовые отчеты, расчет ML-моделей, дашборды для маркетинга.
- Ключевые метрики железа: Упирается в Throughput (пропускную способность, МБ/с). Здесь важен не быстрый поиск мелкого блока, а скорость, с которой диск отдает сплошной поток данных.
Сравнительная таблица
| Параметр | OLTP | OLAP |
|---|---|---|
| Тип запросов | Поиск по ID, короткие UPDATE | Сложные JOIN, агрегации (SUM, AVG) |
| Индексы | B-Tree / LSM | Bitmap, Bloom Filters |
| Оптимизация под | IOPS + Latency | Throughput + Сжатие данных |
| Популярные СУБД | PostgreSQL, MySQL, CockroachDB | ClickHouse, Snowflake, Redshift |
Современный тренд — HTAP (Hybrid Transactional/Analytical Processing). Это попытка объединить два мира в одной системе. Например, TiDB или Google AlloyDB под капотом хранят данные и в строках (для быстрых транзакций), и реплицируют их в колонки (для аналитики), автоматически направляя запрос в нужный движок.
Немного про железо: IOPS, Latency и Throughput
Когда мы говорим, что БД «тормозит», чаще всего она ждет ответа от диска. На системном дизайне важно не путать эти три метрики:
- IOPS (Input/Output Operations Per Second): Сколько независимых мелких блоков диск может прочитать или записать за секунду. SSD дает десятки и сотни тысяч IOPS, HDD — всего 100-200. Это критично для OLTP.
- Latency (Задержка): Время от отправки запроса к диску до получения первого байта ответа. В In-Memory базах (Valkey) счет идет на микросекунды, на SSD — на миллисекунды.
- Throughput (Пропускная способность): Объем данных (МБ/с или ГБ/с), который можно прокачать за единицу времени. Диск может иметь плохой IOPS, но отличный Throughput (например, чтение большого файла с HDD). Это критично для OLAP.