模块 8 作业
作业:设计消息队列存储消息数据的 MySQL 表格
【作业要求】
1. 包括表名、字段、索引;
2. 用文字描述设计思路和理由,例如:为什么设计某个索引?
3. 一页 PPT 即可。
【提示】
1. 需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段。
消息队列每个主题对应一个 MySQL 表:
1.MySQL 存储消息时,单表超过 2 千万以上,B+tree 索引会到 3 层高度,磁盘扫描多次,造成性能的下降;
如果消息队列所有的主题 topic 数据都放在一张表,数据量庞大,不利于检索,性能不高。
2.维护不方便,消息队列是按照主题区分各种业务性质的,包括某个主题的生产者,消费者;按照主题区分表,更利于维护和排查问题;
消息队列对应的 MySQL 表设计:
表名称:前缀 t_+消息队列主题小写名称;
消息 ID:msgid,主键,采用分布式 ID 算法生成器生成,比如雪花算法;
消息内容:content;
消息创建时间:createtime;
消息更新时间:updatetime;
消息状态:state,1-待消费,2-已消费;
消息偏移量:offset,当前消息所在顺序,长整数递增;
消息队列 MySQL 表设计索引设置:
1.消息队列消费生产消息时有唯一标识 ID,以便后续业务部门的问题排查,因此 msgid 必须含有索引;
2.消息队列管理控制台,应该需要有监控,一段时间内,生产消息数量,消费的消息数量,堆积的消息数量,因此创建时间需要加上索引;
3.消费者从主体消费消息时,每次批量拉取一批未消费的消息,需要从上次已经消费的偏移量开始,因此偏移量需要增加索引;
评论