(57)【特許請求の範囲】
【請求項１】
ソート処理システムであって、
複数の入力ノードと、
一つの出力ノードと、
前記各入力ノードと前記出力ノードとの間にそれぞれ共用外部記憶装置とを備え、
前記各入力ノードと前記出力ノードは第一の通信路によって接続され、
前記各入力ノードと前記共用外部記憶装置、及び、前記出力ノードと前記共用外部記憶装置は第二の通信路によって接続され、
前記入力ノードは、
第一のバッファと、
前記第一のバッファにソート対象データを読み込む手段と、
前記第一のバッファ内のデータに対して、第一のソート規則に従いソートを行う手段と、
ソートの結果をソート列として前記共用外部記憶装置に格納する手段とを有し、
前記出力ノードは、
第二のバッファと、
前記共用外部記憶装置に格納された前記ソート列を前記第二のバッファに読み込む手段と、
前記ソート列に対し、第二のソート規則に基づきマージを行う手段とを有することを特徴とするソート処理システム。
【請求項２】
請求項1に記載のソート処理システムであって、
前記複数の各入力ノードは、前記第一の通信路を介して、前記出力ノードにマージ指示を送信し、
前記出力ノードは、前記第二の通信路を介して、前記共用外部記憶装置から前記ソート列を受信することを特徴とするソート処理システム。
【請求項３】
請求項1に記載のソート処理システムであって、
前記第一の通信路は、前記複数の入力ノードと前記出力ノードを接続する通信路であり、
前記第二の通信路は、前記共用外部記憶装置と前記出力ノードを一対一で接続する通信路であることを特徴とするソート処理システム。
【請求項４】
請求項３に記載のソート処理システムであって、
前記第一の通信路は、ネットワークであり、
前記第二の通信路は、I/Oバスであることを特徴とするソート処理システム。
【請求項５】
ソート処理システムであって、
複数の入力ノードと、
複数の出力ノードと、
前記各入力ノードと前記各出力ノードとの間にそれぞれ共用外部記憶装置とを備え、
前記各入力ノードと前記各出力ノードは第一の通信路によって接続され、
前記各入力ノードと前記共用外部記憶装置、及び、前記各出力ノードと前記共用外部記憶装置は第二の通信路によって接続され、
前記入力ノードは、
第一のバッファと、
前記第一のバッファにソート対象データを読み込む手段と、
前記第一のバッファ内のデータに対し、所定の分配規則に従った分類をする手段と、
前記分類をする手段によって分類された前記第一のバッファ内のデータに対し、第一のソート規則に従いソートを行う手段と、
ソートの結果を、ソート列として前記分類に基づき前記共用外部記憶装置に格納する手段とを有し、
前記出力ノードは、
第二のバッファと、
前記共用外部記憶装置に格納された前記ソート列を第二のバッファに読み込む手段と、
前記ソート列に対し、第二のソート規則に基づきマージを行う手段とを有することを特徴とするソート処理システム。
【請求項６】
ソート処理システムであって、
複数のノードと、
前記複数のノードの各ノードに対して設けられた専用外部記憶装置と、
前記複数のノードの各ノード間にそれぞれ設けられた共用外部記憶装置とを備え、
前記複数の各ノード間は第一の通信路によって接続され、
前記複数の各ノードと前記共用外部記憶装置、及び、前記複数の各ノードと前記専用外部記憶装置は第二の通信路によって接続され、
前記複数のノードの少なくとも一つのノードは、
第一のバッファと、
前記第一のバッファにソート対象データを読み込む手段と、
前記第一のバッファ内のデータに対し、第一のソート規則に従いソートを行う手段と、
ソートの結果をソート列として、前記共用外部記憶装置または前記専用外部記憶装置に格納する手段と、
第二のバッファと、
前記共用外部記憶装置または前記専用外部記憶装置に格納された前記ソート列を第二のバッファに読み込む手段と、
前記ソート列に対し、第二のソート規則に基づきマージを行う手段とを有し、
前記共用外部記憶装置は、
接続される二つのノードのうち、第一のノードから第二のノードに送信するデータを格納する第一の格納領域と、前記第二のノードから前記第一のノードに送信するデータを格納する第二の格納領域を有することを特徴とするソート処理システム。
【請求項７】
ソート処理システムであって、
複数のノードと、
前記複数のノードの各ノードに対して設けられた専用外部記憶装置と、
前記複数のノードの各ノード間にそれぞれ設けられた共用外部記憶装置とを備え、
前記複数の各ノード間は第一の通信路によって接続され、
前記複数の各ノードと前記共用外部記憶装置、及び、前記複数の各ノードと前記専用外部記憶装置は第二の通信路によって接続され、
前記複数のノードの少なくとも一つのノードは、
第一のバッファと、
前記第一のバッファにソート対象データを読み込む手段と、
前記第一のバッファ内のデータに対し、所定の分配規則に従った分類をする手段と、
前記分類をする手段によって分類された前記第一のバッファ内のデータに対し、第一のソート規則に従いソートを行う手段と、
ソートの結果を、ソート列として前記分類に基づき前記共用外部記憶装置または前記専用外部記憶装置に格納する手段と、
第二のバッファと、
前記共用外部記憶装置または前記専用外部記憶装置に格納された前記ソート列を第二のバッファに読み込む手段と、
前記ソート列に対し、第二のソート規則に基づきマージを行う手段とを有することを特徴とするソート処理システム。
【請求項８】
請求項６または７の何れか一項に記載のソート処理システムであって、
前記第一のバッファと前記第二のバッファは、同一のバッファであることを特徴とするソート処理システム。
【請求項９】
請求項１、５、６、または７の何れか一項に記載のソート処理システムであって、
前記第一のソート規則または前記第二のソート規則は、
前記ソート対象データに含まれる複数のレコードが有するキーに基づき、前記キーを比較して前記複数のレコードが昇順または降順に並べ替えられるように規定された規則であることを特徴とするソート処理システム。
【請求項１０】
請求項９に記載のソート処理システムであって、
前記キーには優先順位が指定され、
前記第一のソート規則または前記第二のソート規則は、
優先順位の高い前記キーの順に、前記複数のレコードが並べ替えられるように規定された規則であることを特徴とするソート処理システム。
【請求項１１】
請求項５または７の何れか一項に記載のソート処理システムであって、
前記所定の分配規則は、
前記ソート対象データに含まれる複数のレコードが有するキーに基づき、前記複数のレコードのそれぞれが出力される前記ノードが規定される規則であることを特徴とするソート処理システム。
【請求項１２】
請求項１、５、６、または７の何れか一項に記載のソート処理システムであって、
前記第一のソート規則と前記第二のソート規則は、同一の規則であることを特徴とするソート処理システム。
【請求項１３】
複数の入力ノードと、
一つの出力ノードと、
前記各入力ノードと前記出力ノードとの間にそれぞれ共用外部記憶装置とを備えたソート処理システムにおけるソート処理方法であって、
当該ソート処理システムは、
前記各入力ノードと前記出力ノードを接続する第一の通信路と、
前記各入力ノードと前記共用外部記憶装置、及び、前記出力ノードと前記共用外部記憶装置を接続する第二の通信路とを有し、
前記入力ノードは、ソート対象データを読み込み、第一のソート規則に基づいてソートを行い、
ソートの結果をソート列として前記共用外部記憶装置に格納し、
前記格納が完了した前記入力ノードは、前記第一の通信路を介して、前記出力ノードにマージ指示を送信し、
前記マージ指示を受信した前記出力ノードは、前記第二の通信路を介して、前記ソート列が格納された前記共用外部記憶装置から該ソート列を読み込み、第二のソート規則に基づきマージを行うことを特徴とするソート処理方法。
【請求項１４】
請求項1３に記載のソート処理方法であって、
前記第一の通信路は、前記複数の入力ノードと前記出力ノードを接続する通信路であり、
前記第二の通信路は、前記共用外部記憶装置と前記出力ノードを一対一で接続する通信路であることを特徴とするソート処理方法。
【請求項１５】
請求項1４に記載のソート処理方法であって、
前記第一の通信路は、ネットワークであり、
前記第二の通信路は、I/Oバスであることを特徴とするソート処理方法。
【請求項１６】
複数の入力ノードと、
複数の出力ノードと、
前記各入力ノードと前記各出力ノードとの間にそれぞれ共用外部記憶装置とを備えたソート処理システムにおけるソート処理方法であって、
当該ソート処理システムは、
前記各入力ノードと前記各出力ノードを接続する第一の通信路と、
前記各入力ノードと前記共用外部記憶装置、及び、前記各出力ノードと前記共用外部記憶装置を接続する第二の通信路とを有し、
前記入力ノードは、ソート対象データを読み込み、所定の分配規則に基づいて分類し、
前記分類されたソート対象データに対し、第一のソート規則に基づいてソートを行い、
ソートの結果を、前記分類に基づき決定された共用外部記憶装置に、ソート列として分配し、
前記分配が完了した前記入力ノードは、前記第一の通信路を介して、前記出力ノードにマージ指示を送信し、
前記マージ指示を受信した前記出力ノードは、前記第二の通信路を介して、前記ソート列が格納された前記共用外部記憶装置から該ソート列を読み込み、第二のソート規則に基づきマージを行うことを特徴とするソート処理方法。
【請求項１７】
複数のノードと、
前記複数のノードの各ノード間にそれぞれ設けられた共用外部記憶装置とを備えたソート処理システムにおけるソート処理方法であって、
当該ソート処理システムは、
前記複数の各ノード間を接続する第一の通信路と、
前記複数の各ノードと前記共用外部記憶装置、及び、前記複数の各ノードと前記専用外部記憶装置を接続する第二の通信路とを有し、
前記共用外部記憶装置は、
接続される二つのノードのうち、第一のノードから第二のノードに送信するデータを格納する第一の格納領域と、前記第二のノードから前記第一のノードに送信するデータを格納する第二の格納領域を有し、
前記第一のノードは、ソート対象データを読み込み、第一のソート規則に基づいてソートを行い、
ソートの結果を、ソート列として前記共用外部記憶装置が有する第一の格納領域に格納し、
マージ指示を、前記第一の通信路を介して、前記第二のノードに送信し、
前記マージ指示を受信した前記第二のノードは、前記ソート列を、前記第二の通信路を介して、前記共用外部記憶装置が有する第一の格納領域から読み込み、第二のソート規則に基づきマージを行うことを特徴とするソート処理方法。
【請求項１８】
請求項１７に記載のソート処理方法であって、
前記第一のノードは、
前記第二のノードによって前記共用外部記憶装置の第二の格納領域に格納された前記ソート列を読み込むことを特徴とするソート処理方法。
【請求項１９】
複数のノードと、
該複数のノードの各ノードに対して設けられた専用外部記憶装置と、
前記複数のノードの各ノード間にそれぞれ設けられた共用外部記憶装置とを備えたソート処理システムにおけるソート処理方法であって、
当該ソート処理システムは、
前記複数の各ノード間を接続する第一の通信路と、
前記複数の各ノードと前記共用外部記憶装置、及び、前記複数の各ノードと前記専用外部記憶装置を接続する第二の通信路とを有し、
前記複数のノードのうちの少なくとも一つのノードは、ソート対象データを読み込み、
所定の分配規則に基づいて分類を行い、
前記分類されたソート対象データに対し、第一のソート規則に基づいて、ソートを行い、
ソートの結果を、前記分類に基づき決定された前記共用外部記憶装置または前記専用外部記憶装置に、ソート列として分配し、
前記分配が完了した前記少なくとも一つのノードは、前記第一の通信路を介して、前記複数のノードのうちの少なくとも一つの他のノードにマージ指示を送信し、
前記マージ指示を受信した前記少なくとも一つの他のノードは、前記第二の通信路を介して、前記ソート列が格納された前記共用外部記憶装置または前記専用外部記憶装置から、該ソート列を読み込み、第二のソート規則に基づきマージを行うことを特徴とするソート処理方法。
【請求項２０】
請求項１７または請求項１９の何れか一項に記載のソート処理方法であって、
前記少なくとも一つのノードは、
前記ソート対象データの読み込みと、前記ソート列の読み込みに同一のバッファを使用することを特徴とするソート処理方法。
【請求項２１】
請求項１３、１６、１７、または１９の何れか一項に記載のソート処理方法であって、
前記第一のソート規則または前記第二のソート規則は、
前記ソート対象データに含まれる複数のレコードが有するキーに基づき、前記キーを比較して前記複数のレコードが昇順または降順に並べ替えられるように規定された規則であることを特徴とするソート処理方法。
【請求項２２】
請求項２１に記載のソート処理方法であって、
前記キーには優先順位が指定され、
前記第一のソート規則または前記第二のソート規則は、
優先順位の高い前記キーの順に、前記複数のレコードが並べ替えられるように規定された規則であることを特徴とするソート処理方法。
【請求項２３】
請求項１６または１９の何れか一項に記載のソート処理方法であって、
前記所定の分配規則は、
前記ソート対象データに含まれる複数のレコードが有するキーに基づき、前記複数のレコードのそれぞれが出力される前記ノードが規定される規則であることを特徴とするソート処理方法。
【請求項２４】
請求項１３、１６、１７、または１９の何れか一項に記載のソート処理方法であって、
前記第一のソート規則と前記第二のソート規則は、同一の規則であることを特徴とするソート処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータシステムによって行うソート処理に関し、特に、複数のコンピュータを利用したソート処理に関する。
【０００２】
【従来の技術】
コンピュータシステムによって行う情報処理のうち基本的な処理の１つにソート処理がある。最も一般的なソート処理とは、１つまたは複数のキーを含む複数のレコードを、前記キーに基づいてある順序（例えば、昇順または降順）に並べ替える処理である。
【０００３】
比較的少量の入力データ（レコードの集合）についてソート処理を行う場合、コンピュータは与えられた入力データを全てコンピュータ内のメモリ上のバッファに読み込み、各レコードのキーを参照、比較し、各レコードを並べ替えることで、ソートした結果を得る。このような、コンピュータ内のメモリ上のバッファのみをデータの格納場所とするソート処理を内部ソートと呼ぶ。
【０００４】
これに対し、バッファの容量に比べて大量の入力データについてソート処理を行う場合は、入力データをバッファに全て読み込むことができないため、コンピュータは入力データを分割してその一部をバッファに読み込み、バッファに読み込んだ分について内部ソートを行い、バッファに読み込んだデータについてのソート結果（以下、ソート列と呼ぶ）を生成し、当該ソート列を外部記憶装置に格納する。以上のような入力データの読み込み、内部ソート、及びソート列の格納を、入力データの分割数分だけ行う。その結果、外部記憶装置には前記分割数分の、個々にはソート済みのソート列が格納されることになる。
【０００５】
次いで、コンピュータは、複数のソート列全てについて、その一部分ずつを外部記憶装置からバッファに読み込み、バッファに読み込まれたレコードのキーを相互に比較することで、全ソート列の各一部分について総合してソートした結果を得る。このような全ソート列の各一部分についての処理を、各ソート列の先頭から終わりまで行うことによって、入力データ全体に対する最終的なソート結果が得られる。このような各ソート列から最終的なソート結果を得る処理をマージと呼ぶ。また、上述したような、コンピュータ内のバッファに加え、外部記憶装置をデータの格納場所とするソート処理を外部ソートと呼ぶ。なお、外部記憶装置としては、例えば、磁気ディスクや磁気テープなどが利用される。
【０００６】
一方、コンピュータシステムによって行う情報処理の高速化手法の１つに処理の並列化がある。並列化とは、情報処理に必要な資源を複数用意して、同時に複数の処理を行うことで、処理時間の削減を図ろうとするものである。ソート処理に並列化を適用した場合の例として、特開平８−２７２５４５号公報には、外部ソートにおける外部記憶装置として複数の磁気ディスクからなるディスクアレイを用い、ディスクアレイ上のデータの格納場所を工夫して処理の並列性を向上させる技術が開示されている。
【０００７】
また、ソート処理に並列化を適用する別の形態として、複数のコンピュータをネットワークで相互接続して１つのコンピュータシステムとし、そのような複数のコンピュータで並列に、大量の入力データのソート処理を行うことも考えられる。すなわち、複数のコンピュータのうちの一部または全てのコンピュータ（以下、入力ノードと呼ぶ）に入力データを分配して割り当て、各入力ノードは、割り当てられた入力データについて外部ソートをそれぞれ行い、更に、各コンピュータのうちのあるコンピュータ（以下、出力ノードと呼ぶ）に各入力ノードにおける外部ソートの結果をネットワーク経由で転送し、出力ノードにおいては、各入力ノードから送られてくる、各入力ノードにおけるソート結果をそれぞれ外部ソート時のソート列と同様に扱って、マージを行うことで、出力ノードにおいて、入力データ全体に対するソート結果を得ることができる。
【０００８】
【発明が解決しようとする課題】
しかしながら、このように、ソート処理を、複数のコンピュータからなるコンピュータシステムで並列に行う場合、入力ノードと出力ノードの両方でマージ処理を行う必要があるため、ソート処理に要する時間には、入力ノードにおけるマージ処理の時間が加わっていた。また、入力ノードにおけるマージ処理により、入力ノードで実行されうる他の処理が遅延したり、阻害される可能性もあった。
【０００９】
更に、入力ノードにおける外部ソートの結果を、出力ノードへネットワーク経由で転送するようにすると、コンピュータの相互接続に用いるネットワークがあまり高速でない場合は、その転送時間が問題となりうる。例えば、ネットワークとして１００Ｂａｓｅ−Ｔ等の１００Ｍビット／秒のＬＡＮを用いた場合は、データ転送速度は、毎秒１２．５Ｍバイト以下程度となり、パーソナル・コンピュータ（ＰＣ）やワークステーションで一般的に用いられるＩ／Ｏ規格であるウルトラワイドＳＣＳＩの毎秒４０Ｍバイト以下程度と比べて転送時間が約３倍かかることになる。このため、複数のコンピュータがあまり高速でないネットワークで相互接続されている場合は、上記のようなソート処理についての処理時間のうち、データ転送時間が占める割合は大きなものとなり得る。
【００１０】
本発明の目的は、複数のコンピュータによってソート処理を並列に行う際に、ソート処理に要する処理時間を削減して高速なソート処理を実現できるソート処理システムおよびソート処理方法を提供することである。
【００１１】
【課題を解決するための手段】
本発明に係る第１のソート処理システムは、複数の入力ノードと、一つの出力ノードと、前記各入力ノードと前記出力ノードとの間に共用外部記憶装置とを備えることを特徴とする。そして、前記入力ノードは、それぞれ、第一のバッファと、該第一のバッファにソート対象データを読み込む手段と、前記第一のバッファ内のデータに対して、所定のソート規則に従い内部ソートを行う手段と、当該内部ソートの結果をソート列として前記共用外部記憶装置に格納する手段とを有することを特徴とする。また、前記出力ノードは、第二のバッファと、前記共用外部記憶装置に格納されたソート列を前記第二のバッファに読み込む手段と、前記第二のバッファに読み込んだ複数のソート列に対し前記ソート規則に基づきマージを行う手段と、当該マージの結果をソート結果として出力する手段とを有することを特徴とする。
【００１２】
本発明に係る第２のソート処理システムは、複数の入力ノードと、複数の出力ノードと、前記各入力ノードと前記各出力ノードとの間に共用外部記憶装置とを備えたことを特徴とする。そして、前記入力ノードは、それぞれ、第一のバッファと、該第一のバッファにソート対象データを読み込む手段と、前記第一のバッファ内のデータに対し、所定のソート規則に従い内部ソートを行う手段と、前記第一のバッファ内のデータに対し、所定の分類規則に従った分類をする手段と、前記分類に基づいた内部ソートの結果を、ソート列として前記共用外部記憶装置に格納する手段とを有することを特徴とする。また、前記出力ノードは、それぞれ、第二のバッファと、前記共用外部記憶装置に格納されたソート列を第二のバッファに読み込む手段と、前記第二のバッファに読み込んだ複数のソート列に対し前記ソート規則に基づきマージを行う手段と、前記マージの結果をソート結果として出力する手段とを有することを特徴とする。
【００１３】
前記第１及び第２のシステムにおいて、前記入力ノードは、前記出力ノードにマージ指示を通知する手段を更に有し、前記出力ノードは、当該マージ指示を受領する手段を更に有するようにしてもよい。
【００１４】
本発明に係る第３のソート処理システムは、複数のノードと、該複数のノードの各ノードに対して設けられた専用外部記憶装置と、前記複数のノードの各ノード間に設けられた共用外部記憶装置と備えたことを特徴とする。そして、前記複数のノードの少なくとも一つのノードは、第一のバッファと、該第一のバッファにソート対象データを読み込む手段と、前記第一のバッファ内のデータに対し、所定のソート規則に従い内部ソートを行う手段と、当該内部ソートの結果をソート列として、前記専用外部記憶装置に格納する手段と、第二のバッファと、前記共用外部記憶装置および専用外部記憶装置に格納されたソート列を第二のバッファに読み込む手段と、前記第二のバッファに読み込んだ複数のソート列に対し前記ソート規則に基づきマージを行う手段と、当該マージの結果をソート結果として出力する手段とを有することを特徴とする。
【００１５】
本発明に係る第４のソート処理システムは、複数のノードと、該複数のノードの各ノードに対して設けられた専用外部記憶装置と、前記複数のノードの各ノード間に設けられた共用外部記憶装置と備えたことを特徴とする。そして、前記複数のノードの少なくとも一つのノードは、第一のバッファと、該第一のバッファにソート対象データを読み込む手段と、前記第一のバッファ内のデータに対し、所定のソート規則に従い内部ソートを行う手段と、前記第一のバッファ内のデータに対し、所定の分配規則に従った分類を行う手段と、内部ソートの結果を、前記分類に基づいて、ソート列として前記専用外部記憶装置又は共用外部記憶装置に格納する手段と、第二のバッファと、前記専用外部記憶装置及び共用外部記憶装置に格納されたソート列を第二のバッファに読み込む手段と、前記第二のバッファに読み込んだ複数のソート列に対し前記ソート規則に基づきマージを行う手段と、当該マージの結果をソート結果として出力する手段とを有することを特徴とする。
【００１６】
前記第３及び第４のソート処理システムにおいて、前記第一のバッファと前記第二のバッファは、同一のバッファであるようにしてもよい。また、前記複数のノードの少なくとも一つのノードは、他のノードにマージ指示を通知する手段と、他のノードからのマージ指示を受領する手段とを更に有してもよい。
【００１７】
本発明に係る第１のソート処理の方法は、複数の入力ノードと、一つの出力ノードと、前記各入力ノードと前記出力ノードとの間に共用外部記憶装置とを備えたソート処理システムにおけるソート処理の方法である。そして、ソート対象データを、前記入力ノードに読み込んで、所定のソート規則に従い内部ソートを行い、当該内部ソート結果をソート列として前記共用外部記憶装置に格納し、前記共用外部記憶装置からソート列を、前記出力ノードに読み込み、前記ソート規則に基づきマージすることを特徴とする。
【００１８】
本発明に係る第２のソート処理の方法は、複数の入力ノードと、複数の出力ノードと、前記各入力ノードと前記各出力ノードとの間に共用外部記憶装置とを備えたソート処理システムにおけるソート処理の方法である。そして、ソート対象データを、前記各入力ノードに読み込み、当該読み込んだソート対象データについて、所定のソート規則と所定の分配規則に基づいて、内部ソート及び分類を行い、当該結果を、各出力ノードと共用している共用外部記憶装置に前記分類に従ってソート列として分配格納し、前記読み込みから分配格納までの処理を、すべてのソート対象データについて行い、その後、各出力ノードに、各入力ノードと共用している共用外部記憶装置からソート列を読み込んで、前記ソート規則に基づきマージすることを特徴とする。
【００１９】
本発明に係る第３のソート処理の方法は、複数のノードと、該複数のノードの各ノードに対して設けられた専用外部記憶装置と、前記複数のノードの各ノード間に設けられた共用外部記憶装置と備えたソート処理システムにおけるソート処理の方法である。そして、各ノードに分配されたソート対象データを、各ノードに読み込み、所定のソート規則に従った内部ソートを行い、当該内部ソート結果を、ソート列として前記専用外部記憶装置又は前記共用外部記憶装置に格納し、前記内部ソート及びソート列の格納を、ソート対象データのすべてについて行い、その後、前記複数のノードのうちの一つのノードにおいて、前記専用外部記憶装置及び共用外部記憶装置から、各ソート列を読み込んで、前記ソート規則に基づきマージすることを特徴とする。
【００２０】
本発明に係る第４のソート処理の方法は、複数のノードと、該複数のノードの各ノードに対して設けられた専用外部記憶装置と、前記複数のノードの各ノード間に設けられた共用外部記憶装置と備えたソート処理システムにおけるソート処理の方法である。そして、ソート対象データを、前記複数のノードのうちの少なくとも一部のノードに、読み込み、当該読み込まれたソート対象データについて、所定のソート規則及び所定の分配規則に基づいて、内部ソート及び分類を行い、当該結果を、前記分類に基づいて、専用外部記憶装置又は共用外部記憶装置に、ソート列として分配格納し、前記読み込みから分配格納までの処理を、ソート対象データすべてについて行い、その後、前記複数のノードのうちの少なくとも一部のノードにおいて、専用外部記憶装置及び共用外部記憶装置からソート列を、読み込んで、前記ソート規則に基づきマージすることを特徴とする。
【００２１】
前記第３および第４の方法において、少なくとも一つのノードは、前記ソート対象データの読み込みと、前記ソート列の読み込みに同一のバッファを使用するようにしてもよい。
【００２２】
なお、前記入力ノード、出力ノード、及びノードには、例えば、通常のコンピュータが該当する。また、前記専用外部記憶装置及び共用外部記憶装置には、例えば、磁気ディスク装置が該当する。また、前記第一のバッファおよび前記第二のバッファ並びにバッファとしては、例えば、各コンピュータの主記憶の一部が利用される。
【００２３】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しつつ、詳細に説明する。
【００２４】
≪第一実施形態≫
図１は、本発明による第１のソート処理システムのブロック図である。同図に示すように、本システムは、入力ノード１００と、入力ローカルディスク２００と、出力ノード３００と、出力ローカルディスク４００と、共用ディスク５００とからなる。入力ノード１００および出力ノード３００は、通常のコンピュータ、例えば、ＰＣやワークステーションである。また、入力ローカルディスク２００、出力ローカルディスク４００、および共用ディスク５００は、通常の外部記憶装置、例えば、磁気ディスク装置である。
【００２５】
本システムでは、入力ノード１００は、複数台存在し、出力ノード３００は１台存在する。共用ディスク５００は、各入力ノード１００と出力ノード３００の間に１台ずつ存在する。すなわち、共用ディスク５００は、入力ノード１００と同じ数存在する。
【００２６】
入力ノード１００は、入力ノードＣＰＵ１０１と、入力管理情報整合手段１０２と、データ読み込み手段１０３と、内部ソート手段１０４と、共用ディスク・ライト手段１０５と、マージ指示手段１０６と、内部ソートバッファ１１０と、ＩＯバス・インタフェース（Ｉ／Ｆ）６００と、ネットワーク・インタフェース（Ｉ／Ｆ）７００とを有する。入力ローカルディスク２００は、ＩＯバス６１０によって、入力ノード１００のＩＯバスＩ／Ｆ６００と接続されている。
【００２７】
ここで、入力管理情報整合手段１０２、データ読み込み手段１０３、内部ソート手段１０４、共用ディスク・ライト手段１０５、及びマージ指示手段１０６は、例えば、入力ノードＣＰＵ１０１が、不図示のメモリに記憶されたソフトウェアを実行することによって実現される。また、内部ソートバッファ１１０は、例えば、入力ノード１００において入力ノードＣＰＵ１０１がソフトウェアを実行するために使用するメモリの一部を利用したり、専用のメモリを用意することで実現される。
【００２８】
出力ノード３００は、出力ノードＣＰＵ３０１と、出力管理情報整合手段３０２と、マージ指示受領手段３０３と、共用ディスク・リード手段３０４と、マージ手段３０５と、ソート結果出力手段３０６と、マージバッファ３１０と、ＩＯバスＩ／Ｆ６００と、ネットワークＩ／Ｆ７００とを有する。出力ローカルディスク４００は、ＩＯバス６１０によって、出力ノード３００のＩＯバスＩ／Ｆ６００と接続されている。
【００２９】
ここで、出力管理情報整合手段３０２、マージ指示受領手段３０３、共用ディスク・リード手段３０４、マージ手段３０５、及びソート結果出力手段３０６は、例えば、出力ノードＣＰＵ３０１が、不図示のメモリに記憶されたソフトウェアを実行することで実現される。また、マージバッファ３１０は、例えば、出力ノード３００において出力ノードＣＰＵ３０１がソフトウェアを実行するために使用するメモリの一部を利用したり、専用のメモリを用意することで実現される。
【００３０】
複数台の入力ノード１００と１台の出力ノード３００のそれぞれは、ネットワークＩ／Ｆ７００を介して、ネットワーク７１０に接続されている。また、共用ディスク５００は、各入力ノード１００と出力ノード３００の双方のＩＯバスＩ／Ｆ６００にＩＯバス６１０によって接続される。
【００３１】
本システムでは、ソート処理の対象となるデータ（ソート対象データ）は、複数の入力ノード１００に分配して割り当てられ、各入力ノード１００の入力ローカルディスク２００に格納される。なお、各入力ローカルディスク２００に格納されているソート対象データの量は、各入力ノード１００の内部ソートバッファ１１０の容量より大きいとする。また、ソート対象データは、ソート処理に用いる１つまたは複数のキーを含むレコードの集合である。また、本システムでは、ソート処理の最終的な結果は、出力ノード３００の出力ローカルディスク４００に格納される。
【００３２】
次に、本システムがソート処理を行う場合の処理について説明する。
【００３３】
まず、本システムにおけるソート処理の概要について説明し、各処理の詳細については後述する。図２は、本システムにおけるソート処理の概要を示す図である。まず、ユーザ等から本ソート処理システムに対してソート処理開始が指示されると、実際のソート処理に先立ち、入力ノード１００と出力ノード３００は、ソート処理に必要な管理情報の生成と整合を行う（Ｓ１０１０）。
【００３４】
次に、各入力ノード１００は、それぞれ、各入力ローカルディスク２００に格納されているソート対象データを分割しつつ、内部ソートバッファ１１０に読み込む（Ｓ１０２０）。そして、読み込んだデータに対し内部ソートを行ってソート結果（ソート列）を生成し（Ｓ１０３０）、得られたソート列を共用ディスク５００に格納する（Ｓ１０４０）。そして、自分に割り当てられたソート対象データを全て処理・格納したか否かを判断する（Ｓ１０５０）。その結果、未処理のデータがある場合は、各入力ノード１００は、それぞれ、上記処理Ｓ１０２０〜Ｓ１０４０を繰り返す。そして、自分に割り当てられたソート対象データすべてについて処理が終了すると、各入力ノード１００は、出力ノード３００にマージを指示する（Ｓ１０６０）。
【００３５】
出力ノード３００は、全ての入力ノード１００からマージ指示を受領すると（Ｓ１０７０）、共用ディスク５００にそれぞれ格納されているソート列について、複数のソート列の各々一部分ずつをマージバッファ３１０へ読み込む（Ｓ１０８０）。そして、マージバッファ３１０に読み込んだレコードについて、キーを比較し、マージバッファ３１０に読み込まれたレコードについて総合してソートした結果を得て（Ｓ１０９０）、その結果を出力ローカルディスク４００に格納していく（Ｓ１１００）。そして、各出力ノード３００は、共用ディスク５００に格納されているソート列の全データについて、処理を終了したか否かを判断し（Ｓ１１１０）、未処理のデータがある場合は、上記の処理Ｓ１０８０〜Ｓ１１００を繰り返す。以上のような入力ノード１００および出力ノード３００の処理によって、複数の入力ローカルディスク２００に分かれて格納されていたソート対象データ全体についてのソート処理結果が得られる。
【００３６】
以下、上記各処理について詳細に説明する。
【００３７】
まず、管理情報整合処理について説明する。管理情報整合処理は、実際のソート処理に先立ち、ソート処理に必要な管理情報の生成と整合を行う処理である。
【００３８】
各入力ノード１００の入力管理情報整合手段１０２と出力ノード３００の出力管理情報整合手段３０２は、ユーザ等によって予め設定された情報、および入力管理情報整合手段１０２と出力管理情報整合手段３０２がネットワーク７１０を介してやり取りした情報を用いて、ソート処理に必要な情報を、それぞれ生成、整合し、保持する。ソート処理に必要な情報としては、ソート処理システムのシステム構成に関するデータを格納するシステム構成情報テーブルや、ソート対象となるレコードに関する情報を格納するレコード情報テーブル等がある。
【００３９】
図３は、システム構成情報テーブルの例を示す図である。同図において、「ノード名」は、各ノードに与えられた名前を表す。各ノードにおける「項目」および「内容」は、ソート処理に利用される各ノードの構成情報を示す。例えば、「入力ノード＃１」における「ネットワーク番号」は、ネットワーク７１０における入力ノード＃１の識別番号を示す（図３の例では、Ｎ１）。また、「出力ノードに接続する共用ディスク番号」は、入力ノード＃１の有するディスクのうち、出力ノードに接続しているディスクの識別番号を示す（図３の例では、Ｄ１）。また、「入力ローカルディスク番号」は、入力ノード＃１の有するディスクのうち、ソート対象データを格納しているディスクの識別番号を示す（図３の例では、Ｄ４）。また、「ソート対象データファイル名」は、入力ローカルディスクにファイルとして格納されているソート対象データのファイル名を示す（図３の例では、ＡＡＡ）。また、「レコード名」は、ソート対象データのレコード形式に与えられた名前を示す（図３の例では、ＸＸＸ）。また、「出力ノード」における「入力ノード＃１に接続する共用ディスク番号」は、出力ノードに接続されたディスクのうち、入力ノード＃１に接続しているディスクの識別番号を示す（図３の例では、Ｄ１）。また、出力ノードについての「出力ローカルディスク番号」は、出力ノードが有するディスクのうち、ソート処理結果を格納するディスクの識別番号を示す（図３の例では、Ｄ７）。
【００４０】
図４は、レコード情報テーブルの例を示す図である。同図において、「レコード名」は、レコード形式に与えられた名前を示す。図３に示したシステム構成情報テーブルの「レコード名」の欄には、このレコード（形式）名が格納される。このレコード情報テーブルにおいて、「レコードの大きさ」は、レコード単位の大きさ（バイト数）を示す。また、「レコードの項目数」は、レコード単位を構成する項目の数を示す。また、「項目＃１」から「項目＃５」における、「項目の大きさ」は、各項目の大きさ（バイト数）を示す。また、「項目の形式」は、各項目のデータとしての形式を示す。また、「キーとして使用」は、ソートの際のレコード単位の並べ替えにおいて、当該項目をキーとして使用するか否か、すなわち、当該項目の内容に基づいて並べ替えを行うか否かを示す。また、「キー優先順位」は、キーとして並べ替えに使用する項目が複数ある場合の、項目間の優先順位を示し、優先順位の高い項目順に、並べ替えが行われる。なお、図４のレコード情報テーブルで示されるレコードは、固定長レコードであり、１つのレコード単位は、「１６」バイトの「項目＃１」、「３２」バイトの「項目＃２」、各「４」バイトの「項目＃３」、「項目＃４」、「項目＃５」の５つの項目からなる６０バイトのデータである。
【００４１】
上述した管理情報整合処理によってソート処理に必要な管理情報の準備が整うと、次に、ソート対象データの読み込み処理が行われる。図５は、ソート対象データの読み込み処理の流れを示す図である。各入力ノード１００において、データ読み込み手段１０３は、まず、ソート対象データの読み込みを開始するに当たって、ソート対象データのファイル名を既に取得しているか否かを調べ（Ｓ１１３０）、取得していなければ、システム構成情報テーブルからソート対象データのファイル名を取得する（Ｓ１１４０）。
【００４２】
次に、入力ローカルディスク２００に格納されているソート対象データの未処理量を確認し（Ｓ１１５０）、当該未処理量が内部ソートバッファ１１０の容量より大きいか否かを調べる（Ｓ１１６０）。その結果、ソート対象データの未処理量が内部ソートバッファ１１０の容量より大きい場合は、未処理のソート対象データを、内部ソートバッファ１１０の容量分だけ、入力ローカルディスク２００から内部ソートバッファ１１０に読み込む（Ｓ１１７０）。一方、データの未処理量が内部ソートバッファ１１０の容量以下の場合は、未処理のソート対象データを全て入力ローカルディスク２００から内部ソートバッファ１１０に読み込む（Ｓ１１８０）。
【００４３】
以上のようにして、ソート対象データの内部ソートバッファ１１０への読み込みが行われると、次に、内部ソートバッファ１１０に読み込まれたデータについて内部ソート処理が行われる。各入力ノード１００において、内部ソート手段１０４は、内部ソートバッファ１１０に読み込んだソート対象データについて、レコードに含まれる１つまたは複数のキーに基づいて、レコードを並べ替える内部ソートを行い、内部ソートバッファ１１０に読み込んだデータについてソート結果を得る。前記並べ替えは、レコードの順序をキーに基づくある順序、例えば昇順または降順にするといった所定のソート規則を用いて行う。
【００４４】
上記のようにして、内部ソートバッファ１１０に読み込んだデータについて内部ソート処理が終了すると、次に、内部ソートバッファ１１０内の内部ソート結果をソート列として、共用ディスク５００へ格納するソート列格納処理を行う。図６は、共用ディスク５００へのソート列格納処理の流れを示す図である。各入力ノード１００において、共用ディスク・ライト手段１０５は、まず、ソート列格納ヘッダを生成し（Ｓ１２００）、当該ヘッダと共に、内部ソートバッファ１１０内の内部ソート結果をソート列として、共用ディスク５００にライトし（Ｓ１２１０）、共用ディスク５００上のソート列格納情報を更新する（Ｓ１２２０）。
【００４５】
図７は、ソート列格納ヘッダの例を示す図である。同図に示すように、ソート列格納ヘッダは、「出力先ノード名」、「ソート列格納番号」、「生成日時」、「レコード数」とから構成される。「出力先ノード名」は、共用ディスク５００に接続する出力ノード３００の名前を示す。「ソート列格納番号」は、ソート列を生成・ライトする際に、各ソート列毎に順次付けられる番号を示す。「生成日時」は、各ソート列が生成された日時を示す。「レコード数」は、ソート列が含むレコード数を示す。
【００４６】
図８は、ソート列格納情報の例を示す図である。このソート列格納情報は、共用ディスク５００に書き込まれたソート列に関する情報であって、各共用ディスク５００ごとに設けられる。同図に示すように、ソート列格納情報は、「出力先ノード名」と、「更新日時」と、「ソート列格納数」とから構成される。「出力先ノード名」は、当該ソート列格納情報が置かれている共用ディスク５００に接続する出力ノード３００の名前を示す。「更新日時」は、ソート列のライトに伴ってソート列格納情報が更新された日時を示す。「ソート列格納数」は、出力先ノードに向けて共用ディスク５００に格納されているソート列の数を示す。
【００４７】
各入力ノード１００は、上記のソート対象データの読み込み処理から共用ディスク５００へのソート列の格納処理までを、入力ローカルディスク２００に格納されているソート対象データの全てを処理するまで繰り返す。各入力ノード１００が入力ローカルディスク２００に格納されているソート対象データの全てを処理し、ソート列として共用ディスク５００に格納し終えると、入力ノード１００のマージ指示手段１０６は、ネットワーク７１０を介して、出力ノード３００にマージ指示を通知する。
【００４８】
次に、出力ノード３００がすべての入力ノード１００からマージ指示を受領すると実行される、ソート列の読み込み処理について説明する。図９は、共用ディスク５００からのソート列読み込み処理の流れを示す図である。出力ノード３００において、マージ指示受領手段３０３は、入力ノード１００からのマージ指示を、ネットワーク７１０を介して受領すると（Ｓ１２４０）、全ての入力ノードからマージ指示を受領したか否かについて確認し（Ｓ１２５０）、まだ、マージ指示を受領していない入力ノード１００がある場合は、全ての入力ノードからマージ指示が届くのを待つ。そして、全ての入力ノード１００からマージ指示を受領すると、共用ディスク・リード手段３０４は、出力ノード３００に接続されている各共用ディスク５００上のソート列格納情報をリードして（Ｓ１２６０）、共用ディスク５００に格納されているソート列の総本数を確認する。そして、マージバッファ３１０の容量をソート列の総本数で割った商を求め、それを、各ソート列に対し割り当てるマージバッファ３１０の容量とする（Ｓ１２７０）。
【００４９】
以上のようにして、各ソート列に割り当てるマージバッファの容量が求まると、共用ディスク・リード手段３０４は、処理対象となるソート列のなかから一つのソート列を選択し、当該ソート列についてソート列格納ヘッダを参照して、当該ソート列の大きさを確認し、それを、ソート列の未処理量の初期値とする。そして、ソート列の未処理量が前記のバッファ割り当て量より大きいか否かを調べる（Ｓ１２９０）。その結果、ソート列の未処理量がバッファ割り当て量より大きい場合は、ソート列の未処理分のうち、バッファ割り当て量だけ共用ディスク５００からマージバッファ３１０に読み込む（Ｓ１３００）。一方、ソート列の未処理量がバッファ割り当て量以下の場合は、ソート列の未処理分を全て、共用ディスク５００からマージバッファ３１０に読み込む（Ｓ１３１０）。ここでの未処理分の読み込みは、ソート列の先頭から終端までソートされている順に行う。なお、読み込んだ未処理分はソート列の一部をなすので、当該未処理分をソート列のソート片（へん）と以下呼ぶことにする。
【００５０】
あるソート列についてソート片のマージバッファ３１０への読み込みが終了すると、処理対象となるソート列すべてについて、ソート片の読み込みを終了したか否かを判断し（Ｓ１３２０）、ソート片の読み込みが終了していないソート列がある場合は、そのソート列について、上記した処理Ｓ１２８０〜Ｓ１３１０を繰り返す。以上のようにして、全ての共用ディスク５００に格納されている全てのソート列に対して、ソート片のマージバッファ３１０への読み込みが行われる。
【００５１】
以上のようにして、ソート片のマージバッファ３１０への読み込みが終了すると、次に、マージバッファ３１０へ読み込まれたデータについて、マージ処理および最終的なソート結果出力処理が行われる。図１０は、このマージ／ソート結果出力処理の流れを示す図である。出力ノード３００において、マージ手段３０５は、まず、マージバッファ３１０に読み込まれた各ソート列のソート片について、各ソート片内のレコードを指すポインタを用意する（Ｓ１３３０）。なお、各ソート片読み込み直後のポインタの初期値は、ソート片の先頭レコードとする。
【００５２】
次に、マージ手段３０５は、マージバッファ３１０内のソート片全てについて、各ポインタの指す各レコードのキーを所定のソート規則に基づいて比較し、当該ソート規則で最も先になるレコードのポインタをソート結果出力手段３０６に渡す（Ｓ１３４０）。ソート結果出力手段３０６は、渡されたポインタに対応するレコードを、出力ローカルディスク４００に書き出して出力する（Ｓ１３５０）。そして、マージ手段３０５は、出力したレコードの属するソート片について、マージバッファ３１０に読み込まれたすべてのレコードの出力が済んだか否かを調べる（Ｓ１３７０）。その結果、当該ソート片について、マージバッファ３１０内に比較対象となるレコードが未だ残っている場合は、当該ソート片についてのポインタを１つ進めて後続のレコードを指すようにし、上述した処理Ｓ１３４０、Ｓ１３５０を繰り返す。このようにして、マージ手段３０５とソート結果出力手段３０６は、マージバッファ３１０内に格納されたソート片についてのソート処理の結果を出力ローカルディスク４００に出力していく。
【００５３】
そして、マージ手段３０５とソート結果出力手段３０６が、マージバッファ３１０に格納された１つのソート片に含まれる全てのレコードを出力した場合（Ｓ１３７０：Ｙ）、マージ手段３０５は、共用ディスク・リード手段３０４に、当該ソート片の属するソート列を通知する（Ｓ１３８０）。
【００５４】
この通知を受けて、共用ディスク・リード手段３０４は、当該ソート列について、未処理分を確認し（Ｓ１３９０）、当該ソート列について、未処理のソート片が存在するか否かを判断する（Ｓ１４１０）。その結果、未処理のソート片が存在すれば、未処理分のソート片を共用ディスク５００から読み出して（Ｓ１４２０）、マージバッファ３１０内の出力済みのソート片に上書き格納し（Ｓ１４２０）、マージ手段３０５は、新たに格納したソート片についてポインタを初期化して、格納したソート片の先頭レコードを指すようにする（Ｓ１４３０）。そして、マージ手段３０５とソート結果出力手段３０６は、上記の処理Ｓ１３４０〜Ｓ１３９０を繰り返す。なお、共用ディスク５００からマージバッファ３１０への読み込みに際して、ソート列の未処理量は、適宜更新される。
【００５５】
一方、当該ソート列について、未処理分が無ければ（Ｓ１４１０：Ｙ）、続けて、複数の共用ディスク５００に格納されている全てのソート列について、処理が終了しているか否かを調べ（Ｓ１４４０）、未処理のソート列が存在する場合は、共用ディスク・リード手段３０４は、当該ソート列についての処理完了をマージ手段３０５に通知し（Ｓ１４５０）、マージ手段３０５は、当該ソート列のソート片を比較対象から除外し（Ｓ１４６０）、上記の処理Ｓ１３４０〜Ｓ１４３０を繰り返す。
【００５６】
以上のような処理により、共用ディスク５００に格納されているソート列が全てマージされ、ソート処理が完了する。すなわち、複数台の入力ローカルディスク２００に格納されているソート対象データ全てについてのソート処理結果が、出力ノード３００に接続されている出力ローカルディスク４００に得られる。
【００５７】
本システムでは、上記のようにソート列を共用ディスク５００に格納蓄積して処理するので、入力ノード１００においてマージ処理を行う必要がなく、ソート処理に要する処理時間を削減して高速なソート処理を実現することができる。また、入力ノード１００においてマージ処理を行う必要がないので、その分、入力ノード１００で実行されうる他の処理に与える遅延や阻害などの影響を低減することも可能になる。
【００５８】
更に、上記のようにソート列を共用ディスク５００に格納蓄積して処理するので、入力ノードから出力ノードに対しソート対象データやソート列をネットワーク経由で転送する必要がなく、ネットワーク７１０が高速でない場合であっても、高速なソート処理を実現することができる。
【００５９】
≪第二実施形態≫
図１１は、本発明による第２のソート処理システムのブロック図である。第１のシステムと異なる点は、出力ノード３００（および出力ローカルディスク４００）が複数存在し、入力ノード１００が出力ノード決定手段１０７を有する点である。また、本システムにおいては、共用ディスク５００は、各入力ノード１００と各出力ノード３００の双方のＩＯバスＩ／Ｆ６００にＩＯバス６１０で接続されて、各入力ノード１００のそれぞれと各出力ノード３００のそれぞれの間に１台ずつ存在する。すなわち、本システムでは、入力ノード及び出力ノードの数をそれぞれ、ｉ、ｊとすると、共用ディスク５００は（ｉ×ｊ）台存在する。以上の点を除き、第１のシステムと同様の構成を有する。
【００６０】
本システムは、出力ノードを複数用意し、各出力ノードにおいて、入力データ全体に対するソート結果を、所定の分配規則に基づいて分配した結果として得ようとするものである。
【００６１】
出力ノード決定手段１０７は、入力ノード１００における内部ソート処理において、内部ソートの対象となっているレコードを最終的に出力する出力ノード３００を決定する。なお、出力ノード決定手段１０７は、例えば、入力ノードＣＰＵ１０１が不図示のメモリに記憶されたソフトウェアを実行することによって実現される。
【００６２】
以下に、本システムによって行うソート処理について説明する。
【００６３】
まず、実際のソート処理に先立って、ソート処理に必要な管理情報の生成と整合を行う管理情報整合処理が行われる。この処理は、第１のシステムについて説明したのとほぼ同様であり、各入力ノード１００の入力管理情報整合手段１０２と各出力ノード３００の出力管理情報整合手段３０２が、ソート処理に必要な情報を、それぞれ生成、整合し、保持する。
【００６４】
図１２は、第２のソート処理システムにおけるシステム構成情報テーブルの例を示す図である。同図に示すように、システム構成情報テーブルは、入力ノードについて、「出力ノードに接続する共用ディスク番号」が複数用意されていることと、出力ノードに関する情報が、複数用意されていることを除いて、図３に示したシステム構成情報テーブルと同様の構成をしている。
【００６５】
管理情報整合処理によってソート処理に必要な管理情報の準備が整うと、各入力ノード１００において、ソート対象データの読み込み処理が行われるが、この処理は、第１のシステムと同様にして行われる。
【００６６】
次に、第２のシステムにおける内部ソート処理について説明する。図１３は、第２のシステムにおける内部ソート処理の流れを示す図である。各入力ノード１００において、各入力ローカルディスク２００に格納されているソート対象データが内部ソートバッファ１１０に読み込まれると、出力ノード決定手段１０７は、内部ソートバッファ１１０に読み込んだ各レコードについて、各レコードが持つキーや他の情報を利用した所定の決定規則に基づいて、当該レコードを出力する出力ノードを決定する（Ｓ２０１０）。ここでの所定の決定規則とは、レコード（ソート対象データ）を複数の出力ノード３００間で分配するための分配規則のことであり、例えば、連続する値のキーを持つレコードは、各出力ノード３００に巡回的に割り当てるといったものや、特定の値のキーをもつレコードは、当該特定の値を所定の計算式やテーブルに適用することで求まる特定の出力ノード３００に割り当てるといったものが考えられる。
【００６７】
以上のようにして各レコードについて出力ノードが決定すると、次に、内部ソート手段１０４は、出力ノード決定手段１０７が決定した出力ノード３００毎に、内部ソートバッファに読み込まれたレコードを分類してまとめ（Ｓ２０２０）、分類したレコード集合内でレコードの順序を所定のソート規則を用いて並べ替える（Ｓ２０３０）。
【００６８】
以上のような処理によって、内部ソートバッファ１１０に読み込まれたデータについて、所定の決定規則に基づき決定した出力ノード３００毎に分類し、さらに、分類された中で所定のソート規則に基づき並び替えられたレコードの集合が得られる。
【００６９】
以上のようにして、内部ソート処理が終了すると、次に、共用ディスク５００へのソート列の格納処理が行われる。図１４は、共用ディスク５００へのソート列格納処理の流れを示す図である。各入力ノード１００において、共用ディスク・ライト手段１０５は、内部ソートバッファ１１０内の出力ノード３００毎に分類された内部ソート結果を、出力ノード３００毎にソート列とし、当該ソート列が格納されるべき出力ノード３００に接続されている共用ディスク５００を選択する（Ｓ２０４０）。そして、選択された各共用ディスク５００に対して、第１のシステムで説明したのと同様に、ソート列格納ヘッダを生成し（Ｓ２０５０）、当該ヘッダと共にソート列を、選択された各共用ディスク５００にライトし（Ｓ２０６０）、各共用ディスク５００上のソート列格納情報を更新する（Ｓ２０７０）。
【００７０】
各入力ノード１００は、上記のソート対象データの読み込み処理から共用ディスク５００へのソート列の格納処理までを、入力ローカルディスク２００に格納されているソート対象データの全てを処理するまで繰り返す。各入力ノード１００が、入力ローカルディスク２００に格納されているソート対象データの全てを処理し、ソート列として共用ディスク５００に格納し終えると、入力ノード１００のマージ指示手段１０６は、全ての出力ノード３００に、ネットワーク７１０を介して、マージ指示を通知する。
【００７１】
すべての入力ノード１００からマージ指示を受けた各出力ノード３００は、第１のシステムで説明したのと同様にして、共用ディスク５００からのソート列の読み込み処理と、マージおよびソート結果出力処理とを行う。全ての出力ノード３００において、自分に接続されている複数台の共用ディスク５００のソート列を全てマージし、出力ローカルディスク４００に出力し終えることによって、ソート処理は完了し、複数台の入力ローカルディスク２００に格納されているソート対象データ全てについて、所定の決定規則に基づき複数台の出力ノード３００に分配されたソート処理結果が、各出力ノード３００の各出力ローカルディスク４００に得られる。
【００７２】
本システムにおいても、第１のシステムと同様に、ソート列を共用ディスク５００に格納蓄積して処理するので、入力ノード１００においてマージ処理を行う必要がなく、ソート処理に要する処理時間を削減して高速なソート処理を実現することができる。また、入力ノード１００においてマージ処理を行う必要がないので、入力ノード１００で実行されうる他の処理に与える遅延や阻害などの影響を低減することもできる。更に、入力ノード１００から出力ノード３００に対しソート対象データやソート列をネットワーク経由で転送する必要がないので、ネットワーク７１０が高速でない場合であっても、高速なソート処理を実現することができる。
【００７３】
なお、以上説明した２つの実施形態では、ソート対象データが入力ローカルディスク２００に格納されている場合について説明したが、他の格納場所を用いる場合、例えば、ネットワーク７１０に接続されている任意のコンピュータのディスク、すなわち、リモートディスクに格納されているソート対象データを、入力ノード１００がネットワーク７１０経由で読み込むようにしてもよい。同様に、上記２つの実施形態では、ソート対象データに対するソート処理結果を、出力ローカルディスク４００に出力する場合について説明したが、例えば、リモートディスクにソート処理結果を、出力ノード３００がネットワーク７１０経由で出力するようにしてもよい。
【００７４】
また、上記２つの実施形態では、ソート対象データが、ファイル名で識別される１つのファイルとして各入力ローカルディスク２００に格納されている場合について説明したが、例えば、入力ローカルディスク２００上の論理アドレスまたは物理アドレスを直接的に指定してソート対象データを入力ローカルディスク２００から、入力ノード１００が読み込むようにしてもよい。また、１台の入力ノード１００についてソート対象データが２つ以上のファイルとして存在してもよい。
【００７５】
また、上記２つの実施形態においては、共用ディスク５００は、入力ノード１００と出力ノード３００の両方に接続され、両者からアクセスされることになるが、入力ノード１００が共用ディスク５００へのソート列格納処理を終了し、マージ指示の通知による入力ノード１００と出力ノード３００との間の同期の後、出力ノード３００が共用ディスク５００からのソート片読み出し処理を行っているので、共用ディスク５００に対するリード／ライトが同時に行われることはない。よって、共用ディスク５００の格納内容に対し、当該ディスクに接続されているノード間で排他制御をことさら行うことなく、上記の処理を不整合なく行うことができる。
【００７６】
≪第三実施形態≫
図１５は、本発明による第３のソート処理システムのブロック図である。本システムは、ノード８００と、ローカルディスク９００と、共用ディスク５００とからなる。
【００７７】
ノード８００は、ＣＰＵ８０１と、バッファ８１０と、入力モジュール８２０と、出力モジュール８３０と、ＩＯバスＩ／Ｆ６００と、ネットワークＩ／Ｆ７００とを備える。入力モジュール８２０は、入力管理情報整合手段１０２と、データ読み込み手段１０３と、内部ソート手段１０４と、共用ディスク・ライト手段１０５と、マージ指示手段１０６と、出力ノード決定手段１０７とからなる。出力モジュール８３０は、出力管理情報整合手段３０２と、マージ指示受領手段３０３と、共用ディスク・リード手段３０４と、マージ手段３０５と、ソート結果出力手段３０６とからなる。ローカルディスク９００は、ＩＯバス６１０でＩＯバスＩ／Ｆ６００と接続されている。
【００７８】
ここで、入力管理情報整合手段１０２、データ読み込み手段１０３、内部ソート手段１０４、共用ディスク・ライト手段１０５、マージ指示手段１０６、及び出力ノード決定手段１０７、並びに、出力管理情報整合手段３０２、マージ指示受領手段３０３、共用ディスク・リード手段３０４、マージ手段３０５、及びソート結果出力手段３０６は、例えば、ＣＰＵ８０１が、不図示のメモリに記憶されたソフトウェアを実行することによって実現される。また、バッファ８１０は、例えば、ＣＰＵ８０１がソフトウェアを実行するために使用するメモリの一部を利用したり、専用のメモリを用意することで実現される。
【００７９】
本システムでは、ノード８００は複数台（以下、ｎ台とする）存在する。この複数台のノード８００は、それぞれのネットワークＩ／Ｆ７００を介して、ネットワーク７１０に接続されている。すなわち、複数台のノード８００は、ネットワーク７１０で相互に接続されている。また、共用ディスク５００は、各ノード８００の間に１台ずつ存在し、各ノード８００のＩＯバスＩ／Ｆ６００にＩＯバス６１０で接続される。すなわち、各ノード８００には、（ｎ−１）台の共用ディスク５００が接続されており、本システムでは、共用ディスク５００は、（ｎ×（ｎ−１）／２）台存在する。また、共用ディスク５００は、領域Ａ５１０と領域Ｂ５２０の少なくとも２つの格納領域を持つ。
【００８０】
本システムでは、複数台のノード８００のうち、一部または全部（以下、ｉ台とする）のノード８００（以下、入力系ノードと呼ぶ）は、配下のローカルディスク９００にソート対象データを格納しており、また、ｎ台のノード８００のうちの一部または全部（以下、ｊ台とする）のノード８００（以下、出力系ノードと呼ぶ）は、配下のローカルディスク９００にソート処理の結果の一部または全部を格納する。ここで、ｉは、２以上ｎ以下、ｊは、１以上ｎ以下の整数であり、更に、（ｉ＋ｊ）は、ｎ以上となる。すなわち、本システムでは、同一のノード８００が、入力系ノードの集合と出力系ノードの集合の両集合に含まれうる。入力系ノードの各ローカルディスク９００は、それぞれ、自ノード格納領域９１０と、ソート対象データが格納されるソート対象データ格納領域９２０を有する。また、出力系ノードの各ローカルディスク９００は、自ノード格納領域９１０と、ソート処理結果を出力するソート結果格納領域９３０を有する。なお、入力系ノードであり、出力系ノードでもあるノード８００の各ローカルディスク９００は、自ノード格納領域９１０と、ソート対象データ格納領域９２０と、ソート結果格納領域９３０を持つ。
【００８１】
本システムでは、ソート対象データは、複数の入力系ノードに分配して割り当てられ、入力系ノードのローカルディスク９００のソート対象データ格納領域９２０に、それぞれ格納される。また、入力系ノードのそれぞれにおいてローカルディスク９００に格納されているソート対象データの量は、各入力系ノードのバッファ８１０の容量より大きいとする。また、本システムでは、ソート処理の結果は出力系ノードのローカルディスク９００のソート結果格納領域９３０に格納する。
【００８２】
以下に、本システムによるソート処理について説明する。
【００８３】
まず、本システムにおけるソート処理の概要について説明する。図１６は、本システムにおけるソート処理の全体の流れを示す図である。ソート処理システムにソート処理が指示されると、実際のソート処理に先立ち、各ノード８００の入力モジュール８２０と出力モジュール８３０は、ソート処理に必要な管理情報の生成と整合を行う（Ｓ３０１０）。例えば、複数のノード８００のうち、ローカルディスク９００にソート対象データを格納している入力系ノードと、ローカルディスク９００にソート処理結果の一部または全部を格納する出力系ノードを確認する。
【００８４】
次に、入力系ノードの入力モジュール８２０は、それぞれ、ローカルディスク９００に格納されているソート対象データを分割しつつ、バッファ８１０に読み込む（Ｓ３０２０）。そして、バッファ８１０に読み込んだデータに対し、所定の決定規則に基づいて、ソート結果を出力するノード８００を決定しつつ（出力系ノードが複数存在する場合）、内部ソートを行ってソート結果（ソート列）を生成し（Ｓ３０３０）、各ソート列を、決定した出力先のノード８００に接続する共用ディスク５００または配下のローカルディスク９００に格納する（Ｓ３０４０）。そして、入力モジュール８２０は、それぞれ、ローカルディスク９００に格納されているソート対象データをすべて処理したか否かを調べ（Ｓ３０５０）、未処理のデータがある場合は、処理Ｓ３０２０〜Ｓ３０４０を繰り返す。一方、全ソート対象データの処理が終了すると、入力系ノードの入力モジュール８２０は、それぞれ、出力系ノードの出力モジュール８３０にマージを指示する（Ｓ３０６０）。
【００８５】
入力系ノードの入力モジュール８２０全てからマージ指示を受領すると（Ｓ３０７０）、出力系ノードの出力モジュール８３０は、合計ｉ台となる共用ディスク５００およびローカルディスク９００にそれぞれ格納されているソート列について、複数のソート列の各々一部分ずつ（ソート片）をバッファ８１０へ読み込む（Ｓ３０８０）。そして、出力モジュール８３０は、バッファ８１０に読み込んだレコードの間でキーを比較して、バッファ８１０に読み込まれたデータについて総合してソートした結果を求め（Ｓ３０９０）、その結果をローカルディスク９００に格納していく（Ｓ３１００）。そして、出力モジュール８３０は、対象となるソート列をすべて処理したか否かを調べ（Ｓ３１１０）、未処理データが存在する場合は、処理Ｓ３０８０〜Ｓ３１００を繰り返す。このような各ノード８００の処理によって、ｉ台のローカルディスク９００に格納されているソート対象データ全てについての、ｊ台のノード８００に分配されたソート処理結果が、ｊ台のノード８００の各ローカルディスク９００に得られる。
【００８６】
以下、上記各処理について詳細に説明する。
【００８７】
まず、実際のソート処理に先立ち、管理情報整合処理が行われる。各ノード８００の入力管理情報整合手段１０２と出力管理情報整合手段３０２は、ユーザによって予め設定された情報、および入力管理情報整合手段１０２と出力管理情報整合手段３０２がネットワーク７１０を介して他のノードとやり取りした情報を用いて、ソート処理に必要な情報をそれぞれ生成、整合し、保持する。ソート処理に必要な情報としては、システム構成情報テーブルや、レコード情報テーブル等があげられる。
【００８８】
この管理情報整合処理によって、入力管理情報整合手段１０２と出力管理情報整合手段３０２は、各ノード８００の間に１台ずつ存在する共用ディスク５００について、各共用ディスク５００が持つ領域Ａ５１０および領域Ｂ５２０を、ノード８００間のデータ転送における二方向のいずれかに割り当てる。例えば、任意の１台の共用ディスク５００に接続された２台のノード８００のうち、第一のノード８００は、領域Ａ５１０にデータを書き込み、領域Ｂ５２０からデータを読み込むこととし、第二のノード８００は、領域Ｂ５２０にデータを書き込み、領域Ａ５１０からデータを読み込むこととする。すなわち、共用ディスク５００の領域Ａ５１０を第一から第二のノード８００へのデータ移送用領域として設定し、領域Ｂ５２０を第二から第一のノード８００へのデータ移送用領域として設定して、それぞれ片方向の経路として静的に割り当てる。
【００８９】
また、入力管理情報整合手段１０２と出力管理情報整合手段３０２は、複数のノード８００のうち、ローカルディスク９００にソート対象データを格納している入力系ノードと、ローカルディスク９００にソート処理結果を格納する出力系ノードを確認する。
【００９０】
図１７は、第３のシステムにおけるシステム構成情報テーブルの例を示す図である。同図において、「ノード名」は、各ノードに与えられた名前を示し、各ノードにおける「項目」と「内容」はソート処理に関連する各ノードの構成情報を示す。例えば、「ノード＃１」における「ネットワーク番号」は、ネットワーク７１０においてノード＃１を識別する番号を示している。また、「ノード＃１」における他の各ノードに接続する共用ディスクの項目では、ノード＃１の有するディスクのうち、他の各ノードに接続する共用ディスクを識別する番号を示し、加えて、共用ディスク５００において、他ノードへ渡すソート列を格納する領域に関する情報（例えば、その領域名や領域の範囲等。以下、同じ）と、他ノードからソート列を得る領域に関する情報を示す（図１７の例では、「領域Ａ」及び「領域Ｂ」）。また、ローカルディスクの項目では、ノード＃１の有するディスクのうち、自ノードのためのローカルディスクの識別番号を示し、加えて、ローカルディスクにおいてソート列を格納する領域に関する情報と、ソート列を得る領域に関する情報も示す。なお、ローカルディスクの場合は、両領域は同一にすることができる。また、「ソート対象データ」の項目では、当該ノードのローカルディスクにソート対象データが格納されているか否か（ソート対象データの「有」「無」）と、ローカルディスクにソート対象データが格納されている場合は、更に、その格納領域に関する情報と、ソート対象データのファイル名とレコード名を示す。また、「ソート処理結果格納の可能性」の項目では、ソート処理結果を自ノードが得て、ローカルディスクに格納する可能性の「有」「無」と、ソート処理結果をローカルディスクに格納する場合は、その格納領域に関する情報を示す。
【００９１】
上述した管理情報整合処理によってソート処理に必要な管理情報の準備が整うと、ソート対象データの読み込み処理が行われる。すなわち、ローカルディスク９００にソート対象データを格納している入力系ノードにおいて、データ読み込み手段１０３は、図５に示した方法と同様の方法で、ローカルディスク９００からソート対象データをバッファ８１０に読み込む。
【００９２】
次に、内部ソート処理について説明する。入力系ノードにおいて、ソート対象データがバッファ８１０に読み込まれると、図１３に示した方法と同様にして、バッファ８１０に読み込んだ各レコードについて、所定の決定規則に基づいて、当該レコードを出力する出力系ノードが決定され、出力系ノード毎に、内部ソートバッファに読み込まれたレコードを分類してまとめ、分類したレコード集合内でレコードの順序を所定のソート規則を用いて並べ替える。なお、出力系ノードが、一つしかない場合は、レコードの分類は行われず、内部ソートのみが行われる。
【００９３】
以上のような処理によって、バッファ８１０に読み込まれたデータについて、所定の決定規則に基づき決定した出力系ノード毎に分類し、さらに、分類された中で所定のソート規則に基づき並び替えられたレコードの集合が得られる。
【００９４】
次に、共用ディスク５００またはローカルディスク９００へのソート列の格納処理について説明する。この処理は、図１４に示した処理と同様の流れで行われる。入力系ノードにおいて、共用ディスク・ライト手段１０５は、前記決定規則に基づき決定された出力系ノード毎に分類してまとめたバッファ８１０内の内部ソート結果を、前記決定した出力系ノード毎にソート列とし、当該ソート列が格納されるべき領域を、各共用ディスク５００の領域Ａ５１０及び領域Ｂ５２０並びにローカルディスク９００の自ノード格納領域９１０から選択する。そして、当該ソート列を、ソート列格納ヘッダと共に、選択された領域にライトし、共用ディスク５００の領域Ａ５１０及び領域Ｂ５２０並びにローカルディスク９００の自ノード格納領域９１０のそれぞれのソート列格納情報を更新する。すなわち、出力先が他ノードであれば、共用ディスク５００にソート列を格納し、出力先が自ノードであれば、ローカルディスク９００の自ノード格納領域９１０にソート列を格納する。共用ディスク５００にソート列を格納する場合、共用ディスク・ライト手段１０５は、システム構成情報テーブルを参照等することにより、共用ディスク５００の領域Ａ５１０及び領域Ｂ５２０のいずれが自ノードから他ノードへの経路としてとして割り当てられているかを確認し、前記２つの領域のうち自ノードから他ノードへの経路として割り当てられた領域にソート列を格納する。
【００９５】
入力系ノードは、上述したソート対象データの読み込み処理からソート列の格納処理までを、ローカルディスク９００に格納されているソート対象データの全てを処理するまで繰り返す。入力系ノードにおいて、入力モジュール８２０が、ローカルディスク９００に格納されているソート対象データの全てを処理し、ソート列として共用ディスク５００またはローカルディスク９００に格納し終えると、マージ指示手段１０６は、出力系ノード全ての出力モジュール８３０に、ネットワーク７１０を介してマージ指示を通知する。
【００９６】
次に、共用ディスク５００およびローカルディスク９００からのソート列の読み込み処理について説明する。この処理は、図９に示した処理と同様の流れで行われる。出力系ノードにおいて、出力モジュール８３０のマージ指示受領手段３０３は、入力系ノードの入力モジュール８２０からのマージ指示をネットワーク７１０等を介して受領する。マージ指示を全ての入力系ノードから受領すると、共用ディスク・リード手段３０４は、自ノードに接続している合計ｉ台となる共用ディスク５００およびローカルディスク９００から、ソート列格納情報をリードし、共用ディスク５００およびローカルディスク９００に格納されているソート列の総本数を確認する。そして、バッファ８１０の容量をソート列の総本数で割った商を求め、それを、各ソート列に対し割り当てるバッファ８１０の量とする。
【００９７】
共用ディスク・リード手段３０４は、各ソート列のそれぞれについて、ソート列格納ヘッダを参照し、ソート列の大きさを確認し、それを、ソート列の未処理量の初期値とする。そして、ソート列の未処理量が前記のバッファ割り当て量より大きいか否かを調べ、その結果に応じて、適当な量のソート片を共用ディスク５００およびローカルディスク９００からバッファ８１０に読み込む。前記の未処理分の読み込みはソート列の先頭から終端までソートされた順に行う。上記のソート片の読み込みを、全ての共用ディスク５００およびローカルディスク９００に格納されている全てのソート列に対して行うことによって、共用ディスク・リード手段３０４は、処理対象の全ソート列について、ソート片をバッファ８１０に格納する。
【００９８】
なお、上記において、共用ディスク５００からソート列格納情報やソート片をリードする場合には、共用ディスク・リード手段３０４は、システム構成情報テーブルを参照等し、共用ディスク５００の領域Ａ５１０及び領域Ｂ５２０のいずれが他ノードから自ノードへの経路として割り当てられているのかを確認し、前記２つの領域のうち他ノードから自ノードへの経路として割り当てられた領域からソート列格納情報やソート片をリードする。
【００９９】
最後に、マージ／ソート結果出力処理について説明する。出力系ノードがそれぞれ行うマージ／ソート結果出力処理は、図１０に示した処理と同様の処理となる。出力系ノードにおいて、マージ手段３０５は、バッファ８１０に読み込まれた各ソート列のソート片について、各ソート片内のレコードを指すポインタを用意し、バッファ８１０内のソート片全てについて、各ポインタの指す各レコードを所定のソート規則により比較し、ソート規則で最も先になるレコードのポインタをソート結果出力手段３０６に渡す。ソート結果出力手段３０６は、渡されたポインタに対応するレコードをローカルディスク９００のソート結果格納領域９３０に書き出して出力する。マージ手段３０５は、出力したレコードの属するソート片についてポインタを１つ進めて後続のレコードを指すようにし、上記のレコードの比較と出力すべきレコードの決定を再度繰り返す。このようにして、マージ手段３０５とソート結果出力手段３０６は、バッファ８１０内に格納された各ソート列のソート片についてのソート処理の結果をローカルディスク９００のソート結果格納領域９３０に出力していく。
【０１００】
その結果、バッファ８１０に格納された１つのソート片に含まれる全てのレコードが出力されると、マージ手段３０５は、共用ディスク・リード手段３０４に、当該ソート片の属するソート列を通知する。この通知を受けて共用ディスク・リード手段３０４は、当該ソート列について、未処理のソート片が存在すれば、未処理分のソート片を共用ディスク５００またはローカルディスク９００から読み込み、バッファ８１０内の出力済みのソート片に上書き格納する。マージ手段３０５は、新たに格納したソート片についてポインタを初期化して、格納したソート片の先頭レコードを指すようにして、マージ手段３０５とソート結果出力手段３０６は、上記のマージ処理を再度行う。一方、当該ソート列について、未処理分が無ければ、共用ディスク・リード手段３０４は、当該ソート列についての処理完了をマージ手段３０５に通知し、マージ手段３０５は、当該ソート列を比較対象から除外し、残りのソート列についてマージ処理を行う。
【０１０１】
出力系ノードは、上記のソート列の読み込みからマージ／ソート結果出力までの処理を、出力系ノードのそれぞれに接続されている共用ディスク５００およびローカルディスク９００に格納されている全てのソート列を処理するまで繰り返す。以上のような処理により、各出力系ノードにおいて、各出力系ノードに接続されている共用ディスク５００およびローカルディスク９００に格納されているソート列が全てマージされ、入力系ノードのローカルディスク９００のソート対象データ格納領域９２０に格納されているソート対象データ全てについてのソート処理は完了し、各出力系ノードに分配されたソート処理結果が、出力系ノードに接続されている各ローカルディスク９００のソート結果格納領域９３０に得られる。
【０１０２】
本システムにおいても、第１及び第２のシステムと同様に、ソート列を共用ディスク５００に格納蓄積して処理するので、入力系ノードにおいてマージ処理を行う必要がなく、ソート処理に要する処理時間を削減して高速なソート処理を実現することができる。また、内部ソート処理を行う入力系ノードで実行されうる他の処理に与える遅延や阻害などの影響を低減することもできる。更に、ソート対象データに対し内部ソート処理を行う入力系ノードから出力系ノードへソート対象データやソート列をネットワーク経由で転送する必要がなくなり、ネットワーク７１０が高速でない場合であっても、高速なソート処理を実現することができる。
【０１０３】
なお、本システムでは、ソート対象データがローカルディスク９００のソート対象格納領域９２０に格納されている場合について説明したが、例えば、リモートディスクに格納されているソート対象データを、入力系ノードがネットワーク７１０経由で読み込むようにしてもよい。同様に、リモートディスクにソート処理結果を、出力系ノードがネットワーク７１０経由で出力するようにしてもよい。
【０１０４】
また、本システムでは、ひとつのローカルディスク９００中に、自ノード格納領域９１０や、ソート対象データ格納領域９２０や、ソート結果格納領域９３０等を有する場合について説明したが、例えば、各ノード８００が、複数のローカルディスク９００を有し、自ノード格納領域９１０、ソート対象データ格納領域９２０、およびソート結果格納領域９３０は、複数のローカルディスク９００の１台ずつにそれぞれ別個に存在するようにしてもよい。また、各共用ディスク５００は、領域Ａ５１０と領域Ｂ５２０の少なくとも２つの領域を有するとしたが、例えば、共用ディスク５００が各ノード８００の間に２台ずつ存在し、この２台の共用ディスク５００のそれぞれを、ノード８００間の双方向経路における片方向の経路として静的に割り当てて使用するようにしてもよい。
【０１０５】
本システムでは、ソート対象データが、ファイル名で識別される１つのファイルとして各ローカルディスク９００のソート対象データ格納領域９２０にそれぞれ格納されている場合について説明したが、例えば、ローカルディスク９００上の論理アドレスまたは物理アドレスを直接的に指定してソート対象データをローカルディスク９００から、ノード８００が読み込むようにしてもよい。また、１台のノード８００についてソート対象データが２つ以上のファイルとして存在してもよい。
【０１０６】
また、本システムにおいては、各共用ディスク５００は、２つのノード８００間に接続され、両者からアクセスされることになるが、共用ディスク５００が持つ領域Ａ５１０と領域Ｂ５２０は、当該共用ディスク５００に接続するノード８００間の双方向経路におけるそれぞれ片方向の経路に静的に割り当てて使用され、入力系ノードの入力モジュール８２０は、共用ディスク５００の割り当てられたいずれかの領域にソート列を格納（ライト）し、マージ指示の通知による各入力系ノードの入力モジュール８２０と各出力系ノードの出力モジュール８３０との間の同期の後、出力系ノードの出力モジュール８３０が共用ディスク５００の前記領域からソート片を読み出すため、前記領域に対するリード／ライトが同時に行われることはない。よって、共用ディスク５００の格納内容に対しノード間で排他制御をことさら行うことなく、上記の処理を不整合なく行うことができる。
【０１０７】
また、上述したソート対象データの読み込み処理、内部ソート処理、並びにソート列の格納処理では、各ノード８００において、入力モジュール８２０がバッファ８１０を使用している。また、ソート列の読み込み処理及びマージ／ソート結果出力処理では、各ノード８００において、出力モジュール８３０がバッファ８１０を使用している。そして、ソート対象データの読み込み処理、内部ソート処理、及び、ソート列の格納処理と、ソート列の読み込み処理、及びマージ／ソート結果出力処理は、全てのノード８００において、マージ指示の通知による入力モジュール８２０と出力モジュール８３０との間の同期によって時間的に分離されているので、各ノード８００において、バッファ８１０が入力モジュール８２０と出力モジュール８３０によって同時に使用されることはない。よって、各ノード８００において入力モジュール８２０と出力モジュール８３０に別個のバッファ領域を用意しなくても、バッファ８１０を入力モジュール８２０と出力モジュール８３０が共用できる。
【０１０８】
なお、以上説明した実施形態においては、各処理で扱うソート対象データ、ソート列、ソート片等のデータの量は、レコードを単位とする。よって、ソート対象データの読み込み処理で、ソート対象データを内部ソートバッファ１１０やバッファ８１０に読み込む場合や、共用ディスク５００やローカルディスク９００からのソート列の読み込み処理で、ソート片をマージバッファ３１０やバッファ８１０に読み込む場合などの読み込み量は、レコード単位となり、レコードからなる境界にそって読み込まれる。
【０１０９】
【発明の効果】
以上詳細に説明したように、本発明によれば、複数のコンピュータからなるコンピュータシステムで、複数のコンピュータがソート処理を並列に行う場合に必要となるマージ処理を削減し、高速なソート処理を実現することができる。また、コンピュータシステムで実行されうる他の処理に対しソート処理が与える遅延や阻害などの影響を低減することもできる。
【０１１０】
更に、ネットワークを介したデータ転送時間を削減し、ソート処理に要する処理時間を短縮して高速なソート処理を実現することができる。
【図面の簡単な説明】
【図１】  本発明による第１のソート処理システムのブロック図である。
【図２】  第１のシステムによるソート処理の概要を示すフローチャートである。
【図３】  第１のシステムにおけるシステム構成情報テーブルの例を示す図である。
【図４】  レコード情報テーブルの例を示す図である。
【図５】  ソート対象データの読み込み処理の流れを示すフローチャートである。
【図６】  第１のシステムにおける共用ディスク５００へのソート列の格納処理の流れを示すフローチャートである。
【図７】  ソート列格納ヘッダの例を示す図である。
【図８】  ソート列格納情報の例を示す図である。
【図９】  第１のシステムにおけるソート列の読み込み処理の流れを示すフローチャートである。
【図１０】  第１のシステムにおけるマージおよびソート結果出力処理の流れを示すフローチャートである。
【図１１】  本発明による第２のソート処理システムのブロック図である。
【図１２】  第２のシステムにおけるシステム構成情報テーブルの例を示す説明図。
【図１３】  第２のシステムにおける内部ソート処理の流れを示すフローチャートである。
【図１４】  第２のシステムにおけるソート列の格納処理の流れを示すフローチャートである。
【図１５】  本発明による第３のソート処理システムのブロック図である。
【図１６】  第３のシステムにおけるソート処理の概要を示すフローチャートである。
【図１７】  第３のシステムにおけるシステム構成情報テーブルの例を示す図である。
【符号の説明】
１００  入力ノード
１０１  入力ノードＣＰＵ
１０２  入力管理情報整合手段
１０３  データ読み込み手段
１０４  内部ソート手段
１０５  共用ディスク・ライト手段
１０６  マージ指示手段
１０７  出力ノード決定手段
１１０  内部ソートバッファ
２００  入力ローカルディスク
３００  出力ノード
３０１  出力ノードＣＰＵ
３０２  出力管理情報整合手段
３０３  マージ指示受領手段
３０４  共用ディスク・リード手段
３０５  マージ手段
３０６  ソート結果出力手段
３１０  マージバッファ
４００  出力ローカルディスク
５００  共用ディスク
５１０  領域Ａ
５２０  領域Ｂ
６００  ＩＯバスＩ／Ｆ
６１０  ＩＯバス
７００  ネットワークＩ／Ｆ
７１０  ネットワーク
８００  ノード
８０１  ＣＰＵ
８１０  バッファ
８２０  入力モジュール
８３０  出力モジュール
９００  ローカルディスク
９１０  自ノード格納領域
９２０  ソート対象データ格納領域
９３０  ソート結果格納領域
【図１】
0003774324.tif 000002
【図２】
0003774324.tif 000003
【図３】
0003774324.tif 000004
【図４】
0003774324.tif 000005
【図５】
0003774324.tif 000006
【図６】
0003774324.tif 000007
【図７】
0003774324.tif 000008
【図８】
0003774324.tif 000009
【図９】
0003774324.tif 000010
【図１０】
0003774324.tif 000011
【図１１】
0003774324.tif 000012
【図１２】
0003774324.tif 000013
【図１３】
0003774324.tif 000014
【図１４】
0003774324.tif 000015
【図１５】
0003774324.tif 000016
【図１６】
0003774324.tif 000017
【図１７】
0003774324.tif 000018