开发者社区> 问答> 正文

RocksDB当中生成的MANIFEST文件具体有什么作用啊?

RocksDB当中生成的MANIFEST文件具体有什么作用啊?

展开
收起
游客vwuxaq6iqaowc 2021-12-09 14:14:36 618 0
1 条回答
写回答
取消 提交回答
  • MANIFEST Rocksdb对文件系统以及存储介质保持不可预知的态度。文件系统操作不是原子的,并且在系统错误的时候容易出现不一致。即使打开了日志系统,文件系统还是不能在一个不合法的重启中保持一致。POSIX文件系统不支持原子化的批量操作。因此,无法依赖RocksDB的数据存储文件中的元数据文件来构建RocksDB重启前的最后的状态。

    RocksDB有一个内建的机制来处理这些POSIX文件系统的限制,这个机制就是保存一个名为MANIFEST的RocksDB状态变化的事务日志文件。MANIFEST文件用于在重启的时候,恢复RocksDB到最后一个一致的一致性状态。

    MANIFEST 指通过一个事务日志,来追踪RocksDB状态迁移的系统 Manifest日志 指一个独立的日志文件,它包含RocksDB的状态快照/版本 CURRENT 指最后的Manifest日志 RocksDB 称 Manifest 文件记录了 DB 状态变化的事务性日志,也就是说它记录了所有改变 DB 状态的操作。

    RocksDB 的函数 VersionSet::LogAndApply 是对 Manifest 文件的更新操作,所以可以通过定位这个函数出现的位置来跟踪 Manifest 的记录内容。

    Manifest 文件作为事务性日志文件,只要数据库有变化,Manifest都会记录。其内容 size 超过设定值后会被 VersionSet::WriteSnapShot 重写。

    RocksDB 进程 Crash 后 Reboot 的过程中,会首先读取 Manifest 文件在内存中重建 LSM 树,然后根据 WAL 日志文件恢复 memtable 内容

    2021-12-09 14:14:58
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载