はじめに
今回は、「トランザクション」についてやっていきます。簡単そうなイメージですが、説明してって言われると、意外と難しいですよね?そこが盲点です!簡単そうな概念ほど、ふわっとした理解で終わってしまい、結局問題を解けないという事態が発生してしまいます。
ここでは、それを防ぐためにトランザクションとそれに関連する用語を4つ紹介して、トランザクションへの理解を深めていきたいと思います!
【今回扱う用語】
- トランザクション(データベースにおける操作単位)
- ACID:Atomicity, Consistency, Isolation, Durability(トランザクションの基本原則)
- MVCC:Multi-Version Concurrency Control(同時アクセス可能)
- デッドロック:Deadlock(停止状態)
- TPS:Transactions Per Second(1秒間に処理できるトランザクション数)
トランザクション
- トランザクションは、データベースにおける操作単位です。
- 具体的には、複数のデータベース操作(データの読み込み、書き込み、更新など)が一連のまとまった作業として扱われる仕組みです。
【具体例】
例えば、銀行の口座からお金を引き出すときを考えてみましょう。
この処理は、まず口座残高を確認し、引き出し金額を引いてから残高を更新するという一連の手順で行われます。これらの手順全体を1つのトランザクションとして扱うことができます。
【メリット】
- トランザクションを使うことで、データベース内のデータが一貫性を保ち、信頼できる状態になります。
- 例えば、銀行の口座残高がマイナスにならないようにするなど、データの整合性を保つことができます。
- トランザクションを使うことで、データベースに対する操作が失敗した場合でも、変更の完全取り消しができるため、データの安全性が向上します。つまり、誤った操作がデータに影響を与えることが少なくなります。
- トランザクションは複数のデータベース操作を1つのまとまりとして扱うため、データの一貫性を保つだけでなく、操作の管理もしやすくなります。
- 例えば、銀行の口座からお金を引き出すとき、残高を確認し、引き出し金額を更新し、最終的な残高を反映するすべての手順を1つのトランザクションで管理することができます。
- トランザクションを使うことで、複数のユーザーがデータベースに同時アクセスしても、データの整合性を保つことができます。つまり、競合や衝突を避けながら、複数のユーザーが安全にデータを操作できるようになります。
これらのメリットは、トランザクションにおけるACID特性によるものです。以下でそのACIDについて詳細を見ていきましょう!
ACID (Atomicity, Consistency, Isolation, Durability)
ACIDとは、データベースのトランザクション処理における基本原則を表す言葉です。
- Atomicity(原子性):
- トランザクションは、すべての操作が完了するか、一切実行されないかのどちらかであるという原則です。(完了orゼロ)
- 例えば、銀行の振込みトランザクションがあります。送金と受取りの両方が完了しなければ、トランザクションは無効となります。
- Consistency(一貫性):
- トランザクションの実行前後でデータベースの一貫性が保たれるという原則です。(ルール遵守)
- 例えば、口座残高が負の値になるようなトランザクションは実行されません。
- Isolation(独立性):
- 複数のトランザクションが同時実行されても、互いに影響しないという原則です。(干渉禁止)
- 例えば、同時に複数の人が同じ銀行口座からお金を引き出しても、互いに影響しません。
- Durability(耐久性):
- トランザクションが正常に完了した場合、その結果は永続保存されるという原則です。
- 例えば、トランザクションが完了した後にシステムがクラッシュしても、データは失われません。
このように、ACIDはデータベースの信頼性や安定性を保つための基本原則を示しています。
【メリット】
- ACIDの原則に従うことで、データベース内の情報が正確で信頼性が高くなります。
- つまり、データが壊れたり、間違った情報が保存されることが少なくなります。
- ACIDはデータの一貫性を保つことを重視しています。
- これは、トランザクションが正しく実行された場合、データベース内の情報が一貫性を持つことを意味します。
- 例えば、銀行の口座残高が正確であり、支払いや振り込みが適切に行われることが保証されます。
- ACIDの原則は、トランザクションの実行が安全であることを保証します。
- つまり、トランザクションが正常に完了した場合、その結果が永続的に保存され、データが失われないことを保証します。
- 例えば、何か間違ったことが起きても、お金が正しく振り込まれることが保証されます。
- ACIDの原則は、複数のトランザクションが同時に実行される場合でも、データの独立性を保つことを意味します。
- これにより、データベースの並行処理が効率的に行われ、処理時間が短縮されます。
要するに、ACIDの原則はデータベースの安定性や信頼性を高め、データの正確性と整合性を保つのに役立ちます。
p.s.トランザクションはACIDを内包した概念なのでメリットもかぶりましたね。
MVCC (Multi-Version Concurrency Control)
MVCC(Multi-Version Concurrency Control)は、データベースで複数の人がデータを同時変更できるようにするしくみです。
【具体例】
教室でグループワークをするときを想像してみてください。みんなが同じプロジェクトに取り組んでいるとします。MVCCは、各グループが同じプロジェクトに取り組むときに、誰が何をしているかを追跡して、全員が混乱なく作業できるようにします。
例えば、Aさんがプロジェクトの題名を「旅計画」から「旅行計画」に変更したとします。その時点で、Bさんが「旅計画」を見ていても、Aさんの変更は反映されません。しかしBさんが見終わった後にもう一度、「旅計画」を見ようとした場合は、「旅行計画」に変更が反映されています。
これによって、各グループが同じプロジェクトに対して同時作業でき、混乱なく情報を共有できるようになります。MVCCはデータベースにおいても同じ原理を使って、複数のユーザーが同時にデータにアクセスしても、データが壊れたり、変な状態になったりすることを防ぐのに役立ちます。
p.s.もし、複数ユーザーが同時に同じ箇所を変更した場合は、一般的に先の更新が優先されます。(システム設計段階で優先度を決定しておきましょう!)
【メリット】
- MVCCを使うと、たくさんの人が同時にデータベースにアクセスしても、互いに邪魔しあわずに作業できます。
- 例えば、学校の成績表を見ている間に、他の生徒が同じデータにアクセスしても、お互いに影響を与えることなく作業ができます。
- MVCCを使うと、データベースの中で起きた変更が、他の人が同時にアクセスしているデータに影響を与えることがありません。
- 例えば、一つのデータを見ているときに、別の人がそのデータを変更しても、それを見ている人にはその変更が反映されません。
- MVCCを使うと、データベースの性能が向上します。
- つまり、たくさんの人が同時にデータベースにアクセスしても、システムがスムーズに動作し、待ち時間が少なくなります。
これらのメリットによって、MVCCはデータベースシステムを効率的に管理し、複数のユーザーが同時にデータにアクセスしても問題が生じにくくなります。
デッドロック(Deadlock)
デッドロックは、複数のプロセス(タスクやプログラムの実行単位)がお互いに必要なリソースを獲得しようとして、結果的にどれもリソースを手放さずに待ち続けている状態です。
要するに、みんなが何かを待ち続けているので、進行が停滞してしまう現象です。
【具体例】
たとえば、2つのプロセスAとBがあり、それぞれがリソースXとYを必要としているとしましょう。AはXを持っていてYを必要とし、BはYを持っていてXを必要としているとします。この場合、AはXを持っているのでYを待ち、BはYを持っているのでXを待ちます。結果として、どちらのプロセスも必要なリソースを手に入れられず、永遠に待ち続けることになります。
このような状況が発生すると、システム全体が停止状態に陥ります。これがデッドロックです。デッドロックを回避するためには、リソースの割り当てやプロセスの実行をうまく調整する必要があります。
TPS (Transactions Per Second)
- TPS(Transactions Per Second)は、コンピューターや情報システムにおける重要な性能指標の一つです。
- 情報技術では、データベースやネットワークなどのシステムが1秒間に処理できるトランザクション(取引)の数を示すのにTPSが使われます。
- システムが高いTPSを持っているほど:
- 多くの取引を素早く処理できるので、性能が良いといえます。
- 大量のデータやリクエストを効率的に処理できるということです。
- これは、オンラインショッピングや銀行取引など、多くの人々が同時に利用するシステムにとって非常に重要です。
【具体例】
想像してみてください。あなたがお店で買い物をするとき、レジで商品をスキャンし、支払いをするでしょう。このとき、レジが1秒間に何回取引を処理できるかを考えると、それがTPSです。
例えば、1つのレジが1秒間に5つの取引を処理できるとしたら、そのレジのTPSは5です。これは、そのレジが1秒間に5つの買い物を完了できることを意味します。
おわりに
今回はトランザクションと、それに付随する、ACID、MVCC 、デッドロック、TPS、などの計5つの用語を勉強してきました。
いきなり、MVCCと出題されてもパニックになりますが、トランザクションからしっかりと理解すれば多少複雑な概念でも理解できるようになりますよね。やっぱり勉強とかは基本が大切ですよね。
という、ことでこれからも基本に焦点を当ててどんどん成長していきましょう!そして、今より1つ上のキャリアを歩んでいきましょう!当サイトがそのお手伝いをさせていただきます!
【この記事も一緒に読まれています】