设计消息队列存储信息数据的 MySQL 表结构
要求
设计消息队列存储消息数据的 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 修改时间
评论