From 9c3c34dda7904ceb2c90c7d936c25e7896269e60 Mon Sep 17 00:00:00 2001 From: VirgilZhu <94546750@qq.com> Date: Mon, 6 Jan 2025 06:57:46 +0800 Subject: [PATCH] finish project --- README.md | 1541 ++++++++++++++++++++++++++++++++++++++--- db/db_impl.cc | 45 +- image/kv_sep.png | Bin 0 -> 95519 bytes image/kv_test.png | Bin 0 -> 2573 bytes image/test_1.jpg | Bin 0 -> 9007 bytes image/test_2.jpg | Bin 0 -> 85405 bytes image/value_field_test.png | Bin 0 -> 2639 bytes image/version_1.jpg | Bin 0 -> 39447 bytes image/version_2.jpg | Bin 0 -> 10163 bytes image/version_3.jpg | Bin 0 -> 28704 bytes image/vlog.png | Bin 0 -> 45961 bytes image/write-badger.png | Bin 258227 -> 0 bytes include/leveldb/write_batch.h | 4 +- test/kv_test.cc | 9 +- 14 files changed, 1450 insertions(+), 149 deletions(-) create mode 100755 image/kv_sep.png create mode 100755 image/kv_test.png create mode 100755 image/test_1.jpg create mode 100755 image/test_2.jpg create mode 100755 image/value_field_test.png create mode 100755 image/version_1.jpg create mode 100755 image/version_2.jpg create mode 100755 image/version_3.jpg create mode 100755 image/vlog.png delete mode 100755 image/write-badger.png diff --git a/README.md b/README.md index e15fab2..5cf21ab 100755 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # LevelDB: Value Field & KV Separation 设计文档 +
+ 小组成员:谷杰 10222140408 朱维清 10215300402 +
+ ## 项目概述 > **项目背景:**LevelDB 项目的 KV 键值对存储信息单一;LSM-Tree 读写放大开销大,导致 LevelDB 顺序范围查询时的数据吞吐量随 Value 大小增加而急剧下降。 @@ -18,14 +22,10 @@ + Cache 能储存更多 SSTable,减少磁盘 I/O 开销。 3. 实现 **Benchmark**,测试并分析性能: + 验证功能扩展(value 多字段设计 & KV 分离)的有效性; - + **评估性能提升(读写 Throughput 性能、读写放大、LSM-Tree 层级、随机点查/顺序范围查询效率(延迟)、GC 开销与性能影响、各读写阶段耗时占比 (Wait / Log / Memtable / Other))**; + + **评估性能提升(读写 Throughput 性能、读写放大、随机点查/顺序范围查询效率(延迟)、GC 开销与性能影响)**; + **分析资源利用率(硬盘 I/O 、内存负载)**; - + **比较大/小数据集、高并发场景的表现**; - + 找到性能瓶颈并针对优化。 - -## 功能设计 -### 2.1 字段设计 +## 字段设计 + **设计目标:** 1. 将 value 设计为一个字段数组,每个元素对应一个字段 `Field`: `field_name: field_value` ; @@ -43,38 +43,7 @@ 8. 重载 `[]` 运算符,以提供类似字典的字段访问方式。对于常量对象,`operator[]` 返回字段值的副本,如果给定的字段名不存在,则返回一个空字符串,并输出错误信息。而对于非常量对象,`operator[]` 返回字段值的引用,并允许修改该字段值。如果给定的字段名不存在,则会插入一个新的字段,并返回新字段值的引用。 9. 定义了一个静态方法`FindKeysByFields` 用于根据若干个字段在数据库中查找对应的键。实现上是使用`LevelDB`提供的`API`创建一个`NewIterator`,从数据库的第一个条目遍历到最后一个条目。事先定义了`find_keys` 来存储找到的键,在遍历过程中,为了避免重复处理同一个键,会先检查当前键是否已经存在于 `find_keys` 中。如果存在,则跳过此条目。若不存在,则提取其`value`部分,利用 `ParseValue` 方法将字符串形式的值解析为 `Fields` 对象,进而获得该条目对应的字段数组。再对解析后的字段数组与`search_fields_`进行匹配,这里支持完全匹配和部分匹配,将匹配的`key`存入`find_keys`中,最后返回`find_keys`。(💡Tips:在使用`Iterator`进行遍历时,`it.key()`和`it.value()`获取的其实是`kv`字符串本身,不需要我们再解码`kv length`和考虑`tag`(`ktypevalue`、`ktypedeletion`)。我们在设计之初并未考虑到这一点,是在后续测试的`debug`中发现了这一情况) -### 2.2 KV 分离 - -+ **设计目标:** - 1. + 对于大 value,分离 KV 存储,减小 LevelDB 的读写放大; - + 对于小 value,以 KV 键值对的正常形式存入 LSM-Tree; - 2. 对于 vLog 有 GC 机制,可以定期和在 vLog 超出限制大小时触发,回收 vLog 中的失效 value 并更新 vLog 与 LSM-Tree; - 3. 确保操作的原子性。 -+ **实现思路:** - 1. vLog 有若干个,**仅保存大于阈值的大 value 对应的 KV 数据对**,且为 Append-Only,仅有一个 vLog 是活跃的(可插入新 value 与 key),**具有一个垃圾计数器,当计数器超过阈值,触发 GC,并被重写**; - 2. 原 LSM-Tree 中的 KV 键值对,**大 value(value 存入 vLog 的情况)改为 `>` 的形式;小 value 则与原 LevelDB SSTable 中 KV 键值对存储格式相同**; - 3. 当前活跃的 vLog **超过限制大小**后,新建一个文件作为新的活跃 vLog; - 4. 将大 value 写入当前活跃 vLog 后,获得该 value 在 vLog 的 `offset` 和 vLog 的编号 `fileno` ,将 `>` 写入 WAL 和 Memtable 中; - 5. **GC 的触发时机为某个 vLog 的垃圾计数器到达阈值时,GC 过程重写目标 vLog 时,若当前处理的 KV 键值对的 key 在 LSM-Tree 中不存在或已更新,则忽略这个 KV 键值对;** - + 新的 vLog 被重写完毕后,更新 vLog 中 KV 的新 `` 到 LSM-Tree 中; - + 为了避免以下情况:用户在之前的时间戳删除了 LSM-Tree 中的某个 key,但当前时间戳 GC 导致重写后的 vLog 中的 KV 键值对被回写到 LSM-Tree 中更高层的 SSTable,相当于该 key 对应的 KV 键值对被额外重新插入了,新写入数据在旧写入数据下层的问题——每次读取数据需要遍历查找每一层的所有 SSTable。 - -## 数据结构设计 - -### 3.1 字段功能 - -+ `Field` & `FieldArray`: - `using Field = std::pair;` - `using FieldArray = std::vector>;` -+ `class Fields`,用于操作字段数组。 - -### 3.2 KV 分离 - - - -## 接口/函数设计 - -### 4.1 字段功能 +#### 数据结构 + `class Fields` @@ -133,86 +102,1434 @@ }; ``` -### 4.2 KV 分离 +#### 字段测试 + ++ 编写的测试样例包括:字段的排序、批量写入、批量更新、批量删除、序列化/反序列化、包含 LSM-tree 和 KV 分离的 VLogs 范围的 `FindKeysByFields` 功能,全部通过。 + +![value_field_test](./image/value_field_test.png) + + +## KV 分离 + +> ​ KV 分离部分,由于我们小组最后定版设计为,使 VLog 代替原 LevelDB 中 WAL 的作用,同时具有从 LSM-Tree 中分离并保存超过某个 value 大小阈值(`separate_threshold`)的 kv 对数据的作用,关于 VLog 的读写类 `VlogReader/VlogWriter` 的实现参考了 `LogReader/LogWriter` 的部分内容,并能共享 `LogReader/LogWriter` 使用的所有读写接口(参见`env_posix.cc`,读写均为磁盘I/O)(去除了 CRC 校验功能)。 +> +> + **结构图/写入流程图**: +> ![kv_sep](./image/kv_sep.png) + +## VlogReader & VlogWriter + +### Vlog 结构图 + +![vlog](./image/vlog.png) + +#### 数据格式 + ++ **VLog 文件大小:`Options::max_value_log_size = 16 * 1024 * 1024`;** ++ **KV 分离的 value 大小阈值为:`WriteOptions::separate_threshold = 32`;** + +```markdown +vlog_record : + length: uint16 // record 长度 + first_seq: uint64 // record 中第一对 kv 对应的 sequence + kv_count: uint16 // record 中的 kv 对数 + kv_data: // record 保存的 kv 数据 + +kv_data : + type: uint8 // 是否进行 kv 分离 + key_size: uint16 // key 的长度 + key: // key 值 + value_size: uint16 // value 的长度 + value: // value 值 + +LSM-tree 中的 value : + // 若 KV 不分离,value 为原值编码,如需要分离则 value 编码保存为: +value: + fid: uint64 // 保存该 kv 的 vlog 编号 + offset: uint64 // 该 kv 起始位置在 vlog 中的偏移 + value_size: uint64 // value 大小 +``` + +### VlogReader + +```c++ +class VlogReader { + public: + class Reporter { + public: + virtual ~Reporter() = default; + virtual void Corruption(size_t bytes, const Status& status) = 0; + }; + + // 支持随机读与顺序读,提升顺序读取的效率 + explicit VlogReader(SequentialFile* file, Reporter* reporter); + explicit VlogReader(RandomAccessFile* file, Reporter* reporter); + + VlogReader(const VlogReader&) = delete; + VlogReader& operator=(const VlogReader&) = delete; + + ~VlogReader(); + // 从 vlog 中读取一条具体的值 + bool ReadValue(uint64_t offset, size_t length, Slice* key_value, char* scratch); + bool ReadRecord(Slice* record, std::string* scratch); + // 返回 ReadRecord 函数读取的最后一条 record 的偏移(last_record_offset_) + uint64_t LastRecordOffset() const; + + private: + /* 读取 vlog 物理记录(data 部分) */ + bool ReadPhysicalRecord(std::string* result); + + void ReportCorruption(uint64_t bytes, const Status &reason); -+ 大 value 的 key 对应的 value 存储位置:`VPtr` + SequentialFile* const file_; + RandomAccessFile* const file_random_; + Reporter* const reporter_; + char* const backing_store_; + Slice buffer_; + bool eof_; // Last Read() indicated EOF by returning < kBlockSize + + // Offset of the last record returned by ReadRecord. + uint64_t last_record_offset_; +}; +``` + ++ 保留了大部分 `LogReader` 的原函数,但由于 Vlog 的数据结构相对 WAL 有很大改变,譬如直接丢弃原来的 `RecordType` 枚举类型(`kZeroType, kFullType, kFirstType, kMiddleType, kLastType`),下面是几个重要函数的重写(关注 `eof_` 标识符和 VLog 的 Header (只包含 length),`vHeaderSize = 4`): ```c++ - struct VPtr { - int fileno; // VLog 文件号 - uint64_t offset; // 偏移量 - }; + // 从 vlog 中读取一条具体的值 + bool VlogReader::ReadValue(uint64_t offset, size_t length, Slice *key_value, char *scratch) { + if (file_random_ == nullptr) { + return false; + } + /* 随机读取一个 RandomAccessFile,使用对应的读接口 Read 函数 */ + Status status = file_random_->Read(offset, length, key_value, scratch); + if (!status.ok()) { + return false; + } + return true; + } + + bool VlogReader::ReadRecord(Slice *record, std::string *scratch) { + if (ReadPhysicalRecord(scratch)) { + *record = *scratch; + return true; + } + return false; + } + + /* 读取 vlog 物理记录(kv_data 部分) */ + bool VlogReader::ReadPhysicalRecord(std::string *result) { + result->clear(); + buffer_.clear(); + + char* tmp_head = new char[vHeaderSize]; + /* 顺序读取一个 SequentialFile,使用对应的读接口 Read 函数 */ + Status status = file_->Read(vHeaderSize, &buffer_, tmp_head); + if (!status.ok()) { + buffer_.clear(); + ReportCorruption(kBlockSize, status); + eof_ = true; + return false; + } else if (buffer_.size() < vHeaderSize) { + eof_ = true; + } + + if (!eof_) { + result->assign(buffer_.data(),buffer_.size()); + uint32_t length = DecodeFixed32(buffer_.data()); + buffer_.clear(); + char* tmp = new char[length]; + status = file_->Read(length, &buffer_, tmp); + if (status.ok() && buffer_.size() == length) { + *result += buffer_.ToString(); + } else { + eof_ = true; + } + delete [] tmp; + } + delete [] tmp_head; + + if (eof_) { + result->clear(); + return false; + } + return true; + } + ``` + +#### 读流程详解 + +1. 一条传入 key 的读流程发起后,调用起始点是 `DBImpl::Get()` 函数,若成功在 memtable、immutable memtable、SSTables 里找到该 key 对应的 kv 对,且 kv 对的 `type` 为 `kTypeSeparation`: + ```c++ + Status DBImpl::Get(const ReadOptions& options, const Slice& key, + std::string* value) { + + ······ + + /* Vlog 读取 value */ + if (s.ok() && s.IsSeparated()) { + + struct VlogReporter : public VlogReader::Reporter { + Status* status; + void Corruption(size_t bytes, const Status& s) override { + if (this->status->ok()) *this->status = s; + } + }; + + VlogReporter reporter; + Slice vlog_ptr(*value); + uint64_t file_no; + uint64_t offset; + uint64_t val_size; + size_t key_size = key.size(); + + /* 已知该 value 保存在 VLog,解码出 vlog_ptr(fid, offset, val_size)*/ + GetVarint64(&vlog_ptr, &file_no); + GetVarint64(&vlog_ptr, &offset); + GetVarint64(&vlog_ptr, &val_size); + + /* VLog 内部 kv 对的编码长度,1B 为 type */ + uint64_t encoded_len = 1 + VarintLength(key_size) + key.size() + VarintLength(val_size) + val_size; + + std::string fname = LogFileName(dbname_, file_no); + RandomAccessFile* file; + s = env_->NewRandomAccessFile(fname,&file); + if (!s.ok()) { + return s; + } + + VlogReader vlogReader(file, &reporter); + Slice key_value; + char* scratch = new char[encoded_len]; + + if (vlogReader.ReadValue(offset, encoded_len, &key_value, scratch)) { + value->clear(); + if (!ParseVlogValue(key_value, key, *value, val_size)) { + s = Status::Corruption("value in vlog isn't match with given key"); + } + } else { + s = Status::Corruption("read vlog error"); + } + + delete file; + file = nullptr; + } + + return s; + } + ``` + +2. VlogReader 读取了 VLog kv 数据对后,对该数据对进行解析,实现很简单,按序解码出 key 和 vlog_value 即可: + ```C++ + /* 从 VlogReader 读取的 VLog kv 数据对中解析出 value */ + bool DBImpl::ParseVlogValue(Slice key_value, Slice key, + std::string& value, uint64_t val_size) { + Slice k_v = key_value; + if (k_v[0] != kTypeSeparation) return false; + k_v.remove_prefix(1); + + Slice vlog_key; + Slice vlog_value; + if (GetLengthPrefixedSlice(&k_v, &vlog_key) + && vlog_key == key + && GetLengthPrefixedSlice(&k_v, &vlog_value) + && vlog_value.size() == val_size) { + value = vlog_value.ToString(); + return true; + } else { + return false; + } + } + ``` + +### VlogWriter + +```c++ +class VlogWriter { + public: + // Create a writer that will append data to "*dest". + // "*dest" must be initially empty. + // "*dest" must remain live while this Writer is in use. + explicit VlogWriter(WritableFile* dest); + + // Create a writer that will append data to "*dest". + // "*dest" must have initial length "dest_length". + // "*dest" must remain live while this Writer is in use. + VlogWriter(WritableFile* dest, uint64_t dest_length); + + VlogWriter(const VlogWriter&) = delete; + VlogWriter& operator=(const VlogWriter&) = delete; + + ~VlogWriter() = default; + + Status AddRecord(const Slice& slice, uint64_t& offset); + + private: + Status EmitPhysicalRecord(const char* ptr, size_t length, uint64_t& offset); + size_t head_; + WritableFile* dest_; +}; +``` + +VlogWriter的设计与LogWriter的设计基本相同,更多的其实是减去了校验码的部分。 + +AddRecord()即写入一条日志,EmitPhysicalRecord()则是写入缓存区。 + +head_记录当前文件写入位置(偏移量)以用于计算下一条记录的写入起始位置 + +```c++ +VlogWriter::VlogWriter(WritableFile* dest) : dest_(dest), head_(0) {} + +VlogWriter::VlogWriter(WritableFile* dest, uint64_t dest_length) + : dest_(dest), head_(0) {} + +Status VlogWriter::AddRecord(const Slice& slice, uint64_t& offset) { + const char* ptr = slice.data(); + size_t left = slice.size(); + Status s; + s = EmitPhysicalRecord(ptr, left, offset); + return s; +} + +Status VlogWriter::EmitPhysicalRecord(const char* ptr, size_t length, + uint64_t& offset) { + assert(length <= 0xffff); + char buf[4]; + EncodeFixed32(buf, length); + Status s = dest_->Append(Slice(buf, 4)); + if (s.ok()) { + s = dest_->Append(Slice(ptr, length)); + if (s.ok()) { + s = dest_->Flush(); + offset = head_ + 4; + head_ += 4 + length; + } + } + return s; +} +``` + +vlog_writer.cc文件中则是对于构造函数,AddRecord()以及EmitPhysicalRecord()。实现上与LogWriter基本一致,只是去除了Crc校验码的部分。对于EmitPhysicalRecord()函数,由于去除了校验码,则其header要从原本的8字节改为4字节,只保留length部分(4字节)。 + +改完vlog_writer部分后,让我们重新来梳理一遍写入过程。 + +对于Put()操作: + +```c++ +// Convenience methods +Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) { + return DB::Put(o, key, val); +} +``` + +```c++ +Status DB::Put(const WriteOptions& opt, const Slice& key, const Slice& value) { + WriteBatch batch(opt.separate_threshold); + batch.Put(key, value); + return Write(opt, &batch); +} +``` + +经过一系列函数的调用,最终会来到Write()函数 + +```c++ +Status DBImpl::Write(const WriteOptions& options, WriteBatch* updates) { + Writer w(&mutex_); + w.batch = updates; + w.sync = options.sync; + w.done = false; + + MutexLock l(&mutex_); + writers_.push_back(&w); + while (!w.done && &w != writers_.front()) { + w.cv.Wait(); + } + if (w.done) { + return w.status; + } + + // May temporarily unlock and wait. + Status status = MakeRoomForWrite(updates == nullptr); + uint64_t last_sequence = versions_->LastSequence(); + Writer* last_writer = &w; + ... +``` + +首先会生成一个writer对象,带写锁,并对writer进行初始化。 + +在leveldb中,在面对并发写入时,做了一个处理的优化。在同一个时刻,只允许一个写入操作将内容写入到日志文件以及内存数据库中。为了在写入进程较多的情况下,减少日志文件的小写入,增加整体的写入性能,leveldb将一些“小写入”合并成一个“大写入”。使第一个发起写入的线程作为唯一写者,负责发起写合并、批量化处理来自其他线程的写入操作。 + +紧接着便是MakeRoomForWrite 方法,判断 Memtable 是不是满了、当前 L0 的 SSTable 是不是太多了,从而发起 Compaction 或者限速。 + +```c++ +... +{ + mutex_.Unlock(); + // 先写入vlog再写入memtable + // 写vlog日志 offset 表示这个 write_batch 在vlog中的偏移地址。 + uint64_t offset = 0; + status = vlog_->AddRecord(WriteBatchInternal::Contents(write_batch),offset); + // status = log_->AddRecord(WriteBatchInternal::Contents(write_batch)); + bool sync_error = false; + if (status.ok() && options.sync) { + status = logfile_->Sync(); + if (!status.ok()) { + sync_error = true; + } + } + if (status.ok()) { + status = WriteBatchInternal::InsertInto(write_batch, mem_, logfile_number_, offset); + } + ... +``` + +接着是写入Record部分,这里我们做了一个修改,即我们会先写入vlog再写入memtable。 + +实现上是先调用AddRecord()将Record写入vlog,再调用InsertInto()写如memtable。 + +对于InsertInto(): + +```c++ +Status WriteBatchInternal::InsertInto(const WriteBatch* b, MemTable* memtable, + uint64_t fid, size_t offset) { + MemTableInserter inserter; + inserter.sequence_ = WriteBatchInternal::Sequence(b); + inserter.mem_ = memtable; + return b->Iterate(&inserter, fid, offset); +} +``` + +会调用Iterate(): + +```c++ +Status WriteBatch::Iterate(Handler* handler, uint64_t fid, + uint64_t offset) const { + Slice input(rep_); + const char* begin = input.data(); + + if (input.size() < kHeader) { + return Status::Corruption("malformed WriteBatch (too small)"); + } + input.remove_prefix(kHeader); + Slice key, value; + int found = 0; + while (!input.empty()) { + found++; + const uint64_t kv_offset = input.data() - begin + offset; + assert(kv_offset > 0); + + char tag = input[0]; + input.remove_prefix(1); + switch (tag) { + case kTypeValue: + if (GetLengthPrefixedSlice(&input, &key) && + GetLengthPrefixedSlice(&input, &value)) { + handler->Put(key, value); + } else { + return Status::Corruption("bad WriteBatch Put"); + } + break; + case kTypeDeletion: + if (GetLengthPrefixedSlice(&input, &key)) { + handler->Delete(key); + } else { + return Status::Corruption("bad WriteBatch Delete"); + } + break; + case kTypeSeparation: + if (GetLengthPrefixedSlice(&input, &key) && + GetLengthPrefixedSlice(&input, &(value))) { + // value = fileNumber + offset + valuesize 采用变长编码的方式 + std::string dest; + PutVarint64(&dest, fid); + PutVarint64(&dest, kv_offset); + PutVarint64(&dest, value.size()); + Slice value_offset(dest); + handler->Put(key, value_offset, kTypeSeparation); + } else { + return Status::Corruption("WriteBatch Put error"); + } + break; + default: + return Status::Corruption("unknown WriteBatch tag"); + } + } + if (found != WriteBatchInternal::Count(this)) { + return Status::Corruption("WriteBatch has wrong count"); + } else { + return Status::OK(); + } +} +``` + +在Iterate()中,对于每次操作进行遍历,对于不同的keyType会进行不同的处理,这里我们对于kTypeSeparation类型,即超过阈值需要进行kv分离的键值对,会对value进行修改,使其采用fileNumber + offset + valuesize 变长编码的方式,最后调用Put写入memtable。 + +### KV 分离读写测试 + ++ VLog 读写测试文件为 `test/kv_test`,长/短 value 读写均通过测试,KV 分离实现。 + +![kv_test](./image/kv_test.png) + + + +## Garbage Collection + +> ​ 不同于 VLog 已实现 `VlogReader/VlogWriter` 的读写功能,我们设计 VLog 的垃圾回收机制(GC)是基于每个 VLog 的剩下有效 kv 数据对所占 VLog 比重触发的。 + +#### ValueLogInfo + ++ GC 需要知晓每个 VLog 的详细信息,这些信息以结构体 `ValueLogInfo` 的形式保存与访问: + + ```C++ + typedef struct ValueLogInfo { + uint64_t last_sequence_; // VLog 中最后一个有效 kv 的序列号 + size_t file_size_; // VLog 文件大小 + uint64_t logfile_number_; // VLog 文件编号 + int left_kv_numbers_; // VLog 中剩下的 kv 数量 + uint64_t invalid_memory_; // VLog 中无效空间的大小 + }ValueLogInfo; ``` -+ `class VLog` ++ 所有 VLog 文件的 `ValueLogInfo` 可以根据对应的 `ValueLogInfo->invalid_memory_` 进行对比,并从小到大保存: ```c++ - class VLog { - private: - // 该 VLog 是否活跃,即可插值 - bool activate_; - - // 最大 VLog 大小 - std::size_t maxSize_; - - // GC 计数器 - std::size_t deadkeyCount; - - public: - // 构造函数,默认赋值 GC 计数器为 GC 触发的最大阈值 - VLog(bool activate, std::size_t maxSize, std::size_t gcThreshold) - : activate_(activate), maxSize_(maxSize), deadkeyCount(gcThreshold) {} - - // 向 VLog 中添加一个新的键值对 - virtual void append(const std::string& key, const std::string& value) = 0; - - // 查找给定键对应的值 - virtual VPtr lookup(const std::string& key) const = 0; - - // 执行垃圾回收操作 - virtual void GarbageCollection() = 0; - - virtual ~VLog() {} + struct MapCmp{ + bool operator ()(const ValueLogInfo* a, const ValueLogInfo* b) + { + return a->invalid_memory_ < b->invalid_memory_; + } }; ``` -## 功能测试 - -### 单元测试(测试用例) - -+ **字段功能:** - 1. (测试是否能序列化 `FieldArray`、反序列化解析 value ;) - 2. 测试是否能成功写入、点查与范围查询; - 3. 测试是否能通过 value 查询所有匹配的 Key。 -+ **KV 分离:** - 1. 测试大小 value 与对应 key 是否按规则存入 LSM-Tree 或 VLog; - 2. 测试是否能通过 key 与 `VPtr` 找到 VLog 中正确的 value; - 3. 测试 GC 流程是否正确,包括是否成功触发、重写 VLog、回写 LSM-Tree 的 key 对应的 `VPtr`。 - -### 性能测试(Benchmark) - -1. 测试不同 value 大小的 Throughput; -2. 测试读写放大的减小程度; -3. 测试随着插入数据量,LSM-Tree 层级的减小程度; -4. 测试随机点查 / 顺序范围查询效率; -5. 测试 GC 开销; -6. 测试各读写阶段耗时占比(Wait / Log / Memtable / Other); -7. 比较大/小数据集、高并发场景的表现; -8. (比较资源利用率(硬盘 I/O 、内存负载);) - -## 可能遇到的挑战与解决方案 - -1. KV 分离中 VLog 的 GC 开销可能较大:GC 过程中需要扫描和重写 vLog,以及回写 LSM-Tree,需要遍历所有 SSTable,开销较大; -2. 数据一致性问题:若程序突然停止运行,可能导致数据不一致的情况,目前暂时没想到恢复机制; -3. 读、写、GC 等流程的持锁处理; -4. 由于每次读取需要遍历整个 LSM-Tree 且由于 vLog 是 Append-Only 的无序存储,导致顺序读取的效率可能不比随机读取高多少,开销大,需要实现 value 预读机制,提前预读取下一个 value。 - -## 分工和进度安排 - -| 功能 | 预计完成日期 | 分工 | -| :------------------------------------------: | :----------: | :----------: | -| Fields 类和相关接口实现 | 12月3日 | 朱维清、谷杰 | -| 测试实现字段功能 | 12月5日 | 谷杰 | -| VLog 类和相关接口实现 | 12月15日 | 朱维清、谷杰 | -| 测试实现 KV 分离 | 12月19日 | 朱维清 | -| Benchmark 测试(吞吐量、写放大、点查范围查) | 12月26日 | 谷杰 | -| Benchmark 测试(GC 开销、大小数据集、并发) | 12月26日 | 朱维清 | \ No newline at end of file +### SeparateManagement 类 + +```C++ +class SeparateManagement { + public: + SeparateManagement(uint64_t garbage_collection_threshold) + : garbage_collection_threshold_(garbage_collection_threshold) {} + + ~SeparateManagement() {} + /* 更新数据库的最后一个序列号,为需要 GC 的 VLog 分配新的序列号 */ + bool ConvertQueue(uint64_t& db_sequence); + /* 更新指定 VLogInfo 的无效空间和剩余键值对数量 */ + void UpdateMap(uint64_t fid, uint64_t abandon_memory); + /* 选择无效空间最大的 VLog 加入到 need_updates_ 队列 */ + void UpdateQueue(uint64_t fid); + /* 从 garbage_collection_ 队列中取出一个需要 GC 的 VLog,返回最后(最新)序列号 */ + bool GetGarbageCollectionQueue(uint64_t& fid, uint64_t& last_sequence); + /* 在 map_file_info_ 中添加新创建的 VLog 的 ValueLogInfo */ + void WriteFileMap(uint64_t fid, int kv_numbers, size_t log_memory); + /* 检查是否有任何 VLog 需要 GC */ + bool MayNeedGarbageCollection() { return !garbage_collection_.empty(); } + /* 从 map_file_info_ 中移除指定编号的 VLog */ + void RemoveFileFromMap(uint64_t fid) { map_file_info_.erase(fid); } + /* 检查 map_file_info_ 是否为空 */ + bool EmptyMap() { return map_file_info_.empty(); } + /* 遍历 map_file_info_ 中的所有 VLog,更新 need_updates_ 以便后续 GC */ + void CollectionMap(); + + private: + // VLog 触发 GC 的阈值 + uint64_t garbage_collection_threshold_; + // 当前 version 的所有 VLog 索引 + std::unordered_map map_file_info_; + // 即将 GC 的 VLog + std::deque garbage_collection_; + // 需要 GC 但尚未更新 Sequence 的 VLog + std::deque need_updates_; + // 正在删除的 VLog 文件编号 + std::unordered_set delete_files_; +}; +``` + +#### 介绍部分函数 + ++ `ConvertQueue`: + 每次把 VLog 加入 GC 队列前需要更新数据库的 last_sequence,并确保所有 `need_updates_` 队列里的 VLog 都更新了 `last_sequence_`,以便对 VLog 中的有效 keys 重新插入新的 VLog 中: + +```C++ +bool SeparateManagement::ConvertQueue(uint64_t& db_sequence) { + if (!need_updates_.empty()) { + db_sequence++; + } else { + return false; + } + while (!need_updates_.empty()) { + ValueLogInfo* info = need_updates_.front(); + need_updates_.pop_front(); + map_file_info_.erase(info->logfile_number_); + info->last_sequence_ = db_sequence; + db_sequence += info->left_kv_numbers_; + garbage_collection_.push_back(info); + } + assert(db_sequence <= kMaxSequenceNumber); + return true; +} +``` + ++ `UpdateMap`:每删除一个 KV 分离的 key 时都要对这个 key 对应的 VLog 更新 `invalid_memory_`: + +```C++ +void SeparateManagement::UpdateMap(uint64_t fid, uint64_t abandon_memory) { + if (map_file_info_.find(fid) != map_file_info_.end()) { + ValueLogInfo* info = map_file_info_[fid]; + info->left_kv_numbers_--; + info->invalid_memory_ += abandon_memory; + } +} +``` + ++ `UpdateQueue`:遍历 `map_file_info_` 中所有的 ValueLogInfo,通过优先队列进行排序,找到无效空间最大的 VLog 进行 GC,这个 VLog 要不存在 `delete_files_` 中。加入 GC 队列的 VLog 数量由当前无效空间最多的 VLog 超过 GC 阈值多少决定(1~3),且优先删除比传入 `fid` 更旧的 VLog: + +```C++ +void SeparateManagement::UpdateQueue(uint64_t fid) { + std::priority_queue, MapCmp> sort_priority_; + + for (auto iter = map_file_info_.begin(); iter != map_file_info_.end(); ++iter) { + if (delete_files_.find( iter->first) == delete_files_.end()) { + sort_priority_.push(iter->second); + } + } + /* 默认每次只把一个 VLog 加入到 GC 队列 */ + int num = 1; + int threshold = garbage_collection_threshold_; + if (!sort_priority_.empty() + && sort_priority_.top()->invalid_memory_ >= garbage_collection_threshold_ * 1.2) { + /* 如果无效空间最多的 VLog 超过 GC 阈值 20%,这次会把 1~3 个 VLog 加入到 GC 队列 */ + num = 3; + threshold = garbage_collection_threshold_ * 1.2; + } + while (!sort_priority_.empty() && num > 0) { + ValueLogInfo* info = sort_priority_.top(); + sort_priority_.pop(); + /* 优先删除较旧的 VLog */ + if (info->logfile_number_ > fid) { + continue; + } + num--; + if (info->invalid_memory_ >= threshold) { + need_updates_.push_back(info); + /* 更新准备 GC(准备删除)的 VLog */ + delete_files_.insert(info->logfile_number_); + } + } +} +``` + ++ `CollectionMap()`:把所有当前存活的 VLog 插入 `need_updates_` ,以便未来进行 GC: + +```C++ +void SeparateManagement::CollectionMap(){ + if (map_file_info_.empty()) return; + + for (auto iter : map_file_info_) { + uint64_t fid = iter.first; + ValueLogInfo* info = iter.second; + if (delete_files_.find(fid) == delete_files_.end()) { + need_updates_.push_back(info); + delete_files_.insert(info->logfile_number_); + } + } +} +``` + +--- + +### GC 的具体实现 + +> 1. 我们采用了类似 Compaction 的后台多线程调度机制来实现 GC; +> 2. 支持在线自动 GC,也支持离线手动触发 GC; +> 3. GC 与 Snapshot 互相冲突:若数据库运行期间有 Snapshot 产生,则该 Snapshot 之后的所有数据不再进行任何在线 GC,直到该 Snapshot 被释放才会重启在线 GC; +> +> **VLog 的 GC 的回收阈值: `Options::garbage_collection_threshold = max_value_log_size / 4 ( = 4MB)`** + ++ 所有 GC 流程都由 `SeparateManagement *DBImpl::garbage_collection_management_` 进行管理,并向所有 VLogs 的 `ValueLogInfo` 更新 GC 的结果。 + +#### 后台多线程调度机制 + +参考 Compaction 线程互斥锁的实现与后台调度机制: + +```c++ + // 用于 gc 的线程互斥锁 + port::CondVar garbage_collection_work_signal_ GUARDED_BY(mutex_); + // 表示后台 gc 线程是否正被调度 + bool background_GarbageCollection_scheduled_ GUARDED_BY(mutex_); + + // 若为 true 则表示不允许后台 GC 线程继续进行 + bool finish_back_garbage_collection_; + + // 参考 Compaction 的调度机制,对于 GC 也声明: + // GCBGWork、GCBackgroundCall、MaybeScheduleGC、BackGroundGC + static void GarbageCollectionBGWork(void* db); + void GarbageCollectionBackgroundCall(); + void MaybeScheduleGarbageCollection() EXCLUSIVE_LOCKS_REQUIRED(mutex_); + void BackGroundGarbageCollection(); +``` + +#### 离线手动 GC + +```c++ +// 注释:手动进行离线回收 +Status DBImpl::OutLineGarbageCollection(){ + MutexLock l(&mutex_); + Status s; + // map_file_info_ 非空,则根据它进行回收,否则进行所有 VLog 的回收 + if (!garbage_collection_management_->EmptyMap()) { + garbage_collection_management_->CollectionMap(); + uint64_t last_sequence = versions_->LastSequence(); + garbage_collection_management_->ConvertQueue(last_sequence); + versions_->SetLastSequence(last_sequence); + MaybeScheduleGarbageCollection(); + return Status(); + } + return s; +} +``` + +### 在线自动 GC 流程 + +1. 首先需要确定最基本的三点: + + + `SeparateManagement *DBImpl::garbage_collection_management_` 记录了当前数据库的等待 GC 队列 `garbage_collection_` ,而该队列的更新只在 `ConvertQueue(db_sequence)` 函数中触发; + + `garbage_collection_` 中所有的 `ValueLogInfo` 又都来自于需要进行 GC 但尚未更新 Sequence 的 VLog 队列 `need_updates_`,而该队列的更新只在 `UpdateQueue(fid)` 函数中触发; + + `need_updates_`是怎么来的?根据我们 GC 的 VLog 无效空间超过设定阈值这样的触发逻辑,我们在 `UpdateMap(fid, abandon_memory)`中进行了上述判断,并对每个 `ValueLogInfo` 的关键成员变量 `left_kv_numbers_` 和 `invalid_memory_` 做了修改; + +2. **那么接下来的问题变为:在线自动 GC 会在什么时候调用 `ConvertQueue()` 、 `UpdateQueue()`、`UpdateMap()` 函数?** + + + **`UpdateMap()` :什么时候会有新的 VLog 无效空间产生?—— LSM-Tree 触发 Compaction,在 `DoCompactionWork()` 中 drop 掉 KV 数据对的时候!(我们设置只有在 drop 掉 type 为 `kTypeSeparation` 的 KV 数据对时才调用 `UpdateMap()` 函数。)** + + ```c++ + if (!drop) { + + ······ + + } else { + // drop 掉 LSM-tree 中的 kv 数值对,对属于 KV 分离的 kv 数值对进行 GC + Slice drop_value = input->value(); + if( ikey.type == kTypeSeparation ){ + uint64_t fid = 0; + uint64_t offset = 0; + uint64_t size = 0; + GetVarint64(&drop_value,&fid); + GetVarint64(&drop_value,&offset); + GetVarint64(&drop_value,&size); + mutex_.Lock(); + garbage_collection_management_->UpdateMap(fid,size); + mutex_.Unlock(); + } + } + ``` + + + **`UpdateQueue()`:什么时候更新 `need_updates_` 合适呢?在 `BackgroundCompaction()` 函数成功调用 `DoCompactionWork()` ,更新完一轮 `ValueLogInfo` 的无效空间之后,调用一次`UpdateQueue()` 来更新 `need_updates_`:** + + ```c++ + // compact 后需要考虑是否将 vlog 文件进行 gc 回收, + // 如果需要则将其加入到 GC 任务队列中 + // 不进行后台的 gc 回收,那么也不用更新待分配 sequence 的 vlog + if(!finish_back_garbage_collection_){ + garbage_collection_management_->UpdateQueue(versions_->ImmLogFileNumber() ); + } + + CleanupCompaction(compact); + c->ReleaseInputs(); + RemoveObsoleteFiles(); + } + ``` + + + **`ConvertQueue()`:除了离线手动触发 GC 之外,什么时候更新 `garbage_collection_` 比较合适?我们把该函数的调用放在了 `Write()` 函数中:每有一个 WriteBatch 准备写入 VLog 和 memtable 前,通过 `ConvertQueue(last_sequence)` 来更新一次所有 VLogs 的序列号与数据库的 `last_sequence_`,并触发一次可能的 GC 流程:** + + ```c++ + if (status.ok() && updates != nullptr) { // nullptr batch is for compactions + WriteBatch* write_batch = BuildBatchGroup(&last_writer); + + // GC 流程中写回的 WriteBatch 在 CollectionValueLog 函数中已经设置好了 + if (!write_batch->IsGarbageColletion()) { + // 判断是否需要进行 GC + // 如需要,空出一块 sequence 区域, 触发 GC 将在 MakeRoomForWrite 里 + // 先判断是否要进行 gc 后台回收 + // 如果建立了快照,finish_back_garbage_collection_ 就为 true + // 此时不进行 sequence 分配 + if (!finish_back_garbage_collection_ + && garbage_collection_management_->ConvertQueue(last_sequence)) { + MaybeScheduleGarbageCollection(); + } + // SetSequence 在 write_batch 中写入本次的 sequence + WriteBatchInternal::SetSequence(write_batch, last_sequence + 1); + last_sequence += WriteBatchInternal::Count(write_batch); + } + // 这里设置 last_sequence 是为了确保离线 GC 的时候, + // 在 map 存在的时候需要调用 ConvertQueue 给回收任务分配 sequence + versions_->SetLastSequence(last_sequence); + vlog_kv_numbers_ += WriteBatchInternal::Count(write_batch); + ``` + +3. 与 Compaction 的后台触发流程类似,可能触发一次 GC 的入口函数为 `MaybeScheduleGarbageCollection()`,除了离线手动触发 GC 之外,它共在两处地方可能被调用: + + + `GarbageCollectionBackgroundCall()` 在无法调度后台 GC 线程或是成功开始后台 GC 线程之后调用 `MaybeScheduleGarbageCollection()`; + + 上文提到的 `Write()` 函数中; + +4. 接下来的后台 GC 调度流程参考了 Compaction 的后台调度: + + ```c++ + // 可能调度后台线程进行 GC + void DBImpl::MaybeScheduleGarbageCollection() { + mutex_.AssertHeld(); + if (background_GarbageCollection_scheduled_) { + // Already scheduled + } else if (shutting_down_.load(std::memory_order_acquire)) { + // DB is being deleted; no more background compactions + } else if (!bg_error_.ok()) { + // Already got an error; no more changes + } else { + // 设置调度变量,通过 detach 线程调度; detach 线程即使主线程退出,依然可以正常执行完成 + background_GarbageCollection_scheduled_ = true; + env_->ScheduleForGarbageCollection(&DBImpl::GarbageCollectionBGWork, this); + } + } + ``` + + ```c++ + // 后台 gc 线程中执行的任务 + void DBImpl::GarbageCollectionBGWork(void* db) { + reinterpret_cast(db)->GarbageCollectionBackgroundCall(); + } + ``` + + ```c++ + // 后台 gc 线程执行 + void DBImpl::GarbageCollectionBackgroundCall() { + assert(background_GarbageCollection_scheduled_); + if (shutting_down_.load(std::memory_order_acquire)) { + // No more background work when shutting down. + } else if (!bg_error_.ok()) { + // No more background work after a background error. + } else { + BackGroundGarbageCollection(); + } + + background_GarbageCollection_scheduled_ = false; + // 再调用 MaybeScheduleGarbageCollection 检查是否需要再次调度 + MaybeScheduleGarbageCollection(); + garbage_collection_work_signal_.SignalAll(); + } + // end + ``` + + ```c++ + // 后台 GC 任务 + void DBImpl::BackGroundGarbageCollection(){ + uint64_t fid; + uint64_t last_sequence; + while( true){ + Log(options_.info_log, "garbage collection file number: %lu", fid); + if( !garbage_collection_management_->GetGarbageCollectionQueue(fid,last_sequence) ){ + return; + } + // 在线的 gc 回收的 sequence 是要提前就分配好的。 + CollectionValueLog(fid,last_sequence); + } + } + ``` + +5. 在线后台 GC 流程的最后一步是调用 `CollectionValueLog(fid,last_sequence)` 函数,读取并回收一个 vlog 文件。这里使用了 `VLogReader` 的 `ReadRecord()` 函数来顺序读取要回收的目标 VLog 的所有 records,对于每个 record ,解码出其存储的所有 KV 数据对,并对 `kTypeSeparation` 的 KV 数据对进行一次 LSM-tree 的回查(`GetLsm(key, value)` ,实现参考了 `Get()`): + + + 从 LSM-tree 中找不到 key,说明这个 key 被删除了,vlog 中要丢弃; + + 找到了 key,但是最新的 kv 对不是 KV 分离的情况,也丢弃; + + ```c++ + ValueType type = static_cast(record[0]); + record.remove_prefix(1); + Slice key; + Slice value; + std::string get_value; + GetLengthPrefixedSlice(&record,&key); + if (type != kTypeDeletion) { + GetLengthPrefixedSlice(&record,&value); + } + if (type != kTypeSeparation) { + continue; + } + + status = this->GetLsm(key,&get_value); + // 1. 从 LSM-tree 中找不到 key,说明这个 key 被删除了,vlog中要丢弃 + // 2. 找到了 key,但是最新的 kv 对不是 KV 分离的情况,也丢弃 + if (status.IsNotFound() || !status.IsSeparated()) { + continue; + } + if (!status.ok()) { + std::cout<<"read the file error "< config::gcWriteBatchSize) { + Write(opt, &batch); + batch.Clear(); + batch.setGarbageCollection(true); + WriteBatchInternal::SetSequence(&batch, next_sequence); + uint64_t kv_size; + GetVarint64(&get_slice,&kv_size); + size_offset = kv_offset + kv_size; + } + } + } + record_offset += record.data() - head_record_ptr; + } + Write(opt, &batch); + ``` + + 再把专门设定为 GC 回写的 WriteBatch 写回 VLog 和 memtable; + +6. 最后,在 `env_` 和 `garbage_collection_management_` 里彻底删除这个已经被回收的 VLog 文件即可: + + ```c++ + status = env_->RemoveFile(logName); + if (status.ok()) { + garbage_collection_management_->RemoveFileFromMap(fid); + } + ``` + +7. 至此,一次在线自动 GC 流程完成。 + +--- + +#### GC 与 Snapshot 的冲突机制 + +```c++ +const Snapshot* DBImpl::GetSnapshot() { + MutexLock l(&mutex_); + // 建立快照,对快照之后的信息不用进行 GC + finish_back_garbage_collection_ = true; + return snapshots_.New(versions_->LastSequence()); +} + +void DBImpl::ReleaseSnapshot(const Snapshot* snapshot) { + MutexLock l(&mutex_); + snapshots_.Delete(static_cast(snapshot)); + // 没有快照,重新进行后台 GC + if (snapshots_.empty()) { + finish_back_garbage_collection_ = false; + } +} +``` + +--- + +## 断电恢复 + +> 实现断电恢复的主要函数为 `DBImpl::Recover()`、`DBImpl::RecoverLogFile`、`DB::Open()`; + +### 大致恢复流程 + +1. 在 `Open()` 打开一个数据库进程后,首先会使用 manifest 文件记录的 versions 进行一次 `Recover()`; + +2. `Recover()` 会指定要恢复的最新的 VLog 文件编号: + + ```c++ + for (size_t i = 0; i < filenames.size(); i++) { + if (ParseFileName(filenames[i], &number, &type)) { + // begin 注释: max_number 为要恢复的最新的文件编号 + if (number > max_number) max_number = number; + // expected 里的文件现在依然存在,可以删除 + expected.erase(number); + // 保存当前已有的 vlog 文件,基于它们进行恢复 + if (type == kLogFile) + logs.push_back(number); + // end + } + } + ``` + +3. `Recover()` 调用 `RecoverLogFile()` 函数逐个恢复找到的 VLog 日志的内容; + +4. `RecoverLogFile()` 会根据单个传入的 VLog 文件恢复内存中的数据。如果找到了正确的序列位置 `found_sequence_pos`,就会将 VLog 中记录的操作读取出来,重新写入到 memtable 中。其中最重要的部分是获取 `versions_->ImmLastSequence()` 来设置 `imm_last_sequence` ,通过这一变量来判断上一次断电时的数据库状态,判断是否需要继续处理当前记录: + + ```c++ + //设置 imm_last_sequence + uint64_t imm_last_sequence = versions_->ImmLastSequence(); + while (reader.ReadRecord(&record, &scratch) && status.ok()) { + if (record.size() < 20) { + reporter.Corruption(record.size(), + Status::Corruption("log record too small")); + continue; + } + // begin 如果 imm_last_sequence == 0 的话, + // 那么整个说明没有进行一次 imm 转 sst的情况,所有的 log 文件都需要进行回收 + // 回收编号最大的 log 文件即可 + if( !found_sequence_pos && imm_last_sequence != 0 ){ + Slice tmp = record; + tmp.remove_prefix(8); + uint64_t seq = DecodeFixed64(tmp.data()); + tmp.remove_prefix(8); + uint64_t kv_numbers = DecodeFixed32(tmp.data()); + + // 解析出来的 seq 不符合要求跳过。恢复时定位 seq 位置一定要大于等于 versions_->LastSequence() + if( ( seq + kv_numbers - 1 ) < imm_last_sequence ) { + record_offset += record.size(); + continue; + }else if( ( seq + kv_numbers - 1 ) == imm_last_sequence ){ + // open db 落盘过 sst,再一次打开 db + found_sequence_pos = true; + record_offset += record.size(); + continue; + } else { // open db 之后没有落盘过 sst,然后关闭 db,第二次恢复的时候 + found_sequence_pos = true; + } + } + ``` + +5. `RecoverLogFile()` 把读取的 VLog 数据通过 WriteBatch 重新写入到 memtable 中,更新 `max_sequence` 以跟踪遇到的最大序列号 `last_seq`。如果 memtable 写满,则将 memtable 持久化为 SSTable,最后落盘修改 `imm_last_sequence`,版本恢复; + +6. 回到 `Recover()` 函数,设置最新 `versions_` 的 `last_sequence_`; + +7. 回到 `Open()` 函数,在成功 `Recover()` 之后通过 `GetAllValueLog(dbname, logs)` 获取所有 VLogs,最后把 `imm_last_sequence` 设置到新的 manifest 文件当中,即 `RecoverLogFile()` 中判断上一次断电时的数据库状态 imm -> sst 的情况,表示一次成功的全盘恢复。 + `GetAllValueLog()` 函数实现如下: + + ```C++ + // 获取所有 VLogs + Status DBImpl::GetAllValueLog(std::string dir, std::vector& logs) { + logs.clear(); + std::vector filenames; + // 获取 VLogs 列表 + Status s = env_->GetChildren(dir, &filenames); + if (!s.ok()) { + return s; + } + uint64_t number; + FileType type; + for (size_t i = 0; i < filenames.size(); i++) { + if (ParseFileName(filenames[i], &number, &type)) { + // 获取所有 .log 文件 + if (type == kLogFile) + logs.push_back(number); + } + } + return s; + } + ``` + +8. 最后通过 `LogAndApply()` 进行落盘,调用 `RemoveObsoleteFiles()` 删除不再需要的旧文件: + + ```c++ + // Recover 之后,获取所有 VLogs + std::vector logs; + s = impl->GetAllValueLog(dbname, logs); + sort(logs.begin(),logs.end()); + + ······ + + if (s.ok() && save_manifest) { + edit.SetPrevLogNumber(0); // No older logs needed after recovery. + edit.SetLogNumber(impl->logfile_number_); + // 把 imm_last_sequence 设置到新的 manifest 当中, + // 即 RecoverLogFile 中判断上一次断电时的数据库状态的 imm -> sst 的情况, + // 表示一次成功的全盘恢复 + impl->versions_->StartImmLastSequence(true); + s = impl->versions_->LogAndApply(&edit, &impl->mutex_); + impl->versions_->StartImmLastSequence(false); + } + if (s.ok()) { + impl->RemoveObsoleteFiles(); + impl->MaybeScheduleCompaction(); + } + ``` + + + + +## KV 分离 —— 版本控制 + + 在讲述我们如何实现kv分离的版本控制前,我们先来回顾一下leveldb的版本控制。 + + 版本控制是LevelDB中至关重要的内容。LevelDB如何能够知道每一层有哪些SST文件;如何快速的定位某条数据所在的SST文件;重启后又是如何恢复到之前的状态的,等等这些关键的问题都需要依赖版本控制模块。对其维护的信息及所起的作用简要概括如下: + +- 记录Compaction相关信息,使得Compaction过程能在需要的时候被触发; +- 维护SST文件索引信息及层次信息,为整个LevelDB的读、写、Compaction提供数据结构支持; +- 负责元信息数据的持久化,使得整个库可以从进程重启或机器宕机中恢复到正确的状态; +- 记录LogNumber,Sequence,下一个SST文件编号等状态信息; +- 以版本的方式维护元信息,使得Leveldb内部或外部用户可以以快照的方式使用文件和数据。 + + LevelDB用**Version**表示一个版本的元信息,Version中主要包括一个FileMetaData指针的二维数组,分层记录了所有的SST文件信息。**FileMetaData**数据结构用来维护一个文件的元信息,包括文件大小,文件编号,最大最小值,引用计数等,其中引用计数记录了被不同的Version引用的个数,保证被引用中的文件不会被删除。除此之外,Version中还记录了触发Compaction相关的状态信息,这些信息会在读写请求或Compaction过程中被更新。在CompactMemTable和BackgroundCompaction过程中会导致新文件的产生和旧文件的删除。每当这个时候都会有一个新的对应的Version生成,并插入VersionSet链表头部。 + + **VersionSet**是一个Version构成的双向链表,这些Version按时间顺序先后产生,记录了当时的元信息,链表头指向当前最新的Version,同时维护了每个Version的引用计数,被引用中的Version不会被删除,其对应的SST文件也因此得以保留,通过这种方式,使得LevelDB可以在一个稳定的快照视图上访问文件。VersionSet中除了Version的双向链表外还会记录一些如LogNumber,Sequence,下一个SST文件编号的状态信息。 + +![version_1](./image/version_1.jpg) + + 通过上面的描述可以看出,相邻Version之间的不同仅仅是一些文件被删除另一些文件被删除。也就是说将文件变动应用在旧的Version上可以得到新的Version,这也就是Version产生的方式。LevelDB用**VersionEdit**来表示这种相邻Version的差值。 + +![version_2](./image/version_2.jpg) + + 为了避免进程崩溃或机器宕机导致的数据丢失,LevelDB需要将元信息数据持久化到磁盘,承担这个任务的就是**Manifest**文件。可以看出每当有新的Version产生都需要更新Manifest,很自然的发现这个新增数据正好对应于VersionEdit内容,也就是说Manifest文件记录的是一组VersionEdit值,在Manifest中的一次增量内容称作一个Block。所以恢复元信息的过程也变成了依次应用VersionEdit的过程,这个过程中有大量的中间Version产生,但这些并不是我们所需要的。LevelDB引入VersionSet::Builder来避免这种中间变量,方法是先将所有的VersoinEdit内容整理到VersionBuilder中,然后一次应用产生最终的Version。 + +![version_3](./image/version_3.jpg) + + 通过对leveldb的版本控制的理解,我们认为kv分离其实也只是在原有的版本控制的基础上,新添了一些特殊情况。如添加对vlog的维护以及一些用于kv分离的参数。我们先从简单的VersoinEdit入手,添加不同version之间可能产生的差值。 + +`version_edit.h`: + +```c++ +struct FileMetaData { + FileMetaData() : refs(0), allowed_seeks(1 << 30), file_size(0) {} + + int refs; + int allowed_seeks; // Seeks allowed until compaction + uint64_t number; + uint64_t file_size; // File size in bytes + InternalKey smallest; // Smallest internal key served by table + InternalKey largest; // Largest internal key served by table +}; + +// 注释:vlog文件的元数据 +struct LogMetaData { + LogMetaData() : refs(0), allowed_seeks(1 << 30), file_size(0) {} + + int refs; // 引用计数 + int allowed_seeks; //当该值为0时,意味着需要进行compaction操作了; 变量allowed_seeks的值在sstable文件加入到version时确定 + uint64_t number; //文件名相关;sstable文件的名字是 number.ldb + uint64_t file_size; //文件大小 + InternalKey smallest; //最小的key + InternalKey largest; //最大的key +}; +``` + +首先是对于vlog文件的元数据,我们仿照了sstable文件元数据的格式,构建了LogMetaData。 + +同时我们还添加了SetImmLastSequence函数用于设置在后续immemtable转化为sstable时所需的参数imm_last_sequence_。 + +```c++ + void SetImmLastSequence(SequenceNumber seq,uint64_t fid) { + has_imm_last_sequence_ = true; + imm_last_sequence_ = seq; + imm_log_file_number_ = fid; + } +``` + +以及一些私有成员: + +```c++ + //注释:是否包含 imm_last_sequence_ + bool has_imm_last_sequence_; + //注释:恢复log的时候 用来定位memtable 和 immemtabl中的位置 + SequenceNumber imm_last_sequence_; + //注释:imm_last_sequence 所处在的log文件 + uint64_t imm_log_file_number_; +``` + +`version_edit.cc`: + +新添了两种tag,分别用于记录immemtable到sst的sequence以及恢复immemtable和memtable时在log文件中对应的位置。 + +```c++ +enum Tag { + kComparator = 1, + kLogNumber = 2, + kNextFileNumber = 3, + kLastSequence = 4, + kCompactPointer = 5, + kDeletedFile = 6, + kNewFile = 7, + // 8 was used for large value refs + kPrevLogNumber = 9, + // 注释: 用于记录immemtable到sst的sequence + kImmLastSequence = 10, + // 注释: 用于记录恢复immemtable和memtable时在log文件中对应的位置 + kLogFile = 11 +}; +``` + +在void VersionEdit::Clear()中添加对之前私有成员参数的重置。 + +```c++ + void VersionEdit::Clear() { + ... + // 注释:重置为0 + imm_last_sequence_ = 0; + // 注释:重置为0 + imm_log_file_number_ = 0; + ... + // 注释:重置为false + has_imm_last_sequence_ = false; + ... + } +``` + +EncodeTo() 用于 VersionEdit 持久化,将本 VersionEdit 的所有信息持久化到磁盘的 MANIFEST 文件中。这里也添加了对新添参数的持久化 + +```c++ +if (has_imm_last_sequence_) { + PutVarint32(dst, kImmLastSequence); + PutVarint64(dst, imm_last_sequence_); + PutVarint64(dst, imm_log_file_number_); + } +``` + +对于DecodeFrom() 即从MANIFEST 中恢复一个 VersionEdit也是同理。 + +```c++ + case kImmLastSequence: + if (GetVarint64(&input, &imm_last_sequence_) && GetVarint64(&input, &imm_log_file_number_)) { + has_imm_last_sequence_ = true; + } else { + msg = "imemtable last sequence number"; + } + break; +``` + +修改完VersoinEdit,接着便是对与VersionSet的一些修改。 + +`version_set.h`: + +```c++ + //注释: immemtable转sst的sequence + uint64_t imm_last_sequence_; + //注释: 是否保存 imm 转 sst时候的sequence,主要用在 LogAndApply 这个函数当中,用于区分是mior compact 还是 major compact的过程。 + bool save_imm_last_sequence_; + //注释:imm_last_sequence 所处在的log文件 + uint64_t imm_log_file_number_; +``` + +首先便是对于一些基本的私有成员的添加,同时也添加了一系列函数用于后续版本控制时调用来设置相关参数。 + +```c++ + bool SaveImmLastSequence(){ return save_imm_last_sequence_; } + bool StartImmLastSequence(bool save ){ save_imm_last_sequence_ = save; } + void SetImmLastSequence( uint64_t seq ){ imm_last_sequence_ = seq; } + uint64_t ImmLastSequence() const { return imm_last_sequence_; } + uint64_t ImmLogFileNumber() const { return imm_log_file_number_; } + void SetImmLogFileNumber( uint64_t fid ){ imm_log_file_number_ = fid; } +``` + +`version_set.cc`: + +接下来便是对版本控制的相关功能点。 + +首先是对于Saver结构体,我们需要对kv是否分离进行区分。 + +```c++ +enum SaverState { + kNotFound, + kFound, + kDeleted, + kCorrupt, +}; +// 注释:Saver的kv对是否分离 +enum SaverSeparate { + kNotSeparated, + kSeparated +}; + +struct Saver { + // 注释:初始设为不分离 + SaverSeparate separate = kNotSeparated; + SaverState state; + const Comparator* ucmp; + Slice user_key; + std::string* value; +}; +``` + +紧接着在SaveValue操作中对于key.type进行判断,若果是是kTypeSeparation,则设为kSeparated类型。 + +```c++ +static void SaveValue(void* arg, const Slice& ikey, const Slice& v) { + Saver* s = reinterpret_cast(arg); + ParsedInternalKey parsed_key; + if (!ParseInternalKey(ikey, &parsed_key)) { + s->state = kCorrupt; + } else { + if (s->ucmp->Compare(parsed_key.user_key, s->user_key) == 0) { + // s->state = (parsed_key.type == kTypeValue) ? kFound : kDeleted; + s->state = (parsed_key.type == kTypeValue || parsed_key.type == kTypeSeparation) ? kFound : kDeleted; + if (s->state == kFound) { + s->value->assign(v.data(), v.size()); + // 注释:如果key.type是kTypeSeparation,则设为kSeparated类型 + s->separate = ( parsed_key.type == kTypeSeparation ) ? kSeparated : kNotSeparated; + } + } + } +} +``` + +接下来是对于Get()操作,即在指定版本中,查找一个给定 key 的 value。需要修改的部分其实也就是在Match操作时,添加一个对是否kv分离的判断。 + +```c++ + // 注释:对于是否kv分离,调用不同的Set函数 + if( state->saver.separate == kSeparated ){ + state->s.SetSeparated(); + } else{ + state->s.SetNotSeparated(); + } +``` + +接着便是在VersionSet(),LogAndApply()以及Recover()中添加对新添变量的设置,这里就不多加赘述。 + +```c++ + // 注释:设置imm_last_sequence_和imm_log_file_number_ + if( SaveImmLastSequence() ){ + edit->SetImmLastSequence(imm_last_sequence_,imm_log_file_number_); + } +``` + +```c++ + //注释:加上version_edit中添加的参数 + imm_last_sequence_(0), + imm_log_file_number_(0), + save_imm_last_sequence_(false), +``` + +```c++ +//注释:修改imm_last_sequence_和imm_log_file_number_ + imm_last_sequence_ = imm_last_sequence; + imm_log_file_number_ = imm_log_file_number; +``` + +```c++ + //注释:重置version_edit里添加的参数 + bool have_imm_last_sequence = false; + uint64_t imm_last_sequence = 0; + uint64_t imm_log_file_number = 0; +``` + +```c++ + //注释: 构建当前的Version 回放参数 + if (edit.has_imm_last_sequence_) { + imm_last_sequence = edit.imm_last_sequence_; + imm_log_file_number = edit.imm_log_file_number_; + have_imm_last_sequence = true; + } +``` + +同时我们对于会触发version变化的相关操作也进行了修改。 + +如对于RecoverLogFile操作中,有些情况会触发Compaction,我们需要在memtable落盘时修改imm_last_sequence以用于版本恢复。 + +```c++ +// 注释:mem 落盘修改 imm_last_sequence,版本恢复 + versions_->SetImmLastSequence(mem->GetTailSequence()); + versions_->SetImmLogFileNumber(log_number); +``` + + + +## 遇到的问题和 Debug 过程 + +在本次实验中,我们其实遇到了很多bug,最终都通过不断的调试,查找错误原因并一一解决。由于数量多且当时没有截图导致现在无法准确复现,这里只是举两个例子。 + +1. 在完成kv分离的操作后,我们发现对于大value的插入读取测试一直存在一个问题。 + 我们发现无论我们插入多少条数据,总会找不到最后一条数据。 + 一开始我们认为可能是VlogReader或者VlogWriter存在的问题,反复调试后一直没有解决。 + 后来我们发现,无论我们读取时是顺序读取还是倒叙读取,亦或是随机读取,都是最后一个插入的数据读取不到,我们认为可能跟sequence有关。终于,我们在db_impl.cc文件中的Write()函数中,发现WriteBatchInternal::SetSequence(write_batch, last_sequence+1)操作上存在一定的逻辑问题,具体的debug结果我们发现sequence是成倍增长且出现错位,于是我们修改了相关sequence的操作,最终成功通过了测试(当时没有截图,无法图片展示debug细节,这里只有展示修改后的代码): + +```c++ +if (status.ok() && updates != nullptr) { // nullptr batch is for compactions + WriteBatch* write_batch = BuildBatchGroup(&last_writer); + WriteBatchInternal::SetSequence(write_batch, last_sequence + 1); + last_sequence += WriteBatchInternal::Count(write_batch); + if( !write_batch->IsGarbageColletion() ){ + if( !finish_back_garbage_collection_ + && garbage_collection_management_->ConvertQueue(last_sequence) ){ + MaybeScheduleGarbageCollection(); + } + last_sequence += WriteBatchInternal::Count(write_batch); + } + versions_->SetLastSequence(last_sequence); + WriteBatchInternal::SetSequence(write_batch, last_sequence ); + last_sequence += WriteBatchInternal::Count(write_batch); + vlog_kv_numbers_ += WriteBatchInternal::Count(write_batch); +``` + +2. 在进行kv测试时出现了以下报错: + +![test_1](./image/test_1.jpg) + +进行调试后我们发现: + +![test_2](./image/test_2.jpg) + +是Get()操作进行到图示步骤,if条件判断错误,再结合实际输出的value,我们一开始认为s.ok()判断出错,但是再将if条件分开判断debug时,我们发现是s.IsSeparated()判断出错。但是结合我们实际拿到了value,kv分离应是正常进行的,后续对IsSeparated()进行debug时,我们发现在本来应该是判断code_是否为kSeparated的地方,我们错误的引用了code()导致条件判断与设想不同。修改后最终顺利通过测试。 + + + +## Benchmark + ++ 测试环境:创建一个10万条kv记录的数据库,其中每条记录的key为16个字节,value为 1KB ,分离的阈值为 16B。 + +```cmd +LevelDB: version 1.23 +Date: Sun Jan 5 22:55:59 2025 +CPU: 32 * Intel(R) Core(TM) i9-14900HX +CPUCache: 36864 KB +Keys: 16 bytes each +Values: 1024 bytes each (512 bytes after compression) +Entries: 100000 +RawSize: 99.2 MB (estimated) +FileSize: 50.4 MB (estimated) +WARNING: Optimization is disabled: benchmarks unnecessarily slow +WARNING: Assertions are enabled; benchmarks unnecessarily slow +WARNING: Snappy compression is not enabled +``` + +### 写性能: ++ kv不分离: + +```cmd +fillseq : 4.082 micros/op; 4.2 MB/s +fillsync : 985.150 micros/op; 0.0 MB/s (100 ops) +fillrandom : 4.337 micros/op; 4.0 MB/s +overwrite : 4.503 micros/op; 3.8 MB/s +fillgivenseq : 4.472 micros/op; 3.6 MB/s +fillgivenrandom : 9.076 micros/op; 1.8 MB/s +``` + ++ kv分离: + +```cmd +fillseq : 4.153 micros/op; 4.1 MB/s +fillsync : 1005.810 micros/op; 0.0 MB/s (100 ops) +fillrandom : 4.374 micros/op; 3.9 MB/s +overwrite : 4.461 micros/op; 3.8 MB/s +fillgivenseq : 4.503 micros/op; 3.6 MB/s +fillgivenrandom : 4.789 micros/op; 3.4 MB/s +``` + +#### 分析结论 + +1. 对于大value的场景下,若不进行kv分离,LSM tree 中的底层很快就会被占满,需要向上合并,造成频繁的compact,进一步放大了写放大。若是kv分离以后,一个kv对所占用的空间极少,compact的触发的频次下降。减少了写放大,提高了写入的效率。 +2. imm 转到 sst 的过程中,后台压缩线程会让主线程进入等待的状态,若不进行kv分离,一个imm很快就被占满,进入压缩状态,后续的put则需要等待。降低了写入效率。 +3. 整体上,进行kv分离写入的效率是要好的。这是因为leveldb在大value下的频繁的compact的原因。 + +### 读性能 + ++ kv不分离: + +```cmd +readrandom : 2.460 micros/op; (86501 of 100000 found) +readrandom : 2.096 micros/op; (86354 of 100000 found) +readseq : 0.258 micros/op; 188.5 MB/s +readreverse : 1.250 micros/op; 38.9 MB/s +findkeysbyfield : 1474764.000 micros/op; (3873 of 10000 found) +``` + ++ kv分离: + +```cmd +readrandom : 13.775 micros/op; (86501 of 100000 found) +readrandom : 9.095 micros/op; (86354 of 100000 found) +readseq : 0.231 micros/op; 90.2 MB/s +readreverse : 0.950 micros/op; 22.0 MB/s +findkeysbyfield : 231171.000 micros/op; (0 of 10000 found) +``` + +#### 分析结论 + +1. 对于大value的场景下,kv分离以后,mem, imm, sst中存储的kv对数更多,内存中可缓存的sst也更多了,从概率上看,在内存中找到所需要的key的概率更大。 +2. 访问一个sst,可以跳过的kv对数更多,查找的也就更快。更大概率减少了无效的查找。 diff --git a/db/db_impl.cc b/db/db_impl.cc index 93623d6..61059fe 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -375,14 +375,11 @@ Status DBImpl::Recover(VersionEdit* edit, bool* save_manifest) { uint64_t max_number = 0; for (size_t i = 0; i < filenames.size(); i++) { if (ParseFileName(filenames[i], &number, &type)) { - // expected.erase(number); - // if (type == kLogFile && ((number >= min_log) || (number == prev_log))) - // logs.push_back(number); // begin 注释: max_number 为要恢复的最新的文件编号 if (number > max_number) max_number = number; - // expected 里的文件现在依然存在,可以删除,需要恢复的是 expected 里不存在的 vlog 文件 + // expected 里的文件现在依然存在,可以删除 expected.erase(number); - // 保存当前已有的 vlog 文件 + // 保存当前已有的 vlog 文件,基于它们进行恢复 if (type == kLogFile) logs.push_back(number); // end @@ -417,7 +414,7 @@ Status DBImpl::Recover(VersionEdit* edit, bool* save_manifest) { continue; } Log(options_.info_log, "RecoverLogFile old log: %06llu \n", static_cast(logs[i])); - //重做日志操作 + // 重做日志操作 s = RecoverLogFile(logs[i], (i == logs.size() - 1), save_manifest, edit, &max_sequence, found_sequence_pos); if (!s.ok()) { @@ -433,6 +430,7 @@ Status DBImpl::Recover(VersionEdit* edit, bool* save_manifest) { return Status::OK(); } +/* 恢复内存中的数据,将 VLog 中记录的操作读取出来,重新写入到 memtable */ Status DBImpl::RecoverLogFile(uint64_t log_number, bool last_log, bool* save_manifest, VersionEdit* edit, SequenceNumber* max_sequence, @@ -492,7 +490,7 @@ Status DBImpl::RecoverLogFile(uint64_t log_number, bool last_log, continue; } // begin 如果 imm_last_sequence == 0 的话, - // 那么整个说明没有进行一次 imm 转 sst的情况,所有的log文件都需要进行回收 + // 那么整个说明没有进行一次 imm 转 sst的情况,所有的 log 文件都需要进行回收 // 回收编号最大的 log 文件即可 if( !found_sequence_pos && imm_last_sequence != 0 ){ Slice tmp = record; @@ -784,7 +782,7 @@ void DBImpl::MaybeScheduleCompaction() { } // 注释:获取所有 VLogs -Status DBImpl::GetAllValueLog(std::string dir, std::vector& logs){ +Status DBImpl::GetAllValueLog(std::string dir, std::vector& logs) { logs.clear(); std::vector filenames; // 获取 VLogs 列表 @@ -847,7 +845,7 @@ Status DBImpl::CollectionValueLog(uint64_t fid, uint64_t& next_sequence) { uint64_t size_offset = 0; WriteOptions opt(options_.background_garbage_collection_separate_); WriteBatch batch(opt.separate_threshold); - batch.setGarbageColletion(true); + batch.setGarbageCollection(true); WriteBatchInternal::SetSequence(&batch, next_sequence); while (reader.ReadRecord(&record, &scratch)) { @@ -895,7 +893,7 @@ Status DBImpl::CollectionValueLog(uint64_t fid, uint64_t& next_sequence) { if (kv_offset - size_offset > config::gcWriteBatchSize) { Write(opt, &batch); batch.Clear(); - batch.setGarbageColletion(true); + batch.setGarbageCollection(true); WriteBatchInternal::SetSequence(&batch, next_sequence); uint64_t kv_size; GetVarint64(&get_slice,&kv_size); @@ -914,7 +912,7 @@ Status DBImpl::CollectionValueLog(uint64_t fid, uint64_t& next_sequence) { return status; } -// 注释:回收任务 +// 注释:后台 GC 任务 void DBImpl::BackGroundGarbageCollection(){ uint64_t fid; uint64_t last_sequence; @@ -923,7 +921,7 @@ void DBImpl::BackGroundGarbageCollection(){ if( !garbage_collection_management_->GetGarbageCollectionQueue(fid,last_sequence) ){ return; } - // 在线的gc回收的sequence是要提前就分配好的。 + // 在线的 gc 回收的 sequence 是要提前就分配好的。 CollectionValueLog(fid,last_sequence); } } @@ -933,13 +931,10 @@ void DBImpl::MaybeScheduleGarbageCollection() { mutex_.AssertHeld(); if (background_GarbageCollection_scheduled_) { // Already scheduled - // 先检查线程是否已经被调度了,如果已经被调度了,就直接退出 } else if (shutting_down_.load(std::memory_order_acquire)) { // DB is being deleted; no more background compactions - // 如果 DB 已经被关闭,那么就不调度了。 } else if (!bg_error_.ok()) { // Already got an error; no more changes - // 如果后台线程出错,也不调度。 } else { // 设置调度变量,通过 detach 线程调度; detach 线程即使主线程退出,依然可以正常执行完成 background_GarbageCollection_scheduled_ = true; @@ -957,12 +952,9 @@ void DBImpl::GarbageCollectionBackgroundCall() { assert(background_GarbageCollection_scheduled_); if (shutting_down_.load(std::memory_order_acquire)) { // No more background work when shutting down. - // // 如果 DB 已经被关闭,那么就不调度了。 } else if (!bg_error_.ok()) { // No more background work after a background error. - // 如果后台线程出错,也不调度。 } else { - // 开始后台 GC 线程 BackGroundGarbageCollection(); } @@ -1314,7 +1306,7 @@ Status DBImpl::DoCompactionWork(CompactionState* compact) { } } else { // begin 注释:drop 掉 LSM-tree 中的 kv 数值对了, - // 需要对属于 KV 分离的 kv 数值对进行 GC + // 对属于 KV 分离的 kv 数值对进行 GC Slice drop_value = input->value(); if( ikey.type == kTypeSeparation ){ uint64_t fid = 0; @@ -1674,11 +1666,9 @@ Status DBImpl::Write(const WriteOptions& options, WriteBatch* updates) { if (status.ok() && updates != nullptr) { // nullptr batch is for compactions WriteBatch* write_batch = BuildBatchGroup(&last_writer); - WriteBatchInternal::SetSequence(write_batch, last_sequence + 1); - last_sequence += WriteBatchInternal::Count(write_batch); // begin 注释:GC 流程中写回的 WriteBatch 在 CollectionValueLog 函数中已经设置好了 - if (!write_batch->IsGarbageColletion()) { + if (!write_batch->IsGarbageCollection()) { // 判断是否需要进行 GC // 如需要,空出一块 sequence 区域, 触发 GC 将在 MakeRoomForWrite 里 // 先判断是否要进行 gc 后台回收 @@ -1690,13 +1680,11 @@ Status DBImpl::Write(const WriteOptions& options, WriteBatch* updates) { } // SetSequence 在 write_batch 中写入本次的 sequence WriteBatchInternal::SetSequence(write_batch, last_sequence + 1); - // last_sequence += WriteBatchInternal::Count(write_batch); + last_sequence += WriteBatchInternal::Count(write_batch); } // 这里设置 last_sequence 是为了确保离线 GC 的时候, // 在 map 存在的时候需要调用 ConvertQueue 给回收任务分配 sequence versions_->SetLastSequence(last_sequence); - - last_sequence += WriteBatchInternal::Count(write_batch); vlog_kv_numbers_ += WriteBatchInternal::Count(write_batch); // end @@ -1779,8 +1767,8 @@ WriteBatch* DBImpl::BuildBatchGroup(Writer** last_writer) { Writer* w = *iter; // begin 注释:写队列中如果遍历到是 gc 的 WriteBatch,停止合并 if (w->sync && !first->sync - || first->batch->IsGarbageColletion() - || w->batch->IsGarbageColletion()) { + || first->batch->IsGarbageCollection() + || w->batch->IsGarbageCollection()) { // 当前 Writer要求 Sync ,而第一个 Writer 不要求 Sync,两个磁盘写入策略不一致。不做合并操作 // Do not include a sync write into a batch handled by a non-sync write. break; @@ -2010,7 +1998,8 @@ Status DB::Open(const Options& options, const std::string& dbname, DB** dbptr) { edit.SetLogNumber(impl->logfile_number_); // s = impl->versions_->LogAndApply(&edit, &impl->mutex_); // begin 注释:把 imm_last_sequence 设置到新的 manifest 当中, - // 即 RecoverLogFile 中的 imm -> sst 的情况,是一次成功的全盘恢复 + // 即 RecoverLogFile 中判断上一次断电时的数据库状态的 imm -> sst 的情况, + // 表示一次成功的全盘恢复 impl->versions_->StartImmLastSequence(true); s = impl->versions_->LogAndApply(&edit, &impl->mutex_); impl->versions_->StartImmLastSequence(false); diff --git a/image/kv_sep.png b/image/kv_sep.png new file mode 100755 index 0000000000000000000000000000000000000000..ad180a7b428808bdc32b3c07c4b2cd6741ad7c23 GIT binary patch literal 95519 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

AK4e#I6A9QGA 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 HH>m#s@XX_l literal 0 HcmV?d00001 diff --git a/image/kv_test.png b/image/kv_test.png new file mode 100755 index 0000000000000000000000000000000000000000..e671d83e8f1cb4d202d4112d77f689c6852e5b4a GIT binary patch literal 2573 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 RZA2;Y@Z@?(TI~DG{{bYkbJ_p^ literal 0 HcmV?d00001 diff --git a/image/test_2.jpg b/image/test_2.jpg new file mode 100755 index 0000000000000000000000000000000000000000..17449753ae4a3b703e99bb197107043c4d2508f2 GIT binary patch literal 85405 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
8yg=-ok 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≥5(_`#SEN`a6G=^AMB&NNG$Q|0Zps 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 literal 0 HcmV?d00001 diff --git a/image/value_field_test.png b/image/value_field_test.png new file mode 100755 index 0000000000000000000000000000000000000000..f90cfb794f7f429ca4800a0a700112241d783fbf GIT binary patch literal 2639 zcmX|DdpOhW8~;|X*Qs)Nhoah>Cg-V?Q!*CGAu44#PD-!yvYe)k@5N(!b*l%_He!oAS=eh6Cb=~*%+|PACpZk+|(ZPC;l(G~60DElC zTV4i$9UPJUr^N4~eL;4^Ty*TXbJ-dWkh%{nh@9X4vbbOY0M&Tu&Ff+!U-I^OmpcF; zANq6c7{3LM6k$voON%R!p36i>6vTS}Lu)JmK~LT@|2Q1U2&mr^zg6t9k9_J4M0>w( z8q21!ZOZF@nyMd|#teS=tT#h~q@}r>>96Qsy*&X}h$&qLPxIk5Am-;2;151Z2z^ z>+0#9zEQGA));su-KdImbw!)C0f3r+Y-hW@)-TjDO;1Osm(8x=PKg0!w2+y2{qW28 zI(7gaeS{V=Z2D((ROV5F{ zT|mRL^&tWG2kz2Cy9Zi^_2`A+XGZq& z^uYyx^cknzG4B5N;SJ@x=(@s1ELrt``MiQHgKe=thMXF>t0bov+VI#Vf+^Uka3mzk ztuVSY!8AiVlf-SRSglUqX}K4ekEO}-J2R-$KDNFD3Y-CF);`1&K@A}OvU)`Fk@9U+ zecqF!os{{1$ez8;-NG3bUtQ207Sv&|?iZnd=K~T^^P-@ii!ysLri1ONfW}Om0>kzo z^{VN(^F8@ziu>kMDU9UKS}J+gsb}Msq06 z2~J3j%n2q(mvr#CM5#>%~!E<>4%nw*RBC^(sgkOp8eOn(h_yZ~IH^13puJ+MpV-kEFw%@HFS?=~>c<*4Kqip5@1C(L zo%`LHL+|$VA7Ijwr@g9y$>}N6;eI)h`TCj_C%vIK)#k^Gy1sPROwIxY8&cckWg03RGQ(jpxWiL3uFMVBT9{erSZ~_7tg8O+ zQ)R>Q;ALJX2Tlm4$q?HS__@=gp4lVd&Cs1vBMD6(B8^Rn}7XJ$PFQu{J` zdKC9AP?NidVfzoZ= zr~aTpvIXr(#EDE&zxPWY&vyPqBYl*t)b_4SP^{+f>9*#`ka?~2=;2pk&6Ym_%{R=( z?LJ-^0!7ZPJWxRSo`SMwmNh@;G>+%a@fHuT!eMxBGX^(aV3Qz6^K24W4ucqQ12yt< z^#vuyV+8bps(Oq8wj&e$!Y1;t!-+kp5s?n*yOX34Q(PmyEwKM5L=Js?5xq z(3qn?GK%gdEJxnC`!;fZJC16cHp$P`=zf2;@*A8UC>EGulNcNgy*bZW}712Jaan~O1soEsYReJF=9$k z;Xth6bA*nb2gVLwGyOiSacf`XcE)J12Sovz!N0vB=j+xw7UlS6JM4joTXHSw=zzM^ zli3)AJmU70e?~@^?q7ZaSIM&B@LQ?`j={j(d4^r(?d`RCTFst121sVCnPyTi$UBN& z$cIR!)rj}o8>266B;Yh2&-FXD+09p>Pg#^v#)d5K&q)u=JsIhdZ=?@||J_j)<*!Y* zAknEAuu}Uo_AdlvaK+OHGA#aANu-Me1E1}A zJSyyHNF2mI4x$DA?ou5S@TQ#ZWKA7+l|#4qOx zX%}B|$KYn$12=UyIALaV_k~3&_f(ZpB7=r;3!#lQ%qm7~GI~y8KlOhOm#d$!RPW|` zSc&G+VF)@-^Ueh&c|;^jDI~Zvq<;J<8ReR?Q9r1sE>#iZ{`|g~VO{&oTld&|B{j02 z9+<;T7{Rr5hqQ0zJNm;Oyy1;waZAA#S_JcwfjUk0Mbjs+nywEs|ALc$^gN;4s)~DM z{p8t4KYQd2f!eA*%D%35_C)C@#4m?NJ$aVLiauq!^xo2qfnP#u9BPPZI?{58K4W~g zEf25#&jw^^@(y@bO9hP7ymCwU93}6HvNeWj68{Jv+a7 zZJXy9U6Li)Sb&VT&!B-;Cg$rSBFNi{bge19e{cn?2*bS8O*s)pkM>~%m=rkA>-##< zFYw+)=OAG>T5G$h$?jj7h2_84YcLDD!RYa3f8nvn1q#&?lI%rZPPhav{-e6gRYB|C z`hh5YZ@x?n>L08joN~OG~F31BbG* zvht3nOZ^{K=G`wb3v_mN2B@4eaf<;+Ha^|pmpqY3IshCy_$L}LR}%SM5(x)@UNMnK z(QgIuS1ry7xBFGrCi+pk0CV}DC_H(yZyEeaNdKYO2a5uL)ZLbQTOReQ3KzH6^X^NE o^xm&5x|}|8%;au+07zg7bBKAX&yJ}$ibNn_W948;f_ugO2QmCWZU6uP literal 0 HcmV?d00001 diff --git a/image/version_1.jpg b/image/version_1.jpg new file mode 100755 index 0000000000000000000000000000000000000000..0c2137ee28f34f6a2b35ed0127f1a332cd0e06b6 GIT binary patch literal 39447 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 OzDfQfxdS?G^uGWUj8PH* literal 0 HcmV?d00001 diff --git a/image/version_2.jpg b/image/version_2.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a876c681f4c8205340211d27c5d676fd7ab98152 GIT binary patch literal 10163 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 at|2%63yg;Lm2uTtWE@zrHDw;QX8B(lWr4B) literal 0 HcmV?d00001 diff --git a/image/version_3.jpg b/image/version_3.jpg new file mode 100755 index 0000000000000000000000000000000000000000..ee33f328c7e5c92e94a9d6ad9d489d995c88d622 GIT binary patch literal 28704 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 E02i-W=>Px# literal 0 HcmV?d00001 diff --git a/image/vlog.png b/image/vlog.png new file mode 100755 index 0000000000000000000000000000000000000000..31d62821d9e6cbbb94c9fc27280046bb55391f51 GIT binary patch literal 45961 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