Skip to content
This repository has been archived by the owner on Jan 28, 2024. It is now read-only.

LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values.

License

Notifications You must be signed in to change notification settings

CN-annotation-team/leveldb-chinese-annotated-archive

 
 

Repository files navigation

LevelDB 是 Google 开发的一款经典的 Key-Value 数据库。它的代码简洁优雅,非常适合作为学习数据库的阅读材料。

LevelDB 使用 LSM-Tree 结构,利用硬盘顺序写远远快于随机写的特点,来实现极高的写入性能。

由于许多机制需要分散在各处的代码互相配合才能实现,为了便于理解我们编写了一系列文章(并画了一大堆图)进行归纳梳理,以期为读者提供一个宏观的视角:

已经注释或介绍过的的源文件:

源文件 功能介绍 相关文章
include/leveldb/db.h leveldb 对外暴露的接口
db/db_impl.cc leveldb 的核心逻辑 07-写入流程 开始, 后面的文章都与它相关
slice.h 字符串类 02-工具类
util/coding.h varint 和 fixedint 等编码 02-工具类
arena.h / arena.cc 一种简单高效的内存管理方式 02-工具类
memtable.h/memtable.cc 内存中的有序表 03-MemoryTable
skiplist.h MemTable 底层的跳表实现 03-MemoryTable
log_writter.cc 预写日志的写入 04-预写日志格式及读写流程
log_reader.cc 预写日志的读取 04-预写日志格式及读写流程
table_builder.h / table_builder.cc sstable 构造器 06-SSTable构造流程
block_builder.h / block_builder.cc sstable 中块(block)的构造流程 06-SSTable构造流程
filter_block.cc filterBlock 用于快速判断sstable中是否包含某个 key 06-SSTable构造流程
WriteBatch.h/WriteBatch.cc 写事务数据结构 07-写入流程
version_set.h / version_set.cc 维护各层 sstable 的元数据 09-元数据管理Manifest
version_edit.h / version_edit.cc version_edit 是一次元数据变更 09-元数据管理Manifest

关于提交 PR 的方法:

Step1:

首先你需要 fork 本仓库到你自己的 github 仓库,点击右上角的 fork 按钮🎉🎉

Step2:

使用 git clone 命令将本仓库拷贝到你的本地文件,git clone 地址请点开项目上方的绿色 "code" 按钮查看😀😀

Step3:

在你的本地对代码进行一番精心修改吧!🍉🍉

Step4:

修改完后,是时候该上传你的改动到你 fork 来的远程仓库上了。你可以用 git bash,也可以使用 IDE 里的 git 来操作。对于 git 不熟的用户建议使用 IDE,IDE 也更方便写 commit 信息,别忘了写 commit 信息哦!当然我们只是增删改中文注释,如果要直接在 github 上编辑也可以,你可以使用最简单的在线编辑功能(预览文件的时候点击右上角的笔🖊),或者你也可以在你的仓库首页按一下句号键使用 github 提供的在线 vscode 。🤔🤔

Step5:

上传之后,点进你的仓库主页,会出现一个 "Contribute",点击它,选择 "Open pull request",选择好你仓库的分支和你想要在这里合并的分支后,点击 "Create pull request",之后填写你的 PR 标题和正文内容,就成功提交一个 PR 啦!🍭🍭

Step6 (optional):

记得检查修改自己的 GitHub Public profile 里的 Name 和 Public email,位置在右上角头像的 Settings 里,因为大多数情况下我们会使用 squash merge 来合并 PRs,此时 squash merge 后产生的新提交作者信息会使用这个 GH 信息(如果你的信息想公开的话)。

关于提交 PR 的内容:

修改内容:

  1. 给未有中文注释的函数添加中文注释。
  2. 修改本仓库中的文章或者添加新的文章
  3. 修改或删除意思不明确的,意思有误的,有错别字的中文注释。
  4. 修改不标准的注释格式,修改比较严重的标点错误(中文字用英文逗号、句号、括号、引号实际上不需要修改)。
  5. 给中文注释不足的函数添加注释。

注释格式:

  1. 请使用 UTF-8 编码进行注释。
  2. 英文和中文之间要有一个空格。
  3. 注释里的文字内容与注释符号之间有一个空格

About

LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 95.3%
  • C 3.0%
  • CMake 1.7%