私はfgetcsv
を使用してストリーム単位で120MBのcsvを読みました(正しい英語ですか?)。それは行ごとに読み込まれ、私はデータベースにすべての行を挿入しました。そうすれば、各繰り返しで1行だけがメモリに保持されます。スクリプトはまだ20分必要でした。走る。たぶん私は次回にPythonを試してみるだろう...巨大なcsvファイルを配列にロードしようとしないでください。本当にたくさんのメモリを消費します。
// WDI_GDF_Data.csv (120.4MB) are the World Bank collection of development indicators:
// http://data.worldbank.org/data-catalog/world-development-indicators
if(($handle = fopen('WDI_GDF_Data.csv', 'r')) !== false)
{
// get the first row, which contains the column-titles (if necessary)
$header = fgetcsv($handle);
// loop through the file line-by-line
while(($data = fgetcsv($handle)) !== false)
{
// resort/rewrite data and insert into DB here
// try to use conditions sparingly here, as those will cause slow-performance
// I don't know if this is really necessary, but it couldn't harm;
// see also: http://php.net/manual/en/features.gc.php
unset($data);
}
fclose($handle);
}
をあなたのCSVはどのように大きなファイルのか?これをデータベースにインポートする必要がありますか? –
いくつかの比較も含まれている私の答えをhttp://stackoverflow.com/a/22744300/2037323でチェックしてください。 –