Atomic
Atomic
引擎支持非阻塞的 DROP TABLE
和 RENAME TABLE
查询,以及原子性的 EXCHANGE TABLES
查询。 默认情况下使用 Atomic
数据库引擎。
在 ClickHouse Cloud 上,默认使用 Replicated
数据库引擎。
创建数据库
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
会等待正在运行的 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;
Atomic 数据库中的 ReplicatedMergeTree
对于 ReplicatedMergeTree
表,建议不要为 ZooKeeper 中的路径和副本名称指定引擎参数。 在这种情况下,将使用配置参数 default_replica_path
和 default_replica_name
。 如果要显式指定引擎参数,建议使用 {uuid}
宏。 这确保为 ZooKeeper 中的每个表自动生成唯一的路径。
参见
- system.databases 系统表