一种数据回滚方法、系统、设备及计算机可读存储介质与流程

文档序号:18189355发布日期:2019-07-17 05:31阅读:180来源:国知局
一种数据回滚方法、系统、设备及计算机可读存储介质与流程

本发明涉及数据库技术领域,尤其涉及一种数据回滚方法、系统、设备及计算机可读存储介质。



背景技术:

分布式事务处理涉及多个分布在不同地方的数据库,但对参与事务的数据库的操作,要求所有数据库必须全部被提交或者全部回滚,只要对任意一个数据库操作失败,则所有参与事务的数据库都需要回滚。现有的分布式事务处理主要包括以下两种:

基于xa协议的回滚方法,xa协议是资源管理器与事务管理器的接口标准,xa协议包括:应用程序(ap,applicationprogram)、事务管理器(tm,transactionmanager)和资源管理器(rm,resourcemanager)。其中,应用程序可以与事务管理器及资源管理器进行通信,事务管理器和资源管理器通过xa接口进行双向通信。xa接口规范使用两阶段提交协议来完成一个全局事务,从而保证同一事务中所有数据库同时成功提交或者回滚,具体包括:第一阶段为准备阶段,事务管理器给所有数据库发送执行事务的请求,然后开始等待回应;第二阶段为提交阶段,如果事务管理器收到的所有回应都是成功,则事务管理器给所有数据库发提交消息请求;如果事务管理器收到的任一消息请求的响应为失败,则事务管理器给所有数据库发回滚消息请求。

基于事务日志的分布式回滚方法,采用摒弃使用两阶段提交协议来完成一个全局事务,使用直接提交的方式,即由事务管理器直接向相关的资源管理器发起事务的提交请求。如果事务管理器收到所有资源管理器提交成功的消息,则判定整个事务提交成功;如果收到任一资源管理器的提交失败响应,那么事务管理器要向其他正在提交或者提交成功的资源管理器发起分支事务的回滚请求。其回滚流程主要是根据提供的全局事务id(identity,标识),通过分析事务日志,以原事务为单位生成反向执行语句,并逆序执行,从而完成局部资源的回滚。事务管理器收集各个资源管理器节点的回滚结果,汇总后反馈给用户。

虽然基于事务日志的分布式回滚方法相比基于xa协议的回滚方法而言,性能有所提高。但是对于基于事务日志的分布式回滚方法而言,由于该解析事务日志过程是一个串行流程,而且也会扫描一些与待回滚的事务id无关的事务日志文件,从而浪费了大量时间,特别是对一些大事务进行回滚、同一时间段处理大量回滚请求或者回滚时业务正在频繁刷新事务日志文件的场景。不仅如此,如果回滚流程时间越长,则会对系统资源的占用时间越长,此时对于其他业务的性能也会造成很大影响。



技术实现要素:

本发明要解决的技术问题是,提供一种数据回滚方法、系统、设备及计算机可读存储介质,克服现有技术中的参与分布式事务的数据库回滚性能低下的问题。

本发明采用的技术方案是,所述一种数据回滚方法,包括:

在事务对应的任一数据库数据操作失败的情况下,根据预先生成的所述事务对应的事务日志索引信息,获取所述事务对应的所有事务日志;

根据所述事务对应的所有事务日志,对所述事务对应的所有数据库的提交数据并发执行回滚操作。

进一步的,所述根据所述事务对应的所有事务日志,对所述事务对应的所有数据库的提交数据并发执行回滚操作,包括:

根据所述事务对应的所有事务日志,并发解析所述事务对应的所有数据库的提交数据,生成数据回滚信息;

根据所述数据回滚信息,对所述事务对应的所有数据库的提交数据并发执行回滚操作。

进一步的,在所述生成数据回滚信息之后,所述方法包括:

判断所述数据回滚信息的数据容量是否小于设定阈值;

若是,则将所述数据回滚信息存储至共享内存;

否则将所述数据回滚信息存储为第一数据文件。

进一步的,所述数据回滚信息包括:所述事务包含的程序语句集合对应的反向操作程序语句集合;

所述根据所述数据回滚信息,对所述事务对应的所有数据库的提交数据并发执行回滚操作,包括:

在将所述数据回滚信息存储至共享内存的情况下,逆序执行所述共享内存中的所述反向操作程序语句集合,对所述事务对应的所有数据库的提交数据并发执行回滚操作。

进一步的,所述根据所述数据回滚信息,对所述事务对应的所有数据库的提交数据并发执行回滚操作,还包括:

在将所述数据回滚信息存储为第一数据文件的情况下,基于缓存的预置数据容量,读取依次缓存的所述第一数据文件中的数据回滚信息;

逆序执行每次读取的数据回滚信息中的反向操作程序语句集合,对所述事务对应的所有数据库的提交数据并发执行回滚操作。

进一步的,所述事务的数量为多个;

所述根据预先生成的所述事务对应的事务日志索引信息,获取所述事务对应的所有事务日志,包括:

将根据每一个事务对应的预先生成的事务日志索引信息,查询所述每一个事务对应的所有事务日志的操作,设置为一个查询操作线程;

通过并发执行所有所述查询操作线程,得到所述每一个事务对应的所有事务日志。

进一步的,所述根据所述事务对应的所有事务日志,对所述事务对应的所有数据库的提交数据并发执行回滚操作,包括:

