暂无图片
LSM树是如何完成更新与删除的?
我来答
分享
2023-02-08
LSM树是如何完成更新与删除的?

LSM树是如何完成更新与删除的?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
大海

在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
暂无图片
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