4.1 KiB
slug | sidebar_label | sidebar_position |
---|---|---|
/ja/engines/database-engines/atomic | Atomic | 10 |
Atomic
非ブロッキングなDROP TABLEおよびRENAME 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 = ...;
:::note
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
はテーブルを使用している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 システムテーブル