VersionEdit-levelDB源码解析


VersionEdit记录的是版本变化的增量。

【数据成员介绍】

compact_pointers_:这是一个vector,里面的每项是一个由level,internalkey组成的pair,也就是说里面记录的是,compact到哪一层的,哪个key了;

comparator_:比较器的名称;

deleted_files_:这是一个set,里面的每一项是一个由level,sst文件的编号组成的pair,也就是说,里面记录的是哪里一层被删除的哪个文件;使用set是为了查找方便;

new_files_:这是一个vector,里面的每一项是一个由level,FileMetaData组成的pair,也就是说,里面记录的是在哪一层增加了什么文件;使用vector是为了循环方便;

has_comparator_:是否有比较器;

has_last_sequence_:是否有上一个序列号;

has_next_file_number_:是否有下一个文件编号;

has_prev_log_number_:是否有前一个日志文件编号;

last_sequence_:上一个序列号;

log_number_:日志文件编号;

next_file_number_:下一个文件编号;

pre_log_number_:前一个日志文件的编号;



【方法成员介绍】

void AddFile(int level, uint64_t file,uint64_t file_size,const InternalKey& smallest,const InternalKey& largest)

作用:当新产生一个sst文件时,就要将level,FileMetaData信息增加到new_files_里面;


void DeleteFile(int level, uint64_t file)

作用:当删除一个sst文件的时候,要将level,number放进deleted_files_;


void VersionEdit::EncodeTo(std::string* dst)

作用:将VersionEdit结构,按照特定的格式,编码成string,将结果保存在dst,当需要将变更保存在manifest文件时,就会将VersionEdit进行格式化,调用该函数。具体编码格式如下图:




Status VersionEdit::DecodeFrom(const Slice& src)

作用:将一个slice解析为一个VersionEdit结构,知道编码方式了,解码方式我就不啰嗦了。一般在启动实例的时候会从manifest文件中读取内容,然后通过调用该函数进行解析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章