PostgreSQL 超入門 第3回 (4)
3.4 データベース管理システムは処理を中途半端で終わらせない
データベース管理システムでは「トランザクション」と呼ばれる単位でデータの書き換えをコントロールしています。「トランザクション」とは、アプリケーションにとって意味のある処理の単位のことで、たとえば、次のようなものがトランザクションになります。
- 銀行口座間の振込処理
振込元の口座の残高を減らして振込先の口座の残高を増やす - 受注処理を行う
受注伝票を1行追加し、受注明細を受注した品目分追加する
これらの例では、複数のデータベースの読み書きを行っています。この途中で停電があったり、サーバがクラッシュしたり、アプリケーションがクラッシュしてしまうと(データベース自身がクラッシュする可能性もあります)、処理がどこまで進んだのか、後でわからなくなり、手動でデータを訂正しなければならなくなります。
このようなことを防ぐために、データベース管理システムでは、トランザクションの途中で処理が止まってしまった場合は、トランザクションで書いた結果をすべて元に戻すようにしています(図3-7)。こうすることで、もしもエラーが起こっても、次にはエラーが起こったトランザクションをやり直せばいいようにしているのです。
トランザクションが完了したら、その結果は 3.3 で述べたように、データベースに安全確実に保存されます。
重要なことは、トランザクションの開始終了はデータベース管理システムでは判断できないのでアプリケーションに教えてもらわなければならないということです。アプリケーションはSQLを使ってデータベースにトランザクションの開始終了を指示します。
3.5 データベース管理システムは同時に複数のアプリケーションからの読み書きをサポートする
Excel では同時に表に書き込めるのは一人だけです。後の人は使用中の人が終わるのを待たなければなりません。
データベースでは、一度に読み書きするデータはデータベースのごく一部であることが多いので、複数のアプリケーションが同時に同じデータベースに読み書きしても、実際に同じデータを書き直すことはそれほど多く起こることではありません。この様な場合は、データベース管理システムでは、アプリケーションを同時に実行させることができます。不幸にして、同じデータを同時に書き直したり、書き直し中のデータを読んだりする場合には、データベース管理システムは一方のアプリケーションを待たせたり、古いデータを読ませたり、一方のアプリケーションにエラーを通知したりします。(このうちどれが行われるかは、場合によります。これは別な機会に説明したいと思います)。この様にすることで、データベースを使うアプリケーションは、他のアプリケーションが同時に動いていることを意識する必要がないようになっています(図3-8)。
データベース管理システムは、ここで説明した以外にも多くの機能を提供しています。この記事は「超入門」なので、一番重要と思われる部分だけを解説しました。今後、もう少し詳しい情報も載せていきたいと思います。
用語集
- トランザクション:
- アプリケーションの処理の単位。途中で停止すると困る。
(2008年12月24日公開)