Javaは、トランザクション分離レベルと4つのプロパティを学びます

業務

トランザクション(トランザクション)は、一般的に行うためか、行っているものを指し、これらのものはすべて完了し、または影響し、すべての撤回を変更する必要があります。

4つの特性

:Javaは、トランザクションが4つのプロパティ(ACID)はアトミック(原子性)、一貫性(一貫性)、アイソレーション(分離)、永続性(耐久性)を。

1、アトミック(原子性):これらの命令の動作は、どちらかのすべてが成功に実行または実行されません。すぐに一つのコマンドが失敗したとして、すべての命令が失敗し、データがロールバックされ、実行指示データ前の状態に戻って。
(発生したか発生していないいずれかのアトミックトランザクションの保証に動作しています。すべての操作が成功した場合、トランザクションが成功する限り、いずれかの操作が失敗したとして、トランザクションがバックをロールバックされます。)

2. 一貫性(一貫性):トランザクションの実行状態から別の状態へのそのデータが、全体遺跡安定したデータの整合性のためにそう。

(AとB、2000ドルの合計、それらの2どんなにへの転送、転送はまだすることができません以下以上の2000ドルよりも、数倍を占めています。)

図3に示すように、分離(単離):隔離ユーザようなテーブルを用いて動作しているときなど、データベースへの同時アクセス、複数のは、各ユーザのトランザクションのデータベースのオープン、動作は他のトランザクション、同時複数のトランザクションによって妨害されていません互いから部屋を分離します。
(二つのスレッドT1とT2、T2またはT1である場合の終了前に開始し、または開始T1の後、2つのスレッドがお互いに影響を与えることはできません。)

4、永続的な(耐久性REV) トランザクションが正常に完了すると、データの変更は永続的であるために、それはあります。
カードから削除A 500は、外部要因の干渉を考慮せず、その後のみ、残りのカードA 1500不在は、カード意志を500ドルを要した(Aケアリー2,000ドル1400年を残し、1500年には意志が1600例を左に、意志を残しました。)

同時実行の問題が発生します

図1に示すように、ダーティ・リード:ダーティ・リードトランザクションは、別の非コミットの読み出しデータトランザクションの処理を指します。
(アリペイAさんが1000ドルで、銀行は、ショーは「銀行が処理されている」この時点でパスワードを入力し、今カーリーチタン500したい、私の妻も唱え過ごし千ドルでA Aの宝での支払いを望んでいるこの時、それは、アリペイは、私の妻ソーアリペイA、この時間の間にこの時間やオリジナルの1000ですが、残りの500は、しばらく後にネットワークが現金に失敗したことを銀行が発生するため、バックアリペイに500ドルを消すことが判明しました「500」で、ダーティ・リードです。)

2、ファントムリード(ダミーリード):トランザクションが二回クエリを実行し、第二の結果セットは、データが最初にない行が存在しない、または一部が2で、二回矛盾した結果が得られ、ちょうど別のトランザクションが削除されている含まれていますデータの挿入や削除の真ん中を照会します。魔法の読書は、トランザクションが非独立した実行起こる現象です。
二つのスレッドT1およびT2、T1のデータテーブルが存在する場合(このとき、各行の最初のフィールドは、データのA、T2新しい行後に変更され、最初のフィールドがBである場合、T1を読み出しますデータテーブル彼の党が変更されていないことがわかりました。)

3は、非反復読み取り:トランザクションが同じ行2倍のデータ、異なる状態の結果の結果を読み込み、中間ちょうど別のトランザクションがデータを更新するために、異なる2つの結果を信頼することはできません。
(2つのスレッドT1およびT2、T1の行の最初のフィールドの変化A(この時点ではデータはT1 A読み取られる)、T2後フィールドに再びBに、再度T1を読み出しますフィールドデータがBである発見し、最初の読み取りは同じではありません。)

 

ダーティリードは別のコミットされていないトランザクションでデータを読み取ることで、ファントムは読み込み、非反復可能読み取りが別のトランザクションが提出された後にデータを読み取ることです。

マジックリーディングとの違いは、非反復可能読み取りである:ファントムは、読み出し動作と主にデータの全体に焦点を当てて(例えば、テーブル全体)を添加し、その間、削除、および集束または特定の分野における特定の行の読み出しを繰り返すことができませんデータが変更されたときに主に発生します。

分離レベル

  • コミットされていないが、コミットを読んだとき読む(最低レベルは、どのような場合には保証できません。)
  • あなたが提出した後に読むを読んでコミット(汚れが発生して読み込みを避けるために。)
  • 反復可能読み取り読み取り反復は、(回避のダーティリード、非反復可能読み取りが発生します。)
  • 直列化(シリアライズ)シリアライズ(回避のダーティリード、反復不能読み取り、ファントムリードが発生します。)

分離レベルが高いほど、それがデータの整合性と一貫性を確保することができるが、同時パフォーマンスへの影響も大きいです。ほとんどのアプリケーションでは、データベース・システムは、コミット読み取りに分離レベルを優先することができます。ダーティリード防止することが可能ですが、また、より優れた同時実行性能を有しています。それは非反復可能読み取りにつながるが、ファントム読み取り及びIIは、アプリケーションが排他的ロックまたは制御に楽観的ロックを使用して作製することができるような問題が発生する可能性があり、個々の場合において、これらの並行性の問題更新を失いました。データベースのほとんどのデフォルトのレベルは、Readは、SQL ServerのとOracleよう、尽力しています。MySQLのデフォルトの分離レベルが反復可能読み取りです。

彼は加えました:

1、トランザクション分離レベルがコミット読み出し時、書き込みデータのみ対応する行をロックします。

2、トランザクション分離レベルで反復可能読み取り、検索条件がインデックスのロックモードがデフォルトネクストキーロックである場合(主キーインデックスが含む)場合、テーブル全体をロックするならない検索条件指標、更新データ。ギャップがロックトランザクションに追加され、他のトランザクションは、ファントムリードを防止レコード隙間に挿入することができません。

シリアル読み出しと書き込みデータのトランザクション分離レベルは、テーブル全体をロックします3、。

 

おすすめ

転載: www.cnblogs.com/Bernard94/p/12362349.html