ACIDって何?わかりやすく解説

データベースってデータを保存する仕組みだけど、複数の人が同時にアクセスしたり、途中でエラーが起きたりすると、データが壊れたり、矛盾したデータが残ったりすることってあるよね。そんなトラブルを防ぐために「ACID」っていう4つのルールがあるんだよ。この記事を読めば、データベースがどうやって安全にデータを守ってるのかが、スッキリわかるようになるよ。

先生、「ACID」って何ですか?なんか化学の授業みたいな名前ですけど…

いいね、いい質問だ。ACIDっていうのはね、データベースが「安全にデータを保存する」ための4つのルールのことなんだ。つまり、化学のAcidじゃなくて、Atomicity、Consistency、Isolation、Durabilityっていう4つの英単語の頭文字をとったものなんだよ。
4つのルール…?それぞれどんなルールなんですか?

例えばね、銀行の口座を想像してみて。AさんがBさんに1000円送金する場合、「Aの口座から1000円を引く」と「Bの口座に1000円を足す」という2つの処理がセットでしょ。これがどちらもぜんぶ成功するか、ぜんぶ失敗するか、どちらかじゃないとダメっていうのがAtomicity(原子性)。これが第1のルールなんだ。
あ、なるほど。途中で失敗しちゃったら、Aさんの口座から1000円が消えただけで、Bさんには着かない、みたいなことですね。

その通り!そんなことになったら、1000円が消えてなくなっちゃうでしょ。残りの3つのルールはね、こういうトラブルを防ぐためのものなんだ。Consistency(一貫性)は「いつデータを見ても、正しい状態のデータが見える」というルール。Isolation(分離性)は「AさんとBさんが同時に操作しても、互いに邪魔しない」というルール。そしてDurability(永続性)は「一度保存したら、停電とかがあっても消えない」というルールなんだよ。
4つのルールで、全部のトラブルを防ぐんですね。すごい…

そう。これがACIDの考え方だ。データベースを使うときは、このルールが守られてることをエンジニアが確認しながら作ってるんだよ。
📝 3行でまとめると
  1. ACIDは、データベースが安全にデータを保存するための 4つのルールの頭文字をまとめたもの
  2. AtomicityConsistencyIsolationDurabilityが、すべて揃うことで、データの破損や矛盾を防ぐ
  3. 複数の人が同時にアクセスしても、停電が起きても、データベースのデータは 安全に守られる という約束
目次

もうちょっと詳しく

ACIDは、データベース管理システム(つまり、大量のデータを整理して保存・管理するシステム)が守るべき4つの性質をまとめたものです。特に複数の人が同時にデータにアクセスする場合や、処理の途中でコンピュータが急に電源を切られた場合など、いろいろなトラブルが起こる可能性があります。こうした「もしかしたら起こるかもしれない危険」に対して、4つのルールを厳しく守ることで、データを完璧に守ろうというのがACIDの考え方なんです。これは特に、銀行とか病院とか、データが間違ったら大変なことになる場所では、とても大切になります。

💡 ポイント
ACIDは「完璧さの約束」。銀行のお金の取引のような「失敗が許されない処理」のために、データベースが厳しく守ってるルールだよ。

⚠️ よくある勘違い

❌ 「ACID対応のデータベースは、絶対にデータが壊れない」
→ ACIDは「ACIDのルールを守ってる処理」に対してだけ、データ破損を防ぎます。プログラムが間違ったデータを入れたら、きちんと保存されちゃいます。つまり「おかしなデータが入ることは防がない」ってことですね。
⭕ 「ACID対応なら、複数の人が同時にアクセスしても、データが一貫性を保つ」
→ そこがACIDのいいところ。銀行の例みたいに「AさんがBさんに送金する」という「全部成功するか、全部失敗するか、どちらかじゃないとダメ」な処理をACIDが守ってくれます。
なるほど〜、あーそういうことか!

[toc]

第1のルール「Atomicity(原子性)」:全部か無か

Atomicityっていう言葉は、化学の「原子」と同じ語源で、「それ以上分割できない最小単位」という意味なんです。つまり、データベースの処理も「これ以上細かく分割できない1つの固まり」として扱うってことですね。

