原文地址:https://rawgit.com/google/leveldb/master/doc/index.html。
注意:翻译时译者有节选。
Leveldb
作者:Jeff Dean, Sanjay Ghemawat
leveldb是一个键值对数据库。键和值可以是任意字节数。键根据键值和用户指定的比较算子来排列。
打开一个数据库
leveldb的数据库文件和它在文件系统中的文件夹名字一致,所有的数据库文件都保存在这个目录里面。下面的代码演示了如何打开一个数据库,如果不存在,则新建该数据库。
#include <cassert>
#include "leveldb/db.h"
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
assert(status.ok());
...
如果你希望在打开该数据库的时候,如果发现该数据库已经存在时抛出错误,那么在
leveldb::DB::Open前面加上
options.error_if_exists = true;
状态
你可能已经注意到了
leveldb::Status
类型。在leveldb中有可能出错的函数基本都会返回该类型。你可以通过它来检查操作是否成功,并且给出错误信息。
关闭数据库
当你想要关闭数据库的时候,执行删除掉数据库对象即可,如下所示:
... open the db as described above ... ... do something with db ... delete db;
读和写
leveldb提供了
Put
, Delete
,和Get方法来修改或查询数据库。如下面的代码所示,把key1和key2的值交换。
std::string value;
leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
if (s.ok()) s = db->Put(leveldb::WriteOptions(), key2, value);
if (s.ok()) s = db->Delete(leveldb::WriteOptions(), key1);
迭代
下面的例子展示了如何打印出所有的键值对。
leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
cout << it->key().ToString() << ": " << it->value().ToString() << endl;
}
assert(it->status().ok()); // Check for any errors found during the scan
delete it;
下面的例子展示如何打印介于start和limit之间的键值对
for (it->Seek(start);
it->Valid() && it->key().ToString() < limit;
it->Next()) {
...
}
参考文章:
1
leveldb入门知识 http://qiuqiang1985.iteye.com/blog/1255365
3 LevelDB 简介
http://www.bubuko.com/infodetail-411090.html