Javaとデータベーストランザクション分離レベルの4つの特徴

ACIDつのプロパティ

アトミック(不可分)

       原子性は、トランザクション内のすべての操作を意味し、すべてが成功するか、すべてロールバック失敗のいずれか含まれています。トランザクション操作をロールバックに失敗すると、データベースへの影響はありません。

一貫性(一貫性)

       一貫性は、トランザクションは、トランザクションの実行と実装が一貫性のある状態でなければなりません前と後と言うことです別の一貫性のある状態、1つの一貫した状態からデータベースを変換しなければならないことを意味します。例えば、転送動作の場合:アカウントにアカウントB千元、1000年の少しアカウント、Bは1000以上を占め、取引終了後の総量は変わりません。

絶縁(アイソレーション)

        分離は、複数のスレッドが同時にデータベースにアクセスするとき、そのようなテーブルへの同時アクセスなど、トランザクションを指し、各ユーザのためのデータベースを開いて、複数の同時トランザクションの間に他のオフィス業務の干渉を行うことができない、それらは互いに分離されなければなりません。
例えば、視点から2つの同時トランザクションT1とT2、T1が存在しつつある、またはT2にT1は、実行、実行の前またはT1の開始が完了した後に終了しました。単離された複数のトランザクションは、各トランザクションは、トランザクションの動作中の他の状態にアクセスすることができます。

分離レベルと4つに分け、以下の説明は行います

永続性(耐久性)

持続性は、一度提出され、そのサービスの操作を指し、データベース内のデータへの変更は、データベース障害が失われることができない場合でも、永続的で完成会社を変更することが提出されました。

トランザクション分離レベル

のは、読書の例外を見てみましょう:

ダーティ読み取り:トランザクションデータベースは、データを使用してではなく、まだコミットされ、別のトランザクションBもこのデータへのアクセス権を持っているが、また、トランザクションBトランザクションは提出しなかった前のデータの使用につながるれ、このデータを使用しています。

非反復可能読み取り:データにアクセスするために、これらの複数回の途中のトランザクションデータAにおける複数の動作、データトランザクションBも動作し、その値が同じトランザクションAに導く、変化しました非反復可能読み取り、このデータ、であるときの値は、二つの動作が異なっています。

マジック読書:トランザクションの再実行の行セットを返すクエリは、クエリに一致し、他のトランザクションが最近提出し、変更されたため、これらの行を見つけました

ローからハイへの分離レベルは4つの段階に分かれています。

1、(非コミット読み取り)コミットされていない読みます 

不足している更新を避けるために、他の書き込みトランザクションを防ぐために、トランザクションを書きます。しかし、それはダーティリードにつながる可能性があり、他の読み取りトランザクションを防ぐことはできません。

2、読み取り(コミット読み取り)コミット:

データトランザクションを読んで、他のトランザクションがデータの行へのアクセスを継続できますが、コミットされていないトランザクションを書き行にアクセスする他のトランザクションを防ぐことができます。

汚れを避けるために、分離レベルを読み込みますが、非反復可能読み取りを表示されることがあります。先読みトランザクションデータ、トランザクションBトランザクションAがもう一度データを読み込みながら、すぐに、データを更新し、トランザクションを提出し、データが変更されました。

3、反復可能読み取り(反復可能読み取り)。

      他の取引を禁止するために、書き込みトランザクションをデータトランザクションを読む書き込みトランザクションによって禁止されるだろう(ただし、読み取りトランザクションを許可します)。

避けてください繰り返し不可能読み、ダーティ・リード、時にはファントム読み取り表示されることがあります。この「排他的な書き込みロック」「共有読み取りロック」および実装による。

4、シリアライズ(直列化):

       共有ロック、プラス排他的な書き込みロックを読み取ります。このような取引は、同時に読み取ることができますが、読み取りと書き込みのトランザクションが相互に排他的である間、トランザクションは次のトランザクションを実行する前に、実行最高のトランザクション分離レベルをシリアライズしているが、価格は、パフォーマンスが非常に低く、一般的には非常にあり、また、最も高価ですほとんど使用、そのレベル、分岐順で、だけでなく、非反復可能読み取り、読み取っ汚れを避けるために、だけでなく、ファントムが読ん避けるために。

 

       分離レベルが高いほど、より多くの我々は、データの整合性と一貫性を確保することができますが、同時パフォーマンスへの影響も大きいです。ほとんどのアプリケーションでは、データベースシステムは、する分離レベルに優先権を与えることができますコミット読みください。ダーティリード防止することが可能ですが、また、より優れた同時実行性能を有しています。それは非反復可能読み取りにつながりますが、ファントムは、読みとIIは、これらの並行性の問題更新を失いました

     データベースのほとんどのデフォルトのレベルは、SQL Serverの、Oracleなど、コミット読み込まれます。
     MySQLのデフォルトの分離レベルが反復可能読み取りです。

 

おすすめ

転載: www.cnblogs.com/jiezai/p/11262229.html