有没有库存管理设计模式?

时间:2011-10-20 13:15:55

标签: database database-design architecture concurrency

我们想要设计一个电子商务应用程序,我们对 consitent stock 数字非常关注。我们不希望我们的客户在购买物品后发现该物品缺货,这在这里是件大事。这里的平均订单有大约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,因此负责该产品库存的行中的并发性可能会同时获得许多更新,因此我们获得良好的性能非常重要。

这些都是常见的情况,但有没有任何设计模式可以让用户获得更好的体验,同时保持库存数量一致并产生出色的应用程序性能?

非常感谢任何帮助。

干杯

4 个答案:

答案 0 :(得分:2)

您的第一个场景是大多数公司所做的,这就是为什么库存管理系统具有延期订单的概念。

您的第二种情况对客户更有利,但会在一定程度上降低您的销售额,并且管理起来会更加复杂。

这确实不是数据库决策。这是管理层决定如何处理库存的。

大多数支持足够硬件的关系数据库每天可以处理200万次更改。

答案 1 :(得分:2)

首先,退一步,你真的需要解决前端的库存管理问题吗?由于您销售的是大量相对较小的产品,因此管理您的库存应该相对容易,这样您就永远不会缺货,或者,如果您这样做,它不会阻止您履行订单。有大量的文献和例子涉及计算安全库存,只需要一些统计数据。对我来说,更有意义的是将注意力集中在为公司提供工具(如果它还没有它们)来管理他们的库存以防止缺货情况,而不是试图阻止它们在销售门户中发生

话虽这么说,我不太确定我是否按照你提出的两个方案来解决你的问题。即使数据库性能完美无缺,如果您只有1件库存A而且如果没有库存则无法销售该商品,那么根据定义,这两个客户中的一个是两个潜在客户中的一个失去了。如果在第一种情况下C2没有购买任何东西,如果他的35件物品中没有任何东西没有库存(这似乎不太可能,如果他花了20分钟填充他的购物车),你没有什么可以在数据库中做,以防止这种情况。您的界面可能会有一些AJAX在购物时提醒他们购物车中的某件商品缺货,就像StackExchange在您输入其他人已输入答案的答案时通知您一样。我一点都不清楚,早些时候告诉C2关于这个问题会有所帮助 - 如果他在一次交易中无法购买全部35件物品就要离开,无论你什么时候告诉他,他都会离开C1买了这个项目。实际上,没有办法设计系统,以免在这种情况下让两个客户中的一个失望。

如果您能够更详细地解释为什么您的应用程序和您的客户对缺货情况如此敏感,这可能会有所帮助。大多数客户和大多数零售商相对习惯于这样一个事实,即有时在下订单后,他们会收到通知,零售商无法按照预期尽快完成订单,并且可以选择取消订单。他们的订单,整个订单(假设其余商品尚未发货),或者等待商品重新进入库存。假设您在浏览时做了一些通知客户库存相对较低的事情(例如,如果您正在查看他们只剩下少量库存的商品,亚马逊会告诉您“库存中有N件商品”),大多数顾客在结账时20分钟就能理解并被告知该物品现已缺货,因为他们事先知道需要快速订购。大多数零售商都很自在,即使他们缺少最受欢迎的商品,他们仍然可以满足更多的要求,而不是手头有库存,因为他们无疑会在第二天或第二天有新的库存,或者他们可以急于订购新库存。

答案 2 :(得分:1)

您可以尝试了解其他在线零售商如何做到这一点并模仿它们。例如,当亚马逊几乎没有产品时,他们会经常显示一条通知,说“只剩下 n 库存!”尝试找到这样的产品,然后在一个浏览器中将其添加到您的购物车,并使用其他浏览器查看库存发生的情况。

答案 3 :(得分:0)

我和Justin和Gilbert在一起。这更多是关于物流而不是前端。还有亚马逊解决方案说“我希望所有这些东西都装在同一个数据包中”,(即需要更长的时间,因为所有的位都必须等待最慢的一个)或“将它们分开发送,只要它们一起发送可用“。基本上,你给自己时间补货。

我认为最令人愤怒的情况是预订航空公司/渡轮船票,当你到达付款部分时,他们要么超时,要么“再也没有那个价格了”或者一些这样的废话。特别讨厌,因为我并不完全购买邮轮船螺旋桨..

你可以做一个kan-ban例程,你基本上说当你有10个(或者其他什么)的东西时,它会在前端显示为“剩余1个项目”。这意味着customerA和customerB同时购买他们的东西。然后警告在公司内部进行采购:“我们已经”超出了对象N“。

我很想知道你的客户正在销售什么样的东西,大多数顾客购买了60件物品。