TAKEBE160224300I9A0568_TP_V2

あなたが、ワープロソフトで文書を作っているとします。そして、あなたが書きかけで開いたままの文書ファイルを別の人(Aさん)が開いて編集を始めたとしましょう。そうすると、この文書は「あなた」と「Aさん」の2人に同時に編集されることになります。

やがて、2人が編集を終えて元のファイルに保存をします。しかし、元のファイルは1つです。そのため、ファイルへの保存後あなたとAさんの編集結果のうち一つが失われることになります。せっかく作った文書が失われるのは、大変困ります。何としても、このような状況は避けなければなりません。

そのためには、「排他制御」と呼ばれる仕組みを導入する必要があります。ここでは、排他制御の重要性とその設計の基礎についてお話ししていきます。ここで述べる内容を理解することにより、複数ユーザー間でのデータの整合性を担保できる業務システムの設計手法について学ぶことができます。

排他制御は、さまざまな場面で必要になる

冒頭で述べたワープロソフトの例について、解説を続けます。2人の作成した文書が失われないようにするためには、「1つのファイルを複数の人が同時に編集できないようにすること」が必要です。実は、Microsoft Officeなどパソコンで使われるほとんどのパッケージソフトウェアにこのような機能が付いています。

例えば、Microsoft Wordのようなワープロソフトで別の人がすでに開いているファイルを開こうとすると「読み取り専用で開きますか?」の確認メッセージが出ます(他のメッセージも出ますが、ここでは省略します)。後から開いた人は、そのファイルを編集できません。編集したい場合は、ファイルを別名で保存します。これは、ワープロソフトが排他制御を行っていることを示しています。

一方、業務システム設計においても排他制御の考え方が重要です。例えば、ウェブ入力方式の業務システムがあったとします。その業務システムは、ある企業のお客さまの個人データを管理しています。そして、複数の業務システムユーザーが一人のお客さまの個人データを同時に編集したとします。そのようなときに、お客さまの個人データが一部消失するなどの問題が起こることがあります。

このように、複数のユーザーが同時に一つのデータを編集しようとしたときに排他制御が必要になります。そして、業務システムは複数のユーザーが同時に使用するものです。そのため、業務システムには排他制御が欠かせないのです。

排他制御の実際

排他制御には、いくつかの方法があります。ここでは、代表的な2つの方法について説明します。また、排他制御を行うことを「ロックをかける」といいますので覚えておきましょう。

  • 悲観的排他制御
    編集対象のデータを読み出してから、編集を終えるまで別のユーザーが編集できないようにロックをかける方式です。この方法では、ロックを取得したユーザーのみが編集を行うことができます。編集に要する時間が長いと、それだけ他のユーザーが待たされることになります。そのため、編集時間が短い処理に向いています
  • 楽観的排他制御
    編集対象のデータを読み出したときにロックをかけません。その代わりに、編集後データを保存する直前にその読み出し元データが他のユーザーによって変更されていないかを確認します。そして、変更されていなければそのデータを保存します。もし他のユーザーによってすでに変更されていれば、その編集はキャンセルになります。この方法では、複数のユーザーがそれぞれ並行して編集を行うことができます。しかしその反面、編集のキャンセルも発生しやすいです。そのため、もともと同時に編集することが少ない処理に向いています

悲観的排他制御は、データベース(データを管理する専用のシステム)にロック用の仕組みを設けるなどの方法で実装します。これはやや複雑な仕組みです。それに対して、楽観的排他制御は、データベースに変更ユーザーと変更日時の項目を追加する程度の作業で実現可能です。すなわち、実装の難易度は悲観的排他制御の方が高いと言えます。それぞれの特徴と用途を理解しておきましょう。

このように、複数のユーザーが使用する業務システムでは一つのデータを同時に編集できないようにするための仕組みが必要です。そのような目的で排他制御の技術があります。代表的な排他制御の手法には、「楽観的」と「悲観的」があります。それぞれの特徴を理解した上で排他制御の手法を選択するようにしてください。