📊 SummingMergeTree vs AggregatingMergeTree — в чём реальная разница

🔥 Главная мысль

На первый взгляд кажется, что оба движка нужны для агрегации.

Но между ними есть важная разница:

• SummingMergeTree суммирует числовые поля • AggregatingMergeTree хранит агрегатные состояния и умеет больше, чем просто сумму

То есть:

если тебе нужна простая сумма — это одна история.

Если тебе нужны uniq, avg, maxIf и другие агрегаты — это уже другая история.

🟢 Плюсы:

SummingMergeTree: • проще понять • удобен для простых числовых сумм • работает как бы “автосуммой” при merge

AggregatingMergeTree: • намного гибче • умеет хранить состояния агрегатных функций • подходит для сложных предагрегаций

Пример плюса: если тебе нужно просто суммировать продажи по id, SummingMergeTree может быть удобным решением.

Если нужно хранить uniqState, avgState, maxIfState, то уже нужен AggregatingMergeTree.

🔴 Минусы:

SummingMergeTree: • ограничен по логике • остальные поля могут вести себя не так, как ждут новички • подходит не для любой аналитики

AggregatingMergeTree: • сложнее в понимании • требует работать с -State и -Merge функциями • без понимания финализации агрегатов легко запутаться

Пример минуса: новичок создаёт AggregatingMergeTree, а потом удивляется, почему в таблице лежит “не итоговое число”, а состояние агрегата.

🧪 Живые примеры

Когда брать SummingMergeTree:

• простые суммы метрик • предагрегированные числовые показатели • сценарии, где логика агрегации очень простая

Когда брать AggregatingMergeTree:

• сложные витрины • uniqState / avgState / maxIfState • материализованные представления с агрегатными состояниями • сценарии, где нужно доагрегировать данные позже

Простой ориентир:

если тебе нужна “просто сумма” — сначала смотри в сторону SummingMergeTree.

Если тебе нужна более сложная аналитическая логика — скорее всего понадобится AggregatingMergeTree.

🏗 Архитектурная мысль

В больших компаниях AggregatingMergeTree часто используют там, где витрина строится в несколько шагов:

• сначала считаются состояния • потом они доклеиваются • потом дочитываются в финальный результат

Это даёт большую гибкость, но требует дисциплины и понимания.

Что это даёт:

• меньше пересчётов • удобнее строить тяжёлые витрины • можно переносить часть нагрузки ближе к данным

⚠️ Риски:

• брать AggregatingMergeTree там, где хватит SummingMergeTree • не понимать разницу между состоянием и финальным значением • усложнять витрину без необходимости

Самая частая ошибка — сделать сложную схему агрегации там, где бизнесу нужна была обычная сумма по метрике.

✅ Вывод

SummingMergeTree — про простое суммирование 📉

AggregatingMergeTree — про сложную предагрегацию и состояния агрегатов 📈

Если задача простая — не усложняй. Если нужна гибкость — тогда уже смотри в сторону AggregatingMergeTree 🎯

📊 SummingMergeTree vs AggregatingMergeTree — в чём реальная разница
🔥 Главная мысль
На первый взгляд кажется,
что оба движка нужны для агрегации | Сетка — социальная сеть от hh.ru