分析rocksdb 打开,关闭流程中,都做了什么,有哪些相关类及技术点;本篇文章从总体上进行阐述,对相关概念进行初步解释和整体流程理解,后续文章会分别就Options,MANIFEST等关键概念进行单独解读。
代码及执行
在空目录下,执行DB::Open操作及关闭操作
//创建rocks目录 DB* db; Options options; options.create_if_missing = true; std::string dirPath = "/home/rocksdata"; Status s = DB::Open(options, dirPath, &db); assert(s.ok()); delete db;
空目录下执行后产生的文件
-rw-r--r--. 1 root root 0 Sep 15 06:40 000005.log -rw-r--r--. 1 root root 16 Sep 15 06:40 CURRENT -rw-r--r--. 1 root root 37 Sep 15 06:40 IDENTITY -rw-r--r--. 1 root root 0 Sep 15 06:40 LOCK -rw-r--r--. 1 root root 22098 Sep 15 06:41 LOG -rw-r--r--. 1 root root 57 Sep 15 06:41 MANIFEST-000004 -rw-r--r--. 1 root root 6209 Sep 15 06:40 OPTIONS-000007
生成的文件说明
术语解释
- MANIFEST 指通过一个事务日志,来追踪- Rocksdb状态迁移的系统
- Manifest日志 指一个独立的日志文件,它包含RocksDB的状态快照/版本
- CURRENT 指最后的Manifest日志
文件内容解读
- CURRENT MANIFEST配套文件,用于指向最新MANIFEST,大小16Byte
(base) [root@node194 rocksdata]# cat CURRENT MANIFEST-000004
- MANIFEST-000004 MANIFEST是一个RocksDB状态变更的事务日志。MANIFEST由manifest日志文件以及最后的manifest文件指针组成。Manifest日志是滚动日志文件,命名方式为MANIFEST-(seq number)。seq number总是递增。CURRENT是一个特殊的文件,用于声明最新的manifest日志文件。 MANIFEST在RocksDB中是一个单独的文件,而这个文件所保存的数据基本是来自于VersionEdit这个结构
在系统(重新)启动的时候,最新的manifest日志文件会包含一个一致的ROCKSDB的状态。任何对RocksDB状态修改的子序列都会被记录到manifest日志文件中。当一个manifest日志超过特定的大小,一个新的manifest日志文件会更新,且保证刷盘到文件系统。成功更新CURRENT文件之后,就的manifest文件就会被删掉。 MANIFEST的基本文件组成:
MANIFEST={CURRENT, MANIFEST-<seq-no>*} CURRENT = 指向当前manifest日志的文件指针 MANIFEST-<seq-no> = 包含RocksDB状态的快照以及后续的修改
MANIFEST-000004,大小57B
(base) [root@node194 rocksdata]# cat MANIFEST-000004 V