Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何管理爬虫URL边界?_Java_Multithreading_Web Crawler_Forkjoinpool - Fatal编程技术网

Java 如何管理爬虫URL边界?

Java 如何管理爬虫URL边界?,java,multithreading,web-crawler,forkjoinpool,Java,Multithreading,Web Crawler,Forkjoinpool,伙计们 我有以下代码在我的爬虫上添加访问过的链接。 提取链接后,我有一个for循环,该循环遍历每个href标签 在我访问了一个链接并打开它之后,我将把URL添加到上面定义的已访问链接集合变量中 private final Collection<String> urlForntier = Collections.synchronizedSet(new HashSet<String>()); private final Collection urlForntier=Col

伙计们

我有以下代码在我的爬虫上添加访问过的链接。 提取链接后,我有一个for循环,该循环遍历每个href标签

在我访问了一个链接并打开它之后,我将把URL添加到上面定义的已访问链接集合变量中

private final Collection<String> urlForntier = Collections.synchronizedSet(new HashSet<String>()); 
private final Collection urlForntier=Collections.synchronizedSet(new HashSet());
爬虫程序的实现是mulithread,假设我访问了100000个URL,如果我没有终止爬虫程序,它将一天比一天增长。它会造成内存问题吗?请问,在不造成线程间不一致的情况下,我必须刷新变量吗


提前谢谢

现代爬行系统最有用的方法是使用数据库

此解决方案明显比HashSet慢。这就是为什么您可以利用不同的缓存策略,如a,甚至s

但包括URL的特定性质,我想推荐一种数据结构,它为您提供了许多选项,可以通过URL字符串进行操作和搜索。(有关java实现的讨论可在此Stackoevrflow上找到)

  • 根据问题,我建议使用来代替集合的使用。它是用于数据结构存储的内存数据库,支持所有标准数据结构,可以超快速地插入和检索数据。在您的情况下,您可以使用命令检查集合中是否存在密钥)

  • 也是很好的探索


  • 谢谢杜菲!我想知道变量什么时候会被清除,如果我运行10000年,那么我需要多少内存?如何解决这个问题?即使我用了三个句子suggested@danielad根据Google的开放统计,url的平均长度是90个符号,因为今天Google报告了大约500亿(5*10^10)个网页,一些Trie实现声明我们可以保持这种结构,内存效率为O(N)。简单乘法对现代计算机来说不是那么大的数字