2013-01-18

如何使用SSDB的zscan命令

Views: 26799 | 3 Comments

SSDB(LevelDB 服务器, NoSQL 存储方案)的 zscan 是最强大的一条命令, 因为它操作的是 zset(sorted set) 数据类型, 只需要一条 zscan 命令就能直接地表达业务逻辑, "所写即所想". 例如, 获取用户的未读消息列表, 获取按上架时间排序的商品列表, 获取微博 timeline...

zset 可以理解为关系数据库里具有两个字段的表, 一个字段是 key, UNIQUE 索引, 也即数据的唯一标识; 另一个字段是浮点型 score, 每一个 key 对应的排序权重值. 在关系数据库中, 要分页遍历数据, 就要执行类似的一条 SQL 查询:

select * from table order by score, key limit start, size

每一次查询都会进行排序, 性能非常低. 而 SSDB 的 zset 中的数据是已经排好序的, 读取时不需要进行排序. zscan 的命令原型为:

zscan name key_start score_start score_end limit
  - name: 列表的标识
  - key_start: 分页遍历列表时, 上一次遍历到的最大(score)的一条数据 key
  - score_start: 上一次遍历到的数据的排序权重值最大值
  - score_end: 想要遍历的数据的排序权重值最大值
  - limit: 分页返回一次的数据条数

假设购物网站中有这样的一个商品表:

id, title, price, update_time

展示商品列表时, 有时需要按价格 price 排序, 有时需要按更新时间 update_time 排序, 用 SSDB 怎么解决? 那就需要建两个 zset:

#zset 1
key = id
score = price

#zset 2
key = id
score = update_time

这就是 NoSQL 的常用设计模式, 将带有 N 字段的关系数据库表分解成 N-1 个每个只有 2 个字段的数据库表, 这样每个表对应一个 SSDB 的 zset.

Related posts:

  1. 用PHP遍历SSDB中的zset集合
  2. SSDB在大数据量日志分析中的应用案例
  3. SSDB 1.6.6 稳定版发布, 支持 hclear/zclear
  4. SSDB与Redis命令对比
  5. 用SSDB快速开发一个微博(Twitter)demo
Posted by ideawu at 2013-01-18 13:38:01 Tags: ,

3 Responses to "如何使用SSDB的zscan命令"

Leave a Comment