StarRocks 和 Doris 有什么区别?表模型怎么选?
湖仓与 OLAP第 24 / 34 题
自测:先别看答案
试着用 1~2 分钟把这道题讲出来(说出声或写下要点),再展开对照。
面试怎么回答
StarRocks 源自 Doris 早期代码后独立发展,两者都是 FE + BE 的 MPP 列存架构,能力上互相追赶,选型要看具体版本和团队经验。表模型上,只追加的明细用 Duplicate,只要汇总用 Aggregate,有更新就用主键语义:StarRocks 的 Primary Key 模型或 Doris 开启 Merge-on-Write 的 Unique 模型,写入时确定最新版本,查询不用再合并,适合 CDC 实时同步。另外我会把常用过滤列放在排序键前面,分桶键选高基数、分布均匀的列。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
做实时数仓选 OLAP 引擎时,面试官常问:StarRocks 和 Doris 什么关系?主键模型、明细模型、聚合模型怎么选?
两者的关系
StarRocks 源自 Apache Doris 的早期代码,之后独立发展。两者架构相似:FE 负责元数据和查询规划,BE 负责存储和计算,都是 MPP 列存、支持实时导入和高并发查询。
后续各自的演进方向有所不同:StarRocks 较早全面使用向量化执行引擎和基于代价的优化器(CBO),并推出了存算分离模式;Doris 近几年同样补齐了向量化、CBO、存算分离等能力,并在 Unique 模型上提供了 Merge-on-Write。具体选型时,应以目标版本的能力和团队的运维经验为准,而不是只看早期的差异。
表模型怎么选
两者的表模型思路基本一致:
- 明细模型(Duplicate Key):保留所有原始数据,不做合并。适合日志、埋点等只追加的明细数据。
- 聚合模型(Aggregate Key):相同 key 的行在导入和 Compaction 时按指定方式聚合(SUM、MAX、REPLACE 等)。适合只关心汇总结果的指标表。
- 更新模型(Unique Key):相同 key 只保留最新一行。
- 主键模型(StarRocks 的 Primary Key):同样按主键保留最新,但采用写入时就确定最新版本的方式(delete + insert),查询时不需要再合并多个版本,读性能更稳定,适合 CDC 实时同步、频繁更新的场景。
选择思路
先看数据会不会更新:
- 不更新、要明细:明细模型。
- 只要汇总、不要明细:聚合模型。
- 有更新、读多写多:StarRocks 选主键模型,Doris 选开启 Merge-on-Write 的 Unique 模型。
再看排序键和分桶键:排序键决定前缀索引能否命中,应该把最常用的过滤条件放在前面;分桶键要选基数高、分布均匀的列,避免数据倾斜。