前言之前毕设有用到文件增量同步,于是乎就记录一下 。
场景在A和B两个不同端之间有相似度很高的文件,同时这个文件又比较大 。如果通过全量传输来更新,http传输量很大,非常不友好 。那么可以通过某些手段,只上传修改的内容,其余内容复用旧文件 。
重复块检测技术
- 固定分块检测技术:固定分块检测的话,如果某一区域发生变化,之后分块将均无法检测命中块,命中率低且局限性大 。
- 可变块检测技术:可变块很好解决上面的问题,例如CDC算法 。不过好像没有通用的解决方案,我是没找到 。
- 滑动块检测技术:采用固定块,滑动检测是否命中,命中率高,但是相似度越低的文件,越耗时,例如:rsync增量传输算法,也是本文的讲解目标
首先计算当前块的弱摘要,若弱摘要命中,则计算强摘要是否相同;若均相同,则该区域是相同块;两个相同块之间的区域,则是差异块 。
- 弱摘要采用Adler-32,生成速度快,但是可能出现重复 。
- 强摘要采用md5,生成慢,但是有保障 。
文章插图
推荐阅读
- 本地Windows系统如何向Windows云服务器上传文件
- 运用sed命令高效地删除文件的特定行
- 多个相同excel批量处理?1个Excel文件种有多个工作表,需要合并为1个工作表?
- Python自动整理文件夹
- 交换机和路由器的文件管理配置,可以修改设备flash文件
- 数据库不能存储Emoji表情,又不想改配置文件,怎么办?
- 合并和排序 Linux 上的文件
- 谁删了我的文件?Linux下用bpftrace轻松抓到元凶
- Matlab如何调用动态连接库DLL文件的函数?
- 如何清除文件中的数据?