Движок Atomic поддерживает неблокирующие запросы DROP TABLE и RENAME TABLE, а также атомарные запросы EXCHANGE TABLES. В ClickHouse с открытым исходным кодом по умолчанию используется движок базы данных Atomic.
Создание базы данных
CREATE DATABASE test [ENGINE = Atomic] [SETTINGS disk=...];Особенности и рекомендации
UUID таблицы
У каждой таблицы в базе данных Atomic есть постоянный UUID, а её данные хранятся в следующем каталоге:
/clickhouse_path/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/Где xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy — UUID таблицы.
По умолчанию UUID генерируется автоматически. Однако при создании таблицы пользователи могут явно указать UUID, хотя делать это не рекомендуется.
Например:
CREATE TABLE name UUID '28f1c61c-2970-457a-bffe-454156ddcfef' (n UInt64) ENGINE = ...;RENAME TABLE
Запросы RENAME не изменяют UUID и не перемещают данные таблицы. Они выполняются немедленно и не ждут завершения других запросов, использующих эту таблицу.
DROP/DETACH TABLE
При использовании DROP TABLE данные не удаляются. Движок Atomic лишь помечает таблицу как удалённую, перемещая её метаданные в /clickhouse_path/metadata_dropped/, и уведомляет фоновый поток. Задержка перед окончательным удалением данных таблицы задаётся настройкой database_atomic_delay_before_drop_table_sec.
Вы можете включить синхронный режим с помощью модификатора SYNC. Для этого используйте настройку database_atomic_wait_for_drop_and_detach_synchronously. В этом случае DROP ожидает завершения выполняющихся SELECT, INSERT и других запросов, использующих таблицу. Таблица будет удалена, когда она перестанет использоваться.
EXCHANGE TABLES/DICTIONARIES
Запрос EXCHANGE атомарно меняет местами таблицы или словари. Например, вместо этой неатомарной операции:
RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table;можно использовать базу данных Atomic:
EXCHANGE TABLES new_table AND old_table;ReplicatedMergeTree в базе данных Atomic
Для таблиц ReplicatedMergeTree рекомендуется не задавать параметры движка для пути в ZooKeeper и имени реплики. В этом случае будут использоваться параметры конфигурации default_replica_path и default_replica_name. Если вы хотите явно указать параметры движка, рекомендуется использовать макрос {uuid}. Это гарантирует автоматическое создание уникальных путей в ZooKeeper для каждой таблицы.
Диск для метаданных
Когда в SETTINGS указан параметр disk, этот диск используется для хранения файлов метаданных таблицы.
Например:
CREATE TABLE db (n UInt64) ENGINE = Atomic SETTINGS disk=disk(type='local', path='/var/lib/clickhouse-disks/db_disk');Если не указано, по умолчанию используется диск, заданный в database_disk.disk.
См. также
- системная таблица system.databases