Atomic
Atomic 引擎支持非阻塞的 DROP TABLE 和 RENAME TABLE 查询,以及原子性的 EXCHANGE TABLES 查询。在开源 ClickHouse 中,默认使用 Atomic 数据库引擎。
在 ClickHouse Cloud 中,默认使用 Shared 数据库引擎,它同样支持上述操作。
创建数据库
具体说明和建议
表 UUID
Atomic 数据库中的每个表都有一个持久的 UUID,其数据存储在以下目录中:
其中 xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy 是该表的 UUID。
默认情况下,UUID 会自动生成。不过,用户在创建表时也可以显式指定该 UUID,但不推荐这样做。
例如:
您可以使用 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 查询会以原子方式交换表或字典。例如,您可以用它替代如下非原子操作:
你可以使用一个原子类型:
原子数据库中的 ReplicatedMergeTree
对于 ReplicatedMergeTree 表,建议不要在引擎参数中显式指定 ZooKeeper 路径和副本名称。在这种情况下,将使用配置参数 default_replica_path 和 default_replica_name。如果需要显式指定引擎参数,建议使用 {uuid} 宏。这样可以确保为 ZooKeeper 中的每个表自动生成唯一路径。
元数据磁盘
当在 SETTINGS 中指定了 disk 时,将使用该磁盘来存储表的元数据文件。
例如:
若未指定,默认使用在 database_disk.disk 中定义的磁盘。
另请参阅
- system.databases 系统表