2013-03-22

SSDB数据库的大规模应用

Views: 33489 | 13 Comments

SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB作为存储引擎, 支持T级别的数据, 同时支持类似Redis中的zset和hash等数据结构, 在同时需求高性能和大数据的条件下, 作为Redis的替代方案.

分布式

因为SSDB的最初目的是替代Redis, 所以SSDB会经常和Redis进行比较. 我们知道, Redis是经常的"主-从"架构, 虽然可以得到负载均衡以及数据跨地域备份的功能, 但无法实现高可用性. 考虑这种情况, Redis的主和从分别在两个IDC机房, 当主所在的机房出现故障时, 整个服务其实就相当于停止了. 因为所有写操作都失败, 而应用一般不会实现自动降级服务.

而SSDB支持"双主"架构(SSDB分布式架构: https://github.com/ideawu/ssdb/wiki/Replication), 两个或者更多的主服务器. 当其中一部分出现故障时, 剩余的主服务器仍然能正常接受写请求, 从而保证服务正常可用, 再将DNS解析修改之后, 就能在机房故障后立即恢复100%可用.

实际应用

SSDB最先在"IT牛人博客聚合网站"进行尝试应用, 接着在360游戏部门得到大规模应用, 目前支撑的数据量已经达到数百G. 这些应用最初使用Redis, 迁移到SSDB的成本非常低, 涉及的代码改动极小.

你可以拿SSDB的PHP API文档Redis的PHP API文档进行对比.

SSDB开源数据库项目地址: https://github.com/ideawu/ssdb

Related posts:

  1. SSDB 双主(多主)同步模式现在 beta
  2. SSDB 已经迁移到 github
  3. SSDB常规升级-更新到leveldb-1.14.0, Windows安装包
  4. SSDB增加hlist, zlist命令
  5. SSDB 支持 TTL 过期机制
Posted by ideawu at 2013-03-22 11:26:09 Tags: ,

13 Responses to "SSDB数据库的大规模应用"

  • 编译好的rocksdb,怎么启动呢?或者说就不用启动就能用?有家java的连接方式吗?只要ge/put就行 Reply
  • 对照redis在写入磁盘时候的天然缺陷,ssdb有类似的问题吗?
    http://www.iteye.com/topic/1124999 Reply
    @Leon: Hi, ssdb不会有类似的问题, 因为ssdb使用的LevelDB存储引擎对这方面做了优化. Reply
  • 第一次启动后总是意外关闭,再次启动又可以了,不知道什么问题,还有就是如何启动守护进程呢?我是多线程post到php然后插入到ssdb Reply
    @coo:

    1. 请问你第一次启动ssdb意外关闭, 是在一个全新的目录启动的吗? 如果你方便, 能否把log调到debug级别, 然后在新环境中第一次启动ssdb, 看有没有出错信息.

    2. ssdb-server -d ssdb.conf 的 -d 参数即可启动为守护进程. Reply
  • 在php中如果运行完成后不调用 $ssdb->close(); 会有什么后果吗?还是会自动断开连接?有没有连接池机制呢? Reply
    @Leon: 对于 Web 应用的 PHP(Apache mod_php, 或者 php cgi/fastcgi), 不调用 close() 也不会有任何问题. 如果是长时间运行的 PHP 程序, 应该在确定不使用连接之后将连接关闭. Reply
  • 在centOS6.0 64位机器上编译不成功:
    g++ -o ../ssdb-server ssdb.o t_kv.o t_hash.o t_zset.o proc.o link.o backend_dump.o backend_sync.o repl.o slave.o util/log.o util/fde.o util/config.o util/bytes.o -DNDEBUG -I./ -I../deps/leveldb-1.8.0/include -static -L../deps/leveldb-1.8.0 -lleveldb -lpthread ssdb-server.cpp
    /usr/bin/ld: cannot find -lpthread
    collect2: ld returned 1 exit status
    make[1]: *** [all] Error 1
    make[1]: Leaving directory `/root/soft/ssdb-master/src’
    make: *** [all] Error 2
    [root@drawdb2 ssdb-master]# uname -a
    Linux drawdb2.guesswhat.com 2.6.32-358.2.1.el6.x86_64 #1 SMP Wed Mar 13 00:26:49 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux Reply
    @Leon: 解决了,需要安装glibc-static Reply
    @Leon: Makefile 里给 g++ 加了 -static 选项, 如果没有 glibc-static, 可以把这个选项去掉. 未来让修改 Makefile, 使其更智能一些. Reply
  • SSDB适合用于二进制数据的存储吗?比如存储图片,以便在多台服务器之间共享数据。 Reply
    @Leon: SSDB适合存储二进制数据, 因为SSDB(以及LevelDB), 所有的数据都是二进制数据(字节数组). Reply

Leave a Comment