Apache Doris 与 ClickHouse 核心概念对比解析

Apache Doris 是目前极其热门的新一代实时 MPP 分析型数据库。相比于 ClickHouse,Doris 在使用体验上极大地降低了用户的心智负担。以下是 Doris 与 ClickHouse 在几个核心概念上的横向对比:

一、 分片与副本:Doris 的 Partition、Bucket 与 Tablet

在 ClickHouse 中,分片和副本通常需要在集群层面手工配置(甚至依赖 ZooKeeper)。而在 Doris 中,这一切都是全自动的。

  • 分片(Sharding):Doris 采用两级分片策略:Partition(分区)Bucket(分桶)
    • Partition:通常按时间切分(如按天分区),用于分离冷热数据。
    • Bucket:在分区内部,根据某个字段(如 user_id)进行 Hash 切分。Doris 里的 Bucket 完全等价于 ClickHouse 里的 Shard(分片)。
  • 副本(Replication)
    • 物理上,一个 Bucket 加上它的副本,在 Doris 中被称为一个 Tablet(数据分片),它是 Doris 底层存储和调度的最小物理单元。
    • 建表时只需指定 PROPERTIES("replication_num" = "3"),Doris 就会自动存 3 份。若节点宕机,Doris 的 FE(前端节点)会自动在其他机器上重建丢失的 Tablet 副本,完全无需依赖 ZooKeeper

二、 本地表 vs 分布式表:Doris 的“大一统”

这是 Doris 和 ClickHouse 最大的区别之一,也是 Doris 备受喜爱的原因

  • ClickHouse 的痛点:需要分别建 Local 表和 Distributed 表。写入时建议写 Local,查询时查 Distributed。业务代码需维护两套表名,甚至自己写代码做数据路由(算哈希决定发给哪台机器)。
  • Doris 的降维打击:没有本地表和分布式表的概念!
    • 单一逻辑表:在 Doris 中,表就是表(Logical Table)。你只需要直接 CREATE TABLE 订单表
    • 智能写入:连接 Doris 集群的任意一个节点(FE),直接 INSERT INTO 订单表。Doris 内部会自动帮你把数据路由、切分到各个后端节点(BE)的 Tablet 中。
    • 透明查询:直接 SELECT * FROM 订单表,Doris 自动生成分布式查询计划并汇总结果。
    • 总结:使用 Doris 就像使用单机 MySQL 一样简单,底层的分布式存储与计算逻辑对用户完全透明。

三、 表引擎与数据更新:Doris 的三大数据模型

ClickHouse 依靠繁多的 MergeTree 家族引擎应对不同场景。Doris 则将其抽象为三大数据模型(Data Model)

  1. Duplicate 模型(明细模型)
    • 等价于 ClickHouse 的基础 MergeTree
    • 特点:只追加写入(Append-only),不做任何聚合或去重。适合存日志、行为埋点。
  2. Aggregate 模型(聚合模型)
    • 等价于 ClickHouse 的 AggregatingMergeTree
    • 特点:数据导入时,自动按维度列将指标列进行聚合(SUM, MAX, MIN 等)。
  3. Unique 模型(主键模型)—— 重头戏!
    • 等价于 ClickHouse 的 ReplacingMergeTree,专门用于处理数据的更新(Update/Upsert)和删除。

核心对比:Doris 的 Unique 模型 vs CK 的 ReplacingMergeTree

在处理数据更新时,CK 的 ReplacingMergeTree 属于异步假更新,查询时必须加 FINAL 关键字才能保证数据准确,这极大地消耗了性能。

Doris 在更新机制上经历了两次进化,目前处于行业领先地位:

  • 早期 Doris(Merge-on-Read,读时合并)
    和 CK 类似。磁盘上存有多条主键相同的历史数据,查询时强制在内存中将旧数据折叠,只返回最新的。查询性能较差。
  • 新版 Doris(Merge-on-Write,写时合并)—— 杀手锏功能
    在建表时开启 PROPERTIES("enable_unique_key_merge_on_write" = "true")
    • 原理:插入更新数据时,Doris 会立刻用 Bitmap(位图) 找到旧数据的位置,并直接打上“已删除”标记。
    • 查询效果:查询时,直接根据 Bitmap 过滤掉被标记的旧数据,无需在内存中做任何复杂的去重合并操作
    • 优势:不仅实现了类似 MySQL 的精准更新,而且查询性能极高(几乎逼近不带更新功能的 Duplicate 模型),彻底解决了 ClickHouse 加 FINAL 查询慢的痛点。

四、 总结:ClickHouse 与 Doris 怎么选?

  1. 选 ClickHouse:如果你有海量的数据(PB级别),极少甚至没有更新操作,追求极致的大宽表单表查询速度,且团队有较强的运维能力兜底(能搞定 Zookeeper、本地表直写等复杂架构)。
  2. 选 Doris:如果你需要频繁更新数据(如实时同步 MySQL 的 Binlog)、业务线需要多表关联(JOIN 性能 Doris 远超 CK),并且希望系统极其简单易用(像 MySQL 一样一把梭,不需要业务线自己做分片和路由),那么 Doris 是目前更好的选择。
posted on 2026-04-17 16:30  茶倌  阅读(76)  评论(0)    收藏  举报