5

1つのクエリで複数のエンティティをDBに挿入することは可能ですか?ここの例を使用すると、Webデバッガーにいくつかのクエリが表示されます。

2012年8月23日更新

以下の関連リンクを見つけました。誰かがバッチ処理を理解するのに役立つことを願っています:

  1. http://www.doctrine-project.org/blog/doctrine2-batch-processing.html
  2. doctrine2-フラッシュ効率を改善する方法は?
  3. 教義2:他のエンティティを参照するエンティティの挿入をバッチ処理している間の奇妙な動作

主なもの:

Doctrineがマルチインサート((...)値(...)、(...)、(...)、..に挿入)を使用しないのはなぜか疑問に思う人もいるようです。

まず、この構文はmysql以降のpostgresqlバージョンでのみサポートされます。次に、AUTO_INCREMENTまたはSERIALを使用する場合、このような複数挿入で生成されたすべての識別子を取得する簡単な方法はなく、ORMはオブジェクトのID管理のために識別子を必要とします。最後に、挿入のパフォーマンスがORMのボトルネックになることはめったにありません。通常の挿入はほとんどの状況で十分に高速であり、本当に高速の一括挿入を実行したい場合は、マルチ挿入はとにかく最善の方法ではありません。つまり、PostgresCOPYまたはMysqlLOADDATAINFILEは数桁高速です。

これらが、ORMのmysqlとpostgresqlで複数挿入を実行する抽象化を実装する価値がない理由です。それがいくつかの疑問点をクリアすることを願っています。

4

1 に答える 1

0

いくつかの挿入ステートメントがあると思いますが、「フラッシュ」呼び出しごとにデータベースへのクエリは 1 つだけです。

ここで述べたように http://doctrine-orm.readthedocs.org/en/2.0.x/reference/working-with-objects.html

各「persist」は現在の UnitOfWork に操作を追加し、実際にデータベースに書き込むのは EntityManager#flush() の呼び出しです (単一のトランザクションで UnitOfWork のすべての操作をカプセル化します)。

ただし、上記の動作が実際の動作であることを確認していません。

よろしく、 クリストフ

于 2012-08-22T19:51:34.250 に答える