《数据分块方法及装置.pdf》由会员分享,可在线阅读,更多相关《数据分块方法及装置.pdf(20页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 104348571 A(43)申请公布日 2015.02.11CN104348571A(21)申请号 201310312216.7(22)申请日 2013.07.23H04L 1/00(2006.01)G06F 17/30(2006.01)(71)申请人华为技术有限公司地址 518129 广东省深圳市龙岗区坂田华为总部办公楼(72)发明人吴俊 张亮 郭凯(74)专利代理机构北京同立钧成知识产权代理有限公司 11205代理人刘芳(54) 发明名称数据分块方法及装置(57) 摘要本发明实施例提供一种数据分块方法及装置。该方法包括:采用所述滑动窗口的指纹值,分别对第1个模值。
2、至第N个模值进行取模,如果对一个模值取模后的值为零;将原数据流中从第n层的上一个数据块的结束位置开始到滑动窗口的结束位置之间的数据作为当前数据块;在指纹字典中没有存储当前数据块的指纹值时,n大于1,在新数据流占用的空间中写入当前数据块,以覆盖在新数据流中当前数据块包括的所有第n-1层的数据块,否则将当前数据块顺序写入新数据流;否则,在新数据流中写入当前数据块的指纹值,以覆盖新数据流中当前数据块包括的所有第n-1层的数据块的指纹值,否则将当前数据块的指纹值顺序写入新数据流占用的空间。(51)Int.Cl.权利要求书3页 说明书12页 附图4页(19)中华人民共和国国家知识产权局(12)发明专利申。
3、请权利要求书3页 说明书12页 附图4页(10)申请公布号 CN 104348571 ACN 104348571 A1/3页21.一种数据分块方法,其特征在于,包括:11.获取原数据流上滑动窗口的指纹值,所述滑动窗口的初始起始位置与所述原数据流的起始位置相同,所述滑动窗口的长度为预设长度;12.采用所述滑动窗口的指纹值,分别对第1个模值至第N个模值进行取模,对于每个模值,如果取值后的值为零均执行步骤13和14,其中,将第i个模值向左扩展预设位数后得到第i+1个模值,所述i为大于等于1并且小于所述N的任一个自然数,所述N为模值的总个数;13.将所述原数据流中从第n层的上一个数据块的结束位置开始到。
4、所述滑动窗口的结束位置之间的数据作为当前数据块,所述当前数据块为第n层数据块;其中,所述n为大于等于1并且小于等于所述N的任一个自然数:在指纹字典中没有存储所述当前数据块的指纹值时,将所述当前数据块存储到分块字典中,将所述当前数据块的指纹值和所述当前数据块在所述分块字典中的索引信息存储到所述指纹字典中,当所述n大于1时,在新数据流占用的空间中写入所述当前数据块,以覆盖在所述新数据流中所述当前数据块包括的所有第n-1层的数据块,当所述n等于1时,将所述当前数据块顺序写入所述新数据流占用的空间;在所述指纹字典中存储有所述当前数据块的指纹值时并且当n大于1时,在所述新数据流占用的空间中写入所述当前数。
5、据块的指纹值,以覆盖所述新数据流中所述当前数据块包括的所有第n-1层的数据块的指纹值,在所述指纹字典中存储有所述当前数据块的指纹值时并且当n等于1时,将所述当前数据块的指纹值顺序写入所述新数据流占用的空间;14.将所述滑动窗口在所述原数据流上朝结束位置滑动所述预设长度,获取原数据流上滑动窗口的指纹值,重复执行步骤12-14,直至所述滑动窗口的起始位置滑动至所述原数据流的结束位置。2.根据权利要求1所述的方法,其特征在于,将所述当前数据块存储到分块字典中,将所述当前数据块的指纹值和所述当前数据块在所述分块字典中的索引信息存储到所述指纹字典中,包括:当所述当前数据块包括第n-1层的数据块时,将所述。
6、当前数据块的指纹值和所述当前数据块在所述分块字典中的索引信息存储到所述指纹字典中,其中,所述当前数据块在所述分块字典中的索引信息,根据所述当前数据块包括的第n-1层的数据块的索引信息确定;当所述当前数据块不包括第n-1层的数据块时,将所述当前数据块存储到所述分块字典中,将所述当前数据块的指纹值和所述当前数据块在所述分块字典中的索引信息存储到所述指纹字典中。3.根据权利要求1或2所述的方法,其特征在于,在新数据流的占用空间中写入所述当前数据块之前,和/或在所述新数据流的占用空间中写入所述当前数据块的指纹值之前,还包括:查找所述当前数据块包括的第n-1层的数据块在所述新数据流中的位置。4.根据权利。
7、要求3所述的方法,其特征在于:在所述将所述原数据流中从第n层的上一个数据块的结束位置开始到所述滑动窗口的结束位置之间的数据作为当前数据块之后,还包括:权 利 要 求 书CN 104348571 A2/3页3记录所述当前数据块的序号,与所述当前数据块所在的层次、所述当前数据块在所述原数据流的位置和所述当前数据块在所述新数据流的位置之间的对应关系,并保存在位置记录表中;查找所述当前数据块包括的第n-1层的数据块在所述新数据流中的位置,包括:根据所述当前数据块在所述原数据流中的位置和第n-1层数据块在所述原数据流中的位置,在所述位置记录表中,定位所述原数据流中所述当前数据块包括的第n-1层数据块的记。
8、录;从定位到的第n-1层数据块的记录中,获取所述当前数据块包括的第n-1层数据块在所述新数据流中的位置。5.根据权利要求1或2所述的方法,其特征在于,还包括:将所述新数据流解析为所述原数据流的过程中,当在所述新数据流查找到指纹值时,在所述指纹字典中查找所述指纹值对应的数据块在所述分块字典中的索引信息;根据所述索引信息,在所述分块字典中查找所述指纹值对应的数据块,在所述指纹值在所述新数据流占用的空间中,将所述指纹值替换为查找到的数据块。6.一种数据分块装置,其特征在于,包括:获取模块:用于获取原数据流上滑动窗口的指纹值,所述滑动窗口的初始起始位置与所述原数据流的起始位置相同,所述滑动窗口的长度为。
9、预设长度;取模模块,用于采用所述滑动窗口的指纹值,分别对第1个模值至第N个模值进行取模,其中,将第i个模值向左扩展预设位数后得到第i+1个模值,所述i为大于等于1并且小于所述N的任一个自然数,所述N为模值的总个数;分块模块,用于对于每个模值,如果所述取模模块取模后的值为零,将所述原数据流中从第n层的上一个数据块的结束位置开始到所述滑动窗口的结束位置之间的数据作为当前数据块,所述当前数据块为第n层数据块;其中,所述n为大于等于1并且小于等于所述N的任一个自然数:写模块,用于在所述指纹字典中没有存储所述分块模块产生的当前数据块的指纹值时,将所述当前数据块存储到分块字典中,将所述当前数据块的指纹值和。
10、所述当前数据块在所述分块字典中的索引信息存储到所述指纹字典中,当所述n大于1时,在新数据流占用的空间中写入所述当前数据块,以覆盖在所述新数据流中所述当前数据块包括的所有第n-1层的数据块,当所述n等于1时,将所述当前数据块顺序写入所述新数据流占用的空间;所述写模块,还用于在所述指纹字典中存储有所述当前数据块的指纹值时并且所述n大于1时,在所述新数据流占用的空间中写入所述当前数据块的指纹值,以覆盖所述新数据流中所述当前数据块包括的所有第n-1层的数据块的指纹值,在所述指纹字典中存储有所述当前数据块的指纹值时并且当所述n等于1时,将所述当前数据块的指纹值顺序写入所述新数据流占用的空间;滑动模块,用。
11、于在所述写模块将所述分块模块产生的所述当前数据块或所述当前数据块的指纹值写入所述新数据流占用的空间后,将所述滑动窗口在所述原数据流上朝结束位置滑动所述预设长度,获取原数据流上滑动窗口的指纹值,使所述取模模块、所述写模块和所述滑动模块重复执行操作,直至所述滑动窗口的起始位置滑动至所述原数据流的结束位权 利 要 求 书CN 104348571 A3/3页4置。7.根据权利要求6所述的装置,其特征在于:当所述当前数据块包括第n-1层的数据块时,所述当前数据块在所述分块字典中的索引信息,根据所述当前数据块包括的第n-1层的数据块的索引信息确定。8.根据权利要求6或7所述的装置,其特征在于,还包括:定位。
12、模块,用于在所述写模块在新数据流的占用空间中写入所述当前数据块之前,和/或在所述写模块在所述新数据流的占用空间中写入所述当前数据块的指纹值之前,查找所述当前数据块包括的第n-1层的数据块在所述新数据流中的位置。9.根据权利要求8所述的装置,其特征在于,还包括:记录模块,用于在所述分块模块将所述原数据流中从第n层的上一个数据块的结束位置开始到所述滑动窗口的结束位置之间的数据作为当前数据块之后,记录所述当前数据块的序号,与所述当前数据块所在的层次、所述当前数据块在所述原数据流的位置和所述当前数据块在所述新数据流的位置之间的对应关系,并保存在位置记录表中;所述定位模块,具体用于根据所述当前数据块在所。
13、述原数据流中的位置和第n-1层数据块在所述原数据流中的位置,在所述位置记录表中,定位所述原数据流中所述当前数据块包括的第n-1层数据块的记录;从定位到的第n-1层数据块的记录中,获取所述当前数据块包括的第n-1层数据块在所述新数据流中的位置。10.根据权利要求6或7所述的装置,其特征在于,还包括:还原模块,用于将所述新数据流解析为所述原数据流的过程中,当在所述新数据流查找到指纹值时,在所述指纹字典中查找所述指纹值对应的数据块在所述分块字典中的索引信息;所述还原模块,还用于根据所述索引信息,在所述分块字典中查找所述指纹值对应的数据块,在所述指纹值在所述新数据流占用的空间中,将所述指纹值替换为查找。
14、到的数据块。权 利 要 求 书CN 104348571 A1/12页5数据分块方法及装置技术领域0001 本发明实施例涉及通信技术,尤其涉及一种数据分块方法及装置。背景技术0002 重复传输相同或相似的数据会浪费网络资源。采用冗余流量删除(Redundant Traffic Elimination,简称RTE)技术,可以实现协议无关的冗余消除,使数据通信变得更有效率。现有RTE技术通常采用基于模块化指数(Modular Exponential,MODP)的分块方法,根据文件内容对数据流进行分块。基于MODP的分块方法通过一个滑动窗口来实现,对一个给定的模值p(例如,10010),当滑动窗口的指。
15、纹值(例如,1111 0111 0010)对模值p取模后的值为0,则该滑动窗口末尾到上一个数据分块结束的位置之间的数据内容被划分为一个数据分块。当滑动窗口的指纹值(例如,1111 0111 0010)对模值p取模后的值不为0,滑动窗口向后移动一个字节或者自定义的一个长度。得到数据分块后,计算分块的指纹值,并在指纹字典中与已存储的数据分块的指纹值进行比较,如果检测到相同的指纹值,表示找到冗余的数据内容,则在新数据流中用一个标识符来替换该数据分块,以达到压缩流量的目的。如果没有检测到相同的指纹值,存储该数据分块及其指纹,以用于其后分块的冗余检测。用于替换数据分块的标识符的长度是固定的,如果对应的数。
16、据分块长度越大,则传输时节省的带宽也越大。但是,大的数据分块意味着去冗是粗粒度的,相同的数据分块难以重复出现,从而去冗率较低。0003 目前,提出了一种分层的分块方案,可同时实现粗粒度和细粒度的冗余消除,以提高去冗率。发送端采用基于MODP的分块方法对原始数据流进行分块,得到数据分块序列101:分块SA、SB、SC、SD、SE和SF,并替换为相应分块的标识符,例如,分块SA替换为标识符R11,得到标识符序列102(称为1层标识符):R11、R12、R13、R14、R15和R16。将标识符序列102视为一般的数据流,再次使用基于MODP的分块方法对标识符序列102进行分块,得到了标识符数据的两个。
17、数据分块,同样将其替换为2层的标识符序列103:R21和R22。例如,内容是标识符R11和、R12的分块替换为第2层标识符R21,内容是标识符R13、R14、R15和R16替换为2层标识符R22。从数据内容看,第2层标识符R21代表了数据分块SA和SB,R22代表了分块SC、SD、SE和SF。在发送端向接收端发送的新数据流中,尽可能用高层的标识符来替换数据分块,以节省带宽。0004 然而,上述层次式分块方案中,第2层标识符是对第1层标识符进行分块后产生的,必须在第2层标识符中增加指示位,用于指示该标识符是分块的标识符,还是标识符的标识符。否则,接收端无法还原出原始数据。因此,上述层次式分块方案。
18、,增加了标识符的开销,降低了去冗率。发明内 容0005 本发明实施例提供一种数据分块方法及装置,用以提高数据分块的去冗率。0006 第一方面,本发明实施例提供一种数据分块方法,包括:说 明 书CN 104348571 A2/12页60007 11.获取原数据流上滑动窗口的指纹值,所述滑动窗口的初始起始位置与所述原数据流的起始位置相同,所述滑动窗口的长度为预设长度;0008 12.采用所述滑动窗口的指纹值,分别对第1个模值至第N个模值进行取模,对于每个模值,如果取值后的值为零均执行步骤13和14,其中,将第i个模值向左扩展预设位数后得到第i+1个模值,所述i为大于等于1并且小于所述N的任一个自然。
19、数,所述N为模值的总个数;0009 13.将所述原数据流中从第n层的上一个数据块的结束位置开始到所述滑动窗口的结束位置之间的数据作为当前数据块,所述当前数据块为第n层数据块;其中,所述n为大于等于1并且小于等于所述N的任一个自然数:0010 在指纹字典中没有存储所述当前数据块的指纹值时,将所述当前数据块存储到分块字典中,将所述当前数据块的指纹值和所述当前数据块在所述分块字典中的索引信息存储到所述指纹字典中,当所述n大于1时,在新数据流占用的空间中写入所述当前数据块,以覆盖在所述新数据流中所述当前数据块包括的所有第n-1层的数据块,当所述n等于1时,将所述当前数据块顺序写入所述新数据流占用的空间。
20、;0011 在所述指纹字典中存储有所述当前数据块的指纹值时并且当n大于1时,在所述新数据流占用的空间中写入所述当前数据块的指纹值,以覆盖所述新数据流中所述当前数据块包括的所有第n-1层的数据块的指纹值,在所述指纹字典中存储有所述当前数据块的指纹值时并且当n等于1时,将所述当前数据块的指纹值顺序写入所述新数据流占用的空间;0012 14.将所述滑动窗口在所述原数据流上朝结束位置滑动所述预设长度,获取原数据流上滑动窗口的指纹值,重复执行步骤12-14,直至所述滑动窗口的起始位置滑动至所述原数据流的结束位置。0013 结合第一方面,第一种可能的实现方式中,将所述当前数据块存储到分块字典中,将所述当前。
21、数据块的指纹值和所述当前数据块在所述分块字典中的索引信息存储到所述指纹字典中,包括:0014 当所述当前数据块包括第n-1层的数据块时,将所述当前数据块的指纹值和所述当前数据块在所述分块字典中的索引信息存储到所述指纹字典中,其中,所述当前数据块在所述分块字典中的索引信息,根据所述当前数据块包括的第n-1层的数据块的索引信息确定;0015 当所述当前数据块不包括第n-1层的数据块时,将所述当前数据块存储到所述分块字典中,将所述当前数据块的指纹值和所述当前数据块在所述分块字典中的索引信息存储到所述指纹字典中。0016 结合第一方面,或结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,在。
22、新数据流的占用空间中写入所述当前数据块之前,和/或在所述新数据流的占用空间中写入所述当前数据块的指纹值之前,还包括:0017 查找所述当前数据块包括的第n-1层的数据块在所述新数据流中的位置。0018 结合第一方面,或结合第一方面的第一种和第二种可能的实现方式,在第三种可能的实现方式中,在所述将所述原数据流中从第n层的上一个数据块的结束位置开始到所述滑动窗口的结束位置之间的数据作为当前数据块之后,还包括:说 明 书CN 104348571 A3/12页70019 记录所述当前数据块的序号,与所述当前数据块所在的层次、所述当前数据块在所述原数据流的位置和所述当前数据块在所述新数据流的位置之间的对。
23、应关系,并保存在位置记录表中;0020 查找所述当前数据块包括的第n-1层的数据块在所述新数据流中的位置,包括:0021 根据所述当前数据块在所述原数据流中的位置和第n-1层数据块在所述原数据流中的位置,在所述位置记录表中,定位所述原数据流中所述当前数据块包括的第n-1层数据块的记录;0022 从定位到的第n-1层数据块的记录中,获取所述当前数据块包括的第n-1层数据块在所述新数据流中的位置。0023 结合第一方面,或结合第一方面的第一种至第三种可能的实现方式,在第四种可能的实现方式中,上述方法还包括:0024 将所述新数据流解析为所述原数据流的过程中,当在所述新数据流查找到指纹值时,在所述指。
24、纹字典中查找所述指纹值对应的数据块在所述分块字典中的索引信息;0025 根据所述索引信息,在所述分块字典中查找所述指纹值对应的数据块,在所述指纹值在所述新数据流占用的空间中,将所述指纹值替换为查找到的数据块。0026 第二方面,本发明实施例还提供一种数据分块装置,包括:0027 获取模块:用于获取原数据流上滑动窗口的指纹值,所述滑动窗口的初始起始位置与所述原数据流的起始位置相同,所述滑动窗口的长度为预设长度;0028 取模模块,用于采用所述滑动窗口的指纹值,分别对第1个模值至第N个模值进行取模,其中,将第i个模值向左扩展预设位数后得到第i+1个模值,所述i为大于等于1并且小于所述N的任一个自然。
25、数,所述N为模值的总个数;0029 分块模块,用于对于每个模值,如果所述取模模块取模后的值为零,将所述原数据流中从第n层的上一个数据块的结束位置开始到所述滑动窗口的结束位置之间的数据作为当前数据块,所述当前数据块为第n层数据块;其中,所述n为大于等于1并且小于等于所述N的任一个自然数:0030 写模块,用于在所述指纹字典中没有存储所述分块模块产生的当前数据块的指纹值时,将所述当前数据块存储到分块字典中,将所述当前数据块的指纹值和所述当前数据块在所述分块字典中的索引信息存储到所述指纹字典中,当所述n大于1时,在新数据流占用的空间中写入所述当前数据块,以覆盖在所述新数据流中所述当前数据块包括的所有。
26、第n-1层的数据块,当所述n等于1时,将所述当前数据块顺序写入所述新数据流占用的空间;0031 所述写模块,还用于在所述指纹字典中存储有所述当前数据块的指纹值时并且所述n大于1时,在所述新数据流占用的空间中写入所述当前数据块的指纹值,以覆盖所述新数据流中所述当前数据块包括的所有第n-1层的数据块的指纹值,在所述指纹字典中存储有所述当前数据块的指纹值时并且当所述n等于1时,将所述当前数据块的指纹值顺序写入所述新数据流占用的空间;0032 滑动模块,用于在所述写模块将所述分块模块产生的所述当前数据块或所述当前数据块的指纹值写入所述新数据流占用的空间后,将所述滑动窗口在所述原数据流上朝结束位置滑动所。
27、述预设长度,获取原数据流上滑动窗口的指纹值,使所述取模模块、所述写模说 明 书CN 104348571 A4/12页8块和所述滑动模块重复执行操作,直至所述滑动窗口的起始位置滑动至所述原数据流的结束位置。0033 结合第二方面,在第一种可能的实现方式中,当所述当前数据块包括第n-1层的数据块时,所述当前数据块在所述分块字典中的索引信息,根据所述当前数据块包括的第n-1层的数据块的索引信息确定。0034 结合第二方面,或结合第一方面的第一种可能的实现方式中,在第二种可能的实现方式中,所述装置还包括:0035 定位模块,用于在所述写模块在新数据流的占用空间中写入所述当前数据块之前,和/或在所述写模。
28、块在所述新数据流的占用空间中写入所述当前数据块的指纹值之前,查找所述当前数据块包括的第n-1层的数据块在所述新数据流中的位置。0036 结合第二方面,或结合第一方面的第一种和第二种可能的实现方式中,在第三种可能的实现方式中,所述装置还包括:0037 记录模块,用于在所述分块模块将所述原数据流中从第n层的上一个数据块的结束位置开始到所述滑动窗口的结束位置之间的数据作为当前数据块之后,记录所述当前数据块的序号,与所述当前数据块所在的层次、所述当前数据块在所述原数据流的位置和所述当前数据块在所述新数据流的位置之间的对应关系,并保存在位置记录表中;0038 所述定位模块,用于根据所述当前数据块在所述原。
29、数据流中的位置和第n-1层数据块在所述原数据流中的位置,在所述位置记录表中,定位所述原数据流中所述当前数据块包括的第n-1层数据块的记录;从定位到的第n-1层数据块的记录中,获取所述当前数据块包括的第n-1层数据块在所述新数据流中的位置。0039 结合第二方面,或结合第一方面的第一种至第三种可能的实现方式中,在第四种可能的实现方式中,所述装置还包括:0040 还原模块,用于将所述新数据流解析为所述原数据流的过程中,当在所述新数据流查找到指纹值时,在所述指纹字典中查找所述指纹值对应的数据块在所述分块字典中的索引信息;0041 所述还原模块,还用于根据所述索引信息,在所述分块字典中查找所述指纹值对。
30、应的数据块,在所述指纹值在所述新数据流占用的空间中,将所述指纹值替换为查找到的数据块。0042 本发明实施例提供的数据分块方法及装置,在原数据流上同一个滑动窗口的指纹值分别对一组模值,即第1个模值至第N个模值进行取模,根据不同模值的取模结果对原数据流进行不同层次的分块,因此,对于同一个滑动窗口的指纹值,可以对原数据流同时进行粗粒度和细粒度的分块。对于产生的数据块,如果指纹字典中存在该数据块的指纹值,根据该数据块所在的层次,确定是将该数据块的指纹值顺序写入新数据流占用的空间还是替换该数据块包括的下一层数据块的指纹值;如果指纹字典中不存在该数据块的指纹值,根据该数据块所在的层次,确定是将该数据块顺。
31、序写入新数据流占用的空间还是替换该数据块包括的下一层数据块,从而,避免了与原数据流相比在新数据流中出现多余的数据块和多余的数据块的指纹值的现象,实现了采用不同粒度的数据块生成新数据流,并且在新数据流中采用大数据块替换已有的小数据块的目的,提高了新数据流的去冗率。本实施例中每层数据块均是在原数据流上直接产生的分块,每个指纹值均是数据块的指纹值,不需要在说 明 书CN 104348571 A5/12页9指纹值中增加指示位,指示该指纹值是数据块的指纹值还是指纹值的指纹值,减少了数据块的指纹值的开销,提高了新数据流的去冗率。另外,由于不同的模值产生不同层次的数据块,每层数据块的产生不依赖于其它层的数据。
32、块,因此,对于同一个滑动窗口的指纹值,可以并发产生不同层次的数据块。附图说明0043 图1A为本发明实施例提供的一种数据分块方法流程图;0044 图1B为本发明实施例提供的滑动窗口示意图;0045 图2为本发明实施例提供的一种三层次式分块示意图;0046 图3为本发明实施例提供的分块字典和指纹字典的一种结构示意图;0047 图4为本发明实施例提供的分块字典和指纹字典的另一种结构示意图;0048 图5为本发明实施例提供的一种数据分块装置结构示意图;0049 图6为本发明实施例提供的另一种数据分块装置结构示意图。具体实施方式0050 本发明实施例可以适用于发送端向接收端发送数据流之前,发送端对原数。
33、据流进行分块,将产生的数据块组成新数据流,向接收端发送新数据流,从而节省传输带宽,提高传输效率。0051 图1A为本发明实施例提供的一种数据分块方法流程图。本实施例通过一组模值:第1个模值至第N个模值,对原数据流进行多层次的分块。其中,N为模值的总数,N为预设值,N为大于1的自然数。0052 如图1A所示,本实施例提供的方法包括:0053 步骤11:将滑动窗口从原数据流的起始位置朝原数据流的结束位置滑动预设长度,滑动窗口的初始起始位置与原数据流的起始位置相同。所述滑动窗口的长度为预设长度。0054 步骤12:获取原数据流上滑动窗口的指纹值,采用滑动窗口的指纹值,分别对第1个模值至第N个模值进行。
34、取模,对于每个模值,如果取值后的值为零均执行步骤13,然后执行步骤14。0055 第1个模值至第N个模值之间的关系如下:第1个模值p1为预设值,第1个模值向左扩展预设位数后得到第2个模值p2,第2个模值向左扩展预设位数后得到第3个模值p3将第i个模值向左扩展预设位数后得到第i+1个模值,以此类推,得到一组不同位数的模值p1,p2,pN,其中i为大于等于1小于N的任一个自然数,N为模值的总个数。举例来说,将模值p1=1100,向左扩展2位,得到模值p2=011100,将模值p2再向左扩展1位,得到模值p3=1011100。采用同样的方法可得到p4,pN。0056 步骤14:将滑动窗口在原数据流上。
35、朝结束位置滑动预设长度,获取原数据流上滑动窗口的指纹值,重复执行步骤12至步骤14,直至滑动窗口的起始位置滑动至原数据流的结束位置。0057 如图1B所示,将滑动窗口从原数据流的起始位置朝原数据流的结束位置滑动预设长度。采用当前滑动窗口的指纹值分别对第1个模值至第N个模值进行取模,并执行步说 明 书CN 104348571 A6/12页10骤13后,将滑动窗口朝原数据流的结束位置方向滑动预设长度,继续采用下一个滑动窗口的指纹值分别对第1个模值至第N个模值进行取模,并执行步骤13,直至滑动窗口的起始位置滑动至原数据流的结束位置。其中,原数据流在滑动窗口中的数据的指纹值称为滑动窗口的指纹值。数据的。
36、指纹值可以是数据的标识符,用于标识数据,不同数据的指纹值不相同。0058 采用滑动窗口的指纹值,分别对第1个模值至第N个模值进行取模,并执行步骤13时,可以按照从第1个模值至第N个模值的顺序,依次对每个模值进行取模,在取模后的值为零时执行步骤13;也可以先同时对N个模值进行取模,然后再按照从第1个模值至第N个模值的顺序,在取模后的值为零时执行步骤13。0059 如果滑动窗口的指纹值对第n个模值取模后的值为零,执行步骤13。在步骤13中产生数据块,并确定是将数据块还是数据块的指纹值写入新数据流占用空间中。步骤13包括以下操作。0060 步骤13包括:将原数据流中从第n层的上一个数据块的结束位置开。
37、始到滑动窗口的结束位置之间的数据作为当前数据块,当前数据块为第n层数据块;其中,n为大于等于1并且小于等于N的任一个自然数。0061 换言之,在上述步骤12中,如果滑动窗口的指纹值对第n个模值取模后的值为零,则从原数据流中产生一个数据块,当前数据块的起始位置为原数据流中第n层的上一个数据块的结束位置,当前数据块的结束位置为滑动窗口的结束位置。对于第n个模值产生的数据块,称为第n层的数据块。模值扩展的位数可以自定义,对当前模值扩展的位数影响下一层数据块的长度。0062 步骤13还包括:在指纹字典中没有存储当前数据块的指纹值时,将当前数据块存储到分块字典中,将当前数据块的指纹值和当前数据块在分块字。
38、典中的索引信息存储到指纹字典中;若n大于1,在新数据流占用的空间中写入当前数据块,以覆盖在新数据流中当前数据块包括的所有第n-1层的数据块,否则将当前数据块顺序写入新数据流占用的空间。0063 分块字典用于存储原数据流上产生的数据块,指纹字典用于存储分块字典中保存的数据块的指纹值和数据块在分块字典中的索引信息。举例来说,数据块在分块字典中的索引信息可以包括数据块的长度和数据块在分块字典中的位置信息。0064 从原数据流中产生一个数据块后,判断指纹字典中是否存储有当前数据块的指纹值。如果指纹字典中没有存储当前数据块的指纹值,可确定新数据流和分块字典中没有存储当前数据块,需要在新数据流和分块字典中。
39、写入当前数据块;如果指纹字典中存储有当前数据块的指纹值,可确定新数据流和分块字典中已存储有当前数据块,不需要在新数据流和分块字典中写入当前数据块。0065 第n个模值由第n-1个模值向左扩展固定位数后得到。对同一个滑动窗口的指纹值来说,如果滑动窗口的指纹值对第n个模值取模后的值为零,则滑动窗口的指纹值对第n-1个模值取模后的值也为零。而滑动窗口的指纹值对第n-1个模值取模后的值为零,滑动窗口的指纹值对第n个模值取模后的值不一定为零。对于同一个滑动窗口的指纹值,产生第n-1层的数据块后,并不一定会产生第n层的数据块,但产生了第n层数据块时,第n-1层的数据块一定已经产生。因此,从原数据流起始位置向结束位置移动滑动窗口时,与说 明 书CN 104348571 A10。