rocksdb hello流程分析之一

分析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日志

文件内容解读

  1. CURRENT MANIFEST配套文件,用于指向最新MANIFEST,大小16Byte
(base) [root@node194 rocksdata]# cat CURRENT 
MANIFEST-000004
  1. 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
上一篇:Manifest


下一篇:android-使用后台服务开发活动的最佳做法