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