iNexusKey-Value 数据库
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)。
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(); }
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, 用户自己决定重试策略
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
评论
青龙山社区
青龙山社区:坐落在滨湖区梅园、桃花山、青龙山的三面环山之中,南临太湖,东依梅园公园。南通太湖大道,北接312国道。2004年9月成立,占地面积2.68平方公里,由6个居民小组组成,总户数508户,人口
青龙山社区
0
青龙山街道115社区
115社区共有6个组,544户,合计1689人,行政区面积273亩,民族主要以汉族为主,杂居其他少数民族。我们今后的工作重点应放在让更多的失业人员实现再就业,创建充分就业社区工作来开展,在青龙街道党工
青龙山街道115社区
0
青龙山街道地勘社区
地堪居委会辖区面积0.04平方公里,东抵前进社区,南至红旗社区,西接盘岭北社区,北连盘化社区。居(村)民小组7个,常住人口900户3000人,流动人口160人。党支部还未建立,党员1人(其中本地党员1
青龙山街道地勘社区
0
青龙山街道岭南社区
岭南居委会辖区面积0.8平方公里,东抵新华路,南至云岭西路,西接建设路,北连星云路。居民小组12个,常住人口1996户5924人,流动人口784户1089人,村民小组5个230户586人,个体经营网点
青龙山街道岭南社区
0