写点什么

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

作者:万物皆然
  • 2022 年 6 月 12 日
  • 本文字数:846 字

    阅读完需:约 3 分钟

要求

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

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

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

【逻辑提示】

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

1.说明

业务系统的复杂度不断提升,不同的业务系统对接增多,数据漏斗也在,时间性上的要求,也在不同的业务形态上有很大的差距,这也让消息队列的产生及应用,变得很自然。

1.1 消息队列使用的常用技术

  1. mysql (速度相对较慢,易实现,可靠)

  2. redis (速度快)

  3. 专业的消息系统 (专业,可靠,学习成本高)

1.2 常用队列的触发机制

  1. 写个循环一直读♻️

  2. 定时任务

  3. 守护进程


2.设计思路

  1. 每一种队列存一张表,这样比较好扩展,队列之间后续比较好做隔离,以前实际业务中,曾经存到一张表,靠队列类型,名称等字段做区分。有些队列忽然大的流量进来,导致整个消息队列全部都出问题。

  2. 队列写入数据表中,通过自增 id 来标识顺序,先入先出。实际业务中,也可加入队列消费优先级,高,中,低这种。在消费能力一般的情况下,优先消费优先级高的。这样不仅发挥了消息队列的作用,也更有灵活性。

  3. 保证高可用,采用主从的数据库架构。

  4. 引入错误日志表,消费状态表。用来存储,标记消费的记录。也方便队列重试。

  5. 和业务商量好队列完成后的消息清除时间,以保证数据表不会一直处于线性增长的状态。


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 修改时间

用户头像

万物皆然

关注

还未添加个人签名 2017.12.21 加入

还未添加个人简介

评论

发布
暂无评论
设计消息队列存储信息数据的MySQL表结构_万物皆然_InfoQ写作社区