发布于 

读LevelDB - 01 开篇&编译源码

LevelDB简介

LevelDB是Google开源的一个键值数据库,它使用C++实现,提供”字符串类型键值对“的持久化能力。

为什么选择读它?

在进入具体的”读“之前,先补充说明一个问题:为什么选择LevelDB来读?

就我自己而言,原因有两点:

1、LevelDB是数据库的一种最简实现。LevelDB只提供了对键值对的持久化和事务操作,在众多开源数据库软件中,比如MySQL、SQLite等,LevelDB可以说算是一种最简数据库实现,通过解读它可以对最关键、最必要的数据库特性做一个了解,这样在后续数据库解读中也有助于抓住主要矛盾。

2、LevelDB是一个C++库。通过读它来丰富C++运用技巧。

从源码构建

好的,现在进入正题,读代码。

读代码的第一件事,就是编译源码了。通过编译源码,可以快速了解代码的结构,搭建代码跟踪调试的环境,为下一步的流程跟踪打好基础。

LevelDB的代码仓地址是:https://github.com/google/leveldb

从READM文档可以看到,LevelDB采用了git submodule来管理依赖的三方件,并使用CMake作为工程的构建工具。

接下来,开始在本地环境构建工程,我的开发环境是MacOS,采用Git+CMake+CLang构建:

(1)、下载代码仓到本地(建议先fork到自己的个人仓,再从个人仓clone);

git clone --recurse-submodules https://github.com/google/leveldb.git

--recurse-submodules选项,会自动clone三方库到third_party/子目录。

(2)、构建工程;

mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build .

(3)、执行用例,检查LevelDB是否正常。

ctest

执行结果如下:

Test project /Users/zgd/Documents/SourceCode/leveldb/build
Start 1: leveldb_tests
1/3 Test #1: leveldb_tests .................... Passed 189.94 sec
Start 2: c_test
2/3 Test #2: c_test ........................... Passed 2.44 sec
Start 3: env_posix_test
3/3 Test #3: env_posix_test ................... Passed 0.28 sec

100% tests passed, 0 tests failed out of 3

Total Test time (real) = 192.66 sec

用例通过,源码构建完成。

好了,以上就是读LevelDB的开篇内容。