留言

在这里填写留言和我交流.

SSDB 相关的问题, 建议提在这里: http://www.ideawu.net/blog/ssdb, 就是本页顶部菜单的"SSDB"链接.

Views: 132329

581 Responses to "留言"

  • php长时间导数据到ssdb 库里去,出现
    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
    @谢顺晚: 对于长时间导数据的PHP命令行脚本(非web程序), 需要设置, 设置一个非常长的超时时间, 例如10分钟. Reply
  • 你好,SSDB的驱动是使用stream_socket_client 打开socket 连接,请问性能怎样,考虑了出个php C 扩展的模块API 吗, 像 phpredis 。 Reply
  • 你好,看了SSDB的C++接口,都是string类型的。 SSDB只支持字符串类型吗?有支持二进制数据的接口没? Reply
    @yexion: Hi, STL 的 string 是支持二进制字符流的, 它不是字面上所理解的字符串(text). Reply
    @ideawu:
    博主我再问2个问题:
    1. 一个SSDB服务器能不能支持多个数据库?就是说我部署了一个SSDB服务器,想要在上面创建多个kv数据库。看connect接口是只有ip和端口参数,没有指定kv数据库的参数。是不是我需要启动多个SSDB服务器进程并且监听不同的端口才行?
    2. SSDB支持多客户端并发操作吗?若支持,如何处理数据冲突的? Reply
    @yexion: Hi,

    1. 如果需要多个DB, 那就要启动多个实例了.
    2. SSDB没有事务和锁的概念. Reply
  • Hi,我来自台湾,我原先是Redis的使用者,对你们的东西很感兴趣

    想请问一下ssdb有办法对key做select的动作吗?如果有,有哪些行为呢
    像是redis有*和?可以用,类似
    Item:*:
    就搜寻出类似
    Item:123:
    Item:ABC:
    Item:yoo:
    之类的key出来
    而ssdb有这部分的支援吗? Reply
    @JokerCatz: 你好, ssdb 可以支持你的需求. 不过, 我给你的设计提一个意见. 根据你的描述, 这些数据其实是关联的, 更适合放在一个集合里面, 而 ssdb 非常适合存储集合数据. 针对你的需求, 你可以创建一个名为 Item 的 map 集合, 然后把 123:, ABC:, yoo: 这些 key 作为集合的元素, 那么写入的操作就是这样:


    hset('Item', '123:', '');
    hset('Item', 'ABC:', '');
    hset('Item', 'yoo:', '');


    而查询操作(即你使用的 redis 命令 keys *, keys ?)是这样:


    $result = hscan('Item', '', '', 10000);


    也就是说, 你的需求是: 根据 key 前缀获取 key 的列表. 如果我理解的正确的话. Reply
    @ideawu: 没,实际状况每个都是独立的hash就是,所以不能变成子key,不过上面的例子单纯的是用来描述Redis支援key的select的部分而已…

    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
    @JokerCatz: 你还是没有"集合"的概念. 事实上, SSDB 和 Redis 的强项在于 K-list/K-map/K-zset. 我多次强调, 要把有关联的数据放在一个集合容器中.

    如果你还是坚持把数据设计为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
    @ideawu: hmmm我知道怎样是set的概念,或许我没表示的清楚,我的问题是在relation的部分就是,类似

    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
    @JokerCatz: 一定要举具体且实际的例子, 才能继续讨论.
    @JokerCatz: Hi

    "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
    @Qhappy: ^_^ 多谢支持! 新年大吉. Reply
  • ssdb 46G数据,大部分为hlist,其中一个hsize为110万
    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
    @simcd: Hi, 你用的是哪个版本? 使用的场景是什么? 读写各是什么情况和数量级? 可以在 ssdb-cli 执行一次 compact, 优化一下数据库. Reply
    @ideawu: 使用的版本是1.6.8,纯写入,最大单hlist的hsize为120万,var目录总大小为46GB,写入100条记录(单记录大约20k),耗时3-5s,关键是经常exception,recv阶段返回空 Reply
    @simcd: 你是在压测还是实际业务使用? 你可以把 SimpleSSDB 的超时时间设得长一点. Reply
    @ideawu: 刚才发的怎么没有了,重发下
    实际业务场景;compact执行时导致ssdb异常退出,有遇到过类似case吗? Reply
    @ideawu: 实际业务,我试试修改下超时时间;另外按照你的说明进行compact,出现了connect refuse,执行不成功导致ssdb-server退出 Reply
  • 博主,ssdb在运行一段时间后,cpu会升到40%,但是内存占用只有13mb。数据请求是每隔一定时间读取,并且删除掉。
    使用compact后 cpu回归正常。
    请问是什么原因,应该如何避免? Reply
    @Pat: Hi, cpu 升高应该是因为在做数据合并(compact), 合并完后cpu占用会降低恢复空闲. Reply
    @ideawu: 过了好几晚都没有下来,依旧很高的cpu Reply
  • 能否详细介绍一下其读写机制,以及与其相关的参数?
    如failover,是否可以保证数据不丢失? Reply
  • 博主问下icomet的问题,在项目中使用的时候,碰到返回:content: "Too Many Requests"
    查了服务端的连接只有20多个,请问是怎么回事,怎么解决; Reply
    @xmxoxo: Hi, 你需要修改配置文件中的 max_subscribers_per_channel. Reply
  • 博主,bug又来了。我在不停的插入hash数据的时候

    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
    @Pat: Hi, 多谢反馈. 这个问题之前已经有人反馈, 已经解决了. 麻烦更新下代码即可. Reply

« [2][3][4][5][6][7][8][9][10] » 6/28

Leave a Comment