最近DB ( SQL ) を勉強しているのですが、DB はすごくよくできたシステムだなーと思っています。(何様)
いままでは漠然と「すごいなー」とアホみたいな感想しかもっていなかったのですが、2分前に**『 ACID 特性』**という重要な概念を知り、「なにがすごいのか?」がある程度言語化できるようになったので、メモがてら Qiita に書くことにしました。
こちらの書籍を大いに参考にして書いていきます。
僕のように DB を学び始めたばかりの人に役立つような記事にしたいと思います。
DB 玄人の方々は、ミスを発見したら指摘していただけると嬉しいです。
ACID 特性とは?
トランザクションが守るべき約束事です。
MySQLやPostgreSQLなど、さまざまなDBMS(データベースマネジメントシステム)がありますが、どのDBMSも守らなければならない絶対的な約束事、それがACID特性です。
ちなみに、トランザクションとは、データの更新単位です。
例えば、「Aさんのemailアドレスを変更する」や、「Bさんがツイ消しする」が1つのトランザクションです。
厳密には違うのですが、この記事ではこのような理解で問題ありません。
ACID は 酸 という意味の英単語でもありますが、DBにおけるACIDには特に酸っぽさは感じませんでした。酸っぽさを感じた方はその酸っぽさをコメントしていただけると嬉しいです。
原子性 ( Atomicity )
トランザクションの実行時、そのトランザクションがすべて完了して終了するのか、一切なにも実行せず終了するのか、という " ALL or NOTHING " な性質が原子性です。
「これ以上分割できない単位」という意味で原子性という名前がつけられたそうです。やたらかっこいいですね。
一貫性 ( Consistency )
DBにあらかじめ設定されている制約を必ず守るという性質です。
例えば NOT NULL 制約が設定された列に NULL を入れることはできません。
当たり前といえば当たり前ですが、その当たり前を当たり前にしているのが一貫性です。当たり前ですね。
独立性 ( Isolation )
トランザクション同士が互いに干渉を受けないことを保証する性質です。
例えばAさんがトランザクション実行中のときに、Bさんもトランザクションを開始したとします。
そのときにAさんのトランザクションの中にBさんのトランザクションが入らないように隠蔽するのが 独立性 です。
これのおかげでデータが入れ子にならず、いい感じにデータを更新できるようにしてくれています。
永続性 ( Durability )
システム障害が起こってデータが消えても、なにかしらの方法で復元できるような機能を有している必要があるという性質です。
データ自体は消えてしまっても、そのデータを復元する機能をもっているというのが永続性です。
おわりに
書いていて思いましたが、ACID特性はプロトコルのようなものですね。
どれも当たり前ではあるけれど、その当たり前があるからこそその上に立っていろいろなことができるようになります。
SQLはまだまだわからないことだらけですが、引き続き勉強がんばっていきます!