PHP批量匯出20萬條資料解決消耗記憶體和時間問題

2021-09-24 13:39:24 字數 985 閱讀 9482

在專案中使用php批量匯出資料到excel中,大量資料2w,5w,10w資料就要面臨問題

1、匯出時間變得很慢,少則1分鐘,多則好幾分鐘,資料量一旦上來,還可能面臨導不出來的困窘(這種匯出效率正常人都會受不了,更何況是要求苛刻的使用者)。

2、匯出消耗大量的記憶體資源,即使把php記憶體使用設定為無限大,當多個使用者同時使用匯出功能匯出大量資料的時候,伺服器記憶體使用就會直線往上公升,報警,甚至宕機,嚴重影響其他業務

需要注意excel單錶只能顯示104w資料

解決思路大概是:

1、從資料庫中讀取要進行資料量分批讀取,以防變數記憶體溢位

2、選擇資料儲存檔案格式是csv檔案,以方便匯出之後的閱讀、匯入資料庫等操作

3、以防不方便excel讀取csv檔案,需要104w之前就得把資料分割進行多個csv檔案儲存

直接上**

<?php

/* *

* @param string $sql 需要匯出的資料sql

* @param string $mark 生成檔案的名字字首

* @param bool $is_multiple 是否要生成多個csv檔案

* @param int $limit 每隔$limit行,重新整理輸出buffer,以及每個csv檔案行數限制

* */

function putcsv($sql, $mark, $is_multiple=0, $limit=100000)

}fputcsv($fp, $a);

}fclose($fp); //每生成乙個檔案關閉

getzip('test',$filenamearr); //生成zip檔案

}$sql = 'select id from `tablename` where id < 1200000';

$mark = 'test';//生成檔案字首

putcsv($sql,$mark);

?>

謝謝,all!

php實現匯出10萬條資料

開發中經常遇到需要從資料庫匯出大量資料的問題,匯出excel需要占用太多記憶體,最終回導致記憶體溢位而失敗。csv是更好的選擇。同時可以使用php5.5之後賦予的新功能 yield 生成器 來優化效能,具體可以看鳥哥部落格 分段匯出所有使用者 public function exportall as...

批量插入100萬條資料

建立資料庫 create database create database bulktestdb gouse bulktestdb go create table create table bulktesttable id int primary key,username nvarchar 32 p...

PHP爬蟲 100萬條資料其實不難

php爬取100萬條資料,首先要思考這三個問題 怎麼爬取?怎麼提公升爬取速度?怎麼存放爬取的資料?第乙個想到是不是分布式爬蟲呢,主機多的話是可以這麼張狂任性的,單機的話就要內斂些了。不能分布式,那可以多執行緒啊,換個方向也是很有逼格的。php多執行緒,我首選 swoole 了,不僅可以 多執行緒,還...