(57)【要約】【課題】  クラスタ環境のデータベースシステムにおける並列分散処理の効率を向上させる。【解決手段】  統括ノード１００は、実行ノード２００での演算処理の実行を指示する共通の実行命令を生成するとともに、演算処理で用いるデータの転送を指示する転送命令を生成する。統括ノード１００は、生成した実行命令と転送命令とを結合した命令情報を生成し、通信ネットワーク１０を介して複数の実行ノード２００に同報配信する。命令情報を受信した実行ノード２００は、受信した転送命令に基づき、通信ネットワーク１０を介して他の実行ノード２００との間でデータの送受信を行って、処理に必要なデータを取得する。実行ノード２００は、受信した実行命令に基づき、蓄積しているデータおよび他の実行ノード２００から受信したデータを用いて演算処理を実行する。【選択図】  図１
2005309684.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードで並列分散処理をおこなうデータベースシステムにおいて、
前記複数のノードは、通信ネットワークを介して相互接続された、前記並列分散処理を統括する統括ノードと、データの蓄積および演算処理をおこなう複数の実行ノードと、から構成され、
前記統括ノードは、
各実行ノードでの演算処理の実行を指示する共通の実行命令を生成する実行命令生成手段と、
前記実行命令で指示される演算処理で用いるデータの転送を指示する転送命令を生成する転送命令生成手段と、
前記実行命令生成手段が生成した実行命令と、前記転送命令生成手段が生成した転送命令とを結合した命令情報を、前記通信ネットワークを介して前記複数の実行ノードに同報配信する命令配信手段と、
を備え、
前記実行ノードは、
前記統括ノードの命令配信手段から配信される命令情報を前記通信ネットワークを介して受信する命令受信手段と、
前記命令受信手段が受信した転送命令に基づき、前記通信ネットワークを介して他の実行ノードとの間でデータの送受信を行うデータ転送手段と、
前記命令受信手段が受信した実行命令に基づき、蓄積されているデータおよび前記データ転送手段が受信したデータを用いて演算処理を実行する演算手段と、
を備えることを特徴とするデータベースシステム。
【請求項２】
前記転送命令生成手段は、データを送信すべき実行ノードと、データを受信すべき実行ノードと、を指定した転送命令を生成する、
ことを特徴とする請求項１に記載のデータベースシステム。
【請求項３】
前記統括ノードは、
いずれの実行ノードにいずれのデータが格納されているかを示す配置情報を取得して記憶する配置情報取得手段をさらに備え、
前記転送命令生成手段は、前記配置情報取得手段が記憶する配置情報に基づいて、前記転送命令を生成する、
ことを特徴とする請求項１または２に記載のデータベースシステム。
【請求項４】
前記命令配信手段は、前記実行命令生成手段が生成した実行命令と、前記転送命令生成手段が生成した転送命令とを結合したツリー構造の命令情報を前記複数の実行ノードに配信し、
前記演算手段は、前記命令受信手段が受信したツリー構造の命令情報を再帰的に実行することで、該命令情報に含まれる実行命令が指示する演算処理を実行する、
ことを特徴とする請求項１乃至３のいずれか１項に記載のデータベースシステム。
【請求項５】
並列分散処理をおこなうデータベースシステムを統括するコンピュータに、
前記データベースシステムを構成する複数のコンピュータのいずれに、いずれのデータが格納されているかを示す配置情報を取得して記憶するステップと、
前記複数のコンピュータそれぞれで実行させる演算処理の内容を示す情報と、当該演算処理で用いるデータを指定する情報と、を含んだ実行命令を生成するステップと、
前記配置情報に基づいて、他のコンピュータにデータを送信すべきコンピュータを示す情報と、他のコンピュータからデータを受信すべきコンピュータを示す情報と、を含んだ転送命令を生成するステップと、
前記生成された実行命令と転送命令とを結合させた命令情報を、通信ネットワークを介して前記複数のコンピュータにブロードキャストするステップと、
を実行させることを特徴とするプログラム。
【請求項６】
並列分散処理をおこなうデータベースシステムを構成するコンピュータに、
演算処理に用いられるデータを蓄積するステップと、
前記データベースシステムを制御するコンピュータから配信される実行命令と転送命令とを通信ネットワークを介して受信するステップと、
受信した転送命令に基づき、前記通信ネットワークを介して他のコンピュータとの間でデータの送受信をおこなうステップと、
受信した実行命令に基づいて、蓄積しているデータおよび他のコンピュータから受信したデータを用いて演算処理を実行するステップと、
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースシステム、および、プログラムに関し、特に、並列分散処理に好適なデータベースシステム、および、プログラムに関する。
【背景技術】
【０００２】
共有ディスクを用いずに、データ（例えば、テーブルデータ）が複数のコンピュータ（ノード）に分散配置される方式（Shared Nothing Type）の並列データベースシステムにおいては、異なるノードに存在するテーブル間のデータを必要とする処理（主に結合演算処理）を実行する場合の方法として、例えば、それぞれのテーブルにハッシュをかけることで各ノードに分散させる方法が知られている（例えば、非特許文献１）。
【０００３】
例えば、全ノードに分散配置されているテーブル（分散テーブル）と、特定のノードにのみ存在するテーブル（特定テーブル）とを結合演算する場合、上記の方法では、結合演算の結合条件に基づいて結合キーが生成され、対象となるテーブルをそれぞれの結合キーでハッシュすることで、テーブルが再配置される。すなわち、分散テーブルと特定テーブルが各ノードに再配置される。分散テーブルと特定テーブルが各ノードに再配置されるので、これらを結合する結合演算を各ノードにおいて実行することができる。
【０００４】
この方法では、演算対象となるテーブルのそれぞれをハッシュして再配置するので、対象となるテーブルの数が多い場合、処理量が膨大となり、処理効率が低下してしまう。また、ノード間の通信負荷も大きい。
【非特許文献１】合田和生，他２名，「並列データベースカーネルDBKernelを用いた高速情報検索処理：TRECデータによる実験」，電子情報通信学会，第１２回データ工学ワークショップ DEWS2001，平成１３年３月９日
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は上記実状に鑑みてなされたもので、処理負荷が低く、高速に処理を実行することができるデータベースシステムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明の第１の観点にかかるデータベースシステムは、
複数のノードで並列分散処理をおこなうデータベースシステムにおいて、
前記複数のノードは、通信ネットワークを介して相互接続された、前記並列分散処理を統括する統括ノードと、データの蓄積および演算処理をおこなう複数の実行ノードと、から構成され、
前記統括ノードは、
各実行ノードでの演算処理の実行を指示する共通の実行命令を生成する実行命令生成手段と、
前記実行命令で指示される演算処理で用いるデータの転送を指示する転送命令を生成する転送命令生成手段と、
前記実行命令生成手段が生成した実行命令と、前記転送命令生成手段が生成した転送命令とを結合した命令情報を、前記通信ネットワークを介して前記複数の実行ノードに同報配信する命令配信手段と、
を備え、
前記実行ノードは、
前記統括ノードの命令配信手段から配信される命令情報を前記通信ネットワークを介して受信する命令受信手段と、
前記命令受信手段が受信した転送命令に基づき、前記通信ネットワークを介して他の実行ノードとの間でデータの送受信を行うデータ転送手段と、
前記命令受信手段が受信した実行命令に基づき、蓄積されているデータおよび前記データ転送手段が受信したデータを用いて演算処理を実行する演算手段と、
を備えることを特徴とする。
【０００７】
上記データベースシステムにおいて、
前記転送命令生成手段は、データを送信すべき実行ノードと、データを受信すべき実行ノードと、を指定した転送命令を生成することが望ましい。
【０００８】
上記データベースシステムにおいて、
前記統括ノードは、
いずれの実行ノードにいずれのデータが格納されているかを示す配置情報を取得して記憶する配置情報取得手段をさらに備えていることが望ましく、この場合、
前記転送命令生成手段は、前記配置情報取得手段が記憶する配置情報に基づいて、前記転送命令を生成することができる。
【０００９】
上記データベースシステムにおいて、
前記命令配信手段は、前記実行命令生成手段が生成した実行命令と、前記転送命令生成手段が生成した転送命令とを結合したツリー構造の命令情報を前記複数の実行ノードに配信し、
前記演算手段は、前記命令受信手段が受信したツリー構造の命令情報を再帰的に実行することで、該命令情報に含まれる実行命令が指示する演算処理を実行することが望ましい。
【００１０】
上記目的を達成するため、本発明の第２の観点にかかるプログラムは、
並列分散処理をおこなうデータベースシステムを統括するコンピュータに、
前記データベースシステムを構成する複数のコンピュータのいずれに、いずれのデータが格納されているかを示す配置情報を取得して記憶するステップと、
前記複数のコンピュータそれぞれで実行させる演算処理の内容を示す情報と、当該演算処理で用いるデータを指定する情報と、を含んだ実行命令を生成するステップと、
前記配置情報に基づいて、他のコンピュータにデータを送信すべきコンピュータを示す情報と、他のコンピュータからデータを受信すべきコンピュータを示す情報と、を含んだ転送命令を生成するステップと、
前記生成された実行命令と転送命令とを結合させた命令情報を、通信ネットワークを介して前記複数のコンピュータにブロードキャストするステップと、
を実行させることを特徴とする。
【００１１】
上記目的を達成するため、本発明の第３の観点にかかるプログラムは、
並列分散処理をおこなうデータベースシステムを構成するコンピュータに、
演算処理に用いられるデータを蓄積するステップと、
前記データベースシステムを制御するコンピュータから配信される実行命令と転送命令とを通信ネットワークを介して受信するステップと、
受信した転送命令に基づき、前記通信ネットワークを介して他のコンピュータとの間でデータの送受信をおこなうステップと、
受信した実行命令に基づいて、蓄積しているデータおよび他のコンピュータから受信したデータを用いて演算処理を実行するステップと、
を実行させることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、並列分散処理をおこなうデータベースシステムにおいて、実行する処理を指示する命令と、処理に必要なデータの転送を指示する命令とを含んだ一の命令情報の配信により、処理の実行を指示することができるので、各ノードおよび通信ネットワークの負荷を軽減することができ、データベースシステム全体の処理効率を向上させることができる。
【発明を実施するための最良の形態】
【００１３】
（第１の実施形態）
本発明にかかる実施の形態を、以下図面を参照して説明する。
【００１４】
図１は、本実施の形態にかかるデータベースシステム１の構成を模式的に示す図である。本実施の形態にかかるデータベースシステム１は、複数の情報処理装置（例えば、ワークステーションやパーソナルコンピュータなど）、すなわち「ノード」から構成される。データベースシステム１を構成する複数のノードは、図１に示すように、統括ノード１００と、複数の実行ノード２００から構成されており、各ノードは、所定の通信ネットワーク１０を介して相互接続されている。
【００１５】
ここで、本実施の形態にかかるデータベースシステム１は、複数のノード（実行ノード２００）にデータを分散配置し、各実行ノード２００で所定の演算を実行する、いわゆるクラスタ環境の並列分散データベースである。そして、統括ノード１００は、このような並列分散処理を統括するものであり、複数の実行ノード２００から構成されているデータベースを管理するＤＢＭＳ（DataBase Management System：データベース管理システム）として機能する。
【００１６】
通信ネットワーク１０は、例えば、IEEE802.3などの通信規格に基づいた通信媒体であり、例えば、TCP/IP（Transmission Control Protocol/Internet Protocol）などの通信プロトコルに基づく各ノード間のデータ送受信を媒介する。
【００１７】
統括ノード１００、および、実行ノード２００の構成を図面を参照して以下説明する。
【００１８】
統括ノード１００はデータベースシステム１における並列分散処理を統括するノード（コーディネータノード）であり、図２に示すような構成を有する。図示するように、統括ノード１００は、制御部１１０と、通信制御部１２０と、入力制御部１３０と、出力制御部１４０と、プログラム格納部１５０と、記憶部１６０と、から構成される。
【００１９】
制御部１１０は、例えば、ＣＰＵ（Central Processing Unit：中央演算処理装置）やワークエリアとなる所定の記憶装置（ＲＡＭ（Random Access Memory）など）から構成され、統括ノード１００の各部を制御するとともに、プログラム格納部１５０に格納されている所定の動作プログラムに基づいて後述する各処理を実行する。
【００２０】
通信制御部１２０は、例えば、ＮＩＣ（Network Interface Card）などの所定の通信装置から構成され、統括ノード１００と通信ネットワーク１０とを接続し、実行ノード２００との通信をおこなう。
【００２１】
入力制御部１３０は、例えば、キーボードやポインティング・デバイスなどの所定の入力装置１３を接続し、入力装置１３から入力された指示などを制御部１１０に伝達する。
【００２２】
出力制御部１４０は、例えば、ディスプレイ装置やプリンタなどの所定の出力装置１４を接続し、制御部１１０の処理結果などを必要に応じて出力装置１４に出力する。
【００２３】
プログラム格納部１５０は、例えば、ハードディスク装置やＲＯＭ（Read Only Memory）などといった所定の記憶装置から構成され、制御部１１０が実行する種々の動作プログラムが格納されている。プログラム格納部１５０に格納される動作プログラムは、統括ノード１００の基本動作を司る任意のＯＳ（Operating System：基本ソフトウェア）の他に、ＯＳと協働して後述する各処理を実現するための、以下に示すような動作プログラムが格納されているものとする。後述する統括ノード１００による処理は、制御部１１０がこれらの動作プログラムを実行することで実現される。
（Ｐ１−１）「通信制御プログラム」：通信制御部１２０を制御し、通信ネットワーク１０を介して実行ノード２００と通信をおこなうためのプログラム
（Ｐ１−２）「ＤＢＭＳプログラム」：各実行ノード２００における出入力などを指示し、データベースシステム１における並列分散処理を統括・管理するためのプログラム
（Ｐ１−３）：「命令生成プログラム」：並列分散処理を実施する際の各実行ノード２００における動作を指示する命令を生成するプログラム
【００２４】
統括ノード１００の制御部１１０が上記プログラムを実行することで、統括ノード１００は下記の機能を実現する。
（Ｆ１−１）「実行命令生成機能」：入力制御部１３０などから入力されるクエリに基づいて、各実行ノード２００で実行する並列処理の内容、および、当該処理で用いるデータを指定する共通の実行命令を生成する機能
（Ｆ１−２）「転送命令生成機能」：実行命令で指定する処理に用いられるデータを、いずれの実行ノード２００からいずれの実行ノード２００に転送すべきかを指定した転送命令を生成する機能
（Ｆ１−３）「命令配信機能」：実行命令と転送命令とを結合し、通信制御部１２０から通信ネットワーク１０を介して実行ノード２００に同報配信（ブロードキャスト）する機能
【００２５】
本実施の形態では、制御部１１０がプログラム格納部１５０に格納されているプログラムを実行することにより、いわゆるソフトウェア処理で上記機能を実現するが、これらの機能に特化した回路（いわゆる、ＡＳＩＣ（Application Specific Integrated Circuit））などを統括ノード１００に構成することで、いわゆるハードウェア処理によって上記機能が実現されてもよい。
【００２６】
記憶部１６０は、例えば、ＲＡＭやハードディスク装置などといった所定の記憶装置から構成され、各実行ノード２００に配信する情報や、実行ノード２００から受信した情報などを格納する他、処理に用いるデータがいずれの実行ノード２００に配置されているかを示した、図３（ａ）に示すような「データ配置情報」を格納する。
【００２７】
図示するように、「データ配置情報」には、データベースシステム１を構成する複数の実行ノード２００を特定するための「ノードＩＤ」をキーとしたレコードに、当該ノードＩＤの実行ノード２００に格納されているデータを特定するための「データＩＤ」が記録されている。「ノードＩＤ」は、例えば、ＩＰアドレスなどといった、実行ノード２００それぞれに割り当てられている一意の識別情報である。また「データＩＤ」は、データベースシステム１全体で蓄積している複数のデータそれぞれに一意に割り当てられている識別情報である。
【００２８】
このようなデータ配置情報は、例えば、入力制御部１３０を介してオペレータから入力される他、通信ネットワーク１０を介して統括ノード１００が各実行ノード２００に問い合わせをおこなうことで、自動的に取得して蓄積するようにしてもよい。また、統括ノード１００がデータを分割して各実行ノード２００に配置するような場合には、その際に統括ノード１００がデータ配置情報を生成して蓄積するようにしてもよい。
【００２９】
また、記憶部１６０には、実行ノード２００に対して送信した命令を管理するための、図３（ｂ）に示すような「命令管理テーブル」が作成される。図示するように、「命令管理テーブル」には、データベースシステム１を用いた並列分散処理の実行を指示する入力命令（クエリなど）毎に一意に割り当てられる命令ＩＤをキーとするレコードが作成され、各レコードには、「入力命令」、「対象データ」、「対象ノード」、「転送命令」、「実行命令」、「配信命令」、「配信先ノード」、などの項目が用意される。
【００３０】
項目「入力命令」には、統括ノード１００に入力された命令を示す情報が記録される。項目「対象データ」には、当該命令で指示される処理に用いるデータを特定するための情報（識別情報）が記録される。項目「対象ノード」には、当該命令で指示される処理を実行するノードを特定するための情報（ノードＩＤ）が記録される。項目「転送命令」および「実行命令」には、後述する「命令処理」で作成される転送命令と実行命令（詳細後述）を示す情報が記録される。項目「配信命令」には、実際に実行ノード２００に配信される、転送命令と実行命令とが結合された命令が記録される。項目「配信先ノード」には、命令の配信先となった実行ノード２００を示す情報が記録される。
【００３１】
さらに、記憶部１６０には、各実行ノード２００の処理結果を格納するための、図３（ｃ）に示すような「処理結果管理テーブル」が作成される。図示するように、「処理結果管理テーブル」には、「命令管理テーブル」の各入力命令に対応する処理結果に一意に割り当てられる「処理結果ＩＤ」（命令ＩＤと同一でもよい）毎にレコードが作成され、各レコードには、「命令ＩＤ」、「個別処理結果」、「最終処理結果」、などの項目が用意される。項目「命令ＩＤ」には、当該処理の実行を指示した入力命令に割り当てられている命令ＩＤが記録される。項目「個別処理結果」には、当該命令に基づいて実行ノード２００で実行された処理結果が記録される。項目「最終処理結果」には、「個別処理結果」に記録されている個別処理結果を統合した最終処理結果が記録される。
【００３２】
なお、記憶部１６０には、データベースシステム１を構成する各ノードとの通信に必要な情報、例えば、通信ネットワーク１０を介した通信での宛先となるＩＰアドレスやＭＡＣアドレスなどのアドレス情報が格納されているものとする。この場合、各ノードを示す識別情報と、当該ノードのアドレス情報とが対応付けられて記憶される。
【００３３】
次に実行ノード２００の構成を説明する。実行ノード２００はデータベースシステム１において分散配置されるデータを蓄積するとともに、統括ノードからの指示に基づいて演算処理を実行するノード（サブノード）であり、図４に示すような構成を有する。図示するように、実行ノード２００は、制御部２１０と、通信制御部２２０と、入力制御部２３０と、出力制御部２４０と、プログラム格納部２５０と、記憶部２６０と、から構成される。
【００３４】
制御部２１０は、例えば、ＣＰＵやワークエリアとなる所定の記憶装置（ＲＡＭなど）から構成され、実行ノード２００の各部を制御するとともに、プログラム格納部２５０に格納されている所定の動作プログラムに基づいて後述する各処理を実行する。
【００３５】
通信制御部２２０は、例えば、ＮＩＣなどの所定の通信装置から構成され、当該実行ノード２００と通信ネットワーク１０とを接続し、統括ノード１００および他の実行ノード２００との通信をおこなう。
【００３６】
入力制御部２３０は、例えば、キーボードやポインティング・デバイスなどの所定の入力装置２３を接続し、入力装置２３から入力された指示などを制御部２１０に伝達する。
【００３７】
出力制御部２４０は、例えば、ディスプレイ装置やプリンタなどの所定の出力装置２４を接続し、制御部２１０の処理結果などを必要に応じて出力装置２４に出力する。
【００３８】
プログラム格納部２５０は、例えば、ハードディスク装置やＲＯＭなどといった所定の記憶装置から構成され、制御部２１０が実行する種々の動作プログラムが格納されている。プログラム格納部２５０に格納される動作プログラムは、実行ノード２００の基本動作を司る任意のＯＳの他に、ＯＳと協働して後述する各処理を実現するための、以下に示すような動作プログラムが格納されているものとする。後述する実行ノード２００による処理は、制御部２１０がこれらの動作プログラムを実行することで実現される。
（Ｐ２−１）「通信制御プログラム」：通信制御部２２０を制御し、通信ネットワーク１０を介して統括ノード１００および他の実行ノード２００と通信をおこなうためのプログラム
（Ｐ２−２）「処理実行プログラム」：統括ノード１００からの命令に基づいて、実行ノード２００に分散配置されたデータを用いて演算処理を実行するためのプログラム
【００３９】
実行ノード２００の制御部２１０が上記プログラムを実行することで、実行ノード２００は下記の機能を実現する。
（Ｆ２−１）「データ転送機能」：統括ノード１００から受信した転送命令に基づいて、指定されたデータの他の実行ノード２００への送信、もしくは、他の実行ノード２００からの受信をおこなう機能
（Ｆ２−２）「処理実行機能」：統括ノード１００から受信した実行命令に基づき、指定されたデータを用いて演算処理を実行する機能
【００４０】
本実施の形態では、制御部２１０がプログラム格納部２５０に格納されているプログラムを実行することにより、いわゆるソフトウェア処理で上記機能を実現するが、これらの機能に特化した回路（いわゆる、ＡＳＩＣ（Application Specific Integrated Circuit））などを実行ノード２００に構成することで、いわゆるハードウェア処理によって上記機能が実現されてもよい。
【００４１】
記憶部２６０は、例えば、ＲＡＭやハードディスク装置などといった所定の記憶装置から構成され、データベースシステム１の並列分散処理で用いられるデータなどを蓄積する。
【００４２】
本実施の形態では、所定の表データ（テーブルデータ）ＴＢを並列分散処理に用いるものとする。このような表データは複数の実行ノード２００に分散配置されるが、表データＴＢ毎に任意の分散方式が適用される。本実施の形態では、図５に示すように、複数の実行ノード２００の内の特定の実行ノード２００にのみ格納される表データ（以下、「特定テーブルＳＴ」とする）と、一の表データの内容が分割されて複数の実行ノード２００に配置される表データ（以下、「分割テーブルＰＴ」とする）を想定する。
【００４３】
分割テーブルＰＴは、当該表データの内容が分割されて複数の実行ノード２００に配置されるものであるので、換言すれば、複数の実行ノード２００に配置された分割テーブルＰＴを結合すると一のテーブルとなる。ここで、データベースシステム１に格納される表データが特定テーブルＳＴとなるか分割テーブルＰＴとなるかは、例えば、各表データのサイズなどによって決まる。すなわち、表データのサイズが比較的大きく、当該表データ全体を一のノードで処理するには相当の処理能力や処理時間を要するような表データは、その内容が分割されて複数の実行ノード２００に配置される。一方、サイズが比較的小さく、一のノードによっても効率的に処理できる表データは、当該表データの全体を特定の実行ノード２００に配置する。
【００４４】
また、各ノードには、それぞれを識別するための識別情報が付与されているが、理解を容易にするため、図５に示す例では、実行ノード２００の数を「５」とし、各実行ノード２００に１〜５の識別番号が付与されているものとする。そして、表データとしてテーブルＴＢ１、テーブルＴＢ２、テーブルＴＢ３が用意されているものとする。「テーブルＴＢ１」は、識別番号が「１」の実行ノード２００のみに格納された特定テーブルＳＴである。「テーブルＴＢ２」は、その内容が分割されて（ＴＢ２ａ〜ＴＢ２ｄ）、識別番号が「１」〜「４」の実行ノード２００に配置された分割テーブルＰＴである。「テーブルＴＢ３」は、識別番号が「５」の実行ノード２００のみに格納された特定テーブルＳＴである。換言すれば、識別番号「５」の実行ノード２００は、テーブルＴＢ３のみを格納している。
【００４５】
このような場合、統括ノード１００の記憶部１６０に格納される「データ配置情報」には、実行ノード２００の識別番号が「ノードＩＤ」に記録され、テーブルを特定する情報（「ＴＢ１」など）が「データＩＤ」として記録される。
【００４６】
なお、実行ノード２００の記憶部２６０には、データベースシステム１を構成する各ノードとの通信に必要な情報、例えば、通信ネットワーク１０を介した通信での宛先となるＩＰアドレスやＭＡＣアドレスなどのアドレス情報が格納されているものとする。この場合、各ノードを示す識別情報と、当該ノードのアドレス情報とが対応付けられて記憶される。
【００４７】
さらに、必要に応じて、実行ノード２００による処理結果を示す情報が記憶部２６０に格納される。
【００４８】
このような構成を有するデータベースシステム１の動作を以下説明する。本実施の形態では、データベースシステム１の実行ノード２００に分散配置されている異なる表データを結合演算する場合を想定する。本実施の形態では、テーブルＴＢ１とテーブルＴＢ２の間での結合演算をおこなうものとして以下説明する。
【００４９】
まず、データベースシステム１で実行される「並列分散処理」を図６に示すフローチャートを参照して説明する。
【００５０】
この「並列分散処理」では、まず、統括ノード１００から実行ノード２００へ処理実行を指示するための「命令処理」が実行される（ステップＳ１００）。ここでは、並列分散処理のための各実行ノード２００の動作が規定され、実行ノード２００に指示する。そして、統括ノード１００から指示を受けた実行ノード２００は、指示に基づいた動作によって処理を遂行する「実行処理」を実行する（ステップＳ２００）。そして、統括ノード１００が、実行ノード２００による処理結果を全体的な処理結果として集約する「統合処理」（ステップＳ３００）を実行することで、データベースシステム１による並列分散処理が完了する。
【００５１】
各処理の詳細を以下図面を参照して説明する。まず、統括ノード１００が実行する「命令処理」（ステップＳ１００）の詳細を図７に示すフローチャートを参照して説明する。この「命令処理」は、データベースシステム１に蓄積されているデータを用いた並列分散処理を指示するクエリ（例えば、ＳＱＬ文など）が、入力制御部１３０などから制御部１１０に入力されたことを契機に開始されるものとする。本実施の形態では、テーブルＴＢ１とテーブルＴＢ２との結合演算を指示するクエリが入力されるものとする。また、クエリが入力されると、制御部１１０は、記憶部１６０の「命令管理テーブル」に新規レコードを作成し、項目「入力命令」に入力されたクエリを記録する。
【００５２】
制御部１１０は、入力されたクエリを分析し、当該クエリで指示された処理に用いるデータ（以下、「対象データ」とする）を特定する（ステップＳ１０１）。本例では、テーブルＴＢ１とテーブルＴＢ２の結合演算が指示されているので、「テーブルＴＢ１」と「テーブルＴＢ２」が対象データとして特定される。また、特定された対象データを示す識別情報（「ＴＢ１」や「ＴＢ２」など）が記憶部１６０の「命令管理テーブル」に記録される。
【００５３】
対象データを特定すると、制御部１１０は、当該処理のために対象ノードが実行する処理動作を指示する「実行命令」を生成し（ステップＳ１０２）、記憶部１６０の「命令管理テーブル」に記録する。この「実行命令」は、「いずれのデータを用いて、どのような処理（演算）をおこなうか」を示す。すなわち、入力されたクエリと同様の情報とすることができる。換言すれば、処理全体の命令をそのまま各実行ノード２００に対する共通の命令として用いることができる。本例のように、テーブルＴＢ１とテーブルＴＢ２を結合演算する処理の場合、例えば、ＳＱＬ文によって「select ＊ from ＴＢ１, ＴＢ２ where ＴＢ１.属性a = ＴＢ２.属性b;」などと記述することができる。例示した実行命令は、各対象ノードにおいて、「テーブルＴＢ１とテーブルＴＢ２から、テーブルＴＢ１での属性ａとテーブルＴＢ２での属性ｂが一致する列を抽出せよ」という処理内容を指示する命令となる。このように、統括ノード１００で生成される実行命令は、全実行ノード２００に共通の一の命令で構成することができる。
【００５４】
実行命令を生成すると、制御部１１０は、記憶部１６０に格納されている「データ配置情報」を参照し、特定された対象データが格納されている実行ノード２００（以下、「対象ノード」とする）を、対象データ毎に特定する（ステップＳ１０３）。図５に示す例では、テーブルＴＢ１が識別番号「１」の実行ノード２００に格納されているので、この実行ノード２００が対象ノードとして特定される。同様に、テーブルＴＢ２は、識別番号が「１」〜「４」の実行ノード２００に格納されているので、これらの実行ノード２００が対象ノードとして特定される。また、特定された対象ノードを示す識別情報が、記憶部１６０の「命令管理テーブル」に記録される。
【００５５】
対象ノードを特定すると、制御部１１０は、特定した対象ノードのすべてが対象データを取得するようにデータ転送経路を決定する。本実施の形態では、各実行ノード２００で並列分散処理をおこなうため、対象ノードとなった実行ノード２００のそれぞれが、処理に用いるデータを取得する必要がある。本実施の形態では、特定テーブルＳＴであるテーブルＴＢ１を他の対象ノードに転送することとする。この場合、制御部１１０は、識別番号「１」の実行ノード２００から、識別番号「２」〜「４」の実行ノード２００にテーブルＴＢ１を転送すべきであると分析する。
【００５６】
データ転送経路が決定されると、対象ノードに対するデータ転送を指示する「転送命令」（プリプラン）を生成し（ステップＳ１０４）、記憶部１６０の「命令管理テーブル」に記録する。この転送命令は、対象ノードでの処理（実行プラン）を実行する前に、各対象ノード間でのデータ転送の実行を指示するものであり、「いずれのノードが、いずれのノードに、いずれのデータを転送するか」を記述したものである。ここでは、ノードを示す情報としてノードＩＤが用いられ、データを示す情報としてデータＩＤが用いられるものとする。そして、データ転送の実行指示を示す所定の変数と組み合わされることで、転送命令が構成される。
【００５７】
例えば、「Data = ＴＢ１、sNode = 1、rNode = 2, 3, 4」などといった文字列情報が転送命令として生成される。この場合、変数「Data」は、転送すべきデータ（テーブル）を示し、変数「sNode」は、データを送信するノード（以下、「送信ノード」とする）を示し、変数「rNode」は、データを受信するノード（以下、「受信ノード」とする）を示す。したがって、上記に例示した転送命令は、「テーブルＴＢ１を、識別番号が「１」の実行ノード２００から、識別番号が「２」、「３」、「４」の実行ノード２００に送信せよ」という命令となる。換言すれば、「識別番号が「２」、「３」、「４」の実行ノード２００は、テーブルＴＢ１を、識別番号が「１」の実行ノード２００から受信せよ」という命令となる。
【００５８】
実行命令が生成されると、制御部１１０は、ステップＳ１０２で生成した実行命令とステップＳ１０４で生成した転送命令とを結合した「命令情報」を生成し、すべての実行ノード２００に同報配信（ブロードキャスト）する（ステップＳ１０５）。すなわち、制御部１１０は通信制御部１２０を制御し、通信ネットワーク１０を介して実行ノード２００に命令情報を送信する。また、生成された命令情報、および、配信先となった実行ノード２００を示す情報（識別情報）が記憶部１６０の「命令管理テーブル」に記録される。ここで、配信した命令情報には、記憶部１６０の命令管理テーブル上で割り当てられている命令ＩＤが付加されているものとする。命令情報が実行ノード２００に配信されると、「命令処理」を終了し、「並列分散処理」のメインフロー（図６）に戻る。
【００５９】
上記「命令処理」では、実行する並列分散処理に応じて、処理に用いるデータと、当該データが格納されているノードが特定されるので、いずれのノードにいずれのデータを転送すべきであるかが決定される。そして、この決定に基づく転送命令が生成され、処理の実行を指示する実行命令とともに実行ノード２００にブロードキャストされる。ここで「実行命令」は、実行ノード２００毎に個別に規定されるのではなく、１つの共通した情報であり、かつ、「転送命令」も、転送すべきデータとそのデータを送信するノードおよび受信するノードを示すのみの極めて単純な情報となる。さらに、このような実行命令と転送命令とを結合させ、一の情報として配信するので、命令の送信回数を１回とすることができる。したがって、統括ノード１００の処理や通信ネットワーク１０に負荷をかけることなく、並列分散処理を実行するための命令情報を実行ノード２００に配信することができる。
【００６０】
「命令処理」によって命令情報が実行ノード２００に配信されると、各実行ノード２００では、配信された命令情報に基づいて、制御部２１０が「実行処理」を実行する（図６、ステップＳ２００）。この「実行処理」の詳細を図８に示すフローチャートを参照して説明する。「実行処理」は、実行ノード２００が命令情報を受信したことを契機に開始される。より詳細には、実行ノード２００の通信制御部２２０が通信ネットワーク１０を介して統括ノード１００から命令情報を受信し、受信した命令情報を制御部２１０に入力したことを契機に開始される。
【００６１】
制御部２１０は、受信した「命令情報」から「転送命令」を抽出する（ステップＳ２０１）。制御部２１０は、抽出した転送命令に、当該実行ノード２００が送信ノードとして指定されているか否かを判別する（ステップＳ２０２）。上述した転送命令の例では、送信ノードを示す変数「sNode」に、当該実行ノード２００の識別情報が設定されているか否かによって判別することができる。
【００６２】
当該実行ノード２００が送信ノードとして指定されている場合（ステップＳ２０２：Ｙｅｓ）、制御部２１０は、転送命令に指定されているデータ（以下、「転送対象データ」とする）を記憶部２６０から取得する（ステップＳ２０３）。すなわち、転送命令の変数「Data」に設定されている表データを記憶部２６０から取得する。例えば、「Data = ＴＢ１」と記述されている場合、制御部２１０は、テーブルＴＢ１を転送対象データとして記憶部２６０から取得する。図５に示す例では、対象データであるテーブルＴＢ１とテーブルＴＢ２の内、特定テーブルＳＴとなっているテーブルＴＢ１を格納している識別番号「１」の実行ノード２００が、本処理をおこなうこととなる。
【００６３】
制御部２１０はさらに、通信制御部２２０を制御して、ステップＳ２０３で取得した表データ（転送対象データ）を、転送命令で「受信ノード」に指定されている実行ノード２００に送信する（ステップＳ２０４）。上記転送命令の例では、変数「rNode」に設定されている実行ノード２００を特定し、当該実行ノード２００に表データを送信する。この場合、制御部２１０は、「rNode」に設定されている識別情報に対応するアドレス情報を記憶部２６０から取得し、当該アドレス宛に表データを送信する。なお、各ノードの識別情報をＩＰアドレスなどのアドレス情報としている場合は、転送命令に識別情報として設定されているアドレス宛に表データを送信する。
【００６４】
表データを送信すると、制御部２１０は、受信した命令情報から「実行命令」を抽出し（ステップＳ２０５）、抽出した実行命令に指定されているデータ（表データ）を用いて、指定された処理（結合演算など）を実行する（ステップＳ２０６）。ここでは、当該実行ノード２００の記憶部２６０に格納されている表データを用いて処理を実行することとなる。当該ノードが送信ノードである場合は、対象データを予め有していることになるので、記憶部２６０に格納されている表データを用いて処理が実行される。図５に示す例では、識別番号「１」の実行ノード２００が該当するので、記憶部２６０に格納されているテーブルＴＢ１とテーブルＴＢ２を用いて、例えば、結合演算を実行する。
【００６５】
指定された処理の実行が完了すると、制御部２１０は、実行結果を示す情報（以下、「個別結果情報」とする）を記憶部２６０もしくはワークエリアに格納するとともに、通信制御部２２０から当該個別結果情報を通信ネットワーク１０を介して統括ノード１００に送信する（ステップＳ２０７）。実行ノード２００が送信する個別結果情報には、統括ノード１００から受信した命令情報に付加されていた命令ＩＤおよび当該実行ノード２００の識別情報が付加されるものとする。統括ノード１００に個別結果情報を配信すると、「実行処理」を終了し、「並列分散処理」のメインフロー（図６）に戻る。
【００６６】
一方、当該実行ノード２００が送信ノードとして指定されていない場合（ステップＳ２０２：Ｎｏ）、制御部２１０は、当該実行ノード２００が受信ノードとして転送命令に設定されているか否かを判別する（ステップＳ２０８）。上記転送命令の例では、変数「rNode」に当該実行ノード２００を示す識別情報が設定されているか否かに基づいて判別される。
【００６７】
当該実行ノード２００が受信ノードとして指定されている場合（ステップＳ２０８：Ｙｅｓ）、制御部２１０は、送信ノードとして設定されている実行ノード２００から、対象データが送信されるのを待機する。
【００６８】
送信ノードから対象データを受信すると（ステップＳ２０９）、制御部２１０は、受信した対象データを記憶部２６０に格納する（ステップＳ２１０）。
【００６９】
他のノードから転送された対象データが記憶部２６０に格納されると、制御部２１０は、受信した命令情報から「実行命令」を抽出し（ステップＳ２０５）、抽出した実行命令に指定されているデータ（表データ）を用いて、指定された処理（結合演算など）を実行する（ステップＳ２０６）。当該ノードが受信ノードである場合は、分割テーブルＰＴとして予め有しているデータと、他のノードから転送されたデータが対象データとなる。図５に示す例では、識別番号が「２」、「３」、「４」の実行ノード２００が該当するので、記憶部２６０に当初から格納されているテーブルＴＢ２と、識別番号「１」の実行ノード２００から転送されたテーブルＴＢ１を用いて、例えば、結合演算を実行する。
【００７０】
指定された処理の実行が完了すると、制御部２１０は、実行結果を示す個別結果情報を記憶部２６０もしくはワークエリアに格納するとともに、通信制御部２２０から当該個別結果情報を通信ネットワーク１０を介して統括ノード１００に送信して（ステップＳ２０７）、「並列分散処理」のメインフロー（図６）に戻る。
【００７１】
一方、当該実行ノード２００が送信ノードおよび受信ノードのいずれにも指定されていない場合（ステップＳ２０８：Ｎｏ）、制御部２１０は、何も処理をおこなわずに「並列分散処理」のメインフロー（図６）に戻る。すなわち、データの送信も受信も行うことなく「実行処理」を終了する。図５に示す例では、識別番号「５」の実行ノード２００がこれに該当する。この実行ノード２００は、テーブルＴＢ３のみを格納しているので、テーブルＴＢ１とテーブルＴＢ２とが対象データである今回の並列分散処理には参加する必要がない。したがって、データ転送も演算もおこなうことなく「実行処理」が終了する。
【００７２】
このように、上記「実行処理」では、統括ノード１００から配信された「転送命令」に基づいて、処理の実行に必要となるデータが各ノード間で転送される。すなわち、対象データが特定テーブルＳＴと分割テーブルＰＴである場合には、特定のノードにのみ格納されている特定テーブルＳＴが他のノードに転送される。これにより、並列分散処理を実行するすべてのノードが必要なデータを保持することとなる。このように、対象ノードにより必要な対象データが過不足なく保持されると、各対象ノードにて、対象データを用いた処理が実行される。上述したように、分割テーブルＰＴは、一のテーブルの内容を分割して複数の実行ノード２００に分散配置しているので、各実行ノード２００では、当該テーブルの全体よりも小さいサイズのテーブルデータを対象にして結合演算などの処理をおこなうので、効率的に処理することができる。
【００７３】
また、対象データを有していないノードではデータ転送がおこなわれない。すなわち、複数の実行ノード２００の内、必要最小限のノード間のみでデータ転送がおこなわれるので、通信ネットワーク１０のネットワーク負荷が過剰に大きくなることがない。
【００７４】
上記「実行処理」により、各実行ノード２００で処理が実行されて処理結果が取得されると、統括ノード１００にて、各実行ノード２００からの処理結果を統合するための「統合処理」が実行される（図６、ステップＳ３００）。この「統合処理」の詳細を図９に示すフローチャートを参照して説明する。「統合処理」は、統括ノード１００が、対象ノードのいずれかから個別結果情報を受信したことを契機に開始される。より詳細には、統括ノード１００の通信制御部１２０が、対象ノードとなっている実行ノード２００が送信した個別結果情報を受信し、受信した個別結果情報が制御部１１０に入力されたことを契機に開始される。
【００７５】
対象ノードとなっている実行ノード２００のいずれかから個別結果情報を受信すると、制御部１１０は、当該個別結果情報に付加されている命令ＩＤに基づき、記憶部１６０の「処理結果管理テーブル」に、当該命令ＩＤが記録されているレコードがあるか否かを検索する（ステップＳ３０１）。
【００７６】
当該命令ＩＤを含むレコードがない場合（ステップＳ３０１：Ｎｏ）、制御部１１０は、処理結果ＩＤを付与し、当該処理結果ＩＤをキーとしたレコードを「処理結果管理テーブル」に新規作成し（ステップＳ３０２）、当該レコードの項目「個別処理結果」に、受信した個別結果情報を格納する（ステップＳ３０３）。すなわち、発した命令に対する処理結果が最初に到来した場合、新規レコードを作成して個別結果情報を格納する。
【００７７】
２番目以降に到来した処理結果については、既にレコードが作成されているため（ステップＳ３０１：Ｙｅｓ）、当該レコードに受信した個別結果情報を格納する（ステップＳ３０３）。
【００７８】
制御部１１０は、受信する個別結果情報に付加されている実行ノード２００の識別情報と、記憶部１６０の「命令管理テーブル」に記録されている対象ノードを示す識別情報とに基づいて、すべての対象ノードから個別結果情報を受信したか否かを判別する（ステップＳ３０４）。
【００７９】
すべての対象ノードから個別結果情報を受信していない場合（ステップＳ３０４：Ｎｏ）、ステップＳ３０１に戻り、すべての対象ノードから個別結果情報を受信するまで「処理結果管理テーブル」に個別結果情報を蓄積する。
【００８０】
すべての対象ノードから個別結果情報を受信すると（ステップＳ３０４：Ｙｅｓ）、制御部１１０は、「処理結果管理テーブル」に蓄積された個別結果情報を統合し、最終処理結果情報を生成する（ステップＳ３０５）。すなわち、並列分散処理により、各実行ノード２００で得られた処理結果を１つにまとめることで、当初の入力命令に対する処理結果とする。生成された最終処理結果情報は、記憶部１６０の「処理結果管理テーブル」に記録される。
【００８１】
制御部１１０は、生成した最終処理結果情報を、出力制御部１４０を介して出力装置１４から出力して（ステップＳ３０６）、処理を終了する。
【００８２】
以上説明したように、上記実施の形態によれば、並列分散処理をおこなうデータベースシステム１において、複数の実行ノード２００に対して発する命令の情報量を小さくすることができるので、命令を発する統括ノード１００や命令を伝達する通信ネットワーク１０に負荷をかけることなく、複数の実行ノード２００に命令を発することができる。
【００８３】
また、命令情報の構成を極めて単純なものとすることができ、かつ、すべての実行ノード２００に対して共通のものとすることができるので、命令情報を生成する統括ノード１００、および、命令情報を認識する実行ノード２００の処理負荷が軽減される。
【００８４】
さらに、実行すべき処理内容を指示する実行命令と、処理実行前に実施すべきデータ転送を指示する転送命令とを結合させた一の命令情報のみを送信すればよいので、命令送信回数が１回のみでよい。これにより、命令情報を送信する統括ノード１００および命令情報を伝達する通信ネットワーク１０に負荷をかけることなく、複数の実行ノード２００に命令を発することができる。
【００８５】
また、データベースシステム１で格納しているデータの分散方式に応じて、処理に必要なデータを実行ノード２００間で転送することで、処理を実行する実行ノード２００自身が必要とするデータを取得するので、すべてのデータを取得して配信する特定のノードなどを設ける必要がない。すなわち、表データなどのサイズの大きなデータを特定のノードのみで処理する必要がないため、全体の処理効率を高くすることができる。また、処理を実行しないノードではデータの転送をおこなわないので、データ転送を媒介する通信ネットワーク１０に必要以上の負荷をかけることなくデータ転送することができる。また、このようなデータ転送の実施を、上述のような極めて単純な構成の転送命令で実現することができる。
【００８６】
（第２の実施形態）
上記第１の実施形態では、理解を容易にするため、システム構成（ノード数）や対象データの構成、処理内容などを簡易にして説明したが、実際のデータベースシステムにおいては、ノード数やデータ量が膨大となる場合があり、かつ、データの分散形態も複雑となる場合がある。また、第１の実施形態で例示したような、２つのテーブルデータを結合させるだけの単純な処理ではない場合も多い。このような場合、実行命令や転送命令が複数必要となり、命令情報が複雑になってしまうこともある。このように命令が複雑となってしまう場合であっても効率的に処理をおこなう手法を、第２の実施形態として以下説明する。なお、本実施の形態におけるデータベースシステム１の構成は第１の実施形態と同様である。
【００８７】
上記第１の実施形態では、データの分散形態として、特定テーブルＳＴと分割テーブルＰＴを例示したが、本実施の形態では、これらに加え「分散テーブルＡＴ」を想定する。分散テーブルＡＴは、一のテーブルデータを分割せずに複数の実行ノード２００に配置する形態である。すなわち、同一のテーブルデータが複数の実行ノード２００に配置される。また、本実施の形態では、２種類の分割テーブル（ＰＴ１とＰＴ２）を想定する。
【００８８】
すなわち、図１０に示すように、本実施の形態では、以下のような４種類のテーブルデータを想定する。
・テーブルＴＢ１：識別番号「１」の実行ノード２００にのみ配置された特定テーブルＳＴ
・テーブルＴＢ２：識別番号「１」〜「４」の実行ノード２００に分割して配置された分割テーブルＰＴ１
・テーブルＴＢ３：識別番号「２」〜「５」の実行ノード２００に分割して配置された分割テーブルＰＴ２
・テーブルＴＢ４：識別番号「１」〜「５」の実行ノード２００に配置された分散テーブルＡＴ
【００８９】
また、本実施の形態では、実行命令と転送命令とを結合させた命令情報をツリー構造（木構造）にし、このようなツリー構造の命令を各実行ノード２００が再帰的に実行する。すなわち、「命令処理」（図７）のステップＳ１０５で統括ノード１００が命令情報を生成する際に、図１１に示すような、ツリー構造（階層構造）の命令情報を生成する。図１１の例では、第１階層から第４階層までの４階層構造を有する。本実施の形態では、第１階層を最上位階層とする。
【００９０】
図１１において、ツリー構造の第１階層にある「実行プランタグ」は、複数の実行命令と転送命令を含んだ一の命令情報（プラン）であることを示すものである。すなわち、複数の実行命令と転送命令がツリー状の階層構造で実行プランタグに続く。
【００９１】
第１階層の「実行命令１」は、直近下位の第２階層における「実行命令２」と「実行命令５」の実行結果を用いた処理（結合演算）の実行を指示する実行命令である。
【００９２】
第２階層の「実行命令２」は、例えば、テーブルＴＢ１とテーブルＴＢ２との結合演算の実行を指示する実行命令である。ここで、テーブルＴＢ１は特定テーブルＳＴであり、テーブルＴＢ２は分割テーブルＰＴ１であるから、いずれも実行ノード２００間での転送が必要となる。したがって、「実行命令２」には第３階層にて「転送命令１」と「転送命令２」が続く。
【００９３】
「転送命令１」は、テーブルＴＢ１の転送を指示する転送命令であり、「転送命令２」は、テーブルＴＢ２の転送を指示する転送命令である。転送命令の記述形式は第１の実施形態と同様である。すなわち、転送対象となるデータ、転送元のノード、転送先のノード、などが記述される。転送命令に続く実行命令は、転送命令の実行によって取得されたテーブルデータへのアクセス（テーブルスキャン）を指示するものである。図１１の例では、「転送命令１」に続く「実行命令３」によって、テーブルＴＢ１に対するテーブルスキャンの実行が指示され、「転送命令２」に続く「実行命令４」によって、テーブルＴＢ２に対するテーブルスキャンの実行が指示される。
【００９４】
すなわち、実行ノード２００間での転送が必要なテーブルデータに対する動作を指示する実行命令の直前の階層に、当該テーブルデータの転送を指示する転送命令が挿入される形となる。
【００９５】
一方、第２階層で「実行命令２」と並行する「実行命令５」についても、同様に適当な実行命令や転送命令が階層構造で続く。図１１の例では、実行命令５は、例えば、テーブルＴＢ４とテーブルＴＢ３の結合演算の実行を指示する実行命令である。ここで、テーブルＴＢ４は、すべての実行ノード２００に配置されている分散テーブルＡＴであるので、各実行ノード２００間でテーブルＴＢ４を転送する必要はない。したがって、実行命令５の直下に、テーブルＴＢ４に対するテーブルスキャンを指示する「実行命令６」が続く。
【００９６】
また、実行命令５が対象とするテーブルＴＢ３は、分割テーブルＰＴ２であるため、実行ノード２００間での転送が必要となる。したがって、実行命令５の下位階層である第３階層に、テーブルＴＢ３の転送を指示する「転送命令３」が続く。転送命令３の直下には、転送命令３で取得されるテーブルＴＢ３に対するテーブルスキャンの実行を指示する「実行命令７」が続く。
【００９７】
このようなツリー構造の命令情報を受信した実行ノード２００の動作を以下説明する。
【００９８】
実行ノード２００において、通信制御部２２０が統括ノード１００から命令情報を受信すると、制御部２１０は、命令情報の最上位階層から下位方向に順次巡っていき、転送命令を実行していく。上述したように、本実施の形態においても、第１の実施形態で例示した転送命令と同様の転送命令であるので、制御部２１０は、転送命令の記述にしたがって、対象データの送受信をおこなう。すなわち、自身が送信ノードとして指定されている場合には、記憶部２６０に格納している対象データを他の実行ノード２００に転送し、自身が受信ノードとして指定されている場合には、他の実行ノード２００から転送される対象データを受信する。
【００９９】
図１１における「実行命令２」以降を例にとると、直下の「転送命令１」を各実行ノード２００が実行することで、テーブルＴＢ１の転送が実行ノード２００間でおこなわれる。また、同じく「実行命令２」の直下にある「転送命令２」を各実行ノード２００が実行することで、テーブルＴＢ２の転送が各実行ノード２００間でおこなわれる。転送命令の実行においては、第１の実施形態と同様に、送信ノードに指定された実行ノード２００は対象データを転送先に指定されている実行ノード２００に送信し、受信ノードに指定された実行ノード２００は対象データの転送を待機する。
【０１００】
転送命令の実行により対象データの転送が完了すると、各実行ノード２００では、当該転送命令の直下の実行命令が実行される。転送命令の直下がテーブルスキャンを指示する実行命令である場合には、制御部２１０が、転送命令に指定されていたテーブルデータに対しテーブルスキャンをおこなうことで、データを取得する。そして、転送命令の直下の実行命令の実行後は、制御部２１０は、当該転送命令の直近上位の実行命令を実行する。すなわち、実行ノード２００の制御部２１０は、受信したツリー構造の命令を再帰的に実行する。
【０１０１】
図１１における「実行命令２」以降を例にとると、制御部２１０は「転送命令１」（第３階層）の実行により転送されたテーブルＴＢ１に対するテーブルスキャン（第４階層の「実行命令３」）と、「転送命令２」（第３階層）の実行により転送されたテーブルＴＢ２に対するテーブルスキャン（第４階層の「実行命令４」）とを並列に実行して、テーブルＴＢ１とテーブルＴＢ２から必要な情報を取得すると、第２階層の「実行命令２」を実行して、取得したテーブルＴＢ１とテーブルＴＢ２との結合演算を実行する。すなわち、ツリー構造の各枝毎に、転送命令が実行命令より先行して実行されることになる。
【０１０２】
図１１における「実行命令５」以降も同様であり、転送命令が存在する場合には、転送命令が先に実行される。すなわち、制御部２１０は、実行命令５の直下の「転送命令３」を実行してテーブルＴＢ３を転送すると、転送されたテーブルＴＢ３に対してテーブルスキャンをおこなって内容を取得する（「実行命令７」）。これと並行して、制御部２１０は、分散テーブルＡＴであるテーブルＴＢ４をテーブルスキャンして内容を取得する（「実行命令６」）。そして、テーブルＴＢ３とテーブルＴＢ４が取得されると、制御部２１０は、「実行命令５」を再帰的に実行することで、テーブルＴＢ３とテーブルＴＢ４との結合演算をおこなう。
【０１０３】
さらに、制御部２１０は、「実行命令１」を再帰的に実行することで、「実行命令２」による結合演算の結果と、「実行命令５」による結合演算の結果とを用いて結合演算をおこなうことで、最終的な個別処理結果を算出し、統括ノード１００に送信する。
【０１０４】
このように、命令情報をツリー構造とし、各実行ノード２００で再帰的に実行させることにより、ノード数やデータ量が多かったり、データの分散形態が複雑であったり、実行する処理の内容が複雑であるような場合であっても、一の命令情報によって並列分散処理を実行することができる。
【０１０５】
すなわち、本発明を上記各実施の形態の如く適用することにより、並列分散処理をおこなうデータベースシステムの処理効率を向上させることができる。
【０１０６】
なお、上記実施の形態では、特定のノードのみに格納されている特定テーブルＳＴや、複数のノードに分割配置されている分割テーブルＰＴ、あるいは、同一のテーブルデータが複数の実行ノード２００に分散配置されている分散テーブルＡＴを対象データとして結合演算する場合を例示したが、対象とするデータや実行する処理などは任意である。例えば、特定テーブルＳＴ同士の結合演算や、分割テーブルＰＴ同士の結合演算などであっても、同様に処理することができる。また、データベースシステム１に格納するデータあるいは演算処理に用いるデータの種類は、例示した表データ（テーブルデータ）に限られず、任意のデータを取り扱うことができる。
【０１０７】
また、転送命令を生成する際の転送経路の決定は、ノード毎の処理能力や各データの種類やサイズなどに応じて決定されることが望ましい。すなわち、第１の実施形態における転送経路の決定においては、一の実行ノード２００にのみ配置されている特定テーブルＳＴを他の実行ノード２００に転送するような転送経路としたが、逆に、複数の実行ノード２００に格納されている分割テーブルＰＴを、特定テーブルＳＴを保持している実行ノード２００に転送するようにしてもよい。すなわち、統括ノード１００の制御部１１０が、例えば、統計情報などに基づいてコスト計算することで、最も効率的な転送経路を決定すればよい。この場合、例えば、統括ノード１００の記憶部１６０に記憶される「データ配置情報」などに、各実行ノード２００の処理能力を示す情報を記録してもよい。
【０１０８】
また、上記実施の形態では、命令情報をすべての実行ノード２００にブロードキャストするものとしたが、特定された対象ノードのみに配信するようにしてもよい。この場合、特定された対象ノードの識別情報に基づいてアドレスを特定し、特定したアドレス宛に命令情報を送信すればよい。これにより、命令配信時のネットワーク負荷をさらに軽減させることができる。
【０１０９】
上記実施の形態にかかる統括ノード１００および実行ノード２００は、専用装置から構成可能であることはもとより、汎用のコンピュータ装置などを用いて構成することもできる。すなわち、このような汎用装置に上述したプログラムをインストールして実行させることで、上記実施の形態にかかる統括ノード１００および実行ノード２００として機能させることができる。
【０１１０】
このようなプログラムの提供方法は任意であり、例えば、ＣＤ−ＲＯＭなどの記憶媒体に格納して配布可能であることはもとより、プログラムデータを搬送波に重畳することで、所定の通信媒体（例えば、インターネットなど）を介して配布することもできる。
【図面の簡単な説明】
【０１１１】
【図１】本発明の実施の形態にかかる「データベースシステム」の構成を模式的に示す図である。
【図２】図１に示す「統括ノード」の構成を示すブロック図である。
【図３】図２に示す「記憶部」に記録される情報の例を示す図であり、（ａ）は「データ配置情報」の例を示し、（ｂ）は「命令管理テーブル」の例を示し、（ｃ）は「処理結果管理テーブル」の例を示す。
【図４】図１に示す「実行ノード」の構成を示すブロック図である。
【図５】図１に示す「実行ノード」に配置されるデータの分散方式を説明するための図である。
【図６】本発明の実施の形態「並列分散処理」を説明するためのフローチャートである。
【図７】図６に示す「並列分散処理」で実行される「命令処理」を説明するためのフローチャートである。
【図８】図６に示す「並列分散処理」で実行される「実行処理」を説明するためのフローチャートである。
【図９】図６に示す「並列分散処理」で実行される「統合処理」を説明するためのフローチャートである。
【図１０】本発明の第２の実施形態にかかるデータの分散方式を説明するための図である。
【図１１】本発明の第２の実施形態にかかるツリー構造の命令情報を説明するための図である。
【符号の説明】
【０１１２】
１  データベースシステム
１０  通信ネットワーク
１００  統括ノード
２００  実行ノード
【図１】
2005309684.tif 000003
【図２】
2005309684.tif 000004
【図３】
2005309684.tif 000005
【図４】
2005309684.tif 000006
【図５】
2005309684.tif 000007
【図６】
2005309684.tif 000008
【図７】
2005309684.tif 000009
【図８】
2005309684.tif 000010
【図９】
2005309684.tif 000011
【図１０】
2005309684.tif 000012
【図１１】
2005309684.tif 000013