ACIDトランザクション
ACIDトランザクションは、データベース操作のグループが、アトミックで、一貫性を保ち、他のトランザクションから隔離され、一度コミットされると永続的であるという、単一の信頼できる単位として動作することを保証します。
Definition
トランザクションとは、システムがACID保証(原子性、一貫性、分離性、永続性)をもって実行する、1つ以上のデータベース操作からなる作業単位であり、コミット(その効果を永続化する)またはアボート(そのすべての効果を取り消す)のいずれかで終了します。
Scope
このトピックでは、トランザクションの抽象化と4つのACID特性について詳しく説明します。具体的には、原子性(すべて実行されるか、何も実行されないかのコミットまたはアボート)、一貫性(各トランザクションがデータベースをある有効な状態から別の有効な状態へ移行させること)、分離性(同時実行されるトランザクションが互いに観測可能な干渉をしないこと)、および永続性(コミットされた効果が障害を乗り越えて持続すること)です。コミットとアボートのセマンティクス、およびこれらの特性が並行性制御とリカバリにどのように関連するかを扱います。分離性と永続性を実装する特定のプロトコルは、隣接するトピックであるため、ここでは扱いません。
Core questions
- ACID特性のそれぞれは何を保証しますか?
- コミットとアボートはトランザクションの「すべて実行されるか、何も実行されないか」という動作をどのように定義しますか?
- 分離性は直列化可能性と並行性制御にどのように関連しますか?
- システムクラッシュにもかかわらず、永続性はどのように達成されますか?
- 長期間実行される作業や分散作業に対するトランザクションモデルの限界は何ですか?
Key concepts
- トランザクション作業単位
- 原子性
- 一貫性
- 分離性
- 永続性
- コミットとアボート
- ロールバック
- トランザクション状態モデル
Key theories
- 原子性と永続性
- 原子性は、トランザクションの効果が障害時でも完全に適用されるか、全く適用されないかのいずれかであることを保証し、永続性は、一度トランザクションがコミットされると、その変更がクラッシュを乗り越えて存続することを保証します。どちらもロギングとリカバリを通じて実装されます。
- 一貫性と分離性
- 一貫性は、コミットされた各トランザクションがデータベースの整合性制約を維持することを要求し、分離性は、同時実行されるトランザクションが、ある直列順序に等価な結果を生成し、互いに中間状態を隠蔽することを要求します。
- トランザクションの概念とその限界
- トランザクションの抽象化は、障害と並行性に関する推論を簡素化しますが、グレイは長期間にわたる活動やシステム間の境界における限界を指摘し、サガや分散トランザクションに関するその後の研究を促しました。
Clinical relevance
ACIDトランザクションは、データベースが重要な操作において信頼される理由です。資金移動、在庫削減、予約といった操作は、完全に完了するか、全く完了しないかのいずれかであり、システム障害を乗り越えて存続します。これが、トランザクションデータベースが銀行、商業、記録管理システムの基盤となっている理由です。
History
ジム・グレイは1981年にトランザクションの概念とその利点と限界を明確にしました。ハーダーとロイターは1983年のトランザクション指向リカバリに関する調査でACIDという頭字語を考案しました。IBMのSystem Rを中心に開発されたこれらのアイデアは、信頼性の高いデータ処理の標準モデルとなり、その後のすべてのデータベースシステムに影響を与えました。
Key figures
- Jim Gray
- Andreas Reuter
- Theo Härder
Related topics
Seminal works
- gray1981
- haerder1983
- gray1992
Frequently asked questions
- ACIDにおける一貫性とCAP定理における一貫性の違いは何ですか?
- これらは異なる概念です。ACIDの一貫性は、トランザクションがデータベースの整合性制約を維持し、有効な状態間を移行することを意味します。CAPの一貫性は、分散システム内のすべてのレプリカが最新の値について合意することを指します。システムは一方を満たしても他方を満たさない場合があるため、同じ単語が2つの文脈で異なる特性を表しています。
- ACID特性は互いに独立していますか?
- これらは概念的には異なる保証ですが、重複するメカニズムによって実装されています。原子性と永続性はロギングとリカバリから生じ、分離性は並行性制御から生じます。そして一貫性は、アプリケーションのトランザクションロジックと、システムによる他の3つの特性の強制によって共同で維持されます。