SSDB的介绍

最近在做一个互联网金融项目的时候用到了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
  • 特别适合存储大量集合数据,支持丰富的数据结构: key-value,key-map,key-zset,key-list.
  • 使用 Google LevelDB 作为存储引擎
  • 支持主从同步,多主同步
  • 客户端支持 PHP,C++,Python,Lua,Java,Ruby,nodejs,Go 等
  • 内存占用极少
  • 图形化界面管理工具(phpssdbadmin)
SSDB和Redis比较

我们知道,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.

相关文章

文章浏览阅读752次。关系型数据库关系型数据库是一个结构化的...
文章浏览阅读687次,点赞2次,收藏5次。商城系统中,抢购和秒...
文章浏览阅读1.4k次。MongoTemplate开发spring-data-mongodb...
文章浏览阅读887次,点赞10次,收藏19次。1.背景介绍1. 背景...
文章浏览阅读819次。MongoDB连接失败记录_edentialmechanisn...
文章浏览阅读470次。mongodb抽取数据到ES,使用ELK内部插件无...