爆栈代码方案 – 如何实现快速文件比较和去重

现有方案

我们判断文件是否重复,一般是给两个需要比较的文件进行哈希,然后比较哈希值。

这个做法有个问题,就是比较慢:

  • 如果文件大小不一样,那还需要比较吗?
  • 如果文件的一部分不一样,那还需要比较吗?

新的方案

步骤如下:

  1. 把文件列表按文件大小分组,大小不一的文件会被认为不一样,尽管有可能差异只是空格或者空行(回车换行)
  2. 快速比较文件头、尾、中间的三个部分可定义的一定数量的内容,如果不一样,则会视为不是一样的文件
  3. 渐进式比较区块,任何一个区块的哈希值不一样,则文件为不一样

事实上,BT等下载引擎也是用了类似的办法。

方案特色

  • 支持并行计算,使用MapReduce方式,分而治之,加快比较速度
  • 支持保留比较结果,以备以后和别的文件比较,而且这个比较逻辑和批量比较是一致的

项目开源,地址在这里

 

爆栈之旅

是否想技术水平快速提升?是否希望快速成为公司的技术骨干?

核心价值
  • 把我这10多年来所学到的知识、总结的经验、吸取的教训分享出来
  • 针对不同的学生量身定制规划学习成长路线、1对1个人指导、代码审阅等
  • 解答各种技术问题
  • 为公司提供技术解决方案

请查看本站右边的信息联系我。

版权所有

所有文章内容版权所有,任何形式的转发/使用都必须先征得本站书面同意。本站保留一切追究的权利。