架构实战营模块八作业 - 消息队列存储数据的 MYSQL 设计
(由于要求正文不少于 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。
版权声明: 本文为 InfoQ 作者【王晓宇】的原创文章。
原文链接:【http://xie.infoq.cn/article/870aef70714ba81d371e6f556】。文章转载请联系作者。
评论