和我一起学习leveldb [0 源码结构]
#[源码结构]
近段时间在工作中使用leveldb较多,越来越觉得这个工具用起来相当方便(如果你不知道什么是leveldb,请看 这里),关于leveldb的背景,这里就不多言了,毕竟不是写学术论文。一直想认真读一读leveldb的源码,学习Google的两位大牛工程师的杰作,无奈之前有两次都是读到中途因为各种事务中断很长时间,导致接续不济,青黄不接。于是萌生写这个连载的念头,一来是push自己,二来也是做一份笔记,以后可以备忘复习,另外也可以留一点下水拙作,贻笑大方。
先介绍一下leveldb的代码结构和说明文档:
leveldb-1.4.0
|
+--- port <=== 提供各个平台的基本接口
|
+--- util <=== 提供一些通用工具类
|
+--- helpers
| |
| +--- memenv <=== Env的一个具体实现(Env是leveldb封装的运行环境)
|
+--- table <=== 磁盘数据结构
|
+--- db <=== db的所有实现
|
+--- doc
| |
| +--- table_format.txt <=== 磁盘文件数据结构说明
| |
| +--- log_format.txt <=== 日志文件(用于宕机恢复未刷盘的数据)数据结构说明
| |
| +--- impl.html <=== 一些实现
| |
| +--- index.html <=== 使用说明
| |
| +--- bench.html <=== 测试数据
|
+--- include
|
+--- leveldb <=== 所有头文件
|
+--- c.h <=== 提供给C的接口
+--- cache.h
+--- comparator.h
+--- db.h
+--- env.h
+--- filter_policy.h
+--- iterator.h
+--- options.h
+--- slice.h
+--- status.h
+--- table.h
+--- table_builder.h
+--- write_batch.h
我将按上面目录结构的顺序(下面的目录中的代码会依赖于前面的代码)来逐步分析源码。