基于二叉树日志的CDP备份恢复方法、系统及存储介质

文档序号:31447740发布日期:2022-09-07 12:21阅读:125来源:国知局
基于二叉树日志的CDP备份恢复方法、系统及存储介质
基于二叉树日志的cdp备份恢复方法、系统及存储介质
技术领域
1.本发明属于数据保护领域,属于一种基于二叉树日志的cdp备份恢复方法、系统及存储介质。


背景技术:

2.连续数据保护(cdp)是一种捕获并存储所有数据变化,可以恢复任何时间点数据副本的数据保护技术,提供了数据的安全性和可靠性保障。恢复点目标(rpo)和恢复时间目标(rto)是衡量数据保护能力的关键指标,相较于例如备份、快照等传统的数据保护技术,cdp备份发生的每一次数据变化且恢复时只需要恢复系统启动以来的数据变化而不是所有数据集,因此cdp可以提供无限的rpo和几乎为零的rto。
3.目前,越来越多的企业将cdp技术使用到他们的数据保护方案中,有效保障数据的安全性,为业务连续稳定开展提供可靠的支撑。被广泛使用的cdp技术按时间顺序记录所有数据变化,对每一次写操作生成日志。在备份时,将每条数据块变化的日志顺序保存;在进行恢复时,通过遍历大量的cdp日志获取恢复时间点的数据。采用这种方法备份简单,但需要记录大量的数据且在进行数据恢复时遍历日志消耗了大量时间,存储资源消耗较大且恢复速度较为缓慢。另一个被使用的技术,随时恢复到任意时间点trap(timely recovery to any point-in-time),不记录数据块的每一次变化,而是在备份时存储被改变过的块的异或校验值并按时间戳的顺序构成日志链,恢复时读取异或校验值再进行计算。这种方式减少了备份所需空间,但日志链过长时,数据恢复计算时间加长且容易因为单点故障造成整条链崩溃,从而无法实现数据恢复。
4.因此,如何在优化存储空间的同时提高数据恢复速率,提升系统运行效率,高效地保障数据安全已成为大数据时代面临的最大的挑战。


技术实现要素:

5.本发明为了解决上述背景技术中的技术问题,本发明实施实例提供一种基于连续写入的cdp备份方法、系统存储介质及恢复方法。所述技术方案如下:第一个方面,提供了一种基于二叉树日志的cdp备份恢复方法,包括步骤:初始化步骤,备份初始数据并初始化;监控截获步骤,监控并截获所有的写操作;第一判断步骤,判断所述写操作是否是恢复写操作,若否,则执行数据备份准备步骤;若是,则执行索引计算步骤;数据备份准备步骤,获取当前时间点t(n),读出数据块b上的原始数据bt(n-1),再将变化数据bt(n)写入所述数据块b,其中,所述数据块b为所述写操作覆盖数据块;异或计算步骤,将所述原始数据bt(n-1)和所述变化数据bt(n)进行异或计算,再将计算结果加上时间戳生成校验值pt(n);元数据记录生成步骤,根据二叉树结构日志和所述校验值pt(n),生成元数据记录
mt(n);第二判断步骤,判断所述校验值pt(n)是否为首个校验值pt(1),若否,则执行第三判断步骤;若是,则重复执行所述监控截获步骤至所述元数据记录生成步骤;第三判断步骤,根据所述元数据记录mt(n),获取校验值p(n-1),并判断n是否为奇数,若否,则将所述校验值pt(n)和所述校验值pt(n-1)进行异或计算,再根据计算结果依次重复执行所述元数据记录生成步骤和所述第二判断步骤;若是,则执行二叉树更新步骤;二叉树更新步骤,根据所述元数据记录mt(n),更新所述二叉树结构日志,再执行第四判断步骤;索引计算步骤,根据恢复时间点和更新后的二叉树结构日志,计算并索引恢复校验值,将所述恢复校验值和所述初始数据进行异或计算,计算结果为恢复数据,执行第四判断步骤;第四判断步骤,判断是否存在写操作,若否,则结束;若是,则重复执行监控截获步骤。
6.第二个方面,还提供一种基于二叉树日志的cdp备份恢复系统,所述系统包括:初始化模块,用于备份初始数据并初始化;监控截获模块,用于监控并截获所有的写操作;第一判断模块,用于判断所述写操作是否是恢复写操作,若否,则执行数据备份准备模块;若是,则执行计算索引模块;数据备份准备模块,用于获取当前时间点t(n),读出数据块b上的原始数据bt(n-1),再将变化数据bt(n)写入所述数据块b,其中,所述数据块b为所述写操作覆盖数据块;异或计算模块,用于将所述原始数据bt(n-1)和所述变化数据bt(n)进行异或计算,再将计算结果加上时间戳生成校验值pt(n);元数据记录生成模块,用于根据二叉树结构日志和所述校验值pt(n),生成元数据记录mt(n);第二判断模块,用于判断所述校验值pt(n)是否为首个校验值pt(1),若否,则执行第三判断模块;若是,则重复执行所述监控截获模块至所述元数据记录生成模块;第三判断模块,用于根据所述元数据记录mt(n),获取校验值p(n-1),并判断n是否为奇数,若否,则将所述校验值pt(n)和所述校验值pt(n-1)进行异或计算,再根据计算结果依次重复执行所述元数据记录生成模块和所述第二判断模块;若是,则执行二叉树更新模块;二叉树更新模块,用于根据所述元数据记录mt(n),更新所述二叉树结构日志,再执行第四判断模块;索引计算模块,用于根据恢复时间点和更新后的二叉树结构日志,计算并索引恢复校验值,将所述恢复校验值和所述初始数据进行异或计算,计算结果为恢复数据,执行第四判断模块;第四判断模块,用于判断是否存在写操作,若否,则结束;若是,则重复执行所述监控截获模块。
7.第三个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述基于连续写入的cdp备份方法。
8.本发明的有益效果是:(1)本发明不使用快照,使用校验值以校验日志方式保存数据差异,节省了存储空间;(2)本发明通过使用异或计算实现数据备份,方法简单且易于实现;(3)本发明不直接存储数据变化,而是存储计算过后的数据差异,保证了数据的机密性;(4)本发明使用异或计算实现,大大提高了数据的压缩比,为降低存储空间开销提供基础;(5)本发明不使用校验日志链,而是将校验值进行多次的异或计算并使用二叉树结构存储,提供容错能力,避免潜在的校验日志链崩溃的问题,提高了校验日志的可靠性,保证了数据的可用性;(6)本发明将校验值进行多次可逆的逻辑计算,并以二叉树的结构存储不增加额外的存储空间,进行数据恢复时只需要解析极少量的校验值,数据恢复速率明显提升,优化了恢复过程;(7)本发明基于二叉树结构的校验日志,支持校验日志动态的插入、删除和查找,实现了校验日志的快速索引,提高了数据恢复速率;(8)本发明对存入二叉树日志文件的数据生成元数据记录,用于校验日志的索引和二叉树结构的构造,大大节省空间,且为数据恢复奠定了基础。
附图说明
9.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
10.图1为本发明实施例1中基于二叉树日志的cdp备份恢复方法的流程图。
11.图2为本发明实施例1中元数据记录的结构示意图。
12.图3为本发明实施例1中t(7)时刻二叉树结构日志的结构示意图。
13.图4为本发明实施例1中t(8)时刻二叉树结构日志的结构示意图。
14.图5为本发明实施例1中t(9)时刻二叉树结构日志的结构示意图。
15.图6为本发明实施例1中t(10)时刻二叉树结构日志的结构示意图。
16.图7为本发明实施例1中t(11)时刻二叉树结构日志的结构示意图。
17.图8为本发明实施例1中t(12)时刻二叉树结构日志的结构示意图。
18.图9为本发明实施例1中进行数据备份时存储空间消耗图。
19.图10为本发明实施例1中数据块大小为4kb的进行数据恢复时间消耗图。
20.图11为本发明实施例1中数据块大小为64kb的进行数据恢复时间消耗图。
21.图12为本发明实施例2中基于二叉树日志的cdp系统的结构图。
22.图13为本发明实施例2中初始化模块的结构图。
23.图14为本发明实施例2中元数据记录模块的结构图。
24.图15为本发明实施例2中二叉树更新模块的结构图。
25.图16为本发明实施例2中索引计算模块的结构图。
具体实施方式
26.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
27.术语解释:(1)初始数据:开始连续数据保护时数据块上的数据。
28.(2)原始数据:有变化数据发生时,变化数据所属数据块上的数据。
29.(3)变化数据:由写操作发生时写入的数据,用于数据恢复,是需要被保护的数据。
30.(4)数据块:对数据进行i/o操作的基本单位。
31.(5)校验日志:由进行异或计算后得到的校验值经过压缩再编码后得到。
32.(6)恢复校验值:进行数据恢复所需要的校验值,通过恢复时间点进行计算后获得。
33.(7)恢复时间点:从cdp开始进行数据备份到当前时间点之间的任意时间点。
34.实施例1在一个实施例中,如图1所示,提供了一种基于二叉树日志的cdp备份恢复方法,该方法包括:s001备份初始数据并初始化。
35.可选的,步骤s001,包括:s0101获取初始数据并进行备份;s0102创建二叉树日志文件、元数据记录文件;s0103根据所述初始数据、所述二叉树日志文件和所述元数据记录文件,构建二叉树结构日志。
36.值得说明的是,所述二叉树日志文件用于存储校验日志,校验日志由校验值经过压缩再编码后生成;元数据记录文件用于存储元数据记录,包括所述二叉树结构日志中的所有子节点和父节点的元数据记录。所述二叉树结构日志由所述初始数据、所述校验日志和所述元数据记录共同构成。
37.s002监控并截获所有的写操作。
38.s003判断所述写操作是否是恢复写操作,若否,则执行步骤s004;若是,则执行步骤s012。
39.s004获取当前时间点t(n),读出数据块b上的原始数据bt(n-1),再将变化数据bt(n)写入所述数据块b,其中,所述数据块b为所述写操作覆盖数据块。
40.为了便于理解,我们将n作为所述校验值的编号,t为所述n的函数,所述当前时间点t(n)为用户视角的时间。
41.s005将所述原始数据bt(n-1)和所述变化数据bt(n)进行异或计算,再将计算结果加上时间戳生成校验值pt(n)。
42.值得说明的是,异或计算也称为半加计算,是一种可逆的逻辑计算。如果进行异或计算的两个值不相同,则计算结果为1;如果进行异或计算的两个值相同,则计算结果为0。
同时,将校验值pt(n)进行压缩再编码后生成校验日志,校验日志只存储了计算结果中不为0的部分。
43.由于进行异或计算后存储的是数据差异,在数据传输过程中不用直接传输数据的真证内容,保证了数据的机密性。通常,一个被cdp系统保护的数据内容一天大概只有20%的数据内容发生变化,平均每个数据块发生5-10次变化,因此异或计算后得到的校验值大部分都是0,大大提高了数据的压缩比,降低了存储空间开销。
44.s006根据二叉树结构日志和所述校验值pt(n),生成元数据记录mt(n)。
45.可选的,步骤s006,包括:s0601根据所述二叉树结构日志,获取所述校验值pt(n)位于所述二叉树结构日志的高度,其中,二叉树的高度从叶子结点开始自底向上逐层累加,所述原始数据和所述变化数据进行异或计算的计算结果为所述二叉树结构日志的叶子结点,所述叶子结点的高度为0。
46.s0602根据所述校验值pt(n),获取所述校验值pt(n)的编号n,其中,所述二叉树结构日志为位于同一高度的所有节点从1开始依次进行编号,所述编号n表示,在和所述校验值pt(n)同一高度所有节点中,所述校验值pt(n)为第n个节点。
47.可以理解的是,通过由(高度,编号)组成的一个二元组,可以唯一的确定一个校验值。为了便于理解,我们都使用(高度,编号)二元组来描述一个校验值。
48.s0603根据所述二叉树结构日志和所述校验值pt(n),获取基本信息,其中,所述基本信息包括:当前时间点t(n)、写操作覆盖数据块块号、所述校验值pt(n)生成的校验日志的编号、所述校验值pt(n)生成的校验日志的高度、所述校验值pt(n)生成的校验日志位于所述二叉树日志文件上的位置偏移、所述校验值pt(n)生成的校验日志的父节点元数据记录在所述元数据记录文件上的位置偏移。
49.s0604根据所述基本信息,生成元数据记录mt(n)。
50.如图2所示,是元数据记录的结构示意图,所述元数据记录格式为:meta_record 《timestamp, block_num, seq_num, height, log_offset, father_meta_offset》其中,timestamp是变化数据产生的时间戳,block_num表示数据块块号,块号是每个数据块的唯一标识,seq_num是校验日志的编号;height是校验日志的高度;log_offset记录了校验日志位于二叉树日志文件上的位置偏移;father_meta_offset记录了校验日志的父节点的元数据记录在元数据记录文件上的位置偏移。
51.为了便于理解,具体的,提供一个操作实例:设定一个数据块的大小为4kb,在t(5)时刻在块号为9的数据块上有写操作发生,截获所述写操作写入的变化数据bt(5),读出所述块号为9的数据块上的原始数据bt(4),将bt(4)和bt(5)进行异或计算,得到校验值(0,5),将所述校验值(0,5)经过压缩再编码后得到的校验日志存入二叉树日志文件位置偏移为4096*8,此时还没有父节点产生。则所述元数据记录mt(5)为《t(5),9,5,0,4096*8,0》。
52.值得说明的是,所述元数据记录中所包含的基本信息使得仅通过一个校验值的高度和编号,不仅可以快速索引到所述校验值,还能获得其所有父节点的元数据记录和父节点的校验值。
53.s007判断所述校验值pt(n)是否为首个校验值pt(1),若否,则执行步骤s008;若
是,则重复执行所述步骤s002至所述步骤s006。
54.s008根据所述元数据记录mt(n),获取校验值p(n-1)。
55.可选的,步骤s008,包括:s0801根据所述元数据记录mt(n),获取所述校验值pt(n)的编号n;值得说明的是,一条元数据记录由时间戳、块号、编号、高度、校验值位置偏移、父节点元数据记录偏移组成。通过所述元数据记录mt(n),可以快速获取所述编号n。相较于所述步骤s0602中通过所述校验值pt(n)获取所述编号n,更加方便快捷。
56.s0802将所述编号n进行减一操作,获取编号为(n-1)的元数据记录mt(n-1);s0803根据所述元数据记录mt(n-1),获取校验值pt(n-1),其中,所述校验值pt(n-1)为所述校验值pt(n)的前一个校验值。
57.s009判断n是否为奇数,若否,则执行步骤s010;若是,则执行步骤s011。
58.可选的,步骤s009,包括:s0901根据所述编号n,判断在和所述校验值pt(n)同一高度所有节点中,所述校验值pt(n)是否是第奇数个节点;s0902若否,则执行所述步骤s010;若是,则执行步骤s011。
59.s010将所述校验值pt(n)和所述校验值pt(n-1)进行异或计算,得到校验值p(n/2),再依次重复执行所述步骤s006和所述步骤s007。
60.s011根据所述元数据记录mt(n),更新所述二叉树结构日志,再执行步骤s013;可选的,步骤s011,包括:s0111根据所述元数据记录mt(n),获取所述校验值pt(n)的编号n;s0112将所述编号n进行加一操作,判断(n+1)是否是4的倍数;s0113若否,则删除所述校验值p(n-1)和所述校验值p(n-1)的元数据记录mt(n-1),并执行步骤s013;s0114若是,将所述编号(n-1)进行减一操作,获取编号为(n-2)的元数据记录mt(n-2);s0115根据所述元数据记录mt(n-2),获取校验值pt(n-2),其中,所述校验值pt(n-2)为所述校验值pt(n-1)的前一个校验值;s0116将所述校验值pt(n-2)和所述校验值pt(n-1)进行异或计算的计算结果作为父节点;s0117将所述校验值pt(n-2)作为所述父节点的左子节点,更新所述元数据记录mt(n-2);s0118将所述校验值pt(n)作为所述父节点的右子节点,更新所述元数据记录mt(n);s0119删除所述校验值pt(n-1)和所述元数据记录mt(n-1),并执行步骤s013。
61.值得说明的是,由于二叉树是非线性结构,会增大存储开销,而通过元数据记录实现的二叉树日志记录了每个校验日志之前的关系,操作简单管理方便,且减小了额外的存储空间消耗。
62.为了便于理解所述步骤005至所述步骤011,具体的,提供5个操作实例:设定一个数据块的大小为4kb,一条元数据记录的长度为10b。分别用图3至图8来
表示5个操作实例的实现,所述5个操作实例都使用(高度,编号)二元组来描述一个校验值,其中,p1为一个高度为0编号为1的校验值,用(0,1)表示,由bt(0)和bt(1)异或计算获得;p3为一个高度为0编号为3的校验值,用(0,3)表示,由bt(2)和bt(3)异或计算获得;p5为一个高度为0编号为5的校验值,用(0,5)表示,由bt(4)和bt(5)异或计算获得;p7为一个高度为0编号为7的校验值,用(0,7)表示,由bt(6)和bt(7)异或计算获得;p8为一个高度为0编号为8的校验值,用(0,8)表示,由bt(7)和bt(8)异或计算获得;p9为一个高度为0编号为9的校验值,用(0,9)表示,由bt(8)和bt(9)异或计算获得;p10为一个高度为0编号为10的校验值,用(0,10)表示,由bt(9)和bt(10)异或计算获得;p11为一个高度为0编号为11的校验值,用(0,11)表示,由bt(10)和bt(11)异或计算获得;q1为一个高度为1编号为1的校验值,用(1,1)表示,由bt(0)和bt(2)异或计算获得;q3为一个高度为1编号为3的校验值,用(1,3)表示,由bt(4)和bt(6)异或计算获得;q4为一个高度为1编号为4的校验值,用(1,4)表示,由bt(6)和bt(8)异或计算获得;q5为一个高度为1编号为5的校验值,用(1,5)表示,由bt(8)和bt(10)异或计算获得;q6为一个高度为1编号为6的校验值,用(1,6)表示,由bt(10)和bt(12)异或计算获得;r1为一个高度为2编号为1的校验值,用(2,1)表示,由bt(0)和bt(4)异或计算获得;r2为一个高度为2编号为2的校验值,用(2,2)表示,由bt(4)和bt(8)异或计算获得;r3为一个高度为2编号为3的校验值,用(2,3)表示,由bt(8)和bt(12)异或计算获得;j1为一个高度为3编号为1的校验值,用(3,1)表示,由bt(0)和bt(8)异或计算获得;如图3所示为在块号为9的数据块上有变化数据bt(7)发生后的二叉树结构日志,图中包含了初始数据bt(0)、所述变化数据bt(7)、多个校验值和校验值的异或计算过程,用虚线和箭头描述了每个校验值产生和存储的顺序。此时,所述二叉树结构日志存在校验值(0,1), (0,3), (0,5), (0,7), (1,1), (1,3), (2,1)。
63.在t(8)时刻在块号为9的数据块上有变化数据bt(8)发生。将所述变化数据bt(7)和所述变化数据bt(8)进行异或计算加上时间戳得到校验值(0,8)并生成元数据记录《t(8),9,8,0,4096*12,0》。
64.所述校验值(0,8)的编号为偶数,获取校验值(0,7)和所述校验值(0,8)进行异或计算得到校验值(1,4)并生成元数据记录《t(8),9,4,1,4096*13,0》。所述校验值(1,4)的编号为偶数,获取校验值(1,3)和所述校验值(1,4)进行异或计算得到校验值(2,2)并生成元数据记录《t(8),9,2,2,4096*14,0 》。所述校验值(2,2)的编号为偶数,获取校验值(2,1)和所述校验值(2,2)进行异或计算得到校验值(3,1)并生成元数据记录《t(8),9,1,3,4096*15,0》。所述校验值(3,1)为高度为3的校验值中的第一个校验值,则结束。
65.如图4所示为所述变化数据bt(8)发生后的二叉树结构日志,图中包含了初始数据bt(0)、所述变化数据bt(8)、多个校验值和校验值的异或计算过程,用虚线和箭头描述了每个校验值产生和存储的顺序。此时,所述二叉树结构日志存在校验值(0,1), (0,3), (0,5), (0,7), (0,8), (1,1), (1,3), (1,4), (2,1), (2,2), (3,1)。
66.在t(9)时刻在块号为9的数据块上有变化数据bt(9)发生。将所述变化数据bt(8)和所述变化数据bt(9)进行异或计算加上时间戳得到校验值(0,9)并生成元数据记录《t(9),9,9,0,4096*16,0》。
67.所述校验值(0,9)的编号为奇数,编号9加1不是4的倍数,删除所述校验值(0,8)和所述元数据记录《 t(8),9,8,0,4096*12,0》,则结束。
68.如图5所示为所述变化数据bt(9)发生后的二叉树结构日志,图中包含了初始数据bt(0)、所述变化数据bt(9)、多个校验值和校验值的异或计算过程,用箭头描述了每个校验值产生的顺序。此时,所述二叉树结构日志存在校验值(0,1), (0,3), (0,5), (0,7), (0,9), (1,1), (1,3), (1,4), (2,1), (2,2), (3,1)。
69.在t(10)时刻在块号为9的数据块上有变化数据bt(10)发生。将所述变化数据bt(9)和所述变化数据bt(10)进行异或计算加上时间戳得到校验值(0,10)并生成元数据记录《t(10),9,10,0,4096*17,0》。
70.所述校验值(0,10)的编号为偶数,获取校验值(0,9)和所述校验值(0,10)进行异或计算得到校验值(1,5)并生成元数据记录《 t(10),9,5,1,4096*18,0》。所述校验值(1,5)的编号为奇数,编号5加1不是4的整数倍,删除所述校验值(1,4)和所述元数据记录《 t(8),9,4,1,4096*13,0》,则结束。
71.如图6所示为所述变化数据bt(10)发生后的二叉树结构日志,图中包含了初始数据bt(0)、所述变化数据bt(10)、多个校验值和校验值的异或计算过程,用虚线和箭头描述了每个校验值产生和存储的顺序。此时,所述二叉树结构日志存在校验值(0,1), (0,3), (0,5), (0,7), (0,9), (0,10), (1,1), (1,3), (1,5), (2,1), (2,2), (3,1)。
72.在t(11)时刻在块号为9的数据块上有变化数据bt(11)发生。将所述变化数据bt(10)和所述变化数据bt(11)进行异或计算加上时间戳得到校验值(0,11)并生成元数据记录《t(11),9,11,0,4096*19,0》。
73.所述校验值(0,11)的编号为奇数,编号11加1是4的整数倍,所述校验值(1,5)为父节点,所述校验值(0,9)为左子节点,更新所述校验值(0,9)的元数据记录为《 t(9),9,9,0,4096*16,10*18》,所述校验值(0,11)为右子节点,更新所述校验值(0,11)的元数据记录为《 t(11),9,11,0,4096*19,10*18》。删除所述校验值(0,10)和所述元数据记录《 t(10),9,10,0,4096*17,0》,则结束。
74.如图7所示为所述变化数据bt(11)发生后的二叉树结构日志,图中包含了初始数据bt(0)、所述变化数据bt(11)、多个校验值和校验值的异或计算过程,用虚线和箭头描述了每个校验值产生和存储的顺序。此时,所述二叉树结构日志存在校验值(0,1), (0,3), (0,5), (0,7), (0,9), (0,11), (1,1), (1,3), (1,5), (2,1), (2,2), (3,1)。
75.在t(12)时刻在块号为9的数据块上有变化数据bt(12)发生。将所述变化数据bt(11)和所述变化数据bt(12)进行异或计算加上时间戳得到校验值(0,12)并生成元数据记录《 t(12),9,12,0,4096*20,0》。
76.所述校验值(0,12)的编号为偶数,获取校验值(0,11)和所述校验值(0,12)进行异或计算得到校验值(1,6)并生成元数据记录《 t(12),9,6,1,4096*21,0》。所述校验值(1,6)的编号为偶数,获取校验值(1,5)和所述校验值(1,6)进行异或计算得到校验值(2,3)并生成元数据记录《 t(12),9,3,2,4096*22,0》。所述校验值(2,3)的编号为奇数,编号3加1是4的整数倍,所述校验值(3,1)为父节点,所述校验值(2,1)为左子节点,更新所述校验值(2,1)的元数据记录为《 t(4),9,1,2,4096*7,10*15》,所述校验值(2,3)为右子节点,更新所述校验值(2,3)的元数据记录为《 t(12),9,3,2,4096*22,10*15》。删除所述校验值(2,2)和所述元数据记录《 t(8),9,2,2,4096*14,0》,则结束。
77.如图8所示为所述变化数据bt(12)发生后的二叉树结构日志,图中包含了初始数
据bt(0)、所述变化数据bt(12)、多个校验值和校验值的异或计算过程,用虚线和箭头描述了每个校验值产生和存储的顺序。此时,所述二叉树结构日志存在校验值(0,1), (0,3), (0,5), (0,7), (0,9), (0,11), (0,12),(1,1), (1,3), (1,5), (1,6), (2,1), (2,3), (3,1)。
78.s012根据恢复时间点和更新后的二叉树结构日志,计算并索引恢复校验值,将所述恢复校验值和所述初始数据进行异或计算,计算结果为恢复数据,执行步骤s013;可选的,步骤s012,包括:s0121获取恢复时间点t(m),创建在所述恢复时间点t(m)的恢复数据;s0122根据所述恢复时间点t(m)和所述更新后的二叉树结构日志,判断高度为0且编号为m的校验值p(m)是否存在,若否,取恢复编号r的值为(m+1);若是,取恢复编号r的值为m;可以理解的是,二叉树日志文件只存储了编号为奇数的校验值,因为仅通过所述编号为奇数的校验值即可完成数据恢复,节省了一半的存储空间。
79.s0123根据取值后的恢复编号r,获取元数据记录mt(r);s0124根据元数据记录mt(r),获取校验值pt(r)和所述校验值pt(r)的父节点元数据记录,其中,所述父节点元数据记录的高度为所述校验值pt(r)的高度加1;s0125根据所述校验值pt(r)的父节点元数据记录,判断所述校验值pt(r)的父节点校验值是否存在父节点,若否,则结束此步骤;若是,则重复所述步骤s0124,直到获取全部所述校验值pt(r)的父节点元数据记录;需要理解的是,恢复过程仅需要部分所述校验值pt(r)的父节点校验值,但元数据记录中记录了父节点元数据记录偏移位置,通过重复获取校验值的父节点可快速索引到恢复校验值。
80.s0126根据编号m,计算恢复校验值;值得说明的是,恢复校验值的计算基于二叉树结构日志。首先获取所述编号m整除于2n中的最大正整数n,校验值(n, m/2n)是恢复校验值。此时,若所述编号m等于2n,则所述恢复校验值计算结束;若所述编号m不等于2n,则取所述编号m的值为(m-2n),重复所诉最大正整数n的计算步骤直到结束。
81.s0127根据所述元数据记录mt(r)和全部所述校验值pt(r)的父节点元数据记录,快速索引到所述恢复校验值;s0127将所述恢复校验值和所述初始数据进行异或计算,得到恢复数据;s0128执行步骤s013。
82.为了便于理解,具体的,提供1个操作实例:获取恢复时间点为t(20),获取初始数据bt(0),创建恢复数据bt(20)各比特为0。由于二叉树结构日志中不存在校验值(0,20),因此取恢复编号为21。获取校验值(0,21)和所述校验值(0,21)的元数据记录,所述校验值(0,21)由bt(21)和bt(20)进行异或计算获得。根据所述校验值(0,21)的元数据记录可以快速索引到全部所述校验值(0,21)的父节点校验值(1,11), (2,5), (3,3), (4,1)。
83.计算编号20能整除于2n中的最大正整数n为2,校验值(2,5)是恢复校验值。编号20不等于22,则取编号16,计算编号16能整除于2n中的最大正整数n为4,校验值(4,1)是恢复校
验值。编号16等于24,则所有的恢复校验值已找到,为校验值(2,5),(4,1)。所述校验值(2,5)由bt(20)和bt(16)进行异或计算获得,所述校验值(4,1)由bt(16)和bt(0)进行异或计算获得。因此将所述初始数据bt(0)和所有恢复校验值进行异或计算,计算结果为bt(20),恢复数据得到。
84.为了便于理解,具体的,还提供1个操作实例:获取恢复时间点为t(31),获取初始数据bt(0),创建恢复数据bt(31)各位为0。由于二叉树结构日志中存在校验值(0,31),因此取恢复编号为31。获取校验值(0,31)和所述校验值(0,31)的元数据记录,所述校验值(0,31)由bt(31)和bt(30)进行异或计算获得。根据所述校验值(0,31)的元数据记录可以快速索引到全部所述校验值(0,31)的父节点校验值(1,15), (2,7), (3,3), (4,1)。
85.计算编号31能整除于2n中的最大正整数n为0,校验值(0,31)是恢复校验值。编号31不等于20,则取编号30,计算编号30能整除于2n中的最大正整数n为1,校验值(1,15)是恢复校验值。编号30不等于21,则取编号28,计算编号28能整除于2n中的最大正整数n为2,校验值(2,7)是恢复校验值。编号28不等于22,则取编号24,计算编号24能整除于2n中的最大正整数n为3,校验值(3,3)是恢复校验值。编号24不等于23,则取编号16,计算编号16能整除于2n中的最大正整数n为4,校验值(4,1)是恢复校验值。编号16等于24,则所有的恢复校验值已找到,为校验值(1,15), (2,7), (3,3), (4,1)。所述校验值(0,31)由bt(31)和bt(30)进行异或计算获得,所述校验值(1,15)由bt(30)和bt(28)进行异或计算获得,所述校验值(2,7)由bt(28)和bt(24)进行异或计算获得,所述校验值(3,3)由bt(24)和bt(16)进行异或计算获得,所述校验值(4,1)由bt(16)和bt(0)进行异或计算获。因此将所述初始数据bt(0)和所有恢复校验值进行异或计算,计算结果为bt(31),恢复数据得到。
86.s013判断是否存在写操作,若否,则结束;若是,则重复执行所述步骤s002。
87.下面,我们提供一组对比实验,以便于进一步阐述本实施例,具体如下:所有实验均在虚拟化环境下开启的虚拟机上进行,实验环境搭建在带宽为1000mbps的局域网中。实验客户端使用的主机采用的处理器为intel(r) core(tm) i5-7360u cpu @ 2.30ghz,操作系统为linux version 3.10.0-1160.el7.x86_64,内存为8gb,存储空间为256gb。实验的服务器端使用的主机采用的处理器为ntel(r) xeon(r) cpu e5-678 v3 @ 2.50ghz,操作系统为linux version 3.10.0-1160.el7.x86_64,内存为32gb,存储空间为4tb。本实验基于tpc-c基准测试程序,模拟了在真实应用环境下对数据库的读、写操作,通过这些操作来测试存储空间开销和数据恢复速率。主机使用内嵌了tpc-c测试脚本的benchmarksql开源数据库测试工具,benchmarksql的版本为5.1。在系统中安装postgresql数据库,版本为9.3。
88.在该实验中,benchmarksql模拟了10个货物仓库,每个仓库对应100mb数据,设置10个终端,每个终端运行10个事务,整体运行100个事务。实验分别设定了4k、8k、16k、32k和64k五种大小不同的数据块,测试对象为:本实施例1,对比例1,对比例2,对比例3,其中,对比例1为使用了校验日志链trap技术的cdp,对比例2为在使用了校验日志链中周期性插入快照的st-cdp技术的cdp,对比例3为直接存储数据变化的cdpfgl。
89.由于异或计算和压缩再编码造成了系统的额外计算开销,首先对实施例1中进行异或计算和压缩再编码的时间进行计算,计算结果如表1所示。
90.表1 额外计算消耗时间由表1可得,异或计算和压缩再编码都只需要几十到几百微秒的时间,相较于写操作的捕获写入和读出的时间,异或计算和压缩再编码所额外消耗的时间可以忽略不计。
91.实验每次都在相同的tpc-c基准测试环境中运行三个小时,完成cdp备份,实验结果如表2和图9所示。
92.表2 备份消耗存储空间对比实施例1、对比例1、对比例2和对比例3的实验结果,结合表2和图9可知,实施例1、对比例1和对比例2对于不同大小的数据块,备份消耗的存储空间大小差别不大。而对比例3,随着数据块大小的增大消耗的存储空间几乎呈2倍增长,由此可见基于校验日志的cdp备份方法能大大节省存储空间,且能灵活应对任意大小的数据块。对比相同大小的数据块所消耗的存储空间,实施例1和对比例1差别不大,对比例2大约为实施例1的1.4倍,对比例3为实施例1的2.2倍到11倍,由此可见实施例1能减少数据备份空间开销。
93.实验再基于4kb和64kb大小的数据块,以30分钟为时间间隔,分别选取距离最新时间点为30、60、90、120、150和180分钟的时间点为恢复时间点,完成数据恢复,实验结果如表3、图10和图11所示。
94.表3 恢复消耗时间
对比实施例1、对比例、对比例2和对比例3的实验结果,结合表3比较不同大小数据块的恢复时间,64kb大小的数据块性能都优于4kb大小的数据块,说明数据块大小越大,恢复速率越快。结合表3、图10 和图11 可知,随着恢复时间点距离最新时间的变长,对比例1和对比例3恢复时间都大大增加,而实施例1和对比例2变化不大,恢复时间都稳定在200s到300s之间。对比相同大小的数据块所消耗的恢复时间,对比例1是实施例1的6到11倍,对比例3是实施例1的1.3倍到7倍,由此可见实施例1能提高数据恢复的速率。
95.由表2和图9可知对比例1消耗存储空间略小于实施例1,但实施例1的恢复性能远优于对比例1,整体性能更好。实施例1和对比例2有着差不多的恢复性能,但实施例1空间消耗大约占对比例2的70%,能节省更多存储空间。同时,本施例1对于不同大小的数据块进行数据恢复所消耗的恢复时间基本相同,具有更好的稳定性。
96.本实施例的技术方案,提出了一种基于二叉树日志的cdp备份恢复方法,通过异或计算得到校验值后加上时间戳并生成校验日志存储数据变化,提高数据压缩比降低存储空间开销。该方法不需要备份所有校验日志,通过使用元数据记录以二叉树结构构造校验日志之间的关系,可快速索引校验值进行数据恢复,实现了最大化利用存储空间,最快化恢复校验块索引,最小化恢复时间消耗。
97.实施例2在一个实施例中,如图12所示,提供了一种基于二叉树日志的cdp备份恢复系统,该系统包括:初始化模块1001,用于备份初始数据并初始化;监控截获模块1002,用于监控并截获所有的写操作;第一判断模块1003,用于判断所述写操作是否是恢复写操作,若否,则执行数据备份准备模块1004;若是,则执行计算索引模块1010;数据备份准备模块1004,用于获取当前时间点t(n),读出数据块b上的原始数据bt(n-1),再将变化数据bt(n)写入所述数据块b,其中,所述数据块b为所述写操作覆盖数据块;异或计算模块1005,用于将所述原始数据bt(n-1)和所述变化数据bt(n)进行异或计算,再将计算结果加上时间戳生成校验值pt(n);元数据记录生成模块1006,用于根据二叉树结构日志和所述校验值pt(n),生成元数据记录mt(n);
第二判断模块1007,用于判断所述校验值pt(n)是否为首个校验值pt(1),若否,则执行第三判断模块1008;若是,则重复执行所述监控截获模块1002至所述元数据记录生成模块1006;第三判断模块1008,用于根据所述元数据记录mt(n),获取校验值p(n-1),并判断n是否为奇数,若否,则将所述校验值pt(n)和所述校验值pt(n-1)进行异或计算,再根据计算结果依次重复执行所述元数据记录生成模块1006和所述第二判断模块1007;若是,则执行二叉树更新模块1009;二叉树更新模块1009,用于获取校验值pt(n-2),将所述校验值pt(n-1)和所述校验值pt(n-2)进行异或计算的结果作为父节点,更新所述二叉树结构日志,再执行第四判断模块1011;索引计算模块1010,用于根据恢复时间点和更新后的二叉树结构日志,计算并索引恢复校验值,将所述恢复校验值和所述初始数据进行异或计算,计算结果为恢复数据,执行第四判断模块1011;第四判断模块1011,用于判断是否存在写操作,若否,则结束;若是,则重复执行所述监控截获模块1002。
98.可选的,如图13所示,在本实施例的基础上,所述初始化模块1001,包括:备份初始化单元10011,用于获取初始数据并进行备份;创建初始化单元10012,用于创建二叉树日志文件、元数据记录文件;二叉树结构日志构建单元10013,用于根据所述初始数据、所述二叉树日志文件和所述元数据记录文件,构建二叉树结构日志。
99.可选的,如图14所示,在本实施例的基础上,所述元数据记录生成模块1006,包括:高度获取单元10061,用于根据所述二叉树结构日志,获取所述校验值pt(n)位于所述二叉树结构日志的高度,其中,二叉树的高度从叶子结点开始自底向上逐层累加,所述原始数据和所述变化数据进行异或计算的计算结果为所述二叉树结构日子的叶子结点,所述叶子结点的高度为0;第一编号获取单元10062,用于根据所述校验值pt(n),获取所述校验值pt(n)的编号n,其中,所述二叉树结构日志为位于同一高度的所有节点从1开始依次进行编号,所述编号n表示,在和所述校验值pt(n)同一高度所有节点中,所述校验值pt(n)为第n个节点;基本信息获取单元10063,用于根据所述二叉树结构日志和所述校验值pt(n),获取基本信息,其中,所述基本信息包括:当前时间点t(n)、写操作覆盖数据块块号、校验值pt(n)的编号、校验值pt(n)的高度、校验值pt(n)位于所述二叉树日志文件上的位置偏移、校验值pt(n)的父节点元数据记录在所述元数据记录文件上的位置偏移;校验值元数据记录生成单元10064,用于根据所述基本信息,生成元数据记录mt(n)。
100.可选的,如图15所示,在本实施例的基础上,所述二叉树更新模块1009,包括:第二编号获取单元10091,用于根据所述元数据记录mt(n),获取所述校验值pt(n)的编号n;编号操作判断单元10092,用于将所述编号n进行加一操作,判断(n+1)是否是4的倍数;
第一删除单元10093,用于若否,则删除所述校验值p(n-1)和所述校验值p(n-1)的元数据记录mt(n-1),并执行第四判断模块;第三编号获取单元10094,用于若是,将所述编号(n-1)进行减一操作,获取编号为(n-2)的元数据记录mt(n-2);校验值获取单元10095,用于根据所述元数据记录mt(n-2),获取校验值pt(n-2),其中,所述校验值pt(n-2)为所述校验值pt(n-1)的前一个校验值;父节点生成单元10096,用于将所述校验值pt(n-2)和所述校验值pt(n-1)进行异或计算的计算结果作为父节点;左子节点生成单元10097,用于将所述校验值pt(n-2)作为所述父节点的左子节点,更新所述元数据记录mt(n-2);右子节点生成单元10098,用于将所述校验值pt(n)作为所述父节点的右子节点,更新所述元数据记录mt(n);第二删除单元10099,用于删除所述校验值pt(n-1)和所述元数据记录mt(n-1),并执行第四判断模块。
101.可选的,如图16所示,在本实施例的基础上,所述索引计算模块1010,包括:恢复初始化单元10101,用于获取恢复时间点t(m),创建在所述恢复时间点t(m)的恢复数据;恢复编号获取单元10102,用于根据所述恢复时间点t(m)和所述更新后的二叉树结构日志,判断高度为0且编号为m的校验值p(m)是否存在,若否,取恢复编号r的值为(m+1);若是,取恢复编号r的值为m;元数据记录获取单元10103,用于根据取值后的恢复编号r,获取元数据记录mt(r);第一父节点获取单元10104,用于根据元数据记录mt(r),获取校验值pt(r)和所述校验值pt(r)的父节点元数据记录,其中,所述父节点元数据记录的高度为所述校验值pt(r)的高度加1;第二父节点获取单元10105,用于根据所述校验值pt(r)的父节点元数据记录,判断所述校验值pt(r)的父节点校验值是否存在父节点,若否,则结束此单元;若是,则重复上一单元,直到获取全部所述校验值pt(r)的父节点元数据记录;校验值计算单元10106,用于根据编号m,计算恢复校验值;校验值索引单元10107,用于根据获取到的所述元数据记录mt(r)和全部所述校验值pt(r)的父节点元数据记录,快速索引到所述恢复校验值;恢复数据计算单元10108,用于将所述恢复校验值和所述初始数据进行异或计算,得到所述恢复数据;执行单元10109,用于执行第四判断模块。
102.本实施例的技术方案,提出了一种基于二叉树日志的cdp备份恢复系统,通过以二叉树结构构造校验日志的方法,解决了cdp系统随着时间增长备份数据数量增多,导致存储空间消耗过大且恢复效率低的问题。该系统不直接存储数据内容而是存储异或计算后的校验值,为数据提供了机密性保护;不使用日志链而使用二叉树结构日志,为数据恢复提供了容错能力,避免了日志链崩溃的问题,为数据提供了完整性和可用性保护。
103.实施例3在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例1的基于二叉树日志的cdp备份恢复方法。
104.本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
105.以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1