架构实战营 - 模块八作业
作业:设计消息队列存储消息数据的 MySQL 表格
【作业要求】
1. 包括表名、字段、索引;
2. 用文字描述设计思路和理由,例如:为什么设计某个索引?
3. 一页 PPT 即可。
【提示】
1. 需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段
--------------------------------------------
别结构设计件下图:
索引设计如下图:
设计说明:
1.采用雪花算法生成消息的 id 因此我们采用 varchar(64)来存储,并且因为 id 设置了主键因此无需索引
2.队列名直接存储在表中,因此我考虑将所有消息放在一张表里,所以给队列名增加索引
3.为了能对每个队列中的消息排序因此设计了排序字段
4.为了应对需要消费指定生产者消息的情况因此存储了消息的生产者并增加索引
5.我设计的消息队列允许多次消费某个消息因此设计了消费次数字段,消息写入时需要告知可消费次数,因此也添加索引。
6.考虑消息可以有实效因此设计了消息过期时间,并添加索引
我考虑采用所有消息放一张表的方案虽然这样做单表存储会成为未来的性能瓶颈,但是对比每个队列一张表造成的数据查询复杂度、代码复杂度以及后期维护难度我最终还是选择放一张表。
并且为了减轻未来的存储压力,我考虑实际设计 2 张表一张存储近期的消息,另一张表存储 过期和消费过的数据,每隔一段时间系统将消息主表的中过期和消费过的数据往历史表挪,并且历史表采用 ARCHIVE 引擎,主表采用 InnoDB。
版权声明: 本文为 InfoQ 作者【Alex.Wu】的原创文章。
原文链接:【http://xie.infoq.cn/article/dddfb4997afd6e5d506f90aed】。未经作者许可,禁止转载。
评论