比如SSDB如何建数据库名?如何分类?如何查询分页?如何条件筛选等?
简化数据模型
首先摆脱SQL 的经验,单从业务考虑,简化数据模型。
大部分设计用hashmap 和 zset 都能解决。
使用经验
- 我一般会一个应用(网站)用一个ssdb 实例,如果非得放在一个实例里就用前缀区分;
- 分类是一个hashmap 或 zset集;
- 分页根据游标,及hashmap 的key 或 zset 的 core 值;
- 条件筛选我一般不会考虑太复杂数据结构和多条件筛选,一般用索引字段为key,数据记录id 为值,精确get;
举个例子
文章的json 信息
1
{'title': 'test', 'id': 123, 'add_time': 1234567890, 'category_id': 1}
对应的数据结构:
1
2
3
4
5
6
7
// 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到迭代更新)?
- 建议先熟悉ssdb 的数据结构,参考官方文档 http://ssdb.io/docs/zh_cn/php/index.html
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 形式。
再简单的例子
1
2
db.hset('aticle', article_id, json_string)
db.set('xxxx:aticle' +article_id, json_string)
上面第二行是经过一定转换后
得到的key。
回到原题,name 是为了方便建立数据集,类似于sql 的数据表,此时key 相当于sql 的主键;
hashmap 是根据key 值排序 zset 是根据score 值排序
本文网址: https://pylist.com/topic/135.html 转摘请注明来源