- 更高的 insert 吞吐量
- 更高的后台合并吞吐量
- 更高的变更吞吐量
- 更快的扩容和缩容操作
- 以更轻量的方式为 select 查询提供强一致性
内部信息
system.replication_queue 和 system.replicated_fetches 这两个表除外。SharedMergeTree 为这两个表提供了相应的替代表。
system.virtual_parts
该表是 SharedMergeTree 中 system.replication_queue 的替代表。它存储当前最新一组 parts 的信息,以及正在进行中的未来 parts (例如合并、变更和已删除分区) 的信息。
system.shared_merge_tree_fetches
该表是 SharedMergeTree 中 system.replicated_fetches 的替代表。它包含当前正在进行的、将主键和校验和拉取到内存中的操作信息。
SharedMergeTree 默认处于启用状态。
对于支持 SharedMergeTree 表引擎的服务,无需手动启用任何功能。你可以像以前一样创建表,系统会根据你在 CREATE TABLE 查询中指定的引擎,自动使用对应的 SharedMergeTree 表引擎。
my_table。
在 ClickHouse Cloud 中,default_table_engine=MergeTree,因此无需指定 ENGINE=MergeTree。以下查询与上述查询完全相同。
SHOW CREATE TABLE 查看其 CREATE TABLE 语句中使用的是哪种表引擎:
设置
insert_quorum— 所有写入 SharedMergeTree 的 insert 都是 quorum 插入 (写入共享存储) ,因此使用 SharedMergeTree 表引擎时不需要此设置。insert_quorum_parallel— 所有写入 SharedMergeTree 的 insert 都是 quorum 插入 (写入共享存储) ,因此使用 SharedMergeTree 表引擎时不需要此设置。select_sequential_consistency— 不要求 quorum 插入,但会在执行SELECT查询时给 clickhouse-keeper 带来额外负载
一致性
insert_quorum 或 insert_quorum_parallel 之类的设置。插入操作默认为 quorum 插入,这意味着元数据会存储在 ClickHouse-Keeper 中,并复制到至少达到 quorum 的 ClickHouse Keeper 节点。集群中的每个副本都会异步从 ClickHouse-Keeper 拉取新信息。
大多数情况下,你不应该使用 select_sequential_consistency 或 SYSTEM SYNC REPLICA LIGHTWEIGHT。异步复制已经足以覆盖大多数场景,而且延迟很低。只有在极少数你确实必须避免读取到过时数据的情况下,才建议按以下优先顺序处理:
-
如果你的读写查询是在同一会话中执行,或者都落在同一个节点上,则不需要使用
select_sequential_consistency,因为该副本已经拥有最新的元数据。 -
如果你写入一个副本、却从另一个副本读取,可以使用
SYSTEM SYNC REPLICA LIGHTWEIGHT强制该副本从 ClickHouse-Keeper 拉取元数据。 -
将
select_sequential_consistency作为查询设置的一部分使用。