トランザクション処理の性質に関するACID(Atomicity,Consistency,Isolation,Durability)に関して説明します。
AICDとは信頼性のあるトランザクションシステムの持つべき性質として定義されている性質です。
スポンサード リンク
トランザクションを構成する個々の手順が「すべて成功する」「すべて失敗する」のどちらかであることです。
中途半端に成功した手順と失敗した手順が含まれてはいけません。一つでも手順が失敗したら、その他の手順もすべて失敗とします。
例:
銀行口座間の送金に関するトランザクションが以下から構成されるとします。
【手順1】口座Aから10万円を引く。
【手順2】口座Bから10万円を足す。
このトランザクションは必ず
・【手順1】【手順2】共に成功
・【手順1】【手順2】共に失敗
のどちらかである必要があります。
【手順1】のみ成功で【手順2】が失敗した場合、口座Aから10万円消えてしまいます。
例えば【手順1】成功後にデータベースに障害が発生し【手順2】を実行しなかった場合を考えます。
そのような場合はデータベース復帰後に【手順1】を失敗させるか、あるいは【手順2】を再度実行する必要があります。
整合性とも呼びます。トランザクションの仮定においてデータベースの整合性は保たれなくてはなりません。
これは当たり前の話です。
例:
主キー制約、外部キー制約、一意性制約に違反するトランザクションの禁止。
トランザクション実行中は対象データの変更や参照を他のトランザクションに許可してはいけません。
トランザクション実行中に対象データが(他のトランザクションより)更新された場合は矛盾が発生してしまいます。
また他のトランザクションからデータを参照する場合、参照タイミングによりデータの値が異なる可能性があるため同じくデータの正当性を保証できません。
例:
【手順1】口座Aから10万円を引く。
【手順2】口座Bから10万円を足す。
上記に関して他のトランザクションが口座A,口座Bを参照する場合、参照するタイミングにより残高が異なります。
そのようなことを避けるため、トランザクション実行中はデータは独立すべきです。
(*)実際のデータベース製品では「Isolation(独立性)」を厳守するとトランザクションがすべて直列化する可能性があるため「Isolation(独立性)」の一部を緩和しパフォーマンスを向上しています。
トランザクションが完了した場合、データは物理的、論理的に保護されなくてはならないという意味です。
システム障害その他よりデータを保護する必要があります。
例:
トランザクション完了のデータがメモリに記録されていたが、停電によるサーバ電源オフでメモリがクリアされ結果、トランザクションの結果が失われた。
これはDurability(耐久性)を満たさないシステムである例です。
スポンサード リンク