具体实施例
下面结合附图对本发明作进一步的描述。
图1是一个比较某类型同名文件差异的流程图,简称比较程序流程图。图中所示的步骤用于比较某类型的同名文件发生变化时的变化规律,即哪些部分发生了变化,哪些部分没有发生变化,且将这样的变化规律表现为一个数据块变化表,同时在目标计算机的存储器上指定一个存储区域,用于保存被比较的文件及相应的数据块变化表。
图1所示的比较程序的具体步骤如下:
对于待比较的文件,首先获得该文件的文件类型,文件类型可通过文件扩展名或文件中的文件控制信息来判断;
然后,在目标计算机的存储区域中查找是否存在与待比较文件同名的文件:如果不存在同名文件,直接复制文件到目标计算机上的存储区域内并返回;
如果存在同名文件,则在源计算机获得待比较文件的文件属性,通过文件长度、最后修改时间、归档位等文件属性与目标计算机存储区域内已保存的同名文件进行比较,若比较的结果相同,表示该文件没有变化,在此情况下直接返回;
若比较结果不相同,表示该文件发生了变化,在此情况下,则比较待比较文件与其同名文件的差异,比较差异的算法可以是Rabin指纹算法、Delta差异算法、TTTD算法等。
比较差异后的结果保存为一个如图2所示的数据块变化表,同时将待比较文件复制到目标计算机存储区域内,替换已存在的与其同名的文件。
由于比较程序定期运行,故当其运行时,若待比较文件再次发生变化时,则按照图1所述的方法再次比较其变化规律并生成相应的新的数据块变化表。
图2为按照图1所述的方法比较某类型文件的两个同名文件之异同后产生的一个数据块变化表的示意图。
图2中,0表示两个同名文件的开始位置,其后的数值表示待比较文件与其同名文件产生差异的起点与终点位置;矩形图中的内容表示就两个相临数值之间得部分,待比较文件与其同名文件是否相同,例如,在[0,1024)之间的这部分,待处理文件与其同名文件是相同的;而[1024,2048)之间的这部分,二者是不相同的,即有差异的,这种差异可能是由于修改了文件内容或者新增了内容。这样,在比较任意两个同名文件时,其异同部分都可以用如图2所示的数据块变化表来描述,且由于每比较一次某类型文件的两个同名文件都会产生一个数据块变化表。这样,在目标计算机的存储区域内将会保存若干个某类型文件的数据库变化表,这些数据块变化表将在随后的分析程序中被用来求得该类型文件的最佳分割方式。
图3为通过分析某类型文件的所有数据块变化表求得该类型文件的最佳分割方式的流程图,简称分析程序流程图。最佳分割方式,是指将某类型的文件按某种方式分割为若干数据块,且利用分割后的数据块可最大程度地识别同类型文件中与其相同的数据块(即重复数据),从而达到在更短的时间内提高重复数据压缩率的效果。
分析程序可在比较程序保存某类型文件的数据块变化表达到一定数量或在某个设定的时间启动。
分析程序的执行步骤如图3所示:
首先,收集某类型文件的所有数据块变化表;
然后,求得该类型文件所有数据块变化表的一个最佳分割方式,这个最佳分割方式我们称之为某类型文件长度已知部分的最佳分割方式;
随后,通过上述该类型文件长度已知部分的最佳分割方式来求得长度值大于该类型文件所有数据块变化表中文件长度值的该类型文件的最佳分割方式,此为某类型文件长度未知部分的最佳分割方式。
这样,某类型文件的最佳分割方式就包含了以下两种情况:
当某类型文件的文件长度值在该类型文件所有数据块变化表所涉的文件长度值之内时,使用该类型文件长度已知部分的最佳分割方式对其进行分割;
当某类型文件的长度大于该类型文件所有数据块变化表所涉的文件长度值,则在其所有数据块变化表所涉的文件长度值之内的部分使用该类型文件长度已知部分的最佳分割方式分割它,而其超过所有数据块变化表所涉的文件长度值的部分则使用该类型文件长度未知部分的最佳分割方式对其进行分割。
在分析程序中,本发明采用最小上限法在若干某类型文件的数据块变化表中求其最佳分割方式,也即求某类型文件长度已知部分的最佳分割方式的算法为最小上限法,且在最小上限法中,本发明约定了每一数据块的最小长度为512字节,最大长度为32768字节。
最小上限法的具体算法流程为:
第一步,取上限值。从某类型文件的所有数据块变化表中的每一数据块变化表的0字节开始,将各自的第一个数据块作为当前块,并取出各当前块的上限值。在取各当前块的上限值时,如果各当前块的上限值中有大于32768字节的,则将大于32768字节的当前块分割为等于或小于32768字节的数据块,并将前述的32768字节或小于32768字节的数值作为该当前块上限值。
第二步,取最小上限值。当各数据块变化表的当前块的上限值均大于512字节,选择其中一个最小值作为最小上限值;当各当前块的上限值都小于512字节时,则将各当前块与其下一临近块合并为一个新的当前块,当各合并后的新当前块的上限值均大于512字节时,取其中一个最小值作为最小上限值。
根据上述最小上限法的算法流程,设某类型文件的所有数据块变化表为2个时,则求其长度已知部分的最佳分割方式的步骤如图4所示:
首先,分别取出该类型文件的数据块变化表1的第一个块[0,1024),数据块变化表2的第一个块[0,806)作为各自的当前块,则其各自当前块的上限值分别为:1024与806,由比较可知,数据块变化表1与数据块变化表2的当前块的最小上限值为806,则该二表当前块的最佳分割方式为[0,806),据此,最佳分割方式的第二个块即从806开始,且数据块变化表1和数据块变化表2的第二个块的结束位置都在2048,则第二个数据块的最佳分割方式为[806,2048),那么,第三个块就从2048开始,此时,数据块变化表1和数据块变化表的下一结束位置分别为3000和3550,根据最小上限法取二者最小值,所以第三个数据块的最佳分割方式为[2048,3000),依次类推,可以得到每一个块的最佳分割方式。所有块的最佳分割方式的组合即为该类型文件已知长度部分的最佳分割方式。
在获得某类型文件长度已知部分的最佳分割方式后,分析程序将根据该部分的最佳分割方式来求取其长度未知部分的最佳分割方式。其处理流程为:
将某类型文件的所有数据块变化表中最大的一个文件长度值除以该类型文件长度已知部分的最佳分割方式的总块数,得出该类型文件长度已知部分的数据块平均间距值;
利用该数据块平均间距值求得最接近1024倍数的数值作为该类型文件长度未知部分的数据块固定分割长度,按此固定长度分割该类型文件长度未知部分即为该类型文件长度未知部分的其最佳分割方式。
图5为如何利用某类型文件已知长度部分的最佳分割方式来求得其未知长度部分的最佳分割方式的示意图。例如,利用图4中的两个数据块变化表中的一个最大文件长度值8400与其长度已知部分的最佳分割方式中的文件总块数7相除,可以得出该类型文件长度已知部分的数据块平均间距值为1200。当数据块平均间距值为1200时,其最接近1024倍数的数值为1024,那么,我们就将1024的固定分割长度作为该类型文件长度未知部分的该类型文件的最佳分割方式。由此,我们称在某类型文件的所有数据块变化表中的一个最大文件长度值以内的部分为该类型文件的长度已知部分;超过前述最大值的部分为该类型文件长度未知部分。在图4所示的情况下,当某类型的文件长度在8400字节以上时,超过8400字节的文件部分即被视为某类型文件的长度未知部分;8400字节以内的部分为该类型文件的长度已知部分。该文件类型的最佳分割方式为:其长度已知部分按图4的最佳分割方式分割,长度未知的部分则按图5求得的1024的固定分割长度分割。
在求得某类型文件的长度已知部分和其长度未知部分的最佳分割方式后,用于求得该最佳分割方式的所有数据块变化表将被删除,且该类型文件的最佳分割方式将被保存在类型分割数据库中。
如前所述,分析程序可在比较程序保存某类型文件的数据块变化表达到一定数量或在某个设定的时间启动,这就意味着,分析程序在经过一定的时期后将会被再次启动。当分析程序再次启动时,若发现存在比较程序在比较新的同名文件后得到的新的数据块变化表时,就会执行如图6所示的更新某类型文件的最佳分割方式的步骤。
图6中,我们设分析程序仅收集到一个某类型文件的新的数据库变化表,那么更新的具体步骤为:
将原来储存在类型信息库中的某类型文件的最佳分割方式视为一个数据块变化表;
利用前述分析程序求得其与新产生的数据块变化表的最佳分割方式,此即为更新后的某类型文件的最佳分割方式。
某类型文件的最佳分割方式的更新可以按上述操作重复进行。
图7为调用类型信息库中的某类型文件的最佳分割方式实现重复数据压缩的流程图,简称压缩程序流程图,其详细步骤如下:
对于待压缩文件,压缩程序首先获得其文件名,并根据文件名的扩展名或者文件中的文件控制信息来判断文件的类型;
得到待压缩文件的文件类型后,从类型分割信息库中调用该类型文件的最佳分割方式将待压缩文件内容按该最佳分割方式分割为若干数据块,并依次将这些数据块从硬盘装载到内存;
将加载到内存的数据块逐一按如下方式处理:
首先,使用散列算法为每一数据块生成一个标识符(散列算法可为MD5或SHA1、SHA2等),该标识符与数据块的关系为唯一对应关系。
其次,数据压缩程序将根据数据块的标识符在存储器的关系数据库中或自行实现的数据结构中查找是否已经存在相同的标识符,如果不存在相同的标识符,数据压缩程序将数据块保存在存储器上,并将数据块的保存位置和与其对应的标识符存储在关系数据库或自行实现的数据结构中,以便将来再次查找;
如果存在相同标识符,则表明该数据块已经保存在存储器上,数据压缩程序在目标计算机上获得该标识符对应的数据块在存储器上的位置信息,并仅保存该位置信息,这样可以避免相同内容的数据块的再次传输及存储,从而节约压缩时间。