【作业内容】设计消息队列存储消息数据的 MySQL 表格 【作业要求】
- 包括表名、字段、索引;
- 用文字描述设计思路和理由,例如:为什么设计某个索引?
- 一页 PPT 即可。
【设计】
一、消息记录表
DROP TABLE IF EXISTS `mq_record_xx`;
CREATE TABLE `mq_record_xx` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增 id',
`msg_id` varchar(36) DEFAULT NULL COMMENT '消息 id,唯一键',
`producer_id` varchar(36) DEFAULT NULL COMMENT '生产者 id',
`content` varchar(4096) DEFAULT NULL COMMENT '消息内容',
`create_time` datetime DEFAULT NULL COMMENT '消息创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `msg_id`,
INDEX [index1] (username(36), content(4096))
) ENGINE=InnoDB AUTO_INCREMENT=0;
常用 sql:
select content from mq_record_xx where msgId = ?
二、消息队列表
DROP TABLE IF EXISTS `mq_topic_xx`;
CREATE TABLE `mq_topic_xx` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增 id',
`msg_id` varchar(36) DEFAULT NULL COMMENT '消息 id,唯一键',
`producer_id` varchar(36) DEFAULT NULL COMMENT '生产者 id',
`consumer_id` varchar(36) DEFAULT NULL COMMENT '消费者 id',
`create_time` datetime DEFAULT NULL COMMENT '消息创建时间',
`status` tinyint(1) NOT NULL DEAULT 0 COMMENT '状态,0 是未消费,1 是消费',
`consume_time` datetime DEFAULT NULL COMMENT '消费时间',
PRIMARY KEY (`id`),
UNIQUE KEY `msg_id`,
CONSTRAINT fk_msg_id FOREIGN KEY(msg_id) REFERENCES mq_record_xx(msg_id),
INDEX [index1] (consumer_id(36), status(1))
) ENGINE=InnoDB AUTO_INCREMENT=0;
常用 sql:消费者获取下一条未被读取的消息
select * from mq_topic_xxx where consumer_id = A and status = 0 order by id asc limit 1
本文由 biezhi 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2021/07/16 09:47