ホームITデータベースの運用で欠かせない「トランザクション処理」

IT Insight

データベースの運用で欠かせない「トランザクション処理」

レンテックインサイト編集部

データベースの運用で欠かせない「トランザクション処理」

DXに伴ってデータ活用やサプライチェーンマネジメントの重要性が高まっています。そんな中で、円滑なデータベースやシステムの運用にあたって重要なキーワードとして「トランザクション処理」について耳にする機会も増えました。

その意味から学習したいという方々も、すでに知っているがおさらいしたいという方々も、ぜひ本記事で「トランザクション処理」についての基本を押さえていきましょう。

トランザクション処理とは? なぜ必要なのか

「トランザクション処理」とは、データベースの整合性を保つために実行されるシステム上の仕組みです。IT分野における「トランザクション」とは、検索、追加、更新など、情報システムにおける一連のデータの操作のまとまりの単位を指します。

大量のデータ処理により負荷を受けた、接続が不安定、設定ミスが生じているなど、さまざまな理由によりデータベースが不具合を起こすことは避けられません。その際、トランザクションが終了するまでにデータベースの整合性が失われる可能性を排除しなければなりません。

銀行や証券会社における取引、航空券やホテルの予約、QRコードや IC カードによる決済、ECなど、OLTP(OnLine Transaction Processing:オンラインでリアルタイムに行われるデータの処理)が行われる場面は爆発的に増加しており、トランザクション処理の重要性も高まっています。

例えば「銀行口座Aから1万円を引き出し銀行口座Bに移す」というトランザクションにおいて、①「銀行口座Aの残高データを読み込む」→②「銀行口座Aの残高データを1万円マイナスする」→③「銀行口座Bの残高データを読み込む」→④「銀行口座Bの残高データを1万円プラスする」という操作が必要になりますが、その途中で何らかの理由で②や④の処理が行われなかったり、読み込んだデータに誤りがあったりすれば、データに不整合が生じることになります。

そこで、あらかじめトランザクション処理の仕組みを実装しておくことが求められるのです。

トランザクション処理で満たすべき「ACID特性」

トランザクション処理で満たすべき特性を端的に表すキーワードとして知られるのが「ACID特性」です。ACID特性は、下記の4つの単語で構成されています。

原子性 (Atomicity)

トランザクション内のすべての操作が完全に成功するか、あるいは一つも実行されないかのどちらかであることを保証する性質。つまり、トランザクションは分割不可能な最小の作業単位として扱われることになります。

一貫性 (Consistency)

トランザクションの実行が成功した場合、データベースは一貫性のある状態から別の一貫性のある状態へと変化します。前後のいずれにおいても、データの整合性が保たれることを一貫性は保証します。

独立性 (Isolation)

同時に実行される複数のトランザクションが互いに影響を与えないという性質です。一つのトランザクションがほかのトランザクションの中間状態にアクセスできないよう保つことで、干渉や影響を防ぎます。

永続性 (Durability)

トランザクションが一度成功して完了した後は、その結果がシステムの障害にも関わらず保存され続けることを保証します。データ操作のログを恒久的に保存する、といった方法で実現されます。

トランザクションの実行がすべて成功し処理が確定することを「コミット」、途中で何らかの問題が発生し実行をリセットすることを「ロールバック」といいます。トランザクションが100%成功すると保証できるシステムはないため、ACID特性を満たし「コミット」「ロールバック」のいずれにも対応することが必要です。

トランザクション処理を実行する流れ

トランザクション処理は、MySQL、Oracle、SQL Server、PostgreSQLなど主要なRDB(リレーショナルデータベース)で、「開始→操作→コミットorロールバック」という手順で実行されます。

1.トランザクションの開始

「BEGIN」や「SET TRANSACTION」といったコマンドを実行することで、トランザクションの開始を宣言します。これによりデータベースは新しいトランザクションが開始されたことを認識し、それに伴う変更を追跡し始めます。

2. トランザクションの操作

トランザクション内で、一連のデータベース操作(挿入、更新、削除など)が実行されます。これらの操作は、トランザクションが成功裏に完了するまで、外部からは見えない「仮の」状態に保持されます。

3-A. トランザクションのコミット

すべての操作が正常に完了した後、トランザクションは「COMMIT」コマンドにより確定されます。これにより、トランザクション内で行われたすべての変更がデータベースに永続的に適用され、ほかのトランザクションから見えるようになります。

3-B. トランザクションのロールバック

トランザクションの実行中にエラーが発生した場合、または何らかの理由でトランザクションを完了できない場合、「ROLLBACK」コマンドでトランザクションを中止し、開始時点の状態に戻します。

トランザクションにおいて並行処理と独立性は相反する関係にあり、トランザクション処理にあたってはその段階を「READ UNCOMMITTED」「READ COMMITTED」「REPEATABLE READ」「SERIALIZABLE」の4つで評価した分離レベルの設定にも気を配る必要があります。

NoSQLを使いこなすにも「トランザクション処理」の理解は必要

データベース理解の基本として避けては通れない「トランザクション処理」について解説してまいりました。トランザクション処理を必ずしも重視しないデータベースとしてNoSQLにも注目が集まっていますが、その概念やACID特性の意義について押さえておくことはいずれにせよ必要です。ぜひ、本記事をその第一歩としてください。

IT Insightの他記事もご覧ください

Prev

Next