将解析所述每一个事务对应的所有事务日志的操作设置为一个解析操作线程;

通过并发执行所有所述解析操作线程,生成所述每一个事务对应的数据回滚信息;

根据所述每一个事务对应的数据回滚信息,通过设定的顺序依次对所述每一个事务对应的所有数据库的提交数据执行回滚操作。

进一步的,所述根据所述每一个事务对应的数据回滚信息,通过设定的顺序依次对所述每一个事务对应的所有数据库的提交数据执行回滚操作,包括:

将所述每一个事务对应的数据回滚信息存储为第二数据文件;

对所有所述第二数据文件以设定的顺序进行排序,得到数据文件序列;

根据所述数据文件序列,通过缓存依次读取所述第二数据文件中的数据回滚信息,对所述每一个事务对应的所有数据库的提交数据执行回滚操作。

进一步的,所述数据回滚信息包括:所述事务包含的程序语句集合对应的反向操作程序语句集合;

所述根据所述数据文件序列,通过缓存依次读取所述第二数据文件中的数据回滚信息,对所述每一个事务对应的所有数据库的提交数据执行回滚操作,包括:

根据所述数据文件序列,基于缓存的预置数据容量,读取依次缓存的每个所述第二数据文件中的数据回滚信息;

逆序执行每次读取的数据回滚信息中的反向操作程序语句集合,对所述每一个事务对应的所有数据库的提交数据执行回滚操作。

进一步的,所述逆序执行每次读取的数据回滚信息对应的反向操作程序语句集合,包括:

通过绑定变量的方式,逆序执行每次读取的数据回滚信息对应的反向操作程序语句集合。

本发明还提供一种数据回滚系统,包括:

事务管理器,用于在事务对应的任一数据库数据操作失败的情况下,向所述资源管理器发送数据回滚请求;

资源管理器,用于当接收到事务管理器发送的数据回滚请求时,根据预先生成的所述事务对应的事务日志索引信息,获取所述事务对应的所有事务日志;根据所述事务对应的所有事务日志,对所述事务对应的所有数据库的提交数据并发执行回滚操作。

进一步的,所述根据所述事务对应的所有事务日志,对所述事务对应的所有数据库的提交数据并发执行回滚操作,包括:

根据所述事务对应的所有事务日志,并发解析所述事务对应的所有数据库的提交数据,生成数据回滚信息;

根据所述数据回滚信息,对所述事务对应的所有数据库的提交数据并发执行回滚操作。

进一步的,所述资源管理器,还用于在所述生成数据回滚信息之后,判断所述数据回滚信息的数据容量是否小于设定阈值;

若是,则将所述数据回滚信息存储至共享内存;

否则将所述数据回滚信息存储为第一数据文件。

进一步的,所述数据回滚信息包括:所述事务包含的程序语句集合对应的反向操作程序语句集合;

所述根据所述数据回滚信息,对所述事务对应的所有数据库的提交数据并发执行回滚操作,包括:

在将所述数据回滚信息存储至共享内存的情况下,逆序执行所述共享内存中的所述反向操作程序语句集合,对所述事务对应的所有数据库的提交数据并发执行回滚操作。

进一步的,所述根据所述数据回滚信息,对所述事务对应的所有数据库的提交数据并发执行回滚操作,还包括:

在将所述数据回滚信息存储为第一数据文件的情况下,基于缓存的预置数据容量,读取依次缓存的所述第一数据文件中的数据回滚信息;

逆序执行每次读取的数据回滚信息中的反向操作程序语句集合,对所述事务对应的所有数据库的提交数据并发执行回滚操作。

进一步的,所述事务的数量为多个;

所述根据预先生成的所述事务对应的事务日志索引信息,获取所述事务对应的所有事务日志,包括:

将根据每一个事务对应的预先生成的事务日志索引信息,查询所述每一个事务对应的所有事务日志的操作,设置为一个查询操作线程;

通过并发执行所有所述查询操作线程,得到所述每一个事务对应的所有事务日志。

进一步的,所述根据所述事务对应的所有事务日志,对所述事务对应的所有数据库的提交数据并发执行回滚操作,包括:

将解析所述每一个事务对应的所有事务日志的操作设置为一个解析操作线程;

通过并发执行所有所述解析操作线程,生成所述每一个事务对应的数据回滚信息;

根据所述每一个事务对应的数据回滚信息,通过设定的顺序依次对所述每一个事务对应的所有数据库的提交数据执行回滚操作。

进一步的,所述根据所述每一个事务对应的数据回滚信息,通过设定的顺序依次对所述每一个事务对应的所有数据库的提交数据执行回滚操作,包括:

将所述每一个事务对应的数据回滚信息存储为第二数据文件;

对所有所述第二数据文件以设定的顺序进行排序,得到数据文件序列;

根据所述数据文件序列,通过缓存依次读取所述第二数据文件中的数据回滚信息,对所述每一个事务对应的所有数据库的提交数据执行回滚操作。

进一步的,所述数据回滚信息包括:所述事务包含的程序语句集合对应的反向操作程序语句集合;

所述根据所述数据文件序列,通过缓存依次读取所述第二数据文件中的数据回滚信息,对所述每一个事务对应的所有数据库的提交数据执行回滚操作,包括:

根据所述数据文件序列,基于缓存的预置数据容量,读取依次缓存的每个所述第二数据文件中的数据回滚信息;

