ACID
データベーストランザクションの 4 つの特性 - 原子性、一貫性、分離性、永続性
データベーストランザクション
ACID とは
ACID は、データベーストランザクションが満たすべき 4 つの特性である。RDB (Aurora, RDS) は完全な ACID を提供し、DynamoDB は限定的な ACID をサポートする。
4 つの特性
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 と DynamoDB の ACID の違いを以下にまとめる。
| 特性 | RDB (Aurora) | DynamoDB |
|---|---|---|
| 原子性 | ✅ 完全 | ✅ TransactWrite (100 アイテムまで) |
| 一貫性 | ✅ 外部キー、CHECK 制約 | △ ConditionExpression |
| 分離性 | ✅ 分離レベルを選択 | △ 結果整合性 (デフォルト) |
| 永続性 | ✅ WAL | ✅ 3 AZ にレプリケーション |
ACID vs BASE
ACID と BASE の違いを以下にまとめる。
| 観点 | ACID (RDB) | BASE (NoSQL) |
|---|---|---|
| 一貫性 | 強い整合性 | 結果整合性 |
| 可用性 | 中 | 高い |
| スケーラビリティ | 垂直 | 水平 |
| 用途 | 金融、在庫管理 | SNS、ログ、キャッシュ |
いつ ACID が必要か
金融取引には ACID (Aurora) が必須。在庫管理には ACID または DynamoDB Transactions が適している。ユーザープロフィールやログ・分析データは結果整合性で十分。
詳しくは関連書籍を参照。
この記事は役に立ちましたか?
関連用語
トランザクション分離レベル
同時実行されるトランザクション間のデータの見え方を制御するデータベースの設定
結果整合性
分散システムで更新が全ノードに即座に反映されず、最終的に一貫した状態に収束するモデル
DynamoDB
AWS のフルマネージド NoSQL データベースで、ミリ秒単位のレイテンシとシームレスなスケーリングを提供する
NoSQL
リレーショナルモデル以外のデータベースの総称で、スケーラビリティと柔軟性を重視する
OLAP vs OLTP
オンライン分析処理 (OLAP) とオンライントランザクション処理 (OLTP) の違いと使い分け
ElastiCache
AWS のマネージドインメモリキャッシュサービスで、Redis と Memcached をサポートする