一种事务处理的方法和装置的制作方法

文档序号:6385786阅读:257来源:国知局
专利名称:一种事务处理的方法和装置的制作方法
技术领域
本发明涉及数据处理技术领域,具体涉及一种事务处理的方法和装置。
背景技术
事务是指作为单个逻辑工作单元执行的一系列操作。例如网上购物的一次交易,其交易过程为一个事务,该过程至少包括以下几步数据库操作更新客户所购商品的库存信息;保存客户付款信息,可能包括与银行系统的交互;生成订单并且保存到数据库中;更新用户相关信息,例如购物数量等等。正常的情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新。但是,如果在这一系列过程中任何一个环节出了差错,例如在更新商品库存信息时发生异常、该顾客银行帐户存款不足等,都将导致交易失败。一旦交易失败,数据库中所有信息都必须保持交易前的状态不变,比如最后一步更新用户信息时失败而导致交易失败,那么必须保证这笔失败的交易不影响数据库的状态,即库存信息没有被更新、用户也没有付款,订单也没有生成。否则,数据库的信息将会一片混乱而不可预测。现有技术中通常使用2PC协议,即两阶段提交协议,进行事务的处理。2PC协议具体包括I)应用程序调用事务协调器中的提交方法;2)事务协调器将联络事务中涉及的每个资源管理器,并通知它们准备提交事务;3)为了以肯定的方式响应准备阶段,资源管理器必须将自己置于以下状态确保能在被要求提交事务时提交事务,或在被要求回滚事务时回滚事务。大多数资源管理器会将包含其计划更改的日记文件(或等效文件)写入持久存储区中。如果资源管理器无法准备事务,它会以一个否定响应来回应事务协调器;4)事务协调器收集来自资源管理器的所有响应;5)在第二阶段,事务协调器将事务的结果通知给每个资源管理器。如果任一资源管理器做出否定响应,则事务协调器会将一个回滚命令发送给事务中涉及的所有资源管理器。如果资源管理器都做出肯定响应,则事务协调器会指示所有的资源管理器提交事务。一旦通知资源管理器提交,此后的事务就不能失败了。通过以肯定的方式响应第一阶段,每个资源管理器均已确保,如果以后通知它提交事务,则事务不会失败。对于以上网购交易的例子,使用2PC协议进行交易的处理,具体由一个称为事务协调器的单独软件组件来处理该交易事务,以避免数据库信息的混乱。但是,2PC协议中仅仅依赖一个事务协调器对事务中的一系列操作逐一处理,存在事务处理效率较低的问题。

