写点什么

模块 8 作业

  • 2022 年 1 月 02 日
  • 本文字数:762 字

    阅读完需:约 3 分钟

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

【作业要求】

1. 包括表名、字段、索引;

2. 用文字描述设计思路和理由,例如:为什么设计某个索引?

3. 一页 PPT 即可。

【提示】

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



消息队列中的消息分为消息本身和消息消费情况。

由于消息队列可以是多个,考虑到消息队列每个队列的数据量和对应业务的需要,将消息分为按队列来配置。一个队列一个消息表;

而消息消费情况是作为消费者(对应消费业务)的使用情况,例如消费 A 对应读取消息的偏移量和读取时间等,这样设计的目的是方便追踪消费业务模块,达到类似消费进程重启不需要从头消费的目的。

对应的数据表主要有 2 个:

1.按照队列命名的消息表

DROP TABLE IF EXISTS topic_XXXX_journal;

CREATE TABLE IF NOT EXISTS topic_XXXX_journal (

ordering SERIAL, //消息排序 ID

persistence_id VARCHAR(255) NOT NULL, //消息 ID

sequence_number BIGINT NOT NULL, //消息的序列号标识,主要用于标记时间戳信息

deleted BOOLEAN DEFAULT FALSE NOT NULL, //消息是否被删除

tags VARCHAR(255) DEFAULT NULL, //消息本身的标签,可以基于标签进行过滤

message BLOB NOT NULL, //消息内容

PRIMARY KEY(persistence_id, sequence_number)

) row_format = dynamic;

CREATE UNIQUE INDEX journal_ordering_idx ON journal(ordering);

2.消费表(主体是 consumer)

CREATE TABLE read_side_offsets

(

read_side_id VARCHAR(255), //消费者 ID,作为 read side 端唯一

tag VARCHAR(255), //消费者用于筛选的 tag

sequence_offset bigint, // 消费者读取消息的偏移量

time_uuid_offset char(36), //消费者读取消息的偏移量,是一个 time uuid

PRIMARY KEY (read_side_id, tag)

) row_format = dynamic;

用户头像

还未添加个人签名 2017.11.04 加入

还未添加个人简介

评论

发布
暂无评论
模块8作业