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

433 Responses to "SSDB"

  • 为什么我测试的结果,set比redis慢很多呢?已经关闭了log
    redis
    -bash-3.2$ ./redis-benchmark -p 6379 -t set,get -q
    SET: 18796.99 requests per second
    GET: 18939.39 requests per second

    ssdb
    -bash-3.2$ ./redis-benchmark -p 8888 -t set,get -q
    SET: 9718.17 requests per second
    GET: 17825.31 requests per second Reply
  • 您好,想再咨询个问题,由于hgetall读取大数据量的时候,无法读出,这样导致很多业务无法开展,因为key的值是无法知道的.还有对于map类型,淘汰机制也不好去做.请您解答下,谢谢 Reply
    @xiezhaohui: 用 hscan 读取一个范围的 key 呀 Reply
    @xiezhaohui: map/hash 的淘汰, 目前没有优雅的方法, 需要你自己在应用层去实现. Reply
    @xiezhaohui: 计算机领域是不推荐一次把全部数据传输完再操作的. 数据也是一样, 也推荐一次把所有数据全部读取再处理, 而应该采用分段处理的方式. 你可以用 hscan 来遍历数据, 一次只处理 100 条: http://ssdb.io/docs/zh_cn/php/content.html#m-hscan Reply
  • hgetall数据量大,完全读不出来.不能返回一个句柄来遍历啊? Reply
  • 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

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

Leave a Comment