ClickHouse
September 16, 2023

Движки БД

Atomic, Lazy, Replicated, MySQL, PostgreSQL, SQLite.

Atomic.

Используется по-умолчанию.

Поддерживает неблокирующие запросы DROP TABLE и RENAME TABLE и атомарные запросы EXCHANGE TABLES. Движок Atomic используется по умолчанию.

CREATE DATABASE test [ENGINE = Atomic];

Каждая таблица в базе данных Atomic имеет уникальный UUID и хранит данные в папке /clickhouse_path/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/, где xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy - это UUID таблицы.

Replicated.

Движок основан на движке Atomic. Он поддерживает репликацию метаданных через журнал DDL, записываемый в ZooKeeper и выполняемый на всех репликах для данной базы данных.

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

CREATE DATABASE testdb ENGINE = Replicated('zoo_path', 'shard_name', 'replica_name') [SETTINGS ...]

Lazy.

Сохраняет таблицы только в оперативной памяти expiration_time_in_seconds через несколько секунд после последнего доступа. Может использоваться только с таблицами *Log.

Он оптимизирован для хранения множества небольших таблиц *Log, для которых обычно существует большой временной интервал между обращениями.

CREATE DATABASE testlazy ENGINE = Lazy(expiration_time_in_seconds);

PostgreSQL.

Позволяет подключаться к БД на удаленном сервере PostgreSQL. Поддерживает операции чтения и записи (запросы SELECT и INSERT) для обмена данными между ClickHouse и PostgreSQL.

Позволяет в реальном времени получать от удаленного сервера PostgreSQL информацию о таблицах БД и их структуре с помощью запросов SHOW TABLES и DESCRIBE TABLE.

Поддерживает операции изменения структуры таблиц (ALTER TABLE ... ADD|DROP COLUMN). Если параметр use_table_cache (см. ниже раздел Параметры движка) установлен в значение 1, структура таблицы кешируется, и изменения в структуре не отслеживаются, но будут обновлены, если выполнить команды DETACH и ATTACH.

CREATE DATABASE test_database
ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `schema`, `use_table_cache`]);

Полезные ссылки.

Atomic: https://clickhouse.com/docs/ru/engines/database-engines/atomic

Lazy: https://clickhouse.com/docs/ru/engines/database-engines/lazy

PostgreSQL: https://clickhouse.com/docs/ru/engines/database-engines/postgresql

MySQL: https://clickhouse.com/docs/ru/engines/database-engines/mysql

Replicated: https://clickhouse.com/docs/ru/engines/database-engines/replicated