Памятка по движкам ClickHouse


Быстрый маршрут
Нужна обычная таблица → MergeTree
Нужно суммировать → SummingMergeTree
Нужны агрегаты → AggregatingMergeTree
Нужно убрать дубли → ReplacingMergeTree
Нужно сворачивать состояния → Collapsing / VersionedCollapsing
Нужен внешний источник → Интеграционные
Сайт SimbirSoft ↗
MERGETREE

MergeTree

Берите, если: нужна базовая таблица общего назначения.

  • Данные хранятся на диске в сжатом виде.
  • Поддерживает SELECT, INSERT, DELETE, UPDATE.
  • Можно индексировать поля.
  • Поддерживает индексы пропуска данных.
MERGETREE

SummingMergeTree

Берите, если: нужно суммировать числовые столбцы.

Суммирование выполняется с группировкой по ключу сортировки.

MERGETREE

AggregatingMergeTree

Берите, если: одинаковые записи нужно группировать и применять агрегатные функции.

Важно: для AggregateFunction используются суффиксы -State и -Merge, и есть разница с SimpleAggregateFunction.

MERGETREE

ReplacingMergeTree

Берите, если: нужно удалять дублирующиеся записи с одинаковым значением ключа сортировки.

MERGETREE

CollapsingMergeTree

Берите, если: требуется механизм сворачивания записей.

Считается аналогом медленным UPDATE и DELETE.

MERGETREE

VersionedCollapsingMergeTree

Берите, если: нужно сворачивание с адаптацией под многопоточную вставку.

ИНТЕГРАЦИОННЫЕ

S3

Интеграция с веб-службой Simple Storage Service.

ИНТЕГРАЦИОННЫЕ

PostgreSQL

Интерфейс для доступа к внешней таблице: позволяет читать данные из PostgreSQL и вставлять записи.

ИНТЕГРАЦИОННЫЕ

Kafka

Важно: сам данные не хранит. Предназначен для подписки на потоки и публикации данных.

LOG

TinyLog

Самый простой вариант для сценариев «записал → прочел → удалил» или низкой нагрузки.

LOG

Log

Для небольших объёмов данных (до 1 млн строк) в большом количестве таблиц. Подходит для временных данных, write-once, тестовых и демонстрационных целей.

LOG

StripeLog

Хранит данные в одном файле. Используется, когда нужно создавать много таблиц с небольшим объёмом данных.

СПЕЦИАЛИЗИРОВАННЫЕ

EmbeddedRocksDB

Встроенный движок для хранения и обработки данных key-value.

СПЕЦИАЛИЗИРОВАННЫЕ

File

Позволяет работать с файлами.

СПЕЦИАЛИЗИРОВАННЫЕ

URL

Позволяет управлять данными на удалённом сервере.

INSERT и SELECT транслируются соответственно в POST и GET.

СПЕЦИАЛИЗИРОВАННЫЕ

Buffer

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

СПЕЦИАЛИЗИРОВАННЫЕ

Memory

Хранит данные в оперативной памяти. Поддерживает SELECT, INSERT, UPDATE, DELETE. Можно использовать как кеш.

СПЕЦИАЛИЗИРОВАННЫЕ

Set

Предназначен для использования в правой части оператора IN.

СПЕЦИАЛИЗИРОВАННЫЕ

Join

Предназначен для предварительной подготовки данных для операций JOIN.

СПЕЦИАЛИЗИРОВАННЫЕ

Merge

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

⚠️ Критически важный момент для MergeTree-семейства

Особенности движков зависят от слияния частей данных, которое может начаться в неизвестный момент. Чтобы получить гарантированно обработанный результат, рекомендуем добавить FINAL в конец запроса или выполнить OPTIMIZE TABLE.