使用phpcassa从文件批量加载到Cassandra的问题

时间:2011-06-03 07:50:14

标签: php cassandra phpcassa

我正在尝试使用phpcassa将文本文件中的1000000条记录加载到Cassandra。但是在加载过程的中途我得到了以下错误。

  

PHP致命错误:第759行/usr/share/php/phpcassa/columnfamily.php超过30秒的最长执行时间**

如何增加执行时间?我是否必须更改columnfamily.php中的任何参数? 请在下面找到我的代码。

 <?
     require_once('phpcassa/connection.php');
     require_once('phpcassa/columnfamily.php');
     try {
     $servers = array("127.0.0.1:9160");
     $pool = new ConnectionPool("Keyspace1", $servers);
     $column_family = new ColumnFamily($pool, 'Product');
     $cnt=0;
     $files = fopen("dump.txt", "r");

     $mtime = microtime();
     $mtime = explode(" ",$mtime);
     $mtime = $mtime[1] + $mtime[0];
     $starttime = $mtime;

     while (!feof($files)) {
         $line = fgets($files);
         $keyname="P".$cnt;
         $split_line = explode("," , $line);
         for ($i=0;$i<count($split_line);$i++) {
             //echo $split_line[$i];
             $column_family->insert(
                 $keyname, array(
                     'code' => $split_line[0] ,
                     'pname' => $split_line[1] ,
                     'price' => $split_line[2]
                 )
             );
         }
         $cnt += 1;
     }
     $mtime = microtime();
     $mtime = explode(" ",$mtime);
     $mtime = $mtime[1] + $mtime[0];
     $endtime = $mtime;

     fclose($files);

     $totaltime = ($endtime - $starttime);
     echo "$cnt keys loaded in ".$totaltime." seconds";

     }
     catch (Exception $e)
     {
         echo 'Exception: ' . $e->getMessage();
     }
 ?>

3 个答案:

答案 0 :(得分:2)

尝试将其添加到您的脚本顶部: set_time_limit(0);

答案 1 :(得分:0)

请参阅 set_time_limit

更一般地说,在Web服务器环境中进行批量加载(这就是这个,对吗?)并不是最好的主意。也没有用单个线程来做。但是,对于一百万行,我认为这将是充分的。

答案 2 :(得分:0)

请提高max_execution_time文件中的php.ini限制。 这将避免PHP Fatal error: Maximum execution time of 30 seconds。 默认情况下,Web服务器上的最长执行时间保持为30秒。

您可以更改该金额,以便为服务器上的某些执行提供更多时间。

max_execution_time = 1200;