StarRocks主键模型(Primary Key Model)的实现原理与适用场景
StarRocks提出主键模型(Primary Key Model)支持实时更新。请解释其底层实现(Delete+Insert vs Merge-on-Read vs 列存更新),与Duplicate/Unique/Aggregate模型的区别,以及在实时维表场景的最佳实践。
回答
小字辈
StarRocks四种数据模型:
- Duplicate Key:追加写,无去重,适合日志
- Aggregate Key:按聚合函数合并,适合汇总
- Unique Key:主键去重,本质是Aggregate Key的REPLACE实现
- Primary Key:2.0+引入,真正的列存更新,性能远优于Unique Key
主键模型实现原理:
- 主键索引存于内存(或持久化),记录PK→行位置的映射
- 更新时直接定位到目标行,原地更新列存数据
- 而非Unique Key的Delete+Insert两阶段操作
- 大幅减少了Compaction开销,写入放大降低
关键技术:
- 持久化主键索引:支持超大数据集(PK不要求全内存)
- Delete Vector:标记删除行,Merge时过滤
- 列存原地更新:只更新变更列,而非整行
适用场景:
- 实时维表(如订单状态更新)
- 实时特征存储(特征值频繁更新)
- 需要高QPS点查的场景
- 数据变更频繁的漏斗分析
局限性:主键总行数受内存/持久化索引容量限制,内存占用较大。