Rocksdb 数据库--MANIFEST文件

来源:互联网 发布:遇见营销软件 编辑:程序博客网 时间:2024/06/06 00:11

官方文档—https://github.com/facebook/rocksdb/wiki/MANIFEST
如有错误或翻译不当,请指正。其他rocksdb 文档请关注后续文章。

MANIFEST

rocksdb 是一个与存储介质无关的文件系统,文件系统的操作不是原子操作,所以在系统失败后,很容易导致文件的不一致,尽管后来随着日志记录的出现,但是也没有办法保证长期运行期间文件数据的一致性,POSIX 文件系统在批量操作时也不支持原子操作。因此,在重启时,我们不可能依靠在ro cksdb 中的元数据来重建或者恢复我们上一次的操作状态。

相关术语

manifest 是在系统中,可以通过事务处理产生的log 文件来跟踪rocksdb 状态的改变。
mainfest log 通过应用一个独立的log文件来记录 RocksDB 各个时期的状态。
curretnt 是最近改变的mainfest log.

怎么工作

MANIFEST 是一个 transaction log,只要 RocksDB 的状态变化,就会记录一下。MANIFEST 包括一系列的 manifest 文件,以及指向最后最新的一个 manifest 文件的 CURRENT 文件指针。mainfest log 文件一直在变化,,其中seqnumber 也一直在增加,CURRENT文件会记录最新的 manifest 文件信

在系统重启的时候,最新的manifest log 包含rocksdb 的状态。接下来的任何操作都会被记录到manifest file 中,当manifest logfile h超过确定的容量后,新的rocksdb manifest logfile 就会被创建,记录了这个时候rocksdb的快照 (情况),最近的manifest 文件指针也会被更新,文件系统同时会同步sync ,当所有的更改都 sync 到文件系统之后,之前老的 manifest 文件就会被清除.

MANIFEST = { CURRENT, MANIFEST-<seq-no>* } CURRENT = File pointer to the latest manifest logMANIFEST-<seq no> = Contains snapshot of RocksDB state and subsequent modifications

Version Edit

RocksDB 使用 version 来表示任意时间的一个特定状态(其实就是 snapshot),任何对 version 的改动会被认为是一次 version edit。一个 version 通过合并一系列的 version edits 来构造。也就是一个 manifest 文件其实就是包含着一系列 version edits record。每一个 record 都会有一个唯一的 edit number 来标识。

version-edit      = Any RocksDB state changeversion           = { version-edit* }manifest-log-file = { version, version-edit* }                  = { version-edit* }

Version Edit Layout

manifest 文件其实就是包含着一系列 version edits record,每一个 record 都会有一个唯一的 edit number 来标识。
我们用下面 的数据类型来进行编码/解码

简单的数据类型

VarX   - Variable character encoding of intXFixedX - Fixed character encoding of intX

复杂 的数据类型

String - Length prefixed string data+-----------+--------------------+| size (n)  | content of string  |+-----------+--------------------+|<- Var32 ->|<-- n            -->|

Version Edit Record Format

Version edit records 有以下的文件格式,
编译器通过确认码来确认文件record的类型。

+-------------+------ ......... ----------+| Record ID   | Variable size record data |+-------------+------ .......... ---------+<-- Var32 --->|<-- varies by type       -->

Version Edit Record Types and Layout

对应着不同时期rocksdb 的状态改变,这里有不同 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

+--------------+-------------+--------------+------------+----------------+--------------+----------------+----------------+| kNewFile4    | level       | file number  | file size  | smallest_key   | largest_key  | smallest_seqno | largest_seq_no |+--------------+-------------+--------------+------------+----------------+--------------+----------------+----------------+|<-- var32  -->|<-- var32 -->|<-- var64  -->|<-  var64 ->|<-- String   -->|<-- String -->|<-- var64    -->|<-- var64    -->|+-----------+---------------+-------+------------------+-------+--------------+|kPathID ---| Path size(n)  | path  | kNeedCompaction  | 1     | value (0/1)  |+-----------+---------------+-------+------------------+-------+--------------+<- var32  ->|<-- var32   -->|<- n ->|<-- var32      -->|<- 1 ->|<-- 1      -->|
  • File edit record backward compatible
+--------------+-------------+--------------+------------+----------------+--------------+----------------+----------------+| kNewFile2    | level       | file number  | file size  | smallest_key   | largest_key  | smallest_seqno | largest_seq_no |+--------------+-------------+--------------+------------+----------------+--------------+----------------+----------------+<-- var32   -->|<-- var32 -->|<-- var64  -->|<-  var64 ->|<-- String   -->|<-- String -->|<-- var64    -->|<-- var64    -->|
  • File edit record with path information
+--------------+-------------+--------------+-------------+-------------+----------------+--------------+| kNewFile3    | level       | file number  | Path ID     | file size   | smallest_key   | largest_key  |+--------------+-------------+--------------+-------------+-------------+----------------+--------------+|<-- var32  -->|<-- var32 -->|<-- var64  -->|<-- var32 -->|<-- var64 -->|<-- String   -->|<-- String -->|+----------------+----------------+| smallest_seqno | largest_seq_no |+----------------+----------------+<-- var64     -->|<-- var64    -->|

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         --->|

如果需要转载,请注明来源
http://blog.csdn.net/u010709783/article/details/78110849

原创粉丝点击