Rocksdb 数据库--MANIFEST文件
官方文檔—https://github.com/facebook/rocksdb/wiki/MANIFEST
如有錯(cuò)誤或翻譯不當(dāng),請(qǐng)指正。其他rocksdb 文檔請(qǐng)關(guān)注后續(xù)文章。
MANIFEST
rocksdb 是一個(gè)與存儲(chǔ)介質(zhì)無關(guān)的文件系統(tǒng),文件系統(tǒng)的操作不是原子操作,所以在系統(tǒng)失敗后,很容易導(dǎo)致文件的不一致,盡管后來隨著日志記錄的出現(xiàn),但是也沒有辦法保證長期運(yùn)行期間文件數(shù)據(jù)的一致性,POSIX 文件系統(tǒng)在批量操作時(shí)也不支持原子操作。因此,在重啟時(shí),我們不可能依靠在ro cksdb 中的元數(shù)據(jù)來重建或者恢復(fù)我們上一次的操作狀態(tài)。
相關(guān)術(shù)語
manifest 是在系統(tǒng)中,可以通過事務(wù)處理產(chǎn)生的log 文件來跟蹤rocksdb 狀態(tài)的改變。
mainfest log 通過應(yīng)用一個(gè)獨(dú)立的log文件來記錄 RocksDB 各個(gè)時(shí)期的狀態(tài)。
curretnt 是最近改變的mainfest log.
怎么工作
MANIFEST 是一個(gè) transaction log,只要 RocksDB 的狀態(tài)變化,就會(huì)記錄一下。MANIFEST 包括一系列的 manifest 文件,以及指向最后最新的一個(gè) manifest 文件的 CURRENT 文件指針。mainfest log 文件一直在變化,,其中seqnumber 也一直在增加,CURRENT文件會(huì)記錄最新的 manifest 文件信
在系統(tǒng)重啟的時(shí)候,最新的manifest log 包含rocksdb 的狀態(tài)。接下來的任何操作都會(huì)被記錄到manifest file 中,當(dāng)manifest logfile h超過確定的容量后,新的rocksdb manifest logfile 就會(huì)被創(chuàng)建,記錄了這個(gè)時(shí)候rocksdb的快照 (情況),最近的manifest 文件指針也會(huì)被更新,文件系統(tǒng)同時(shí)會(huì)同步sync ,當(dāng)所有的更改都 sync 到文件系統(tǒng)之后,之前老的 manifest 文件就會(huì)被清除.
MANIFEST = { CURRENT, MANIFEST-<seq-no>* } CURRENT = File pointer to the latest manifest log MANIFEST-<seq no> = Contains snapshot of RocksDB state and subsequent modificationsVersion Edit
RocksDB 使用 version 來表示任意時(shí)間的一個(gè)特定狀態(tài)(其實(shí)就是 snapshot),任何對(duì) version 的改動(dòng)會(huì)被認(rèn)為是一次 version edit。一個(gè) version 通過合并一系列的 version edits 來構(gòu)造。也就是一個(gè) manifest 文件其實(shí)就是包含著一系列 version edits record。每一個(gè) record 都會(huì)有一個(gè)唯一的 edit number 來標(biāo)識(shí)。
version-edit = Any RocksDB state change version = { version-edit* } manifest-log-file = { version, version-edit* }= { version-edit* }Version Edit Layout
manifest 文件其實(shí)就是包含著一系列 version edits record,每一個(gè) record 都會(huì)有一個(gè)唯一的 edit number 來標(biāo)識(shí)。
我們用下面 的數(shù)據(jù)類型來進(jìn)行編碼/解碼
簡單的數(shù)據(jù)類型
VarX - Variable character encoding of intX FixedX - Fixed character encoding of intX復(fù)雜 的數(shù)據(jù)類型
String - Length prefixed string data +-----------+--------------------+ | size (n) | content of string | +-----------+--------------------+ |<- Var32 ->|<-- n -->|Version Edit Record Format
Version edit records 有以下的文件格式,
編譯器通過確認(rèn)碼來確認(rèn)文件record的類型。
Version Edit Record Types and Layout
對(duì)應(yīng)著不同時(shí)期rocksdb 的狀態(tài)改變,這里有不同 edit record,
Comparator edit record:
Captures the comparator name +-------------+----------------+ | kComparator | data | +-------------+----------------+ <-- Var32 --->|<-- String -->|Log number edit record:
Lates WAL log file number+-------------+----------------+ | kLogNumber | log number | +-------------+----------------+ <-- Var32 --->|<-- Var64 -->|Previous File Number edit record:
Previous manifest file number +------------------+----------------+ | kPrevFileNumber | log number | +------------------+----------------+ <-- Var32 --->|<-- Var64 -->|Next File Number edit record:
Next manifest file number +------------------+----------------+ | kNextFileNumber | log number | +------------------+----------------+ <-- Var32 --->|<-- Var64 -->|Last Sequence Number edit record:
Last sequence number of RocksDB +------------------+----------------+ | kLastSequence | log number | +------------------+----------------+ <-- Var32 --->|<-- Var64 -->|Max Column Family edit record:
Adjust the maximum number of family columns allowed. +---------------------+----------------+ | kMaxColumnFamily | log number | +---------------------+----------------+ <-- Var32 --->|<-- Var32 -->|Deleted File edit record:
Mark a file as deleted from database. +-----------------+-------------+--------------+ | kDeletedFile | level | file number | +-----------------+-------------+--------------+ <-- Var32 --->|<-- Var32 -->|<-- Var64 -->|New File edit record:
Mark a file as newly added to the database and provide RocksDB meta information.
- File edit record with compaction information
- File edit record backward compatible
- File edit record with path information
Column family status edit record:
Note the status of column family feature (enabled/disabled)
+------------------+----------------+ | kColumnFamily | 0/1 | +------------------+----------------+ <-- Var32 --->|<-- Var32 -->|Column family add edit record:
Add a column family
+---------------------+----------------+ | kColumnFamilyAdd | cf name | +---------------------+----------------+ <-- Var32 --->|<-- String -->|Column family drop edit record:
Drop all column family
+---------------------+ | kColumnFamilyDrop | +---------------------+ <-- Var32 --->|如果需要轉(zhuǎn)載,請(qǐng)注明來源
http://blog.csdn.net/u010709783/article/details/78110849
總結(jié)
以上是生活随笔為你收集整理的Rocksdb 数据库--MANIFEST文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ICE kinematics! - So
- 下一篇: 小故事(和男友的QQ聊天记录)