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

2022-04-11 19:51:10 +08:00
 rqxiao
背景:
对某一个网站进行定时爬虫,每次都会爬下来大量的文件,每次都会将文件记录下来,也可以顺便记录文件 md5 。
记录存储在 mysql ,es ?
在 n 次的爬虫,需要与第 n-1 次的爬虫 两次爬下来的所有文件进行对比,把有变化的文件进行分析

有什么比较好的办法 后端是 java
2005 次点击
所在节点    Java
7 条回复
raaaaaar
2022-04-11 20:22:40 +08:00
redis hash ,文件名 -> md5 ?
fishCatcher
2022-04-11 20:31:25 +08:00
量很大的话可以考虑一下 Merkle tree
documentzhangx66
2022-04-11 20:44:06 +08:00
想躺就直接 md5 然后存 mysql 。

不想躺:

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

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

而且存啥 md5……直接 etag 都够用了,连读取都不用
polarbear007
2022-04-11 21:28:10 +08:00
这种情况,记录 md5 可能不太合适吧。 因为要计算 md5 的话,你需要先把文件下载下来才行(除非网站有提供每个文件的 md5 值)。 看看有没有办法在下载文件之前,先对页面上的其他信息进行分析,确认文件是否下载过。比如文件名,所在页面 id 之类的。
tidos
2022-04-11 21:39:54 +08:00
Merkle tree. DynamoDB 用的就是这个

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

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

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

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

© 2021 V2EX