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,它仅支持主键中的一列。主键将以二进制形式序列化为 ZooKeeper 内的node name。 - 主键以外的列将按相应顺序序列化为二进制,并存储为由序列化的键定义的结果节点的 值。
- 使用键
equals或in过滤的查询将被优化为从Keeper多键查找,否则将提取所有值。
示例
with
每个值((v1, v2, v3) 的二进制序列化)将存储在 Keeper 中的 /keeper_map_tables/keeper_map_table/data/serialized_key 中。 此外,键的数量对键的数量有一个软限制,为 4。
如果多个表创建在相同的 ZooKeeper 路径上,则只要至少有一个表使用它,这些值就会被持久化。
因此,可以在创建表时使用 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,则只有在原子执行时,才能成功获取和更新数据。