leveldb原始碼分析 之 入門使用

2021-07-03 17:26:10 字數 1734 閱讀 7179

leveldb是google開源的乙個key-value儲存引擎庫,類似於開源的lucene索引庫一樣。其他的軟體開發者可以利用該庫做二次開發,來滿足定製需求。leveldb採用日誌式的寫方式來提高寫效能,但是犧牲了部分讀效能。為了彌補犧牲了的讀效能,一些人提議使用ssd作為儲存介質。

對於本地化的key-value儲存引擎來說,簡單的使用一般都分成三個基本的步驟:(1)開啟乙個資料庫例項;(2)對這個資料庫例項進行插入,修改和查詢操作;(3)最後在使用完成之後,關閉該資料庫。下面將詳細討論該三個步驟:

一、開啟乙個資料庫例項

乙個leveldb資料庫有乙個對應乙個檔案系統目錄的名字。該資料庫的所有內容都儲存在這個目錄下。下面的**描述了怎樣開啟乙個資料庫或者建立乙個新的資料庫。

cpp**  

#include 

#include "leveldb/db.h"

leveldb::db* db;  

leveldb::options options;  

options.create_if_missing = true;  

leveldb::status status = leveldb::db::open(options,"/tmp/testdb", &db);  

assert(status.ok());  

如果開啟已存在資料庫的時候,需要丟擲錯誤。將以下**插在leveldb::db::open方法前面:  

options.error_if_exists = true;  

二、對資料庫的簡單讀、寫操作

leveldb提供了put,delete和get三個方法對資料庫進行修改和查詢。例如,下面的**片段描述了怎樣將key1對應的value值,移到key2對應的值。

c**  

std::string value;  

leveldb::status s = db->get(leveldb::readoptions(), key1, &value);  

if(s.ok()) s = db->put(leveldb::writeoptions(), key2, value);  

if(s.ok()) s = db->delete(leveldb::writeoptions(), key1);  

三、關閉資料庫

在對資料庫進行了一系列的操作之後,需要對資料庫進行關閉。該操作比較簡單:

c**  

... open the db as described above...  

... do something with db ...  

delete db;  

上面對leveldb的簡單使用做了基本的介紹,接下來就是如何自己寫乙個完成並且能執行的例子。

2、編譯原始碼 cd leveldb && make all

3、編寫test.cpp

c**  

#include 

#include 

#include 

#include 

int main()  

4、編譯鏈結 g++ -o test test.cpp ../leveldb/libleveldb.a -lpthread -i../leveldb/include

注意libleveldb.a 和leveldb include的路徑。

5、執行結果./test:

c**  

value  

key2===value  

key  notfound:  

leveldb原始碼分析之Arena

arena 是 leveldb 專案裡面使用的輕量級的記憶體池物件,leveldb 用這個物件來管理記憶體的分配,簡化了 new 和 delete 的呼叫,我們也可以從這個輕量級的記憶體池物件學習 google 大神工程師是如何管理記憶體的。arena 記憶體管理模型 arena 使用下面幾個成員變...

leveldb原始碼分析之SSTable檔案例項講解

sstable檔案是memtable 資料到一定閾值寫入檔案形成的,由於記憶體容量總是有限的,將一定量資料寫入磁碟可以存放更多資料,所以leveldb相比redis能存放更多資料。既然資料持久化到磁碟,那麼還有必然涉及到從磁碟中查詢資料,從磁碟中查詢資料與從記憶體中查詢資料的效率是不一樣的,所以ss...

leveldb原始碼分析1

leveldb是乙個key value型的儲存引擎,由google開發,並宣布在bsd許可下開放源 plain git clone plain cd leveldb make all 此時生成libleveldb.a庫檔案。拷貝leveldb的標頭檔案到 usr include下 plain cp ...