设计消息队列存储消息数据的 MySQL 表格,要求如下:

    1. 包括表名、字段、索引;
    2. 用文字描述设计思路和理由,例如:为什么设计某个索引?
    3. 一页 PPT 即可。

      需要考虑每个消息队列一张表, 还是所有消息放一张表, 里面加一个“队列名称”的字段。

    主要分为两张表:

    1. 消息表:以队列名称为表名,记录每个队列产生的数据
    2. 消息消费表:记录每个接收者在队列中消费的最后一个消息

      • 索引:(queue_idclient_id)也为主键,用于查询接收者在队列中最后消费位置 ``sql CREATE TABLE IF NOT EXISTS ${queue} (idBIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'id',client_idVARCHAR(64) NOT NULL COMMENT '发送者 id',msgVARCHAR(2000) NOT NULL COMMENT '消息',create_timeDATETIME NOT NULL COMMENT '创建时间',modify_time` DATETIME NOT NULL COMMENT ‘更新时间’ ) ENGINE=InnoDB DEFAULT CHARSET utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT ‘消息表’;

      CREATE TABLE IF NOT EXISTS msg_consume ( queue_id VARCHAR(64) NOT NULL COMMENT ‘队列 id’, client_id VARCHAR(64) NOT NULL COMMENT ‘接收者 id’, msg_id BIGINT NOT NULL COMMENT ‘接收到的消息 id’, create_time DATETIME NOT NULL COMMENT ‘创建时间’, modify_time DATETIME NOT NULL COMMENT ‘更新时间’, PRIMARY KEY (queue_id, client_id) ) ENGINE=InnoDB DEFAULT CHARSET utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT ‘消息消费表’; ```