diff --git a/img.png b/img.png deleted file mode 100644 index 5b18ea7..0000000 Binary files a/img.png and /dev/null differ diff --git a/report.md b/report.md index d60081c..f701d6f 100644 --- a/report.md +++ b/report.md @@ -1114,6 +1114,7 @@ CURRENT 内容为: MANIFEST-000008 1. 对于每一次读取,用户线程先读取lsm tree中key的slot_num下标,然后到slot_page中读取对应的slot内容(**每一个slot都是定长的**),之后再在这个slot中读取value所在的vlog文件号和偏移量offset,之后到对应的vlog文件中读取value。 但是这又带来了一个问题,我们该如何管理slot_page这个文件?当插入新的kv时,我们需要在这个slot_page中分配新的slot,在GC删除某个kv时,我们需要将对应的slot进行释放。 这里我们选择在内存中维护一个可线性扩展的bitmap。这个bitmap中每一个bit标识了当前slot_page文件中对应slot是否被使用,是为1,不是为0。这样一来,在插入新kv时,我们可以用bitmap来分配一个新的slot(将bitmap中第一个为0的bit设置为1),将内容进行写入;在GC删除某个kv时,我们将这个slot对应的bitmap中的bit重置为0即可。 + 2. KV 分离的最初版本,我们没有实现 vlog_cache,读写性能很差,于是我们就考虑能不能再实现一个 vlog_cache,来优化读写性能。 在经过尝试之后,发现确实能提高读写性能,我们便在原本的实现之上添加了 vlog_cache。 ### 6. 分工和进度安排