写点什么

模块八作业

作者:马志峰
  • 2022 年 2 月 28 日
  • 本文字数:710 字

    阅读完需:约 2 分钟

设计消息队列存储消息数据的 MySQL 表格


【作业要求】

1. 包括表名、字段、索引;

2. 用文字描述设计思路和理由,例如:为什么设计某个索引?

3. 一页 PPT 即可。


【提示】

1. 需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段。


1、每个消息队列一张表,表名需要包含队列的业务,比如 film_shared_msg;

所有消息放一张表的缺点:

1)会经常更新表,不利于数据同步;

2)不同业务的内容长度不同、发送对象、字段名称不同,强行一致,会导致浪费空间、人为增加复杂度;3)不同队列的访问量不同,不利于后续演进时分片部署;

2、film_shared_msg 表的字段:

id,long, 主键,自增

create_time, long,毫秒时间戳

producer_id,long,生产者 id

pre_id,前一个消息的 id,用于查询下一个消息

content_id,long,内容 id

content,text 或 mediumtext,消息的内容本身,长度可能较大,看业务需要用 text 或 mediumtext

3、索引:

id 是主键索引

create_time,producer_id,content_id,pre_id,都作为普通索引

create_time 作索引,是因为消息队列需要定期清理掉过期消息(比如 1 个月或 2 周前的消息),也有按消息产生的时间区间查询需求,避免消息量过大导致慢查询

pre_id 作索引,是为了根据 pre_id=某 id,来查询到下一条消息


4、消费状态表,作用:记录当前消费者已经读取到了哪条消息,当收到消息读取请求时,返回下一条未被读取的消息给消费者

film_shared_consumer 表

id,long, 主键,自增

consumer_id,long,消费者 id

create_time,long

last_msg_id,对应 film_shared_msg 表的 id,表示已处理的最近一条消息,为了进行关联查询下一条消息


id 是主键索引

consumer_id 作普通索引

consumer_id 便于消费者快速查询到当前已处理的消息 id(即 last_msg_id)


用户头像

马志峰

关注

还未添加个人签名 2018.04.27 加入

还未添加个人简介

评论

发布
暂无评论
模块八作业