SSDB 是一个 C/C++ 语言开发的高性能 NoSQL 数据库, 支持 zset(sorted set), map(hash), kv, list 等数据结构, 用来替代或者与 Redis 配合存储十亿级别的列表数据. SSDB 同时也被国内外业界的众多互联网企业所使用, 如 QIHU 360, TOPGAME, 汽车之家, 比亚迪等.
项目主页: https://github.com/ideawu/ssdb
SSDB 文档: http://ssdb.io/docs/zh_cn/
谁在用 SSDB: http://ssdb.io/docs/zh_cn/users.html
官方QQ群: 170983373
2014开源中国开源世界高峰论坛, 中国开源优秀项目奖项目
SSDB 的主要特点:
- 支持 zset, map/hash, list, kv 数据结构, 可替代 Redis
- 特别适合存储大量集合数据, 支持丰富的数据结构: key-value, key-map, key-zset, key-list.
- 使用 Google LevelDB 作为存储引擎
- 支持主从同步, 多主同步
- 客户端支持 PHP, C++, Python, Lua, Java, Ruby, nodejs, Go 等
- 内存占用极少
- 图形化界面管理工具(phpssdbadmin)
PHP API
<?php require_once('SSDB.php'); $ssdb = new SimpleSSDB('127.0.0.1', 8888); $resp = $ssdb->set('key', '123'); $resp = $ssdb->get('key'); echo $resp; // output: 123
PHP API 文档: http://ssdb.io/docs/zh_cn/php/
SSDB vs Redis
SSDB 架构
1.ssdb daemon被强制kill;
2.服务器遭遇power failure.
client已经写进去的数据会丢失么?ssdb对如上两种情况的处理思想是什么呢? Reply
我只用set get 和 del。 Reply
3秒钟同步有点长了。
int BackendSync::Client::sync(BinlogQueue *logs){
同步有两个规则 1. 操作大于1000条; 2. 等待 3秒钟
if(type == BinlogType::MIRROR && this->is_mirror){
if(this->last_seq – this->last_noop_seq >= 1000){
this->noop();
return 1;
}else{
continue;
}
}
if(is_empty){
if(idle >= NOOP_IDLES){ // TICK_INTERVAL_MS = 300 NOOP_IDLES = 10
idle = 0;
client.noop();
}else{
idle ++;
usleep(TICK_INTERVAL_MS * 1000);
}
}else{
idle = 0;
}
} Reply