levelDB使用與在cygwin編譯

2021-06-20 19:04:25 字數 2666 閱讀 7511

** :

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 本身不支援 windows 平台, 在 cygwin 裡編譯的話, 也會報」unknow platform」錯誤. 只需要做一下簡單修改, 就能在 windows 下編譯和 leveldb. 首先, 要安裝 gcc-4, 而不是 gcc-3.

修改 build_detect_platform, 增加 cygwin_* 內容:

case "$target_os" in

cygwin_*)

platform=os_linux

common_flags="$memcmp_flag -lpthread -dos_linux -dcygwin"

platform_ldflags="-lpthread"

port_file=port/port_posix.cc

;;

修改 port/port_posix.h, 增加」 || defined(cygwin)」內容:

#if defined(os_macosx) || defined(os_solaris) || defined(os_freebsd) ||\

defined(os_netbsd) || defined(os_openbsd) || defined(os_dragonflybsd) ||\

defined(os_android) || defined(os_hpux) || defined(cygwin)

// use fread/fwrite/fflush on platforms without _unlocked variants

#define fread_unlocked fread

#define fwrite_unlocked fwrite

#define fflush_unlocked fflush

#endif

Leveldb使用方法

注意 翻譯時譯者有節選。leveldb是乙個鍵值對資料庫。鍵和值可以是任意位元組數。鍵根據鍵值和使用者指定的比較運算元來排列。leveldb的資料庫檔案和它在檔案系統中的資料夾名字一致,所有的資料庫檔案都儲存在這個目錄裡面。下面的 演示了如何開啟乙個資料庫,如果不存在,則新建該資料庫。include...

leveldb安裝和使用

進入git clone下來的專案中 make 此時leveldb 下多出out shared和out static目錄,其中out shared 下有 db db bench helpers libleveldb.so libleveldb.so.1 libleveldb.so.1.19 port ...

leveldb原始碼分析 之 入門使用

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