ThinkPHP PHP MySQL大數據量導入導出

參考連接:http://blog.coinidea.com/web%E5%BC%80%E5%8F%91/php-1195.htmlphp

備註:大數據量指單文本(含office相關文檔docx,xlsx)10W+的導入導出。 MySQL有兩種很是經常使用的表類型MyISAM和InnoDB。網上針對這兩種表類型的介紹和比較很是多,其中主要的區別就是InnoDB支持事務和行級鎖,但MyISAM不支持。MyISAM相對來說效率比較高,兩者各有優劣。html

http://www.cnblogs.com/zlcxbb/p/5757173.html: MyISAM 和 InnoDB的適用場景 MyISAM適合:(1)作不少count 的計算;(2)插入不頻繁,查詢頻繁;(3)沒有事務。 InnoDB適合:(1)可靠性要求比較高,或者要求事務;(2)表更新和查詢都至關的頻繁,而且表鎖定的機會比較大的狀況。 MyISAM 和 InnoDB的區別 1)MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持 2)mysiam表不支持外鍵 3)在執行數據庫寫入的操做(insert,update,delete)的時候,mysiam表會鎖表,而innodb表會鎖行 4)當你的數據庫有大量的寫入、更新操做而查詢比較少或者數據完整性要求比較高的時候就選擇innodb表。當你的數據庫主要以查詢爲主,相比較而言更新和寫 入比較少,而且業務方面數據完整性要求不那麼嚴格,就選擇mysiam表。由於mysiam表的查詢操做效率和速度都比innodb要快mysql

綜上,InnoDB在當前的場景下是不錯的選擇。web

http://www.jb51.net/article/51975.htm  當PHP須要插入大量數據的時候,當一條一條的插入時,會發現IO耗時嚴重拖性能。 Demo代碼:sql

$params = array(‘value'=>'50′);
set_time_limit(0);
echo date(「H:i:s」);
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
};
echo date(「H:i:s」);

有兩種方法能夠解決這種問題:數據庫

  1. 使用事務(InnoDB支持) 好比能夠每隔10000或者10000條提交一次事務,這樣大大下降了IO
echo date(「H:i:s」);
$connect_mysql->query(‘BEGIN');
$params = array(‘value'=>'50′);
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query(‘COMMIT');
$connect_mysql->query(‘BEGIN');
}
}
$connect_mysql->query(‘COMMIT');
echo date(「H:i:s」);
  1. SQL語句拼接 這是MySQL的一種特性,使用優化SQL語句:將SQL語句進行拼接,使用 insert into table () values (),(),(),()而後再一次性插入,若是字符串太長,則須要配置下MYSQL,在mysql 命令行中運行 :set global max_allowed_packet = 210241024*10;
$sql= 「insert into twenty_million (value) values」;
for($i=0;$i<2000000;$i++){
$sql.=」('50′),」;
};
$sql = substr($sql,0,strlen($sql)-1);
$connect_mysql->query($sql);

第一種方法較爲經常使用,第二種方法多用於測試數據。ide

通常默認狀況下,PHP的內存爲128MB,當使用ThinkPHP超內存的時候,能夠調高PHP的默認最大內存,也能夠將只須要在入口文件中刪除常量APP_DEBUG的定義或者定義爲false。這個時候會很省不少內存。固然也可使用事務模式每隔n條提交一次。 固然一次性提交也能夠用ThinkPHP的addAll函數,不過該函數Bug較多。 ThinkPHP開啓和提交事務函數

$table->startTrans();
$table->commit();

當若是須要操做Office相關文件的時候推薦使用PHPWord和PHPExcel。性能

參考連接:http://blog.coinidea.com/web%E5%BC%80%E5%8F%91/php-1195.html測試

相關文章
相關標籤/搜索