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

421 Responses to "SSDB"

  • 为什么不在官方jar中加入管道模式呢?应用层面如过使用这种方式性能会有很高的提升吧0.0 Reply
  • 您好,执行部分命令遇到如下提示,这是怎么回事呢
    Traceback (most recent call last):
    File "./deps/cpy/cpy.py", line 69, in <module>
    execfile(dstfile)
    File "/usr/local/ssdb/_cpy_/ssdb-cli.py", line 522, in <module>
    sys.stdout.write((repr_data(resp.data) + ‘\n’))
    TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’ Reply
    @xff: 是已知bug,需要升级一下. Reply
    @xff: 改了第522行。。可以显示了。。。。。。 Reply
  • 牛逼啊,楼主 Reply
  • 某个节点磁盘增长太快,才使用的一段时间将近300G,它对应的镜像节点没有增长如此快。业务上有大量写入SSDB的情况,但是很多key是重复写入的。看var/data下面的数据中MANIFEST-文件很大,有200多G,这种情况正常吗?怎么解决 Reply
    @husel: 见此讨论 https://github.com/ideawu/ssdb/issues/1130 ,在ssdb将leveldb升级到2.0之前,你只能通过重启进程来减小 MANIFEST 文件。 Reply
  • bin log不支持 * incr 指令 2017-09-20 at 11:20:08
    大神,你好。
    昨天我测试了下,发现双主模式对同一个 key 做 hincr,数据会有冲突。
    后来仔细阅读了代码,发现确实 binlog的类型里面没有 incr 类型的log。

    我这边是严重依赖 incr 一类的指令的。 给咱们提个建议~。 Reply
    @bin log不支持 * incr 指令: http://ssdb.io/docs/zh_cn/faq.html Reply
    @bin log不支持 * incr 指令: 你好,你说的这个现象是存在的。在 http://ssdb.io/ 网站上的文档,明确对这种情况做了说明,你按照文档操作即可。 Reply
  • 有没有单机版的ssdb呢?不通过ip、port进行访问的ssdb呢, 就通过磁盘地址进行交互。
    比如调用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-rocks 为啥那么久都没更新了呢。。 Reply
  • 你好,执行flushdb时候会一直卡死,换了另一台机器部署也是同样问题,从来没执行成功过这个命令。请问大家有遇到过这个问题吗?系统centos6.5 Reply
    @hht201: 我也这样, 不过之前在原来公司的系统是可以执行的,换了公司之后的系统就flushdb没返回了,但数据库是清理掉了. Reply
  • @ideawu,您好。
    我们目前想基于 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
    @jojo59516: SSDB_Client 仅支持作为 Redis 服务端,不支持作为 Redis 客户端。 Reply
  • 您好!ideawu,有个问题想问一下
    github自带的c++ client 是否线程安全? 在客户端里使用了多线程,20个线程,每个线程有单独的DB连接指向同一个SSDB, 当客户端进行大量Qpop操作时,(每个线程qpop key不同)发现客户端很多线程会阻塞在Link::read() 中的socket::read 上,只有一个客户端线程可以正常读写,请问该问题可能是什么原因,谢谢。 Reply
    @aipai24: 所有的编程语言和库, 如果没有*明确*表述, 都不是线程安全的. Reply

« [1][2][3][4][5][6][7][8][9] » 2/18

Leave a Comment