网络机器人的URL作业管理问题
我的SPIDER程序把网页截取到的URL都保存在一些队列里,也就是计算机内存里喇,但是随着访问的页面增加,保存的URL数量会很庞大,内存最终耗尽。如果我用数据库(例如MYSQL)保存相关的URL记录,当数据量很大时,查询效率会怎样呢?查询时间会不会变成SPIDER的瓶颈了?或者有没有更好的解决办法?
[解决办法]
其实URL作业管理的本质,一个就是对解析出来的URL进行判断,是否已经存在,另外一个就是管理URL,因为如果数据量大了的话,不可能所有的URL全放在内存里,这个可以用缓存技术,你要下载网页的URL放在一个队列里,一批一批的从磁盘读取,然后下载网页,新产生的URL到了一定的数量再写到磁盘里,可减少i/o次数。对于URL重复判断问题,可参考http://blog.sina.com.cn/s/blog_53985a3f01000a7x.html【bloom filter算法】,虽然有误差,但是很小。基本想法是多个hash函数,然后把一个URL经过hash函数后,映射到bit中(不是字节,)查询的时候如果某个url所对应的hash值全为1,(有误差)认为存在改URL。