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 |