【架构实战营】第 8 模块作业
作业题目:设计消息队列存储消息数据的 MySQL 表格
【作业要求】
1. 包括表名、字段、索引;
2. 用文字描述设计思路和理由,例如:为什么设计某个索引?
3. 一页 PPT 即可。
【提示】
1. 需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段。
【作业内容】
每个消息队列对应一个 MySQL 表,消息队列名就是表名。这样做的好处:
(1)每个消息队列的关联并不大,没有关联查询的需求;
(2)如果都放在一张表中,一个是记录数量太大,另一个是用“队列名称”做索引,需要占用更多的数据存储空间;
(3)每个消息队列对应一个 MySQL 表,能够减少每张表中消息队列的记录数量,同时能够提升消息队列读取的效率 —— 写入消息时,通过消息队列名称,直接插入对应表;读取消息时,根据消息队列名称,直接查找对应表即可。
字段设计如下:
消息唯一 ID(自动生成)
消息的生产者标识;
消息的消费者标识;
消息的内容;
消息创建时间;
消息的处理状态(已读取,未读取);
消息的处理时间;
索引设计为:消费者标识,创建时间,处理状态,
理由:索引的目的是为了加快查找指定消息的速度,一个 Client 读取消息:
(1)需要过滤 Client 的消费者标识(Where);
(2)需要过滤处理状态(已读取的不处理)(Where);
(3)还需要按照创建时间排序(Order By),先创建的先读取。
创建时间作为索引的另一个原因:
消息表最多存储 30 天内的消息,过期的自动清除,需要根据创建时间,清楚前 30 天的消息数据。
评论