0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

トランザクションとは。

Posted at

はじめに

本記事では、トランザクションについて記述しました。
トランザクションとはなんですか?
と聞かれた際に、私は何も答えることができませんでした。
悔しかったので調べました。

トランザクションとは

レコードの更新を行う複数の処理を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 プロパティー

明日も頑張ります!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?