【架构实战营】模块八作业
设计消息队列存储消息数据的 MySQL 表格
设计思路:
一个消息队列 topic 一张表
性能考虑:若消息都放在一张表里的话,如果队列比较多而且消息量大的情况下会影响查询消息和写入消息的性能,且各个队列之间会互相影响。
MySQL 表结构设计
(1) 消息记录表:用于记录消息主体内容,创建 topic 时创建一张对应的表。
字段包括:
msg_id : 消息 id,由 id 生成器生成
type : 消息类型
context:text 类型,存放消息体
status:消息状态:1.未被消费,2.已消费完成
create_time : 创建时间
索引:
msg_id 主键,表示消息的唯一标识,防止重复
(type,status,create_time)联合索引,可提供按照消息类型、消息状态、消息创建时间进行查询
(2)消费记录表:用于记录消费者消费消息的情况,每个 topic 一张表。
字段包括:
consum_id:消费者 id
msg_id: 消息 id
status:消费状态,1. 已被消费拉取,2. 消费者已确认消费完成
consum_time : 消费时间,消费者消费消息的时间
索引:
msg_id: 外键,消息 id 取自消息记录表的 msg_id
(consum_id,msg_id)联合唯一索引,防止同一个消费者重复消费同一条消息
评论