2012-02-14 140 views
1

我想建立一个服务,将按一定的时间间隔收集一些数据形式的网络,然后解析这些数据,最后解析结果 - 执行专用程序。服务运行的典型模式:如何在远程服务器上实现在php脚本执行管理器

  1. 申请项目清单进行更新,以列出的项目
  2. 下载数据
  3. 检查什么的还没有更新
  4. 更新数据库
  5. 包含更新
  6. 过滤数据(取只有最高优先级的更新)
  7. 执行一些过程来分析更新
  8. 过滤包含更新的数据(仅获得中等优先级两者均更新)
  9. 执行一些程序来解析... ... 如果洁具不被更新的这么多数据 ...

一切都将是简单的。 有太多的数据需要更新,以至于从1到8的每一步(可能除了1)脚本将由于限制60秒的最大执行时间而失败。即使有增加的选择,这也不是最佳的,因为该项目的主要目标是首先提供最高优先级的数据。不幸的是,定义信息的优先级是基于获取大部分数据并在已存储数据和传入(更新)数据之间进行大量比较。

我可以从服务速度中退出,至少获得高优先级更新,并等待更长的时间。 我想过编写一些父母脚本(经理)来控制服务的每一步(1-8),也许通过执行其他脚本? 经理应该能够恢复未完成的步骤(脚本)以完成。有可能以这种方式编写每一步,它将执行一小部分代码,并在完成之后标记这一小部分工作,即在SQL DB中完成。在经理恢复后,由于超过max exec,步骤(脚本)将继续形成由服务器终止的点。时间。

已知平台的限制: 远程服务器的,不可改变的最大执行时间,通常限制在解析的同时一个脚本,缺乏访问许多Apache的功能,和所有其他限制典型的远程服务器

要求: 除了调用特定的脚本之外,某些类型的管理器是强制性的,这个父进程必须写一些关于激活的脚本的注释。

经理可以通过crul调用,一分钟间隔就足够了。不幸的是,在这里并不是一个选项,因为每个服务步骤都需要打电话列表。

我还考虑为服务的每一步获取新的远程主机,并由另一个远程主机控制它们,可以调用它们并要求使用ie SOAP来完成工作,但是这种情况出现在我希望的解决方案列表的末尾因为它没有解决最大执行时间的问题,并且通过全球网络带来大量数据交换是处理数据的最慢的方式。

有关如何实施解决方案的任何想法?

回答

0

我不明白他们自己的步骤2和步骤3是如何执行超过60秒的。如果您在步骤2中使用curl_multi_exec,它将在几秒钟内运行。如果您在步骤3中将脚本超过60秒,您将获得“超出内存限制”而不是更早。

所有这一切让我得出一个结论,那就是剧本是未优化。而解决办法是:

  1. 把任务分成(一)什么更新和保存在数据库中(比如说标志1什么更新,0什么不可以); (b)遍历需要更新并更新它们的行,将标志设置为0.在约50秒刚刚关闭(假设脚本每隔几分钟运行一次,这将起作用)。

  2. 获得第二台服务器,并设置适当的执行时间以运行脚本数小时。由于它可以访问你的第一个数据库(而不是通过http调用),它不会成为主要的流量增长点。

相关问题