トランザクションについて

 今回はトランザクションについてちょっと記事を書いていこうと思いました!
 今自分で作っているサービスでトランザクションを使用するタイミングがあり使ってみたので簡単にこの記事に残してきます。

トランザクションとは
 「相互依存の関係にある複数の処理を一つの処理単位にまとめて、矛盾なく処理すること」です。
 簡単にいうと、トランザクションとは複数の処理を一つにまとめたものになります。

例)簡単に例で説明
 銀行の口座振り込みを例にしてみます。
口座Aと口座Bがあったとします。それぞれ10000円ずつ金額が入っていたとして、口座Aから5000円を口座Bに振り込む場合に、①口座Aから5000円を差し引き、②口座Bに5000円振り込むという処理が構成されます。

①残高10000 - 5000 = 5000円
②残高10000 + 5000 = 15000円

 ではこの2つの処理があった場合に、①の処理がうまくいって、②の処理が何かの原因で失敗したとき、口座Aの残高が5000円になっている一方で、口座Bの方は変わらず10000円の残高のままになってしまいます。

 そこで、この2つの処理をまとめて「1つの処理」として扱うこことにより、仮に①の処理が成功して、②が失敗しても、この「1つの処理」が失敗したことになるので、どちらの処理もなかったことになり金額のずれが出ることを防ぐことができます。
 この「1つの処理」というのがトランザクションを指していることになります。

トランザクションは成功か失敗のどちらか
 トランザクションは成功と失敗のどちらかしかありません。
失敗した場合はトランザクション実行前の状態に戻ります。中途半端に成功、中途半端に失敗ということはなく、これはトランザクションACID特性のA(Atomicity)、「原子性」に該当します。

補足
 トランザクションは、一連の処理が全て成功したのち「コミット」することで処理内容を反映させます。一方でどこかの処理が失敗した場合は「ロールバック」することでトランザクションの処理実行前の状態に戻ります。
 この「コミット」「ロールバック」を含めたトランザクション機能は、DBMSやアプリケーションサーバーなどの多くで搭載されています。

  今回は簡単にトランザクションについて書いてみました。
結構知っている人は知っている内容にはなってしまったんですが、いろいろ奥が深いトランザクションになるので、イメージを掴むくらいの感覚で読む機会があればみてもらえれば良いかなと思います。

おつかれ自分。

この記事が気に入ったらサポートをしてみませんか?