消息队列+更新DB极易引发的DB并发修改bug

背景

我们在生产系统中和其他系统进行交互时一般都会通过消息队列来解耦生产者和消费者,然后通过每个使用方消费消息队列的消息的方式来完成消息的消费,并且一般来说我们消费消息后极有可能会操作DB,不过这种方式如果处理不够仔细,很容易发生DB并发更新导致的数据覆盖

问题复现

解决方案:

1.对于DB的同一条记录的操作需要有先后顺序,这就要求对于同一个mid的消息消费要串行,而不能并行,所以这就要求生产者发送消息到消息队列时需要按照mid进行partition分区,这样同一个mid只会在一个分区中,而kafka的消息消费是分区有序的,这个问题就可以解决掉了

2.对于DB的并发更新使用加乐观锁(版本号)或者悲观锁的方式来达到串行更新DB记录的效果

相关推荐
袋鼠云数栈1 小时前
使用自然语言体验对话式MySQL数据库运维
大数据·运维·数据库·后端·mysql·ai·数据治理·数栈·data+ai
阿里云大数据AI技术1 小时前
数据 + 模型 驱动 AI Native 应用发展
大数据·数据库·人工智能
??? Meggie2 小时前
【SQL】使用UPDATE修改表字段的时候,遇到1054 或者1064的问题怎么办?
android·数据库·sql
一屉大大大花卷2 小时前
初识Neo4j之图数据库(二)
数据库·neo4j
天翼云开发者社区2 小时前
OLAP分析数据库适用场景及主流产品对比
数据库
Britz_Kevin2 小时前
从零开始的云计算生活——番外2,MySQL组复制
数据库·mysql·云计算·生活·#组复制
工藤学编程3 小时前
分库分表之实战-sharding-JDBC绑定表配置实战
数据库·分布式·后端·sql·mysql
老纪的技术唠嗑局3 小时前
单机分布式一体化数据库的架构设计与优化
数据库·分布式
GBASE4 小时前
“G”术时刻:Linux环境下通过ESQL/C方式连接南大通用GBase 8s数据库(上)
数据库
一只fish4 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(23)
数据库·mysql