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 python 接口提速

SSDB 是个新兴的数据库,其数据库的特点简单,性能高效,有好多python 接口,个人比较后选择一个最理想的,但还有提速空间,这里仅作经验分享。...

基于SSDB 的轻论坛

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

ssdb 在小内存vps 上的配置

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

Leave a Comment