リモート コンピューターから .xml ページを取得し、それらを Java オブジェクトに変換し、それぞれを mysql データベースに永続化する JavaEE 6 / EJB3.1 / Glassfish 3.1.2 アプリケーションがあります。これらの .xml ページは数万あり、私はそれらを少しずつ追加しています。
これはうまく機能していますが、非常に遅いことを除けば (70 ミリ秒のページ取得 + エンティティの変換と永続化にわずかな時間がかかります)。
この作業を並行して実行して速度を上げたいのですが、どの方法が最適ですか?
注目に値する可能性があります: ページを取得するたびに、ページを取得するために使用している OAuth 資格情報の mysql データベース内のカウントが更新されます。最大数の場合は続行されません (例外がスローされます)。これが問題を複雑にするかどうか、またはどれだけ複雑になるかはわかりませんが、2 つのスレッドが最大値を下回っていることを確認した場合は、カウントを更新する前にページを取得して、最大値を超える可能性があります。
これまでの私の調査では、2 つの可能性に絞り込まれました (ただし、他の可能性を自由に追加してください)。
- メッセージ駆動型 Bean - おそらく間違っていると思いますが、メッセージ キューがいっぱいになるまで (10 個の URL が追加されたとします)、セッション Bean が URL メッセージを送信し、キューがいっぱいになるまでブロックすることを想像します。Glassfish は、私が作成したメッセージ Bean の 10 個のインスタンスを作成し、それぞれが URL の 1 つから .xml の 1 つを取得し、OAuth カウントを更新し、この .xml を別のキューにメッセージとして送信し、別のメッセージ Bean を変換して永続化します。このキューからの xmls。
- @Asynchronousメソッドを使用して、独自のスレッド セーフ キューを作成しますか? これははるかに単純で、私がやっていることにより適している可能性がありますが、それをどのように実装するか正確にはわかりません.
アドバイスをいただければ幸いです。