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 架构
redis
-bash-3.2$ ./redis-benchmark -p 6379 -t set,get -q
SET: 18796.99 requests per second
GET: 18939.39 requests per second
ssdb
-bash-3.2$ ./redis-benchmark -p 8888 -t set,get -q
SET: 9718.17 requests per second
GET: 17825.31 requests per second Reply
這是我用Go實作ssdb sharding proxy,希望有機會可以指導一下是不是有設計缺陷或瑕疵
http://matishsiao.blogspot.tw/2015/09/ssdb-sharding-proxy.html
會有這個專案的原因是google computer engine 只支援最大1TB的硬碟,才衍生出這個專案 Reply
會有很多問題要處理,所以才會使用遍尋加熱點的方式處理 Reply
记得之前版本好像可以允许在zset的记录中除了score还可以存放 value信息,现在貌似只能使用 zset(zname, key, score)了。出于什么考虑呢?
使用背景:项目中对zrscan有需求,想在value字段保存一些信息。
来自: https://github.com/ideawu/ssdb/issues/766 Reply
话说实现这个功能也不难 @ideawu Reply
我在测试SSDB的zset的性能时,发现其zrank和zrange的性能并不好。
经测试,发现zrank和zrange的时间复杂度为O(n),即性能与容器中key数量有关,
但其实这个复杂度是可以优化到O(logn)的,到底是我用的接口有问题,还是目前
的SSDB没有实现zrank和zrange的O(logn)的算法?毕竟zset最主要的用途就是获取
和排名有关的信息,所以这块的算法优化还是很重要的。希望博主能解答下,谢谢! Reply
看redis 上 skiplist ,每个level到下个有个步长,可以直接计算 排序的问题。
leveldb就没看到, 真想加一个!! Reply
1)有具体配置吗?(主要是硬件配置特别是是否有SSD)
2)直观告诉我比较基于内存的redis,ssdb和redis性能应该差距很大即使是ssdb用上了SSD,除非数据不够很多时候都走了缓存或者有一些别的瓶颈。
3) 是用的ssdb-bench比较redis和ssdb吗?我用ssdb-bench (最新的github代码)刚才测试redis 3.03的时候set失败 (无具体出错信息),还没有查看代码哪儿的问题。
多谢。 Reply