ネストされたツリー(ネストされたツリーの動作)を管理するためにDoctrineExtensionsを使用しています。csvファイルから10〜20Kのレコードをインポートし、データベースに保存する必要があります。
このタスク用に、一連の新しいカテゴリ(ツリーノード)を作成し、これらのカテゴリの親を設定して永続化するサービスを作成しました。最後に、EntityManager#flushメソッドを呼び出して、作成したカテゴリをデータベースに保存します。
私の論理によれば、プロセスは次のようになります。
- 拡張機能は、各ノード(右、左、レベルなど)に必要なデータを計算します
Doctrineは、次のように、すべてのデータを挿入するクエリを作成します。
INSERT INTO table (field1, field2, parent_id, root, left, ...) VALUES (fields of 1st record), (fields of 2st record), ...
ただし、Doctrineは各レコードを個別に挿入し、さらにルート、左、右の値がフラッシュ中に更新されるため、大量の更新クエリが必要になります。
70のカテゴリを挿入するには、最大250のクエリが必要でしたが、500のカテゴリを追加したい場合、メモリ不足のためにプログラムが終了しました。
プロセスを最適化するにはどうすればよいですか?もちろん、最初から書くこともできますが、このすばらしい拡張機能を使用したいと思います。