Linux上leveldb的安裝和使用


1.首先從官網上下載leveldb進行編譯

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

2.將頭文件和動態鏈接庫拷到系統文件里,創建軟連接,執行ldconfig命令,將動態鏈接庫加到緩存中,使得系統可以真正使用這個動態鏈接庫

scp -r out-static/lib* out-shared/lib* /usr/local/lib/
cd include/
scp -r leveldb /usr/local/include/
cd leveldb
rm -f /usr/local/lib/libleveldb*
scp -r out-static/lib* out-shared/lib* /usr/local/lib/
scp -r out-static/lib* out-shared/lib* /usr/local/lib/
ls -l /usr/local/lib/libleveldb*
ldconfig

3.寫一個樣例代碼main.cc測試安裝好的leveldb

#include "leveldb/db.h"
#include <cassert>
#include <iostream>

using namespace std;
using namespace leveldb;

int main() {
    leveldb::DB *db;
    leveldb::Options options;
    options.create_if_missing = true;
    leveldb::Status status = leveldb::DB::Open(options, "testdb", &db);
    assert(status.ok());

    status = db->Put(WriteOptions(), "test", "Hello World!");
    assert(status.ok());
    string res;
    status = db->Get(ReadOptions(), "test", &res);
    assert(status.ok());
    cout << res << endl;

    delete db;
    return 0;
}

4.動態鏈接庫編譯如下,動態鏈接庫不需要在當前文件下,系統能自動到相關路徑下查找

g++ main.cc -o main -lpthread -lleveldb

注意:一定要加-lpthread,因為leveldb有用到線程相關調用。

5.運行編譯好的文件

./main

輸出結果:

Hello World!

6.再嘗試一下小程序mytest.cc

#include <iostream>
#include <cassert>
#include <cstdlib>
#include <string>
#include <leveldb/db.h>
using namespace std;
int main(void)
{
    leveldb::DB *db;
    leveldb::Options options;
    options.create_if_missing=true;
    leveldb::Status status = leveldb::DB::Open(options,"./testdb",&db);
    assert(status.ok());
    std::string key1="people";
    std::string value1="jason";
    std::string value;
    leveldb::Status s=db->Put(leveldb::WriteOptions(),key1,value1);
    if(s.ok())
        s=db->Get(leveldb::ReadOptions(),"people",&value);
    if(s.ok())
        cout<<value<<endl;
    else
        cout<<s.ToString()<<endl;
    delete db;
    return 0;
}

7.編譯

 

g++ mytest.cc -o mytest -lpthread -lleveldb

 

運行編譯好的文件

./mytest

輸出結果

jason

 8.再加上刪除操作呢

#include <iostream>
#include <string>
#include <assert.h>    
#include "leveldb/db.h"    

using namespace std;

int main(void) 
{       

    leveldb::DB      *db;    
    leveldb::Options  options;    
    options.create_if_missing = true;    

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

    string key = "name";    
    string value = "chenqi";    

    // write
    status = db->Put(leveldb::WriteOptions(), key, value);    
    assert(status.ok());    

    // read
    status = db->Get(leveldb::ReadOptions(), key, &value);    
    assert(status.ok());    

    cout<<value<<endl;    

    // delete
    status = db->Delete(leveldb::WriteOptions(), key);    
    assert(status.ok());        

    status = db->Get(leveldb::ReadOptions(),key, &value);    
    if(!status.ok()) {
        cerr<<key<<"    "<<status.ToString()<<endl;
    } else {
        cout<<key<<"==="<<value<<endl;    
    }   

    // close 
    delete db;    

    return 0;    
}

9.編譯

g++ test.cpp -o test -lpthread -lleveldb

運行

./test

輸出結果

chenqi
name    NotFound:

 10.查看一下testdb里的內容吧

cd /tmp/testdb/

輸出結果

000005.ldb  000006.log  CURRENT  LOCK  LOG  LOG.old  MANIFEST-000004

 

參考文獻:

1.http://luodw.cc/2015/10/14/leveldb-01/

2.https://gist.github.com/dustismo/6203329

3.https://zhuanlan.zhihu.com/p/27329248

4.http://www.cnblogs.com/chenny7/p/4026447.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM