写点什么

模块 8 作业

用户头像
梦寐凯旋
关注
发布于: 2 小时前

作业:设计消息队列存储消息数据的 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.消费者从主体消费消息时,每次批量拉取一批未消费的消息,需要从上次已经消费的偏移量开始,因此偏移量需要增加索引;


用户头像

梦寐凯旋

关注

还未添加个人签名 2018.11.20 加入

还未添加个人简介

评论

发布
暂无评论
模块8作业