架构实战营模块八作业
作业:设计消息队列存储消息数据的 MySQL 表格
【作业要求】
1. 包括表名、字段、索引;
2. 用文字描述设计思路和理由,例如:为什么设计某个索引?
3. 一页 PPT 即可。
【提示】
1. 需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段。
表结构设计说明
字段说明
1、分为消息表和消费表
2、消息表:
1)id 为主键自增序列
2)topic+partition+msg_time 为联合索引,用于查询指定主题指定分区下所有的有序消息列表
3)msg_content 用于存放具体的消息内容;msg_time 用于存放消息创建的时间
4)last_id 用于保存上一条消息的 id,为了使消息形成链表。设计索引用于查询消息队列下一条消息。
3、消费表:
1)id 为主键自增序列
2)comsumer_group 为消费组,用于区分不同的消费对象,即队列名称,建立了索引用于查询该消费组所有已消费的消息。
3)offset 为当前消费位置,实际就是对应消息表中的 ID。
4)is_new 表示是否最新消费消息,同一个 comsumer_group 中,只有一条记录的 is_new 为 1
扩展
1、消息表:
如果消息表的数据量较大,例如超过 2000 万,可以考虑先按照 partition 进行分区,然后按照 topic 进行分表
2、消费表:
可以设计消费历史表,把已消费的消息都迁移至历史表,消费表仅保存最近一次消费的消息位置。
评论