逆序执行每次读取的数据回滚信息中的反向操作程序语句集合,对所述每一个事务对应的所有数据库的提交数据执行回滚操作。

进一步的,所述逆序执行每次读取的数据回滚信息对应的反向操作程序语句集合,包括:

通过绑定变量的方式,逆序执行每次读取的数据回滚信息对应的反向操作程序语句集合。

本发明还提供一种数据回滚设备,所述数据回滚设备包括处理器和存储器;

所述处理器用于执行存储器中存储的数据回滚的程序,以实现上述的数据回滚方法的步骤。

本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述的数据回滚方法的步骤。

采用上述技术方案,本发明至少具有下列优点:

本发明所述一种数据回滚方法、系统、设备及计算机可读存储介质,能够有效的提高数据库中数据的回滚速度和数据的回滚效率;同时通过绑定变量,能够有效的提高数据的安全性、数据的回滚速度和数据的回滚效率。

附图说明

图1为本发明第一至第二实施例的数据回滚方法流程图;

图2为本发明第三至第四实施例的数据回滚系统组成结构示意图;

图3为本发明第五实施例的数据回滚设备组成结构示意图。

具体实施方式

为更进一步阐述本发明为达成预定目的所采取的技术手段及功效,以下结合附图及较佳实施例,对本发明进行详细说明如后。

本发明第一实施例,一种数据回滚方法,如图1所示,包括以下具体步骤:

步骤s101,在事务对应的任一数据库数据操作失败的情况下,根据预先生成的该事务对应的事务日志索引信息,获取该事务对应的所有事务日志。

其中,事务(transaction)为操作数据库中各种数据的一个程序执行单元(unit);事务通常为通过高级数据库操纵语言或编程语言(例如:sql(structuredquerylanguage,结构化查询语言)、c++或java)编写的程序语句集合;事务包括:事务开始(begintransaction)和事务结束(endtransaction)之间执行的全体程序语句集合组成。

在本发明的一些实施例中,数据操作至少包括以下方式之一:数据访问、数据更新、数据删除和数据写入等操作。

在本发明的一些实施例中,事务日志包括但不限于:该事务对该事务对应的所有数据库的数据操作记录。

在本发明的一些实施例中,预先生成的该事务对应的事务日志索引信息,与该事务对应的所有事务日志对应设置;事务日志索引信息包括但不限于:对应事务日志的标识信息,对应事务日志中每个事务的开始时间,对应事务日志中每个事务的开始位置,对应事务日志中每个事务的结束时间,对应事务日志中每个事务的结束位置,和对应事务日志中每个事务的标识信息等。

通过根据预先生成的该事务对应的事务日志索引信息,获取该事务对应的所有事务日志的方式,能够有效的快速定位出现数据操作异常的事务对应的事务日志。

可选的,步骤s101,包括:

在事务对应的任一数据库数据操作失败,或者接收到事务对应的数据回滚指令的情况下,根据预先生成的该事务对应的事务日志索引信息,获取该事务对应的所有事务日志。

步骤s102,根据该事务对应的所有事务日志,对该事务对应的所有数据库的提交数据并发执行回滚操作。

通过根据该事务对应的所有事务日志,对该事务对应的所有数据库的提交数据并发执行回滚操作的方式,能够在该事务为多个的情况下,有效的提高多个事务对应的数据库的数据回滚操作速度和操作效率。

本发明第一实施例所述的一种数据回滚方法,能够有效的提高数据库中数据的回滚速度和数据的回滚效率。

本发明第二实施例,一种数据回滚方法,如图1所示,包括以下具体步骤:

步骤s101,在事务对应的任一数据库数据操作失败的情况下,根据预先生成的该事务对应的事务日志索引信息,获取该事务对应的所有事务日志。

可选的,步骤s101,包括:

在事务对应的任一数据库数据操作失败,或者接收到事务对应的数据回滚指令的情况下,根据预先生成的该事务对应的事务日志索引信息,获取该事务对应的所有事务日志。

在本发明的一些实施例中,根据预先生成的该事务对应的事务日志索引信息,获取该事务对应的所有事务日志的方式包括但不限于:

在事务的数量为多个的情况下,将根据每一个事务对应的预先生成的事务日志索引信息,查询每一个事务对应的所有事务日志的操作,设置为一个查询操作线程;

通过并发执行所有查询操作线程,得到每一个事务对应的所有事务日志。

其中,事务为操作数据库中各种数据的一个程序执行单元;事务通常为通过高级数据库操纵语言或编程语言(例如:sql、c++或java)编写的程序语句集合;事务包括:事务开始(begintransaction)和事务结束(endtransaction)之间执行的全体程序语句集合组成。

在本发明的一些实施例中,数据操作至少包括以下方式之一:数据访问、数据更新、数据删除和数据写入等操作。

在本发明的一些实施例中,事务日志包括但不限于:该事务对该事务对应的所有数据库的数据操作记录。

在本发明的一些实施例中,预先生成的该事务对应的事务日志索引信息,与该事务对应的所有事务日志对应设置;事务日志索引信息包括但不限于:对应事务日志的标识信息,对应事务日志中每个事务的开始时间,对应事务日志中每个事务的开始位置,对应事务日志中每个事务的结束时间,对应事务日志中每个事务的结束位置,和对应事务日志中每个事务的标识信息等。

通过根据预先生成的该事务对应的事务日志索引信息,获取该事务对应的所有事务日志的方式,能够有效的快速定位出现数据操作异常的事务对应的事务日志。

步骤s102,根据该事务对应的所有事务日志,对该事务对应的所有数据库的提交数据并发执行回滚操作。

可选的,步骤s102,包括:

在事务的数量为一个的情况下,根据事务对应的所有事务日志,并发解析事务对应的所有数据库的提交数据,生成数据回滚信息;

根据数据回滚信息,对事务对应的所有数据库的提交数据并发执行回滚操作。

在本发明的一些实施例中,根据事务对应的所有事务日志,并发解析事务对应的所有数据库的提交数据,生成数据回滚信息的方式,包括但不限于:

根据事务对应的所有事务日志,并发解析事务对应的所有数据库的提交数据,生成数据回滚信息;

判断数据回滚信息的数据容量是否小于设定阈值;

若是,则将数据回滚信息存储至共享内存;

否则将数据回滚信息存储为第一数据文件。

在本发明的一些实施例中,对设定阈值不做具体限定,可以根据共享内存的容量进行设定,也可以根据用户的操作指令进行设定,也可以通过有限次实验进行设定,也可以通过有限次仿真进行设定。

在本发明的一些实施例中,根据数据回滚信息,对事务对应的所有数据库的提交数据并发执行回滚操作的方式,包括但不限于:

方式一,数据回滚信息包括:事务包含的程序语句集合对应的反向操作程序语句集合;

在将数据回滚信息存储至共享内存的情况下,逆序执行共享内存中的反向操作程序语句集合,对事务对应的所有数据库的提交数据并发执行回滚操作。

方式二,数据回滚信息包括:事务包含的程序语句集合对应的反向操作程序语句集合;

在将数据回滚信息存储为第一数据文件的情况下,基于缓存的预置数据容量,读取依次缓存的第一数据文件中的数据回滚信息;

逆序执行每次读取的数据回滚信息中的反向操作程序语句集合,对事务对应的所有数据库的提交数据并发执行回滚操作。

可选的,步骤s102,包括:

在事务的数量为多个的情况下,将解析每一个事务对应的所有事务日志的操作设置为一个解析操作线程;

通过并发执行所有解析操作线程,生成每一个事务对应的数据回滚信息;

根据每一个事务对应的数据回滚信息,通过设定的顺序依次对每一个事务对应的所有数据库的提交数据执行回滚操作。

在本发明的一些实施例中,根据每一个事务对应的数据回滚信息,通过设定的顺序依次对每一个事务对应的所有数据库的提交数据执行回滚操作的方式,包括但不限于:

方式一,将每一个事务对应的数据回滚信息存储为第二数据文件;

对所有第二数据文件以设定的顺序进行排序,得到数据文件序列;

根据数据文件序列,通过缓存依次读取第二数据文件中的数据回滚信息,对每一个事务对应的所有数据库的提交数据执行回滚操作。

或者,方式二,根据预置的存储名称规则,将每一个事务对应的数据回滚信息存储为设定名称的第二数据文件;

根据设定名称,对所有第二数据文件以设定的顺序进行排序,得到数据文件序列;

根据数据文件序列,通过缓存依次读取第二数据文件中的数据回滚信息,对每一个事务对应的所有数据库的提交数据执行回滚操作。

例如:根据预置的存储名称规则,将每一个事务对应的数据回滚信息存储为设定名称的第二数据文件;其中,存储名称规则包括但不限于:基础文件名称+事务日志标识信息+当前流水号;

根据设定名称的字符串的升序,对所有第二数据文件进行排序,得到数据文件序列;

根据数据文件序列,通过缓存依次读取第二数据文件中的数据回滚信息,对每一个事务对应的所有数据库的提交数据执行回滚操作。

在本发明的一些实施例中,根据数据文件序列,通过缓存依次读取第二数据文件中的数据回滚信息,对每一个事务对应的所有数据库的提交数据执行回滚操作,包括但不限于:

数据回滚信息包括:事务包含的程序语句集合对应的反向操作程序语句集合;

根据数据文件序列,基于缓存的预置数据容量,读取依次缓存的每个第二数据文件中的数据回滚信息;

逆序执行每次读取的数据回滚信息中的反向操作程序语句集合,对每一个事务对应的所有数据库的提交数据执行回滚操作。

通过缓存预读取每个第二数据文件,能够有效的提高读取第二数据文件的速度,进而提高数据回滚的速度和数据回滚的效率。

在本发明的一些实施例中,对缓存的预置数据容量的不做具体限定,可以为数据库读取一个完整事务的最大值。

在本发明的一些实施例中,逆序执行每次读取的数据回滚信息中的反向操作程序语句集合的方式,包括但不限于:

通过绑定变量的方式,逆序执行每次读取的数据回滚信息对应的反向操作程序语句集合。

通过绑定变量,提高了数据回滚的执行效率,有效的增强了数据的安全性(例如,防止了sql的注入)

通过根据该事务对应的所有事务日志,对该事务对应的所有数据库的提交数据并发执行回滚操作的方式,能够在该事务为多个的情况下,有效的提高多个事务对应的数据库的数据回滚操作速度和操作效率。

本发明第二实施例所述的一种数据回滚方法,能够有效的提高数据库中数据的回滚速度和数据的回滚效率;同时通过绑定变量,能够有效的提高数据的安全性、数据的回滚速度和数据的回滚效率。

本发明第三实施例,一种数据回滚系统,如图2所示,包括以下组成部分:

事务管理器100,用于在事务对应的任一数据库300数据操作失败的情况下,向资源管理器200发送数据回滚请求。

可选的,事务管理器100,用于在事务对应的任一数据库300数据操作失败,或者接收到事务对应的数据回滚指令的情况下,向资源管理器200发送数据回滚请求。

资源管理器200,用于当接收到事务管理器100发送的数据回滚请求时,根据预先生成的事务对应的事务日志索引信息,获取事务对应的所有事务日志;根据事务对应的所有事务日志,对事务对应的所有数据库300的提交数据并发执行回滚操作。

其中,事务为操作数据库300中各种数据的一个程序执行单元;事务通常为通过高级数据库300操纵语言或编程语言(例如:sql、c++或java)编写的程序语句集合;事务包括:事务开始(begintransaction)和事务结束(endtransaction)之间执行的全体程序语句集合组成。

在本发明的一些实施例中,数据操作至少包括以下方式之一:数据访问、数据更新、数据删除和数据写入等操作。

在本发明的一些实施例中,事务日志包括但不限于:该事务对该事务对应的所有数据库300的数据操作记录。

在本发明的一些实施例中,预先生成的该事务对应的事务日志索引信息,与该事务对应的所有事务日志对应设置;事务日志索引信息包括但不限于:对应事务日志的标识信息,对应事务日志中每个事务的开始时间,对应事务日志中每个事务的开始位置,对应事务日志中每个事务的结束时间,对应事务日志中每个事务的结束位置,和对应事务日志中每个事务的标识信息等。

通过根据预先生成的该事务对应的事务日志索引信息,获取该事务对应的所有事务日志的方式,能够有效的快速定位出现数据操作异常的事务对应的事务日志。

通过根据该事务对应的所有事务日志,对该事务对应的所有数据库300的提交数据并发执行回滚操作的方式,能够在该事务为多个的情况下,有效的提高多个事务对应的数据库300的数据回滚操作速度和操作效率。

本发明第三实施例所述的一种数据回滚系统,能够有效的提高数据库中数据的回滚速度和数据的回滚效率。

本发明第四实施例,一种数据回滚系统,如图2所示,包括以下组成部分:

事务管理器100,用于在事务对应的任一数据库300数据操作失败的情况下,向资源管理器200发送数据回滚请求。

可选的,事务管理器100,用于在事务对应的任一数据库300数据操作失败,或者接收到事务对应的数据回滚指令的情况下,向资源管理器200发送数据回滚请求。

资源管理器200,用于当接收到事务管理器100发送的数据回滚请求时,根据预先生成的事务对应的事务日志索引信息,获取事务对应的所有事务日志;根据事务对应的所有事务日志,对事务对应的所有数据库300的提交数据并发执行回滚操作。

在本发明的一些实施例中,根据预先生成的该事务对应的事务日志索引信息,获取该事务对应的所有事务日志的方式包括但不限于:

在事务的数量为多个的情况下,将根据每一个事务对应的预先生成的事务日志索引信息,查询每一个事务对应的所有事务日志的操作,设置为一个查询操作线程;

通过并发执行所有查询操作线程,得到每一个事务对应的所有事务日志。

可选的,资源管理器200,用于在事务的数量为一个的情况下,根据事务对应的所有事务日志,并发解析事务对应的所有数据库300的提交数据,生成数据回滚信息;

根据数据回滚信息,对事务对应的所有数据库300的提交数据并发执行回滚操作。

在本发明的一些实施例中,根据事务对应的所有事务日志,并发解析事务对应的所有数据库300的提交数据,生成数据回滚信息的方式,包括但不限于:

根据事务对应的所有事务日志,并发解析事务对应的所有数据库300的提交数据,生成数据回滚信息;

判断数据回滚信息的数据容量是否小于设定阈值;

若是,则将数据回滚信息存储至共享内存;

否则将数据回滚信息存储为第一数据文件。

在本发明的一些实施例中,对设定阈值不做具体限定,可以根据共享内存的容量进行设定,也可以根据用户的操作指令进行设定,也可以通过有限次实验进行设定,也可以通过有限次仿真进行设定。

在本发明的一些实施例中,根据数据回滚信息,对事务对应的所有数据库300的提交数据并发执行回滚操作的方式,包括但不限于:

方式一,数据回滚信息包括:事务包含的程序语句集合对应的反向操作程序语句集合;

在将数据回滚信息存储至共享内存的情况下,逆序执行共享内存中的反向操作程序语句集合,对事务对应的所有数据库300的提交数据并发执行回滚操作。

方式二,数据回滚信息包括:事务包含的程序语句集合对应的反向操作程序语句集合;

在将数据回滚信息存储为第一数据文件的情况下,基于缓存的预置数据容量,读取依次缓存的第一数据文件中的数据回滚信息;

逆序执行每次读取的数据回滚信息中的反向操作程序语句集合,对事务对应的所有数据库300的提交数据并发执行回滚操作。

通过根据预先生成的该事务对应的事务日志索引信息,获取该事务对应的所有事务日志的方式,能够有效的快速定位出现数据操作异常的事务对应的事务日志。

可选的,资源管理器200,用于在事务的数量为多个的情况下,将解析每一个事务对应的所有事务日志的操作设置为一个解析操作线程;

