Дерево решений: какой движок выбрать?
Мы разобрали шесть движков семейства MergeTree. Каждый решает свою задачу, но в реальных проектах выбор не всегда очевиден. Этот урок даёт систематический фреймворк: дерево решений и матрицу use case -> engine.
Интерактивное дерево решений
Пройдите дерево сверху вниз. Каждый узел — вопрос о паттерне работы с данными. Наведите курсор на любой узел для подробного объяснения.
Пошаговый обход дерева
Шаг 1: Нужны ли обновления / дедупликация?
Если данные пишутся один раз и не требуют изменений (логи, clickstream, time-series, audit events) — ответ “Нет”, и правильный выбор — MergeTree. Это самый простой и производительный движок.
Шаг 2: Какой тип обновления?
Если обновления нужны, определите их тип:
- Полная замена строки по ключу (user profiles, product catalogs) — ReplacingMergeTree
- Суммирование числовых полей (page view counters, metric rollups) — SummingMergeTree
- Произвольные агрегатные функции (HyperLogLog uniq, quantile percentiles) — AggregatingMergeTree
- Sign-based отмена строк (order status updates, financial corrections) — Collapsing-движки
Шаг 3 (только для Collapsing): Порядок INSERT гарантирован?
- Однопоточная, последовательная вставка — CollapsingMergeTree
- Многопоточная или distributed вставка — VersionedCollapsingMergeTree
Матрица use case -> engine
GraphiteMergeTree: нишевый вариант
GraphiteMergeTree — специализированный движок для хранения метрик в формате Graphite (name, value, timestamp, version). Он выполняет rollup (понижение разрешения) и прореживание данных по возрасту согласно правилам retention policy.
Если вы используете Graphite как систему мониторинга и хотите хранить метрики в ClickHouse — GraphiteMergeTree автоматизирует rollup. Для всех остальных сценариев используйте один из шести основных движков.
Правило по умолчанию
Сомневаетесь? Начните с MergeTree. Переход на специализированный движок — это оптимизация, не необходимость. MergeTree справится с любой аналитической нагрузкой. Специализированные движки уменьшают хранение и ускоряют определённые паттерны запросов, но не являются обязательными.
Ключевые выводы
- Начните с вопроса “нужны ли обновления?” Если нет — MergeTree. Если да — определите тип обновления.
- Полная замена строки -> ReplacingMergeTree. Суммирование -> SummingMergeTree. Сложные агрегаты -> AggregatingMergeTree. Sign-based отмена -> Collapsing.
- VersionedCollapsingMergeTree предпочтительнее CollapsingMergeTree для production-систем с несколькими источниками данных.
- GraphiteMergeTree — только для Graphite-метрик. Не универсальный выбор.
- MergeTree по умолчанию: если не уверены, начните с MergeTree. Миграция на специализированный движок — оптимизация, которую можно сделать позже.