SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB做为存储引擎, 支持T级别的数据, 同时支持相似Redis中的zset和hash等数据结构, 在同时需求高性能和大数据的条件下, 做为Redis的替代方案.html
由于SSDB的最初目的是替代Redis, 因此SSDB会常常和Redis进行比较. 咱们知道, Redis是常常的”主-从”架构, 虽然能够获得负载均衡以及数据跨地域备份的功能, 但没法实现高可用性. 考虑这种状况, Redis的主和从分别在两个IDC机房, 当主所在的机房出现故障时, 整个服务其实就至关于中止了. 由于全部写操做都失败, 而应用通常不会实现自动降级服务.git
而SSDB支持”双主”架构(SSDB分布式架构: https://github.com/ideawu/ssdb/wiki/Replication), 两个或者更多的主服务器. 当其中一部分出现故障时, 剩余的主服务器仍然能正常接受写请求, 从而保证服务正常可用, 再将DNS解析修改以后, 就能在机房故障后当即恢复100%可用.github
SSDB 被开发和开源出来后, 已经在生产环境经受了3个季度的考验,SSDB最早在”IT牛人博客聚合网站“进行尝试应用, 接着在360游戏部门获得大规模应用, 目前支撑的数据量已经达到数百G. 这些应用最初是使用Redis的, 迁移到SSDB的成本很是低, 涉及的代码改动极小.数据库
SSDB开源数据库项目地址: https://github.com/ideawu/ssdbc#
做者博客地址: http://www.ideawu.net/blog/ssdbapi
安装缓存
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
另外, SSDB 提供了预编译的 Windows 下的可执行安装包, Windows 用户能够下载后直接运行 ssdb-server.exe. Windows 下的 SSDB 依赖 cygwin, 因此附带了几个 dll 文件. 使用方式:
1. 从 https://github.com/ideawu/ssdb-bin 下载可执行文件 ssdb-server.exe 和相关 dll.
2. 从 https://github.com/ideawu/ssdb 下载 ssdb.conf 配置文件.
3. 解压, 而后从开始菜单中运行 cmd.exe.
4. 在 cmd.exe 启动后, cd ssdb-server.exe 所在的目录.
5. 执行 ssdb-server.exe ssdb.conf