我想知道是否有人可以分享任何关于并发用户电子商务折扣引擎设计的最佳实践。
在我的系统中,用户可以被分配购买积分,允许他们免费购买物品。因此,例如,用户将选择一篮子产品,并将其传递给折扣引擎,在折扣引擎中,将根据分配给用户帐户的积分应用规则。假设用户有5个信用额度,我如何确保一个信用额度可以使用一次且只使用一次?我需要引入某种形式的数据库锁定吗?我将在单个表中存储信用计数,或者可能创建不同的记录来对每个信用进行建模?
我认为这类似于一个售票系统,在这个系统中,一张票不能同时卖给多个客户。这似乎是为了确保,即使在高度并发的环境中,没有购买积分可以使用两次。
希望我至少能说出一点道理!
发布于 2011-07-23 06:46:36
只要我们使用一个不会影响事务的SQL数据库,就可以将耗尽信用的操作放到单个事务中(可能是通过让DB将信用数量限制为非负数之类的),两个并发事务应该不可能使用相同的信用。数据库真的很擅长这类事情,这正是它们的作用。
基本上,只要将所有共享的内容都放到数据库中,并将一起放在一个事务中的操作打包在一起,前端代码就可以假装根本没有并发。当然,这也是RDBMS存在的全部原因。
EDIT:您的模式不会影响此方法的正确性(尽管您将从何处开始/结束事务),但它将影响您的性能,以及DB的实现方式。我之所以提出这个问题,是因为你用“database-schema”标记了这个问题,而你似乎没有意识到,如果你正确地编写了查询,ACID DB就会实现你想要的结果。
https://stackoverflow.com/questions/6796821
复制相似问题