KeeperMap テーブルエンジン
このエンジンを使用すると、Keeper/ZooKeeper クラスターを、線形化可能な書き込みと逐次一貫な読み取りを備えた一貫性のあるキー・バリュー ストアとして利用できます。
KeeperMap ストレージエンジンを有効化するには、テーブルを保存する ZooKeeper パスを <keeper_map_path_prefix> 設定で定義する必要があります。
例:
ここで path には任意の有効な 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 内の /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 に設定すると、データの取得および更新は、アトミックに実行された場合にのみ成功します。