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文件中讀取內容,然後通過調用該函數進行解析。

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