Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Phalcon批量插入性能。模型还是原始SQL_Php_Performance_Insert_Bulk_Phalcon - Fatal编程技术网

Php Phalcon批量插入性能。模型还是原始SQL

Php Phalcon批量插入性能。模型还是原始SQL,php,performance,insert,bulk,phalcon,Php,Performance,Insert,Bulk,Phalcon,有没有办法在phalcon php中进行批量插入 我尝试使用\Phalcon\Mvc\Model create插入10000条记录,也尝试使用原始SQL插入10000条记录:插入“tablename”(a,b,c)值(),(),()。。。() 我设置了这个非常简单的测试,结果让我很惊讶 使用\Phalcon\Mvc\Model大约需要36秒 使用原始sql需要3,6秒 \Phalcon\Mvc\Model: $transactionManager = new TransactionManag

有没有办法在phalcon php中进行批量插入

我尝试使用
\Phalcon\Mvc\Model create
插入10000条记录,也尝试使用原始SQL插入10000条记录:
插入“tablename”(a,b,c)值(),(),()。。。()

我设置了这个非常简单的测试,结果让我很惊讶

  • 使用\Phalcon\Mvc\Model大约需要36秒
  • 使用原始sql需要3,6秒
\Phalcon\Mvc\Model:

$transactionManager = new TransactionManager(); 

$transaction = $transactionManager->get();

$entity = new Entity();
$entity->setTransaction($transaction);
for($i = 0; $i < 10000; $i++){
    $entity->setValue1(rand(1,50));
    $entity->setValue2(rand(1,50));
    $entity->setValue3(rand(1,50));
}
$entity->create();
$transaction->commit();
$transactionManager=新建transactionManager();
$transaction=$transactionManager->get();
$entity=新实体();
$entity->setTransaction($transaction);
对于($i=0;$i<10000;$i++){
$entity->setValue1(兰特(1,50));
$entity->setValue2(兰特(1,50));
$entity->setValue3(兰特(1,50));
}
$entity->create();
$transaction->commit();
原始SQL:

$query = "insert into 'tablename' (a, b, c) values ";

for($i = 0; $i < 10000; $i++){
    $values .= "(" . rand(1,50) . ", " . rand(1, 50). ", " . rand(1, 50). "),";
}

$values = substr($values, 0, strlen($values) - 1);
$query .= $values;
$this->db->query($query);
$query=“插入到“表名”(a、b、c)值中”;
对于($i=0;$i<10000;$i++){
$values.=“(“.rand(1,50)。”、“.rand(1,50)。”、“.rand(1,50)。”)”;
}
$values=substr($values,0,strlen($values)-1);
$query.=$value;
$this->db->query($query);

Phalcon\Mvc\Model速度较慢,因为它为每个插入创建一个PHQL语句,然后对其进行解析并转换为当前DBMS支持的SQL方言。PHQL解析是导致这种速度变慢的原因


如果需要性能,您必须自己生成INSERT语句。

一位Phalcon用户为此问题创建了一个库,
看看。

是的,我明白。我感到惊讶的是,一个旨在成为最快的php框架的框架并没有提供一种进行批量插入/更新/等的方法。我也知道,人们总是可以手动生成insert语句。不过我还是在寻找使用Phalcon模型进行批量插入的可能性。并非所有Phalcon支持的DBMS都支持批量插入(例如SQLite)