实验环境
主机:ubuntu-16.04-x64
g++版本:5.4.0
leveldb版本:leveldb-1.20
概述
leveldb是一个谷歌开源的由cpp实现的key-value存储库,它提供了从字符串键到字符串值的有序映射。它的实现理念与大数据中的BigTable思想有颇多相似之处,甚至有很多人认为leveldb就是谷歌BigTable的单机版实现。因此理解leveldb的实现原理对大数据的学习也是有好处的。
特点
- 键和值是任意字节数组。
- 数据按键排序。
- 调用者可以提供自定义比较函数来实现数据排序。
- 基本操作有Put(key,value)、Get(key)、Delete(key)。
- 可以在一个原子批处理中进行多个更改。
- 用户可以创建一个临时快照以获得一致的数据视图。
- 数据访问支持向前和向后迭代。
- 使用Snappy压缩库自动压缩数据。
安装
1.下载安装包
点击这里下载leveldb,这里我选择的是1.20版本。(注意从tag里面的版本中去选择)
2.编译安装
将安装包上传到ubuntu主机上,解压。
unzip leveldb-1.20.zip
编译
make
编译完成后,leveldb根目录中会多出两个目录:out-shared, out-static,分别用于存储生成的动态库和静态库,在本实例中采用动态库来演示。
拷贝头文件与动态库
cp -r include/leveldb /usr/include # 拷贝头文件
#拷贝动态库
cp out-shared/libleveldb.so.1.20 /usr/lib
cd /usr/lib
sudo ln -s libleveldb.so.1.20 libleveldb.so.1
sudo ln -s libleveldb.so.1 libleveldb.so
#将动态库加入缓存中
ldconfig
3.验证程序
#include <iostream>
#include <cassert>
#include <cstdlib>
#include <string>
#include <leveldb/db.h>
int main()
{
leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options,"./leveldb",&db);
std::cout << status.ToString() << std::endl;
assert(status.ok());
std::string key = "name";
std::string value;
leveldb::Status s = db->Put(leveldb::WriteOptions(), key, "henry");
s = db->Get(leveldb::ReadOptions(), key, &value);
std::cout << "get a key: " << key << ", value is: " << value << std::endl;
delete db;
return 0;
}
该程序的功能就是插入一个key-value对,然后再读取出来
编译:
g++ main.cpp -o main -lleveldb -lpthread
运行:
root@ubuntu:~# ./main
OK
get a key: name, value is: henry