卷曲php通过cron作业每分钟在共享主机上刮取

问题描述:

我有一个棘手的问题。我在一个基本的共享主机上。我用curl和php创建了一个很好的抓取脚本。卷曲php通过cron作业每分钟在共享主机上刮取

因为使用Curl的多线程并不是真正的多线程,甚至是我使用的最好的卷曲多线程脚本,所以它们正在以1.5-2的速度加速刮擦,所以我得出结论:我需要运行大量我的PHP脚本每分钟执行一次cron任务(如50),与mysql表交互以便向我的客户提供快速的网页抓取。

我的问题是,当有大量的cron任务在同一时间运行时,我得到一个“Mysql服务器已经消失”。如果我减少cron任务的数量,它会继续工作,但总是很慢。

我也尝试了一种基于浏览器的解决方案,通过在每次完成时重新加载脚本。它运行的更好,但总是同样的问题:当我决定同时运行10次脚本时,它开始超载mysql服务器或web服务器(我不知道)

要解决这个问题,我已经获得了可以设置my.cnf的mysql服务器......但问题仍然大致相同。

========= 我的问题是:问题在哪里?表尺寸?我需要一个大型100MB的专用服务器。如果是的话,你确定它会解决这个问题,它的速度如何?通过了解我想要的提取速度变为近似100个URL(每秒在这个时候,它关系到每15 1 URL秒,慢得令人难以置信...)

  • 只有一个,而在脚本。它加载所有页面和preg匹配或dom数据并插入到mysql数据库中。

  • 我提取大量数据,这就是为什么一张表格快速包含数百万条目...但是当我删除它们,也许它会更快一些,但它总是同样的问题:无法大规模运行并行的任务以加速这个过程。

  • 我不认为问题来自我的脚本。在所有情况下,即使完美优化,我也不会像我想要的那样快。

  • 我相关捐资通过使用脚本withotu代理刮,但不同的是非常small..not显著..

我的结论是,我需要使用专用的服务器,但我不如果我不确定它会解决问题,并且我将能够在mysql db上运行这些大量的cron任务/调用,而不会出现任何问题。

+0

感谢@crush但我增加了MAX_USER_CONNECTIONS限制500(30是默认值),也是CONNECT_TIME ......但始终不变的缓慢的问题。你认为这个问题可以来自我的这个小型共享主机吗?或者你确定它是与MySQL相关的问题? – Anver 2013-02-12 16:38:31

+0

你可以在家里简单地设置你自己的linux主机并在那里测试你的脚本,而不必承诺一个完整的托管系统。 – 2013-02-12 17:02:45

这很容易...从来没有在同一个URL上发送多线程。可能是许多不同的URL。但是请尽量尊重某个超时。你可以做到这一点:

sleep($random); $random = random(15, 35) ; // in seconds