写点什么

模块 8 作业

作者:Asha
  • 2022 年 1 月 02 日
  • 本文字数:380 字

    阅读完需:约 1 分钟

【每个消息队列一张表,主要原因如下】

  • 所有消息放一张表时不同消费者需要用 where 条件筛选队列名称字段,而队列名称只会是几个固定取值,区分度很低,就算是加了索引查询效率也不高;

  • 不同队列的消费者分别读不同的表,相比所有消费者都读一张表性能更好,MySQL 压力也更小;

  • 所有消息放一张表的话,有处理得慢的消息就会阻塞其它快的队列;

  • 如果有的队列消息量增长比较快,则可以针对该队列扩展多张表甚至多个库;如果都放一张表则所有其它队列也必须跟着扩展,有一定的资源浪费。


设计方案

  1. 表名:队列名作为表名

  2. 字段设计如下表所示。生产者写入消息时利用数据库自动生成的自增 id 作为消息 id,消息状态 status 设置为 0;消费者读取消息时定位到 status 为 0 的最大 id 记录,修改状态 status 为 1 并读取该记录的消息内容进行消费。

  3. 消息 id 作为主键,status 字段上建索引,因为消费者需要根据 status 字段查找记录。


用户头像

Asha

关注

还未添加个人签名 2019.12.26 加入

还未添加个人简介

评论

发布
暂无评论
模块8作业