Java生鲜电商平台-商城系统库存问题分析以及产品设计对逻辑/物理删除思考

说明:在生鲜电商的库存设计,是后台的重点,也是难点,关乎商品是否存在超卖。商品的库存增加方式倒不难,直接在后台添加即可,而扣减方式就尤为重要,用户在前端提交订单减库存,还是在支付成功后减库存,两种方案各有利弊,对后台库存数据的变化影响也很大。

这里且先不说两种方案的利弊,先看看淘宝是如何做的,淘宝是将两种方案都做了,给卖家选择。

12306是怎么做的呢,小编大胆的猜想,是支付成功后,减的库存,而且一定是。

下面来分析下两种方案的利弊:

第一种,提交订单的时候减库存:加入A商品库存数为100,采用下单后,减库存的方案,常规商品系统,下单归下单,支付归支付,是区分开的,例如在10分钟内,有99个人下单了并且支付,身下一个订单,同一个时间,有两个人同时下单,比如都是2019.10.10 12:32:12 这个时间点,由于系统在这个时间点判断都还有一个库存,所以他们两个都完成了下单操作,此时库存为商品库存为0,但是实际上是101个人下了单,而且这101个人都可以支付成功,这时候就出现了超卖现象。

出现这种情况的场景有两个:一个是商品火爆,短时间内被下单,还有一个是商品库存量小。

优点:实时减库存,避免付款时应库存不足,减库存问题

弊端:存在说在短时间内,很多人都下单了,但是没有支付,一直锁定着库存数据。真正的买家买不到

第二种,在支付成功的时候减库存:案例同第一种方案中的案例,也是存在同样的问题,在同一个时间点:比如都是2019.10.10 12:32:12 这个时间点,100件库存,有101人同时支付,产品依然存在超卖现象

优点:防止有人恶意下单,占用库存

弊端:在并发量很高的情况下,依然会存在超卖现象。买家认为已经下单了,但是告知不能付款

解决方案

关于超卖问题,根本上是不可解决的,但是可以通过一些优化方案,将风险降低

方案一:限制用户下单数量

方案二:对恶意下单的做标识

方案三:后台库存预警

方案四:备用库存

关于秒杀活动对库存问题的分析

数据库最基本的增删改查,一套最基本的完整的流程:数据的创建-->数据的修改-->数据删除,其中数据的删除,又分为逻辑删除和物理删除。

那么什么是逻辑删除,物理删除呢,他们又有什么区别,在软件设计过程中为什么有些数据只能设计成逻辑删除,不能物理删除?

简单的说:作为用户,在软件上将数据删除,而实际上在数据库中没有删除,只是从用户层显示数据已经删除了。而物理删除,用户在软件上将数据删除了,数据库中的数据也被彻底的删除了。

逻辑删除/物理删除

举一个例子,关于订单的删除,你是一个淘宝买家用户,你在淘宝上购买了一件商品,付款成功,并且也收到货,确认收货了,整个订单的状态已经完成了,你把这个订单删除了,这时候的删除只是逻辑删除了。也就是数据库中,这个订单还是存在,但是你手机上不会显示这个订单了。为什么数据库中的订单还是存在,不一并删除了?这就设计到数据的关联问题:

这个订单是你下单,支付成功并完成删除动作,没有错,单单从你的角度考虑,它已经完成了。我们先不考虑系统层面为什么不能删除,1 从卖家角度考虑,卖家要统计他的销售情况,不能因为买家将订单删除了,这条订单就不统计了吧,2 从商品角度考虑,a,商品是有商品库存的,例如100件商品,你购买了一件,变成99件;b 商品的评分评星。等等。3 从物流的角度考虑,由于订单是订单,物流单是物流单,但是物流单和订单是有关联的,且不讨论是单项关联还是双向关联,把订单删除了,物流单关联订单为null,这时候是不是会报错呢。等等各方面因数,以及后期新功能的开发,牵连到订单,都会受到影响。

