トランザクションは、データの変更と取得を可能にする基本的な操作です。ただし、データベースの整合性を確保するには、障害やエラーが発生した場合でも一貫性の正確性と信頼性を維持する方法でこれらのトランザクションが実行されることが重要です。ここで ACID プロパティが役に立ちます。
ACID は、Atomicity Consistency Isolation and Durability の略です。
ACIDの特性:
ACID には 4 つの特性があります
1. 原子性
アトミック性とは、トランザクションがすべての操作が成功するか、何も適用されないかのオール・オア・ナッシングであることを意味します。いずれかの部分で障害が発生した場合、データベースの一貫性を保つためにトランザクション全体がロールバックされます。
- 専念 : トランザクションが成功すると、変更は永続的に適用されます。
- 中止/ロールバック : トランザクションが失敗した場合、トランザクション中に行われた変更はすべて破棄されます。
例 : 次のトランザクションを考えてみましょう T からなる T1 そして T2 : 口座から0を送金 × アカウントに そして 。
原子性T1 の完了後、T2 の完了前にトランザクションが失敗した場合、データベースは不整合な状態のままになります。 Atomicity では、トランザクションの一部が失敗した場合、プロセス全体が元の状態にロールバックされ、部分的な変更は行われません。
トランザクションの一貫性とは、トランザクションの前後でデータベースが有効な状態を維持する必要があることを意味します。
- 有効な状態は、定義されたすべてのルールの制約と関係 (主キーの外部キーなど) に従います。
- トランザクションがこれらのルールのいずれかに違反すると、データの破損や無効化を防ぐためにロールバックされます。
- トランザクションで 1 つのアカウントからお金が差し引かれるが、(送金で) 別のアカウントに追加されない場合、一貫性に違反します。
例 : 銀行システム内のすべての残高の合計が常に一定である必要があると仮定します。送金前の合計残高は 0 です。トランザクション後は、合計残高は 0 のままでなければなりません。トランザクションが途中で失敗した場合 (1 つのアカウントを更新し、もう 1 つのアカウントを更新しないなど)、システムはトランザクションをロールバックすることで一貫性を維持する必要があります。
T が発生する前の合計 = 500 + 200 = 700 。
T 発生後の合計 = 400 + 300 = 700 。
一貫性3. 隔離
分離により、トランザクションは相互に影響を与えることなく独立して実行されます。 1 つのトランザクションによって行われた変更は、コミットされるまで他のトランザクションには表示されません。
これにより、同時トランザクションの結果が次々に実行された場合と同じになることが保証され、次のような問題が防止されます。
- ダーティリード: コミットされていないデータの読み取り
- 反復不可能な読み取り: 2 つの読み取りの間にデータが変更される
- ファントムはこう読む。 トランザクション中に新しい行が表示される
例 : 2 つのトランザクション T と T'' を考えます。
- X = 500 Y = 500
分離説明:
1. トランザクション T:
- T は X から Y に転送したいと考えています。
- T 読み取り そして (値: 500) X から減算され (新しい X = 450)、Y に加算されます (新しい Y = 550)。
2. トランザクション T'':
- て ' が開始され、X (500) と Y (500) が読み取られます。
- 合計は 500 + 500 = 1000 となります。
- 一方、X と Y の値はそれぞれ 450 と 550 に変化します。
- したがって、正しい合計は 450 + 550 = 1000 となるはずです。
- 分離により、別のトランザクション (T) が進行中に T'' が古い値を読み取らないことが保証されます。
- トランザクションは独立している必要があり、T'' は T がコミットした後にのみ最終値にアクセスする必要があります。
- これにより、T'' によって計算された合計が正しくないなど、一貫性のない結果が回避されます。
4.耐久性:
耐久性により、トランザクションがコミットされると、システムに障害が発生した場合でも、その変更は永続的に保存されます。データは不揮発性メモリに保存されるため、データベースはデータを失うことなく最後にコミットされた状態に回復できます。
Javaの部分文字列メソッド
例 : アカウント A からアカウント B への送金が成功すると、変更内容がディスクに保存されます。コミット直後にクラッシュが発生した場合でも、システムが回復すると転送の詳細はそのまま残り、耐久性が確保されます。
ACID プロパティが DBMS の設計と運用に与える影響
の 全体として、ACID プロパティは、各トランザクションが他の操作から隔離されて一貫した結果を生成する単一のユニットとして機能する操作のグループであり、トランザクションが行う更新が永続的に保存されるように、データベースの正確性と一貫性を保証するメカニズムを提供します。
ACID プロパティは、トランザクションが正常に完了するか、中断された場合に痕跡を残さないようにすることで、DBMS のデータの整合性を保護します。これにより、部分的な更新によるデータの破損が防止され、データベースが有効な状態の間でのみ遷移することが保証されます。
2. 同時実行制御
ACID プロパティは、同時トランザクションを管理するための強固なフレームワークを提供します。分離により、トランザクションが相互に干渉しないことが保証され、更新の損失、一時的な不整合、コミットされていないデータなどのデータ異常が防止されます。
3. リカバリとフォールトトレランス
耐久性により、システムがクラッシュした場合でもデータベースは一貫した状態に回復できます。 Atomicity プロパティと Durability プロパティのおかげで、トランザクションが途中で失敗した場合でも、データベースは一貫した状態を維持します。
| 財産 | 財産を維持する責任 |
|---|---|
| 原子性 | トランザクションマネージャー |
| 一貫性 | アプリケーションプログラマー |
| 分離 | 同時実行制御マネージャー |
| 耐久性 | 回復 |
データベースにおける ACID の重要な使用例
最新のアプリケーションでは、データの信頼性と一貫性を確保することが非常に重要です。 ACID プロパティは、次のような分野では基本的なものです。
- 銀行業 : 送金や入出金を伴う取引は、エラーや詐欺を防ぐために厳密な一貫性と耐久性を維持する必要があります。
- 電子商取引 : トラフィックが多いときでも在庫数の注文と顧客の詳細が正しく一貫して処理されるようにするには、ACID 準拠が必要です。
- 健康管理 : 患者記録の検査結果と処方箋は、厳格な一貫性の完全性とセキュリティ基準に準拠する必要があります。