leveldb 代码阅读四

DBimpl

level::DB是一个接口类,实际的实现在DBimpl类。

创建DB 在硬盘内会生成哪些文件

  • dbname/[0-9]+.log:log文件包含了最新的db更新。每个entry更新都以append的方式追加到文件结尾。
  • LOCK:数据库锁
  • dbname/MANIFEST-[0-9]+:DB元信息文件,记录的是leveldb的元信息。比方DB使用的Comparator名,以及各SSTable文件的管理信息:如Level层数、文件名称、最小key和最大key等等。
  • dbname/CURRENT:记录当前正在使用的Manifest文件
  • dbname/log:系统的执行日志,和options_.info_log有关,记录系统的执行信息或者错误日志。

构造函数

DBImpl::DBImpl(const Options& raw_options, const std::string& dbname)
    : env_(raw_options.env),
      internal_comparator_(raw_options.comparator),
      internal_filter_policy_(raw_options.filter_policy),
      options_(SanitizeOptions(dbname, &internal_comparator_,
                               &internal_filter_policy_, raw_options)),
      owns_info_log_(options_.info_log != raw_options.info_log),
      owns_cache_(options_.block_cache != raw_options.block_cache),
      dbname_(dbname),
      db_lock_(NULL),
      shutting_down_(NULL),
      bg_cv_(&mutex_),
      mem_(NULL),
      imm_(NULL),
      logfile_(NULL),
      logfile_number_(0),
      log_(NULL),
      seed_(0),
      tmp_batch_(new WriteBatch),
      bg_compaction_scheduled_(false),
      manual_compaction_(NULL) {
  has_imm_.Release_Store(NULL);

  // Reserve ten files or so for other uses and give the rest to TableCache.
  const int table_cache_size = options_.max_open_files - kNumNonTableCacheFiles;
  table_cache_ = new TableCache(dbname_, &options_, table_cache_size);

  versions_ = new VersionSet(dbname_, &options_, table_cache_,
                             &internal_comparator_);
}
  • TableCache :用于缓存数据表(通常是 SST 表)的对象,主要作用是缓存最近打开的 SST 文件,以减少文件系统 I/O 操作,提高读取性能。
  • VersionSet : 用于管理数据库多个版本的对象,主要作用是管理数据库的不同版本,它跟踪多个版本的元数据,并协调这些版本之间的合并和切换。每个版本代表数据库在某一个时间点上的状态。

参考文档:
https://blog.csdn.net/qq_35423154/article/details/123957850
https://www.cnblogs.com/wzjhoutai/p/7170855.html

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值