同时运行php脚本

时间:2010-07-27 08:15:48

标签: php shell concurrency

我正在尝试使用脚本处理大量的dta记录,让我们将其命名为process.php,问题是我有一个庞大的数据集,以便更快完成工作,我想运行多个实例这个脚本与

  

/ usr / bin / php process.php start_record end_record&

所以我会让它们像

一样并行运行
  

/ usr / bin / php process.php 0 10000&

     

/ usr / bin / php process.php 10000 20000&

     

/ usr / bin / php process.php 20000 30000&

     

/ usr / bin / php process.php 30000 40000&

...

我认为这样可以更快地完成工作,但是在尝试之后我没有发现它更快,相反,速度似乎非常接近线性方式(没有并发)。我不知道是不是因为process.php正在将记录插入到innodb表中或者是什么。

任何想法。

2 个答案:

答案 0 :(得分:5)

如果您需要将行插入数据库,它将完全没有区别。这是数据库的瓶颈,而不是PHP脚本。您仍然只能一次插入一行,因此每个并发实例只需要彼此等待。

答案 1 :(得分:1)

并发运行对您没有帮助,因为插入本身就是瓶颈。

如果要基于同一查询将数据插入表中,可以进行一些优化。但一般来说,插入是昂贵的,如果你有一个大的数据集需要时间。

  1. 如上所述,使用像PDO这样的库来利用预准备语句。
  2. 如果问题是插入块阻止了相关Web应用程序的性能,您可以将插入排队到某种类型的脚本中,这些脚本一次运行一个块作为单个插入,如下所示:{{ 3}}
  3. 这些可能无济于事,但它们可能会有所帮助。