KeeperMap
このエンジンは、Keeper/ZooKeeper クラスターを一貫したキー-バリュー ストアとして使用し、線形化可能な書き込みと順次一貫性のある読み取りを提供します。
KeeperMap ストレージエンジンを有効にするには、テーブルが保存される ZooKeeper パスを <keeper_map_path_prefix>
設定を使用して定義する必要があります。
例えば:
ここで、パスは有効な他の 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
からのマルチキーのルックアップに最適化されます。それ以外の場合、すべての値が取得されます。
例:
<clickhouse>
設定が次のようになっている場合:
各値、すなわち (v1, v2, v3)
のバイナリシリアル化は、Keeper
の /keeper_map_tables/keeper_map_table/data/serialized_key
内に保存されます。
さらに、キーの数にはソフトリミットとして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
に設定されている場合、データの取得と更新は原子的に実行される場合にのみ成功します。