メインコンテンツへスキップ
メインコンテンツへスキップ

Atomic

Atomic エンジンは、ノンブロッキングな DROP TABLE および RENAME TABLE クエリに加え、アトミックな EXCHANGE TABLES クエリをサポートします。Atomic データベースエンジンは、オープンソース版の ClickHouse でデフォルトとして使用されています。

注記

ClickHouse Cloud では、デフォルトで Shared データベースエンジン が使用されており、上記の操作もサポートしています。

データベースの作成

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 = ...;
注記

[SHOW CREATE クエリで UUID を表示するには、show_table_uuid_in_table_create_query_if_not_nil 設定を使用できます。

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 内でテーブルごとに一意なパスが自動的に生成されます。

メタデータディスク

SETTINGS 内で disk が指定されている場合、そのディスクはテーブルのメタデータファイルの保存に使用されます。 例えば次のとおりです。

CREATE TABLE db (n UInt64) ENGINE = Atomic SETTINGS disk=disk(type='local', path='/var/lib/clickhouse-disks/db_disk');

未指定の場合は、database_disk.disk で定義されたディスクがデフォルトで使用されます。

関連項目