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 架构
好像就是不支持C#,这是为什么呢?开源社区好像很排斥C#。 Reply
能不能直接用redis的那个go客户端改到ssdb?
貌似通信协议是兼容redis,但是ssdb的命令似乎是改进过而和redis在部分命令有所不同.希望做一版本完整并且完全ssdb命令风格的go客户端…这话貌似太绕口,希望你明白我意思~ Reply
SSDB ssdb = new SSDB("192.168.1.111", 8888);
ssdb.close();
如果ssdb频繁打开,而永远不 close (当然是一种极端情况) ,会出现什么后果? Reply
明白了,谢谢 Reply
我用ssdb-cli查询: hget W:1 tk 返回结果显示都是要0.5sec~1.5sec之间
一般这个会由什么情况引起的呢? Reply
ssdb 127.0.0.1:8888> hget W:1 tkey
\xe5\x8d\x95\xe5\xb1\x82\xe5\xb1\x82\xe6\x9e\xb6\xe4\xb8\x8d\xe9\x94\x88\xe9\x92\xa2
(0.469 sec)
ssdb 127.0.0.1:8888> hget W:1 tkey
\xe5\x8d\x95\xe5\xb1\x82\xe5\xb1\x82\xe6\x9e\xb6\xe4\xb8\x8d\xe9\x94\x88\xe9\x92\xa2
(1.417 sec)
ssdb 127.0.0.1:8888> hget W:1 tkey
\xe5\x8d\x95\xe5\xb1\x82\xe5\xb1\x82\xe6\x9e\xb6\xe4\xb8\x8d\xe9\x94\x88\xe9\x92\xa2
(1.418 sec)
ssdb 127.0.0.1:8888> Reply
但是我在用的过程中碰到一个问题:就是我有一批数据,大概6000w,我重复把这批数据导入到ssdb的时候,ssdb的数据会越来越大,最初是5G左右,现在导了几次以后都36G了。是我的配置有问题吗?
work_dir = /disk6/ssdb/id2cid
pidfile = ./var/id2cid.pid
server:
ip: xt188
port: 11101
# bind to public ip
#ip: 0.0.0.0
# format: allow|deny: all|ip_prefix
# multiple allows or denys is supported
#deny: all
#allow: 127.0.0.1
#allow: 192.168
replication:
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: sync
#ip: 127.0.0.1
#port: 8889
logger:
level: info
output: id2cid.log
rotate:
size: 1000000000
leveldb:
# in MB
cache_size: 500
# in KB
block_size: 32
# in MB
write_buffer_size: 64
# in MB
compaction_speed: 1000
# yes|no
compression: no Reply
5.9G
9G
12G
15G
17G
20G
22G
24G
27G
31G
33G
36G
38G
44G Reply
ssdb qt011:11101> info
version
1.6.8
key_range.kv
"-1000000322137878170" – "999999934992878085"
key_range.hash
"" – ""
key_range.zset
"" – ""
leveldb.stats
Compactions
Level Files Size(MB) Time(sec) Read(MB) Write(MB)
————————————————–
0 0 0 1682 0 80537
1 0 0 2646 99722 103649
2 0 0 3168 128679 128614
3 7 206 3704 179607 143664
4 1224 40344 2427 81641 73735
11 result(s) (0.000 sec) Reply
2014-07-03 22:25:56.090 [DEBUG] serv.cpp(327): w:0.000,p:0.028, req: multi_hget W:26101 tkey pic pinyin, resp: ok tkey \e5\ae\9d\e5\ae\9d\e8\b6\85\e8\96\84\e7\a9\ba\e8\b0\83\e8\a1\ab pic [73] [2 more...]
2014-07-03 22:25:56.101 [DEBUG] serv.cpp(327): w:0.001,p:11.162, req: hget W:282584 tkey, resp: ok hgt2018-2003
2014-07-03 22:25:56.101 [DEBUG] serv.cpp(327): w:0.001,p:0.065, req: multi_hget W:84870 tkey pic pinyin, resp: ok tkey \e9\93\b6\e8\89\b2\e6\9d\be\e7\b3\95\e9\80\8f\e6\b0\94 pic [73] [2 more...] Reply