之前用SQLite的时候,连续insert的话,十万级别的插入数据,用事务和不用事务的效果差非常大。最近研究一个功能,需要php对mdb进行连续写入,做两个测试后发现,9W的数据,插入,用事务后比不用事务减少12秒,恩,还不错,以下是示例代码:
<?php
$mdbname="test.mdb";
$filepath="largefile.txt";
$content=file_get_contents($filepath);
$contentArray=explode("rn",$content);
try{
$db = new PDO("odbc:driver={microsoft Access driver (*.mdb)};dbq=".realpath($mdbname));
try{
$firstLink="";
$db->beginTransaction();
foreach($contentArray as $k=>$v){
if($firstLink==""){
$firstLink=$searchurl.$v;
}
$sql="insert into Content (PageUrl) values ('".$searchurl.$db->quote($v)."');";
$result = $db->exec($sql);
if(!$result){var_dump($db->errorInfo());};
}
$db->commit();
}catch (Exception $e){
echo "error:".$e->getMessage();
}
}catch(Exception $e){
echo "Failed:".$e->getMessage();
}
用上面的事务的方法,可以解决mdb无法批量insert的问题。性能上嘛,还凑合吧。
因为使用的是PDO的方式,所以才有了其中的事务的方法。
PDO的方法来自:
中文版 https://www.oschina.net/translate/php-pdo-how-to
英文版 https://codular.com/php-pdo-how-to
如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。
如本文对您有用,捐赠和留言 将是对我最好的支持~(捐赠可转为站内积分)
如愿意,请向朋友推荐本站,谢谢。
尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。
留言