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 架构
昨天我测试了下,发现双主模式对同一个 key 做 hincr,数据会有冲突。
后来仔细阅读了代码,发现确实 binlog的类型里面没有 incr 类型的log。
我这边是严重依赖 incr 一类的指令的。 给咱们提个建议~。 Reply
比如调用leveldb
$db = new LevelDB("leveldb路径");
$db->put("key","value");
$result = $db->get("key");
调用单机版的ssdb
$db = new SSDB("ssdb路径");
$db->put("key","value");
$result = $db->get("key"); Reply
我们目前想基于 SSDB_Client 写一个测试程序用来测试我们修改的 pika (Pika is a nosql compatible with redis, it is developed by Qihoo’s DBA and infrastructure team) ,但是后来发现 SSDB_Client 似乎并不能发送 Redis 协议报文?
发送时,SSDB_Client 最终会调用
const std::vector<std::string>* ClientImpl::request(const std::vector<std::string> &req)
其中会调用
int Link::send(const std::vector<std::string> &resp)
其中有如下代码
// Redis protocol supports
if(this->redis){
return this->redis->send_resp(this->output, resp);
}
看上去这个send_resp()函数只针对 Redis server 才有效,而对 Redis client 来说根本就是错误的(不应该调用)?
请问 SSDB_Client 可以修复或者支持 Redis 么?
谢谢。 Reply
github自带的c++ client 是否线程安全? 在客户端里使用了多线程,20个线程,每个线程有单独的DB连接指向同一个SSDB, 当客户端进行大量Qpop操作时,(每个线程qpop key不同)发现客户端很多线程会阻塞在Link::read() 中的socket::read 上,只有一个客户端线程可以正常读写,请问该问题可能是什么原因,谢谢。 Reply
某个zset,key:goods_id score:goods_click
每次打开某个商品页面,右侧提取 goods_click比当前这个商品大的50条数据, Reply
我们想用SSDB存储千亿级别的key-value对,key和value都是32bit。目前我们测试的结果是单实例能支持20-30亿,请问单实例数据量再增加从架构上有什么隐患?
另外,如果采用集群部署,集群中做多可以有多少实例?有什么隐患?谢谢 Reply