刷写memtable可以被周期性地触发,也可以通过大小阈值来触发。在其可被刷写之前,必须进行memtable切换:分配一个新的memtable,它成为所有新的写入操作的目标,而旧的memtable则变成刷写状态。这两个步骤必须被原子地执行。在其内容被完全刷写之前,被刷写的memtable仍可用于读取。在此之后,旧的memtable将被丢弃,取而代之的是一个新写入的磁盘驻留表,该表可用于读取。
LSM树的组件、它们之间的关系,以及实现它们之间转换的操作。
当前的memtable:接收写请求并服务读请求。
正在刷写的memtable:可用于读取。
磁盘上的刷写目标不:参与读取,因为其内容不完整。
已刷写的表:一旦被刷写的memtable被丢弃,就可以被用于读取。
正在被压实的表当:前正在被合并的磁盘驻留表。
已被压实的表由:已刷写的表或其他已压实的表所创建。

数据已经在内存中进行了排序,因此可以通过将内存驻留的内容依次写入磁盘来创建磁盘驻留表。在刷写期间,正在刷写的memtable和当前的memtable都可供读取。
在完全刷写memtable之前,其内容唯一的磁盘驻留版本储存在预写日志中。当memtable内容被完全刷写到在磁盘上时,日志可以被修剪(trim),并且保存对被刷写过的memtable进行的操作的日志段可以被丢弃。
LSM之memtable
最新推荐文章于 2025-05-12 13:54:25 发布
本文介绍LSM树中memtable的工作原理及其与磁盘驻留表的转换过程。memtable负责接收写请求并服务读请求,在达到一定条件后会被刷写到磁盘形成持久化的表文件。同时介绍了刷写过程中对读取操作的影响以及如何确保数据的一致性。
696

被折叠的 条评论
为什么被折叠?



