(57)【特許請求の範囲】
【請求項１】
ＸＭＬデータを記憶するデータベースを各々有する複数の分散されたデータベースサーバに接続されたコーディネータサーバであって、
条件に該当するＸＭＬデータの取得を要求するクエリをクライアントから受信する第１受信手段と、
前記データベースサーバのクエリに対する処理能力、及び前記データベースサーバが処理可能なクエリの構文形式を示す処理能力情報を複数の前記データベースサーバから各々取得する取得手段と、
受信された前記クエリに対して、前記処理能力情報を参照して、複数の前記データベースサーバが各々行う第１処理を表すクエリコードと、当該クエリコードの実行結果を用いて行う第２処理を表すコードとを生成する生成手段と、
複数の前記データベースサーバに各々対応する前記クエリコードを送信する第１送信手段と、
前記第１処理が実行された結果得られたＸＭＬデータの一部又は全部を含む第１結果データを複数の前記データベースサーバから各々受信する第２受信手段と、
前記第１結果データを用いて、前記コードによって表される第２処理を実行する実行手段と、
前記第２処理の実行の結果得られたＸＭＬデータの一部又は全部を含む第２結果データを前記クライアントに送信する第２送信手段と、
を備え、
前記生成手段は、
受信された前記クエリを構文解析する解析手段と、
構文解析された結果得られた構文を走査して、当該構文の一部に相当し且つ前記処理能力情報によって示される処理能力の範囲にある第１構文部分に基づいて、当該処理能力情報に対応するデータベースサーバが行う処理を表すクエリコードを複数の前記データベースサーバに対して各々生成する第１コード生成手段と、
前記構文のうち第１構文部分以外の部分である第２構文部分に基づいて、前記コードを生成する第２コード生成手段とを有し、
前記第１コード生成手段は、構文解析された結果得られた構文を走査して、当該構文のうち、前記処理能力情報によって示される構文形式に基づいて複数の前記データベースサーバが処理可能な第２構文部分を判断し、当該第１構文部分に基づいて、前記クエリコードを複数の前記データベースサーバに対して各々生成する
ことを特徴とするコーディネータサーバ。 
【請求項２】
前記第１受信手段は、XQueryにより記述されたクエリをクライアントから受信する
ことを特徴とする請求項１に記載のコーディネータサーバ。 
【請求項３】
ＸＭＬデータを記憶するデータベースを各々有する複数の分散されたデータベースサーバに接続されたコーディネータサーバであって、
条件に該当するＸＭＬデータの取得を要求するクエリをクライアントから受信する第１受信手段と、
受信された前記クエリに対して、複数の前記データベースサーバが各々行う第１処理を表すクエリコードを生成し、当該クエリコードの実行結果を用いて行う処理を表すコードとして、タプル演算による第２処理を表すタプルコード及び手続き演算による第３処理を表す手続きコードを生成する生成手段と、
複数の前記データベースサーバに各々対応する前記クエリコードを送信する第１送信手段と、
前記第１処理が実行された結果得られたＸＭＬデータの一部又は全部を含む第１結果データを複数の前記データベースサーバから各々受信する第２受信手段と、
前記第１結果データを用いて、前記タプルコードによって表される第２処理及び前記手続きコードによって表される第３処理を実行する実行手段と、
前記第２処理及び前記第３処理の実行の結果得られたＸＭＬデータの一部又は全部を含む第２結果データを前記クライアントに送信する第２送信手段と、
前記データベースサーバのクエリに対する処理能力、及び前記データベースサーバが処理可能なクエリの構文形式を示す処理能力情報を複数の前記データベースサーバから取得する取得手段と、
を備え
前記生成手段は、
受信された前記クエリを構文解析する解析手段と、
構文解析された結果得られた構文を走査して、当該構文の一部に相当し且つ前記処理能力情報によって示される処理能力の範囲にある第１構文部分に基づいて、当該処理能力情報に対応するデータベースサーバが行う第１処理を表すクエリコードを複数の前記データベースサーバに対して各々生成する第１コード生成手段と、
前記構文のうち第１構文部分以外の部分でありタプル演算が可能な範囲にある第２構文部分に基づいて、前記タプルコードを生成する第２コード生成手段と、
前記構文のうち第１構文部分及び前記第２構文部分以外の部分である第３構文部分に基づいて、前記手続きコードを生成する第３コード生成手段とを有し、
前記第１コード生成手段は、構文解析された結果得られた構文を走査して、当該構文のうち、前記処理能力情報によって示される構文形式に基づいて複数の前記データベースサーバが処理可能な第２構文部分を判断し、当該第１構文部分に基づいて、前記クエリコードを複数の前記データベースサーバに対して各々生成する
ことを特徴とするコーディネータサーバ。 
【請求項４】
前記実行手段は、
前記第１結果データを用いて、前記タプルコードによって表される第２処理を実行するタプル実行手段と、
前記第２処理の実行の結果として得られたＸＭＬデータの一部又は全部を含む第３結果データを用いて、前記手続きコードによって表される第３処理を実行する手続き実行手段とを有し、
前記第２送信手段は、
前記第３処理の実行の結果得られたＸＭＬデータの一部又は全部を含む第２結果データを前記クライアントに送信する
ことを特徴とする請求項３に記載のコーディネータサーバ。 
【請求項５】
前記第１受信手段は、XQueryにより記述されたクエリをクライアントから受信する
ことを特徴とする請求項３、又は４に記載のコーディネータサーバ。 
【請求項６】
第１受信手段と、取得手段と、生成手段と、第１送信手段と、第２受信手段と、実行手段と、第２送信手段とを有し、ＸＭＬデータを記憶するデータベースを各々有する複数の分散されたデータベースサーバに接続されたコーディネータサーバで実現される分散処理方法であって、
前記第１受信手段が、条件に該当するＸＭＬデータの取得を要求するクエリをクライアントから受信するステップと、
前記取得手段が、前記データベースサーバのクエリに対する処理能力、及び前記データベースサーバが処理可能なクエリの構文形式を示す処理能力情報を複数の前記データベースサーバから各々取得するステップと、
前記生成手段が、受信された前記クエリに対して、前記処理能力情報を参照して、複数の前記データベースサーバが各々行う第１処理を表すクエリコードと、当該クエリコードの実行結果を用いて行う第２処理を表すコードとを生成するステップと、
前記生成手段が、受信された前記クエリを構文解析する解析ステップと、
前記生成手段が、構文解析された結果得られた構文を走査して、当該構文の一部に相当し且つ前記処理能力情報によって示される処理能力の範囲にある第１構文部分に基づいて、当該処理能力情報に対応するデータベースサーバが行う処理を表すクエリコードを複数の前記データベースサーバに対して各々生成する第１コード生成ステップと、
前記生成手段が、前記構文のうち第１構文部分以外の部分である第２構文部分に基づいて、前記コードを生成する第２コード生成ステップと、
前記生成手段が、構文解析された結果得られた構文を走査して、当該構文のうち、前記処理能力情報によって示される構文形式に基づいて複数の前記データベースサーバが処理可能な第２構文部分を判断し、当該第１構文部分に基づいて、前記クエリコードを複数の前記データベースサーバに対して各々生成するステップと、
前記第１送信手段が、複数の前記データベースサーバに各々対応する前記クエリコードを送信するステップと、
前記第２受信手段が、前記第１処理が実行された結果得られたＸＭＬデータの一部又は全部を含む第１結果データを複数の前記データベースサーバから各々受信するステップと、
前記実行手段が、前記第１結果データを用いて、前記コードによって表される第２処理を実行するステップと、
前記第２送信手段が、前記第２処理の実行の結果得られたＸＭＬデータの一部又は全部を含む第２結果データを前記クライアントに送信するステップとを含む
ことを特徴とする分散処理方法。 
【請求項７】
第１受信手段と、生成手段と、第１送信手段と、第２受信手段と、実行手段と、第２送信手段と、取得手段とを有し、ＸＭＬデータを記憶するデータベースを各々有する複数の分散されたデータベースサーバに接続されたコーディネータサーバで実現される分散処理方法であって、
前記第１受信手段が、条件に該当するＸＭＬデータの取得を要求するクエリをクライアントから受信するステップと、
前記取得手段が、前記データベースサーバのクエリに対する処理能力、及び前記データベースサーバが処理可能なクエリの構文形式を示す処理能力情報を複数の前記データベースサーバから取得するステップと、
前記生成手段が、受信された前記クエリに対して、複数の前記データベースサーバが各々行う第１処理を表すクエリコードを生成し、当該クエリコードの実行結果を用いて行う処理を表すコードとして、タプル演算による第２処理を表すタプルコード及び手続き演算による第３処理を表す手続きコードを生成するステップと、
前記生成手段が、受信された前記クエリを構文解析するステップと、
前記生成手段が、構文解析された結果得られた構文を走査して、当該構文の一部に相当し且つ前記処理能力情報によって示される処理能力の範囲にある第１構文部分に基づいて、当該処理能力情報に対応するデータベースサーバが行う第１処理を表すクエリコードを複数の前記データベースサーバに対して各々生成するステップと、
前記生成手段が、前記構文のうち第１構文部分以外の部分でありタプル演算が可能な範囲にある第２構文部分に基づいて、前記タプルコードを生成する第２コード生成手段と、
前記構文のうち第１構文部分及び前記第２構文部分以外の部分である第３構文部分に基づいて、前記手続きコードを生成するステップと、
前記生成手段が、構文解析された結果得られた構文を走査して、当該構文のうち、前記処理能力情報によって示される構文形式に基づいて複数の前記データベースサーバが処理可能な第２構文部分を判断し、当該第１構文部分に基づいて、前記クエリコードを複数の前記データベースサーバに対して各々生成するステップと、
前記第１送信手段が、複数の前記データベースサーバに各々対応する前記クエリコードを送信するステップと、
前記第２受信手段が、前記第１処理が実行された結果得られたＸＭＬデータの一部又は全部を含む第１結果データを複数の前記データベースサーバから各々受信するステップと、
前記実行手段が、前記第１結果データを用いて、前記タプルコードによって表される第２処理及び前記手続きコードによって表される第３処理を実行するステップと、
前記第２送信手段が、前記第２処理及び前記第３処理の実行の結果得られたＸＭＬデータの一部又は全部を含む第２結果データを前記クライアントに送信するステップとを含む
ことを特徴とする分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＸＭＬデータを記憶するデータベースを各々有する複数のデータベースサーバと接続されて分散ＸＭＬデータベースサーバを構成するコーディネータサーバ及び分散処理方法に関する。
【背景技術】
【０００２】
従来より、命令の読み込み、解釈、実行、結果の書き込みなどを行うプロセッサの高速化技術として、例えば、パイプライン処理技術がある。パイプライン処理とは、各フェーズの処理を独立動作させることで、前のフェーズの処理サイクルが終わる前に次のフェーズの処理を開始し、これを繰り返す処理である。これにより、流れ作業が実現し、処理全体の性能が改善する。
【０００３】
一方、大量のデータを管理する技術として、並列データベース技術がある。並列データベースでは、大量のデータに対応するため、複数台のサーバからなるシステムが構築されている。均一のデータ形式を持つ大量のデータ集合を複数のデータベースに分割配置する。また、データ集合を複数のデータベースに分割配置するのではなく、複数のデータベースに重複して配置するケースもある。データ集合をこのように配置することで、同一のデータに対する同時アクセス数が高いケースでは、スループットの向上が期待できる。
【０００４】
このような並列データベースにおいてデータを管理する方式は、複数のサーバがディスクを共有しない方式(ディスク非共有方式)と、複数のサーバがディスクを共有する方式(ディスク共有方式)と、複数のサーバがディスクとメモリとを共有する方式(メモリ共有方式)との３方式に大別される。
【０００５】
ここで、ディスク非共有方式を中心に説明する。データ集合を複数のデータベースに分割配置する場合、データ集合の垂直分割とデータ集合の水平分割との２通りが考えられる（フラグメンテーション）。データ集合の水平分割は、データ集合の部分集合を作り出すことであり、後述のデータパーティショニングの手法が重要になる。データの垂直分割は、データを属性やカラムなどの単位で分割することである。各分割には、個々のアクセスパターンによりメリット及びデメリットが存在する。例えば、データの垂直分割では、問合せが少ないサイズのデータスキャンで済む場合は高速だが、オリジナルのデータが必要なときはサーバ間でのデータ結合が必要になり、性能が大幅に悪化する。
【０００６】
ディスク非共有方式の並列データベースで用いられる各サーバは、データ集合が分割配置された複数のデータベースに個々にアクセスすることで並列アクセスが可能となり、データベース数に応じた性能向上が期待される。これにより、処理効率や応答時間の改善が図られている（パーティション並列化）。
【０００７】
データパーティショニング手法としては、キーレンジパーティショニング、ハッシュパーティショニングなどが知られている。例えば、大量のデータ集合がリレーションで表現されているとする。キーレンジパーティショニングやハッシュパーティショニングでは、テーブルの 1カラム値を使用する場合と、リレーションの複数のカラム値を使用する場合とがある。このようなデータパーティショニングを行うと、負荷は集中するものの、対象カラムに対する範囲条件つきの検索では無関係なデータベースにアクセスする非効率を回避できる。さらに、対象カラムでの自然結合を含む検索は、異なるデータベース間の結合が不要となるので、大幅に性能を改善することができる。
【０００８】
ただし、並列データベースでは、均衡がとれたデータパーティショニングを行わないと、検索時に特定のデータベースに負荷が集中するため、並列化の効果を発揮することが困難である。しかし、入力データの傾向の変化により、各データサイズは不均衡になる可能性があり、事前に決められたデータ分割ルールではそれを回避することが困難である。そのため、動的にキーレンジを変更する、ハッシュ値を変更するなどの改善手法が提案されてきたが、このような手法では、変更にともなうデータ移動などの負担が大きくなる。
【０００９】
ところで、並列データベースは、１台のコーディネータサーバと複数台のＤＢサーバとから構成されることが多い。このような構成において、並列データベースでは以下のような処理が行われる。クライアントからの要求を受け付けたコーディネータサーバは、その要求を解析してプランを生成して、複数台のＤＢサーバに各プランを振り分ける。各ＤＢサーバは振り分けられたプランを実行して、その処理結果のデータ集合をコーディネータサーバに送信する。コーディネータサーバは送信されたデータ集合に対してマージなど集計処理を施して、クライアントに送信する。サーバ間で受け渡されるデータはＬＡＮなどのネットワーク上でストリーム送信される。そのため、並列データベースは、ネットワークも高速サーバ間インターコネクトなど分散並列プラットフォーム上で実現されることが多い。
【００１０】
以上のような処理を高速化するために、並列データベースにおいては、ＳＱＬの内部処理のスキャン、ソート、ジョインといったフェーズ処理を複数のプロセスや複数台のサーバで並列化するメカニズムが組み込まれている。一部のデータベース製品には、各フェーズの処理を独立に動作させて前のフェーズ処理が終わる前に次のフェーズ処理を始める、といったパイプライン方式も採用されている（パイプライン並列化）。
【００１１】
また、ＸＭＬデータを記憶するＸＭＬデータベースでは、ＸＭＬデータの取得を要求するクエリとして、例えば、XQueryという静的型付け機能を持つ関数型言語を用いて処理結果のデータ集合が得られる。このXQueryを用いて行われる単体のXQuery処理は、関数型言語として処理するアプローチと、タプル演算に置き換えて処理するアプローチとの２つのアプローチとに大別される。近年、このようなXQuery処理を分散システムにより実現させる分散XQuery処理技術が開発されている。しかし、分散 XQuery処理の試みはまだ始まったばかりであり、分散 XQuery処理について記述した論文が散見される程度である。例えば、非特許文献１〜２に示されるような論文がある。
【００１２】
【非特許文献１】Christopher Re, et. al., “Distributed XQuery”, IIWeb 2004 Highly Distributed XQuery with DXQ,
【非特許文献２】Mary Fernandez, et. al., “Highly Distributed XQuery with DXQ”, SIGMOD 2007
【発明の開示】
【発明が解決しようとする課題】
【００１３】
この分散XQuery処理を行う分散ＸＭＬデータベースは、例えば、複数のデータベースサーバをスレーブとしこれらを取りまとめるコーディネータサーバをマスタとしたマスタ−スレーブ分散構成をなしているものとされる。このような分散ＸＭＬデータベースでは、例えば、以下のような前提がある。従来の単体 XQuery処理を行うためのXQuery仕様において、クエリ輸送 (Query Shipping)を実行できるように一部拡張されたXQuery仕様を用いるという前提である。
【００１４】
しかし、従来の単体 XQuery処理を行うためのXQuery仕様が一部拡張された仕様を用いる場合、XQueryを生成するユーザが分散処理手順を記述しなければならず、分散透過性が高いとは必ずしも言えない(XQueryD)。分散透過性とは、分散されている構成をユーザにできるだけ意識させることなく、あたかも集中型システムであるかのように見せることにより分散システムを実現させることである。
【００１５】
本発明は、上記に鑑みてなされたものであって、分散ＸＭＬデータベースシステムにおいて、分散透過性を維持可能に分散クエリ処理を実現可能なコーディネータサーバ及び分散処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１６】
上述した課題を解決し、目的を達成するために、本発明は、ＸＭＬデータを記憶するデータベースを各々有する複数の分散されたデータベースサーバに接続されたコーディネータサーバであって、条件に該当するＸＭＬデータの取得を要求するクエリをクライアントから受信する第１受信手段と、前記データベースサーバのクエリに対する処理能力、及び前記データベースサーバが処理可能なクエリの構文形式を示す処理能力情報を複数の前記データベースサーバから各々取得する取得手段と、受信された前記クエリに対して、前記処理能力情報を参照して、複数の前記データベースサーバが各々行う第１処理を表すクエリコードと、当該クエリコードの実行結果を用いて行う第２処理を表すコードとを生成する生成手段と、複数の前記データベースサーバに各々対応する前記クエリコードを送信する第１送信手段と、前記第１処理が実行された結果得られたＸＭＬデータの一部又は全部を含む第１結果データを複数の前記データベースサーバから各々受信する第２受信手段と、前記第１結果データを用いて、前記コードによって表される第２処理を実行する実行手段と、前記第２処理の実行の結果得られたＸＭＬデータの一部又は全部を含む第２結果データを前記クライアントに送信する第２送信手段と、を備え、前記生成手段は、受信された前記クエリを構文解析する解析手段と、構文解析された結果得られた構文を走査して、当該構文の一部に相当し且つ前記処理能力情報によって示される処理能力の範囲にある第１構文部分に基づいて、当該処理能力情報に対応するデータベースサーバが行う処理を表すクエリコードを複数の前記データベースサーバに対して各々生成する第１コード生成手段と、前記構文のうち第１構文部分以外の部分である第２構文部分に基づいて、前記コードを生成する第２コード生成手段とを有し、前記第１コード生成手段は、構文解析された結果得られた構文を走査して、当該構文のうち、前記処理能力情報によって示される構文形式に基づいて複数の前記データベースサーバが処理可能な第２構文部分を判断し、当該第１構文部分に基づいて、前記クエリコードを複数の前記データベースサーバに対して各々生成することを特徴とする。 
【００１７】
また、本発明は、ＸＭＬデータを記憶するデータベースを各々有する複数の分散されたデータベースサーバに接続されたコーディネータサーバであって、条件に該当するＸＭＬデータの取得を要求するクエリをクライアントから受信する第１受信手段と、受信された前記クエリに対して、複数の前記データベースサーバが各々行う第１処理を表すクエリコードを生成し、当該クエリコードの実行結果を用いて行う処理を表すコードとして、タプル演算による第２処理を表すタプルコード及び手続き演算による第３処理を表す手続きコードを生成する生成手段と、複数の前記データベースサーバに各々対応する前記クエリコードを送信する第１送信手段と、前記第１処理が実行された結果得られたＸＭＬデータの一部又は全部を含む第１結果データを複数の前記データベースサーバから各々受信する第２受信手段と、前記第１結果データを用いて、前記タプルコードによって表される第２処理及び前記手続きコードによって表される第３処理を実行する実行手段と、前記第２処理及び前記第３処理の実行の結果得られたＸＭＬデータの一部又は全部を含む第２結果データを前記クライアントに送信する第２送信手段と、前記データベースサーバのクエリに対する処理能力、及び前記データベースサーバが処理可能なクエリの構文形式を示す処理能力情報を複数の前記データベースサーバから取得する取得手段と、を備え前記生成手段は、受信された前記クエリを構文解析する解析手段と、構文解析された結果得られた構文を走査して、当該構文の一部に相当し且つ前記処理能力情報によって示される処理能力の範囲にある第１構文部分に基づいて、当該処理能力情報に対応するデータベースサーバが行う第１処理を表すクエリコードを複数の前記データベースサーバに対して各々生成する第１コード生成手段と、前記構文のうち第１構文部分以外の部分でありタプル演算が可能な範囲にある第２構文部分に基づいて、前記タプルコードを生成する第２コード生成手段と、前記構文のうち第１構文部分及び前記第２構文部分以外の部分である第３構文部分に基づいて、前記手続きコードを生成する第３コード生成手段とを有し、前記第１コード生成手段は、構文解析された結果得られた構文を走査して、当該構文のうち、前記処理能力情報によって示される構文形式に基づいて複数の前記データベースサーバが処理可能な第２構文部分を判断し、当該第１構文部分に基づいて、前記クエリコードを複数の前記データベースサーバに対して各々生成することを特徴とする。
【００１８】
また、本発明は、第１受信手段と、取得手段と、生成手段と、第１送信手段と、第２受信手段と、実行手段と、第２送信手段とを有し、ＸＭＬデータを記憶するデータベースを各々有する複数の分散されたデータベースサーバに接続されたコーディネータサーバで実現される分散処理方法であって、前記第１受信手段が、条件に該当するＸＭＬデータの取得を要求するクエリをクライアントから受信するステップと、前記取得手段が、前記データベースサーバのクエリに対する処理能力、及び前記データベースサーバが処理可能なクエリの構文形式を示す処理能力情報を複数の前記データベースサーバから各々取得するステップと、前記生成手段が、受信された前記クエリに対して、前記処理能力情報を参照して、複数の前記データベースサーバが各々行う第１処理を表すクエリコードと、当該クエリコードの実行結果を用いて行う第２処理を表すコードとを生成するステップと、前記生成手段が、受信された前記クエリを構文解析する解析ステップと、前記生成手段が、構文解析された結果得られた構文を走査して、当該構文の一部に相当し且つ前記処理能力情報によって示される処理能力の範囲にある第１構文部分に基づいて、当該処理能力情報に対応するデータベースサーバが行う処理を表すクエリコードを複数の前記データベースサーバに対して各々生成する第１コード生成ステップと、前記生成手段が、前記構文のうち第１構文部分以外の部分である第２構文部分に基づいて、前記コードを生成する第２コード生成ステップと、前記生成手段が、構文解析された結果得られた構文を走査して、当該構文のうち、前記処理能力情報によって示される構文形式に基づいて複数の前記データベースサーバが処理可能な第２構文部分を判断し、当該第１構文部分に基づいて、前記クエリコードを複数の前記データベースサーバに対して各々生成するステップと、前記第１送信手段が、複数の前記データベースサーバに各々対応する前記クエリコードを送信するステップと、前記第２受信手段が、前記第１処理が実行された結果得られたＸＭＬデータの一部又は全部を含む第１結果データを複数の前記データベースサーバから各々受信するステップと、前記実行手段が、前記第１結果データを用いて、前記コードによって表される第２処理を実行するステップと、前記第２送信手段が、前記第２処理の実行の結果得られたＸＭＬデータの一部又は全部を含む第２結果データを前記クライアントに送信するステップとを含むことを特徴とする。
【００１９】
また、本発明は、第１受信手段と、生成手段と、第１送信手段と、第２受信手段と、実行手段と、第２送信手段と、取得手段とを有し、ＸＭＬデータを記憶するデータベースを各々有する複数の分散されたデータベースサーバに接続されたコーディネータサーバで実現される分散処理方法であって、前記第１受信手段が、条件に該当するＸＭＬデータの取得を要求するクエリをクライアントから受信するステップと、前記取得手段が、前記データベースサーバのクエリに対する処理能力、及び前記データベースサーバが処理可能なクエリの構文形式を示す処理能力情報を複数の前記データベースサーバから取得するステップと、前記生成手段が、受信された前記クエリに対して、複数の前記データベースサーバが各々行う第１処理を表すクエリコードを生成し、当該クエリコードの実行結果を用いて行う処理を表すコードとして、タプル演算による第２処理を表すタプルコード及び手続き演算による第３処理を表す手続きコードを生成するステップと、前記生成手段が、受信された前記クエリを構文解析するステップと、前記生成手段が、構文解析された結果得られた構文を走査して、当該構文の一部に相当し且つ前記処理能力情報によって示される処理能力の範囲にある第１構文部分に基づいて、当該処理能力情報に対応するデータベースサーバが行う第１処理を表すクエリコードを複数の前記データベースサーバに対して各々生成するステップと、前記生成手段が、前記構文のうち第１構文部分以外の部分でありタプル演算が可能な範囲にある第２構文部分に基づいて、前記タプルコードを生成する第２コード生成手段と、前記構文のうち第１構文部分及び前記第２構文部分以外の部分である第３構文部分に基づいて、前記手続きコードを生成するステップと、前記生成手段が、構文解析された結果得られた構文を走査して、当該構文のうち、前記処理能力情報によって示される構文形式に基づいて複数の前記データベースサーバが処理可能な第２構文部分を判断し、当該第１構文部分に基づいて、前記クエリコードを複数の前記データベースサーバに対して各々生成するステップと、前記第１送信手段が、複数の前記データベースサーバに各々対応する前記クエリコードを送信するステップと、前記第２受信手段が、前記第１処理が実行された結果得られたＸＭＬデータの一部又は全部を含む第１結果データを複数の前記データベースサーバから各々受信するステップと、前記実行手段が、前記第１結果データを用いて、前記タプルコードによって表される第２処理及び前記手続きコードによって表される第３処理を実行するステップと、前記第２送信手段が、前記第２処理及び前記第３処理の実行の結果得られたＸＭＬデータの一部又は全部を含む第２結果データを前記クライアントに送信するステップとを含むことを特徴とする。
【発明の効果】
【００２０】
本発明によれば、分散ＸＭＬデータベースシステムにおいて、分散透過性を維持可能に分散クエリ処理を実現可能である。
【発明を実施するための最良の形態】
【００２１】
以下に添付図面を参照して、この発明にかかるコーディネータサーバ及び分散処理方法の最良な実施の形態を詳細に説明する。
【００２２】
[実施の形態]
（１）構成
図１は、本実施の形態にかかる分散ＸＭＬデータベースシステムの構成を例示する図である。分散ＸＭＬデータベースシステムは、アプリケーションプログラムが実行されるクライアントコンピュータ（以下、クライアントという）５０と、分散ＸＭＬデータベース５１とを有し、これらがネットワーク５２を介して接続されて構成される。分散ＸＭＬデータベース５１は１台のコーディネータサーバ６０と複数台のＤＢサーバ７０Ａ〜７０Ｂとを有する。ネットワーク５２は、例えば、ＬＡＮ（Local Area Network）、イントラネット、イーサネット（登録商標）又はインターネットなどである。
【００２３】
コーディネータサーバ６０は、クライアント５０と複数のＤＢサーバ７０Ａ〜７０Ｂと接続される。コーディネータサーバ６０は、条件に該当するＸＭＬデータの取得を要求するクエリ(XQuery)をクライアント５０から受信し、当該クエリに応じた処理を行い、その処理結果の結果データをクライアント５０に送信する。また、コーディネータサーバ６０は、ＤＢサーバ７０Ａ〜７０Ｂのクエリに対する処理能力（XQuery解決能力）を示す処理能力情報(拡張 BNF)をＤＢサーバ７０Ａ〜７０Ｂから受信し、クライアント５０から受信したクエリに応じた処理を行う際に、処理能力情報を参照して、ＤＢサーバ７０Ａ〜７０Ｂに対して処理要求を行い、当該処理結果をＤＢサーバ７０Ａ〜７０Ｂから受信し、当該処理結果を用いて処理を実行して結果データを生成してクライアント５０に送信する。
【００２４】
ＤＢサーバ７０Ａは、ＸＭＬデータを記憶するデータベース７００Ａを有し、コーディネータサーバ６０からの処理要求に応じたＸＭＬデータをデータベース７００Ａから取得し、当該ＸＭＬデータを含む結果データを処理結果としてコーディネータサーバ６０に送信する。ＤＢサーバ７０Ｂは、ＸＭＬデータを記憶するデータベース７００Ｂを有し、コーディネータサーバ６０からの処理要求に応じたＸＭＬデータをデータベース７００Ａから取得し、当該ＸＭＬデータを含む結果データを処理結果としてコーディネータサーバ６０に送信する。また、ＤＢサーバ７０Ａ〜７０Ｂは各々、分散ＸＭＬデータベースシステムへの接続時に処理能力情報をコーディネータサーバ６０に送信する。
【００２５】
尚、クライアント５０、コーディネータサーバ６０及びＤＢサーバ７０Ａ〜７０Ｂは各々、装置全体の制御を行うＣＰＵ（Central Processing Unit）等の制御装置と、各種データや各種プログラムを記憶するＲＯＭ（Read Only Memory）やＲＡＭ（Random Access Memory）等の記憶装置と、各種データや各種プログラムを記憶するＨＤＤ（Hard Disk Drive）やＣＤ（Compact Disk）ドライブ装置等の外部記憶装置と、情報を表示するディスプレイ装置等の表示装置と、ユーザが各種処理要求を入力するためのキーボードやマウス等の入力装置と、ネットワーク５２を介して外部のコンピュータと通信を行う通信制御装置と、これらを接続するバスとを備えており、通常のコンピュータを利用したハードウェア構成となっている。
【００２６】
このようなハードウェア構成において、コーディネータサーバ６０が、記憶装置や外部記憶装置に記憶された各種プログラムを実行することにより実現される各種機能について説明する。以下に、コーディネータサーバ６０において実現される各種機能の実体となる各部について説明する。コーディネータサーバ６０は、クエリ受信部６００と、コード生成部６０１と、ＤＢサーバ処理能力管理部６０２と、コード実行部６０３と、結果データ送信部６０４とを有する。クエリ受信部６００は、クライアント５０から送信されたクエリを受信する。
【００２７】
コード生成部６０１は、クエリ受信部６００が受信したクエリを解析し、ＤＢサーバ７０Ａ〜７０Ｂの各処理能力情報を参照して各種コードを生成する。ここでコード生成部６０１が生成するコードは、ＤＢサーバ７０Ａ〜７０Ｂが各々行う処理を表すコード（クエリコード）と、タプル演算により行う処理を表すコード（タプルコード)と、手続き演算により行う処理を表すコード(手続きコード)とである。タプルコード及び手続きコードは、クエリコードによって表される処理がＤＢサーバ７０Ａ〜７０Ｂにより実行された結果得られた結果データをコーディネータサーバ６０が処理するためものである。尚、ここでは、計算速度について、タプル演算の方が手続き演算より速いということを前提にしている。これらの具体例については後述する。
【００２８】
ＤＢサーバ処理能力管理部６０２は、ＤＢサーバ７０Ａ〜７０Ｂから各々処理能力情報を受信してこれらを管理する。具体的には、ＤＢサーバ処理能力管理部６０２は、処理能力情報をＲＡＭなどに記憶させ、当該処理能力情報へのアクセスを制御する。コード実行部６０３は、コード生成部６０１が生成したクエリコードをＤＢサーバ７０Ａ〜７０Ｂに送信すると共に、当該クエリコードによって表される処理の実行結果として、ＸＭＬデータの一部又は全部を含む結果データをＤＢサーバ７０Ａ〜７０Ｂから受信し、これらを用いて、コード生成部６０１が生成したタプルコードによって表される処理及び手続きコードによって表される処理を実行し、その実行結果として、ＸＭＬデータの一部又は全部を含む結果データを生成する。結果データ送信部６０４は、コード実行部６０３が生成した結果データをクライアント５０に送信する。
【００２９】
ここで、図１に示したコーディネータサーバ６０の有するコード生成部６０１とコード実行部６０３との機能的構成について詳細に説明する。図２は、コード生成部６０１とコード実行部６０３との機能的構成を例示する図である。コード生成部６０１は、構文解析部６０１０と、クエリコード生成部６０１１と、タプルコード生成部６０１２と、手続きコード生成部６０１３とを有する。コード実行部６０３は、クエリコード送信部６０３０と、結果データ受信部６０３１と、タプルコード実行部６０３２と、手続きコード実行部６０３３とを有する。
【００３０】
構文解析部６０１０は、クエリ受信部６００がクライアント５０から受信したクエリ(XQuery)を構文解析する。クエリコード生成部６０１１は、構文解析部６０１０が構文解析して得られた構文を走査して、当該構文の一部に相当し且つ処理能力情報によって示される処理能力の範囲にある第１構文部分に基づいて、ＤＢサーバ７０Ａ〜７０Ｂに対してクエリコードを各々生成する。タプルコード生成部６０１２は、構文解析部６０１０が構文解析して得られた構文のうち第１構文部分以外の部分でありタプル演算が可能な範囲にある第２構文部分に基づいて、前記タプルコードを生成する。手続きコード生成部６０１３は、構文解析部６０１０が構文解析して得られた構文のうち第１構文部分及び第２構文部分以外の部分である第３構文部分に基づいて、手続きコードを生成する。
【００３１】
タプルコードとは、取り扱うデータをタプルとみなして処理するためのプログラムである。タプルとは要素の列のことであり、リレーショナルデータベースでのタプルは行を意味する。タプルを処理するため、タプルコードは、和(UNION)、差(DIFF)、直積(CATESIANPRODUCT)、射影(PROJECT)、選択(SELECT)などのオペレータの組合せから構成される。
【００３２】
手続きコードとは、取り扱うデータを処理するための一連の操作手順を示したプログラムである。手続きを表現するため、条件分岐(COND)、関数呼出(FUNCCALL)、繰り返し(WHILE,LOOP)などの制御構造を用いる。関数呼出を行う場合、入力として引数を与え、出力としてリターン値が返ってくることになる。
【００３３】
このように、本実施の形態においては、クエリ(XQuery)に応じて行う処理について、ＤＢサーバ７０Ａ〜７０Ｂで行う処理と、ＤＢサーバ７０Ａ〜７０Ｂがクエリコードによって表される処理を実行した結果得られる結果データを用いてタプル演算が可能な範囲と、タプル演算が不可能である範囲とに分け、これらを各々クエリコードと、タプルコードと、手続きコードとにより処理させる。このような３種類のコードの組み合わせにより各々処理されることにより、分散されたサーバを用いて透過的にXQueryを処理することが可能になる。
【００３４】
クエリコード送信部６０３０は、クエリコード生成部６０１１が生成したクエリコードをＤＢサーバ７０Ａ〜７０Ｂに送信する。結果データ受信部６０３１は、ＤＢサーバ７０Ａ〜７０Ｂから送信された結果データを受信する。タプルコード実行部６０３２は、結果データ受信部６０３１が受信した結果データを用いて、タプルコード生成部６０１２が生成したタプルコードによって表される処理を実行する。手続きコード実行部６０３３は、タプルコード実行部６０３２がタプルコードによって表される処理を実行した結果の結果データを用いて、手続きコード生成部６０１３が生成した手続きコードによって表される処理を実行し、実行結果として、ＸＭＬデータの一部又は全部を含む結果データを生成する。この結果データは、上述した結果データ送信部６０４によりクライアント５０に送信される。
【００３５】
ここで、ＸＭＬデータについて説明する。ＸＭＬでは、文書構造を構成する個々のパーツは「要素」(エレメント：Element)と呼ばれる。各要素はタグ(Tag)を使って記述される。具体的には、要素の始まりを示すタグ(開始タグ)と、要素の終わりを示すタグ(終了タグ)との２つのタグでテキストデータを挟み込んで、１つの要素が表現される。なお、開始タグと終了タグとで挟み込まれたテキストデータは、開始タグと終了タグとで表された１つの要素に含まれるテキスト要素(テキストノード)となる。
【００３６】
図３は、３つのＸＭＬデータのデータ構成を例示する図である。同図の例では、各ＸＭＬデータは、<paper>要素で挟み込まれた複数の部分的なＸＭＬデータから構成されている。複数の部分的なＸＭＬデータとは、ここでは具体的には、<title>要素で挟み込まれた文書のタイトルに関するＸＭＬデータと、<body>要素で挟み込まれた文書の本文に関するＸＭＬデータと、<P>要素で挟み込まれた各行ごとのＸＭＬデータとである。このように、複数の階層構造や意味を持ったデータが１つのＸＭＬデータに混在している。
【００３７】
次に、XQueryについて説明する。XQueryは、ＸＭＬデータベースへの問合せのための関数型言語であり、FLWOR(for-let-where-order by-return)構文が特徴になっている。ＲＤＢでの問合せ言語はSQLであるが、SQLは宣言的な言語であるのに対して、XQueryは関数型言語としての特徴を多く持つ。以下に、XQueryの言語仕様を手続き的な観点から説明する。
【００３８】
for節の構文は、「for 変数 in 式」である。for節の構文は、式を満足するものを変数に代入してループするという意味を持つ。let節の構文は、「let 変数 ：＝ 式」である。let節の構文は、式を満足するものを集約してシーケンスとして変数に代入するという意味を持つ。シーケンスとは、フラットなリストである。where節は、Fで繰り返されるループを制限するものである。where節の構文は、「where式」である。where節の構文は、式を満足するものだけループをまわし、そうでないものはループをスキップするという意味を持つ。return節は、XQueryを処理した結果をフォーマット化するものである。return節の構文は、「return 式」である。return節の構文は、変数を含む任意のＸＭＬデータを記述することができる。変数の構文は、「＄文字列」である。入れ子問合せなどで２重宣言された場合を除き、同じ文字列を持つ変数は同一のものと見なされる。ＸＭＬデータの要素間の階層条件を指定するパス演算子として、XQueryでは以下のようなものがある。
・“/”要素間は親子関係であることを示すオペレータ
・“//” 要素間は先祖子孫関係であることを示すオペレータ
・“.”任意の要素 
【００３９】
図４は、条件に該当するＸＭＬデータの取得を要求するクエリの例として、XQueryのデータ構成を例示する図である。同図に示されるXQueryは、「子孫のあるテキストが”XML”を含むデータベース内のpaperというデータを返す」ことを要求している。
【００４０】
図５は、XQueryのデータ構成が複雑な例を示す図である。同図において、「declare function 〜」では、ユーザ定義関数「myfunc」を定義しており、「$a」,「$b」という２つの変数を引数にとっている。myfunc内では条件分岐があり、「$a」の値が「0」であれば、FLWOR式を処理する。そうでなければ、変数「$b」を含んだ「<book>{$b}</book>」という値を返す。ユーザ定義関数外部では、「myfunc(0, “test”)」という関数呼出が存在する。
【００４１】
図６は、図４に示された構文解析部６０１０が、図５に示されたXQueryを構文解析した結果を例示する図である。構文解析は、Yaccなどのコンパイラ構文解析器生成系（コンパイラコンパイラ）とLexなどの字句解析プログラムである字句解析器生成系とを組み合わせることで実現される。構文解析の結果は、「progn」をルートとするツリー構造をなしている。「defun」はユーザ関数を定義する組込み関数を表している。
【００４２】
図７は、ＤＢサーバ７０Ａから送信された処理能力情報を例示する図である。これはXQueryの構文を BNFで定義したものであり、Moduleが定義のルートを表している。FLWORに相当する BNF定義部分が、「FLWORExpr」である。「PathExpr」はパスを定義しており、PathExprを構成する BNF定義部分として、「RelativePathExpr」があり、「”/”」や「”//”」などの構文が扱えることが表されている。このように、処理能力情報は、ＤＢサーバ７０Ａが処理可能なクエリの構文形式を表している。
【００４３】
図８は、図６に示された構文解析の結果に対して、クエリコード生成部６０１１が図７に示された処理能力情報を参照して生成するクエリコードと、タプルコード生成部６０１２が生成するタプルコードと、手続きコード生成部６０１３が生成する手続きコードとを例示する図である。図９は、図８に例示した各コードの関係を簡略化して示した図である。図６における点線で囲まれた部分が、図８におけるクエリコードＱＣ１に相当する。図６における破線で囲まれた部分が、図８におけるクエリコードＱＣ２に相当する。図６における一点鎖線で囲まれた部分が、図８におけるタプルコードＴＰ１に相当する。図６における二点鎖線で囲まれた部分が、図８における手続きコードＴＫ１に相当する。また、図８〜９に示されるように、クエリコードＱＣ１〜ＱＣ２とタプルコードＴＰ１とはコネクションＮ１〜Ｎ２により各々繋がっている。タプルコードＴＰ１と手続きコードＴＫ１とはコネクションＮ３により繋がっている。各コードは階層構造により表されている。最下位のコードはクエリコードＱＣ１〜ＱＣ２であり、その上位にあるのが、タプルコードＴＰ１であり、最上位にあるのが手続きコードＴＫ１である。
【００４４】
コネクションＮ１〜Ｎ３は、データをバッファリングするバッファとして機能すると共に、データ授受を行うための同期待ちを発生させるイベントとして機能する。ここでは、クエリコードＱＣ１〜ＱＣ２によって各々表される処理の実行結果である結果データをコーディネータサーバ６０は受信しこれらをコネクションＮ１，Ｎ２に各々バッファリングする。また、コーディネータサーバ６０はコネクションＮ１，Ｎ２に各々バッファリングした結果データに対して後述のタプルコードＴＰ１によって表される処理を実行した実行結果である結果データをコネクションＮ３にバッファリングする。そして、コーディネータサーバ６０はコネクションＮ３にバッファリングされた結果データに対して手続きコードＴＫ１によって表される処理を実行する。即ち、クエリコードＱＣ１〜ＱＣ２とタプルコードＴＰ１とが別々のプロセスに割り当てられて並列実行された場合、下位のコードの実行結果を上位のコードが受け取るが、コネクションＮ１，Ｎ２，Ｎ３でデータ授受を行うための同期待ちが発生する。また、タプルコードと手続きコードＴＫ１とは別々のスレッドで実行されるため、タプルコードＴＰ１によって表される処理の完了まで手続きコードＴＫ１の同期待ちが発生する。このように、コネクションＮ１〜Ｎ３は、結果データをバッファリングするとともに、Mutexなどスレッド同士が同期させる仕組みが付加されたデータ構造をなしており、例えばＲＡＭなどの記憶装置に構成される。
【００４５】
クエリコードＱＣ１は、ＤＢサーバ７０Ａに送信されて実行されるものとする。クエリコードＱＣ１は、「/book」を取り出して変数「$x」にセットし、「$x/author」を取り出して変数「$x0」にセットするという処理を実行させるためのコードである。クエリコードＱ２は、ＤＢサーバ７０Ｂに送信されて実行されるものとする。クエリコードＱＣ２は、「/author」を取り出して変数「$y」にセットし、「$y/name」を取り出して変数「$y0」にセットするという処理を実行させるためのコードである。
【００４６】
タプルコードＴＰ１は、２つのクエリコードＱＣ１，ＱＣ２の実行結果として得られる結果データを結合する処理を表すコードである。例えば、和(UNION)、差(DIFF)、直積(CATESIAN  PRODUCT)、射影(PROJECT)、選択(SELECT)などの処理の組合せにより表される。コーディネータサーバ６０は、タプルコードＴＰ１により、具体的には、クエリコードＱＣ１，ＱＣ２の実行結果として結果データをコネクションＮ１，Ｎ２で各々受け取った後、以下の処理を実行させる。受け取った結果データをＤＢサーバ７０Ａ〜７０Ｂの数ぶんだけ和(UNION)をとる。更に、その和(UNION)に対して結合(JOIN)を行って、結果生成(MAP2ITEM)を行い、最終的に「$x/title」を返す。
【００４７】
手続きコードＴＫ１は、ユーザ定義関数の定義(DEFUN)を行うためのコードである。具体的には、結果生成(MAP2ITEM)の結果をコネクションＮ３で受け取った後、ユーザ定義関数の呼出を行うという処理を実行させる。
【００４８】
図１０は、ＤＢサーバ７０ＡがクエリコードＱ１を実行した結果の結果データを例示する図である。結果データＫＤ１は、クエリコードＱＣ１の一部である「for $x in /book」の実行結果である。「$x」に対する値の候補がタプルで表現されている。結果データＫＤ２は、クエリコードＱＣ１の実行結果である。「$x」と「$x0」に対する値の候補がタプルで表現されている。
【００４９】
図１１は、ＤＢサーバ７０ＢがクエリコードＱ２を実行した結果の結果データを例示する図である。結果データＫＤ３は、クエリコードＱＣ２の一部「for $y in /author」の実行結果である。「$y」に対する値の候補がタプルで表現されている。結果データＫＤ４は、クエリコードＱＣ２の実行結果である。「$y」と「$y0」とに対する値の候補がタプルで表現されている。
【００５０】
図１２は、コーディネータサーバ６０がタプルコードを実行した結果の結果データを例示する図である。結果データＫＤ５は、結果データＫＤ２と結果データＫＤ３とについて各々、ＤＢサーバ７０Ａ〜７０Ｂの数ぶんだけ和(UNION)をとり、それに対して結合(JOIN)を行った結果である。結果データＫＤ６は、結果生成(MAP2ITEM)を行って、最終的に「$x/title」を返した結果であり、この結果として、結果データＫＤ７がコネクションＮ３を介して手続きコードによって表される処理の実行に用いられる。結果データＫＤ８は、結果データＫＤ７を用いて、手続きコードが実行された結果であり、ユーザ定義関数の定義(DEFUN)を行い、最後にユーザ定義関数の呼出を行った結果である。ここでは、ユーザ定義関数は「myfunc(0, “test”)」であるので、条件分岐が成立し、先のFLWOR式の結果が得られることになる。
【００５１】
（２）動作
次に、本実施の形態にかかる分散ＸＭＬデータベースシステムの動作について説明する。図１３は、分散ＸＭＬデータベースシステムが行う検索処理の手順を示すシーケンスチャートである。まず、ＤＢサーバ７０Ａ〜７０Ｂは各々、分散ＸＭＬデータベースシステムへの接続時に、自身の処理能力情報をコーディネータサーバ６０に送信する(ステップＳ１〜２)。コーディネータサーバ６０はこれらを受信すると、これらを記憶装置に記憶する（ステップＳ３）。そして、クライアント５０が、条件に該当するデータの検索を要求するクエリをコーディネータサーバ６０に送信し(ステップＳ４)、コーディネータサーバ６０が当該クエリを受信すると（ステップＳ５）、これを構文解析し、ＤＢサーバ７０Ａ〜７０Ｂから送信された処理能力情報を参照してクエリコードとタプルコードと手続きコードとを生成する(ステップＳ６)。そして、コーディネータサーバ６０は、クエリコードをＤＢサーバ７０Ａ〜７０Ｂに各々送信する（ステップＳ７）。ＤＢサーバ７０Ａ〜７０Ｂは各々、クエリコードを受信すると、当該クエリコードによって表される処理を実行して、その実行結果として、ＸＭＬデータの一部又は全部を含む結果データをコーディネータサーバ６０に送信する（ステップＳ８〜Ｓ９）。コーディネータサーバ６０は、ＤＢサーバ７０Ａ〜７０Ｂから各々結果データを受信すると(ステップＳ１０)、これを用いてタプルコードによって表される処理を実行する。そして、コーディネータサーバ６０は、タプルコードによって表される処理の実行の結果得られた結果データを用いて手続きコードによって表される処理を実行する（ステップＳ１１）。このとき、コーディネータサーバ６０は、タプルコードによって表される処理及び手続きコードによって表される処理の実行を各々並列して行う場合、一部データ授受の同期をとりながら行う。そして、コーディネータサーバ６０は、手続きコードによって表される処理の実行結果として、ＸＭＬデータの一部又は全部を含む結果データをクライアント５０に送信する（ステップＳ１２）。そして、クライアント５０は、ステップＳ１で送信したクエリの結果である結果データを受信する（ステップＳ１３）。
【００５２】
次に、ステップＳ６でコーディネータサーバ６０が各種コードを生成するコード生成処理の手順について図１４を参照しながら説明する。コーディネータサーバ６０のコード生成部６０１は、クライアント５０から受信したクエリを構文解析した後、解析結果の構文ツリー（「DB ROOT」(つまり”/”の部分)）のノードを走査し、for節に対応するノードを選び出して、走査キューに入れる（ステップＳ３０）。走査キューに入れた全ノードについて走査終了していない場合には（ステップＳ３１：ＮＯ）、次いで、コード生成部６０１は、走査キューのノードについて、評価可能な部分ツリー（構文部分）を計算する。ここでは、コード生成部６０１は、for節のノードで第１ノードが「”/”」で始まるか否かを判断する（ステップＳ３２）。そして、当該判断結果が肯定的である場合（ステップＳ３３：ＹＥＳ）、コード生成部６０１は、第１子ノード以下の部分ツリーについて、記憶装置に記憶された処理能力情報を参照して、ＤＢサーバ７０Ａ〜７０Ｂの処理能力を超えているか否か、即ち、この部分ツリーをＤＢサーバ７０Ａ〜７０Ｂが処理可能であるか否かを判断する（ステップＳ３４）。
【００５３】
例えば、図６に示される「”/”−”book”」という部分ツリーについては、図７に示された処理能力情報を参照すると”//”は処理可能であるから、”/”以下のこの部分ツリーをＤＢサーバ７０Ａ〜７０Ｂが処理可能であると判断することができる。この場合（ステップＳ３５：ＹＥＳ）、コード生成部６０１は、for節の第２子ノードは必ず変数であるので、for節の第３子ノード以下の部分ツリーについて、ＤＢサーバ７０Ａ〜７０Ｂの処理能力を超えていない変数を参照している最大部分ツリーを選び出す（ステップＳ３６）。例えば、for節の第３子ノード以下では、変数「$x」に対して、図７に示された処理能力情報を参照すると”//”は処理可能であるから、「$x//author」という部分ツリーは処理可能である。このようにコード生成部６０１はボトムアップに部分ツリーを評価する。そして、コード生成部６０１は、得られた部分ツリーの集合から構成ルールに従って、クエリコードを生成する（ステップＳ３７）。構成ルールとは、部分ツリーの集合からコードを生成するための簡単なルールである。例えば、「for」と「cond」とで結ばれていれば、「for let」の構文に変形するなどのルールである。このようにしてコード生成部６０１はクエリコードを生成する。この結果、ＤＢサーバ７０Ａに対しては、図８に例示されたクエリコードＱＣ１が求まる。ＤＢサーバ７０Ｂに対しては、図８に例示されたクエリコードＱＣ２が求まる。
【００５４】
そして、コード生成部６０１は、構文ツリーの全てについて走査を終えると（ステップＳ３１：ＹＥＳ）、クエリコードが得られたか否かを判断する（ステップＳ３８）。ここでは、クエリコードが得られたとすると、次いで、コード生成部６０１は、既に得られたクエリコードに対応する構文ツリーのノードをチェックし、構成ルールに従って、クエリコード同士を結合するタプルコードを生成する（ステップＳ３９）。例えば、図６においては、クエリコードＱ２から「$x//author」と「$y//name」とが求まるので、「cond」が評価可能である。そこで、コード生成部６０１は、各クエリコードに対して、和(UNION)を入れたあとで、結合(JOIN)を行う。「cond」の結果を結果生成(MAP2ITEM)に変換する。このようにボトムアップに評価可能な部分をコード生成部６０１は計算する。条件分岐(IFTHENELSE)は、タプル処理できないので、ここで停止する。次いで、コード生成部６０１は、クエリコードやタプルコードとなっていない構文ツリー上のノードをチェックし、これらを全て手続きコードとして生成する（ステップＳ４０）。構文解析結果は、そのまま手続きコードとして実行できるので、最終的には図８に例示されるような各種コードが生成される。
【００５５】
尚、上述の説明においては、各種コードの生成時に図７に例示された処理能力情報を参照する場合について説明した。ここで、処理能力情報の他の例として、図１５に示される処理能力情報を参照した場合に生成される各種コードについて説明する。図１５においては、PathExprを構成する BNF定義部分である「RelativePathExpr」において、“//”の構文が扱えないことが表されている。
【００５６】
このような処理能力情報を参照して、コーディネータサーバ６０のコード生成部６０１が図１４のステップＳ３６の処理を行った場合、”//”についてＤＢ７０Ａ〜７０Ｂは処理不可能であるから、「$x//author」をクエリコードとして生成せず、タプルコードとして生成する。この結果、図１６に例示されるような各種コードが生成される。上述の図８に例示された各種コードと異なる点は、「$x//author」と「$y//name」をタプルコードで生成するという点である。
【００５７】
以上のように、クエリコードと、タプルコードと、手続きコードとの組み合わせにより各々処理されることにより、分散された各種サーバを用いて透過的にXQueryを処理することが可能になる。従って、分散ＸＭＬデータベースシステムにおいて、分散透過性を維持可能に分散クエリ処理を実現可能になる。
【００５８】
また、ＤＢサーバ７０Ａ〜７０Ｂの各処理能力情報を参照して各種コードを生成し、各種コードによって表される処理が各々実行されることにより、完全な分散XQuery処理を実現可能になる。即ち、本実施形態における構成によって、XQueryをフルサポートしていなかったりサポート率もまちまちであったりする各種のＸＭＬデータベースを用いて、XQueryフルサポート機能を備えた分散ＸＭＬデータベースシステムを構成することができる。
【００５９】
従来の分散ＸＭＬデータベースでは、例えば、以下のような前提があった。
・データベースサーバは完全なXQuery仕様を解くことができる。
・コーディネータサーバは、データベースサーバのXQuery解決能力に疑問を持たない。
【００６０】
しかし、実際には、分散ＸＭＬデータベースを構成するデータベースは、完全なXQuery仕様を解くことができるものばかりであるとは限らない。このため、このような分散ＸＭＬデータベースが分散XQuery処理を行った場合、完全な処理結果が得られないという問題が生じる恐れがあった。上述したように、本実施の形態の構成によれば、このような問題を解決することが可能になる。
【００６１】
[変形例]
なお、本発明は前記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、前記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。また、以下に例示するような種々の変形が可能である。
【００６２】
＜変形例１＞
上述した実施の形態においては、コーディネータサーバ６０がＤＢサーバ７０Ａ〜７０Ｂの処理能力情報を参照して、クライアント５０から受信したクエリから各種コードを生成するように構成した。しかし、コーディネータサーバ６０が処理能力情報を参照せずに、クエリから各種コードを生成するようにしても良い。図１７は、本変形例に係る分散ＸＭＬデータベースシステムの構成を例示する図である。同図に示されるように、上述の実施の形態と異なる点は、コーディネータサーバ６０がＤＢサーバ処理能力管理部６０２を有さない点である。このような構成においては、ＤＢサーバ７０Ａ〜７０Ｂは、自身の処理能力情報をコーディネータサーバ６０に送信しない。そして、このような分散ＸＭＬデータベースシステムにおける動作は、例えば以下の通りである。図１３において、ステップＳ１〜Ｓ３の処理が行われず、ステップＳ６では、コーディネータサーバ６０は、処理能力情報を参照せずに、クライアント５０から受信したクエリを構文解析し、クエリコードとタプルコードと手続きコードとを生成する。
【００６３】
このような構成によっても、ＤＢサーバ７０Ａ〜７０Ｂが各々行う処理を表すクエリコードと、コーディネータサーバ６０が行う処理を表すコードとして、タプルコードと、手続きコードとの組み合わせにより各々処理されることになるため、分散されたサーバを用いて透過的にXQueryを処理することが可能になる。
【００６４】
また、上述の実施の形態においては、ＸＭＬデータの取得を要求するクエリとして、XQueryを用いたが、本実施の形態においてはこれに限らない。
【００６５】
また、コーディネータサーバ６０は、クエリコードの実行結果を用いて行う処理を表すコードとして、タプルコードと、手続きコードとを生成するようにしたが、本実施の形態においてはこれに限らない。
【００６６】
＜変形例２＞
上述の実施の形態においては、ＤＢサーバ７０Ａ〜７０Ｂが分散ＸＭＬデータベースサーバシステムへの接続時に、コーディネータサーバ６０は、処理能力情報を取得するようにした。しかし、これに限らず、コーディネータサーバ６０は、記憶装置や外部記憶装置に処理能力情報を予め記憶しておき、各種コードの生成時にはこれを用いるようにしても良い。
【００６７】
＜変形例３＞
上述した実施の形態において、コーディネータサーバ６０やＤＢサーバ７０Ａ〜７０Ｂで実行される各種プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、各種プログラムを、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成しても良い。
【図面の簡単な説明】
【００６８】
【図１】一実施の形態にかかる分散ＸＭＬデータベースシステムの構成を例示する図である。
【図２】コード生成部６０１とコード実行部６０３との機能的構成を例示する図である。
【図３】３つのＸＭＬデータのデータ構成を例示する図である。
【図４】条件に該当するＸＭＬデータの取得を要求するクエリの例として、XQueryのデータ構成を例示する図である。
【図５】XQueryのデータ構成が複雑な例を示す図である。
【図６】図４に示された構文解析部６０１０が、図５に示されたXQueryを構文解析した結果を例示する図である。
【図７】ＤＢサーバ７０Ａから送信された処理能力情報を例示する図である。
【図８】図６に示された構文解析の結果に対して、クエリコード生成部６０１１が図７に示された処理能力情報を参照して生成するクエリコードと、タプルコード生成部６０１２が生成するタプルコードと、手続きコード生成部６０１３が生成する手続きコードとを例示する図である。
【図９】図８に例示した各コードの関係を簡略化して示した図である。
【図１０】ＤＢサーバ７０ＡがクエリコードＱ１を実行した結果の結果データを例示する図である。
【図１１】ＤＢサーバ７０ＢがクエリコードＱ２を実行した結果の結果データを例示する図である。
【図１２】コーディネータサーバ６０がタプルコードを実行した結果の結果データを例示する図である。
【図１３】分散ＸＭＬデータベースシステムが行う検索処理の手順を示すシーケンスチャートである。
【図１４】ステップＳ６でコーディネータサーバ６０が各種コードを生成するコード生成処理の手順を示すフローチャートである。
【図１５】処理能力情報の他の例を示す図である。
【図１６】図１５に例示される処理能力情報を参照して生成される各種コードを例示する図である。
【図１７】本実施の形態の一変形例に係る分散ＸＭＬデータベースシステムの構成を例示する図である。
【符号の説明】
【００６９】
５０      クライアント
５１      分散ＸＭＬデータベース
５２      ネットワーク
６０      コーディネータサーバ
７０Ａ    ＤＢサーバ
７０Ｂ    ＤＢサーバ
６００    クエリ受信部（第１受信手段）
６０１    コード生成部（生成手段）
６０２    サーバ処理能力管理部（取得手段）
６０３    コード実行部（実行手段、第２受信手段）
６０４    結果データ送信部（第２送信手段）
７００Ａ  データベース
７００Ｂ  データベース
６０１０  構文解析部（解析手段）
６０１１  クエリコード生成部
６０１２  タプルコード生成部
６０１３  手続きコード生成部
６０３０  クエリコード送信部
６０３１  結果データ受信部（第２受信手段）
６０３２  タプルコード実行部
６０３３  手続きコード実行部
【図１】
0005161535.tif 000002
【図２】
0005161535.tif 000003
【図３】
0005161535.tif 000004
【図４】
0005161535.tif 000005
【図５】
0005161535.tif 000006
【図６】
0005161535.tif 000007
【図７】
0005161535.tif 000008
【図８】
0005161535.tif 000009
【図９】
0005161535.tif 000010
【図１０】
0005161535.tif 000011
【図１１】
0005161535.tif 000012
【図１２】
0005161535.tif 000013
【図１３】
0005161535.tif 000014
【図１４】
0005161535.tif 000015
【図１５】
0005161535.tif 000016
【図１６】
0005161535.tif 000017
【図１７】
0005161535.tif 000018