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 ...