2017-04-30 20 views
5

われわれが知っているように、分離と不可分性は2つの異なるプロパティです。 Atomicityは、トランザクションが正常に完了したか、完全に失敗したかを示す「すべてかどうか」のプロパティです。 Atomicityは、JTAとJTAが基づいているX/Open XA Two Phase Commit Standardによって確実にサポートされています。JTAを使用した分散(グローバル)トランザクションにおける分離

私の質問です:JTAは分離をサポートしていますか?私は、EJBとJDBC、JTA以外のフレームワーク(Springなど)やトランザクションマネージャを使用しない場合にのみ言及します。

つまり、複数のスレッドがある場合を考えてみましょう。そのうちの1つが、複数のデータベースに対してアクセスと変更を行うグローバルトランザクションを実行するとしましょう。他のスレッドはデータベースに対して変更を実行しますが、各スレッドは1つのデータベースに対してのみ変更を実行し、トランザクション内でそれを行います。

グローバルトランザクション内でdirty/repeatable/phantomのような並行性の問題が生じるでしょうか?

AFAIK JTAで分離レベルを指定する方法はありません。

答えて

2

単離は、ACIDファミリーの黒いヒツジです。厳密に言えば、トランザクションマネージャーの財産ではありません。これはリソースマネージャ、すなわちデータベースによって完全に制御される。データベースに対するすべてのトランザクションは、ある分離レベルで実行されます。 XA(JTA)トランザクションの違いは、そのレベルがどのように選択されるかです。

一部のリソース・マネージャは、XA制御トランザクション・ブランチの最初の文としてSQLセット・トランザクション分離コマンドを許可することがありますが、通常、トランザクションごとの分離レベル選択制御は通常のトランザクションでは実現できません。 。使用される他のモデルは、XAResource.startへのカスタムフラグです。オラクルこれらのどちらもサポートしていないデータベースエンジンの場合、XAトランザクションはデフォルトで、データベースサーバー用にグローバルに構成された分離レベルになります。

「シリアライザブル」トランザクション、JTAなどであっても、頭痛が残ることに注意してください。ピーターBailisの優れたACIDRain紙を読み、その後で静かに泣くするコーナーを探しに行く。

http://www.bailis.org/papers/acidrain-sigmod2017.pdf

+0

[OK]を、私はとても愚かなことができ、単純なJTAグローバル・トランザクションの実装のすべての詳細を学習するプロセスでは、実際によ質問。 JDBCを使用して2つの異なるデータベースにアクセスするJTAトランザクションがあるとします。実際にはそれぞれ異なることがあり、アトミック性の問題を解決する目的の分離レベルでConnection.setTransactionIsolationを呼び出すことはできません。私が少しの研究から理解しているように、トランザクションのすべてのリソースに共通の分離レベルを「伝播」することはできませんが、各リソースごとに個別に設定することはできません。右? – Bat0u89

+0

また、すべてのトランザクションリソースで分離レベルを "TRANSACTION_SERIALIZABLE"に設定した場合、同時アクセス権の可能性があるため、分離(データ整合性)の問題は発生しません。 – Bat0u89

関連する問題