leveldb定义
- 一个key:value形式的数据库,随用随开,不需要像mysql一样依赖于daemon进程。类似的还有redis
- 轻量级
- 接口极其简洁:Open()、Get()、Put()、Delete()
- 数据主要存储在磁盘,而redis主要存在在内存。leveldb所需要消耗的内除数量很少。
- 高效,能够处理十亿级别规模Key-Value型数据持久性存储
- 使用c++编写
- LevelDb支持数据快照(snapshot)功能
- 支持数据压缩
- 网站报道其随机写性能达到40万条记录每秒,而随机读性能达到6万条记录每秒
下面是在下在一个文件切片组件中,用到的leveldb数据库接口类。
// db.h
#include <assert.h>
#include <string.h>
#include <leveldb/db.h>
#include <iostream>
using namespace std;
namespace repository
{
namespace db
{
class Cleveldb
{
public:
leveldb::DB* db{nullptr};
leveldb::Options options;
leveldb::Status status;
string dbpath_;
//Cleveldb() =delete;
Cleveldb(const string & dbpath) : dbpath_(dbpath) {
// 如果打开已存在数据库的时候,需要抛出错误,将以下代码插在leveldb::DB::Open方法前面
options.create_if_missing = true;
status = leveldb::DB::Open(options, dbpath, &db);
assert(status.ok());
}
bool add_item(string key, string value) {
status = db->Put(leveldb::WriteOptions(), key, value);
//assert(status.ok());
return status.ok();
}
bool get_item(string key, string & value) {
status = db->Get(leveldb::ReadOptions(), key, &value);
return status.ok();
}
bool del_item(string key) {
status = db->Delete(leveldb::WriteOptions(), key);
return status.ok();
}
~Cleveldb() {
if (db)
delete db;
}
};
}
}
//main.cc
#include <iostream>
#include <string>
#include "db.h"
using namespace std;
using namespace repository::db;
int main(int argc, char **argv)
{
Cleveldb db1{"/tmp/db_test"};
string key{"student"};
string value{"\"{\"name\":\"jacky\", \"id\":\"123456789\"}\""};
db1.add_item(key, value);
string str{};
get_item(key, str);
cout << "key, value:" << endl;
cout << key << ":" << str << endl;
}