模块八作业 一 消息队列存储模型设计
作业分析:
只需要设计表结构
需要合理设计索引,保证存储的高性能
需要考虑是否分库分表
需要考虑是否一张表放全量消息还是不同的消息放不同的表。
设计思路:
消息有几个关键属性:topic,messageBody,bizKey,msgId,Tag。
消息量极大,需要分库分表,并且由于消息的时效性是比较高的,可以定期备份清理历史消息,分库分表 key 使用 msgId,msgId 通过设计成全局唯一,这样能保证数据的分散。
由于写入索引也是比较耗性能的,而且也没有必要提供堆外的检索功能,所以提供 topic、bizKey、msgId 三个字段的查询功能即可,可以设计两个索引:唯一索引 msgId,联合索引 topic+bizKey,至于 topic 查询,由于 topic 的字段值的基数大,所以不单独设计索引,可以通过程序的方式,随机缓存最新的几条数据即可。
由于用户会不断创建新的 topic,所以不能一个 topic 放一张表,这样不利于维护。
一张表放全量消息,实时的消息表理论上只要保留几天内的数据即可,通过分库分表保障读取写入的高性能。
表结构设计:
复制代码
版权声明: 本文为 InfoQ 作者【babos】的原创文章。
原文链接:【http://xie.infoq.cn/article/26534ed569f7909d33beadd18】。未经作者许可,禁止转载。
评论