ClickHouse/docs/ru/engines/database-engines/atomic.md
2022-04-09 07:29:05 -06:00

4.8 KiB
Raw Blame History

sidebar_position sidebar_label
32 Atomic

Atomic

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

Создание БД

CREATE DATABASE test [ENGINE = Atomic];

Особенности и рекомендации

UUID

Каждая таблица в базе данных Atomic имеет уникальный UUID и хранит данные в папке /clickhouse_path/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/, где xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy - это UUID таблицы. Обычно UUID генерируется автоматически, но пользователь также может явно указать UUID в момент создания таблицы (однако это не рекомендуется). Для отображения UUID в запросе SHOW CREATE вы можете использовать настройку show_table_uuid_in_table_create_query_if_not_nil. Результат выполнения в таком случае будет иметь вид:

CREATE TABLE name UUID '28f1c61c-2970-457a-bffe-454156ddcfef' (n UInt64) ENGINE = ...;

RENAME TABLE

Запросы RENAME выполняются без изменения UUID и перемещения табличных данных. Эти запросы не ожидают завершения использующих таблицу запросов и выполняются мгновенно.

DROP/DETACH TABLE

При выполнении запроса DROP TABLE никакие данные не удаляются. Таблица помечается как удаленная, метаданные перемещаются в папку /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;

вы можете использовать один атомарный запрос:

EXCHANGE TABLES new_table AND old_table;

ReplicatedMergeTree in Atomic Database

Для таблиц ReplicatedMergeTree рекомендуется не указывать параметры движка - путь в ZooKeeper и имя реплики. В этом случае будут использоваться параметры конфигурации: default_replica_path и default_replica_name. Если вы хотите определить параметры движка явно, рекомендуется использовать макрос {uuid}. Это удобно, так как автоматически генерируются уникальные пути для каждой таблицы в ZooKeeper.

Смотрите также