ACID

ACID はデータベーストランザクションの4つの基本(きほん) 特性(とくせい) であり、データの信頼性(しんらいせい)一貫性(いっかんせい)保証(ほしょう) する。

ACID Transaction

Transaction(トランザクション)

データベーストランザクションとは、データベースに(たい) する一連(いちれん)()() りと()()操作(そうさ) のことである。すべての操作(そうさ)正常(せいじょう)実行(じっこう) された場合(ばあい) のみトランザクションがコミットされ、途中(とちゅう)失敗(しっぱい) した場合(ばあい) はすべての操作(そうさ) がロールバックされる。

Atomicity(原子性)

トランザクション(ない)操作(そうさ) は、すべて完了(かんりょう) するか、すべて失敗(しっぱい) するかのどちらかである。

Consistency(一貫性)

トランザクションによるデータベースの変更(へんこう) は、データベースを一貫性(いっかんせい) のある状態(じょうたい) から(べつ)一貫性(いっかんせい) のある状態(じょうたい)遷移(せんい) させなければならない。

Isolation(分離性)

トランザクション(かん)分離(ぶんり) レベルには4つのレベルがある:

分離レベル説明
Read Uncommitted未コミット読み取り
Read Committedコミット済み読み取り
Repeatable Read反復可能読み取り
Serializable直列化可能

Read Uncommitted

  • 特性(ほか) のトランザクションがまだコミットしていないデータを()() ることができる
  • 防止する問題:なし
  • 発生しうる問題ダーティリード(Dirty Read)
  • 適用シナリオ
    • データ不整合(ふせいごう)問題(もんだい)発生(はっせい) しやすいため、使用(しよう)(まれ)
    • データ一貫性(いっかんせい)最低(さいてい) だが、パフォーマンスは最高(さいこう)
    • パフォーマンスがデータの正確性(せいかくせい) より重要(じゅうよう)場合(ばあい)使用(しよう) される可能性(かのうせい) がある

Read Committed

  • 特性:コミット() みのデータのみ()() ることができる
  • 防止する問題:ダーティリード
  • 発生しうる問題反復不能読み取り(Non-Repeatable Read)
  • 適用シナリオ:パフォーマンスとデータ一貫性(いっかんせい) のバランスが() く、()()操作(そうさ)()()操作(そうさ) より(おお) いアプリケーションに(てき) している

Repeatable Read

MySQL デフォルトの分離レベル

InnoDB ストレージエンジンでは、ギャップロック(Gap Lock)機構(きこう) によりファントムリードを防止(ぼうし) するが、特定(とくてい)状況(じょうきょう) ではファントムリードが発生(はっせい) する可能性(かのうせい) がある。良好(りょうこう) なデータ一貫性(いっかんせい)提供(ていきょう) し、ほとんどのアプリケーションシナリオに(てき) している。

  • 特性(おな) じトランザクション(ない)複数回(ふくすうかい)SELECT一貫(いっかん) したデータを(かえ)必要(ひつよう) がある

Serializable

  • 特性最高(さいこう)分離(ぶんり) レベル。トランザクションを順次(じゅんじ) 実行(じっこう) させ、コミット() みのデータのみ()()可能(かのう)
  • 防止する問題:ダーティリード、反復不能(はんぷくふのう) ()() り、ファントムリードを完全(かんぜん)防止(ぼうし)
  • 適用シナリオ
    • ()() きが(たが) いに干渉(かんしょう) しない / 複数(ふくすう) のトランザクションが同時(どうじ)実行(じっこう) される(さい)(かく) トランザクションの操作(そうさ)(たが) いに影響(えいきょう) しない
    • パフォーマンスは最低(さいてい)()() った(ぎょう)隣接(りんせつ) するギャップをロックするため、同時実行性(どうじじっこうせい)低下(ていか) する
    • 金融(きんゆう) 取引(とりひき) システムなど、(きわ) めて(たか) いデータ一貫性(いっかんせい)要求(ようきゅう) されるアプリケーションに(てき) している

Serializable の例:

TimeTransaction ATransaction B
T0SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
T1BEGIN;BEGIN;
T2SELECT * FROM employees WHERE id = 1 FOR UPDATE;
T3UPDATE employees SET salary = 6666.00 WHERE id = 1 FOR UPDATE; (ブロックされる)
T4UPDATE employees SET salary = 33333.00 WHERE id = 1;
T5COMMIT;
T6UPDATE employees SET salary = 99999.00 WHERE id = 1;
T7COMMIT;

Durability(永続性)

データの永続性(えいぞくせい) 。トランザクションがコミットされると、その結果(けっか)永続的(えいぞくてき) であり、システム障害(しょうがい)発生(はっせい) しても(うしな) われない。

関連トピック