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

422 Responses to "SSDB"

  • SSDB很好很强大,只是我的数据库非常多,数据量非常大,想把mysql数据都迁移到ssdb,请问单机可以配置多个数据库实例吗?如果可以,如何配置呢?另最多支持多少个实例?每个实例是不是都可以做主从同步?谢谢博主。 Reply
    @笑红尘: 你的这些问题的答案都是肯定的, 相关文档为 http://ssdb.io/docs/zh_cn/faq.html 打开后用浏览器搜索"如何在一台机器上" Reply
    @ideawu: 非常感谢您。 Reply
  • 楼主好!用scan命令时,如何指定比较函数,比如传入scan("2016041210Bxxxx5824","2016041210Bxxxx5924"), 我希望key字段中特定位置(xxxx)的字符不参与key值比较,有什么好办法么?

    谢谢! Reply
    @beng_jun: ssdb无法实现, 只能使用者自己来实现. Reply
  • 请问,我用的c#客户端,ssdb支持KV,那么V里面存放List泛型可以吗 Reply
    @benegates: 你需要将要存储的东西序列化成 byte[] 然后存储, 读取后再反序列化. 关于"序列化反序列化" 这是语言相关的知识, 你需要自己去学习. Reply
    @ideawu:KV 只能存储bytes[] ,是这样吗 Reply
  • 请问在如下这两种情况下:

    1.ssdb daemon被强制kill;

    2.服务器遭遇power failure.

    client已经写进去的数据会丢失么?ssdb对如上两种情况的处理思想是什么呢? Reply
  • 主主模式,如果两台机器同时操作了同一个key会怎样。有可能会引发异常吗。还是每次,后面的操作都能覆盖前面的操作?
    我只用set get 和 del。 Reply
    @dream_guard: 双主或者多主模式, 不能在不同的机器(实例)上操作同样的key, 此种行为是被要求禁止的, 后果是不可预期的. Reply
  • 楼主你好,有没有计划考虑引入libuv,这样就可以windows和linux,mac等系统都通吃了,而且都是异步的,性能会很好 Reply
    @灰熊: 你好, 没有这个计划. 现在已经 linux, mac 能吃了. 对 windwows 感兴趣. Reply
  • 楼主,我看到之前的消息说对windows支持不是很好,有没有计划改善windows环境下的性能呢? Reply
  • 你好,如何快速删除整个hash? Reply
  • 最近阅读ssdb代码的时候,发现一个疑问,Slave::proc()处理过程中并没有判断proc_copy()、proc_sync()的结果,如果处理过程中某条同步记录,例如seq为10000,写失败了,而下一条记录1001写成功,并且更新了last_seq,是否有丢失第10000条数据的风险呢? Reply
  • 这里是否可以像 mysql一样做个 可配置的同步时间。
    3秒钟同步有点长了。
    int BackendSync::Client::sync(BinlogQueue *logs){
    同步有两个规则 1. 操作大于1000条; 2. 等待 3秒钟
    if(type == BinlogType::MIRROR && this->is_mirror){
    if(this->last_seq – this->last_noop_seq >= 1000){
    this->noop();
    return 1;
    }else{
    continue;
    }
    }

    if(is_empty){
    if(idle >= NOOP_IDLES){ // TICK_INTERVAL_MS = 300 NOOP_IDLES = 10
    idle = 0;
    client.noop();
    }else{
    idle ++;
    usleep(TICK_INTERVAL_MS * 1000);
    }
    }else{
    idle = 0;
    }

    } Reply

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

Leave a Comment