一种表单处理方法和装置与流程

文档序号:12603123阅读:185来源:国知局
本申请涉及数据处理
技术领域
:,特别是涉及一种表单处理方法和一种表单处理装置。
背景技术
::随着互联网的飞速发展,网络购物已经融入人们的日常生活中,互联网用户的迅猛增长,给电商平台带来无限商机的同时也带来严峻的考验。由于用户增长迅速,系统要承受高并发处理请求,有些应用由于无法支撑突然的流量激增,甚至会导致系统直接崩溃。出现上述问题的关键原因在于应用的响应速度出现了瓶颈,该现象在高并发竞争库存的下单系统中尤为突出。在多个购买相同商品的订单并发竞争库存时,既要保证系统的吞吐量,也要保证库存扣减正确。目前该场景下的订单处理方法是,在接收到用户提交的生成订单的请求后,首先进行库存扣减,采用数据库行锁更新库存,在库存扣减成功后,收集订单所需要的用户信息等,生成最终的订单,并将订单结果返回至用户。其中,数据库行锁是为了保证线程独占,当一个线程更新一条数据的时候,这条数据就被当前线程锁住,其他线程无法更新这条数据。使用数据库行锁可以保证库存扣减正确。然而,该处理方法中,多张订单只能串行处理,当需要竞争库存的处理订单越来越多时,订单处理的等候队列越来越长,该处理方法效率太低,而且随着并发请求的增大,就会达到系统瓶颈,进而导致系统响应变慢,甚至系统崩溃。技术实现要素:本申请实施例所要解决的技术问题是提供一种表单处理方法,能够提高表单处理效率。相应的,本申请实施例还提供了一种表单处理装置,用以保证上述方法的实现及应用。为了解决上述问题,本申请公开了一种表单处理方法,包括:接收生成表单的请求;获得用于生成所述表单的信息,并根据所述信息生成初始表单;根据所述初始表单中的第一数据更新预置表单中与所述第一数据对应的第二数据;所述第二数据更新成功后,使所述初始表单生效,生成所述表单。进一步,所述初始表单中包含有生效字段,所述生效字段的字段值表征所述初始表单未生效;所述第二数据更新成功后,使所述初始表单生效,生成所述表单,包括:所述第二数据更新成功后,将所述生效字段的字段值设置为所述初始表单生效,生成所述表单。进一步,所述接收生成表单的请求,包括:同时接收至少两个生成表单的请求,包括生成第一表单的请求和生成第二表单的请求。进一步,所述获得用于生成所述表单的信息,并根据所述信息生成初始表单,包括:并行获得用于生成所述第一表单的第一信息及用于生成所述第二表单的第二信息,且并行根据所述第一信息生成第一初始表单及根据所述第二信息生成第二初始表单。进一步,所述根据所述初始表单中的第一数据更新预置表单中与所述第一数据对应的第二数据,包括:当所述第一初始表单及所述第二初始表单均包含所述第一数据时,根据所述第一初始表单和所述第二初始表单中的第一数据采用数据库乐观锁机制更新所述预置表单中与所述第一数据对应的第二数据。进一步,所述第二数据更新成功后,使所述初始表单生效,生成所述表单,包括:当更新后的第二数据满足预置更新条件时,使所述初始表单生效,生成所述表单。进一步,所述第一数据为指定商品的购买数量,所述第二数据为所述指定商品的库存量。本申请实施例还公开了一种表单处理装置,包括:请求接收单元,被配置为接收生成表单的请求;初始化单元,被配置为获得用于生成所述表单的信息,并根据所述信息生成初始表单;数据更新单元,被配置为根据所述初始表单中的第一数据更新预置表单中与所述第一数据对应的第二数据;表单生成单元,被配置为在所述第二数据更新成功后,使所述初始表单生效,生成所述表单。进一步,所述初始表单中包含有生效字段,所述生效字段的字段值表征所述初始表单未生效;表单生成单元,被配置为在所述第二数据更新成功后,将所述生效字段的字段值设置为所述初始表单生效,生成所述表单。进一步,所述请求接收单元,被配置为同时接收至少两个生成表单的请求,包括生成第一表单的请求和生成第二表单的请求。进一步,所述初始化单元,被配置为并行获得用于生成所述第一表单的第一信息及用于生成所述第二表单的第二信息,且并行根据所述第一信息生成第一初始表单及根据所述第二信息生成第二初始表单。与现有技术相比,本申请实施例包括以下优点:本申请实施例通过将获得表单信息的步骤提前至更新预置表单数据的步骤之前,并根据该信息预先生成初始表单,使得该装置在数据更新后直接简单设置初始表单的生效状态即可,缓解了该装置在数据更新阶段的数据处理压力,而且,在多表单并发生成的场景中,该方法使得获得多个表单信息的过程可以并行执行,改变了现有技术中整个表单生成过程都必须串行执行的方式,从而提高了表单处理效率,加快了系统响应速度,改善了用户体验。附图说明图1是本申请的一种表单处理方法实施例的步骤流程图;图2是本申请的另一种表单处理方法实施例的步骤流程图;图3是本申请的一种表单处理过程的示意图;图4是本申请的一种表单处理装置实施例的结构框图。具体实施方式为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。参照图1,示出了本申请的一种表单处理方法实施例的步骤流程图,具体可以包括如下步骤:步骤101,接收生成表单的请求。本申请实施例中,该表单处理装置(以下简称该装置)具体可以是数据库所在服务器本身或设置在该服务器内的装置,也可以是独立于该服务器设置且可以与该服务器交互。该装置可能在当前时刻只接收到一个用户发送的生成表单的请求,例如一个买家在网购时发送的生成一个商品订单的请求;也可能同时接收到多个用户同时发送的生成表单的请求,例如多个用户在秒杀同一商品时同时发送的多个生成商品订单的请求。步骤102,获得用于生成表单的信息,并根据该信息生成初始表单。本申请实施例中,如果该装置接收到一个生成表单的请求,则直接获取用于生成表单的信息,并根据该信息生成初始表单。如果同时接收到多个生成表单的请求,则可以启用多个线程并行获取用于生成表单的各信息,并根据各信息生成与请求对应的初始表单。该初始表单为未正式生效的表单,对用户不可见,这是表单处理过程中的临时状态,这样的表单已经完成初始化,并且已经插入到数据库,只是对用户不可见,并且用户无法对其操作。本步骤中,该初始表单具体可以包含有生效字段,该生效字段的字段值表征该初始表单未生效。例如,生效字段是is_enable,如果is_enable=N,表示为初始表单,即未生效表单。其中,上述用于生成表单的信息的具体内容随着表单类型的不同而不同,例如对于买家的订单,该信息可以包含订单编号,买家编号,商品编号 及商品数量,订单金额等。步骤103,根据初始表单中的第一数据更新预置表单中与第一数据对应的第二数据。在获得该初始表单后,即可根据初始表单中的第一数据,更新数据库中预置表单中对应的第二数据。例如,根据初始表单中对指定商品的购买数量,更新数据库的库存表单中该指定数据的库存量。当需要根据多个初始表单来更新预置表单时,可以采用数据库悲观锁机制或数据库乐观锁机制来控制第二数据的更新过程。具体请参见后续实施例的描述。步骤104,第二数据更新成功后,使初始表单生效,生成表单。在第二数据更新成功后,即可使初始表单生效,生效后的初始表单即为最终生成的表单,该表单对用户可见,该装置可以直接将该生成的表单反馈给用户。该初始表单的生效过程具体可以是设置初始表单中生效字段的字段值,以表征初始表单生效。例如,将生效字段is_enable设置为is_enable=Y。本申请实施例通过将获得表单信息的步骤提前至更新预置表单数据的步骤之前,并根据该信息预先生成初始表单,使得该装置在数据更新后直接简单设置初始表单的生效状态即可,缓解了该装置在数据更新阶段的数据处理压力,而且,在多表单并发生成的场景中,该方法使得获得多个表单信息的过程可以并行执行,改变了现有技术中整个表单生成过程都必须串行执行的方式,从而提高了表单处理效率,加快了系统响应速度,改善了用户体验。参照图2,示出了本申请的另一种表单处理方法实施例的步骤流程图。本实施例针对多表单并发生成的场景,对本方法进行说明。具体可以包括如下步骤:步骤201,同时接收至少两个生成表单的请求,包括生成第一表单的请求和生成第二表单的请求。本实施例中,以该装置同时接收到生成第一表单的请求和生成第二表单的请求为例进行说明。在该装置同时接收到两个以上生成表单的请求时可以 同样按照以下方法生成。步骤202,并行获得用于生成第一表单的第一信息及用于生成第二表单的第二信息,且并行根据第一信息生成第一初始表单及根据第二信息生成第二初始表单。本步骤中,首先可以开启两个线程1、2,线程1获取第一信息,并根据第一信息生成第一初始表单,线程2获取第二信息,并根据第二信息生成第二初始表单,两线程并行执行。其中,可以在第一初始表单和第二初始表单中均设置生效字段is_enable,并设置为is_enable=N,以表征两初始表单未生效。步骤203,当第一初始表单及第二初始表单均包含第一数据时,根据第一初始表单和第二初始表单中的第一数据串行更新预置表单中与第一数据对应的第二数据。当第一初始表单与第二初始表单中不包含在后续数据更新阶段必须串行处理的第一数据时,该装置可以通过两个独立的线程并行执行第一初始表单和第二初始表单的数据更新阶段,例如不同买家对不同商品的订单。然而,当第一初始表单及第二初始表单均包含上述第一数据时,例如不同买家对同一商品的订单,两订单中均包含对指定商品的购买数量,此时数据库在进行数据更新时,必须串行进行,即根据第一初始表单和第二初始表单中的第一数据依次更新预置表单中与第一数据对应的第二数据。具体的,该串行执行的过程中可以对数据库采用悲观锁或者乐观锁的机制更新第二数据。步骤204,第二数据更新成功后,使初始表单生效,生成表单。无论是采用悲观锁机制还是乐观锁机制,初始表单均在第二数据更新成功后生效,获得用户所请求的表单。对于乐观锁的机制,更新第二数据的线程以及使初始表单生效的线程无需同时锁住,对于更新第二数据的过程可以设置更新条件如where条件,在执行使初始表单生效的线程时,需要判断更新后的第二数据是否满足预置的更新条件,若满足再使初始表单生效,生成表单。本申请实施例在多表单并发生成的场景中,通过将获得表单信息的步骤提前至更新预置表单数据的步骤之前,并根据该信息预先生成初始表单,不仅使获得多个表单信息的过程可以并行执行,而且缓解了在数据更新阶段串行执行数据处理的压力,提高了表单处理效率,加快了系统响应速度,改善了用户体验。下面以购买相同产品的订单高并发同时竞争库存的场景为例进行说明,该场景可以是电商平台举行节日促销活动,例如淘宝网的双十一,促销当日会有很有低价优质商品在某一个时间点开放购买。在那一刻大量用户同时购买商品,并发请求直线上升,而库存是决定用户能否购买到商品的关键因素。该场景中,该装置在同时接收到多个生成订单的请求后,并行获取各订单对应的信息,可以包括收货地址、用户信息、商品信息等,然后并行获得各订单的初始订单,初始订单中包括多个字段,各字段及其解释如下表所示:其中,is_enable为生效字段,在初始订单中,字段值为N。在获得初始订单后,将该初始订单插入数据库等待处理。在根据初始表单中的第一数据更新预置表单中与第一数据对应的第二数据的步骤中,该第一数据为指定商品的购买数量,第二数据为指定商品的库存量。预置表单记为库存表,库存表中的字段及解析如下表所示:属性解释goods_id商品idquality库存数在本实施例中,数据更新过程采用乐观锁的机制。该乐观锁可以采用传统的乐观锁,实现时通过在记录上增加一个version字段,当执行更新时where条件需要满足:version=#version#,举个例子:数据库中库存表为:idqualityversion110023在进行数据更新时,如果初始表单中对该指定商品id=1的购买数量为1,则会取到id=1的记录,version是23,quanlity是100,执行更新,把quality置为99,同时库存表的version加1,此时库存表更新为:idQualityVersion19924当根据下一个初始订单进行数据更新时,读取id=1的记录,version是24,quanlity是99,然后重复上述过程执行更新。然而,当2个初始订单同时进行数据更新时,都会取到id=1的记录,version都是23,quanlity都是100。线程1先执行更新,把quality置为99,同时数据库的version加1,此时库存表为:idQualityVersion19924当线程2执行更新时,线程2想把quality更新为98,但是线程2最初读取的version是23而库存表已经更新为version=24,因此线程2执行时不满足version=#version#,也即读取的version与当前的version不同,因此会执行失败。该乐观锁在高并发情况下,有多个线程读取到上一个版本的version,多个线程再执行更新时,只有一个线程能够执行成功,其他会执行失败。该乐观锁给用户带来的体验较差,从而降低了系统吞吐量。在本实施例中,数据更新及初始订单生效的过程所采用的乐观锁,具体可以执行以下语句://#id#:订单id//#goods_id#:订单中购买的商品id//#amount#:订单中实际购买的商品数量updatekucun_tablesetquality=(quality-#amount#)where(quality-#amount#>=0)andgoods_id=#goods_id#//更新库存的sqlupdateorder_tablesetisenable=′Y′whereid=#id#andgoods_id=#goods_id#//更新订单is_enable的sql该乐观锁中预置的更新条件即为指定商品的库存量与指定商品的购买数量的差值大于或等于0,即(quality-#amount#>=0)。该乐观锁不是通过version来控制并发更新,而是通过(quality-#amount#>=0)做到乐观锁控制超卖的效果。回到上面举例的两个线程同时更新库存时,只要满足(quality-#amount#>=0),两个线程都能更新成功,用户体验好,同时也提升了系统吞吐量,尽可能提升数据库的使用效率。当该where条件quality-#amount#>=0判断第二数据更新成功后,即可更改初始订单中的生效字段,使初始订单生效,获得订单。该装置还可以进一步将下单成功的信息及订单信息反馈至用户。如图3所示,在2015-03-0122:02:33.221时刻,有四个用户A、B、C、D同时对商品下单,该装置首先并行获得初始订单,即初始化4条订单;在2015-03-0122:02:33.345时刻,这4条初始订单执行数据更新进行库存扣减,具体采用上述乐观锁的方式进行库存扣减。用户A、B、D的订单由于库存充足,则下单成功,用户C的订单由于库存不足,不满足where条件quality-#amount#>=0,下单失败。需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系 列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。参照图4,示出了本申请一种表单处理装置实施例的结构框图,具体可以包括如下单元:请求接收单元401,被配置为接收生成表单的请求。初始化单元402,被配置为获得用于生成所述表单的信息,并根据所述信息生成初始表单。数据更新单元403,被配置为根据所述初始表单中的第一数据更新预置表单中与所述第一数据对应的第二数据。表单生成单元404,被配置为在所述第二数据更新成功后,使所述初始表单生效,生成所述表单。本申请实施例中该装置通过将获得表单信息的步骤提前至更新预置表单数据的步骤之前,并根据该信息预先生成初始表单,使得该装置在数据更新后直接简单设置初始表单的生效状态即可,缓解了该装置在数据更新阶段的数据处理压力,而且,在多表单并发生成的场景中,该装置使得获得多个表单信息的过程可以并行执行,改变了现有技术中整个表单生成过程都必须串行执行的方式,从而提高了表单处理效率,加快了系统响应速度,改善了用户体验。在另一实施例中,初始表单中包含有生效字段,生效字段的字段值表征初始表单未生效;表单生成单元404,被配置为在所述第二数据更新成功后,将所述生效字段的字段值设置为所述初始表单生效,生成所述表单。在另一实施例中,请求接收单元401,可以被配置为同时接收至少两个生成表单的请求,包括生成第一表单的请求和生成第二表单的请求。初始化单元402,被配置为并行获得用于生成所述第一表单的第一信息 及用于生成所述第二表单的第二信息,且并行根据所述第一信息生成第一初始表单及根据所述第二信息生成第二初始表单。数据更新单元403,被配置为当所述第一初始表单及所述第二初始表单均包含所述第一数据时,根据所述第一初始表单及所述第二初始表单中的第一数据采用数据库悲观锁机制更新所述预置表单中与所述第一数据对应的第二数据。数据更新单元403,也可以被配置为当所述第一初始表单及所述第二初始表单均包含所述第一数据时,根据预置更新条件及所述第一初始表单和所述第二初始表单中的第一数据采用数据库乐观锁机制更新所述预置表单中与所述第一数据对应的第二数据。表单生成单元404在当更新后的第二数据满足所述预置更新条件时,使所述初始表单生效,生成所述表单。在一具体实例中,上述第一数据可以为指定商品的购买数量,第二数据为该指定商品的库存量。本申请实施例还公开了一种电子设备,包括存储器、接收器和处理器。处理器与存储器、接收器通过总线相互连接;总线可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。其中,存储器用于存储一段程序,具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。接收器,用于接收生成表单的请求。处理器用于读取存储器中的程序代码,执行以下步骤:获得用于生成所述表单的信息,并根据所述信息生成初始表单;根据所述初始表单中的第一数据更新预置表单中与所述第一数据对应的第二数据;所述第二数据更新成功后,使所述初始表单生效,生成所述表单。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。在一个典型的配置中,所述计算机设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非持续性的电脑可读媒体(transitorymedia),如调制的数据信号和载波。本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框 图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。以上对本申请所提供的一种表单处理方法和一种表单处理装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1