写点什么

模块八作业

用户头像
Clarke
关注
发布于: 58 分钟前

作业:设计消息队列存储消息数据的 MySQL 表格

【作业要求】

1. 包括表名、字段、索引;

2. 用文字描述设计思路和理由,例如:为什么设计某个索引?

3. 一页 PPT 即可。

【提示】

1. 需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段。


消息队列每个主题对应一个 MySQL 表:

1.MySQL 存储消息时,单表超过 2 千万以上,B+tree 索引会到 3 层高度,磁盘扫描多次,造成性能的下降;

如果消息队列所有的主题 topic 数据都放在一张表,数据量庞大,不利于检索,性能不高。

2.维护不方便,消息队列是按照主题区分各种业务性质的,包括某个主题的生产者,消费者;按照主题区分表,更利于维护和排查问题;


消息队列对应的 MySQL 表设计:

表名称:前缀 t_+消息队列主题小写名称;

作用:记录提交的消息列表;

消息 ID:msg_id,主键,采用分布式 ID 算法生成器生成,比如雪花算法;

Broker ID:broker_id, 消息队列服务端肯定是分布式部署,那么每个分片对应一个 brokerId;

消息内容:content;

消息创建时间:create_time;

偏移量:offset,当前消息所在顺序,长整数递增;


表名称:前缀 t_+消息队列主题小写名称+消费者 id;

作用:记录每个消费者的进度;

消费者 id:consumer_id;

偏移量:offset,消费者最后一次批量拉取,确认成功一个偏移量,假设批量拉取 10,11,12,只有 10 确认成功,那么就是 10;

更新时间:update_time;


消息队列 MySQL 表设计索引设置:

1.消息队列消费生产消息时有唯一标识 ID,以便后续业务部门的问题排查,因此 msgid 必须含有索引;

2.消息表需要定期清理几天前的消息,因此 create_time 需要加索引

3.消费者从主体消费消息时,每次批量拉取一批未消费的消息,需要从上次已经消费的偏移量开始, 消费者的进度表的 consumer_id 需要加索引


用户头像

Clarke

关注

还未添加个人签名 2018.04.15 加入

还未添加个人简介

评论

发布
暂无评论
模块八作业