VersionSet-levelDB源码解析

VersionSet是LevelDB中用于管理数据库各个版本的核心组件,它维护了一个环形双向链表来记录版本。版本间的文件大小阈值计算和最大文件大小控制了数据在不同层级的分布。VersionSet还提供了一系列辅助方法,如文件大小计算、查找文件索引、版本构建等,确保数据高效存储和检索。通过对VersionSet的理解,有助于深入掌握LevelDB的工作原理。
摘要由CSDN通过智能技术生成


VersionSet的作用是记录各个版本,这些版本的组织形式是一个环形的双向链表。

【数据成员介绍】

compact_pointer_:记录每层下次做compact的开始的key;string型数组,index-->level, value-->internal key,

current_:指向当前版本;

dbname_:数据库的名称;

descriptor_file_:指向可写的manifest文件;

descriptor_log_:指向log writer对象;

dummy_versions_:版本环形双相链表的头;

env_:指向与平台相关的env;

icmp_:InternalKeyComparator,内部比较器;

last_sequence_:上一个序列号(快照就是靠它实现的);

log_number_:日志文件编号;

manifest_file_number_:manifest文件编号;

next_file_number:下一个文件编号,文件编号计数器;

options_:应用配置项,调用者配置的哪些配置项;

prev_log_number_:

table_cache_:指向sst文件的cache对象;


【辅助方法介绍】

static double MaxBytesForLevel(int level)

作用:计算每层文件总大小阈值;但是level 0其实不是基于文件大小来的,而是基于文件个数,因为level 0 sst文件的key range之间是允许有交叠,所以在查找的时候,如果文件太多,意味着增加了seek文件次数,读的效率就会降低。

每层文件的总大小大小:

level0  : 10M

level1  : 10M

level2  : 100M

level3  : 1000M

level4  : 10000M

level5  : 100000M

level6  : 1000000M


static uint64_t MaxFileSizeForLevel(int level)

作用:每层最大的文件大小为2M,(为了减少每层的文件数,可以违反这个规则,因为每个进程打开的文件数是有限制的,所以可以根据层级的不同来调整文件大小的限制,这个也算是一个改进点)


static int64_t TotalFileSize(const std::vector<FileMetaData*>& files)

作用:计算给定files的总文件大小;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值