模块 8 作业
作业:设计消息队列存储消息数据的 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;
评论