LevelDB初探之简单使用

来源:互联网 发布:数据预测方法 编辑:程序博客网 时间:2024/05/16 04:43
 LevelDB初探之简单使用 2014-07-28 17:16:18

分类: 大数据

一、简介
        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 
        #include 
        #include 
        #include 

        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资料整理列表,也可以参看这里,还有这里。


 LevelDB初探之简单使用 2014-07-28 17:16:18

分类: 大数据

一、简介
        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 
        #include 
        #include 
        #include 

        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资料整理列表,也可以参看这里,还有这里。


2014-07-28 17:16:18

分类: 大数据

一、简介
        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 
        #include 
        #include 
        #include 

        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 0
原创粉丝点击