ssdb Hash php分页,SSDB如何设计数据库结构?

比如SSDB如何建数据库名?如何分类?如何查询分页?如何条件筛选等?

31a8e39823b523f4c5abe0080e63315f.png

简化数据模型

首先摆脱SQL 的经验,单从业务考虑,简化数据模型。

大部分设计用hashmap 和 zset 都能解决。

使用经验

我一般会一个应用(网站)用一个ssdb 实例,如果非得放在一个实例里就用前缀区分;

分类是一个hashmap 或 zset集;

分页根据游标,及hashmap 的key 或 zset 的 core 值;

条件筛选我一般不会考虑太复杂数据结构和多条件筛选,一般用索引字段为key,数据记录id 为值,精确get;

举个例子

文章的json 信息

{'title': 'test', 'id': 123, 'add_time': 1234567890, 'category_id': 1}

对应的数据结构:

// hashmap

db.hset('aticle', article_id, json_string)

// zset

db.zset('article_add_time', article_id, article_add_time) // 按发表时间索引

db.zset('category_article:' + category_id, article_id, article_add_time) // 分类索引

问题

目前有点点了解,但又有很多不清晰,比如“分页根据游标”就很难理解,另外一定有很多关于数据结构的设计技巧,既可以提升运维又能提高性能。比如:如何设计无限级分类?如何设计文章内容标签?如何设计商品自由扩展性属性(比如规格、款式、种类、尺寸、颜色、系列、适用等等)?如何设计数据结构的扩展性(从base到迭代更新)?

name 的命名

关于name、key、value、score有哪些命名技巧,可否推荐一下。

ssdb 底层是leveldb,其特点是按key 排序,key 的命名其事也是为了更好的排序遍历。

ssdb 实现了 hashmap、zset 数据结构,其实在底层存储都是key - value 形式。

如 hashmap 的设置 db.hset('aticle', article_id, json_string) 是要经过某些转换 sum('aticle') + article_id后存储为key-value 形式。

再简单的例子

db.hset('aticle', article_id, json_string)

db.set('xxxx:aticle' +article_id, json_string)

上面第二行是经过一定转换后得到的key。

回到原题,name 是为了方便建立数据集,类似于sql 的数据表,此时key 相当于sql 的主键;

hashmap 是根据key 值排序

zset 是根据score 值排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值