#[源码结构]

近段时间在工作中使用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

我将按上面目录结构的顺序(下面的目录中的代码会依赖于前面的代码)来逐步分析源码。