具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在介绍本申请实施例之前,为了方便本领域技术人员更好的理解本申请,首先对本申请中涉及的术语进行解释。
内存是指存储数据的存储空间,内存可包括分布式内存。分布式内存是将数据分别存储在不同的内存上,并且可存储在一个服务器上也可存储在多个服务器中,这种分布式内存的数据存储方式可以扩充存储空间,也能提升数据存储性能。
预算额度是指该物品的库存总量,举例来说,如果在售商品的总量为10,每次对总量扣减1,在扣减10次之后,总量为0,将不再允许对在售商品进行扣减。预算标识用于对特定物品进行唯一标识,例如,预算标识可标识某一物品的数量或者某一物品的金额。
活动标识用于对不用活动进行标识,例如,通过活动标识将“双十一”活动与“新人红包”活动进行区分,如下表1所示,每个活动可与一个预算标识(表2中的主预算标识)对应,假设某一物品参加三个活动,则每个活动分别对应不同的预算标识。在实际处理中,在接收到对某一物品进行扣减操作的请求时,需要先对接收到的请求中的活动标识进行校验,如果校验通过,则可进行下一步的库存扣减操作。
预算标识 |
活动标识 |
001 |
2678791 |
002 |
2678792 |
003 |
2678793 |
表1
根据本发明的构思,数据库中的预算额度将对分发到各个内存中。在实际使用中,各个内存可放置在不同的应用服务器中。由于应用服务器的费用远低于数据库服务器,并且一台应用服务器可设置为多个虚拟内存,如此可大大减少服务器的使用数量。
假设与活动标识2678791对应的预算标识001的预算额度为1000个,分别存储在5个内存分片中,每个内存分片中的预算额度为2000个。应注意,表2中示出的分发方式仅为示例性的,在下文中将就各种分发方式进行详细解释。
主预算标识 |
子预算标识 |
预算额度 |
001 |
1001 |
2000 |
001 |
1002 |
2000 |
001 |
1003 |
2000 |
001 |
1004 |
2000 |
001 |
1005 |
2000 |
表2
图1示出根据本发明的示例性实施例的库存扣减方法的流程图,本实施例包括以下步骤:
在步骤S110:将同一物品的预算额度从数据库从各个内存分发。应注意,在极致情况下,可将数据库仅分发到一个内存中,但内存的存储空间远小于数据库,而且不稳定,所以在实际应用中,一般不考虑这种情况。
参照图2,图2示出了将预算额度从数据库向各个内存分发的架构示意图。在图2中,数据库201中的预算额度可分别向内存1至内存N分发,内存的数量可根据活动的规模预先确定。以下将预算额度的分发方式进行详细描述。
在可替换实施例中,可将总预算额度全部分发到各个内存中,例如,某一商品的预算额度为10000个,则将预算额度存储在数据库中,然后数据库分别向各个内存分发预算额度,每个内存分得的预算额度可根据需要设置为相同或不同的。例如,假设有四个内存,数据库可向四个内存分别发放2500个预算额度。
但在实际应用中,内存所在的服务器可能由于某些原因导致数据丢失,例如,当内存所在的服务器由于天气原因、电力等原因导致断电时,存储在内存中的数据会丢失,这样如果扣减操作路由到该内存时将无法进行扣减操作,为了避免这种情况,在可替换的实施例中,可在数据库中保留预定预算额度,然后将总预算额度扣减预定预算额度之后的预算额度全部分发到各个内存。例如,某一商品的预算额度为10000个,在数据库中保留预定预算额度,然后数据库再分别向各个内存分发预算额度,假设有四个内存,则可在数据库中保留1000个预算额度,然后向四个内存分别发放2000个预算额度。应注意,在总预算额度扣减预定预算额度之后,各个内存分得的预算额度可以是相同的也可以是不同的。
此外,在实际使用中,还可能会面临这样的问题:海量并发访问库存,例如,在淘宝“双十一”活动中,可能需要处理海量的扣减操作。如果某一内存被扣减为0,也就是说该内存不能再进行扣减操作,则需要将路由到该内存的扣减操作路由到其它内存,但这种处理方式会导致响应慢并且在保证其它内存正常工作的情况下进行负载均衡是很难处理的。考虑到这样的问题,在可替换的实施例中,可在数据库中保留预定预算额度的情况下,将总预算额度扣减预定预算额度之后的预算额度全部分发到各个内存并且预定数量大于分发到各个内存中的预算额度。而分发到各个内存中的预算额度可在实际应用中根据每秒钟的扣减量而确定,这会根据活动的不同而不同。例如,对于每秒钟扣减量大的商品可将内存的预算额度设置为比较大,这样防止在很短时间内内存的额度不足导致的重复访问数据库,相反,对于每秒钟扣减量小的商品则可将预算额度设置为比较小。
在步骤S120,接收对所述物品进行扣减操作的请求,所述请求包括扣减操作的活动标识和所述物品的扣减额度。例如,在淘宝的“双十一”抢红包中,来自山东的某用户参加抢红包的活动,这样,就会接收到来自该用户的对于红包进行扣减操作的请求。
随后,在步骤S130,根据所述请求,确定将进行扣减操作的内存。
具体来说,在步骤S120接收到所述请求后,所述方法根据活动标识对该请求进行校验,根据活动标识对操作进行校验是本领域技术人员常用的一种技术手段,在此将不再进行详细描述。
若校验通过(即,可参加活动),则可根据如表1所示的对应关系,确定与活动标识对应的预算标识(表2中的主预算标识)。
然后从与所述预算标识对应的多个内存中确定进行扣减操作的内存。具体来说,根据发出请求的用户信息,从所述多个内存中确定进行扣减操作的内存。例如,在确定某一区域的用户由内存1002处理时,当通过请求确定该用户来自该区域时,将该用户发出的请求发送到内存1002处理。
随后,在步骤S140,根据扣减额度,对所述内存上的剩余额度进行扣减,其中,剩余额度是指该内存上的预算额度被扣减之后的额度。例如,该内存的预算额度为2000个,被扣减200次后,该内存的剩余额度为1800个。
在实际应用中,可能存在进行扣减操作的内存的剩余额度不足以进行扣减操作的情况。在这种情况下,可从数据库中提取预算额度。基于此,需要先对内存进行判断,从而确定该内存是否可进行扣减操作。在可替换的实施例中,在步骤S130确定将进行扣减操作的内存之后,判断所述内存的剩余额度是否大于或等于扣减额度。
若所述内存的剩余额度大于或等于扣减额度,则按照步骤S140进行扣减。若所述内存的剩余额度小于扣减额度,则从所述数据库中扣减平均分到各个内存的预算额度,然后将该内存的剩余额度增加所述预定额度,从而使所述内存的剩余额度变大(这一过程也可被称作对内存进行“补充”的操作)。在此基础上,根据扣减额度,对所述内存上的剩余额度进行扣减。
应注意,为了保证数据的准确性,在对内存进行“补充”操作的过程中,禁止对所述内存进行访问,也就是说,对该内存进行“上锁”,该内存的剩余库存不发生改变。例如,当该内存的剩余数量为10时,当所述请求中的扣减额度为30时,该内存无法执行该操作,正在对该内存进行“补充”操作时,另一请求的扣减额度为20,这时如果执行20的扣减操作,则会导致数据不准确。因此,在可替换实施例中,若剩余额度小于扣减额度,则从所述数据库中保留的预定预算额度中扣减平均分到各个内存的预算额度;将内存的剩余额度增加平均分到各个内存的预算额度,在这一过程中,禁止对所述内存进行访问。
如上所述,根据本发明的示例性实施例的库存扣减方法通过将数据库上的预算额度分发到各个内存并在各个内存上执行扣减操作,从而避免了对DB的访问,降低了DB费用。在此基础上,可在数据库上保留预定预算额度,这样即使在内存数据丢失的情况下也可处理库存扣减操作。更进一步地,可将数据库上保留的预定预算额度大于分发到各个内存中的预算额度,这样,在并发访问大的情况下,通过从数据库保留的预定预算额度中提取平均分发到各个内存中的预算额度来实现并发库存扣减操作。
为了更清楚地明白本发明的发明构思,以下将参照图3描述根据本发明的示例性实施例的库存扣减设备的框图。本领域普通技术人员将理解:图3中的库存扣减设备仅示出了与本示例性实施例相关的组件,在库存扣减设备中还包括除了图3中示出的组件之外的通用组件。
参照图3,所述库存扣减设备可包括:分发单元310、接收单元320、确定单元330和扣减单元340。
分发单元310用于将同一物品的总预算额度从数据库向各个内存分发。应注意,在极致情况下,可将数据库仅分发到一个内存中,但内存的存储空间远小于数据库,而且不稳定,所以在实际应用中,一般不考虑这种情况。
在可替换的实施例中,分发单元310可将总预算额度分发到各个内存中。每个内存分得的预算额度可根据需要设置为相同或不同的。
在另一可替换实施例中,为了避免内存所在的服务器可能由于某些原因导致数据丢失,分发单元310可在数据库中保留预定预算额度的情况下,将剩余的预算额度分发到各个内存中。应注意,在总预算额度扣减预定预算额度之后,各个内存分得的预算额度可以是相同的也可以是不同的。
在另一可替换实施例中,考虑到高并发访问扣减库存的情况,分发单元310在数据库中保留预定预算额度的情况下进行如下设置:预定预算额度大于分发到各个内存中的预算额度。分发到各个内存中的预算额度可在实际应用中根据每秒钟的扣减量而确定,这会根据活动的不同而不同。例如,对于每秒钟扣减量大的商品可将内存的预算额度设置为比较大,这样防止在很短时间内内存的额度不足导致的重复访问数据库,相反,对于每秒钟扣减量小的商品则可将预算额度设置为比较小。
接收单元320用于接收对所述物品进行扣减操作的请求,所述请求包括扣减操作的活动标识和所述物品的扣减额度。确定单元330可根据所述请求,确定将进行扣减操作的内存。
确定单元330包括子校验单元(未示出)、第一确定单元(未示出)和第二确定单元(未示出)。
子校验单元根据活动标识对所述请求进行校验,若校验通过,则第一确定单元确定与活动标识对应的预算标识。如表1所示,每个活动标识与一个预算标识对应。
在第一确定单元确定了预算标识之后,第二确定单元可从与所述预算标识对应的多个内存中确定进行扣减操作的内存。如表2所示,每个预算标识(表2中的主预算标识)可对应多个内存,在确定与预算标识对应的多个内存的情况下,可根据所述请求中包括的用户ID来确定执行扣减操作的内存。
扣减单元340根据扣减额度,对所述内存上的剩余额度进行扣减,所述剩余额度是所述内存的预算额度被扣减之后的额度。
在可替换的实施例中,所述库存扣减设备还包括判断单元(未示出)。判断单元在根据扣减额度对所述内存上的剩余额度进行扣减之前,判断所述内存的剩余额度是否大于或等于扣减额度;若剩余额度大于或等于扣减额度,则扣减单元根据扣减额度对所述内存上的剩余额度进行扣减。
在可替换的实施例中,所述库存扣减设备还包括预算额度处理单元(未示出)。判断单元判断出剩余额度小于扣减额度,则预算额度处理单元从所述数据库中保留的预定预算额度中扣减平均分到各个内存的预算额度;将内存的剩余额度增加平均分到各个内存的预算额度。
此外,所述库存扣减设备还可包括内存管理单元(未示出)。内存管理单元在对所述数据库进行扣减并且内存的剩余额度增加的过程中,禁止对所述内存进行访问。
如上所述,根据本发明的示例性实施例的库存扣减设备通过将数据库上的预算额度分发到各个内存并在各个内存上执行扣减操作,从而避免了对DB的访问,降低了DB费用。在此基础上,可在数据库上保留预定预算额度,这样即使在内存数据丢失的情况下也可处理库存扣减操作。更进一步地,可将数据库上保留的预定预算额度大于分发到各个内存中的预算额度,这样,在并发访问大的情况下,通过从数据库保留的预定预算额度中提取平均分发到各个内存中的预算额度来实现并发库存扣减操作。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的物品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序物品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序物品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序物品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程库存扣减设备的处理器以产生一个机器,使得通过计算机或其他可编程库存扣减设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程库存扣减设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程库存扣减设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。