SSDB如何设计数据库结构?

firekinger 487 5

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

该主题到 2016-09-08 17:28:52 共 5 条回复
e
ego008 #

首先摆脱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)  // 分类索引

f
firekinger #

谢谢 @ego008

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

f
firekinger #

谢谢 @ego008

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

e
ego008 #

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 值排序

登录发表评论

桂公网安备 45122402000014号