一种基于索引的计算机连续数据保护方法转让专利

申请号 : CN201110373181.9

文献号 : CN102521269B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 汪东升王占业

申请人 : 清华大学

摘要 :

本发明涉及一种基于索引的计算机连续数据保护方法,属于计算机数据存储和保护技术领域。数据块元数据包括数据块标识、时间戳和存储池地址,在服务器端内存中设置两个缓冲队列、一个标识索引表,在硬盘上建立日志文件,存储池接收到数据块后进行去重处理,服务器端根据标识索引表和数据块标识将元数据存写入到其中一个缓冲队列的存储区中,若写完后存储区已满,该存储区中的元数据写入到日志文件中,并更新标识索引表,之后到来的元数据写入到另一缓冲队列的存储区中。本发明方法使用双缓冲队列缓存元数据,能够避免系统阻塞;建立标识索引表和日志文件,加快元数据的查询速度;服务器端的存储池会对数据块进行去重处理,节省了存储空间。

权利要求 :

1.一种基于索引的计算机连续数据保护方法,其特征在于,该方法包括以下步骤:

(1)定义计算机数据中的每个数据块的元数据,元数据包括数据块标识、时间戳和数据块在存储池中的地址,其中数据块标识为一个整数,客户端对数据块标识进行分配;

(2)在服务器端的内存中设置第一缓冲队列和第二缓冲队列,其中第一缓冲队列或第二缓冲队列用于存储数据块的元数据,其中第二缓冲队列或第一缓冲队列作为另一缓冲队列已满后的备用缓冲队列;第一缓冲队列和第二缓冲队列根据元数据中数据块标识的个数进行分区,用户预先设定存储区容量大小,存储区容量大小为S,同一个存储区内的元数据的数据块标识相同,按照时间戳递增的顺序对一个存储区中的元数据进行排列,按照数据块标识的大小对多个存储区从小到大的顺序进行排列;

(3)为每个数据块标识生成一个相应的日志文件,将该日志文件存储在服务器端的硬盘上;

(4)在服务器端的内存中建立一个标识索引表,该标识索引表共有四个字段,包括数据块标识、用于表示标识索引中元数据在缓冲队列中位置的标志位、与数据块标识相对应的日志文件在服务器端硬盘上的地址以及日志文件中元数据的个数,其中的标志位表示元数据在哪个缓冲队列,0为第一缓冲队列,1为第二缓冲队列;

(5)当用户对数据块的内容进行修改时,客户端在该数据块打上修改时刻的时间戳,并将修改后的数据块、数据块标识以及修改时刻的时间戳发送到服务器端;

(6)服务器端接收到上述打上时间戳的数据块,根据数据块的内容通过哈希算法计算出该数据块在计算机存储池的地址,具体过程为:根据数据块的内容,为每个数据块产生一个全局唯一的哈希值作为该数据块的存储池地址,并利用该哈希值来快速判断数据块在存储池中是否已存在,只有该数据块不存在时,才将数据块添加到存储池中去;

(7)服务器端检索上述标识索引表,得到与该数据块标识相对应的标志位,根据该标志位确定与该数据块相对应的元数据在哪个缓冲队列,再计算元数据写入到缓冲队列的存储区,计算方法为:数据块标识×存储区容量=存储区的起始位置,若写入该元数据后存储区未满,则流程结束,若写入该元数据后存储区已满,则进行步骤(8);

(8)服务器端将之后到来的具有相同数据块标识的元数据写入到另一缓冲队列中位置与原缓冲队列相对应的存储区里,检索标识索引表,得到与该数据块标识相对应的日志文件地址,根据该日志文件地址将原缓冲队列的已满存储区中的元数据写入到该日志文件中,之后该存储区清空,并更新服务器端内存中的标识索引表中元数据在缓冲队列中位置的标志位以及元数据个数,流程结束。

说明书 :

一种基于索引的计算机连续数据保护方法

技术领域

[0001] 本发明涉及一种基于索引的计算机连续数据保护方法,属于计算机数据存储和保护技术领域。

背景技术

