发明内容
为解决上述技术问题,本申请实施例提供一种图形数据库联机事务数据恢复的方法及系统,能够有效的实现对意外中断事务的数据进行恢复。
技术方案如下:
一种图形数据库联机事务数据恢复的方法,包括:
定义图形数据库联机事务的处理层次;
对所述联机事务处理过程中的操作事务进行检查;
当检查得出所述操作事务中含有异常操作事务时,调用恢复机制对所述异常操作事务进行数据恢复。
上述的方法,优选的,所述图形数据库联机事务的处理层次包括上、中、下三个层次;
其中所述中间层为事务逻辑控制层,依据事务的操作类别分为同步区与非同步区。
上述的方法,优选的,所述对联机事务处理过程中的操作事务进行检查的过程中,对所述中间层同步区中的操作事务进行检查。
上述的方法,优选的,所述异常操作事务包括:
过期事务、回滚中断事务、提交中断事务及过期中断事务。
上述的方法,优选的,当检查得出所述操作事务中含有过期事务时,调用回滚恢复机制对所述过期事务进行回滚操作,并检查所述回滚操作执行过程中,是否存在回滚中断事务,当存在回滚中断事务时,对所述回滚中断事务进行回滚操作。
上述的方法,优选的,当检查得出所述操作事务中含有提交中断事务时,调用提交恢复机制对所述提交中断事务进行提交操作;
所述提交操具体为:
删除锁定数据;
更改脏数据状态;
删除提交事务记录,完成事务的提交。
上述的方法,优选的,当检查得出所述操作事务中含有过期中断事务时,调用回滚恢复机制对所述过期中断事务进行回滚操作。
上述的方法,优选的,所述回滚操作具体为:
删除过期事务的脏数据;
解除锁定的数据;
删除事务记录,完成事务的回滚。
一种图形数据库联机事务数据恢复系统,包括:
定义单元、检查单元和恢复单元;
其中:所述定义单元用于定义图形数据库联机事务的处理层次;
所述检查单元用于对所述定义单元定义的联机事务处理过程中的操作事务进行检查;
所述恢复单元用于在所述检查单元检查得出所述操作事务中含有异常操作事务时,调用恢复机制对所述异常操作事务进行数据恢复。
上述的系统,优选的,所述恢复单元包括回滚子单元和提交子单元;
所述回滚子单元用于当所述检查单元检查得出所述操作事务中含有过期事务或过期中断事务时,对所述过期事务或过期中断事务进行回滚操作;
所述提交子单元用于当所述检查单元检查得出所述操作事务中含有提交中断事务时,对所述提交中断事务进行提交操作。
由以上本申请实施例提供的技术方案可见,本发明提供的图形数据库联机事务数据恢复方法,在进入联机事务处理流程后,对联机事务处理流程中的操作事务进行检查,查看操作事务中是否含有异常操作事务,当存在异常操作事务时,调用恢复机制对异常操作事务进行数据恢复。本申请实施例提供的异常操作事务恢复机制中包含回滚操作、提交操作等恢复机制,能够及时有效的对图形数据库事务处理过程中,由于意外造成中断的事务进行恢复。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案。下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
本申请实施例提供的图形数据库联机事务恢复的方法流程图,包括:
步骤S101:定义图形数据库联机事务的处理层次;
步骤S102:对所述联机事务处理过程中的操作事务进行检查;
步骤S103:当检查得出所述操作事务中含有异常操作事务时,调用恢复机制对所述异常操作事务进行数据恢复。
本申请实施例提供的联机事务层次处理的结构图如图2所示,本申请实施例提供的联机事务处理自上而下分为三层:
最上层为暴露给外部调用程序的API;
中间层为事务逻辑控制层,按操作类别分为同步区与非同步区,同步区意味着在同一时间只能有一个操作进行,其他操作在进入同步区之间均处理等待状态,该机制利用Java语言的线程同步锁定特性实现。非同步区的操作则不受限制,在任何时间均可以进行;
最下层为存储数据的DataSet操作抽象层,在DataSet中,保存有联机事务自身的状态信息,以及数据的事务状态属性信息。
在图形数据库中,,联机事务的状态数据存储在名称为graphic_db_tx_def的DataSet中,该DataSet的数据结构如表1所示:
表1
在图形数据库中每一个Node均有一个相对应的同名的DataSet,数据之间的Relation信息保存在名称为graphic_db_relation_record_def的DataSet中。这些DataSet中均缺省内置如下两个列,如表2所示:
表2
有上述两个图标可知,在图形数据库联机事务处理过程中,出现的异常操作事务包括:过期事务、回滚中断事务、提交中断事务及过期中断事务。
为了更加清晰对本申请实施例对以上各种异常事务进行恢复的过程,本申请实施例提供了一种图形数据库联机事务恢复方法的一详细流程图,如图2所示,包括:
步骤S201:恢复方法启动;
步骤S202:进入同步区,对同步区中的联机事务进行检查;
步骤S203:检查是否存在过期事务;当存在过期事务时,执行步骤S204,否则执行步骤S205;
步骤S204:对所述过期事务进行回滚操作;执行完毕后,执行步骤S205;
步骤S205:检查是否存在回滚中断事务;如果是,执行步骤S211;否则,执行步骤S209;
需要说明的是:在步骤S205中,可以不以步骤S203为前提,在本次步骤S201启动前,其它执行过程中,如果存在事务中断的情况,在新的检查过程中,可直接对上次检查过程中存在的中断事务进行回滚操作;
步骤S206:检查是否存在提交中断事务;如存在,执行步骤S207;否则,执行步骤S209;
步骤S207:对提交中断事务执行提交操作;
步骤S208:检查是否存在过期中断事务;如存在,执行步骤S212;否则,执行步骤S209;
需要对以上步骤进行说明的是:步骤S203;步骤S206;步骤S208是并发执行的。图中涉及的步骤S204、步骤S211、步骤S212执行回滚操作的过程其逻辑执行过程是一致的;
步骤S209:退出同步区;
步骤S210:数据恢复过程结束。
对于以上步骤实现过程中,数据恢复过程中提交操作的执行过程的方法流程图如图4所示,包括:
步骤S301:删除锁定数据;
步骤S302:更改脏数据状态;
步骤S303:删除提交事务记录,完成事务的提交。
对于以上步骤实现过程中,数据恢复过程中回滚操作的执行过程的方法流程图如图5所示,包括:
删除过期事务的脏数据;
接触锁定的数据;
删除事务记录,完成事务的回滚。
为了更加清晰对本申请实施例提供的数据恢复方法进行描述,本申请实施例提供一具体实例,该实例在图2的基础上进行,如下:
步骤S202:进入同步区,同步区利用Java语言的synchronized线程同步锁定实现,在同一时刻,仅有一个操作能进入同步区;
步骤S203:检查是否有过期事务;查询graphic_db_tx_def,遍历事务记录。用当前系统的时间减去事务记录start_time列的值,如果值大于30000(30秒),则表明事务已过期;
步骤S204:回滚事务;
回滚过程,执行如下逻辑:
删除过期事务的脏数据,查询graphic_db_tx_def,查询所属事务记录中列associate_node的值,假设该列的值为Customer,则查询名为Customer的DataSet,将该DataSet中列_dirty的值为1、tx_no的值等于当前事务编号的记录删除;
解除锁定的数据;查询graphic_db_tx_def,查询所属事务记录中列associate_node的值,假设该列的值为Customer,则查询名为Customer的DataSet,过滤该DataSet中列_tx_no的值等于当前事务编号的记录,将这些记录的列_tx_no的值修改为null;
删除事务记录;将本次回滚事务的数据记录从名称为graphic_db_tx_def的DataSet中删除,完成事务的回滚操作;
步骤S205:检查是否有回滚中断事务;查询graphic_db_tx_def,遍历事务记录;如果记录中is_rollback则的值为1,则表明该事务在执行回滚操作时意外中断;
步骤S211:回滚事务。执行的逻辑与步骤204相同;
步骤S206:检查是否有提交中断事务;查询graphic_db_tx_def,遍历事务记录。如果记录中is_commit列的值为1,则表明该事务在执行提交操作时意外中断;
步骤S207:提交事务;
提交事务过程,执行如下逻辑:
删除锁定的数据;查询graphic_db_tx_def,查询所属事务记录中列associate_node的值,假设该列的值为Customer,则查询名为Customer的DataSet,将该DataSet中_dirty的值为-1、tx_no值为当事务编号的记录删除;
更改脏数据的状态;查询graphic_db_tx_def,查询所属事务记录中列associate_node的值,假设该列的值为Customer,则查询名为Customer的DataSet,过滤该DataSet中_dirty列的值为1、tx_no列的值等于当前事务编号的所有数据,将这些数据记录的_dirty列设为-1,将列tx_no的值设为null;
将本次提交事务的记录从名称为graphic_db_tx_def的DataSet中删除,完成事务的提交操作;
步骤S208:检查是否有过期中断事务;查询graphic_db_tx_def,遍历事务记录;如果记录中is_timeout列的值为1,则表明该事务在执行过期回滚操作时意外中断;
步骤S212:回滚事务;执行的逻辑与步骤204相同。
步骤S209:退出同步区;跳出线程锁定的synchronized方法。
对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
针对以上方法实施例,本申请实施例还提供了一种图形数据库联机事务数据恢复系统,其结构示意图如图6所示,包括:
定义单元501、检查单元502和恢复单元503;
其中:定义单元501用于定义图形数据库联机事务的处理层次;
检查单元502用于对所述定义单元501定义的联机事务处理过程中的操作事务进行检查;
恢复单元503用于在所述检查单元502检查得出所述操作事务中含有异常操作事务时,调用恢复机制对所述异常操作事务进行数据恢复。
本申请实施例提供的数据恢复系统中,恢复单元503包括回滚子单元504和提交子单元505;其结构示意图如图7所示;
回滚子单元504用于当所述检查单元502检查得出所述操作事务中含有过期事务或过期中断事务时,对所述过期事务或过期中断事务进行回滚操作;
提交子单元505用于当所述检查单元502检查得出所述操作事务中含有提交中断事务时,对所述提交中断事务进行提交操作。
对于系统实施例而言,由于其基本相应于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。以上所述仅是本申请的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。