V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rqxiao
V2EX  ›  Java

大量文件如何比较文件内容是否不同

  •  
  •   rqxiao · 2022-04-11 19:51:10 +08:00 · 2204 次点击
    这是一个创建于 958 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景:
    对某一个网站进行定时爬虫,每次都会爬下来大量的文件,每次都会将文件记录下来,也可以顺便记录文件 md5 。
    记录存储在 mysql ,es ?
    在 n 次的爬虫,需要与第 n-1 次的爬虫 两次爬下来的所有文件进行对比,把有变化的文件进行分析

    有什么比较好的办法 后端是 java
    7 条回复    2022-04-11 21:39:54 +08:00
    raaaaaar
        1
    raaaaaar  
       2022-04-11 20:22:40 +08:00   ❤️ 1
    redis hash ,文件名 -> md5 ?
    fishCatcher
        2
    fishCatcher  
       2022-04-11 20:31:25 +08:00 via iPhone   ❤️ 1
    量很大的话可以考虑一下 Merkle tree
    documentzhangx66
        3
    documentzhangx66  
       2022-04-11 20:44:06 +08:00   ❤️ 1
    想躺就直接 md5 然后存 mysql 。

    不想躺:

    1.文件尺寸。
    2.文件固定位置抓 4 个点。
    3.文件固定位置抓 8 个点。
    4.xxHash 。

    这 4 个步骤相当于剪枝,性能完爆 md5 。
    quxinna
        4
    quxinna  
       2022-04-11 20:47:01 +08:00
    beyond compare
    mengzhuo
        5
    mengzhuo  
       2022-04-11 20:54:06 +08:00
    diff 算法,https://github.com/google/diff-match-patch

    而且存啥 md5……直接 etag 都够用了,连读取都不用
    polarbear007
        6
    polarbear007  
       2022-04-11 21:28:10 +08:00   ❤️ 1
    这种情况,记录 md5 可能不太合适吧。 因为要计算 md5 的话,你需要先把文件下载下来才行(除非网站有提供每个文件的 md5 值)。 看看有没有办法在下载文件之前,先对页面上的其他信息进行分析,确认文件是否下载过。比如文件名,所在页面 id 之类的。
    tidos
        7
    tidos  
       2022-04-11 21:39:54 +08:00   ❤️ 1
    Merkle tree. DynamoDB 用的就是这个
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1099 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 23:30 · PVG 07:30 · LAX 15:30 · JFK 18:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.