架构实战营 - 模块 8- 作业
背景概述
设计自研消息队列数据库表结构。
注:
架构设计文档参考模块 3 作业:https://shimo.im/docs/h9qYpGrCRJJRJqRD
数据库表设计
消息存储分为两类:日志表(MQ_LOG)及消息表(MQ_MSG_<队列名>)。
消息处理流程要点如下:
在生产者发布消息时,首先写入日志表,日志表写入成功即代表消息写入成功。
服务端后台线程从日志表读取消息写入记录,将消息内容写入消息表中。
在消息成功写入消息表后,日志表需要及时清除已写入消息表的日志记录。
消费者读取消息时,从消息表中读取。消息表最多保存 30 天的消息数据。
设计思路:
使用日志表实现消息的快速持久化写入,提升消息队列整体数据可靠性
消息表层面进行数据分片,可一定程度上防止单队列数据异常影响其他正常队列消费
日志表
日志表结构如下:
考虑到日志分发后台线程需要根据创建时间轮询日志表,因此在创建时间字段上创建索引提升查询性能。
消息表
消息表结构如下:
消费者客户端从消息表顺序消费数据,因此消息 ID 为自增主键。
评论