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

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

この記事は役に立ちましたか?

関連用語

関連する記事