当前访客身份:游客 [ 登录  | 注册加入尚学堂]
直播

我来了!

拥有积分:4038
尚学堂雄起!!威武。。。

博客分类

笔记中心

课题中心

提问中心

答题中心

解答题中心

LevelDB初探之简单使用

我来了! 发表于 2年前 (2014-08-04 09:50:41)  |  评论(0)  |  阅读次数(471)| 0 人收藏此文章,   我要收藏   
一、简介
        LevelDB是google开源的一个key-value存储引擎库,从版本1.2开始就能够支持billion级别的数据量了。 LevelDB是单进程的服务,性能非常之高,在一台4个Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。 LevelDB采用日志式的写方式来提高写性能,但是牺牲了部分读性能。为了弥补牺牲了的读性能,一些人提议使用SSD作为存储介质。

二、编译
        LevelDB是一个C++库,而非Server,编译需要g++的支持,这里以1.4为例说明之。
        源码可以直接从 这里下载,也可以用git clone源码:
        #git clone https://code.google.com/p/leveldb/
        如果上面操作都无法获取源码,也可以点击 这里下载源码。
        #cd leveldb && make all
        此时在,当前目录(levedb)下会产生libleveldb.a和libleveldb.so,这样就可以使用了。

三、实例
        一个LevelDB数据库需要有一个对应的文件系统目录名字,该数据库的所有内容都存储在这个目录下。
        LevelDB的使用很简单,一般分三步走:
        (1)打开一个数据库实例。
        (2)对这个数据库实例进行插入,修改和查询操作。
        (3)最后在使用完成之后,关闭该数据库。
        #cd ../ && mkdir test && cd test && vi main.cpp
          具体实例如下:         
        #include <assert.h>
        #include <string.h>
        #include <leveldb/db.h>
        #include <iostream>

        int main(int argc, char** argv)
        {
            leveldb::DB* db;
            leveldb::Options options;
            // 如果打开已存在数据库的时候,需要抛出错误,将以下代码插在leveldb::DB::Open方法前面
            options.create_if_missing = true;
            // 打开一个数据库实例
            leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
            assert(status.ok());
            // LevelDB提供了Put、Get和Delete三个方法对数据库进行添加、查询和删除
            std::string key = "key";
            std::string value = "value";
            // 添加key=value
            status = db->Put(leveldb::WriteOptions(), key, value);
            assert(status.ok());
            // 根据key查询value
            status = db->Get(leveldb::ReadOptions(), key, &value);
            assert(status.ok());
            std::cout<<value<<std::endl;
            // 修改操作(原生没有提供)由添加和删除合起来实现
            std::string key2 = "key2";
            // 添加key2=value               
            status = db->Put(leveldb::WriteOptions(),key2,value);
            assert(status.ok());
            // 删除key
            status = db->Delete(leveldb::WriteOptions(), key);
            // 查询key2
            assert(status.ok());
            status = db->Get(leveldb::ReadOptions(), key2, &value);
            assert(status.ok());
            std::cout<<key2<<"=="<<value<<std::endl;
            // 查询key
            status = db->Get(leveldb::ReadOptions(), key, &value);
            if (!status.ok())
            {
               std::cerr<<key<<": "<<status.ToString()<<std::endl;
            }   
            else
            {
                std::cout<<key<<"=="<<value<<std::endl;
              }
              // 在对数据库进行了一系列的操作之后,需要对数据库进行关闭,该操作比较简单即删除该对象即可  
            delete db;
            return 0;
        }
         #g++ -o main main.cpp ../leveldb/libleveldb.a -lpthread -I../leveldb/include
         实例编译完成后,如下来执行即可看到结果:
        #./main
        value
        key2==value
        key: NotFound:

        这里有 LevelDB资料整理列表,也可以参看 这里,还有 这里
分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183