私はSymfony2ベースのプロジェクトに取り組んでおり、cronタスクを使用して.csvドキュメントから150万の製品を定期的にインポートする必要があります。
現在、インポートは次のようになっています。
...
Propel::disableInstancePooling();
$fp = fopen($file, 'r');
while ( !feof($fp) ) {
$line = fgets($fp, 2048);
$data = str_getcsv($line, "\t");
$product = new Product();
$product->setId($data[0]);
$product->setTitle($data[1]);
...
$product->save();
}
...
ただし、約5分後、Apacheは512 MBのメモリ割り当てに達し、次のエラーをスローします。
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 78 bytes) in /var/www/vhosts/myapp.local/app/cache/dev/classes.php on line 9451
Propelのインスタンスプーリングを無効にしました(これは過去に他のフレームワークのPropelを利用したインポートで機能していました)が、まだ問題が発生しているので、Symfony 2が(スローされたエラーに基づいて)何らかのキャッシュを実行しているかどうか疑問に思っています)。
誰かが私を正しい方向に向けることができるSymfony2で大規模なインポートを実行した経験がありますか?