[0002] 针对传统数据保护手段不能有效解决人为错误造成数据丢失的情况,人们提出了连续数据保护(Continuous Data Protection,CDP)的概念,即在不影响正常数据业务流程的情况下,实时记录或跟踪被保护数据的修改,并能提供某个历史时刻点的一致性数据恢复。我们将要保护的文件或数据称为保护实例。连续数据保护技术是近些年来学术界的研究热点,它一般采用客户端/服务器架构,客户端负责本地保护实例的监控和维护,用户每次对于保护实例的修改,客户端会对变化的数据打上时间戳,并向服务器端实时传输,这在逻辑上意味着向服务器端提交一个保护实例的新版本,客户端也可以根据时间戳信息,选择将存储在服务器上的任意版本传送回本地,达到数据恢复的目的。为了提供精确到时间点的恢复能力,连续数据保护系统必须具备捕捉保护实例中所有数据修改的能力,并记录数据的每一次改动。
[0003] 为了减少占用的存储空间,有些连续数据保护系统采用基于差量的方式来存储数据块的变动,系统记录下每个数据块每次的变化量,并保留最新的版本的数据。相应的,在进行恢复操作时,需要从最新版本的数据出发,通过连续的差量运算,计算出指定版本中该块的数据。基于差量的连续数据保护系统虽然能够有效的压缩存储的数据总量,但每次恢复操作时都需要进行大量的计算,因为如果要恢复的版本比较早,则要进行的差量计算次数相对较多,恢复的时间也会很长。
[0004] 为了克服基于差量存储的实现方式恢复时间过长的问题,目前流行的技术方案是将索引的思想引入连续数据保护系统的实现中,简而言之,此类系统并不存储数据块的变化量,而是将发生变化的整个数据块都传送到服务器端,服务器端同时生成数据块的元数据,在数据恢复时,服务器端跟据客户端请求恢复的时间点及已有的元数据找到相应的数据块并传送回客户端。目前这种基于索引的实现方式存在以下问题:
[0005] 1、系统的运行时间越长,数据块元数据会越多,找到需要的元数据会花费较长时间;
[0006] 2、由于元数据条数众多,占用空间较大,一般都以文件的方式存放在硬盘上,即每次对数据块元数据的存取操作都要去访问硬盘,进一步造成时间延迟;
[0007] 3、由于存储的不是差量数据,而是整个数据块,导致服务器端占用存储空间较大。

发明内容

[0008] 本发明的目是提出一种基于索引的计算机连续数据保护方法,以加快数据块元数据查询的速度,并节省服务器端数据块占用的存储容量。
[0009] 本发明提出的基于索引的计算机连续数据保护方法,包括以下步骤:
[0010] (1)定义计算机数据中的每个数据块的元数据,元数据包括数据块标识、时间戳和数据块在存储池中的地址,其中数据块标识为一个整数,客户端对数据块标识进行分配;
[0011] (2)在服务器端的内存中设置第一缓冲队列和第二缓冲队列,其中第一缓冲队列或第二缓冲队列用于存储数据块的元数据,其中第二缓冲队列或第一缓冲队列作为另一缓冲队列已满后的备用缓冲队列;第一缓冲队列和第二缓冲队列根据元数据中数据块标识的个数进行分区,每个存储区的存储容量相同,同一个存储区内的元数据的数据块标识相同,按照时间戳递增的顺序对一个存储区中的元数据进行排列,按照数据块标识的大小对多个存储区从小到大的顺序进行排列;
[0012] (3)为每个数据块标识生成一个相应的日志文件,将该日志文件存储在服务器端的硬盘上;
[0013] (4)在服务器端的内存中建立一个标识索引表,该标识索引表共有四个字段,包括数据块标识、用于表示数据块的元数据在缓冲队列位置的标志位、与数据块标识相对应的日志文件在服务器端硬盘上的地址以及日志文件中元数据的个数;
[0014] (5)当用户对数据块的内容进行修改时,客户端在该数据块打上修改时刻的时间戳,并将修改后的数据块、数据块标识以及修改时刻的时间戳发送到服务器端;
[0015] (6)服务器端接收到上述打上时间戳的数据块,根据数据块的内容通过哈希算法计算出该数据块在计算机存储池的地址,并按照该地址将该数据块存放到服务器端的存储池中,存储池对该数据块进行去重处理;
[0016] (7)服务器端检索上述标识索引表,得到与该数据块标识相对应的标志位,根据该标志位确定与该数据块相对应的元数据在哪个缓冲队列,再计算元数据写入到缓冲队列的存储区,计算方法为:数据块标识×存储区容量=缓冲区的起始位置,若写入该元数据后存储区未满,则流程结束,若写入该元数据后存储区已满,则进行步骤(8);
[0017] (8)服务器端将之后到来的具有相同数据块标识的元数据写入到另一缓冲队列中位置与原缓冲队列相对应的存储区里,检索标识索引表,得到与该数据块标识相对应的日志文件地址,根据该日志文件地址将原缓冲队列的已满存储区中的元数据写入到该日志文件中,之后该存储区清空,并更新服务器端内存中的标识索引表中元数据在缓冲队列中位置的标志位以及元数据个数,流程结束。
[0018] 本发明提出的基于索引的计算机连续数据保护方法,其优点是:
[0019] (1)本发明在服务器端内存设置了两个缓冲队列,用于缓存部分数据块的元数据,并避免了单缓冲队列架构下缓存队列已满后会导致系统阻塞的问题;
[0020] (2)本发明在服务器端内存中设置了标识索引表,在服务器端硬盘上设置了日志文件,若数据块的元数据不在缓冲队列中,则可经过标识索引表的查询定位出该数据块的元数据存放在哪个日志文件中,加快了数据块元数据的查询速度;
[0021] (3)本发明在服务器端的存储池会根据数据块的内容进行去重操作,节省了存储空间。

