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

灵感之源 发布于 2月前
无人欣赏。

来自 爆栈网 kayow.com

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

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

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

新的方案 步骤如下:

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

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

方案特色

  • 支持并行计算,使用MapReduce方式,分而治之,加快比较速度
  • 支持保留比较结果,以备以后和别的文件比较,而且这个比较逻辑和批量比较是一致的 项目开源,地址请看来源文章
暂无回复
登录 或者 注册