项目地址:https://github.com/skyzh/mini-lsmTask 1-SST Builder
个人实现地址:https://gitee.com/cnyuyang/mini-lsm
在此任务中,您需要修改:BlockMeta的编码与解码
src/table/builder.rs
src/table.rs
SST由存储在磁盘上的数据块和索引块组成。通常,数据块都是懒加载的-直到用户发出哀求,它们才会被加载到内存中。索引块也可以按需加载,但在本教程中,我们简单假设所有SST索引块(元信息块)都可以放入内存(实际上我们没有索引块的实现)。通常,SST文件的大小为256MB。
SST构建器类似于之前实现的BlockBuilder——用户将在构建器上调用add。你应该在SST builder中维护一个BlockBuilder,并在须要时拆分块。此外,你还需要维护块元数据BlockMeta,其中包罗每个块中的第一个/末了一个键以及每个块的偏移量。build函数将对SST进行编码,利用FileObject::create将所有内容写入磁盘,并返回一个SsTable对象。
SST的编码如下:timate_size函数复制代码
- -------------------------------------------------------------------------------------------
- | Block Section | Meta Section | Extra |
- -------------------------------------------------------------------------------------------
- | data block | ... | data block | metadata | meta block offset (u32) |
- -------------------------------------------------------------------------------------------
你还需要实现SsTableBuilder的es,如许调用者就可以知道什么时候可以开始一个新的SST来写入数据。函数不需要非常精确。假设数据块数据量远远大于元数据块,我们可以简单地返回数据块的大小为estimate_size。
除了SST构建器,你还需要完成块元数据的编码/解码,以便SsTableBuilder::build可以生成有效的SST文件。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |