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 が適している。ユーザープロフィールやログ・分析データは結果整合性で十分。
詳しくは関連書籍を参照。