Key-Value 数据库 iNexus

BSD
C/C++
Linux
2015-06-24
fxsjy

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
加载中

评论(0)

暂无评论

iNexus 0.13 发布,基于 Raft 的分布式协调组件

iNexus (简称ins) 是一个基于Raft协议实现的高可用的分布式Key-Value数据库,支持数据变更通知(Watch)和分布式锁,可用于大型分布式系统的协调工作 猛击:https://github.com/baidu/ins 简...

2016/02/01 12:23

iNexus 0.11 发布,基于 Raft 的分布式协调组件

iNexus原本是Galaxy集群管理系统的一个组件,它的产生源于我们的业务需要一个类似于Google Chubby一样的组件。它能提供分布式naming、lock服务,并能存储一定规模的元数据(百GB的级别)。 iN...

2015/09/15 12:45

iNexus 0.1 发布,基于 Raft 的分布式协调组件

iNexus 0.1 发布,更新内容如下: v0.1 功能列表: 基本的Get,Put,Scan,Delete Watch(注册变更通知),Lock(分布式抢锁) 高可用:集群选主、数据一致性复制 过期日志整理、数据压缩 C++客户端...

2015/08/19 14:48

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

暂无博客

返回顶部
顶部