2012-02-12 15 views
2

私はGlassfish 3.1 + Hibernate 3.6 + Postgres 9を使用していますが、同時トランザクションを実行している「長い」処理方法を十分に理解していません。同時トランザクションはどのように処理されますか?

場合によっては、トランザクションに最大1秒かかる場合があります。何が起こるかは、クライアントからイベントを受け取ったときにテンプレートテーブルからオブジェクトを生成することです。 2つの異なるイベントが重なり合うオブジェクトのセットを生成することがあります。

私は、このシナリオについて考えています:

T1 begin 
T1 read objects which may already exist 

T2 begin 
T2 select templates which have to be processed 
T1 inserts (generate objects) 
T1 commit 

T1 select templates which have to be processed 
T1 inserts (generate objects) 
T1 commit 

はどのようにこれは私に伝播されますか?ロックの例外はありますか?または、ユニークなインデックスのため制約の例外が発生しますか? どうすればこのような状況に対処できますか?処理を停止する前にイベント処理を3回再開しますか?

挨拶、PostgreSQLがこのマルチバージョン同時実行制御と呼ばれる処理

M
+0

A)試しましたか?何が起こるのですか? B)[トランザクション分離に関するpostgresドキュメント](http://www.postgresql.org/docs/9.1/static/transaction-iso.html) – AdamKG

+0

を調べてください。必要なヒントがありましたか?私は、私が休止状態でこの設定をしなければならないと思った。接続プールを必要な分離レベルに変更しました。エラーコードもそこに記載されているので、私は必要なものすべてを持っていると思います。ありがとうございました!あなたが答えとしてリンクを投稿すれば、私はそれをチェックすることができます。ご挨拶 – mkuff

答えて

0

方法。基本的に並行トランザクションでは、データのスナップショットが(デフォルトで)ステートメントを開始するか、(トランザクション・レベルに応じて)トランザクションを開始するときはめったに発生しません。

この方法では、リーダーはライターをブロックしません。ライターは、リーダーがリーダーを要求したときにのみリーダーをブロックします。あなたは読んだり挿入したりするだけでロックの例外を受けることはほとんどありません/

関連する問題