我正在阅读一个基本上超过~500,000行的文件对于我正在解析并尝试通过CLI插入数据库的列。是否有更好的方法来读取它以便我可以使用它?
目前我将其插入:
$fd = fopen ($txtFileName, "r");
while (!feof ($fd)) {
$buffer = fgets($fd);
$lines[] = $buffer;
}
fclose ($fd);
$i=0;
#hearder keys $t = $lines[1];
$keys = explode('|',$t);
然而,我开始用更大的文件耗尽内存..任何帮助将不胜感激。谢谢
答案 0 :(得分:4)
在开始处理之前,您真的需要将所有数据都存储在内存中吗?通常最好读取一行,进行一些处理(例如计算聚合统计数据或进行数据库更新),然后丢弃它并继续下一行。
如果你确实需要对内存中的所有内容执行此操作,那么如果您的系统上没有大量可用内存,我会恭敬地建议PHP可能不适合这项工作。
答案 1 :(得分:2)
为什么不逐行阅读?首先读取标题,然后读取一行,插入值,读取一行,插入值等。那么你的内存需求将很小。
根据您访问数据库的方式,您可能希望批量插入,当然 - 但是,与一次性加载整个文件相比,100或甚至1000的批次仍将具有相对较小的内存成本
答案 2 :(得分:1)
不确定。
立即将其插入数据库,不要存储在数组