努力を努力と思わないレベルへ‥
この記事は自分用の備忘録です。
トランザクションとは
- 1つの作業単位として扱われるあらゆる操作のこと
- 複数の処理を1セット扱い
- 処理の間に他のSQLが割り込んでこないようにする
- もし途中で作業が失敗したらロールバックしてなかったことにする
- 中間はなく、成功か失敗のみ
- もし銀行で預金を引き出す処理で中間状態が残っていたら、お金を引き出しても残高が減らないとかになりそう
ACID特性とは
トランザクション処理に備わっていなければならない4つの特性である
Atomicity(原子性)
- 処理が成功する(COMMIT)かなかったことにする(ROLLBACK)かの2択
- 原子なのでそれ以上分割できない
- ALL or NOTHING
Consistency(一貫性)
- データに矛盾が生じないようにする
- NOT NULLやUNIQUEなどの制約できちんと整備されていれば良い
- 要は変なデータ入らんように守っておくってこと
Isolation(独立性)
- 複数のトランザクションが互いに干渉しないよう独立して動くこと
- ダーティーリード(終わってない処理を読み取るやつ)やファントムリード(終わってない処理に横入りするやつ)が発生しないようにする
- レベル設定ができて、厳しくしすぎるとファントムリードが発生しないがパフォーマンスは落ちるらしい
Durability(永続性)
- 停電とかあってもデータが消えないように
- ログを残すようにするらしい
- WALと呼ばれている
- COMMIT後、ディスクに強制書き込みしたりする
- パフォーマンス上げるために、メモリ上のキャッシュにデータを保存しておいて後でまとめて書き込むんだとか
感想
ちょうど2年前ぐらいに学んだ「スッキリわかるSQL入門」の内容だったので、すぐに思い出せてよかった。あの頃はバッジ処理とかパフォーマンスのこととか全くイメージできんかったなぁ。成長していると喜んでおこう。
参考