Linux环境下折腾Google Leveldb编译还有C 里怎么用的那些事儿
- 问答
- 2025-12-28 13:01:43
- 3
(来源:LevelDB官方GitHub仓库README文档) Linux环境下折腾Google LevelDB编译还有C++里怎么用的那些事儿,这事儿得从头说起,LevelDB是个挺出名的键值对存储库,速度快,持久化,是Google的大佬们搞出来的,你想在Linux上用上它,第一步肯定是把它弄到你的电脑上,然后编译成功。
最直接的法子就是去GitHub上把源码扒下来,打开终端,用git clone命令把LevelDB的仓库克隆到本地,这一步一般没啥问题,网络通畅的话一会儿就完事儿了,源码到手了,接下来就是编译。(来源:LevelDB编译指南)LevelDB用的是CMake来管理构建过程,所以你得确保你的系统里装了CMake,还有g++这些基本的编译工具链,在源码的根目录下,通常你会看到CMakeLists.txt这个文件,这就是CMake的构建脚本。
一般会新建一个目录,比如叫build,专门用来放编译产生的那些中间文件和最终的可执行文件,这样做的好处是源码和编译生成的东西分开放,干干净净,想重新编译的时候直接把build目录删掉就行,进入build目录,运行cmake ..命令,这命令是告诉CMake去上一级目录找CMakeLists.txt,然后根据你当前系统的环境生成对应的Makefile,如果CMake配置顺利,没报什么错,你就可以运行make命令开始真正的编译了,这时候你会看到终端刷啦啦输出一大堆编译信息,只要最后没出现error,一般就是成功了,编译完,最好再运行一下make test,跑一下自带的测试用例,确保编译出来的库是正常的,用sudo make install命令可以把编译好的库文件和头文件安装到系统目录,usr/local/lib和/usr/local/include,这样以后写代码引用起来就方便了,不过有时候你可能不想安装到系统目录,那也没关系,知道编译出来的库文件和头文件在哪,后面链接的时候指给编译器就行。

(来源:LevelDB头文件db.h及相关示例)
费了老大劲编译安装好,终于可以在C++代码里用它了,LevelDB的C++ API用起来感觉还是挺直白的,核心就是几个主要的类,你得#include <leveldb/db.h>,把主要的头文件引进来,用LevelDB干任何事,第一步都是先打开一个数据库,这就要用到leveldb::DB::Open这个静态方法,你需要先定义一个leveldb::Options对象,设置一些打开选项,比如如果数据库不存在要不要创建之类的,然后定义一个leveldb::DB类型的指针来接收打开的数据库对象,打开操作是有可能失败的,所以一定要检查返回的状态leveldb::Status,这个对象有个ok()方法,告诉你操作成没成功,如果失败了,还能用ToString()方法看看具体的错误信息是啥。
数据库打开成功,那个leveldb::DB对象就是你对数据库进行所有操作的入口了,最常用的操作就是往里面写键值对和根据键读取值。(来源:leveldb::DB类的Put和Get方法)写数据用Put方法,你需要提供一个写选项(leveldb::WriteOptions,通常用默认的就行)、一个键和一个值,读数据用Get方法,提供读选项(leveldb::ReadOptions)和键,它会把值存到你提供的字符串变量里,同样,每次操作完最好都检查一下状态,不然怎么死的都不知道,当你对数据库的一系列操作完成之后,记得一定要调用delete db把这个数据库对象删掉,释放资源,这是个好习惯。

(来源:LevelDB关于迭代器使用的说明)
除了单个读单个写,你很可能需要遍历数据库里所有的数据或者一部分数据,这时候就要用到迭代器(Iterator)了,通过db->NewIterator方法可以创建一个迭代器对象,你可以让迭代器跳到最开始(SeekToFirst),或者跳到一个特定的键(Seek(key)),然后通过Valid方法检查当前迭代器的位置是否有效,有效的话,用key()和value()方法就能拿到当前的键和值,再调用Next方法移动到下一个位置,用起来就像在一个链表上遍历一样,用完了迭代器,也要记得删除它。
(来源:LevelDB官方Wiki及性能调优相关讨论)
折腾的过程中肯定会遇到坑,比如编译的时候可能缺依赖库,根据报错信息安装对应的开发包 usually solves the problem,在C++代码里使用的时候,编译链接你的程序时,别忘了用-lleveldb链接到LevelDB的库,可能还需要用-L指定一下库的路径如果没安装在标准目录的话,还有,LevelDB的键值对都是当作原始的字节数组来处理的,所以你存进去是啥样,读出来就是啥样,它不管你里面是字符串还是图片数据。
在Linux上搞定LevelDB的编译,重点就是确保编译环境齐全,跟着CMake的标准流程走,在C++里使用它,核心就是掌握打开关闭数据库、Put/Get数据、以及用迭代器遍历这几种基本操作,并且牢记检查操作状态这个保命技巧,虽然一开始配置可能会遇到点小麻烦,但一旦跑通了,你会发现这个轻量级的存储引擎在很多场景下还是挺给力的。
本文由酒紫萱于2025-12-28发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/70044.html
