我试图在laravel上传CSV文件到我的数据库。但我的CSV文件非常大,我要导入的行几乎有5亿行。(我使用Maatwebsite来做这个)
当我尝试导入它时,我得到:
Maximum execution time of 300 seconds exceeded
你可以看到我已经改变了max_input_time;在php。初始化文件。300秒就足够了,因为datagrip只需要3分钟。即使在laravel中需要更长的时间也必须有其他方法而不是增加max_input_time
这是转换模型中的数据并最终将其放入数据库的代码:
public function model(array $row)
{
return new DutchPostalcode([
'postalcode' => $row['PostcodeID'],
'street' => $row['Straat'],
'place' => $row['Plaats'],
'government' => $row['Gemeente'],
'province' => $row['Provincie'],
'latitude' => $row['Latitude'],
'longtitude' => $row['Longitude'],
]);
}
this is my controller:
public function writeDutchPostalCodes(){
Excel::import(new DutchPostalcodes, 'C:UsersMoemeDocumentsProjectsahmo appsAppsfreshnessFreshness - beFreshnessBEresourcespostalcodespostcodetabel_1.csv');
}
使用多级队列。
https://laravel.com/docs/9.x/queues
对于大型进程,必须在后台执行。
增大php.ini
中的max_execution_time
或者拆分文件进行类似于array_chunk