在上传超过750k的大量CSV或Excel文件时遇到问题,例如大数据集

时间:2018-02-14 08:36:00

标签: php excel csv import

在PHP中进行位处理后,我有大量的excel文件要导入我的MySQL数据库。 所以我尝试了多个用于Excel和CSV读取大数据集的php库。

但是在所有这些问题中面临一个共同的问题,即在处理多达17万条记录之后(每次运行随机播放,如130k或150k或160k)。

我处于最糟糕的情况,我无法确定究竟是什么问题,这会阻止进一步阅读文件。

我认为没有内存问题或任何其他CPU问题。

尝试设置

ini_set('memory_limit', '3G');

并尝试了这个:

ini_set('memory_limit', '-1');

还尝试将xlsx文件转换为csv然后导入,然后只能处理150k左右的记录。从xlsx文件中只有几千条记录被处理。 CSV文件大小为220MB。

我已尝试上传到我的笔记本电脑(8GB RAM,最新的Windows 10和所有最新硬件),以及AWS(T2小型/迷你)服务器。仅在AWS上,我获得了上述数字,而在笔记本电脑上仅在几千条记录中被停止。

请建议是否需要遵循其他方法。

我写的代码是:

ini_set('memory_limit', '-1');
include __DIR__.'/../config.php';

require(DIR_LIB_PATH.'spreadsheet-reader/reader_writer/php-excel-reader/excel_reader2.php');
require(DIR_LIB_PATH.'spreadsheet-reader/reader_writer/SpreadsheetReader.php');

$file_path = '/path/to/file.csv';
$reader = new SpreadsheetReader($file_path);
foreach($reader as $row_data)
{
    $inserted_row = insertLead($row_data);
}

1 个答案:

答案 0 :(得分:0)

你可以使用php的spout http://opensource.box.com/spout/来读取非常大的ex​​cel文件而不会出现任何问题。它是一个非常优秀且快速的php库,可以读取写入大型excel文件。并且还尝试使用批量插入,否则将逐个插入每一行非常慢。