【问题标题】:Managing concurrency on store checkout process管理商店结账流程的并发性
【发布时间】:2015-02-03 19:35:54
【问题描述】:

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

场景

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

最终结帐和付款验证流程

  • 用户开始最后的结帐步骤
  • 我检查产品是否有库存
  • 如果产品有库存,我会调用支付网络服务
  • 如果webservice结果是“OK”,我会显示成功页面

听起来很简单,但我的问题是我获取产品库存的方式:我必须每次都计算它。我有两个表 productsales(仅作为示例表),所以每次销售完成时,都会添加一个链接产品的 sale row它属于。在 product 表上,我有一个产品可以销售的最大次数,比如初始库存。

因此,例如,我的产品 X 的初始库存为 99,两个用户开始结帐流程以购买最后一个可用单位。我检查当前销售的单位 = 98。好的,两个用户都可以购买,我调用 web 服务,最后两个用户都购买并支付了产品。

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

顺便说一句:我正在使用带有 InnodB 的 MySQL

【问题讨论】:

    标签: mysql concurrency transactions locking


    【解决方案1】:

    我终于实现了 Optimistic Offline Lock (http://martinfowler.com/eaaCatalog/optimisticOfflineLock.html) 模式,因此每次只有一个用户可以购买一件物品。如果用户放弃交易,我必须非常小心地管理因超时而死掉的用户连接。

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多