CN108572959A - 一种与数据库交互数据的方法和装置 - Google Patents
一种与数据库交互数据的方法和装置 Download PDFInfo
- Publication number
- CN108572959A CN108572959A CN201710133177.2A CN201710133177A CN108572959A CN 108572959 A CN108572959 A CN 108572959A CN 201710133177 A CN201710133177 A CN 201710133177A CN 108572959 A CN108572959 A CN 108572959A
- Authority
- CN
- China
- Prior art keywords
- affairs
- stage
- resources
- submitted
- identification
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种与数据库交互数据的方法和装置,包括:依据全局事务中参与到事务的本地XA资源数目,以及所述全局事务中参与到事务的远程分支数目,确定调用阶段;利用开始标识和结束标识划分原子性操作;按照调用阶段向数据库提交开始标识与结束标识之间的事务;或,按照调用阶段从数据库回滚开始标识与结束标识之间的事务。能够减少对XA资源的加锁时间,进而保障系统处理事务的能力。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种与数据库交互数据的方法和装置。
背景技术
分布式事务处理是指一个事务可能涉及多个数据库操作。分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果,即:全部提交或全部回滚。
XA两阶段事务提交协议是X/OPEN组织定义的一个用于分布式事务环境下的两阶段提交协议,用于确保多个参与事务的资源之间的数据一致性和完整性。目前主流的数据库和消息中间件服务器都支持XA协议。
在需要提交事务时,调用每个XAResource的XAResource.papare来收集投票结果,如果所有的XAResource都返回XAResource.XA_COMMIT,则可以提交事务,调用XAResource.commit来提交事务。如果在第一阶段中,如果参与事务的XAResource,有一个不同意提交,则调用XAResource.rollback来回滚事务。
JTA是Java Transaction API的简称,JTA底层会使用XA两阶段提交协议来与XA资源(数据库、消息中间件等)进行交互。
通常的事务提交流程如下:
(1)划分原子性操作
参见图1是现有技术中划分每个XARResource的原子性工作示意图。用开始标识即XAResource.start和结束标识即XAResource.end划分每个XA资源上的原子性工作。位于XAResource.start和XAResource.end之间的工作,要么提交,要么回滚。
事务的原子性是指,事务中包含的程序作为数据库的逻辑工作单元,它所做的对数据修改操作要么全部执行,要么完全不执行。
(2)提交事务
参见图2是现有技术中两阶段事务提交示意图。在事务需要提交时,调用每个XA资源的XAResource.papare来收集结果,如果所有的XA资源都返回XAResource.XA_COMMIT,则可以提交事务,调用XAResource.commit来向数据库提交事务。
(3)回滚事务
参见图3是现有技术中两阶段事务回滚示意图。如果在第一阶段中,参与事务的XAResource,有一个不同意提交,则调用XAResource.rollback来从数据库回滚事务。
为了确保数据的一致性,XA协议采用严格的两阶段协议来提交事务。由于每次事务提交都需要同XA资源进行多次交互,导致使用XA协议来提交事务的系统事务处理能力较低。严格按照XA两阶段协议来提交事务,每次事务提交时都需要针对每个参与到事务中的XA资源进行投票统计和提交事务两步操作,投票阶段和事务提交阶段会对XA资源中的数据资源加锁以保证数据一致性,加锁的时间越长,越会降低系统处理事务的能力。
发明内容
本发明实施例提供了一种与数据库交互数据的方法,能够减少对XA资源的加锁时间,进而保障系统处理事务的能力。
本发明实施例还提供了一种与数据库交互数据的装置,能够减少对XA资源的加锁时间,进而保障系统处理事务的能力。
一种与数据库交互数据的方法,包括:
依据全局事务中参与到事务的本地XA资源数目,以及所述全局事务中参与到事务的远程分支数目,确定调用阶段;
利用开始标识和结束标识划分原子性操作;
按照调用阶段向数据库提交开始标识与结束标识之间的事务;
或,
按照调用阶段从数据库回滚开始标识与结束标识之间的事务。
可选的,所述依据全局事务中参与到事务的本地XA资源的数目,以及所述全局事务中参与到事务的远程分支,确定调用阶段,包括:
参与到事务的本地XA资源数目大于1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1、非XA事务提交和阶段2的调用阶段;
所述按照调用阶段向数据库提交开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向非XA资源成功提交非XA事务;
阶段2中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
所述按照调用阶段从数据库回滚开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向非XA资源提交非XA事务失败;
阶段2中向XA资源提交XA事务,在结束标识前回滚XA事务。
可选的,所述依据全局事务中参与到事务的本地XA资源的数目,以及所述全局事务中参与到事务的远程分支,确定调用阶段,包括:
参与到事务的本地XA资源数目大于1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1、非XA事务提交和阶段2的调用阶段;
所述按照调用阶段向数据库提交开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向XA资源成功提交非XA事务;
阶段2中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
所述按照调用阶段从数据库回滚开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向XA资源提交非XA事务失败;
阶段2中向XA资源提交XA事务,在结束标识前回滚XA事务。
可选的,所述依据全局事务中参与到事务的本地XA资源数目,以及所述全局事务中参与到事务的远程分支数目,确定调用阶段,包括:
参与到事务的本地XA资源数目为1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1的调用阶段;
所述按照调用阶段向数据库提交开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
所述按照调用阶段从数据库回滚开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中向XA资源提交XA事务,在结束标识前回滚XA事务。
可选的,所述依据全局事务中参与到事务的本地XA资源的数目,以及所述全局事务中参与到事务的远程分支,确定调用阶段,包括:
参与到事务的本地XA资源数目大于等于1,所述全局事务中参与到事务的远程分支数目为1,确定包括阶段1和阶段2的调用阶段;
所述按照调用阶段向数据库提交开始标识与结束标识之间的事务,包括:
在开始标识后阶段1中,本地XA资源均返回确定信息;
阶段2中,事务的远程分支开始投票,远程XA资源返回确定信息;
事务的远程分支向远程XA资源提交XA事务成功;
向本地XA资源提交XA事务成功后,在结束标识前确认完成XA事务提交;
所述按照调用阶段从数据库回滚开始标识与结束标识之间的事务,包括:
在开始标识后阶段1中,本地XA资源均返回确定信息;
阶段2中,事务的远程分支开始投票,远程XA资源不同意提交;
在结束标识前回滚XA事务。
一种与数据库交互数据的装置,包括:
阶段模块,用于依据全局事务中参与到事务的本地XA资源数目,以及所述全局事务中参与到事务的远程分支数目,确定调用阶段;
操作模块,用于利用开始标识和结束标识划分原子性操作;
执行模块,用于按照调用阶段向数据库提交开始标识与结束标识之间的事务;或,按照调用阶段从数据库回滚开始标识与结束标识之间的事务。
可选的,所述阶段模块,还用于参与到事务的本地XA资源数目大于1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1、非XA事务提交和阶段2的调用阶段;
所述执行模块,还用于在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向非XA资源成功提交非XA事务;
阶段2中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向非XA资源提交非XA事务失败;
阶段2中向XA资源提交XA事务,在结束标识前回滚XA事务。
可选的,所述阶段模块,还用于参与到事务的本地XA资源数目大于1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1、非XA事务提交和阶段2的调用阶段;
所述执行模块,还用于在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向XA资源成功提交非XA事务;
阶段2中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向XA资源提交非XA事务失败;
阶段2中向XA资源提交XA事务,在结束标识前回滚XA事务。
可选的,所述阶段模块,还用于参与到事务的本地XA资源数目为1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1的调用阶段;
所述执行模块,还用于在开始标识后开始投票,阶段1中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
在开始标识后开始投票,阶段1中向XA资源提交XA事务,在结束标识前回滚XA事务。
可选的,所述阶段模块,还用于参与到事务的本地XA资源数目大于等于1,所述全局事务中参与到事务的远程分支数目为1,确定包括阶段1和阶段2的调用阶段;
所述执行模块,还用于在开始标识后阶段1中,本地XA资源均返回确定信息;
阶段2中,事务的远程分支开始投票,远程XA资源返回确定信息;
事务的远程分支向远程XA资源提交XA事务成功;
向本地XA资源提交XA事务成功后,在结束标识前确认完成XA事务提交;
在开始标识后阶段1中,本地XA资源均返回确定信息;
阶段2中,事务的远程分支开始投票,远程XA资源不同意提交;
在结束标识前回滚XA事务。
从上述技术方案中可以看出,在本发明实施例中依据全局事务中参与到事务的本地XA资源数目,以及所述全局事务中参与到事务的远程分支数目,确定调用阶段;然后,利用开始标识和结束标识划分原子性操作;最后,按照调用阶段向数据库提交开始标识与结束标识之间的事务;或,按照调用阶段从数据库回滚开始标识与结束标识之间的事务。由于可以依据本地XA资源数据和远程分支数目确定调用阶段,因此能够减少对XA资源的加锁时间,进而保障系统处理事务的能力。
附图说明
从下面结合附图对本发明的具体实施方式的描述中可以更好地理解本发明其中,相同或相似的附图标记表示相同或相似的特征。
图1是现有技术中划分每个XA资源的原子性工作示意图;
图2是现有技术中两阶段事务提交示意图;
图3是现有技术中两阶段事务回滚示意图;
图4是本发明实施例中与数据库交互数据的方法流程示意图;
图5是本发明第一实施例中划分原子性工作示意图;
图6是本发明第一实施例中三阶段事务提交示意图;
图7是本发明第一实施例中三阶段事务回滚示意图;
图8是本发明第二实施例中划分原子性工作示意图;
图9是现有技术中事务提交示意图;
图10是本发明第二实施例中一阶段事务提交/回滚示意图;
图11是本发明第三实施例中划分原子性工作示意图;
图12是现有技术中二阶段事务提交/回滚示意图;
图13是本发明第三实施例中二阶段事务提交示意图;
图14是本发明第三实施例中二阶段事务回滚示意图;
图15是本发明实施例中与数据库交互数据的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点表达得更加清楚明白,下面结合附图及具体实施例对本发明再作进一步详细的说明。
在本发明实施例中,首先,由不同的本地XA资源数目,以及远程分支数目确定包括不同阶段的调用阶段。然后,按照调用阶段向数据库提交或从数据库回滚事务。由于可以依据本地XA资源数据和远程分支数目确定调用阶段,因此能够减少对XA资源的加锁时间,进而保障系统处理事务的能力。
参见图4是本发明实施例中与数据库交互数据的方法流程示意图,具体包括:
S401、依据全局事务中参与到事务的本地XA资源数目,以及全局事务中参与到事务的远程分支数目,确定调用阶段。
现有技术中,严格按照XA两阶段协议来提交事务,每次事务提交时都需要针对每个参与到事务中的XA资源进行投票统计和提交事务两步操作。
考虑到全局事务中参与到事务的资源包括本地XA资源和远程XA资源。对于本地XA资源和远程XA资源有不同的处理方式。
具体来说,分为以下三种情况。
情况一:
全局事务有多个本地XA资源参与到事务中并且全局事务没有远程分支。即:全局事务中参与到事务的本地XA资源数目大于1,且全局事务中参与到事务的远程分支数目为0。
此时的调用阶段包括三个阶段,具体为:阶段1、非XA事务提交和阶段2。
情况二:
全局事务仅有一个本地XA资源参与到事务中并且全局事务没有远程分支。即:全局事务中参与到事务的本地XA资源数目为1,且全局事务中参与到事务的远程分支数目为0。
此时的调用阶段包括一个阶段,具体为:阶段1。
情况三:
全局事务有本地XA资源参与到事务并且有一个远程分支参与到事务中。即:全局事务中参与到事务的本地XA资源数目大于等于1,且全局事务中参与到事务的远程分支数目为1。
此时的调用阶段包括二个阶段,具体为:阶段1和阶段2。
S402、利用开始标识和结束标识划分原子性操作。
用XAResource.start和XAResource.end划分XAResource上的原子性操作。XAResource.start作为开始标识,XAResource.end作为结束标识。
位于XAResource.start和XAResource.end之间的工作,要么提交,要么回滚。
S403、按照调用阶段向数据库提交开始标识与结束标识之间的事务;或,按照调用阶段从数据库回滚开始标识与结束标识之间的事务。
按照调用阶段向数据库提交开始标识与结束标识之间的事务。或者,按照调用阶段从数据库回滚开始标识与结束标识之间的事务。
综上,由不同的本地XA资源数目,以及远程分支数目确定包括不同阶段的调用阶段。然后,按照调用阶段向数据库提交或从数据库回滚事务。由于可以依据本地XA资源数据和远程分支数目确定调用阶段,因此能够减少对XA资源的加锁时间,进而保障系统处理事务的能力。
下面就S401中涉及到的三种情况以三个实施例分别说明。具体为包括第一实施例、第二实施例和第三实施例。
第一实施例
从附图2正常提交流程中可以看到,对于有两个XA资源参与的事务,一个事务从开始到完成需要与每个XA资源至少交互4次,分别为投票、同意提交、提交和提交完成。
如果允许一个非XA资源参与到事务中,将非XA资源的事务提交操作放在XA资源事务提交的阶段1和阶段2之间,既能保证数据的一致性,同时能在参与事务的资源较少时,大幅度提高事务的性能。
也就是说,全局事务中参与到事务的本地XA资源数目大于1,且全局事务中参与到事务的远程分支数目为0,调用阶段包括阶段1、非XA事务提交和阶段2三个阶段。
(1)划分原子性操作
参见图5是本发明第一实施例中划分原子性工作示意图。用XAResource.start和XAResource.end划分XAResource上的原子性工作。位于XAResource.start和XAResource.end之间的工作,要么提交,要么回滚。
(2)提交事务
参见图6是本发明第一实施例中三阶段事务提交示意图。开始标识后,事务需要向数据库提交时,调用每个XA资源的XAResource.papare来收集投票结果。
如果所有的XAR资源都返回XAResource.XA_COMMIT即确定信息,之后再向非XA资源提交非XA资源上的事务操作,向非XA资源成功提交非XA事务。
非XA事务提交成功则可以提交整个事务,调用XAResource.commit来提交事务。在结束标识前确认完成XA事务提交。
(3)回滚事务
一种情况下:在开始标识后开始投票,阶段1中,如果参与事务的XA资源,有一个不同意提交,则调用XAResource.rollback来回滚事务。
另一种情况下,参见图7是本发明第一实施例中三阶段事务回滚示意图。在开始标识后开始投票,阶段1中,如果参与事务的XA资源都同意提交,即XA资源均返回确定信息同意提交。
之后再提交非XA资源上的事务操作,向非XA资源提交非XA事务失败。
阶段2中向XA资源提交XA事务,结束标识前调用XAResource.rollback来回滚事务。
在第一实施例中,允许一个非XA资源参与到事务中,将非XA资源的事务提交操作放在XA资源事务提交的阶段1和阶段2之间。保证数据的一致性的前提下,减少与XA资源交互的次数,进而减少对XA资源的加锁时间,保障系统处理事务的能力。
此外,当全局事务没有远程分支并且参与到全局事务的本地XA资源较少时,例如只有2到3个XA资源参与到全局事务,将其中一个XA资源改为使用非XA连接,可大幅提高性能。
下面将一个XA资源改为使用非XA连接的方式为例进行说明。与非XA资源的事务提交步骤唯一不同处在于,非XA事务提交至XA资源上。
将非XA资源的事务提交操作放在XA资源事务提交的阶段1和阶段2之间,既能保证数据的一致性,同时能在参与事务的资源较少时,大幅度提高事务的性能。
也就是说,全局事务中参与到事务的本地XA资源数目大于1,且全局事务中参与到事务的远程分支数目为0,调用阶段包括阶段1、非XA事务提交和阶段2三个阶段。
(1)划分原子性操作
用XAResource.start和XAResource.end划分XAResource上的原子性工作。位于XAResource.start和XAResource.end之间的工作,要么提交,要么回滚。
(2)提交事务
开始标识后,事务需要向数据库提交时,调用每个XA资源的XAResource.papare来收集投票结果。
如果所有的XA资源都返回XAResource.XA_COMMIT即确定信息,之后再向XA资源成功提交非XA事务。
非XA事务提交成功则可以提交整个事务,调用XAResource.commit来提交事务。在结束标识前确认完成XA事务提交。
(3)回滚事务
一种情况下:在开始标识后开始投票,阶段1中,如果参与事务的XA资源,有一个不同意提交,则调用XAResource.rollback来回滚事务。
另一种情况下,在开始标识后开始投票,阶段1中,如果参与事务的XA资源都同意提交,即XA资源均返回确定信息。
之后再向XA资源提交非XA事务失败。
阶段2中向XA资源提交XA事务,结束标识前调用XAResource.rollback来回滚事务。
第二实施例
对于只有一个XA资源参与的事务,可以直接使用一阶段提交来提交事务,减少事务管理器与XA资源的交互次数。
也就是说,全局事务中参与到事务的本地XA资源数目为1,且全局事务中参与到事务的远程分支数目为0,调用阶段包括阶段1。
(1)划分原子性操作
图8是本发明第二实施例中划分原子性工作示意图。用XAResource.start和XAResource.end在唯一参与事务的XA资源上划分原子性工作。
(2)现有提交/回滚事务
图9是现有技术中事务提交示意图。在事务需要提交时,在唯一参与事务的XA资源上先调用XAResource.prepare进行投票,投票返回XAResource.XA_COMMIT后,再在该XA资源上调用XAResouce.commit进行提交。
(3)提交/回滚事务
图10是本发明第二实施例中一阶段事务提交/回滚示意图。在开始标识后开始投票,在事务需要提交时,阶段1中在唯一参与事务的XA资源上调用一阶段提交XAResource.commitOnePhase来提交事务。
如果向XA资源提交XA事务成功,则整个事务提交完成,即在结束标识前确认完成XA事务提交。
如果向XA资源提交XA事务失败,则整个事务回滚完成,即在结束标识前回滚XA事务。
对于一阶段提交,不需要再调用XAResource.rollback来执行回滚操作。
在第二实施例中,利用一个阶段向XA资源提交/回滚XA事务,无需获知投票结果就可以直接提交/回滚XA事务。和传统的两阶段提交方式相比减少了与XA资源的交互次数。保证数据的一致性的前提下,减少与XA资源交互的次数,进而减少对XA资源的加锁时间,保障系统处理事务的能力。
第三实施例
对于全局事务中有远程分支参与事务的,提交事务时,需要先调用参与到事务发起者所有XA资源的XAResource.papare来收集结果。如果参与到事务发起者所有XA资源都返回XAResource.XA_COMMIT,则需要继续让远程分支统计的所有参与到该分支的XAResource调用XAResource.prepare的统计结果,如果参与到事务所有分支的XAResource调用XAResource.prepare都返回XAResource.XA_COMMIT,则远程分支可以提交事务。在远程分支提交XA事务成功后,本地分支再提交XA事务。
具体的,全局事务中参与到事务的本地XA资源数目大于等于1,且全局事务中参与到事务的远程分支数目为1,调用阶段确定包括阶段1和阶段2。
(1)划分原子性操作
图11是本发明第三实施例中划分原子性工作示意图。用XAResource.start和XAResource.end划分事务的所有分支上参与到事务中的XAResource上的原子性工作。位于XAResource.start和XAResource.end之间的工作,要么提交,要么回滚。
(2)现有提交/回滚事务
图12是现有技术中二阶段事务提交/回滚示意图。
在需要提交事务时,先调用参与到事务发起者本地分支的所有XA资源的XAResource.papare来收集投票结果。
如果所有本地分支的XA资源都返回XAResource.XA_COMMIT,之后再继续调用继续参与到事务的远程分支的所有XA资源的XAResource.prepare来收集投票结果。
如果事务发起者本地分支所有的XA资源和远程分支的所有的XA资源都返回XAResource.XA_COMMIT,则可以提交本地分支事务和远程分支事务,调用XAResource.commit来提交事务。
(3)本实施例中提交/回滚事务
图13是本发明第三实施例中二阶段事务提交示意图。
开始标识后,阶段1中需要提交事务时,先调用参与到事务发起者本地分支的所有XA资源的XAResource.papare来收集投票结果。
如果本地分支所有的XA资源都返回XAResource.XA_COMMIT,即本地XA资源均返回确定信息。
阶段2中,对于唯一的远程分支,由远程分支依次进行事务提交投票和事务提交操作。
如果远程分支进行事务提交投票操作的结果为同意提交,则远程分支不需要将控制权立即交回事务发起者。即:事务的远程分支开始投票,远程XA资源返回确定信息。
事务的远程分支继续进行事务提交操作,远程分支事务成功提交XA事务完成之后在将控制权返回给事务发起者。
事务发起者再对参与到事务发起者本地的XA资源调用XAResource.commit进行事务提交操作。向本地XA资源提交XA事务成功后,在结束标识前确认完成XA事务提交。
图14是本发明第三实施例中二阶段事务回滚示意图。
开始标识后,阶段1中需要提交事务时,先调用参与到事务发起者本地分支的所有XA资源的XAResource.papare来收集投票结果。
如果本地分支所有的XA资源都返回XAResource.XA_COMMIT,即本地XA资源均返回确定信息。
当本地分支并非所有的XA资源都返回XAResource.XA_COMMIT,则在结束标识前回滚XA事务。
本地XA资源均返回确定信息。阶段2中,对于唯一的远程分支,由远程分支依次进行事务提交投票和事务提交操作。
如果远程分支进行事务提交投票操作的结果为不同意提交,则将控制权返回给事务发起者。
事务发起者再对参与到事务发起者本地的XA资源调用XAResource.commit进行事务提交操作。在结束标识前回滚XA事务。
在第三实施例中,全局事务仅有一个远程分支参与到事务中时,全局事务的事务发起者本地所有XA资源投票同意提交事务后,远程分支的XA资源可以在投票完成后立即提交参与到远程分支的XA资源中事务,远程分支不需在投票完成之后报告事务发起者然后再由事务发起者通知远程分支提交事务,相对于传统的两阶段提交方式相比,可以减少事务提交时事务发起者和远程分支直接的远程调用,减少与XA资源交互的次数,进而减少对XA资源的加锁时间,保障系统处理事务的能力。
图6是本发明实施例中与数据库交互数据的装置结构示意图,与数据库交互数据的装置是与数据库交互数据的方法相对应的装置,具体包括:
阶段模块1501,用于依据全局事务中参与到事务的本地XA资源数目,以及全局事务中参与到事务的远程分支数目,确定调用阶段;
操作模块1502,用于利用开始标识和结束标识划分原子性操作;
执行模块1503,用于按照调用阶段向数据库提交开始标识与结束标识之间的事务;或,按照调用阶段从数据库回滚开始标识与结束标识之间的事务。
考虑到全局事务中参与到事务的资源包括本地XA资源和远程XA资源。对于本地XA资源和远程XA资源有不同的处理方式。
具体来说,分为以下三种情况。
情况一:
阶段模块1501,还用于参与到事务的本地XA资源数目大于1,全局事务中参与到事务的远程分支数目为0,确定包括阶段1、非XA事务提交和阶段2的调用阶段。
执行模块1503包括提交事务和回滚事务。
在提交事务中,执行模块1503还用于在开始标识后开始投票,阶段1中XA资源均返回确定信息;向非XA资源成功提交非XA事务;阶段2中向XA资源提交XA事务,在结束标识前确认完成XA事务提交。
在回滚事务中,执行模块1503还用于在开始标识后开始投票,阶段1中XA资源均返回确定信息;向非XA资源提交非XA事务失败;阶段2中向XA资源提交XA事务,在结束标识前回滚XA事务。
在本发明实施例中,允许一个非XA资源参与到事务中,将非XA资源的事务提交操作放在XA资源事务提交的阶段1和阶段2之间。保证数据的一致性的前提下,减少与XA资源交互的次数,进而减少对XA资源的加锁时间,保障系统处理事务的能力。
此外,当全局事务没有远程分支并且参与到全局事务的本地XA资源较少时,例如只有2到3个XA资源参与到全局事务,将其中一个XA资源改为使用非XA连接,可大幅提高性能。
下面将一个XA资源改为使用非XA连接的方式为例进行说明。与非XA资源的事务提交步骤唯一不同处在于,非XA事务提交至XA资源上。
阶段模块1501,还用于参与到事务的本地XA资源数目大于1,全局事务中参与到事务的远程分支数目为0,确定包括阶段1、非XA事务提交和阶段2的调用阶段。
执行模块1503包括提交事务和回滚事务。
在提交事务中,执行模块1503还用于在开始标识后开始投票,阶段1中XA资源均返回确定信息;向XA资源成功提交非XA事务;阶段2中向XA资源提交XA事务,在结束标识前确认完成XA事务提交。
在回滚事务中,执行模块1503还用于在开始标识后开始投票,阶段1中XA资源均返回确定信息;向XA资源提交非XA事务失败;阶段2中向XA资源提交XA事务,在结束标识前回滚XA事务。
情况二:
对于只有一个XA资源参与的事务,可以直接使用一阶段提交来提交事务,减少事务管理器与XA资源的交互次数。
阶段模块1501,还用于参与到事务的本地XA资源数目为1,全局事务中参与到事务的远程分支数目为0,确定包括阶段1的调用阶段。
执行模块1503包括提交事务和回滚事务。
在提交事务中,执行模块1503还用于在开始标识后开始投票,阶段1中向XA资源提交XA事务,在结束标识前确认完成XA事务提交。
在回滚事务中,执行模块1503还用于在开始标识后开始投票,阶段1中向XA资源提交XA事务,在结束标识前回滚XA事务。
在本发明实施例中,利用一个阶段向XA资源提交/回滚XA事务,无需获知投票结果就可以直接提交/回滚XA事务。和传统的两阶段提交方式相比减少了与XA资源的交互次数。保证数据的一致性的前提下,减少与XA资源交互的次数,进而减少对XA资源的加锁时间,保障系统处理事务的能力。
情况三:
对于全局事务中有远程分支参与事务的,提交事务时,需要先调用参与到事务发起者所有XA资源的XAResource.papare来收集结果。如果参与到事务发起者所有XA资源都返回XAResource.XA_COMMIT,则需要继续让远程分支统计的所有参与到该分支的XAResource调用XAResource.prepare的统计结果,如果参与到事务所有分支的XAResource调用XAResource.prepare都返回XAResource.XA_COMMIT,则远程分支可以提交事务。在远程分支提交XA事务成功后,本地分支再提交XA事务。
阶段模块1501,还用于参与到事务的本地XA资源数目大于等于1,全局事务中参与到事务的远程分支数目为1,确定包括阶段1和阶段2的调用阶段。
执行模块1503包括提交事务和回滚事务。
在提交事务中,执行模块1503还用于在开始标识后阶段1中,本地XA资源均返回确定信息;阶段2中,事务的远程分支开始投票,远程XA资源返回确定信息;事务的远程分支向远程XA资源提交XA事务成功;向本地XA资源提交XA事务成功后,在结束标识前确认完成XA事务提交。
在回滚事务中,执行模块1503还用于在开始标识后阶段1中,本地XA资源均返回确定信息;阶段2中,事务的远程分支开始投票,远程XA资源不同意提交;在结束标识前回滚XA事务。
在本发明实施例中,全局事务仅有一个远程分支参与到事务中时,全局事务的事务发起者本地所有XA资源投票同意提交事务后,远程分支的XA资源可以在投票完成后立即提交参与到远程分支的XA资源中事务,远程分支不需在投票完成之后报告事务发起者然后再由事务发起者通知远程分支提交事务,相对于传统的两阶段提交方式相比,可以减少事务提交时事务发起者和远程分支直接的远程调用,减少与XA资源交互的次数,进而减少对XA资源的加锁时间,保障系统处理事务的能力。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使对应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种与数据库交互数据的方法,其特征在于,包括:
依据全局事务中参与到事务的本地XA资源数目,以及所述全局事务中参与到事务的远程分支数目,确定调用阶段;
利用开始标识和结束标识划分原子性操作;
按照调用阶段向数据库提交开始标识与结束标识之间的事务;
或,
按照调用阶段从数据库回滚开始标识与结束标识之间的事务。
2.根据权利要求1所述与数据库交互数据的方法,其特征在于,所述依据全局事务中参与到事务的本地XA资源的数目,以及所述全局事务中参与到事务的远程分支,确定调用阶段,包括:
参与到事务的本地XA资源数目大于1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1、非XA事务提交和阶段2的调用阶段;
所述按照调用阶段向数据库提交开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向非XA资源成功提交非XA事务;
阶段2中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
所述按照调用阶段从数据库回滚开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向非XA资源提交非XA事务失败;
阶段2中向XA资源提交XA事务,在结束标识前回滚XA事务。
3.根据权利要求2所述与数据库交互数据的方法,其特征在于,所述依据全局事务中参与到事务的本地XA资源的数目,以及所述全局事务中参与到事务的远程分支,确定调用阶段,包括:
参与到事务的本地XA资源数目大于1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1、非XA事务提交和阶段2的调用阶段;
所述按照调用阶段向数据库提交开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向XA资源成功提交非XA事务;
阶段2中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
所述按照调用阶段从数据库回滚开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向XA资源提交非XA事务失败;
阶段2中向XA资源提交XA事务,在结束标识前回滚XA事务。
4.根据权利要求1所述与数据库交互数据的方法,其特征在于,所述依据全局事务中参与到事务的本地XA资源数目,以及所述全局事务中参与到事务的远程分支数目,确定调用阶段,包括:
参与到事务的本地XA资源数目为1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1的调用阶段;
所述按照调用阶段向数据库提交开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
所述按照调用阶段从数据库回滚开始标识与结束标识之间的事务,包括:
在开始标识后开始投票,阶段1中向XA资源提交XA事务,在结束标识前回滚XA事务。
5.根据权利要求1所述与数据库交互数据的方法,其特征在于,所述依据全局事务中参与到事务的本地XA资源的数目,以及所述全局事务中参与到事务的远程分支,确定调用阶段,包括:
参与到事务的本地XA资源数目大于等于1,所述全局事务中参与到事务的远程分支数目为1,确定包括阶段1和阶段2的调用阶段;
所述按照调用阶段向数据库提交开始标识与结束标识之间的事务,包括:
在开始标识后阶段1中,本地XA资源均返回确定信息;
阶段2中,事务的远程分支开始投票,远程XA资源返回确定信息;
事务的远程分支向远程XA资源提交XA事务成功;
向本地XA资源提交XA事务成功后,在结束标识前确认完成XA事务提交;
所述按照调用阶段从数据库回滚开始标识与结束标识之间的事务,包括:
在开始标识后阶段1中,本地XA资源均返回确定信息;
阶段2中,事务的远程分支开始投票,远程XA资源不同意提交;
在结束标识前回滚XA事务。
6.一种与数据库交互数据的装置,其特征在于,包括:
阶段模块,用于依据全局事务中参与到事务的本地XA资源数目,以及所述全局事务中参与到事务的远程分支数目,确定调用阶段;
操作模块,用于利用开始标识和结束标识划分原子性操作;
执行模块,用于按照调用阶段向数据库提交开始标识与结束标识之间的事务;或,按照调用阶段从数据库回滚开始标识与结束标识之间的事务。
7.根据权利要求6所述与数据库交互数据的装置,其特征在于,
所述阶段模块,还用于参与到事务的本地XA资源数目大于1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1、非XA事务提交和阶段2的调用阶段;
所述执行模块,还用于在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向非XA资源成功提交非XA事务;
阶段2中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向非XA资源提交非XA事务失败;
阶段2中向XA资源提交XA事务,在结束标识前回滚XA事务。
8.根据权利要求6所述与数据库交互数据的装置,其特征在于,
所述阶段模块,还用于参与到事务的本地XA资源数目大于1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1、非XA事务提交和阶段2的调用阶段;
所述执行模块,还用于在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向XA资源成功提交非XA事务;
阶段2中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
在开始标识后开始投票,阶段1中XA资源均返回确定信息;
向XA资源提交非XA事务失败;
阶段2中向XA资源提交XA事务,在结束标识前回滚XA事务。
9.根据权利要求6所述与数据库交互数据的装置,其特征在于,
所述阶段模块,还用于参与到事务的本地XA资源数目为1,所述全局事务中参与到事务的远程分支数目为0,确定包括阶段1的调用阶段;
所述执行模块,还用于在开始标识后开始投票,阶段1中向XA资源提交XA事务,在结束标识前确认完成XA事务提交;
在开始标识后开始投票,阶段1中向XA资源提交XA事务,在结束标识前回滚XA事务。
10.根据权利要求6所述与数据库交互数据的装置,其特征在于,
所述阶段模块,还用于参与到事务的本地XA资源数目大于等于1,所述全局事务中参与到事务的远程分支数目为1,确定包括阶段1和阶段2的调用阶段;
所述执行模块,还用于在开始标识后阶段1中,本地XA资源均返回确定信息;
阶段2中,事务的远程分支开始投票,远程XA资源返回确定信息;
事务的远程分支向远程XA资源提交XA事务成功;
向本地XA资源提交XA事务成功后,在结束标识前确认完成XA事务提交;
在开始标识后阶段1中,本地XA资源均返回确定信息;
阶段2中,事务的远程分支开始投票,远程XA资源不同意提交;
在结束标识前回滚XA事务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710133177.2A CN108572959B (zh) | 2017-03-07 | 2017-03-07 | 一种与数据库交互数据的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710133177.2A CN108572959B (zh) | 2017-03-07 | 2017-03-07 | 一种与数据库交互数据的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108572959A true CN108572959A (zh) | 2018-09-25 |
CN108572959B CN108572959B (zh) | 2021-03-05 |
Family
ID=63577716
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710133177.2A Active CN108572959B (zh) | 2017-03-07 | 2017-03-07 | 一种与数据库交互数据的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108572959B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532069A (zh) * | 2019-08-22 | 2019-12-03 | 北京宝兰德软件股份有限公司 | 一种分布式事务提交方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7395264B2 (en) * | 2004-06-25 | 2008-07-01 | Microsoft Corporation | Promotable transactions with promotable single phase enlistments |
CN102419764A (zh) * | 2010-10-20 | 2012-04-18 | 微软公司 | 带有多版本化的数据库系统的分布式事务管理 |
CN102760154A (zh) * | 2012-05-23 | 2012-10-31 | 上海引跑信息科技有限公司 | 一种在文本信息检索服务中支持分布式事务管理的方法 |
CN103294479A (zh) * | 2013-06-19 | 2013-09-11 | 成都市欧冠信息技术有限责任公司 | 分布式事务处理方法与系统 |
CN106033439A (zh) * | 2015-03-13 | 2016-10-19 | 阿里巴巴集团控股有限公司 | 一种分布式事务处理方法及系统 |
-
2017
- 2017-03-07 CN CN201710133177.2A patent/CN108572959B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7395264B2 (en) * | 2004-06-25 | 2008-07-01 | Microsoft Corporation | Promotable transactions with promotable single phase enlistments |
CN102419764A (zh) * | 2010-10-20 | 2012-04-18 | 微软公司 | 带有多版本化的数据库系统的分布式事务管理 |
CN102760154A (zh) * | 2012-05-23 | 2012-10-31 | 上海引跑信息科技有限公司 | 一种在文本信息检索服务中支持分布式事务管理的方法 |
CN103294479A (zh) * | 2013-06-19 | 2013-09-11 | 成都市欧冠信息技术有限责任公司 | 分布式事务处理方法与系统 |
CN106033439A (zh) * | 2015-03-13 | 2016-10-19 | 阿里巴巴集团控股有限公司 | 一种分布式事务处理方法及系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532069A (zh) * | 2019-08-22 | 2019-12-03 | 北京宝兰德软件股份有限公司 | 一种分布式事务提交方法及装置 |
CN110532069B (zh) * | 2019-08-22 | 2021-06-29 | 北京宝兰德软件股份有限公司 | 一种分布式事务提交方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108572959B (zh) | 2021-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6799188B2 (en) | Transaction processing system providing improved methodology for two-phase commit decision | |
US8316373B2 (en) | Concurrent data processing and electronic bookkeeping | |
US20190354518A1 (en) | Chain mesh network for decentralized transaction systems | |
US6138143A (en) | Method and apparatus for asynchronous transaction processing | |
CN103425462B (zh) | 一种工作流数据持久化的方法和装置 | |
US9898376B2 (en) | Recovery of a transaction after XA end | |
US10430402B2 (en) | Distributed transaction with dynamic form | |
CN110022367A (zh) | 一种事务处理方法和事务处理系统 | |
EP3408763A1 (en) | Guaranteed commit outcome in a distributed transaction processing system | |
US6061708A (en) | System and method for supporting mixed-phase transactions in an object-oriented environment | |
US7970737B2 (en) | Recovery administration of global transaction participants | |
KR20080042881A (ko) | 트랜잭션 일치 및 문제 상태 | |
CN110413687A (zh) | 基于节点互证校验的分布式事务故障处理方法及相关设备 | |
CN110019194A (zh) | 数据核对方法、装置、计算机设备及存储介质 | |
US9361477B2 (en) | Alternately processing messages | |
US7284018B1 (en) | Logless transaction coordination | |
DE112010004808T5 (de) | Gleichzeitige Ausführung einer Anforderungsverarbeitung und von Analysen von Anforderungen | |
CN108572959A (zh) | 一种与数据库交互数据的方法和装置 | |
US6631395B1 (en) | Apparatus, method and computer program product for client/server computing with programmable action by transaction coordinator during prepared state | |
Kim et al. | Revisiting the role of bureaucrats in pension policy-making: The case of South Korea | |
Wang et al. | Distributed nonblocking commit protocols for many-party cross-blockchain transactions | |
CN109408201A (zh) | 基于分布式数据库的事务管理方法 | |
CN112099934A (zh) | 一种批处理方法、系统、计算机设备及存储介质 | |
CN110532069A (zh) | 一种分布式事务提交方法及装置 | |
CN105874435B (zh) | 分布式事务中的非阻塞注册 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |