ACID=酸っていう単語があるらしい(※ACID特性のお話です)
はじめに
NoSQLはCAP定理というものを意識する必要がありました。
一方、RDBMSはACID特性というものを覚えておく必要があるらしいです。
今回はそんなACID特性の話です。
ACID特性とSQLトランザクションの関係
ACID特性は、リレーショナルデータベース管理システム(RDBMS)の基本原則で、データの一貫性や信頼性を確保するために不可欠な要素です。
特にSQL(Structured Query Language)を用いたトランザクションの操作において、重要な役割を果たします。
※トランザクション
データベースに対する一連の操作を一つの単位として扱う概念で、トランザクションは全ての操作が成功するか、あるいは失敗して操作が取り消されるか(All or Nothing)のいずれかを保証します。
これによりデータの一貫性・整合性が保たれます。
1Atomicity(原子性)
概要
原子性は、トランザクション内のすべての操作が完全に実行されるか、全く実行されないかを保証する項目です。
これにより、トランザクションが部分的に実行されることがなくなり、中途半端な状態が存在しません。
役割
システム障害やエラーが発生した場合でも、データの整合性を保つ役割を果たします。
例えば、銀行の送金処理において送金元の口座からお金が引き起こされる一方、送金先の口座に反映されないといった中途半端な状態を防ぎます。
もしどちらかの操作が失敗した場合、全体が取り消されるためデータの一貫性が維持されます。
2Consistency(一貫性)
概要
一貫性とは、トランザクションが開始される前と終了した後のデータべ―スの状態が一貫したルールや制約に従っていることを保証する項目です。
つまり、トランザクションによりデータベースの不整合が生じることはありません。
役割
データベースの整合性制約(例:主キー、外部キー、一意性制約など)が常に満たされることを保証します。
例えば、商品在庫の更新において、在庫数がマイナスになるような不正な操作を防ぎます。
これによりビジネスロックに基づいた正確なデータの維持が可能です。
3Isolation(独立性)
概要
独立性は、複数のトランザクションが同時に実行されても、それぞれのトランザクションが他のトランザクションの影響を受けないようにする項目です。
これによって、トランザクションはまるで単独で実行されているかのように振舞います。
役割
独立性は、並行処理時のデータの整合性を保つために重要です。
例えば、同時に複数のユーザーが同じ商品を購入しようとした場合、独立性により各トランザクションは他のトランザクションの影響を受けません。
これにより、データの競合や不整合が発生するのを防ぎます。
4Durability(持続性)
概要
持続性は、トランザクションが成功した後、その結果が永続的に保存されることを保証する特性です。
システム障害やクラッシュが発生しても、データが失われなくなります。
役割
持続性は、トランザクション完了後のデータの永続的な保存を確保するために重要です。
例えば、注文処理が完了した後、システム障害が発生しても、その注文情報は確実に保存され、再起動後もデータが復元されます。
これにより、システムの信頼性とデータの保全性が高まります。
また持続性は通常、ログファイルや永続的ストレージへのデータ書き込みを通じて実現されます。
まとめ
ACID特性は、データベースシステムの設計と運用において極めて重要な要素で、何故データベースが広く使われているかの理由にもつながります。
CAP定理と違いACID特性は4項目全てを満たす必要があります。
CAP定理と似ている項目もあるので理解が大変ですが、しっかりと覚えて区別しておく必要があるので、必須で覚えておく項目です。