當前位置:成語大全網 - 書法字典 - 如何添加、刪除和修改詞典

如何添加、刪除和修改詞典

下面的示例演示了如何插入、獲取和刪除記錄。

LevelDB簡介

壹。LevelDB簡介

LevelDB是Google開源的持久化KV獨立數據庫,具有較高的隨機寫入和順序讀取/寫入性能,但隨機讀取性能非常壹般,也就是說LevelDB非常適合查詢很少但寫入很多的場景。LevelDB采用LSM(日誌結構化合並)策略。lsm_tree延遲並批量處理索引更改,並以類似於合並排序的方式高效地將更新遷移到磁盤,從而減少索引插入開銷。關於LSM,本文稍後也將簡要提及。

根據LevelDB官方網站的描述,LevelDB的特點和局限性如下:

特點:

1,key和值是任意長度的字節數組;

2.默認情況下,條目(即K-V記錄)按照key的字典順序存儲。當然,開發人員也可以重載這個排序函數。

3.提供的基本操作接口:Put()、Delete()、Get()、batch();

4.支持原子操作批量操作;

5.您可以創建數據全景的快照,並允許您在快照中查找數據;

6.您可以通過正向(或反向)叠代器遍歷數據(叠代器將隱式創建快照);

7.自動使用Snappy壓縮數據;

8.便攜性;

限制:

1,非關系數據模型(Nosql),不支持sql語句或索引;

2.壹次只允許壹個進程訪問特定的數據庫;

3.沒有內置的C/S架構,但開發人員可以使用LevelDB庫來打包服務器。

LevelDB本身只是壹個lib庫,它可以在源目錄make中編譯,然後包含leveldb/include/db.h頭文件可以直接包含在我們的應用程序中。頭文件有幾個基本的數據庫操作接口,下面是壹個測試示例:

# include & ltiostream & gt

# include & lt字符串& gt

# include & ltassert.h & gt

#包含“leveldb/db.h“

使用命名空間std

int main(void)

{

level DB::DB * DB;

leveldb::Options選項;

options . create _ if _ missing = true;

//打開

level DB::Status Status = level DB::DB::Open(options“/tmp/testdb“,& ampdb);

assert(status . ok());

string key =“name“;

字符串值=“陳其“;

//寫入

status = db-& gt;put(level db::write options(),key,value);

assert(status . ok());

//讀取

status = db-& gt;get(level db::read options()、key & amp;值);

assert(status . ok());

cout & lt& lt價值& lt& ltendl

//刪除

status = db-& gt;delete(level db::write options(),key);

assert(status . ok());

status = db-& gt;get(level db::read options()、key & amp;值);

如果(!status.ok())

cerr & lt& ltkey & lt& lt“““& lt& lt狀態。ToString()& lt;& ltendl

}否則{

cout & lt& ltkey & lt& lt“= = =“& lt;& lt價值& lt& ltendl

}

//關閉

刪除數據庫;

返回0;

}

上面的示例演示了如何插入、獲取和刪除記錄以及編譯代碼:

g++-o test test . CPP libleveldb . a-LP thread-Iinclude

執行後。/test,將在/tmp下生成壹個目錄testdb,其中包含幾個文件:

-

LevelDB是google的壹個開源鍵值存儲引擎庫,類似於開源的Lucene索引庫。其他軟件開發人員可以使用該庫進行二次開發,以滿足定制需求。LevelDB使用日誌寫入來提高寫入性能,但犧牲了壹些讀取性能。為了彌補犧牲的讀取性能,有人提議使用SSD作為存儲介質。

對於本地化的鍵值存儲引擎,簡單使用壹般分為三個基本步驟:(1)打開數據庫實例;(2)插入、修改和查詢該數據庫實例;(3)最後,使用完成後,關閉數據庫。下面將詳細討論這三個步驟:

首先,打開壹個數據庫實例

leveldb數據庫的名稱與文件系統目錄相對應。數據庫的所有內容都存儲在這個目錄中。以下代碼描述了如何打開數據庫或創建新數據庫。

# include & ltassert.h & gt

#包含“leveldb/db.h“

level DB::DB * DB;

leveldb::Options選項;

options . create _ if _ missing = true;

level DB::Status Status = level DB::DB::Open(options“/tmp/testdb“,& ampdb);

assert(status . ok());

如果妳打開壹個現有的數據庫,妳需要拋出壹個錯誤。在leveldb::DB::Open方法之前插入以下代碼:

options.error _ if _ exists = true

第二,簡單的數據庫讀寫操作

LevelDB提供了三種方法:Put、Delete和Get來修改和查詢數據庫。例如,下面的代碼片段描述了如何將對應於key1的值移動到對應於key2的值。

std::字符串值;

level db::Status s = d B- & gt;get(level db::read options(),key1,& amp值);

if(s . ok()s = db-& gt;put(level db::write options(),key2,value);

if(s . ok()s = db-& gt;delete(level db::write options(),key 1);

第三,關閉數據庫

在對數據庫進行壹系列操作後,需要關閉數據庫。這個操作相對簡單:

...如上所述打開數據庫...

...對db做點什麽...

刪除數據庫;

上面基本介紹了levelDB的簡單使用方法,下壹步是如何編寫壹個完整且可操作的示例。

1,下載源git clone /p/leveldb/

2.編譯源代碼CD級DB &;& amp全部制作

3.編寫test.cpp

# include & ltassert.h & gt

# include & ltstring.h & gt

# include & ltlevel db/db . h & gt;

# include & ltiostream & gt

int main(){

level DB::DB * DB;

leveldb::Options選項;

options . create _ if _ missing = true;

level DB::Status Status = level DB::DB::Open(options“/tmp/testdb“,& ampdb);

assert(status . ok());

//寫key1,value1

STD::string key =“key“;

STD::string value =“value“;

status = db-& gt;put(level db::write options(),key,value);

assert(status . ok());

status = db-& gt;get(level db::read options()、key & amp;值);

assert(status . ok());

std::cout<。& lt價值& lt& ltSTD::endl;

STD::string key 2 =“key 2“;

//將key下的值移動到key2

status = db-& gt;put(level db::write options(),key2,value);

assert(status . ok());

status = db-& gt;delete(level db::write options(),key);

assert(status . ok());

status = db-& gt;get(level db::read options()、key 2 & amp;值);

assert(status . ok());

std::cout<。& ltkey2 & lt& lt“= = =“& lt;& lt價值& lt& ltSTD::endl;

status = db-& gt;get(level db::read options()、key & amp;值);

如果(!status . ok()STD::cerr & lt;& ltkey & lt& lt“““& lt& lt狀態。ToString()& lt;& ltSTD::endl;

else std::cout<。& ltkey & lt& lt“= = =“& lt;& lt價值& lt& ltSTD::endl;

刪除數據庫;

返回0;

}

4.編譯鏈接G++-otesttest.cpp../level db/libre vel db . a-LP thread-I../leveldb/include。

註意libleveldb.a和leveldb的路徑包括。

5.運行結果。/測試:

價值

key2 = = =值

未找到密鑰: