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

31 天前
 cat
有几十万张图片和视频需要去重,日后会持续增加,之前测了 md5 和 sha1 ,虽然也能接受但还是希望更快一些
Cursor 告诉我可以用 xxhash ,测了一下性能确实提升了几十倍,但据说碰撞率比 md5/sha1 更高一些

想问问有没有大佬有没有遇到碰撞的情况?

另外由于有的视频非常大,受限于磁盘性能,无论 md5 sha1 还是 xxhash 都要浪费很多时间
看到了很多取若干个点进行采样的处理方式,来提升效率

想问问这类处理方式,对照片/视频这类文件,碰撞率如何?

PS. 文件来源都是可靠的,不存在恶意碰撞的情况
885 次点击
所在节点    问与答
6 条回复
fangpeishi
31 天前
如果重复率不高,可以考虑先用弱 checksum 算法(例如 adler-32 )走一遍,碰撞了再用强算法走一遍(例如 md5 ,sha1 )。参考 rsync 的做法。
processzzp
31 天前
对于你的用途,xxhash3 够了,放心用,还不放心的话就对重复文件再算一遍 SHA-256 或者 SHA3-256 ,绝对保险
tool2dx
31 天前
对视频进行关键帧去重呗,全量读取肯定慢,改啥算法都没用。
lsylsy2
31 天前
都是取舍,换哈希或者采样都是牺牲碰撞率来换取性能。
解决方法很简单:先用快的来,如果发现碰撞了,再只对有重复的算一遍 sha1
cat
31 天前
@fangpeishi @processzzp @lsylsy2 好主意,我怎么忘了这招,先快的来一遍,碰撞了再换准确性更高的
pxiphx891
31 天前
首先,如果两个文件 size 不一样,这两个文件一定不相同,因此可以先根据 size ,做一个 map ;
其次,同一个 size 下的,图片有一个「感知哈希算法」,可以算出一个 64 位向量;
如果 size 相同,向量也相同,再算个 md5 ,就行了

如果是视频,可以用 ffmpeg 提取 10 个 I 帧出来,再比较

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1092469

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX