leveldb c++接口类

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;
}

发布了61 篇原创文章 · 获赞 63 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/jacky128256/article/details/101512471