订阅更新

Doris vs ClickHouse vs StarRocks——OLAP引擎到底选哪个?

Doris手册 第 5 题 约 8 分钟读完

本文目录
  1. 先说结论
  2. 三大OLAP引擎核心对比
  3. Doris的核心优势——为什么很多公司选它?
  4. ClickHouse的核心优势——什么场景它更好?
  5. StarRocks——Doris的'近亲'
  6. 实战经验:我的三次OLAP选型
  7. 面试高频追问
  8. 总结

先说结论

Doris适合'全能型'需求:兼容MySQL协议、支持多表JOIN、运维简单、社区活跃。ClickHouse适合'单表极致性能':单表查询最快、但JOIN弱、运维复杂。StarRocks是Doris的商业化分支,架构类似但功能迭代更快。选型核心看两点:① 你的查询以单表为主还是多表JOIN为主?② 团队运维能力如何?

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

OLAP引擎选型是面试最喜欢考的对比题。很多人只知道Doris和ClickHouse都很快,但说不清楚快在哪里、各自的优劣、什么场景选什么。我在某元宇宙社交公司选了Doris,在某短剧出海公司用的是阿里云Hologres,在某知名出海硬件品牌用过Presto查Hive。每种引擎我都实际用过,今天把选型的思路讲清楚。

三大OLAP引擎核心对比

维度DorisClickHouseStarRocks
架构MPP,FE+BEShared Nothing,单层MPP,FE+BE(Doris分支)
MySQL兼容✅ 完全兼容❌ 自有SQL方言✅ 完全兼容
多表JOIN✅ 优秀(MPP)⚠️ 较弱(本地JOIN)✅ 优秀
单表查询快极快(最优)快
实时写入✅ Stream Load⚠️ 需要Buffer表中转✅ Stream Load
运维复杂度低(无外部依赖)高(集群管理复杂)低
社区/生态Apache顶级项目ClickHouse Inc.商业公司(StarRocks Inc.)
云服务SelectDB(商业版)ClickHouse CloudStarRocks Cloud

Doris的核心优势——为什么很多公司选它?

① MySQL协议兼容:这是Doris最大的杀手锏。DBA、分析师、产品经理用MySQL客户端、Navicat、DataGrip直接连Doris,零学习成本。ClickHouse有自己的SQL方言和客户端,团队需要额外学习。我在某元宇宙社交公司选Doris的一个重要原因就是——运营同事能直接用Metabase连Doris查数据,不需要我帮他们跑SQL。

② 多表JOIN能力强:Doris的MPP架构天然支持高效的分布式JOIN。ClickHouse的JOIN能力是弱项——大表JOIN小表还行,两个大表JOIN性能很差。在元宇宙社交公司,很多查询需要事件表JOIN用户维度表JOIN礼物配置表,三表JOIN在Doris上秒出结果。

③ 运维极其简单:Doris只有FE和BE两个组件,没有外部依赖(不需要HDFS、ZooKeeper、YARN)。部署一个3FE+3BE的集群,半天就能搞定。ClickHouse需要ZooKeeper(或ClickHouse Keeper)做副本同步,集群管理、分片配置都更复杂。

ClickHouse的核心优势——什么场景它更好?

① 单表查询极致性能:ClickHouse的向量化执行引擎是目前单表扫描+聚合最快的。如果你的查询以单表聚合为主(比如日志分析:从10亿行里按条件过滤+聚合),ClickHouse可能比Doris快30-50%。

② 数据压缩率更高:ClickHouse的列式压缩算法非常激进,同样的数据存储体积可能只有Doris的60-70%。对于PB级别的日志存储场景,ClickHouse的存储成本优势明显。

③ 特殊数据结构:ClickHouse有一些独特的数据结构如AggregatingMergeTree、MaterializedView,在特定场景下非常高效。

-- ClickHouse的SQL方言示例(和MySQL有差异)
-- Doris/MySQL写法:
SELECT DATE(event_time) AS dt, COUNT(*) AS cnt
FROM user_events
WHERE event_time >= '2024-01-15 00:00:00'
GROUP BY dt ORDER BY dt;
 
