当前位置: 首页 > 工具软件 > SSDB > 使用案例 >

SSDB的介绍

公良扬
2023-12-01

最近在做一个互联网金融项目的时候用到了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 性能高一些.

keyvalue
K1VC
K2VX
K3VY

Hashmap
    Hashmap 类型和 KV 功能相似, 可⽤用于存储⼤大体积的数据, 但不同的数据项在业务上处于某个集合. 并且, Hashmap 维护了⼀一个集合⼤大⼩小的计数.
Hashmap 中的数据项是 Key-value 的键值对, 并且按 Key 的字节数组顺序进⾏行排序.如果数据需要经常被遍历, 则应该使⽤用 Hashmap 来替代 KV. 对于只添加, 不更新和删除的有排序需求的数据集合, 可以⽤用 Hashmap 来存储⽽而不需要使用 Zset, 因为 Hashmap 会比Zset 性能高一些.

namekeyvalue
hk1vb
h k2va
h k3vc

Key 是按字节顺序排序的.

Zset
Zset 是⼀一种根据数据项的权重(score, 整数值)进⾏行排序的集合, Zset 集合中的数据项是唯⼀一,\不可重复的. Zset 可以理解为关系数据中只有 ID 主键和整数 score 字段⼀一共两个字段的表.因为 Zset 的排序特性, 所以可⽤用来存储排序列表, 如商品按价格的排序列表, 商品按上架日期的排序列表, 等等. 每⼀一个排序列表对应⼀一个 Zset 集合.Zset 不能⽤用来存储⼤大体积的数据, 因为它是⼀一种"索引"数据类型, 被索引的东⻄西(集合中的数据项)只能是 200 字节以内的字节数组(包括字符串).

namekeyvalue
zk20
z k31
z k12

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.



 类似资料: