• 2013-10-23

    SSDB 增加 zrank, zrange 命令

    Views: 25500 | 6 Comments

    Zrank/zrrank 命令是 zset 数据结构的一个特有命令, 用于求某个元素在集合中的排序名次. 对于 Redis 来说, 数据都在内存里, 而且是排序的, 所以求元素的排名(indexOf)可以很快, 但因为 SSDB 的数据主要在硬盘中, 所以, 求排序名次可不是那么简单.

    基于这个考虑, SSDB 原来并不支持 zrank 命令. 但 zrank 命令的需求还是有的, 经过考虑, 所以在 1.6.3 版本中增加了 zrank 命令.

    不过, 使用这个命令应该是在离线环境中, 而不能是在线上生产环境中, 因为 zrank 的实现是通过遍历数据(相当于全表扫描).

    另外, SSDB 还增加了 zrange/zrrange 命令, 相当于数组的 slice 操作或者 MySQL 的 limit 操作. 和 zrank 类似, zrange 也是通过表扫描来实现的, 只要 offset 越大, 速度就越慢. 所以, 在 offset 小于 200 时, 可以在线上生产环境使用, 否则最好是离线环境中使用.

    Posted by ideawu at 2013-10-23 13:05:07 Tags: , , ,
  • 2013-10-17

    SSDB 的 C++ 客户端接口

    Views: 22131 | 10 Comments

    SSDB 本身是用 C++ 语言编写的, 所以天生就支持 C++ 客户端 API. SSDB 源码中自带的 leveldb-import.cpp, ssdb-dump.cpp 等程序, 也是 C++ 客户端的例子. 不过, 这些 API 依赖整个项目, 编译和链接的参数非常繁琐. 因此, 有必要开发对用户友好的 C++ API, 减少依赖, 方便开发 SSDB 的 C++ 客户端应用.

    我很高兴的通知, 接口简单, 对用户友好的 SSDB 的 C++ 客户端 API 已经有了! 并且, 有了相应的 API 文档(我相信文档对于一个软件的作用是非常重要的). 我可以用一行代码了显示这个 API 的使用是如何的简单:

    g++ -o hello-ssdb hello-ssdb.cpp libssdb.a
    

    hello-ssdb.cpp 就是一个使用了 SSDB C++ API 的客户端程序, 上面的一行命令用于编译这个程序, 生成可执行文件.

    SSDB C++ API 包括了两类方法, 一类是简单方法, 另一类是语义化的方法. 简单方法就是在一个统一的函数中传递任意命令和参数. 而语义化的方法即类型 get(), set() 这样顾名思义的方法. 因为时间的缘故, 后一种方法还没有实现.(更新: 两类方法都已实现.)

    欢迎大家使用, 如果有什么意义, 欢迎反馈!

    SSDB C++ 客户端接口文档: http://www.ideawu.com/ssdb/docs/cpp/

    Posted by ideawu at 2013-10-17 23:27:05 Tags: , ,
  • 2013-08-13

    SSDB 的 key_range 和未来的集群之路

    Views: 18121 | 2 Comments

    SSDB 在 1.5.7 版本中增加了 key_range 查询, 用于获取 SSDB 服务器当前数据的范围. 下一个版本会增加 set_key_range 功能, 用于指定 SSDB 应该服务的数据的区间范围. 这个 key_range 是 SSDB 未来集群之路的开始.

    在很多基于客户端的存储集群方案中(如 hash), 数据存储在哪台服务器需要客户端来决定, 也就是由用户(开发者)来决定. 这一类的方案都是伪集群和伪分布式, 因为数据的定位要求客户端主动进行, 而且数据没有无缝的迁移机制, 就不能称为一个系统.

    为了实现存储集群, 数据必须分片(Sharding). SSDB 不会使用 hash 分布, 因为 hash 分布的粒度控制不精确. SSDB 将使用的是区间分布式(堆查找表), 从而实现最小一个 key 粒度的数据分片. 分片的粒度越小, 实现数据的无缝迁移就越好, 因为数据迁移过程的不稳定状态非常短暂.

    集群中的每一个节点必须知道自己的 range, 这样就可以明确拒绝超越自己服务范围的请求. 比如 key=a 不在这台服务器上, 那么当这台服务器收到 key=a 的操作时, 它就可以明确拒绝, 以便让客户端主动去更新自己的查找表. 所有的客户端都是不可靠的, 服务器必须做自己的一套验证!

    Posted by ideawu at 2013-08-13 22:00:02 Tags: ,
|<<<1>>>| 1/1 Pages, 3 Results.