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 中,表就是表(Logical Table)。你只需要直接
三、 表引擎与数据更新:Doris 的三大数据模型
ClickHouse 依靠繁多的 MergeTree 家族引擎应对不同场景。Doris 则将其抽象为三大数据模型(Data Model):
- Duplicate 模型(明细模型):
- 等价于 ClickHouse 的基础
MergeTree。 - 特点:只追加写入(Append-only),不做任何聚合或去重。适合存日志、行为埋点。
- 等价于 ClickHouse 的基础
- Aggregate 模型(聚合模型):
- 等价于 ClickHouse 的
AggregatingMergeTree。 - 特点:数据导入时,自动按维度列将指标列进行聚合(SUM, MAX, MIN 等)。
- 等价于 ClickHouse 的
- Unique 模型(主键模型)—— 重头戏!:
- 等价于 ClickHouse 的
ReplacingMergeTree,专门用于处理数据的更新(Update/Upsert)和删除。
- 等价于 ClickHouse 的
核心对比: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 怎么选?
- 选 ClickHouse:如果你有海量的数据(PB级别),极少甚至没有更新操作,追求极致的大宽表单表查询速度,且团队有较强的运维能力兜底(能搞定 Zookeeper、本地表直写等复杂架构)。
- 选 Doris:如果你需要频繁更新数据(如实时同步 MySQL 的 Binlog)、业务线需要多表关联(JOIN 性能 Doris 远超 CK),并且希望系统极其简单易用(像 MySQL 一样一把梭,不需要业务线自己做分片和路由),那么 Doris 是目前更好的选择。
浙公网安备 33010602011771号