有人将 xxhash 投入生产应用吗?用来校验文件唯一性,是否可靠 ?还有没有其它方法? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cat
V2EX    问与答

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

  •  
  •   cat 325 天前 1320 次点击
    这是一个创建于 325 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有几十万张图片和视频需要去重,日后会持续增加,之前测了 md5 和 sha1 ,虽然也能接受但还是希望更快一些
    Cursor 告诉我可以用 xxhash ,测了一下性能确实提升了几十倍,但据说碰撞率比 md5/sha1 更高一些

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

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

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

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

    如果是视频,可以用 ffmpeg 提取 10 个 I 帧出来,再比较
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2743 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 14:49 PVG 22:49 LAX 07:49 JFK 10:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86