ClickHouse/docs/ru/engines/database-engines/atomic.md

55 lines
4.8 KiB
Markdown
Raw Normal View History

2021-03-21 21:22:51 +00:00
---
toc_priority: 32
toc_title: Atomic
---
# Atomic {#atomic}
Поддерживает неблокирующие запросы [DROP TABLE](#drop-detach-table) и [RENAME TABLE](#rename-table) и атомарные запросы [EXCHANGE TABLES](#exchange-tables). Движок `Atomic` используется по умолчанию.
2021-03-21 21:22:51 +00:00
## Создание БД {#creating-a-database}
``` sql
CREATE DATABASE test [ENGINE = Atomic];
2021-03-21 21:22:51 +00:00
```
2021-03-22 21:08:08 +00:00
## Особенности и рекомендации {#specifics-and-recommendations}
2021-03-21 21:22:51 +00:00
2021-04-02 19:16:48 +00:00
### UUID {#table-uuid}
2021-03-21 21:22:51 +00:00
2021-04-02 19:16:48 +00:00
Каждая таблица в базе данных `Atomic` имеет уникальный [UUID](../../sql-reference/data-types/uuid.md) и хранит данные в папке `/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](../../operations/settings/settings.md#show_table_uuid_in_table_create_query_if_not_nil). Результат выполнения в таком случае будет иметь вид:
2021-03-21 21:22:51 +00:00
2021-04-02 19:16:48 +00:00
```sql
CREATE TABLE name UUID '28f1c61c-2970-457a-bffe-454156ddcfef' (n UInt64) ENGINE = ...;
```
### RENAME TABLE {#rename-table}
2021-03-22 21:08:08 +00:00
Запросы [RENAME](../../sql-reference/statements/rename.md) выполняются без изменения UUID и перемещения табличных данных. Эти запросы не ожидают завершения использующих таблицу запросов и выполняются мгновенно.
2021-03-21 21:22:51 +00:00
2021-04-02 19:16:48 +00:00
### DROP/DETACH TABLE {#drop-detach-table}
2021-03-22 21:08:08 +00:00
2021-04-02 19:16:48 +00:00
При выполнении запроса `DROP TABLE` никакие данные не удаляются. Таблица помечается как удаленная, метаданные перемещаются в папку `/clickhouse_path/metadata_dropped/` и база данных уведомляет фоновый поток. Задержка перед окончательным удалением данных задается настройкой [database_atomic_delay_before_drop_table_sec](../../operations/server-configuration-parameters/settings.md#database_atomic_delay_before_drop_table_sec).
Вы можете задать синхронный режим, определяя модификатор `SYNC`. Используйте для этого настройку [database_atomic_wait_for_drop_and_detach_synchronously](../../operations/settings/settings.md#database_atomic_wait_for_drop_and_detach_synchronously). В этом случае запрос `DROP` ждет завершения `SELECT`, `INSERT` и других запросов, которые используют таблицу. Таблица будет фактически удалена, когда она не будет использоваться.
2021-03-21 21:22:51 +00:00
### EXCHANGE TABLES/DICTIONARIES {#exchange-tables}
2021-03-21 21:22:51 +00:00
Запрос [EXCHANGE](../../sql-reference/statements/exchange.md) атомарно меняет местами две таблицы или два словаря. Например, вместо неатомарной операции:
2021-03-21 21:22:51 +00:00
2021-04-02 19:16:48 +00:00
```sql
RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table;
2021-03-21 21:22:51 +00:00
```
2021-04-02 19:16:48 +00:00
вы можете использовать один атомарный запрос:
2021-03-21 21:22:51 +00:00
``` sql
2021-04-02 19:16:48 +00:00
EXCHANGE TABLES new_table AND old_table;
2021-03-21 21:22:51 +00:00
```
2021-04-02 19:16:48 +00:00
### ReplicatedMergeTree in Atomic Database {#replicatedmergetree-in-atomic-database}
2021-03-21 21:22:51 +00:00
Для таблиц [ReplicatedMergeTree](../table-engines/mergetree-family/replication.md#table_engines-replication) рекомендуется не указывать параметры движка - путь в ZooKeeper и имя реплики. В этом случае будут использоваться параметры конфигурации: [default_replica_path](../../operations/server-configuration-parameters/settings.md#default_replica_path) и [default_replica_name](../../operations/server-configuration-parameters/settings.md#default_replica_name). Если вы хотите определить параметры движка явно, рекомендуется использовать макрос `{uuid}`. Это удобно, так как автоматически генерируются уникальные пути для каждой таблицы в ZooKeeper.
2021-03-21 21:22:51 +00:00
2021-03-22 21:08:08 +00:00
## Смотрите также
- Системная таблица [system.databases](../../operations/system-tables/databases.md).