写点什么

架构实战营模块八作业 - 消息队列存储数据的 MYSQL 设计

用户头像
王晓宇
关注
发布于: 4 小时前

(由于要求正文不少于 50 字才能发布,只能将 PPT 上文字再 COPY 一下。)

消息队列存储数据的 MYSQL 设计

1、每个消息队列建立一张数据表,表名为 topic 名。

说明:每个消息队列一张表,而不是所有消息一张表,是因为考虑 mysql 数据表性能问题,单表数据量在千万级以下才能够保证性能。多个消息队列共用一张表的话,要么需要限制消息队列数量,要么需要限制单消息队列的可保留的数据量-----这些都无形地限制了消息队列的能力上限。

2、每张数据表字段包含 commitId、key、data,create_time 四个字段,其中 commitId 字段为 primary key,为 key 字段为 unique index,为 create_time 建立普通索引。

说明:[1]commitId 字段为 primary key,是因为 commitId 字段具有增长的顺序性,消费者读取数据时按 commitId 读取数据, MySQL 数据库使用聚簇索引,commitId 作为主键查询数据可以直接读取聚簇索引中数据,无需回表,效率最高。[2]为 key 字段建立 unique index 是为了保证业务上能够高性能地根据 key 查询数据。[3]为 create_time 建立普通索引,是因为需要根据日期定时清理数据表中数据。

3、此外,还要建立一张消费者记录表,记录每个消费者消费某个 topic 的 commitId。该表主要有三个字段,group 名(消费者)、topic 名(表名)、commitId。

发布于: 4 小时前阅读数: 3
用户头像

王晓宇

关注

还未添加个人签名 2018.07.08 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营模块八作业-消息队列存储数据的MYSQL设计