0

バックグラウンド

実装する必要のあるJPAカスケードバッチ更新に問題があります。更新では、約10000個のオブジェクトが取得され、それらが一度にデータベースにマージされます。オブジェクトの平均深度は5オブジェクト、平均サイズは約3kbです。永続性プロバイダーはOracleToplinkです。

これは大量のメモリを消費し、完了するまでに数分かかります。

私は周りを見回しました、そして私は3つの可能性を見ます:

標準のJPAマージステートメントをループし、特定の間隔でフラッシュする

JPQLの使用

Toplink独自のAPIを使用する(私はまったく経験がありません)

だから私はいくつか質問があります

代わりにJPQLを使用して、標準のマージからのオーバーヘッドを削減しますか?私が正しく理解していれば、マージによってオブジェクトツリー全体が呼び出される前に複製されます。実際に速いですか?プロセスをスピードアップするためのトリックはありますか?

Toplink APIを使用してバッチマージを行うにはどうすればよいですか?

そして、これは主観的なものであることを私は知っていますが、JPA / Toplinkで大規模なカスケードバッチ更新を行うためのベストプラクティスはありますか?多分私が考慮しなかった何か?

関連する質問

JPAでのバッチ更新(トップリンク)

JPA/Toplinkを使用したバッチ挿入

4

1 に答える 1

1

JPQL を使用する意味がわからない場合 更新ロジックを JPQL update ステートメントで表現できれば、はるかに効率的になります。

作業を確実にバッチに分割します。また、バッチ書き込みとシーケンスの事前割り当てを使用していることを確認してください。

見る、

http://java-persistence-performance.blogspot.com/2011/06/how-to-improve-jpa-performance-by-1825.html

于 2013-01-09T13:35:00.670 に答える