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

3.1 KiB
Raw Blame History

toc_priority toc_title
32 Atomic

Atomic

它支持非阻塞的DROP TABLERENAME TABLE查询和原子的EXCHANGE TABLES t1 AND t2查询。默认情况下使用Atomic数据库引擎。

创建数据库

  CREATE DATABASE test[ ENGINE = Atomic];

使用方式

Table UUID

数据库Atomic中的所有表都有唯一的UUID,并将数据存储在目录/clickhouse_path/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/,其中xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy是该表的UUID。

通常UUID是自动生成的但用户也可以在创建表时以相同的方式显式指定UUID(不建议这样做)。可以使用 show_table_uuid_in_table_create_query_if_not_nil设置。显示UUID的使用SHOW CREATE查询。例如:

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

RENAME TABLES

RENAME查询是在不更改UUID和移动表数据的情况下执行的。这些查询不会等待使用表的查询完成而是会立即执行。

DROP/DETACH TABLES

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

EXCHANGE以原子方式交换表。因此,不是这种非原子操作:

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

可以使用一个原子查询:

EXCHANGE TABLES new_table AND old_table;

ReplicatedMergeTree in Atomic Database

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

另请参考