PR

ACID特性とは?初心者向けにわかりやすく3分で解説

Database

ACID特性とは、トランザクション処理が保持すべき4つの性質の頭文字を取った単語です。

ACID特性
  • A:Atomicity(原子性)
  • C:Consistency(一貫性)
  • I:Isolation(独立性)
  • D:Durabirity(永続性)

トランザクション処理とは、ある一定の処理の固まりを表す用語。

例えば、AさんからBさんに10万円の送金を行う場合、システムでは以下の3つの処理をすべて行う必要があります。

トランザクション処理の例
  • ①:送金が可能かどうかを確認
  • ②:Aさんの口座残高から10万円を減額
  • ③:Bさんの口座残高に10万円を増額
トランザクション処理とは

上記の①~③の処理は1セットとして扱わないと不都合です。①②だけ実行されて、③だけ実行されないようなケースが発生すると大変ですよね。

このトランザクション処理には保持すべき4つの特性があり、それをACID特性と呼びます。データベーススペシャリスト試験等でも必出の超・重要知識です。

このページではACID特性とは何か?を初心者でも理解できるよう具体例を用いながらわかりやすく解説します。

このページで学べる内容
  • トランザクション処理とは?
  • ACID特性とは?
    • A:Atomicity(原子性)
    • C:Consistency(一貫性)
    • I:Isolation(独立性)
    • D:Durabirity(永続性)

データベースエンジニアを目指す方はもちろん、システムエンジニアやプログラマーを目指す方であれば知らないと恥ずかしい超・基本知識です。

是非最後までご覧ください。

スポンサーリンク

ACID特性とは:わかりやすく

ACID特性とは、トランザクション処理が保持すべき4つの性質の頭文字を取った単語です。

ACID特性
  • A:Atomicity(原子性)
  • C:Consistency(一貫性)
  • I:Isolation(独立性)
  • D:Durabirity(永続性)

先にも紹介した通りトランザクション処理は1セットで複数の処理(①データベースの読み込み→②データベースの更新→③データベースの更新)が行われます。

トランザクション処理の例

ですが、このとき①②だけ処理が行われ、③だけが行われないようなことが発生してしまう可能性がある場合、システムとしての信頼性にかけてしまいます。

ちなみに、上記の例は「①~③が1セットとして全て実行されること or 実行されないこと」を表すAtomicity(原子性)の説明です

原子性を始めとする4つの性質を1セットで呼び表した単語が「ACID特性」で、実は現代のデータベースではこのACID特性を備えていることがほとんど必須となっています。

ここからは、より具体例にACID特性について1個1個ご説明していきます。

Atomicity:原子性

ACID特性
  • A:Atomicity(原子性)
  • C:Consistency(一貫性)
  • I:Isolation(独立性)
  • D:Durabirity(永続性)

Atomicity(原子性):トランザクション処理は完全に実行される(COMMIT)、もしくは完全に実行されない(ROLLBACK)性質を表します。

①②の処理だけが実行されてしまうと、データベースが不完全な状態に陥ります。

送金の例でいえば、Aさんの口座からは10万円が減額されるのに、Bさんの口座は増額されない・・・ということに。

このように、1セットの処理が途中で失敗した場合にはすべてを元に戻す仕組みをトランザクションが備えている場合に、そのトランザクションは原子性があるということができます。

Atomicity:原子性 → ALL or NOTHING の原則!

Consistency:一貫性

ACID特性
  • A:Atomicity(原子性)
  • C:Consistency(一貫性)
  • I:Isolation(独立性)
  • D:Durabirity(永続性)

Consistency(一貫性):トランザクションが必ず一定のルールに沿ってデータベースに変更を行う性質を表します。

別の言い方をすればデータベースの条件を満たすようにトランザクションが実行される性質を表します。

例えば、口座番号は "7桁である" という条件がデータベースに設定されているとしたら、誤って8桁の口座番号が指定されてもエラーとなり、データベースの整合性が保たれるようになるような性質です。

SQLでいえばCREATE TABLE文などで、カラムのデータ型や桁数、NOT NULL条件を指定したりしますが、それを行う目的がこの一貫性という性質を満たすということです。

Consistency:一貫性 → 変なデータは発生させませんよ・・の性質!

Isolation:独立性

ACID特性
  • A:Atomicity(原子性)
  • C:Consistency(一貫性)
  • I:Isolation(独立性)
  • D:Durabirity(永続性)

Isolation(独立性):複数の処理が同時に実行されても、それぞれがお互いに干渉しない性質を表します。

例えば、複数のプログラムが同時に同じデータベースやテーブルを更新するような場合、一方のトランザクションがWAIT(処理を中断)したり、エラーにしたりすることで、お互いがお互いのトランザクションを邪魔しないようにする性質です。

Bさんの口座に10万円の送金が行われるタイミングで、逆にBさんからAさんに20万円の送金があったとします。このとき、Bさんの口座情報から10万円が引かれると同時に、20万円の増額処理が走ってしまうと結果の整合性が保てません。

このような不整合が起きないという性質がIsolation(独立性)です。

独立性を維持するための代表的な仕組みの1つが、テーブルのロック(共有ロック/専有ロック)です。

Isolation:独立性 → 同時に更新かけても整合性が担保される・・・の性質!

Durabirity:永続性

ACID特性
  • A:Atomicity(原子性)
  • C:Consistency(一貫性)
  • I:Isolation(独立性)
  • DDurabirity(永続性)

Durabirity(永続性 または 障害耐久性):一旦確定(COMMIT)したデータは、その後障害が発生しても永遠に変わらず保持される性質

言い方を変えると、Durabirity(永続性)とはシステム障害に耐えうる性質と言えます。

急に精神論のように聞こえる特性のように思えますが、実は結構奥が深い特性です。

例えば、データベースの冗長化や、ログの保管、ログを用いた障害復旧設計などがDurabirity(永続性)に関連する仕組みと言えます。

Durabirity:永続性 → ずっと変わらずにデータが保持される・・性質!

以上で、ACID特性の解説は以上になります。最後に復習を兼ねてざっくりとしたACID特性のまとめを掲載しておきます。

ACID特性まとめ
  • A:Atomicity(原子性)
    ALL or NOTHING ・・・の性質!
  • C:Consistency(一貫性)
    変なデータは発生しませんよ・・・の性質!
  • I:Isolation(独立性)
    同時に更新かけても整合性が担保されますよ・・・の性質!
  • D:Durabirity(永続性)
    ずっと変わらずにデータが保持される・・・性質!

システムエンジニアを目指したい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

タイトルとURLをコピーしました