(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0005】
上述のようなテーブルのレコードのソートのように、各ノードが他の各ノードとデータを交換しながら分散処理を行う場合、ノード間で正常にデータの転送が行われたかどうかを検証できることが望ましい。また、当該検証は、当該検証のための処理によってパフォーマンスが低化しないよう、できるだけ簡易な手続きによって行うことが望ましい。
【0006】
なお、これまでの多数のノード(コンピュータ)をつないだシステムでは、データの転送の正常性が保証された信頼性の高い通信を行うためには、送信側がデータ送出した後、何らかのタイミングで受信側から送信側に受信確認を送信することが必要であった。
【0007】
ここで、実質上の通信速度は、転送速度(スループット)と、確認応答(レイテンシ)の二つの要素で定まる。そして、スループットは容易に向上できるが、レイテンシの向上は難しく、実質的な通信性能の向上は滞っている。
【0008】
一方、データの転送の処理全体が正しく行われたかどうかを簡易な手続きによって検出することが可能になれば、個々のデータ転送についての確認応答(レイテンシ)を省くことが可能になる。そして、このことによる、実質的な通信性能の向上は大きく、その分、分散処理システムの性能が向上することになる。
【0009】
そこで、本発明は、複数のノードを備え、各ノードが他の各ノードとデータを交換しながら分散処理を行う分散システムにおいて、ノード間で正常にデータの転送が行われたかどうかの検証を簡易な手続きによって実現することを課題とする。
【課題を解決するための手段】
【0010】
前記課題達成のために、本発明は、分散処理を行う分散処理システムを、一つの処理を分割した部分である部分処理を並行して各々実行する複数のノードと、検証部とを含めて構成したものである。ここで、前記各ノードには、前記部分処理を行う部分処理実行手段と、検証データ送信手段と備える。ここで、前記各ノードの部分処理実行手段は、前記部分処理において、他の全てのノードに、当該部分処理において生成したデータを転送すると共に、他の全てのノードの各々から転送されたデータを用いた処理を行うものである。また、前記各ノードの前記検証データ送信手段において、当該ノードの前記部分処理実行手段が、前記部分処理において生成したデータの値と、当該ノードの前記部分処理実行手段が、前記部分処理において前記他の全てのノードの各々から受信したデータの値とに応じた値をとる検証データを作成して前記検証部に送信する。そして、前記検証部は、前記各ノードから受信した検証データの一致の有無を検出する。
【0011】
このような分散処理システムによれば、各ノードにおいて、自ノードで作成し他の各ノードに転送したデータの値と、全ての他の各ノードから転送されたデータの値とに応じた値をとる検証データを作成して検証部に送信し、検証部において、各ノードから受信した検証データの一致/不一致を検出するだけの簡易な手順によって、各ノード間でのデータの転送が正常に行われたかどうかを検証することができる。
【0012】
ここで、このような分散処理システムにおいて、前記検証部は、前記複数のノードのうちの一つのノードに配置するようにしてもよい。
また、以上の分散処理システムは、n(但し、nは2以上の任意の自然数)個の前記ノードをチャネルでリング状に接続したリングを複数有し、各リングに含まれるノードの数は等しく、前記各リングの各ノードは、当該ノードを送信側とするチャネルで、当該ノードを含むリング以外の各リングのノードと、同じリングに含まれる各ノードが、当該ノードを送信側とするチャネルで、他のリングの異なるノードにそれぞれ接続されるように、接続されているものであってもよい。また、この場合には、前記各ノードは、当該ノードの部分処理実行手段が前記部分処理において生成したデータと、当該ノードが含まれるリングの当該リングにおける接続上の順番が当該ノードの前の順番のノードに接続したチャネルから受信した他の任意のノードの前記部分処理実行手段が前記部分処理において生成したデータとを、当該ノードが含まれるリングの当該リングにおける接続上の順番が当該ノードの次の順番のノードに接続するチャネルと、当該ノードを送信側とするチャネルであって当該ノードが含まれるリング以外の他のリングのノードに接続するチャネルに送信するデータ送受動作を行うデータ転送手段を備えたものとしてもよい。ここで、この場合、各ノードの前記データ転送手段のデータ送受動作によって、各ノードについて、当該ノードの部分処理実行手段が前記部分処理において生成したデータの他の全てのノードへのデータの転送が行われる。
【0013】
また、前記課題達成のために、本発明は、分散処理を行う分散処理システムを、一つの処理を分割した部分である部分処理を並行して各々実行する複数のノードを含めて構成し、前記各ノードに、前記部分処理を行う部分処理実行手段と、検証データ送信手段と、検証処理部とを設けたものである。ここで、前記各ノードの部分処理実行手段は、前記部分処理において、他の全てのノードに、当該部分処理において生成したデータを転送すると共に、他の全てのノードの各々から転送されたデータを用いた処理を行う。また、前記各ノードの前記検証データ送信手段は、当該ノードの前記部分処理実行手段が、前記部分処理において生成したデータの値と、当該ノードの前記部分処理実行手段が、前記部分処理において前記他の全てのノードの各々から受信したデータの値とに応じた値をとる検証データを作成して他の所定のノードに転送する。そして、前記各ノードの前記検証処理部は、前記検証データ送信手段において作成した検証データと、他の各ノードから転送された検証データの一致の有無を検出する。
【0014】
このような分散処理システムによれば、ノードにおいて、部分処理において自ノードで作成し他の各ノードに転送したデータの値と、部分処理において全ての他の各ノードから転送されたデータの値とに応じた値をとる検証データを作成して他の所定のノードに転送すると共に、作成した検証データと、他のノードから転送された検証データの一致の有無を検出するだけの簡易な手順によって、各ノード間でのデータの転送が正常に行われたかどうかを検証することができる。
【0015】
ここで、このような分散処理システムは、n(但し、nは2以上の任意の自然数)個の前記ノードをチャネルでリング状に接続したリングを複数有し、各リングに含まれるノードの数は等しく、前記各リングの各ノードは、当該ノードを送信側とするチャネルで、当該ノードを含むリング以外の各リングのノードと、同じリングに含まれる各ノードが、当該ノードを送信側とするチャネルで、他のリングの異なるノードにそれぞれ接続されるように、接続されているものであってもよい。
【0016】
また、この場合には、各ノードの前記検証データ送信手段は、当該ノードが含まれるリングの当該リングにおける接続上の順番が当該ノードの次の順番のノードを、前記作成した検証データを転送する前記他の所定のノードとして、当該ノードが含まれるリングの当該リングにおける接続上の順番が当該ノードの次の順番のノードに接続するチャネルを用いて、当該他の所定のノードに作成した検証データを送信することにより、当該他の所定のノードに作成した検証データを転送すると共に、一つのリングにつき少なくとも一つのノードの前記検証データ送信手段は、さらに、当該ノードを送信側とするチャネルが接続する当該ノードが含まれるリング以外の他のリングのノードも、前記作成した検証データを転送する前記他の所定のノードとして、当該ノードを送信側とするチャネルであって当該ノードが含まれるリング以外の他のリングのノードに接続するチャネルを用いて、当該他の所定のノードとした他のリングのノードに作成した検証データを送信することにより、当該他の所定のノードとした他のリングのノードに作成した検証データを転送するものとしてもよい。
【0017】
または、この場合には、各ノードの前記検証データ送信手段は、当該ノードが含まれるリングの当該リングにおける接続上の順番が当該ノードの次の順番のノードと、当該ノードを送信側とするチャネルが接続する当該ノードが含まれるリング以外の他のリングのノードを、前記作成した検証データを転送する前記他の所定のノードとして、当該ノードが含まれるリングの当該リングにおける接続上の順番が当該ノードの次の順番のノードに接続するチャネルと、当該ノードを送信側とするチャネルであって当該ノードが含まれるリング以外の他のリングのノードに接続するチャネルを用いて、当該他の所定のノードに作成した検証データを送信することにより、当該他の所定のノードに作成した検証データを転送するものとしてもよい。
【0018】
また、この場合には、さらに、前記各ノードを、当該ノードの部分処理実行手段が前記部分処理において生成したデータと、当該ノードが含まれるリングの当該リングにおける接続上の順番が当該ノードの前の順番のノードに接続したチャネルから受信した他の任意のノードの前記部分処理実行手段が前記部分処理において生成したデータとを、当該ノードが含まれるリングの当該リングにおける接続上の順番が当該ノードの次の順番のノードに接続するチャネルと、当該ノードを送信側とするチャネルであって当該ノードが含まれるリング以外の他のリングのノードに接続するチャネルに送信するデータ送受動作を行うデータ転送手段を備えたものとしてもよい。ここで、この各ノードの前記データ転送手段のデータ送受動作によって、各ノードについて、当該ノードの部分処理実行手段が前記部分処理において生成したデータの他の全てのノードへのデータの転送が行われることとなる。
【0019】
ここで、以上のような分散処理システムは、前記各ノードの前記検証データ送信手段は、当該ノードの前記部分処理実行手段において、前記部分処理において生成したデータの値と、当該ノードの前記部分処理実行手段が、前記部分処理において前記他の全てのノードの各々から転送されたデータの値との総和を、検証データとして作成するように構成してもよい。
【0020】
また、以上の分散処理システムにおいて、前記処理を、複数のフィールドより形成されるレコードを複数有するテーブルのレコードを特定のフィールドをキーとしてソートする処理とし、各ノードの前記部分処理実行手段が実行する前記部分処理は、前記テーブルを分割した複数の部分テーブルのうちの当該ノードに割り当てられた部分テーブルのレコードを、前記特定のフィールドをキーとしてソートする処理としてもよい。この場合、前記各ノードの部分処理実行手段は、前記部分処理において、自ノードに割り当てられた部分テーブルの各レコードの、前記テーブル中の順番と当該レコードの前記特定のフィールドの値の識別番号とを含めて前記データを作成して、他の全てのノードに転送すると共に、当該データと他の全てのノードの各々から転送されたデータを用いて、自ノードに割り当てられた部分テーブルの各レコードのソート後の前記テーブル中の順番を算定し、前記各ノードの前記検証データ送信手段は、当該ノードの前記部分処理実行手段が、前記部分処理において生成したデータに含まれる前記順番と、当該ノードの前記部分処理実行手段が、前記部分処理において前記他の全てのノードの各々から転送されたデータに含まれる前記順番との総和と、当該ノードの前記部分処理実行手段が、前記部分処理において生成したデータに含まれる前記識別番号と、当該ノードの前記部分処理実行手段が、前記部分処理において前記他の全てのノードの各々から転送されたデータに含まれる前記識別番号との総和とを前記検証データとして作成するようにしてもよい。
【発明の効果】
【0021】
以上のように、本発明によれば、複数のノードを備え、各ノードが他の各ノードとデータを交換しながら分散処理を行う分散システムにおいて、ノード間で正常にデータの転送が行われたかどうかの検証を簡易な手続きによって行うことができる。
【発明を実施するための形態】
【0023】
以下、本発明に係る分散システムの実施形態について説明する。
図1に、本実施形態に係る分散システムの構成を示す。
図示するように、分散システムは、一つのコントローラ(CONT)と、複数のリング (Ri)を有し、各リングiは、それぞれ同数のノード(Nij)を含んでいる。なお、Ri は、i 番目のリングを表しており、Nijは、i番目のリングのj番目のノードを表している。
【0024】
ここで、
図1aは、リング数が2、リング内のノード数が3の場合を示しており、
図1bは、リング数が3、リング内のノード数が4の場合を示している。
そして、図示するように、各リング中において、当該リングに含まれる各ノードをチャネルでリング状に順次接続したリング型のネットワークが形成されている。
また、i番目のリングのj番目のノードは、i番目のリング以外の各リングのj番目のノードとそれぞれ双方向のチャネルで接続されている。
一方、コントローラ(CONT)は、各リング (Ri)の各ノード(Nij)と直接接続されている。
コントローラ(CONT)と各ノード(Nij)との接続は、ノード(Nij)毎に設けたチャネルで、ノード(Nij)とコントローラ(CONT)とをそれぞれ接続するようにしてもよいし、バス型のチャネルでコントローラ(CONT)と各ノード(Nij)を接続するようにしてもよい。
【0025】
次に、
図2に各ノードの構成を示す。
図示するように、ノードは、ストレージ1とプロセッサ2を備えており、プロセッサ2はストレージ1を用いて他のノードとは独立にデータ処理を行うことができる。
また、ノードは、他のノードとの間のデータ転送のために、転送制御装置3と、当該ノードに接続しているチャネルを用いたデータ伝送を行う、チャネル毎に設けられたチャネルインタフェース4とを備えている。ただし、転送制御装置3は、プロセッサ2がソフトウエアの実行による実現する機能として、ノードに備えるようにしてもよい。
【0026】
ここで、転送制御装置3は、当該ノードに接続している各チャネルとプロセッサ2との各々間のデータの中継を制御する。
そして、転送制御装置3は、
図3に示すように、受信バッファ31、送信バッファ32、重複転送抑止部CHK32を備えている。
そして、受信バッファ31は、プロセッサ2が他のノードに送信するデータを格納するバッファP(r)、自ノードと同じリングに含まれている当該リング上の順番が一つ前のノードからチャネルインタフェース4が受信したデータが格納されるバッファRS(r)を備えている。
【0027】
ここで、リング上の順番とは、リングに沿ってチャネルのデータの転送方向に進んだときに通るノードの順番である。
また、受信バッファ31は、自ノードが含まれるリングと異なる他のリングのリング中の順番が同じノードからチャネルインタフェース4が受信したデータが格納される、当該他のリングの数と同数のバッファRi(r)を備えている。
【0028】
また、送信バッファ32は、プロセッサ2に送信するデータが格納されるバッファP(s)、自ノードと同じリングに含まれている当該リング上の順番が一つ後のノードにチャネルインタフェース4を介して送信するデータを格納するバッファRS(s)を備えている。また、送信バッファ32は、自ノードが含まれるリングと異なる他のリングのリング中の順番が同じノードにチャネルインタフェース4を介して送信するデータを格納する、当該他のリングの数と同数のバッファRi(s)を備えている。
【0029】
そして、転送制御装置3は、バッファ間の転送を次のように行う。
すなわち、受信バッファ31のバッファP(r)にプロセッサ2によって格納されたデータは、送信バッファ32のバッファRS(s)と各バッファRi(s)に転送し、自ノードと同じリングに含まれている当該リング上の順番が一つ後のノードと、自ノードが含まれるリングと異なる他の各リングのリング中の順番が同じノードの各々に送信する。
【0030】
また、自ノードと同じリングに含まれている当該リング上の順番が一つ前のノードから受信し、受信バッファ31のバッファRS(r)に格納されたデータは、重複転送抑止部CHK32に転送する。重複転送抑止部CHK32は、自ノードのプロセッサ2が発信元のデータであるかどうかを調べ、同じデータでない場合のみ、当該データを出力し、自ノードのプロセッサ2が発信元のデータであれば当該データを破棄する。
【0031】
そして、重複転送抑止部CHK32から出力されたデータは、送信バッファ32の送信バッファ32のバッファP(s)とバッファRS(s)と各バッファRi(s)に転送され、当該データを、プロセッサ2と、自ノードと同じリングに含まれている当該リング上の順番が一つ後のノードと、自ノードが含まれるリングと異なる他の各リングのリング中の順番が同じノードの各々に送信される。
【0032】
また、自ノードが含まれるリングと異なる他の各リングのリング中の順番が同じノードの各々から受信し各Ri(r)に格納されたデータは、送信バッファ32のバッファP(s)に転送し、プロセッサ2に送信する。
【0033】
さて、プロセッサ2は、このようにして転送制御装置3から送信されたデータ、すなわち、自ノードと同じリングに含まれている当該リング上の順番が一つ前のノードから受信したデータのうちの当該プロセッサ2が発信元でないデータと、当該ノードが含まれるリングと異なる他の各リングのリング中の順番が同じノードの各々から受信したデータを受信し、その処理を行う。
【0034】
以下、このような転送制御装置3の動作によって実現されるノード間のデータ転送動作について、リング数が2、リング内のノード数が3の分散システムを例にとり説明する。
いま、
図4aに示すようにリングR1のノードN11のプロセッサ2から発信されたデータは、図示するように、ノードN11からノードN12とノードN21に転送され、ノードN12とノードノードN21のプロセッサ2に送られる。また、ノードN12に送られたデータは、ノードN12によって、ノードN13とノードN22に中継され、ノードN13とノードN22のプロセッサ2に送られる。また、ノードN13に送られたデータは、ノードN13によって、ノードN23に中継され、ノードN23のプロセッサ2に送られる。
結果、リングR1のノードN11のプロセッサ2が発信したデータは、順次ノードを一つずつ上述のように伝搬し、自ノード以外の全てのノードのプロセッサ2に転送される。
【0035】
同様に、
図4bに示すように、リングR1のノードN12のプロセッサ2から発信されたデータは、図示するように、ノードN12からノードN13とノードN22に転送され、ノードN13とノードノードN22のプロセッサ2に送られる。また、ノードN13に送られたデータは、ノードN13によってノードN11とノードN23に中継され、ノードN11とノードN23のプロセッサ2に送られる。また、ノードN11に送られたデータは、ノードN11によって、ノードN21に中継され、ノードN21のプロセッサ2に送られる。
結果、リングR1のノードN12のプロセッサ2が発信したデータは、順次ノードを一つずつ上述のように伝搬し、自ノード以外の全てのノードのプロセッサ2に転送される。
【0036】
以下、同様に、任意のリングの任意のノードのプロセッサ2が発信したデータは、自ノード以外の全てのノードのプロセッサ2に転送される。
したがって、各リングの各ノード(Nij)のプロセッサ2が、それぞれ、データを送信すると、各リングの各ノードのプロセッサ2には、他の全てのノードのプロセッサ2が送信したデータの全てが転送されることになる。
【0037】
なお、以上では、他のノードとの間のデータ転送に関する転送制御装置3の構成、動作について説明したが、転送制御装置3は、この他に、コントローラ(CONT)とデータを送受するための構成を備えており、プロセッサ2とコントローラ(CONT)との間でデータを転送する動作も行う。
【0038】
以下、このような分散処理システムにおいて行う、RDB(Relational Database)のテーブルのソート処理について説明する。
ここで、ソート処理とは、
図5aに示すような複数のフィールド(図では、GenderとAgeとHeightとWeight)を持つレコードを行とするテーブルのレコードを、キーとしたフィールドの値の順に並び替える処理である。
【0039】
ここで、このテーブルの各レコードにはテーブル中の当該レコードの(図では、0から9の)順番を示すグローバル順番値GOrdが付与されている。また、
図5bに示すように、各フィールド毎に、当該フィールドに出現する各値に、値を昇順にソートした順番を表すグローバル値順番値GVOrdが付与されている。
【0040】
さて、ソート処理では、テーブルを複数のレコードを単位として複数の部分テーブルに分割し、各部分テーブルを異なるノードに割り当て、各ノードに、割り当てた部分テーブルについてのソートを行う処理である部分ソート処理を行わせることにより、ソート処理を分散処理する。
【0041】
以下では、一例として、
図5aに示すように、テーブルを、PMM-0、PMM-1、PMM-2、PMM-3の4つの部分テーブルに分割し、ノード#0、ノード#1、ノード#2、ノード#3の、4つのノードにそれぞれ割り当てて、ソート処理を行う場合について説明する。
【0042】
この場合、各ノードのストレージ1には、
図6aに示す当該ノードに割り当てられた部分テーブルを表すデータとして、
図6bに示す部分テーブルデータが格納されている。
そして、各部分テーブルデータは、順番値対応リストOrdCLとインデックスセットより構成される。
順番値対応リストOrdCLは、部分テーブルデータが表す部分テーブルの各レコードについて、レコードのグローバル順番値GOrdと、レコードの部分テーブル内での順番を表す部分テーブル内順番値Ordを、部分テーブル内のレコードの順番に従った順番で配列したリストである。
【0043】
次に、インデックスセットは、テーブルのレコードのフィールド毎に対応して設けられたインデックスより構成される。
そして、各インデックスは、VNoL、VL、GVordLよりなる。
VLは、部分テーブルデータが表す部分テーブルの対応するフィールドに出現する値を昇順にソートして各エントリに登録したリストである。
また、GVordLは、VLに登録された値のグローバル値順番値GVOrdを、当該値が登録されているVLのエントリと同じ順位のエントリに登録したリストである。
次に、VNoLは、部分テーブルデータが表す部分テーブルのレコード数と同数のエントリよりなるリストであり、VNoLのn番目のエントリには、対応する部分テーブルのレコード番号nのレコードの対応するフィールドの値が登録されているVLのエントリのVL中の順位を示す値が登録される。
【0044】
さて、このようなインデックスによれば、部分テーブルデータが表す部分テーブルの部分テーブル内順番値Ordより、そのレコードの対応するフィールドの値を、Ordと同じ順位のVNoLのエントリが示す順位のVLのエントリの値として求めることができる。また、その値の、グローバル値順番値GVordを、Ordと同じ順位のGVordLのエントリの値として求めることができる。
【0045】
したがって、テーブルのレコードのフィールド毎に対応して設けられたインデックスよりなるインデックスセットによれば、部分テーブルの各レコードの各フィールドの値と、レコードの各フィールドの値のグローバル値順番値GVordを求めることができる。また、OrdCLより、部分テーブルの各レコードのグローバル順番値GOrdを求めることができる。
【0046】
次に、各ノードにおいて行う、当該ノードに割り当てられた部分テーブルについてのソートを行う部分ソート処理について説明する。
ここでは、一例として、フィールド“Age”をキーに昇順のソート処理を行う場合について説明する。
この場合、各ノードでは、フィールド“Age”のインデックスと、順番値対応リストOrdCLを用いて、ワーキングリストWLを作成する。
図7に示すように、ワーキングリストWLは、部分テーブルの各レコードのフィールド“Age”の値のグローバル値順番値GVordと、当該レコードのグローバル順番値Gordと、当該レコードの部分テーブル内順番値Ordのセットを、グローバル値順番値GVordの昇順、すなわち、フィールド“Age”の値の昇順に登録したリストである。ここで、以下では、便宜上、ワーキングリストWLに登録したソート前の、グローバル順番値Gordと、部分テーブル内順番値Ordを、ダッシュを付与して、Gord'、Ord'として示す。
【0047】
そして、ワーキングリストWLに登録した(GVord、Gord')の各セットの各々をデータとするデータグループDG#nを作成する。ここで、DG#nは、ノード#nで作成されたデータグループであることを表す。
【0048】
そして、作成したデータグループのデータを、上述のように、転送制御装置3を介して、自ノード以外の他の全てのノードのプロセッサ2に転送する。
次に、各ノードは、自ノードで作成したデータグループDGと、他のノードから受信した各データグループDGについてカウント処理を行う。
ここで、この各ノードが行うカウント処理をノード#1が行うカウント処理を例にとり説明する。
まず、データグループDG#1に含まれるデータ(GVord、Gord')の値の大小は、GVordが大きいほど大きく、GVordが等しい場合には、Gord'が大きいほど大きいものとする。
そして、ノード#1では、
図8aに示すように、自ノード#1で作成したデータグループDG#1に含まれるデータ(0、3)のみを含む値の範囲と、(5、4)のみを含む値の範囲とに各々対応するエントリと、DG#1に含まれるデータ(0、3)のみを含む値の範囲と、(5、4)のみを含む値の範囲で区切られる値の範囲、すなわち、範囲“(0、3)未満”、範囲“(0、3)超(5、4)未満”、範囲“(5、4)超”の各々に対応するエントリを、対応する値の範囲の小さい順に配列したカウントリストCNT#1を作成する。
【0049】
そして、カウントリストCNT#1の各エントリに、当該エントリに対応する値の範囲内の値を持つ、データグループDG#1内のデータの数を登録する。
また、
図8b1、b2、b3に示すように、ノード#1は、他のノード#0、#2、#3から受信した各データグループDG#0、DG#2、DG#3についても同様の処理を行う。
すなわち、他のノード#nからDG#nを受信したならば、自ノード#1で作成したデータグループDG#1に含まれるデータ(0、3)のみを含む値の範囲、(5、4)のみを含む値の範囲に各々対応するエントリと、範囲“(0、3)未満”、範囲“(0、3)超(5、4)未満”、範囲“(5、4)超”の各々に対応するエントリを、対応する値の範囲の小さい順に配列したカウントリストCNT#nを作成する。
【0050】
そして、カウントリストCNT#nの各エントリに、当該エントリに対応する値の範囲内の値を持つ、データグループDG#n内のデータの数を登録する。
なお、自ノードで作成したデータグループには、当該データグループに含まれるデータ以外のデータは含まれないので、自ノードで作成したデータグループDGについて作成するカウントリストには、自ノードで作成したデータグループDGに含まれるデータのみを含む値の範囲に対応するエントリ以外のエントリは、実際には作成しなくてもよい。また、他のノードから受信したデータグループDGには、自ノードで作成したデータグループDGに含まれるデータと同じデータは含まれていないので、他のノードから受信したデータグループDGについて作成するカウントリストには、自ノードで作成したデータグループDGに含まれるデータのみを含む値の範囲に対応するエントリは実際には作成しなくてもよい。
【0051】
そして、他の全てのノードからデータグループDG#nを受信終え、自ノードで作成したデータグループDG#1、及び、他の全てのノードから受信した各データグループDG#0、DG#2、DG#3について以上のカウント処理が終了し、カウントリストCNT#1、CNT#0、CNT#2、CNT#3を作成したならば、次に、
図8cに示すように、各値の範囲に対応するエントリ毎に、各カウントリストCNT#1、CNT#0、CNT#2、CNT#3の値の総和を求め、総和リストSUMCNTに登録する。すなわち、総和リストSUMCNTは、自ノード#1で作成したデータグループDG#1に含まれるデータ(0、3)のみを含む値の範囲と、(5、4)のみを含む値の範囲とに各々対応するエントリと、範囲“(0、3)未満”、範囲“(0、3)超(5、4)未満”、範囲“(5、4)超”の各々に対応するエントリを、対応する値の範囲の小さい順に配列したリストであり、総和リストSUMCNTの各エントリには、そのエントリが対応する範囲と同じ範囲に対応する、カウントリストCNT#1、CNT#0、CNT#2、CNT#3のエントリに登録されている値の総和が登録される。
【0052】
そして、次に、
図8dに示すように、総和リストSUMCNT の各エントリの値を、当該エントリと当該エントリより小さい値の範囲に対応する各エントリとに登録されている値の和に置換した積算リストCUMを作成する。
【0053】
そして、
図8eに示すように、ワーキングリストWLに登録されているGVord、Gord'、ord'の各セットのGord'を、当該セットの(GVord、Gord')の値のみを含む範囲に対応する、積算リストCUMのエントリに登録されている値から1差し引いた値に置換する。
【0054】
なお、ここで、1差し引くのは、GOrdを0から開始する値としているため、k番目のレコードのGOrdがk-1となるためである。
そして、
図8fに示すように、部分テーブルデータの順番値対応リストOrdCLをクリアし、ワーキングリストWLの各順位のエントリに登録されているGord'の値を、当該エントリと同じ順位の順番値対応リストOrdCLのGordのエントリに登録し、ワーキングリストWLの各順位のエントリに登録されているord'の値を、当該エントリと同じ順位の順番値対応リストOrdCLのordのエントリに登録する。
【0055】
さて、以上の処理を各ノードが行うことにより、各ノードの部分テーブルデータは、
図9bに示すように更新される。
すなわち、
図9bに示すように、各部分テーブルデータにおいて順番値対応リストOrdCLが更新され、部分テーブルの各レコードに対応するテーブルのレコードのグローバル順番値GOrdは、
図9aに示すフィールド“Age”をキーとしてレコードを昇順にソートしたテーブルにおける順番に一致するように振り直される。また、各部分テーブルデータにおいて、順番値対応リストOrdCLにおけるグローバル順番値GOrdと部分テーブル内順番値Ordの対応の登録順もグローバル順番値GOrdの順に更新される。したがって、各部分テーブルデータの集合は、全体として
図9aに示すフィールド“Age”をキーとしてレコードを昇順にソートしたテーブルを表すものとなる。
【0056】
さて、各ノードは、以上のようにして順番値対応リストOrdCLを更新したならば、ノード#1について
図8gに示すように、自ノードで作成したデータグループDGに含まれるデータと、他の各ノードから受信したデータグループDGに含まれるデータとより検証データを作成し、コントローラ(CONT)に送信し、部分ソート処理を終了する。
【0057】
ここで、検証データは、自ノードで作成したデータグループDGに含まれるデータと、他の各ノードから受信したデータグループDGに含まれるデータのGVordの総和と、Gord'の総和を算出し、算出したGVord、Gord'の総和(ΣGVord、ΣGord')を検証データとすることにより作成する。
【0058】
すなわち、ノード#1であれば、
図8に示したように、自ノードで作成したデータグループDG#1に含まれるデータ(GVord、Gord')は、(0,3)と(5,4)、ノード#0から受信したデータグループDG#0に含まれるデータ(GVord、Gord')は、(1,0)と(3,1)と(4.2)、ノード#2から受信したデータグループDG#0に含まれるデータ(GVord、Gord')は、(0,6)と(2,5)と(6.7)、ノード#3から受信したデータグループDG#0に含まれるデータ(GVord、Gord')は、(1,9)と(4,8)となるので、(ΣGVord、ΣGord')=(0+5+1+3+4+0+2+6+1+4、3+4+0+1+2+6+5+7+9+8)=(26、45)を検証データとする。
【0059】
さて、ここで、各ノードにおいて、このようにして作成される検証データは、全てのノードの各々で作成されたデータグループDGに含まれるデータ(GVord、Gord')の要素GVord、Gord'毎の総和(ΣGVord、ΣGord')であるので、各ノードのデータグループDGの転送が各ノード間で正常に行われた場合は全て同じ値となる。
【0060】
以上、分散処理システムにおいて行うソート処理について説明した。
以下、以上のようなソート処理の実行を制御するコントローラ(CONT)の動作について説明する。
図10に、コントローラ(CONT)が行うソート実行制御処理の手順を示す。
図示するように、分散処理システムにおいてソート処理を実行する場合、コントローラ(CONT)は上述した部分ソート処理の実行要求を、ソートのキーとするフィールドの指定やソートの方向(昇順、降順)の指定を含めて各ノードに発行する(ステップ1002)。
【0061】
部分ソート処理の実行要求を受けた各ノードのプロセッサ2は、上述した部分ソート処理を、指定されたフィールドをソートのキーとして、指定された方向をソート方向として実行してテーブルのソートを行うと共に、検証データをコントローラ(CONT)に送信する。
【0062】
そして、コントローラ(CONT)は、ノードからの検証データの受信を待ち(ステップ1004)、検証データを受信したならば、受信した検証データは、先行して他のノードから受信した検証データと不一致であるかどうかを調べる(ステップ1006)。
【0063】
ただし、ステップ1006では、ノードから最初に受信した検証データについては、先行して他のノードから受信した検証データと不一致でないと判定する。
ここで、上述のように各ノードから受信する検証データは、各ノードのデータグループDGの転送が各ノード間で正常に行われた場合は一致している。よって、ステップ1006で、検証データの不一致を検出することにより、各ノードのデータグループDGの各ノード間の転送に発生したエラーを検出することができる。
【0064】
そして、不一致でなければ、全てのノードから検証データを受信したかどうかを調べ(ステップ1008)、全てのノードから検証データを受信していなければ、ステップ1004に戻って、次の検証データの受信を待つ。
【0065】
また、全てのノードから検証データを受信している場合には(ステップ1008)、ソート実行制御処理を終了する。
一方、ステップ1006において、受信した検証データが先行して他のノードから受信した検証データと不一致であると判定された場合には、ソート処理が失敗したものと認識し、オペレータに対するエラー通知、ソート処理実行開始前への状態の復帰制御、ソート処理の再実行などの所定の対エラー処理を実行し(ステップ1010)、ソート実行制御処理を終了する。
【0066】
以上、本発明の実施形態について説明した。
以上のように、本実施形態によれば、各ノードにおいて、自ノードで作成し他の各ノードに転送したデータと、他の各ノードから転送されたデータとのデータ要素(GVordとGord')毎の総和を検証データとして生成してコントローラ(CONT)に送信し、コントローラ(CONT)において、各ノードから受信した検証データの一致/不一致を検出するだけの簡易な手順によって、各ノード間でのデータの転送が正常に行われたかどうかを検証することができる。
【0067】
ところで、以上の実施形態では、各ノードにおいて、自ノードで作成したデータグループDGに含まれるデータと他の各ノードから受信したデータグループDGに含まれるデータのGVordの総和と、Gord'の総和(ΣGVord、ΣGord')を検証データとしたが、自ノードで作成したデータグループDGに含まれるデータと他の各ノードから受信したデータグループDGに含まれるデータの値に依存して異なる値をとるものであれば、検証データとしては他の値を用いるようにしてよい。
【0068】
すなわち、たとえば、コントローラ(CONT)において、より簡易的に検証したい場合には、GVordの総和と、Gord'の総和の和ΣGVord+ΣGord'を検証データとしたり、Gord' の総和とGVordの総和との差ΣGord'-ΣGVordを検証データとするようにしてもよい。
【0069】
また、以上では、テーブルのソート処理を分散処理で行う場合について示したが、以上の実施形態で示した、各ノードにおいて、他の各ノードから受信したデータの値に依存して異なる値をとる検証データを作成してコントローラ(CONT)に送信し、コントローラ(CONT)において各ノードから受信した検証データの一致/不一致から各ノード間でのデータの転送が正常に行われたかどうかを検証する技術は、任意の処理を各ノードでデータを交換しながら分散処理する場合について同様に適用することができる。
【0070】
なお、以上の実施形態は、リング中のノード(Nij)を、コントローラ(CONT)としても機能させるように構成してもよい。
また、以上の実施形態では、各ノード(Nij)が検証データをコントローラ(CONT)に送信し、コントローラ(CONT)において各ノードから受信した検証データの一致/不一致から各ノード間でのデータの転送が正常に行われたかどうかを検証するようにしたが、当該検証はノード(Nij)において行うようにしてもよい。
【0071】
すなわち、この場合には、各ノード(Nij)のプロセッサ2は、部分ソート処理において検証データを作成したならば、転送制御装置3を介して、作成した検証データ(Cmn)を、自ノードと同じリングに含まれている当該リング上の順番が一つ後のノードと、自ノードが含まれるリングと異なる他の各リングのリング中の順番が同じノードの各々に送信する。
【0072】
すなわち、
図11aに示したリング数が3、リング内のノード数が4の分散処理システムの場合であれば、たとえば、ノードN12は、ノードN13とノードN22とノードN32に、ノードN12で作成した検証データC12を転送し、ノードN23は、ノードN24とノードN13とノードN33に、ノードN13で作成した検証データC23を転送する。
【0073】
また、各ノード(Nij)の転送制御装置3において、他のノードから受信した検証データを、自ノードのプロセッサ2にのみ転送し、他のノードには転送しないようにする。これは、たとえば、検証データに検証データであることを表す識別子を付加して送信し、各ノードの転送制御装置3において、バッファRS(r)やバッファRi(r)に格納された、検証データであることを表す識別子が付加されているデータは、バッファP(s)にのみ転送し、バッファRS(s)やバッファRi(s)には転送しないように転送制御装置3を構成すること等により実現できる。
【0074】
そして、各ノード(Nij)のプロセッサ2において、自ノードの部分ソート処理において作成した検証データと、他のノードから受信した検証データの一致/不一致を検出し、不一致を検出したならば、コントローラ(CONT)にエラー発生を通知する検証処理を行うようにする。
【0075】
すなわち、
図11aに示したリング数が3、リング内のノード数が4の分散処理システムの場合であれば、たとえば、ノードN12は、ノードN11から検証データC11が転送されたならば、ノードN12で作成した検証データC12と転送された検証データC11との一致/不一致を検出し、不一致を検出したならば、コントローラ(CONT)にエラー発生を通知する。また、ノードN12は、ノードN22から検証データC22が転送されたならば、ノードN12で作成した検証データC12と転送された検証データC22との一致/不一致を検出し、不一致を検出したならば、コントローラ(CONT)にエラー発生を通知する。また、ノードN12は、ノードN32から検証データC32が転送されたならば、ノードN12で作成した検証データC12と転送された検証データC32との一致/不一致を検出し、不一致を検出したならば、コントローラ(CONT)にエラー発生を通知する。
【0076】
また、同様に、ノードN23は、ノードN22から検証データC22が転送されたならば、ノードN23で作成した検証データC23と転送された検証データC22との一致/不一致を検出し、不一致を検出したならば、コントローラ(CONT)にエラー発生を通知する。また、ノードN23は、ノードN13から検証データC13が転送されたならば、ノードN23で作成した検証データC23と転送された検証データC13との一致/不一致を検出し、不一致を検出したならば、コントローラ(CONT)にエラー発生を通知する。また、ノードN23は、ノードN33から検証データC33が転送されたならば、ノードN23で作成した検証データC23と転送された検証データC33との一致/不一致を検出し、不一致を検出したならば、コントローラ(CONT)にエラー発生を通知する。
【0077】
このように、各ノードにおいて検証処理を行うことにより、各ノードで作成された検証データが一つでも一致していない場合には、必ずコントローラ(CONT)に、いずれかのノードからエラー発生が通知されるようになる。
【0078】
なお、以上では、各ノード(Nij)において、作成した検証データ(Cmn)を、
図11aに示すように、自ノードと同じリングに含まれている当該リング上の順番が一つ後のノードと、自ノードが含まれるリングと異なる他の各リングのリング中の順番が同じノードの各々に送信するようにしたが、作成した検証データの自ノードが含まれるリングと異なる他の各リングのリング中の順番が同じノードへの転送は、たとえば、
図11bに示すように、一つのリングにつき、一つのノードが行うようにしてもよい。このようにしても、各ノードで作成された検証データが一つでも一致していない場合には、必ずコントローラ(CONT)に、いずれかのノードからエラー発生が通知されるようになる。なお、この、作成した検証データの自ノードが含まれるリングと異なる他の各リングのリング中の順番が同じノードへの転送を行う一つのリングにつき一つのノードは、任意のノードであってよい。また、一つのリングにつき任意の複数のノードが、作成した検証データの自ノードが含まれるリングと異なる他の各リングのリング中の順番が同じノードへの転送を行うようにしてもよい。
【0079】
そして、コントローラ(CONT)において、いずれかのノードからエラー発生を通知されたならば、ソート処理が失敗したものと認識し、オペレータに対するエラー通知、ソート処理実行開始前への状態の復帰制御、ソート処理の再実行などの所定の対エラー処理を実行するようにする。
【0080】
このようにすることにより、検証データの検証処理の負荷を各ノードに分散し、コントローラ(CONT)への負荷の集中を軽減することができる。