专栏首页linjinhe的专栏LevelDB 完全解析(7):初始化

LevelDB 完全解析(7):初始化

前文回顾

一个 LevelDB 实例初始化的主要任务包括:

  1. 从 Manifest 文件恢复各个 level 的 SSTable 的元数据。
  2. 根据 log 文件恢复 MemTable。
  3. 恢复 last_sequence_、next_file_numbe_等元信息。

DB::Open

一个 LevelDB 实例的初始化是从 DB::Open 这个函数开始的:

Status DB::Open(const Options& options, const std::string& dbname, DB** dbptr);

options - 打开/创建 LevelDB 实例的配置参数。 dbname - 保存数据的目录名。 dbptr - 初始化成功的 LevelDB 实例保存在 *dbptr。

DB::Open 的执行逻辑:

  1. 创建 DBImpl 对象:DBImpl 的构造函数会做一些简单的初始化工作。
  2. 调用 DBImpl::Recover
  3. 根据条件决定是否需要创建新的 MemTable
  4. 根据条件决定是否需要保存 Manifest
  5. 删除过期文件调度后台的 compaction 任务

重点是第 2 步。

DBImpl::Recover

DBImpl::Recover 是 LevelDB 初始化的主要逻辑:

  1. 根据参数判断是否要创建新的数据库
  2. 从 Manifest 文件恢复各个 level 的 SSTable 的元数据:调用 VersionSet::Recover 读取 Manifest 的内容。
  3. 文件检查:1)外存上的文件是否和 Manifest 的内容一致;2)收集需要恢复的 log 文件。
  4. 根据 log 文件恢复 MemTable:针对每个 log 文件调用 RecoverLogFile,同时更新 next_file_numbe_
  5. 更新 last_sequence_

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LevelDB:读操作

    前面写了两篇文章介绍 LevelDB 的整体架构和接口使用。这篇文章,我们从代码的角度看看 LevelDB 的设计与实现,先从读操作开始。

    linjinhe
  • LevelDB:整体架构

    上图简单展示了 LevelDB 的整体架构。LevelDB 的静态结构主要由六个部分组成:

    linjinhe
  • LevelDB:写操作

    其中,Put 和 Delete 的实现都是通过封装 Write 来实现的,函数调用关系如下:

    linjinhe
  • 【深度知识】LevelDB从入门到原理详解

    LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询较少,...

    辉哥
  • ld-linux.so.2

    /lib/ld-linux.so.2以及它的64位版本/lib64/ld-linux-x86-64.so.2虽然看起来是共享库文件,但实际上他们可以独立运行。他...

    用户1396155
  • Spring Boot自定义错误页面,Whitelabel Error Page处理方式

    我已经是Spring Framework框架的忠实粉丝。对于企业软件开发者来说它提供了对常见问题的通用解决方案,包括那些你在未来开发中没有意识到的问题。但是,它...

    九州暮云
  • 人工智能的ABC

    前段时间读了李开复的《人工智能》,对于有关什么是AI,李开复给出了五种定义,我更加认可第四种:

    技术想要What
  • spring boot 整合swagger-ui 与 swagger2

    小小明童鞋
  • MySQL的高并发处理技术MVCC

    最近五一放假,除了带小孩到处转转外,还看了几页《高性能MySQL》。另外家里还有一本《高可用MySQL》,这都是以前在 CSDN 写作时送的书。前前后后大概 4...

    业余草
  • [MySQL] MVCC 多版本并发控制实现的事务

    1.没有一个统一的实现标准,实现了非阻塞的读操作,写操作也只锁定必要的行 2.通过保存数据在某个时间点的快照实现的 3.典型的有乐观并发控制和悲观并发控制 4....

    陶士涵

扫码关注云+社区

领取腾讯云代金券