-- ClickHouse写法(toDate函数不同):
SELECT toDate(event_time) AS dt, count() AS cnt
FROM user_events
WHERE event_time >= '2024-01-15 00:00:00'
GROUP BY dt ORDER BY dt;
 
-- 看起来差别不大,但复杂SQL的差异会更明显
-- 比如ClickHouse不支持标准的JOIN ... ON语法
-- 需要用GLOBAL JOIN或者特殊的JOIN引擎

StarRocks——Doris的'近亲'

StarRocks和Doris同源——都来自百度的Palo项目。2020年DorisDB(后改名StarRocks)从Doris分叉出去走商业化路线。两者架构几乎一样(FE+BE、MPP、列存),主要区别在于:

维度DorisStarRocks
开源协议Apache 2.0(完全开源)开源+商业版
功能迭代社区驱动,节奏稍慢商业公司驱动,迭代更快
物化视图支持(基础)支持(更成熟)
数据湖分析支持Multi-Catalog支持(更早支持)
社区规模Apache顶级项目,生态广商业社区,资源集中
云服务SelectDBStarRocks Cloud / CelerData

我的看法:如果你在选型时纠结Doris和StarRocks,说实话差别不大。Doris的Apache背景更让人放心(不会被商业公司绑架),StarRocks的功能迭代更快。大部分场景两者性能差距在10%以内。

实战经验:我的三次OLAP选型

某元宇宙社交公司 → 选Doris:核心原因:① 需要多表JOIN(事件表+用户表+礼物配置表);② 团队只有我一个人维护大数据平台,运维要简单;③ MySQL兼容让运营同事能直接查。结果:Doris非常稳定,跑了一年多没出过大问题,查询延迟提升了70%。

某知名出海硬件品牌 → Databricks为主:数据平台以Databricks为核心,查询用Presto。这里没有用Doris或ClickHouse,因为Databricks自身的查询能力在AWS生态里已经够用了。

某短剧出海公司 → Hologres:在阿里云生态下,Hologres是官方推荐的OLAP引擎,和MaxCompute、DataWorks深度集成。虽然我更喜欢Doris,但在阿里云生态下用Hologres更省心——毕竟是托管服务,不用自己运维集群。

面试高频追问

追问一:Doris和Hologres有什么区别?

Hologres是阿里云自研的OLAP引擎,定位和Doris类似,也兼容PostgreSQL协议。核心区别:Doris是开源项目可以自建部署,Hologres是阿里云独占服务。如果你在阿里云上,Hologres和MaxCompute/DataWorks的集成更好;如果要避免云厂商绑定或多云部署,选Doris。

追问二:什么时候不该用OLAP引擎?

两个场景:① 高并发点查(>1000 QPS的按主键查单行)——OLAP引擎不是为这个设计的,用Redis或HBase;② OLTP事务操作(INSERT/UPDATE/DELETE频繁)——用MySQL或PostgreSQL。OLAP引擎擅长的是批量写入+复杂分析查询。

追问三:Doris能替代Hive吗?

部分场景可以。TB级别的数仓,Doris完全可以替代Hive做查询层——查询速度快几百倍。但PB级别的数据湖/数仓,Doris的存储成本比Hive高(Doris用本地SSD,Hive用HDFS/S3),这种场景更适合用Doris做查询加速层+Hive做存储底座。我在元宇宙社交公司就是Doris做实时查询层、S3做离线存储。

总结

OLAP选型面试记住一个决策矩阵:多表JOIN多+运维要简单 → Doris;单表极致性能+日志分析 → ClickHouse;阿里云生态 → Hologres。三者都是优秀的OLAP引擎,没有绝对的好坏。面试时能结合自己的项目说清楚'为什么选这个不选那个',展示技术选型的思考过程,比背对比表有价值得多。

下一篇聊Doris的物化视图和Rollup:查询太慢怎么办?预计算了解一下。

你们用的什么OLAP引擎?选型时考虑了哪些因素?评论区聊聊~

关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长

Doris 面试通关手册

第6-10篇:查询优化与数仓实践

Wood聊大数据

9年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器