消息队列存储消息数据的 mysql 表设计
前提
为消息队列的数据存储设计数据库表
设计理念
生产者可以创建主题,并指定主题后写入消息
消费者关注主题,并消费消息,上报消费的情况,并可以实现消费进度的保存(即从上次消费到的地方继续消费)。
不同的消费者可以重复消费相同的消息
表设计
合表法
目的是方便维护,减少表数量,但实现会相应复杂一点,维护会简单一点,性能会相应差一些
所以设计上,只用了三张表,不会随着主题变多,而增加新表。
主题表
主题表:保存了主题的标记名,和当前已有的消息数量;当有消息写入时,更新对应 topic 的 length 值
消息表
消息表:保存每个主题下的消息体,以及消息体的序号,序号是递增的。
消费者表
消费者表:记录消费者消费每个主题的情况,每次消费时都会更新。
分表法
目的是实现简单,性能高,维护会复杂一些。
所以设计上,每个主题都独占对应的两张表,新增主题会新增表。
主题表
主题表:保存了主题的标记名,用于检索是否存在对应的主题。
消息表(一个主题一个表)
消息表:每个消息表对应一个主题
消费者表(一个主题一个表)
消费者表:记录消费者消费的情况,每次消费时都会更新。
结论
如果性能要求并不是非常高,可以采用合表法进行,维护相对简单些
如果性能要求高,采用分表法进行,每个队列单独一个表进行,这样可以最大程度提升并行性能。
评论