管理商店结帐流程的并发性

时间:2015-02-03 19:35:55

标签: mysql concurrency transactions locking

我一整天都在寻找在电子商务结账过程中管理并发的正确方法,而我仍然不确定如何开发它。

方案

用户从商店中选择一个产品,转到结帐页面并使用他的信用卡付款。该网站处理付款检查库存可用性并使用网络服务以及用户信用卡数据和。 Web服务最终返回结果,站点显示成功页面(或失败)。

最终结帐和付款验证流程

  • 用户开始最后结帐步骤
  • 我检查产品是否有库存
  • 如果产品有库存,我可以拨打付款网络服务
  • 如果网络服务结果为“OK”,则显示成功页面

这听起来很简单,但我的问题是我获得产品库存的方式:我每次都必须计算它。我有两个表产品销售(仅限示例表),因此每次销售完成时,都会添加一个销售行链接产品它属于。在产品表中,我有产品可以出售的最长时间,例如初始库存。

因此,例如,我的产品 X ,初始库存为99,两个用户启动最后一个可用单元的结帐流程。我检查当前售出的单位= 98.好的,两个用户都可以购买,我打电话给网络服务,最后两个用户购买并支付产品。

在这种情况下是否知道如何处理并发?

BTW:我正在使用带有InnodB的MySQL

1 个答案:

答案 0 :(得分:0)

我最终实施了乐观离线锁定http://martinfowler.com/eaaCatalog/optimisticOfflineLock.html)模式,因此只有一个用户可以购买商品。如果用户放弃交易,我必须非常小心地管理用户与超时的连接。