(57)【要約】【課題】共有型データベースシステムにおいて、クエリ処理エンジンの特性とクエリの内容に応じて、クエリ処理エンジンが選択される分散クエリ処理装置を得る。【解決手段】一つのデータベースを複数のクエリ処理エンジンが共有し、クライアントから投稿されるクエリの処理を行うシステムにおいて、データベース（共有データベース４０）に関するデータベース情報１１と、クエリ処理エンジン４１の特性に関するエンジン情報１２とを管理するマルチデータベース管理データ１０と、クライアント２から投稿されたクエリの解析結果に基いて適切なクエリ処理エンジンを選択するとともに、該クエリの分解・再構築を行う分散クエリ生成部１５と、前記適切なクエリ処理エンジンで前記クエリの処理を実行するとともに、最終的な実行結果を受け取ってクライアント２に転送するクエリ実行制御部１６を備える。【選択図】図１
2015045996.tif 000002
【特許請求の範囲】
【請求項１】
一つのデータベースを複数のクエリ処理エンジンが共有し、クライアントから投稿されるクエリの処理を行うデータ共有型データベースシステムにおいて、
前記データベースに関するデータベース情報と、前記クエリ処理エンジンの特性に関するエンジン情報とを管理するマルチデータベース管理データと、
前記クライアントから投稿されたクエリの解析結果に基づいて適切なクエリ処理エンジンを選択するとともに、該クエリの分解・再構築を行う分散クエリ生成部と、
前記適切なクエリ処理エンジンで前記クエリの処理を実行するとともに、最終的な実行結果を受け取って前記クライアントに転送するクエリ実行制御部と、
を備えたことを特徴とする分散クエリ処理装置。
【請求項２】
前記クエリ実行制御部は、クエリの処理を実行するに際して、分解されたクエリの中間テーブルを前記データベース上に作成する
請求項１に記載の分散クエリ処理装置。
【請求項３】
一つのデータベースを複数のクエリ処理エンジンが共有するデータ共有型データベースシステムにおけるクライアントから投稿されるクエリの処理方法において、
クライアントから投稿されたクエリを基にクエリの実行計画を示すクエリプランを生成又は取得し、前記クエリプランを解析することでクエリ処理エンジンにおいて実行される処理フロー、読み込むテーブルと中間データのデータフローを作成するクエリプラン生成／取得／解析手順と、
前記クエリプラン生成／取得／解析手順で生成した処理フローとデータフロー、及び、マルチデータベース管理データのデータベース情報を利用して、テーブルサイズ、処理フロー上の各処理における中間データのデータサイズ、各処理に必要なリソースを計算する計算手順と、
前記計算されたデータサイズや必要なリソースと、マルチデータベース管理データのエンジン情報を基に、処理毎にクエリ処理エンジンを選択するエンジン選択手順と、
処理毎に選択された前記クエリ処理エンジンの情報を基にクエリを生成するクエリ生成手順と、
を実行することを特徴とする分散クエリ処理方法。
【請求項４】
前記クエリ生成手順は、
複数のクエリ処理エンジンを跨ぐ処理となる場合、
一連のクエリ処理の最初に一時テーブルを生成する一時テーブル作成手順と、
各クエリ処理エンジンにおける最後の処理となる前記一時テーブルに対する書き込み手順と、
一連のクエリ処理の最後に前記一時テーブルの削除手順と、
を含む請求項３に記載の分散クエリ処理方法。
【請求項５】
請求項３又は請求項４に記載の分散クエリ処理方法の各手順をコンピュータにより実行可能とした分散クエリ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一つのデータベースを複数のクエリ処理エンジンが共有するデータ共有型データベースシステムにおいて、クエリ処理エンジンの特性とクエリの内容に応じてクエリを分割し、自動的に分配して処理を行う分散クエリ処理装置、処理方法及び処理プログラムに関する。
【背景技術】
【０００２】
売上データや顧客データなど、企業などの組織で扱われる多くの情報はデータベースシステムに保存され、様々なアプリケーションから利用される。理想的には一つのデータベースシステムに全てのデータを重複させることなく格納し、全てのアプリケーションが一つのデータベースシステムを利用することが望まれる。
しかし実際には、目的に応じて複数のデータベースシステムが構築され、まったく同じデータが複数のデータベースシステムに格納されてしまうことや、同じようなデータが異なるデータ形式・粒度で保持する複数データベースシステムが構築される。
これにより、新規にアプリケーションを構築する上で、必要なデータを持つデータベースシステムを探し、更にその中でどのデータベースシステムに接続すればよいかの検討が必要となる等、様々な点で作業が煩雑になるという問題があった。
【０００３】
このような問題を解決するために、複数のデータベースシステムを仮想的に一つのデータベースシステムに見せるマルチデータベースシステム（又はデータ仮想化システム）が開発されている。
例えば、特許文献１に示されるように、複数の階層的なデータベースシステムを、データマッピングにより仮想的なスキーマに統合し、クエリ実行時において処理対象となるデータを保持するデータベースシステムにクエリを分配するマルチデータベースシステムが提案されている。
このシステムによれば、各データベースシステムで実行されたクエリの結果は中央に収集され、一つに統合して結果を出力するシステムとなっている。しかし、複数のデータベースシステムが同一のデータを保持することを考慮しておらず、仮想的なスキーマの生成時にデータの重複をさけるためには、複数のデータベースシステムのうち、一つしか選択できない。
【０００４】
また、上述したマルチデータベースシステムにおいて、同一のデータを保持するデータベースシステムが複数ある場合のクエリ処理手法に関して、特許文献２に示される手法が提案されている。
この手法によれば、同一のテーブルが複数のデータベースシステムにある場合に、同一のテーブルに対して一つの仮想テーブル名をつけ、クエリ実行時に適切なテーブルを選択し、ユーザとは透過的に同一のテーブルの使い分けを実現している。
【０００５】
一方で、データ規模の大容量化に伴い分散処理技術が発達したことで、データの規模や処理の種類に応じて様々なデータベースシステムが登場してきた。これに伴って、複数のデータベースシステムの構築を回避するために、実データを保存するデータベースと、SQL（Structured Query Languge）等のクエリを処理するクエリ処理エンジン（DBMS）を分離した新しい形式のデータベースシステム（以後、データ共有型データベースシステムと呼ぶ）が登場してきた。
このようなシステムでは、データは重複を避けるために一つのデータベースに収集される。そしてこの一つのデータベースを複数のクエリ処理エンジンが共有し、処理の種類や、対象となるデータの規模等に応じてクエリ処理エンジンを使い分けることで、より効率的なデータ処理が可能となった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平０７−１４１３９９号公報
【特許文献２】特開２００８−１１２２８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一つのデータベースを複数のクエリ処理エンジンが共有するデータ共有型データベースシステムを利用するにあたり、ユーザがそれぞれのクエリ処理エンジンがどのような特徴を持っているかを把握していない場合がある。このような場合、特定のクエリを実行できないクエリ処理エンジンを選択したり、特定の処理が不得意で遅いクエリ処理エンジンを選択したりするなどの問題が発生する可能性がある。
【０００８】
特許文献１のような既存のマルチデータベースシステムでは、上述したデータ共有型データベースシステムのような構成を考慮していない。そのため、マルチデータベースシステムから見ると、共有されたデータベースであっても、同一のデータを持った複数のデータベースシステムとして認識される。
【０００９】
特許文献２では、データ共有型データベースシステムへの適用を考慮しているが、一つのデータベースを共有する複数のクエリ処理エンジンへの振り分けが、データベースシステム間におけるデータ移動が発生する処理として高コストであると認識するため、複数のクエリ処理エンジンを跨いだクエリ分割を行わない。
また、仮にコストが低く見積もられ、クエリ処理エンジン毎にクエリを分割したとしても、既存のマルチデータベースシステムにおいては、データが同じデータベース上にあるにも関わらず、各クエリ処理の結果を各クエリエンジンから収集し、マルチデータベースシステムの管理サーバ上で結合処理等を行う必要があり、共有しているデータベースを有効活用することができない。振り分けたクエリに依存関係があるとすると、更にはその管理サーバ上の処理結果を元の同じデータベースに再度書き直すという、無駄なデータ移動が発生することとなる。
【００１０】
本発明は上記実情に鑑みて提案されたもので、従来のマルチデータベース技術では想定していなかった一つのデータベースを複数のクエリ処理エンジンが共有するデータ共有型データベースシステムにおいて、クエリ処理エンジンの特性とクエリの内容に応じて、クエリ処理エンジンが選択される分散クエリ処理装置、処理方法及び処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【００１１】
上記目的を達成するため本発明（請求項１）の分散クエリ処理装置は、一つのデータベースを複数のクエリ処理エンジンが共有し、クライアントから投稿されるクエリの処理を行うデータ共有型データベースシステムにおいて、次の構成を含むことを特徴としている。
前記データベースに関するデータベース情報と、前記クエリ処理エンジンの特性に関するエンジン情報とを管理するマルチデータベース管理データ。
前記クライアントから投稿されたクエリの解析結果に基いて適切なクエリ処理エンジンを選択するとともに、該クエリの分解・再構築を行う分散クエリ生成部。
前記適切なクエリ処理エンジンで前記クエリの処理を実行するとともに、最終的な実行結果を受け取って前記クライアントに転送するクエリ実行制御部。
【００１２】
請求項２は、請求項１の分散クエリ処理装置において、前記クエリ実行制御部は、クエリの処理を実行するに際して、分解されたクエリの中間テーブルを前記データベース上に作成することを特徴としている。
【００１３】
請求項３は、一つのデータベースを複数のクエリ処理エンジンが共有するデータ共有型データベースシステムにおけるクライアントから投稿されるクエリの分散クエリ処理方法において、
クライアントから投稿されたクエリを基にクエリの実行計画を示すクエリプランを生成又は取得し、前記クエリプランを解析することでクエリ処理エンジンにおいて実行される処理フロー、読み込むテーブルと中間データのデータフローを作成するクエリプラン生成／取得／解析手順と、
前記クエリプラン生成／取得／解析手順で生成した処理フローとデータフロー、及び、マルチデータベース管理データのデータベース情報を利用して、テーブルサイズ、処理フロー上の各処理における中間データのデータサイズ、各処理に必要なリソースを計算する計算手順と、
前記計算されたデータサイズや必要なリソースと、マルチデータベース管理データのエンジン情報を基に、処理毎にクエリ処理エンジンを選択するエンジン選択手順と、
処理毎に選択された前記クエリ処理エンジンの情報を基にクエリを生成するクエリ生成手順と、
を実行することを特徴としている。
【００１４】
請求項４は、請求項３の分散クエリ処理方法において、
前記クエリ生成手順は、
複数のクエリ処理エンジンを跨ぐ処理となる場合、
一連のクエリ処理の最初に一時テーブルを生成する一時テーブル作成手順と、
各クエリ処理エンジンにおける最後の処理となる前記一時テーブルに対する書き込み手順と、
一連のクエリ処理の最後に前記一時テーブルの削除手順と、
を含むことを特徴としている。
【００１５】
請求項５は、請求項３又は請求項４に記載の分散クエリ処理方法の各手順について、コンピュータにより実行可能とした分散クエリ処理プログラムであることを特徴している。
【発明の効果】
【００１６】
本発明によれば、一つのデータベースを複数のクエリ処理エンジンが共有するデータ共有型データベースシステムに対するクエリを、各クエリ処理エンジンの特性、処理状況、クエリの処理データサイズ及びクエリ処理内容を考慮し、共有しているデータベース上に作成した一時テーブルを利用するクエリに分割して、クエリ処理エンジンに振り分ける。
【００１７】
その結果、従来のマルチデータベース技術では想定していなかった一つのデータベースを複数のクエリ処理エンジンが共有するデータ共有型データベースシステムにおいて、ユーザからは透過的にクエリ処理エンジンの特性を考慮することなく、より適したクエリ処理エンジンの選択が可能となる。
【００１８】
また、各クエリ処理エンジンの特性とクエリの処理内容を考慮してクエリを分割し、共有のデータベース上に作成した一時テーブルに中間データを格納することで、余計なデータ移動をなくした高速なクエリ処理が可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明の分散クエリ処理装置を含む分散クエリ処理システムの全体構成を示すブロック図である。
【図２】分散クエリ処理装置の分散クエリ処理生成部における処理を説明するためのブロック図である。
【図３】分散クエリ処理システムの全体構成を示すブロック図である。
【図４】クエリエンジンにおけるメモリサイズを示す表である。
【図５】テーブルａの構成を示す表である。
【図６】テーブルｂの構成を示す表である。
【図７】SQLクエリのサンプル例である。
【図８】SQLクエリの処理フロー図である。
【図９】SQLクエリのデータフロー図である。
【図１０】図９のデータフローにおける各データサイズを示す表である。
【図１１】クエリ処理エンジンXにおける処理フロー図である。
【図１２】クエリ処理エンジンYにおける処理フロー図である。
【図１３】図７のSQLクエリを分割して作成したSQLクエリの例である。
【図１４】図７のSQLクエリを分割して作成したSQLクエリの例である。
【発明を実施するための形態】
【００２０】
本発明の分散クエリ処理装置１を備えた分散クエリ処理システムの実施形態の一例について、図１を参照して説明する。
分散クエリ処理装置システムの主要部となる分散クエリ処理装置１は、クライアント２からのクエリの処理要求に対して、ネットワーク３を介して、データベースシステム（データ共有型データベースシステム）４で処理を行うに際して、クエリ処理エンジンの特性とクエリの内容に応じてクエリを分割し、自動的に分配してクエリの処理を行うシステムであり、分散クエリ処理プログラムが格納された記録媒体やインターネットを介してソフトウエアのダウンロードによりインストールすることで、コンピュータ上に構築されている。
【００２１】
分散クエリ処理装置１が構築されるコンピュータは、オペレーティングシステム（ＯＳ）を含む基本プログラムや各種の基本デバイスが記憶されたＲＯＭと、各種のプログラムションやデータが記憶されるハードディスクドライブ装置(HDD)と、CR-ROMやDVD等の記憶媒体からプログラムやデータを読み出すメディアドライブ装置と、プログラムを実行するCPUと、このCPUにワークエリアを提供するRAMと、入出力インターフェース(I/F)を介して接続されたディスプレイ、キーボードおよびマウス等のポインティングデバイスと、外部装置と通信するパラレル／シリアルI/Fとを主要部分とする一般的な構成を備えている。
本実施形態の分散クエリ処理装置１では、分散クエリ処理プログラムがシリアル／パラレルI/Fから入力、またはメディアドライブ装置で読み取られてHDDに予め記憶される。分散クエリ処理プログラムは記憶媒体に記憶され、メディアドライブ装置で読み取られてHDDにインストールされる。
【００２２】
分散クエリ処理システムは、分散クエリ処理装置１と、分散クエリ処理装置１に対してクエリ処理を要求するクライアント２と、ネットワーク３を介して接続されたデータベースシステム４から構成される。データベースシステム４は、一つの共有データベース４０と複数のクエリ処理エンジン４１とを備え、共有データベース４０は、複数のクエリ処理エンジン４１により共有するようになっている。
【００２３】
クライアント２は、WebアプリケーションサーバやBIツールなどの、データベースシステム４に対して、クエリ処理を要求するソフトウエア及びこれを実装したハードウェアを指す。
【００２４】
分散クエリ処理装置１は、マルチデータベース管理データ１０と、データ更新部１３と、アクセス管理部１４と、分散クエリ生成部１５と、クエリ実行制御部１６から構成される。
マルチデータベース管理データ１０は、共有データベース４０の各種情報が記憶されたデータベース情報１１と、データベースシステム４の共有データベース４０を管理するデータベースマネジメントシステムとしての複数のクエリ処理エンジン４１等の情報が記憶されたエンジン情報１２を有することで、各種の情報を保持して管理する。
【００２５】
データベース情報１１には、共有データベース４０におけるスキーマ群の構成、各スキーマのサイズ、アクセス頻度、各スキーマにおける属性一覧、各属性の名前、型、サイズ、付加情報、後述するクエリ処理における中間テーブルの構成とそのサイズの履歴、クエリ処理における出力結果の構成とサイズの履歴を含む共有データベース４０に関する情報が管理されている。
【００２６】
エンジン情報１２には、ノード数、CPUクロック数、CPUコア数、メモリサイズ、ネットワーク帯域、ディスクサイズ、ディスクアクセス帯域、クエリ処理エンジン名、メタデータ及びデータベースの共有の有無、同時実行可能クエリ数、実行不可クエリ、クエリのアルゴリズム情報、リソースの利用状況（CPU利用率、メモリ利用率、ネットワークトラフィック量、ディスク利用量、ディスクスワップ利用量、ディスクI/O量）を含む各クエリ処理エンジン４１の特性に関する情報が管理されている。
【００２７】
データ更新部１３は、データベースシステム４におけるクエリ処理エンジン４１のエンジン情報１２及び共有データベース４０のデータベース情報１１を定期的に又はユーザの要求により収集することで、マルチデータベース管理データ１０を更新する。若しくは、データ更新部１３は、クライアント２を介してユーザから入力されるデータを受け付けることで、マルチデータベース管理データ１０を更新する。
【００２８】
アクセス管理部１４は、クライアント２からのアクセス状況を管理し、クエリの投稿がされた場合に、クエリを分散クエリ生成部１５へ出力する制御が行われる。
【００２９】
分散クエリ生成部１５は、クライアント２から投稿されたクエリを解析し、マルチデータベース管理データ１０のデータベース情報１１及びエンジン情報１２に基づいて、適切なクエリ処理エンジン４１の選択とクエリの分解・再構築を行う。クエリの分解・再構築（分散クエリの作成）とエンジン選択の詳細手順については、後述する。
【００３０】
クエリ実行制御部１６は、適切なクエリ処理エンジン４１でクエリの処理を実行するとともに、最終的な実行結果を受け取ってクライアント２に転送する。また、クエリの処理を実行するに際して、必要に応じて、分解されたクエリの中間テーブルを共有データベース４０上に作成する。
【００３１】
データベースシステム４の各のいジスン複数のデワークを介した複数のデータベースクエリ処理エンジン４１は、共有データベース４０に対して投稿されたクエリの処理を行う。
共有データベース４０は、クエリ処理に必要なデータをクエリ処理エンジン４１に提供する。
【００３２】
分散クエリ処理装置１と各クエリ処理エンジン４１はネットワーク３を介して接続され、分散クエリ処理装置１で生成された分散クエリは、指定された各クエリ処理エンジン４１にネットワーク３を通じて転送され、各クエリの処理結果も同様にネットワーク３を通じてクエリ処理エンジン４１から分散クエリ処理装置１へと転送される。
【００３３】
共有データベース４０は、物理的に一つである場合だけでなく、複数のデータベースを完全に同期または分散してデータを格納することで仮想的に一つに見せる場合も含まれる。例えば、物理的に離れている複数のデータベースにおいて、ある一つのデータベースへの書き込みが行われると同時に、その更新が他の全てのデータベースにも瞬時に適用される場合、共有する一つのデータベースの形態として適用される。
また、ここでのデータベースは、ハードディスクドライブ（HDD）やメモリなどの情報記憶媒体に保存されたデータベースシステムにおける物理データと、物理データの位置やテーブルスキーマなどのデータベースシステムのデータ構成に関する論理的情報（メタデータ）を含む。
【００３４】
次に、分散クエリ処理装置１におけるクエリ振り分け処理の詳細について説明する。
一つの共有データベース４０を複数のクエリ処理エンジン４１で共有するデータ共有型でのためしているデータソースデータ共有型データベースに対して、クライアント２からクエリが投稿されると、アクセス管理部１４が受け取り、シーケンシャルに分散クエリ生成部１５へとクエリを受け渡す。
【００３５】
このとき、分散クエリ生成部１５は、図２に示す手順で、クライアント２が投稿したクエリを、適切なクエリ処理エンジン４１への分散クエリへと変換する。
クエリプラン生成／取得／解析では、クライアント２から投稿されたクエリを基にクエリの実行計画を示すクエリプランを生成又は取得し、クエリプランを解析することでクエリ処理エンジンにおいて実行される処理のフロー、読み込むテーブルと中間データのデータフローを作成する（ステップ２１）。
【００３６】
データサイズとリソース計算では、クエリプラン生成／取得／解析で生成した処理フローとデータフロー、更にマルチデータベース管理データ１０のデータベース情報１１を利用して、テーブルサイズ、処理フロー上の各処理における中間データのデータサイズ、その他の各処理に必要なリソースを計算する（ステップ２２）。
【００３７】
エンジン選択では、処理毎の対象クエリ処理エンジンを選択する。このとき、上記で計算したデータサイズや必要なリソースと、マルチデータベース管理データ１０のエンジン情報１２を基に、予め定めたクエリ処理エンジン選択基準と照らしあわせた上でクエリ処理エンジンが選択される（ステップ２３）。
【００３８】
クエリ生成では、処理毎に、選択されたクエリ処理エンジンの情報を基に、クエリを生成する（ステップ２４）。
このとき、処理フローに沿ってクエリを生成するが、複数のクエリ処理エンジンを跨ぐ処理フローとなる場合、一連のクエリ処理の最初に一時テーブルを生成するクエリ文を挿入し、各クエリ処理エンジンにおける最後の処理はこの一時テーブルに対しての挿入処理に変更され、この一連のクエリ処理の最後に一時テーブルの削除処理を挿入する。
クエリエンジン選択後、クエリをそのままにクエリ分割できない場合は、処理フローやデータフローからエンジン別のクエリを再構築（再作成）する。
【００３９】
続いて、クエリ処理を行う方法について、具体例を参照して説明する。
図３は、実際のクエリ処理におけるシステム構成例で、クエリ処理エンジンXとクエリ処理エンジンYが、共有のデータベースAを利用している。この構成により、クライアント２からは、同一のデータを持った２つのデータベースに見える。
【００４０】
例えば、クエリ処理エンジンXは、データサイズに比例して常に安定した実行が可能で、一方、クエリ処理エンジンYは、物理メモリサイズ（32GB）までのテーブルに対する処理はクエリ処理エンジンXと比較して高速だがこれを超えるデータに対してクエリを実行できないと仮定する。クエリ処理エンジンXとクエリ処理エンジンYの各物理メモリは、図４に示す通りとなっている。
この前提から、振り分け条件として処理対象データがクエリ処理エンジンYの物理メモリサイズを超えた場合にクエリ処理エンジンXへ分配し、クエリ処理エンジンYの物理メモリサイズ以下の処理対象データに対する処理をクエリ処理エンジンYへ分配する。
【００４１】
テーブルa（図５）及びテーブルb（図６）に対するSQLクエリ（図７）を例に、クエリ処理について説明する。
このSQLクエリは、テーブルa及びbを「テーブルaに含まれる属性idとテーブルbに含まれる属性aidが等しいレコード」という条件で結合処理（JOIN処理）を行い、その結果を「テーブルaに含まれる属性dateが等しいレコード」で集計し、これに紐づくテーブルbのsalesの合計値を計算（AGGREGATE処理（GROUP BY + SUM））し、このレコードをdate値で降順にソート（ORDER BY処理）するという内容となっている。
【００４２】
クライアント２から図７のSQLクエリが投稿されると、分散クエリ生成部１５はクエリプランを生成し、上述の処理順の通りに図８の処理フローと、各処理における入出力のデータから図９のデータフローを作成する。
ここでは、「テーブルaの読み込み」（ステップ８１ａ）は「a」を出力（ステップ９１ａ）、「テーブルbの読み込み」（ステップ８１ｂ）では「b」を出力（ステップ９１ｂ）、「JOIN処理」（ステップ８２）では「temp_join」を出力（ステップ９２）、「AGGREGATE処理（GROUP BY + SUM）」（ステップ８５）では「temp_aggr」を出力（ステップ９５）、「ORDER BY処理」（ステップ８６）ではoutputを出力（ステップ９６）するものとする。
【００４３】
このデータフローと、対応する処理やデータベース情報から、フローにおける各データのサイズを図１０のように見積る。このデータサイズと図４の物理メモリを比較し、入力データもしくは出力データが物理メモリサイズを超えているかどうかを判定することで、各処理を行うクエリ処理エンジンを決定する。
すなわち、「JOIN処理」までが全てクエリ処理エンジンYの物理メモリサイズ32GBを超えていることから、「テーブルaの読み込み」、「テーブルbの読み込み」、「JOIN処理」をクエリ処理エンジンXで処理し、残りの「AGGREGATE処理（GROUP BY + SUM）」、「ORDER BY処理」をクエリ処理エンジンYで行うこととなる。
【００４４】
上述したクエリ処理の場合、複数のクエリ処理エンジンを跨ぐ処理となるので、クエリ処理エンジンXとクエリ処理エンジンYの間でデータのやり取りを行うために、共有のデータベースA上に中間データ（一時テーブルtemp）を作成し、利用することが行われる。
すなわち、一連のクエリ処理の最初に一時テーブルの作成処理（一時テーブルを生成するクエリ文を挿入）、各クエリ処理エンジンにおける最後の処理は、一時テーブルに対しての書き込み処理（挿入処理）に変更し、一連のクエリ処理の最後に一時テーブルの削除処理を追加する。
【００４５】
図１１がクエリ処理エンジンXにおける処理フローであり、分配された処理に加えて、最初に一時テーブルtempの作成処理（ステップ８０）と、「JOIN処理」の後に処理結果をテーブルtempへ書き込む処理（ステップ８３）が追加されている。
【００４６】
更に、図１２がクエリ処理エンジンYにおける処理フローであり、分配された処理に加えて、最初にクエリ処理エンジンXが作成したtempのデータを読み込む処理（ステップ８４）と、処理終了後にtempを削除する処理（ステップ８７）が追加されている。
【００４７】
図１１及び図１２の処理フローを基に、図７のSQLクエリを分割して作成したSQLクエリは、図１３及び１４のようになる。すなわち、図１３のSQLクエリが図１１のクエリ処理エンジンXにおける処理に対応し、図１４のSQLクエリが図１２のクエリ処理エンジンYにおける処理に対応する。
【００４８】
上述したクエリ処理によれば、クエリを分割して、同じ共有データベース４０を共有している点を利用し、データ移動における余計なオーバヘッドを発生させずに、より高速にクエリを実行することができる。
【符号の説明】
【００４９】
１…分散クエリ処理装置、  ２…クライアント、  ３…ネットワーク、  ４…データベースシステム、  １０…マルチデータベース管理データ、  １１…データベース情報、  １２…エンジン情報、  １３…データ更新部、  １４…アクセス管理部、  １５…分散クエリ生成部、  １６…クエリ実行制御部、  ４０…共有データベース、  ４１…クエリ処理エンジン。
【図１】
2015045996.tif 000003
【図２】
2015045996.tif 000004
【図３】
2015045996.tif 000005
【図４】
2015045996.tif 000006
【図５】
2015045996.tif 000007
【図６】
2015045996.tif 000008
【図７】
2015045996.tif 000009
【図８】
2015045996.tif 000010
【図９】
2015045996.tif 000011
【図１０】
2015045996.tif 000012
【図１１】
2015045996.tif 000013
【図１２】
2015045996.tif 000014
【図１３】
2015045996.tif 000015
【図１４】
2015045996.tif 000016