怎樣操作leveldb資料庫,實現增刪改查?
http://www.bubuko.com/infodetail-411090.html 摘錄一段給你
LevelDB 簡介
一、LevelDB入門LevelDB是Google開源的持久化KV單機資料庫,具有很高的隨機寫,順序讀/寫性能,但是隨機讀的性能很一般,也就是說,LevelDB很適合應用在查詢較少,而寫很多的場景。LevelDB應用了LSM (Log Structured Merge) 策略,lsm_tree對索引變更進行延遲及批量處理,並通過一種類似於歸併排序的方式高效地將更新遷移到磁碟,降低索引插入開銷,關於LSM,本文在後面也會簡單提及。
根據LevelDB官方網站的描述,LevelDB的特點和限制如下:
特點:
1、key和value都是任意長度的位元組數組;
2、entry(即一條K-V記錄)默認是按照key的字典順序存儲的,當然開發者也可以重載這個排序函數;3、提供的基本操作介面:Put()、Delete()、Get()、Batch();4、支持批量操作以原子操作進行;5、可以創建數據全景的snapshot(快照),並允許在快照中查找數據;6、可以通過前向(或後向)迭代器遍曆數據(迭代器會隱含的創建一個snapshot);7、自動使用Snappy壓縮數據;8、可移植性;限制:
1、非關係型數據模型(NoSQL),不支持sql語句,也不支持索引;2、一次只允許一個進程訪問一個特定的資料庫;
3、沒有內置的C/S架構,但開發者可以使用LevelDB庫自己封裝一個server;LevelDB本身只是一個lib庫,在源碼目錄make編譯即可,然後在我們的應用程序裡面可以直接include leveldb/include/db.h頭文件,該頭文件有幾個基本的資料庫操作介面,下面是一個測試例子:
#include &
#include &
#include &
#include "leveldb/db.h"
using namespace std;
int main(void)
{
leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;
// open
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", db);
assert(status.ok());
string key = "name";
string value = "chenqi";
// write
status = db-&>Put(leveldb::WriteOptions(), key, value);
assert(status.ok());
// read
status = db-&>Get(leveldb::ReadOptions(), key, value);
assert(status.ok());
cout&<&
assert(status.ok());
status = db-&>Get(leveldb::ReadOptions(),key, value); 上面的例子演示了如何插入、獲取、刪除一條記錄,編譯代碼: 執行./test後,會在/tmp下面生成一個目錄testdb,裡面包含若干文件:
if(!status.ok()) {
cerr&<&g++ -o test test.cpp libleveldb.a -lpthread -Iinclude
一個leveldb資料庫有一個對應一個文件系統目錄的名字。該資料庫的所有內容都存儲在這個目錄下。下面的代碼描述了怎樣打開一個資料庫或者建立一個新的資料庫。
#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());
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);
... open the db as described above...
... do something with db ...
delete db;
上面對levelDB的簡單使用做了基本的介紹,接下來就是如何自己寫一個完成並且能運行的例子。
1、下載源碼 git clone https://code.google.com/p/leveldb/2、編譯源碼 cd leveldb make all3、編寫test.cpp#include &
#include &
#include &
#include &
int main(){
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", db);
assert(status.ok());
//write key1,value1
std::string key="key";
std::string value = "value";
status = db-&>Put(leveldb::WriteOptions(), key,value);
assert(status.ok());
status = db-&>Get(leveldb::ReadOptions(), key, value);
assert(status.ok());
std::cout&<&
assert(status.ok());
status = db-&>Delete(leveldb::WriteOptions(), key);
assert(status.ok());
status = db-&>Get(leveldb::ReadOptions(),key2, value);
assert(status.ok());
std::cout&<&
if(!status.ok()) std::cerr&<&
value
key2===value
key NotFound:
Put delete
推薦閱讀:
※終於等到你——MySQL 5.7與PostgreSQL 9.6的百萬QPS大比拼
※如何實現基於 follow 關係的 timeline?
※如何安裝與連接MySQL?
※基於知乎用戶數據的基礎MySQL使用指南
※時間序列資料庫漫談