文档章节

SSDB:高性能数据库服务器

IT1693
 IT1693
发布于 2014/06/26 12:58
字数 1470
阅读 47
收藏 1

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 被开发和开源出来后, 已经在生产环境经受了3个季度的考验,SSDB最先在”IT牛人博客聚合网站“进行尝试应用, 接着在360游戏部门得到大规模应用, 目前支撑的数据量已经达到数百G. 这些应用最初是使用Redis的, 迁移到SSDB的成本非常低, 涉及的代码改动极小.

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

作者博客地址: http://www.ideawu.net/blog/ssdb

安装

SSDB 的建议安装⽅方式是源码编译安装, 建议运⾏行环境是主流 Linux 发⾏行版. 远程 SSH 登录你的服务器, 然后⽤用下⾯面的命令下载, 编译, 安装和运⾏行:

$ sudo wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip

$ sudo unzip master

$ cd ssdb-master

$ sudo make

$ #optional, install ssdb in /usr/local/ssdb

$ sudo make install

# start master

$ sudo ./ssdb-server ssdb.conf

# or start as daemon

$ sudo ./ssdb-server -d ssdb.conf

# ssdb command line

$ sudo ./ssdb-cli -p 8888

# stop ssdb-server

$ sudo kill `cat ./var/ssdb.pid`

SSDB 默认安装在 /usr/local/ssdb ⺫⽬目录下. ssdb-server 是服务器的程序, ssdb-cli 是命令⾏行客户端.

SSDB配置文件【http://www.ideawu.net/blog/archives/733.html

SSDB  附带的 ssdb.conf 你不用修改便可以使用. 如果你要高度定制, 还是需要修改一些配置的. 下面做介绍. SSDB 的配置文件是一种层级 key-value 的静态配置文件, 通过一个 TAB 缩进来表示层级关系. 以 ‘#’ 号开始的行是注释. 标准的配置文件如下:

# ssdb-server config 
# MUST indent by TAB!

# relative to path of this file, directory must exists 
work_dir = ./var 
pidfile = ./var/ssdb.pid

server: 
        ip: 127.0.0.1 
        port: 8888 
        # bind to public ip 
        #ip: 0.0.0.0 
        # format: allow|deny: all|ip_prefix 
        # multiple allows or denys is supported 
        #deny: all 
        #allow: 127.0.0.1 
        #allow: 192.168

replication: 
        slaveof: 
                # to identify a master even if it moved(ip, port changed) 
                # if set to empty or not defined, ip:port will be used. 
                #id: svc_2 
                # sync|mirror, default is sync 
                #type: sync 
                #ip: 127.0.0.1 
                #port: 8889

logger: 
        level: info 
        output: log.txt 
        rotate: 
                size: 1000000000

leveldb: 
        # in MB 
        cache_size: 500 
        # in KB 
        block_size: 32 
        # in MB 
        write_buffer_size: 64 
        # in MB 
        compaction_speed: 1000 
        # yes|no 
        compression: no

work_dir: ssdb-server 的工作目录, 启动后, 会在这个目录下生成 data 和 meta 两个目录, 用来保存 LevelDB 的数据库文件. 这个目录是相对于 ssdb.conf 的相对路径, 也可以指定绝对路径.

server: ip 和 port 指定了服务器要监听的 IP 和端口号. 如果 ip 是 0.0.0.0, 则表示绑定所有的 IP. 基于安全考虑, 可以将 ip 设置为 127.0.0.1, 这样, 只有本机可以访问了. 如果要做更严格的更多的网络安全限制, 就需要依赖操作系统的 iptables.

replication: 用于指定主从同步复制. slaveof.ip, slaveof.port 表示, 本台 SSDB 服务器将从这个目标机上同步数据(也即这个配置文件对应的服务器是 slave). 你可以参考 ssdb_slave.conf 的配制.

logger: 配置日志记录. level 是日志的级别, 可以是 trace|debug|info|error. output 是日志文件的名字, SSDB 支持日志轮转, 在日志文件达到一定大小后, 将 log.txt 改名, 然后创建一个新的 log.txt.

leveldb: 配置 LevelDB 的参数. 你一般想要修改的是 cache_size 参数, 用于指定缓存大小. 适当的缓存可以提高读性能, 但是过大的缓存会影响写性能.

在使⽤用⾃自带的 ssdb.conf 配置⽂文件时, SSDB ⽣生成的⽇日志⽂文件按体积进⾏行分割, 仅此⽽而已. 所以, 你需要编写⾃自⼰己的 crontab 进⾏行⽇日志压缩和定期清理. 
如果出现服务器掉电, kernel panic 等系统故障, 在系统重新启动之后, 你需要⼿手动删除 ssdb的 PID ⽂文件 ssdb.pid, 然后才能启动 ssdb-server.另外, 你可以参考下⾯面的做法, 在系统启动和关机时, 启动和关闭 ssdb-server: 
# /bin/sh 
# 
# chkconfig:345 98 98 
# description: SSDB is a fast NoSQL database for storing big list of billions of elements 
# processname:ssdb

