写点什么

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

作者:五月雨
  • 2022 年 4 月 17 日
  • 本文字数:526 字

    阅读完需:约 2 分钟

前提

为消息队列的数据存储设计数据库表

设计理念

生产者可以创建主题,并指定主题后写入消息

消费者关注主题,并消费消息,上报消费的情况,并可以实现消费进度的保存(即从上次消费到的地方继续消费)。

不同的消费者可以重复消费相同的消息

表设计

合表法

目的是方便维护,减少表数量,但实现会相应复杂一点,维护会简单一点,性能会相应差一些

所以设计上,只用了三张表,不会随着主题变多,而增加新表。

主题表

主题表:保存了主题的标记名,和当前已有的消息数量;当有消息写入时,更新对应 topic 的 length 值

消息表

消息表:保存每个主题下的消息体,以及消息体的序号,序号是递增的。

消费者表

消费者表:记录消费者消费每个主题的情况,每次消费时都会更新。


分表法

目的是实现简单,性能高,维护会复杂一些。

所以设计上,每个主题都独占对应的两张表,新增主题会新增表。

主题表

主题表:保存了主题的标记名,用于检索是否存在对应的主题。

消息表(一个主题一个表)

消息表:每个消息表对应一个主题

消费者表(一个主题一个表)

消费者表:记录消费者消费的情况,每次消费时都会更新。

结论

如果性能要求并不是非常高,可以采用合表法进行,维护相对简单些

如果性能要求高,采用分表法进行,每个队列单独一个表进行,这样可以最大程度提升并行性能。

用户头像

五月雨

关注

还未添加个人签名 2021.12.12 加入

还未添加个人简介

评论

发布
暂无评论
消息队列存储消息数据的mysql表设计_架构实战营_五月雨_InfoQ写作平台