0 レビュー
1 回答
パフォーマンス-PHPCLIを介して外部インポーターに大きなCSVをインポートすると、memory_limitの問題が発生します
400.000行の大きなCSVファイルをデータベースにインポートする際に問題が発生しました。これらの最終的なインポートは、ブラックボックスで魔法をかける外国のインポートスクリプトによって行われ、私はそれに影響を与えることができません。このスクリプトはmemory_limitの問題を引き起こしていますが、私が言ったように、私はそれを使用する必要があります。私の問題は、インポート全体を実行することです。私が試したのは次のとおりです:
loop with while over original csv
read 1000 rows from csv
create a new file with these rows
give this new csv to doImport() function of the importer
しかし、外部スクリプトは依然として memory_limit
の問題を引き起こします。ここにいくつかの疑似コードがあります
$csvLib = new foo();
$foreignImporter = new bar();
while ($thausendRows) {
$tmpFile = $csvClass->writeCSV($thausendRows);
$foreignImporter->doImport($tmpFile);
}
絶望的な状況で、ループ内のcsvLibとforeignImporterをnullにインスタンス化して、ループ後に設定を解除しようとしましたが、何も変わりませんでした。
doImportを小さなチャンクで実行して、壊れないようにする方法はありますか?ローカルマシンのメモリ制限を2Gまで増やしたところ、最初の100.000行がインポートされました。しかし、それはまったく選択肢ではありません。
わからない
0
レビュー
答え :
解決策:
OK、問題の解決策を見つけました。メモリリークの外部部分は、独自のスクリプトにアウトソーシングされます。スクリプトの私の部分はCSVを読み取ります。ここで、行をループし、1000行ごとにtmp CSVを記述し、このtmpCSVを使用して独自のスクリプトで外部部分を呼び出します。 $foreignImporter-> doImport($ tmpFile);の代わりにパススルー('script.php')を実行します。それで全部です。簡単...知っていれば:)
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。