kudu update操作

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

kudu update操作_第1张图片

当主键存在时,此时已经定位到某个具体的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 update操作_第2张图片

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

kudu update操作_第3张图片

你可能感兴趣的:(EsgynDB,kudu学习笔记,数据库,sql)