KeeperMap
このエンジンを使用すると、Keeper/ZooKeeperクラスタを一貫したキー・バリュー・ストアとして、線形化された書き込みと逐次的一貫性のある読み取りを行うことができます。
KeeperMapストレージエンジンを有効にするには、<keeper_map_path_prefix>
設定を使用して、テーブルが保存されるZooKeeperパスを定義する必要があります。
例えば:
ここで、パスは他の有効なZooKeeperパスであれば何でも構いません。
テーブルの作成
エンジンのパラメータ:
root_path
-table_name
が保存されるZooKeeperパス。
このパスには<keeper_map_path_prefix>
設定で定義されたプレフィックスを含めてはいけません。プレフィックスは自動的にroot_path
に追加されます。
さらに、auxiliary_zookeeper_cluster_name:/some/path
の形式もサポートされており、ここでauxiliary_zookeeper_cluster
は<auxiliary_zookeepers>
設定内で定義されたZooKeeperクラスタです。
デフォルトでは、<zookeeper>
設定内で定義されたZooKeeperクラスタが使用されます。keys_limit
- テーブル内に許可されるキーの数。
この制限はソフトリミットであり、一部の特殊なケースでは、もっと多くのキーがテーブルに存在する可能性があります。primary_key_name
– カラムリスト内の任意のカラム名。primary key
は指定する必要があります。主キーでは、1つのカラムのみをサポートします。主キーはZooKeeper内のnode name
としてバイナリ形式でシリアライズされます。- 主キー以外のカラムは、対応する順序でバイナリ形式でシリアライズされ、シリアライズされたキーによって定義された結果のノードの値として保存されます。
equals
またはin
フィルタリングを持つクエリは、Keeper
からのマルチキーのルックアップに最適化されます。それ以外の場合、すべての値が取得されます。
例:
で
各値は、(v1, v2, v3)
のバイナリシリアライズであり、/keeper_map_tables/keeper_map_table/data/serialized_key
に Keeper
内で保存されます。
さらに、キーの数にはソフトリミットとして4が設定されています。
同じZooKeeperパスに複数のテーブルが作成されると、値はそのパスを使用するテーブルが少なくとも1つ存在する限り永続化されます。
結果として、テーブルを作成する際に ON CLUSTER
句を使い、複数のClickHouseインスタンスからデータを共有することが可能です。
もちろん、無関係なClickHouseインスタンスで同じパスを使って手動で CREATE TABLE
を実行して、同じデータ共有効果を得ることも可能です。
サポートされている操作
挿入
新しい行が KeeperMap
に挿入される際、キーが存在しない場合、新しいエントリーが作成されます。
キーが存在し、設定 keeper_map_strict_mode
が true
に設定されている場合、例外がスローされます。それ以外の場合、キーの値は上書きされます。
例:
削除
行は DELETE
クエリまたは TRUNCATE
を使用して削除できます。
キーが存在し、設定 keeper_map_strict_mode
が true
に設定されている場合、データの取得と削除は原子的に実行される場合にのみ成功します。
更新
値は ALTER TABLE
クエリを使用して更新できます。主キーは更新できません。
設定 keeper_map_strict_mode
が true
に設定されている場合、データの取得と更新は原子的に実行される場合にのみ成功します。