ssdb 127.0.0.1:8888> hclear service Traceback (most recent call last): File "./tools/../deps/cpy/cpy.py", line 65, in <module> File "/usr/local/ssdb/ssdb-master/tools/_cpy_/ssdb-cli.py", line 420, in <module> num = hclear(link, args[0]) File "/usr/local/ssdb/ssdb-master/tools/_cpy_/ssdb-cli.py", line 138, in hclear if ((ret – last_count)>=batch or verbose!=False and num<batch): UnboundLocalError: local variable ‘last_count’ referenced before assignment 报错了。
Reply
PHP Fatal error: Uncaught exception ‘SSDBException’ with message ‘Connection lost’ in /usr/local/ssdb/api/php/SSDB.php:692
Stack trace:
#0 /usr/local/ssdb/api/php/SSDB.php(515): SSDB->recv()
#1 /usr/local/ssdb/api/php/SSDB.php(155): SSDB->recv_resp(‘set’)
#2 /usr/local/ssdb/api/php/SSDB.php(272): SSDB->__call(‘set’, Array)
#3 /usr/web/community/bygoods.php(39): SSDB->set(‘m-30967985′, ‘[30967985,94748…’)
#4 {main}
thrown in /usr/local/ssdb/api/php/SSDB.php on line 692
下面ssdb日志
2014-03-13 18:25:25.512 [INFO ] binlog.cpp(335): clean 1000112 logs[19003758 ~ 20003869], 10000959 left, max: 30004828
2014-03-13 18:27:37.107 [INFO ] ssdb-server.cpp(136): ssdb working, links: 1
2014-03-13 18:32:00.269 [INFO ] ssdb-server.cpp(190): fd: 11 error, delete link
看来是服务器把连接删除了,这种情况怎么解决和防止? Reply
博主我再问2个问题:
1. 一个SSDB服务器能不能支持多个数据库?就是说我部署了一个SSDB服务器,想要在上面创建多个kv数据库。看connect接口是只有ip和端口参数,没有指定kv数据库的参数。是不是我需要启动多个SSDB服务器进程并且监听不同的端口才行?
2. SSDB支持多客户端并发操作吗?若支持,如何处理数据冲突的? Reply
1. 如果需要多个DB, 那就要启动多个实例了.
2. SSDB没有事务和锁的概念. Reply
想请问一下ssdb有办法对key做select的动作吗?如果有,有哪些行为呢
像是redis有*和?可以用,类似
Item:*:
就搜寻出类似
Item:123:
Item:ABC:
Item:yoo:
之类的key出来
而ssdb有这部分的支援吗? Reply
而查询操作(即你使用的 redis 命令 keys *, keys ?)是这样:
也就是说, 你的需求是: 根据 key 前缀获取 key 的列表. 如果我理解的正确的话. Reply
SSDB并没有和Redis相同有详细的文件可读…这是我感到非常可惜的部分就是,目前看到可以取keys但整个取法就是怪怪的…因为是用两个数字或是字母构成的range,且不能限定范围(像是redis的key的select),所以就很常跑到外面去…之类的,类似传统redis的key的设计使用的是
> keys Item:*:log
==> Item:1:log
==> Item:2:log
而SSDB则会变成类似
> keys Item:0:log Item:9:log 999
==> Item:1:
==> Item:2:
==> Item:1:log
==> Item:2:log
==> Item:1:relation
==> Item:2:relation
如果超过两个id组成的key就会更混乱的啊…所以这部分有解吗?还是有其他设计模式,还是我用错语法了? Reply
如果你还是坚持把数据设计为KV数据结构(其实就是没有结构), 要求你把 key 设计为
Item:log:1
Item:log:2
而不是(错误的设计)
Item:1:log
Item:2:log
而最好是把 Item:log 作为一个 map 集合:
hset(Item:log, 1); // 集合的名字是 Item:log, 往它里面添加元素 1.
hset(Item:log, 2);
另外, Redis 的 keys 命令不能用在线上环境, 因为它有严重的性能问题. Reply
Item:123:
User:234:
Item:123:234:Log
简单的来说ItemLog是User与Item间的relation的set,此种情况如何完成呢?数以千计的话?
从前Redis的模式我可以轻易的用类似
ItemLog:123:* 或是 ItemLog:*:234 来完成所有的key的搜寻,出发点从Item或是User皆可以
且这是Redis官方doc所推荐的设计模式就是,拿来做namespace使用的(还是我弄错了|||)
http://redis.io/topics/data-types-intro
如你所言我应该把key丢在set / list内然後想办法部分或全部select出来後再进行相关的解法?
hmm…我并没有坚持这部分一定是对的,单纯的想希望知道这部分该如何解决,也以便我在台湾的社群圈里面推广SSDB就是 :) ,然而我有这部分的问题应该别人也有才是,所以是否有类似这类相关的design pattern的文件可以做参考呢? Reply
"ItemLog:123:* 或是 ItemLog:*:234 来完成所有的key的搜寻,出发点从Item或是User皆可以". 对于这个问题, 你可以用两个集合(不限定必须是某种特定的数据结构)来存储, 一个集合的出发点是Item, 另一个集合的出发点是User, 这些集合中存储的都是key, 然后你就可以用集合的名字来完成所有key的查找(因为集合是支持显示其内容的), 这个道理你要好好体会.
建议我们后面的讨论, 应该针对一个小而关键的例子, 具体且实际地描述出来.
我已经多次强调, Redis 的 keys 可以解决你的问题, 但它是最差的方法, 而且是没有实际意义, 只存在于理想状态条件下的方法. 你应该用合适的~~数据结构~~来表达对应的业务模型.
如果你想以User为出发点查找key, 那么你就应该把key按User为名字来组织在一个集合数据结构中. 如果你想以任何东西作为出发点查找key, 那么你就应该把key按这个东西作为名字存储在集合数据结构中.
PS: 在 SSDB 的文档网站上, 提供了一个到"SSDB 入门基础(Chinese)"的链接, 这个链接指向一篇 pdf, 里面有一个 online book store 的例子, 你可以参考一下: http://vdisk.weibo.com/s/dWpk2caREXGf.
用过SSDB 在这里点个赞。。。 Reply
status如下:
leveldb.stats
Compactions
Level Files Size(MB) Time(sec) Read(MB) Write(MB)
————————————————–
0 24 671 11 0 67
1 12 303 0 0 0
2 86 2638 0 0 0
3 529 15972 0 0 0
4 867 27018 0 0 0
启动时wa较高,持续约3-5分钟,php执行hset写入数据,经常发生connect lost,追踪是在recv阶段,返回的data为空,请问有什么改进的办法
附:开启了compression
leveldb:
# in MB
cache_size: 500
# in KB
block_size: 32
# in MB
write_buffer_size: 64
# in MB
compaction_speed: 500
# yes|no
compression: yes Reply
实际业务场景;compact执行时导致ssdb异常退出,有遇到过类似case吗? Reply
使用compact后 cpu回归正常。
请问是什么原因,应该如何避免? Reply
如failover,是否可以保证数据不丢失? Reply
查了服务端的连接只有20多个,请问是怎么回事,怎么解决; Reply
ssdb 127.0.0.1:8888> hclear service
Traceback (most recent call last):
File "./tools/../deps/cpy/cpy.py", line 65, in <module>
File "/usr/local/ssdb/ssdb-master/tools/_cpy_/ssdb-cli.py", line 420, in <module>
num = hclear(link, args[0])
File "/usr/local/ssdb/ssdb-master/tools/_cpy_/ssdb-cli.py", line 138, in hclear
if ((ret – last_count)>=batch or verbose!=False and num<batch):
UnboundLocalError: local variable ‘last_count’ referenced before assignment
报错了。 Reply