对象管理方法
【技术领域】
[0001]本发明的实施例涉及对象管理,具体涉及基于最后使用用户信息对对象的剩余数进行扣减的方法和装置。
【背景技术】
[0002]在对象管理领域中,当用户请求对象时需要扣减对象的剩余数,并且当用户取消请求时需要还原对象的剩余数。为了顺利实现对象的调整,在现有技术中,提出了两种方案,涉及将对象相关参数存储在一张表或者一个缓存中,当需要调整对象时对相关字段或属性进行修改。具体地,在第一种方案中,将对象的标识和剩余数作为一条记录存储在数据库表中,每当用户请求对象时,首先根据对象标识查询并判断剩余数是否足够扣减,然后再更新剩余数;当用户取消请求时,根据对象标识还原剩余数。在第二种方案中,将对象标识、对象总数、已用总数作为一条记录存储在数据库表中,每当用户请求对象时,首先根据对象标识查询并判断对象总数与已用总数之差是否足够扣减,然后再更新已用总数;当用户取消请求时,根据对象标识还原已用总数。
[0003]然而,第一种方案和第二种方案都存在可能导致剩余数为负(即,已用总数超过对象总数或者称作对象超额扣减)的问题。第一种方案是在扣减剩余数时判断剩余数是否大于或等于请求数,第二种方案是判断已用总数与请求数之和是否小于或等于对象总数。但是,两个方案都存在一个共同的问题,即当同时存在还原剩余数和扣减剩余数的情况时,可能出现对象超额扣减和剩余部分对象但用户无法请求使用的情况。
[0004]例如,当对象的剩余数为20、线程A的请求数为15、并且线程B的请求数为10时,可能出现以下几种情况:剩余数为5 (线程A扣减成功,然后线程B判断剩余数不够因此扣减失败);剩余数为10(线程B扣减成功,然后线程A判断剩余数不够因此扣减失败);以及剩余数为-5 (线程A判断剩余数足够扣减,线程B判断剩余数足够扣减,然后线程A和线程B分别进行对象扣减)。此外,如果此时出现线程C还原剩余数,则情况会更加复杂。
[0005]为了解决可能出现的对象超额扣减的问题,在现有技术中提出了通过增加一个字段进行逐次轮训的方法。在该方法中,先查询剩余数,然后逐个线程进行对象扣减。在该方法中,可能需要更新多次数据库,即,对数据库进行多次写操作。然而,这种方式性能较低且资源消耗较大。
[0006]因此,在对象管理中,当同时存在多个用户请求对象及取消请求时,由于并发导致扣减和还原剩余数时出现对象超额扣减的概率很高,使得用户在请求对象之后被告知没有对象的情况的出现。为了解决对象超额扣减和剩余部分对象但用户无法请求使用的问题,需要提出一种简单实用的方式来杜绝对象超额扣减的出现以及充分利用剩余对象,从而实现较高的对象管理效率同时消耗较少的资源。
【发明内容】
[0007]鉴于现有技术中的一个或多个问题,提出了一种用于对用户请求的对象的剩余数进行扣减的方法和装置,能够解决现有技术中存在对象超额扣减和剩余部分对象但用户无法请求的问题。
[0008]在本发明的一个方面,提出了一种用于对用户请求的对象的剩余数进行扣减的方法,所述方法包括:
[0009]根据所述对象的标识从数据库表中获取对象总数、已用总数和最后使用用户信息;
[0010]如果所述对象总数与所述已用总数之差delta大于0,则将所述已用总数更新为已用总数与所述用户的请求数η之和,并且使用所述用户的标识和所述用户请求对象的时间戳来更新所述最后使用用户信息;
[0011]根据所述对象的标识和更新后的最后使用用户信息从所述数据库表中查询更新后的已用总数;以及
[0012]如果查询到更新后的已用总数并且更新后的已用总数与所述对象总数之差m大于0,则将所述数据库表中的已用总数更新为已用总数与m之差,并且向所述用户返回请求成功消息,所述请求成功消息包含指示所述用户的请求数为n-m的信息。
[0013]优选地,在根据所述对象的标识从数据库表中获取对象总数、已用总数和最后使用用户信息之前,所述方法还包括:
[0014]创建数据库表,所述数据库表包括标识、对象总数、已用总数、以及最后使用用户信息。
[0015]优选地,所述方法还包括:如果delta小于或等于0,则不进行对象扣减,并且向所述用户返回请求失败消息。
[0016]优选地,所述方法还包括:如果未查询到更新后的已用总数,则不更新所述数据库表,并且向所述用户返回请求成功消息,所述请求成功消息包含指示所述用户的请求数为η的信息。
[0017]优选地,所述方法还包括:如果m小于或等于0,则不更新所述数据库表,并且向所述用户返回请求成功消息,所述请求成功消息包含指示所述用户的请求数为η的信息。
[0018]优选地,所述最后使用用户信息包括最后使用用户标识和最后使用用户请求对象的时间戳。
[0019]优选地,根据所述对象的标识从数据库表中获取对象总数、已用总数和最后使用用户信息包括:
[0020]从所述数据库表中查询与所述对象的标识相同的标识,并且根据查询到的标识从所述数据库表中获取与所述对象相对应的对象总数、已用总数、以及最后使用用户信息。
[0021]在本发明的另一个方面,提出了一种用于对用户请求的对象的剩余数进行扣减的装置,所述装置包括:
[0022]用于根据所述对象的标识从数据库表中获取对象总数、已用总数和最后使用用户信息的模块;
[0023]用于如果所述对象总数与所述已用总数之差delta大于0,则将所述已用总数更新为已用总数与所述用户的请求数η之和,并且使用所述用户的标识和所述用户请求对象的时间戳来更新所述最后使用用户信息的模块;
[0024]用于根据所述对象的标识和更新后的最后使用用户信息从所述数据库表中查询更新后的已用总数的模块;以及
[0025]用于如果查询到更新后的已用总数并且更新后的已用总数与所述对象总数之差m大于0,则将所述数据库表中的已用总数更新为已用总数与m之差,并且向所述用户返回请求成功消息的模块,所述请求成功消息包含指示所述用户的请求数为n-m的信息。
[0026]优选地,所述装置还包括:
[0027]用于创建数据库表的模块,所述数据库表包括标识、对象总数、已用总数、以及最后使用用户信息。
[0028]优选地,所述装置还包括:
[0029]用于如果delta小于或等于0,则不进行对象扣减,并且向所述用户返回请求失败消息的t吴块。
[0030]优选地,所述装置还包括:
[0031]用于如果未查询到更新后的已用总数,则不更新所述数据库表,并且向所述用户返回请求成功消息的模块,所述请求成功消息包含指示所述用户的请求数为η的信息。
[0032]优选地,所述装置还包括:
[0033]用于如果m小于或等于0,则不更新所述数据库表,并且向所述用户返回请求成功消息的模块,所述请求成功消息包含指示所述用户的请求数为η的信息。
[0034]优选地,所述最后使用用户信息包括最后使用用户标识和最后使用用户请求对象的时间戳。
[0035]优选地,用于根据所述对象的标识从数据库表中获取对象总数、已用总数和最后使用用户信息的模块包括:
[0036]用于从所述数据库表中查询与所述对象的标识相同的标识,并且根据查询到的标识从所述数据库表中获取与所述对象相对应的对象总数、已用总数、以及最后使用用户信息的t吴块。
[0037]采用本方案,只需要在数据库表中增加一个最后使用用户信息字段,每次扣减剩余数之前先判断是否还有剩余数,然后直接扣除请求数,再判断数据库中是否出现对象超额扣减情况,最后返回真实扣减数。这样完全杜绝了出现对象超额扣减的情况,也不会导致用户请求成功之后而没有对象情况的出现,从而实现较高的对象管理效率同时消耗较少的资源。
【附图说明】
[0038]为了更好地理解本发明,将根据以下附图对本发明的实施例进行描述:
[0039]图1是示出了根据本发明实施例用于基于最后使用用户信息扣减剩余数的方法的流程图;以及
[0040]图2是示出了根据本发明实施例用于基于最后使用用户信息扣减剩余数的系统的示意图。
[0041]附图没有对实施例的所有电路或结构进行显示。贯穿所有附图相同的附图标记表示相同或相似的部件或特征。
【具体实施方式】
[0042]下面将详细描述本发明的具体实施例,应当注意,这里描述的实施例只用于举例说明,并不用于限制本发明。在以下描述中,为了提供对本发明的透彻理解,阐述了大量特定细节。然而,对于本领域普通技术人员显而易见的是:不必采用这些特定细节来实行本发明。在其他实例中,为了避免混淆本发明,未具体描述公知的电路、材料或方法。
[0043]在整个说明书中,对“ 一个实施例”、“实施例”、“ 一个示例”或“示例”的提及意味着:结合该实施例或示例描述的特定特征、结构或特性被包含在本发明至少一个实施例中。因此,在整个说明书的各个地方出现的短语“在一个实施例中”、“在实施例中”、“一个示例”或“示例”不一定都指同一实施例或示例。此外,可以以任何适当的组合和/或子组合将特定的特征、结构或特性组合在一个或多个实施例或示例中。此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。这里使用的术语“和/或”包括一个或多个相关列出的项目的任何和所有组合。
[0044]下面,将参照图1描述用于基于最后使用用户信息扣减剩余数的方法。
[0045]首先,在步骤101,创建数据库表,该数据库表包括对象的标识、对象总数、已用总数、最后使用用户信息等属性,所述属性是一一对应的关系。一个标识与一个具体对象相对应。举例说明,对象可以为带宽、容量、产品等。在对象为产品的情况下,对象的标识为产品所对应的库存量单位(Stocking Keeping Unit,sku),并且包括以下属性,例如产品类型、产品型号、产品颜色、产品尺寸、产品内存、产品功能、产品容量等。最后使用用户信息包括最后使用用户标识和最后使用用户请求对象的时间戳。该时间戳可以精确到毫秒。
[0046]然后,在步骤102,根据用户请求的对象所对应的标识来从数据库表中获取对象总数、已用总数和最后使用用户信息。具体地,从数据库表中查询与用户请求的对象的标识相同的标识,并且根据查询到的标识从数据库表中获取与对象相对应的对象总数、已用总数、以及最后使用用户信息。此处的“请求”可以根据对象而不同,例如,当对象为带宽时,请求对象可以理解为请求使用带宽,当对象为产品时,请求对象可以理解为请求购买产品。
[0047]接下来,在步骤103,判断获取的对象总数与已用总数之差delta是否大于O。如果delta小于或等于0,则在步骤104,不进行对象扣减,并且向用户返回请求失败消息。
[0048]如果delta大于0,则在步骤105,将已用总数salenum更新为已用总数salenum与用户的请求数η之和,并且使用用户的标识和用户请求对象的时间戳来更新最后使用用户信息。然后,在步骤106,根据对象的标识和更新后的最后使用用户信息从数据库表中查询更新后的已用总数。
[0049]如果未查询到更新后的已用总数(例如,这可能由于另一用户也在请求对象而导致数据库表被再次更新),则在步骤107,不更新数据库表,并且向用户返回请求成功消息,该请求成功消息包含指示用户的请求数为η的信息。
[0050]如果查询到更新后的已用总数,则在步骤108,判断更新后的已用总数与对象总数之差m是否大于O。如果m小于或等于0,则在步骤109,不更新数据库表,并且向用户返回请求成功消息,该请求成功消息包含指示用户的请求数为η的信息。如果m大于0,则在步骤110,将数据库表中的已用总数更新为已用总数与m之差,并且向用户返回请求成功消息,该请求成功消息包含指示用户的请求数为n-m的信息。
[0051]下面,将以对象为用户请求购买的产品为例,对用于基于最后使用用户信息扣减剩余数的方法进行详细描述。
[0052]假定线程A的用户请求购买5个产品,并且在步骤102中从数据库表中获取的产品的对象总数为20并且已用总数为10。在步骤103中,计算出对象总数与已用总数之差为10,大于0,因此在步骤105,将已用总数更新为15,并且将最后购买人信息更新为线程A的用户的信息。如果此时线程B的用户请求购买3个产品,并且通过步骤102至步骤105将已用总数更新为18,并且将最后购买人信息更新为线程B的用户的信息,则在步骤106,线程A的用户无法从数据库表中查询到更新后的已用总数,因此在步骤107,对于线程A的用户,不更新数据库表,并且向线程A的用户返回购买成功消息,该消息指示线程A的用户的购买数为5。对于线程B的用户,由于最后购买人信息已更新为线程B的用户的信息,因此在步骤106,线程B的用户从数据库表中查询到更新后的已用总数。然后,在步骤108,判断m为-2,小于0,因此在步骤109,不更新数据库表,并且向线程B的用户返回购买成功消息,该消息指示线程B的用户的购买数为3。
[0053]在另一个示例中,假定线程A的用户请求购买5个产品,并且在步骤102中从数据库表中获取的产品的对象总数为20并且已用总数为10。在步骤103中,计算出对象总数与已用总数之差为10,大于0,因此在步骤105,将已用总数更新为15,并且将最后购买人信息更新为线程A的用户的信息。如果此时线程B的用户请求购买6个产品,并且通过步骤102至步骤105将已用总数更新为21,并且将最后购买人信息更新为线程B的用户的信息,则在步骤106,线程A的用户无法从数据库表中查询到更新后的已用总数,因此在步骤107,对于线程A的用户,不更新数据库表,并且向线程A的用户返回购买成功消息,该消息指示线程A的用户的购买数为5。对于线程B的用户,由于最后购买人信息已更新为线程B的用户的信息,因此在步骤106,线程B的用户从数据库表中查询到更新后的已用总数。然后,在步骤108,判断m为1,大于0,因此在步骤110,将数据库表中的已用总数更新为20,并且向线程B的用户返回购买成功消息,该消息指示线程B的用户的购买数为5。
[0054]通过上述过程,实现了基于最后购买人信息对用户请求购买的产品的剩余数进行扣减,避免了出现产品超额扣减的情况,也不会导致用户购买成功之后而没有产品情况的出现。
[0055]图2示出了用于基于对象最后使用用户信息扣减剩余数的系统200的示意图。系统200包括处理器210,例如,数字信号处理器(DSP)。处理器210可以是用于执行本文所描述的过程的不同动作的单个单元或多个单元。系统200还可以包括输入/输出(I/O)单元230,用于从其他实体接收信号或者向其他实体发送信号。
[0056]此外,系统200包括存储器220,该存储器220可以具有以下形式:非易失性或易失
性存储器,例如,电可擦除可编程只读存储器(EEPROM)、闪存等。存储器220存储有计算机可读指令,当处理器210执行该计算机可读指令时,该计算机可读指令使处理器210执行本文所述的动作。
[0057]以上的详细描述通过使用示意图、流程图和/或示例,已经阐述了检查方法和系统的众多实施例。在这种示意图、流程图和/或示例包含一个或多个功能和/或操作的情况下,本领域技术人员应理解,这种示意图、流程图或示例中的每一功能和/或操作可以通过各种结构、硬件、软件、固件或实质上它们的任意组合来单独和/或共同实现。在一个实施例中,本发明的实施例所述主题的若干部分可以通过专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、或其他集成格式来实现。然而,本领域技术人员应认识到,这里所公开的实施例的一些方面在整体上或部分地可以等同地实现在集成电路中,实现为在一台或多台计算机上运行的一个或多个计算机程序(例如,实现为在一台或多台计算机系统上运行的一个或多个程序),实现为在一个或多个处理器上运行的一个或多个程序(例如,实现为在一个或多个微处理器上运行的一个或多个程序),实现为固件,或者实质上实现为上述方式的任意组合,并且本领域技术人员根据本公开,将具备设计电路和/或写入软件和/或固件代码的能力。此外,本领域技术人员将认识到,本公开所述主题的机制能够作为多种形式的程序对象进行分发,并且无论实际用来执行分发的信号承载介质的具体类型如何,本公开所述主题的示例性实施例均适用。信号承载介质的示例包括但不限于:可记录型介质,如软盘、硬盘驱动器、紧致盘(CD)、数字通用盘(DVD)、数字磁带、计算机存储器等;以及传输型介质,如数字和/或模拟通信介质(例如,光纤光缆、波导、有线通信链路、无线通信链路等)。
[0058]虽然已参照几个典型实施例描述了本发明,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本发明能够以多种形式具体实施而不脱离发明的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。
【主权项】
1.一种用于对用户请求的对象的剩余数进行扣减的方法,所述方法包括: 根据所述对象的标识从数据库表中获取对象总数、已用总数和最后使用用户信息; 如果所述对象总数与所述已用总数之差delta大于O,则将所述已用总数更新为已用总数与所述用户的请求数η之和,并且使用所述用户的标识和所述用户请求对象的时间戳来更新所述最后使用用户信息; 根据所述对象的标识和更新后的最后使用用户信息从所述数据库表中查询更新后的已用总数;以及 如果查询到更新后的已用总数并且更新后的已用总数与所述对象总数之差m大于O,则将所述数据库表中的已用总数更新为已用总数与m之差,并且向所述用户返回请求成功消息,所述请求成功消息包含指示所述用户的请求数为n-m的信息。2.根据权利要求1所述的方法,其中,在根据所述对象的标识从数据库表中获取对象总数、已用总数和最后使用用户信息之前,所述方法还包括: 创建数据库表,所述数据库表包括标识、对象总数、已用总数、以及最后使用用户信息。3.根据权利要求1所述的方法,还包括: 如果delta小于或等于O,则不进行对象扣减,并且向所述用户返回请求失败消息。4.根据权利要求1所述的方法,还包括: 如果未查询到更新后的已用总数,则不更新所述数据库表,并且向所述用户返回请求成功消息,所述请求成功消息包含指示所述用户的请求数为η的信息。5.根据权利要求1所述的方法,还包括: 如果m小于或等于O,则不更新所述数据库表,并且向所述用户返回请求成功消息,所述请求成功消息包含指示所述用户的请求数为η的信息。6.根据权利要求1至5中任一项所述的方法,其中,所述最后使用用户信息包括最后使用用户标识和最后使用用户请求对象的时间戳。7.根据权利要求1至5中任一项所述的方法,其中,根据所述对象的标识从数据库表中获取对象总数、已用总数和最后使用用户信息包括: 从所述数据库表中查询与所述对象的标识相同的标识,并且根据查询到的标识从所述数据库表中获取与所述对象相对应的对象总数、已用总数、以及最后使用用户信息。8.一种用于对用户请求的对象的剩余数进行扣减的装置,所述装置包括: 用于根据所述对象的标识从数据库表中获取对象总数、已用总数和最后使用用户信息的模块; 用于如果所述对象总数与所述已用总数之差delta大于O,则将所述已用总数更新为已用总数与所述用户的请求数η之和,并且使用所述用户的标识和所述用户请求对象的时间戳来更新所述最后使用用户信息的模块; 用于根据所述对象的标识和更新后的最后使用用户信息从所述数据库表中查询更新后的已用总数的模块;以及 用于如果查询到更新后的已用总数并且更新后的已用总数与所述对象总数之差m大于O,则将所述数据库表中的已用总数更新为已用总数与m之差,并且向所述用户返回请求成功消息的模块,所述请求成功消息包含指示所述用户的请求数为n-m的信息。9.根据权利要求8所述的装置,还包括: 用于创建数据库表的模块,所述数据库表包括标识、对象总数、已用总数、以及最后使用用户信息。10.根据权利要求8所述的装置,还包括: 用于如果delta小于或等于0,则不进行对象扣减,并且向所述用户返回请求失败消息的模块。11.根据权利要求8所述的装置,还包括: 用于如果未查询到更新后的已用总数,则不更新所述数据库表,并且向所述用户返回请求成功消息的模块,所述请求成功消息包含指示所述用户的请求数为η的信息。12.根据权利要求8所述的装置,还包括: 用于如果m小于或等于0,则不更新所述数据库表,并且向所述用户返回请求成功消息的模块,所述请求成功消息包含指示所述用户的请求数为η的信息。13.根据权利要求8至12中任一项所述的装置,其中,所述最后使用用户信息包括最后使用用户标识和最后使用用户请求对象的时间戳。14.根据权利要求8至12中任一项所述的装置,其中,用于根据所述对象的标识从数据库表中获取对象总数、已用总数和最后使用用户信息的模块包括: 用于从所述数据库表中查询与所述对象的标识相同的标识,并且根据查询到的标识从所述数据库表中获取与所述对象相对应的对象总数、已用总数、以及最后使用用户信息的模块。
【专利摘要】本发明对象管理方法,描述了一种用于对用户请求的对象的剩余数进行扣减的方法。所述方法包括:根据所述对象的标识从数据库表中获取对象总数、已用总数和最后使用用户信息;如果所述对象总数与所述已用总数之差delta大于0,则将所述已用总数更新为已用总数与所述用户的请求数n之和,并且使用所述用户的标识和所述用户请求对象的时间戳来更新所述最后使用用户信息;根据所述对象的标识和更新后的最后使用用户信息从所述数据库表中查询更新后的已用总数;以及如果查询到更新后的已用总数并且更新后的已用总数与所述对象总数之差m大于0,则将所述数据库表中的已用总数更新为已用总数与m之差,并且向所述用户返回请求成功消息,所述请求成功消息包含指示所述用户的请求数为n-m的信息。
【IPC分类】G06F17/30
【公开号】CN104899290
【申请号】CN201510305437
【发明人】邓波
【申请人】北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
【公开日】2015年9月9日
【申请日】2015年6月5日