通过并发执行所有解析操作线程,生成每一个事务对应的数据回滚信息;

根据每一个事务对应的数据回滚信息,通过设定的顺序依次对每一个事务对应的所有数据库300的提交数据执行回滚操作。

在本发明的一些实施例中,根据每一个事务对应的数据回滚信息,通过设定的顺序依次对每一个事务对应的所有数据库300的提交数据执行回滚操作的方式,包括但不限于:

方式一,将每一个事务对应的数据回滚信息存储为第二数据文件;

对所有第二数据文件以设定的顺序进行排序,得到数据文件序列;

根据数据文件序列,通过缓存依次读取第二数据文件中的数据回滚信息,对每一个事务对应的所有数据库300的提交数据执行回滚操作。

或者,方式二,根据预置的存储名称规则,将每一个事务对应的数据回滚信息存储为设定名称的第二数据文件;

根据设定名称,对所有第二数据文件以设定的顺序进行排序,得到数据文件序列;

根据数据文件序列,通过缓存依次读取第二数据文件中的数据回滚信息,对每一个事务对应的所有数据库300的提交数据执行回滚操作。

例如:根据预置的存储名称规则,将每一个事务对应的数据回滚信息存储为设定名称的第二数据文件;其中,存储名称规则包括但不限于:基础文件名称+事务日志标识信息+当前流水号;

根据设定名称的字符串的升序,对所有第二数据文件进行排序,得到数据文件序列;

根据数据文件序列,通过缓存依次读取第二数据文件中的数据回滚信息,对每一个事务对应的所有数据库300的提交数据执行回滚操作。

在本发明的一些实施例中,根据数据文件序列,通过缓存依次读取第二数据文件中的数据回滚信息,对每一个事务对应的所有数据库300的提交数据执行回滚操作,包括但不限于:

数据回滚信息包括:事务包含的程序语句集合对应的反向操作程序语句集合;

根据数据文件序列,基于缓存的预置数据容量,读取依次缓存的每个第二数据文件中的数据回滚信息;

逆序执行每次读取的数据回滚信息中的反向操作程序语句集合,对每一个事务对应的所有数据库300的提交数据执行回滚操作。

通过缓存预读取每个第二数据文件,能够有效的提高读取第二数据文件的速度,进而提高数据回滚的速度和数据回滚的效率。

在本发明的一些实施例中,对缓存的预置数据容量的不做具体限定,可以为数据库300读取一个完整事务的最大值。

在本发明的一些实施例中,逆序执行每次读取的数据回滚信息中的反向操作程序语句集合的方式,包括但不限于:

通过绑定变量的方式,逆序执行每次读取的数据回滚信息对应的反向操作程序语句集合。

通过绑定变量,提高了数据回滚的执行效率,有效的增强了数据的安全性(例如,防止了sql的注入)

通过根据该事务对应的所有事务日志,对该事务对应的所有数据库300的提交数据并发执行回滚操作的方式,能够在该事务为多个的情况下,有效的提高多个事务对应的数据库300的数据回滚操作速度和操作效率。

通过根据该事务对应的所有事务日志,对该事务对应的所有数据库300的提交数据并发执行回滚操作的方式,能够在该事务为多个的情况下,有效的提高多个事务对应的数据库300的数据回滚操作速度和操作效率。

本发明第四实施例所述的一种数据回滚系统,能够有效的提高数据库中数据的回滚速度和数据的回滚效率;同时通过绑定变量,能够有效的提高数据的安全性、数据的回滚速度和数据的回滚效率。

本发明第五实施例,一种数据回滚设备,如图3所示,包括以下组成部分:

处理器501和存储器502。在本发明的一些实施例中,处理器501和存储器502可通过总线或者其它方式连接。

处理器501可以是通用处理器,例如中央处理器(centralprocessingunit,cpu),还可以是数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(英文:applicationspecificintegratedcircuit,asic),或者是被配置成实施本发明实施例的一个或多个集成电路。其中,存储器502用于存储处理器501的可执行指令;

存储器502,用于存储程序代码,并将该程序代码传输给处理器501。存储器502可以包括易失性存储器(volatilememory),例如随机存取存储器(randomaccessmemory,ram);存储器502也可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-onlymemory,rom)、快闪存储器(flash

memory)、硬盘(harddiskdrive,hdd)或固态硬盘(solid-statedrive,ssd);存储器502还可以包括上述种类的存储器的组合。

其中,处理器501用于调用存储器502存储的程序代码管理代码,执行本发明第一实施例至本发明第二实施例中任一实施例中部分或全部步骤。

本发明第五实施例所述的一种数据回滚设备,能够有效的提高数据库中数据的回滚速度和数据的回滚效率;同时通过绑定变量,能够有效的提高数据的安全性、数据的回滚速度和数据的回滚效率。

本发明第六实施例,一种计算机可读存储介质。

计算机存储介质可以是ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、移动硬盘、cd-rom或者本领域已知的任何其他形式的存储介质。

计算机可读存储介质存储有一个或者多个程序,该一个或者多个程序可被一个或者多个处理器执行,以实现本发明第一实施例至本发明第二实施例中任一实施例中部分或全部步骤。

本发明第六实施例中所述的一种计算机可读存储介质,存储有一个或者多个程序,该一个或者多个程序可被一个或者多个处理器执行,能够有效的提高数据库中数据的回滚速度和数据的回滚效率;同时通过绑定变量,能够有效的提高数据的安全性、数据的回滚速度和数据的回滚效率。

