OLAP 引擎全面对比
概述
OLAP 引擎百花齐放:ClickHouse 单表聚合快、Doris 多表 Join 强、Druid 实时摄入、Kylin 预计算 Cube、StarRocks 存算分离。选型要看场景:数据规模、查询类型、实时性、并发。本文从架构、能力、性能基准三个维度对比,给出选型路径。
一、引擎谱系
| 引擎 | 出身 | 核心取向 |
|---|---|---|
| ClickHouse | Yandex | 单表极速聚合 |
| Doris | 百度 | 高并发 + 强 Join |
| StarRocks | Doris 分叉 | 高性能 + 存算分离 |
| Druid | 开源 | 实时摄入 + 时序 |
| Kylin | eBay | Cube 预计算 |
二、架构对比
| 引擎 | 架构 | 存储 |
|---|---|---|
| ClickHouse | 单机/分片副本 | MergeTree 本地 |
| Doris | FE + BE(MPP) | BE 本地列式 |
| StarRocks | FE + BE | 本地/对象存储 |
| Druid | 实时 + 历史节点 | Segment |
| Kylin | Hadoop 之上 | HBase 等 |
| 引擎 | 分布式 | 高可用 |
|---|---|---|
| ClickHouse | 分片+副本 | 副本 |
| Doris | BE 多节点 | FE/BE 多副本 |
| StarRocks | 多节点 | 多副本 |
| Druid | 多节点 | 复制 |
| Kylin | 依赖 Hadoop | Hadoop HA |
三、查询能力对比
3.1 聚合与 Join
| 引擎 | 聚合 | 多表 Join |
|---|---|---|
| ClickHouse | 极快 | 弱 |
| Doris | 快 | 强 |
| StarRocks | 快 | 强 |
| Druid | 快(预聚合) | 弱 |
| Kylin | 预计算 | 弱 |
3.2 实时性
| 引擎 | 实时摄入 | 延迟 |
|---|---|---|
| Druid | 强(原生) | 秒级 |
| Doris | 支持(Flink) | 秒级 |
| StarRocks | 支持 | 秒级 |
| ClickHouse | Kafka 表 | 秒级 |
| Kylin | 批构建 | 分钟+ |
3.3 查询场景
| 引擎 | 最佳场景 |
|---|---|
| ClickHouse | 大宽表聚合、明细查询 |
| Doris | 报表、多表关联 |
| StarRocks | 实时报表、高并发 |
| Druid | 时序、事件流分析 |
| Kylin | 固定维度报表 |
四、性能基准对比
4.1 典型表现
| 引擎 | 单表聚合 | 多表 Join | 高并发 |
|---|---|---|---|
| ClickHouse | 极佳 | 一般 | 一般 |
| Doris | 佳 | 佳 | 佳 |
| StarRocks | 佳 | 佳 | 佳 |
| Druid | 佳(预聚合) | 弱 | 佳 |
| Kylin | 极佳(预计算) | 弱 | 佳(固定查询) |
基准说明:
测试场景不同结果差异大
用自身体系验证选型4.2 性能影响因子
| 因子 | 说明 |
|---|---|
| 数据模型 | 预聚合收益 |
| 查询模式 | 固定 vs 即席 |
| 并发 | 报表 vs 分析 |
| 硬件 | CPU/内存/SSD |
五、生态与运维
| 引擎 | 生态 | 运维 |
|---|---|---|
| ClickHouse | 成熟 | 中 |
| Doris | 国内活跃 | 中 |
| StarRocks | 快速增长 | 中 |
| Druid | 社区 | 复杂 |
| Kylin | Hadoop 生态 | 复杂 |
| 引擎 | 学习成本 | 文档 |
|---|---|---|
| ClickHouse | 低 | 全 |
| Doris | 中 | 中文全 |
| StarRocks | 中 | 全 |
| Druid | 高 | 中 |
| Kylin | 高 | 中 |
六、选型维度
6.1 决策因素
| 因素 | 优先级 |
|---|---|
| 查询类型 | 最高(聚合/JOIN) |
| 实时性 | 高 |
| 并发 | 高 |
| 数据规模 | 中 |
| 运维能力 | 中 |
6.2 决策树
查询以多表 Join 为主? → Doris / StarRocks
单表极速聚合 + 大宽表? → ClickHouse
实时时序流分析? → Druid
固定维度报表 + 超大历史? → Kylin
高并发实时报表? → StarRocks6.3 组合方案
常见组合:
明细/大宽表 → ClickHouse
报表/Join/高并发 → Doris / StarRocks
实时摄入 → Druid / Doris
预计算 → Kylin(固定报表)
可多引擎分层:
明细层 + 汇总层用不同引擎七、场景选型参考
| 场景 | 推荐 |
|---|---|
| 实时大屏 | ClickHouse / StarRocks |
| 报表平台 | Doris / StarRocks |
| 即席分析 | ClickHouse / Doris |
| 时序监控 | Druid |
| 固定 Cube 报表 | Kylin |
| 湖仓查询 | Presto/Trino 或上述 |
| 高并发点查 | Doris / StarRocks |
| 场景 | 不推荐 |
|---|---|
| 多表复杂 Join | ClickHouse 单用 |
| 动态即席 | Kylin(需构建) |
| 高并发 | Druid 弱项 |
八、选型清单
| 检查项 | 说明 |
|---|---|
| 查询类型 | 聚合/Join/明细 |
| 并发 | 报表并发量 |
| 实时性 | 秒级/分钟级 |
| 数据规模 | 亿/十亿/百亿 |
| 运维 | 团队能力 |
| 成本 | 硬件/许可 |
| 生态 | 与现有栈衔接 |
最终建议:
先小规模验证(自身体系)
再正式选型
避免频繁迁移常见问题速查
| 问题 | 要点 |
|---|---|
| CH vs Doris 怎么选 | Join 需求决定 |
| 什么时候用 Kylin | 固定报表 + 超大数据 |
| Druid 优势 | 实时时序 |
| StarRocks 特点 | 高性能 + 存算分离 |
| 能混用吗 | 可分层混用 |