Key-Value 數據庫:iNexus

jopen 9年前發布 | 10K 次閱讀 iNexus NoSQL數據庫

iNexus (簡稱ins) 是一個基于 Raft 協議實現的高可用的分布式 Key-Value 數據庫,支持數據變更通知(Watch)和分布式鎖,可用于大型分布式系統的協調工作。

使用說明:

https://github.com/fxsjy/ins/wiki    

1. 初始化 Client

using namespace galaxy::ins::sdk;
InsSDK* sdk = new InsSDK("abc.com:1234,def.com:1234")
//構造函數傳入ins集群的若干個member(機器名+端口), 用逗號分隔。

2. 隨機讀

galaxy::ins::sdk::SDKError err;
std::string key = "key_123";
std::string value;
bool ret = sdk->Get(key, &value, &err));
// ret == true表示成功讀取
// ret == false表示讀取失敗或者改key不存在
// err返回錯誤碼,kOK表示無錯誤, kNoSuchKey表示key不存在(具體參見ins_sdk.h)。

   3. 區間掃描

std::string start_key = "a";
std::string end_key = "z";
galaxy::ins::sdk::ScanResult* result = sdk->Scan(start_key, end_key); //不包含end_key
while (!result->Done()) { //通過一個流式迭代器讀取scan的結果
    assert(result->Error() == galaxy::ins::sdk::kOK);
    std::string value = result->Value(); 
    std::string key = result->Key();
    result->Next();
}

   4. 分布式鎖

galaxy::ins::sdk::SDKError err;
std::string lock_name = "/ps/se/ac";
sdk->Lock(lock_name, &err); 
// Lock會一直阻塞直到搶到鎖
// sdk通過心跳和iNexus集群保持活躍,一旦超過一定時間(默認6秒),該sdk加的鎖自動失效,可以被其他client搶得。
sdk->TryLock(lock_name, &err); // TryLock不會阻塞,如果調用者搶不到鎖,就返回false, 用戶自己決定重試策略

   5. Watch數據變更

watch支持直接watch一個key,也支持watch 一些key的"父節點".
galaxy::ins::sdk::SDKError err;
sdk->Watch("/ps/se/tera/ts", OnChildrenChange, context, &err); //第二個參數是回調函數,第三個參數是回調函數可以用的用戶自定義數據
sdk->Watch("/ps/se/tera/master_lock", OnLockChange, context, &err);

  快速體驗:
(只需要一臺機器,通過多個進程模擬分布式)

cd sandbox
./start_all.sh
./ins_shell.sh

galaxy ins> help
  show [ show cluster ]
  put (key) (value) [ update the data ] 
  get (key) [read the data by key ]
  delete (key) [remove the data by key]
  scan (start-key) (end-key) [scan from start-key to end-key(excluded)]
  watch (key) [event will be triggered once value changed or deleted]
  lock (key) [lock on specific key]
  enter quit to exit shell

項目主頁:http://www.baiduhome.net/lib/view/home/1435200336403

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!