NoSQL竞争条件

时间:2015-12-29 08:41:12

标签: concurrency locking race-condition atomicity nosql

我正在试图找出使用nosql数据库的公司如何解决这个一般的nosql竞争条件问题:

幸运的例子:用户和产品。产品数量为1,有2个用户。当第一个用户试图购买该产品时,系统首先检查数量是否> 0确实> 0,继续创建一个Transaction对象并减少产品数量。第二个用户试图购买产品,系统拒绝,因为数量不是> 0

不幸的是:两个用户都试图同时购买该产品。对于两者,系统确认的数量是> 0因此为两个用户创建了一个Transaction对象,因此第二天就破坏了公司形象......

如何处理这种常见情况?

从我在网上发现的类似案例中,一个建议的解决方案是使用请求队列,并逐个处理请求。但是,如果所有交易都排队,并且您正在运营像亚马逊这样的业务(偶尔会有数百万笔交易),我们如何期望用户在点击现在购买按钮后立即知道他们的购买是否成功?

1 个答案:

答案 0 :(得分:0)

解决此问题的方法之一是允许两个用户同时订购产品。

然后有两种可能的情况:

  1. 其中一位用户未完成交易(拒绝付款,关闭浏览器窗口等)。然后另一个人将获得所需数量的产品。

  2. 两位用户都完成了交易。然后,您将获得一个随机用户的产品,并向另一个人赠送10美元给他/她的优惠券。

  3. 第二种情况应该非常罕见。因此,您不会在优惠券上掏出所有资金,无论结果如何,您的用户都会满意。但是你仍然需要监控第二种情况,以便在系统发生频率超出预期时做出反应并对系统进行更改。