Atomic
Atomicエンジンは、非ブロッキングのDROP TABLEおよびRENAME TABLEクエリ、及び原子的なEXCHANGE TABLESクエリをサポートしています。Atomicデータベースエンジンは、オープンソースのClickHouseでデフォルトで使用されます。
ClickHouse Cloudでは、デフォルトでSharedデータベースエンジンが使用されており、前述の操作もサポートしています。
データベースの作成
特殊事項と推奨事項
テーブルUUID
Atomicデータベースの各テーブルには、永続的なUUIDがあり、そのデータは以下のディレクトリに保存されます:
ここで、xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyyはテーブルのUUIDです。
デフォルトでは、UUIDは自動的に生成されます。ただし、ユーザーはテーブル作成時に明示的にUUIDを指定することもできますが、これは推奨されません。
例えば:
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クエリは、テーブルまたは辞書を原子的にスワップします。例えば、この非原子的な操作の代わりに:
原子的な操作を使用できます:
atomicデータベースのReplicatedMergeTree
ReplicatedMergeTreeテーブルに対しては、ZooKeeperのパスとレプリカ名に対してエンジンパラメータを指定しないことを推奨します。この場合、構成パラメータdefault_replica_pathおよびdefault_replica_nameが使用されます。エンジンパラメータを明示的に指定したい場合は、{uuid}マクロを使用することを推奨します。これにより、ZooKeeper内の各テーブルに対してユニークなパスが自動的に生成されます。
メタデータディスク
SETTINGSでdiskが指定されている場合、そのディスクはテーブルメタデータファイルを保存するために使用されます。
例えば:
未指定の場合、database_disk.diskで定義されたディスクがデフォルトで使用されます。
参照
- system.databasesシステムテーブル