具体例で説明するね。あなたが学園祭でクラスの売上金を管理してるとしましょう。誰かが「1000円の品物を売った」って報告してきたら、あなたは「金庫に1000円を入れる」と「売上帳に『1000円』と書く」という2つのことをしなきゃいけません。もし、金庫に1000円を入れたけど、売上帳に書くのを忘れたら…あとで金庫の中身と売上帳の数字が合わなくなっちゃいますよね。

Atomicityが守ってくれるのは、こういう状況なんです。銀行の送金の例で言うと、「AさんのアカウントからB円を引く」と「BさんのアカウントにB円を足す」という2つの処理は、「この2つは絶対にセット。どちらかだけが成功することはない」という風に扱われます。もし「AさんのアカウントからB円を引く」のは成功したけど、「BさんのアカウントにB円を足す」に失敗しそうになったら、最初の処理もなかったことにしちゃうんです。つまり、両方成功するか、両方失敗するか、どちらかです

Atomicityがないとどうなる?

Atomicityがなかったら、大変ですよ。例えば、あなたがオンラインゲームで「アイテムAを手放す代わりに、アイテムBをもらう」という取引をするとしましょう。トレードシステムがAtomicityを守ってなかったら、こんなことが起こるかもしれません。

  • あなたのアイテムAがあっという間に消える
  • でも相手のアイテムBが届かない
  • あなただけ損する

こんなトラブルを防ぐために、Atomicityが「この2つの処理は全部か無かで」と厳しく言ってるわけなんです。

トランザクションって何?

データベースの世界では、「これ以上分割できない1つの処理」のことを「トランザクション」(つまり、複数のステップをまとめた「1つの取引」)と呼びます。Atomicityは「トランザクションは絶対にぶれない」という約束なんですね。

プログラマーが「この処理とこの処理はセット」と宣言すると、データベースが「わかった、このセット全体で全部成功するか全部失敗するか、どちらかにしてやる」と約束してくれるんです。

第2のルール「Consistency(一貫性)」:いつ見ても正しい

Consistencyは「いつどこからデータを見ても、矛盾がない、正しい状態のデータが見える」というルールです。つまり、データベースに保存されてるデータは常に「正しい状態」を保ってるってことですね。

例え話で説明します。あなたが持ってる通帳を想像してください。銀行のお金を送金したら、あなたの通帳に「残高:100万円」と書いてありますよね。もし、銀行の記録では「あなたの口座に100万円がある」って書いてるのに、あなたの通帳には「残高:50万円」って書いてあったら…変ですよね。こういう矛盾が起きないようにするのがConsistencyです。

ルールを守った状態とは

データベースでは、「保存すべきデータがある条件を満たしてる状態」のことを「一貫した状態」と言います。例えば、学校の成績管理システムだったら「各生徒に必ず1つ以上の成績が付いてる」とか「成績は0〜100の範囲」とか、そういうルールがありますよね。Consistencyは「このルールを常に守った状態でデータを保存する」という約束なんです。

複数の処理が同時に走ってても、データベースは「え、この処理で一貫性が壊れちゃう」って判断したら、その処理を待たせたり、キャンセルしたりするんです。つまり「正しい状態を守る」を優先するんですね。

実例:銀行の送金

銀行で送金するときを考えてみて。「全員の口座の残高の合計」は、いつ計算しても同じはずですよね。AさんがBさんに1000円を送金したら、

  • Aさんの残高は1000円減る
  • Bさんの残高は1000円増える
  • 「全員の残高の合計」は変わらない

こういう「不変のルール」を守った状態が「一貫してる」ってことなんです。

第3のルール「Isolation(分離性)」:同時アクセスでも邪魔しない

Isolationは「複数の人が同時にデータベースにアクセスしても、互いに邪魔しない」というルールです。つまり、Aさんが処理をしてる最中に、Bさんが別の処理をしても、2つの処理がぐちゃぐちゃにならないってことですね。

身近な例で説明します。あなたが図書館で本を借りるときを想像してください。Aさんが「この本を借りたい」と申し込んだ時点で、その本は「Aさんが借りるプロセスの途中」ですよね。もし、同時にBさんが「その本を借りたい」って言ったら…同じ本を2人が借りることになっちゃいます。図書館の貸出システムは、こういうトラブルを防ぐために「Aさんの借出処理が終わるまで、Bさんの申し込みは待つ」ってやってるんです。これがIsolationです。

