ACID
データベーストランザクションの 4 つの特性 - 原子性、一貫性、分離性、永続性
ACID とは
ACID は、データベーストランザクションが満たすべき 4 つの特性である。Aurora や RDS などの RDB はトランザクションで ACID を満たし、DynamoDB はトランザクション用の API の 1 回のリクエストの範囲で ACID を満たす。
4 つの特性
表のうち分離性の行だけが、同時に走る複数のトランザクションの間の性質を述べている。
| 特性 | 説明 | 例 |
|---|---|---|
| Atomicity (原子性) | 全て成功 or 全て失敗 | 送金: 引き落とし + 入金が両方成功 |
| Consistency (一貫性) | 制約を常に満たす | 残高が負にならない |
| Isolation (分離性) | 同時実行が干渉しない | 2 つの送金が正しく処理 |
| Durability (永続性) | コミット後はデータが失われない | 停電後もデータが残る |
原子性の例
下の例は口座 A から B への送金で、2 つの UPDATE を 1 つのトランザクションにまとめている。
-- RDB: トランザクションで原子性を保証
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 'A';
UPDATE accounts SET balance = balance + 100 WHERE id = 'B';
COMMIT;
-- 途中で失敗したら ROLLBACK → 両方とも元に戻る
DynamoDB の ACID
DynamoDB の TransactWriteItems は、最大 100 件の書き込みを全部成功か全部失敗の 1 つの操作にまとめる (2026 年 10 月時点)。
RDB vs DynamoDB の ACID
DynamoDB の列の上限と分離のレベルは、2026 年 10 月時点の AWS の文書による。
| 特性 | RDB (Aurora) | DynamoDB |
|---|---|---|
| 原子性 | トランザクションで対応 | TransactWriteItems で対応 (1 回で 100 件まで) |
| 一貫性 | 外部キーや CHECK 制約で宣言できる | ConditionExpression による条件付き書き込みで表現する |
| 分離性 | 分離レベルを選んで指定できる | トランザクションと単一アイテムの読み書きの間は Serializable、Query や Scan との間は Read Committed |
| 永続性 | WAL (先行書き込みログ) で担保する | 3 AZ へのレプリケーションで担保する |
ACID vs BASE
いつ ACID が必要か
AWS は、複数の項目を全部成功か全部失敗でまとめて変える ACID のトランザクションが向く処理として、金融取引の処理と注文の処理を挙げている。
詳しくは関連書籍を参照。
この記事は役に立ちましたか?
関連用語
トランザクション分離レベル
同時実行されるトランザクション間のデータの見え方を制御するデータベースの設定
結果整合性
分散システムで更新が全ノードに即座に反映されず、最終的に一貫した状態に収束するモデル
DynamoDB
AWS のフルマネージド NoSQL データベースで、ミリ秒単位のレイテンシとシームレスなスケーリングを提供する
集約
ドメイン駆動設計において、一貫性を保つべきオブジェクト群をまとめ、単一のルートエンティティ経由でアクセスする設計パターン
トランザクショナルアウトボックス
データベースへの書き込みとイベント発行を原子的に行うための分散システムパターン
MySQL
世界で広く使われるオープンソースのリレーショナルデータベース管理システム
関連する記事
技術書ランキングの決定版はどれか - IT エンジニア本大賞の歴代大賞と言及数データで読む
技術書ランキングを探している人向けに、検証可能な 2 つのデータ (IT エンジニア本大賞の歴代大賞 2014-2026 年と、当サイトの Qiita / Zenn 言及数ランキング) を整理。歴代受賞作の一覧表と、ランキングを選書に活かす方法を解説します。
README を書くように本を読む - エンジニアのための構造化読書法
エンジニアが日常的に書く README のフォーマットを読書に応用する方法を紹介します。目的 / 使い方 / 注意点の 3 点で本の内容を整理すると、半年後に読み返しても実務で引き直せる記録として残ります。
バグを生むのは知識不足ではなく想像力不足である
バグの多くは、コードを書いた時点で「こういうケースもありうる」と想像できなかったことが原因です。想像力を鍛える読書法と、エッジケースへの感度を高める方法を解説します。