🥰

[超初心者向け!] トランザクションをわかりやすく解説

2024/06/23に公開

はじめに

トランザクション初心者の方向けに記事を作成してみました

対象読者

・ トランザクションに足を踏み入れてみたい方
・ データベース初心者

目次

  1. programとprocessの違い
  2. processとthreadの違い
  3. マルチスレッド / マルチプロセッサ
  4. concurrency control phase
  5. recovery phase

1. programとprocessの違い

スマホの電源ボタンをおすと画面が開きます

「スマホの電源ボタンをタップしたら画面を開いてください」 という命令書 → program
この命令が動いている状態 → process

2.processとthreadの違い

プロセス

→ t-shirtが販売されてから 販売終了になるまでの期間
例: ECサイトで t-shirt を販売

スレッド

→ 販売終了になるまでの個々の操作
↓ このように販売終了するまでには 色んな人が買ったり、在庫を追加したりします。この操作一つ一つをスレッドと言います

3.マルチスレッド / マルチプロセッサ

→ 複数あるスレッド (マルチスレッド) を複数のCPU (マルチプロセッサ) が操作することで より高速に処理を終えることができます

プロセスが複数ある場合

ちなみにプロセスが複数ある場合もあります
というかその場合がほとんどです

この場合も複数のCPUが操作することで、より高速に処理を終えられるマルチプロセッサを採用することがほとんどです

4. concurrency control phase

このようにECサイトでは各々が好きな t-shirt を買うことができます

トランザクションのイメージとしては、ECサイトのカート機能に複数の種類の t-shirt を入れてまとめて買うとき、それが一個のトランザクションになるという感じです


これもマルチプロセッサにより高速に処理することができます

なおこれらは不揮発性メモリ (non-volatile memory) に保存され、処理によって変更された 在庫データを永続化することができます

5. recovery phase

トランザクション=concurrency control phase (先程まで説明) + recovery phase (これから説明)
で構成されます
recovery phase まで成功することによりトランザクションが成功 (commit) したと言えます
(ちなみにconcurrency control phase までの場合、particially commit という言い方をします)

なんでrecoveryいるの?? って思いましたよね
なぜなら在庫データを複数用意する必要があるからです


在庫データが1つしかない場合 → クラッシュした場合はTHE END.
在庫データが複数ある場合 → クラッシュしてもコピーがあるから大丈夫

日本中にコピーされた在庫データをおくと...

・地震が来て北海道のデータベースが消えても大丈夫
・大雨が降って東京のデータベースが消えても大丈夫
・北海道のデータベースを壊されても大丈夫

→ より安全に在庫データを管理できるようになります

つまり、変更処理を複数のデータベースに同期するということです
これを recovery phase といいます

まとめ

・プログラムは説明書, プロセスは説明書が動いている状態
・スレッドは複数のCPUが並列に処理できるように プロセスを分割したもの
・トランザクションには concurrency control phase と recovery phase がある

最後まで見てくださってありがとうございます!

Discussion