您的位置:首页 > 数据库 > SQL

leveldb小尝试

2019-04-13 20:09 2891 查看

最近项目挺忙的,也没什么时间写博客了,这篇也是工作中遇到mysql经常同时请求数据就CPU暴高,就看了下nosql,redis已经有同事尝试了,所以我就来试试leveldb。

leveldb是google开源的一个高效率的K/V数据库,地址:https://code.google.com/p/leveldb/

 

暂时不支持windows,虽然有windows分支,但是已经两年每更新了,按照网上的方法,折腾了一下,还是有几个函数无法链接,所以打算延后再折腾。

linux下就方便很多了,直接下载源码,make all编译,就会生成a和so文件,我用的是a文件

写了下面的一个例子,还是比较顺利

#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, "/home/test/test_leveldb/testdb", &db);
std::string key = "key123";
std::string value = "value123";
status = db->Put(leveldb::WriteOptions(), key, value);
assert(status.ok());
std::string value1;
status = db->Get(leveldb::ReadOptions(), key, &value1);
assert(status.ok());
std::cout << "get, key1:" << key << " value1:" << value1 << std::endl;
std::string key1 = "key456";
status = db->Put(leveldb::WriteOptions(), key1, value1);
assert(status.ok());
status = db->Delete(leveldb::WriteOptions(), key1);
assert(status.ok());
delete db;
return 0;
}

结果不贴了,各位自己去试试就知道了。
在上面创建的文件夹里会有好几个文件,这里面就是记录了你的持久化数据。

linux是30秒才会将缓冲区的数据刷出到硬盘里,而且leveldb使用了mmap,所以可能会丢数据,看了下ideawu的博客里有写到,leveldb的作者认为 sync every second 机制应该是用户自己实现的,而不是leveldb提供,所以他基于leveldb写了一个SSDB,兼容redis协议,而且做到了每秒钟同步输出到硬盘,这样丢数据的几率就会大大降低,github地址:https://github.com/ideawu/ssdb

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息