(57)【要約】【課題】分散データベースにおいて、タスクの割当てに起因するボトルネックを解消する。【解決手段】複数の計算機を有する計算機システムであって、複数の計算機の少なくとも一つの計算機は、処理の実行要求を受け付けた場合、処理が使用するデータを特定し、データベースを構成する複数の計算機の各々に、処理が使用するデータの有無を問い合わせるデータ問合せを行い、データ問合せに対する応答に基づいて処理が使用するデータを保持する計算機を特定し、特定された計算機に処理を割り当てる。【選択図】  図１
2018147301.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算機を有する計算機システムであって、
前記複数の計算機が有する記憶領域を用いて構築されたデータベースを有し、
前記複数の計算機は、プロセッサ、前記プロセッサに接続される記憶装置、及び前記プロセッサに接続されるネットワークインタフェースを有し、
前記複数の計算機の少なくとも一つの計算機が有する前記プロセッサは、
第１の処理の実行要求を受け付けた場合、前記第１の処理が使用するデータを特定し、
前記データベースを構成する複数の計算機の各々に、前記第１の処理が使用するデータの有無を問い合わせるデータ問合せを行い、
前記データ問合せに対する第１の応答に基づいて、前記第１の処理が使用するデータを保持する計算機を特定し、
前記特定された計算機に前記第１の処理を割り当てることを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記複数の計算機の少なくとも一つの計算機は、前記データ問合せの対象の計算機を選択するための絞込み情報を保持し、
前記複数の計算機の少なくとも一つの計算機が有するプロセッサは、前記絞込み情報に基づいて、前記データ問合せの対象の計算機を特定する計算機システム。
【請求項３】
請求項２に記載の計算機システムであって、
前記複数の計算機の少なくとも一つの計算機が有するプロセッサは、
前記データベースを構成する複数の計算機に、前記データベースに割り当てられる記憶領域に格納されるデータを検索するための索引情報の生成を指示し、
前記データベースを構成する複数の計算機から、前記データベースに割り当てられる記憶領域に格納されるデータに関する情報を含む第２の応答を受信し、
前記第２の応答に基づいて、前記絞込み情報を生成し、
前記データベースを構成する複数の計算機の各々が有するプロセッサは、
前記索引情報の生成の指示を受け付けた場合、前記索引情報を生成し、
前記第２の応答を送信し、
前記第１の処理が割り当てられた場合、前記索引情報に基づいて、前記データベースに割り当てられる記憶領域に格納されるデータを検索し、
前記検索されたデータを用いて前記第１の処理を実行することを特徴とする計算機システム。
【請求項４】
請求項３に記載の計算機システムであって、
前記複数の計算機の少なくとも一つの計算機は、前記データベースを構成する複数の計算機の構成及び稼働状態を管理する計算機管理情報を保持し、
前記複数の計算機の少なくとも一つの計算機が有するプロセッサは、
前記第１の処理が使用するデータを保持する計算機が複数存在する場合、前記計算機管理情報を参照し、
前記第１の処理が使用するデータを保持する複数の計算機の中から、前記第１の処理の負荷が小さい又は前記第１の処理の処理時間が短い計算機を選択し、
前記選択された計算機に前記第１の処理を割り当てることを特徴とする計算機システム。
【請求項５】
複数の計算機を有する計算機システムにおける処理の割当方法であって、
前記複数の計算機が有する記憶領域を用いて構築されたデータベースを有し、
前記複数の計算機は、プロセッサ、前記プロセッサに接続される記憶装置、及び前記プロセッサに接続されるネットワークインタフェースを有し、
前記処理の割当方法は、
前記複数の計算機の少なくとも一つの計算機が有する前記プロセッサが、第１の処理の実行要求を受け付けた場合、前記第１の処理が使用するデータを特定する第１のステップと、
前記複数の計算機の少なくとも一つの計算機が有する前記プロセッサが、前記データベースを構成する複数の計算機の各々に、前記第１の処理が使用するデータの有無を問い合わせるデータ問合せを行う第２のステップと、
前記複数の計算機の少なくとも一つの計算機が有する前記プロセッサが、前記データ問合せに対する第１の応答に基づいて、前記第１の処理が使用するデータを保持する計算機を特定する第３のステップと、
前記複数の計算機の少なくとも一つの計算機が有する前記プロセッサが、前記特定された計算機に前記第１の処理を割り当てる第４のステップと、
を含むことを特徴とする処理の割当方法。
【請求項６】
請求項５に記載の処理の割当方法であって、
前記複数の計算機の少なくとも一つの計算機は、前記データ問合せの対象の計算機を選択するための絞込み情報を保持し、
前記第１のステップは、前記複数の計算機の少なくとも一つの計算機が有するプロセッサが、前記絞込み情報に基づいて、前記データ問合せの対象の計算機を特定するステップを含むことを特徴とする処理の割当方法。
【請求項７】
請求項６に記載の処理の割当方法であって、
前記複数の計算機の少なくとも一つの計算機が有するプロセッサが、前記データベースを構成する複数の計算機に、前記データベースに割り当てられる記憶領域に格納されるデータを検索するための索引情報の生成を指示するステップと、
前記データベースを構成する複数の計算機の各々が有するプロセッサが、前記索引情報の生成の指示を受け付けた場合、前記索引情報を生成するステップと、
前記データベースを構成する複数の計算機の各々が有するプロセッサが、前記データベースに割り当てられる記憶領域に格納されるデータに関する情報を含む第２の応答を送信するステップと、
前記複数の計算機の少なくとも一つの計算機が有するプロセッサが、前記データベースを構成する複数の計算機から、前記第２の応答を受信するステップと、
前記複数の計算機の少なくとも一つの計算機が有するプロセッサが、前記第２の応答に基づいて、前記絞込み情報を生成するステップと、を含み
前記第４のステップは、
前記データベースを構成する複数の計算機の各々が有するプロセッサが、前記第１の処理が割り当てられた場合、前記索引情報に基づいて、前記データベースに割り当てられる記憶領域に格納されるデータを検索するステップと、
前記データベースを構成する複数の計算機の各々が有するプロセッサが、前記検索されたデータを用いて前記第１の処理を実行するステップと、
を含むことを特徴とする処理の割当方法。
【請求項８】
請求項７に記載の処理の割当方法であって、
前記複数の計算機の少なくとも一つの計算機は、前記データベースを構成する複数の計算機の構成及び稼働状態を管理する計算機管理情報を保持し、
前記第４のステップは、
前記複数の計算機の少なくとも一つの計算機が有するプロセッサが、前記第１の処理が使用するデータを保持する計算機が複数存在する場合、前記計算機管理情報を参照するステップと、
前記複数の計算機の少なくとも一つの計算機が有するプロセッサが、前記第１の処理が使用するデータを保持する複数の計算機の中から、前記第１の処理の負荷が小さい又は前記第１の処理の処理時間が短い計算機を選択するステップと、
前記複数の計算機の少なくとも一つの計算機が有するプロセッサが、前記選択された計算機に前記第１の処理を割り当てるステップと、
を含むことを特徴とする処理の割当方法。
【請求項９】
データベースを構成するタスク処理ノード及び前記タスク処理ノードにタスクを割り当てるタスク管理ノードを備える計算機システムであって、
前記タスク処理ノードは、第１のプロセッサ、前記第１のプロセッサに接続される第１のメモリ、前記第１のプロセッサに接続される記憶装置、及び前記第１のプロセッサに接続される第１のネットワークインタフェースを有し、
前記タスク管理ノードは、第２のプロセッサ、前記第２のプロセッサに接続される第２のメモリ、及び前記第２のプロセッサに接続される第２のネットワークインタフェースを有し、
前記タスク処理ノードは、
前記データベースに対するデータの入出力を制御するデータ管理モジュールと、
前記データベースからデータを検索する検索エンジンと、を有し、
前記タスク管理ノードは、
前記タスク処理ノードへのタスクの割当てを制御するタスク管理モジュールを有し、
前記タスク処理ノードの状態を管理するノード管理情報と、
タスクが使用するデータの有無を問い合わせるタスク処理ノードを選択するための絞込み情報と、を保持し、
前記タスク管理モジュールは、
第１のタスクの実行要求を受け付けた場合、前記第１のタスクの実行要求を解析することによって、前記第１のタスクが使用するデータを特定し、
前記絞込み情報に基づいて、前記第１のタスクが使用するデータの有無を問い合わせるデータ問合せの対象のタスク処理ノードを特定し、
前記特定されたタスク処理ノードに前記データ問合せを行い、
前記データ問合せに対する応答を受信し、
前記応答及び前記ノード管理情報に基づいて、前記第１のタスクを割り当てるタスク処理ノードを選択し、
前記選択されたタスク処理ノードに前記第１のタスクを割り当て、
前記検索エンジンは、
前記検索エンジンが稼働する前記タスク処理ノードが提供する記憶領域であって、前記データベースを構成する記憶領域に格納されるデータを検索するための索引情報を生成し、
前記第１のタスクが割り当てられた場合、前記索引情報に基づいて、前記データベースを構成する記憶領域に格納されるデータの中から、前記第１のタスクが使用するデータを検索し、
前記検索されたデータを用いて前記第１のタスクを実行することを特徴とする計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散データベースを有する計算機システムにおけるタスクの割当方法に関する。
【背景技術】
【０００２】
近年、データを分析等するために大量のデータを分散処理する場合、分散ＫＶＳ（Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ）等の分散データベースが用いられる。ＫＶＳには、Ｈａｓｈ値として与えられたＫｅｙ及び実際のデータであるＶａｌｕｅから構成されるキーバリューペアが格納される。
【０００３】
ＫＶＳでは、Ｋｅｙを検索キーとして用いた場合、高速にデータを検索できるが、Ｖａｌｕｅを検索キーとして用いた場合、データの検索速度が遅くなるという特徴を持つ。そのため、Ｖａｌｕｅを検索キーとして用いてデータを取得し、取得したデータを分析する場合、検索エンジン及びＫＶＳを組み合わせたシステムが用いられる。
【０００４】
また、データの分散配置と同様に、タスクを分散配置するシステムも用いられる。タスクを実行するノードの処理負荷が小さくなるため、データ分析処理を高速化できる。例えば、特許文献１には、ノード間の距離情報に基づいて効率的に負荷を分散させる技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開２０１４／０３７２６１１号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載の技術では、データの位置情報（索引情報）を管理するノードのスケールアウトが困難であるため、データの有無を問い合わせるデータ問合せの負荷が集中した場合、ボトルネックになるという問題がある。
【０００７】
前述のノードのスケールアウトができたと仮定した場合、データ問合せを分散できるが、データを管理するノードと索引情報を管理するノードとが別々であるため、管理が複雑になる。
【課題を解決するための手段】
【０００８】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、複数の計算機を有する計算機システムであって、前記複数の計算機が有する記憶領域を用いて構築されたデータベースを有し、前記複数の計算機は、プロセッサ、前記プロセッサに接続される記憶装置、及び前記プロセッサに接続されるネットワークインタフェースを有し、前記複数の計算機の少なくとも一つの計算機が有する前記プロセッサは、第１の処理の実行要求を受け付けた場合、前記第１の処理が使用するデータを特定し、前記データベースを構成する複数の計算機の各々に、前記第１の処理が使用するデータの有無を問い合わせるデータ問合せを行い、前記データ問合せに対する第１の応答に基づいて、前記第１の処理が使用するデータを保持する計算機を特定し、前記特定された計算機に前記第１の処理を割り当てることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、処理（タスク）を割り当てる場合に、データ問合せが特定の計算機に集中しないため、ボトルネックを解消することができる。前述した以外の課題、構成及び効果は、以下の実施例の説明によって明らかにされる。
【図面の簡単な説明】
【００１０】
【図１】実施例１の計算機システムの構成例を示す図である。
【図２】実施例１のタスク管理ノードが保持するノード管理情報の一例を示す図である。
【図３】実施例１の索引管理モジュールが実行する処理の一例を示すフローチャートである。
【図４】実施例１のタスク割当モジュールが実行する処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態について図面を用いて説明する。以下では、全図を通じて同一の構成に対しては同一の符号を付与して重複する説明を省略する。
【実施例１】
【００１２】
図１は、実施例１の計算機システムの構成例を示す図である。
【００１３】
実施例１の計算機システムは、タスク管理ノード１００及び複数のタスク処理ノード２００から構成される。
【００１４】
タスク管理ノード１００は、ネットワーク３００を介して各タスク処理ノード２００と接続する。ネットワーク３００は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）及びＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等が考えられる。また、ネットワーク３００の接続方式は無線又は有線のいずれでもよい。また、タスク管理ノード１００は、直接、各タスク処理ノード２００と接続してもよい。
【００１５】
タスク処理ノード２００は、分散データベースを構築する計算機であり、また、分散データベースに格納されるデータ２２１を用いてタスクを実行する。分散データベースは、タスク処理ノード２００が提供する記憶領域を用いて構成される。
【００１６】
本実施例は、分散データベースとしてＫＶＳを想定する。ＫＶＳにはキーバリューペアがデータ２２１として格納される。なお、本発明は、ＫＶＳに限定されるものではない。様々な分散データベースでも同様の効果を奏する。
【００１７】
タスク管理ノード１００は、タスク処理ノード２００に対するタスクの割当を管理する。より具体的には、タスク管理ノード１００は、クライアント端末等からタスク処理の実行要求を受信した場合、各タスク処理ノードに対して、タスクで使用するデータの有無を問い合わせるデータ問合せを行う。また、タスク管理ノード１００は、データ問合せに対する応答に基づいて、タスクを割り当てるタスク処理ノード２００を決定する。
【００１８】
ここで、タスク管理ノード１００及びタスク処理ノード２００のハードウェア構成及びソフトウェア構成について説明する。まず、タスク管理ノード１００の構成について説明する。
【００１９】
タスク管理ノード１００は、ＣＰＵ１０１、メモリ１０２、及びネットワークインタフェース１０３を有する。
【００２０】
ＣＰＵ１０１は、メモリ１０２に格納されるプログラムを実行する。ＣＰＵ１０１は、プログラムにしたがって処理を実行することによって所定の機能を実現するモジュールとして動作する。以下の説明では、モジュールを主語に説明する場合、ＣＰＵ１０１が当該モジュールを実現するプログラムを実行していることを示す。
【００２１】
メモリ１０２は、ＣＰＵ１０１が実行するプログラム及び当該プログラムによって使用される情報を格納する。また、メモリ１０２は、プログラム等が一時的に使用するワークエリアを含む。メモリ１０２に格納されるプログラム及び情報は後述する。
【００２２】
ネットワークインタフェース１０３は、ネットワーク３００を介して他の装置と通信するためのインタフェースである。
【００２３】
ここで、メモリ１０２に格納されるプログラム及び情報について説明する。本実施例のメモリ１０２は、タスク管理モジュール１１１を実現するプログラム、ノード管理情報１１２、及び絞込み情報１１３を格納する。
【００２４】
タスク管理モジュール１１１は、タスクの実行要求を受け付け、タスクの実行要求を解析して当該タスクが使用するデータを特定し、データ問合せを行う。本実施例では、タスク管理モジュール１１１は、データ問合せを行う前に、当該問合せの対象のタスク処理ノード２００を特定し、特定されたタスク処理ノード２００に対してデータ問合せを行う。
【００２５】
また、タスク管理モジュール１１１は、データ問合せの結果に基づいてタスクを割り当てるタスク処理ノード２００を選択し、選択されたタスク処理ノード２００にタスクを割り当てる。
【００２６】
タスク管理モジュール１１１は、索引管理モジュール１３１、タスク割当モジュール１３２、及び検索問合せモジュール１３３を含む。
【００２７】
索引管理モジュール１３１は、各タスク処理ノード２００に、索引情報２２２の生成又は更新を指示する。また、索引管理モジュール１３１は、絞込み情報１１３を生成する。
【００２８】
タスク割当モジュール１３２は、タスクの実行要求を解析し、解析結果及び絞込み情報１１３に基づいて、データ問合せの対象のタスク処理ノード２００を特定し、その後、検索問合せモジュール１３３を呼び出す。また、タスク割当モジュール１３２は、データ問合せに対する応答に基づいて、タスクを割り当てるタスク処理ノード２００を選択し、選択されたタスク処理ノード２００にタスクを割り当てる。
【００２９】
検索問合せモジュール１３３は、タスク割当モジュール１３２によって選択されたタスク処理ノード２００に対してデータ問合せを行う。
【００３０】
ノード管理情報１１２は、タスク処理ノード２００の構成及び稼働状態を管理する情報である。ノード管理情報１１２の詳細は、図２を用いて説明する。なお、ノード管理情報は、計算機管理情報と呼ばれてもよい。
【００３１】
絞込み情報１１３は、データ問合せの対象のタスク処理ノード２００を特定するための指標となる情報である。絞込み情報１１３としては、例えば、Ｂｌｏｏｍ  Ｆｉｌｔｅｒにおけるビット配列が考えられる。また、タスク処理ノード２００の識別情報と、データ２２１のＶａｌｕｅとを対応付けたリスト形式の絞込み情報１１３も考えられる。
【００３２】
なお、問合せ方法を指定するアルゴリズムは予め設定されているものとする。Ｂｌｏｏｍ  Ｆｉｌｔｅｒを用いた問合せ方法以外の方法としては、シーケンシャルにタスク処理ノード２００へ問い合わせる方法、全てのタスク処理ノード２００へ同時に問い合わせる方法等が考えられる。
【００３３】
次に、タスク処理ノード２００の構成について説明する。
【００３４】
タスク処理ノード２００は、ＣＰＵ２０１、メモリ２０２、記憶装置２０３、及びネットワークインタフェース２０４を有する。ＣＰＵ２０１、メモリ２０２、及びネットワークインタフェース２０４は、ＣＰＵ１０１、メモリ１０２、及びネットワークインタフェース１０３と同様のものであるため説明を省略する。
【００３５】
記憶装置２０３は、データを永続的に格納する。記憶装置２０３は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）及びＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等が考えられる。本実施例では、記憶装置２０３の記憶領域を用いて分散データベースが構築される。なお、メモリ２０２の記憶領域を用いて分散データベースが構築されてもよい。また、メモリ２０２及び記憶装置２０３のそれぞれの記憶領域を用いて分散データベースが構築されてもよい。
【００３６】
メモリ２０２は、検索エンジン２１１及びデータ管理モジュール２１２を実現するプログラムを格納する。
【００３７】
検索エンジン２１１は、索引情報２２２を用いてデータを検索する。検索エンジン２１１は、索引情報２２２の生成及び更新を行う。検索エンジン２１１は、タスク管理ノード１００からデータ問合せを受け付けた場合、データ２２１を参照して、対象のデータの有無を判定し、また、判定結果を含む応答をタスク管理ノード１００に送信する。また、検索エンジン２１１は、タスクが割り当てられた場合、索引情報２２２を用いて対象のデータを取得し、当該データを用いて割り当てられたタスクを実行する。
【００３８】
なお、タスクを実行する機能は、検索エンジン２１１に含めなくてもよい。例えば、タスク実行モジュールとして実現してもよい。
【００３９】
データ管理モジュール２１２は、分散データベースを管理する。より具体的には、データ管理モジュール２１２は、分散データベースに格納されるデータ２２１に対するアクセスを制御する。
【００４０】
記憶装置２０３は、データ２２１及び索引情報２２２を格納する。
【００４１】
データ２２１は、分散データベースに格納されるデータである。索引情報２２２は、検索エンジン２１１が分散データベースに格納されるデータ２２１を検索するための情報である。本実施例では、検索エンジン２１１が稼働するタスク処理ノード２００が管理するデータ２２１を検索するための索引情報２２２が生成される。
【００４２】
なお、索引情報２２２は、Ｋｅｙ、Ｖａｌｕｅ、データの名称、データの種別、及びデータの範囲等を検索キーとして用いてデータを検索できるような情報である。例えば、検索キー（インデックス）と、ＵＲＬ又はディレクトリ名等のデータ２２１の格納場所とを対応付けたリスト形式の索引情報２２２が考えられる。
【００４３】
図２は、実施例１のタスク管理ノード１００が保持するノード管理情報１１２の一例を示す図である。
【００４４】
ノード管理情報１１２は、ノード名３０１、ＩＰアドレス３０２、負荷３０３、ネットワーク３０４、及び距離３０５から構成されるエントリを含む。一つのエントリが一つのタスク処理ノード２００に対応する。なお、エントリは、前述以外のフィールドを含んでもよい。例えば、タスク処理ノード２００が有するＣＰＵ２０１及びメモリ２０２の性能を示す値を格納するフィールドが含まれてもよい。
【００４５】
ノード名３０１は、タスク処理ノード２００の識別情報である。ＩＰアドレス３０２は、タスク処理ノード２００に割り当てられたＩＰアドレスである。
【００４６】
負荷３０３は、タスク処理ノード２００の処理負荷を示す情報である。本実施例では、負荷３０３には、ＣＰＵ２０１の使用率が格納される。なお、負荷３０３には、メモリ使用量及び実行しているタスク数等の値が格納されてもよい。
【００４７】
ネットワーク３０４は、タスク処理ノード２００の通信負荷を示す情報である。本実施例では、ネットワーク３０４には通信の遅延時間が格納される。なお、ネットワーク３０４には、ジッタ及びパケット廃棄率等の値が格納されてもよい。
【００４８】
距離３０５は、タスク管理ノード１００とタスク処理ノード２００との間の物理的な距離を示す情報である。本実施例では、距離３０５には、タスク処理ノード２００の配置場所を示す情報が格納される。
【００４９】
図３は、実施例１の索引管理モジュール１３１が実行する処理の一例を示すフローチャートである。
【００５０】
索引管理モジュール１３１は、索引情報２２２の生成／更新要求を受け付けた場合、以下で説明する索引情報２２２の生成／更新処理を開始する（ステップＳ１０１）。ここでは、索引管理モジュール１３１は、複数のタスク処理ノード２００の中からターゲットタスク処理ノード２００を一つ選択する。
【００５１】
なお、索引情報２２２の生成／更新要求は、タスク処理ノード２００が追加された場合、分散データベースにデータ２２１が追加された場合、又は、周期的に、タスク管理モジュール１１１によって発行される。
【００５２】
索引管理モジュール１３１は、ターゲットタスク処理ノード２００に索引情報の生成／更新指示を送信する（ステップＳ１０２）。索引管理モジュール１３１は、ターゲットタスク処理ノード２００からの応答を受信するまで待ち状態に移行する。
【００５３】
ターゲットタスク処理ノード２００の検索エンジン２１１は、当該指示を受信した場合、データ２２１を参照して、索引情報２２２を生成し、又は、更新する。索引情報２２２を生成又は更新した後、処理の完了を通知する応答をタスク管理ノード１００に送信する。
【００５４】
本実施例では、ターゲットタスク処理ノード２００は、絞込み情報１１３を生成するための情報として、ターゲットタスク処理ノード２００が保持するデータ２２１に関する情報も合わせて送信する。例えば、Ｂｌｏｏｍ  Ｆｉｌｔｅｒを適用した場合、データ２２１を入力とするハッシュ関数の値が送信される。また、データ２２１のメタデータが送信されてもよい。
【００５５】
索引管理モジュール１３１は、ターゲットタスク処理ノード２００から応答を受信した場合（ステップＳ１０３）、全てのタスク処理ノード２００について処理が完了したか否かを判定する（ステップＳ１０４）。
【００５６】
全てのタスク処理ノード２００について処理が完了していないと判定された場合、索引管理モジュール１３１は、ステップＳ１０１に戻り、新たなターゲットタスク処理ノード２００を選択する。
【００５７】
全てのタスク処理ノード２００について処理が完了したと判定された場合、索引管理モジュール１３１は、絞込み情報１１３を生成する（ステップＳ１０５）。その後、索引管理モジュール１３１は、処理を終了する。
【００５８】
例えば、Ｂｌｏｏｍ  Ｆｉｌｔｅｒを適用した場合、索引管理モジュール１３１は、各タスク処理ノード２００から受信したハッシュ関数の値に基づいて、ビット配列を絞込み情報１１３として生成する。
【００５９】
図３で説明したように、本実施例では、ローカリティを考慮して、各タスク処理ノード２００は、自身の記憶領域に格納されるデータ２２１を検索するための索引情報２２２を作成する。これによって、ローカリティを考慮したタスクの割当を実現できる。また、索引情報２２２のサイズは小さいため、高速にデータを検索でき、また、記憶領域の有効活用が可能となる。
【００６０】
図４は、実施例１のタスク割当モジュール１３２が実行する処理の一例を説明するフローチャートである。
【００６１】
タスク割当モジュール１３２は、クライアント端末からタスクの実行要求を受信した場合、以下で説明する処理を開始する。なお、タスクの実行要求には、データの名称、種別、及び値の範囲等、タスクが使用するデータ２２１を特定するための情報が含まれる。以下の説明では、タスクが使用するデータ２２１をターゲットデータ２２１とも記載する。
【００６２】
タスク割当モジュール１３２は、データ問合せの対象のタスク処理ノード２００を特定する（ステップＳ２０１）。
【００６３】
具体的には、タスク割当モジュール１３２は、タスクの実行要求を解析し、ターゲットデータ２２１を特定するための情報を取得する。タスク割当モジュール１３２は、当該情報及び絞込み情報１１３を用いて、ターゲットデータ２２１を保持すると予測されるタスク処理ノード２００を、データ問合せの対象のタスク処理ノード２００として特定する。例えば、タスク処理ノード２００の識別情報と、データ２２１のＶａｌｕｅとを対応付けたリスト形式の絞込み情報１１３の場合、タスク割当モジュール１３２は、絞込み情報１１３を参照し、データ２２１のＶａｌｕｅに対応付けられたタスク処理ノード２００の識別情報を取得する。これによって、タスク処理ノード２００を特定できる。
【００６４】
絞込み情報１１３を用いることによって、データ問合せの対象のタスク処理ノード２００の数を削減できる。これによって、当該問合せに伴うシステムの負荷を低減及び処理の高速化を実現できる。
【００６５】
なお、タスク割当モジュール１３２は、ターゲットデータ２２１を特定するための情報及び絞込み情報１１３の他に、ノード管理情報１１２を考慮して、データ問合せの対象のタスク処理ノード２００を特定してもよい。
【００６６】
タスク割当モジュール１３２は、問合せ処理を開始する（ステップＳ２０２）。ここでは、特定されたタスク処理ノード２００の中からターゲットタスク処理ノード２００を一つ選択する。
【００６７】
タスク割当モジュール１３２は、ターゲットタスク処理ノード２００に、データ問合せを行う（ステップＳ２０３）。なお、当該データ問合せには、ターゲットデータ２２１を特定するための情報が含まれる。
【００６８】
タスク処理ノード２００の検索エンジン２１１は、データ問合せを受信した場合、ターゲットデータ２２１を特定するための情報に基づいて索引情報２２２を参照して、ターゲットデータ２２１を検索する。例えば、検索エンジン２１１は、索引情報２２２を参照し、Ｖａｌｕｅ、データの名称、データの種類、又はデータの範囲に一致するレコードを検索する。検索エンジン２１１は、検索結果を含む応答をタスク管理ノード１００に送信する。検索結果には、少なくとも、ターゲットデータの有無を示す情報が含まれる。なお、検索されたターゲットデータに関する情報を含んでもよい。例えば、保持するターゲットデータ２２１の数を示す情報、及び保持するターゲットデータ２２１の種別を示す情報等が検索結果に含まれてもよい。
【００６９】
タスク割当モジュール１３２は、ターゲットタスク処理ノード２００から応答を受信した場合（ステップＳ２０４）、特定された全てのタスク処理ノード２００について処理が完了したか否かを判定する（ステップＳ２０５）。
【００７０】
特定された全てのタスク処理ノード２００について処理が完了していないと判定された場合、タスク割当モジュール１３２は、ステップＳ２０２に戻り、新たなターゲットタスク処理ノード２００を選択する。
【００７１】
特定された全てのタスク処理ノード２００について処理が完了したと判定された場合、タスク割当モジュール１３２は、ノード管理情報１１２を参照し（ステップＳ２０６）、タスクを割り当てるタスク処理ノード２００を選択する（ステップＳ２０７）。例えば、以下のような処理が考えられる。
【００７２】
タスク割当モジュール１３２は、ターゲットデータ２２１を保持するタスク処理ノード２００が複数存在する場合、ＣＰＵ使用率の低い順に所定の数のタスク処理ノード２００を選択する。また、別の方法としては、ネットワーク遅延が所定の閾値より小さいタスク処理ノード２００を選択する方法も考えられる。すなわち、ターゲットデータ２２１を保持するタスク処理ノード２００の中から、タスクの処理負荷が小さいタスク処理ノード２００又はタスクの処理時間が短いタスク処理ノード２００が選択される。
【００７３】
タスク割当モジュール１３２は、ターゲットデータ２２１を保持するタスク処理ノード２００の処理負荷が高い場合、ＣＰＵ使用率が低いタスク処理ノード２００、物理的距離が近いタスク処理ノード２００、又はネットワーク遅延が小さいタスク処理ノード２００を選択する。すなわち、ターゲットデータ２２１を保持しないタスク処理ノード２００の中から、タスクの処理負荷が小さいタスク処理ノード２００又はタスクの処理時間が短いタスク処理ノード２００が選択される。
【００７４】
この場合、選択されたタスク処理ノード２００には、ターゲットデータ２２１を保持するタスク処理ノード２００の識別情報を含む情報が送信される。これによって、選択されたタスク処理ノード２００は、データ問合せを行うことなく、ターゲットデータ２２１を取得することができる。
【００７５】
本実施例では、タスク割当モジュール１３２は、ノード管理情報１１２に基づいて、タスクの実行するタスク処理ノード２００が偏らないように、タスク処理ノード２００にタスクを割り当てる。これによって、一つのタスク処理ノード２００にタスクが集中することによって発生するボトルネックを解消できる。
【００７６】
なお、選択基準及び選択数は、予め設定されているものとする。ただし、選択基準及び選択数は、適宜更新できる。以上がステップＳ２０７の処理の一例である。
【００７７】
タスク割当モジュール１３２は、選択されたタスク処理ノード２００にタスクを割当て（ステップＳ２０８）、処理を終了する。
【００７８】
なお、タスク割当モジュール１３２は、ターゲットデータ２２１を保持する旨の応答を受信した場合、ループ処理を終了してもよい。この場合、データ問合せを行っていないタスク処理ノード２００は、ターゲットデータ２２１を保持していないものとして扱われる。また、ステップＳ２０６及びステップＳ２０７の処理は省略され、ステップＳ２０８では、タスク割当モジュール１３２は、前述の応答を送信したタスク処理ノード２００にタスクを割り当てる。
【００７９】
なお、タスク割当モジュール１３２は、複数のタスク処理ノード２００にタスクを割り当てる場合、同一内容のタスクを割り当ててもよいし、処理内容が異なるタスクを割り当ててもよい。
【００８０】
なお、選択されたタスク割当モジュール１３２がタスクを実行できない場合も考えられる。そこで、タスク割当モジュール１３２は、ステップＳ２０７において選択されなかったタスク処理ノード２００の識別情報を含むタスク転送情報を送信してもよい。タスクが割り当てられたタスク処理ノード２００がタスクを実行できない場合、タスク転送情報に基づいて、他のタスク処理ノード２００にタスクを割り当てる。これによって、タスク割当モジュール１３２は、再度、問合せ処理を実行する必要がない。
【００８１】
実施例１によれば、各タスク処理ノード２００が索引情報２２２を保持するため、各タスク処理ノード２００にデータ問合せを行うことができる。そのため、タスク割当時における索引情報２２２へのアクセスを分散できる。また、タスク処理ノード２００のスケールアウトによって、データ問合せの負荷を削減できる。
【００８２】
タスク処理ノード２００が追加された場合、当該タスク処理ノード２００のみが索引情報２２２を作成すればよい。各タスク処理ノード２００が保持する索引情報２２２は依存関係を有さないため、タスク処理ノード２００間で索引情報２２２を送受信する必要ない。したがって、タスク処理ノード２００の追加に伴う通信量の増加を抑制でき、スケールアウトも容易にできる。データが追加された場合も同様にタスク処理ノード２００間の通信量の増加を抑制できる。
【００８３】
また、データ２２１を管理するノード及び索引情報２２２を管理するノードが同一であるため、管理も容易となる。
【００８４】
また、データを保持するタスク処理ノード２００にタスクが割り当てられるため、タスク処理ノード２００間の通信の発生が抑制される。これによって、タスクの実行に伴うタスク処理ノード２００間の通信量を削減できる。
【実施例２】
【００８５】
実施例２では、タスク管理ノード１００が有する機能を各タスク処理ノード２００に含める。以下、実施例１との差異を中心に実施例２について説明する。実施例１と共通する構成、情報、及び処理の説明は省略する。
【００８６】
実施例２の計算機システムはタスク管理ノード１００を含まない。各タスク処理ノード２００が、タスク管理モジュール１１１、ノード管理情報１１２、及び絞込み情報１１３を保持する。タスク処理ノード２００の他の構成は、実施例１のタスク処理ノード２００と同一である。
【００８７】
実施例２では、各タスク処理ノード２００は、タスク管理ノード１００の機能を有する。そのため、各タスク処理ノード２００は、クライアント端末からタスクの実行要求を受け付けることができる。
【００８８】
実施例２の索引管理モジュール１３１が実行する処理は、実施例１で示した処理と同一である。なお、各タスク処理ノード２００の索引管理モジュール１３１が処理を実行できるため、検索エンジン２１１は、索引情報２２２の生成／更新指示を前回受信したから所定時間経過していない場合には、索引情報２２２を生成又は更新しなくてもよい。
【００８９】
実施例２のタスク割当モジュール１３２が実行する処理は、実施例１で示した処理と同一である。
【００９０】
実施例２の計算機システム、実施例１の計算機システムと同様の効果を奏する。
【００９１】
特許請求の範囲に記載した以外の発明の観点の代表的なものとして、次のものがあげられる。
（１）データベースを構成する複数の計算機を管理する管理計算機が実行するプログラムであって、
前記管理計算機は、プロセッサ、前記プロセッサに接続される記憶装置、及び前記プロセッサに接続されるネットワークインタフェースを有し、
第１の処理の実行要求を受け付けた場合、前記第１の処理が使用するデータを特定する第１の手順と、
前記データベースを構成する複数の計算機の各々に、前記第１の処理が使用するデータの有無を問い合わせるデータ問合せを行う第２の手順と、
前記データ問合せに対する第１の応答に基づいて、前記第１の処理が使用するデータを保持する計算機を特定する第３の手順と、
前記特定された計算機に前記第１の処理を割り当てる第４の手順と、前記管理計算機に実行させることを特徴とするプログラム。
（２）（１）に記載の処理のプログラムであって、
前記管理計算機は、前記データ問合せの対象の計算機を特定するための絞込み情報を保持し、
前記第１の手順では、前記絞込み情報に基づいて前記データ問合せの対象の計算機を特定することを特徴とするプログラム。
（３）（２）に記載のプログラムであって、
前記データベースを構成する複数の計算機に、前記データベースに割り当てられる記憶領域に格納されるデータを検索するための索引情報の生成を指示する手順と、
前記データベースを構成する複数の計算機から、前記データベースに割り当てられる記憶領域に格納されるデータに関する情報を含む第２の応答を受信する手順と、
前記第２の応答に基づいて、前記絞込み情報を生成する手順と、を前記管理計算機に実行させることを特徴とするプログラム。
（４）（３）に記載の処理のプログラムであって、
前記管理計算機は、前記データベースを構成する複数の計算機の状態を管理する状態管理情報を保持し、
前記第４の手順は、
前記第１の処理が使用するデータを保持する計算機が複数存在する場合、前記状態管理情報を参照する手順と、
前記第１の処理が使用するデータを保持する複数の計算機の中から、前記第１の処理の負荷が小さい又は前記第１の処理の処理時間が短い計算機を選択する手順と、
前記選択された計算機に前記第１の処理を割り当てる手順と、を含むことを特徴とするプログラム。
【００９２】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【００９３】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるＣＰＵが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【００９４】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｊａｖａ（登録商標）等の広範囲のプログラム又はスクリプト言語で実装できる。
【００９５】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、コンピュータが備えるＣＰＵが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【００９６】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【００９７】
１００  タスク管理ノード
１０１、２０１  ＣＰＵ
１０２、２０２  メモリ
１０３、２０４  ネットワークインタフェース
１１１  タスク管理モジュール
１１２  ノード管理情報
１１３  絞込み情報
１３１  索引管理モジュール
１３２  タスク割当モジュール
１３３  検索問合せモジュール
２００  タスク処理ノード
２０３  記憶装置
２１１  検索エンジン
２１２  データ管理モジュール
２２１  データ
２２２  索引情報
【図１】
2018147301.tif 000003
【図２】
2018147301.tif 000004
【図３】
2018147301.tif 000005
【図４】
2018147301.tif 000006