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 架构
出现的问题是:新增从库或主库的时候,"SSDBMAP"的数据没有全部同步过去,实际 hsize 结果为 14W,但是新增的 ssdb 服务却只有几十条。
请问,是我的这个map设计有问题吗? 请指教,多谢。 Reply
还有请教下,如果双主之间的数据不一致,镜像策略是啥呢? Reply
.keys * 最好还能支持正则
.flushdb/expire/persist/zcount
*redis只支持srandmember,ssdb可以考虑实现srandmember/zrandmember/hrandmember
*ssdb的exists是专门用于kv的,而redis的exists的是通用的,ssdb这么设计的理由是?
.订阅功能
.分库select要能实现最好 Reply
对于 exists 命令, 因为 ssdb 的数据是分数据类型的, 而且不同的数据类型在硬盘上是分开存储(使用者可不关心), 所以不同的数据类型是可以重名的. 因此, exists 只针对 kv 数据结构, 而 hsize, zsize 可用来判断 map/zset 是否存在. Reply
看了你之前质疑leveldb的多路归并算法的文章,我通过日志观察,发现leveldb一次最多归并68个文件(通过在NewMergingIterator中打印n_值),并结合客户端日志,发现leveldb每次停顿时长最大间隔就是归并文件数达到68个时候,是否考虑在此进行下优化,通过堆排序或者败者数提升性能?
在数量不是很大时,堆排序和败者树(胜者树)那个性能又更好些?
谢谢! Reply
ssdb 插入记录数量总数怎么查看呢? Reply
谢谢! Reply
if len(resp)==0:
pass
—– return SSDB_Response(‘disconnected’,’Connection closed’) ——– Reply
1、客户端报disconnected错的原因已经找到了,应该是nfile参数值小的原因,已经调大,通过昨晚一晚上测试,未发生异常。
2、停顿这个问题,导入10亿条记录之后,特别明显。我这边需求是写比读多,要求快速的写入,同时能提供少量的读(相比写入),一天数据就有10亿多条,但是一天查询不到100万次,建多个实例并参考你的双主模式,但建的太多,耗内存,维护也有点麻烦,请问你有什么好的建议?
3、leveldb 1.45 改进mmap,提高了ext4下同步写入速度,建议升级ssdb,进一步提升性能。
谢谢!
谢谢! Reply