|
|
@ -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) { |
|
|
|
|
|
|
|
#### 功能设计示意图 |
|
|
|
|
|
|
|
<div align=center><img src="./images/c1.png"></div> |
|
|
|
<div align=center><img src="./images/c1.1.png"></div> |
|
|
|
|
|
|
|
<center>图12 插入键值对过程</center> |
|
|
|
<center>图12 插入键值对过程(在插入memtable之前进行KV分离)</center> |
|
|
|
|
|
|
|
向当前 vlog 的尾端插入 key 和 value ,将 vlog 的编号 (file_no) 和新条目在 vlog 中的偏移量 (file_offset) 整合成 vptr,向 memtable 中写入 key 和 vptr 。当 current vlog 的大小达到一定阈值时,创建新的 vlog 。 |
|
|
|
|
|
|
|
<div align=center><img src="./images/c1.2.png"></div> |
|
|
|
|
|
|
|
<center>图12 插入键值对过程(在刷盘前进行KV分离)</center> |
|
|
|
|
|
|
|
向当前 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 。 |
|
|
|
|
|
|
|
<div align=center><img src="./images/c2.png"></div> |
|
|
|
|
|
|
|