当前位置:网站首页>消息队列存储消息数据的MySQL表设计
消息队列存储消息数据的MySQL表设计
2022-07-31 00:08:00 【InfoQ】
消息队列存储结构分析
message表
- 由于系统架构的设计上数据是进行分组,所以表中需要一个代表分组的字段:shard_id。每一组数据分组集群,其shard_id是固定的。这个类似于kafka的partition分区设计,不同的consumer可以拉取不同的shard,达到加速消费的目的;
- 此处设计每个topic用一张单独的表去存储,即message_{topic},原因是1.MySQL理论上支持的表上亿,能满足topic数量要求 2.用单张表存可以隔离各topic的影响(物理上的逻辑上的)3.使用起来比较简单,因为单表中只可能是该topic的消息,id也可以使用自增的。

consume_log表
- 我们支持多个消费者组,每个消费者组共享一条消费进度记录,所以表中需要有group字段来区分是哪个消费者组的消费记录;
- 消费偏移量是最重要的,记录了消费到哪条数据,用offset来标识,即message表中的msg_id,因为msg_id在一个数据分组,一个topic下是严格递增的;

索引分析
发送消息
- 客户端完成分片路由,分配到某个shard,发送消息数据
- 消息队列服务器根据topic找到对应的消息表message_{topic},然后插入数据,msg_id自增
消费消息
- 客户端完成分片的路由,向对应服务器拉取消息,带上参数topic,group
- 查询consumer_log表,根据topic,group通过索引找到对应的数据,取出offset
- 根据offset查询对应的message表,通过主键id,找出下个offset的记录,取出并准备返回
- 更新consumer_log的offset信息
- 返回数据
消息过期
索引总结
- message_log表增加idx_topic_group,是topic+group的组合索引
- message表增加idx_born_date,是born_date的索引
边栏推荐
- Steven Giesel recently published a 5-part series documenting his first experience building an application with the Uno Platform.
- flex布局父项常见属性flex-wrap
- "Wei cup" school more than 2022 cattle summer camp 4 L.B lack Hole, computational geometry
- leetcode(刷题篇13)
- 从两个易错的笔试题深入理解自增运算符
- How to use joiplay emulator
- MySQL的grant语句
- binglog日志追踪:数据备份并备份追踪
- 从笔试包装类型的11个常见判断是否相等的例子理解:包装类型、自动装箱与拆箱的原理、装箱拆箱的发生时机、包装类型的常量池技术
- Axure轮播图
猜你喜欢
随机推荐
从笔试包装类型的11个常见判断是否相等的例子理解:包装类型、自动装箱与拆箱的原理、装箱拆箱的发生时机、包装类型的常量池技术
2D Transform Module && Media Queries
After writing business code for many years, I found these 11 doorways, which only experts know
Point Cloud Scene Reconstruction with Depth Estimation
leetcode 406. Queue Reconstruction by Height
pytorch的安装注意事项
How to ensure the consistency of database and cache data?
写了多年业务代码,我发现了这11个门道,只有内行才知道
asser利用蚁剑登录
The first level must project independently
从两个易错的笔试题深入理解自增运算符
matplotlib图表多曲线多纵轴绘制工具方法
Shell脚本 if语句
firewalld
leetcode 406. Queue Reconstruction by Height 根据身高重建队列(中等)
【飞控开发基础教程10】疯壳·开源编队无人机-PID 基础原理
joiplay模拟器报错如何解决
web漏洞之需要准备的工作
Android安全性优化——APP加固
Dry goods | 4 tips for MySQL performance optimization









![[0x800706D9] solution appears in Microsoft Store](/img/f2/7485cd55fd260220378acd485d8dc9.png)