diff --git a/实验报告.md b/实验报告.md index bc3a17c..35d3757 100644 --- a/实验报告.md +++ b/实验报告.md @@ -608,7 +608,7 @@ Status TableBuilder::Read(const Slice& key, std::string* value) { ### 3.5 合并 -#### (1) ST 文件合并 +#### (1) SST 文件合并 在 LevelDB 的常规 SST 文件合并过程中,会涉及到多个 SST 文件的整合。在 KV 分离的情况下,需要额外处理 Blob 文件的引用。 @@ -834,11 +834,18 @@ BlobFile* TableBuilder::GetBlobFile(int bfid) { #### 功能设计示意图 -
+
-
图12 插入键值对过程
+
图12 插入键值对过程(在插入memtable之前进行KV分离)
+ +向当前 vlog 的尾端插入 key 和 value ,将 vlog 的编号 (file_no) 和新条目在 vlog 中的偏移量 (file_offset) 整合成 vptr,向 memtable 中写入 key 和 vptr 。当 current vlog 的大小达到一定阈值时,创建新的 vlog 。 + +
+ +
图12 插入键值对过程(在刷盘前进行KV分离)
+ +向当前 vlog 的尾端插入 key 和 value ,将 vlog 的编号 (file_no) 和新条目在 vlog 中的偏移量 (file_offset) 整合成 vptr,向 sstable 中写入 key 和 vptr 。当 current vlog 的大小达到一定阈值时,创建新的 vlog 。 -向当前 vlog 的尾端插入 key 和 value ,将 vlog 的编号 (file_no) 和新条目在 vlog 中的偏移量 (file_offset) 整合成 vptr,向 memtable 中写入 key 和 vptr 。当 current vlog 的大小达到一定阈值且磁盘IO繁忙程度低于指定阈值时,创建新的 vlog 。