Doris

Doris(Apache Doris)是一个MPP 架构的实时分析型数据库(OLAP)。它的定位是数仓的查询服务层:把加工好的宽表/聚合结果放进来,支撑报表、看板、多维分析这类「高并发、低延迟、点查+聚合混合」的查询。相比 Hive 这种为吞吐设计的批处理引擎,Doris 追求的是秒级甚至亚秒级的交互式响应

架构:FE + BE 两类角色
  • FE(Frontend):负责元数据管理、SQL 解析与查询规划、协调调度。多个 FE 通过类 Raft 协议保证元数据一致和高可用。
  • BE(Backend):负责数据的实际存储和计算。数据分片(Tablet)分布在多个 BE 上,查询时各 BE 并行计算再汇总——这就是 MPP(大规模并行处理)

扩容就是加 BE,数据自动重新均衡;这套架构让它能随数据量和查询量水平扩展。

为什么查询快
  1. 列式存储:只读查询涉及的列,配合高压缩比,大幅减少 IO。
  2. 向量化执行:一次处理一批数据而非一行一行,充分利用 CPU 缓存和 SIMD。
  3. MPP 并行:查询被拆到多个 BE 上同时算。
  4. 丰富的索引与预聚合:前缀索引、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)

登录后参与评论。

还没有评论,来做第一个。

登录后可以选中正文添加批注(仅自己可见)。

Doris