はじめに
本記事では、トランザクションについて記述しました。
トランザクションとはなんですか?
と聞かれた際に、私は何も答えることができませんでした。
悔しかったので調べました。
トランザクションとは
レコードの更新を行う複数の処理を1つにまとめて行うこと
を指します。
トランザクションを利用することにより、
「処理の一部は成功し、一部は失敗した」という事象は発生せず、
すべての処理の成功または失敗のみの状態
を作ることができます。
Railsではこのような利用
ActiveRecord::Base.transaction do
処理1
処理2
処理3
...
end
ここに処理1、処理2...を1つのまとまりとして記述することで、
処理が1つでも失敗すれば、全体としての処理は失敗ということになります。
トランザクションのACIDプロパティー
以下を参照しています。
トランザクションは、銀行のATMに例えることが多いみたいです。
かなりわかりやすいので勝手にオススメです。
トランザクションの ACID プロパティー
トランザクション処理における ACID という頭字語は、原子性 (A)、一貫性 (C)、独立性 (I)、および耐久性 (D) というトランザクションの 4つの重要なプロパティーを表しています。
A
原子性
を表すAtomicity
トランザクションが終わった時に、
そこに含まれていた更新処理が全て実行されるか、
全て実行されない状態で終わることを保証する性質。
ある口座から別の口座に資金を移動するアプリケーションで、原子性プロパティーは、ある口座から引き落としが正常に行われると、対応する入金が別の口座に行われることを保証します。
C
一貫性
のConsistency
トランザクションに含まれる処理はそれぞれの制約を満たすという性質。
ある口座から別の口座に資金を移動するアプリケーションで、一貫性プロパティーは、各トランザクションの開始時と終了時で、両方の口座の資金の合計金額が同じになることを保証します。
I
独立性
のIsolation
トランザクションが実行中の場合、
もう一方のその他のトランザクションの影響を受けないという性質。
ある口座から別の口座に資金を移動するアプリケーションで、独立性プロパティーは、別のトランザクションから見て移動資金がいずれかの口座に存在していて、両方に存在していたりどちらにも存在しなかったりすることはないことを保証します。
D
耐久性
のDurability
トランザクションが完了した後、そのデータ状態が保存され失われることは無いという性質。
ある口座から別の口座に資金を移動するアプリケーションで、耐久性プロパティーは、それぞれの口座に対して行われた変更が元に戻されることはないことを保証します。
以上です。
終わりに
今回もスマッシュブラザーズで例えてやろうと考えており、
ファルコンパンチ
ってトランザクションじゃないかなとか思ったんですが、
ファルコンパンチってBボタンを押したら、モーションはあるものの、
複数の処理を1つにまとめているかと言われたら違うような気がした
ので、やめました。
自分の知らなかった言葉を
何か身近なものに例えて理解するのはとてもいいなと感じております。
以下参考サイトです。
「トランザクションのACID特性」を理解する
トランザクションの ACID プロパティー
明日も頑張ります!