【问题标题】:is there any stock management design pattern?有没有库存管理设计模式?
【发布时间】:2011-12-11 19:08:12
【问题描述】:

我们想要设计一个电子商务应用程序,并且我们对一致的库存数字很感兴趣。我们不希望我们的客户在购买一件商品后发现该商品缺货,这是一件大事。 这里的平均订单有大约 60 个不同的项目,这会让事情变得更加棘手。

让我们想象一下这两种情况:

第一种情况:

1) 客户 C​​1 打开在线商店并找到他/她想要购买的产品;

2) 该产品显示为“有货”(但当前库存为 1);

3) 客户 C​​1 将 1 件商品放入购物篮;

4) 客户C2进入网站并选择相同的商品(放入购物篮),仍然标记为“有货”(库存仍然是1);

5) 客户 C​​1 去结账并确认他的购买,应用程序将该商品的当前库存减少到 0;

6) 客户 C​​2 不断购买商品,比如说 35 件其他不同的商品(客户 c2 花了 20 分钟来选择他想要的商品);

7) 客户 C​​2 去结账并确认此次购买,但现在,他购买的第一件商品已售罄(我们无法出售);

8) 应用程序警告客户 C2 第一个商品不再可用,他必须检查他的购物篮;

9) 客户 C​​2 生气并没有购买任何东西就关闭了浏览器。

第二种情况(但我认为它不必要地复杂和错误):

1) 客户 C​​1 打开在线商店并找到他/她想要购买的产品;

2) 该产品显示为“有货”(但当前库存为 1);

3) 客户 C​​1 将 1 件商品放入购物篮(应用程序将该商品的当前库存减至 0);

4) 客户 C​​2 进入网站,看到他/她想要的商品缺货;

5) 客户 C​​2 离开网站;​​

6) 客户 C​​1 继续购买商品(这些商品的库存减少);

7) 客户 C​​1 关闭浏览器;

8) 不时启动一些批处理例程,以删除减少库存但没有被购买/确认的商品。

我们只有几个不同的产品,但我们通过电话销售了大约 30.000.000 件商品,有些产品每天的销量高达 2.000.000 件,因此负责该产品库存的行中的并发可能会同时获得许多更新,因此获得良好性能很重要。

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

任何帮助将不胜感激。

干杯

【问题讨论】:

  • 我会添加一个标签“数据库”,典型的设计模式是关于(面向对象的)代码,而不是数据。
  • 感谢您的提示,我刚刚做到了!干杯

标签: database database-design architecture concurrency


【解决方案1】:

您的第一种情况是大多数公司所做的,这就是库存管理系统具有延期交货概念的原因。

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

这真的不是数据库决定。这是关于您希望如何处理库存的管理决策。

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

【讨论】:

  • 感谢您的提示 :)。我同意你的看法,我只是想知道是否有一个传统的答案(第一个是最常用的)。请记住,我们可以在同一行中进行 2.000.000 次更新(销售相同的产品)。但是,是的,对于一种产品来说,这大约是每秒 24 次更新。在“高峰”时间,我们可以获得多达 300 个单一产品的更新。但是性能只是我们面临的问题之一,一致性和用户体验是正确的优先事项。再次感谢您花时间帮助我!干杯
  • @user1005234:好吧,假设您每天有 2000 万次更新。有了足够的数据服务器通道,这仍然不是问题。但这个问题更适合dba.stackexchange.com
【解决方案2】:

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

话虽如此,我不太确定我是否在您概述的两个场景中遵循了您的问题。即使数据库性能完美无缺,如果您只有一件商品 A 有库存,并且如果商品没有库存,您将无法出售该商品,那么根据定义,这两个客户之一是两个潜在客户之一输掉。如果在第一种情况下,如果 C2 的 35 件商品中的任何一件都没有存货(如果他花了 20 分钟装满购物车,这似乎不太可能),那么 C2 将不买任何东西就离开,那么您在数据库中无法采取任何措施来防止这种情况发生.您的界面可能有一些 AJAX 会在他们购物时提醒他们购物车中的某件商品缺货,就像 StackExchange 在您输入其他人已输入的答案时通知您一样。我完全不清楚,早点告诉 C2 问题是否有益——如果他不能在一次交易中购买所有 35 件物品,他会离开,那么无论你什么时候告诉他,他都会离开那个 C1 买了这个项目。实际上,在这种情况下,没有办法设计系统以免让两位客户中的一位失望。

如果您能多解释一下为什么您的应用程序和您的客户对缺货情况如此敏感,这可能会有所帮助。大多数客户和大多数零售商都相对习惯于这样一个事实,即有时在下订单后,他们会收到通知,零售商无法像他们预期的那样快速完成订单,并且可以选择取消这部分订单。他们的订单,整个订单(假设剩余的物品尚未发货),或者等待物品重新入库。假设您在客户浏览库存时采取措施通知他们库存相对较低(即,如果您正在查看他们只剩下少量库存的商品,亚马逊会告诉您“N 个库存商品”),大多数客户在结账 20 分钟后都合理地理解,并被告知该商品现在缺货,因为他们事先知道他们需要快速订购。大多数零售商都感到很舒服,即使他们的热门商品缺货,他们仍然可以满足比手头库存更多的需求,因为他们毫无疑问会有新的库存在接下来的一两天内到货,或者他们可以急于订购新库存。

【讨论】:

    【解决方案3】:

    您可以尝试了解其他在线零售商的做法,并效仿他们。例如,当亚马逊几乎没有产品时,他们通常会显示一条通知,上面写着“仅剩 n 库存!”尝试找到类似的产品,然后在一个浏览器中将其添加到您的购物车,然后使用其他浏览器查看库存情况。

    【讨论】:

    • 是的,我完全赞成这个。最不让我烦恼的情况是事先被告知库存水平极低,并且(在结账时)他们可能无法完成某个项目。普通的礼貌和诚实会赢得我的青睐。
    【解决方案4】:

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

    我认为最令人气愤的情况是预订机票/渡轮票,而当您到达付款部分时,他们要么超时,要么“不再提供该价格”或诸如此类的废话。特别烦人,因为我不完全是在购买游轮螺旋桨..

    你可以做一个看板例程,你基本上说当你有 10 个(或其他)剩余的东西时,它在前端显示为“剩余 1 个项目”。这意味着同时购买的客户 A 和客户 B 都得到了他们的东西。然后对公司内部的采购发出警告:“我们已经“超出”objectN”。

    我很想知道您的客户在卖什么类型的东西,大多数客户会购买 60 件物品。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      相关资源
      最近更新 更多