データベースの分離プロパティを理解する

分離は データベース-変更が行われる方法とタイミング、およびそれらが相互に、ユーザー、およびシステムに表示されるようになるかどうかを制御するレベルのプロパティ。 分離の目標の1つは、それぞれの実行に悪影響を与えることなく、複数のトランザクションを同時に発生させることです。

分離は、データベースのトランザクションプロパティの不可欠な部分です。 それはの3番目のプロパティです ACID(Atomicity、Consistency、Isolation、Durability) データの一貫性と正確性を維持するための標準。

分離のしくみ

ジョーが発行した場合 データベーストランザクション メアリーが別のトランザクションを発行すると同時に、両方のトランザクションがデータベース上で分離された方法で動作する必要があります。 データベースは、Maryを実行する前にJoeのトランザクション全体を実行するか、またはその逆を実行する必要があります。

この排他性により、Joeのトランザクションは、Maryのトランザクションの一部の副作用として生成され、最終的にデータベースにコミットされない中間データを読み取ることができなくなります。

分離プロパティは、特定のトランザクションが最初に実行されることを保証するものではなく、相互に干渉しないことを保証するだけです。

分離レベル

分離には4つのレベルがあります。 分離度を高くすると、ユーザーが同じデータに同時にアクセスする機能が制限されます。 分離レベルが高いほど、必要なシステムリソースが多くなり、データベーストランザクションが相互にブロックする可能性が高くなります。

  • シリアル化可能 は最高レベルです。つまり、別のトランザクションを開始する前に、1つのトランザクションを完了する必要があります。
  • 繰り返し可能読み取り トランザクションが終了していなくても、トランザクションが開始されるとトランザクションにアクセスできるようにします。 このレベルでは、既存の行への変更が読み取れない場合でも、ファントム読み取り、または挿入または削除された行の認識が可能になります。
  • コミット済みを読む データがデータベースにコミットされた後はデータにアクセスできますが、それ以前はアクセスできません。
  • コミットされていない読み取り は分離の最低レベルであり、変更が行われる前にデータにアクセスできるようにします。

分離レベルが低くなると、ユーザーがコミットされていない依存関係などの読み取り現象に遭遇する可能性も高くなります。 ダーティリードと呼ばれ、別のユーザーによって変更されたがデータベースにまだコミットされていない行からデータが読み取られます。