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

433 Responses to "SSDB"

  • 如何把ssdb中部分数据导出成文件保存,有需要时再把它导入ssdb进行利用。
    我们一般做日志时,需要把历史日志从SSD硬盘中导出成tar包,放入sata硬盘中保存,如果需要时,再把它导入数据库进行分析。
    不知SSDB如何实现? Reply
    @wgm.china: Hi, ssdb 自带的 ssdb-dump 工具可以用来备份数据. Reply
    @ideawu: 我看了一下ssdb-dump工具只能备份整个数据库,不能够备份其中一部分zset.hset和kv值。
    现阶段我们需要把历史的日志备份出来,实时的日志保留下来,需要分析的时候再导入。
    我想了解一下,ssdb支持文本格式的数据批量导入吗?比如redis的pipe脚本批量导入 Reply
    @wgm.china: 也希望ssdb有库的概念,可以按库进行备份、恢复、同步 Reply
    @wgm.china: 这种情况可以写一些脚本进行导入导出, 比如用 PHP 来编写, 性能也能达到 5000 次每秒. 用 C++ 来编写的话, 可以达到 20000, 不需要 pipe 的帮助, 完全串行调用. Reply
    我在mac book上安装SSDB1.6.7,编译报错:
    g++ -DNDEBUG -D__STDC_FORMAT_MACROS -Wall -O2 -Wno-sign-compare -I "/opt/gcs_setup/common/ssdb/ssdb-master/deps/leveldb-1.14.0/include" -I "/opt/gcs_setup/common/ssdb/ssdb-master/deps/jemalloc-3.3.1/include" -c serv.cpp
    serv.cpp:31:12: fatal error: ‘unordered_map’ file not found
    #include <unordered_map>
    ^
    1 error generated. Reply
    @wgm.china: Hi, 最新的代码的编译脚本已经做了判断, 应该不用修改代码就能在旧版本的 Mac 下编译了. Reply
    @wgm.china:

    3. 再执行一下 g++ -v, 把输出发给我.

    多谢. Reply
    @wgm.china: Hi, 因为我的 xcode, 升级了, 没法用你相同的环境验证, 麻烦你能帮忙做一下这些验证吗?

    1. 修改 src/Makefile 文件, 将里面的 g++ 替换成 clang++, 看是否能编译通过?

    2. 另外, 按 https://github.com/ideawu/ssdb/issues/105#issuecomment-30501958 这个方法再验证一下. Reply
    @ideawu: 修改了还是报错
    @ideawu: g++ -v :
    sh-3.2# g++ -v
    Configured with: –prefix=/Applications/Xcode.app/Contents/Developer/usr –with-gxx-include-dir=/usr/include/c++/4.2.1
    Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
    Target: x86_64-apple-darwin12.5.0
    Thread model: posix
    @wgm.china: Hi, 麻烦你先按这个方法修改, 我会改进一下在 mac 下的编译脚本, 多谢! https://github.com/ideawu/ssdb/issues/105#issuecomment-30501958 Reply
    @ideawu: 修改serv.cpp 成功
    @wgm.china: Hi, 你的 Mac 上的 Xcode 4.x 吧? 请升级到 5.x, SSDB 对 XCode 4.x 支持有问题. Reply
    @ideawu: 我升级xcode 5.02,后make还是报错,不过报错已经不一样了:
    tup/common/ssdb/ssdb-master/deps/leveldb-1.14.0/include" -I "/opt/gcs_setup/common/ssdb/ssdb-master/deps/jemalloc-3.3.1/include" -c serv.cpp
    serv.cpp:31:12: fatal error: ‘unordered_map’ file not found
    #include <unordered_map>
    ^
    1 error generated.
  • 您好,请问未来有计划添加全文搜索功能么。或者提供lucene,sphinx接口。我想用SSDB代替mysql,但是mysql的搜索功能却用不好 Reply
  • 例如你所说的订单场景,如何按时间列出所有订单? Reply
    @cot: 这是经典的列表数据结构模型, 可以参考这个: https://github.com/ideawu/ssdb/issues/117 Reply
  • 请问多主同步怎么设置? Reply
  • Where can I find perl api of SSDB? Reply
    @david: there is no perl api, you may use redis perl api for instead. Reply
  • 客户端set 有没有超时设置呢?有时候卡在那里不动,还有,就是有没有心跳的呢? Reply
  • 啥时候支持ttl机制? Reply
  • 在linux下比较顺利:

    测试机:2G内存 4 Intel(R) Xeon(R) CPU E31220 @ 3.10GHz

    perf.php运行结果:
    writeseq : 1.061 ms/op 92.1 MB/s writerand : 1.310 ms/op 74.6 MB/s readseq : 0.264 ms/op 370.4 MB/s readrand : 0.252 ms/op 387.4 MB/s
    writeseq : 1.136 ms/op 86.0 MB/s writerand : 1.417 ms/op 68.9 MB/s readseq : 0.260 ms/op 375.4 MB/s readrand : 0.252 ms/op 388.1 MB/s
    writeseq : 1.063 ms/op 91.8 MB/s writerand : 1.371 ms/op 71.2 MB/s readseq : 0.285 ms/op 342.3 MB/s readrand : 0.252 ms/op 386.8 MB/s Reply
    @xmxoxo: 没错, ssdb/leveldb 在 Linux 下的性能比在 Windows 下好非常多. Reply
  • PHP测试完成,PHP接口要5.4以上的,测试环境是5.3.6,所以注释了这句
    @stream_set_chunk_size($this->sock, 1024 * 1024);
    测试了perf.php两次运行结果:

    writeseq : 21.106 ms/op 4.6 MB/s
    writerand : 19.827 ms/op 4.9 MB/s
    readseq : 54.373 ms/op 1.8 MB/s
    readrand : 54.413 ms/op 1.8 MB/s



    writeseq : 18.854 ms/op 5.2 MB/s
    writerand : 21.133 ms/op 4.6 MB/s
    readseq : 53.153 ms/op 1.8 MB/s
    readrand : 53.304 ms/op 1.8 MB/s Reply
    @xmxoxo: 多谢反馈! 已经更新了 PHP 接口, 兼容 PHP 5.3. Reply
  • 在windows下终于运行成功,
    解决了两个问题:
    1. 配置文件开头不能有空格,只能是tab;
    2. port:后面要有一个空格,再跟端口,否则是0;
    明天再测PHP接口 Reply
    @xmxoxo: Hi, 你用的是 https://github.com/ideawu/ssdb-bin 里预编译的 Windows 可执行文件吗? 还是自己源码编译? 另外两个问题:

    1. 配置文件中的缩进只能是 TAB.
    2. 我测试, port: 后面可接可不接空格. Reply
    @ideawu: 我是直接使用预编译完的执行文件;
    配置文件不是下载的,是直接把内容拷下来粘进空白文件的,文件是ansi编码;
    开头是空格的时候报错是这样的:
    2013-11-26 23:41:40.389 [ERROR] config.cpp(57): invalid line(8): unexpected whit
    espace char ‘ ‘
    error loading conf file: ‘ssdb.conf’


    port后面不带空格时监听端口是0;以下是启动后的结果:

    2013-11-26 23:48:40.667 [INFO ] ssdb-server.cpp(355): server listen on: :0 Reply
    @xmxoxo: Hi, 你直接从浏览器拷贝配置文件, 可能包含了不可见的内容. 还是直接下载文件吧. Reply
    @ideawu: 好的。不过感觉读配置文件的健壮性不太够,呵。 Reply

« [11][12][13][14][15][16][17][18][19] » 18/19

Leave a Comment