Data Warehouse vs Database — разница для аналитика
Коротко
Database (база данных) — хранит текущие данные для приложений (OLTP). Data Warehouse (хранилище данных) — хранит исторические данные для аналитики (OLAP). База оптимизирована для быстрых INSERT/UPDATE одной строки. Хранилище — для быстрых SELECT по миллионам строк. Аналитик работает с обоими, но чаще с хранилищем. На собеседованиях спрашивают разницу OLTP/OLAP, ETL и архитектуру хранилища.
Быстрое сравнение
| Критерий | Database (OLTP) | Data Warehouse (OLAP) |
|---|---|---|
| Назначение | Операционные данные | Аналитика и отчёты |
| Пользователи | Приложение, бэкенд | Аналитики, BI-инструменты |
| Запросы | INSERT, UPDATE, DELETE | SELECT (агрегации, JOIN) |
| Объём запроса | 1–100 строк | Миллионы строк |
| Схема | Нормализованная (3NF) | Денормализованная (звезда) |
| Данные | Текущее состояние | Исторические + текущие |
| Скорость записи | Высокая | Низкая (пакетная загрузка) |
| Скорость чтения | Быстро для точечных | Быстро для массовых |
| Примеры | PostgreSQL, MySQL | ClickHouse, BigQuery, Redshift |
OLTP — Online Transaction Processing
OLTP-системы обслуживают приложения: регистрация пользователя, оформление заказа, обновление профиля.
-- Типичные OLTP-запросы (быстрые, точечные)
INSERT INTO orders (user_id, amount) VALUES (42, 5000);
SELECT * FROM users WHERE user_id = 42;
UPDATE orders SET status = 'shipped' WHERE order_id = 1001;Характеристики:
- Много мелких транзакций (тысячи/сек)
- Каждая затрагивает 1–10 строк
- Нормализованная схема (меньше дублирования, быстрее запись)
- ACID-транзакции
Примеры: PostgreSQL, MySQL, Oracle, SQL Server.
OLAP — Online Analytical Processing
OLAP-системы обслуживают аналитиков: «какая выручка за квартал по категориям?», «какой retention по когортам?».
-- Типичные OLAP-запросы (тяжёлые, массовые)
SELECT
DATE_TRUNC('month', order_date) AS month,
category,
SUM(amount) AS revenue,
COUNT(DISTINCT user_id) AS buyers
FROM orders
JOIN products ON orders.product_id = products.product_id
WHERE order_date >= '2024-01-01'
GROUP BY 1, 2
ORDER BY month, revenue DESC;Характеристики:
- Мало запросов, но каждый сканирует миллионы строк
- Денормализованная схема (меньше JOIN, быстрее чтение)
- Колоночное хранение (сжатие, быстрая агрегация)
- Данные загружаются пакетами (ETL)
Примеры: ClickHouse, BigQuery, Amazon Redshift, Snowflake, Vertica.
Архитектура хранилища
Источники данных → ETL → Data Warehouse → BI / Аналитика
(PostgreSQL, (ClickHouse, (Tableau,
API, CSV) BigQuery) Metabase)ETL: Extract, Transform, Load
- Extract — извлечь данные из источников (БД, API, файлы)
- Transform — очистить, преобразовать, агрегировать
- Load — загрузить в хранилище
Инструменты: Apache Airflow, dbt, Fivetran, Airbyte. Подробнее — в гайде по ETL.
Звёздная схема (Star Schema)
┌─────────────┐
│ dim_users │
│ user_id │
│ name │
│ city │
│ segment │
└──────┬───────┘
│
┌──────────────┐ │ ┌──────────────┐
│ dim_products │ │ │ dim_dates │
│ product_id ├─────┼─────┤ date_id │
│ name │ │ │ year │
│ category │ │ │ month │
└──────────────┘ │ │ weekday │
│ └──────────────┘
┌──────┴───────┐
│ fact_orders │
│ order_id │
│ user_id (FK)│
│ product_id(FK)│
│ date_id (FK)│
│ amount │
│ quantity │
└──────────────┘Fact table (таблица фактов) — события и метрики (заказы, клики, платежи). Dimension tables (измерения) — справочники (пользователи, продукты, даты). Запрос: JOIN fact с нужными dimensions, GROUP BY dimension attributes.
Когда что используется
Аналитик работает с Database, когда:
- Данных мало (< 10 млн строк)
- Нет хранилища (стартап, маленькая команда)
- Нужен ad hoc запрос к продовой БД (осторожно!)
- PostgreSQL справляется с аналитическими запросами
Аналитик работает с Data Warehouse, когда:
- Данных много (> 100 млн строк)
- Нужны исторические данные и тренды
- Множество источников (БД + API + логи)
- Есть BI-дашборды с регулярным обновлением
PostgreSQL — одновременно OLTP и OLAP?
PostgreSQL может работать как мини-хранилище:
- Поддерживает аналитические функции (оконные, CTE)
- Materialized views для витрин
- Партиционирование для больших таблиц
- Расширения: TimescaleDB (time-series), Citus (distributed)
Но для 1+ млрд строк ClickHouse или BigQuery будут в 10–100× быстрее для аналитических запросов.
Современные тренды
Lakehouse — гибрид Data Lake + Data Warehouse. Хранит сырые данные (как Lake) с поддержкой SQL-запросов (как Warehouse). Примеры: Databricks, Delta Lake.
ELT вместо ETL — сначала загрузить сырые данные, потом трансформировать внутри хранилища (через dbt). Проще и гибче.
Real-time analytics — ClickHouse, Apache Druid, Materialize. Аналитика на данных с задержкой < 1 минуты вместо ежедневных ETL-пакетов.
Типичные ошибки
Аналитические запросы к продовой БД. Тяжёлый GROUP BY на 100 млн строк может замедлить приложение для пользователей. Используйте реплику или хранилище.
Нормализованная схема в хранилище. В OLTP нормализация — хорошо (быстрая запись). В OLAP — денормализация лучше (меньше JOIN, быстрее чтение).
Нет исторических данных. OLTP хранит текущее состояние. Если пользователь сменил город — старый город потерян. Хранилище фиксирует изменения (slowly changing dimensions).
Вопросы с собеседований
-- Чем OLTP отличается от OLAP? -- OLTP — операционные данные, много мелких транзакций, нормализованная схема. OLAP — аналитика, мало тяжёлых запросов по миллионам строк, денормализованная схема.
-- Что такое звёздная схема? -- Центральная fact table (метрики) окружена dimension tables (справочники). JOIN факта с измерениями. Оптимизирована для аналитических запросов.
-- Что такое ETL? -- Extract (извлечь данные), Transform (очистить, преобразовать), Load (загрузить в хранилище). Процесс наполнения Data Warehouse.
-- Почему ClickHouse быстрее PostgreSQL для аналитики? -- Колоночное хранение: читает только нужные столбцы. Сжатие: данные одного типа сжимаются лучше. Векторизация: обрабатывает данные батчами. Для SUM(amount) по 1 млрд строк — разница в 100×.
Потренируйтесь решать задачи — откройте тренажёр с 1500+ вопросами для подготовки к собеседованиям аналитиков.
FAQ
Нужно ли аналитику уметь строить ETL?
Понимать — обязательно. Строить — зависит от компании. В маленьких командах аналитик может настраивать dbt и Airflow. В больших — есть data engineers.
Какое хранилище выбрать?
Малый объём + бюджет → PostgreSQL с materialized views. Средний → ClickHouse (self-hosted) или BigQuery (managed). Enterprise → Snowflake, Redshift.
Как тренироваться
Data Warehouse — обязательная тема для middle+ аналитика. Задачи по SQL и архитектуре — в тренажёре Карьерник. Больше вопросов — в разделе с примерами.