(57)【要約】  本発明は、分散計算方法及び分散計算システムを開示する。前記分散計算方法は、入力されたタスクフローに対して分散計算を行い；前記分散計算の計算結果に対してリダクションを行い；及び、前記リダクション後の計算結果をリダクションバッファに記憶することを含む。前記分散計算システムは、分散計算を行うための分散計算装置；前記分散計算の計算結果に対してリダクション処理を行うための複数のリダクションユニット；前記リダクションの計算結果を記憶するための一つの又は複数のリダクションバッファ；及び、前記計算結果の前記リダクションバッファへのリダクション、及び、リダクションバッファへのアクセスを制御するためのリダクション制御装置を含む。
2014507734.tif 000002
【特許請求の範囲】
【請求項１】
分散計算方法であって、
入力されたタスクフローに対して分散計算を行い；
前記分散計算の計算結果に対してリダクションを行い；及び
前記リダクション後の計算結果をリダクションバッファに記憶することを含む、分散計算方法。
【請求項２】
請求項1に記載の分散計算方法であって、
前記リダクションは、
前記計算結果を複数のリダクションユニットに割り当て；
リダクションユニットに割り当てられた計算結果に対してリダクション処理を行い；及び
リダクション処理後の計算結果をリダクションバッファに出力することを含む、分散計算方法。
【請求項３】
請求項2に記載の分散計算方法であって、
リダクション関数により計算されたリダクション値に基づいて、前記割り当てを行う、分散計算方法。
【請求項４】
請求項3に記載の分散計算方法であって、
前記リダクション値及び所属するタスクの標識に基づいて、前記割り当てを行う、分散計算方法。
【請求項５】
請求項2に記載の分散計算方法であって、
前記リダクション処理は、計算結果に対して後処理を行うことを更に含む、分散計算方法。
【請求項６】
請求項2に記載の分散計算方法であって、
同じリダクション値を有するリダクションユニットの計算結果を、同一リダクションバッファに出力する、分散計算方法。
【請求項７】
請求項1に記載の分散計算方法であって、
前記リダクションを行う前に、前記分散計算の計算結果に対してローカルバックアップを行う、分散計算方法。
【請求項８】
請求項2に記載の分散計算方法であって、
リダクションユニットに対応するリダクションバッファが書き込み不可の場合、前記計算結果を他のリダクションバッファにフォーワードする、分散計算方法。
【請求項９】
請求項8に記載の分散計算方法であって、
リダクションバッファがリセット又はクリアされている時に、前記リダクションバッファが書き込み不可である、分散計算方法。
【請求項１０】
請求項2に記載の分散計算方法であって、
全てのリダクションバッファが書き込み不可のときに、前記リダクション処理後の計算結果に対してローカルバックアップを行う、分散計算方法。
【請求項１１】
請求項2に記載の分散計算方法であって、
リダクション処理後の計算結果をリダクションバッファに出力した後に、前記計算結果に対してローカルバックアップを行う、分散計算方法。
【請求項１２】
請求項3又は4に記載の分散計算方法であって、
前記リダクション関数は、ハッシュ関数を含む、分散計算方法。
【請求項１３】
分散計算システムであって、
分散計算を行うための分散計算装置；
前記分散計算の計算結果に対してリダクション処理を行うための複数のリダクションユニット；
前記リダクション後の計算結果を記憶するための一つの又は複数のリダクションバッファ；及び
前記計算結果の前記リダクションバッファへのリダクション、及び、リダクションバッファへのアクセスを制御するためのリダクション制御装置を含む、分散計算システム。
【請求項１４】
請求項13に記載の分散計算システムであって、
リダクション関数により計算されたリダクション値に基づいて、前記計算結果を複数のリダクションユニットに割り当てる、分散計算システム。
【請求項１５】
請求項14に記載の分散計算システムであって、
同じリダクション値を有するリダクションユニットは、リダクション処理後の計算結果を同一リダクションバッファに出力する、分散計算システム。
【請求項１６】
請求項13〜15のうちのいずれか1項に記載の分散計算システムであって、
前記リダクションバッファは、リダクションバッファ内制御ユニット及びリダクションバッファ内記憶ユニットを含み、前記リダクションバッファ内制御ユニットは、リダクションバッファへの入力を受け、入力されたデータを、所定のデータ構造で、リダクションバッファ内記憶ユニットに記憶させる、分散計算システム。
【請求項１７】
請求項16に記載の分散計算システムであって、
前記リダクションバッファ内記憶ユニットは、少なくとも一部がメモリである、分散計算システム。
【請求項１８】
請求項13〜15のうちのいずれか1項に記載の分散計算システムであって、
前記リダクションユニットは、リダクションバッファに異常が発生した時にリダクションバッファを回復するために、リダクションユニット処理後のデータをバックアップするためのリダクション用ローカルバックアップユニットを含む、分散計算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、総体的に、分散計算及びストレージに関し、さらに具体的に、分散計算及び計算結果に対してリダクション（Reduction）を行う方法及び装置に関する。
【背景技術】
【０００２】
分散計算フレームワークが、通常、バッチ（一括）処理のシステムとして設計される。この種の分散システムでは、システムの安定性及びエラー回復を保証するために、同一計算ステップの計算ユニットの間には状態及びデータの交換がなく、異なる計算ステップの間には一般的にデータを磁気ディスクに書き込むことによりデータの交換を実現し、例えば、現在までのところ最も成熟した分散計算フレームワークHadoop（http://hadoop.apache.org/）のようである。図1は、このような分散計算フレームワークを示している。図1に示すように、分散計算グループ1は、計算スケジューリングユニット101及びk個の計算ノード1、2、…、kを含む。計算ノードは、一般的に、一つの物理コンピュータ又は仮想マシンであり、各計算ノードは、複数の計算ユニット、例えば、計算ユニット1_1、計算ユニット1_2、計算ユニット2_1、計算ユニット2_2などを含む。
【０００３】
図1に示す分散計算フレームワークでは、一つの計算タスクを実行する時に、計算スケジューリングユニット101は、タスクを若干のタスクセグメントに分け、各タスクセグメントのために一つの計算ユニットを起動させ、このように、各ノードの計算リソースを十分に利用することができる。一つの計算ノードは、自分の計算タスクを完了させた後に、結果を、後続のステップの使用に供するために、ファイルの形で磁気ディスクに書き込む。タスクの計算結果は、全ての計算ユニットの計算が完成した後のみに、後続のために使用され得る。
【０００４】
しかし、図1に示すような分散計算フレームワークを採用するなら、計算プロセスにおいて、完成されている一部の計算結果にアクセスすることができず、そのため、計算結果に対してのリアルタイムのアクセスを実現することができない。例えば、リアルタイムの検索タスクでは、１群のドキュメントに対して索引を作成し、従来の分散計算フレームワークは、この1群のドキュメントのうち全てのドキュメントの索引作成が完成する前に、検索を行うことができない。ドキュメントの索引の量は、通常、かなり大きく、新しく作成された索引は、リアルタイムで検索に用いることができなければ、検索のリアルタイム性は、大きく低下する。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
次に、本発明の幾つかの側面に関する基本理解を提供するために、本発明に関する簡単な概説を述べる。理解すべきは、この概説は、本発明に関する網羅的なものではない。それは、意図的に本発明のキー又は重要な部分を確定するものではなく、意図的に本発明の範囲を限定するものでもない。その目的は、簡略化した形で幾つかの概念（コンセプト）を提供することのみにあり、また、それは、後述の更なる詳しい説明の前書きとされる。
【０００６】
本発明の目的は、従来技術の上述の問題に鑑み、分散計算において計算が完了した結果にリアルタイムでアクセスし、高ロバスト性でそれを記憶することができる分散計算方法及び分散計算システムを提供することにある。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、分散計算方法が提供される。この方法は、入力されたタスクフローに対して分散計算を行い；前記分散計算の計算結果に対してリダクションを行い；及び、リダクションが行われた計算結果をリダクションバッファに記憶することを含む。
【０００８】
本発明の一つの具体的な実施例によれば、リダクションは、前記計算結果を複数のリダクションユニットに割り当て；リダクションユニットに割り当てられた計算結果に対してリダクション処理を行い；及び、リダクション処理後の計算結果をリダクションバッファに出力することを含む。
【０００９】
本発明の一つの具体的な実施例によれば、リダクション関数により計算されたリダクション値に基づいて前記割り当てを行う。
【００１０】
本発明の一つの具体的な実施例によれは、前記リダクション値及び所属するタスクの標識に基づいて前記割り当てを行う。
【００１１】
本発明の一つの具体的な実施例によれば、前記リダクション処理は、計算結果に対して後処理を行うことを更に含む。
【００１２】
本発明の一つの具体的な実施例によれば、同じリダクション値を有するリダクションユニットの計算結果を同一リダクションバッファに出力する。
【００１３】
本発明の一つの具体的な実施例によれば、前記リダクションを行う前に、前記分散計算の計算結果に対してローカルバックアップを行う。
【００１４】
本発明の一つの具体的な実施例によれば、リダクションユニットに対応するリダクションバッファが書き込み不可の場合、前記計算結果を他のリダクションバッファにフォーワードする。
【００１５】
本発明の一つの具体的な実施例によれば、リダクションバッファがリセット又はクリアされている時に、前記リダクションバッファは書き込み不可である。
【００１６】
本発明の一つの具体的な実施例によれば、全てのリダクションバッファが書き込み不可の時に、前記リダクション処理後の計算結果に対してローカルバックアップを行う。
【００１７】
本発明の一つの具体的な実施例によれば、リダクション処理後の計算結果をリダクションバッファに出力した後に、前記計算結果に対してローカルバックアップを行う。
【００１８】
本発明の一つの具体的な実施例によれば、前記リダクション関数は、ハッシュ関数を含む。
【００１９】
本発明の他の側面によれば、分散計算システムが提供される。このシステムは、分散計算を行うための分散計算装置；前記分散計算の計算結果に対してリダクション処理を行うための複数のリダクションユニット；リダクションが行われた計算結果を記憶するための一つ又は複数のリダクションバッファ；及び、前記計算結果の前記リダクションバッファへのリダクション、及び、リダクションバッファへのアクセスを制御するためのリダクション制御装置を含む。
【００２０】
本発明の一つの具体的な実施例によれば、リダクション関数により計算されたリダクション値に基づいて、前記計算結果を複数のリダクションユニットに割り当てる。
【００２１】
本発明の一つの具体的な実施例によれば、同じリダクション値を有するリダクションユニットは、リダクション処理後の計算結果を同一リダクションバッファに出力する。
【００２２】
本発明の一つの具体的な実施例によれば、前記分散計算装置は、計算スケジューリングユニット及び複数の計算ユニットを含み、前記計算スケジューリングユニットは、入力されたタスクフローを複数のサブタスクに分け、前記複数のサブタスクを前記複数の計算ユニットに割り当てるために用いられ；及び、前記計算ユニットは、計算エンジン及び計算用ローカルバックアップユニットを含み、前記計算エンジンは、計算を行うために用いられ、前記計算用ローカルバックアップユニットは、前記計算エンジンの計算結果に対してローカルバックアップを行うために用いられる。
【００２３】
本発明の一つの具体的な実施例によれば、前記リダクションバッファは、リダクションバッファ内制御ユニット及びリダクションバッファ内記憶ユニットを含み、前記リダクションバッファ内制御ユニットは、リダクションバッファへの入力を受け、入力されたデータを所定のデータ構造でリダクションバッファ内記憶ユニットに記憶させる。
【００２４】
本発明の一つの具体的な実施例によれば、前記リダクションバッファ内記憶ユニットは、少なくとも一部がメモリである。
【００２５】
本発明の一つの具体的な実施例によれば、前記リダクションユニットは、リダクション用ローカルバックアップユニットを含み、リダクション用ローカルバックアップユニットは、リダクションバッファが異常の時にリダクションバッファを回復するように、リダクションユニットの処理後のデータをバックアップするために用いられる。
【００２６】
また、本発明の実施例は、上述の分散計算方法を実現するためのコンピュータプログラムをも提供する。
【００２７】
また、本発明の実施例は、さらに、少なくともコンピュータ可読媒体形式のコンピュータプログラムプロダクトをも提供し、その中には、上述の分散計算方法を実現するためのコンピュータプログラムコードが記録されている。
【図面の簡単な説明】
【００２８】
次の図面に基づく後述の説明を参照することにより、本発明をより良く理解することができる。そのうち、全ての図面には、同じ又は類似する符号を用い、同じ又は類似する部品を示す。これらの図面及び後述の詳細な説明はともに、本明細書に含まれて本明細書の一部を構成し、且つさらに、例を挙げて本発明の好適な実施例を説明し及び本発明の原理及び利点を解釈するために用いられる。
【図１】従来技術における分散計算フレームワークを示す図である。
【図２】本発明による分散計算システムの構造図である。
【図３】本発明による分散計算方法の例示的なフローチャートである。
【図４】図3におけるステップS301の具体的なフローチャートである。
【図５】図3におけるステップS303の具体的なフローチャートである。
【図６】図3におけるステップS308の具体的なフローチャートである。
【図７】リダクションバッファの読み取り操作の例示的なフローチャートである。
【図８】本発明による分散計算システムがリアルタイム検索分野における応用例を示す図である。
【図９】本発明の実施例の実施に用いられ得るコンピュータの例示的なブロック図である。
【発明を実施するための形態】
【００２９】
以下、図面を参照しながら本発明の実施例を説明する。本発明の一つの図面又は一つの実施形態に説明する要素及び特徴は、一つ又は複数の他の図面又は実施形態に示す要素及び特徴と組み合わせてもよい。なお、明確にするために、図面及び説明には、本発明と関係がなく、且つ、当業者に既知の部品及び処理の例示及び説明が省略される。
【００３０】
図2は、本発明による分散計算システムの構造図である。図2に示すように、本発明の一つの実施例による分散計算システムは、分散計算グループ21、リダクション制御装置22、及び一つ又は複数のリダクションノード23、24などを含む。分散計算グループ21は、計算スケジューリングユニット211及び一つ又は複数の計算ノードを含み、各計算ノードは、一つ又は複数の計算ユニットを含む。計算スケジューリングユニット211は、入力されたタスクフロー中のタスクを複数のサブタスクに分け、また、複数のサブタスクを各計算ユニットに割り当てて計算を行わせるために用いられる。計算ノードは、一つの物理コンピュータであってもよく、仮想マシンであってもよい。計算ノードは仮想マシンである時に、計算ノードの各計算ユニットは、複数の物理コンピュータに分散する可能性がある。分散計算グループ21は、複数のタスクを同時に処理することができる。
【００３１】
一つのリダクションノードは、一つのリダクションバッファ及び一つ又は複数のリダクションユニットを含む。リダクションノードは、一つの物理コンピュータであってもよく、仮想マシンであってもよい。リダクションノードは仮想マシンである時に、リダクションノードのリダクションバッファ及び各リダクションユニットは、複数の物理コンピュータに分散する可能性がある。物理又は論理上で同一リダクションノードに属するリダクションユニット及びリダクションバッファについて言えば、前記リダクションバッファは、前記リダクションユニットのローカルリダクションバッファである。なお、一つのリダクションノード内には、複数のリダクションバッファを設置してもよい。しかし、一つのリダクションノード内には、一つのリダクションバッファを設置すれば、リダクション処理を簡略化することに有利である同時に、リダクションバッファにおいてデータを構造化してデータ構造を生成することにも便利である。
【００３２】
リダクション制御装置22の制御の下で、リダクションユニットは、計算ユニットの計算結果（複数のタスクの複数のサブタスク）を受け、それに対してリダクション処理を行い、また、リダクション処理後の計算結果をリダクションバッファに出力する。リダクションユニットは、リダクションエンジン、リダクションユニット内バッファ、及びリダクション用ローカルバックアップユニットを有する。リダクションエンジンは、該リダクションユニットに入力された計算結果に対してリダクション処理を行うために用いられ、リダクション処理の最も簡単な場合は、計算結果をリダクションユニット内バッファに一時的に記憶させる。リダクション処理は、後処理を更に含む。後処理は、ユーザにより定義されてもよい。例えば、計算結果に対してキーによるソーティングなどの後続の処理を行ってもよい。リダクションユニットのリダクション用ローカルバックアップユニットは、リダクションユニットのデータに対してバックアップを行うために用いられ、これにより、リダクションバッファが異常の時に、リダクションバッファを回復するために用いられ得る。リダクションバッファの回復については、次に詳細に説明する。
【００３３】
なお、一つのリダクションユニットは、入力されたタスクフロー中の一つのタスクの一部の計算結果(即ち、一部のサブタスクの計算結果）のリダクションを担当し、即ち、一つのリダクションユニットは、一つのみのタスクの計算結果に対してリダクションを行う。一つのタスクの計算結果は、リダクション関数により割り当てられるリダクション値が異なるため、複数のリダクションユニットによりリダクションが行われる。リダクションユニットは、所属するタスクの標識を有し、所属するタスクの標識により、同一リダクション値に属するリダクションユニットに対して区分を行える。リダクションユニットの選択の詳細については、後述する。
【００３４】
リダクション制御装置22は、タスクフロー同期ユニット221、リダクションバッファ制御ユニット222、及び異常制御ユニット223を含む。タスクフロー同期ユニット221は、計算結果の計算ユニットからリダクションユニットへの割り当て、及び、リダクションユニットによるリダクションバッファへの書き込みを制御するために用いられ、リダクションバッファ制御ユニット222は、リダクションバッファへのアクセスを制御するために用いられ、異常制御ユニット223は、リダクションバッファへの書き込み及びアクセスのプロセスにおける異常処理を制御するために用いられる。なお、ここでは、タスクフロー同期ユニット221、リダクションバッファ制御ユニット222、及び異常制御ユニット223をリダクション制御装置の三つの構成部品として説明を行っているが、リダクション制御装置22は、上述の三つの単独のユニットを有せず、それらの全ての機能を実現することができる一つのユニットを有してもよい。
【００３５】
リダクションバッファは、リダクションバッファ内制御ユニット及びリダクションバッファ内記憶ユニットを含み、リダクションバッファ内制御ユニットは、リダクションバッファへの入力を受け、入力されたデータを所定のデータ構造でリダクションバッファ内記憶ユニットに記憶させるために用いられる。所定のデータ構造は、異なる計算タスクのニーズに応じて、ユーザにより定義されても良い。そのうち、リダクションバッファ内記憶ユニットは、アクセス速度を向上させ、また、データの構造化に便利であるように、少なくとも一部がメモリにより構成される。リダクション制御装置22には、リダクションデータのリダクションバッファにおける分布を記録するためのリダクションバッファリストがある。
【００３６】
図3は、本発明による分散計算方法のフローチャートである。ステップS301では、分散計算グループは、入力されたタスクを受け、タスクに対して分割を行い、また、タスクに対して計算を行う計算ユニットを生成する。ステップS302では、計算スケジューリングユニットは、所定のリダクション関数を用いて、計算ユニットにより計算されたサブタスクの計算結果のためにリダクション値を計算し、また、リダクション値をタスクフロー同期ユニットに通知する。リダクション関数は、ハッシュ関数などであってもよい。ステップS303では、タスクフロー同期ユニットは、リダクションの同期化を行い、リダクション値及びタスクの標識を用いてリダクションユニットを選択する。ステップS304では、計算結果をリダクションユニットに出力する。
【００３７】
ステップS304において異常が発生した場合、計算ユニットの異常がその中の計算結果の喪失をもたらしたら、ステップS305に進み、リダクションユニットに対応する計算結果のバックアップを取得し、また、ステップS302〜ステップS304のプロセスを再び実行する。計算結果のバックアップは、計算ユニットの磁気ディスク形式の計算用ローカルバックアップユニットに記憶されているので、計算ユニットが異常の場合に、計算ユニットの計算結果の正確性及び完全性を保つことができる。計算結果のバックアップについては、図4を参照しながら後述する。
【００３８】
ステップS304の実行時に異常が発生しなかった場合、ステップS306では、計算ユニットをリリースする。なお、この時に、計算ユニットのローカルバックアップをリリースしない。各計算ユニットのライフサイクルは、サブタスクを受けて生成されてから、該サブタスクの結果がリダクションユニットに成功裏に出力されるまでである。
【００３９】
なお、上述には、一つのタスクの一つのサブタスクを例として、ステップS302〜S306を説明した。複数のタスクは計算及びリダクションが行われ、各タスクは複数のサブタスクに分けられるため、上述のステップS302〜S306は、複数回行われる。
【００４０】
次に、一つのリダクションユニットを例としてステップS307〜S311を説明する。ステップS307では、リダクションユニットは、計算結果に対してリダクション処理を行う。上述のように、リダクションユニット中のリダクションエンジンは、リダクションユニットが受けた、一つのタスクに属する複数のサブタスクの計算結果に対してリダクション処理を行い、また、リダクションユニット内バッファに記憶させる。ここでは、リダクション処理の最も簡単な場合は、計算結果を記憶することである。リダクションエンジンは、さらに、ユーザによる事前の設定に基づいて、計算結果に対して後処理などの操作を行ってもよい。タスクフロー同期ユニットの制御の下で、リダクションユニットは、その担当の一つのタスクに属する複数のサブタスクの計算結果に対してリダクション処理を行った後に、リダクションユニットは、計算結果をリダクションバッファに出力する（ステップS308)。
【００４１】
なお、リダクションユニットが処理する複数のサブタスクは、逐一にステップS302〜S306を通過してリダクションユニットに入力されるのであるが、逐一にリダクションバッファに出力されるのではなく、ステップS307の後に、一緒にリダクションバッファに出力されるのである。一方では、ステップS307において、リダクションユニットのリダクションエンジンは、計算結果に対して後処理を行う可能性があり、単独で出力するなら、計算結果間の関係を保つことができない。他方では、リダクションユニットは、そのリダクションによる複数の計算結果を一緒にリダクションバッファに出力する時に、計算結果をも一緒にリダクションユニットのリダクション用ローカルバックアップユニットにバックアップし、このように、リダクションバッファが異常の時に、リダクション用ローカルバックアップユニットを正確に使用してリダクションバッファを回復することができる。
【００４２】
ステップS308又は他の状況においてリダクションバッファに異常が発生すれば、リダクション制御装置の異常制御ユニットの制御の下で、リダクションバッファをリセットさせ（ステップS315)、また、リダクションバッファリストに基づいて、リダクションバッファに対応する計算結果のバックアップ（リダクションユニットのリダクション用ローカルバックアップユニットに記憶されている）を取得し（ステップS316)、これにより、異常が発生する前のリダクションバッファを回復する。現在のリダクションユニットのデータについてリダクションを再び行い、即ち、ステップS302に戻す。
【００４３】
ステップS308において異常が発生しなければ、リダクションユニット内のデータが既にローカルバックアップされているかどうかを判断し（ステップS309)、また、「いいえ」と判断した場合に、ローカルバックアップを行う（ステップS310)。ステップS309では、「はい」と判断すれば、又は、ステップS310を実行した後に、即ち、リダクションユニットのローカルバックアップが完了した後に、リダクション制御装置のタスクフロー同期ユニットは、現在のリダクションユニットの所属するタスクの全てのサブタスクが全て既にリダクションされているかどうかを判断する（ステップS311)。ステップS311での判断結果が「いいえ」であれば、現在のリダクションユニットの処理を終了させる。
【００４４】
なお、一つのタスクの複数のサブタスクは、ユーザにより設定されているリダクション関数により、異なるリダクションユニットにリダクションされる。該タスクに属する他のリダクションユニットは、同時又はその後に、ステップS307〜S31Lをも実行する。
【００４５】
ステップS311での判断結果が「はい」であれば、該タスクに属する全てのリダクションユニットをリリースし（ステップS312)、また、ステップS313に進む。ステップS303においてリダクションユニットの数量が閾値に達していることにより、リダクションユニットに出力されず、リダクションキューに置かれる計算結果のある可能性がある。ステップS312においてリダクションユニットをリリースした後に、リダクションキューが空であるかそうかを判断し（ステップS313)、「いいえ」と判断すれば、リダクションキュー中のリダクションタスクを取り出し（ステップS314)、ステップS302に進み、取り出したリダクションタスクに対してリダクションを行う。ステップS313において「はい」と判断すれば、処理を終了させる。
【００４６】
次に、図4を参照しながら図3におけるステップS301について具体的に説明する。分散計算グループは、入力されたタスクフローにおける複数のタスクを取得する（ステップS41)。計算スケジューリングユニットは、少なくとも一つのリダクションバッファが書き込み可能な状態にあるかどうかを判断し（ステップS42)、全てのリダクションバッファが書き込み不可であれば、少なくとも一つのリダクションバッファが書き込み可能な状態になるまで繰り返しを続け；少なくとも一つのリダクションバッファが書き込み可能な状態にあれば、一つのタスクを複数のサブタスクに分け（ステップS43)、また、複数のサブタスクをサブタスクキューに置く（ステップS44)。
【００４７】
分散計算は、複数のタスクを同時に処理することができるので、サブタスクキューには、複数のタスクの複数のサブタスクが存在する。計算スケジューリングユニットは、稼動している計算ユニットの数量が閾値に達していないかどうかを判断し（ステップS45)、閾値に達している場合、判断結果が「はい」になるまで待ち続け；計算ユニットの数量が閾値に達していないと判断した時に、計算ユニットを生成し、また、該計算ユニットにより、サブタスクキュー中の一つのサブタスクに対して計算を行う（ステップS46)。計算ユニットは、計算エンジン及び計算用ローカルバックアップユニットを含み、計算エンジンは、計算を行うために用いられ、計算用ローカルバックアップユニットは、計算ユニットの計算が完了した後に、計算結果を出力する前に、前記計算結果をバックアップするために用いられ、これにより、図3のステップS305に用いる計算結果のバックアップを提供する(ステップS47)。
【００４８】
次に、図5を参照しながら図3におけるステップS303について具体的に説明する。タスクフロー同期ユニットは、計算スケジューリングユニットが所定のリダクション関数を用いて計算したリダクション値を取得し（ステップS501)、また、リダクション値に対応するリダクションユニットが存在するかどうかを判断し（ステップS502)、判断結果が「はい」である時に、該リダクションユニットの所属するタスクの標識と、現在の計算結果の所属するタスクの標識とが一致するかどうかを判断し（ステップS503)、判断結果が「はい」である時に、該リダクションユニットのアドレスを取得する（ステップS504)。即ち、そのリダクション値及びその所属するタスクの標識が全て現在の計算結果と同じであるリダクションユニットを見つけた時のみに、該リダクションユニットのアドレスを取得する。さもなければ（即ち、S502、S503において判断結果が「いいえ」である時に）、稼動しているリダクションユニットの数量が閾値に達していないかどうかを判断し（ステップS505)、「はい」と判断した時に、リダクションユニットを生成し、また、該リダクションユニットのリダクション値及び所属するタスクの標識を、現在の計算結果のリダクション値及び所属するタスクの標識と設定する（ステップS506)。
【００４９】
ステップS505において判断結果が「いいえ」である時に、現在のリダクションタスクをリダクションキューに置く（ステップS507)。タスク標識は、タスクの標識を行うために用いられ、一つのリダクションユニットは、一つのみのタスクの計算結果のリダクションを担当し、唯一のタスク標識を有する。リダクション値の役割は、同一タスクの複数のサブタスクの計算結果を複数のリダクションユニットにリダクションし、さらに、異なるリダクションバッファにリダクションすることにある。ユーザは、事前にリダクション関数を設定することにより具体的な設置を行ってもよく、例えば、索引作成の応用では、a-gで始まる単語の索引データを第一のリダクションバッファに置き、h-nで始まる単語の索引データを第二のリダクションバッファに置くように、リダクション関数を設置してもよい。同一タスクの複数のリダクションユニットは、異なるリダクション値を有し、また、異なるリダクションバッファに対応してもよい。同じリダクション値を有するリダクションユニットは、互いに、所属するタスクの標識により区分される。同じリダクション値を有するリダクションユニットは、リダクション処理の結果を同一リダクションバッファに出力する。リダクション値を用いて分散計算の計算結果を複数のリダクションユニットに割り当てることにより、さらに、計算負荷を分散させる役割を果たすこともできる。
【００５０】
次に、図6を参照しながら図3におけるステップS308について具体的に説明する。まず、ローカルリダクションバッファのアドレスを取得し、また、それを目的リダクションバッファと設置する（ステップS601)。上述のように、一つのリダクションユニットについて言えば、同一リダクションノードに属するリダクションバッファは、このリダクションユニットのローカルリダクションバッファであり、また、その第一選択（first  choice）の目的リダクションバッファとされる。もちろん、リダクションノードが仮想マシンである時に、このリダクションユニットのローカルリダクションバッファは、もう一つの物理コンピュータに位置する可能性がある。
【００５１】
その後、目的リダクションバッファが書き込み可能かどうかを判断し（ステップS602)、上述のように、リダクションバッファは、異常の発生によりリセットされている時に、書き込み不可の状態にある。なお、後述では、リダクションバッファは、クリアされている時にも書き込み不可の状態にあることをさらに説明する。この二つの場合、リダクションバッファは全て書き込み不可である。
【００５２】
ステップS602において目的リダクションバッファシステムが書き込み不可と判断した場合、目的バッファの所属するリダクションノードが隣接するノードを有するかどうかを判断し（ステップS603)、隣接するノードを有すると判断すれば、この隣接するノードのリダクションバッファを目的リダクションバッファと設置し（ステップS604)、また、ステップS602に戻して処理を行う。即ち、目的リダクションバッファが書き込み不可の時に、リダクションユニットのデータを、再指向後のリダクションバッファに書き込んでもよい。いわゆる「隣接する」とは、物理上の隣接することであってもよく、論理上の隣接することであってもよく、ユーザにより設定され得る。例えば、ユーザは、各リダクションノードのアドレスを一つのリンクリストに記憶させてもよく、リンクリストにおける最後の一つのデータの後は、該リンクリストの第一個のデータであり、そのうち、一つのリダクションノードの隣接するノードは、該リダクションノードがリンクリスト中のその後の一つのノードである。該リダクションノードの隣接するノードがその自身である時に、該リダクションノードは隣接するノードを有しないと判断する。リダクションユニットのデータが再指向により他のリダクションバッファに書き込まれる可能性があるので、リダクションバッファ内制御ユニットには、このような状況を記録する再指向リストがあり、リダクションバッファがダクションバッファへのアクセスを制御する時の使用に供する。
【００５３】
ステップS603において目的バッファが隣接するノードを有しないと判断すれば、現在のリダクションバッファシステムには書き込み可能なリダクションバッファが存在しないことを示し、よって、リダクションユニットのデータをリダクション用ローカルバックアップユニットにバックアップし（ステップS605)、また、リダクションバッファシステムが書き込み不可であるようにマークアップ（markup）し（ステップS606)、リダクションユニットの標識を書き込み阻塞キューに置く（ステップS607)。後述では、リダクションバッファシステムが書き込み可能になる時に、書き込み阻塞キューからリダクションユニットの標識を取り出し、図3中のステップS308を再び実行することを更に説明する。
【００５４】
ステップS602において目的バッファが書き込み可能と判断すれば、リダクションユニット中のデータを目的リダクションバッファに書き込む(ステップS608)。書き込んだ後に、目的リダクションバッファが所定のサイズを超えているかどうかを判断し(ステップS609)、判断結果が「いいえ」であれば、リダクションバッファに正確に出力していることを示し、図3中のステップS308が正常に終了する。判断結果が「はい」であれば、ステップS610に進み、リダクションバッファをクリアする。
【００５５】
なお、リダクションバッファをクリアしている時に、該リダクションバッファが書き込み不可であるが、この時に、リダクションバッファシステム全体は、必ずしも書き込み不可ではない。リダクションバッファのサイズは、予めユーザにより設定されてもよく、所定のサイズを越えた時に、リダクションバッファ中の現在のデータを全て磁気ディスクに書き込んだ上で、リダクションバッファをクリアする。なお、データを磁気ディスクに書き込んだが、リダクションバッファリストに、これらのデータのデータ構造が依然として保留され、これにより、外部から、リダクションバッファ制御ユニットにより、データ構造に従って、これらのデータにアクセスすることができる。これらのデータは、ハードディスクに記憶されているので、リダクションバッファが異常になることにより影響されないため、リダクションバッファに対応するリダクションユニットのローカルバックアップ及び計算ユニットのローカルバックアップを削除する（ステップS611)。
【００５６】
クリアされたリダクションバッファが存在するため、リダクションバッファシステムに、書き込み可能なリダクションバッファが少なくとも一つあるので、リダクションバッファシステムが書き込み可能であるようにマックアップし（ステップS612)、また、書き込み阻塞キューからリダクションユニットの標識を取り出し（ステップS613)、他のリダクションユニットのリダクションバッファシステムへの書き込み操作を実行する。
【００５７】
次に、図7を参照しながらリダクションバッファの読み出し操作について具体的に説明する。リダクションバッファ制御ユニットは、ユーザの入力を取得し(ステップS71)、リダクションバッファリストを取得し（ステップS72)、このリストを参照して入力に基づいて、リダクションバッファから対応する結果を取り出し（ステップS73)、また、各リダクションバッファから取り出した結果を併合する（ステップS74)。リダクションバッファに異常が発生すれば、リダクションユニットのローカルバックアップから、リダクションバッファを回復し(ステップS75)。そのうち、ステップS73は、各リダクションバッファから並列に結果を取り出してもよく、各リダクションバッファから直列に結果を取り出してもよい。そのうち、再指向の場合が存在するため、ステップS73では、リダクションバッファは、再指向リストアクセスに基づいて、他のリダクションバッファにアクセスすることによりデータを取得する可能性がある。
【００５８】
図8は、本発明による分散計算方法及び分散計算システムがリアルタイム検索分野における応用例を示している。まず、転置索引の生成について簡単に紹介する。一つのサブタスクの入力が、例えば、次のようなフォーマット、即ち、＜単語，該単語の所在するドキュメントのドキュメント標識＞を有する。仮にドキュメントl(dl)が次の単語、即ち、tl、t2、t3を含み、ドキュメント2(d2)が次の単語、即ち、tl、t3、t4を含むとする。この2つのドキュメントについて計算後の転置索引のフォーマットは、
tl:dl
tl:d2
t2:dl
t3:dl
t3:d2
t4:d2
のようになる。
【００５９】
リダクションが行われた後に、上述の索引は、次のようなフォーマット、即ち、
tl:dl,d2
t2:dl
t3:dl,d2
t4:d2
のようなフォーマットになる。
【００６０】
索引をさらに構造化するために、tl及びt2の索引は、一つのリダクションバッファに置かれ、t3及びt4の索引は、もう一つのリダクションバッファに置かれる。同時に、大規模データを処理するために、二つのリダクションバッファ中のデータは、検索を便利に行うために、ツリー構造として構成される。次に、具体的な実施を説明しながら上述の処理の例示的なフローチャートを示す。
【００６１】
リアルタイム検索の分散処理構造において、タスクは、２種類、即ち、索引タスク及び検索タスクに分けられる。一つの索引タスクは、一つのドキュメントセットであり、例えば、一万個の索引作成待ちのドキュメントである。リアルタイム環境では、新しいドキュメントセットを索引タスクキューに絶えずに追加する可能性がある。索引タスクスケジューリングユニット811(計算スケジューリングユニット）は、分散計算グループ81中の計算ユニット（索引ユニット1、2、…)が有する計算リソース（メモリ、CPU時間など）に基づいて、各索引タスク（即ち、一つのドキュメントセット）を若干のサブタスク（サブドキュメントセット）に分割し、その後、若干の計算ユニットを初期化して計算を行わせ、各計算ユニットは、一つのサブ索引タスクの計算タスク（ドキュメント解析、単語分け、転置など）を担当する。計算処理の後に、初歩的な転置索引が生成されており、同じ単語の転置索引がまとめて置かれている。
【００６２】
リダクションユニット801及び802は、リダクションバッファ1を共有（share）し、リダクションユニット803及び804は、リダクションバッファ2を共有する。ユーザは、リダクション関数を設定することにより、aで始まる単語及びbで始まる単語のリダクション値がリダクションバッファ1に対応するようにさせ、hで始まる単語及びiで始まる単語のリダクション値がリダクションバッファ2に対応するようにさせることができる。このように、リダクションユニット801は、aで始まる単語の索引を処理し、リダクションユニット802は、bで始まる単語の索引を処理し、リダクションユニット803は、hで始まる単語の索引を処理し、リダクションユニット804は、iで始まる単語の索引を処理する。同時に、リダクションバッファ1は、a〜gで始まる単語の索引を記憶し、リダクションバッファ2は、h〜nで始まる単語の索引を記憶し、リダクションバッファは、自分のツリー索引構造及びその読み取り／書き込みアクセスを維持する。
【００６３】
そのうち、リダクションユニットは、同一タスクの複数の計算結果を受け、複数の計算結果は、異なる計算ユニットからのものであるので、リダクションユニットのリダクション処理では、少なくとも、複数の計算結果に対して記憶を行う必要がある。同時に、ユーザのニーズ及び設置に応じて、リダクション処理では、受けた計算結果に対して後処理を行い、例えば、計算結果のキーによるソーティング（例えば、tl、t2、t3、…の順でソーティング）などを行う。一つのリダクションユニットは、一つのみのタスクの計算結果に対してリダクションを行い、これは、所属するタスクの標識により実現され得る。計算結果をリダクションユニットに割り当てる時に、さらに、計算結果とリダクションユニットの所属するタスクの標識が一致するかどうかを比較する。一つのタスクの全てのサブタスクが全てリダクション処理された後に、該タスクに対してリダクションを行うリダクションユニットをリリースする。入力が一つだけのタスクではなく、且つ、新しいタスクが絶えずに追加されるので、計算ユニット及びリダクションユニットには、同時に、一つ以上のタスクが計算及びリダクションされている可能性がある。異なるタスクには、同じキーの入力を有し、例えば、aで始まる単語の索引は、リダクション関数による計算後のリダクション値が、同一リダクションバッファに対応する異なるリダクションユニットに割り当てられる。これにより、最終的に、各タスクの計算結果は、ユーザにより設置されているニーズに従って、リダクションバッファ中のデータ構造に融和し得る。各タスクは、リダクションバッファにリダクションされた後に、直ぐに、検索のためにアクセスされ得る。検索タスクを受ければ、リダクション制御装置82は、リダクションバッファリストに基づいて、リダクションバッファにアクセスし、アクセスによる結果を検索タスクのリクエスト元に戻す。
【００６４】
上述の装置中の各構成モジュール及びユニットは、ソフトウェア、ファームウェア、ハードウェア又はそれらの組み合せの方式で構成されてもよい。構成に用いる具体的な手段は、当業者に既知であるので、ここでは、詳しい説明を省略する。ソフトウェア又はファームウェアにより実現する場合、記憶媒体又はネットワークから、専用ハードウェア構造を有するコンピュータ（例えば、図9に示す汎用コンピュータ900）に該ソフトウェアを構成するプログラムをインストールし、該コンピュータは、各種のプログラムがインストールされている時に、上述の各種の機能などを実行することができる。
【００６５】
図9に示すように、中央処理ユニット（ＣＰＵ）901が、リードオンリーメモリ（ＲＯＭ）902に記憶されているプログラム、又は、記憶部908からランダムアクセスメモリ（ＲＡＭ）903にロードされているプログラムに基づいて各種の処理を行う。ＲＡＭ903は、ニーズに応じて、ＣＰＵ901が各種の処理などを実行するときに必要なデータを記憶してもよい。ＣＰＵ901、ＲＯＭ902及びＲＡＭ903は、バス904を経由して互いに接続される。また、入力／出力インターフェース905もバス904に接続される。
【００６６】
入力／出力インターフェース905には、入力部906（キーボードやマウスなどを含む）、出力部分907（表示器例えばＣＲＴ、ＬＣＤ、スピーカーなどを含む）、記憶部908（ハードディスクなどを含む）、及び通信部909（ネットワーク接続カード例えばＬＡＮカード、モデムなどを含む）が接続される。通信部909は、ネットワーク例えばインターネットを経由して通信処理を行う。ドライブ910がニーズに応じて入力／出力インターフェース905に接続されてもよい。また、ニーズに応じて、取り外し可能な媒体911例えば磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどをドライブ910にセットすることにより、その中から読み出したコンピュータプログラムを記憶部908にインストールしてもよい。
【００６７】
ソフトウェアにより上述の一連の処理を実現する場合は、ネットワーク例えばインターネット、又は記憶媒体例えば取り外し可能な媒体911から、このソフトウェアを構成するプログラムをインストールしてもよい。
【００６８】
当業者が理解すべきは、このような記憶媒体は、中にプログラムが記憶されており、ユーザにプログラムを提供するよう装置と独立して配られる図9に示すような取り外し可能な媒体911に限定されない。取り外し可能な媒体911の例としては、磁気ディスク（フロッピー（登録商標）ディスクを含む）、光ディスク（ＣＤ−ＲＯＭ及びＤＶＤを含む）、光磁気ディスク（ＭＤ（登録商標）を含む）、及び半導体メモリを含む。或いは、記憶媒体はＲＯＭ902、記憶部908に含まれるハードディスクなどであってもよく、それらにはプログラムが記憶されており、且つそれらを含む装置とともにユーザに配られてもよい。
【００６９】
また、本発明は、マシン読取可能な命令コードを記憶しているプログラムプロダクトにも関する。この命令コードは、マシンに読み取られて実行される時に、上述の実施例による方法を実行させることができる。
【００７０】
それ相応に、上述のマシン読取可能な命令コードを記憶しているプログラムプロダクトをキャリーするための記憶媒体も本開示に含まれている。このような記憶媒体は、磁気ディスク（フロッピーディスク）、光ディスク、光磁気ディスク、メモリカード、メモリメモリスティックなどを含むが、これらに限定されない。
【００７１】
本発明の具体的な実施例について行った上述の説明では、一つの実施形態について説明した及び/又は示した特徴は、同じ又は類似する形で一つ又は複数の他の実施形態に用い、他の実施形態中の特徴と組み合わせ、又は、他の実施形態中の特徴を置換することができる。
【００７２】
強調すべきは、“包括（有する）/含む”というような語は、本文に用いる時に、特徴、部品全体、ステップ又は組み立て部品の存在を指すが、一つ又は複数の他の特徴、部品全体、ステップ又は組み立て部品の存在又は付加を排除しないことである。
【００７３】
また、本発明の上述の方法は、明細書に記載の又は図面に図示の時間順序に従って実行することに限定されず、他の時間順序に従って、並列に又は独立して実行してもよい。よって、本明細書又は図面に記載の方法の実行順序は、本発明の技術的範囲を限定しない。
【００７４】
以上、本発明の具体的な実施例を基に、本発明について説明したが、当業者が理解すべきは、上述の全ての実施例及び具体例は全て例示的なものだけであり、本発明の保護範囲を制限するものではない。当業者は、添付の特許請求の範囲の思想及び範囲内において、本発明に対してあらゆる変形及び変更などを行ってもよく、これらの変形及び変更なども、本発明の技術的範囲に属する。
【図１】
2014507734.tif 000003
【図２】
2014507734.tif 000004
【図３】
2014507734.tif 000005
【図４】
2014507734.tif 000006
【図５】
2014507734.tif 000007
【図６】
2014507734.tif 000008
【図７】
2014507734.tif 000009
【図８】
2014507734.tif 000010
【図９】
2014507734.tif 000011
【国際調査報告】
2014507734.tif 000012
2014507734.tif 000013
2014507734.tif 000014
2014507734.tif 000015