写点什么

架构实战营第八模块作业

用户头像
子豪sirius
关注
发布于: 4 小时前

作业

设计消息队列存储消息数据的 MySQL 表格

表设计

  1. 考虑到刚开始,消息队列不多,所有消息放在一张表中

  2. 分为两个表:队列信息表和消息表

队列表

  1. 描写队列的元数据信息,更新较少

  2. 以队列的 ID 为 Key,不需要额外再建索引

  3. 包括队列名称,队列描述,队列深度,消息保存时间等属性


CREATE TABLE QUEUE (  ID BIGINT NOT NULL, -- 队列ID  NAME VARCHAR(20) NOT NULL, -- 队列名称  DESCRIPTION VARCHAR(200), -- 队列描述  MAX_DEPTH INTEGER, -- 队列最大深度  DURATION INTEGER, -- 消息保存时间,毫秒为单位  CREATE_TIME TIMESTAMP NOT NULL, -- 创建时间  PRIMARY KEY(ID));
复制代码

消息表

  1. 保存具体的消息

  2. 消息 ID 作为主键,包括队列 ID(对队列表作外键关联,消息内容,创建时间,关联消息 ID,消息状态等

  3. 消息表除了主键上,还要另外建索引:

  4. 队列 ID 建索引,方便根据队列来查询 ID


CREATE TABLE MESSAGE (  ID BIGINT NOT NULL, -- 消息ID   QUEUE_ID BIGINT NOT NULL, -- 队列ID  CREATE_TIME TIMESTAMP NOT NULL, -- 创建时间  RELATION_ID BIGINT, -- 关联ID  MESSAGE_DATA VARCHAR(1000) NOT NULL, -- 消息内容  STATE NOT NULL, -- 消息状态  PRIMARY KEY (ID),  FOREIGN KEY (QUEUE_ID) REFERENCES QUEUE(ID)  );CREATE INDEX QueueIndex ON MESSAGE (QUEUE_ID);
复制代码

表设计演进

  1. 当业务有一定规模后,比如消息队列增多,消息变多,消息按照队列分表

  2. 每个队列单独的表保存消息

  3. 队列表增加字段,保存对应表的名称


ALTER TABLE QUEUE ADD QUEUE_TABLE VARCHAR(100);
复制代码


  1. 每个队列的信息表的表名为"MESSAGE_队列 ID",字段和索引跟 MESSAGE 表一样

作业 PPT


用户头像

子豪sirius

关注

还未添加个人签名 2018.05.03 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营第八模块作业