发明内容
本发明所要解决的技术问题是提供一种恢复列存储分布式数据库误删除数据的方法及系统,通过对节点状态及版本状态进行分析,对版本属性文件进行版本切换,从而改变节点状态,使集群各个数据节点已提交的删除事务强制回滚,将数据回滚到事务的上一个状态,实现列存储分布式数据库误删除数据的恢复功能。
本发明是通过以下技术方案予以实现:
一种恢复列存储分布式数据库误删除数据的方法,其包括如下步骤:
S1:集群信息采集模块获取列存储分布式数据库的集群数据节点信息,并判断集群数据节点信息对应表是否为分布表,若为分布表则将分布表的集群数据节点信息及其对应的分片信息传输给数据存储结构分析模块,若为复制表则将复制表的集群数据节点信息传输给数据存储结构分析模块;
S2:数据存储结构分析模块根据接收的信息确定分布表或复制表的物理存储位置,并判断分布表或复制表的物理存储位置是否存在表数据文件,若存在表数据文件则判断表数据文件中是否同时存在A版本属性文件和B版本属性文件,若同时存在A版本属性文件和B版本属性文件,则将A版本属性文件和B版本属性文件传输给元数据及版本状态分析处理模块,若分布表或复制表的物理存储位置不存在表数据文件或者是不同时存在A版本属性文件和B版本属性文件,则停止恢复处理;
S3:元数据及版本状态分析处理模块分析A版本属性文件和B版本属性文件,并判断A版本属性文件和B版本属性文件中是否有一个存在删除操作,若有一个存在删除操作则将版本属性文件切换成不存在删除操作的版本属性文件后传输给数据刷新模块;
S4:数据刷新模块根据切换后的版本属性文件对集群数据节点信息及分布表信息进行刷新处理。
进一步,一种恢复列存储分布式数据库误删除数据的方法包括步骤S5数据校验过程:数据校验模块将刷新后的信息与刷新前的信息进行比较,若刷新后的信息与刷新前的信息不一致,则判断恢复误删除数据成功,若刷新后的信息与刷新前的信息一致,则判断恢复误删除数据失败,并重复步骤S1至步骤S4,直至刷新后的信息与刷新前的信息不一致为止。
进一步,步骤S1中判断集群数据节点信息对应表是否为分布表时包括如下步骤:
S11:集群信息采集模块获取列存储分布式数据库的集群数据节点信息,并判断集群数据节点信息对应表的属性;
S12:若集群数据节点信息对应表的属性不是引擎表,则不进行数据恢复处理,若集群数据节点信息对应表的属性是引擎表,则判断引擎表的类型;
S13:若判断引擎表为复制表则直接将集群数据节点信息传输给数据存储结构分析模块,若判断引擎表为分布表,则取得集群数据节点对应的分片信息,并将分布表的集群数据节点信息及对应的分片信息传输给数据存储结构分析模块。
进一步,步骤S3中版本属性文件切换包括如下步骤:
S31:分别查看A版本属性文件和B版本属性文件的最后一次操作内容的数据文件记录号,若其中一个版本属性文件最后一次操作内容的数据文件记录号大于另一个版本属性文件最后一次操作内容的数据文件记录号,则查看最后一次操作内容的数据文件记录号大的那个版本属性文件最后一次操作是否为删除操作,若该版本属性文件最后一次操作为删除操作,则判断误删除操作是在该版本属性文件下进行的,则进行下一步操作,若该版本属性文件最后一次操作不是删除操作,则不进行版本切换处理;
S32:查看是否存在事务状态文件,若存在事务状态文件,则进行版本切换;
S33:将版本属性文件切换成最后一次操作内容的数据文件记录号小的版本属性文件。
进一步,步骤S5中数据校验的过程如下:
S51:获取刷新前每一个集群数据节点的每一个分片信息的行数值以及刷新后每一个集群数据节点的每一个分片信息的行数值;
S52:将刷新前每一个集群数据节点的每一个分片信息的行数值与刷新后每一个节点的每一个分片信息的行数值进行比较,遍历所有集群数据节点的所有分片信息,若存在刷新后集群数据节点分片信息的行数值大于刷新前集群数据节点分片信息的行数值,则判断恢复误删除数据成功,若刷新后所有集群数据节点的所有分片信息的行数值均与刷新后所有集群数据节点的所有分片信息的行数值相等,则判断恢复误删除数据失败而转至步骤S53;
S53:重复执行步骤S1至步骤S4,直至存在刷新后集群数据节点分片信息的行数值大于刷新前集群数据节点分片信息的行数值,恢复误删除数据成功。
一种恢复列存储分布式数据库误删除数据的系统,用于执行上述任一所述的一种恢复列存储分布式数据库误删除数据的方法,其包括集群信息采集模块、数据存储结构分析模块、元数据及版本状态分析处理模块及数据刷新模块;
所述集群信息采集模块用于采集列存储分布式数据库的集群数据节点信息,并判断集群数据节点信息对应表是否为分布表,若为分布表则将分布表的集群数据节点信息及其对应的分片信息传输给数据存储结构分析模块,若为复制表则将复制表的集群数据节点信息传输给数据存储结构分析模块;
所述数据存储结构分析模块用于确定分布表或复制表的物理存储位置,并判断分布表或复制表的物理存储位置是否存在表数据文件,若存在表数据文件则判断表数据文件中是否同时存在A版本属性文件和B版本属性文件,若同时存在A版本属性文件和B版本属性文件,则将A版本属性文件和B版本属性文件传输给元数据及版本状态分析处理,若分布表或复制表的物理存储位置不存在表数据文件或者是不同时存在A版本属性文件和B版本属性文件,则停止恢复处理;
所述元数据及版本状态分析处理模块用于分析A版本属性文件和B版本属性文件,并判断A版本属性文件和B版本属性文件中是否有一个存在删除操作,若有一个存在删除操作则将版本属性文件切换成不存在删除操作的版本属性文件后传输给数据刷新模块;
所述数据刷新模块用于根据切换后的版本属性文件对集群数据节点信息及分布表信息进行刷新处理。
进一步,一种恢复列存储分布式数据库误删除数据的系统还包括数据校验模块,所述数据校验模块用于将刷新后的信息与刷新前的信息进行比较,若刷新后的信息与刷新前的信息不一致,则判断恢复误删除数据成功,若刷新后的信息与刷新前的信息一致,则判断恢复误删除数据失败,并重复步骤S1至步骤S4,直至刷新后的信息与刷新前的信息不一致为止。
发明的有益效果:
本发明通过对节点状态及版本状态进行分析,对版本属性文件进行版本切换,从而改变节点状态,使集群各个数据节点已提交的删除事务强制回滚,将数据回滚到事务的上一个状态,实现列存储分布式数据库误删除数据的恢复功能,恢复操作准确可靠,具有较高的实用价值,而且不会增加运行中数据库的额外负担,不影响运行中的其他数据库查询任务。
具体实施方式
一种恢复列存储分布式数据库误删除数据的方法,其总流程示意图如图1所示,具体包括如下步骤:
S1:集群信息采集模块获取列存储分布式数据库的集群数据节点信息,并判断集群数据节点信息对应表是否为分布表,若为分布表则将分布表的集群数据节点信息及其对应的分片信息传输给数据存储结构分析模块,若为复制表则将复制表的集群数据节点信息传输给数据存储结构分析模块;
集群信息采集模块获取的列存储分布式数据库集群数据节点信息,不同的数据节点对应着不同的分片信息,对于分布表来说,将所有数据节点信息与相应的分片信息对应起来形成表格,就构成了分布表,而对于复制表来说,其数据节点则不存在分片信息,复制表在所有数据节点上都是完整的数据,数据是相同的,而分布表在不同数据节点存在不同的分片信息,一个数据节点可能对应多个不同的分片信息,所有数据节点及其分片信息组成该表的完整数据。表的属性不同,数据物理文件存储的目录不同,所以取得表属性和数据节点对应的分片信息是定位表存储的关键,集群信息采集模块具体工作流程示意图如图2所示。
具体判断集群数据节点信息对应表是否为分布表时包括如下步骤:
S11:集群信息采集模块获取列存储分布式数据库的集群数据节点信息,并判断集群数据节点信息对应表的属性;
S12:若集群数据节点信息对应表的属性不是引擎表,说明集群数据节点信息对应表的属性为系统表,则不需要进行数据恢复处理而退出数据恢复程序,若集群数据节点信息对应表的属性是引擎表,则说明集群数据节点信息对应表的属性不是系统表,则需要判断引擎表的类型;
S13:若判断引擎表为复制表则直接将集群数据节点信息传输给数据存储结构分析模块,若判断引擎表为分布表,则取得集群数据节点对应的分片信息,并将分布表的集群数据节点信息及对应的分片信息传输给数据存储结构分析模块。因为对于复制表来说,其数据节点不存在分片信息,复制表在所有数据节点上都是完整的数据,数据是相同的,所以不需要进行恢复处理,而对于分布表,不同数据节点存在不同的分片信息,一个数据节点可能对应多个不同的分片信息,所有数据节点及其所有的分片信息组合在一起才能形成该表的完整数据,确定了表的属性,才能根据其数据物理文件存储的目录定位表存储的位置,进而进行误删除数据的恢复处理。
S2:数据存储结构分析模块根据接收的信息确定分布表或复制表的物理存储位置,并判断分布表或复制表的物理存储位置是否存在表数据文件,若存在表数据文件则判断表数据文件中是否同时存在A版本属性文件和B版本属性文件,若同时存在A版本属性文件和B版本属性文件,则将A版本属性文件和B版本属性文件传输给元数据及版本状态分析处理模块,若分布表或复制表的物理存储位置不存在表数据文件或者是不同时存在A版本属性文件和B版本属性文件,则停止恢复处理;
表数据在各个数据节点存储分为两部分:一部分为元数据,另外一部分为业务数据,我们所述的删除与恢复指的是业务数据的删除与恢复,误删除操作的表会在数据记录上标识删除标记,数据不会真正删除,如果真正删除了数据则无法恢复。正是在此基础上,数据存储结构分析模块可以根据分布表或复制表的物理存储位置,并判断是否存在A版本属性文件和B版本属性文件,便于后期的恢复操作。若不存在A版本属性文件和B版本属性文件,或者缺少其中一个都不能进行后期的恢复操作。
S3:元数据及版本状态分析处理模块分析A版本属性文件和B版本属性文件,并判断A版本属性文件和B版本属性文件中是否有一个存在删除操作,若有一个存在删除操作则将版本属性文件切换成不存在删除操作的版本属性文件后传输给数据刷新模块;
具体版本属性文件切换包括如下步骤:
S31:分别查看A版本属性文件和B版本属性文件的最后一次操作内容的数据文件记录号,若其中一个版本属性文件最后一次操作内容的数据文件记录号大于另一个版本属性文件最后一次操作内容的数据文件记录号,则查看最后一次操作内容的数据文件记录号大的那个版本属性文件最后一次操作是否为删除操作,若该版本属性文件最后一次操作为删除操作,则判断误删除操作是在该版本属性文件下进行的,则进行下一步操作,若该版本属性文件最后一次操作不是删除操作,则不进行版本切换处理;
S32:查看是否存在事务状态文件,若存在事务状态文件,则进行版本切换;
S33:将版本属性文件切换成最后一次操作内容的数据文件记录号小的版本属性文件。
事务状态文件是个空文件,用来标识当前使用的版本,如果事务状态文件存在,则说明A版本属性文件存在删除操作,需要将版本切换成B版本属性文件, 如果事务状态文件不存在,则说明B版本属性文件存在删除操作,需要将版本切换成A版本属性文件,从而保证数据恢复的准确性及稳定性。
具体的,假设A版本属性文件的记录号为A.scn,B版本属性文件的记录号为B.scn,若A.scn大于B.scn,则继续查看A版本属性文件中最后一次操作是否为删除操作,若A版本属性文件中最后一次操作为删除操作,则继续查看是否存在事务状态文件,若存在事务状态文件,将版本属性文件切换为B版本属性文件。
具体元数据及版本状态分析处理模块工作流程图如图3所示,图中所述A存在删除操作,是指A版本属性文件存在删除操作,图中所述B存在删除操作,是指B版本属性文件存在删除操作。
S4:数据刷新模块根据切换后的版本属性文件对集群数据节点信息及分布表信息进行刷新处理。刷新后可以使集群各个数据节点已提交的删除事务强制回滚,将数据回滚到事务的上一个状态,刷新后的值应该与刷新前的值不同而与误删除前的值相同。
本发明通过对节点状态及版本状态进行分析,对版本属性文件进行版本切换,使集群各个数据节点已提交的删除事务强制回滚,将数据回滚到事务的上一个状态,实现列存储分布式数据库误删除数据的恢复功能,具有较高的实用价值,并且在整个恢复过程中,没有增加运行中数据库的额外负担,不影响运行中的其他数据库查询任务。
进一步,一种恢复列存储分布式数据库误删除数据的方法包括步骤S5数据校验过程:数据校验模块将刷新后的信息与刷新前的信息进行比较,若刷新后的信息与刷新前的信息不一致,则判断恢复误删除数据成功,若刷新后的信息与刷新前的信息一致,则判断恢复误删除数据失败,并重复步骤S1至步骤S4,直至刷新后的信息与刷新前的信息不一致为止。
由于恢复误删除数据操作后,可以将数据回滚到事务的上一个状态,刷新后的值应该与刷新前的值不同而与误删除前的值相同。但是由于误删除前的值无法获得,因而可以采用下述方法对恢复误删除数据操作进行校验:
S51:获取刷新前每一个集群数据节点的每一个分片信息的行数值以及刷新后每一个集群数据节点的每一个分片信息的行数值;
S52:将刷新前每一个集群数据节点的每一个分片信息的行数值与刷新后每一个节点的每一个分片信息的行数值进行比较,遍历所有集群数据节点的所有分片信息,若存在刷新后集群数据节点分片信息的行数值大于刷新前集群数据节点分片信息的行数值,则判断恢复误删除数据成功,若刷新后所有集群数据节点的所有分片信息的行数值均与刷新后所有集群数据节点的所有分片信息的行数值相等,则判断恢复误删除数据失败而转至步骤S53;
S53:重复执行步骤S1至步骤S4,直至存在刷新后集群数据节点分片信息的行数值大于刷新前集群数据节点分片信息的行数值,恢复误删除数据成功。
采用上述方法对恢复误删除操作进行校验,无需获取误删除前的值,校验方法简单有效,进一步提高了恢复误删除操作的准确性与可靠性。
一种恢复列存储分布式数据库误删除数据的系统,用于执行上述任一所述的一种恢复列存储分布式数据库误删除数据的方法,其包括集群信息采集模块、数据存储结构分析模块、元数据及版本状态分析处理模块及数据刷新模块;
所述集群信息采集模块用于采集列存储分布式数据库的集群数据节点信息,并判断集群数据节点信息对应表是否为分布表,若为分布表则将分布表的集群数据节点信息及其对应的分片信息传输给数据存储结构分析模块,若为复制表则将复制表的集群数据节点信息传输给数据存储结构分析模块;
所述数据存储结构分析模块用于确定分布表或复制表的物理存储位置,并判断分布表或复制表的物理存储位置是否存在表数据文件,若存在表数据文件则判断表数据文件中是否同时存在A版本属性文件和B版本属性文件,若同时存在A版本属性文件和B版本属性文件,则将A版本属性文件和B版本属性文件传输给元数据及版本状态分析处理,若分布表或复制表的物理存储位置不存在表数据文件或者是不同时存在A版本属性文件和B版本属性文件,则停止恢复处理;
所述元数据及版本状态分析处理模块用于分析A版本属性文件和B版本属性文件,并判断A版本属性文件和B版本属性文件中是否有一个存在删除操作,若有一个存在删除操作则将版本属性文件切换成不存在删除操作的版本属性文件后传输给数据刷新模块;
所述数据刷新模块用于根据切换后的版本属性文件对集群数据节点信息及分布表信息进行刷新处理。
进一步,一种恢复列存储分布式数据库误删除数据的系统还包括数据校验模块,所述数据校验模块用于将刷新后的信息与刷新前的信息进行比较,若刷新后的信息与刷新前的信息不一致,则判断恢复误删除数据成功,若刷新后的信息与刷新前的信息一致,则判断恢复误删除数据失败,并重复步骤S1至步骤S4,直至刷新后的信息与刷新前的信息不一致为止。
综上所述,本发明提供的一种恢复列存储分布式数据库误删除数据的方法及系统,通过对节点状态及版本状态进行分析,对版本属性文件进行版本切换,可以使集群各个数据节点已提交的删除事务强制回滚,将数据回滚到事务的上一个状态,实现列存储分布式数据库误删除数据的恢复功能。本发明提供的方法及系统具有较高的实用价值,稳定可靠而且不会增加运行中数据库的额外负担,不影响运行中的其他数据库查询任务。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。