文件差异拷贝实现部署

 

文件差异拷贝实现部署

第一部分 概述

一、校验码方案

弱校验(WC):快速hash函数(码大小:4字节)

强校验(SC)Crc16校验(码大小:2字节)

二、数据块大小定义

Ø  基准 100M 文件:WC块大小为1000字节;SC块大小为10000字节

Ø  对于 1G 10G 10M 文件:基准大小*(文件大小/基准文件)

三、hash码排序

Ø  hash索引排序:WC(高16+16/2

三、索引组织方式与存储方式

Ø  用链表形式组织,组织方式如图1 所示:

13582

23582

….

60223

5#16#104#3563#...........

121#163#1034#35363#...........

1321#1633#10334#333623#...........

每个索引存有一个字符指针,保存了相同散列值的WC码的位置,每个位置都用#符隔开,在实际执行比对前将该结构导入内存,提高执行效率。

四、码文件组织形式

Ø  10WC后跟1SC,将索引追加到文件末尾。

五、辅助结构

Ø  文件当前位置指针CurrentPtr

Ø  查找浮标指针FlowPtr

Ø  码文件当前指针NowPtr

Ø  码文件查找指针SearchPtr

Ø  时间信号量TimeSign

Ø  结果信息链表InfoList

Ø  索引链表计数器IndexCount

Ø  跳跃计数器JumpCount

Ø  中断信号量BreakSign

六、涉及的算法

Ø  二分插入

Ø  二分查找

Ø  [C1*((squart(5)-1)/2)exp(n)+C2*((squart(5)+1)/2)exp(n)]跳跃

Ø  递归回溯

Ø  四向轮询hash

Ø  递归Crc强校验

七、文件比对

1)插入情形

当比对执行到有块对应的WC不一致时,执行轮询hash,每轮询hash一次,将生成的hash码执行索引hash,考虑当前的码文件位置以及文件的当前位置,将索引值相同的且在当前位置附近的源hash码取出对比,如果一样,然后再生成SC,与原SC进行对比如果一致,那么偏移量就是插入的字节数。否则,如果在比对完附近所有hash不一致或SC不一致后,则进行跳跃,在下一个跳跃出重复上述算法,直到最后一次跳跃结束或则文件结束。在每次跳跃查找比对成功后,执行回溯算法,将当前一致的前面所有WCSC相同的块找出,直到回溯到有不相同的块偏移处,算出始末的偏移量就是要插入的块。

2)删除情形

比对当前WC时不一致,接下来算法与插入类似,没有附近hash码与原hash码匹配时,则将这些块定位为删除块,不足的块删除,然后再插入偏移字节。

3)替换情形

当比对hash码时候不同,其后的WCSC都相同时候,就将该就是替换块。

4)追加情形

当旧文件已经比对结束,新文件没有时,将新文件末尾追加到旧文件。

5)截断情形

刚好与追加情形相反。

八、文件更新

用链表信息,新文件信息,旧文件重构文件,同时删除无用的信息。(考虑到性能使用文件内存映射)

九、新的码文件生成

       根据新文件执行WCSC,写入对应的码文件。

第二部分 结构图

差异拷贝模块层次模型图:

核心伪代码:

跳出条件:比对码时有一方没有码时

1)执行比对循环操作

跳出条件:没有原数据

2)执行新的码生成循环

21)将生成的码和旧的码比对

22)如果相等,继续;两者码偏移,当新的码没有时,生成后续

23)如果不相等

231)查看后续的3个码是否一致(包括CRC校验)

232)如果后续的3个码一致,则将该码前面的部分定位为替换

233)如果后续的3个码不一致,则执行轮循(从该码开始偏移一个字节)

234)将轮循的码和该码(以及后续3个)进行对比,如果相等,则比较后续的3个码是否一致,然后做Crc校验。(从0开始)

2341)如果比较一致,将前面的偏移量作为插入

2341)如果不一致则计算该轮询码的hash值,然后将hash码在hash表中查找,

23411)如果找到,则找到原code码,进行比较,如果不等,则继续下一个,如果都不相等,接着做下次轮询。

23411)如果相等,则取后续的比较,如果相等,则轮询结束,执行回溯,否则继续轮循。

234111)将当前位置前面的进行比对,知道有不一致的地方,结束。

23412)如果轮循到一定次数时候还没有匹配,则执行跳跃,在下一个位置,接着偏移量执行轮循。(跳到最远时,没有匹配的话,结束本轮轮询)

23413)比较两者偏移,确定删除,与插入的信息。

3)执行追加与截断情形

4)根据信息,将要插入的数据,以及替换的,追加的数据全部写入文件

5)将信息链表写入文件尾部

 

详细的文档可以通过用email发送,请留言与留下email地址

 

参考文献:高效查找与同步算法 作者:澳大利亚:Andrew Tridgell

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值