发明内容
为了提高事务处理的效率,本发明提供了一种事务处理的方法和装置。本发明提供了一种事务处理的方法,所述方法包括
预先在数据库中存储事务的事务信息,所述事务信息包括事务标识和事务状态,所述事务状态分为已重做、未重做和重做中;判断当前事务是否满足预设触发条件,如果是,则获取所述当前事务的事务标识对应的事务信息;根据所述事务信息重新执行所述当前事务。优选地,所述判断当前事务是否满足预设触发条件,包括预设所述事务提交失败为所述触发条件;判断所述当前事务是否满足事务提交失败。优选地,所述判断当前事务是否满足预设触发条件,包括预先设置任一时间段为触发周期;在上次满足触发周期的时刻与当前时刻的时间差值不小于所述触发周期的情况下,判断当前事务的事务状态是否为未重做。优选地,所述预先在数据库中存储事务的事务信息,包括预先在所述数据库中创建若干大小相等的表格;在所述表格中存储事务的事务信息。优选地,所述方法,还包括预设删除条件;判断所述数据库中存储所述事务信息的表是否满足所述删除条件,如果是,则删除所述表。本发明还提供了一种事务处理的装置,所述装置包括存储模块,用于预先在数据库中存储事务的事务信息,所述事务信息包括事务标识和事务状态,所述事务状态分为已重做、未重做和重做中;第一判断模块,用于判断当前事务是否满足预设触发条件;第一获取模块,用于在所述第一判断模块结果为是时,获取所述当前事务的事务标识对应的事务信息;执行模块,用于根据所述第一获取模块中的所述事务信息重新执行所述当前事务。优选地,所述第一判断模块,包括第一设置子模块,用于预设所述事务提交失败为所述触发条件;第一判断子模块,用于判断所述当前事务是否满足事务提交失败。优选地,所述第一判断模块,包括第二设置子模块,用于预先设置任一时间段为触发周期;第二判断子模块,用于在上次满足触发周期的时刻与当前时刻的时间差值等于所述触发周期的情况下,判断当前事务的事务状态是否为未重做。优选地,所述存储模块,包括创建子模块,用于预先在所述数据库中创建若干表;存储子模块,用于在所述表中存储事务的事务信息。优选地,所述装置,还包括第一设置模块,用于预设删除条件;
第二判断模块,用于判断所述数据库中存储所述事务信息的表是否满足所述删除条件;删除模块,用于在所述第二判断模块结果为是时,删除所述表。本发明预先在数据库中存储事务的事务信息,所述事务信息包括事务标识和事务状态;其次,在满足触发条件的情况下,获取当前事务的事务标识对应的事务信息;最后,根据获取的事务信息对当前事务重做。与现有技术相比,本发明不再依赖于事务协调器,而是通过预先存储用于事务处理的事务信息,使得在满足触发条件时,可以直接依据预先存储的事务标识对应的事务信息,来重新执行事务,从而提高事务处理的效率。


