架构作业 -8
作业
设计消息队列存储消息数据的 MySQL 表格
【作业要求】
1. 包括表名、字段、索引;
2. 用文字描述设计思路和理由,例如:为什么设计某个索引?
3. 一页 PPT 即可。
【提示】
1. 需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段
需求分析
假设:该消息队列是用于工业场景下的消息信息传输。主要是对生产工艺流程过程中的问题以及作业进行信息同步。工作共有 10 个厂房,每个厂房由 2-3 条生产线,每个生产线由 25-30 个工艺流程。产品在不同工厂时间由流转。单个产品的生产时间大概在 6 个月左右。
业务场景:
报警消息。结构: rowid,报警内容,报警时间,报警部件/部件。数据产生量:每日小于 100 条数据。
通知消息。结构:rowid,消息内容,消息时间,发布服务/流程。数据产生量:每日小于 100 条数据。
消息存储设计
介于消息整体体量并不是很大,且以后可能会有对于消息的统计类的需求。故可将消息队列的数据存放如一张表中。表字段的设计如下。
表明:message_sort_list
字段:
| 中文名称 | 字段名称 | 字段类型 | 说明 |
| 消息数据 id | rowid | int | 自增 id key |
| 消息编号 | code | string | 消息的编号 |
| 消息内容 | context | string | 消息的内容 |
| 消息队列 | queue | string | 记录其是那个消息队列发送的消息 |
| 消息队列的类型 | queueType | string | 记录消息队列的类型(kafka activeMQ RabbiteMQ mqtt)|
| ip | ip | string | 这个消息是从那个 ip 地址发送出来的 |
| 消息发送时间 | sendtime | timestamp | 记录消息是什么时间产生的 |
| 消息类型 | type | string | 消息的类型(message/error) |
| 产生消息的服务 | prividerService | string | 消息是由那个服务产生的 |
| 发送者类型 | providerType | string | 消息发送者的类型(system/user) |
| 发送者 | provider | string | 消息的产生者 格式:(system/userName)|
索引:
消息类型(type),产生消息的服务(providerService),发送者类型(prividerType),发送者(provider)。 组合索引:用于精细查询某个业务的消息统计信息。
发送时间(sendtime)。单个索引:用于查询过某个时间段的消息信息。
版权声明: 本文为 InfoQ 作者【梁山伯】的原创文章。
原文链接:【http://xie.infoq.cn/article/807f8e0a585c67b0248b9fbd4】。未经作者许可,禁止转载。
评论