PHP如何使用事务大幅提高批量写入SQLite数据库的速度

<?php
// sqlite操作类
class SqliteDBHelper{
	
  public function __construct(){
    // 初始化数据库,并且连接数据库 数据库配置
    $this->db = new PDO('sqlite:'.dirname(__FILE__).'\log.db');
    $this->init();
  }
  
  public function init()
  {
    # 表初始化,创建表
    $this->db->exec("CREATE TABLE log(
      id integer PRIMARY KEY autoincrement,
      pagelinks varchar(200),
      ip varchar(200),
      datetimes datetime default (datetime('now', 'localtime'))
      )");
  }
  
  public function insert($tab_name)
  {
	try{
		//开启事物,此时会关闭自动提交 
		$this->db->beginTransaction();
		$sql = "INSERT INTO ".$tab_name." (id,pagelinks,ip) values (?,?,?)";
		$stmt = $this->db->prepare($sql);
		$s=0;
		//大批量插入
		while($s <= 99999){
			$stmt->execute(array(null,"http://www.zhangkang.com.cn/".$s,"w"));
			$s++;
		}
		//提交事物,并且数据库连接返回到自动提交模式
		$this->db->commit();
	}
	catch(PDOException $e)
	{
		echo '执行失败'.$e->getMessage();
	}
  }
  
  public function query($tab_name,$where='')//表名称和条件
  {
    $sth = $this->db->prepare('SELECT * FROM '.$tab_name.' '.$where);
    $sth->execute();
    $result = $sth->fetchAll();
    return $result;
  }
  
}

$db=new SqliteDBHelper();
$res=$db->insert('log');//批量插入
$res=$db->query('log',"limit 100");//查询
foreach($res as $key => $row) {
	echo $row['pagelinks']."<br/>";
}
?>
发表评论 / Comment

用心评论~