ClickHouse предоставляет несколько движков таблиц, каждый из которых оптимизирован для конкретных случаев использования. Эти движки определяют, как данные хранятся, индексируются, сливаются и реплицируются.


1. Семейство MergeTree (Рекомендуется для большинства аналитических нагрузок)

Движки, основанные на MergeTree, являются наиболее часто используемыми в ClickHouse. Они предназначены для эффективного хранения, индексирования, партиционирования и слияния данных.

ДвигательЛучше всего дляКлючевые особенности
MergeTree (по умолчанию)Общие OLAP-запросыОтсортированный первичный ключ, разреженный индекс, автоматическое слияние
ReplicatedMergeTreeВысокая доступность и отказоустойчивостьВсё, как у MergeTree + репликация на узлах
SummingMergeTreeАгрегации (например, финансовые данные)Автоматически суммирует числовые значения при слиянии
AggregatingMergeTreeХранение предварительно агрегированных данныхХранит агрегированные состояния вместо необработанных данных
ReplacingMergeTreeУдаление дубликатов и обновленияЗаменяет дублирующиеся строки с помощью колонки версии
CollapsingMergeTreeОтслеживание состояния событийЭффективен для логов событий с состояниями “BEGIN” и “END”
VersionedCollapsingMergeTreeОбработка журналов измененийПохож на CollapsingMergeTree, но отслеживает версии

Когда использовать движки MergeTree

MergeTree: стандартный выбор для крупных OLAP-запросов.
ReplicatedMergeTree: когда необходима высокая доступность в кластере.
SummingMergeTree / AggregatingMergeTree: когда требуется предварительная агрегация данных.
ReplacingMergeTree: когда необходимо обновление строк (например, дедупликация).
CollapsingMergeTree: для хранения логов событий или транзакционных логов.


2. Движки Log (Быстрая вставка, без индексации)

Движки на основе журналов хранят данные как необработанные журнальные записи, не поддерживающие индексацию. Они полезны для временных таблиц или буферизации в реальном времени.

ДвигательЛучше всего дляКлючевые особенности
LogОтладка и малые наборы данныхБыстрая запись, нет первичного ключа, требуется полный скан
TinyLogОчень маленькие наборы данныхПростой storage, быстрая запись, низкие накладные расходы
StripeLogАльтернатива Log с балансировкойНемного оптимизирован для производительности
MemoryВременные таблицы в памятиОчень быстро, но данные теряются при перезапуске

Когда использовать движки Log

Log / TinyLog: Малые, временные таблицы с быстрой вставкой.
Memory: Кэш-подобное хранение, когда не требуется постоянство данных.


3. Специальные движки

Эти движки позволяют ClickHouse распределять данные по нескольким узлам или запрашивать внешние системы.

ДвижокЛучше всего дляКлючевые особенности
DistributedЗапросы по шардамНаправляет запросы на подлежащие таблицы на различных узлах
DictionaryБыстрые ключ-значение поискиИспользуется для предварительно загруженных справочных данных
External DataЗапросы внешних источниковПозволяет делать соединения с внешними системами
BufferБуферизация быстрых вставокВременно хранит вставки перед записью в MergeTree

Когда использовать

Distributed: Масштабирование запросов по нескольким шардам в кластере.
Dictionary: Предварительная загрузка небольших справочных таблиц для быстрого поиска.
Buffer: Для обработки данных с высокой скоростью вставки перед слиянием в таблицу MergeTree.


4. Интеграционные движки (Доступ к внешним базам данных и хранилищам)

ClickHouse поддерживает запросы данных из внешних источников с использованием этих движков.

ДвигательЛучше всего дляКлючевые особенности
JDBCЗапросы SQL баз данныхПодключение к MySQL, PostgreSQL и др.
MySQLЧтение таблиц MySQLПозволяет ClickHouse запрашивать MySQL напрямую
PostgreSQLЧтение таблиц PostgreSQLАналогично движку MySQL
HDFSЧтение из Hadoop HDFSПоддержка интеграций с большими данными
S3Чтение/запись в Amazon S3Работает с AWS S3 и совместимым хранилищем
KafkaОбработка потоковых данныхПриём сообщений в реальном времени от Kafka
RabbitMQОбработка сообщений в очередиПохож на Kafka, но для RabbitMQ

Когда использовать интеграционные движки

JDBC / MySQL / PostgreSQL: Когда требуется федерация запросов между базами данных.
HDFS / S3: Когда работа с большими данными и хранилищами.
Kafka / RabbitMQ: Для обработки данных в реальном времени.


5. Другие специализированные движки

ClickHouse также предоставляет движки для специфических случаев использования.

ДвигательЛучше всего дляКлючевые особенности
NullУдаление данныхЗапись успешна, но данные не сохраняются
MergeЗапросы нескольких таблиц как однаВиртуальная таблица, которая комбинирует несколько таблиц
ViewСоздание виртуальных таблицИспользуется для определения логических представлений (аналог SQL представлений)
MaterializedViewПредварительный расчёт результатовХранит предварительно вычисленные результаты запросов для более быстрого доступа

Когда использовать специализированные движки

Null: Когда нужно отключить вставки, но сохранить схему.
Merge: Когда нужно запросить несколько таблиц как единое целое.
View: Когда необходимо определить логические SQL-представления.
MaterializedView: Когда необходимо хранить предварительно вычисленные результаты запросов для повышения производительности.


6. Резюме: Как выбрать правильный движок таблиц

Сценарий использованияРекомендуемый движок
Общие OLAP-запросыMergeTree
Высокая доступность (репликация)ReplicatedMergeTree
Предварительная агрегация аналитикиSummingMergeTree, AggregatingMergeTree
Дедубликация данныхReplacingMergeTree
Отслеживание событийCollapsingMergeTree
Потоковые данные в реальном времениKafka, Buffer
Быстрые ключ-значение поискиDictionary
Распределённое выполнение запросовDistributed
Запросы к внешним базам данныхMySQL, PostgreSQL, JDBC
Интеграция с Hadoop/S3 хранилищамиHDFS, S3
Временные таблицы / быстрая вставкаLog, Memory