有人将 xxhash 投入生产应用吗?用来校验文件唯一性,是否可靠 ?还有没有其它方法?

查看 52|回复 6
作者:Cat   
有几十万张图片和视频需要去重,日后会持续增加,之前测了 md5 和 sha1 ,虽然也能接受但还是希望更快一些
Cursor 告诉我可以用 xxhash ,测了一下性能确实提升了几十倍,但据说碰撞率比 md5/sha1 更高一些
想问问有没有大佬有没有遇到碰撞的情况?
另外由于有的视频非常大,受限于磁盘性能,无论 md5 sha1 还是 xxhash 都要浪费很多时间
看到了很多取若干个点进行采样的处理方式,来提升效率
想问问这类处理方式,对照片/视频这类文件,碰撞率如何?
PS. 文件来源都是可靠的,不存在恶意碰撞的情况
fangpeishi   
如果重复率不高,可以考虑先用弱 checksum 算法(例如 adler-32 )走一遍,碰撞了再用强算法走一遍(例如 md5 ,sha1 )。参考 rsync 的做法。
processzzp   
对于你的用途,xxhash3 够了,放心用,还不放心的话就对重复文件再算一遍 SHA-256 或者 SHA3-256 ,绝对保险
tool2dx   
对视频进行关键帧去重呗,全量读取肯定慢,改啥算法都没用。
lsylsy2   
都是取舍,换哈希或者采样都是牺牲碰撞率来换取性能。
解决方法很简单:先用快的来,如果发现碰撞了,再只对有重复的算一遍 sha1
Cat
OP
  
@fangpeishi @processzzp @lsylsy2  好主意,我怎么忘了这招,先快的来一遍,碰撞了再换准确性更高的
pxiphx891   
首先,如果两个文件 size 不一样,这两个文件一定不相同,因此可以先根据 size ,做一个 map ;
其次,同一个 size 下的,图片有一个「感知哈希算法」,可以算出一个 64 位向量;
如果 size 相同,向量也相同,再算个 md5 ,就行了
如果是视频,可以用 ffmpeg 提取 10 个 I 帧出来,再比较
您需要登录后才可以回帖 登录 | 立即注册

返回顶部