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: http://ssdb.io/docs/zh_cn/users.html
官方QQ群: 170983373
2014开源中国开源世界高峰论坛, 中国开源优秀项目奖项目
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)
PHP API
<?php require_once('SSDB.php'); $ssdb = new SimpleSSDB('127.0.0.1', 8888); $resp = $ssdb->set('key', '123'); $resp = $ssdb->get('key'); echo $resp; // output: 123
PHP API 文档: http://ssdb.io/docs/zh_cn/php/
SSDB vs Redis
SSDB 架构
由于对ssdb不是很了解,对于文档上说的有关备份方面不是很理解,还请帮忙解答,主要有一下几点:
1.备份用在线备份ssdb-dump备份时,会比原来数据小,这个程序是怎么进行处理的?
2. 备份直接把原来的目录全部拷贝,是否可以行?用不用把服务停掉?
3.现在有没有好一点备份的方法?现在用ssdb-dump备份时非常慢(100M左右)。
还请帮忙解答一下,谢谢。 Reply
1. 这个不影响, dump 时会把一些过期的数据从硬盘清除.
2. 要先停服务再拷贝目录
3. 你可以在 ssdb-cli 执行 compact 命令. Reply
另外,zrange的排序方式是可配置的吗?
ssdb 127.0.0.1:8888> zrange feed:event:set 0 0
key score
————————-
0 result(s) (0.031 sec)
ssdb 127.0.0.1:8888> zrrange feed:event:set 0 0
key score
————————-
0 result(s) (0.476 sec) Reply
hdel一个不存在的key返回0,而不是返回-1。 Reply
我这里有一个按照日期作为KEY存储的需求,大约10亿条数据,年增量10亿,每条数据平均4K,需要用时间范围检索,不知道SSDB性能和扩展性如何。 Reply
master1> set a 10
master3> get a
10
master3> set a 20
master1> get a
10
########## master1.conf
# ssdb-server config
# relative to path of this file, must exist
work_dir = ./
pidfile = ./ssdb.pid
server:
ip: 127.0.0.1
port: 8001
replication:
binlog: yes
# Limit sync speed to *MB/s, -1: no limit
sync_speed: -1
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: mirror
ip: 127.0.0.1
port: 8002
id: svc_3
# sync|mirror, default is sync
type: mirror
ip: 127.0.0.1
port: 8003
logger:
level: debug
# level: info
output: ./log/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: 200
# yes|no
compression: no
########## master2.conf
# ssdb-server config
# relative to path of this file, must exist
work_dir = ./
pidfile = ./ssdb.pid
server:
ip: 127.0.0.1
port: 8002
replication:
binlog: yes
# Limit sync speed to *MB/s, -1: no limit
sync_speed: -1
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_1
# sync|mirror, default is sync
type: mirror
ip: 127.0.0.1
port: 8001
id: svc_3
type: mirror
ip: 127.0.0.1
port: 8003
logger:
level: debug
# level: info
output: ./log/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: 200
# yes|no
compression: no
########## master3.conf
# ssdb-server config
# relative to path of this file, must exist
work_dir = ./
pidfile = ./ssdb.pid
server:
ip: 127.0.0.1
port: 8003
replication:
binlog: yes
# Limit sync speed to *MB/s, -1: no limit
sync_speed: -1
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_1
# sync|mirror, default is sync
type: mirror
ip: 127.0.0.1
port: 8001
id: svc_2
type: mirror
ip: 127.0.0.1
port: 8002
logger:
level: debug
# level: info
output: ./log/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: 200
# yes|no
compression: no
请教这是怎么回事? Reply