LevelDB使用入门

LevelDB使用入门

2016-10-03 12:17:59 doc_sgl 阅读数 9544更多

分类专栏: nosql leveldb

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/doc_sgl/article/details/52727475

1,下载levelDB源码

git clone https://github.com/google/leveldb.git

 

2,编译LevelDB

cd leveldb & make all

编译完成之后在当前目录多了两个目录:out-shared和out-static

在out-static目录下有我们需要的libleveldb.a

 

3,在当前目录新建文件夹test

touch test; cd test

 

4,在test目录新建测试代码test.cpp

 

 
  1. #include <assert.h>

  2. #include <string.h>

  3. #include <iostream>

  4. #include "leveldb/db.h"

  5.  
  6. int main(){

  7. leveldb::DB* db;

  8. leveldb::Options options;

  9. options.create_if_missing = true;

  10. leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);

  11. assert(status.ok());

  12.  
  13. std::string k1 = "name";

  14. std::string v1 = "jim";

  15.  
  16. status = db->Put(leveldb::WriteOptions(), k1, v1);

  17. assert(status.ok());

  18.  
  19. status = db->Get(leveldb::ReadOptions(), k1, &v1);

  20. assert(status.ok());

  21. std::cout<<"k1:"<<k1<<"; v1:"<<v1<<std::endl;

  22.  
  23. std::string k2 = "age";

  24. std::string v2 = "20";

  25.  
  26. status = db->Put(leveldb::WriteOptions(), k2, v2);

  27. assert(status.ok());

  28. status = db->Get(leveldb::ReadOptions(), k2, &v2);

  29. assert(status.ok());

  30. std::cout<<"k2:"<<k2<<"; v2:"<<v2<<std::endl;

  31.  
  32. status = db->Delete(leveldb::WriteOptions(), k2);

  33. assert(status.ok());

  34. std::cout<<"Delete k2.."<<std::endl;

  35. status = db->Get(leveldb::ReadOptions(),k2, &v2);

  36. if(!status.ok())

  37. std::cerr<<"k2:"<<k2<<"; "<<status.ToString()<<std::endl;

  38. else

  39. std::cout<<"k2:"<<k2<<"; v2:"<<v2<<std::endl;

  40.  
  41. delete db;

  42. return 0;

  43. }

 

 

5,编译前的准备

 

把libleveldb.a拷贝到当前目录

cp ../out-static/libleveldb.a ./

把leveldb/include目录添加到PATH :

cd ..; export PATH=$PATH:$(pwd)/include; cd test

 

6,编译运行

编译:

g++ -o test test.cpp libleveldb.a -lpthread -I../include

运行:

 

 
  1. ➜ test git:(master) ✗ ./test

  2. k1:name; v1:jim

  3. k2:age; v2:20

  4. Delete k2..

  5. k2:age; NotFound:

 

 

到目前为止,我们就基本可以使用leveldb了。

 

9, 执行完.test之后,在/tmp/testdb下面产生了leveldb相关的文件:

 

 
  1. ➜ test git:(master) ✗ ls -alh /tmp/testdb

  2. total 56

  3. drwxr-xr-x 10 root wheel 340B 10 3 12:51 .

  4. drwxrwxrwt 14 root wheel 476B 10 3 12:31 ..

  5. -rw-r--r-- 1 root wheel 148B 10 3 12:14 000005.ldb

  6. -rw-r--r-- 1 root wheel 148B 10 3 12:51 000008.ldb

  7. -rw-r--r-- 1 root wheel 80B 10 3 12:51 000009.log

  8. -rw-r--r-- 1 root wheel 16B 10 3 12:51 CURRENT

  9. -rw-r--r-- 1 root wheel 0B 10 3 11:57 LOCK

  10. -rw-r--r-- 1 root wheel 309B 10 3 12:51 LOG

  11. -rw-r--r-- 1 root wheel 309B 10 3 12:14 LOG.old

  12. -rw-r--r-- 1 root wheel 110B 10 3 12:51 MANIFEST-000007

 

 

 

8,  根据LevelDB官方网站的描述,LevelDB的特点和限制如下:

特点:
1、key和value都是任意长度的字节数组;
2、entry(即一条K-V记录)默认是按照key的字典顺序存储的,当然开发者也可以重载这个排序函数;
3、提供的基本操作接口:Put()、Delete()、Get()、Batch();
4、支持批量操作以原子操作进行;
5、可以创建数据全景的snapshot(快照),并允许在快照中查找数据;
6、可以通过前向(或后向)迭代器遍历数据(迭代器会隐含的创建一个snapshot);
7、自动使用Snappy压缩数据;
8、可移植性;
限制:
1、非关系型数据模型(NoSQL),不支持sql语句,也不支持索引;
2、一次只允许一个进程访问一个特定的数据库;
3、没有内置的C/S架构,但开发者可以使用LevelDB库自己封装一个server;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值