现有方案
我们判断文件是否重复,一般是给两个需要比较的文件进行哈希,然后比较哈希值。
这个做法有个问题,就是比较慢:
- 如果文件大小不一样,那还需要比较吗?
- 如果文件的一部分不一样,那还需要比较吗?
新的方案
步骤如下:
- 把文件列表按文件大小分组,大小不一的文件会被认为不一样,尽管有可能差异只是空格或者空行(回车换行)
- 快速比较文件头、尾、中间的三个部分可定义的一定数量的内容,如果不一样,则会视为不是一样的文件
- 渐进式比较区块,任何一个区块的哈希值不一样,则文件为不一样
事实上,BT等下载引擎也是用了类似的办法。
方案特色
- 支持并行计算,使用MapReduce方式,分而治之,加快比较速度
- 支持保留比较结果,以备以后和别的文件比较,而且这个比较逻辑和批量比较是一致的
项目开源,地址在这里。
爆栈之旅
是否想技术水平快速提升?是否希望快速成为公司的技术骨干?
核心价值
-
把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
-
针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
-
解答各种技术问题
-
为公司提供技术解决方案
请查看本站右边的信息联系我。
版权所有
所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。