文档章节

MyBatis的Batch处理导致秒杀系统超卖的问题

陶邦仁
 陶邦仁
发布于 2015/11/15 16:14
字数 382
阅读 308
收藏 3

#1 问题描述# 2015-08-14 周五,线上乐购做活动,1元秒杀大闸蟹,库存设置为10 ,结果卖出去15个,并且线上存在脏数据,有些关联表数据不全。

执行原理:乐购调用订单平台下单,在订单平台调用促销逻辑,在促销逻辑中加限购逻辑。 #2 排查过程#

  1. 走查乐购秒杀的业务代码实现,在高并发的情况下,不会出现线程安全问题;【正常】
  2. 理解业务执行过程中,事务调用流程:Spring事务=>MyBatis事务=>druid事务(数据源)=>DB事务(数据库);【MyBatis的Batch处理导致上层Spring事务失效】
  3. 查看mysql binlog日志,如下:【不正常】

输入图片说明

发现多个事务被合并成了一个事务执行,合并事务之后有啥问题?当合并事务之后,其中有一个事务执行失败后,上层的Spring就无法得知要回滚具体的哪一个事务。 4. MyBatis的配置文件中,SqlSessionTemplate配置存在问题:【不正常】

输入图片说明

#3 解决问题#

  1. 注释掉SqlSessionTemplate中BATCH的配置:

输入图片说明

#4 问题总结# Mybatis内置的ExecutorType有3种,默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,batch模式如果和原spring事务一起使用,将无法回滚。

© 著作权归作者所有

共有 人打赏支持
陶邦仁
粉丝 1649
博文 420
码字总数 1483887
作品 0
海淀
技术主管
私信 提问
加载中

评论(1)

周浩杰
周浩杰
79
如何解决秒杀的性能问题和超卖的讨论

如何解决秒杀的性能问题和超卖的讨论 最近业务试水电商,接了一个秒杀的活。之前经常看到淘宝的同行们讨论秒杀,讨论电商,这次终于轮到我们自己理论结合实际一次了。 ps:进入正文前先说一点...

fdhay
2016/09/08
71
0
关于并发、超卖处理的思路

做电商网站,经常会有各种秒杀和热门商品,所以高并发的处理一直是电商最重要的事情。这里记录下当初自己是如何处理的 写在前面: 1、本文设计到的并发处理均是针对纵向,不针对横向扩展,即...

卖小女孩的小火柴
2015/10/13
4.8K
6
mysql处理高并发,防止库存超卖

先来就库存超卖的问题作描述:一般电子商务网站都会遇到如团购、秒杀、特价之类的活动,而这样的活动有一个共同的特点就是访问量激增、上千甚至上万人抢购一个商品。然而,作为活动商品,库存...

凯文加内特
2016/01/25
636
0
如何解决秒杀的性能问题和超卖的讨论

最近业务试水电商,接了一个秒杀的活。之前经常看到淘宝的同行们讨论秒杀,讨论电商,这次终于轮到我们自己理论结合实际一次了。   ps:进入正文前先说一点个人感受,之前看淘宝的ppt感觉都...

真爱2015
2016/08/15
73
1
Java解决高并发下商品库存更新

一、问题分析 先来就库存超卖的问题作描述:一般电子商务网站都会遇到如团购、秒杀、特价之类的活动,而这样的活动有一个共同的特点就是访问量激增、上千甚至上万人抢购一个商品。 然而,作为...

嘴角轻扬30
01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【机器学习PAI实战】—— 玩转人工智能之商品价格预测

摘要: 我们经常思考机器学习,深度学习,以至于人工智能给我们带来什么?在数据相对充足,足够真实的情况下,好的学习模型可以发现事件本身的内在规则,内在联系。我们去除冗余的信息,可以...

zhaowei121
11分钟前
0
0
Spring拓展接口之FactoryBean,我们来看看其源码实现

是什么 FactoryBean的源码比较简单,大家可以细读下其注释,我做了简单的如下翻译 /** * 实现此接口的bean不能用作普通bean。此bean暴露的对象是通过getObject()创建的对象,而不是它自身...

java菜分享
15分钟前
1
0
Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用...

阿里云官方博客
22分钟前
0
0
深入理解 Hive 分区分桶 (Inceptor)

分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描其他不关心的分区,快速定位,提高查...

hblt-j
30分钟前
0
0
数据结构

什么是数据结构 1、数据 数据是描述客观世界的数字、字符以及一切能够输入到计算机中,并且能够被计算机程序处理的符号集合。简言之,数据就是计算机加工处理的原料,是信息的载体。 2、数据...

stars永恒
40分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部