官方文档—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 log
MANIFEST-<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 change
version           = { 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 intX
FixedX - 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

Rocksdb 数据库--MANIFEST文件相关推荐

  1. Rocksdb 写流程,读流程,WAL文件,MANIFEST文件,ColumnFamily,Memtable,SST文件原理详解

    文章目录 前言 Rocksdb写流程图 WAL 原理分析 概述 文件格式 查看WAL的工具 创建WAL 清理WAL MANIFEST原理分析 概述 查看MANIFEST的工具 创建 及 清除 MANI ...

  2. RocksDB数据库简介及使用分享

    目录 1 介绍 2 1.1 文件介绍: 2 2 架构 3 3 特性 4 3.1 Get,Interator(迭代器)和快照 4 3.2 前缀迭代器 5 3.3 更新 5 3.4 持久化 5 3.5 R ...

  3. Android应用程序的组成部分和Manifest文件(转)

    Android应用程序由松散耦合的组件组成,并使用应用程序Manifest绑定到一起:应用程序Manifest描述了每一组件和它们之间的交互方式,还用于指定应用程序元数据.其硬件和平台要求.外部库以及 ...

  4. .gitignore文件_Django项目.gitignore文件建议忽略文件清单及是否需要忽略数据库迁移文件...

    Django项目开发或改动完成后将本地代码提交到代码库(比如github)时,我们需要考虑哪些文件需要提交,哪些不需要提交.这是因为有些库文件(比如缓存文件),本地日志文件还有一些编译文件是不必要提交 ...

  5. java jar manifest文件,java打包jar,以及manifest文件使用说明

    java打包jar,以及manifest文件使用说明 http://20921556.javaeye.com/blog/263974 关键字: java jar Java的一种文档格式,JAR文件非常 ...

  6. java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误

    我有一个3个节点的群集,并且在运行某些HVE查询时遇到以下错误 FAILED:元数据错误:MetaException(消息:无法创建数据库路径文件:/user/hive/warehouse/db_du ...

  7. Sql Server实用操作-无数据库日志文件恢复数据库两种方法

    数据库日志文件的误删或别的原因引起数据库日志的损坏 方法一 1.新建一个同名的数据库 2.再停掉sql server(注意不要分离数据库) 3.用原数据库的数据文件覆盖掉这个新建的数据库 4.再重启s ...

  8. Android - Manifest 文件 详解

    Manifest 文件 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/20899281 Manifest可以定义应用程序及其 ...

  9. linux mysql 数据文件,Linux下修改MySQL数据库数据文件路径的步骤

    使用rpm安装方式安装完MySQL数据库后,数据文件的默认路径为/var/lib/mysql,然而根目录并不适合用于存储数据文件. 原路径:/var/lib/mysql 目标路径:/home/mysq ...

最新文章

  1. Mysql中(@i:=@i+1)的作用
  2. 【UML】UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
  3. ElementUI el-time-picker-只显示小时、分钟,分并添加范围校验
  4. DWZ(JUI)的lookupGroup增加回调函数
  5. [Erlang危机](5.1.1)内存
  6. 双目三维重建_【光电视界】简单介绍双目视觉三维重构
  7. 解决Eclipse 项目报错:Unbound classpath container
  8. CAICT:2015年全球云计算市场规模522亿美元
  9. 《Android深度探索》(卷1)HAL与驱动开发 第六章心得体会
  10. 制作OTA U盘升级包
  11. .net(偏web) vs j2ee的一些框架选型
  12. 重定向telnet方法
  13. 正射影像、倾斜摄影测量相关软件汇总
  14. 三大通信协议(1)UART
  15. 【U3D方向专职猎头】 大厂、高薪职位资源多 非U3D资深勿扰 工作地点北京、深圳、上海、杭州、广州、成都、加微信17512088053
  16. 多个文本对比相似度分析
  17. C++动态规划算法之怪盗基德的滑翔翼
  18. 图像增强算法(持续更新中)
  19. 自动备份电脑文件至云盘的操作,你会吗?
  20. 华二紫竹2021年高考成绩查询时间,2019年华二紫竹升学数据分析!

热门文章

  1. 中首清算搭配Online是配资平台吗?真相竟然是......
  2. win7 无声音问题 --- 解决办法
  3. 机器学习 之 最小二乘法,各种损失函数
  4. 利用MyBatisX插件自动生成代码
  5. 艾德克斯充电测试软件_艾德克斯直流充电桩测试应用
  6. codeforces 706 div2题解
  7. 霍尔传感器测电机的转速
  8. /dev/mapper/vg_xxx-lv_root 100% 磁盘打满解决方式及思路
  9. 工业数据采集智能网关盘点
  10. 安全狗云原生安全从1.X到2.X的演变之路(1)