levelDB

Posted Liberal-man

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了levelDB相关的知识,希望对你有一定的参考价值。

1,下载levelDB源码

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

我是下载了这个地址的zip包leveldb-master.zip,解压安装的。

2,编译LevelDB

[root@localhost ~]# unzip leveldb-master.zip
[root@localhost ~]# cd leveldb-master
[root@localhost leveldb-master]# make all

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

在out-static目录下有我们需要的libleveldb.a,out-shared下则是对应的静态库。由于make完之后并没有make install这样的命令,如果要使用这个库,把他拷贝到系统库路径下即可.

[root@localhost leveldb-master]# cp out-shared/libleveldb.so* /usr/local/lib & cp -R include/* /usr/local/include
[1] 31021
[1]+  完成                  cp -i out-shared/libleveldb.so* /usr/local/lib

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

[root@localhost leveldb-master]# mkdir test
[root@localhost leveldb-master]# cd test/

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

#include <assert.h>  
#include <string.h>  
#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,"/tmp/testdb", &db);  
    assert(status.ok());

    std::string k1 = "name";
    std::string v1 = "jim";

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

    status = db->Get(leveldb::ReadOptions(), k1, &v1);  
    assert(status.ok());
    std::cout<<"k1:"<<k1<<"; v1:"<<v1<<std::endl;  

    std::string k2 = "age";
    std::string v2 = "20";

    status = db->Put(leveldb::WriteOptions(), k2, v2);  
    assert(status.ok());
    status = db->Get(leveldb::ReadOptions(), k2, &v2);  
    assert(status.ok());
    std::cout<<"k2:"<<k2<<"; v2:"<<v2<<std::endl;

    status = db->Delete(leveldb::WriteOptions(), k2);  
    assert(status.ok());
    std::cout<<"Delete k2.."<<std::endl;
    status = db->Get(leveldb::ReadOptions(),k2, &v2);
    if(!status.ok())  
        std::cerr<<"k2:"<<k2<<"; "<<status.ToString()<<std::endl;
    else  
        std::cout<<"k2:"<<k2<<"; v2:"<<v2<<std::endl;

    delete db;
    return 0;
  

5,编译运行

编译:

[root@localhost test]# g++ -o test test.cpp -lleveldb -lpthread

运行:

[root@localhost test]# ./test
k1:name; v1:jim  
k2:age; v2:20  
Delete k2..  
k2:age; NotFound:  

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

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

[root@localhost test]# ls -alh /tmp/testdb  
总用量 32K
drwxr-xr-x. 2 root root 4.0K 3月  16 00:29 .
drwxrwxrwt. 8 root root 4.0K 3月  16 00:29 ..
-rw-r--r--. 1 root root  146 3月  16 00:29 000005.ldb
-rw-r--r--. 1 root root   80 3月  16 00:29 000006.log
-rw-r--r--. 1 root root   16 3月  16 00:29 CURRENT
-rw-r--r--. 1 root root    0 3月  16 00:29 LOCK
-rw-r--r--. 1 root root  309 3月  16 00:29 LOG
-rw-r--r--. 1 root root   57 3月  16 00:29 LOG.old
-rw-r--r--. 1 root root   80 3月  16 00:29 MANIFEST-000004

leveldb的限制

1、非关系型数据模型(NoSQL),不支持sql语句,也不支持索引;

2、一次只允许一个进程访问一个特定的数据库;

3、没有内置的C/S架构,但开发者可以使用LevelDB库自己封装一个server;


创建于 2017-03-16 成都,更新于 2017-03-17 成都

该文章在以下平台同步
- LIBERALMAN:
- CSDN: http://blog.csdn.net/socho/article/details/62332533
- 简书:

  • [1] 引用

以上是关于levelDB的主要内容,如果未能解决你的问题,请参考以下文章

[LevelDB] LevelDB之WriteBatch

LevelDB 在删除 LevelDB 实例时断言

leveldb 源码--总体架构分析

02-leveldb入门—从0开始编译和使用leveldb

levelDB

Leveldb学习笔记:leveldb的使用与原理探究