为抓取工具抓取的URL生成唯一哈希

问题描述 投票:1回答:2

我正在实现抓取工具,我想为系统抓取的每个URL生成唯一的哈希码。这将帮助我检查重复的URL,匹配完整的URL可能是一项昂贵的工作。抓取工具每天将抓取数百万个页面。因此,此哈希函数的输出应该是唯一的。

java hash web-crawler
2个回答
1
投票

除非您提前知道每个地址,并且所说的地址集恰好有一个完美的哈希,从理论上讲,这项任务是不可能的。

根据信鸽原理,无论您使用哪种技术进行转换,都必须至少存在两个具有相同Integer值的字符串,考虑到Integers的范围是有限的,而字符串则没有。尽管实际上地址不是无限长,但是您仍将获得映射到相同哈希值的多个地址。从理论上讲,有无数个字符串将映射到相同的Integer值。

因此,总而言之,您应该只使用标准的HashMap

此外,您还需要担心以下问题:

www.stackoverflow.comhttp://www.stackoverflow.comhttp://stackoverflow.com stackoverflow.com ...

都是等效的,因此您需要先进行规范化,然后再进行哈希处理。虽然有些算法首先给出集合会产生完美的哈希,但我怀疑这对于您的目的是必要的。


1
投票

[我认为解决方案是首先通过从开头和结尾部分(例如http://http://www./)中删除第一部分(例如?...#...)来规范化URL。清理之后,您应该拥有一个干净的域URL,并且可以对其进行哈希处理。

但是最好的解决方案是使用bloomfilter(概率数据结构),它可以告诉您URL是可能访问过保证未访问过] >>

© www.soinside.com 2019 - 2024. All rights reserved.