プログラマーやエンジニアを目指す人であれば、「トランザクション」という言葉を見たり聞いたりしたことがあるのではないでしょうか。しかし、現役エンジニアの人も含めて、意外とその意味を理解していない人も多いです。
そこで、本記事では「トランザクション」という言葉の意味と、基本的な役割について解説します。トランザクションについてよく分からないという人は本記事を参考にしていただき、トランザクションについての理解を深めましょう。
目次
トランザクションとは?
まずは、トランザクションの意味について解説していきますが、「トランザクション」という言葉には、次の2つの世界で意味合いが異なります。
● IT業界
● ビジネス
それぞれの意味について順番に解説します。
IT業界ではソフトウェアの処理方式
IT業界では、「トランザクション」はソフトウェアの処理方式のことを言います。詳細な処理方式の内容については後述しますが、この「トランザクション」という処理方式は、特に「データベース管理システム」で重要な役割を果たしています。
ITシステム開発者やプログラマーにとって、トランザクションを意識した開発を行うことは、とても大切なことです。
ビジネスでは商取引
ビジネスにおける「トランザクション」という言葉は、「商取引」のことを意味します。具体的には、商品の購入や売却、支払いや受取など、取引における個々の行為そのもののことを言います。
例えば、商品の「購入」と「支払い」という2つの行為がトランザクションとして結び付いています。「支払いが完了するまで商品の引き渡しが行われない」といったように、トランザクション(「購入」と「支払い」)が完了しなければ、取引自体が成立しません。
ビジネスにおけるトランザクションは、取引の円滑な進行に欠かせない概念であり、正確かつ安全な処理が求められるものです。
トランザクションの語源
「トランザクション」の語源は、ラテン語の「transactio(トランザクティオ)」から来ています。ラテン語で「取引、達成、成就」の意味があり、英語圏でも「transaction」と呼ばれ、ビジネスや金融、さらにIT分野で広く使われています。
中世ラテン語では、法的契約の取り決めや実行を指す用語として使用されていました。その後、この用語はビジネスや金融分野において広く使用されるようになり、さらにはIT分野においても、コンピューター上での取引処理を指す用語として定着しています。
トランザクション処理とは?
トランザクション処理とは、データベースやオンライン取引などのシステムで、「一連の操作を一つの論理的な処理単位としてまとめ、処理の完了を保証する仕組み」のことです。
トランザクション処理は、複数のデータ処理ステップがある場合に、全てのステップを完了するか、またはどれか一つでも失敗すると、全ての操作を元に戻せます。もし、一連のデータ処理の途中で何らかの問題が発生した場合には、データ整合性を保つために、それまでの操作を全て元に戻して、システムを前の状態に戻します。
トランザクション処理は、データの整合性やセキュリティを保つためになくてはならない処理で、信頼性の高いシステムを作るために必須となる技術です。
トランザクション処理の事例
「一連の操作を一つの論理的な処理単位としてまとめ、処理の完了を保証する仕組みのこと」がトランザクション処理であると解説しましたが、よりイメージできるよう、いくつかのシステムにおける事例を紹介します。
トランザクション処理の事例には、以下のようなものがあります。
● 銀行ATMでの預金引き出し
● オンラインショップでの商品購入
● ホテルや航空会社の予約システムでの予約処理
銀行ATMの預金引き出しでは、預金を引き出すと、引き出した金額を差し引いて残高を更新しますが、もし何らかの理由で要求した金額が引き出せなかった場合には、処理を全て取り消せます。
オンラインショップの商品購入では、商品を購入すると、支払いが完了する前に在庫数が更新されて商品が減らされますが、もし支払いが完了しなかった場合には、在庫数の変更を取り消せます。
ホテルや航空会社の予約システムでの予約処理では、ユーザーが予約を行うと予約枠を確保し、予約情報をデータベースに保存しますが、予約が完了しなかった場合には、予約枠を元に戻せます。
このように、トランザクション処理は、私たちの日常生活の中で馴染みのあるシステムでもよく使われています。私たちは日常生活であまり意識しませんが、「トランザクション処理によってシステムが正常に機能している」といっても過言ではありません。
トランザクションの条件
トランザクション処理には、次の4つの条件があります。
● 原子性(Atomicity)
● 一貫性(Consistency)
● 独立性(Isolation)
● 永続性(Durability)
それぞれ順番に解説します。
原子性(Atomicity)
原子性とは、「トランザクションの全ての操作が完了するか、または全く実行されなかった場合に限り、トランザクションを完了させる」という特性のことです。
もし、トランザクションの実行中に何らかのエラーが発生して途中で処理が中断された場合、その処理の途中までの結果をデータベースに反映するのではなく、元の状態に戻すことでトランザクションを無効にします。
このように、トランザクション処理で原子性が保たれることによってデータの整合性が保たれ、データベースの状態が正確になり、信頼性も高くなります。
一貫性(Consistency)
一貫性とは、「実行前と実行後のデータベースの状態が整合的である」という特性のことです。トランザクションの実行によってデータベース内の情報が変更された場合、その変更がトランザクション完了後に反映されることが保証されなければいけません。
例えば、ある銀行口座の残高を20,000円から10,000円に減らすトランザクションがあるとします。このトランザクションが完了した後、データベース内の銀行口座の残高は10,000円になっていなければいけません。
もし、トランザクション処理中に何らかのエラーが発生して途中で処理が中断された場合、元の状態(20,000円の残高の状態)に戻すことで、トランザクションを無効にし、データベースの状態を一貫性のある状態に保ちます。
独立性(Isolation)
独立性とは、「複数のトランザクションが同時に実行された場合でも、それぞれのトランザクションが互いに影響を与えない」特性のことです。
例えば、銀行口座の残高を増やすトランザクションと、同時に銀行口座からの引き出しを行うトランザクションがあったとします。この場合、両方のトランザクションが同時に実行されてもエラーを発生させず、それぞれのトランザクションが完了するまで、口座残高が変更されないことが保証されなければいけません。
データベース管理システムなどでは、トランザクション処理の独立性を保証するために、排他制御や同時実行制御などの仕組みを備えています。
永続性(Durability)
永続性とは、「トランザクション完了後、その処理結果がデータベースに永続的に保存される」という特性のことです。
例えば、銀行口座の残高を増やすトランザクションが正常に完了した場合、その処理結果がデータベースに保存され、以降の取引や残高照会に反映されます。残高を増やすトランザクションが完了した後に、その処理結果がデータベースから消失してしまうと、その後の取引で残高が不足してしまう可能性があります。
データベース管理システムは、トランザクションの処理結果を永続化するために、トランザクションログと呼ばれる仕組みを備えています。トランザクションログは、トランザクションが実行された際に発生する全てのデータベースの変更を記録し、必要に応じてトランザクションのロールバック(処理前の状態に戻すこと)や再実行を行うために使用されます。
トランザクションとブロックチェーンの関係性
トランザクションは「ブロックチェーン」とも密接な関係性があります。ブロックチェーンとは、複数の参加者が管理する分散型データベースのことです。実は、このブロックチェーンは複数のトランザクションを「ブロック」と呼ばれる単位にまとめ、リストのように連結したものです。
例えば、仮想通貨で行われる送金処理はトランザクション処理です。仮に、AさんからBさんへ仮想通貨を送金する場合、送信者(Aさん)の電子署名と公開鍵、送金する金額、送金先(Bさん)のウォレットアドレスなどを「ブロック」へ記録する処理(トランザクション)が行われます。
トランザクションが行われる度に、そのトランザクションに関する情報が新しいブロックに追加されます。そして、新しいブロックは過去のブロックと共に連鎖状に結び付けられ、変更があった場合には、それを検知して無効化するためのハッシュ値が算出されます。
また、トランザクションの情報はブロックチェーン上で完全に公開され、改ざんされることはありません。これは、ブロックチェーンが分散型台帳であるため、一つのノードで情報を改ざんしても、他のノードが正しい情報を持っているため、改ざんが検知されてしまうためです。
以上のように、トランザクションとブロックチェーンは密接に関連しており、ブロックチェーン技術が分散型の信頼性の高いデータベースを実現するために、トランザクションの確実な記録が必要不可欠な要素となっています。
関連記事:ブロックチェーンとは!仕組みや活用シーンなどを解説!
トランザクションに関連する言葉
次に、トランザクションに関連する以下の言葉について解説します。
● ACID特性
● 分散トランザクション処理
● TPモニタ
● データベース管理システム
● SQL
● SQLクエリ
● コミット
● ロールバック
● バックアップ
それぞれ順番に解説しますので、トランザクションに関する文献を理解するための参考にしてください。
ACID特性
ACID特性とは、前述の「トランザクションの条件」で解説した、4つの特性の頭文字を表す言い方のことです。
4つの特性とは、下記の通りです。
● Atomicity(原子性)
● Consistency(一貫性)
● Isolation(独立性)
● Durability(永続性)
上記4つの頭文字をとって「ACID」特性と言われます。
分散トランザクション処理
分散トランザクション処理とは、複数のコンピュータやネットワークを介して、複数のデータベースにまたがるトランザクションを実行する処理のことです。
分散トランザクションには以下のメリットがあります。
● システム障害時のリスク分散
● システムの規模拡大への柔軟な対応
しかし、複数のデータベースにまたがるトランザクション処理は、システムの複雑さと遅延の問題を引き起こすこともあります。そのため、分散トランザクション処理を実行する場合には、データの整合性と完全性を確保するために、注意深く設計と実装が必要です。
TPモニタ
TPモニタとは、「Transaction Processing Monitor」の略で、トランザクション処理システムを監視するためのツールのことです。
TPモニタは、トランザクション処理の実行状況や性能、エラーの有無などをリアルタイムでモニタリングできます。その他、エラーを分析したり、トランザクションの再実行やロールバックしたりすることが可能です。
TPモニタは、トランザクション処理システムの監視やトラブルシューティングに欠かせないツールで、多くの企業や組織が、TPモニターを活用して、トランザクション処理システムの性能や安定性を確保しています。
データベース管理システム
データベース管理システム(Database Management System、略称:DBMS)とは、データベースを管理するためのソフトウェアのことです。データベースには、複数の関連するテーブルやデータが格納されていますが、それらに対して以下のことができます。
● データの操作(検索・更新・削除・追加など)
● データの種類や構造の定義
● データへのアクセス権制御
● データのバックアップと復元
データベースの管理や保護を行うためには、上記の機能が欠かせません。
参考までに、一般的なデータベース管理システムには、以下のようなものがあります。
● Oracle Database
● Microsoft SQL Server
● MySQL
● PostgreSQL
これらは商用やオープンソースで提供されており、それぞれ特徴や適用範囲などが異なります。
SQL
SQLとは、Structured Query Languageの略で、データベースのデータ操作や管理に使用される「標準的な」データベース言語のことです。
トランザクションでSQLを使用する場合は、トランザクションが実行する操作(クエリ)をSQL文で記述して、データベース管理システムに対して発行することで、データベース上のデータを操作できます。
SQL文による処理には、データの挿入、更新、削除、検索などがあります。SQLの構文や機能は標準化されており、多くのデータベース管理システムに対応しているため、汎用性が高く、プログラマーやデータベース管理者にとっても覚えやすい言語です。
SQLクエリ
SQLクエリとは、データベース管理システムに対してトランザクションが実行するデータ操作を行うためのSQL文のことです。SQLクエリは、データベース上のデータを操作するための命令で、データベース管理システムに対して発行されます。
SQLクエリには、主に以下のような種類があります。
● SELECT文:データの検索や抽出を行う
● INSERT文:データの挿入を行う
● UPDATE文:データの更新を行う
● DELETE文:データの削除を行う
SQLクエリは、データベースを操作する上で必要不可欠なもので、データベース管理者や開発者にとっては、とても重要なスキルです。
コミット
コミット(Commit)とは、データベースにおいてトランザクションが正常に完了したことを示すための処理のことです。
トランザクションが成功した場合には、変更されたデータを永続化し、データベースの状態を更新するためにコミット処理を実行します。一方で、トランザクションが失敗した場合には、変更されたデータを破棄するためにロールバック処理を実行します。
コミット処理とロールバック処理は、トランザクションの完了のために必要な処理であり、トランザクション処理の原子性と永続性を保証するために欠かせないものです。
ロールバック
ロールバック(Rollback)とは、トランザクションが失敗した場合に、変更されたデータを元に戻すための処理のことです。
トランザクションが失敗したときに、変更されたデータがそのままだと、データ破損が起きたり不整合が発生したりします。トランザクションが失敗した場合には、データベースの状態をトランザクション開始前の状態に戻して、変更されたデータを破棄するためにロールバック処理を実行します。
これにより原子性が保たれ、トランザクションが正常に完了しなかったとしても、データの整合性を維持できます。
バックアップ
バックアップとは、トランザクションがデータベースに影響を与える前に、現在のデータベースの状態を保存することを言います。バックアップを行うことにより、もしトランザクションが失敗した場合でも、以前のデータベースの状態に簡単に戻せます。
バックアップには以下のような種類があります。
● 完全バックアップ
● 差分バックアップ
● 増分バックアップ
完全バックアップとは、全てのデータベースのコピーを作成する処理のことです。差分バックアップとは、前回の完全バックアップ以降に変更されたデータのみをバックアップする処理のことです。増分バックアップとは、前回のバックアップ以降に追加されたデータだけをバックアップする処理のことです。
バックアップは、トランザクション処理の一部であり、データベースの一貫性を維持するために非常に重要な処理です。
関連記事
・SQLとはなにか!PostgreSQLなどよく使われるデータベースの特徴もご紹介!
・クエリ(query)とはなにか?SEO、IT用語として使われている様々な意味を解説
まとめ
本記事では、「トランザクション」というIT用語と、基本的な役割について解説しました。私たちが日常生活で使う様々なシステムには、トランザクション処理が多く使われています。
トランザクション処理が持つ、4つの特性(原子性・一貫性・独立性・永続性)によってデータの整合性が保たれることで、私たちは日常生活で様々なシステムを安心・安全に利用できるのです。
エンジニアやプログラマーを目指している人や、トランザクションについて理解が浅いと感じている現役エンジニアの人は、本記事を通してトランザクションに関する理解を深めると共に、トランザクションの概念を意識した開発をしましょう。