# leveldb-cn-note **Repository Path**: yudaichen/leveldb-cn-note ## Basic Information - **Project Name**: leveldb-cn-note - **Description**: leveldb 源码-中文理解注释 - **Primary Language**: C++ - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2022-10-12 - **Last Updated**: 2023-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README  ## 头文件结构 [include └── leveldb ├── c.h => c binding ├── cache.h => cache接口 ├── comparator.h => 比较器接口 ├── db.h => DB接口 ├── env.h => 为跨平台准备的env接口 ├── filter_policy.h => fliter策略,用于缓存,请看到文档及相应实现 ├── iterator.h => 迭代器,用于遍历数据库中存储的数据 ├── options.h => 包含控制数据库的Options,控制读的WriteOptions,ReadOptions ├── slice.h => Slice的接口 ├── status.h => leveldb中大多接口返回的Status接口 ├── table.h => immutable接口 ├── table_builder.h => 用于创建table的构建器接口 └── write_batch.h => 使多个写操作成为原子写的接口]() ## 主要对象 MemTable:内存数据结构,具体实现是 SkipList。 接受用户的读写请求,新的数据会先在这里写入。 Immutable MemTable:当 MemTable 的大小达到设定的阈值后,会被转换成 Immutable MemTable,只接受读操作,不再接受写操作,然后由后台线程 flush 到磁盘上 —— 这个过程称为 minor compaction。 Log:数据写入 MemTable 之前会先写日志,用于防止宕机导致 MemTable 的数据丢失。一个日志文件对应到一个 MemTable。 SSTable:Sorted String Table。分为 level-0 到 level-n 多层,每一层包含多个 SSTable,文件内数据有序。除了 level-0 之外,每一层内部的 SSTable 的 key 范围都不相交。 Manifest:Manifest 文件中记录 SSTable 在不同 level 的信息,包括每一层由哪些 SSTable,每个 SSTable 的文件大小、最大 key、最小 key 等信息。 Current:重启时,LevelDB 会重新生成 Manifest,所以 Manifest 文件可能同时存在多个,Current 记录的是当前使用的 Manifest 文件名。 TableCache:TableCache 用于缓存 SSTable 的文件描述符、索引和 filter。 BlockCache:SSTable 的数据是被组织成一个个 block。BlockCache 用于缓存这些 block(解压后)的数据 ##