Kudu 最值得研究的地方,不是“支持 UPDATE 的列式存储”这句话,而是它如何把两种冲突的访问模式放进同一个 Tablet:新数据要低延迟写入,分析查询又希望读取紧凑、按列编码的数据;更新不能重写整列文件,历史版本还必须对快照读可见。
解决办法不是某一种神奇数据结构,而是一组分层结构:MemRowSet 接住新行,DiskRowSet 提供列式基线,Delta Store 承载更新,WAL 与 Raft 负责持久性和复制,MVCC 决定每个快照能看到什么。
本文基于 Kudu 1.18.1 源码,文件路径均相对于 src/kudu/。