写点什么

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

作者:Geek_7d539e
  • 2023-03-17
    福建
  • 本文字数:547 字

    阅读完需:约 2 分钟

  1. 数据模型设计

为了读写、数据容量的扩展性,节省消息类型索引,数据表定性为一个消息队列对应一张表。


表 topic

字段

id 主键 AUTO_INCREMENT UNSIGNED INT NOT NULL

content varchar(250) NOT NULL

create_time DATETIME

key time_index ("create_time")

预留一些时间范围查找、时间排序,索引留下创建时间的索引


表元数据统一管理

表 topic_md

这种表通常是全表在内存中,故不涉及主键,mysql 有个隐性主键

name varchar(100) NOT NULL 消息队列名称

type tinyint 消息队列的使用模式,如 p2p、订阅(默认)

retention int 表示保留时间


消息队列位移管理

表 topic_offset

字段

id 主键 AUTO_INCREMENT INT NOT NULL

name varchar(100) NOT NULL 消息队列名称

customer_id varchar(100) NOT NULL 消费者 id,消费端程序手动设置全局唯一性

offset 读取的消息偏移

unique index topic_customer_index(name, customer_id)


  1. 操作接口说明

create_topic 接口,参数:a. 全局唯一性 topic 名称,b. 指定消息模式(默认订阅模式)


producer_send 接口 参数:a. 全局唯一性 topic 名称,b. 消息内容


customer_poll 接口 参数:a. 全局唯一性 topic 名称,b. 消费端程序手动设置全局唯一的 customer id

消费者可以一次性拉取多条(可在创建消费者时指定),消息队列位移偏移量可以一次性偏移多条已读取的消息数。


用户头像

Geek_7d539e

关注

还未添加个人签名 2020-06-12 加入

还未添加个人简介

评论

发布
暂无评论
设计消息队列存储消息数据的 MySQL 表格_Geek_7d539e_InfoQ写作社区