2017-08-15 27 views
1

ファイルを解析してデータベースに挿入するマルチスレッドアプリケーションがあります - データベースに書き込むためのDB接続プールがあります - 全体を解析/書き込み操作でトランザクションコントロールを追加する必要がありますつまり、parse/db-insert操作中にエラーが発生した場合は、部分的なdb書き込みをロールバックする必要がある操作全体をロールバックします。これを行う方法はありますか?接続プールを介したトランザクション制御

答えて

0

プールから接続を取り、データベーストランザクションを開始し、トランザクションの間プールからプールアウトする必要があります。トランザクションを完了(コミットまたはロールバック)した後にのみプールに戻します。

これは明らかに、プール内での接続よりも多くのトランザクションを並行して実行できないことを意味します。この制限を受け入れることができない場合は、データベーストランザクションに依存しない独自の回避策を考案する必要があります(たとえば、独自の識別子を持つデータを受け入れる「ステージ」テーブルを使用して、古いデータを削除するタスク)。

私はインスピレーションのためにSpring's transaction managerを読むことをお勧めします。

0

私が正しく理解していれば、ファイルをいくつかの部分に分割するアプリケーションがあり、各部分は別のスレッドによって解析され、それぞれがプールからの独自の接続を使用します。

XAトランザクションを使用しても問題がなければ、トランザクションマネージャがここで助けてくれると思います。それぞれの接続は別個のトランザクションブランチを形成するため、スレッドのそれぞれはトランザクションの別の参加者で動作します。最後に、2PCはすべてのコミットまたはロールバックを保証します。