为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例一的事务处理的方法的流程图;图2为本发明实施例一的用于存储事务信息的事务信息表的示意图;图3为本发明实施例一的步骤102的执行方式之一的流程图;图4为本发明实施例一的步骤102的执行方式之一的流程图;图5为本发明实施例二的事务处理的方法的流程图;图6为本发明实施例三的事务处理的装置的结构图;图7为本发明实施例三的所述存储模块601的结构图;图8为本发明实施例三的所述第一判断模块602的结构图;图9为本发明实施例三的所述第一判断模块602的结构图;图10为本发明实施例三的装置还包括的模块结构图。
具体实施例方式下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。实施例一、参考图1,图1为本发明提供的一种事务处理的方法实施例一的流程图,本实施例具体可以包括步骤101、预先在数据库中存储事务的事务信息,所述事务信息包括事务标识和事务状态,所述事务状态分为已重做、未重做和重做中。本实施例中,预先在数据库中存储事务的事务信息,该事务信息包括了发生事务时的相关数据,预先将发生的事务的事务信息存储于数据库中,便于后续步骤根据事务信息进行事务的重做。实际操作中,用于存储事务的数据库可以是关系型数据库,例如Oracle等关系型数据库,由于关系型数据库具有较高的稳定性,其可靠性众所周知,所以可以用于存储所有事物的事务信息,便于后续步骤在关系型数据库中查找相关事务信息,从而进行事务的重做。用于存储事务信息的数据库也可以是内存数据库,由于内存数据库主要用于提升数据处理的性能,所以其可靠性低于关系型数据库。本实施例中通常使用关系型数据库进行事务信息的存储。本实施例中,用于存储事务信息的格式可以是表格的形式,具体用于存储的数据结构可以如图2所示。参考图2,图2为用于存储事务信息的事务信息表的示意图,图2所示的表中的参数的存储使用了 varcharf类型,其主要是为了提高插入数据时的系统性能,同时避免相关操作带来的性能损耗。通常情况下,事务信息表中的事务信息参数可以使用5个varchar2 (4000)来存储,本实施例为了支持特殊情况下的存储空间扩展,在数据库中预留了 5个varchar2 (4000)字段。实际操作中,事务信息包括事务标识,事务标识用来唯一标识任一事务的事务信息,本实施例中,可以通过事务标识在存储事务信息的数据库中查找与其对应的事务信息。事务标识可以为事务信息中的session id字段,通常sessionid字段可以通过随机数算法生成。事务标识也可以根据事务的发生顺序设置,用来唯一标识任一事务。同时事务标识还可以由session id字段和该事务的发生顺序同时确定。具体的,事务信息中的事务状态字段可以分为已重做、未重做和重做中三个状态,“已重做”表示其对应的事务已经被重做;“未重做”表示其对应的事务没有被重做;“重做中”表示其对应的事务还没有被重做。事务状态为“重做中”的事务会被重做。步骤102、判断当前事务是否满足预设触发条件,如果是,则进入步骤103。本实施例中,预先存储事务的事务信息,判断当前执行的事务是否满足预先设置的事务重新执行的触发条件,如果当前事务满足触发条件,则进入步骤103。实际操作中,触发条件可以预先设置为事务提交失败,即当事务提交失败时,该提交失败的事务被重做。此种情况下,参考图3,图3为步骤102的执行方式之一,具体执行步骤如下步骤301、预先将事务提交失败设置为触发事务重做的触发条件。步骤302、判断当前事务是否满足预先设置的事务提交失败的触发条件,如果是,则进入步骤103。具体的,判断事务提交失败的方式为现有技术,在此不再赘述,采用何种方式判断事务提交失败的方式并不影响本实施例的实施。实际操作中,触发条件还可以设置为系统时间满足预先设置的用于事务信息扫描的周期,同时被扫描的当前事务的事务信息中的事务状态字段为未重做。此种情况下,参考图4,图4也为步骤102的执行方式之一,具体执行步骤如下步骤401、预先设置任一时间段为触发周期。步骤402、判断上次满足触发周期的时刻与当前时刻的时间差值是否不小于预设的触发周期,如果是,则进入步骤403。步骤403、判断当前事务的事务状态是否为未重做,如果是,则进入步骤103。具体的,触发周期可以根据用户需求设置,同时可以调节已设置的触发周期。如果触发周期设置为5分钟,则系统将每隔5分钟对存储有事务信息的数据库进行扫描,以便找出需要重做的事务。实际操作中,通过计算获取上次满足触发周期的时刻与当前时刻的时间差值,SP系统进行相邻两次数据库扫描的时间间隔,将此经过计算获得的时间间隔与预先设置的触发周期进行比较,如果该时间间隔大于或者等于预设的触发周期,则说明系统需要对数据库进行扫描。具体的,事务信息包括事务状态字段,事务状态用来表示该事务的状态,系统根据事务的状态决定该事务是否需要重做。事务状态具体分为三种状态,具体为已重做、未重做和重做中。如果当前事务的事务状态为未重做,则进入步骤103。本实施例中,如果当前事务没有满足预设触发条件,则当前事务正常执行。步骤103、获取所述当前事务的事务标识对应的事务信息。本实施例中,在当前事务满足预设的触发条件的情况下,根据该当前事务的事务标识查询用来存储事务信息的数据库,获取与该事务标识对应的事务信息,该事务信息包括所有用来事务重做的数据信息。步骤104、根据所述事务信息重新执行所述当前事务。本实施例根据获取的当前事务的事务信息对当前事务进行重做,即重新执行的当前事务。本实施例中,预先在数据库中存储事务的事务信息,所述事务信息包括事务标识和事务状态;其次,在满足触发条件的情况下,获取当前事务的事务标识对应的事务信息;最后,根据获取的事务信息对当前事务重做。与现有技术相比,本发明不再依赖于事务协调器,而是通过预先存储用于事务处理的事务信息,使得在满足触发条件时,可以直接依据预先存储的事务标识对应的事务信息,来重新执行事务,从而提高事务处理的效率。实施例二、由于数据存储的数据量很大时,可能会影响系统的性能,所以,为了降低存储的事务信息给正常事务处理带来的性能影响,并能够及时回收存储空间,可以采取对事务信息及时清理的策略。参考图5,图5为本发明提供的一种事务处理的方法实施例二的流程图,本实施例具体可以包括步骤501、预先在所述数据库中创建若干表,在所述表中存储事务的事务信息。本实施例中,预先在用来存储事务信息的数据库中创建若干表,用来存储事务的事务信息。实际操作中,创建的若干表可以为大小相等的表,如果一个表特别大,则其存储的数据量也会非常大,可能导致影响系统性能的后果。具体的,存储于表中的事务信息可以根据时间划分,例如,以周为单位,将在同一周执行的事务的事务信息存储于同一张表中,利于后续步骤的事务信息的清理。步骤502、判断当前事务是否满足预设触发条件,如果是,则进入步骤503 步骤503、获取所述当前事务的事务标识对应的事务信息;步骤504、根据所述事务信息重新执行所述当前事务。本实施例中的步骤502 504与实施例一中的步骤102 104相同,所以在此不再赘述。步骤505、预设事务信息的删除条件。本实施例中,预先设置清理存储于数据库中的事务信息的删除条件,具体可以设置为一周,即对数据库中的存储时间为一周的事务信息进行删除处理,以便回收数据库的存储空间。步骤506、判断所述数据库中存储所述事务信息的表是否满足所述删除条件,如果是,则进入步骤507。本实施例中,判断在数据库中用于存储事务信息的表是否满足预先设置的删除条件,例如,某些事务信息存储于任一表中且其存储时间达到一周,如果预设的删除条件为存储时间为一周的事务信息需要被清理,则系统将该表删除。步骤507、删除所述满足预设删除条件的表。本实施例中,在数据库中存储事务信息的表满足预设删除条件的情况下,则删除满足预设删除条件的表,以释放存储空间。与实施例一相比,本实施例在数据库中用表的形式对事务信息进行存储,便于存储时间较长的事务信息的及时清理,以及存储空间的回收,同时提高了系统的性能。实施例三、参考图6,图6为本发明提供的一种事务处理的装置实施例三的装置结构图,本实施例具体可以包括存储模块601,用于预先在数据库中存储事务的事务信息,所述事务信息包括事务标识和事务状态,所述事务状态分为已重做、未重做和重做中;参考图7,图7为所述存储模块601的结构图,所述存储模块601包括创建子模块701,用于预先在所述数据库中创建若干表;存储子模块702,用于在所述表中存储事务的事务信息。第一判断模块602,用于判断当前事务是否满足预设触发条件;参考图8,图8为所述第一判断模块602的结构图,所述第一判断模块602,可以包括第一设置子模块801,用于预设所述事务提交失败为所述触发条件;第一判断子模块802,用于判断所述当前事务是否满足事务提交失败。参考图9,图9为所述第一判断模块602的结构图,所述第一判断模块602,也可以包括第二设置子模块901,用于预先设置任一时间段为触发周期;第二判断子模块902,用于在上次满足触发周期的时刻与当前时刻的时间差值等于所述触发周期的情况下,判断当前事务的事务状态是否为未重做。第一获取模块603,用于在所述第一断模块结果为是时,获取所述当前事务的事务标识对应的事务信息;执行模块604,用于根据所述第一获取模块中的所述事务信息重新执行所述当前事务。参考图10,图10为本实施例的装置结构图还包括的模块结构图,具体还包括第一设置模块1001,用于预设删除条件;
第二判断模块1002,用于判断所述数据库中存储所述事务信息的表是否满足所述删除条件;删除模块1003,用于在所述第二判断模块结果为是时,删除所述表。本实施例预先在数据库中存储事务的事务信息,所述事务信息包括事务标识和事务状态;其次,在满足触发条件的情况下,获取当前事务的事务标识对应的事务信息;最后,根据获取的事务信息对当前事务重做。与现有技术相比,本发明不再依赖于事务协调器,而是通过预先存储用于事务处理的事务信息,使得在满足触发条件时,可以直接依据预先存储的事务标识对应的事务信息,来重新执行事务,从而提高事务处理的效率。进一步的,本实施例在数据库中用表的形式对事务信息进行存储,便于存储时间较长的事务信息的及时清理,以及存储空间的回收,同时提高了系统的性能。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备
所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排
除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。以上对本发明实施例所提供的事务处理的方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种事务处理的方法,其特征在于,所述方法包括预先在数据库中存储事务的事务信息,所述事务信息包括事务标识和事务状态,所述事务状态分为已重做、未重做和重做中;判断当前事务是否满足预设触发条件,如果是,则获取所述当前事务的事务标识对应的事务信息;根据所述事务信息重新执行所述当前事务。
2.根据权利要求1所述的方法,其特征在于,所述判断当前事务是否满足预设触发条件,包括预设所述事务提交失败为所述触发条件;判断所述当前事务是否满足事务提交失败。
3.根据权利要求1所述的方法,其特征在于,所述判断当前事务是否满足预设触发条件,包括预先设置任一时间段为触发周期;在上次满足触发周期的时刻与当前时刻的时间差值不小于所述触发周期的情况下,判断当前事务的事务状态是否为未重做。
4.根据权利要求1所述的方法,其特征在于,所述预先在数据库中存储事务的事务信息,包括预先在所述数据库中创建若干大小相等的表格;在所述表格中存储事务的事务信息。
5.根据权利要求4所述的方法,其特征在于,所述方法,还包括预设删除条件;判断所述数据库中存储所述事务信息的表是否满足所述删除条件,如果是,则删除所述表。
6.一种事务处理的装置,其特征在于,所述装置包括存储模块,用于预先在数据库中存储事务的事务信息,所述事务信息包括事务标识和事务状态,所述事务状态分为已重做、未重做和重做中;第一判断模块,用于判断当前事务是否满足预设触发条件;第一获取模块,用于在所述第一判断模块结果为是时,获取所述当前事务的事务标识对应的事务信息;执行模块,用于根据所述第一获取模块中的所述事务信息重新执行所述当前事务。
7.根据权利要求6所述的装置,其特征在于,所述第一判断模块,包括第一设置子模块,用于预设所述事务提交失败为所述触发条件;第一判断子模块,用于判断所述当前事务是否满足事务提交失败。
8.根据权利要求6所述的装置,其特征在于,所述第一判断模块,包括第二设置子模块,用于预先设置任一时间段为触发周期;第二判断子模块,用于在上次满足触发周期的时刻与当前时刻的时间差值等于所述触发周期的情况下,判断当前事务的事务状态是否为未重做。
9.根据权利要求6所述的装置,其特征在于,所述存储模块,包括创建子模块,用于预先在所述数据库中创建若干表;存储子模块,用于在所述表中存储事务的事务信息。
10.根据权利要求9所述的装置,其特征在于,所述装置,还包括 第一设置模块,用于预设删除条件; 第二判断模块,用于判断所述数据库中存储所述事务信息的表是否满足所述删除条件; 删除模块,用于在所述第二判断模块结果为是时,删除所述表。
全文摘要
本发明实施例公开了一种事务处理的方法和装置,该方法具体为,预先在数据库中存储事务的事务信息,所述事务信息包括事务标识和事务状态,所述事务状态分为已重做、未重做和重做中;判断当前事务是否满足预设触发条件,如果是,则获取所述当前事务的事务标识对应的事务信息;根据所述事务信息重新执行所述当前事务。本发明不再依赖于事务协调器,而是通过预先存储用于事务处理的事务信息,使得在满足触发条件时,可以直接依据预先存储的事务标识对应的事务信息,来重新执行事务,从而提高事务处理的效率。
文档编号G06F9/46GK103019826SQ201210581869
公开日2013年4月3日 申请日期2012年12月27日 优先权日2012年12月27日
发明者杨乃印, 李小平 申请人:亚信联创科技(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1