Doris
Doris(Apache Doris)是一个MPP 架构的实时分析型数据库(OLAP)。它的定位是数仓的查询服务层:把加工好的宽表/聚合结果放进来,支撑报表、看板、多维分析这类「高并发、低延迟、点查+聚合混合」的查询。相比 Hive 这种为吞吐设计的批处理引擎,Doris 追求的是秒级甚至亚秒级的交互式响应。
架构:FE + BE 两类角色
- FE(Frontend):负责元数据管理、SQL 解析与查询规划、协调调度。多个 FE 通过类 Raft 协议保证元数据一致和高可用。
- BE(Backend):负责数据的实际存储和计算。数据分片(Tablet)分布在多个 BE 上,查询时各 BE 并行计算再汇总——这就是 MPP(大规模并行处理)。
扩容就是加 BE,数据自动重新均衡;这套架构让它能随数据量和查询量水平扩展。
为什么查询快
- 列式存储:只读查询涉及的列,配合高压缩比,大幅减少 IO。
- 向量化执行:一次处理一批数据而非一行一行,充分利用 CPU 缓存和 SIMD。
- MPP 并行:查询被拆到多个 BE 上同时算。
- 丰富的索引与预聚合:前缀索引、ZoneMap、Bitmap 索引,以及物化视图/Rollup 提前把常用聚合算好。
三种数据模型
建表时要选数据模型,它决定了相同 Key 的数据如何处理,是 Doris 面试高频点:
| 模型 | 行为 | 适用场景 |
|---|---|---|
| Duplicate(明细) | 保留每一条原始记录,不做合并 | 日志、明细事实表,需要看原始数据 |
| Aggregate(聚合) | 相同 Key 的 Value 列按预设方式(SUM/MAX/REPLACE 等)自动聚合 | 报表类,写入即预聚合 |
| Unique(主键) | 相同 Key 只保留最新一条,等价于按主键去重/更新 | 需要按主键更新的维度表、状态表 |
物化视图与 Rollup
Doris 允许在基表之上建物化视图 / Rollup——预先按某种维度组合把数据聚合好并单独存储。查询命中时,Doris 的优化器会自动路由到物化视图,而不用用户改 SQL。这是用「空间换时间」把高频聚合查询压到亚秒级的关键手段。
数据导入
- Stream Load:HTTP 方式导入本地/流式数据,常用于实时写入。
- Broker Load / S3 Load:从 HDFS、对象存储批量导入大数据量。
- Routine Load:持续从 Kafka 消费并写入,实时数仓最常用的入口。
- Flink/Spark Connector:由计算引擎直接写入。
和其他引擎的关系
- vs Hive:Hive 面向离线批处理、吞吐优先、延迟高;Doris 面向交互式分析、延迟优先。二者常配合:Hive/Spark 做重加工,结果导入 Doris 供查询。
- vs ClickHouse:ClickHouse 单表查询极致快,但分布式 Join 和运维相对复杂;Doris 的多表 Join、标准 SQL 兼容性和易用性更好,更适合建成完整的 OLAP 服务层。
在数仓里的位置
Doris 常作为实时数仓的服务层(ADS/DWS 对外出口):Flink 把实时指标算好写进 Doris(Routine Load 消费 Kafka 或 Connector 直写),上层 BI、看板、数据产品直接查 Doris,实现从数据产生到可查询的分钟级甚至秒级时延。
登录后可以选中正文添加批注(仅自己可见)。
评论 (0)
登录后参与评论。
还没有评论,来做第一个。