同時アクセスのトラブル例

Isolationがなかったら、どんなことが起こるか見てみましょう。「Dirty Read(汚い読み込み)」っていうトラブルがあります。これはね、

  • Aさんが「残高から1000円引く」処理をしてる途中
  • Bさんが「今の残高は?」と読み込もうとする
  • まだ処理が終わってないのに、引かれた状態の「途中のデータ」を読み込んじゃう

みたいなことが起こるんです。つまり、本来見ちゃいけないデータを見ちゃう、ってことですね。

Isolationのレベル

実は、Isolationには「どのくらい厳しく分離するか」っていうレベルがあるんです。完全に分離すると(100パーセント別々に処理する)、処理が遅くなっちゃうんですね。だから、使い方に応じて「少しは許す」とか「厳しくする」とか、調整してるんです。

第4のルール「Durability(永続性)」:保存したら消えない

Durabilityは「一度データベースに保存したデータは、停電とか、コンピュータがぶっ壊れたとか、そういうことが起きても、絶対に消えない」というルールです。つまり、保存 = 永遠ってことですね。

例えば、あなたがスマートフォンで「友だちへのメール」を送信したとしましょう。送信ボタンを押したら、そのメールは「送信済み」として記録されます。もし、その瞬間にスマートフォンの電源が切れちゃったら…どうなると思いますか?Durabilityがなかったら、メールの記録が消えちゃう可能性があるんです。でも、メール会社のサーバーがDurabilityを守ってたら「いや、もう保存したから、絶対に消さないぞ」って約束してくれるわけなんです。

ハードディスクとメモリの違い

コンピュータには「メモリ」と「ハードディスク」という2種類の記憶装置がありますよね。メモリは「今、処理してるデータを一時的に置く場所」で、電源を切ると消えちゃいます。ハードディスク(やSSD)は「長期的に保存する場所」で、電源を切っても消えません。Durabilityは「一度保存したら、ハードディスクに書き込んで、電源が切れても絶対に消えないようにする」ってルールなんです。

ログの役割

データベースは、Durabilityを守るために「ログ」(つまり、「何をしたか」を記録したファイル)を使ってるんです。処理をするたびに「こういうデータを保存した」「こういう操作をした」ってログに記録して、ハードディスクに保存するんですね。

もし、データベースのコンピュータが突然壊れちゃったら、エンジニアは「あ、このログを見れば、さっきの処理が成功したか、失敗したか、途中でいつ止まったか」がわかるんです。そして、そのログから「本来どうなってるべきデータなのか」を復元できるんですね。

ACIDが全部そろう意味

ここまで、ACIDの4つのルールをそれぞれ説明してきました。でも、ここで大切なのは「4つ全部そろう」ってことなんです。

1つだけじゃダメな理由

例えば、Atomicityだけあって、ほかがなかったら…どうなると思います?「AさんからBさんへの送金は全部か無かで成功する」けど、「でも、AさんとCさんが同時に操作したら、データがぐちゃぐちゃになるかもしれない」って感じですね。完全に信用できないわけです。

Consistencyだけあったら、「いつ見ても矛盾がない」けど、「途中でコンピュータが壊れたら、保存したデータが消えちゃう」かもしれません。

ACIDの4つのルールは、互いに支え合ってるんです。4つ全部揃うことで、初めて「このデータベースは完璧だ」って言えるんですね。

実務での約束

実際のデータベース選びのときに、エンジニアは「このシステムはACID準拠ですか?」って聞くんです。つまり「この4つのルール、全部守ってくれますか?」って確認してるんですね。特に、銀行、病院、クレジットカード会社、通販サイトなど、「データが間違ったら大変」って業界では、ACID準拠が絶対条件になってます。

💡 こっちの記事も参考になるよ
RACIって何?わかりやすく解説
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大人になってから「これ知らなかった…」と恥ずかしい思いをした経験から、このサイトを作りました。お金・仕事・社会のしくみって、学校で教えてくれないのに知らないと損することだらけ。むずかしい言葉を「あーそういうことか!」って思えるまでかみ砕いて説明するのが得意です。主に経済・法律・税金・ライフイベント周りの用語を毎日更新中。

目次