一种数据备份装置、存储方法及还原方法与流程

文档序号:23753974发布日期:2021-01-29 14:55阅读:125来源:国知局

[0001]
本发明涉及数据存储技术和数据处理技术研究领域,具体涉及一种数据备份装置、存储方法及还原方法。


背景技术:

[0002]
随着信息时代的来临,数据安全越来越受到人们的重视,其中,及时的数据备份是保证数据安全的一种有效手段。在实现本发明过程中,发明人发现现有技术中至少存在如下问题:通常采用定时备份,每天对前一天的数据进行一次备份,采用顺序存储的方式备份各个文件,需要读取前一个文件的数据并完成前一个文件数据的备份后再对下一个文件进行备份;现有的备份方法只能备份前一天的数据,并且顺序存储的备份方式效率低下而且空间占用也比较高。


技术实现要素:

[0003]
为了克服现有技术的不足,本公开实施例提供了一种数据备份装置、存储方法及还原方法,可以提高数据备份的效率。技术方案如下:
[0004]
第一方面:本公开实施例提供了一种数据备份装置,该装置包括:客户端、数据接入模块、数据备份模块、存储单元、主业务服务器。
[0005]
所述数据接入模块,用于接收客户端的元数据、将元数据发送给主业务服务器、将元数据传输给数据备份模块。
[0006]
所述数据备份模块,用于接收数据接入模块传输的元数据、采用多线程的方式将元数据按批次写入到存储单元、还原指定时间范围内的元数据。所述还原指定时间范围内的元数据,具体为:采用多线程的方式从存储单元中读取需要还原的时间段的数据,将数据进行解密和解压缩后得到元数据,然后将元数据传输给数据接入模块。
[0007]
数据以数据批次的格式存储在文件中,提高了存储效率,并且批次中的数据都是压缩和加密过的,提高了备份的效率的同时也保证了数据的安全性,极大的减小了空间开销,降低了磁盘空间占用。
[0008]
优选的,所述数据接入模块,在接收客户端的元数据的同时,将元数据发送给主业务服务器、传输给数据备份模块;所述数据备份模块,在接收数据接入模块传输的元数据的同时,实时将元数据按批次写入到存储单元,达到实时备份的效果。
[0009]
优选的,数据备份模块的数据备份方法具体为:数据备份模块创建accept线程和多个write线程,accept线程负责接收数据接入模块发送的元数据,accept线程将元数据分配给多个write线程,write线程将元数据写入到对应的缓冲区,若缓冲区数据的大小超过阈值,write线程将当前缓冲区的元数据以数据批次的存储格式存储到存储单元中;接收数据的accept线程和写文件的write线程独立开来,不会造成accept线程阻塞,提高了接收数据的io性能;采用多个write线程将数据写入到文件中,提高了备份的效率。
[0010]
优选的,数据批次的存储格式具体包括:
[0011]
batch length:第1-4字节,存储数据批次的总长度。
[0012]
crc32:第5-8字节,存储整个数据批次字节的crc32值。
[0013]
attributes:第9字节,第1-3位存储压缩类型,第4-6位存储加密算法类型,第7-8位为预留。
[0014]
min timestamp:第10-17字节,存储当前批次的元数据中的最小时间戳。
[0015]
max timestamp:第18-25字节,存储当前批次的元数据中的最大时间戳。
[0016]
batch-storedata:可变长度,存储当前批次的所有数据压缩和加密后的字节。
[0017]
进一步的,数据批次中每条数据的存储格式,具体包括:
[0018]
timestamp:第1-8字节,存储元数据对应的时间戳。
[0019]
data length:第9-12字节,存储元数据字节的长度。
[0020]
data:可变长度,起始地址为第13字节,长度为data length,存储元数据的字节。
[0021]
第二方面,本公开实施例提供了一种数据存储方法,该方法包括
[0022]
根据所有可能的实现方式中任一项所述的一种数据备份装置,对于每个批次的元数据,将批次中元数据的最小时间戳min timestamp存放在数据批次的10-17字节,最大时间戳max timestamp存放在18-25字节。
[0023]
依次对数据批次中的每条元数据进行处理,将元数据的时间戳存放在数据的1-8字节,将元数据的长度存放在数据的9-12字节,将元数据的字节追加到上一条元数据的末尾;得到原始数据字节。
[0024]
对原始数据字节进行压缩,并将attributes的1-3位设置为对应的压缩类型,然后对压缩后的字节进行加密,将attributes的4-6位设置为加密算法类型。
[0025]
将压缩加密后的数据字节填充到数据批次的batch-storedata,计算数据批次总长度batch length,batch length=25+压缩加密后的数据字节长度,并将数据批次的1-4字节置设置为batch length。
[0026]
计算整个数据批次字节的crc32值,并将crc32值存放在数据批次的5-8字节。
[0027]
生成数据批次的字节。
[0028]
优选的,将数据批次的字节通过顺序io的方式写入到存储单元中相应备份文件的末尾;采用操作系统中的顺序io的方式进行存储和读取数据,极大得提高了io性能。
[0029]
第三方面,本公开实施例提供了一种数据还原方法,该方法包括:
[0030]
设置需要还原的数据时间范围t
1-t2。
[0031]
数据备份模块创建多个read线程,每个read线程负责从存储单元中读取一个备份文件。
[0032]
read线程采用顺序读取方式从备份文件读取数据。
[0033]
读取备份文件中一个数据批次的数据:读取第1-4字节得到当前批次的总长度batch length。
[0034]
读取第10-17字节得到当前批次的min timestamp,读取18-25字节得到max timestamp,根据min timestamp和max timestamp判断当前批次是否包含t
1-t2时间段内的数据,若否,跳过当前批次的batch length长度的字节,读取下一个数据批次的数据,若是,进入下一步。
[0035]
读取第5-8字节得到当前批次的crc32值为c1,然后计算当前批次的字节的crc32
为c2,比较c1是否等于c2,若否,跳过当前批次的batch length长度的字节,读取下一个数据批次的数据,若是,进入下一步。
[0036]
读取第26至batch length字节得到批次中的batch-storedata。
[0037]
读取数据批次中的第9字节得到attributes,attributes中的第1-3位即位压缩类型,第4-6位为加密算法类型,根据压缩类型和加密算法类型对batch-storedata字节进行解密和解压缩得到原始数据字节batch-origindata。
[0038]
读取该数据批次中的每条数据,得到元数据的字节,将元数据发送给数据接入模块。
[0039]
依次读取备份文件中数据批次的数据,直到所有数据批次读取结束。
[0040]
优选的,所述读取该数据批次中的每条数据,得到元数据的字节,将元数据发送给数据接入模块,具体为:
[0041]
读取该数据批次中的一条数据,读取当前这条数据的第1-8字节得到元数据的时间戳timestamp,读取第9-12字节得到元数据的长度data length,当前这条数据所占空间长度len=data length+12。
[0042]
判断timestamp是否在t
1-t2时间段内,若否,跳过当前len个字节,直接读取下一条数据,若是,进入下一步。
[0043]
读取当前原始数据字节的第13-len字节(从第13字节到第len字节)得到元数据的字节,将元数据发送给数据接入模块。
[0044]
依次读取该数据批次中的数据,直到当前批次的数据读取完毕。
[0045]
还原指定时间的数据时,利用数据批次存储格式的特点,不需要读取所有的数据批次字节就能找到需要备份的数据,极大的缩短还原数据的耗时,还原数据时采用了多个read线程来同时读取多个文件,提高了还原的效率。
[0046]
与现有技术相比,上述技术方案中的一个技术方案具有如下有益效果:
[0047]
通过以数据批次的格式存储在文件中,并且批次中的数据都是压缩和加密过的,不仅提高了存储效率,也保证了数据的安全性,同时极大的减小了空间开销;通过接收数据的accept线程和写文件的write线程独立开来,不会造成accept线程阻塞,提高了接收数据的io性能,通过采用多个write线程将数据写入到文件中,提高了备份的效率。
附图说明
[0048]
图1为本公开实施例提供的一种数据备份装置示意图。
[0049]
图2为本公开实施例提供的一种数据备份模块的数据备份方法流程图。
[0050]
图3为本公开实施例提供的一种数据批次的存储格式示意图。
[0051]
图4为本公开实施例提供的一种数据批次中每条数据的存储格式示意图。
[0052]
图5为本公开实施例提供的一种数据存储方法流程图。
[0053]
图6为本公开实施例提供的一种数据还原方法流程图。
具体实施方式
[0054]
为了阐明本发明的技术方案和工作原理,下面将结合附图对本公开实施方式做进一步的详细描述。
[0055]
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
[0056]
本申请的说明书和权利要求书及上述附图中的术语“步骤1”、“步骤2”、“步骤3”等类似描述(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里描述的那些以外的顺序实施。
[0057]
第一方面:本公开实施例提供了一种数据备份装置:
[0058]
附图1为本公开实施例提供的一种数据备份装置示意图,结合该图,该装置包括:客户端、数据接入模块、数据备份模块、存储单元、主业务服务器。
[0059]
所述数据接入模块,用于接收客户端的元数据、将元数据发送给主业务服务器、将元数据传输给数据备份模块。
[0060]
所述数据备份模块,用于接收数据接入模块传输的元数据、采用多线程的方式将元数据按批次写入到存储单元、还原指定时间范围内的元数据。所述还原指定时间范围内的元数据,具体为:采用多线程的方式从存储单元中读取需要还原的时间段的数据,将数据进行解密和解压缩后得到元数据,然后将元数据传输给数据接入模块。
[0061]
优选的,所述数据接入模块,在接收客户端的元数据的同时,将元数据发送给主业务服务器、传输给数据备份模块;所述数据备份模块,在接收数据接入模块传输的元数据的同时,实时将元数据按批次写入到存储单元,达到实时备份的效果。数据以数据批次的格式存储在文件中,提高了存储效率,并且批次中的数据都是压缩和加密过的,提高了备份的效率的同时也保证了数据的安全性,极大的减小了空间开销,降低了磁盘空间占用。
[0062]
优选的,数据备份模块的数据备份方法如附图2所示,具体为:数据备份模块创建accept线程和多个write线程,accept线程负责接收数据接入模块发送的元数据,accept线程将元数据分配给多个write线程,write线程将元数据写入到对应的缓冲区,若缓冲区数据的大小超过阈值,write线程将当前缓冲区的元数据以数据批次的存储格式存储到存储单元中。接收数据的accept线程和写文件的write线程独立开来,不会造成accept线程阻塞,提高了接收数据的io性能;采用多个write线程将数据写入到文件中,提高了备份的效率。
[0063]
优选的,数据批次的存储格式,如附图3所示,具体包括:
[0064]
batch length:第1-4字节,存储数据批次的总长度。
[0065]
crc32:第5-8字节,存储整个数据批次字节的crc32值。
[0066]
attributes:第9字节,第1-3位存储压缩类型,第4-6位存储加密算法类型,第7-8位为预留。
[0067]
min timestamp:第10-17字节,存储当前批次的元数据中的最小时间戳。
[0068]
max timestamp:第18-25字节,存储当前批次的元数据中的最大时间戳。
[0069]
batch-storedata:可变长度,存储当前批次的所有数据压缩和加密后的字节。
[0070]
进一步的,数据批次中每条数据的存储格式,如附图4所示,具体包括:
[0071]
timestamp:第1-8字节,存储元数据对应的时间戳。
[0072]
data length:第9-12字节,存储元数据字节的长度。
[0073]
data:可变长度,起始地址为第13字节,长度为data length,存储元数据的字节。
[0074]
第二方面,本公开实施例提供了一种数据存储方法,该方法包括
[0075]
对于每个批次的元数据,将批次中元数据的最小时间戳min timestamp存放在数据批次的10-17字节,最大时间戳max timestamp存放在18-25字节。
[0076]
依次对数据批次中的每条元数据进行处理,将元数据的时间戳存放在数据的1-8字节,将元数据的长度存放在数据的9-12字节,将元数据的字节追加到上一条元数据的末尾;得到原始数据字节。
[0077]
对原始数据字节进行压缩,并将attributes的1-3位设置为对应的压缩类型,然后对压缩后的字节进行加密,将attributes的4-6位设置为加密算法类型。
[0078]
将压缩加密后的数据字节填充到数据批次的batch-storedata,计算数据批次总长度batch length=25+压缩加密后的数据字节长度,并将数据批次的1-4字节置设置为batch length。
[0079]
计算整个数据批次字节的crc32值,并将crc32值存放在数据批次的5-8字节。
[0080]
生成数据批次的字节。
[0081]
优选的,将数据批次的字节通过顺序io的方式写入到存储单元中相应备份文件的末尾;采用操作系统中的顺序io的方式进行存储和读取数据,极大得提高了io性能。
[0082]
第三方面,本公开实施例提供了一种数据还原方法,根据所有可能的实现方式中任一项所述的一种数据备份装置,如附图6所示,该方法包括:
[0083]
步骤1,设置还原的数据时间范围t
1-t2。
[0084]
步骤2,数据备份模块创建多个read线程,每个read线程负责从存储单元中读取一个备份文件。
[0085]
步骤3,read线程采用顺序读取方式从备份文件读取数据。
[0086]
步骤4,读取第1-4字节得到当前批次的总长度batch length。
[0087]
步骤5,读取第10-17字节得到当前批次的min timestamp,读取18-25字节得到max timestamp。
[0088]
步骤6,根据min timestamp和max timestamp判断当前批次是否包含t
1-t2时间段内的数据,若满足条件,执行步骤8,不满足执行步骤7。
[0089]
步骤7,跳过当前批次的batch length长度的字节,读取下一个批次数据,执行步骤4。
[0090]
步骤8,读取第5-8字节得到当前批次的crc32值为c1,然后计算当前批次的字节的crc32为c2。
[0091]
步骤9,比较c1是否等于c2,若满足条件执行步骤10,不满足执行步骤7。
[0092]
步骤10,计算当前批次中的数据长度n=batch length-25,读取第26至25+n字节得到批次中的数据字节。
[0093]
步骤11,读取数据批次中的第9字节得到attributes,attributes中的第1-3位即位压缩类型,第4-6位为加密算法类型,根据压缩类型和加密算法类型对“batch-storedata”字节进行解密和解压缩得到原始数据字节batch-origindata。
[0094]
步骤12,逐条读取该数据批次中的每条数据,读取当前这条数据的第1-8字节得到元数据的时间戳timestamp,读取第9-12字节得到元数据的长度data length,当前这条数据所占空间长度len=data length+12。
[0095]
步骤13,判断timestamp是否在t
1-t2时间段内,满足条件执行步骤15,不满足执行步骤14。
[0096]
步骤14,跳过当前len个字节,直接读取下条数据,执行步骤12。
[0097]
步骤15,读取当前原始数据字节的第13-len字节得到元数据的字节,将元数据发送给数据接入模块。
[0098]
步骤16,判断当前批次数据是否读取完毕,若是,执行步骤17,若否执行步骤12。
[0099]
判断当前文件数据是否读取结束,若否,执行步骤4。
[0100]
还原指定时间的数据时,利用数据批次存储格式的特点,不需要读取所有的数据批次字节就能找到需要备份的数据,极大的缩短还原数据的耗时,还原数据时采用了多个read线程来同时读取多个文件,提高了还原的效率。
[0101]
以上结合附图对本发明进行了示例性描述,显然,本发明具体实现并不受上述方式的限制,凡是采用了本发明的方法构思和技术方案进行的各种非实质性的改进;或者未经改进、等同替换,将本发明的上述构思和技术方案直接应用于其他场合的,均在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1