case "$1" in 
  'start') 
    /usr/local/ssdb/ssdb-server -d /usr/local/ssdb/ssdb.conf 
    echo "ssdb started." 
    ;; 
  'stop') 
    kill `cat /usr/local/ssdb/var/ssdb.pid` 
    echo "ssdb stopped." 
    ;; 
  'restart') 
    kill `cat /usr/local/ssdb/var/ssdb.pid` 
    echo "ssdb stopped." 
    sleep 0.5 
    /usr/local/ssdb/ssdb-server -d /usr/local/ssdb/ 
ssdb.conf 
    echo "ssdb started." 
    ;; 
  *) 
    echo "Usage: $0 {start|stop|restart}" 
    exit 1 
  ;; 
esac

exit 0

把⽂件保存为 /etc/init.d/ssdb.sh(需要 root 权限), 然后执⾏: 
chmod ugo+x /etc/init.d/ssdb.sh

把 ssdb加入chkconfig,并设置开机启动。

[azureuser@mono init.d]$ sudo chkconfig --add ssdb.sh 
[azureuser@mono init.d]$ chkconfig ssdb.sh on

启动、停止的命令如下:

[azureuser@mono init.d]$ sudo service ssdb.sh stop 
ssdb stopped. 
[azureuser@mono init.d]$ sudo service ssdb.sh start 
ssdb 1.6.7 
Copyright (c) 2012-2013 ideawu.com

ssdb started.

项目代码中已经加入c# 的api,https://github.com/ssdb/dotnetssdb,在Mono上跑了一下:

[azureuser@mono dotnet]$ sudo dmcs Client.cs Link.cs Program.cs -out:ssdbClient.exe 
[azureuser@mono dotnet]$ mono ssdbClient.exe 
ok 
1 
ok 
100 
99 
----------------- 
1 kvs 
    a: 99 
----------------- 
0 kvs 
----------------- 
0 kvs 
0


© 著作权归作者所有

共有 人打赏支持
IT1693
粉丝 1
博文 19
码字总数 27104
作品 0
石景山
系统管理员
私信 提问
高性能NoSQL数据库--SSDB

SSDB 是一个 C/C++ 语言开发的高性能 NoSQL 数据库, 支持 zset(sorted set), map(hash), kv, list 等数据结构, 用来替代或者与 Redis 配合存储十亿级别列表的数据. SSDB 在 QIHU 360 被大量使...

ideawu
2013/01/08
23.3K
4
SSDB: Redis 的替代?

SSDB 360 的 ideawu开发的 NOSQL 数据库,其底层存储引擎基于 LevelDB 实现,接口支持类似于 Redis,完全兼容 Redis 的协议,支持 list, has, zset 等数据结构。 与 Redis 相比较,SSDB 利用...

wangdy
2016/09/01
88
0
类似redis的高性能nosql​数据库--LedisDB

LedisDB 是一个参考ssdb,采用go实现,底层基于leveldb,类似redis的高性能nosql数据库,提供了kv,list,hash以及zset数据结构的支持。 最开始源于ssdb,在使用了一段时间之后,因为兴趣的原...

siddontang
2014/05/14
3.3K
0
SSDB 1.8 发布 ,高性能 NoSQL 数据库

SSDB 1.8 发布 ,该版本包含如下新特性: - Replication supports AUTH(2014-12-01) - Sync qset operations(2014-11-05) - Add dbsize command(2014-11-02) - Include sync clients' stats ......

oschina
2014/12/05
4K
10
SSDB 再添重磅用户: 中通快递

近日, 中通快递成为 SSDB 数据库的用户. 中通快递是中国最有影响力的物流快递企业之一. 中通快递使用 SSDB 存储数以亿计的订单数据. SSDB 支持着其物流业务中的网点派单等重要环节. SSDB 近期...

ideawu
2014/06/19
4.5K
25

没有更多内容

加载失败,请刷新页面

加载更多

windows下让 jar 在后台运行的办法

windows下 运行 java jar 不出现 命令行 窗口 新建一个披处理 run.bat,内容如下 @echo off start javaw -jar xx.jar exit 双击运行即可。...

glen_xu
12分钟前
1
0
jdk1.8 lambda stream 指定的对象属性进行去重

原因:因为Stream提供的distinct()方法只能去除重复的对象,无法根据指定的对象属性进行去重,可以应付简单场景。 解决方案: //去重,共同信息保存到bizPledgeSupplierVOs里bizPledgeSupp...

INSISTQIAO
14分钟前
0
0
vue nextTick深入理解---vue性能优化、DOM更新时机、事件循环机制

定义[nextTick、事件循环] nextTick的由来: 由于vue的数据驱动视图更新是异步的,即修改数据的当下,视图不会立即更新,而是等同一事件循环中的所有数据变化完成之后再统一进行视图更新。...

JamesView
23分钟前
1
0
常用汉字编码

GB2312 仅包含大部分的常用简体汉字,但已经不能适应现在的需要; GB13000 由于GB2312的局限性,国家标准化委员会制定了GB13000编码; 但由于当时的硬件和软件都已经支持了GB2312,而GB13000...

晨猫
25分钟前
1
0
纳尼?我的Gradle build编译只要1s

https://juejin.im/post/5c00ec39e51d4555ec0394f6

SuShine
26分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部