那有人会说,那我设计系统,所有的数据均设计为逻辑删除,不是可以了,从逻辑上讲,是的,但是有些又可以物理删除,比如你创建一个数据,这条数据没有和他的业务有关联,仅仅是一条数据,这时候删除,就可以物理删除了,有人会问,系统设计,数据都是有关联的,如果没有关联,就不是系统了,是的,我是说这条数据还没和他其他业务有关联,不代表没有关联,一旦数据关联了,有时候逻辑删除都不行的,例如一级目录,二级目录,而且目录已经和其他业务产生了关联关系,这时候要删除一级目录,由于二级目录是寄托在一级目录下的,所以一级目录连逻辑删除都不可以,删除了,二级目录就没有了寄托了哈

谈一谈本地删除和云端删除

举一个的例子:现在很多人会把通讯录备份到云端,在换手机的时候,已经从云端同步下来即可,在删除通讯录联系人的时候,手机经常回提示,是否要同步删除云端数据,如果同步删除,则是云端删除。此时有人会问,本地删除,云端也删除了,是不是就是逻辑删除呢。不一定,看系统是如何设计,如果还是设计成物理删除,那么数据库中你的数据其实还是存在的,所以云端删除和物理删除没有直接的关系。

再谈一谈后台产品关于禁用的概念

禁用又是什么,禁用后又可以启用,这里在对账号体系经常用到,由于账号关联的东西很多,所以账号在原则上设计是不能物理删除的(这里强调是原则上,由于又有账号注销一说,所以账号不是不能物理删除的)账号用来禁用启用,限用时段,例如你在用一个系统,由于现实因数,你不能在用这个系统了,系统管理员要把你账号封了,这时候就是禁用操作,禁用后不可登。为什么不能物理删除,前文已经说过了,那么为什么这时候账号是禁用,而不是逻辑删除了,因为存在一种场景,你后面又回来了,又要用这个账号,从业务角度,你用之前的账号才是对的,而不是重新在键一个新的账号。禁用后一键启用就可以了。另外就是to c 产品禁用到的禁用时段,比如大家经常玩的王者荣耀,账号被限制1小时不能玩,这时候就是对你账号禁用一小时,一小时后重新恢复正常。

说了这么多,产品在设计的时候,什么情况下考虑物理删除,什么情况下考虑逻辑删除,以及本地删除和云端删除,需要从整个系统层面考虑,删除后会影响什么业务,另外在不确定的情况线下,不要轻易物理删除,因为后期也可能会关联到,这些后端开发会考虑到的,但是作为一个产品,要懂得删除这些道理,不要被后端认为一个小白,只会提“无脑需求”,这样一来,沟通也好了,业务的开展也方便了。

关于账号注销

最后的最后,聊一下关于账号的注销,好像国家有规定,用户可以创建账号,也可以自行注销账号,像qq,支付宝等均有账号注销功能,那么账号注销,从用户角度,彻底清空了账号了,他还物理删除呢,还是逻辑删除呢?注意这是国家规定的一个方面,目前市面上大部分的产品是没有注销功能的,不用不管不登录就好了。这...关于账号的注销又何去何从....

