设计消息队列存储消息数据的 MySQL 表格,要求如下:
- 包括表名、字段、索引;
- 用文字描述设计思路和理由,例如:为什么设计某个索引?
- 一页 PPT 即可。
需要考虑每个消息队列一张表, 还是所有消息放一张表, 里面加一个“队列名称”的字段。
主要分为两张表:
- 消息表:以队列名称为表名,记录每个队列产生的数据
消息消费表:记录每个接收者在队列中消费的最后一个消息
- 索引:(
queue_id,client_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_idVARCHAR(64) NOT NULL COMMENT ‘队列 id’,client_idVARCHAR(64) NOT NULL COMMENT ‘接收者 id’,msg_idBIGINT NOT NULL COMMENT ‘接收到的消息 id’,create_timeDATETIME NOT NULL COMMENT ‘创建时间’,modify_timeDATETIME NOT NULL COMMENT ‘更新时间’, PRIMARY KEY (queue_id,client_id) ) ENGINE=InnoDB DEFAULT CHARSET utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT ‘消息消费表’; ```- 索引:(
