kudu update操作

kudu的update操作与insert操作类似,一开始需要先查询主键是否存在。如果不存在则会报错。。只有当主键存在时,才会真正进行写入操作。查询主键的过程与insert过程完全相同。流程如下图所示:

当主键存在时,此时已经定位到某个具体的rowset了。在这里update操作与insert操作开始体现出区别。一个diskrowset中包含一个base data以及多个delta file。 insert操作写入base data,作为基线数据。baseData一旦生成就不可以再修改(compaction操作除外)。 update操作写入delta file。这样可以根据不同的时间戳查询不同的历史数据。这里同样使用了一段内存作为缓冲,与insert操作的memRowset类似,update操作也是先写入deltaMemStore,然后再定期刷入到deltaFile中。deltaMemStore是一个与memRowset很相似的数据结构,通过一个b-树索引来保存变更记录。

在这里kudu还有个细节上的优化。deltaStore中维护的并不是主键索引的b-树,而是基于row_offset的b-树。这样可以减少字符串比对的性能消耗。update操作在baseData中查询主键索引,得到row_offset后,在deltaStore中可以直接通过row_offset去deltaStore中进行写入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值