php- web crawling:讨论“索引唯一URL” - 性能问题

时间:2013-03-24 22:55:59

标签: php mysql web-crawler large-data

(请原谅我的英语不好)

我正在特定范围的网址上运行自定义网络抓取工具。 我正在测试它,到目前为止一切都很完美..

最近我注意到我想要讨论的性能问题 - 机器人正在抓取被编入索引的页面 在url_pool表中,在目标页面中搜索机器人保存的目标内容 如果他们不在表中,他们找到的页面链接... 我在操作多个抓取脚本(同时)时遇到了一些冲突问题 我修好了。

在抓取大约1.5M页面之后,我的url_pool表包含了几乎包含的5M行 网址,一些“标志”,网址哈希(simhash - 32位数字),域名等...

mysql db表是带有大缓冲区的innodb,并根据搜索查询编制索引。 我在监视机器人的性能时注意到我使用的“检查是否存在”功能 防止我的表中的重复网址变得越来越慢。 我知道显而易见的是,表格越大,搜索它所需的时间越长,但看到执行时间增加似乎为时尚早。

如果我总结一下表现:

  • url_pool~100K ROWS - >整个抓取过程为0.8秒(1页)。
  • url_pool~800K ROWS - > 1.1s
  • url_pool~1.8M ROWS - > 1.9s
  • url_pool~3.5M ROWS - > 3.2S
  • url_pool~5M ROWS - > 4.8s

另一个重要的事实是,在检查表中是否存在url而不是使用文本进行搜索时,我正在创建哈希,然后将其与表中的其他人匹配,我遵循了我在早期阶段收到的建议构建爬虫,并发现它提高了性能。

现在,每页只需1.9秒(考虑一起运行4个机器人),但5s太慢了......

你能建议我吗?

修改

更多信息:

我使用了:

SELECT EXISTS(SELECT 1 FROM table1 WHERE ...)

对于索引列的搜索查询(在文档中建议更快的结果), 表结构是一个非常简单的表

  • id

  • link(varchar 400)

  • link_simhash(varchar 32)

  • domain(varchar 200)

  • flag 1(bool)

  • flag 2(boll)

  • bot_visit(int)

  • date_found(日期)

  • date_crawled(date)

正如我所说的那里指的是链接哈希。

任何想法???没有人???什么问题我的问题???

0 个答案:

没有答案