LevelDB 是由Google两位大牛开发的单机KV存储系统:
- 项目地址
https://github.com/google/leveldb.git - 文档
- leveldb-handbook
- 项目内 doc 文件夹
编译安装
git clone https://github.com/google/leveldb.git
cd leveldb
git submodule update --init --recursive
mkdir -p build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
编译完成后,会生成2个相应的目录,out-shared 和 out-static,分别对应动态库文件和静态库文件。然后安装:
make install
源码目录
- db
包含数据库的一些基本接口操作与内部实现 - table
为排序的字符串表SStable 的主体实现 - helpers
定义LevelDB - util
包含一些通用的基础类函数,如内存管理,布隆过滤器,编码,CRC等相关函数 - include
包含LevelDB 库函数,可供外部访问的接口,基本数据结构等 - port
定义一个通用的底层文件平台,以及多个进程操作接口
测试
#include <assert.h>
#include <string.h>
#include <iostream>
#include "leveldb/db.h"
int main()
{
leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
assert(status.ok());
std::string k1 = "name";
std::string v1 = "jim";
status = db->Put(leveldb::WriteOptions(), k1, v1);
assert(status.ok());
status = db->Get(leveldb::ReadOptions(), k1, &v1);
assert(status.ok());
std::cout << "k1:" << k1 << "; v1:" << v1 << std::endl;
std::string k2 = "age";
std::string v2 = "20";
status = db->Put(leveldb::WriteOptions(), k2, v2);
assert(status.ok());
status = db->Get(leveldb::ReadOptions(), k2, &v2);
assert(status.ok());
std::cout << "k2:" << k2 << "; v2:" << v2 << std::endl;
status = db->Delete(leveldb::WriteOptions(), k2);
assert(status.ok());
std::cout << "Delete k2.." << std::endl;
status = db->Get(leveldb::ReadOptions(), k2, &v2);
if (!status.ok())
std::cerr << "k2:" << k2 << "; " << status.ToString() << std::endl;
else
std::cout << "k2:" << k2 << "; v2:" << v2 << std::endl;
delete db;
return 0;
}
g++ -g -o test test.cpp -lleveldb -lpthread
性能测试
参考资料
1、https://zhuanlan.zhihu.com/p/80684560
2、https://zhuanlan.zhihu.com/codeit
网友评论