写点什么

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

作者:swallowluo
  • 2022 年 2 月 20 日
  • 本文字数:592 字

    阅读完需:约 2 分钟

1. 队列属性表

记录已经创建的所有消息队列的属性。此表适用于点对点消息,即一条消息由生产者创建后,只能被一个消费者所消费。如果是订阅模式,应该在该表中增加队列类型(点对点队列、订阅队列)

1. 表结构说明

每个消息队列对应一张表,创建消息队列的时候,同时为该消息队列创建一张表,原因如下:

  • 降低不同消息队列之间的相互影响,降低对单表的性能要求;

  • 降低单表中的总消息数量,提高查询效率;

  • 在点对点模式中,一个生产者和一个消费者只能访问一个队列,分表设计可以降低设计复杂度

  • 易于扩展和维护,防止出现一张表损坏,影响全局的情况出现

  1. 主键

queue_id 作为主键

  1. 索引

在 queue_name 列上创建唯一索引

2. 消息表

记录一个消息队列中存储的所有消息。此表适用于点对点消息,即一条消息由生产者创建后,只能被一个消费者所消费。

如果是订阅模式,需要将下表拆成两张表,一张记录消息内容,另外一张记录消息的消费者信息。一条消息内容会对应多个消费者。

  1. 表结构说明

注①:超过最大长度的消息会被存放在文件系统中,每个超长的消息会被保存成一个文件,此时该列中只保存消息文件的绝对路径。对于超长的消息,创建和读取的效率会稍微低一些。

  1. 主键

msg_seq,使用自增列作为主键

  1. 索引

idx1(msg_id),唯一索引,便于便于消费者确认消息被消费后,修改消息状态使用。

idx2(status,msg_seq),便于消费者查询未消费的消息,查询未消费的 msg_seq 最小的消息,保证一个分片中的消息为先进先出。


用户头像

swallowluo

关注

还未添加个人签名 2020.09.11 加入

还未添加个人简介

评论

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