トランザクションは、タスクのグループとして定義することができます。
単純なトランザクションを例に挙げてみましょう。 例えば、銀行員がAさんの口座からBさんの口座に500ルピーを送金するとします。
A の口座
Open_Account(A)Old_Balance = A.balanceNew_Balance = Old_Balance - 500A.balance = New_BalanceClose_Account(A)
B の口座
Open_Account(B)Old_Balance = B.balanceNew_Balance = Old_Balance + 500B.balance = New_BalanceClose_Account(B)
ACID の特性
トランザクションはプログラムの非常に小さな単位であり、いくつかの低レベルのタスクを含んでいます。
-
Atomicity (原子性) – この特性は、トランザクションが原子的な単位として扱われなければならないことを示しており、つまり、その操作のすべてが実行されるか、あるいはまったく実行されないかのどちらかです。 データベースには、トランザクションが部分的に完了したままの状態があってはなりません。 状態は、トランザクションの実行前、またはトランザクションの実行/中断/失敗後に定義されるべきです。 どのようなトランザクションも、データベースに存在するデータに悪影響を及ぼしてはなりません。
-
耐久性 – データベースは、システムが故障または再起動した場合でも、すべての最新の更新を保持できるだけの耐久性がなければなりません。 トランザクションがデータベース内のデータ チャンクを更新してコミットした場合、データベースは変更されたデータを保持します。
-
隔離 – 複数のトランザクションが同時に並行して実行されているデータベース システムでは、隔離の特性により、すべてのトランザクションがシステム内の唯一のトランザクションであるかのように実行されます。
-
スケジュール – トランザクションの時系列的な実行順序をスケジュールと呼びます。
-
シリアル
-
シリアル スケジュール – 1 つのトランザクションが最初に実行されるように、トランザクションが整列しているスケジュールです。 最初のトランザクションがそのサイクルを完了すると、次のトランザクションが実行されます。 トランザクションは次々と順番に実行されます。
マルチトランザクション環境では、シリアルスケジュールがベンチマークとして考えられます。 トランザクション内の命令の実行順序は変更できませんが、2つのトランザクションがランダムに命令を実行することができます。 この実行は、2つのトランザクションが相互に独立しており、異なるセグメントのデータを処理している場合には害はありませんが、これら2つのトランザクションが同じデータを処理している場合には、結果が異なる可能性があります。
この問題を解決するために、トランザクションが直列化可能であるか、またはそれらの間に何らかの同等の関係がある場合、トランザクション スケジュールの並列実行を許可します。
等価スケジュール
等価スケジュールには次のような種類があります –
結果の等価性
2つのスケジュールが実行後に同じ結果になる場合、それらは結果の等価性と呼ばれます。 ある値では同じ結果になり、別の値のセットでは異なる結果になるかもしれません。
表示の同等性
2つのスケジュールは、両方のスケジュールのトランザクションが同じような方法で同じようなアクションを実行する場合、表示の同等性があります。
-
-
TがS1でJが書いた値を読めば、S2でJが書いた値も読めます。
-
TがS1のデータ値に最終書き込みを行えば、S2のデータ値にも最終書き込みを行います。
Conflict Equivalence
2つのスケジュールが次のような特性を持つ場合、相反することになります –
- 2つとも異なるトランザクションに属している
- 2つとも同じデータ アイテムにアクセスしている
- 少なくともどちらかが「書き込み」操作である
。
相反する操作を持つ複数のトランザクションを持つ2つのスケジュールは、以下の場合に限り、競合等価であると言われます –
- 両方のスケジュールに同じトランザクションのセットが含まれている
- 相反する操作のペアの順序が両方のスケジュールで維持されている
注 – ビュー等価なスケジュールはビューシリアライズ可能であり、競合等価なスケジュールは競合シリアライズ可能です。
States of Transactions
データベース内のトランザクションは、以下のいずれかの状態になります –
-
Active – この状態では、トランザクションが実行されています。
-
一部コミット – トランザクションが最後の操作を実行すると、一部コミットの状態にあると言われます。
-
失敗 – データベース回復システムによるチェックのいずれかが失敗すると、トランザクションは失敗の状態にあると言われます。
-
失敗 – チェックのいずれかが失敗し、トランザクションが失敗状態になった場合、リカバリ マネージャはデータベースへのすべての書き込み操作をロールバックして、データベースをトランザクションの実行前の元の状態に戻します。 このような状態のトランザクションは中止と呼ばれます。 データベース回復モジュールは、トランザクションが中止された後、次の 2 つの操作のいずれかを選択できます。