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

421 Responses to "SSDB"

  • 没有quene 的qdel函数,我网站有些功能没法开发,请求作者加上此函数。 Reply
  • quene/list 不支持删除功能,请把这个函数也加上好吗? 比如加一个 qdel(‘q’,3),表示删除q队列的第三个元素。 qdel的别名函数可以是qrem,功能一样。 Reply
  • 请问SSDB适合使用在SSD硬盘上吗?

    据说SSD存在4K对齐, 写入放大等问题, 也就是SSD硬盘的寿命问题.

    请问SSDB适合使用在SSD硬盘上吗?

    SSDB(或leveldb) 会经常的整理磁盘内容吗? 就是会产生比较多的写吗?

    ————————————————–
    我想这样使用SSD硬盘(不知是否可行):

    比如我有两块SSD硬盘, 写的时候顺序写入.

    1 对于磁盘A一周内只写不删(对于需要删除的数据,在其他系统里记录哪条数据是无效的),

    2 每周将磁盘A的数据导入到磁盘B(同时去除掉无效数据)

    这样来避免写入放大.

    这样就需要在写入的时候不要带来写入放大, 不知道SSDB能否实现这一点, 有没有更好的办法来使用SSD硬盘? Reply
    @geyu: SSDB适合用于SSD盘, 用于SSD盘时性能更好, 速度更快.

    一般的应用者不需要太关心硬件的某些特殊表现, 你可以找在存储设备(偏硬件)方面比较专业的地方讨论. Reply
  • 您好,最近在将项目由Redis向SSDB迁移,但是中间遇到了一个问题,一直得不到解决:Redis支持服务器脚本Lua,其较高性能、原子性都是很不错的,但是SSDB并不对此进行支持,我只好将我需要的操作写到客户端的代码中,但是操作的数目很多(大概几万多个zset分批用batch发送),其执行的速度同Redis+lua的方案比较要慢很多。不知道您是否考虑过Redis向SSDB迁移过程中会出现这种情况?有什么比较好的解决办法吗?我对SSDB是刚刚接触,不懂之处还请指教,谢谢 Reply
    @hlwang: SSDB 不计划像 Redis 那样支持 lua 脚本. 可以加入 qq 群讨论. Reply
  • zdel无效的问题,很奇怪。

    golang官方客户端连接SSDB,
    执行ssdb.Do("zdel",zsetname,zkey)
    然后删除不掉….

    SSDB版本是1.8.0 Reply
  • 请问一下我想实现incr操作在key为空的情况下,把value设置成要加的那个数,这个能用SSDB的API实现吗?谢谢! Reply
    @maxime: 可以实现. 执行 incr no_exist_key 10 即可. Reply
  • 请问一下SSDB的incr操作,如果key不存在,会返回类型不是整数或越界这个错误。我想要实现Key不存在,直接把Value设置成要加的这个数,请问这个该怎么做呢?谢谢! Reply
  • 请问ssdb能支持redis的brpop/blpop类似的命令吗?即队列的阻塞式访问,直到队列中有内容可用。如果不支持的话,请问是否有计划增加呢?如果支持,该如何使用呢?期待您的回复,谢谢。 Reply
  • ssdb的排序,可不可以使用数值大小呢?

    先数值,再字典序. Reply
    @微博档案: zset 就是. zset 先按 score 排序, 然后按 key(member) 排序. Reply
    @ideawu: 我这边还需要一个kv关系,里面保存数据,我现在是用的hashmap。 Reply
  • 我发现ssdb的data目录增长很快,一天能从90G增长到190G,导致磁盘爆掉!!!
    —。—
    重启之后,就又回到90G了,请问这是什么原因?正常的数据增长每天应该不超过10G

    背景:我用ssdb做了一个在线kv库,每天响应6kw的请求。 Reply
    @grapeisme: 把压缩打开后, 硬盘占用可以降为实际数据的10%~20%. Reply
    @ideawu:
    当前 未 设置打开压缩。如果将压缩打开后,当前库里的数据还能被正常读取,对用户透明么? Reply
    @ideawu:
    当前为设置打开压缩。如果将压缩打开后,当前库里的数据还能被正常读取,对用户透明么? Reply
    @grapeisme: 解释: ssdb存储的数据会有其它的开销, 所以不等于实际的数据大小. 范围是等于实际, 或者实际的2倍, 在这个区间, 如果想进一步了解, 需要学习原理, 一般用户不建议这么做. 解决方案: 把压缩打开, 在ssdb.conf里配置 compression: yes Reply
    @ideawu:
    补充一下,我说的90g和190g这两个数字也是指的data目录大小,并不是实际数据大小 Reply
    @ideawu: 但是重启之后,又从190g重新回到90g正常么?如果是正常开销,感觉应该是重启运行正常之后和重启之前变化不大吧?
    比较怀疑的是是否“存储泄露”之类,临时(无用)文件在增长 Reply

« [3][4][5][6][7][8][9][10][11] » 7/18

Leave a Comment