架构实战营 第 6 期 模块八课后作业
设计分析
每个消息队列一张表还是所有消息放一张表?
考虑如果有一个消息队列里面消息特别多,可能会影响其他消息队列的性能。所以每个消息队列一张表。通过表名来区分对应的消息队列。
用什么作为表的主键和索引?
既然是消息队列,消息是有顺序的,考虑用一个自增的列存储消息的 offset,同时这个列作为主键。
消息查询时,可能会涉及针对时间段的查询,并且过期的消息可能需要清理。所以设计一个列存储消息插入的时间,并添加索引,提高查询效率。
针对消息的操作需要什么信息?
Push 消息对应表的插入,消息入队后不能修改,所以不用考虑修改记录。
Pull 过的消息可以保留在表里面,不用删除。过期的消息可能需要批量删除,可通过时间列查询。
出现问题时,消息的来源和消息的格式可能是有用的信息。为了出现问题时方便检查,增加一个 metadata 列存储可能的附加信息。可以用 key、value 的格式存储,方便扩展其他的信息。
数据表设计
【表名】
对应的消息队列名
【字段】
Offset, int, auto increment, unique index
Creation_Time, date time, index
Message, text
Metadata, varchar
评论