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: 157151

433 Responses to "SSDB"

  • 为什么在用bench测试从1-1千万的key顺序set过程中,value是一个2K左右的数据。在设置到8百万左右的时候,(如果是4k的value,在3百万的时候)服务器就有点像死锁了。无任何提示,control+c也退出不了ssdb-server。请问这是什么原因? Reply
  • 你好!ssdd支持这么多语言: PHP, C++, Python, Lua, Java, Ruby, nodejs, Go 。
    好像就是不支持C#,这是为什么呢?开源社区好像很排斥C#。 Reply
    @mark: 你好, 这是你的误会! 请先认真了解相关资料后再下结论: http://ssdb.io/docs/zh_cn/clients.html Reply
  • 你好,我们打算使用SSDB做存储,python的客户端不知道用哪个比较好,还是用redis的python客户端比较好呢 Reply
    @J: 可以用 Redis 的 Python 客户端, 做下测试, 没问题. Reply
  • ssdb的golang客户端似乎过于简陋了吧?

    能不能直接用redis的那个go客户端改到ssdb?

    貌似通信协议是兼容redis,但是ssdb的命令似乎是改进过而和redis在部分命令有所不同.希望做一版本完整并且完全ssdb命令风格的go客户端…这话貌似太绕口,希望你明白我意思~ Reply
    @insion: 你可以直接使用 redis 的 go 客户端, 只要不是不兼容的命令都没问题. Reply
  • 原来ssdb version 1.6.8.6 ,怎么升级到 1.6.8.8 Reply
    @landyer: 1. 下载一份新的源码, make. 2. 停止服务. 3. make install. 4. 启动服务. Reply
    @landyer:

    SSDB ssdb = new SSDB("192.168.1.111", 8888);
    ssdb.close();

    如果ssdb频繁打开,而永远不 close (当然是一种极端情况) ,会出现什么后果? Reply
    @landyer: 客户端的 max open files 限制一般会先达到, 导致无法再建立连接. Reply
    @ideawu:

    明白了,谢谢 Reply
  • ssdb从提交查询到结果返回,不知道为什么总是很慢..
    我用ssdb-cli查询: hget W:1 tk 返回结果显示都是要0.5sec~1.5sec之间
    一般这个会由什么情况引起的呢? Reply
    @lauyoume: 可是以前用redis的时候也是nginx、php-fpm、redis同一台服务器,redis效率就很快的,网络并发大的时候也不会这么慢的- -这到底是什么原因呢? Reply
    @lauyoume: 之前的redis也是TCP/IP模式的 Reply
    @lauyoume: 好像是网络链接太多引起的…我一台服务器开了ssdb nginx 和 php-fpm.我关了nginx和php-fpm就很快了。 Reply
    @lauyoume: 应该是你的操作系统 max open files 太小了, 参考这篇文档修改 Linux 内核参数 http://www.ideawu.net/blog/archives/740.html Reply
    @ideawu: 改了,一样没效果。。。 Reply
  • ssdb-cli输出的时间单位是秒么?
    ssdb 127.0.0.1:8888> hget W:1 tkey
    \xe5\x8d\x95\xe5\xb1\x82\xe5\xb1\x82\xe6\x9e\xb6\xe4\xb8\x8d\xe9\x94\x88\xe9\x92\xa2
    (0.469 sec)
    ssdb 127.0.0.1:8888> hget W:1 tkey
    \xe5\x8d\x95\xe5\xb1\x82\xe5\xb1\x82\xe6\x9e\xb6\xe4\xb8\x8d\xe9\x94\x88\xe9\x92\xa2
    (1.417 sec)
    ssdb 127.0.0.1:8888> hget W:1 tkey
    \xe5\x8d\x95\xe5\xb1\x82\xe5\xb1\x82\xe6\x9e\xb6\xe4\xb8\x8d\xe9\x94\x88\xe9\x92\xa2
    (1.418 sec)
    ssdb 127.0.0.1:8888> Reply
  • 首先要感谢作者提供这么nb的开源数据库,用了下性能很赞.

    但是我在用的过程中碰到一个问题:就是我有一批数据,大概6000w,我重复把这批数据导入到ssdb的时候,ssdb的数据会越来越大,最初是5G左右,现在导了几次以后都36G了。是我的配置有问题吗?

    work_dir = /disk6/ssdb/id2cid
    pidfile = ./var/id2cid.pid

    server:
    ip: xt188
    port: 11101
    # bind to public ip
    #ip: 0.0.0.0
    # format: allow|deny: all|ip_prefix
    # multiple allows or denys is supported
    #deny: all
    #allow: 127.0.0.1
    #allow: 192.168

    replication:
    slaveof:
    # to identify a master even if it moved(ip, port changed)
    # if set to empty or not defined, ip:port will be used.
    #id: svc_2
    # sync|mirror, default is sync
    #type: sync
    #ip: 127.0.0.1
    #port: 8889

    logger:
    level: info
    output: id2cid.log
    rotate:
    size: 1000000000

    leveldb:
    # in MB
    cache_size: 500
    # in KB
    block_size: 32
    # in MB
    write_buffer_size: 64
    # in MB
    compaction_speed: 1000
    # yes|no
    compression: no Reply
    @rubbin: 你可以做一下实验. 找一个新的环境, 只导入一遍数据, 导完6000w条后, 看看data目录有多大. 然后再做你现在的实验. Reply
    @ideawu: 第一次是5.9G,以后每次导的情况如下:
    5.9G
    9G
    12G
    15G
    17G
    20G
    22G
    24G
    27G
    31G
    33G
    36G
    38G
    44G Reply
    @rubbin: 用 ssdb-cli 执行 info 命令看看. Reply
    @ideawu:
    ssdb qt011:11101> info
    version
    1.6.8
    key_range.kv
    "-1000000322137878170" – "999999934992878085"
    key_range.hash
    "" – ""
    key_range.zset
    "" – ""
    leveldb.stats
    Compactions
    Level Files Size(MB) Time(sec) Read(MB) Write(MB)
    ————————————————–
    0 0 0 1682 0 80537
    1 0 0 2646 99722 103649
    2 0 0 3168 128679 128614
    3 7 206 3704 179607 143664
    4 1224 40344 2427 81641 73735

    11 result(s) (0.000 sec) Reply
    @rubbin: 好的,多谢!另外,我通过ssdb-cli能看到SSDB里共有多少key-value记录吗?
    @rubbin: 另外, 升级到最新版本吧.
    @rubbin: 确实有那么多数据, 没看出有什么异常. 你先自己检查下, 优先检查你的程序.
  • 升级到1.6.8.8版本好像好了点!!不知道还有没有优化空间 Reply
  • 大哥您好,关于ssdb上有个问题想咨询下您。我们现在大约有1000多W条的数据,ssdb的查询效率非常不稳定,一次 hget 有时候仅0.012s,有时候却是1.5s..这个有什么办法优化的么?? Reply
    @lauyoume: 在什么使用场景下? Reply
    @ideawu: 日志,有些慢查询都10几秒…
    2014-07-03 22:25:56.090 [DEBUG] serv.cpp(327): w:0.000,p:0.028, req: multi_hget W:26101 tkey pic pinyin, resp: ok tkey \e5\ae\9d\e5\ae\9d\e8\b6\85\e8\96\84\e7\a9\ba\e8\b0\83\e8\a1\ab pic [73] [2 more...]
    2014-07-03 22:25:56.101 [DEBUG] serv.cpp(327): w:0.001,p:11.162, req: hget W:282584 tkey, resp: ok hgt2018-2003
    2014-07-03 22:25:56.101 [DEBUG] serv.cpp(327): w:0.001,p:0.065, req: multi_hget W:84870 tkey pic pinyin, resp: ok tkey \e9\93\b6\e8\89\b2\e6\9d\be\e7\b3\95\e9\80\8f\e6\b0\94 pic [73] [2 more...] Reply
    @lauyoume: 你好, w和p的单位是毫秒, 请注意看文档 http://ssdb.io/docs/zh_cn/logs.html Reply
    @ideawu: 网站,php环境下,使用的是phpredis访问的。 Reply

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

Leave a Comment