模块八
作业:设计消息队列存储消息数据的 MySQL 表格【作业要求】
包括表名、字段、索引;
用文字描述设计思路和理由,例如:为什么设计某个索引? 3. 一页 PPT 即可。
【提示】
需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段。
表名:topic+partition
设计原因:
每个 topic 的消息数量是不一致的,如果分区是自定义规则的话,很有可能会出现数据倾斜,所以每个分区和 topic 设计为表名。
如果消息用同一个表,其中部分 topic 的消息过多,mysql 可能会出现基于 topic 来索引数据出现区分度过低,走全表扫描的情况,效率相较于用 topic 区分表的效率低。
针对业务板块,可能部分 topic 设计的业务优先级较高,使用 topic 区分,运维层面比单表更遍历
后期消息过多,单独基于时间的分库分表可能 TPS 不足,或者基于时间做分库分表时间不好把控。基于 topic 区分后,只需要关注消息量很大的 topic 对应的表来做设计。
版权声明: 本文为 InfoQ 作者【Only】的原创文章。
原文链接:【http://xie.infoq.cn/article/1671a5c5f76edc038c467a85c】。未经作者许可,禁止转载。
评论