Apache Doris(原名:Palo)是一个高性能、实时的MPP分析型数据库,非常适合海量数据的即席查询、报表分析、指标统计等 OLAP 场景。Doris 的设计目标是:极致查询性能、简单易用、支持高并发分析和明细查询。
一、Doris 核心特点
特性 | 说明 |
---|
MPP 架构 | 支持大规模分布式并行计算,横向扩展能力强 |
列式存储 | 支持高压缩比,聚合类查询性能优异 |
高并发、低延迟查询 | 支持上万并发,秒级查询响应 |
极简架构、易部署 | 无需依赖 HDFS 或 YARN,单机即可运行 |
向量化执行引擎 | 支持 SIMD 加速,提高 CPU 使用效率 |
支持实时更新 | 支持流式数据导入(Kafka、Flume、Routine Load) |
MySQL 协议兼容 | 无缝对接 BI 工具、JDBC 直连、可视化友好 |
完备的多维建模能力 | 支持宽表、星型/雪花建模 |
二、Doris 架构组成
+--------------------+
| FE(Frontend) |
| 元数据管理/调度 |
+--------------------+
|
+---------------------+----------------------+
| | |
+-------------+ +-------------+ +-------------+
| BE-1 | | BE-2 | ... | BE-n |
| Backend 节点| | 存储 + 计算 | | |
+-------------+ +-------------+ +-------------+
- FE: 管理元数据、查询计划、调度
- BE: 实际执行查询、存储数据
三、数据导入方式
模式 | 场景 | 说明 |
---|
Broker Load | 离线批量导入 | 支持从 HDFS/OSS/OBS 加载 |
Stream Load | 实时小批量 | 支持 HTTP 方式上传文件 |
Routine Load | 实时流式导入 | 支持 Kafka 实时导入 |
Insert Into | 手动插入 | 支持 SQL insert |
DataX / Flink-Doris-Connector | 集成方案 | 与离线/流处理框架结合 |
四、表模型类型
类型 | 适合场景 | 特点 |
---|
Duplicate Key | 明细表 | 所有数据原样存储,无聚合 |
Aggregate Key | 指标汇总 | 支持聚合函数,如 SUM、MAX |
Unique Key | 明细去重 | 主键唯一,支持更新 |
Primary Key(新版) | 事务语义更强 | 更好支持 UPSERT 更新操作 |
五、典型查询性能对比(以 1 亿行数据为例)
查询类型 | Doris 耗时 | 传统 MySQL 耗时 |
---|
条件聚合(SUM) | 0.2s | 10s+ |
分组聚合(GROUP BY) | 0.3s | 15s+ |
高并发(上万请求) | 支持 | 容易 OOM |
多维分析 | 支持 | 多表 JOIN 效率低 |
六、使用场景
类型 | 描述 |
---|
实时 BI 报表分析 | 高并发、多维聚合统计 |
用户行为分析 | 埋点日志分析、路径追踪 |
运维/日志监控 | 秒级日志聚合、异常定位 |
指标平台建设 | PV/UV、DAU、留存率分析 |
数据中台查询引擎 | 明细 + 汇总兼顾,替代传统 Hive |
IoT 时序数据分析 | 实时指标计算、大规模聚合 |
七、与 ClickHouse 对比
特性 | Doris | ClickHouse |
---|
架构复杂度 | 简单(无依赖) | 中等 |
实时导入 | 强(Kafka Routine Load) | 弱(写入延迟大) |
更新能力 | 支持更新/删除(Primary Key) | 不支持 |
查询性能 | 优异 | 优异(复杂 SQL 更好) |
MySQL 兼容 | 完全兼容 | 部分支持 |
使用门槛 | 低 | 中等偏高 |
社区活跃度 | Apache 顶级项目 | 商业公司主导 |
八、生态集成
工具/平台 | 是否兼容 |
---|
BI 工具(如 Superset、FineBI) | ✅ |
Flink / Kafka / DataX | ✅ |
Grafana(SQL 数据源) | ✅ |
Spark / Hive 数据打通 | ✅ |
Java 应用(JDBC) | ✅ |
九、简单示例:建表 + 查询
CREATE TABLE user_behavior (
user_id BIGINT,
event_type VARCHAR(20),
event_time DATETIME
)
ENGINE=OLAP
DUPLICATE KEY(user_id, event_time)
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES("replication_num" = "1");
INSERT INTO user_behavior VALUES (1001, 'click', '2024-05-10 10:00:00');
SELECT event_type, COUNT(*) FROM user_behavior GROUP BY event_type;
十、适合 Doris 的技术选型建议
场景 | 选型建议 |
---|
实时明细查询 + BI 报表 | ✅ Doris |
多维指标统计 + 秒级响应 | ✅ Doris |
离线大数据批处理 | ❌ 推荐 Hive/Trino |
实时流计算 + 明细查询 | ✅ Doris + Flink |
实时埋点行为分析 | ✅ Doris or ClickHouse |