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;