写点什么

架构实战营模块八作业

作者:zhihai.tu
  • 2022 年 9 月 25 日
    上海
  • 本文字数:515 字

    阅读完需:约 2 分钟

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

【作业要求】

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

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

3. 一页 PPT 即可。

【提示】

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


表结构设计说明


字段说明

1、分为消息表和消费表

2、消息表:

1)id 为主键自增序列

2)topic+partition+msg_time 为联合索引,用于查询指定主题指定分区下所有的有序消息列表

3)msg_content 用于存放具体的消息内容;msg_time 用于存放消息创建的时间

4)last_id 用于保存上一条消息的 id,为了使消息形成链表。设计索引用于查询消息队列下一条消息。

3、消费表:

1)id 为主键自增序列

2)comsumer_group 为消费组,用于区分不同的消费对象,即队列名称,建立了索引用于查询该消费组所有已消费的消息。

3)offset 为当前消费位置,实际就是对应消息表中的 ID。

4)is_new 表示是否最新消费消息,同一个 comsumer_group 中,只有一条记录的 is_new 为 1


扩展

1、消息表:

如果消息表的数据量较大,例如超过 2000 万,可以考虑先按照 partition 进行分区,然后按照 topic 进行分表


2、消费表:

可以设计消费历史表,把已消费的消息都迁移至历史表,消费表仅保存最近一次消费的消息位置。

用户头像

zhihai.tu

关注

还未添加个人签名 2018.01.17 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营模块八作业_zhihai.tu_InfoQ写作社区