leveld代码结构
源文件
$ tree -I "*test*"
.
├── AUTHORS
├── build_detect_platform
├── db #具体逻辑
│ ├── builder.cc # 定义了BuildTable函数
│ ├── builder.h
│ ├── c.cc # c封装,暂时不用看
│ ├── db_bench.cc
│ ├── dbformat.cc # 搞懂几个key的关系即可,internal,lookupkey
│ ├── dbformat.h
│ ├── db_impl.cc # 具体实现,DBImpl::Write是重中之重
│ ├── db_impl.h
│ ├── db_iter.cc
│ ├── db_iter.h
│ ├── filename.cc # 管理db目录下的个各个文件
│ ├── filename.h # 管理db目录下的个各个文件
│ ├── log_format.h # 物理日志格式定义
│ ├── log_reader.cc # 读物理日志,ReadRecord
│ ├── log_reader.h
│ ├── log_writer.cc # 日志封装成相应的格式,并写入物理日志
│ ├── log_writer.h
│ ├── memtable.cc # memtable定义,对记录进行格式化,并调用skiplist的相应接口
│ ├── memtable.h #
│ ├── repair.cc # 啥?
│ ├── skiplist.h # skiplist的定义
│ ├── snapshot.h # 成员变量只有SequenceNumber的双链表<http://www.blogjava.net/sandy/archive/2012/03/13/leveldb5.html>
│ ├── table_cache.cc # 缓存sst文件,保存sst文件与Table的对应关系,
│ ├── table_cache.h # 要想全部搞懂Table,还需要弄清楚format.cc
│ ├── version_edit.cc #啥?
│ ├── version_edit.h
│ ├── version_set.cc
│ ├── version_set.h
│ ├── write_batch.cc # 批量写操作的实现,WriteBatch::Iterate
│ └── write_batch_internal.h # 批量操作辅助文件
├── doc #帮助文档
│ ├── bench
│ │ ├── db_bench_sqlite3.cc
│ │ └── db_bench_tree_db.cc
│ ├── benchmark.html
│ ├── doc.css
│ ├── impl.html
│ ├── index.html
│ ├── log_format.txt
│ └── table_format.txt
├── helpers
│ └── memenv
│ ├── memenv.cc
│ └── memenv.h
├── include # 接口
│ └── leveldb
│ ├── cache.h
│ ├── c.h
│ ├── comparator.h
│ ├── db.h
│ ├── env.h
│ ├── filter_policy.h
│ ├── iterator.h
│ ├── options.h
│ ├── slice.h
│ ├── status.h
│ ├── table_builder.h
│ ├── table.h
│ └── write_batch.h
├── libleveldb.so.1.4
├── LICENSE
├── Makefile
├── NEWS
├── port
│ ├── atomic_pointer.h # 无锁编程
│ ├── port_android.cc
│ ├── port_android.h
│ ├── port_example.h
│ ├── port.h
│ ├── port_posix.cc
│ ├── port_posix.h
│ ├── README
│ └── win
│ └── stdint.h
├── README
├── table
│ ├── block_builder.cc # 构造block,准备写入
│ ├── block_builder.h # 构造block,准备写入
│ ├── block.cc # 通过ReadBlock读取,通过迭代器读取各个record
│ ├── block.h # 读取block。定义了block,和相应的迭代器
│ ├── filter_block.cc # 与block类似,用以处理filter_block
│ ├── filter_block.h # 与block类似,用以处理filter_block
│ ├── format.cc # 定义了ReadBlock函数[重点]
│ ├── format.h # 定义了BlockContent,BlockHandle,Footer
│ ├── iterator.cc # 迭代器?
│ ├── iterator_wrapper.h # 迭代器?
│ ├── merger.cc # 定义了MergingIterator迭代器
│ ├── merger.h
│ ├── table_builder.cc # 构造Table,Add()、Flush()、WriteBlock
│ ├── table.cc # 定义了操作table的方法,InternalGet
│ ├── two_level_iterator.cc # 定义了TwoLevelIterator迭代器
│ └── two_level_iterator.h
├── TODO
└── util
├── arena.cc # 内存分配器
├── arena.h # 内存分配器
├── bloom.cc # 布隆过滤器
├── cache.cc # Cache
├── coding.cc
├── coding.h # 编码
├── comparator.cc # 比较函数
├── crc32c.cc # crc32校验
├── crc32c.h # crc32校验
├── env.cc #日志相关
├── env_posix.cc # 文件操作封装和线程封装
├── filter_policy.cc
├── hash.cc # hash函数
├── hash.h # hash函数
├── histogram.cc # 测试文件
├── histogram.h # 测试文件
├── logging.cc # 日志
├── logging.h # 日志头文件
├── mutexlock.h # mutex
├── options.cc # option
├── posix_logger.h # 日志文件
├── random.h # 随机数生成器
└── status.cc # 错误管理,Status
11 directories, 109 files