最近在做一个互联网金融项目的时候用到了ssdb数据库,查阅了好多资料,把一些网络上整理的资料和项目中的使用情况放到这儿与大家共享。
部分内容引自如下博客:http://www.ideawu.net/blog/ssdb、http://www.cnblogs.com/shanyou/p/3496163.html。
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 的主要特点:
- 支持 zset,map/hash,list,kv 数据结构,可替代 Redis@H_502_55@
- 特别适合存储大量集合数据,支持丰富的数据结构: key-value,key-map,key-zset,key-list.@H_502_55@
- 使用 Google LevelDB 作为存储引擎@H_502_55@
- 支持主从同步,多主同步@H_502_55@
- 客户端支持 PHP,C++,Python,Lua,Java,Ruby,nodejs,Go 等@H_502_55@
- 内存占用极少@H_502_55@
- 图形化界面管理工具(phpssdbadmin)@H_502_55@
我们知道,Redis是经常的”主-从”架构,虽然可以得到负载均衡以及数据跨地域备份的功能,但无法实现高可用性. 考虑这种情况,Redis的主和从分别在两个IDC机房,当主所在的机房出现故障时,整个服务其实就相当于停止了. 因为所有写操作都失败,而应用一般不会实现自动降级服务.而SSDB支持”双主”架构(SSDB分布式架构:https://github.com/ideawu/ssdb/wiki/Replication),两个或者更多的主服务器. 当其中一部分出现故障时,剩余的主服务器仍然能正常接受写请求,从而保证服务正常可用,再将DNS解析修改之后,就能在机房故障后立即恢复100%可用.SSDB 被开发和开源出来后,已经在生产环境经受了多年的考验,SSDB最先在”IT牛人博客聚合网站“进行尝试应用,接着在360游戏部门得到大规模应用,目前支撑的数据量已经达到数百G. 这些应用最初是使用Redis的,迁移到SSDB的成本非常低,涉及的代码改动极小.
SSDB 数据类型
SSDB 支持三种数据类型,别分是 KV(key-value),Hashmap(map),Zset(sorted set). 三种数据类型处于不同的命名区间,所以不同类型的数据可以起相同的名字,但不建议这么做.
KV
KV 数据类型⽀支持基本的 set(),get(),del(),incr() ⼏几种操作. KV 数据类型主要⽤用于存储离散的,之间没有关系(或者关系被忽略)的大数据,如图片文件,大段文本等. 一般 KV 类型都可以被 Hashmap 替代,但 KV 会比 Hashmap 性能高一些.
key | value |
K1 | VC |
K2 | VX |
K3 | VY |
Hashmap
Hashmap 类型和 KV 功能相似,可⽤用于存储⼤大体积的数据,但不同的数据项在业务上处于某个集合. 并且,Hashmap 维护了⼀一个集合⼤大⼩小的计数.
Hashmap 中的数据项是 Key-value 的键值对,并且按 Key 的字节数组顺序进⾏行排序.如果数据需要经常被遍历,则应该使⽤用 Hashmap 来替代 KV. 对于只添加,不更新和删除的有排序需求的数据集合,可以⽤用 Hashmap 来存储⽽而不需要使用 Zset,因为 Hashmap 会比Zset 性能高一些.
name | key | value |
h | k1 | vb |
h | k2 | va |
h | k3 | vc |
Key 是按字节顺序排序的.
Zset
Zset 是⼀一种根据数据项的权重(score,整数值)进⾏行排序的集合,Zset 集合中的数据项是唯⼀一,\不可重复的. Zset 可以理解为关系数据中只有 ID 主键和整数 score 字段⼀一共两个字段的表.因为 Zset 的排序特性,所以可⽤用来存储排序列表,如商品按价格的排序列表,商品按上架日期的排序列表,等等. 每⼀一个排序列表对应⼀一个 Zset 集合.Zset 不能⽤用来存储⼤大体积的数据,因为它是⼀一种"索引"数据类型,被索引的东⻄西(集合中的数据项)只能是 200 字节以内的字节数组(包括字符串).
name | key | value |
z | k2 | 0 |
z | k3 | 1 |
z | k1 | 2 |
Key 是按 score(64 位整数)的⼤大⼩小排序的.
安装和运行
SSDB 的建议安装方式是源码编译安装,建议运行环境是主流 Linux 发⾏行版. 远程 SSH 登录你的服务器,然后用下面的命令下载,编译,安装和运行:
$ wget --no-check-certificate https://github.com/ideawu/ssdb/
archive/master.zip
$ unzip master
$ cd ssdb-master
$ make
$ #optional,install ssdb in /usr/local/ssdb
$ sudo make install
# start master
$ ./ssdb-server ssdb.conf
# or start as daemon
$ ./ssdb-server -d ssdb.conf
# ssdb command line
$ ./tools/ssdb-cli -p 8888
# stop ssdb-server
$ kill `cat ./var/ssdb.pid`
SSDB 默认安装在 /usr/local/ssdb目录下. ssdb-server 是服务器的程序,ssdb-cli 是命令行客户端.在使用自带的 ssdb.conf 配置⽂文件时,SSDB生成的日志文件按体积进行分割,仅此⽽而已. 所以,你需要编写自己的 crontab 进⾏行⽇日志压缩和定期清理.如果出现服务器掉电,kernel panic 等系统故障,在系统重新启动之后,你需要手动删除 ssdb的 PID 文件 ssdb.pid,然后才能启动 ssdb-server.
原文链接:https://www.f2er.com/nosql/203724.html