ACID

データベーストランザクションの 4 つの特性 - 原子性、一貫性、分離性、永続性

データベーストランザクション

ACID とは

ACID は、データベーストランザクションが満たすべき 4 つの特性である。RDB (Aurora, RDS) は完全な ACID を提供し、DynamoDB は限定的な ACID をサポートする。

4 つの特性

特性 説明
Atomicity (原子性) 全て成功 or 全て失敗 送金: 引き落とし + 入金が両方成功
Consistency (一貫性) 制約を常に満たす 残高が負にならない
Isolation (分離性) 同時実行が干渉しない 2 つの送金が正しく処理
Durability (永続性) コミット後はデータが失われない 停電後もデータが残る

原子性の例

-- 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 は TransactWrite で最大 100 アイテムの原子的操作をサポートする。ConditionExpression で一貫性を担保するが、RDB ほどの完全な ACID ではない。

RDB vs DynamoDB の ACID

特性 RDB (Aurora) DynamoDB
原子性 ✅ 完全 ✅ TransactWrite (100 アイテムまで)
一貫性 ✅ 外部キー、CHECK 制約 △ ConditionExpression
分離性 ✅ 分離レベルを選択 △ 結果整合性 (デフォルト)
永続性 ✅ WAL ✅ 3 AZ にレプリケーション

ACID vs BASE

観点 ACID (RDB) BASE (NoSQL)
一貫性 強い整合性 結果整合性
可用性 高い
スケーラビリティ 垂直 水平
用途 金融、在庫管理 SNS、ログ、キャッシュ

いつ ACID が必要か

金融取引には ACID (Aurora) が必須。在庫管理には ACID または DynamoDB Transactions が適している。ユーザープロフィールやログ・分析データは結果整合性で十分。

詳しくは関連書籍を参照。

関連用語