LevelDB使用入门

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

#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,编译前的准备

把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

运行:

➜  test git:(master) ✗ ./test
k1:name; v1:jim
k2:age; v2:20
Delete k2..
k2:age; NotFound:


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


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

➜  test git:(master) ✗ ls -alh /tmp/testdb
total 56
drwxr-xr-x  10 root  wheel   340B 10  3 12:51 .
drwxrwxrwt  14 root  wheel   476B 10  3 12:31 ..
-rw-r--r--   1 root  wheel   148B 10  3 12:14 000005.ldb
-rw-r--r--   1 root  wheel   148B 10  3 12:51 000008.ldb
-rw-r--r--   1 root  wheel    80B 10  3 12:51 000009.log
-rw-r--r--   1 root  wheel    16B 10  3 12:51 CURRENT
-rw-r--r--   1 root  wheel     0B 10  3 11:57 LOCK
-rw-r--r--   1 root  wheel   309B 10  3 12:51 LOG
-rw-r--r--   1 root  wheel   309B 10  3 12:14 LOG.old
-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;






  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Python中,"import leveldb"是用于导入LevelDB的Python开发包,使得我们可以在代码中使用LevelDB的功能和方法。 当我们在代码中使用"import leveldb"时,我们可以通过创建一个LevelDB对象来打开一个数据库连接,从而可以对数据库进行读写操作。然而,如果我们尝试在已经打开的连接上再次打开连接,就会引发错误。这是因为LevelDB只允许一个进程同时持有一个数据库的锁定。如果数据库已经被其他进程锁定,就会出现"leveldb.LevelDBError: IO error: lock /var/tmp/ldb1.ldb/LOCK: already held by process"的错误提示。 此外,LevelDB还提供了一些API用法。在使用LevelDB之前,我们可以包装相关的import语句和Options对象来打开和关闭数据库连接,以及其他操作。具体的API用法可以参考LevelDB的官方文档或相关教程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [LevelDB的Python开发包 py-leveldb基本使用方法的代码](https://blog.csdn.net/weixin_43896490/article/details/121946555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [leveldb 的部署和使用](https://blog.csdn.net/Moolight_shadow/article/details/119276763)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [leveldb:LevelDB到Java的端口](https://download.csdn.net/download/weixin_42098892/18545599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值