具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明重复数据处理方法一个实施例的流程图,如图1所示,本实施例的方法可以包括:
步骤101、采用滑动窗口对数据对象进行分块处理,获取各分块数据,为获取每个分块数据,滑动窗口的滑动起始位置在上一个分块数据的结束位置向后跳跃最小分块长度的位置处,每个分块数据的起始位置在上一个分块数据的结束位置且每个分块数据的长度等于最小分块长度与滑动窗口在对应分块处理过程中的滑动长度之和。
本实施例中,重复数据处理装置可以采用滑动窗口对数据对象进行分块处理,该重复数据处理装置可以为存储控制器等设备,本实施例并不限定该重复数据处理装置采用何种装置,也不限定该重复数据处理装置的具体结构,只要其能够进行数据处理即可。
具体来说,在现有的CDC算法中,滑动窗口在滑动过程中需要遍历数据对象的每个字节,而且,在每次分块处理过程结束时,重复数据处理装置需要判断分块处理获取的分块数据的长度是否大于最小分块长度,只有大于最小分块长度,该分块数据才符合预设的分块条件,以控制后续将分块数据与已存储数据进行比较的计算粒度,所谓最小分块长度即为分块处理获取的各分块数据的下限长度,最小分块长度越小,分块粒度越小。但是,该判断过程在每次分块处理后都会进行,而且滑动窗口需要遍历数据对象的所有字节,导致重复数据删除的效率较低,无法适用数据量逐渐增大的存储需求。
相比之下,本实施例中,在每次对数据对象进行分块处理之前,重复数据处理装置都可以控制滑动窗口的滑动起始位置从前一个分块数据的结束位置向后跳过最小分块长度开始滑动,因此分块数据的长度必然大于最小分块长度,从而省去了现有技术在滑动窗口分块处理结束后判断分块数据的长度是否大于最小分块长度的过程,保证了各次分块处理过程之间的连贯性。需要说明的是,本实施例并不限定最小分块长度,本领域技术人员可以根据需要,例如分块粒度、分块处理效率、数据对象的大小等多个因素进行设定。
图2为应用图1所示方法实施例对数据对象进行第5次分块处理的过程示意图,如图2所示,L1为预设的最小分块长度;L2为滑动窗口在第5次分块处理过程中的滑动长度;L3为第5次分块处理获取的第5个分块数据;P1为第4个分块数据的结束位置,也是第5个分块数据的起始位置,还是第4次分块处理结束后滑动窗口的结束位置;P2为滑动窗口在第5次分块处理的滑动起始位置,该滑动起始位置在第4个分块数据的结束位置P1向后跳跃最小分块长度L1的位置处;P3为第5次分块处理结束后的滑动窗口的结束位置。由此可知,第5个分块数据的长度等于最小分块长度L1与滑动窗口在第5次分块处理过程中的滑动长度L2之和。
对于第1次分块处理来说,其与后续各次分块处理所不同的地方在于,滑动窗口的滑动起始位置在所述数据对象的起始位置向后跳跃所述最小分块长度后的位置处,其余过程与上述分块处理的类似,此处不再赘述。
步骤102、将各分块数据与存储设备中已存储的分块数据进行匹配处理,若分块数据已存储在存储设备中,则删除该分块数据,并将所述存储设备中已存储的分块数据作为所述数据对象中的分块数据。
举例来说,本实施例可以采用指纹信息匹配的方式,确定分块数据是否已存储在存储设备中。重复数据处理装置在获取分块数据后,即可计算该分块数据的第一指纹信息,该第一指纹信息可以表征该分块数据的特征信息。本实施例并不需要限制重复数据处理装置具体采用哪种校验算法计算分块数据的第一指纹信息。本领域技术人员只需要根据存储设备中存储的分块数据对应的第一指纹信息所采用的算法或者匹配的算法计算即将要存储的分块数据的第一指纹信息即可。举例来说,该第一指纹信息可以为对分块数据进行哈希变换获取的哈希值、对分块数据进行循环冗余校验(cyclic redundancycheck,以下简称:CRC)获取的CRC校验码等。
针对数据对象中的一个分块数据的处理过程来说,由于存储设备中已经存储了大量的分块数据以及对应的第一指纹信息,因此,重复数据处理装置可以判断该分块数据是否已经存储在存储设备中,其判断的手段即为将该分块数据的第一指纹信息与存储设备中已经存储的大量指纹信息进行比较。如果存储设备已经存在该分块数据的第一指纹信息,也即代表该存储设备中已经存储了该分块数据,为了避免重复存储,该重复数据处理装置即可将存储设备中的分块数据作为待存储的数据对象中的分块数据,而该数据对象本身的分块数据则可以删除。针对采用什么形式将存储设备中的分块数据作为当前待存储的数据对象的分块数据,本实施例并不进行限定,本领域技术人员可以采用现有技术实现,例如采用指针指向等方式。如果存储设备中不存在该分块数据的指纹信息,也即代表该存储设备中并未存储该分块数据,则重复数据处理装置即可在整个数据对象处理完成后或者在该分块数据被划分出来后,将该分块数据以及其第一指纹信息存入存储设备中,以备后续判断是否存储其它分块数据之用。需要说明的是,存储设备已存储该分块数据的第一指纹信息,其表现形式可以是与存储设备中存储的指纹信息是相等的第一指纹信息,也可以是相匹配的第一指纹信息,本实施例不作限定,只要能根据该分块数据的第一指纹信息与已存储的第一指纹信息确定该分块数据是否已存储在存储设备中即可,而且本实施例并不限定该存储设备的类型以及其应用领域。
实验表明,在平均分块长度为32KB,且最小分块长度为16KB的情况下,采用本实施例的方法,可以提高50%的分块效率。
本实施例,通过控制滑动窗口在每次进行分块处理之前,先跳跃最小分块长度再进行分块处理,使得每次分块处理后的分块数据的长度均至少大于最小分块长度,从而使得每次分块处理结束时无需再次判断分块数据的长度是否大于最小分块长度而是可以直接进行下一次分块处理,节约了处理时间,保证了各次分块处理过程之间的连贯性。而且,该过程使得滑动窗口无需遍历数据对象的所有字节,而是在每次分块处理之前都跳过一定数量的字节。因此,本实施例可以提高重复数据删除的处理效率,满足数据量不断增大的存储需求。
在图1所示方法实施例的具体实现过程中,数据分块处理的过程可以采用以下两种方式实现:
方式一、采用滑动窗口从数据对象的一端滑动到另一端,对数据对象进行分块处理,获取各分块数据。
具体来说,该分块处理方式一可以只采用一个滑动窗口串行地从整个数据对象的一端滑动到另一端,以对数据对象进行分块处理。
方式二、采用滑动窗口并行从数据对象的各数据区域的一端滑动到另一端,对数据对象进行分块处理,获取各分块数据,每个数据区域对应一个滑动窗口,其中,对数据对象进行分割后得到各数据区域。
具体来说,该分块处理方式二可以将数据对象划分为多个数据区域,对于每个数据区域来说,均可以采用一个滑动窗口从该数据区域的一端滑动到另一端,因此,分块处理方式二与分块处理方式一的区别在于,分块处理方式二可以采用多个滑动窗口并行地进行数据块的划分,因此,分块处理方式二相对于分块处理方式一来说,处理效率更高。
需要说明的是,本实施例不限制将数据对象划分为多个数据区域的划分方式,举例来说,可以随机划分、根据数据对象的长度进行平均划分或者根据处理器的并发处理能力进行划分等。
另外,本实施例也不限定与各个数据区域对应的滑动窗口的滑动方向,举例来说,各个滑动窗口均可以采用从数据区域的左端滑动到右端或者从右端滑动到左端,或者某些滑动窗口从数据区域的左端滑动到右端而某些滑动窗口从数据区域的右端滑动到左端。
将上述方式一或者方式二应用在图1所示方法实施例中,图1所示方法实施例中将各分块数据与存储设备中已存储的分块数据进行匹配处理的过程可以包含下述两种方式:
方式一、在对数据对象进行分块处理的过程中,一边划分分块数据,一边进行匹配处理,也即分块处理的过程可以与匹配处理的过程并行执行。
方式二、在结束对数据对象的全部分块处理之后,再对全部分块数据进行匹配处理。
由这两种方式可知,匹配处理的方式一适用于每次分块处理后获取的分块数据可以直接进行匹配处理而无需考虑其他分块数据的情况;匹配处理的方式二则适用于分块处理后获取的分块数据可能不能直接进行匹配处理而还需要对获取的全部分块数据进行综合考虑的情况。该综合考虑可能涉及各分块数据是否超过了最大分块长度、是否存在需要合并的分块数据等。因此,本发明实施例可选地,在对数据对象进行数据分块处理后,如果获取的分块数据中存在长度大于最大分块长度的分块数据,则重复数据处理装置还可以对超过最大分块长度的分块数据进行分割处理,从而控制分块数据的长度不超过最大分块长度。
由上述技术方案的描述可知,不管是针对整个数据对象进行重复数据处理,还是针对数据对象中的一部分数据区域进行重复数据处理,其针对一个分块数据的处理过程是类似的,下面仅针对一个分块数据的处理过程进行详细说明。
图3为本发明重复数据处理方法另一个实施例的流程图,如图3所示,本实施例的方法仍然采用图2所示过程进行说明,本实施例的方法可以包括:
步骤301、滑动窗口的起始位置跳跃到P2。
步骤302、滑动该滑动窗口,并计算滑动窗口内的数据对象的第二指纹信息。
第二指纹信息,用以判断滑动窗口是否滑动到当前分块数据的边缘。具体来说,本实施例仍以图2所示的第5个分块数据来说,本实施例采用指纹算法获取的第二指纹信息来确定该滑动窗口是否到达数据对象中第5个分块数据的边缘。关于第二指纹信息的获取,本实施例是通过采用指纹算法,本领域技术人员可以采用现有技术实现,此处不再赘述。
在具体实现时,滑动窗口的滑动步长可以预设,对于一次分块处理来说,如果滑动步长较小,滑动一次可能无法到达分块数据的边缘,则可能需要多次对滑动窗口按照预设步长滑动,才能到达本次分块处理的分块数据的边缘。
步骤303、根据该第二指纹信息判断滑动窗口是否滑动到第5个分块数据的边缘,若是则执行步骤304,否则,执行步骤302。
重复数据处理装置在每一次滑动窗口后,均可以根据当前滑动窗口中的数据对象的第二指纹信息判断滑动窗口是否滑动到分块数据的边缘。在具体实现时,本实施例可以预设分块条件,该预设分块条件可以根据数据对象的连续性特征值进行设定,当滑动窗口滑动到两个分块数据交界的位置,该滑动窗口内的数据对象的连续性特征值较小,而当滑动窗口滑动到一个分块数据中的一部分位置时,则该滑动窗口内的数据对象的连续性特征值较大。因此,如果计算的第二指纹信息不满足预设分块条件,也即若第二指纹信息小于预设的连续性特征值,则说明该滑动窗口滑动到了两个分块数据的交界处,也即滑动到当前分块数据的边缘,则重复数据处理装置即可获知本次分块处理结束,如果第二指纹信息大于预设的连续性特征值,则说明滑动窗口当前可能还处于一个分块数据的连续位置,则重复数据处理装置可以继续滑动窗口,重复上述步骤,直到找到第5个分块数据的边缘为止。
步骤304、将P1到P3间的数据对象作为第5个分块数据。
步骤305、计算第5个分块数据的第一指纹信息。
步骤306、判断存储设备中是否已存储该第一指纹信息,若是则执行步骤307,否则执行步骤308。
步骤307、从数据对象中删除第5个分块数据,并将与该第一指纹信息对应的已存储的分块数据作为第5个分块数据,进行下一次分块处理过程。
步骤308、将第5个分块数据和对应的第一指纹信息存储到存储设备中。
本实施例,通过指纹算法对数据对象进行分块处理,并且通过控制滑动窗口在每次分块处理结束后,跳跃最小分块长度再进行下一次分块处理的滑动过程,使得分块处理结束时无需再次判断分块数据的长度是否大于最小分块长度而是可以直接进行下一次分块处理,从而节约了处理时间,保证了各次分块处理过程之间的连贯性。而且,该过程使得滑动窗口无需遍历数据对象的所有字节,而是在每次分块处理之前都跳过一定数量的字节,从而提高了重复数据删除的处理效率,满足了数据量不断增大的存储需求。
图4为本发明重复数据处理装置一个实施例的结构示意图,如图4所示,本实施例的装置可以包括:分块处理模块11以及数据处理模块12,其中:
分块处理模块11用于采用滑动窗口对数据对象进行分块处理,获取各分块数据,为获取每个分块数据,所述滑动窗口的滑动起始位置在上一个分块数据的结束位置向后跳跃最小分块长度的位置处,每个分块数据的起始位置在上一个分块数据的结束位置且每个分块数据的长度等于所述最小分块长度与所述滑动窗口在对应分块处理过程中的滑动长度之和;
数据处理模块12用于将各分块数据与存储设备中已存储的分块数据进行匹配处理,若分块数据已存储在存储设备中,则删除该分块数据,并将所述存储设备中已存储的分块数据作为所述数据对象中的分块数据。
本实施例的装置可以用于执行图1所示方法实施例的方法,其实现原理和技术效果类似,此处不再赘述。
图5为本发明重复数据处理装置另一个实施例的结构示意图,如图5所示,本实施例的装置在图4所示装置结构的基础上进一步地,分块处理模块11包括:第一分块处理单元111和第二分块处理单元112,其中:
第一分块处理单元111,用于采用滑动窗口从所述数据对象的一端滑动到另一端,对所述数据对象进行分块处理,获取各分块数据;
第二分块处理单元112,用于采用滑动窗口并行从所述数据对象的各数据区域的一端滑动到另一端,对所述数据对象进行分块处理,获取各分块数据,每个数据区域对应一个滑动窗口,其中,对数据对象进行分割后得到各数据区域。
本实施例的装置还可以进一步包括:数据区域确定模块13,该数据区域确定模块13用于根据并发处理能力和/或数据对象大小,确定所述数据对象中的各数据区域。可选地,本实施例的装置还可以包括:数据块分割模块14,用于对超过最大分块长度的分块数据进行分割处理。在具体实现时,第一分块处理单元111或第二分块处理单元112,具体用于滑动所述滑动窗口,并计算所述滑动窗口内的数据对象的第二指纹信息;根据所述第二指纹信息确定所述滑动窗口是否滑动到本次数据分块处理的分块数据的边缘,若是,则将从前一个分块数据的结束位置到所述滑动窗口当前的结束位置之间的数据对象作为本次数据分块处理获取的分块数据;否则,继续执行上述滑动所述滑动窗口,并计算所述滑动窗口内的数据对象的第二指纹信息步骤,直到所述滑动窗口滑动到本次数据分块处理的分块数据的边缘为止。
本实施例的装置中,数据处理模块12可以进一步包括:指纹计算单元121和删除处理单元122,其中,
指纹计算单元121,用于计算所述数据对象中的分块数据的第一指纹信息;
删除处理单元122,用于若所述存储设备已存储所述第一指纹信息,则从所述数据对象中删除所述第一指纹信息对应的分块数据,并将与所述第一指纹信息对应的已存储的分块数据作为所述数据对象中被删除的分块数据。
需要说明的是,分块处理模块11中也可以仅包括第一分块处理单元111和第二分块处理单元112中的一个单元,其中,第一分块处理单元111可以用于实现上述分块处理方式一,第二分块处理单元112可以用于实现上述分块处理方式二,其实现原理和技术效果类似,此处不再赘述。指纹计算单元121和删除处理单元122可以用于实现上述匹配处理方式一或匹配处理方式二,其实现原理和技术效果类似,此处不再赘述。在具体实现时,本实施例的装置可以用于执行图3所示方法实施例的方法,其实现原理和技术效果类似,此处不再赘述。
图6为本发明重复数据处理系统一个实施例的结构示意图,如图6所示,本实施例的系统可以包括存储设备1和重复数据处理装置2,该存储设备1用于存储分块数据和与所述分块数据对应的第一指纹信息,该重复数据处理装置2可以采用图4或图5所示的结构,其可以用于执行图1或图3所示方法实施例的方法,其实现原理和技术效果类似,此处不再赘述。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。