写点什么

【架构实战营】第 8 模块作业

用户头像
swordman
关注
发布于: 1 小时前
【架构实战营】第 8模块作业

作业题目:设计消息队列存储消息数据的 MySQL 表格

【作业要求】

1. 包括表名、字段、索引;

2. 用文字描述设计思路和理由,例如:为什么设计某个索引?

3. 一页 PPT 即可。

【提示】

1. 需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段。


【作业内容】

每个消息队列对应一个 MySQL 表,消息队列名就是表名。这样做的好处:

(1)每个消息队列的关联并不大,没有关联查询的需求;

(2)如果都放在一张表中,一个是记录数量太大,另一个是用“队列名称”做索引,需要占用更多的数据存储空间;

(3)每个消息队列对应一个 MySQL 表,能够减少每张表中消息队列的记录数量,同时能够提升消息队列读取的效率 —— 写入消息时,通过消息队列名称,直接插入对应表;读取消息时,根据消息队列名称,直接查找对应表即可。


字段设计如下:

  1. 消息唯一 ID(自动生成)

  2. 消息的生产者标识;

  3. 消息的消费者标识;

  4. 消息的内容;

  5. 消息创建时间;

  6. 消息的处理状态(已读取,未读取);

  7. 消息的处理时间;


索引设计为:消费者标识,创建时间,处理状态,

理由:索引的目的是为了加快查找指定消息的速度,一个 Client 读取消息:

(1)需要过滤 Client 的消费者标识(Where);

(2)需要过滤处理状态(已读取的不处理)(Where);

(3)还需要按照创建时间排序(Order By),先创建的先读取。


创建时间作为索引的另一个原因:

消息表最多存储 30 天内的消息,过期的自动清除,需要根据创建时间,清楚前 30 天的消息数据。

用户头像

swordman

关注

还未添加个人签名 2017.10.17 加入

还未添加个人简介

评论

发布
暂无评论
【架构实战营】第 8模块作业