问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
LSM树是如何完成更新与删除的?
在LSM树中,插入、更新和删除操作不需要在磁盘上定位数据记录。但是,在读取的过程中需要对冗余的记录进行协调。
从memtable中删除数据记录是不够的,因为其他磁盘或内存驻留表可能持有同一个键的数据记录。如果仅通过从memtable中移除数据项来实现删除,那么要么最终删除无效,要么会复活先前的数值。
来看一个例子。被刷写的磁盘驻留表中包含与记录v1相关联的键k1,而memtable则保存其新值v2:
磁盘表:| k1 | v1 | memtable:| k1 | v2 |
如果只是将v2从memtable中移除并刷写它,就实际上复活了v1,因为它成为与该键相关联的唯一值:
磁盘表:| k1 | v1 | memtable:Ф
因此,删除操作需要被显式地记录下来。这可以通过插入一个特殊的删除条目(delete entry,有时称为墓碑(tombstone))来实现,该条目说与此键对应的数据记录已被删除:
磁盘表:| k1 | v1 | memtable:| <墓碑> |
协调过程如果看到墓碑,就会过滤掉其所遮蔽的值。
评论
有用 2
墨值悬赏