Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Atomic

Atomic 引擎支持非阻塞的 DROP TABLERENAME 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 会等待正在使用该表的 SELECTINSERT 及其他查询完成。该表会在不再被使用时被移除。

EXCHANGE TABLES/DICTIONARIES

EXCHANGE 查询可原子地交换表或字典。例如,可替代下面这种非原子操作:

Non-atomicsql
RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table;

你也可以使用 Atomic 数据库:

Atomicsql
EXCHANGE TABLES new_table AND old_table;

原子数据库中的 ReplicatedMergeTree

对于 ReplicatedMergeTree 表,建议不要指定 ZooKeeper 中的路径和副本名称这两个引擎参数。在这种情况下,将使用配置参数 default_replica_pathdefault_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 中定义的磁盘。

另请参见

Navigation