【发布时间】:2011-12-11 19:08:12
【问题描述】:
我们想要设计一个电子商务应用程序,并且我们对一致的库存数字很感兴趣。我们不希望我们的客户在购买一件商品后发现该商品缺货,这是一件大事。 这里的平均订单有大约 60 个不同的项目,这会让事情变得更加棘手。
让我们想象一下这两种情况:
第一种情况:
1) 客户 C1 打开在线商店并找到他/她想要购买的产品;
2) 该产品显示为“有货”(但当前库存为 1);
3) 客户 C1 将 1 件商品放入购物篮;
4) 客户C2进入网站并选择相同的商品(放入购物篮),仍然标记为“有货”(库存仍然是1);
5) 客户 C1 去结账并确认他的购买,应用程序将该商品的当前库存减少到 0;
6) 客户 C2 不断购买商品,比如说 35 件其他不同的商品(客户 c2 花了 20 分钟来选择他想要的商品);
7) 客户 C2 去结账并确认此次购买,但现在,他购买的第一件商品已售罄(我们无法出售);
8) 应用程序警告客户 C2 第一个商品不再可用,他必须检查他的购物篮;
9) 客户 C2 生气并没有购买任何东西就关闭了浏览器。
第二种情况(但我认为它不必要地复杂和错误):
1) 客户 C1 打开在线商店并找到他/她想要购买的产品;
2) 该产品显示为“有货”(但当前库存为 1);
3) 客户 C1 将 1 件商品放入购物篮(应用程序将该商品的当前库存减至 0);
4) 客户 C2 进入网站,看到他/她想要的商品缺货;
5) 客户 C2 离开网站;
6) 客户 C1 继续购买商品(这些商品的库存减少);
7) 客户 C1 关闭浏览器;
8) 不时启动一些批处理例程,以删除减少库存但没有被购买/确认的商品。
我们只有几个不同的产品,但我们通过电话销售了大约 30.000.000 件商品,有些产品每天的销量高达 2.000.000 件,因此负责该产品库存的行中的并发可能会同时获得许多更新,因此获得良好性能很重要。
这些都是常见的场景,但是有没有任何设计模式可以为用户提供更好的体验,同时保持库存数量一致,同时产生出色的应用程序性能?
任何帮助将不胜感激。
干杯
【问题讨论】:
-
我会添加一个标签“数据库”,典型的设计模式是关于(面向对象的)代码,而不是数据。
-
感谢您的提示,我刚刚做到了!干杯
标签: database database-design architecture concurrency