写点什么

设计消息队列存储消息数据的 Mysql 表

作者:ren
  • 2022 年 1 月 23 日
  • 本文字数:518 字

    阅读完需:约 2 分钟

【作业内容】设计消息队列存储消息数据的 MySQL 表格

【作业要求】

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

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

3.一页 PPT 即可。


我觉得应该每个消息队列一张表,这样的话,入队就是简单的 insert 操作,出队就是找到没有被消费的最小 id 即可,实现起来更加方便。


问题:

  1. 有的表过大,有的表过小(使用频率)

解决:由业务考虑的时候解决,消息队列不管这种负载均衡相关

  1. 消息唯一性,以及幂等性

用消息 id 作为主键自增,然后先获取自增 id,再插入(事务保证)

  1. 消息队列已经消费的消息需不需要干掉

可以干掉,消费成功的放到另外一张表,以后要查记录就直接去另外的表


表名:mq_xx 每个队列一张表,可以直接利用表名区分

msgId: 消息 id (自增,主键)

producer_id:生产者 id

content

create_time

consumer_id

state:状态 0 未使用 1 使用中

索引:state 直接取出未使用的

表名:mq_record_xx

msgId

producer_id

consumer_id

content

create_time

consumer_time


record 表在业务上只有插入,所以根据维护运营需求,可以设置索引,在业务上不需要索引

消息队列需要取出没人用的消息,然后使用它,所以用 state 做索引,方便查询。


这里只考虑队列任务(消息处理的先后、谁处理都无关,只要消息能被处理就算成功)


用户头像

ren

关注

还未添加个人签名 2021.07.22 加入

还未添加个人简介

评论

发布
暂无评论
设计消息队列存储消息数据的Mysql表