写点什么

架构训练营模块八

作者:Geek_16d2b8
  • 2022 年 4 月 17 日
  • 本文字数:664 字

    阅读完需:约 2 分钟

一、作业要求

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


包括表名、字段、索引;


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


一页 PPT 即可。


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


二、表的设计


CREATE TABLE topic_{xxx} (


id bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '消息 id',


content text NOT NULL COMMENT '消息内容',


producer_id bigint(11) unsigned NOT NULL COMMENT '生产者 id',


consumer_id bigint(11) unsigned NOT NULL COMMENT '消费者 id',


consumer_status tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '消费情况,0 新建 1 消费成功 2 消费失败 3 需要重试',


create_time bigint(11) unsigned NOT NULL COMMENT '创建时间',


update_time bigint(11) unsigned NOT NULL COMMENT '更新时间',


PRIMARY KEY (id),


KEY idx_consumer_situation (consumer_id,consumer_status),


KEY idx_producer (producer_id)


) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


三、设计思路

所有消息放一张表,后面的扩展性不行,到了一定数据量之后肯定要做分表的。与其这样不如直接按照队列建表,比如上面 topic_是队列的前缀,后面的{xxx}需要替换成具体的队列名称。


字段说明:


已经在上面有解释。不再赘述。


其中 consumer_status 这个字段是决定这个消息有没有被成功建立、成功消费、或者可能由于某种原因,消费失败或者需要重试做个标记。索引说明:


idx_consumer_situation 这个索引是为了方便查询消费者的情况


producer_id 这个索引方便查询生产者的消息查询

用户头像

Geek_16d2b8

关注

还未添加个人签名 2019.03.21 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营模块八_架构训练营_Geek_16d2b8_InfoQ写作平台