(57)【特許請求の範囲】
【請求項１】
複数の要素を含むデータの取得を要求する第１処理要求をクライアントから受信する受信手段と、
前記第１処理要求に応じて、データベースから該当の第１データと当該第１データ内における要素間の関連及び各要素の位置付けを示すデータ構造情報とを取得する取得手段と、
前記第１データに含まれる各要素に対して、前記データ構造情報を用いて、各要素を識別子にするか否かを判断する判断手段と、
前記第１データに含まれる要素のうち、前記判断手段によって前記識別子にすると判断された第１要素を第１識別子にすることにより、当該第１識別子と、前記第１データに含まれる要素のうち前記第１要素以外の要素とを含む第２データを生成するデータ生成手段と、
前記第２データを前記クライアントに送信する結果送信手段とを備える
ことを特徴とするサーバ。
【請求項２】
前記識別子はデータベース識別情報及びオブジェクトＩＤであることを特徴とする請求項１記載のサーバ。
【請求項３】
前記判断手段は、
前記第１データに含まれる各要素に対して、前記データ構造情報を用いて、送信の優先度合を示す優先度を算出する算出手段と、
前記優先度と、予め定められた閾値とを用いて、各前記要素を識別子にするか否かを判断する優先判断手段とを有する
ことを特徴とする請求項１又は２に記載のサーバ。
【請求項４】
前記受信手段は、前記処理要求を、前記クライアントと接続される他のサーバを介して前記クライアントから受信し、
前記結果送信手段は、前記第２データを前記他のサーバを介して前記クライアントに送信する
ことを特徴とする請求項１乃至３に記載のサーバ。
【請求項５】
前記受信手段は、データの検索を要求する第２処理要求に基づいて当該サーバが実行可能な形式に変換された処理コードを前記他のサーバを介して前記クライアントから受信し、
前記取得手段は、
前記処理コードを実行することにより、前記データベースから前記第１データ及び前記データ構造情報を読み出す読出手段と、
前記第１データを読み出した読出結果を示す結果データを生成する第１生成手段と、
前記結果データを前記他のサーバに送信する第１送信手段とを有する
ことを特徴とする請求項４に記載のサーバ。
【請求項６】
前記判断手段は、前記受信手段が前記処理コードを受信した後、前記第１データ及び前記データ構造情報の取得を要求する第３処理要求を前記他のサーバを介して前記クライアントから受信した場合、前記読出手段によって読み出された前記第１データに含まれる各要素に対して、前記データ構造情報を用いて、各要素を識別子にするか否かを判断する
ことを特徴とする請求項５に記載のサーバ。
【請求項７】
前記第１識別子にされた前記第１要素の取得を要求する第４処理要求を前記受信手段が受信した場合、前記第１データに含まれている要素であって前記第１識別子にされる前の前記第１要素を含む第３データを生成する第２生成手段と、
前記第３データを、前記他のサーバを介して前記クライアントに送信する第２送信手段とを更に備える
ことを特徴とする請求項６に記載のサーバ。
【請求項８】
前記データ生成手段は、前記第１要素を、前記サーバを特定するサーバ特定情報と、前記第１データにおける前記第１要素を特定する要素特定情報とを含む第１識別子にした第２データを生成する
ことを特徴とする請求項７に記載のサーバ。
【請求項９】
前記第２生成手段は、前記第１識別子に含まれる前記サーバ特定情報によって前記他のサーバから特定されたサーバである場合、前記第１識別子に含まれる要素特定情報によって特定される前記第１要素の取得を要求する第４処理要求を前記受信手段が受信した場合、前記第１識別子に含まれる要素特定情報によって特定される前記第１要素を含む第３データを生成する
ことを特徴とする請求項８に記載のサーバ。
【請求項１０】
前記データベースは、複数に分散されており、そのうちの少なくとも１つの第１データベースを備え、
前記取得手段は、受信された前記第１処理要求に応じて、前記第１データベースから該当の第１データ及び前記データ構造情報を取得する
ことを特徴とする請求項１乃至９のいずれか一項に記載のサーバ。
【請求項１１】
前記データベースは、複数に分散されており、
複数に分散されたデータベースを有する少なくとも１つのデータベースサーバと接続され、
前記取得手段は、受信された前記第１処理要求に応じて、少なくとも１つの前記データベースサーバに対して前記データの取得を要求する取得要求を行い、当該データベースサーバから前記第１データ及び前記データ構造情報を取得する
ことを特徴とする請求項１に記載のサーバ。
【請求項１２】
前記データ、前記第１データ及び前記第２データのうち少なくとも１つは、ＸＭＬ（Extensible Markup Language）により表現されるデータであり、階層構造を有するデータである
ことを特徴とする請求項１乃至１０のいずれか一項に記載のサーバ。
【請求項１３】
前記判断手段は、前記データ構造情報を用いて、階層構造における要素の深さ、要素のサイズ及び同一種類の要素が繰り返し表れる数の少なくとも１つを用いて、各要素を識別子にするか否かを判断する
ことを特徴とする請求項１１に記載のサーバ。
【請求項１４】
受信手段と、取得手段と、判断手段と、データ生成手段と、結果送信手段とを備えるサーバにおいて実現される方法であって、
前記受信手段が、複数の要素を含むデータの取得を要求する第１処理要求をクライアントから受信する受信ステップと、
前記取得手段が、受信された前記第１処理要求に応じて、データベースから該当の第１データと当該第１データ内における要素間の関連及び各要素の位置付けを示すデータ構造情報とを取得する取得ステップと、
前記判断手段が、取得された前記第１データに含まれる各要素に対して、前記データ構造情報を用いて、各要素を識別子にするか否かを判断する判断ステップと、
前記データ生成手段が、前記第１データに含まれる要素のうち、前記判断ステップで前記識別子にすると判断された第１要素を第１識別子にすることにより、当該第１識別子と、前記第１データに含まれる要素のうち前記第１要素以外の要素とを含む第２データを生成するデータ生成ステップと、
前記結果送信手段が、生成された前記第２データを前記クライアントに送信する結果送信ステップとを含む
ことを特徴とするデータ転送方法。
【請求項１５】
請求項１４に記載された方法をコンピュータで実行させることを特徴とするデータ転送プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアントとの間でデータ転送を行うサーバ、データ転送方法及びプログラムに関する。
【背景技術】
【０００２】
従来より、クライアントからの要求に応じて、データーベースに記憶されているデータを検索して検索結果のデータをクライアントに転送するデーターベースサーバがある。近年では、巨大なデータに対応するため、データベースを各々有する複数のデータベースサーバとコーディネータサーバとがネットワークを介して接続される分散データベースシステムが構築されている。このような分散データベースシステムにおいて、クライアントは、コーディネータサーバを介してデータベースサーバから検索結果のデータを受信する。分散データベースシステムでは、複数のデータベースにデータが分割配置されているため、コーディネータサーバは複数のデータベースサーバに並列アクセスが可能となる。従って、データベース数に応じた性能向上が期待される。その反面、コーディネータサーバ及びデータベースサーバ間や複数のデータベースサーバ間でデータをやり取りするために必要なネットワーク上でのデータ転送が、大きなオーバヘッドになる。仮に高速な相互結合されたネットワークであっても同様である。このため、分散効果が大きく低減して、期待された性能向上が望めないことが多い。
【０００３】
このような問題を改善するため、複数のサーバ間で転送するデータ（転送データ）を圧縮するなどの手法が提案されている。また、特許文献１には、検索処理時にはデータサーバからフロントエンドサーバにレコードＩＤだけを転送し、フェッチ処理時にデータサーバにおいてレコードＩＤから実レコードに変換する、という現実に即した手法が提案されている。
【０００４】
【特許文献１】特許第３７４７５２５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
転送データを圧縮するなどの手法では、圧縮率が高ければ効果は大きい。しかし、規則性のない文字列などではその圧縮率は３０％程度であるため、転送データを劇的に削減するのは困難である。
【０００６】
また、特許文献１の手法にも、以下の２点の問題点があると考えられる。レコードを検索して結果レコードを順次更新するというトランザクションであれば、効果は十分あり、レスポンスも改善され得る。しかし、通常の全文検索のように検索結果のレコード一覧を瞬時に作成するケースでは、データの転送量が増えるため、無駄が多いという点である。さらに、転送データがレコードＩＤか実レコードかという二者択一では不都合なケースも発生するという点である。例えば、ＸＭＬデータなどの非定型のデータを取り扱う場合である。この場合、前者ではデータ不足、後者では無駄なデータの転送、というジレンマが発生する恐れがある。なぜなら、非定型のデータの場合、取り出されるデータのデータサイズが予測できないからである。
【０００７】
本発明は、上記に鑑みてなされたものであって、必要なデータを転送しつつ、無駄なデータの転送を低減可能なサーバ、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、本発明は、サーバであって、複数の要素を含むデータの取得を要求する第１処理要求をクライアントから受信する受信手段と、前記第１処理要求に応じて、データベースから該当の第１データと当該第１データ内における要素間の関連及び各要素の位置付けを示すデータ構造情報とを取得する取得手段と、前記第１データに含まれる各要素に対して、前記構造情報を用いて、各要素を識別子にするか否かを判断する判断手段と、前記第１データに含まれる要素のうち、前記判断手段によって前記識別子にすると判断された第１要素を第１識別子にすることにより、当該第１識別子と、前記第１データに含まれる要素のうち前記第１要素以外の要素とを含む第２データを生成するデータ生成手段と、前記第２データを前記クライアントに送信する結果送信手段とを備えることを特徴とする。
【０００９】
また、本発明は、受信手段と、取得手段と、判断手段と、データ生成手段と、結果送信手段とを備えるサーバにおいて実現される方法であって、前記受信手段が、複数の要素を含むデータの取得を要求する第１処理要求をクライアントから受信する受信ステップと、前記取得手段が、受信された前記第１処理要求に応じて、データベースから該当の第１データと当該第１データ内における要素間の関連及び各要素の位置付けを示すデータ構造情報とを取得する取得ステップと、前記判断手段が、取得された前記第１データに含まれる各要素に対して、前記データ構造情報を用いて、各要素を識別子にするか否かを判断する判断ステップと、前記データ生成手段が、前記第１データに含まれる要素のうち、前記判断ステップにおいて前記識別子にすると判断された第１要素を第１識別子にすることにより、当該第１識別子と、前記第１データに含まれる要素のうち前記第１要素以外の要素とを含む第２データを生成するデータ生成ステップと、前記結果送信手段が、生成された前記第２データを前記クライアントに送信する結果送信ステップとを含むとを含むことを特徴とする。
【００１０】
また、本発明は、データ転送プログラムであって、上記に記載された方法をコンピュータで実行させることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、必要なデータを転送しつつ、無駄なデータの転送を低減することができる。
【発明を実施するための最良の形態】
【００１２】
以下に添付図面を参照して、この発明にかかるサーバ、方法及びプログラムの最良な実施の形態を詳細に説明する。
【００１３】
[第１の実施の形態]
（１）構成
図１は、本実施の形態にかかるデータベースシステムの構成を例示する図である。データベースシステムは、アプリケーションプログラムが実行されるクライアントコンピュータ（以下、クライアントという）５０と、データベースサーバ５１とを有し、これらがネットワーク５２を介して接続されて構成される。ネットワーク５２は、例えば、ＬＡＮ（Local Area Network）、イントラネット、イーサネット（登録商標）又はインターネットなどである。
【００１４】
クライアント５０は、データの取得を要求するデータ取得要求などの処理要求を、ネットワーク５２を介してデータベースサーバ５１に送信し、その処理結果をデータベースサーバ５１から受信する。データベースサーバ５１は、データを記憶するデータベース５１０を有し、クライアント５０からの処理要求に応じたデータをデータベース５１０から取得し、当該データを適宜加工して結果データを生成し、これを処理結果としてクライアント５０に送信する。
【００１５】
ここで、クライアント５０及びデータベースサーバ５１のハードウェア構成について説明する。クライアント５０及びデータベースサーバ５１は各々、装置全体の制御を行うＣＰＵ（Central Processing Unit）等の制御装置と、各種データや各種プログラムを記憶するＲＯＭ（Read Only Memory）やＲＡＭ（Random Access Memory）等の記憶装置と、各種データや各種プログラムを記憶するＨＤＤ（Hard Disk Drive）やＣＤ（Compact Disk）ドライブ装置等の外部記憶装置と、ネットワーク５２を介して外部のコンピュータと通信を行う通信制御装置と、これらを接続するバスとを備えており、通常のコンピュータを利用したハードウェア構成となっている。また、クライアント５０及びデータベースサーバ５１には各々、情報を表示するディスプレイ装置等の表示装置と、ユーザが各種処理要求を入力するためのキーボードやマウス等の入力装置とが有線又は無線により接続される。このような構成において、上述のデータベース５１０は、データベースサーバ５１の有する外部記憶装置に格納されている。
【００１６】
尚、ここでは、データベース５１０は、ＸＭＬ(Extensible Markup Language)データベースであるとし、タプルを包含したＸＭＬデータを記憶するものとする。通常、データベースとしては、データ間の関係性をモデル化した関係データベース(Relational Database：RDB)が使われる。ＲＤＢでは、カラムの固定的な並びであるタプルの集合でデータベースを表現する。それ以外に、文書データの階層構造をモデル化した構造化文書データベースも存在する。これがいわゆるＸＭＬデータベースと呼ばれているものである。これは要素の上下関係、兄弟関係を保持した文書データの集合でデータベースを表現する。ＸＭＬは記述能力が高い。タプルも上下関係が１段しかないＸＭＬデータとして表現することができる。
【００１７】
例えば、図２に示されるタプルは、図３に示されるようなＸＭＬデータに等価変換することができる。本実施の形態においては、このように記述能力の高いＸＭＬにより記述されたＸＭＬデータを取り扱うものとする。但し、本実施の形態においては、ＸＭＬデータに限定されることなく、データベース５１０がＲＤＢであっても良い。
【００１８】
図４は、データベース５１０に記憶されるＸＭＬデータを３つ例示する図である。ＸＭＬは、文書構造を構成する個々のパーツを要素(エレメント：Element)と呼び、要素はタグ(Tag)を使って記述される。具体的には、ＸＭＬでは、要素の始まりを示すタグ(開始タグ)と、終わりを示すタグ(終了タグ)との２つのタグでデータを挟み込んで、１つの要素を表現している。なお、開始タグと終了タグとで挟み込まれたデータは、当該開始タグと終了タグとで表された１つの要素に含まれるテキスト要素(テキストノード)である。図４の例では、各ＸＭＬデータＸＤ１〜ＸＤ３は、<paper>要素で挟み込まれた複数の部分的なＸＭＬデータから構成されている。部分的なＸＭＬデータとは各々、<title>要素で挟み込まれた文書のタイトルに関するデータと、<body>要素で挟み込まれた文書の本文に関するデータと、<P >要素で挟み込まれた各行ごとのデータとである。このように、複数の階層構造や意味を持ったデータが１つのＸＭＬデータに混在していることがわかる。
【００１９】
図５は、データベースの例として、ＸＭＬデータベースとしてのデータベース５１０におけるＸＭＬデータの物理的な記憶状態をイメージ化した図である。データベース５１０には、図４に示したＸＭＬデータＸＤ１〜ＸＤ３が記憶されているものとする。ＸＭＬデータは、ＤＯＭ(Document Object Model)に似た形式でオブジェクトとリンクとで表現される。ＤＯＭはＸＭＬデータをオブジェクト指向で表現するモデルであり、ＸＭＬデータを構成する部分が、その対応付けられたオブジェクトとして表現される。例えば、要素には要素クラス、属性には属性クラスが事前に定義されており、それらのインスタンスを作成して表現される。また、ＤＯＭにおいて、オブジェクトは木構造（ツリー）として扱われている。同様に図４においても、<root>オブジェクトの直下には３つの<paper>オブジェクトが存在し、<root>オブジェクトから親子関係を示すリンクでつながれている。オブジェクトの最下層には、テキストデータを示すテキストオブジェクトが存在している。
【００２０】
各オブジェクトには「e0」から「e24」までのオブジェクトＩＤが割り当てられているものとする。オブジェクトＩＤは、データベース５１０においてオブジェクトを一意に識別可能なＩＤである。このようなオブジェクトＩＤとしては、ファイル内の相対位置を示すファイルオフセットなどを使った物理ＩＤを用いても良い。また、論理ＩＤを用いて、内部で物理ＩＤと論理ＩＤとをテーブルで管理しても良い。
【００２１】
次に、上述したハードウェア構成において、データベースサーバ５１が、記憶装置や外部記憶装置に記憶された各種プログラムを実行することにより実現される各種機能について説明する。データベースサーバ５１は、図１に示されるように、要求受信部５１１と、要求処理部５１２と、結果データ管理部５１３と、ＩＤ範囲決定部５１４と、結果送信部５１５とを有する。これら各部の実体は、ＣＰＵが各種プログラムを実行することにより例えば記憶装置（例えばＲＡＭ）上に生成される。
【００２２】
要求受信部５１１は、クライアント５０から送信された処理要求を受信する。要求処理部５１２は、要求受信部５１１が受信した処理要求が、ＸＭＬデータの取得を要求するデータ取得要求か又はＧＩＤを含み、ＸＭＬデータを構成する要素のデータの取得を要求する実データ取得要求かを判断する。ＧＩＤは、データベースサーバ５１を識別するデータベース識別情報と、上述したオブジェクトＩＤとを含む。処理要求が通常データ取得要求である場合、要求処理部５１２は、当該通常データ取得要求に応じたＸＭＬデータをデータベース５１０から取得し、取得したＸＭＬデータの集合に対して併合や結合などの加工を適宜行って、ＸＭＬ形式で表現される第１結果データを生成する。一方、処理要求が実データ取得要求である場合、要求処理部５１２は、ＧＩＤに対応する要素のデータをデータベース５１０から取得し、当該要素のデータを（識別子）含む第３結果データを生成してこれを結果データ管理部５１３に記憶させる。
【００２３】
ＩＤ範囲決定部５１４は、結果データ管理部５１３が記憶している第１結果データに含まれる各要素について、第１結果データ内における要素間の関連及び各要素の位置付けを求め、各要素をＧＩＤに置換するか否かを判断する。具体的には、ＩＤ範囲決定部５１４は、結果データ管理部５１３が記憶している第１結果データを要素毎に分解し、第１結果データ内における要素間の関連及び各要素の位置付けを求める。そして、ＩＤ範囲決定部５１４は、要素間の関連及び各要素の位置付けを用いて、後述の所定の規則に基づいて各要素について、送信の優先度合を示す優先度を算出する。要素間の関連とは親子間の関連を意味し、位置づけとは兄弟間の関係からなる要素の位置を意味する。そして、ＩＤ範囲決定部５１４は、当該優先度と予め定められた閾値とを用いて、各要素をＧＩＤに置換するか否かを判断する。即ち、ここで、ＩＤ範囲決定部５１４は、各要素について送信の優先度合が高いか否か、即ち、すぐに送信すべきか又は実データ取得要求時に送信すべきかを判断する。これにより、ＩＤ範囲決定部５１４は、ＸＭＬデータにおいてグローバルＩＤ（ＧＩＤ）に置換する要素の範囲（ＩＤ化の範囲）を決定する。尚、閾値は例えば記憶装置や部記憶装置に予め記憶されているものとする。データベース識別情報には、データベースサーバ５１に対して予め付与された識別番号などやＩＰアドレスなどを用いれば良い。尚、データベースシステムにおいて、データベースサーバが複数存在しない場合には、ＧＩＤは、データベース識別情報を含まなくても良い。そして、ＩＤ範囲決定部５１４は、ＸＭＬデータを構成する要素のうち、実データ取得要求時に送信すべきと判断した要素をＧＩＤに置換し、当該ＧＩＤと、当該ＸＭＬデータを構成する他の要素とを含む第２結果データを生成してこれを結果データ管理部５１３に記憶させる。
【００２４】
結果データ管理部５１３は、記憶領域として記憶し、第１結果データ乃至第３結果データを一時的に記憶する。結果送信部５１５は、結果データ管理部５１３に記憶された第２結果データ又は第３結果データを処理結果としてクライアント５０に送信する。
【００２５】
（１）動作
次に、データベースサーバ５１が行うデータ転送処理の手順について図６を用いて説明する。データベースサーバ５１の要求受信部５１１は、クライアント５０から送信された処理要求を受信する（ステップＳ１）。要求処理部５１２は、ステップＳ１で受信された処理要求を解析して、データ取得要求であるか又は実データ取得要求であるかを判断する（ステップＳ２）。例えば、データ取得要求には、取得対象のＸＭＬデータを検索するための検索条件や、取得対象のＸＭＬデータを指定する情報が含まれている。実データ取得要求には、取得対象の要素を指定するための上述のＧＩＤが含まれている。そして、要求処理部５１２は、このような構成の処理要求について、ステップＳ２の判断を行い、処理要求がデータ取得要求であると判断した場合（ステップＳ２：ＮＯ）、データ取得要求に応じたＸＭＬデータをデータベース５１０から取得する（ステップＳ３）。そして、要求処理部５１２は、ステップＳ３で取得したＸＭＬデータの集合に対して加工を適宜行って、ＸＭＬ形式で表現される第１結果データを生成してこれを結果データ管理部５１３に記憶させる（ステップＳ４）。
【００２６】
図７は、結果データ管理部５１３に記憶される第１結果データを例示する図である。図４に示した２つのＸＭＬデータＸＤ１〜ＸＤ２に各々基づいて生成された２つの第１結果データＫＤ１〜ＫＤ２が、結果データ管理部５１３の記憶領域上にあり、各記憶領域へのポインタ配列で管理されている。
【００２７】
次いで、ＩＤ範囲決定部５１４は、結果データ管理部５１３が記憶している第１結果データを要素毎に分解し、第１結果データ内における要素間の関連及び各要素の位置付けを求め、所定の規則に基づいて各要素の優先度を算出する（ステップＳ５）。
【００２８】
具体的には、ＩＤ範囲決定部５１４は、第１結果データを構成する各要素に対して、例えば以下の２つの尺度に基づいた重要度付けを用いた規則により、各要素の優先度を算出する。
・構造の重要度(pw：パスウェイト)
・サイズに基づく送信コスト(size)
優先度には、「pw」と「size」の逆数を掛け合わせた値を用いる。ここでは、優先度の値が大きいものほど、すぐに送信すべき優先度が高いものとする。
【００２９】
例えば図５に示したＸＭＬデータＸＤ１〜ＸＤ３において<paper>以下の各要素e2〜e8に対する優先度は以下のように算出される。図８は、図５に示したＸＭＬデータＸＤ１〜ＸＤ３において各要素と共に各要素に対する算出結果を一部例示する図である。
(a)要素e2について
・pw：titleは兄弟で1個しかないので「1」である。
・size：「4」と仮定する。
この結果、要素e2の優先度は、「1/4×1=1/4」と算出される。
(b)要素e3について
・pw：兄弟は1個しかない。上位pwと掛け合わせて「1×1=1」
・size：テキスト長が「10」であるので、「10」とする。
この結果、要素e3の優先度は、「1/10×1=1/10」と算出される。
(c)要素e4について
・pw：兄弟は1個しかない。上位pwと掛け合わせて「1×1=1」
・size：「4」と仮定する。
この結果、要素e4の優先度は、「1/4×1=1/4」と算出される。
(d)要素e5について
・pw：兄弟は2個ある。上位pwと掛け合わせて「1×1/2=1/2」
・size：「4」と仮定する。
この結果、要素e5の優先度は、「1/4×1/2=1/8」と算出される。
(e)要素e6について
・pw：兄弟は1個ある。上位pwと掛け合わせて「1/2×1=1/2」
・size：テキスト長が「20」であるので、「20」とする。
この結果、要素e6の優先度は、「1/2×1/20=1/40」と算出される。
(f)要素e7について
・pw：兄弟は2個ある。上位pwと掛け合わせて「1×1/2=1/2」
・size：テキスト長が「4」であるので、「4」とする。
この結果、要素e7の優先度は、「1/2×1/4=1/8」と算出される。
(g)要素e8について
・pw：兄弟は1個ある。上位pwと掛け合わせて「1/2×1=1/2」
・size：テキスト長が「25」であるので、「25」とする。
この結果、要素e8の優先度は、「1/2×1/25=1/50」と算出される。
【００３０】
尚、要素e2,e4,e5でsizeを「4」と仮定したのは、下位要素よりも上位要素の優先度が高くなる不都合を回避するためである。このようにテキスト長が「4」未満の場合、ＩＤ範囲決定部５１４は、これを「4」に繰り上げて優先度を算出する。
【００３１】
このようにして各要素の優先度を算出した後、ＩＤ範囲決定部５１４は、各要素の優先度と、予め定められた閾値とを用いて、各要素をＧＩＤに置換するか否かを判断する。即ち、ＩＤ範囲決定部５１４は、すぐに送信すべきか又は実データ取得要求時に送信すべきかを判断する（ステップＳ６）。各要素の優先度と、予め定められた閾値とを用いて、ここでは、閾値は、例えば、「1/10」であるとする。具体的には、ＩＤ範囲決定部５１４は、優先度が閾値以上である要素を、ＧＩＤに置換するのではなくすぐに送信すべき要素であると判断する。上述の例では、要素e1〜e8のうち、要素e1,e2,e3,e4,e5,e7が、すぐに送信すべき要素であると判断される。残りの要素e6,e8が、実データ取得要求時に送信すべき要素であると判断され、ＧＩＤに置換すると判断される。
【００３２】
そして、ＩＤ範囲決定部５１４は、第１結果データ（ＸＭＬデータ）を構成する要素のうち、実データ取得要求時に送信すべきと判断した要素について、当該要素のオブジェクトＩＤと、当該データベースサーバ５１を識別するデータベースサーバ識別情報とを含むＧＩＤに置換し、当該ＧＩＤと、当該第１結果データを構成する他の要素とを含む第２結果データを生成してこれを結果データ管理部５１３に記憶させる（ステップＳ７）。次いで、結果送信部５１５は、当該第２結果データを処理結果としてクライアント５０に送信する（ステップＳ８）。
【００３３】
図９は、結果データ管理部５１３に記憶される第２結果データを例示する図である。図４に示した２つのＸＭＬデータＸＤ１〜ＸＤ２に各々基づいた２つの第２結果データＫＤ１１〜ＫＤ１２が、結果データ管理部５１３の記憶領域上にあり、各記憶領域へのポインタ配列で管理されている。同図における第２結果データは、図７に示した第１結果データと比較すると、一部の要素がＧＩＤに置換されている。具体的には、図４に示したＸＭＬデータＸＤ１に含まれる要素e6がＧＩＤ<#ds0, e6#/>に置換されており、要素e8がＧＩＤ<#ds0, e8#/>に置換されていることが示されている。また、ＸＭＬデータＸＤ２に含まれる要素e16がＧＩＤ<#ds0, e16#/>に置換されていることが示されている。ここでは、「#ds0」がデータ識別情報を示しており、「e6#」，「e8#」，「e16#」が各々オブジェクトＩＤを示している。
【００３４】
従来であれば、クライアント５０に送信するデータは、図７に示されるような第１結果データであり、これが全てクライアント５０に送信されるか、フェッチなどのコマンドもしくはＡＰＩを用いて逐次送信されていた。一方、本実施の形態においては、クライアント５０に送信する対象のデータは、図９に示されるような第２結果データである。これにより、クライアント５０に送信するデータの転送量を第１結果データに比べてかなり小さくすることができる。
【００３５】
図６に戻り、ステップＳ２で、処理要求が実データ取得要求である場合（ステップＳ２：ＹＥＳ）、要求処理部５１２は、当該実データ取得要求に含まれるＧＩＤを解析して、当該ＧＩＤに含まれるオブジェクトＩＤに対応する要素のデータをデータベース５１０から取得し、当該要素のデータを含む第３結果データを生成してこれを結果データ管理部５１３に記憶させる（ステップＳ９）。次いで、結果送信部５１５は、当該第３結果データを処理結果としてクライアント５０に送信する（ステップＳ１０）。
【００３６】
一方、クライアント５０は、ステップＳ８でデータベースサーバ５１から送信された第２結果データを受信して、アプリケーションの必要に応じて、当該第２結果データに含まれるＧＩＤを検出して、検出したＧＩＤを含む実データ取得要求をデータベースサーバ５１に送信する。この結果、当該ＧＩＤに対応する要素のデータを含む第３結果データが上述のステップＳ１０でデータベースサーバ５１から送信されて、クライアント５０は、ＧＩＤに対応する要素のデータを取得することができる。図１０は、クライアント５０が取得する第２結果データ及び第３結果データを例示する図である。同図において、第２結果データＫＤ１１に対して、ＧＩＤ<#ds0, e6#/>，<#ds0, e8#/>が抽出され、当該各ＧＩＤに対応する各要素のデータを含む第３結果データＫ２１が取得される。そして、第２結果データＫＤ１１におけるＧＩＤを、第３結果データＫ２１に含まれる要素のデータに置換することにより、クライアント５０は、データＣＤ１を取得することができる。
【００３７】
尚、クライアント５０のアプリケーションでは、図１０に示される<title>要素だけが必要であれば、<body>要素以下でＧＩＤに置換された要素があっても、<body>要素そのものをスキップするので、<body>要素以下のＧＩＤを検出する必要もなく、当該ＧＩＤに対応する要素のデータを取得する必要もない。このため、無駄なデータの取得を低減することができる。
【００３８】
以上のようにして、データを構成する各要素の優先度に基づいて、優先度が低いと判断した要素についてはＧＩＤに置換して処理結果をクライアント５０に送信する。これにより、必要なデータを転送しつつ、無駄なデータの転送を低減することができる。
【００３９】
なぜなら、データサイズが大きくなると、クライアント５０側のアプリケーションでは、実際には、データの一部の要素だけを使って、後の要素は不要というケースが多いからである。例えば、全文検索的な使われ方を想定する。先の<paper>要素の場合、<title>要素の一覧だけが必要で<body>要素は不要であるケースなどが良くある。しかし、ＸＭＬデータのように非定型なデータでは、実際にデータベースにアクセスしないと、その構造がわからないので、クライアント５０側のアプリケーションで要素の要不要を事前に判断するのは困難である。そこで、本実施の形態のように、実際のデータにアクセスするデータベースサーバ５１側で要素の要不要を予め判断することで、無駄なデータの転送を近似的に低減することができるのである。
【００４０】
[第２の実施の形態]
次に、データベースシステムの第２の実施の形態について説明する。なお、上述の第１の実施の形態と共通する部分については、同一の符号を使用して説明したり、説明を省略したりする。
【００４１】
（１）構成
図１１は、本実施の形態にかかるデータベースシステムの構成を示すブロック図である。本実施の形態にかかるデータベースシステムは、分散データベースシステムである。分散データベースシステムは、クライアント５０と、分散データベース６０とを有し、これらがネットワーク５２を介して接続されて構成される。分散データベース６０は１台のコーディネータサーバ６１と複数台のデータベースサーバ７０Ａ〜７０Ｃとを有する。
【００４２】
クライアント５０は、処理要求を、ネットワーク５２を介してコーディネータサーバ６１に送信し、その処理結果をコーディネータサーバ６１から受信する。
【００４３】
コーディネータサーバ６１は、クライアント５０と複数のデータベースサーバ７０Ａ〜７０Ｃと接続される。コーディネータサーバ６１は、条件に該当するＸＭＬデータの検索を要求する検索要求（クエリ)や、カーソルフェッチなどによるデータ取得要求や指定のＸＭＬデータの取得を要求するデータ取得要求や、上述したＧＩＤに対応する要素のデータの取得を要求する実データ取得要求などの処理要求をクライアント５０から受信し、当該処理結果に応じた処理を行い、その処理結果をクライアント５０に送信する。また、コーディネータサーバ６１は、クライアント５０から受信した処理要求に応じた処理を行う際に、データベースサーバ７０Ａ〜７０Ｃに対して処理要求を行い、その処理結果をデータベースサーバ７０Ａ〜７０Ｃから受信し、当該処理結果に対して加工を適宜施して、処理結果の結果データを生成してクライアント５０に送信する。
【００４４】
データベースサーバ７０Ａは、上述のデータベース５１０と同様のＸＭＬデータを記憶するデータベース７００Ａを有し、コーディネータサーバ６１からの処理要求に応じたＸＭＬデータをデータベース７００Ａから取得し、当該データを加工して結果データを生成し、これを処理結果としてコーディネータサーバ６１に送信する。データベースサーバ７０Ｂは、ＸＭＬデータを記憶するデータベース７００Ｂを有し、データベースサーバ７０Ａと同様の機能を実現させる。データベースサーバ７０Ｃは、ＸＭＬデータを記憶するデータベース７００Ｃを有し、データベースサーバ７０Ａと同様の機能を実現させる。
【００４５】
尚、例えば、図４に示したＸＭＬデータＸＤ１は、データベース７００Ａに記憶されており、ＸＭＬデータＸＤ２は、データベース７００Ｂに記憶されており、ＸＭＬデータＸＤ３は、データベース７００Ｃに記憶されているものとする。このようなＸＭＬデータＸＤ１〜ＸＤ３が記憶されている分散データベース６０におけるＸＭＬデータの物理的な記憶状態は図５に示したものと同様である。尚、以降、データベースサーバ７０Ａ〜７０Ｃを各々区別しない場合には、単にデータベースサーバ７０と記載し、データベース７００Ａ〜７００Ｃを各々区別しない場合には、単にデータベース７００と記載する。
【００４６】
尚、一般的に、分散データベースでは、データベース全体を複数のデータベースサーバに重複無しにデータ単位で分割することが多い。これをデータベースの水平分割と呼ぶ。本実施の構成においても、データベース７００Ａ〜７００Ｃには各々、重複しないＸＭＬデータが記憶されているものとする。また、データベース７００Ａ〜７００Ｃには、上述したデータベース識別情報が各々割り当てられているものとする。このような構成において、コーディネータサーバ６１は、クライアント５０からの処理要求を満足する処理結果を得るためには、データベースサーバ７０に適切な処理要求を行うとともに、データベースサーバ７０から処理結果として得られるデータを適切に処理する必要がある。
【００４７】
次に、コーディネータサーバ６１の構成について詳細に説明する。尚、コーディネータサーバ６１は、第１の実施の形態で説明した通常のコンピュータを利用したハードウェア構成となっている。このようなハードウェア構成において、コーディネータサーバ６１の有するＣＰＵが記憶装置や外部記憶装置に記憶された各種プログラムを実行することにより実現される各種機能について説明する。図１２はコーディネータサーバ６１及びデータベースサーバ７０の機能的構成を例示する図である。コーディネータサーバ６１は、要求受信部６１０と、要求処理部６１１と、結果データ管理部６１２と、結果受信部６１３と、結果送信部６１４とを有する。これら各部の実体は、ＣＰＵが各種プログラムを実行することにより例えば記憶装置（例えばＲＡＭ）上に生成される。
【００４８】
要求受信部６１０は、クライアント５０から送信された処理要求を受信する。要求処理部６１１は、要求受信部６１０が受信した処理要求が、クエリ(XQuery)か、指定のＸＭＬデータの取得を要求するデータ取得要求などの処理要求か又はＧＩＤに対応する要素のデータの取得を要求する実データ取得要求かを判断する。処理要求がクエリである場合、要求処理部６１１は、クエリからコードを生成する。クエリからコードを生成する方法については、例えば、特開平０６-１９５３８２号公報に示されている。そして、要求処理部６１１は、生成したコードをデータベースサーバ７０に送信し、そのコードの実行結果に基づいて処理結果として生成された第１０結果データをデータベースサーバ７０から結果受信部６１３を介して受信し、これを結果データ管理部６１２に記憶させる。この第１０結果データは、データベースサーバ７０Ａ〜７０Ｃの各データベース識別情報を含み、ＸＭＬデータ自体を含まない。そして、要求処理部６１１は、第１０結果データの件数（読出結果）を集計してその件数結果を示す第１１結果データを生成して、結果データ管理部６１２に記憶させる。
【００４９】
また、処理要求がデータ取得要求である場合、要求処理部６１１は、結果データ管理部６１２に記憶された第１０結果データに含まれるデータベース識別情報を参照して、該当のＸＭＬデータを記憶しているデータベースサーバ７０（データベースサーバ７０Ａ〜７０Ｂの少なくとも１つ）に対して、該当のＸＭＬデータの取得を要求するデータ取得要求を送信する。そして、要求処理部６１１は、当該データ取得要求に応じて取得されたＸＭＬデータを含む第１２結果データをデータベースサーバ７０から結果受信部６１３を介して受信して、これを結果データ管理部６１２に記憶させる。
【００５０】
また、処理要求が、ＧＩＤに対応する要素のデータの取得を要求する実データ取得要求である場合、要求処理部６１１は、当該ＧＩＤ含まれるデータベース指定情報によって指定されるデータベースサーバ７０に対して、当該ＧＩＤに含まれるオブジェクトＩＤに対応する要素のデータの取得を要求する実データ取得要求を送信する。そして、要求処理部６１１は、当該実データ取得要求に応じた要素のデータを含む第１３結果データをデータベースサーバ７０から結果受信部６１３を介して受信し、これを結果データ管理部６１２に記憶させる。
【００５１】
結果データ管理部６１２は、記憶領域として記憶し、上述の第１０結果データ乃至第１３結果データを一時的に記憶する。結果受信部６１３は、データベースサーバ７０から送信されるデータを受信する。結果送信部６１４は、結果データ管理部６１２に記憶された上述の第１１結果データ、第１２結果データ又は第１３結果データを処理結果としてクライアント５０に送信する。
【００５２】
ここで、クライアント５０から送信されるクエリXQueryについて説明する。XQueryは、ＸＭＬデータを記憶するデータベースへの問い合わせのための関数型言語であり、FLWR(for-let-where-return)構文が特徴になっている。ＲＤＢでの問い合わせ言語はＳＱＬであるが、SQLは宣言的な言語であるのに対して、XQueryは関数型言語としての特徴を多く持つ。以下に、XQueryの言語仕様を手続き的な観点で説明する。
【００５３】
for節の構文は、「for 変数 in 式」である。for節の構文は、式を満足するものを変数に代入してループするという意味を持つ。let節の構文は、「let 変数 ：＝ 式」である。let節の構文は、式を満足するものを集約してシーケンスとして変数に代入するという意味を持つ。シーケンスとは、フラットなリストである。where節は、Fで繰り返されるループを制限するものである。where節の構文は、「where 式」である。where節の構文は、式を満足するものだけループをまわし、そうでないものはループをスキップするという意味を持つ。return節は、XQueryを処理した結果をフォーマット化するものである。return節の構文は、「return 式」である。return節の構文は、変数を含む任意のＸＭＬデータを記述することができる。変数の構文は、「＄文字列」である。入れ子問い合わせなどで2重宣言された場合を除き、同じ文字列を持つ変数は同一のものと見なされる。ＸＭＬデータの要素間の階層条件を指定するパス演算子として、XQueryでは以下のようなものがある。
“/”：要素間は親子関係であることを示すオペレータ
“//”：要素間は先祖子孫関係であることを示すオペレータ
“.”：任意の要素
【００５４】
図１３は、条件に該当するＸＭＬデータの取得を要求するクエリの例として、XQueryのデータ構成を例示する図である。同図に示されるXQueryは、「子孫のあるテキストが”ＸＭＬ”を含むデータベース内のpaperというデータを返す」ことを要求している。
【００５５】
図１４は、図１３に示したXQueryから要求処理部６１１が生成するコードの一例を示す図である。コードとは、XQueryを処理するための手順である。直積や自然結合やリンク更新などの基本機能を持った命令をオペレータと呼ぶ。オペレータは、内部データを更新する。オペレータ間の入出力は、内部テーブルのポインタや内部テーブルＩＤなどを使って行われる。コードは、オペレータの系列であり、通常、オペレータをノードとする逆木構造をなす。
この例では、
・scanPath：<paper>要素のオブジェクトＩＤ集合を取り出す
・scanData：<paper>要素以下のテキスト要素を取り出す
・testContains：“XML”だけを含むテキスト要素を残す
・sendXML：残ったテキスト要素についてＸＭＬ形式で表現される文字列を返す
というオペレータ及びオペランドの系列から構成されている。
【００５６】
このようなコードが、上述したように例えば図４に示したＸＭＬデータＸＤ１〜ＸＤ３のいずれかを記憶するデータベースサーバ７０Ａ〜７０Ｃにより実行されると、testContains実行後に、図５に示した要素「e1」,「e9」が残り、sendXML実行後にその要素についてＸＭＬ形式で表現される文字列が生成される。例えば、図４のＸＭＬデータＸＤ１〜ＸＤ２に対応する文字列が生成される。
【００５７】
次に、データベースサーバ７０の機能的構成について詳細に説明する。データベースサーバ７０は、上述の第１の実施の形態と同様に、要求受信部７１１と、要求処理部７１２と、結果データ管理部７１３と、ＩＤ範囲決定部７１４と、結果送信部７１５とを有する。これらが上述の第１の実施の形態における要求受信部５１１、要求処理部５１２、結果データ管理部５１３、ＩＤ範囲決定部５１４及び結果送信部５１５と各々異なる点は以下の点である。
【００５８】
要求受信部７１１は、クライアント５０からの処理要求を直接受信するのではなく、クライアント５０からの処理要求に応じてコーディネータサーバ６１が送信した処理要求を受信する。要求処理部７１２は、要求受信部７１１が受信した処理要求に応じて、データベース７００にアクセスして、該当のデータを読み出し、当該データに対して適宜加工を施して、その処理結果を結果データ管理部７１３に一時的に記憶する。具体的には、要求処理部７１２は、要求受信部７１１が受信した処理要求が上述したコードである場合、当該コードを実行して、その結果得られるＸＭＬデータ（第２０結果データ）を結果データ管理部７１３に一時的に記憶して、当該ＸＭＬデータの件数と同数のデータベース識別情報を含む第１０結果データを生成し、これを結果データ管理部７１３に一時的に記憶する。この第１０結果データは、コーディネータサーバ６１が該当のＸＭＬデータの件数を集計するために生成される。尚、例えば、各データベース７００Ａ〜７００Ｃに記憶される各ＸＭＬデータは、各データベース内において一意に識別可能であるものとする。また、処理要求がデータ取得要求である場合、要求処理部７１２は、結果データ管理部７１３に記憶された第２０結果データのうち、取得対象のＸＭＬデータを抽出する。また、処理要求が、ＧＩＤに対応する要素のデータの取得を要求する実データ取得要求である場合、要求処理部７１２は、当該ＧＩＤに含まれるオブジェクトＩＤに対応する要素のデータをデータベースサーバ７００から読み出しこれを含む第１３結果データを結果データ管理部７１３に一時的に記憶する。
【００５９】
ＩＤ範囲決定部７１４は、要求処理部７１２が抽出したＸＭＬデータに含まれる各要素について、上述の第１の実施の形態と同様にして、当該ＸＭＬデータ内における要素間の関連及び各要素の位置付けを求め、各要素をＧＩＤに置換するか否かを判断する。そして、ＩＤ範囲決定部７１４は、ＸＭＬデータを構成する要素のうち、実データ取得要求時に送信すべきでありＧＩＤに置換すると判断した要素をＧＩＤに置換し、当該ＧＩＤと、当該ＸＭＬデータを構成する他の要素とを含む第１２結果データを生成してこれを結果データ管理部７１３に記憶させる。
【００６０】
結果送信部５１５は、結果データ管理部６１２に記憶された第１０結果データ乃至第１３結果データをクライアント５０にではなくコーディネータサーバ６１に適宜送信する。
【００６１】
（２）動作
次に、分散データベース６０が行うデータ転送処理の手順について図１５〜１６を用いて説明する。図１５は、データ転送処理のうち、コーディネータサーバ６１が行う処理の手順を示すフローチャートである。コーディネータサーバ６１の要求受信部６１０は、クライアント５０から送信された処理要求を受信する（ステップＳ２０）。要求処理部６１１は、ステップＳ２０で受信された処理要求が検索要求（クエリ）かデータ取得要求かを判断する（ステップＳ２１）。処理要求がクエリである場合（ステップＳ２１：ＹＥＳ）、要求処理部６１１は、当該クエリから、条件に該当するＸＭＬデータを各データベースサーバ７０Ａ〜７０Ｃに検索させるためのコードを生成し（ステップＳ２２）、これらを各々データベースサーバ７０Ａ〜７０Ｃに送信する（ステップＳ２３）。
【００６２】
そして、各データベースサーバ７０が当該コードを実行してその実行の結果として、該当するＸＭＬデータの件数と同数のデータ識別情報を含む第１０結果データを各々送信すると、コーディネータサーバ６１の結果受信部６１３はこれを受信する。次いで、要求処理部６１１が、第１０結果データを結果データ管理部６１２に記憶させる（ステップＳ２４）。そして、要求処理部６１１が、各第１０結果データの件数を集計してその件数結果を示す第１１結果データを生成して、結果データ管理部６１２に記憶させる（ステップＳ２５）。その後、結果送信部６１４が、第１１結果データを処理結果としてクライアント５０に送信する（ステップＳ２６）。
【００６３】
クライアント５０は、このような件数を示す第１１結果データを取得後、カーソルフェッチなどによりデータ取得要求をコーディネータサーバ６１に送信する場合がある。この場合、ステップＳ２０で受信された処理要求がデータ取得要求となり（ステップＳ２７：ＮＯ）、コーディネータサーバ６１は、ステップＳ２８以降の処理を行う。
【００６４】
ステップＳ２８では、要求処理部６１１は、結果データ管理部６１２に記憶された第１０結果データに含まれるデータベース識別情報を参照して、該当のＸＭＬデータを記憶しているデータベースサーバ７０（データベースサーバ７０Ａ〜７０Ｃの少なくとも１つ）を割り出し、次いで、当該データベースサーバ７０に対して、該当のＸＭＬデータの取得を要求するデータ取得要求を送信する（ステップＳ２９）。
【００６５】
そして、当該データベースサーバ７０が当該データ取得要求に応じて取得したＸＭＬデータを含む第１２結果データを送信すると、コーディネータサーバ６１の結果受信部６１３はこれを受信する。次いで、要求処理部６１１が、この第１２結果データを結果データ管理部６１２に記憶させる（ステップＳ３０）。その後、結果送信部６１４が、第１２結果データを処理結果としてクライアント５０に送信する（ステップＳ３１）。
【００６６】
例えば、図４に示したＸＭＬデータＫＤ１〜ＫＤ２に対して各々データベースサーバ７０がデータ取得要求に応じて取得したＸＭＬデータを含む第１２結果データは、図９に示した第２結果データＫＤ１１〜ＫＤ１２と同様のものとなる。従って、クライアント５０は、このように、一部の要素がＧＩＤに置換されたＸＭＬデータを取得することになる。クライアント５０は、このようなＸＭＬデータを取得後、ＧＩＤに置換された要素のうち、アプリケーションの必要に応じて、あるＧＩＤに対応する要素のデータの取得を要求する実データ取得要求をコーディネータサーバ６１に送信する場合がある。この場合、ステップＳ２０で受信された処理要求がＧＩＤに対応する要素のデータの取得を要求する実データ取得要求となり（ステップＳ２７：ＹＥＳ）、コーディネータサーバ６１は、ステップＳ３２以降の処理を行うことになる。
【００６７】
ステップＳ３２では、要求処理部６１１は、当該ＧＩＤ含まれるデータベース指定情報によって指定されるデータベースサーバ７０に対して、当該ＧＩＤに含まれるオブジェクトＩＤに対応する要素のデータの取得を要求する実データ取得要求を送信する。
【００６８】
そして、当該データベースサーバ７０が当該実データ取得要求に応じた要素のデータをを含む第１３結果データを送信すると、コーディネータサーバ６１の結果受信部６１３はこれを受信する。次いで、要求処理部６１１が、この第１３結果データを結果データ管理部６１２に記憶させる（ステップＳ３３）。その後、結果送信部６１４が、第１３結果データを処理結果としてクライアント５０に送信する（ステップＳ３４）。
【００６９】
この場合、例えば、上述の第１の実施の形態と同様に、図１０に示されるように、第１２結果データ（第２結果データ）ＫＤ１１に対して、ＧＩＤ<#ds0, e6#/>，<#ds0, e8#/>が抽出され、当該各ＧＩＤに対応する各要素のデータを含む第１３結果データ（第３結果データ）Ｋ２１が取得される。そして、第１２結果データＫＤ１１におけるＧＩＤが、第１３結果データＫ２１に含まれる要素に置換されることにより、クライアント５０は、データＣＤ１を取得することができる。
【００７０】
次に、分散データベース６０が行うデータ転送処理のうち、データベースサーバ７０が行う処理の手順について図１６を用いて説明する。データベースサーバ７０の要求受信部６１０は、クライアント５０から送信された処理要求を受信する（ステップＳ４０）。要求処理部６１１は、ステップＳ４０で受信された処理要求がコードかデータ取得要求かを判断する（ステップＳ４１）。当該処理要求がコードである場合（ステップＳ４１：ＹＥＳ）、要求処理部７１２は、当該コードを実行して、その結果得られるＸＭＬデータ（第２０結果データ）を結果データ管理部７１３に一時的に記憶し、当該ＸＭＬデータの件数を同数のデータベース識別情報を含む第１０結果データを結果送信部５１５を介して送信する（ステップＳ４２）。
【００７１】
また、ステップＳ４０で受信された処理要求がデータ取得要求である場合（ステップＳ４１：ＮＯ）、要求処理部７１２は、更に、当該データ取得要求が、ＧＩＤに対応する要素のデータの取得を要求する実データ取得要求であるか否かを判断する（ステップＳ４３）。当該判断結果が否定的である場合、要求処理部７１２は、結果データ管理部７１３に記憶された第２０結果データのうち、取得対象のＸＭＬデータを抽出する（ステップＳ４４）。ＩＤ範囲決定部７１４は、ステップＳ４４で抽出されたＸＭＬデータについて、上述の第１の実施の形態と同様にして要素毎に分解し、ＸＭＬデータ内における要素間の関連及び各要素の位置付けを求める。そして、ＩＤ範囲決定部７１４は、所定の規則に基づいて各要素の優先度を算出して（ステップＳ４５）、当該優先度と予め定められた閾値とを用いて、各要素についてＧＩＤに置換するか否かを判断する。即ち、ＩＤ範囲決定部７１４は、すぐに送信すべきか又は実データ取得要求時に送信すべきかを判断する（ステップＳ４６）。そして、ＩＤ範囲決定部７１４は、ＸＭＬデータを構成する要素のうち、実データ取得要求時に送信すべきと判断した要素をＧＩＤに置換し、当該ＧＩＤと、当該ＸＭＬデータを構成する他の要素とを含む第１２結果データを生成してこれを結果データ管理部７１３に記憶させる（ステップＳ４７）。そして、結果送信部５１５が、当該第１２結果データをコーディネータサーバ６１に送信する（ステップＳ４８）。
【００７２】
また、ステップＳ４０で受信された処理要求が、ＧＩＤに対応する要素のデータの取得を要求する実データ取得要求である場合（ステップＳ４３：ＹＥＳ）、要求処理部７１２は、当該ＧＩＤに含まれるオブジェクトＩＤに対応する要素のデータをデータベースサーバ７００から読み出しこれを含む第１３結果データを結果データ管理部７１３に一時的に記憶する（ステップＳ４９）。そして、結果送信部５１５が、当該第１３結果データをコーディネータサーバ６１に送信する（ステップＳ５０）。
【００７３】
以上のような構成によれば、データが複数のデータベースに分散された分散データベースにおいて、必要なデータを転送しつつ、無駄なデータの転送を低減することができる。
【００７４】
[変形例]
なお、本発明は前記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、前記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。また、以下に例示するような種々の変形が可能である。
【００７５】
＜変形例１＞
上述した各実施の形態において、コーディネータサーバ６１で実行される各種プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、当該各種プログラムを、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成しても良い。データベースサーバ７０で実行される各種プログラムについても同様である。
【００７６】
＜変形例２＞
上述の各実施の形態においては、ＩＤ範囲決定部は、閾値を用いてＩＤ化の範囲を決定したが、これに限らない。例えば、ＩＤ範囲決定部は、処理結果として送信可能な結果データの転送サイズの総量を指定して、優先度が高いものから順に要素を結果データに含められるだけ含めて、含められない要素をＧＩＤに変換するようにしても良い。
【００７７】
また、階層構造における要素の深さ、要素のサイズ及び同一種類の要素、即ち、タグ名が同一である要素が繰り返し表れる数のうち少なくとも１つ又は少なくとも２つの組み合わせを用いて、ＩＤ化の範囲を決定するようにしても良い。
【００７８】
また、ＩＤ範囲決定部は、優先度の算出に関するヒント情報をクライアント５０から取得し、これに基づいて各要素に対して優先度付けを行うようにしても良い。
【００７９】
また、ＩＤ範囲決定部は、ＧＩＤでの実データ取得履歴を残しておき、それを参照することで、取得確率の高い要素については要素の優先度を高くするなどで動的に値を変化させても構わない。
【００８０】
＜変形例３＞
上述の各実施の形態においては、ＧＩＤを特殊タグにより表現したが、これに限らず、例えば、ＰＩ(Processing Instructions)を用いて表現しても良い。ＰＩとは、ＸＭＬデータの中に、あるアプリケーションへの命令を埋め込むために提供されているものである。ＳＡＸなどのイベントハンドラベースのＸＭＬパーサであれば、ＰＩのイベントハンドラで定義しておくことで、クライアント５０のアプリケーション側でＧＩＤを検出することができる。
【００８１】
＜変形例４＞
上述の第２の実施の形態においては、データベースサーバ７０の有するＩＤ範囲決定部７１４と同様に、要素の優先度を算出して、要素の優先度に基づいて、要素のＧＩＤ化を判断する機能を、コーディネータサーバ６１が有するように構成しても良い。図１７は、コーディネータサーバ６１がＩＤ範囲決定部６１５を有する構成を例示する図である。このような構成によれば、データベースサーバ７０のみならず、コーディネータサーバ６１でもＩＤ化の範囲を決定することで、クライアント５０の応答性をより改善することができる。
【００８２】
また、データベースサーバ７０がＩＤ範囲決定部７１４を有さない構成であっても良く、この場合、コーディネータサーバ６１のＩＤ範囲決定部６１５が、クライアント５０の取得対象のＸＭＬデータについて、ＩＤ化の範囲を決定して当該決定結果に基づいて要素をＧＩＤに適宜置換したデータを生成してこれをクライアント５０に送信するようにしても良い。
【図面の簡単な説明】
【００８３】
【図１】第１の実施の形態にかかるデータベースシステムの構成を例示する図である。
【図２】タプルを例示する図である。
【図３】図２に示されるタプルから等価変換されるＸＭＬデータを例示する図である。
【図４】データベース５１０に記憶されるＸＭＬデータを３つ例示する図である。
【図５】データベース５１０におけるＸＭＬデータの物理的な記憶状態をイメージ化した図である。
【図６】データベースサーバ５１が行うデータ転送処理の手順を示すフローチャートである。
【図７】結果データ管理部５１３に記憶される第１結果データを例示する図である。
【図８】図５に示したＸＭＬデータＸＤ１〜ＸＤ３において各要素と共に各要素に対する算出結果を一部例示する図である。
【図９】結果データ管理部５１３に記憶される第２結果データを例示する図である。
【図１０】クライアント５０が取得する第２結果データ及び第３結果データを例示する図である。
【図１１】第２の実施の形態にかかるデータベースシステムの構成を示すブロック図である。
【図１２】コーディネータサーバ６１及びデータベースサーバ７０の機能的構成を例示する図である。
【図１３】XQueryのデータ構成を例示する図である。
【図１４】図１３に示したXQueryから要求処理部６１１が生成するコードの一例を示す図である。
【図１５】データ転送処理のうち、コーディネータサーバ６１が行う処理の手順を示すフローチャートである。
【図１６】データ転送処理のうち、データベースサーバ７０が行う処理の手順を示すフローチャートである。
【図１７】コーディネータサーバ６１がＩＤ範囲決定部６１５を有する構成を例示する図である。
【符号の説明】
【００８４】
５０  クライアント
５１  データベースサーバ
５２  ネットワーク
６０  分散データベース
６１  コーディネータサーバ
７０，７０Ａ，７０Ｂ，７０Ｃ  データベースサーバ
５１０  データベース
５１１  要求受信部
５１２  要求処理部
５１３  結果データ管理部
５１４  ＩＤ範囲決定部
５１５  結果送信部
６１０  要求受信部
６１１  要求処理部
６１２  結果データ管理部
６１３  結果受信部
６１４  結果送信部
６１５  範囲決定部
７００，７００Ａ、７００Ｂ，７００Ｃ  データベース
７１１  要求受信部
７１２  要求処理部
７１３  結果データ管理部
７１４  ＩＤ範囲決定部
７１５  結果送信部
【図１】
0005134989.tif 000002
【図２】
0005134989.tif 000003
【図３】
0005134989.tif 000004
【図４】
0005134989.tif 000005
【図５】
0005134989.tif 000006
【図６】
0005134989.tif 000007
【図７】
0005134989.tif 000008
【図８】
0005134989.tif 000009
【図９】
0005134989.tif 000010
【図１０】
0005134989.tif 000011
【図１１】
0005134989.tif 000012
【図１２】
0005134989.tif 000013
【図１３】
0005134989.tif 000014
【図１４】
0005134989.tif 000015
【図１５】
0005134989.tif 000016
【図１６】
0005134989.tif 000017
【図１７】
0005134989.tif 000018