订阅更新

StarRocks 和 Doris 有什么区别?表模型怎么选?

面试问 357 约 2 分钟读完

随机一题
本文目录
  1. 面试怎么回答
  2. 两者的关系
  3. 表模型怎么选
  4. 选择思路

面试怎么回答

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 模型。

再看排序键和分桶键:排序键决定前缀索引能否命中,应该把最常用的过滤条件放在前面;分桶键要选基数高、分布均匀的列,避免数据倾斜。

这道题在刷题路线里:湖仓与 OLAP