概述
| 1 | SSDB 是一个 C++ 开发的 NoSQL 数据库, 支持Key-value/Key-hashmap/zset(sorted set)等数据结构,十分适合存储数亿条级别的列表、排序表等集合数据,是redis的替代与增强方案。 | 
SSDB特性
- 替代 Redis 数据库, Redis 的 100 倍容量
- LevelDB 网络支持, 使用 C/C++ 开发
- Redis API 兼容, 支持 Redis 客户端
- 适合存储集合数据, 如 list, hash, zset…
- 客户端 API 支持的语言包括: C++, PHP, Python, Java, Go
- 持久化的队列服务
- 主从复制, 负载均衡
SSDB与redis区别
| 1 | redis数据是全部存储在了内存中,而SSDB绝对优势是将数据写入了硬盘,同时也支持配置部分内存用于缓存热数据。 | 

SSDB数据类型
| 1 | KV(Key-value)数据类型KV 数据类型主要用于存储离散的、之间没有关系或者关系被忽略 的大数据, 如图片文件, 大段文本等. 一般 KV 类型都可以被 Hashmap 替代, 但KV会比Hashmap性能高一些. | 
部署
编译安装
| 1 | yum groupinstall "Development tools" -y | 
故障解决:
| 1 | 如果出现如下错误: | 
启动和停止
| 1 | # 启动主库, 此命令会阻塞住命令行 | 
SSDB启动脚本(随操作系统自启动)
| 1 | 假设你已经安装 SSDB 在默认的 /usr/local/ssdb 目录, 把 tools/ssdb.sh 脚本放到 /etc/init.d 目录下. | 
| 1 | 将 /data/ssdb_data/test/ssdb.conf 修改为你的 SSDB 配置文件的路径. 如果你有多个 SSDB 实例, 那么把它们写在一行, 用空格来分隔, 例如: | 
| 1 | chkconfig --add ssdb | 
检查ssdb版本
| 1 | [root@gserver1 ssdb]# /usr/local/ssdb/ssdb-server -v | 
配置
| 1 | 注:SSDB 的配置文件使用一个 TAB 来表示一级缩进, 不要使用空格来缩进, 无论你用1个, 2个, 3个, 4个, 5个, 6个, 7个, 8个或者无数个空格都不行! | 
| 1 | 重要:一定要记得修改你的 Linux 内核参数, 关于 max open files(最大文件描述符数)的内容, 请参考 [1]. 否则, 你会在 log.txt 看到 Too many open files 类似的错误, 或者在客户端看到 Connection reset by peer 错误. | 
CentOS7解决“打开文件数max open files”配置
| 1 | 在ssdb.conf中最后加入如下代码 | 
监听网络端口
| 1 | work_dir = ./var | 
只读模式
| 1 | server: | 
SSDB 可以工作在只读模式下, 在只读模式下, 所有的写操作命令都会被服务端拒绝:
| 1 | ssdb 127.0.0.1:8888> set a 2 | 
日志配置与分析
| 1 | logger: | 
日志解读
| 1 | 一般, 建议你将 logger.level 设置为 debug 级别. | 
请求处理
| 1 | 2014-06-18 11:01:40.335 [DEBUG] serv.cpp(395): w:0.393,p:5.356, req: set a 1, resp: ok 1 | 
- w:0.393请求的排队时间, 毫秒
- p:5.356请求的处理时间, 毫秒
- req:...请求内容
- resp:...响应内容
找出慢请求 , 命令是:
| 1 | tail -f log.txt | grep resp | grep '[wp]:[1-9][0-9]\{0,\}\.' | 
这些命令用于找出排队时间, 或者处理时间大于等于 1 毫秒的请求.
找出大于 10 毫秒的请求:
| 1 | cat log.txt | grep resp | grep '[wp]:[1-9][0-9]\{1,\}\.' | 
找出大于 100 毫秒的请求:
| 1 | cat log.txt | grep resp | grep '[wp]:[1-9][0-9]\{2,\}\.' | 
SSDB 在工作中
ssdb-server 会每隔 5 分钟输出这样的一条 log
| 1 | 2014-06-18 11:18:03.600 [INFO ] ssdb-server.cpp(215): ssdb working, links: 0 | 
- links: 0当前的连接数
LevelDB 配置
| 1 | leveldb.cache_size 内存缓存大小, 单位 MB | 
内存占用
| 1 | 一个 ssdb-server 实例占用的内存瞬时(有可能, 而且即使达到, 也只是持续短时间)最高达到(MB): | 
设置内存上限
| 1 | 很抱歉, SSDB 无法设置内存占用上限. SSDB占用的内存大小, 和下列因素相关: | 
命令行工具ssdb-cli使用
| 1 | 连接到SSDB服务器 | 
输入 ‘h’, 然后按回车查看帮助信息. 下面是操作的演示:
| 1 | ssdb 127.0.0.1:8888> set k 1 | 
SSDB命令列表
参考:立即转到-SSDB命令
同步和复制的配置与监控
一主多从
server1 【IP:192.168.56.101】
| 1 | server: | 
server2
| 1 | replication: | 
server3
| 1 | replication: | 
多主多从
server1【IP:192.168.56.101】
| 1 | server: | 
server2
| 1 | server: | 
server3
| 1 | replication: | 
单台服务器包含n个实例
在一组一共包含 n 个实例的 SSDB 实例群中, 每一个实例必须 slaveof 其余的 n-1 个实例.
| 1 | replication: | 
监控同步状态
| 1 | [root@gserver1 ssdb]# ./ssdb-cli -h 192.168.56.101 -p 32121 | 
关于status状态
| 1 | DISCONNECTED: 与 master 断开了连接, 一般是网络中断或者是配置文件限制了访问. | 
判断同步状态–是否正常
| 1 | 对于 master, binlogs.max_seq 是指当前实例上的最新一次的写(写/更新/删除)操作的序号, replication.client.last_seq 是指已发送给 slave 的最新一条 binlog 的序号. | 
info cmd
| 1 | ssdb 192.168.56.101:32121> info cmd | 
对数据库进行强制收缩
| 1 | ssdb 192.168.56.101:32121> compact | 
SSDB备份(导入导出)
使用ssdb-cli
导出
| 1 | 导出整个数据库 | 
| 1 | 按照key区间导出数据库(导出/导入) | 
导入
| 1 | ssdb 192.168.56.101:32121> import backup.ssdb | 
使用ssdb-dump命令
备份导出
| 1 | 用法:/usr/local/ssdb/ssdb-dump ip port output_folder | 
恢复
| 1 | 将 output_folder 目录拷贝到你的服务器上面, 你可能需要将它改名. 然后修改你的 ssdb.conf 配置文件, 将 work_dir 指向output_folder 目录, 然后重启 ssdb-server. | 
从redis迁移数据到SSDB
| 1 | SSDB源码包中,Tools目录下的“ redis-import.php ” PHP 脚本可以用来将 Redis 服务器上的数据, 拷贝到 SSDB 服务器上. | 
将现有的LevelDB数据导入SSDB
| 1 | SSDB 提供了 leveldb-import 工具来将 LevelDB 的数据导入到 SSDB 数据库中. 该工具的使用非常简单 | 
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2017/09/26/SSDB-NoSQL数据库部署/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
 
		