架构实战营 4 期 - 模块八作业
作业内容
设计消息队列存储消息数据的 MySQL 表格
【作业要求】
1. 包括表名、字段、索引;
2. 用文字描述设计思路和理由,例如:为什么设计某个索引?
3. 一页 PPT 即可。
【提示】
1. 需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段。
一、设计思路
表结构设计思路
采用每个消息队列一张表;
如果有新的队列或队列表不存在,则自动创建表,表名包含队列名称;
采用雪花算法生成唯一主键;
记录每条消息的时间,并设置索引;
需要维护一个偏移量字段,并设置索引
设计理由
一个消息队列一张表方便维护
使用业务无关的字段作为主键是比较好的设计
自增主键、UUID 等不适合分布式和高性能数据库
记录消息的时间方便做消息的时间区间操作,如从某个时间点开始消费,情况历史消息等
设置时间字段为索引能加快查找速度
维护偏移量字段,这样能够支持多消费者消费,设置索引能加快查找速度
二、表结构设计
表名
queue_{队列名称}
字段
id 雪花 id long
topic_name 队列名称 varhcar(64)
message_id 消息 id varchar(64)
message_content 消息内容 text
status 消费状态 tinyint(1)
create_time 创建时间 datetime
offset 偏移量 long
deleted 删除状态 tinyint(1)
索引
主键索引:id
普通索引:create_time
普通索引:offset
评论