当前位置:网站首页>设计消息队列存储信息数据的MySQL表结构

设计消息队列存储信息数据的MySQL表结构

2022-06-12 23:37:00 InfoQ

要求

设计消息队列存储消息数据的 MySQL 表格
  • 包括表名、字段、索引;
  • 用文字描述设计思路和理由,例如:为什么设计某个索引?
【逻辑提示】
  • 需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段

1.说明

业务系统的复杂度不断提升,不同的业务系统对接增多,数据漏斗也在,时间性上的要求,也在不同的业务形态上有很大的差距,这也让消息队列的产生及应用,变得很自然。
1.1 消息队列使用的常用技术
  • mysql (速度相对较慢,易实现,可靠)
  • redis (速度快)
  • 专业的消息系统 (专业,可靠,学习成本高)
1.2 常用队列的触发机制
  • 写个循环一直读️
  • 定时任务
  • 守护进程

2.设计思路

  • 每一种队列存一张表,这样比较好扩展,队列之间后续比较好做隔离,以前实际业务中,曾经存到一张表,靠队列类型,名称等字段做区分。有些队列忽然大的流量进来,导致整个消息队列全部都出问题。
  • 队列写入数据表中,通过自增 id 来标识顺序,先入先出。实际业务中,也可加入队列消费优先级,高,中,低这种。在消费能力一般的情况下,优先消费优先级高的。这样不仅发挥了消息队列的作用,也更有灵活性。
  • 保证高可用,采用主从的数据库架构。
  • 引入错误日志表,消费状态表。用来存储,标记消费的记录。也方便队列重试。
  • 和业务商量好队列完成后的消息清除时间,以保证数据表不会一直处于线性增长的状态。

3.数据表

消息队列表

#表名job_queue字段id id (主键,自增) (索引)
name 队列名称(varchar)
status 队列状态
params 队列参数(非必填)
priority 优先级(枚举)(索引)
created_time 创建时间
updated_time 修改时间

错误日志表

#表名error_queue字段error_id id (主键,自增)(索引)
name 队列名称(varchar)
status 队列状态
params 队列参数(非必填)
error_message 错误消息
error_code 错误码
created_time 创建时间
updated_time 修改时间
消费状态表

#表名status_queue字段status_id id (主键,自增)(索引)
name 队列名称(varchar)
status 队列状态
offset_time 点位消费时间
current_time 当前消费时间
created_time 创建时间
updated_time 修改时间
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/32cfa5a24adb107c07a760a42