本发明第七实施例,本实施例是在上述实施例的基础上,以数据回滚方法为例,介绍一个本发明的应用实例。

步骤s701,在一个分布式事务中的语句2所在的数据库执行提交失败的情况下,事务管理器发出一条回滚请求至语句1所在的资源管理器。

其中,该分布式事务(其中,事务id值为5)含有两条sql语句,分别分布在两个不同的数据库节点中,该事务包含的sql语句如下:

1.insertintodb.tb(a)values(1);

2.insertintodb.tb(a)values(2)。

语句1执行提交成功,但是语句2所在的数据库执行提交失败(提交失败数据库自动回滚);

回滚请求包含事务id值5、事务的开始时间(时间戳)1495673713和事务的结束时间(时间戳)1495673733。

步骤s702,资源管理器根据事务日志索引信息,获取该分布式事务对应的事务日志文件。

资源管理器中事务日志索引信息如下:

事务日志索引信息的格式为:事务开始时间事务日志文件名事务开始位置事务id值;

mysql-bin.000015.idx:1495673713mysql-bin.0000151235;

mysql-bin.000016.idx:1495673793mysql-bin.0000161236;

步骤s703,资源管理器将回滚请求中事务抛入处理事务线程池中,通过回滚请求和事务日志索引信息,对该分布式事务对应的事务日志文件进行解析。

资源管理器将回滚请求中事务抛入处理事务线程池中,通过回滚请求和事务日志索引信息,定位出待解析的事务日志文件为mysql-bin.000015,开始位置为123,然后将该事务日志文件抛入解析事务日志文件线程中进行解析。

通过解析事务日志文件mysql-bin.000015,生成回滚sql语句,并存入共享内存中,内存中存储的内容为deletefromdb.tbwherea=?;1。其中1是a字段的值,相当于生成的反向语句为:deletefromdb.tbwherea=1。

步骤s704,通过绑定变量方式进行执行该反向语句。

执行成功后,则完成语句1的回滚操作,从而保证了数据的一致性。

本发明第八实施例,本实施例是在上述实施例的基础上,以数据回滚方法为例,介绍一个本发明的应用实例。

步骤s801,在一个分布式事务已提交成功的情况,事务管理器向该分布式事务对应的一个设定资源管理器发送回滚请求。

可选的,步骤s801,包括:

在一个数据库节点中,含有一个分布式事务(事务id值为3,db.tb表的字段a含有数据2,3,4),该分布式事务的sql语句包括:

1.deletefromdb.tbwherea=2;

2.deletefromdb.tbwherea=3;

3.deletefromdb.tbwherea=4;

该分布式事务已提交成功,事务管理器向资源管理器发起回滚请求,请求消息包含事务id值3、事务3的开始时间(时间戳)1495653633和结束时间(时间戳)1495653833。

步骤s802,资源管理器根据事务日志索引信息,获取该分布式事务对应的事务日志文件。

资源管理器中事务日志索引信息如下:

事务日志索引信息的格式为:事务开始时间事务日志文件名事务开始位置事务id值;

mysql-bin.000001.idx:1495621633mysql-bin.0000011231;

1495632633mysql-bin.0000014452;

1495653633mysql-bin.00000114443;

mysql-bin.000002.idx:1495673793mysql-bin.0000021234;

步骤s803,资源管理器将回滚请求中事务抛入处理事务线程池中,通过回滚请求和事务日志索引信息,对该分布式事务对应的事务日志文件进行解析。

可选的,步骤s803,包括:

资源管理器将回滚请求中事务抛入处理事务线程池中,通过回滚请求和事务日志索引信息,定位出待解析的事务日志文件为mysql-bin.000001,开始位置为1444,并将该事务文件抛入解析事务日志文件线程中进行解析

通过解析事务日志文件mysql-bin.000001,生成回滚sql语句,并存入共享内存中,生成的回滚内容为:insertintodb.tb(a)values(?);2;3;4。其中,2、3、4是字段a的3个值,相当于生成的反向回滚语句为:

4.insertintodb.tb(a)values(2);

5.insertintodb.tb(a)values(3);

6.insertintodb.tb(a)values(4)。

步骤s804,通过绑定变量方式进行执行该反向语句。

可选的,步骤s804,包括:

通过绑定变量方式逆序执行sql语句,即相当于按照语句6,5,4的顺序进行执行。执行成功后,则完成整个回滚流程,从而保证了数据的一致性。

本发明第九实施例,本实施例是在上述实施例的基础上,以数据回滚方法为例,介绍一个本发明的应用实例。

步骤s901,在两个分布式事务已提交成功的情况,事务管理器向该两个分布式事务对应的设定资源管理器发送回滚请求。

可选的,步骤s901,包括:

在一个数据库节点中,含有两个分布式事务(事务id值分别为3和6):

事务3包括:1.updatedb.tb1seta=3wherea=4;

2.updatedb.tb2seta=5wherea=6;

事务6包括:3.updatedb.tb1seta=7wherea=3;

4.updatedb.tb2seta=9wherea=5。

两个事务均提交成功后,事务管理器向资源管理器发起回滚请求,请求消息包含事务id值3、事务3的开始时间(时间戳)1495653723和结束时间(时间戳)1495653923、事务id值6、事务6的开始时间(时间戳)1495755967和结束时间(时间戳)1495756014。