Java生鲜电商平台-商城系统库存问题分析以及产品设计对逻辑/物理删除思考的更多相关文章

  1. Java生鲜电商平台-优惠券系统的架构设计与源码解析

    Java生鲜电商平台-优惠券系统的架构设计与源码解析 电商后台:实例解读促销系统 电商后台系统包括商品管理系统.采购系统.仓储系统.订单系统.促销系统.维权系统.财务系统.会员系统.权限系统等,各系统 ...

  2. Java生鲜电商平台-促销系统的架构设计与源码解析

    Java生鲜电商平台-促销系统的架构设计与源码解析 说明:本文重点讲解现在流行的促销方案以及源码解析,让大家对促销,纳新有一个深入的了解与学习过程. 促销系统是电商系统另外一个比较大,也是比较复杂的系 ...

  3. Java生鲜电商平台-商城后台架构与原型图实战

    Java生鲜电商平台-商城后台架构与原型图实战 说明:生鲜电商平台的运营平台,其中需要很多的功能进行管理.目前把架构与原型图实战分享给大家,希望对大家有用. 仪表盘/首页,简单统计,报表页,运营快捷口 ...

  4. Java生鲜电商平台-商城优惠券设计要点复盘与总结

    Java生鲜电商平台-商城优惠券设计要点复盘与总结 Java生鲜电商平台本文将从优惠券设计用户端,需求端,业务流程全方案解析优惠券设计方案 为什么要设计优惠券 设计优惠券的核心:拉新和促活 新产品上线 ...

  5. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  6. Java生鲜电商平台-App系统架构开发与设计

    Java生鲜电商平台-App系统架构开发与设计 说明:阅读此文,你可以学习到以下的技术分享 1.Java生鲜电商平台-App架构设计经验谈:接口的设计2.Java生鲜电商平台-App架构设计经验谈:技 ...

  7. Java生鲜电商平台-RBAC系统权限的设计与架构

    Java生鲜电商平台-RBAC系统权限的设计与架构 说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上 ...

  8. Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载) 前言:任何一个平台也好,系统也好,挣钱养活团队这个是无可厚非的,那么对于一个生鲜B2B平台盈利模式( 查看:http://www.cn ...

  9. Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享

    Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享 说明:任何一个电商行业都涉及到退货与退款的问题,但是生鲜电商行业还设有一个显著的特点,那就是换货.在人性面前,各种各样的退货,退款,换货的售 ...

随机推荐

  1. Redis来啦~~

    一. 先聊点别的 1. sql & nosql sql指关系型数据库,如Oracle,MySQL等,nosql泛指非关系型数据库,如MongoDB,Redis等:SQL数据存在特定结构的表中, ...

  2. 域控权限提升PTH攻击

    0x01 漏洞利用条件 1.被pth攻击的计算机未打补丁(KB2871997)2.拿到一台域成员主机并且拿到管理员组的域用户的NTML 3.对方主机存在相同账号并且是管理员组成员 0x02 本地用户N ...

  3. adb shell常用命令

    一.文件操作相关命令 1.文件操作命令 子命令 参数 说明 cd 无 进入目录 cat [-beflnstuv] [-B bsize] [file...] 查看文件内容-n:显示行号-b:显示行号,但 ...

  4. Android 状态栏通知 Notification

    private NotificationManager manager; private Notification.Builder builder; @Override protected void ...

  5. windows客户端访问FTP服务器

    客户端访问FTP服务器步骤: 首先双击此电脑,在弹出的窗口输入如下信息 刚安装完的FTP服务器只有一个pub目录,因为这里是使用匿名用户登录的 FTP服务器默认的匿名目录在/var/ftp/pub/下 ...

  6. December 14th, Week 50th Saturday, 2019

    If you have got a talent, protect it. 如果你有天赋,要去保护她. From Jim Carrey. If you think you have a talent, ...

  7. 面试连环炮系列(一):如何保证Redis高可用和高并发

    如何保证Redis高可用和高并发? Redis主从架构,一主多从,可以满足高可用和高并发.出现实例宕机自动进行主备切换,配置读写分离缓解Master读写压力. Redis高可用方案具体怎么实施? 使用 ...

  8. 想精通分布式以及高并发架构?那你得先搞定ZooKeeper架构原理!

    Zookeeper是分布式一致性问题的工业解决方案,是Apache Hadoop下解决分布式一致性的一个组件,后被分离出来成为Apache的顶级项目. 工程来源:是雅虎公司内部项目,据说雅虎内部很多项 ...

  9. PHP实现微信扫码自动登陆与注册,参考实例

    微信开发已经是现在phper必须要掌握的一项基本的技术了,其实做过微信开发的都知道微信接口非常的强大做起来也非常的简单,这里我们一起来看一个微信自动登陆注册的例子. php 微信扫码 pc端自动登陆注 ...

  10. CSS transition 的默认值

    语法 transition: property duration timing-function delay|initial|inherit; 示例: div {   width: 100px;    ...