ReplicatedMergeTree、Distributed 和 MergeTree表引擎对比表格

维度 MergeTree ReplicatedMergeTree Distributed
核心作用 基础存储引擎,支持高效写入与分区查询 在 MergeTree 基础上实现副本间数据复制 分布式查询路由代理,不存储数据
是否存储数据 ✅ 是 ✅ 是(每个副本都存) ❌ 否(仅逻辑视图)
数据复制能力 ❌ 不支持 ✅ 支持,通过 ZooKeeper 协调副本同步 ❌ 不直接复制数据,依赖底层表
分片管理 ❌ 无分片功能 ❌ 仅限单分片内副本同步 ✅ 支持跨节点分片,按 sharding_key 分布数据
ZooKeeper 依赖 ❌ 无依赖 ✅ 必须依赖 ZooKeeper 或 ClickHouse Keeper ❌ 无直接依赖(但底层 Replicated 表可能依赖)
高可用性 ❌ 单点故障风险 ✅ 支持故障转移,副本可自动切换 ✅ 查询可路由到健康节点,提升容错
写入机制 直接写入本地磁盘,异步合并数据片段 写入一个副本,由 ZooKeeper 触发其他副本同步 写入时将数据分发到各分片的本地表
读取机制 仅读取本节点数据 可从本地副本读取,支持负载均衡策略 广播查询到所有相关分片,汇总结果返回
典型使用场景 单节点海量数据存储,如日志、时序数据 多副本高可用集群,需数据冗余和容灾 跨分片统一查询入口,构建分布式数据仓库
是否支持 ALTER ✅ 支持部分操作(如 ADD COLUMN) ✅ 支持,变更通过 ZooKeeper 同步到所有副本 ❌ 不适用(无实际数据)
数据一致性保障 N/A 最终一致性(依赖副本同步进度) 依赖底层表的一致性机制
常见搭配方式 独立使用或作为本地表基础 作为分片内的复制表,常与 Distributed 配合使用 指向 ReplicatedMergeTree 或 MergeTree 本地表

使用三类引擎建表示例

MergeTree 引擎建表语句示例

CREATE TABLE stable_ai***_metric_value
(
    `ts` DateTime('Asia/Shanghai'),
    `idc` String,
    `province` FixedString(2),
    `province_name` String,
    `province_bm8` String,
    `pod_id` String,
    `metric_name` String,
    `top` Float64,
    `middle` Float64,
    `bottom` Float64,
    `app` String,
    `app_no` String,
    `namespace` String,
    `c_start` FixedString(19),
    `c_end` FixedString(19),
    `period` Int16,
    `time` FixedString(19)
)
ENGINE = MergeTree
PARTITION BY toYYYYMMDD(ts)
PRIMARY KEY (ts,
 idc,
 province,
 app,
 pod_id,
 metric_name)
ORDER BY (ts,
 idc,
 province,
 app,
 pod_id,
 metric_name)
TTL ts + toIntervalDay(7)
SETTINGS index_granularity = 8192;

ReplicatedMergeTree 引擎建表

CREATE TABLE stable_ai***_metric_value
ON CLUSTER ck_cluster
(
    `ts` DateTime('Asia/Shanghai'),
    `idc` String,
    `province` FixedString(2),
    `province_name` String,
    `province_bm8` String,
    `pod_id` String,
    `metric_name` String,
    `top` Float64,
    `middle` Float64,
    `bottom` Float64,
    `app` String,
    `app_no` String,
    `namespace` String,
    `c_start` FixedString(19),
    `c_end` FixedString(19),
    `period` Int16,
    `time` FixedString(19)
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}')
PARTITION BY toYYYYMMDD(ts)
PRIMARY KEY (ts,
 idc,
 province,
 app,
 pod_id,
 metric_name)
ORDER BY (ts,
 idc,
 province,
 app,
 pod_id,
 metric_name)
TTL ts + toIntervalDay(7)
SETTINGS index_granularity = 8192;

Distributed 引擎建表

CREATE TABLE real_saas_health_degree.stable_ai***_metric_value_distributed
ON CLUSTER ck_cluster
(
    `ts` DateTime('Asia/Shanghai'),
    `idc` String,
    `province` FixedString(2),
    `province_name` String,
    `province_bm8` String,
    `pod_id` String,
    `metric_name` String,
    `top` Float64,
    `middle` Float64,
    `bottom` Float64,
    `app` String,
    `app_no` String,
    `namespace` String,
    `c_start` FixedString(19),
    `c_end` FixedString(19),
    `period` Int16,
    `time` FixedString(19)
)
ENGINE = Distributed(ck_cluster, real_saas_health_degree, stable_aiops_metric_value, rand())

附件一:Clickhouse常用sql

-- 查询集群名
select * from system.clusters 

-- 查看集群分片/副本分布
SELECT * FROM system.clusters WHERE cluster = 'ck_cluster';

-- 检查宏定义值
SELECT * FROM system.macros;

-- 查询所有表名
SELECT * FROM system.tables 

附件二:clickhouse集群表删除语句生成语句

SELECT 'DROP TABLE real_saas_health_***.'||name || ' ON CLUSTER ck_cluster SYNC;'
  FROM system.tables 
 WHERE database = 'real_saas_health_***' 
   and engine='ReplicatedMergeTree'

附件三:ClickHouse基础知识

ClickHouse‌ 是一个专为‌在线分析处理(OLAP)‌设计的高性能列式数据库管理系统,由俄罗斯 Yandex 公司开发并开源,以‌极快的查询速度‌和‌高吞吐能力‌著称,适用于海量数据的实时分析场景 。

它特别适合以下场景:

  • 实时报表与监控系统
  • 用户行为分析与画像
  • 日志与事件数据的即席查询
  • 大宽表的多维自由探索分析

✅ 核心特性解析

  1. 列式存储
    数据按列而非按行存储,查询时仅读取所需列,大幅减少 I/O,提升聚合效率 。

  2. 向量化执行引擎
    以“块”为单位处理数据,充分利用 CPU 的 SIMD 指令并行计算,显著加速查询 。

  3. 高效压缩
    同一列数据类型一致,压缩率高(通常压缩比达 5-10 倍),节省存储并提升读取性能 。

  4. 分布式架构
    支持分片(Shard)与副本(Replica),数据可分布于多个节点,查询自动并行执行,具备线性扩展能力 。

  5. SQL 支持
    兼容标准 SQL 语法,支持 GROUP BYJOININ 子查询等,学习成本低,易于集成 BI 工具 。

  6. 高吞吐写入
    适合批量写入(>1000 行/次),不支持高频单行更新或事务,数据通常“只增不改” 。


⚠️ 使用限制需知

  • ❌ 不支持事务与强一致性
  • ❌ 不支持真正的行级更新/删除(需通过特定表引擎变通实现)
  • ❌ 不支持二级索引与窗口函数(当前版本)
  • ❌ 复杂 JOIN 性能较弱,建议在应用层预处理关联

附件四:ClickHouse常用的客户端工具软件

https://dbeaver.io/

https://dbeaver.io/download/

 

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