架构训练营模块八作业
作业要求
设计消息队列存储消息数据的 MySQL 表格
详细需求
包括表名、字段、索引
用文字描述设计思路和理由,例如:为什么设计某个索引?
设计方案
整体采用一个 Topic 一张表的设计原则。
每张表可以有自己的维护策略(数据保留最近 3 个月/12 个月)
根据业务需求不同可以,有些部署在本地数据中心,有些需要多个数据中心
可以用脚本为每个新 Topic 创建对应的表
一共有如下三种表
TOPIC_LIST --- 全局唯一的表,每个 Topic 对应一条记录。记录 Topic 名称、数据维护周期、最近维护日期等
TOPIC_<Topic Name> --- 每个 Topic 对应一张独立的表。记录每条消息的具体内容
SUBSCRIBER_<Topic Name> --- 每个 Topic 对应一张独立的表。记录订阅的用户和最后消费的消息 ID
TOPIC_LIST 表

Index
name
name + state + last_purge_time --- 查询需要清理过期信息的 Topic 列表
TOPIC_<Topic Name> 表

Index
id + group_id --- 查询某条消息后所以消息列表
group_id + create_time --- 查询某时间点后的消息列表
SUBSCRIBER_<Topic Name>表

Index
state + last_ack_id --- 某条消息开始,没有收到 ack 的订阅者 ID 列表
评论