概述levelDB项目结构
levelDB项目概述
levelDB
是一个持久化kv存储数据库,kv均为任意的字节数组。
其随机写、顺序写/读的性能很高,但是随机读的性能一般。
LSM Tree
其实现原理为LSM Tree,简单来说就是讲磁盘的随机写转换成顺序写.
由于磁盘的寻址非常耗时,因此顺序写的速度远远超过随机写.
LSM Tree由两部分组成分别是Log structed和Merge Tree.
其中Log structed是日志结构,而日志本身是不会修改的,只需要追加写.
Merge Tree是合并树,即将多个树合并成一个更大的树.
所以,LSM Tree是数据以追加写的方式写入文件,成为一颗小树,然后合并成更大的树.
在LSM Tree中,更新一个数据不需要修改过去的旧数据,但是此时,
其写的性能很强大,但是需要支付额外的存储空间来作为代价。为了同步提升其读的性能,levelDB也同样支付了一些存储空间作为读性能提升的代价。
具体而言,将索引树结构拆分成多个大小逐渐变大的结构
最小的
其余的
当执行写操作时:首先将数据加入到
当执行读操作时:在
当然,levelDB具体的实现还是存在一些细节的。
levelDB的项目结构
一些头文件及其作用
include: 函数库的头文件
port: 可移植性相关的功能
util: 项目用到的一些功能函数
table: SSTable的实现
helpers/memenv:简单完全内存的文件系统,提供操作目录文件接口
benchmarks:性能测试相关代码
db:
数据库实现,版本管理,Compaction,WAL和MemTable实现
接口文件的对应功能
cache.h:
缓存接口,提供了默认的LRU缓存,也可以自己实现缓存
comparator.h:
定以数据库比较器的接口,用来比较键,可以使用默认的基于字节的比较,可以定义自己的比较器
dumpfile.h: 以可读文本形式导出一个文件,调试使用
export.h: 可移植性相关
iterator.h: 迭代器接口
slice.h: 实现一个字符串,存储指针和长度,指向字符串
table_builder.h: 构造一个SSTable
write_batch.h: 实现批量写入的接口
c.h: 实现C语言相关的接口
db.h: 操作数据库的主要接口
env.h: 定义操作系统相关的功能,如读写文件之类的
filter_policy.h: 定义布隆过滤器接口
options.h: 配置选项
status.h: 定义数据库操作的返回状态
table.h: SSTable相关的接口