當前位置:編程學習大全網 - 源碼下載 - Leveldb源代碼數量

Leveldb源代碼數量

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)

{ ?

leveldb::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

string value = "陳其";

//寫

status = d B- & gt;Put(leveldb::WriteOptions()、key、value);

assert(status . ok());

//讀取

status = d B- & gt;Get(leveldb::ReadOptions()、key & amp;值);

assert(status . ok());

cout & lt& lt價值& lt& ltendl

//刪除

status = d B- & gt;Delete(leveldb::WriteOptions(),key);

assert(status . ok());

status = d B- & gt;Get(leveldb::ReadOptions()、key & amp;值);

如果(!status.ok()) {

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

}否則{

cout & lt& ltkey & lt& lt" = = = " & lt& lt價值& lt& ltendl

} ?

//關閉

刪除db;

返回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(leveldb::ReadOptions(),key1,& amp值);

if(s . ok())s = d B- & gt;Put(leveldb::WriteOptions(),key2,value);

if(s . ok())s = d B- & gt;Delete(leveldb::WriteOptions(),key 1);

第三,關閉數據庫

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

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

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

刪除db;

上面基本介紹了levelDB的簡單使用,接下來就是如何寫出壹個完整的、可操作的例子。

1,下載源代碼?git克隆/p/leveldb/

2.編譯源代碼?cd級& amp& 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 = d B- & gt;Put(leveldb::WriteOptions()、key、value);

assert(status . ok());

status = d B- & gt;Get(leveldb::ReadOptions()、key & amp;值);

assert(status . ok());

STD::cout & lt;& lt價值& lt& ltSTD::endl;

STD::string key 2 = " key 2 ";

//將key下的值移動到key2

status = d B- & gt;Put(leveldb::WriteOptions(),key2,value);

assert(status . ok());

status = d B- & gt;Delete(leveldb::WriteOptions(),key);

assert(status . ok());

status = d B- & gt;Get(leveldb::ReadOptions()、key 2 & amp;值);

assert(status . ok());

STD::cout & lt;& ltkey2 & lt& lt" = = = " & lt& lt價值& lt& ltSTD::endl;

status = d B- & gt;Get(leveldb::ReadOptions()、key & amp;值);

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

else STD::cout & lt;& ltkey & lt& lt" = = = " & lt& lt價值& lt& ltSTD::endl;

刪除db;

返回0;

}

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

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

5.運行結果。/測試:

價值

key2 = = =值

找不到密鑰:

  • 上一篇:看看谷哥是如何做到的?
  • 下一篇:Ios插畫壁紙——如何設置蘋果桌面壁紙?
  • copyright 2024編程學習大全網