附图说明

[0022] 图1是本发明提出的基于索引的计算机连续数据保护方法的流程框图。
[0023] 图2是本发明中客户端数据分块的示意图。
[0024] 图3是本发明中缓冲队列里元数据排列的示意图。
[0025] 图4是本发明中日志文件里元数据排列的示意图。
[0026] 图5是本发明中的两个缓冲队列结构的示意图。
[0027] 图6是本发明中的标识索引表结构的示意图。

具体实施方式

[0028] 本发明提出的基于索引的计算机连续数据保护方法,其流程框图如图1所示,包括以下步骤:
[0029] (1)定义计算机数据中的每个数据块的元数据,元数据包括数据块标识、时间戳和数据块在存储池中的地址,其中数据块标识为一个整数,客户端对数据块标识进行分配;
[0030] (2)在服务器端的内存中设置第一缓冲队列和第二缓冲队列,其中第一缓冲队列或第二缓冲队列用于存储数据块的元数据,其中第二缓冲队列或第一缓冲队列作为另一缓冲队列已满后的备用缓冲队列;第一缓冲队列和第二缓冲队列根据元数据中数据块标识的个数进行分区,每个存储区的存储容量相同,同一个存储区内的元数据的数据块标识相同,按照时间戳递增的顺序对一个存储区中的元数据进行排列,按照数据块标识的大小对多个存储区从小到大的顺序进行排列;
[0031] (3)为每个数据块标识生成一个相应的日志文件,将该日志文件存储在服务器端的硬盘上;
[0032] (4)在服务器端的内存中建立一个标识索引表,该标识索引表共有四个字段,包括数据块标识、用于表示数据块的元数据在缓冲队列位置的标志位、与数据块标识相对应的日志文件在服务器端硬盘上的地址以及日志文件中元数据的个数;
[0033] (5)当用户对数据块的内容进行修改时,客户端在该数据块打上修改时刻的时间戳,并将修改后的数据块、数据块标识以及修改时刻的时间戳发送到服务器端;
[0034] (6)服务器端接收到上述打上时间戳的数据块,根据数据块的内容通过哈希算法计算出该数据块在计算机存储池的地址,并按照该地址将该数据块存放到服务器端的存储池中,存储池对该数据块进行去重处理;
[0035] (7)服务器端检索上述标识索引表,得到与该数据块标识相对应的标志位,根据该标志位确定与该数据块相对应的元数据在哪个缓冲队列,再计算元数据写入到缓冲队列的存储区,计算方法为:数据块标识×存储区容量=缓冲区的起始位置,若写入该元数据后存储区未满,则流程结束,若写入该元数据后存储区已满,则进行步骤(8);
[0036] (8)服务器端将之后到来的具有相同数据块标识的元数据写入到另一缓冲队列中位置与原缓冲队列相对应的存储区里,检索标识索引表,得到与该数据块标识相对应的日志文件地址,根据该日志文件地址将原缓冲队列的已满存储区中的元数据写入到该日志文件中,之后该存储区清空,并更新服务器端内存中的标识索引表中元数据在缓冲队列中位置的标志位以及元数据个数,流程结束。
[0037] 以下对本发明的基于索引的连续数据保护系统及方法,结合附图及实施例详细说明如下:
[0038] 1、双缓冲队列和日志文件
[0039] 每个数据块的元数据用三元组<数据块标识,时间戳,存储池地址>来描述。时间戳表示数据块被修改时的时间,存储池地址表示数据块在存储池中的地址。在进行恢复的时候,系统可以根据元数据迅速查找到数据块的所在地址,之后传送给客户端。显然,随着系统的运行,数据块个数会不断增多,元数据信息的占用空间也会越来越大,传统的方式都是将元数据以文件的方式存放在服务器端的硬盘上。
[0040] 当本系统初次启动后,客户端会将需要保护的数据分切成大小一样的数据块,并以递增的顺序为每个数据块分配一个整数作为数据块标识,初始值为0,如图2所示,图中的数字为各个数据块的标识,分配数据块标识后客户端将各个数据块发送到服务器端。
[0041] 服务器端接收到这些数据块后,需要记录下它们的元数据。服务器端在内存中生成第一缓冲队列和第二缓冲队列,用户预先设定存储区容量大小,假设存储区容量大小为S,对于每个到来的数据块,假设它的数据块标识为B,它的元数据在两个缓冲队列中的存储区是在从B*S到(B+1)*S-1的这段空间上,而对于两个缓冲队列来说,存储区内元数据的数据块标识均相同,并都最多含有S个元数据,按照时间戳递增的顺序排列,存储区间按照标识从小到大排列,缓冲队列里元数据的排列如图3所示。
[0042] 除了两个缓冲队列外,系统还为每个数据块标识在服务器端的硬盘上生成一个日志文件,当缓冲队列里某个数据块标识对应的存储区存放的元数据个数已达到上限S后,系统将这些元数据依次写到对应的日志文件中,之后将该存储区清空,为节省空间,在单个日志文件里只记录时间戳和存储池地址,顺序按照时间戳递增的顺序排列,图4为数据块标识为0的数据块对应的日志文件内容示意图。
[0043] 在单队列结构下,在缓冲队列的某个存储区将元数据写回到日志文件的期间中,该存储区不接能收新来的元数据,造成暂时的系统阻塞。为了避免这个问题,系统使用双缓冲队列架构,当其中一个缓冲队列中某个存储区已满后,系统将到来元数据的写入位置切换到另一个缓冲队列的相对应存储区中,图5是两个缓冲队列结构的示意图,两个缓冲队列中灰色的存储区表示元数据的写入存储区,其在另外一个队列中对应的白色存储区作为灰色存储区写满后的备用存储区。需要说明的是,在存储区已满后,服务器端将该存储区的元数据写入到对应的日志文件中,另一个队列里相对应的区域则开始接收新的元数据,故两个缓冲队列各个区域里包含的元数据的时间戳总是晚于对应日志文件中的元数据的时间戳。
[0044] 2、标识索引表
[0045] 为提升在日志文件中查找元数据的速度,本系统在内存中存放了一张标识索引表,包含数据块标识、标志位、日志文件地址和元数据个数四个字段,标志位表示元数据在哪个缓冲队列,0为第一缓冲队列,1为第二缓冲队列,日志文件地址表示与该数据块标识对应的日志文件的地址,元数据个数表示对应的日志文件中元数据的数量,如图6所示。所有日志文件里的元数据均是按照时间戳递增的顺序排列,由于连续数据块保护系统在运行过程中呈现明显的时间局部性,即越新的数据越有可能被用户使用到,所以可根据元数据个数找到日志文件最后一条元数据,即时间戳最晚的一条元数据,从此处开始向前搜索所需的元数据信息。
[0046] 3、存储池去重
[0047] 服务器端的存储池接收来自客户端的每个数据块,并负责对数据的去重和实际存储。存储池通过加密哈希算法(如SHA1,MD5等),根据数据块的内容,为每个数据块产生一个全局唯一的哈希值作为该数据块的存储池地址,并利用该哈希值来快速判断某个数据块在存储池中是否已存在,只有该数据块不存在时,才将其添加到存储池中去。这样能够保证每个数据块在存储池中都是内容唯一的,多个元数据可以指向同一个数据块地址,例如如图2中数据块标识为0的最后一条元数据和数据块标识为1的最后一条元数据,其存储池地址均为/var/StoragePool/SD467HT9。
[0048] 下面结合连续数据保护系统数据保护的过程,进一步阐释本发明各模块间的关系:
[0049] 数据保护的过程如下:
[0050] (1)用户在客户端对于某个被保护的数据块进行了修改,客户端对该数据块打上时间戳,之后将其发送到服务器端;
[0051] (2)服务器端接收到数据块,根据其内容生成在存储池的地址,并进行去重处理。服务器端查询标识索引表中该标识对应的标志位,确定元数据的写入位置是在哪个缓冲队列,之后再根据数据块标识计算出本条元数据要写入队列里的哪个存储区,若写完后该存储区未满,则流程结束,否则进行步骤(3);
[0052] (3)服务器端将之后到来的具有相同数据块标识的元数据写入到另一个队列中相对应的存储区里,查询标识索引表,找到该数据块标识对应的日志文件,原队列已满存储区中的元数据写入到该日志文件中,,之后清空该存储区,并更新内存中标识索引表的中的标志位和日志文件里元数据的个数,流程结束。