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

427 Responses to "SSDB"

  • hi @IdeaWu,
    這是我用Go實作ssdb sharding proxy,希望有機會可以指導一下是不是有設計缺陷或瑕疵
    http://matishsiao.blogspot.tw/2015/09/ssdb-sharding-proxy.html
    會有這個專案的原因是google computer engine 只支援最大1TB的硬碟,才衍生出這個專案 Reply
    @MatisHsaio: 我大致看了你的介绍, 你的实现方式是遍历所有节点列表. 但我建议在 proxy 上实现 sharding table, 根据 key range 把不同区间的数据分到不同的节点上. Reply
    @MatisHsaio: 已经看到 github 地址了, 我会告知其它用户, 大家一起来试用. Reply
    @MatisHsaio: 多谢! 能否提交到 github 上? Reply
    @ideawu: 歡迎提交到github,我有想過用key range分散,但是會遇到如果分配到node容量滿了
    會有很多問題要處理,所以才會使用遍尋加熱點的方式處理 Reply
  • ssdb 已经不支持zset( zname, key, score, val) 这种方式了么?

    记得之前版本好像可以允许在zset的记录中除了score还可以存放 value信息,现在貌似只能使用 zset(zname, key, score)了。出于什么考虑呢?

    使用背景:项目中对zrscan有需求,想在value字段保存一些信息。

    来自: https://github.com/ideawu/ssdb/issues/766 Reply
    @grapeisme: 你好, zset 不支持这个需要, 你可以利用 zset + kv 或者 zset + hash 来实现. Reply
  • ssdb有没有支持sadd smembers sismember这一系列命令字的计划呀? Reply
  • Redis一个实例缺省可以有16个database,可以保存到不同database实例中。请问ssdb有相关实现吗。不然不同业务间,键值冲突的可能性太大了。 Reply
    @y18: 没有多数据库,这个影响不大了,你可以在key前加前缀来实现,比如:db1:key, db2:key, db3:key。
    话说实现这个功能也不难 @ideawu Reply
    @cjfeii: 谢谢。 Reply
  • 有一个小白的问题,SSDB是否会把数据持久化到磁盘呢? Reply
    @David Chan: SSDB 会持久化数据, 这是准确无误的, 是明确声明的, 有经过验证的! Reply
  • 博主,您好!这里有个问题想请教下,是有关zset容器中zrank和zrange操作的性能的。
    我在测试SSDB的zset的性能时,发现其zrank和zrange的性能并不好。
    经测试,发现zrank和zrange的时间复杂度为O(n),即性能与容器中key数量有关,
    但其实这个复杂度是可以优化到O(logn)的,到底是我用的接口有问题,还是目前
    的SSDB没有实现zrank和zrange的O(logn)的算法?毕竟zset最主要的用途就是获取
    和排名有关的信息,所以这块的算法优化还是很重要的。希望博主能解答下,谢谢! Reply
    @asdfping: 我做了一个排行榜的实现,几乎是性能与key数量无关的,不过我没有开源,你只能在我的服务器上在线测试一下。 Reply
    @asdfping: 你说的没错, zrank 和 zrange 复杂度是 O(n), 这个 ssdb 无法改进. 你可以换种思路来实现你的功能, 例如, 如缓存最重要的 top 100 排行榜. Reply
    @ideawu: 哦,那就是说我的理解没错了,还以为是测试方法的问题。关于排行这块的话我再另想办法优化吧。 Reply
    @asdfping: ssdb 确实有这个问题,其实是 leveldb的问题;
    看redis 上 skiplist ,每个level到下个有个步长,可以直接计算 排序的问题。
    leveldb就没看到, 真想加一个!! Reply
  • 这个benchmark的结果有几个问题问一下作者:

    1)有具体配置吗?(主要是硬件配置特别是是否有SSD)

    2)直观告诉我比较基于内存的redis,ssdb和redis性能应该差距很大即使是ssdb用上了SSD,除非数据不够很多时候都走了缓存或者有一些别的瓶颈。

    3) 是用的ssdb-bench比较redis和ssdb吗?我用ssdb-bench (最新的github代码)刚才测试redis 3.03的时候set失败 (无具体出错信息),还没有查看代码哪儿的问题。

    多谢。 Reply
  • 博主,您好!请问SSDB的官方API支持异步访问吗?从目前我看的官方API来看,似乎只有同步的访问方式。虽然在cpp客户端有异步的API,但那个第三方的所谓的异步API,其实还是封装了官方的同步访问的API,感觉并没有真正实现异步,这里可否探讨下? Reply
    @asdfping: 官方的api没有异步接口. 说实话, 所谓的异步只是编程语言的语法糖和库封装, 你也可以自己封装. Reply
    @ideawu:
    好的,谢谢!现在通过修改官方的api,初步实现了异步,确实可以的。 Reply
    @asdfping:你是怎么改的呢 我们也想用通知模式 而不是轮询 Reply
    @呱呱: 官方api都是采用同步阻塞的方式访问SSDB,我这边将同步方式中的两个过程:即发送命令和接收数据分拆为两个异步接口,然后采用主循环,不断地判断是否有数据接收。有点像这样:
    while(true)
    {
    send(cmd); //发命令
    Event();//判断是否有数据接收,这里面的过程是非阻塞的。
    }
    其中发送命令和接收数据的逻辑作者都写好了,把这个逻辑理一下,改为非阻塞接口,就差不多了。当然这个过程还不是太完善,我也是刚刚学习这种做法,有更好的方法可以交流下。 Reply
    @asdfping: “即发送命令和接收数据分拆为两个异步接口,然后采用主循环,不断地判断是否有数据接收。” 这样岂不是要不停的轮询,性能如何呢?可不可以做到有数据来才返回那种呢,那种也是可以异步的,不过不是立即返回,有个长等待的过程~
  • 请问何时支持非key-value类型数据写入可以设置超时时间?
    不知道现在是不是已经支持了,自动超时机制在应用中很重要。 Reply
  • 请教下有和redis相关的优劣对比介绍么 Reply

« [2][3][4][5][6][7][8][9][10] » 6/19

Leave a Comment