(57)【特許請求の範囲】
【請求項１】
分散形データベースに属す情報が記憶されているノードを備えたシステム内の複数のノードに影響を与えるトランザクションを実行するための方法であって、前記情報がテーブルに分割されており、前記トランザクションがトランザクションコーディネータから発信され、前記トランザクションが前記多数のテーブルのうちの少なくとも１つの第１テーブルの部分の少なくとも１つのグループに影響を与え、前記グループが少なくとも１つの第１部分および第２部分、可能な場合には１つ以上の別の部分を含み、前記第１部分が第１ノード内に記憶されており、前記第２テーブル部分が前記第１ノードと別個の第２ノード内に記憶されており、前記グループ内の可能な別の部分が互いに別個で、かつ前記第１および前記第２ノードと別個の別のノードを備えた中間ノードに記憶されており、前記トランザクションがツーセーフトランザクションであるような、トランザクションを実行する方法において、
−第１ノードに前記トランザクションの準備をすることを求めるリクエストを意味する「準備」メッセージを、前記トランザクションコーディネータが送り、
−前記第１ノードが前記トランザクションを引き受けできるときに、前記第１ノードが直接または１つ以上の中間ノードを介し、前記第２ノードへ準備リクエストを送るか、または
−前記第１ノードが前記トランザクションを引き受けできないときに、前記第１ノードが直接または１つ以上の中間ノードを介し、前記第２ノードへ「準備未完了」メッセージを送り、
−前記第２ノードが前記トランザクションを引き受けできるときに、前記第２ノードが前記トランザクションコーディネータに直接「準備完了」メッセージ、すなわち影響を受けたすべてのノードが前記トランザクションを引き受ける準備が完了していることを示すメッセージを前記第２ノードが送るか、または
−前記第２ノードが前記トランザクションを実行できないか、または前記第２ノードが「準備未完了」メッセージを受信したときに、前記第２ノードが前記トランザクションコーディネータに直接「準備未完了」メッセージを送る第１段階により前記トランザクションをオープンし、終了し、該第１段階の次に、
−前記トランザクションコーディネータが実行すべき対策に関するメッセージを前記第２ノードに直接送り、
−次に前記第２ノードが直接または１つ以上の中間ノードを介し、前記第１ノードへ前記対策に関するメッセージを送り、
−次に前記第１ノードが前記トランザクションコーディネータに終了メッセージを送り、
これにより終了する、第２段階が続き、
前記対策に関する前記メッセージが「コミット」メッセージ、すなわち前記トランザクションに従って対策を実行するメッセージであり、前記終了メッセージが「コミット完了」メッセージ、すなわち第１段階が「準備完了」メッセージで終了していることを条件に、または前記対策に関する前記メッセージが「打ち切り」メッセージ、すなわち前記トランザクションを打ち切るためのメッセージであるときに、トランザクションに従って対策を実行したことを述べたメッセージであり、前記終了メッセージが［打ち切り完了」メッセージ、すなわち第１段階が「準備未完了」メッセージで終了したときに、トランザクションを打ち切るようになっていることを特徴とする、システム内の複数のノードに影響を与えるトランザクションを実行するための方法。
【請求項２】
前記トランザクションがテーブル部分の別の部分に影響し、それぞれのグループが前記第１テーブルに属す部分または前記データベース内の他の一部のテーブルに属し、前記第１テーブルと別個の部分を含み、前記テーブル部分が第１および第２ノード内に記憶されており、可能な場合には１つ以上の中間ノード内に記憶されており、各中間ノードが前記部分のそれぞれのグループ内の他のノードと別個であり、前記第１段階が前記トランザクションコーディネータからそれぞれの第１ノードへの前記準備リクエストによりオープンにされ、それぞれの第２ノードから前記トランザクションコーディネータへの「準備完了」メッセージまたは「準備未完了」メッセージによって終了し、前記第２段階が前記トランザクションコーディネータからそれぞれの第２ノードへの実行すべき対策に関する前記メッセージによりオープンにされ、それぞれの第１ノードから前記トランザクションコーディネータへの前記終了メッセージにより終了し、実行すべき対策に関する前記メッセージが「コミット」メッセージ、すなわち前記トランザクションに従って対策を実行するためのメッセージであり、前記終了メッセージが「コミット完了」メッセージ、すなわちすべての第２ノードからの「準備完了」メッセージで前記第１段階を終了するか、または前記対策に関する前記メッセージが「打ち切り」メッセージ、すなわち前記トランザクションを打ち切るためのメッセージであるときに、トランザクションに従って対策が実行されたことを述べたメッセージであり、前記第１段階が任意の第２ノードからの「準備未完了」メッセージで終了したときに、前記終了メッセージがトランザクション打ち切り完了メッセージとなっていることを特徴とする、請求項１記載の方法。
【請求項３】
前記第１部分に、それぞれのグループ内の他の部分よりも高い優先権を割り当てることを特徴とする、請求項１または２記載の方法。
【請求項４】
それぞれのグループが前記中間ノード内に記憶される１つ以上の別の部分を含み、前記第１段階におけるメッセージが前記第１ノードから前記中間ノード、および前記中間ノードから前記第２ノードへシリアルに送られ、前記第２段階におけるメッセージが前記第２ノードから前記中間ノードへ、および前記中間ノードから前記第１ノードへシリアルに送られることを特徴とする、請求項１または２記載の方法。
【請求項５】
それぞれのグループが、前記データベース内に含まれるテーブルのフラグメントを含み、前記フラグメントが前記第１部分、前記第２部分および別の部分を含み、前記別の部分が第３ノードに記憶されており、前記テーブルの一部の第１コピーを構成する前記第１部分に前記より高い優先権が存在し、前記別の部分が前記第１コピーのうちの第２コピーを形成し、前記第２部分が前記第１コピーのスタンバイコピーを形成することを特徴とする、請求項３または４に記載の方法。
【請求項６】
前記第１段階における前記第１ノードの準備が、前記第１ノードによる前記フラグメントに属す、すべてのコピーに対するロックの発生および実施を含むことを特徴とする、請求項１または５に記載の方法。
【請求項７】
前記第１ノードが実行すべき対策に関する前記メッセージを受信し、前記終了メッセージを送った後に限り、前記第１ノードが前記フラグメントに属すすべてのコピーに関する前記ロックの解除を発生することを特徴とする、請求項６記載の方法。
【請求項８】
前記トランザクションによって影響を受けるそれぞれのコピーの部分だけを利用できないようにしながら、他のトランザクションに対しては他の部分を利用できる状態にするよう、適当な方法に従って前記ロックを実施することを特徴とする、請求項６または７に記載の方法。
【請求項９】
前記トランザクションによって影響を受けるフラグメント内の前記ノードのうちの１つが、前記トランザクションの実施中にクラッシュする、請求項１〜８のいずれか１項に記載の方法において、
−前記トランザクションコーディネータが進行中のすべてのメッセージ伝送をチェックし、
−中止されたトランザクション相を最初から再スタートし、
−メッセージチェーンからクラッシュしたノードを排除しながら、前記相に従ってメッセージを送り、
−ノードが先に受信したメッセージを受信した場合、このノードが前記メッセージを無視し、これを送ることを特徴とする方法。
【請求項１０】
前記クラッシュしたノードが前記トランザクションによって影響を受けるフラグメント内の第１ノードであるとき、および前記トランザクションの準備段階中にクラッシュが生じたときにトランザクションを打ち切ることを特徴とする、請求項９記載の方法。
【請求項１１】
前記トランザクションの実行中に、トランザクションコーディネータがクラッシュし、システムコーディネータがシステム内のノードのクラッシュを検出するようになっている、請求項１〜８のいずれか１項に記載の方法において、
−前記クラッシュしたノードがトランザクションコーディネータである場合、トランザクションへの参加ノードとなっているかどうかを質問する一般的な問い合わせを、システムコーディネータが前記システム内のすべてのノードに送り、
−新しいノードにトランザクションコーディネータの役割を割り当て、
−前記トランザクションによって影響を受けるそれぞれのフラグメント内のすべてのノードが新しいトランザクションコーディネータに送られるステータスレポートを編集し、該ステータスレポートがノードのアイデンティティ、フラグメントのアイデンティティ、トランザクションステータスおよび前記ノードがそれぞれのフラグメントにおける第１コピー、第２コピーまたはスタンバイコピーであるかどうかを表示しており、
−前記新しいトランザクションコーディネータが前記ステータスレポートに基づき、前記トランザクションを続行すべきか、打ち切るべきかを判断することを特徴とする方法。
【請求項１２】
それぞれのグループが第１および第２部分を含み、前記第２のより高い優先権が前記テーブルの一部の第１コピーから成る前記第１部分から成り、前記第２部分が、前記第１コピーの第２コピーから成ることを特徴とする、請求項３記載の方法。
【請求項１３】
前記システムが第２システムによって補足されている、請求項６〜８のいずれか１項に記載の方法であって、前記ロックを解除する前に前記トランザクションに従う前記第２システムの更新をリクエストすることを特徴とする方法。
【請求項１４】
それぞれのトランザクションの次に、当該トランザクションの実行を制御する異なる属性が続く、請求項１３に記載の方法において、
ワンセーフ伝送によって前記第２システムを更新すべき旨を前記属性のすべてが表示したときに、ワンセーフ伝送によって前記更新を実行し、前記属性のうちのいずれかが、限定されたツーセーフ伝送によって前記第２システムを更新すべき旨を表示した場合、限定されたツーセーフ伝送によって前記第２システムを更新することを特徴とする、請求項１３記載の方法。
【請求項１５】
ワンセーフ伝送が前記トランザクションによって影響を受けるそれぞれの第１ノードによる、実行すべき対策に関する「コミット」メッセージを前記第２システム内の対応するノードへ送信することを含み、その後、トランザクションを続けることを特徴とする、請求項１３または１４記載の方法。
【請求項１６】
リクエストされた対策が実行できない旨の表示を発生し、この表示を別個のトランザクション内で、または前記第２システムと前記第１システムとの間の別のトランザクションの一部として、前記第２システムから前記第１システムへ送ることにを特徴とする、請求項１５記載の方法。
【請求項１７】
限られたツーセーフ伝送が前記トランザクションによって影響を受けるそれぞれの第１ノードによる、実行すべき対策に関する「コミット」メッセージを前記第２システム内の対応するノードへ送信することを含み、その後、前記第２システム内の前記対応するノードが前記対策を実行する旨を表示する「コミット完了」メッセージを前記第１ノードに送ることにより前記第１ノードに応答するか、または前記対策を実行せず、よって前記第２システムが前記トランザクションに従って更新されない旨を前記第１ノードに表示する「打ち切り」メッセージによって応答することを特徴とする、請求項１３または１４記載の方法。
【請求項１８】
前記第２システムが前記トランザクションに従って更新されない旨が表示されたときに、前記第２システムのコピーを正しく含むように、前記第２システムを再スタートすることを特徴とする、請求項１６または１７記載の方法。
【請求項１９】
前記第２システムを更新することと共に、前記第２システム内のそれぞれのノードに送られる情報が、前記第２システム内に論理的トランザクションコーディネータを構築するのに必要な情報を含み、前記情報に基づき、かつ前記第２システムに属すノードの瞬間的な負荷に基づき、前記第２システム内で物理的トランザクションコーディネータを選択することを特徴とする、請求項１５または１７記載の方法。
【請求項２０】
前記第２システムに属すすべてのノードにマッピングテーブルが記憶されるか、または利用可能であり、前記マッピングテーブルが論理的トランザクションコーディネータから達成すべき前記第２システム内の物理的ノードへのマッピングを可能にするテーブルであり、前記第１システムからの前記情報が前記第２システム内の論理的トランザクションコーディネータの選択を含み、前記第２システム内のシステムコーディネータが論理的トランザクションコーディネータのすべてを前記第２システム内の物理的ノードにマッピングできるように保証し、マッピングテーブルがトランザクション時にトランザクションコーディネータとして働くよう利用できるノードしか含まないことを特徴とする、請求項１９記載の方法。
【発明の詳細な説明】
発明の分野
本発明は分散形データベースに属す情報が記憶されているノードを含むシステム内の複数のノード間のトランザクションで使用されるトランザクションプロトコルを最適にするための方法に関する。
トランザクションはトランザクションコーディネータから発信され、データベース内のテーブルのうちの少なくとも１つの第１テーブルの一部の、少なくとも１つのグループに影響を与える。かかるグループは少なくとも１つの第１テーブル部分と、１つの第２テーブル部分と、可能な場合には１つ以上の別の部分とを含む。
第１部分は第１ノードに記憶されており、第２部分は第２ノード内に記憶されており、この第２ノードは第１ノードから分離されている。中間ノードにはグループ内の別の可能な部分が記憶されており、これら中間ノードは互いに別個の、かつ第１ノードおよび第２ノードとも別個の別のノードを含む。
トランザクションは２重安全（ツーセーフ）トランザクションを含み、このことはトランザクションによって影響されるすべてのノードがトランザクションを実行できる場合にトランザクションを実行すること、およびトランザクションによって影響を受けるノードのうちの１つでもトランザクションを実行できない場合には、トランザクションを打ち切る。
発明の背景
本明細書において「システム」と称すものは、ネットワークの一部を構成でき、更に、例えば分散形データベース内のノードを形成することにより複数の異なる相互に協働し合うノードを含むと長く知られてきたものである。かかるシステムでは２つ以上のノード間で常に異なるトランザクションが行われる。これらトランザクションは確実かつ時間的に効果的に実行しなければならない。
いわゆる分散形トランザクションとは、トランザクションを複数のノード、すなわち参加ノード間でトランザクションを行わなければならないことを意味する。１回のトランザクションは複数のノードに関与し得る。分散形トランザクションに関連し２つの方法が周知であり、これら方法として２つの段階の従来のコミット方法とリニアコミット方法がある。コミットとは参加ノードが何かすることを引き受けたこと、およびそれを行うことを意味する。
分散形データベースでは情報の安全なコピー、すなわちバックアップコピーを利用することも知られている。従って、第１ノード内にはテーブルの一部の基本（第１）コピーが記憶され、第２ノード内には同じ部分の第２コピーが記憶される。
関連する第２コピーを備えた第１コピーを、本明細書ではフラグメントと称す。従って、テーブルの一部に影響するトランザクションはテーブルのこの部分の第１コピーおよび第２コピーの双方を含むテーブルのフラグメントにも影響する。分散形トランザクションが複数の異なるテーブルを含むか、またはテーブルの複数の異なる部分を含むことができる場合、複数の異なるフラグメントおよび関連するコピーも影響を受ける。
２相の従来のコミット方法およびリニアコミット方法は、複数のフラグメントに影響するトランザクションの点で種々の態様で有益である。これについては添付図面を参照して後に詳述する。
しかしながら、現段階では次のように簡単に述べることとする。
１回の同じトランザクションでは、
−「２相の従来のコミット方法」では多数のメッセージを送らなければならないが、このことは一部をパラレルに実行でき、これと共にプロセッサおよび伝送容量に大きな負担をかけるが、応答時間が比較的短い。他方、
−「リニアコミット方法」は、より少数のメッセージを送るだけでよいが、基本的にはシリアルにメッセージを送らなければならず、これと共に、利用できるプロセッサおよび伝送容量にかける負担が少なく、応答時間が比較的長い。
システム内の冗長性を得るために、いわゆるシステム冗長を利用することも知られており、このことは全システムのパラレルな第２コピーを見いだすことを意味する。ハードウェアに関し、第２コピーは第１コピーと完全に別個のものである。
主要システムが完全に破壊された場合、例えばトータルクラッシュが生じた場合に、第２システムから第１システムへのプロモーションが生じるだけである。
トランザクション中にトランザクションコーディネータのクラッシュが生じた場合、システムのいわゆるブロッキングが生じる。このことは、クラッシュしたトランザクションコーディネータが再スタートするか、トランザクションコーディネータの第２コピーが第１コピーへプロモートされ、トランザクションコーディネータの役割をテークオーバーするまで、システムは待機しなければならないことを意味する。
これに関連し、いわゆる「ノンブロッキングコーディネータ」を構築することも知られている。かかるコーディネータについては、スペイン・エリック・ブラッツベルク、スベイン−オロフ・ヴァッショベル、エステン・トルヨルンセンによる論文「高度に利用可能なデータベースにおけるロケーションおよびレプリケーションと独立した回復」、テルノアＲアンドＤ社に記載されている。
要するに、この方法はパラレルなトランザクションコーディネータを使用しており、これによりパフォーマンスコストが極めて高くなっている。
また、１９９２年、バンクーバーにおける「極大規模データベース」会議で発行された、チェンバレンによる論文「Ｄ３ダイナミックデータ分散アルゴリズム」でも言及されている。この論文も、トランザクション中にクラッシュしたトランザクションコーディネータの取り扱いについて記載している。
発明の概要
技術的課題
分散形データベースに属す情報が記憶された複数のノードを含むシステム内の多数のノードに影響を与えるトランザクションを実行する方法であって、情報がテーブルに分割されており、トランザクションコーディネータからトランザクションが発信され、トランザクションが前記テーブルのうちの少なくとも１つの第１テーブルのうちの部分の少なくとも１つのグループに影響を与え、グループが少なくとも１つの第１部分および第２部分、可能な場合には１つ以上の別の部分を含み、第１部分が第１ノード内に記憶されており、第２部分が第１ノードと別個の第２ノード内に記憶されており、グループ内の可能な他の部分が中間ノード内に記憶されており、これら中間ノードが互いに別個であり、かつ第１ノードおよび第２ノードから別個である別のノードによって形成されており、トランザクションがツーセーフトランザクションを含むようなトランザクションを実行する方法からスタートし、本技術の最初に述べた観点を検討すると、利用できるプロセッサおよび伝送容量に関連して見た場合、かかるトランザクションを迅速かつ安全に実行できるようにすることに課題があることが理解できよう。
別の技術的課題はかかるトランザクションを基本的には２つの相、すなわち「２相の従来のコミット方法」に関連し、数個のメッセージしか送信しなくてよい相と、「リニアコミット方法」に関連してより拘束された応答時間が得られる相とに、かかるトランザクションを分けることができるようにすることにある。
別の技術的課題は各フラグメントが第１コピーと１つ以上のバックアップコピー、例えば第２コピーおよびスタンバイコピーの双方を含む場合に、複数の異なるフラグメントに影響を与える、特にトランザクションを簡単かつ有効に取り扱うようトランザクションプロトコルを適応できるようにすることにある。
別の技術的課題は、システムをブロックされた状態にすることなく、トランザクション中のクラッシュ（障害）したノードおよびクラッシュしたトランザクションコーディネータを簡単に取り扱いできるよう、トランザクションプロトコルを適応化できるようにすることである。
別の技術的課題は、適性かつ正しい時間にロックをセットし、トランザクションと組み合わせて適性かつ正しい時間にロックを解除し、トランザクション中にクラッシュするどのノードに対してもトランザクションを安全に取り扱いできるようにする、専ら２相でトランザクションを行えるようにすることにある。
別の技術的課題は、別の相をトランザクションに導入することなく、トランザクションと組み合わせて第２システムを更新できるようにすることにある。
別の技術的課題は、アプリケーションに関連し、第２システムを更新できるようにし、かつ影響を受けたフラグメントに適用されるロックを簡単かつ有効に解除できるようにすることにある。
別の技術的課題は、異なるトランザクションに関する安全性に課される条件に応じ、確実な異なる方法でトランザクションと組み合わせて、第２システムの更新を実行できるようにすることにある。
更なる技術的課題は、トランザクションのコーディネータの関係を分散する際に、第２システムのノードにかかる負荷を調節できるようにもする、簡単かつ有効な態様で第２システム内のトランザクションコーディネータを選択できるようにすることにあることも理解できよう。
解法案
上記技術的課題の１つ以上を解決するために、本発明は分散形データベースに属す情報がテーブルの形態で記憶されているノードを含むシステム内の多数のノードに影響を与えるトランザクションで使用するための方法を提供するものである。
このトランザクションはトランザクションコーディネータから発信され、前記テーブルのうちの少なくとも１つの第１テーブルのうちの部分の少なくとも１つのグループに影響し、それぞれのグループは少なくとも１つの第１部分および第２部分、可能な場合には１つ以上の別の部分を含む。
第１部分は第１ノードに記憶され、第２部分は第１ノードと別個の第２ノード内に記憶され、グループ内の他の可能なテーブル部分は中間ノード内に記憶され、これら中間ノードは互いに別個であり、かつ第１ノードおよび第２ノードと別個の別のノードを含むことがある。
トランザクションはツーセーフトランザクションを含む。
利用できるプロセッサおよび伝送容量に関連し、かかるトランザクションを実行する高速かつ信頼できる方法を提供するために、本発明によれば、トランザクションを第１相でオープンし、この第１相では
−第１ノードに前記トランザクションの準備をすることを求めるリクエストを意味する「準備」メッセージを、前記トランザクションコーディネータが送り、
−前記第１ノードが前記トランザクションを引き受けできるときに、前記第１ノードは直接または１つ以上の中間ノードを介し、前記第２ノードへ準備リクエストを送るか、または
−前記第１ノードが前記トランザクションを引き受けできないときに、前記第１ノードは直接または１つ以上の中間ノードを介し、前記第２ノードへ「準備未完了」メッセージを送り、
−前記第２ノードが前記トランザクションを引き受けできるときに、前記第２ノードは前記トランザクションコーディネータに直接「準備完了」メッセージ、すなわちすべての影響を受けたノードが前記トランザクションを引き受ける準備が完了していることを示すメッセージを前記第２ノードが送るか、または
−前記第２ノードが前記トランザクションを実行できないか、または前記第２ノードが「準備未完了」メッセージを受信したときに、前記第２ノードは前記トランザクションコーディネータに直接「準備未完了」メッセージを送り、これにより第１相（phase）を終了する。
この第１相の次に第２相が続き、この第２相では、
−前記トランザクションコーディネータは実行すべき対策に関するメッセージを前記第２ノードに直接送り、
−次に前記第２ノードは直接または１つ以上の中間ノードを介し、前記第１ノードへ前記対策に関するメッセージを送り、
−次に前記第１ノードは前記トランザクションコーディネータに終了メッセージを送り、これにより第２相を終了する。
とるべき対策に関するメッセージはコミットメッセージ、すなわちトランザクションに従って対策を実行するためのメッセージであり、終了メッセージは「コミット完了」メッセージである。すなわち「準備完了」メッセージで第１相が終了した場合、トランザクションに従う対策を実行する。
他方、「準備未完了」メッセージで第１相が完了した場合、実行すべき対策に関するメッセージは「打ち切り」メッセージとなる。すなわちトランザクションを打ち切り、終了メッセージは「打ち切り完了」メッセージとなる。すなわちトランザクションを打ち切る。
本明細書は、１つのグループを取り扱う態様の簡単な説明である。しかしながらそれぞれのグループが第１テーブルに属す部分および／またはデータベース内の他のテーブルに属し、第１テーブルと別個の部分を含むようなテーブル部分の別のグループにトランザクションが影響することが極めて多い。
これら部分は相対的な第１および第２ノード、可能な場合には１つ以上の中間ノード内に記憶され、これら中間ノードは部分のそれぞれのグループ内で互いに別個のノードとなっている。
この場合、本発明によればトランザクションコーディネータがそれぞれの第１ノードに準備することをリクエストすることにより、第１相がオープンされ、それぞれの第２ノードからトランザクションコーディネータへの「準備完了」または「準備未完了」メッセージによって第１相が終了することが提案される。
第２相は、実行すべき対策に関する、トランザクションコーディネータからそれぞれの第２ノードへ送られるメッセージによりオープンされ、第１ノードからトランザクションコーディネータへの終了メッセージにより終了する。
このケースではメッセージは「コミット」メッセージであり、第１相がすべての第２ノードからの「準備完了」メッセージにより終了する際、終了メッセージは「コミット完了」メッセージである。
実行すべき対策に関するメッセージは「打ち切り」メッセージであり、任意の第２ノードからの「準備未完了」メッセージで第１相が終了する際の終了メッセージは「打ち切り完了」メッセージである。
従って、１回のトランザクションが数個のノードに影響を与えるとき、本発明は基本的にはこれらノードをグループに分割することに基づいており、メッセージはそれぞれのグループ内でシリアルに送られ、かつトランザクションコーディネータからそれぞれのグループへはパラレルに送られる。
第１相はトランザクションコーディネータからそれぞれのグループ内の第１ノードへのメッセージでオープンされ、それぞれのグループ内の最終ノードから直接トランザクションコーディネータへ送られるメッセージで終了する。
第２相はトランザクションコーディネータからそれぞれのグループ内の最終ノードへのメッセージでオープンされ、それぞれのグループ内の第１ノードから直接トランザクションコーディネータへ送られるメッセージで終了する。
本発明は第１部分にそれぞれのグループ内の第２部分または他の部分よりも高い優先権が割り当てられており、それぞれのグループが中間ノード内に記憶されている１つ以上の別の部分を含む際に特に有効である。
このケースでは第１相ではメッセージは第１ノードから中間ノードへ、更に中間ノードから第２ノードへシリアルに送られ、第２相におけるメッセージは第２ノードから中間ノードへ、更に中間ノードから第１ノードへシリアルに送られる。
それぞれのグループは第１部分、第２部分および第３ノード内に記憶された別の部分を含むデータベースフラグメントを構成し、より高い優先権は、テーブルの一部の第１コピーを含む第１部分から成り、別の部分は第１コピーの第２コピー、すなわちバックアップコピーを含み、第２部分が第１コピーのスタンバイコピーを含む場合、特別な用途がある。
本発明はフラグメント内のすべてのコピーが更新され、フラグメント内のすべてのコピーのクラッシュが必ずしもシステムのブロッキングを生じさせないようトランザクションを実行する確実な方法も提供するものである。この方法は、トランザクションの実行と共にフラグメントに属すそれぞれのコピーにロックを実施し、前記それぞれのコピーから前記ロックを解除し、よって第１ノードの準備が第１相におけるフラグメントに属するすべてのコピーへのロックを実施させることにより達成される。
本発明の一実施例によれば、第１ノードによりそれぞれのコピーに適用されるロックは、第１ノードが実行すべき対策に関するメッセージを受信し、終了メッセージを送るまで解除されない。
適当な方法によれば、トランザクションによって影響を受けるそれぞれのコピーの部分だけが他のトランザクションに対して利用できなくなり、かかる他のトランザクションに対しては他の部分は利用できる状態のままとなるように、このロックは実施される。
トランザクションを実施しながらトランザクションのクラッシュによりフラグメント内のノードのうちの１つが影響を受ける場合、本発明によれば、
−トランザクションコーディネータは進行中のすべてのメッセージ伝送をチェックし、
−中止されたトランザクション段階を最初から再スタートし、
−メッセージチェーンからクラッシュしたノードを排除しながら、この段階に従ってメッセージを送り、
−先に受信したメッセージを受信したノードが前記メッセージを無視し、これを送る。
他方、クラッシュしたノードがトランザクションによって影響を受けるフラグメント内に第１ノードを含む場合、およびトランザクションの準備段階の間でクラッシュが生じた場合、トランザクションを打ち切る。
本発明によれば、トランザクションの実行中に、トランザクションコーディネータがクラッシュした場合、システムコーディネータがシステム内のノードのクラッシュを検出するようになっており、
−クラッシュしたノードがトランザクションコーディネータである場合のトランザクションへの参加ノードとなっているかどうかを質問する一般的な問い合わせを、システム内のすべてのノードにシステムコーディネータが送り、
−新しいノードにトランザクションコーディネータの役割を割り当て、
−前記トランザクションによって影響を受けるそれぞれのフラグメント内のすべてのノードが新しいトランザクションコーディネータに送られるステータスレポートを編集し、このステータスレポートがノードのアイデンティティ、フラグメントのアイデンティティ、トランザクションステータスおよび前記ノードがそれぞれのフラグメントにおける第１コピー、第２コピーまたはスタンバイコピーであるかどうかを表示し、
−前記新しいトランザクションコーディネータがステータスレポートに基づき、前記トランザクションを続行すべきか、打ち切るべきかを判断することも提案される。
上記方法は、それぞれのグループが第１部分および第２部分しか含まず、より高い優先権がテーブルの一部の第１コピーを構成する第１部分から成り、第２部分が第１コピーのうちの第２コピーを含む場合にも実施できる。
トランザクションと共に第２システムを更新できるようにするために、全システム、すなわち第１システムと第２システムとの双方の第２コピーを使用する際、本発明によれば、それぞれのコピーに対するロックを解除するために第２システムを更新することを求めるように提案される。
第２システムの更新は１つの工程で実行できるし、またワンセーフ伝送または限定されたツーセーフ伝送によっても達成できる。
選択する方法は各トランザクションが必要とする安全度のレベルに応じて変わる。本発明によれば、トランザクションを制御する属性は第２システムの更新をワンセーフ伝送によって実行すべきか、または限定されたツーセーフ伝送によって実行すべきかを示す。
ワンセーフ伝送によって更新を実行する場合、トランザクションによって影響を受けるそれぞれの第１ノードは、第２システム内の対応するノードへメッセージを送り、実行すべき対策をこれらノードに伝える。すなわち「コミット」メッセージを送る。第２システム内の影響を受けたノードからの対策を実行できるかどうかという応答を待つことなくトランザクションが続行する。
限定されたツーセーフ伝送により第２システムを更新する際、トランザクションによって影響を受けるそれぞれの第１ノードは、第２システム内の対応するノードに、実行すべき対策に関するメッセージ、すなわちコミットメッセージをこれらノードに送り、トランザクションの一部としての第２システム内の影響を受けたノードからの応答を待つ。これらメッセージには対策を実行すること、および従って第２システムをトランザクションに従って更新する旨を第１ノードに表示する「コミット完了」メッセージ、または対策を実行しないこと、従って第２システムをトランザクションに従って更新しない旨を第１ノードに表示する「打ち切り」メッセージで回答する。
ツーセーフ伝送における制限は第２システム内のノードがトランザクションの打ち切りを求めることができないことである。
本発明によれば、トランザクションに従って第２システムを更新しないとの表示によって、システムのコピーを正しく構成するよう第２システムを再スタートさせることも提案される。
トランザクションと共に前記第２システムの更新時に第２システム内でトランザクションコーディネータを簡単かつ有効に選択できるようにするために、本発明によれば、第１システム内のトランザクションコーディネータが第２システム内の可能な論理的トランザクションコーディネータをカバーするマッピングテーブルから論理的トランザクションコーディネータを選択することにより、前記第２システム内のトランザクションコーディネータを選択することを可能にすることが提案される。
マッピングテーブル内のそれぞれの論理的トランザクションコーディネータを、第２システム内で作動する物理的ノードへマッピングできる。
第２システム内のシステムコーディネータがマッピングテーブル上のすべての位置を占有し、これらノードをトランザクションコーディネータとして作動させるのに利用できることを保証できる。
第２システム内のノードにかかる負荷を所定の程度制御できるようにするために、本発明によれば所定のノードに対する負荷が大きい場合、第２システム内のシステムコーディネータがマッピングテーブル内にこれらの負荷が大きくなったノードが存在しないように保証することが提案される。
利点
本発明の主な特徴である利点は、これまでの場合よりも信頼性がより高く、かつより高速で、分散形データベース内でトランザクションを実行できることにある。
このことは、本発明に従って実行されるトランザクションの結果、関連するコピーにより複数のフラグメントに影響を与える分散形トランザクションの場合の通常のトランザクションプロトコルである「リニアコミット」により可能である場合よりも、複数のフラグメントに影響を与えるトランザクションの場合のほうが応答時間がより短くなるという事実により可能となる。
更に本発明は、トランザクション中に１つ以上のノードがクラッシュした場合に、ノンブロッキングシステムを提供し、遅延時間をより短くする。
更に本発明は、かかる更新を実行するのにトランザクション内で別の段階を加えることなく、第２システムを更新できるようにもする。
本発明の方法の主な特徴は、請求項１の特徴項に記載されている。
【図面の簡単な説明】
次に、添付図面を参照し、これまで知られている方法および本発明に係わる方法について詳細に説明する。
図１は、ノードを含むシステムの一部およびそれらの相互の関係を示す、極めて簡略された略図である。
図２は、公知の技術によりリニアコミット方法をどのように実行できるかを示す略図である。
図３は、各々における参加ノードが３つのノードである４つのグループに影響を与える、ＴＰＣ−Ｂトランザクションによって影響される異なるノードの間の、相互の関係の略図である。
図４は、２段階の従来のコミット方法により、ＴＰＣ−Ｂトランザクションをどのように実行するかを略図で示す図である。
図５は、リニアコミット方法によりＴＰＣ−Ｂトランザクションをどのように実行するかを略図で示す図である。
図６は、本発明に従い、トランザクションの一部をどのように実行するかを示す、簡略化された略図である。
図７は、本発明に従い、ＴＰＣ−Ｂトランザクションをどのように実行するかを示す略図である。
図８は、クラッシュしたノードの取り扱いを略図で示す図である。
図９は、クラッシュしたトランザクションコーディネータの取り扱いを略図で示す。
図１０は、各グループが２つの参加ノードしか含まないグループの一例の略図である。
図１１は、本発明に従い、第２システムをどのように更新できるかの第１の例を略図で示す。
図１２は、本発明に従い、第２システムをどのように更新できるかの第２の例を略図で示す。
図１３は、前記第２システムを更新する際に、第２システム内のトランザクションコーディネータの選択にあたり、マッピングテーブルがどのように作動するかを示す略図である。
分散形データベースにおけるトランザクションに関連する公知の方法の説明
本発明によって得られる利点を同時に開示しながら、本発明をより容易に理解できるようにするために、まず公知技術について若干、より詳細に説明することとする。
まず「２相の従来のコミット方法」について説明する。この方法は分散形トランザクションを実行する周知の方法である。その名称にもかかわらず、この方法は３つの相を含む。そのうちの２つの相は実際のトランザクションに影響を与えるものであり、これら３つの相は次の通りである。
−トランザクションを更新する
−準備およびコミットメント
−すべての参加ノードが自らコミットした際に対策を実施し、そうでない場合は対策を実施しない
第１相はオープニング段階であり、ここではトランザクションコーディネータが多様な更新によってトランザクションを準備する。第２相ではトランザクションコーディネータは「準備」なるメッセージを送る。このメッセージはすべての参加ノードが所定の対策に対する準備をする旨のリクエストであり、それぞれの参加ノードはとるべき対策を実行するように自ら準備をする。それぞれの参加ノードは対策を実行できる場合、「準備完了」なるメッセージで応答し、当該対策を実行できない場合には「準備未完了」なるメッセージにより応答する。
オープニング段階、すなわち準備段階のいずれかにおいて、トランザクションによって影響されるデータベースの一部にロックが適用され、データベースの同じ部分に関連し得る他の共には進行中のトランザクションが完了するまで待機しなければならない。このことはコミットメントのための条件が実際のトランザクション中に変更されないように行われる。
かかるロックは異なる方法で設定でき、従って、全ノードをロックすることからトランザクションによって影響を受けたデータベースの一部だけをロックすることまでのすべてを含む。本発明は、使用されるロックのタイプに依存しないので、本明細書ではこのロックについてはこれ以上詳細に説明しないこととする。
次に、方法のうちの相３をオープンする。この相ではトランザクションコーディネータはすべての参加ノードからの「準備完了」メッセージを受信し、トランザクションコーディネータはコミットメッセージを送る。このコミットメッセージは対策を実行するための命令である。上記以外でトランザクションコーディネータが参加ノードからの「準備未完了」メッセージを受信した場合、トランザクションコーディネータは「打ち切り」メッセージを送る。このメッセージは対策を実行しないようにする命令である。
準備がトランザクション前の更新も含む場合、相１と２とを共通メッセージとすることができる。
従って、２つのノード間の、２相の従来のコミット方法はトランザクションコミットとそれぞれの参加ノードとの間で少なくとも４つのメッセージの伝送を必要とする。次の例では、ノード１をトンラザクションコーディネータとし、ノード２を参加ノードとする。次のような４つのメッセージがある。
１：ノード１からノード２への「準備」メッセージ
２：ノード２からノード１への「準備完了」または「準備未完了」メッセージ
３：ノード１からノード２への「コミット」または「打ち切り」メッセージおよび
４：ノード２からノード１への「コミット完了」または「打ち切り完了」メッセージがある。
システムでは１回のメッセージによって数個のノードに影響が及ぶ。例えばトンラザクションコーディネータが直接接続されており、トランザクションによって影響を受けるノードと異なる階層内の更に下に位置する別のノードをトランザクションコーディネータが必ずしも知っている必要のないようなノードの階層が存在し得る。
図１は、トランザクションコーディネータ１が参加ノード１ａおよび１ｂに影響を与えるトランザクションを開始する、１つのかかる階層の一例を示す。
図１は、参加ノード１ｂが参加ノード１ｃおよび１ｄのためのコーディネータを構成することを、トランザクションコーディネータが知る必要なく、参加ノード１ｂがこのようなコーディネータを構成していることも示している。
トランザクションコーディネータ１と参加ノード１ａおよび参加ノード１ｂとの間の通信が同時に行われることがあり得る。このことは、トランザクションがトランザクションコーディネータから多数の参加ノードへのトランザクションが行われても、種々の参加ノード間で同時に４つのメッセージが送られるので、転送を行うのに必ずしも長い時間をかける必要はない。
ここで、「同時」とは必ずしも絶対的な同時性を意味するものではない。その理由は、異なるノード間の伝送容量、異なるノード内のプロセッサ容量および異なるノードからの応答時間が変わり得るからである。例えば１ｂはトランザクションコーディネータ１に回答できる前に１ｃおよび１ｄと共に所定の操作を実施する必要があるので、１ａからの応答時間は１ｂからの応答時間よりも短くなることがある。
従って、２相の従来のコミット方法は応答時間を比較的短くするが、通常、他の方法よりも多数のメッセージの伝送をしなければならない。
２相のコミット方法を最適にできるようにすると共に、コーディネータシップをシフトすることも可能である。通信システムのデータベースではこのタイプの最適化は通常のことである。ユーザーがサーバーとして等しく信頼できないような状況では、かかる最適化も好ましい。例えば通信データベースにおいて家庭のパソコンのユーザーがトランザクションコーディネータとなることは望ましいことではない。
コーディネータシップのシフトの一例として、いわゆる「リニアコミット」方法があり、このコミット方法はトランザクションにより複数のノードが影響される場合に、必要なメッセージ数が低減される場合の、２相の従来のコミットを最適化する方法である。
図２は、図１に示された多数のノードがリニアコミット方法を通してどのように協働するかを示すものである。
この図は各ステップにおけるコーディネータシップがシフトされることを示している。矢印はトランザクションのうちの相２における準備およびコミット部分を示す。トランザクションコーディネータは参加ノード１ａ（１）に準備することを求め、コーディネータシップを送る。参加ノード１ａがトランザクションの実行を引き受けでき、コーディネータシップを送る場合、参加ノード１ａは参加ノード１ｂ（２）に準備することを求める。参加ノード１ｂがトランザクションの実行を引き受けでき、コーディネータシップを送る場合、参加ノード１ｂは参加ノード１ｃ（３）に準備することを求める。参加ノード１ｃがトランザクションの実行を引き受けできる場合、ノード１ｃは参加ノード１ｄ（４）に準備することを求める。
参加ノード１ｄは自分がチェーン内で最終であるかを見て、自分に準備リクエストが到達しているので、先行するすべてのノードがトランザクションの実行を引き受けたことを知る。最終ノード１ｄはコーディネータシップを有し、従って参加ノード４自身がコミットメントを実行できる場合、参加ノード１ｃに「コミット」コマンド（５）を送ることができる。参加ノード１ｃが参加ノード１ｄから「コミット」コマンドを受信すると、参加ノード１ｃは「コミット」コマンドによりノード１ｂ（６）に応答し、同様のことが参加ノード１ａ（７）まで行われる。参加ノード１ａ（７）はトランザクションコーディネータ１に「コミット完了」メッセージ（８）を送ることができる。
先行するすべての参加ノード１ｂ、１ｃ、１ｄがトランザクションの実行を引き受けた場合、トランザクションコーディネータ１は参加ノード１ａから「コミット完了」メッセージを受けるだけである。参加ノードのうちの一人、例えば参加ノード１ｃが自ら「準備未完了」を宣言した場合、トランザクションコーディネータは打ち切られる。
すべてのことは逐次生じるので、応答時間は比較的長くなるが、リニアコミット方法は参加ノード間で２つのメッセージしか必要としない。特に多数の参加ノードが関連しているケースで顕著である。
分散形データベースにおいてトランザクションを実施するときに性能をチェックする共通するテスト方法として、いわゆるＴＰＣ−Ｂ−トランザクションを実行する方法がある。図３には、かかるトランザクションにおける参加ノードが略図で示されている。
ＴＰＣ−Ｂ−トランザクションはデータベース内の４つの異なるテーブルを更新することを含む。
１つのテーブルを多数の異なるグループに分けることができ、この場合、各グループはトランザクションによって影響されるテーブルの異なる部分を含む。これらテーブル部分はシステム内の異なるノード内に物理的に置かれている。従って、１つのテーブルを更新するにはグループ全体、すなわち影響されるすべての部分を更新する必要がある。
４つの異なるテーブルを更新しなければならないＴＰＣ−Ｂ−トランザクションでは、それぞれの部分に属すすべての部分を更新しなければならない。
図３はトランザクションコーディネータ１と、４つのグループｇ１、ｇ２、ｇ３、Ｇ４とを示し、各グループはそれぞれのノードに設けられた３つの異なる部分を含む。従って、第１グループｇ１は３つの参加ノードｄ１、ｄ２、ｄ３に設けられ、第２グループｇ２は３つの参加ノードに設けられた、同様なことが次々に行われている。
図４から理解できるように、２相の従来のコミットを使用するにはトランザクションコーディネータ１とそれぞれの参加ノードとの間で４つのメッセージを伝送しなければならず、それぞれの２方向矢印はこれら４つのメッセージを示し、この結果、多数の４＊ｇ＊ｄのメッセージが生じる。ここでｇはグループの数であり、ｄはそれぞれのグループ内の参加ノードの数である。図３に係わるＴＰＣ−Ｂ−トランザクションの場合、メッセージの数は４８となるが、一度に１２個のメッセージを同時に送ることができる。
図５から理解できるように同じコンフィギュレーションのグループおよびノード内でリニアコミット方法を使用する場合、トランザクションコーディネータ１は１つのメッセージを第１参加ノードｄ１へ送る。コーディネータシップは参加ノードｄ１にシフトされ、参加ノードｄ１は図示するようにメッセージおよびコーディネータシップを逐次最終参加ノードへ送る。この最終参加ノードは第４グループｇ４における参加ノードｄ１”’である。この参加ノードはチェーン内の最終参加ノードであり、先に何が生じているかによって決まる「コミット」メッセージまたは「打ち切り」メッセージがチェーンを介し、トランザクションコーディネータ１へ送り戻される。これを行うには２＊ｇ＊ｄ個のメッセージが必要であり、このメッセージは図３に示されたケースでは２４個のメッセージとなり、各メッセージは１つずつ逐次送られる。
好ましい実施例の説明
図６は分散形データベースに属し、テーブルに分割された情報が記憶されているノードのシステム内のうちの多数のノードに影響を与えるトランザクションを実行する方法を示す。
トランザクションコーディネータ１からトランザクションが発信され、このトランザクションが前記多数のテーブルのうちの少なくとも１つの第１テーブルのうちの一部の少なくとも１つのグループＧ１に影響を与える。
このグループＧ１は少なくとも１つの第１部分と１つの第２部分とを含み、可能な場合には１つ以上の別の部分を含む。この第１部分は第１ノードｎ１に記憶されているが、第２部分は第１ノードｎ１と別個の第２ノードｎ２に記憶されている。グループ内の可能な他の部分は中間ノードに記憶されており、これら中間ノードは互いに別個であり、かつ第１および第２ノードと別のノードを含む。
本発明はツー（２）セーフトランザクションであるトランザクションに基づく。
トランザクションコーディネータ１とグループＧ１との間のメッセージルートについてまず説明する。図６は第１相でトランザクションがオープンされることを示す。すなわちこの第１相では、
−第１ノードに前記トランザクションの準備をすることを求めるリクエストを意味する「準備」メッセージを、前記トランザクションコーディネータが送り、
−前記第１ノードが前記トランザクションを引き受けできるときに、前記第１ノードは直接または１つ以上の中間ノードを介し、前記第２ノードへ準備リクエストを送るか、または
−前記第１ノードが前記トランザクションを引き受けできないときに、前記第１ノードは直接または１つ以上の中間ノードを介し、前記第２ノードへ「準備未完了」メッセージを送り、
−前記第２ノードが前記トランザクションを引き受けできるときに、前記第２ノードは前記トランザクションコーディネータに直接「準備完了」メッセージ、すなわちすべての影響を受けたノードが前記トランザクションを引き受ける準備が完了していることを示すメッセージを前記第２ノードが送るか、または
−前記第２ノードが前記トランザクションを実行できないか、または前記第２ノードが「準備未完了」メッセージを受信したときに、前記第２ノードは前記トランザクションコーディネータに直接「準備未完了」メッセージを送る。
ここで、「直接」とは受信ノードへのダイレクトアドレスによりメッセージが送られることを意味する。しかしながらこのことはトランザクションに参加していないノードに関してメッセージを送ることを妨げるものでなく、メッセージアドレスに従ってメッセージを送ることも意味する。「間接」なる用語は、自らトランザクションに参加している１つ以上のノードによってメッセージを送ることを意味する。
間接的に送られるメッセージの例として図６はトランザクションにも参加している第３ノードｎ３へメッセージｂ’を第１ノードが送ることを示しており、この第３ノードｎ３がトランザクションを実行するために自らコミットできる場合、第３ノードｎ３はメッセージｂ”、すなわち準備リクエストを第２ノードｎ２へ送る。
第１相の後につぎのような第２相が続く。
すなわち、
−前記トランザクションコーディネータは実行すべき対策に関するメッセージを前記第２ノードに直接送り、
−次に前記第２ノードは直接または１つ以上の中間ノードを介し、前記第１ノードへ前記対策に関するメッセージを送り、
−次に前記第１ノードは前記トランザクションコーディネータに終了メッセージを送り、これにより第２相を終了する。
メッセージ「ｄ」、「ｅ」は「コミット」メッセージ、すなわちトランザクションに従って対策を実行するコミットメントを記述するメッセージであり、終了メッセージ「ｆ」は「準備完了」メッセージ「ｃ」によって第１相が終了したことを条件に、トランザクションに従った対策がコミットされたことを意味する「コミット完了」メッセージである。
他方、「準備未完了」メッセージ「ｃ」によって第１段階が終了した場合、メッセージ「ｄ」、「ｅ」は「打ち切り」メッセージである。すなわちトランザクションを打ち切る。終了メッセージ「ｆ」は「打ち切る」メッセージである。すなわちトランザクションを打ち切る。
中間ノードｎ３がトランザクションに参加しているとき、第２ノードｎ２と第１ノードｎ１との間のメッセージ「ｅ」が中間ノードｎ３を通過するように、このメッセージを２つのメッセージ「ｅ’」、「ｅ”」メッセージに分割できることも示されている。
内容を簡潔にするため、上記説明はグループｇ１に関係するトランザクションを参照したが、通常、１回のトランザクションによって数個のグループが影響される。
本明細書では本発明を説明し、更に本発明と公知技術とを簡単に比較するために、ＴＰＣ−Ｂトランザクションを一例として用いることとする。
従って、図７はそれぞれのグループがデータベース内の第１テーブルに属す部分、またはデータベース内の他のテーブルに属し、第１テーブルと別個の部分を含むような、テーブル部分の多数のグループｇ１、ｇ２、ｇ３、ｇ４に影響を与えるトランザクションを示す。
これら部分は第１ノードｎ１、ｎ１’、ｎ１”、ｎ１”’および第２ノードｎ２、ｎ２’、ｎ２”、ｎ２”’内にそれぞれ記憶されており、可能な場合には１つ以上の中間ノードｎ３、ｎ３’、ｎ３”、ｎ３”’に記憶され、各ノードは部分のそれぞれのグループ内の他のノードと別個になっている。
第１相はトランザクションコーディネータ１からそれぞれの第１ノードｎ１、ｎ１’、ｎ１”、ｎ１”’への準備リクエスト「ａ」、「ａ’」、「ａ”」、「ａ”’」によってオープンにされ、それぞれの第２ノードｎ２、ｎ２’、ｎ２”、ｎ２”’からトランザクションコーディネータ１への「準備完了」または「準備未完了」メッセージ「ｃ」、「ｃ’」、「ｃ”」、「ｃ”’」によって終了する。
第２の相はトランザクションコーディネータ１からそれぞれのノードｎ２、ｎ２’、ｎ２”、ｎ２”’へのとるべき対策に関するメッセージ「ｄ」、「ｄ’」、「ｄ”」、「ｄ”’」によってオープンにされ、それぞれの第１ノードｎ１、ｎ１’、ｎ１”、ｎ１”’からトランザクションコーディネータ１への終了メッセージ「ｆ」、「ｆ’」、「ｆ”」、「ｆ”’」によって終了する。
メッセージ「ｄ」、「ｄ’」、「ｄ”」、「ｄ”’」はコミットメッセージである。すなわちトランザクションに従った対策を実行し、終了メッセージ「ｆ」、「ｆ’」、「ｆ”」、「ｆ”’」はコミット完了メッセージであり、すなわち第１相が他のすべてのノードｎ２、ｎ２’、ｎ２”、ｎ２”’からの「準備完了」メッセージ「ｃ」、「ｃ’」、「ｃ”」、「ｃ”’」によって終了することを条件に、トランザクションに従ってとるべき対策をコミットすなわち実行する。
他方、第１相は任意のノードｎ２、ｎ２’、ｎ２”、ｎ２”’からの「準備未完了」メッセージ「ｃ」、「ｃ’」、「ｃ”」、「ｃ”’」によって完了した場合、このメッセージは「打ち切り」メッセージであり、すなわちトランザクションを打ち切る。終了メッセージ「ｆ」、「ｆ’」、「ｆ”」、「ｆ”’」は「打ち切り完了」メッセージであり、すなわちトランザクションを打ち切る。
それぞれのグループ内の第２部分よりも第１部分に、より高い優先権が割り当てられているとき、本発明の方法は特に有利に実施できる。
これはそれぞれのグループがデータベースのフラグメントを含んでいる場合である。このフラグメントは第１部分と、第２部分と、別の部分とを含み、前記別の部分は第３ノードに記憶されており、第１部分に割り当てられている、より高い優先度は、テーブルの一部分の第１コピーを構成する第１部分と、第１コピーの第２コピーから成る別の部分から成り、前記第２部分は第１コピーのスタンバイコピーから成る。
分散形データベースでテーブルの異なる部分の安全なコピーを実行する方法または安全なコピーをする際の高度の信頼性を保証するのにデータベースをどのように構築できるかについては、本明細書では詳細には説明しない。しかしながら読者は「分散形データベースと共に使用すべき方法およびこの方法に従って作動するようになっているシステム」に関するスウェーデン特許出願と、フラグメントの上記構成部分をより詳細に説明しているスウェーデン特許出願第9702015-0号を参照されたい。それぞれのコピーが異なるノードｎ１、ｎ２、ｎ３に記憶されているような第１コピー、第２コピーおよびスタンバイコピーを含むフラグメントを各グループｇ１、ｇ２、ｇ３、ｇ４が形成する場合、４つの異なるフラグメントに関係するトランザクションにおいて、上記ＴＰＣ−Ｂ−トランザクションが得られる。
この場合、本発明に係わるトランザクションは２＊ｆ＊（ｎ＋１）個のメッセージを必要とする。この場合、ｆは１回のトランザクションによって影響を受けるフラグメントの数であり、ｎはそれぞれのフラグメント内のコピーの数であり、上記メッセージの個数は図７に従ったＴＰＣ−Ｂトランザクションの場合、３２個のメッセージとなる。これら３２個のメッセージのうち、４つのメッセージを同時に送ることができる。このことは、４つの同時メッセージの伝送を８回行うことを意味する。
２相の従来のコミット方法と比較すると、若干長くなる応答時間（４回の代わりに８回）は、送る必要のあるメッセージの、より少ない数（４８の代わりに３２）によって補償される。
リニアコミット方法と比較すると、メッセージの数がより多くなる（２４個の代わりに３２個）ことは、メッセージを一部同時に伝送し、応答時間をより短くすることによって補償される。このシーケンスはトランザクションコーディネータ１によってオープンにされ、終了される。この理由は、トランザクションコーディネータ１は準備部分が完了しているかどうかについて知ることができ、従って、準備部分の直後に正しい対策に関するリクエストを送ることができるからである。これによってメッセージの伝送を同時に行うことが可能となり、更にリニアコミット方法の応答時間よりも応答時間をより短くすることができるようになる。
本発明によれば、第１相における第２ノードｎ１、ｎ１’、ｎ１”、ｎ１”’の準備は第１ノードｎ１、ｎ１’、ｎ１”、ｎ１”’によってそれぞれのフラグメントに属すすべてのコピーにロックをかけることができる。
第１ノードｎ１、ｎ１’、ｎ１”、ｎ１”’もそれぞれのロックを解除するだけでなく、第１ノードが実行すべき対策に関するメッセージを受信し、トランザクションコーディネータ１へ終了メッセージを送った後に限り、それぞれのロックを解除させる。
従って、トランザクションコーディネータ１が第１ノードｎ１、ｎ１’、ｎ１”、ｎ１”’から終了メッセージ「ｆ」、「ｆ’」、「ｆ”」、「ｆ”’」を受信すると、このフラグメント内のすべてのノードが実行すべき対策に関するメッセージを受信したことが判る。他方、第２相中であって第２ノードが終了メッセージを送る時間を有する前に、フラグメント内の第１ノードまたは他の任意のノードがクラッシュした場合、すべてのノードがこの第１相における第１ステージですべてのノードがロックされており、かつこのロックはまだアクティブであるので、このフラグメント内のどのノードがトランザクションを完了しているかについては、トランザクションコーディネータは知らない。
より簡単に説明すれば、第１ノードまたは他のノードがクラッシュすると、最後に送られたメッセージは他のノードに再送信されるということができる。以下、図８を参照し、本発明に係わるクラッシュしたノードの取り扱いについてより詳細に説明する。
適当な方法によれば、他のトランザクションに対しては、トランザクションによって影響を受けるそれぞれのコピーの部分しか利用できないようにし、他方、残りの部分を別のトランザクションに対して利用できる状態のままにするようにロックを行うことができる。
それぞれのフラグメント内の影響を受けるすべてのノードに対し、第１メッセージａ、ａ’、ａ”、ａ”’と組み合わせてロックを行う旨の効果に対するメッセージを含む第１ノードｎ１、ｎ１’、ｎ１”、ｎ１”’によってロックをかけることができる。
それぞれのノードに対するこの効果の特定のメッセージを送ることによって必ずしもロックを解除する必要はない。ロックを解除するには、必ずしも別のトランザクション段階を必要とするわけではない。通常、１つのトランザクションの次には、特にロック解除命令を含むクリーンアップメッセージが続く。かかる命令は通常、影響を受けるノードの間で次にメッセージを送るときに、いわゆるピギーバック（肩車）で送られる。この次のメッセージは当該トランザクションとは無関係である。
ロックを解除する別の方法として、それぞれのフラグメント内の第２ノードおよび可能な中間ノードが、ロックされた部分に関係する別のトランザクションがリクエストされたことを知った場合、第１ノードが新しいトランザクションの開始を受け入れ、第１ノードがこのロックを解除したことを表示する方法がある。従って、この第２のノードおよび可能な中間ノードは、ロックを解除が可能であることを知る。
それぞれの第１ノードによって制御されるフラグメント内のすべてのコピーをロックすることと組み合わせて、トランザクションコーディネータのコーディネータシップを維持することによって、トランザクション中にクラッシュしたノードをノンブロックで取り扱うことが可能となる。
図８は、トランザクションを実行している際の、トランザクションのクラッシュによってフラグメント内のノードのうちの１つが影響を受けた場合に本発明によって提案される方法を示す。第１グループｇ１内のバツ印のついた中間ノードｎ３をクラッシュしたものと見なす。よって、
−トランザクションコーディネータ１は進行中のすべてのメッセージの伝送をチェックする。
−中止されたトランザクション相を再スタートする。
−クラッシュしたノードをメッセージチェーンから排除した状態で、段階に従ってメッセージを送る。
−先に受信されたメッセージを受信したノードは、このメッセージを無視し、これを送る。
しかしながらトランザクションの準備段階中にトランザクションによって影響を受けたフラグメント内で第１ノードがクラッシュした場合、トランザクションは打ち切らなければならない。
図８は、第１相中にノードｎ３がクラッシュし、従って、第１ノードｎ１からのメッセージ（ｂ）が直接第２ノードｎ２へ進むことを示している。
図９は、トランザクションの実行中にトランザクションコーディネータ１のクラッシュ（バツ印）が生じた場合にシステムコーディネータ１ｓがシステム内のノードのクラッシュを検出するよう機能するプロセスを示している。
その後、次のことが行われる。
−クラッシュしたノード１がトランザクションコーディネータを構成するトランザクションにおける参加ノードであるかどうかを問い合わせる一般的な問い合わせを、システム内のすべてのノードに対し、システムコーディネータ１ｓが送る。
−新しいノード１’にトランザクションコーディネータの役割を割り当てる。
−トランザクションによって影響を受けるそれぞれのフラグメントｇ１、ｇ２、ｇ３内のすべてのノードがステータスレポートを編集し、このレポートは新しいトランザクションコーディネータへ送られる。このレポートはノードのアイデンティティ、フラグメントのアイデンティティ、トランザクションステータスを含み、ノードがそれぞれのフラグメント内に第１コピー、第２コピーまたはスタンバイコピーを含むかどうかを示す。
−新しいトランザクションコーディネータ１’は受信したステータスレポートに基づき、トランザクションを続行すべきか、打ち切るべきかを判断する。
上記説明におけるそれぞれのグループは３つのテーブル部分を含むが、それぞれのグループが第１部分および第２部分を含むとき、およびそれぞれの第１部分のより高い優先権がテーブルの一部のうちの第１コピーを含む前記第１部分と、前記第１コピーのうちの第２コピーを含む第２部分とから成るときに、本発明の実施を妨げるものはない。
図１０は、４つのグループｇ１、ｇ２、ｇ３、ｇ４に影響するトランザクションを実行する一例を示し、各グループはトランザクションによって影響を受ける部分の第１コピーおよび第２コピーを含む、２つのノードｎ１、ｎ２を含む。
上記のように、システムは第１システム「ｐ」を構成でき、第２システム「ｓ」によって補足できる。本発明によれば、ロックを解除する前に、トランザクションに従ってかかる第２システム「ｓ」を更新することをリクエストすることが好ましい。
このような更新はワンセーフ伝送および限定されたツーセーフ伝送の双方によって実行できる。選択される方法はそれぞれのトランザクションが必要とする安全レベルに応じて決まる。本発明によれば、トランザクションを管理する属性は第２システムの更新がワンセーフ伝送によって実行されるのか、または限定されたツーセーフ伝送によって実行されるのかのいずれかを示す。
トランザクションを制御するすべての属性がワンセーフ伝送によって第２システム「ｓ」の更新を行うべきと表示した場合、ワンセーフ伝送によって更新を実行し、他方、トランザクションを制御する属性が限定されたツーセーフ伝送によって第２システム「ｓ」と更新すべきと表示した場合、限定されたツーセーフ伝送によって更新を実行する。
図１１は、ワンセーフ伝送による更新の一例を示す。図示されるように、第２システム「ｓ」内の対応するノードｎ１ｓ、ｎ１’ｓへ「コミット」メッセージ「ａｓ」、「ａ’ｓ」を送るトランザクションによって影響を受けるそれぞれの第１ノードｎ１ｐ、ｎ１’ｐによって更新が実行される。次に、この更新は第２システム「ｓ」内のそれぞれの影響を受けたノードｎ１ｓ、ｎ１’ｓからの応答を待つことなく続行する。
図１２は限定されたツーセーフ伝送によってどのように更新を実行するかを示している。図示されるように、トランザクションによって影響を受けるそれぞれの第１ノードｎ１ｐ、ｎ１’ｐは、第２システム「ｓ」内の対応するノードｎ１ｓ、ｎ１’ｓへコミットメッセージ「ａｓ」、「ａ’ｓ」を送る。
第１ノードｎ１ｐ、ｎ１’ｐはトランザクションの一部として第２システム「ｓ」内の影響を受けたノードｎ１ｓ、ｎ１’ｓからの応答を待つ。この応答は対策を実行すること、よってトランザクションに従って第２システム「ｓ」を更新する旨を第１ノードｎ１ｐ、ｎ１’ｐに表示する第１ノードｎ１ｐ、ｎ１’ｐからの「コミット完了」メッセージ「ｂｓ」、「ｂ’ｓ」または対策を実行しない旨、よってトランザクションに従って第２システム「ｓ」を更新しない旨を、第１ノードｎ１ｐ、ｎ１’ｐに表示する、「打ち切り完了」メッセージ「ｂｓ」、「ｂ’ｓ」から成る。
トランザクションに従って第２システム「ｓ」を更新しない旨の表示によって第２システムは再スタートされ、第１システム「ｐ」の正しいコピーを構成する。
第２システムの上記のような更新を限られたツーセーフ伝送と称す。ここで、限定とは第２システム内のノードがトランザクションを停止または打ち切ることを求める権利を有しないことを意味する。
図１１を参照してこれまで説明した第２システムを更新する方法では、第２システム内の影響を受けたノードは自然にトランザクションに従って第２システムを更新するかどうかの表示を受信しない。このことは、かかる表示を他の方法で発生することを妨げるものではない。しかしながらこのことは次に、第２システムの実行不能な更新に対するリクエストがあったときに、第１システム「ｐ」のコピーを正しく構成するように第２システムを再スタートすることを意味する。
従って、ワンセーフ伝送による更新と、限定されたツーセーフ伝送による更新との差は次の点にある。すなわち限定されたツーセーフ伝送の場合では、第２システムを更新したかどうかがすぐに判るが、ワンセーフ伝送では第１システムと第２システムとの間に短時間の間、違いが生じ得る点にある。
トランザクションが異なれば変化も異なる。このうち所定の変化は他の変化よりも誤作動を受けにくい。従って、属性を制御するトランザクションの１つは第２システムを更新する際にワンセーフ伝送によってトランザクションを実行するのか、または限定されたツーセーフ伝送によって実行するのかを判断できる。
移動電話ネットワーク内の加入者に属す個人データの挿入は第２システムを更新する際に限定されたツーセーフ伝送を必要とし得るトランザクションの一例である。この場合、第１システムと第２システムの双方に正しい情報を見いだすことが重要である。
移動電話ネットワーク内の加入者の一時的位置を挿入することは、第２システムを更新する上でワンセーフ伝送で十分となり得るトランザクションの一例である。移動電話ネットワーク内の移動局の位置は常に変化し、従って時間が経過するごとに繰り返し更新されるので、この点に関する第２システム内の正しい情報の重要性は前者のケースほどクリチカルではない。
かかるトランザクションに従い、第２システムを更新しない旨の効果に対する表示が受信されたとき、このことは必ずしも第２システムを再スタートしなければならないことを意味するものではない。その理由は、特定の加入者の地理的位置が変わる次のときに、おそらく第２システムを正しく更新するからである。
第１システム「ｐ」内のトランザクションに従って第２システム「ｓ」を更新することに関するリクエストに応答し、第１システム「ｐ」内の影響を受けたノードから第２システム「ｓ」内の影響を受けたノードに情報が送られ、この第２システム内の影響を受けたノードから論理的トランザクションコーディネータを選択できる。第２システム内のトランザクションコーディネータの選択はこの情報および第２システムに属すノードの瞬間的な負荷によって制御される。図１３は第２システム「ｓ」内の可能な論理的トランザクションコーディネータのマッピングテーブルｍｔから論理的トランザクションコーディネータｌｔｋを選択する、第１システム「ｐ」内のトランザクションコーディネータｌｐから情報「ｉ」を構成できることを示している。このような選択は、マッピングテーブルｍｔから選択できる論理的トランザクションコーディネータ間でトランザクションコーディネータとして働く義務をランダムに分散するように行われる。
マッピングテーブルｍｔ内のそれぞれの論理的トランザクションコーディネータｌｔｋは第２システム内で働く物理的ノードｌｓまたは物理的トランザクションコーディネータｆｔｋへマッピングできる。このマッピングテーブルｍｔは第２システム「ｓ」に属す各ノード内に記憶されるか、または各ノードに対して利用できる。第２システム内のそれぞれのノードがどの論理的トランザクションコーディネータｌｔｋが選択されたかに関する情報「ｉ」を、トランザクションによって影響を受けた第２システム内のそれぞれのノードが受信したとき、これらノードはマッピングテーブルｍｔを介し、第２システム「ｓ」内の同じ物理的トランザクションコーディネータｆｔｋを識別する。
トランザクションコーディネータとして働くのに利用できるノードによってマッピングテーブルｍｔ内のすべての位置が占有されているかどうかを、第２システム内のシステムコーディネータｓｋｓが見るようになっている。従って、所定のノードに大きな負荷がかかっている場合、システムコーディネータｓｋｓはこれらノードがマッピングテーブル内に含まれないように保証する。これによって第２システム「ｓ」内のノードに所定の程度の負荷制御が行われる。
本発明はこれまで記載し、図示した実施例のみに限定されるものでなく、次の請求の範囲に記載した発明の要旨の範囲内で変更を行うことができると理解できよう。
【図１】
0004241940.tif 000002
【図２】
0004241940.tif 000003
【図３】
0004241940.tif 000004
【図４】
0004241940.tif 000005
【図５】
0004241940.tif 000006
【図６】
0004241940.tif 000007
【図７】
0004241940.tif 000008
【図８】
0004241940.tif 000009
【図９】
0004241940.tif 000010
【図１０】
0004241940.tif 000011
【図１１】
0004241940.tif 000012
【図１２】
0004241940.tif 000013
【図１３】
0004241940.tif 000014