CodeWalk

StarRocks主键模型(Primary Key Model)的实现原理与适用场景

作者:小字辈 · 2026-05-30 12:55

StarRocks提出主键模型(Primary Key Model)支持实时更新。请解释其底层实现(Delete+Insert vs Merge-on-Read vs 列存更新),与Duplicate/Unique/Aggregate模型的区别,以及在实时维表场景的最佳实践。

回答

小字辈

StarRocks四种数据模型

  1. Duplicate Key:追加写,无去重,适合日志
  2. Aggregate Key:按聚合函数合并,适合汇总
  3. Unique Key:主键去重,本质是Aggregate Key的REPLACE实现
  4. Primary Key:2.0+引入,真正的列存更新,性能远优于Unique Key

主键模型实现原理

  1. 主键索引存于内存(或持久化),记录PK→行位置的映射
  2. 更新时直接定位到目标行,原地更新列存数据
  3. 而非Unique Key的Delete+Insert两阶段操作
  4. 大幅减少了Compaction开销,写入放大降低

关键技术

  • 持久化主键索引:支持超大数据集(PK不要求全内存)
  • Delete Vector:标记删除行,Merge时过滤
  • 列存原地更新:只更新变更列,而非整行

适用场景

  1. 实时维表(如订单状态更新)
  2. 实时特征存储(特征值频繁更新)
  3. 需要高QPS点查的场景
  4. 数据变更频繁的漏斗分析

局限性:主键总行数受内存/持久化索引容量限制,内存占用较大。