步骤s902,资源管理器根据事务日志索引信息,获取该分布式事务对应的事务日志文件。

资源管理器中事务日志索引信息如下:

事务日志索引信息的格式为:事务开始时间事务日志文件名事务开始位置事务id值;

mysql-bin.000017.idx:1495643723mysql-bin.0000171232;

1495653723mysql-bin.0000174673;

mysql-bin.000018.idx:1495654723mysql-bin.0000181234;

1495654823mysql-bin.0000181235;

mysql-bin.000019.idx:1495755967mysql-bin.0000191236。

步骤s903,资源管理器将回滚请求中事务抛入处理事务线程池中,通过回滚请求和事务日志索引信息,对两个分布式事务对应的事务日志文件进行解析。

可选的,步骤s903,包括:

资源管理器将回滚请求中事务3和事务6分别抛入处理事务线程池中,通过回滚请求和事务日志索引信息,分别定位出事务3待解析的事务日志文件为mysql-bin.000017,开始位置为467,事务6待解析的事务日志文件为mysql-bin.000019,开始位置为123,将这两个事务日志文件抛入解析事务日志文件线程中进行解析。

事务3对应的生成文件为:rollback_mysql-bin.000017_000002,该文件中包含的回滚内容为:

updatedb.tb1seta=?wherea=?;43;

updatedb.tb2seta=?wherea=?;65;

相当于生成的反向回滚语句为:

5.updatedb.tb1seta=4wherea=3;

6.updatedb.tb2seta=6wherea=5;

若事务6对应的生成文件为:rollback_mysql-bin.000019_000001,该文件中包含的回滚内容为:

updatedb.tb1seta=?wherea=?;37

updatedb.tb2seta=?wherea=?;59

相当于生成的反向回滚语句为:

7.updatedb.tb1seta=3wherea=7;

8.updatedb.tb2seta=5wherea=9;

步骤s904,通过绑定变量方式进行执行该反向语句。

可选的,步骤s904,包括:

通过绑定变量方式,逆序执行文件及逆序执行每个文件中的语句,即相当于按照语句8,7,6,5的顺序进行执行。执行成功后,则完成整个回滚流程,从而保证了数据的一致性。

本发明第十实施例,本实施例是在上述实施例的基础上,以数据回滚方法为例,介绍一个本发明的应用实例。

步骤s1101,在三个分布式事务已提交成功的情况,事务管理器向该三个分布式事务对应的设定资源管理器发送回滚请求。

可选的,步骤s1101,包括:

在一个数据库节点中,含有三个分布式事务(事务id值分别为1、2、3,表db.tb的a字段包含值3):

事务1包括:1.insertintodb.tb(a)values(1);

事务2包括:2.updatedb.tbseta=2wherea=1;

事务3包括:3.deletefromdb.tbwherea=3;

三个事务均提交成功后,事务管理器向资源管理器发起回滚请求,该回滚请求包括:

事务id值1、事务1的开始时间(时间戳)1495653723和结束时间(时间戳)1495653923;

事务id值2、事务2的开始时间(时间戳)1495654033和结束时间(时间戳)1495654983;

事务id值3、事务3的开始时间(时间戳)1497777983和结束时间(时间戳)149777901。

步骤s1102,资源管理器根据事务日志索引信息,获取该分布式事务对应的事务日志文件。

资源管理器中事务日志索引信息如下:

事务日志索引信息的格式为:事务开始时间事务日志文件名事务开始位置事务id值;

mysql-bin.000001.idx:1495653723mysql-bin.0000011231

1495654033mysql-bin.0000024672

mysql-bin.000002.idx:1497777983mysql-bin.0000031233

步骤s1103,资源管理器将回滚请求中事务抛入处理事务线程池中,通过回滚请求和事务日志索引信息,对三个分布式事务对应的事务日志文件进行解析。

可选的,步骤s1103,包括:

资源管理器将回滚请求中事务1、2和3均抛入处理事务线程池中,通过回滚请求和事务日志索引信息,分别定位出事务1和事务2待解析的事务日志文件为mysql-bin.000001,开始位置分别为123、467,事务3待解析的事务日志文件为mysql-bin.000002,开始位置为123,将这三个事务日志文件抛入解析事务日志文件线程中进行解析。

事务1对应的生成文件为:rollback_mysql-bin.000001_000001,文件内容包括:

deletefromdb.tbwherea=?;1。

相当于生成的回滚语句为deletefromdb.tbwherea=1;

事务2对应的生成文件为:rollback_mysql-bin.000001_000003,文件内容包括:

updatedb.tbseta=?wherea=?;12。

相当于生成的回滚语句为updatedb.tbseta=1wherea=2;

事务3对应的生成文件为:rollback_mysql-bin.000002_000002,文件内容包括:

insertintodb.tb(a)values(?);3,相当于生成的回滚语句为insertintodb.tb(a)values(3);

步骤s1104,通过绑定变量方式进行执行该反向语句。

可选的,步骤s1104,包括:

通过绑定变量方式,逆序执行文件及逆序执行每个文件中的语句,执行成功后,则完成整个回滚流程,从而保证了数据的一致性。

其中执行的文件顺序为(按照生成回滚数据文件名逆序排序后,顺序执行):

rollback_mysql-bin.000002_000002;

rollback_mysql-bin.000001_000003;

rollback_mysql-bin.000001_000001。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1