1

私はJBossとHibernateベースのシステムを持っています。そして、2 つの長い操作を処理する必要があります。操作は、おそらくトランザクションのタイムアウトよりも長くなる可能性があります。その操作は、2 つの異なるトランザクションで多対多のエンティティを永続化します。そして、この操作中に何か問題が発生した場合は、トランザクションのすべての変更をロールバックする必要があります。

それを解決する最善の方法は何ですか?

すべての操作を 1 つのトランザクションにマージするのが最善の方法だと思いますが、長いトランザクション タイムアウトを設定する必要があり、私たちのシステムでは受け入れられません。

この状況では、多くのトランザクションをより適切に管理できますか。そして、どうすればそれを行うことができますか?

4

3 に答える 3

2

JTAサーバー(トランザクションコーディネーター)を使用して、XAトランザクションで複数のステップでトランザクションを実行できますか? この投稿には、あなたに役立つかもしれないいくつかのオープンソースのものへのファンアウトが少しあります。

XAトランザクションを使用すると、多数の小さな操作を実行し、それらを1回のヒットでコミットまたはロールバックできます。「休止状態のxaトランザクション」をグーグルで検索してみてください。最新のRDBMSプラットフォーム(MySQL 5.x、PostgreSQL、SQL Server、Oracle、DB2、Sybaseなど)は、XAトランザクションをサポートしています。

于 2009-09-15T08:12:22.457 に答える
1

1 つのトランザクションを使用することは、優れた堅牢性などです。管理者を説得するためにもう一度お試しください ;-)


そうでなければ、私は考えることができます:

  • 短いトランザクションを使用してより少ない行を挿入し、マーカーを使用して「不完全」を意味します。これは、既存の列または新しい列にある可能性があります (別のテーブルにある可能性がありますか?)。
  • トランザクションがロールバックする場合は、もう一度試してください。操作全体を中止したい場合は、「未完了」マーカーを持つ行を削除することを選択できます。
  • すべてのトランザクションがコミットされると、すべての行を「完了」としてマークするためだけに、最後のトランザクションを開くことができます(例: update ... where ...)。これは完全な挿入よりもはるかに高速であるため、トランザクションは十分に短くなるはずです。
于 2009-09-15T07:56:02.317 に答える
0

JPAで(休止状態を介して)同様のことをしなければなりませんでした。1回の大きなトランザクションではなく、N回のトランザクションで操作を行いました。この操作はほとんど実行されず、自動化されたジョブであったため、Web ページで結果を待つユーザーはいませんでした。

取引にはどれくらいの時間がかかると思いますか? ユーザーはどれくらい待つと思いますか?? この操作が発生すると予想される頻度。要件が明確でない可能性があります。

于 2009-09-15T15:51:58.850 に答える