【发布时间】:2015-02-03 19:35:54
【问题描述】:
我整天都在阅读,寻找在电子商务结账过程中管理并发的正确方法,但我仍然不确定如何开发它。
场景
用户从商店中选择一个产品,转到结帐页面并使用他的信用卡付款。该网站处理付款检查库存可用性,并使用网络服务以及用户信用卡数据和。网络服务最终返回结果,站点显示成功页面(或失败)。
最终结帐和付款验证流程
- 用户开始最后的结帐步骤
- 我检查产品是否有库存
- 如果产品有库存,我会调用支付网络服务
- 如果webservice结果是“OK”,我会显示成功页面
听起来很简单,但我的问题是我获取产品库存的方式:我必须每次都计算它。我有两个表 product 和 sales(仅作为示例表),所以每次销售完成时,都会添加一个链接产品的 sale row它属于。在 product 表上,我有一个产品可以销售的最大次数,比如初始库存。
因此,例如,我的产品 X 的初始库存为 99,两个用户开始结帐流程以购买最后一个可用单位。我检查当前销售的单位 = 98。好的,两个用户都可以购买,我调用 web 服务,最后两个用户都购买并支付了产品。
知道在这种情况下如何处理并发吗?
顺便说一句:我正在使用带有 InnodB 的 MySQL
【问题讨论】:
标签: mysql concurrency transactions locking