中间件速查手册
数据仓库与 OLAP · doris

Doris

MPP 架构的实时数仓,FE 管元数据 BE 存数据

数据仓库与 OLAPApache-2.0Java / C++学习难度:中等

Doris 是百度开源的 MPP 分析数据库(StarRocks 也源于它)。FE 负责解析 SQL、规划执行,BE 负责存储和计算,查询被拆成多个 fragment 在所有 BE 上并行跑。相比 ClickHouse,它 join 更强、并发更高、导入更省心。

01

它解决什么问题

ClickHouse 做宽表分析很快,但业务方要的多表 join 和分析师写的复杂 SQL 经常跑不动;而且高并发点查撑不住,运维还得自己补一堆周边。

真实场景:典型场景:数仓 DWS 层建在 Doris 上,报表平台 200 个用户同时在线查不同维度,还要支持按主键更新维表。

02

核心概念

每个概念一句话 + 一个类比。点击卡片看更详细的解释。

03

数据流转动画

跟着步骤看一条数据从进入系统到被处理完的完整路径,可以暂停、重播和调速。

Flow animation

一条查询在 Doris 里是怎么并行跑完的

客户端MySQL 协议FE解析 / 规划 / 调度BE 1tablet 副本 ABE 2tablet 副本 B结果汇总final merge

← 左右滑动查看完整流程图 →

01 / 05
1. 提交查询

客户端发来一条 SQL,FE 用 MySQL 协议接收,走标准解析流程。

提示:FE 只做规划和调度,真正的扫描、join、聚合全部下推到 BE 并行执行。 悬停图中的节点可以看概念解释。

04

优劣势

短句说清适合什么、不适合什么,选型时先看这一栏。

适合什么
  • MPP 并行 + 列存,多表 join 比 ClickHouse 稳
  • 支持主键模型(Unique Key),能按主键 upsert,维表更新友好
  • MySQL 协议,BI 工具和现有代码几乎零改造
  • FE 高可用、副本自动均衡,运维比 ClickHouse 省心
不适合什么
  • 单表极致扫描性能不如 ClickHouse(尤其宽表大聚合)
  • 写入是批量导入模型,不适合高频单条事务写
  • 版本迭代快,升级踩坑需要看 release notes
  • 集群最小规模要 3 FE + 3 BE,小项目成本偏高
05

常见使用场景

每个场景都配一句「为什么用它」。

01

实时数仓 DWS 层

Flink 实时写入 Doris,报表直接查 DWS 宽表。

为什么用它:支持主键更新 + 高并发查询,指标能实时刷新。

02

统一报表平台

几百个用户同时查不同维度,用物化视图扛住重复聚合。

为什么用它:MPP 并行 + 物化视图透明改写,并发和延迟都稳。

03

湖仓查询加速

通过 External Catalog 直接查 Hive / Iceberg 表,把热数据落到 Doris 内表。

为什么用它:冷热分离,既省存储又能秒级响应。

06

同类对比

和同赛道的组件并排看,差异一目了然。

HiveClickHouseDoris

三者常常同时存在:Hive 存原始与明细、Doris 做实时报表、ClickHouse 扛大屏聚合。选型先问「查询长什么样、并发多少、要不要更新」,再比性能。

打开对比页
07

常见问题

上手第一个月最容易卡住的地方。

Q1Doris 和 ClickHouse 到底怎么选?

看查询形态:单表大宽表、极致聚合性能、数据量 TB 级以上,选 ClickHouse;多表 join、需要按主键更新、并发高(几十上百 QPS)、团队想要 MySQL 兼容,选 Doris。预算够的话两个都上也很常见。

Q2数据怎么导进去?

主流三种:Stream Load(HTTP 推,适合批量文件)、Routine Load(直接消费 Kafka,最常用)、Broker Load(从 HDFS/S3 拉)。实时场景一般 Flink 写 Kafka,Doris 用 Routine Load 消费。

Q3分区分桶怎么设计?

分区用时间字段(按天或按月),方便冷数据删除;分桶用高基数的查询字段(如 user_id),桶数建议是 BE 数量的整数倍。分桶字段选错会导致数据倾斜,一个 BE 忙死其他闲着。

Q4Doris 和 StarRocks 是什么关系?

同源。Doris 从百度 Palo 捐给 Apache,StarRocks 是原团队出来做的商业版分支,后来两家各自演进:StarRocks 在向量化、湖分析上更激进,Doris 生态和社区更开放。选型时按团队能拿到的支持来定。