跳到主要内容

Atomic

它支持非阻塞 DROP TABLERENAME 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(不建议这样做)。

例如

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

您可以使用 show_table_uuid_in_table_create_query_if_not_nil 设置来在 SHOW CREATE 查询中显示 UUID。

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 查询会原子地交换表或字典。例如,您可以使用一个原子查询,而不是以下非原子操作

RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table;

您可以使用一个原子查询

EXCHANGE TABLES new_table AND old_table;

Atomic 数据库中的 ReplicatedMergeTree

对于 ReplicatedMergeTree 表,建议不要指定引擎参数 - ZooKeeper 中的路径和副本名称。在这种情况下,将使用配置参数 default_replica_pathdefault_replica_name。如果您想显式指定引擎参数,建议使用 {uuid} 宏。这对于为 ZooKeeper 中的每个表自动生成唯一路径很有用。

另请参阅