SSDB

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 vs Redis

SSDB 架构

Views: 157903

433 Responses to "SSDB"

  • 1.67 相比之前,性能提升确实很明显,单进程每秒可达3万条以上,但有以下两个问题:

    1、不断批量插入数据,将近2000万条数据时,会出现长时间停顿;
    1.62版本也会有停顿,但时间很小;
    2、个人感觉,1.62版本相对稳定,除了上面说的稍微停顿之外,没发现其它问题,测试了1.64和1.67,不断批量插入数据,还会出现连接断开情况,使用的是ssdb.py客户端,报错信息为:disconnected Connection closed None。 Reply
    @beng_jun: 停顿的问题应该新老版本都会遇到, 你确定是用同样的方法用新的环境测试, 然后1.6.2的停顿很少? 连接断开这个现象不正常, 我们还没有遇到过, 麻烦你把 ssdb.conf 里的 log.level 设为 debug, 然后在出现连接断开时, 把相关log发给我看看. 谢谢. Reply
    @ideawu: 环境是一样的,同一台主机,同一个帐号,不过今天我把log.level 设为 debug并重启之后,同样的程序进行批量压力测试,未发现异常,之前是程序一运行大约固定的时间出异常,问题没有重现,很是奇怪,我在反复测试测试,有异常及时给你反馈。

    谢谢! Reply
    @beng_jun: 说话不及,问题重新了,马上把log.txt发给你。 Reply
    @beng_jun: 文件比较大,先摘部分你看看:

    2014-01-12 11:10:19.665 [DEBUG] serv.cpp(258): w:0.040,p:0.034, req: multi_set, resp: client_error
    2014-01-12 11:10:19.671 [INFO ] ssdb-server.cpp(165): fd: 16, read: 0, delete link
    2014-01-12 11:10:19.741 [INFO ] ssdb-server.cpp(137): new link from 10.96.18.158:58090, fd: 16, link_count: 1
    2014-01-12 11:10:19.839 [DEBUG] serv.cpp(258): w:0.217,p:0.024, req: multi_set, resp: client_error
    2014-01-12 11:10:19.845 [INFO ] ssdb-server.cpp(165): fd: 16, read: 0, delete link
    2014-01-12 11:10:19.917 [INFO ] ssdb-server.cpp(137): new link from 10.96.18.158:58094, fd: 16, link_count: 1
    2014-01-12 11:10:20.021 [DEBUG] serv.cpp(258): w:0.036,p:0.011, req: multi_set, resp: client_error
    2014-01-12 11:10:20.027 [INFO ] ssdb-server.cpp(165): fd: 16, read: 0, delete link
    2014-01-12 11:10:20.099 [INFO ] ssdb-server.cpp(137): new link from 10.96.18.158:58098, fd: 16, link_count: 1
    2014-01-12 11:10:20.217 [DEBUG] serv.cpp(258): w:0.033,p:0.010, req: multi_set, resp: client_error
    2014-01-12 11:10:20.225 [INFO ] ssdb-server.cpp(165): fd: 16, read: 0, delete link
    2014-01-12 11:10:20.302 [INFO ] ssdb-server.cpp(137): new link from 10.96.18.158:58102, fd: 16, link_count: 1
    2

    2014-01-12 11:42:01.326 [DEBUG] serv.cpp(258): w:0.039,p:62.062, req: multi_set [43] [244] [43] [244] [19996 more...], resp: ok 10000
    2014-01-12 11:42:01.329 [DEBUG] serv.cpp(258): w:0.029,p:80.277, req: multi_set [43] [312] [43] [312] [19996 more...], resp: ok 10000
    2014-01-12 11:42:01.604 [DEBUG] serv.cpp(258): w:0.210,p:64.492, req: multi_set [43] [264] [43] [264] [19996 more...], resp: ok 10000
    2014-01-12 11:42:01.604 [INFO ] ssdb-server.cpp(157): fd: 16 error, delete link
    2014-01-12 11:42:01.643 [DEBUG] serv.cpp(258): w:0.029,p:89.458, req: multi_set [43] [312] [43] [312] [19996 more...], resp: ok 10000
    2014-01-12 11:42:01.953 [DEBUG] serv.cpp(258): w:0.024,p:84.914, req: multi_set [43] [223] [43] [221] [19996 more...], resp: ok 10000
    2014 Reply
    @beng_jun: 看起来应该是你的测试程序的问题, multi_zset 的参数不能为空.
  • zset 插入效率太低了 ,set 字符串 性能还行 Reply
  • 能否详细介绍一下其读写机制,并介绍与其相关的参数设置?
    如failover,是否可以保证数据不丢失? Reply
  • 是否可以和Twemproxy一起使用? Reply
    能否详细介绍一下其读写机制?
    如failover,是否可以保证数据不丢失? Reply
  • php 接口 循环插入1W 条数据 每个 zset 100元素 并且使用了batch() exec(),速度是 redis 的1/10 为啥?哪里有什么问题? Reply
    @cityhunter: Hi, 能把你的两个对比脚本用邮件发给我吗? Reply
    @ideawu: 你就看看这段代码有什么问题么? 不加批处理22秒 ,加上批处理9秒,9wi条记录,为什么这么慢呢?

    $start=gettickcount();
    $zname = ‘btest';
    for($i=0; $i<1000; $i++){
    $ssdb->batch();
    for($j=0; $j<100; $j++){
    $key = "k$i$j";
    $score = mt_rand(0, 100);
    $ssdb->zset($zname, $key, $score);
    }
    $ssdb->exec();
    }
    $size = $ssdb->zsize($zname);
    echo "total $size items\n";
    $end=gettickcount();
    printf("cost %d\n", $end -$start); Reply
    @cityhunter: 单连接每秒1万条, 并不慢. 并发后可以达到8至10万. Reply
  • 你好:
    操作系统:centOS6.4
    gcc++版本4.4.7
    安装时出现:g++: /home/winds/下载/ssdb-master/deps/snappy-1.1.0/.libs/libsnappy.a:没有那个文件或目录

    这个问题如何处理? Reply
    @Oscar: Hi, 应该是你的代码文件时间乱了. 你可以重新下载一份新代码, 或者手工单独编译 snappy:

    cd deps/snappy-1.1.0; ./configure; make
    然后再回到 ssdb-master make. Reply
    @ideawu:
    感谢你的回复,成功安装成功了! Reply
  • ssdb-cli是否可以支持pipe?这样可以一键从mysql导入key到ssdb,好像redis那样 … Reply
    @api: Hi, 支持的. 例如 echo "get a" | ./tools/ssdb-cli Reply
  • 我在CentOS-6上装了SSDB,在CentOS-6上运行没有问题,但通过原码的客户端去联接,联接不上上,报这个错误:A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 10.30.178.10:8888. Reply
    @eden: Hi, 你的 ssdb.conf 是监听 0.0.0.0 端口吗? 就是 listen.ip 参数. Reply
    @ideawu: ssdb.conf监听的是10.30.178.10 8888端口。 Reply
    @eden: 客户端的运行参数是 ./ssdb-cli -h 10.30.178.10 -p 8888 Reply
    @eden: 你可以把 log 级别调整为 debug, 然后看看 log.txt, 看是否收到了客户端的网络连接. Reply
    @ideawu: 我不知道是不是CentOS6系统本身的问题。 我同时在Ubuntu上装了,用dotnet客户端连接没有问题。 Reply
    @ideawu:./ssdb-cli是能够连上的,dotnet的客户端连不上. Reply
  • 有计划实现redis set结构的SPOP功能吗?这个对需要去重队列应用场景很有效 Reply
  • 非官方群233415756,讨论 Reply

« [11][12][13][14][15][16][17][18][19] » 17/19

Leave a Comment