rqxiao
V2EX  ›  Java

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

  •  
  •   rqxiao · Apr 11, 2022 · 3499 views
    This topic created in 1672 days ago, the information mentioned may be changed or developed.
    背景:
    对某一个网站进行定时爬虫,每次都会爬下来大量的文件,每次都会将文件记录下来,也可以顺便记录文件 md5 。
    记录存储在 mysql ,es ?
    在 n 次的爬虫,需要与第 n-1 次的爬虫 两次爬下来的所有文件进行对比,把有变化的文件进行分析

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

    不想躺:

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

    这 4 个步骤相当于剪枝,性能完爆 md5 。
    quxinna
    quxinna
    Apr 11, 2022
    4
    beyond compare
    mengzhuo
    mengzhuo
    Apr 11, 2022
    5
    diff 算法,https://github.com/google/diff-match-patch

    而且存啥 md5……直接 etag 都够用了,连读取都不用
    polarbear007
    polarbear007
    Apr 11, 2022❤️1
    6
    这种情况,记录 md5 可能不太合适吧。 因为要计算 md5 的话,你需要先把文件下载下来才行(除非网站有提供每个文件的 md5 值)。 看看有没有办法在下载文件之前,先对页面上的其他信息进行分析,确认文件是否下载过。比如文件名,所在页面 id 之类的。
    tidos
    tidos
    Apr 11, 2022❤️1
    7
    Merkle tree. DynamoDB 用的就是这个
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   753 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 17:33 · PVG 01:33 · LAX 09:33 · JFK 12:33
    ♥ Do have faith in what you're doing.