SSDB如何设计数据库结构?

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

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到迭代更新)?

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 转摘请注明来源

Suggested Topics

ssdb 数据库合并的方法

应用场景:原来有两台机器上面都跑ssdb 服务,现在想把另外一台机器上的数据库迁到同一台机器上。...

ssdb 全文搜索的实现

ssdb 作为key-value 数据库,底层没有提供全文搜索的功能,只能在应用层作检索。...

ssdb go client 推荐

ssdb 数据库以前有过好多介绍,也对python 库有推荐,这次推荐它的 go sdk,支持连接池。...

基于SSDB 的轻论坛

目前由SSDB 数据库驱动的开源项目还不多,这是一个示例,可作为SQL 转NoSQL 设计的参考。...

ssdb 在小内存vps 上的配置

ssdb 是一个数据结构和接口与redis 很相近的NoSQL 数据库,但它对内存依赖不高,数据可直接落到硬盘,所以 ssdb 在小内存上跑得也很欢。...

Leave a Comment