(57)【特許請求の範囲】
【請求項１】
データを各々記憶する複数の並列化されたデータベースサーバと、前記データベースサーバに接続されパイプライン処理可能なコーディネータサーバとを備える情報処理システムであって、
前記コーディネータサーバは、
クライアントからのデータ取得を要求する問合せ要求に応じて複数の前記データベースサーバに対して処理命令を送信する第１送信手段と、
前記処理命令に応じて処理された結果前記データベースサーバから送信されたデータ集合を集約して前記クライアントに送信する第２送信手段と、
前記データベースサーバから送信されたデータ集合をバッファリングするバッファ手段と、
前記バッファ手段にバッファリングされたデータ集合を集約する集約手段と、
前記バッファ手段にバッファリングされた前記データ集合のデータ量に基づいて、前記データベースサーバからの前記データ集合の送信開始又は送信停止を決定する第１決定手段と、
前記第１決定手段の決定結果に基づいて、前記データ集合の送信開始又は送信停止を命令する制御命令を前記データベースサーバに対して送信する第３送信手段と、
を備え、
前記データベースサーバは、
前記コーディネータサーバに対して処理結果として送信するデータ集合の１回あたりの送信量を、回数を重ねる毎に増加させるよう設定する設定手段と、
設定された送信量のデータ集合を前記コーディネータサーバに対して送信する第４送信手段と、
前記データ集合の送信開始又は送信停止を命令する制御命令を前記コーディネータサーバから受信する受信手段と、を備え、
前記受信手段が、前記データ集合の送信停止を命令する制御コマンドを受信した後、前記データ集合の送信開始を命令する制御コマンドを受信した場合、前記設定手段は、前記送信量の設定を初期値に戻す
ことを特徴とする情報処理システム。
【請求項２】
前記バッファ手段は、複数の前記データベースサーバから各々送信されたデータ集合を各々バッファリングする複数の第１バッファ手段と、複数の前記第１バッファ手段にバッファリングされたデータ集合が集約された結果のデータ集合をバッファリングする第２バッファ手段とを有し、
前記集約手段は、複数の前記第１バッファ手段にバッファリングされたデータ集合を集約して前記第２バッファ手段にバッファリングし、
前記第１決定手段は、前記第１バッファ手段にバッファリングされた前記データ集合のデータ量又は前記第２バッファ手段にバッファリングされた前記データ集合のデータ量のうち少なくとも一方を用いて、前記データベースサーバからの前記データ集合の送信開始及び送信停止を決定する
ことを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記第１決定手段は、前記第１バッファ手段にバッファリングされた前記データ集合のデータ量が第１閾値以下である場合且つ前記第２バッファ手段にバッファリングされた前記データ集合のデータ量が第２閾値以下である場合、前記データベースサーバからの前記データ集合の送信開始を決定する
ことを特徴とする請求項２に記載の情報処理システム。
【請求項４】
前記第１決定手段は、前記第１バッファ手段にバッファリングされた前記データ集合のデータ量が第３閾値以上である場合且つ前記第２バッファ手段にバッファリングされた前記データ集合のデータ量が第４閾値以上である場合、前記データベースサーバからの前記データ集合の送信停止を決定する
ことを特徴とする請求項２に記載の情報処理システム。
【請求項５】
前記バッファ手段は、前記クライアントから送信された、前記処理結果の送信に関する処理要求をバッファリングする第３バッファ手段を更に有し、
前記第３バッファ手段にバッファリングされた処理要求に応じて、前記第２バッファ手段にバッファリングされた前記データ集合を前記クライアントに送信するか否かを決定する第２決定手段と、
前記第２決定手段の決定結果に応じて、前記第２バッファ手段にバッファリングされた前記データ集合を前記クライアントに送信する第２送信手段とを更に備える
ことを特徴とする請求項２に記載の情報処理システム。
【請求項６】
前記集約手段は、前記データベースサーバから送信されたデータ集合をマージする
ことを特徴とする請求項１乃至請求項５に記載の情報処理システム。
【請求項７】
前記集約手段は、前記データベースサーバから送信されたデータ集合をマージする
ことを特徴とする請求項１乃至請求項６に記載の情報処理システム。
【請求項８】
第１送信手段と、第２送信手段と、集約手段と、決定手段と、第３送信手段とを有し、データベースサーバに接続されパイプライン処理可能なコーディネータサーバと、設定手段と、第４送信手段とを有するデータを各々記憶する複数の並列化されたデータベースサーバと、を備える情報処理システムで実行されるパイプライン処理制御方法であって、
前記第１送信手段が、クライアントからのデータの取得を要求する問合せ要求に応じて複数の前記データベースサーバに対して処理命令を送信するステップと、
前記第２送信手段が、前記処理命令に応じて処理された結果前記データベースサーバから送信されたデータ集合を集約して前記クライアントに送信するステップと、
前記集約手段が、前記データベースサーバから送信されバッファ手段にバッファリングされたデータ集合を集約するステップと、
前記決定手段が、前記バッファ手段にバッファリングされた前記データ集合のデータ量に基づいて、前記データベースサーバからの前記データ集合の送信開始又は送信停止を決定するステップと、
前記第３送信手段が、前記決定手段の決定結果に基づいて、前記データ集合の送信開始又は送信停止を命令する制御命令を前記データベースサーバに対して送信するステップと
前記設定手段が、前記コーディネータサーバに対して処理結果として送信するデータ集合の１回あたりの送信量を、回数を重ねる毎に増加させるよう設定するステップと、
前記第４送信手段が、設定された送信量のデータ集合を前記コーディネータサーバに対して送信するステップとを含む
ことを特徴とするパイプライン処理制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列データベースを構成するコーディネータサーバ及び複数のデータベースサーバと、並列データベースで行うパイプライン処理制御方法とに関する。 
【背景技術】
【０００２】
従来より、命令の読み込み、解釈、実行、結果の書き込みなどを行うプロセッサの高速化技術として、例えば、パイプライン処理技術がある。パイプライン処理とは、各フェーズの処理を独立動作させることで、前のフェーズの処理サイクルが終わる前に次のフェーズの処理を開始し、これを繰り返す処理である。これにより、流れ作業が実現し、処理全体の性能が改善する。
【０００３】
一方、大量のデータを管理する技術として、並列データベース技術がある。並列データベースでは、大量のデータに対応するため、複数台のサーバからなるシステムが構築されている。均一のデータ形式を持つ大量のデータ集合を複数のデータベースに分割配置する。また、データ集合を複数のデータベースに分割配置するのではなく、複数のデータベースに重複して配置するケースもある。データ集合をこのように配置することで、同一のデータに対する同時アクセス数が高いケースでは、スループットの向上が期待できる。
【０００４】
このような並列データベースにおいてデータを管理する方式は、複数のサーバがディスクを共有しない方式(ディスク非共有方式)と、複数のサーバがディスクを共有する方式(ディスク共有方式)と、複数のサーバがディスクとメモリとを共有する方式(メモリ共有方式)との３方式に大別される。
【０００５】
ここで、ディスク非共有方式を中心に説明する。データ集合を複数のデータベースに分割配置する場合、データ集合の垂直分割とデータ集合の水平分割との２通りが考えられる（フラグメンテーション）。データ集合の水平分割は、データ集合の部分集合を作り出すことであり、後述のデータパーティショニングの手法が重要になる。データの垂直分割は、データを属性やカラムなどの単位で分割することである。各分割には、個々のアクセスパターンによりメリット及びデメリットが存在する。例えば、データの垂直分割では、問合せが少ないサイズのデータスキャンで済む場合は高速だが、オリジナルのデータが必要なときはサーバ間でのデータ結合が必要になり、大幅に性能は悪化する。
【０００６】
ディスク非共有方式の並列データベースで用いられる各サーバは、データ集合が分割配置された複数のデータベースに個々にアクセスすることで並列アクセスが可能となり、データベース数に応じた性能向上が期待される。これにより、処理効率や応答時間の改善が図られている（パーティション並列化）。
【０００７】
データパーティショニング手法としては、キーレンジパーティショニング、ハッシュパーティショニングなどが知られている。例えば、大量のデータ集合がリレーションで表現されているとする。キーレンジパーティショニングやハッシュパーティショニングでは、テーブルの 1カラム値を使用する場合と、リレーションの複数のカラム値を使用する場合とがある。このようなデータパーティショニングを行うと、負荷は集中するものの、対象カラムに対する範囲条件つきの検索では無関係なデータベースにアクセスする非効率を回避できる。さらに、対象カラムでの自然結合を含む検索は、異なるデータベース間の結合が不要となるので、大幅に性能を改善することができる。
【０００８】
ただし、並列データベースでは、均衡がとれたデータパーティショニングを行わないと、検索時に特定のデータベースに負荷が集中するため、並列化の効果を発揮することが困難である。しかし、入力データの傾向の変化により、各データサイズは不均衡になる可能性があり、事前に決められたデータ分割ルールではそれを回避することが困難である。そのため、動的にキーレンジを変更する、ハッシュ値を変更するなどの改善手法が提案されてきたが、このような手法では、変更にともなうデータ移動などの負担が大きくなる。
【０００９】
ところで、並列データベースは、１台のコーディネータサーバと複数台のデータベースサーバとから構成されることが多い。このような構成において、並列データベースでは以下のような処理が行われる。クライアントからの要求を受け付けたコーディネータサーバは、その要求を解析してプランを生成して、複数台のデータベースサーバに各プランを振り分ける。各データベースサーバは振り分けられたプランを実行して、その処理結果のデータ集合をコーディネータサーバに送信する。コーディネータサーバは送信されたデータ集合に対してマージなど集計処理を施して、クライアントに送信する。サーバ間で受け渡されるデータはＬＡＮ（Local Area Network ）などのネットワーク上でストリーム送信される。そのため、並列データベースは、ネットワークも高速サーバ間インターコネクトなど分散並列プラットフォーム上で実現されることが多い。
【００１０】
以上のような処理を高速化するために、並列データベースにおいては、ＳＱＬの内部処理のスキャン、ソート、ジョインといったフェーズ処理を複数のプロセスや複数台のサーバで並列化するメカニズムが組み込まれている。一部のデータベース製品には、各フェーズの処理を独立に動作させて前のフェーズ処理が終わる前に次のフェーズ処理を始める、といったパイプライン方式も採用されている（パイプライン並列化）。
【００１１】
パイプライン並列化については、例えば、特許文献１に、並列データベースシステムを構成する各ノードで実行するデータベース演算に対応して各ノード数を決定し、また、データの分割にバラツキが存在する場合、各ノードへデータを均等に分割させる方式が記載されている。この特許文献１の技術では、各ノードで実行する各データベース演算をパラメタ化し、期待する処理時間を均等化させるので、各ノード間で処理時間の偏りがなく、パイプライン処理において円滑に動作させることが可能となる。
【００１２】
【特許文献１】特開２００１−１４７８４７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
しかし、特許文献１の技術は、並列データベースでソートやマージなどＤＩＳＫ  Ｉ／Ｏ処理以外のＣＰＵ処理を複数のノードに分配することにより均等化することを目的としている。このため、クライアントからのデータ取得要求に連動した、フェッチなどのパイプライン処理について、以下のような問題が発生する恐れがあった。ＤＢサーバの処理にコーディネータサーバの処理が追いつかない場合、コーディネータサーバ側にデータ集合が溜まり過ぎる可能性があり、コーディネータサーバのメモリなどリソースを圧迫するという問題である。 
【００１４】
本発明は、上記に鑑みてなされたものであって、コーディネータサーバのメモリなどのリソースを圧迫することなく、並列データベースにおいてパイプライン処理を実現可能なコーディネータサーバ、データベースサーバ及びパイプライン処理制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上述した課題を解決し、目的を達成するために、本発明は、データを各々記憶する複数の並列化されたデータベースサーバと、前記データベースサーバに接続されパイプライン処理可能なコーディネータサーバとを備える情報処理システムであって、前記コーディネータサーバは、クライアントからのデータ取得を要求する問合せ要求に応じて複数の前記データベースサーバに対して処理命令を送信する第１送信手段と、前記処理命令に応じて処理された結果前記データベースサーバから送信されたデータ集合を集約して前記クライアントに送信する第２送信手段と、前記データベースサーバから送信されたデータ集合をバッファリングするバッファ手段と、前記バッファ手段にバッファリングされたデータ集合を集約する集約手段と、前記バッファ手段にバッファリングされた前記データ集合のデータ量に基づいて、前記データベースサーバからの前記データ集合の送信開始又は送信停止を決定する第１決定手段と、前記第１決定手段の決定結果に基づいて、前記データ集合の送信開始又は送信停止を命令する制御命令を前記データベースサーバに対して送信する第３送信手段と、を備え、前記データベースサーバは、前記コーディネータサーバに対して処理結果として送信するデータ集合の１回あたりの送信量を、回数を重ねる毎に増加させるよう設定する設定手段と、設定された送信量のデータ集合を前記コーディネータサーバに対して送信する第４送信手段と、前記データ集合の送信開始又は送信停止を命令する制御命令を前記コーディネータサーバから受信する受信手段と、を備え、前記受信手段が、前記データ集合の送信停止を命令する制御コマンドを受信した後、前記データ集合の送信開始を命令する制御コマンドを受信した場合、前記設定手段は、前記送信量の設定を初期値に戻すことを特徴とする。 
【００１７】
また、本発明は、第１送信手段と、第２送信手段と、集約手段と、決定手段と、第３送信手段とを有し、データベースサーバに接続されパイプライン処理可能なコーディネータサーバと、設定手段と、第４送信手段とを有するデータを各々記憶する複数の並列化されたデータベースサーバと、を備える情報処理システムで実行されるパイプライン処理制御方法であって、前記第１送信手段が、クライアントからのデータの取得を要求する問合せ要求に応じて複数の前記データベースサーバに対して処理命令を送信するステップと、前記第２送信手段が、前記処理命令に応じて処理された結果前記データベースサーバから送信されたデータ集合を集約して前記クライアントに送信するステップと、前記集約手段が、前記データベースサーバから送信されバッファ手段にバッファリングされたデータ集合を集約するステップと、前記決定手段が、前記バッファ手段にバッファリングされた前記データ集合のデータ量に基づいて、前記データベースサーバからの前記データ集合の送信開始又は送信停止を決定するステップと、前記第３送信手段が、前記決定手段の決定結果に基づいて、前記データ集合の送信開始又は送信停止を命令する制御命令を前記データベースサーバに対して送信するステップと前記設定手段が、前記コーディネータサーバに対して処理結果として送信するデータ集合の１回あたりの送信量を、回数を重ねる毎に増加させるよう設定するステップと、前記第４送信手段が、設定された送信量のデータ集合を前記コーディネータサーバに対して送信するステップとを含むことを特徴とする。
【発明の効果】
【００１９】
本発明によれば、コーディネータサーバのメモリなどのリソースを圧迫することなく、並列データベースにおいてパイプライン処理を実現することができる。
【発明を実施するための最良の形態】
【００２０】
以下に添付図面を参照して、この発明にかかる、コーディネータサーバ、データベースサーバ及びパイプライン処理制御方法の最良な実施の形態を詳細に説明する。
【００２１】
[第１の実施の形態]
（１）構成
図１は、本の実施の形態にかかる並列データベースシステムの構成を例示する図である。並列データベースシステムは、アプリケーションプログラムが実行されるクライアントコンピュータ（以下、クライアントという）５０と、並列データベース５１とを有し、これらがネットワーク５２を介して接続されて構成される。並列データベース５１は１台のコーディネータサーバ６０と複数台のＤＢサーバ７０Ａ〜７０Ｂとを有する。ネットワーク５２は、例えば、ＬＡＮ（Local Area Network）、イントラネット、イーサネット（登録商標）又はインターネットなどである。コーディネータサーバ６０は、クライアント５０と複数のＤＢサーバ７０Ａ〜７０Ｂと接続され、クライアント５０からの問合せ要求を受け付けて、当該要求に応じてＤＢサーバ７０Ａ〜７０Ｂに対してコマンドや実行プランなどの処理要求を送信し、その処理結果をＤＢサーバ７０Ａ〜７０Ｂから受け取り、問い合わせ要求に応じた処理結果をクライアント５０に送信する。ＤＢサーバ７０Ａ〜７０Ｂは、並列化されたリレーショナルデータベースなどのデータベースを各々有し、当該データベースへの記憶やアクセスを各々制御する。ＤＢサーバ７０Ａ〜７０Ｂは各々、コーディネータサーバ６０から送信されたコマンドや実行プランなどの処理要求を受け付けて、その要求に応じた処理結果をコーディネータサーバ６０に送信する。 
【００２２】
尚、クライアント５０、コーディネータサーバ６０及びＤＢサーバ７０Ａ〜７０Ｂは各々、装置全体の制御を行うＣＰＵ（Central Processing Unit）等の制御装置と、各種データや各種プログラムを記憶するＲＯＭ（Read Only Memory）やＲＡＭ（Random Access Memory）等の記憶装置と、各種データや各種プログラムを記憶するＨＤＤ（Hard Disk Drive）やＣＤ（Compact Disk）ドライブ装置等の外部記憶装置と、情報を表示するディスプレイ装置等の表示装置と、ユーザが各種処理要求を入力するためのキーボードやマウス等の入力装置と、ネットワーク５２を介して外部のコンピュータと通信を行う通信制御装置と、これらを接続するバスとを備えており、通常のコンピュータを利用したハードウェア構成となっている。
【００２３】
このようなハードウェア構成において、コーディネータサーバ６０が、記憶装置や外部記憶装置に記憶された各種プログラムを実行することにより実現される機能について説明する。以下に、コーディネータサーバ６０において実現される各種機能の実体となる各部について説明する。コーディネータサーバ６０は、受信部６００及び送信部６０１と、問合せ解析部６０２と、分散プラン生成部６０３と、分散プラン実行部６０４と、送信部６０５及び受信部６０６と、フェッチ制御部６０７と、データマージ部６０８とを有する。
【００２４】
受信部６００は、クライアント５０から問合せ要求などのデータを受信する。送信部６０１は、クライアント５０へ処理結果などのデータを送信する。問合せ解析部６０２は、クライアント５０からの問合せ要求を解析する。分散プラン生成部６０３は、解析された問合せ要求に基づいてＤＢサーバ７０Ａ〜７０Ｂに処理を行わせるための各分散プランを生成する。分散プラン実行部６０４は、生成された分散プランを実行する。受信部６０６は、ＤＢサーバ７０Ａ〜７０Ｂから送信された処理結果などのデータを受信する。送信部６０５は、ＤＢサーバ７０Ａ〜７０Ｂへ分散プランなどのデータを送信する。
【００２５】
データマージ部６０８は、各ＤＢサーバ７０Ａ〜７０Ｂから処理結果として得られる２つのデータ集合をマージすることにより当該データ集合を集約する。また、データマージ部６０８は、クライアント５０から、処理結果の送信に関する処理要求としてカーソルのフェッチ要求などの処理要求が受信部６００を介して受信された場合、当該要求に応じた処理を行う。フェッチ制御部６０７は、各ＤＢサーバ７０Ａ〜７０Ｂから処理結果のデータ集合を取得(ＧＥＴ)時に、データ集合のデータサイズに基づいて、ＤＢサーバ７０Ａ〜７０Ｂからのデータ集合の送信開始又は送信停止を決定し、その決定内容を示す制御コマンドをＤＢサーバ７０Ａ〜７０Ｂに対して適宜送信することにより、ＤＢサーバ７０Ａ〜７０Ｂからのデータ集合の送信を制御する。また、フェッチ制御部６０７は、データマージ部６０８がマージしたデータ集合を処理結果として送信部６０１を介してクライアント５０に送信する。
【００２６】
次に、ＤＢサーバ７０Ａが、記憶装置や外部記憶装置に記憶された各種プログラムを実行することにより実現される機能について説明する。以下に、ＤＢサーバ７０Ａにおいて実現される各種機能の実体となる各部について説明する。ＤＢサーバ７０Ａは、受信部７００Ａ及び送信部７０１Ａと、問合せ解析部７０２Ａと、単体プラン生成部７０３Ａと、単体プラン実行部７０４Ａと、フェッチ制御部７０５Ａとを有する。この他、ＤＢサーバ７０Ａは、例えば、外部記憶装置に記憶されるＤＢ７０６Ａを有する。受信部７００Ａは、コーディネータサーバ６０からの処理要求などのデータを受信する。送信部７０１Ａは、コーディネータサーバ６０へ処理結果などのデータを送信する。問合せ解析部７０２Ａは、コーディネータサーバ６０から送信されたコマンドなどの処理要求やプランを解析する。単体プラン生成部７０３Ａは、解析された問合せからＤＢ７０６Ａにアクセスするための単体プランを生成する。単体プランには、例えば、索引スキャン、データ取得、データ比較などＤＢアクセスオペレータが含まれる。単体プラン実行部７０４Ａは、生成された単体プランを実行する。フェッチ制御部７０５Ａは、単体プランの実行の結果得られたデータ集合を処理結果としてコーディネータサーバ６０に送信部７０１Ａを介して送信する。ここで、フェッチ制御部７０５Ａは、コーディネータサーバ６０から送信される後述の制御コマンドに応じて、データ集合の送信を制御する。
【００２７】
ＤＢサーバ７０Ｂは、受信部７００Ｂ及び送信部７０１Ｂと、問合せ解析部７０２Ｂと、単体プラン生成部７０３Ｂと、単体プラン実行部７０４Ｂと、フェッチ制御部７０５Ｂとを有する。これらの各部の構成については、上述の受信部７００Ａ及び送信部７０１Ａと、問合せ解析部７０２Ａと、単体プラン生成部７０３Ａと、単体プラン実行部７０４Ａと、フェッチ制御部７０５Ａと各々略同様であるため、その説明を省略する。また、ＤＢサーバ７０Ｂは、例えば、外部記憶装置に記憶されるＤＢ７０６Ｂを有する。このＤＢ７０６Ｂ及びＤＢサーバ７０Ａが有するＤＢ７０６Ａは、同一リレーショナルスキーマを持つ複数のレコードからなるリレーショナルデータベースになっており、上述した水平分割によりデータベースが２つに分割された状態であるものとする。
【００２８】
図２は、ＤＢ７０６Ａ及びＤＢ７０６Ｂに各々記憶されたデータのイメージを例示する図である。ここでは、ＤＢ７０６Ａ及びＤＢ７０６Ｂには、書籍に関する書籍データが記憶されており、書籍ＤＢとして機能するものとする。例えば、ＤＢ７０６Ａには、１００件の書籍データＲ１＿１〜Ｒ１＿１００が記憶されており、ＤＢ７０６Ｂには、２００件の書籍データＲ２＿１〜Ｒ１＿２００が記憶されているものとする。各書籍データは、タイトル、筆頭筆者、出版社名及び出版年という４つのカラムを有している。尚、出版社名というカラムには文字列索引が付いているおり、書籍データの各レコードにはレコードＩＤが付与されているものとする。
【００２９】
図３は、クライアント５０からコーディネータサーバ６０に対して送信される問合せ要求を例示する図である。問合せ要求とは、データの取得を要求するものであり、問合せ要求には、例えばＳＱＬ言語が用いられる。同図に示される「select タイトルfrom 書籍DB where 出版年 > 1996 order by 出版社名」という問い合わせ要求は、「出版年が1996年以降の出版物のデータのうち、タイトルと出版社名とを含むデータを出版社名で昇順にして返す」ことを要求している。
【００３０】
図４は、図３に示した問合せ要求に対して、コーディネータサーバ６０が生成した分散プランを例示する図である。この分散プランは、コーディネータサーバ６０の問合せ解析部６０２が、クライアント５０から送信された問合せを解析し、分散プラン生成部６０２が生成したものである。尚、プランは実際にはバイナリデータなどのデータとして生成されるが、ここでは簡単化して示している。同図に示された分散プランは、以下の(a),(b)を意味している。
(a)各ＤＢサーバ７０Ａ〜７０Ｂは、「出版年が1996年以降の出版物で、タイトルを出版社名で昇順にした」データ集合をコーディネータサーバ６０に返す。
(b)コーディネータサーバ６０は、ＤＢサーバ７０Ａ〜７０Ｂから得られた２つのデータ集合を出版社カラムで昇順にしてマージする。
【００３１】
このような分散プランが実行された結果が、図３に示した問合せ要求に応じたデータ集合となる。
【００３２】
図５は、ＤＢサーバ７０Ａが生成する単体プランを模式的に例示した図である。この単体プランは、ＤＢサーバ７０Ａの問合せ解析部７０２Ａが、コーディネータサーバ６０から送信された分散プランを解析し、単体プラン生成部７０３Ａが生成するものである。同図に示された単体プランは、以下の(c),(d),(e)を意味している。
(c)索引スキャン：書籍データの出版社名に付いている文字列索引により索引スキャンを行い、昇順になった各レコードに付与されているレコードＩＤの集合を得る。 
(d)データ取得：索引スキャンの結果得られた各レコードＩＤを基に、書籍データの各レコードに含まれるカラムのうちタイトル、出版社名及び出版年の３つのカラムのカラム値を取得する。
(e)データ比較：取得した出版年のカラム値が「1996」を超えたレコードだけをフィルタリングする。
【００３３】
このような単体プランをＤＢサーバ７０Ａの単体プラン実行部７０４Ａが実行し、上記(e)のフィルタリングの結果得られたデータ集合を示す結果リストを生成する。そして、フェッチ制御部７０５Ａが、結果リストを基にデータ集合を取得してこれを処理結果として送信部７０１Ａを介してコーディネータサーバ６０に送信する。尚、ＤＢサーバ７０Ｂも、ＤＢサーバ７０Ａと同様の処理を行う。
【００３４】
次に、ＤＢサーバ７０Ａ〜７０Ｂから処理結果として送信されたデータ集合をコーディネータサーバ６０のデータマージ部６０８がマージする処理の概要について説明する。図６は、データマージ部６０８が行うマージ処理の概念を示す図である。ここでは、ＤＢサーバ７０Ａから得られたデータ集合が入力ライン６０８Ａにバッファリングされ、ＤＢサーバ７０Ｂから得られたデータ集合が入力ライン６０８Ｂにバッファリングされる。データマージ部６０８は、入力ライン６０８Ａ〜６０８Ｂにバッファリングされたデータ集合を出版社名で昇順にしてマージして出力ライン６０８Ｄにバッファリングする。また、制御ライン６０８Ｃには、クライアント５０から送信される、カーソルのフェッチ要求などの要求が入力される。データマージ部６０８は、制御ライン６０８Ｃに入力されたフェッチ要求などの要求に基づいて、出力ライン６０８Ｄにバッファリングされたデータ集合のクライアント５０への送信の可否を判断する。
【００３５】
入力ライン６０８Ａ〜６０８Ｂ、出力ライン６０８Ｄ及び制御ライン６０８Ｃは各々、所定の配列構造をなしている。例えば、その配列構造は、リングバッファなどキュー構造であり、tailとtopというカーソルが各々付与された構造である。図７は、入力ライン６０８Ａ〜６０８Ｂ及び出力ライン６０８Ｄのデータ構造を模式的に示す図である。例えば、入力ライン６０８Ａには、データ集合のうち最後のデータを指定する入力ラインＡ.tailと、データ集合のうち先頭のデータを指定する入力ラインＡ.topとが付与されている。入力ライン６０８Ｂについても同様に、入力ラインＢ.tailと、入力ラインＢ.topとが付与されている。出力ライン６０８Ｄには、クライアント５０に未送信のデータ集合のうち最後のデータを指定する出力ライン.tailと、クライアント５０に未送信のデータ集合のうち先頭のデータを指定する出力ライン.topとが付与されている。
【００３６】
そして、このような出力ライン６０８Ｄ及び入力ライン６０８Ａ〜６０８Ｂにバッファリングされたデータ集合のデータサイズに基づいて、コーディネータサーバ６０のフェッチ制御部６０７が、上述したように、ＤＢサーバ７０Ａ〜７０Ｂからのデータ集合の送信開始又は送信停止を決定する。この処理の詳細については以下の動作欄で説明する。
【００３７】
一方、ＤＢサーバ７０Ａのフェッチ制御部７０５Ａ及びＤＢサーバ７０Ｂのフェッチ制御部７０５Ｂは、本実施の形態においては、コーディネータサーバ６０に送信するデータ集合の送信ブロックサイズを段階的に増加させると共に、コーディネータサーバ６０から送信された制御コマンドに応じて、データ集合の送信を停止したり再開したりする。フェッチ制御部７０５Ａ〜７０５Ｂが行うこのような処理の詳細についても以下の動作欄で説明する。
【００３８】
（２）動作
次に、本実施の形態にかかる並列データベースシステムの動作について説明する。まず、コーディネータサーバ６０の行う処理の手順について図８を参照しながら説明する。ここでは、上述したように、コーディネータサーバ６０の問合せ解析部６０２が、クライアント５０から送信された問合せを解析し、分散プラン生成部６０２が各分散プランを生成して送信部６０５を介して各ＤＢサーバ７０Ａ〜７０Ｂに対して送信する。そして、その結果、各ＤＢサーバ７０Ａ〜７０Ｂから送信された各データ集合が入力ライン６０８Ａ〜６０８Ｂに各々バッファリングされ、これらがマージされて出力ライン６０８Ｄにバッファリングされているものとする。このとき、コーディネータサーバ６０は、出力ライン６０８Ｄにバッファリングされているデータ集合のデータサイズが、条件１を満たすか否かを判断する（ステップＳ１）。条件１とは、当該データサイズが第１最低水位線(LWM：Low Watermark)以下であることである。当該判断結果が肯定的である場合、出力ラインにおけるデータ集合は不足している又は不足気味であると判断される。
【００３９】
次いで、コーディネータサーバ６０は、全ての入力ライン６０８Ａ〜６０８Ｂについて処理したか否かを判断し（ステップＳ２）、当該判断結果が否定的である場合、次いで、各入力ライン６０８Ａ〜６０８Ｂにバッファリングされているデータ集合の各データサイズが、条件３を満たすか否かを判断する（ステップＳ３）。条件３とは、当該データサイズが第２最低水位線(LWM[x]：Low Watermark) 以下であることである。入力ライン６０８Ａ〜６０８Ｂのうち少なくとも一方におけるデータ集合のデータサイズが条件３を満たす場合、条件３を満たす入力ライン（不足入力ラインという）におけるデータ集合は不足している又は不足気味であると判断される。次いで、コーディネータサーバ６０は、その不足入力ラインにデータ集合をバッファリングさせるＤＢサーバ（ＤＢサーバ７０Ａ〜７０Ｂのうち少なくとも一方である）が停止(ＳＵＳＰＥＮＤ)状態であるか否かを判断する（ステップＳ４）。当該判断結果が肯定的である場合、コーディネータサーバ６０は、不足入力ラインにおけるデータ集合を増やすべく、不足入力ラインにデータ集合をバッファリングさせるＤＢサーバに対して、データ集合を送信するよう命令する制御コマンド（RESTART コマンド）を送信する（ステップＳ５）。
【００４０】
尚、ステップＳ１の判断結果が否定的である場合、コーディネータサーバ６０は、出力ラインにバッファリングされているデータ集合のデータサイズが条件２を満たすか否かを判断する（ステップＳ６）。条件２とは、当該データサイズが、第１最高水位線(HWM：High Watermark)以上であることである。当該判断結果が肯定的である場合、出力ライン６０８Ｄにおけるデータ集合は余剰気味であると判断される。次いで、コーディネータサーバ６０は、全ての入力ライン６０８Ａ〜６０８Ｂを処理したか否かを判断し（ステップＳ７）、当該判断結果が否定的である場合、次いで、各入力ライン６０８Ａ〜６０８Ｂにバッファリングされているデータ集合のデータサイズが、条件４を満たすか否かを判断する（ステップＳ８）。条件４とは、当該データサイズが、第２最高水位線(HWM[x]：High Watermark)以上か否かを判断する。入力ライン６０８Ａ〜６０８Ｂのうち少なくとも一方におけるデータ集合のデータサイズが条件４を満たす場合、条件４を満たす入力ライン（余剰入力ラインという）におけるデータ集合は余剰気味であると判断される。次いで、コーディネータサーバ６０は、その余剰入力ラインにデータ集合をバッファリングさせるＤＢサーバ（ＤＢサーバ７０Ａ〜７０Ｂのうち少なくとも一方である）が開始（ＳＴＡＲＴ）状態であるか否かを判断する（ステップＳ９）。当該判断結果が肯定的である場合、コーディネータサーバ６０は、余剰入力ラインのデータ集合を減らすべく、余剰入力ラインにデータ集合をバッファリングさせるＤＢサーバに対して、データ集合を送信しないよう命令する制御コマンド（SUSPEND コマンド）を送信する（ステップＳ１０）。
【００４１】
また、ステップＳ６の判断結果が否定的である場合又はステップＳ７の判断結果が肯定的である場合、ステップＳ１１に進む。ステップＳ１１では、コーディネータサーバ６０は、クライアント５０からデータ取得(GET)の要求があったか否かを判断し、当該判断結果が肯定的である場合、出力ライン.tailを進める（ステップＳ１２）。次いで、コーディネータサーバ６０は、出力ライン.tailが出力ライン.top以上か否かを判断する（ステップＳ１３）。当該判断結果が肯定的である場合、送信可能且つ未送信のデータ集合が出力ラインにバッファリング済であるので、コーディネータサーバ６０は、当該データ集合を処理結果としてクライアント５０に送信して（ステップＳ１４）、ステップＳ１５に進む。ステップＳ１１の判断結果が否定的である場合も、ステップＳ１５に進む。
【００４２】
ステップＳ１５では、コーディネータサーバ６０は、ＤＢサーバ７０Ａ〜７０Ｂのうち少なくとも一方からデータ集合を受信したか否かを判断する。当該判断結果が肯定的である場合、当該データ集合を対応する入力ライン（入力ライン６０８Ａ〜６０８Ｂのうち少なくとも一方）にバッファリングして、対応する入力ライン.tail（入力ラインＡ.tail〜入力ラインＢ.tailのうち少なくとも一方）を進める。 
【００４３】
ステップＳ１５の判断結果が否定的である場合、コーディネータサーバ６０は、入力ライン６０８Ａ〜６０８Ｂのうち少なくとも一方にバッファリングされたデータ集合を出力ライン６０８Ｄへ出力可能か否かを判断する（ステップＳ１６）。当該判断結果が肯定的である場合、コーディネータサーバ６０は、最小値のデータをバッファリングしている入力ライン（入力ライン[y]とする）からデータをポップし、入力ライン[y].top を戻して、そのデータを出力ライン６０８Ｄにプッシュし、出力ライン.topを進める（ステップＳ１７）。 
【００４４】
次いで、コーディネータサーバ６０は、出力ライン.tailが出力ライン.top以上か否かを判断する（ステップＳ１８）。当該判断結果が肯定的である場合、送信可能且つ未送信のデータ集合が出力ライン６０８Ｄにバッファリング済であるので、当該データ集合を処理結果としてクライアント５０に送信する（ステップＳ１９）。
【００４５】
尚、第１最高水位線(HWM：High Watermark)、第２最高水位線(HWM[x]：High Watermark)、第１最低水位線(LWM：Low Watermark) 及び第２最低水位線(LWM[x]：Low Watermark)の各値は予め設定し記憶装置や外部記憶装置に記憶させておく。また、各値は、例えば、各フェーズ処理で入力のデータサイズと出力のデータサイズと統計を採取することにより、適正な値に設定することができる。又は、問合せ要求（ＳＱＬ）による事前解析で判断できることもある。例えば、第１最高水位線(HWM)及び第１最低水位線(LWM)の各値の設定例は以下の通りである。
【００４６】
HWM＝2W
LWM＝W   
W：入力のデータサイズと出力のデータサイズとをブロックサイズで割った値
尚、フェーズ処理は１ブロック(例えば、４ＫＢ)を１単位としてパイプライン処理を行うものとする。
【００４７】
次に、ＤＢサーバ７０Ａの行うフェッチ制御部７０５Ａが行う処理の手順について図９を参照しながら説明する。ここでは、上述したように、ＤＢサーバ７０Ａの問合せ解析部７０２Ａが、コーディネータサーバ６０から送信された分散プランを解析し、単体プラン生成部７０３Ａが生成した単体プランを単体プラン実行部７０４Ａが実行した結果得られたデータ集合を結果リストとしてＲＡＭなどの記憶装置にバッファリングしているものとする。そして、ステップＳ３０では、フェッチ制御部７０５Ａは、コーディネータサーバ６０から制御コマンドを受信したか否かを判断する。当該判断結果が肯定的である場合、フェッチ制御部７０５Ａは、受信した制御コマンドがＲＥＳＴＡＲＴコマンドか否かを判断し（ステップＳ３１）、当該判断結果が肯定的である場合、停止(ＳＵＳＰＥＮＤ)状態であれば開始(ＳＴＡＲＴ)状態となって（ステップＳ３２）、送信ブロックサイズを初期値に戻して（ステップＳ３３）、ステップＳ３６に進む。尚、送信ブロックサイズの初期値は、記憶装置や外部記憶装置に予め記憶されている。 
【００４８】
ステップＳ３１の判断結果が否定的である場合、次いで、フェッチ制御部７０５Ａは、受信した制御コマンドがＳＵＳＰＥＮＤコマンドか否かを判断し（ステップＳ３４）、当該判断結果が肯定的である場合、停止(ＳＵＳＰＥＮＤ)状態となって（ステップＳ３５）、ステップＳ３６に進む。また、ステップＳ３４の判断結果が否定的である場合、ステップＳ３６に進む。
【００４９】
ステップＳ３６では、フェッチ制御部７０５Ａは、自身が停止(ＳＵＳＰＥＮＤ)状態であるか否かを判断し、当該判断結果が否定的である場合、送信ブロックサイズを増加させる（ステップＳ３７）。例えば以下の式（１）により、フェッチ制御部７０５Ａは送信部ブロックサイズを算出する。
【００５０】
y = C×x×2・・・(１)
送信ブロックサイズ:y
送信回数:x
定数：C(ブロックサイズなど)
【００５１】
このような式（１）によって送信ブロックサイズを算出することにより、送信回数に応じて送信ブロックサイズを単調増加させることができる。この場合、上述のステップＳ３３で戻した送信ブロックサイズの上述の初期値は、「2C」となる。
【００５２】
その後、フェッチ制御部７０５Ａは、送信ブロックサイズ分だけ結果リストからデータ集合を取り出し（ステップＳ３８）、結果リストにあるデータ集合の全てを処理済であるか否かを判断し(ステップＳ３９)、当該判断結果が否定的である場合、送信対象のデータ集合のデータサイズの合計が送信ブロックサイズを超えるか否かを判断する（ステップＳ４０）。当該判断結果が肯定的である場合、フェッチ制御部７０５Ａは、コーディネータサーバ６０にデータ集合を送信する（ステップＳ４１）。結果リストにあるデータ集合を全て送信した場合は（ステップＳ３９：ＹＥＳ）、フェッチ制御部７０５Ａは、コーディネータサーバ６０に完了ステータス(TERM)を送信する（ステップＳ４２）。
【００５３】
以上のようにして、フェッチ制御部７０５Ａは、コーディネータサーバ６０からの制御コマンドに応じて、処理結果のデータ集合を送信する。尚、ＤＢサーバ７０Ｂの行うフェッチ制御部７０５Ｂが行う処理の手順についても同様であるためその説明を省略する。
【００５４】
図１０は、図２に示したデータを各々記憶するＤＢサーバ７０Ａ〜７０Ｂから各々送信されるデータ集合と、これらがコーディネータサーバ６０でマージされるデータ集合とを示すイメージ図である。同図に示されるように、ＤＢサーバ７０Ａ〜７０Ｂから各々送信されたデータ集合がコーディネータサーバ６０でマージされてクライアント５０に送信されることになる。
【００５５】
ここで、ＤＢサーバ７０Ａが送信するデータ集合の送信ブロックサイズの変化について説明する。図１１は、ＤＢサーバ７０Ａが送信するデータ集合の送信ブロックサイズの単調増加に関する特性を説明するための図である。同図においては、１回目の送信においては小さい送信ブロックサイズであり、２回目以降の送信においては、送信ブロックサイズが一定値になるまで段階的に増加していることが示されている。また、ＤＢサーバ７０Ａが一旦ＳＵＳＰＥＮＤ状態になると、送信ブロックサイズは「０」となり、再び開始（ＳＴＡＲＴ）状態になったときに、１回目の送信時と同様の送信ブロックサイズから段階的に増加していることが示されている。
【００５６】
図１２は、パイプライン処理の流れとして、コーディネータサーバ６０の行う処理及びＤＢサーバ７０Ａ〜７０Ｂの行う処理を時系列的に簡略化して示した図である。同図においては、ＤＢサーバ７０Ａ〜７０Ｂから各々送信されるデータ集合の送信ブロックサイズが段階的に増加していることが示されており、ＤＢサーバ７０Ａでは、ＳＵＳＰＥＮＤ状態からＳＴＡＲＴ状態に復帰したときに送信ブロックサイズが初期化されていることが示されている。また、コーディネータサーバ６０では、ＤＢサーバ７０Ａ〜７０Ｂから送信されるデータ集合をマージするデータマージ処理が滞りなく行われていることが同図において示されている。
【００５７】
一方、図１３は、従来のパイプライン処理において、ＤＢサーバ７０Ａ〜７０Ｂの処理にコーディネータサーバ６０の処理が追いつかない場合のパイプライン処理の流れを時系列的に簡略化して示した図である。このような場合、ＤＢサーバ７０Ａ〜７０Ｂから送信されたデータ集合がコーディネータサーバ６０側に溜まり過ぎており、コーディネータサーバ６０のメモリなどのリソースを圧迫する可能性がある。本実施の形態においては、コーディネータサーバ６０側に溜まっているデータ集合のデータサイズを適宜判断して、ＤＢサーバ７０Ａ〜７０Ｂに対して、データ集合の送信をしないように命令する制御コマンド（ＳＵＳＰＥＮＤコマンド）を適宜送信することにより、リソースの圧迫を回避することができる。
【００５８】
図１４は、図１３とは逆にコーディネータサーバ６０の処理にＤＢサーバ７０Ａ〜７０Ｂの処理が追いつかない場合のパイプラインの処理の流れを時系列的に簡略化して示した図である。このような場合、コーディネータサーバ６０の待ちが多くなり、またクライアント５０からのデータ取得の要求にもすぐ応えられず、初期応答性が悪化する恐れがある。本実施の形態においては、ＤＢサーバ７０Ａ〜７０Ｂから送信するデータ集合の送信ブロックサイズを小さい値から段階的に増加させることにより、初期応答性の悪化を抑制することができる。 
【００５９】
図１５は、ＤＢサーバ７０Ａ〜７０Ｂから送信するデータ集合の送信ブロックデータサイズを小さな値（例えば１ブロック）で固定的にした場合のパイプラインの処理の流れを時系列的に簡略化して示した図である。このような場合、コーディネータサーバ６０とＤＢサーバ７０Ａ〜７０Ｂとの間では、問合せ要求に応じた処理結果のデータ集合を生成する本来の処理以外においてオーバヘッドが増大する恐れがある。オーバヘッドとしては、データ送信時の初期化、終了処理に要するコスト、条件分岐でのチェックに要するコストなどの処理が挙げられる。このような場合においては、並列データベースシステム全体のスループットが低下する恐れがある。
【００６０】
以上のような構成によれば、コーディネータサーバのメモリなどのリソースを圧迫することなく、並列データベースにおいてパイプライン処理をスムーズに実現させることができる。
【００６１】
また、コーディネータサーバ６０の処理にＤＢサーバ７０Ａ〜７０Ｂ側の処理が追いつかない場合、コーディネータサーバ６０の待ちが多くなったり、またクライアントからのデータ取得の要求にもすぐ応えられなかったりするなどの初期応答性の悪化を抑制することができる。
【００６２】
また、ＤＢサーバ７０Ａ〜７０Ｂからコーディネータサーバ６０へ送信するデータサイズを段階的に増大させることにより、オーバヘッドの増大を抑制することができる。従って初期応答性の改善とオーバヘッドの縮小とを両立させることができる。
【００６３】
また、クライアント５０からのコマンドに応じて必要な入力ラインについて処理を行うため、必ずしも全ての入力データを処理することなく、不要なデータ処理を抑制することができる。特に、データ検索では、検索条件に該当するデータが大量にヒットしても最初の数件のみ参照される場合が多い。このような場合にも、パイプライン方式における、各フェーズ処理は全ての入力データを処理するまで継続されるが、各フェーズ処理を緩やかな制御のままにしておくと、全ての入力データを処理してしまうため、不要なデータ処理が発生するからである。
【００６４】
[変形例]
なお、本発明は前記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、前記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。また、以下に例示するような種々の変形が可能である。
【００６５】
＜変形例１＞
上述した実施の形態において、コーディネータサーバ６０で実行される各種プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、当該プログラムを、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成しても良い。ＤＢサーバ７０Ａ〜７０Ｂで各々実行される各種プログラムについても同様である。
【００６６】
＜変形例２＞
上述した実施の形態においては、コーディネータサーバ６０は、データマージ部６０８を有したが、この他に又はこれの代わりに各種の方法（ユニオンやジョインなど）によりデータを集約する手段を有するように構成しても良い。
【図面の簡単な説明】
【００６７】
【図１】一実施の形態にかかる並列データベースシステムの構成を例示する図である。
【図２】ＤＢ７０６Ａ及びＤＢ７０６Ｂに各々記憶されたデータのイメージを例示する図である。
【図３】クライアント５０からコーディネータサーバ６０に対して送信される問合せ要求を例示する図である。
【図４】図３に示した問合せ要求に対して、コーディネータサーバ６０が生成した分散プランを例示する図である。
【図５】ＤＢサーバ７０Ａが生成する単体プランを模式的に例示した図である。
【図６】データマージ部６０８が行うマージ処理の概念を示す図である。
【図７】入力ライン６０８Ａ〜６０８Ｂ及び出力ライン６０８Ｄのデータ構造を模式的に示す図である。
【図８】コーディネータサーバ６０の行う処理の手順を示すフローチャートである。
【図９】ＤＢサーバ７０Ａの行うフェッチ制御部７０５Ａが行う処理の手順を示すフローチャートである。
【図１０】ＤＢサーバ７０Ａ〜７０Ｂから送信されるデータ集合と、これらがコーディネータサーバ６０でマージされるデータ集合とを示すイメージ図である。
【図１１】ＤＢサーバ７０Ａが送信するデータ集合の送信ブロックサイズの単調増加に関する特性を説明するための図である。
【図１２】パイプライン処理の流れとして、コーディネータサーバ６０の行う処理及びＤＢサーバ７０Ａ〜７０Ｂの行う処理を時系列的に簡略化して示した図である。
【図１３】従来のパイプライン処理において、ＤＢサーバ７０Ａ〜７０Ｂの処理にコーディネータサーバ６０の処理が追いつかない場合のパイプライン処理の流れを時系列的に簡略化して示した図である。
【図１４】コーディネータサーバ６０の処理にDBサーバ７０Ａ〜７０Ｂの処理が追いつかない場合のパイプラインの処理の流れを時系列的に簡略化して示した図である。
【図１５】ＤＢサーバ７０Ａ〜７０Ｂから送信するデータ集合の送信ブロックデータサイズを小さな値（例えば１ブロック）で固定的にした場合のパイプラインの処理の流れを時系列的に簡略化して示した図である。
【符号の説明】
【００６８】
５０      クライアント
５１      並列データベース
５２      ネットワーク
６０      コーディネータサーバ
７０Ａ    ＤＢサーバ
７０Ｂ    ＤＢサーバ
６００    受信部
６０１    送信部
６０２    問合せ解析部
６０３    分散プラン生成部
６０４    分散プラン実行部
６０４    分散プラン生成部
６０５    送信部
６０６    受信部
６０７    フェッチ制御部
６０８    データマージ部
６０８Ａ  入力ライン
６０８Ｂ  入力ライン
６０８Ｃ  制御ライン
６０８Ｄ  出力ライン
７００Ａ，７００Ｂ  受信部
７０１Ａ，７０１Ｂ  送信部
７０２Ａ，７０２Ｂ  問合せ解析部
７０３Ａ，７０３Ｂ  単体プラン生成部
７０４Ａ，７０４Ｂ  単体プラン実行部
７０５Ａ，７０５Ｂ  フェッチ制御部
【図１】
0005238219.tif 000002
【図２】
0005238219.tif 000003
【図３】
0005238219.tif 000004
【図４】
0005238219.tif 000005
【図５】
0005238219.tif 000006
【図６】
0005238219.tif 000007
【図７】
0005238219.tif 000008
【図８】
0005238219.tif 000009
【図９】
0005238219.tif 000010
【図１０】
0005238219.tif 000011
【図１１】
0005238219.tif 000012
【図１２】
0005238219.tif 000013
【図１３】
0005238219.tif 000014
【図１４】
0005238219.tif 000015
【図１５】
0005238219.tif 000016