(57)【特許請求の範囲】
【請求項１】
データベースに対する問合せを受け付け実行手順指示を生成するフロントエンド側の計算機と、データベースのデータを分割して格納する分割データ側の複数の計算機で構成され、分割されたデータに対する問合せの実行を前記実行手順指示により行なう分割データ側の第一の問合せ実行部と、各分割されたデータに対する問合せの分割データ側の複数の計算機からの実行結果をまとめて問合せ元へ返す処理を行なうフロントエンド側の第二の問合せ実行部を有し、分割データ側の第一の問合せ実行部に、データベースを操作する為のデータベース操作文の実行部を含まない第一のルーチン実行部を有している並列データベースシステムでルーチンを実行する並列データベースシステムルーチン実行方法において、
ルーチンの本体にデータベース操作文が含まれるかどうかの判定をフロントエンド側の計算機により行なって前記判定した結果を示す情報を記憶装置に記録する過程と、
分割データ側の第一の問合せ実行部において、前記実行手順指示の中のルーチンの呼び出しに対して前記記憶装置に記録した情報を参照し、データベース操作文を含まない場合、分割データ側の計算機に有る、データベース操作文の実行部を含まない第一のルーチン実行部を選択し、データベース操作文を含む場合、フロントエンド側の計算機に有る、データベース操作文の実行部を含む第二のルーチン実行部を選択し、前記選択したルーチン実行部でルーチンの実行を行なう過程とを含むことを特徴とする並列データベースシステムルーチン実行方法。
【請求項２】
実行時にルーチンの本体にデータベース操作文が含まれるかどうかの情報を参照してルーチンを実行するルーチン実行部を選択することを特徴とする請求項１に記載された並列データベースシステムルーチン実行方法。
【請求項３】
当該ルーチンから呼び出される他のルーチンの本体にデータベース操作文が含まれるかどうかの情報も参照して当該ルーチンを実行するルーチン実行部を選択することを特徴とする請求項１または請求項２のいずれかに記載された並列データベースシステムルーチン実行方法。
【請求項４】
データベースに対する問合せを受け付け実行手順指示を生成するフロントエンド側の計算機と、データベースのデータを分割して格納する分割データ側の複数の計算機で構成され、分割されたデータに対する問合せの実行を前記実行手順指示により行なう分割データ側の第一の問合せ実行部と、各分割されたデータに対する問合せの分割データ側の複数の計算機からの実行結果をまとめて問合せ元へ返す処理を行なうフロントエンド側の第二の問合せ実行部を有し、分割データ側の第一の問合せ実行部に、データベースを操作する為のデータベース操作文の実行部を含まない第一のルーチン実行部を有している並列データベースシステムとしてコンピュータを機能させるためのプログラムを記録した媒体において、
ルーチンの本体にデータベース操作文が含まれるかどうかの判定をフロントエンド側の計算機により行なって前記判定した結果を示す情報を記憶装置に記録する過程と、
分割データ側の第一の問合せ実行部において、前記実行手順指示の中のルーチンの呼び出しに対して前記記憶装置に記録した情報を参照し、データベース操作文を含まない場合、分割データ側の計算機に有る、データベース操作文の実行部を含まない第一のルーチン実行部を選択し、データベース操作文を含む場合、フロントエンド側の計算機に有る、データベース操作文の実行部を含む第二のルーチン実行部を選択し、前記選択したルーチン実行部でルーチンの実行を行なう過程とをコンピュータに実行させるためのプログラムを記録したことを特徴とする媒体。
【請求項５】
実行時にルーチンの本体にデータベース操作文が含まれるかどうかを示す前記記憶装置中の情報を参照してルーチンを実行するルーチン実行部を選択する過程をコンピュータに実行させるためのプログラムを記録したことを特徴とする請求項４に記載された媒体。
【請求項６】
当該ルーチンから呼び出される他のルーチンの本体にデータベース操作文が含まれるかどうかを示す前記記憶装置中の情報も参照して当該ルーチンを実行するルーチン実行部を選択する過程をコンピュータに実行させるためのプログラムを記録したことを特徴とする請求項４または請求項５のいずれかに記載された媒体。
【請求項７】
格納するデータに対する問合せの実行を行う第一のプロセスと、データベース操作文を含む関数の実行を行う第二のプロセスを有する複数のプロセスにより通信を介してデータベースを処理するデータベース問合せ処理方法において、
データベースから得たデータを入力として処理する関数を定義するとき、該関数の処理内容に、データベースを操作する為のデータベース操作文が存在するか否かを示す情報を、該関数に対応づけて記憶装置に保持し、
入力した問合せ処理を実行する際に、該問合せに含まれるデータベースからデータを検索する処理と検索したデータを入力とする関数を実行する処理とを実行するとき、当該関数に上記データベース操作文が存在しないことを前記記憶装置中の情報が示している場合は、上記検索する処理と上記関数を実行する処理とを同じ第一のプロセスで実行することを特徴とするデータベース問合せ処理方法。
【請求項８】
上記データベース操作文は、データベースのデータを検索する問合せであることを特徴とする請求項１または請求項７記載のデータベース問合せ処理方法。
【請求項９】
上記データベース操作文は、データベースのデータを更新する問合せであることを特徴とする請求項１または請求項７記載のデータベース問合せ処理方法。
【請求項１０】
上記データベース操作文とは、データベースのデータを削除する問合せであることを特徴とする請求項１または請求項７記載のデータベース問合せ処理方法。
【請求項１１】
上記データベース操作文とは、データベースヘデータを挿入する問合せであることを特徴とする請求項１または請求項７記載のデータベース問合せ処理方法。
【請求項１２】
上記関数は、関数の本体（処理内容）がSQLで記述されたものであり、
関数を定義するときに、関数の本体のSQLを解析し、データベース操作文を含むか含まないかをチェックし、データベースシステムの関数に関する定義情報として記憶装置へ登録することを特徴とする請求項７記載のデータベース問合せ処理方法。
【請求項１３】
上記関数は、関数の本体（処理内容）がC言語で書かれたものであり、
関数の定義文に、関数の本体にデータベース操作文を含むか含まないかを表す情報を含み、データベースシステムの関数に関する定義情報として記憶装置へ登録することを特徴とする請求項７記載のデータベース問合せ処理方法。
【請求項１４】
複数の計算機により通信を介してデータベース処理を行うデータベースシステムにおいて、
データベースから得たデータを入力として処理する関数の定義情報として、該関数の処理内容に、データベースを操作する為のデータベース操作文が存在するか否かを示す情報を、該関数に対応づけて格納する記憶手段と、
上記計算機では、入力した問合せに含まれるデータベースからデータを検索する処理と検索したデータを入力とする関数を実行する処理とを実行するとき、当該関数に上記データベース操作文が存在しないことを前記記憶手段中の情報が示している場合は、上記検索する処理と上記関数を実行する処理とを同じ上記計算機で実行することを特徴とするデータベースシステム。
【請求項１５】
格納するデータに対する問合せの実行を行う第一のプロセスと、データベース操作文を含む関数の実行を行う第二のプロセスを有する複数のプロセスにより通信を介してデータベースを処理するデータベース問合せ処理プログラムを格納した計算機読み取り可能な記録媒体において、
データベースから得たデータを入力として処理する関数を定義するとき、該関数の処理内容に、データベースを操作する為のデータベース操作文が存在するか否かを示す情報を、該関数に対応づけて記憶装置に保持し、
入力した問合せ処理を実行する際に、該問合せに含まれるデータベースからデータを検索する処理と検索したデータを入力とする関数を実行する処理とを実行するとき、当該関数に上記データベース操作文が存在しないことを前記記憶装置中の情報が示している場合は、上記検索する処理と上記関数を実行する処理とを同じ第一のプロセスで実行することを特徴とするデータベース問合せ処理プログラムを格納した計算機読み取り可能な記録媒体。
【請求項１６】
格納するデータに対する問合せの実行を行う第一のプロセスと、データベース操作文を含む関数の実行を行う第二のプロセスを有する複数のプロセスにより通信を介してデータベースを処理するデータベース問合せ処理方法において、
データベースから得たデータを入力として処理する関数の処理内容に、データベースを操作する為のデータベース操作文が存在するか否かを示す情報を、該関数に対応づけて記憶装置に保持し、
入力した問合せに含まれるデータベースからデータを検索する処理と検索したデータを入力とする関数を実行する処理とを実行するとき、当該関数に上記データベース操作文が存在しないことを前記記憶装置中の情報が示している場合は、上記検索する処理と上記関数を実行する処理とを同じ第一のプロセスで実行することを特徴とするデータベース問合せ処理方法。
【請求項１７】
格納するデータに対する問合せの実行を行う第一のプロセスと、データベース操作文を含む関数の実行を行う第二のプロセスを有する複数のプロセスにより通信を介してデータベースを処理するデータベース問合せ処理方法において、
データベースから得たデータを入力として処理する関数の処理内容に、データベースを操作する為のデータベース操作文が存在するか否かを示す情報を、該関数に対応づけて記憶装置に保持し、
入力した問合せに含まれるデータベースからデータを検索する処理と検索したデータを入力とする関数を実行する処理とを実行するとき、上記検索する処理と上記関数を実行する処理とを同じ第一のプロセスで実行することを特徴とするデータベース問合せ処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データベースを管理する並列データベースシステムルーチン実行方法に関し、特に、リレーショナルデータベース管理システムに適した問合せの並列処理に好適な問合せ処理方法に関する並列データベースシステムルーチン実行方法に適用して有効な技術に関するものである。
【０００２】
【従来の技術】
従来、事務データ処理を中心にしてリレーショナルデータベース、主にＳＱＬデータベースシステムの適用が進んでいる。
【０００３】
初期のＳＱＬでは、データの検索、更新、挿入、削除といったデータベース操作は、データベースサーバに対して１つずつ単独に実行を行なっていた。
【０００４】
現在のＳＱＬの仕様では、上記データベース操作を行なう命令の他に、代入や、ＩＦ、ＷＨＩＬＥ等の制御用の命令を加えて、一連の処理を手続き、または、関数という形で一まとめに名前を付けて定義することができる。尚、ここでは、手続きと関数をまとめてルーチンと呼んでいる。
【０００５】
現在、標準化が行われているＳＱＬ３の標準化のDraftは、ISO/IEC JTC1/SC21/WG3 DBL-MCI-004、 ISO Working Draft Database Language SQL、 1996である。
【０００６】
また、データベース管理システムのデータベースにアクセスするサーバは、ユーザアプリケーションであるクライアントからの要求を受取り、データベースにアクセスして結果を返しており、リレーショナルデータベースシステムにおいては、データを複数のデータベース処理サーバに分割して配置して並列にアクセスすることで性能の向上を図ることが容易である。
【０００７】
この様な並列データベースシステムに対する要求は、データ量の増大にともなって強まってきており、その並列データベースシステムについては、例えばDeWitt、D.、et.al.:"Parallel Database Systems: The Future of High Performance Database Systems"、 CACM、 Vol.35、 No.6、 1992.に記載されている。
【０００８】
前記従来の並列データベースシステムでは、クライアントのユーザアプリケーションプログラム（以下ＵＡＰと呼ぶことにする）からのデータベースに対する問い合わせを解析しコンパイルする機能や、各分割したデータに対する結果をまとめてクライアント等に返す機能を持つサーバ（フロントエンドサーバと呼ぶことにする）と、データが格納されるディスク装置にアクセスしデータの操作を行う機能を持つ複数のサーバ（データベース操作サーバと呼ぶことにする）を有しており、フロントエンドサーバとデータベース操作サーバは、高速な相互結合ネットワークで接続されている。
【０００９】
また、並列化の為には、データの分割に対して複数のサーバを割り当てる他に、機能単位でサーバを割り当て、パイプライン的な並列化を行なうこともできる。この場合には、各サーバ機能毎に実行手順の指示が存在し、マルチスレッドで各実行手順を実行することで上記並列化が実現される。
【００１０】
前記の様に並列データベースシステムでは、データの分割や、各機能に対して並列に実行が行われるが、パイプラインに流れるデータのやり取り等、各機能間では通信が行われる為、通信の負荷を少なくすることが１つの課題となる。
【００１１】
次に、従来技術として、並列データベースシステムにおける手続きの実行について記述する。手続きの定義はＣＲＥＡＴＥ ＰＲＯＣＥＤＵＲＥ構文によって行われる。ＳＱＬ３では、抽象データ型と呼ばれるユーザ定義の型を定義でき、その抽象データ型の定義構文の中でも手続きの定義を行なうことができる。
【００１２】
手続きの定義文は、フロントエンドサーバで解析を行ない、処理方法や手順に対応する内部形式のコード（以下、実行手順指示と呼ぶことにする）を作成する。実行手順指示は、インタプリタで解釈実行するコードや、実行形式のコードである。実行手順指示は、手続きに関連する辞書情報として登録される。
【００１３】
手続きの呼び出しは、Ｃ言語等で書かれたアプリケーションプログラムからのＳＱＬ文呼び出しとして、ＣＡＬＬ文が用意されている。ＣＡＬＬ文は、フロントエンドサーバで解析を行ない、ＣＡＬＬ文に書かれた手続き名や引数に対応する実行手順指示を辞書情報から取り出し、その実行手順指示を実行する。
【００１４】
手続きに記述した処理の中にデータの検索、更新、挿入、削除（以下、更新、挿入、削除問合せを含めて更新系問合せと呼ぶことにする）の様なデータベース操作が含まれている場合、データベース操作を行なう為の実行手順指示は、フロントエンドサーバ用のものと、操作を行なうデータが有るデータベース操作サーバ用のものが存在する。
【００１５】
データベース操作サーバでは、実行手順指示に従い、各データベース操作サーバに分割されたデータへの操作を行ない、フロントエンドサーバでは、各データベース操作サーバで行なった操作の結果をまとめる実行手順指示が実行される。
【００１６】
例として、検索のデータベース操作の場合、各データベース操作サーバでデータの検索を行ない、検索したデータをフロントエンドサーバに転送し、フロントエンドサーバでは転送された順にデータを受け取り使用する。
【００１７】
ソート等の負荷のかかる処理を専用に行なうデータベース操作サーバを用意する場合は、そのデータベース操作サーバ用の実行手順指示も存在する。
【００１８】
【発明が解決しようとする課題】
ところで、上記並列データベースシステムの構成で、検索、更新、挿入、削除等のデータベース操作文を解析し、各データベース操作サーバからの結果をまとめるサーバはフロントエンドサーバである。また、ユーザアプリケーションからの手続きの実行の場合、手続きの本体の実行は、フロントエンドサーバになる。
【００１９】
手続きの本体にデータベース操作文が含まれる場合は、フロントエンドサーバで手続き本体を実行し、データベース操作文が存在すれば、そのままフロントエンドサーバで各データベース操作サーバからの結果をまとめて、手続きの実行を行なう。
【００２０】
すなわち、手続き実行部と、データベース操作文実行部は同じフロントエンドサーバである。但し、実際にデータベース操作を行なっているのは、各データが分割されているデータベース操作サーバである。ここでデータベース操作文実行部といっているのは、各データベース操作サーバからの結果をまとめる部分（フロントエンド側）を指す。
【００２１】
しかし、並列データベースシステムにおいて、データベース操作文に関数の実行が含まれる場合、関数呼び出し部は、データが分割されているデータベース操作サーバである。また、関数の本体にデータベース操作文が含まれる場合、そのデータベース操作文実行部はフロントエンドサーバである。
【００２２】
前記従来の並列データベースシステムでは、関数の本体の実行は一部の機能を除いて手続きの本体の実行と共通であり、関数の実行部は手続きの実行部と同じフロントエンドサーバを用いることができる為、関数の呼び出し毎に、関数の呼び出し部（この場合データベース操作サーバ内）と関数の実行部（この場合フロントエンドサーバ内）の間で、実行要求等の通信が起こるという問題があった。問合せにもよるが、データの件数分の関数呼び出しが起きる可能性が有る為、その通信の回数は大きなものとなり得る。
【００２３】
本発明の目的は、ルーチンの呼び出しによって起こる通信回数を削減して問合せ時間を小さくすることが可能な技術を提供することにある。
【００２４】
本発明の他の目的は、実行時までどのルーチンが実行されるか決定されない場合でもルーチンの呼び出しによって起こる通信回数を削減して問合せ時間を小さくすることが可能な技術を提供することにある。
【００２５】
本発明の他の目的は、ルーチンの呼び出しがネストして存在する場合であってもルーチンの呼び出しによって起こる通信回数を削減して問合せ時間を小さくすることが可能な技術を提供することにある。
【００２６】
本発明の前記並びにその他の目的と新規な特徴は、本明細書の記述及び添付図面によって明かになるであろう。
【００２７】
【課題を解決するための手段】
本願によって開示される発明のうち、代表的なものの概要を簡単に説明すれば、下記のとおりである。
【００２８】
すなわち、並列データベースシステムルーチン実行方法において、分割データ側の問合せ実行部で呼び出されるルーチン（関数や手続き）に対してルーチンの本体にデータベース操作文を含まない場合に、ルーチン呼び出し側かつ分割データ側に有る、データベース操作文に対する処理を含まないルーチン実行部を選択して実行するものである。
【００２９】
前記並列データベースシステムルーチン実行方法では、まず、本体にデータベース操作文（検索、更新系の問合せ）を含まないルーチンの実行部を分割データ側のルーチン呼び出し側に用意しておき、ルーチンの定義時にルーチンの本体にデータベース操作文が存在するかチェックを行ない、その結果の情報を、定義文を解析して作成する情報の１つとして格納しておく。
【００３０】
次に、ルーチンの呼び出しを含む問合せ文の解析実行時に、そのデータベース操作文が存在するかのチェック情報を参照し、データベース操作文が存在しなければ、データベース操作文を含まないルーチンの実行部でそのルーチンを実行する。
【００３１】
ルーチンの呼び出しとルーチンの実行部の間で通信が起こらないので、通信回数が大幅に削減され、データベース操作文を本体に含まないルーチンの実行で通信回数を小さくすることが可能である。
【００３２】
また、ルーチン呼び出しに対して、どのルーチンが実行されるか実行時まで決定されない場合には、データベース操作文が存在するかのチェック情報を、ルーチンの本体を解析した結果の実行手順指示に付随する情報の１つとして設定しておくことで、実行時に決定したルーチンに対してデータベース操作文が存在するかチェックを行ない、ルーチンの実行部を選択することが可能である。
【００３３】
データベース操作文無しのルーチン実行部で実行するルーチンまたは手続きの本体に、ルーチンの呼び出しがネストして存在する場合には、そのネストして呼ばれる方のルーチンに対してデータベース操作文が存在するかどうかのチェックを行う。
【００３４】
この場合、ネストして呼ばれるルーチンの呼び出しは、データベース操作文無しのルーチン実行部側に有るので、ネストして呼ばれるルーチンの本体にデータベース操作文が存在するかのチェック情報により、データベース操作文が存在しなければ、データベース操作文を含まないルーチンの実行部で、そのルーチンを実行する。
【００３５】
ネストして呼ばれるルーチンの呼び出しとルーチンの実行部の間で通信が起こらないので、通信回数が大幅に削減される。
【００３６】
分割データ側で実行する問合せで呼ばれるルーチン（本体にデータベース操作文を含まない）の個数をｎ、問合せがアクセスするデータの個数をｍとすると、従来の場合と、前記並列データベースシステムルーチン実行方法を適用する場合とで通信回数が以下の様になる。
【００３７】
0003742177.tif 000002
更に、問合せやルーチン呼び出しがループの中に存在する場合には、最大ループする回数分の積の通信回数となる。問合せがアクセスするデータの個数は、並列データベースシステムで扱う様な大規模データベースでは、数百、数千万になることが多い為、前記並列データベースシステムルーチン実行方法による効果は大変大きなものとなる。
【００３８】
以上の様に、前記並列データベースシステムルーチン実行方法によれば、分割データ側で呼び出されるルーチンの本体にデータベース操作文を含まない場合、分割データ側に用意したルーチン実行部でルーチンを実行するので、ルーチンの呼び出しによって起こる通信回数を削減して問合せ時間を小さくすることが可能である。
【００３９】
【発明の実施の形態】
以下に、本発明の並列データベースシステムルーチン実行方法において、分割データ側の問合せ実行部で呼び出される関数に対して関数の本体にデータベース操作文を含まない場合に、関数呼び出し側かつ分割データ側に有る、データベース操作文に対する処理を含まないルーチン実行部を選択して実行する一実施形態の並列データベースシステムルーチン実行方法を実施する実施装置について説明する。
【００４０】
図１は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の概要を示す図である。図１において、１１は解析部、１２は定義文解析部、１３はルーチン実行部、１４はルーチン実行部、１５は辞書情報格納部、１０１は関数定義文、１０２は関数定義情報、１０３は関数実行手順指示、１０４はデータベース操作文チェック情報、１１０はデータベース操作文有り状態、１１１はデータベース操作文無し状態である。
【００４１】
図１に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置では、関数定義文１０１を解析する定義文解析部１２、検索、更新系の問合せ文（以下、データベース操作文と呼ぶことにする）を本体に含む関数、手続きの実行部であるルーチン実行部１３（以下、関数と手続きを合わせてルーチンと呼ぶ）、データベース操作文に対する処理を含まないルーチン実行部１４、定義文を解析した結果を格納する辞書情報格納部１５を有しており、データベース操作文を本体に含まないルーチン実行部１４は、関数呼び出し側に存在している。
【００４２】
関数定義文１０１は、解析部１１に有る定義文解析部１２で解析され、定義文解析部１２は、関数定義情報１０２を作成する。
【００４３】
関数定義文解析時には、関数の本体にデータベース操作文が存在するかどうかのチェックを行ない、関数定義情報１０２にはその結果であるデータベース操作文チェック情報１０４や、関数の本体を解析した結果である関数実行手順指示１０３が格納される。関数実行時には、関数実行手順指示１０３に従い関数の実行を行なう。
【００４４】
データベース操作文チェック情報１０４により、データベース操作文有り状態１１０の場合は、関数の実行をデータベース操作文に対する処理を含むルーチン実行部１３、データベース操作文無し状態１１１の場合は、関数の実行をデータベース操作文に対する処理を含まないルーチン実行部１４で行なう。
【００４５】
データベース操作文に対する処理を含まないルーチン実行部１４は関数呼び出し側に存在し、本体にデータベース操作文が無い関数の実行には、関数呼び出しによる通信は起こらない為、通信回数を削減することができる。
【００４６】
例では、関数と手続きの実行をルーチンの実行部としてまとめているが、関数実行部と手続き実行部が別に存在しても良い。また、関数のみに本実施形態の並列データベースシステムルーチン実行方法を適用する場合、手続き実行部が無い構成でも良い。また、データベース操作文に手続きを書ける様な拡張がなされた場合、手続きのみに本実施形態の並列データベースシステムルーチン実行方法を適用し、関数実行部が無い構成としても良い。
【００４７】
図１は関数呼び出しの例であるが、手続きに関しても手続きの呼び出しが分割データ側である場合に対して同様に本実施形態の並列データベースシステムルーチン実行方法を問題無く適用できる。手続きの呼び出しが分割データ側になる場合とは、分割データ側のルーチン実行部１４で実行する関数や手続きの本体に手続き呼び出しが有る場合である。
【００４８】
手続きに適用する場合、関数定義文１０１は手続き定義文、関数定義情報１０２は手続き定義情報、関数実行手順指示１０３は手続き実行指示、関数実行時は手続き実行時となる。
【００４９】
図２は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の概略構成を示す図である。図２において、２０１は問合せ文、２１０〜２１２は処理プログラム、２１は問合せ解析部、２２は問合せ実行部、２３は問合せ実行部、２４はデータベース操作文実行部、２５はデータベース操作文実行部である。
【００５０】
図２に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置では、関数等の定義文である関数定義文１０１や、検索、更新系、手続き等の問合せ文２０１を解析する解析部１１、定義文を解析した結果である辞書情報格納部１５、問合せ文２０１を並列に実行した結果をまとめユーザアプリケーションに結果を返すフロントエンドの役割を行なう問合せ実行部２２、分割されたデータに対して、データベース操作文の実行を行なう問合せ実行部２３を有している。
【００５１】
解析部１１は、定義文解析部１２、問合せ解析部２１を有しており、フロントエンド側の問合せ実行部２２は、ユーザアプリケーションからの手続きの実行や、データベース操作文に対する処理を含むルーチン実行部１３、データベース操作文実行部２４を有している。
【００５２】
分割データ側の問合せ実行部２３は、分割されたデータに対するデータベース操作文実行部２５、データベース操作文に対する処理を含まないルーチン実行部１４を有している。
【００５３】
図１、図２等では辞書情報格納部１５は解析部１１からアクセスする様になっているが、定義情報の格納や検索を行なう辞書情報提供部を用意して、辞書情報格納場所へはその辞書情報提供部を介してアクセスする様にする構成でも、本実施形態の並列データベースシステムルーチン実行方法を問題無く適用できる。
【００５４】
フロントエンド側のルーチン実行部１３は、ユーザアプリケーションからの手続きの実行、フロントエンド側のルーチン実行部１３で実行される関数や手続きの本体からの関数や手続きの実行、分割データ側の問合せ実行を行うデータベース操作文実行部２５からのデータベース操作文を含む関数の実行、分割データ側のルーチン実行部１３で実行される関数や手続きの本体からのデータベース操作文を含む関数や手続きの実行等に用いられる。
【００５５】
フロントエンド側のデータベース操作文実行部２４からの関数呼び出しを含む処理を想定する場合は、その関数実行もフロントエンド側のルーチン実行部１３で行なう。
【００５６】
フロントエンド側のデータベース操作文実行部２４は、ユーザアプリケーションからのデータベース操作文の実行、フロントエンド側のルーチン実行部１３からのデータベース操作文の実行等に用いられ、分割データ側のデータベース操作文の実行結果をまとめ、ユーザアプリケーション等に結果を返す役割をする。
【００５７】
分割データ側のデータベース操作文実行部２５は、ユーザアプリケーションからのデータベース操作文の実行、フロントエンド側のルーチン実行部１３からのデータベース操作文の実行等に用いられ、各分割データに対する検索、更新系の処理等を行ない、結果をフロントエンド側のデータベース操作文実行部２４に返す役割をする。
【００５８】
分割データ側のルーチン実行部１４は、分割データ側のデータベース操作文実行部２５からの、データベース操作文を含まない関数の実行、分割データ側のルーチン実行部１４からの、データベース操作文を含まない関数や手続きの実行等に用いられる。
【００５９】
分割データ側のルーチン実行部１４は、データベース操作文実行部２５内で閉じた処理になっている為、図２ではデータベース操作文実行部２５内に位置づけているが、分割データ側のルーチン実行部１４と、データベース操作文実行部２５を別プログラムとし、分割データ側のルーチン実行部１４を別の目的で使用できる構成であっても良い。
【００６０】
図３は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の関数定義文１０１の一例を示す図である。図３において、３１はＦＵＮＣＴＩＯＮ構文、３０１はＳＥＴ文、３０２はＩＦ文、３０３はＳＥＬＥＣＴ文である。
【００６１】
図３に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の関数定義文１０１では、データベース言語ＳＱＬのＣＲＥＡＴＥ ＦＵＮＣＴＩＯＮ構文３１で関数を定義しており、手続きの場合にはＣＲＥＡＴＥ ＰＲＯＣＥＤＵＲＥ構文で定義する。
【００６２】
標準化が進んでいるＳＱＬ３では、ユーザ定義の型の定義文の中で、関数や手続きを定義することが可能であり、型の定義時に関数や手続きの解析を行なうことで、本実施形態の並列データベースシステムルーチン実行方法を問題無く適用できる。
【００６３】
図３はｆという名称の関数の定義であり、関数本体には、ＳＥＴ文３０１の様な代入や、ＩＦ文３０２やＷＨＩＬＥ文の様な制御用の構文、ＳＥＬＥＣＴ文３０３の様なデータベース操作文を書くことができる。
【００６４】
更新系の問合せには更新用のＵＰＤＡＴＥ文、削除用のＤＥＬＥＴＥ文、データ挿入用のＩＮＳＥＲＴ文が有る。ユーザアプリケーションからの問合せと同様な構文として、カーソルを定義し、検索、更新等を行なうことも可能である。
【００６５】
図４は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の問合せ文２０１の一例を示す図である。図４において、４０１は呼び出し文である。
【００６６】
図４に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の問合せ文２０１では、ＳＥＬＥＣＴ文３０３によるＷＨＥＲＥ条件の１つに関数ｆの呼び出し文４０１があり、条件の評価順序によって、表ｐｅｒｓｏｎａｌ＿ｄａｔａ＿ｔａｂｌｅのデータ数もしくはｗｅｉｇｈｔ＿ｄａｔａ ＞ ５０のデータ数回、関数ｆの呼び出しが起こる。
【００６７】
並列データベースシステムの場合、数百、数千万のデータを想定する為、関数の呼び出し回数も膨大なものとなり得る。引数が同じ呼び出しについて同じ結果となることが保証される関数の場合、同じ引数の関数呼び出しを行なわない様にすることも考えられるが、特殊な場合を除き関数の呼び出しの回数は多い。
【００６８】
図４の例では、問合せ文２０１はデータベース操作文である。問合せ文２０１が手続きの呼び出しである場合、その手続きの本体中のデータベース操作文内の関数呼び出しに対しても本実施形態の並列データベースシステムルーチン実行方法を適用できる。その場合、関数呼び出しを含むデータベース操作文の解析は、手続きの解析時となる。
【００６９】
また、手続きの本体中でかつデータベース操作文以外からの関数や手続きの呼び出しに対しては、呼び出しとルーチン実行部１３は同じ側にあり、データベース操作文の有る無しにかかわらず、もともと呼び出し毎の通信は起こらない。
【００７０】
また、問合せ文２０１が手続きの呼び出しである場合、その手続き自体の呼び出しとルーチン実行部１３は同じ側にあり、データベース操作文の有る無しにかかわらず、もともと呼び出し毎の通信は起こらない。
【００７１】
図５は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の関数定義情報１０２の一例を示す図である。
【００７２】
図５に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の関数定義情報１０２では、ＣＲＥＡＴＥ ＦＵＮＣＴＩＯＮ等で定義した関数を定義文解析部１２で解析した結果の情報を表しており、一般に、名称に関する情報、パラメタや戻り値に関する情報等を含んでいる。
【００７３】
本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置で必要とする定義情報は、関数実行手順指示１０３とデータベース操作文チェック情報１０４であり、他にどの様な情報が有るかは特に関係は無い。データベース操作文チェック情報１０４は、定義した関数の本体にデータベース操作文が存在するかどうかを表す情報であればどういう形式でも良い。例えば、存在すればＯＮ、存在しなければＯＦＦのフラグ情報等で実現される。
【００７４】
図３の例の場合、関数ｆの定義文の本体に、データベース操作文であるＳＥＬＥＣＴ文３０３が含まれている為、データベース操作文チェック情報１０４はＯＮになる。
【００７５】
データベース操作文チェック情報１０４は、関数定義情報１０２では無く、関数実行手順指示１０３に含まれていても良い。関数実行手順指示１０３は、関数定義情報１０２に無くても、関数定義情報１０２と対応して取り出せる様になっていれば良い。例えば、関数定義情報１０２には、関数実行手順指示１０３の識別子があり関数定義情報１０２とは他の格納場所に格納すること等が考えられる。
【００７６】
手続きの定義情報の場合も同様である。関数と手続きは、同じ形式の定義情報を使用し、種別を表す情報で手続きか関数かをわける方法を用いることもできる。
【００７７】
図６は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の関数実行手順指示１０３の一例を示す図である。図６において、６１は関数本体用実行手順指示、６２及び６３は検索用実行手順指示、６４〜６６は共通情報である。
【００７８】
図６に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の関数実行手順指示１０３では、関数定義文１０１を解析した結果、ＩＦ文３０２やＷＨＩＬＥ文等の制御用の構文や代入文等の実行手順指示や、手続きの呼び出しの実行手順指示や、データベース操作文の実行手順指示を含む関数本体用実行手順指示６１が作成される。関数本体にデータベース操作文が有る場合、対応する検索用実行手順指示６２及び６３も作成する必要がある。
【００７９】
図６の例は各構文を実行する為の指示と情報をインタプリタが解釈実行する例であるが、各構文を実行する実行形式のコードであっても良い。
【００８０】
制御用の構文や代入文等に関数呼び出しが含まれる場合は、関数呼び出しの実行手順指示や情報が有る。手続きの呼び出しの実行手順指示や、関数呼び出しの実行手順指示が呼び出す手続きや関数の実行手順指示は別に存在し、呼び出し時に指示や情報に従い定義情報や定義情報のキャッシュから取り出し実行する。
【００８１】
データベース操作文実行手順指示は、関数本体にＳＥＬＥＣＴ文３０３等の検索問合せや、ＵＰＤＡＴＥ文、ＤＥＬＥＴＥ文、ＩＮＳＥＲＴ文等の更新系問合せが有る場合にでき、実際に分割データに対する実行の検索用実行手順指示６３と、各分割データに対する実行の結果をまとめるフロントエンド用の検索用実行手順指示６２と対応している。
【００８２】
各データベース操作文実行手順指示の実行用情報に、対応するフロントエンド用と分割データ用の検索用実行手順指示６２及び６３の情報があり、定義情報や定義情報のキャッシュからそのフロントエンド用と分割データ用の検索用実行手順指示６２及び６３を取り出し、対応する問合せ実行部２２及び２３に転送し実行する。
【００８３】
関数本体用の関数本体用実行手順指示６１や、検索用実行手順指示６２及び６３等の各まとまりの実行手順指示に、その実行に共通して使用する情報やその実行手順指示の実行に必要な情報として共通情報６４〜６６を用意する。共通して使用する情報や実行に必要な情報が無いならば、無くても良い。
【００８４】
データベース操作文が関数や手続きの本体に存在するかどうかを表すデータベース操作文チェック情報１０４は、関数本体用実行手順指示６１の共通情報６４として置く方法が有る。
【００８５】
標準化が進んでいるＳＱＬ３では、関数や手続きの呼び出しに対して、解析時に実行手順指示が一意に決定しないことがある。この場合、実行時に選択される実行手順指示によって、本体にデータベース操作文が有るか無いかが変わってしまう為、関数本体用実行手順指示６１の共通情報６４として置いておく。
【００８６】
関数や手続きの呼び出しに対して、解析時に実行手順指示が一意に決まる保証があれば、関数本体用実行手順指示６１の共通情報６４で無く、関数定義情報１０２に直接置いておいても良い。
【００８７】
また、一意に決まらない場合でも、実行時に呼び出される可能性のある関数と、データベース操作文が関数や手続きの本体に存在するかどうかを表すデータベース操作文チェック情報１０４との一覧表を関数定義情報１０２に作成しておく方法を用いても良い。
【００８８】
図７は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の定義文解析部１２の処理手順を示すフローチャートである。
【００８９】
図７に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の定義文解析部１２では、まず解析する定義文がルーチンの定義文であるか場合分けする（ステップ７０１）。ルーチンの定義文で無ければ、その定義文を解析して（ステップ７１３）、定義情報として辞書情報格納部１５に登録を行なう（ステップ７１４）。
【００９０】
ルーチン定義文である場合も、解析して（ステップ７０２）、定義情報として辞書情報格納部１５に登録を行なうのは同じである。但し、ルーチンの場合、ルーチンの本体を解析し、実行手順指示を作成することが必要になる。
【００９１】
まず、そのルーチンの実行に共通して使用する情報やその実行手順指示の実行に必要な情報として共通情報６４を作成する（ステップ７０４）。データベース操作文チェックフラグの初期値としてＯＦＦを共通情報６４に設定する（ステップ７０５）。すなわち、データベース操作文は、まだ本体に見つかっていない状態である。
【００９２】
ルーチンの本体を順々に解析し（ステップ７０６）、データベース操作文を含んでいれば（ステップ７０７）、データベース操作文チェックフラグをＯＮにし（ステップ７０８）、そのデータベース操作文の実行手順指示（フロントエンド用と分割データ用）を作成し（ステップ７０９）、これらデータベース操作文の実行手順指示を転送し、起動する為の実行手順指示（本体用）を作成する（ステップ７１０）。
【００９３】
データベース操作文を含んでいなければ、対応する実行手順指示（本体用）を作成する（ステップ７１０）。以下、ルーチン本体を順々に解析していく（ステップ７１１）。
【００９４】
一通り実行手順指示作成が終了したら、作成したルーチン実行手順指示（本体用と、各データベース操作文のフロントエンド及び分割データ用）を辞書情報格納部１５等に登録する（ステップ７１２）。
【００９５】
図７の例では、ルーチン実行手順指示を定義文解析時に作成する方法を取っているが、ルーチンを使用する問合せの解析時に、ルーチン実行手順指示を作成する代案も適用できる。その場合、問合せの解析時のルーチン実行手順指示作成の時に、データベース操作文を含むかチェックを行ない情報を設定することで、問題無く適用できる。
【００９６】
図７の例では、データベース操作文チェック情報１０４を関数本体用実行手順指示６１の共通情報６４に設定しているが、問合せ解析時に使用する定義情報として直接設定する代案も適用できる。
【００９７】
また、データベース操作文チェック情報１０４は、ＯＮ、ＯＦＦのフラグ情報で無くても、データベース定義文がルーチン本体に含まれているかどうかを識別できる情報であれば良い。
【００９８】
図８は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の問合せ解析部２１の処理手順を示すフローチャートである。
【００９９】
図８に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の問合せ解析部２１では、まず解析する問合せがデータベース操作文であるか場合分けする（ステップ８０１）。データベース操作文で無ければ、対応する実行手順指示を作成する（ステップ８０６）。
【０１００】
データベース操作文である場合も実行手順指示を作成するのは同じだが、データベース操作文の場合は、フロントエンド用実行手順指示と分割データ用実行手順指示を作成する（ステップ８０２及びステップ８０３）。
【０１０１】
また、ソート等特別な用途用の実行手順指示を別途作成する方法も有るが、その場合でも本実施形態の並列データベースシステムルーチン実行方法を適用できる。関数呼び出しが、特別な用途用の実行部で行われる場合、その実行部にデータベース操作文に対する処理を含まないルーチン実行部１４を用意することで同様に適用できる。
【０１０２】
作成した実行手順指示は、各実行手順指示の実行部（フロントエンド側データベース操作文実行部２４と分割データ側データベース操作文実行部２５）に転送し（ステップ８０４）、実行要求を行なう（ステップ８０５）。
【０１０３】
図８は、問合せを解析し実行手順指示を作成して、転送し、そのまま実行要求を行なう例であるが、実行手順を作成して、別途転送や実行要求を行なう代案にも本実施形態の並列データベースシステムルーチン実行方法を問題無く適用できる。
【０１０４】
図８の例では、問合せ文２０１に関数呼び出しが有る場合でも、その関数の本体にデータベース操作文が有るかどうかデータベース操作文チェック情報１０４を参照していない。これは、解析時に呼び出す関数が一意に決定しないことを想定しているからである。
【０１０５】
解析時に呼び出す関数が一意に決まる場合は、解析時にデータベース操作文チェック情報１０４を参照し、ＯＦＦであれば、データベース操作文に対する処理を含まないルーチン実行部１４で関数の実行を行なう実行手順指示（分割データ側）を作成しても良い。
【０１０６】
図９は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置のデータベース操作文の有るルーチン実行部１３の処理手順を示すフローチャートである。
【０１０７】
図９に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置のデータベース操作文の有るルーチン実行部１３では、ルーチンの実行要求に対応して、実行するルーチンの実行手順指示を取得する（ステップ９０１）。ルーチンの実行手順指示は辞書情報格納部１５に存在するか、または、辞書情報格納部１５の情報から取得できる。ルーチン実行部１３に、ルーチン実行手順指示のキャッシュを置けば、２回目以降のルーチン呼び出し時は辞書情報格納部１５にアクセスしなくて済む。
【０１０８】
ルーチン実行手順指示を順々に解釈し（ステップ９０２）、実行していく。データベース操作文の実行の場合（ステップ９０３）、実行手順指示（フロントエンド用、分割データ用）を取得し（ステップ９０４及びステップ９０５）、各実行手順指示を、対応する実行部（フロントエンド側のデータベース操作文実行部２４、分割データ側のデータベース操作文実行部２５）に転送し（ステップ９０６）、実行要求を行なう（ステップ９０７）。各実行部で実行手順指示が実行され、その結果を取得し（ステップ９０８）、後の処理等で用いる。
【０１０９】
データベース操作文でない場合は（ステップ９０３）、対応する実行手順指示に従い実行を行なう（ステップ９０９）。以下、実行手順指示を順々に解釈実行していく（ステップ９１０）。
【０１１０】
図１０は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置のデータベース操作文に対する処理を含まないルーチン実行部１４の処理手順を示すフローチャートである。
【０１１１】
図１０に示す様に、本実施形態のデータベース操作文に対する処理を含まないルーチン実行部１４では、データベース操作文の実行部分は必要無く、ルーチンの実行要求に対応して、実行するルーチンの実行手順指示を取得する（ステップ１００１）。
【０１１２】
ルーチンの実行手順指示は辞書情報格納部１５に存在するか、または、辞書情報格納部１５の情報から取得できる。ルーチン実行部１４に、ルーチン実行手順指示のキャッシュを置けば、２回目以降のルーチン呼び出し時は辞書情報格納部１５にアクセスしなくて済む。
【０１１３】
分割データ側の問合せ実行部２３は、分割データ毎に複数存在し、各分割データ側のルーチン実行部１４から辞書情報格納部１５へのアクセスが行われると辞書情報格納部１５の負荷が大きいので、辞書情報格納部１５へアクセスできる問合せ実行部２３をフロントエンド側等に限定し、負荷分散を行なう代案も適用できる。
【０１１４】
ルーチン実行手順指示を順々に解釈し（ステップ１００２）、対応する実行手順指示に従い実行を行なう（ステップ１００３）。
【０１１５】
図１１は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置のフロントエンド側のデータベース操作文実行部２４の処理手順を示すフローチャートである。
【０１１６】
図１１に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置のフロントエンド側のデータベース操作文実行部２４では、分割データ側のデータベース操作文実行からの結果を順に受取っていく（ステップ１１０１）。
【０１１７】
次に、受取った順に結果を、ユーザアプリケーションプログラムや、ルーチン本体等、そのデータベース操作文を使用している場所に転送する（ステップ１１０２）。以下、各分割データ側から終了報告が来るまで結果のとりまとめ処理を行なう（ステップ１１０３）。
【０１１８】
図１１の例では、分割データ側からの結果を来た順に転送するだけであるが、受取った結果をソートする処理や受取った結果に演算を行なう処理をフロントエンド側で行なう代案にも、本実施形態の並列データベースシステムルーチン実行方法を問題無く適用できる。
【０１１９】
図１２は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の分割データ側のデータベース操作文実行部２５の処理手順を示すフローチャートである。
【０１２０】
図１２に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の分割データ側のデータベース操作文実行部２５では、データベース操作文の実行手順指示を順々に解釈し（ステップ１２０１）、実行していく。関数呼び出しの場合（ステップ１２０２）、関数呼び出しに対応する関数実行手順指示１０３を一意に決定する（ステップ１２０３）。
【０１２１】
これは、問合せ解析時に関数呼び出しに対応する関数実行手順指示１０３が一意に決まらない場合を想定している。標準化が進んでいるＳＱＬ３では、問合せ解析時に関数呼び出しに対応する関数実行手順指示１０３が一意に決まらない場合が有り得る。問合せ解析時に関数呼び出しに対応する関数実行手順指示１０３が一意に決まる場合は、この処理（ステップ１２０３）は必要無い。
【０１２２】
次に、決定した関数の関数本体用実行手順指示６１の共通情報６４を取得し（ステップ１２０４）、データベース操作文を本体に含むかチェックする（ステップ１２０５）。
【０１２３】
共通情報６４は、辞書情報格納部１５に存在するか、または、辞書情報格納部１５の情報から取得できる。共通情報６４や関数実行手順指示１０３等のキャッシュが存在すれば、キャッシュから取得することも可能である。
【０１２４】
データベース操作文チェック情報１０４がＯＦＦであれば、データベース操作文が本体に無い関数なので、データベース操作文に対する処理を含まないルーチン実行部１４に関数の実行要求を行なう（ステップ１２０６）。
【０１２５】
データベース操作文チェック情報１０４がＯＮであれば、データベース操作文が本体に有る関数なので、データベース操作文に対する処理を含むルーチン実行部１３に関数の実行要求を行なう（ステップ１２０７）。
【０１２６】
ルーチン実行部１３またはルーチン実行部１４で関数実行手順指示１０３が実行され、その実行結果を取得し（ステップ１２０８）、後の処理等で用いる。
【０１２７】
関数呼び出しで無い場合は（ステップ１２０２）、対応する実行手順指示に従い実行を行なう（ステップ１２０９）。以下、実行手順指示を順々に解釈実行していく（ステップ１２１０）。
【０１２８】
図１２の例では、データベース操作文チェック情報１０４は、共通情報６４から取得する様になっているが、関数定義文解析時に設定したデータベース操作文チェック情報１０４を取得できる様に対応できていれば良い。
【０１２９】
また、データベース操作文チェック情報１０４は、ＯＮ、ＯＦＦのフラグ情報で無くても、データベース定義文がルーチン本体に含まれているかどうかを識別できる情報であれば良い。
【０１３０】
図１３は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置のデータベース操作文に対する処理を含まないルーチン実行部１４の実行手順指示実行の処理手順を示すフローチャートである。
【０１３１】
図１３に示す様に、本実施形態のデータベース操作文に対する処理を含まないルーチン実行部１４の実行手順指示実行では、図１０に示したステップ１００３の実行手順指示実行をより詳細に記している。図１２では、関数の呼び出しについて本実施形態の並列データベースシステムルーチン実行方法を適用する例になっており、それに対して図１３では、分割データ側で実行される関数から呼び出される手続きや関数に対しても適用できる。
【０１３２】
ルーチンの実行要求に対応して、実行するルーチンの実行手順指示を取得する（ステップ１００１）。ルーチン実行手順指示を順々に解釈し（ステップ１００２）、実行していく。
【０１３３】
ルーチン呼び出しの場合（ステップ１３０１）、ルーチン呼び出しに対応するルーチン（手続きまたは関数）実行手順指示を一意に決定する（ステップ１３０２）。次に、決定したルーチンの関数本体用実行手順指示６１の共通情報６４を取得し（ステップ１３０３）、データベース操作文を本体に含むかチェックする（ステップ１３０４）。
【０１３４】
データベース操作文チェック情報１０４がＯＦＦであれば、データベース操作文が本体に無いルーチンなので、データベース操作文に対する処理を含まないルーチン実行部１４にルーチンの実行要求を行なう（ステップ１３０５）。
【０１３５】
データベース操作文チェック情報１０４がＯＮであれば、データベース操作文が本体に有るルーチンなので、データベース操作文に対する処理を含むルーチン実行部１３にルーチンの実行要求を行なう（ステップ１３０６）。
【０１３６】
ルーチン実行部１３またはルーチン実行部１４でルーチン実行手順指示が実行され、その実行結果を取得し（ステップ１３０７）、後の処理等で用いる。
【０１３７】
ルーチン呼び出しで無い場合は（ステップ１３０１）、対応する実行手順指示に従い実行を行なう（ステップ１３０８）。以下、実行手順指示を順々に解釈実行していく（ステップ１００４）。
【０１３８】
図１４は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置のより具体的な概略構成を示す図である。図１４において、１４０１はフロントエンドサーバ、１４０２はデータベース操作サーバである。
【０１３９】
図１４に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置では、図２をより具体的な並列データベースシステムに適用した例を表している。
【０１４０】
並列データベースシステムの構成としては、ユーザアプリケーションプログラム（以下ＵＡＰと呼ぶことにする）からのデータベースに対する問い合わせを解析しコンパイルするサーバであるフロントエンドサーバ１４０１と、データが格納されるディスク装置にアクセスしデータの操作を行う複数のサーバであるデータベース操作サーバ１４０２を有している。
【０１４１】
フロントエンドサーバ１４０１とデータベース操作サーバ１４０２は、高速な相互結合ネットワークで繋がっているものとする。但し、ネットワークで繋がる複数プロセッサの並列データベースシステムで無く、単一プロセッサのシステムでも、各サーバの役割として並列なプロセスを割り当てていれば、プロセス間の通信回数を減らすものとして、本実施形態の並列データベースシステムルーチン実行方法を適用可能である。
【０１４２】
データベース操作サーバ１４０２におけるプロセサとディスクやメモリとの関連に対して、プロセサ間でディスクを共用しない、ｓｈａｒｅｄ−ｎｏｔｈｉｎｇ型であっても、複数のプロセサでディスクを共用する、ｓｈａｒｅｄ−ｄｉｓｋ型であっても、その他のｓｈａｒｅｄ型であっても、関数を呼び出す部分と、検索、更新系問合せを本体に含む関数を実行する部分で通信が起こる構成であれば、本実施形態の並列データベースシステムルーチン実行方法を適用できる。
【０１４３】
図１４では、簡単の為、１つのＵＡＰ、１つのフロントエンドサーバ１４０１と複数のデータベース操作サーバ１４０２の構成で説明を行う。しかし、１つ、または、複数のＵＡＰからの複数の問い合わせに対して、複数のフロントエンドサーバ１４０１が取り扱うことができる。
【０１４４】
この場合でも１つ１つの問い合わせに対しては、１つのＵＡＰ、１つのフロントエンドサーバ１４０１と複数のデータベース操作サーバ１４０２の構成であると見なすことが可能で、本実施形態の並列データベースシステムルーチン実行方法に問題無く適用される。
【０１４５】
コンパイルに必要な定義情報等はフロントエンドサーバ１４０１からアクセスできる辞書情報格納部１５として存在する。辞書情報格納部１５を提供するサーバ（ディクショナリサーバと呼ぶことにする）を用意しても良い。
【０１４６】
図１４の並列データベースシステムの場合、解析部１１とフロントエンド側問合せ実行部２２をフロントエンドサーバ１４０１が有しており、分割データ側の問合せ実行部２３をデータベース操作サーバ１４０２が有している。
【０１４７】
分割データ側の関数呼び出しはデータベース操作サーバ１４０２の方にあり、データベース操作文に対する処理を含むルーチン実行部１３はフロントエンドサーバ１４０１の方に有る為、関数呼び出し毎の通信回数は大きくなり、本実施形態の並列データベースシステムルーチン実行方法の適用が有効である。
【０１４８】
並列データベースの構成に、ソート等の機能を専用に行なうサーバが有る場合、そのサーバの問合せ実行部２３からの関数呼び出し等に対して、データベース操作文に対する処理を含まないルーチン実行部１４を設けることで、同様に、本実施形態の並列データベースシステムルーチン実行方法を適用できる。
【０１４９】
並列データベースの構成として、図１４のフロントエンドサーバ１４０１とデータベース操作サーバ１４０２の両方の機能を持つ複数のサーバ（多機能サーバと呼ぶことにする）を有している構成に対しても本実施形態の並列データベースシステムルーチン実行方法を適用可能である。
【０１５０】
多機能サーバ間は、高速な相互結合ネットワークで繋がっているものとする。但し、ネットワークで繋がる複数プロセッサの並列データベースシステムで無く、単一プロセッサのシステムでも、各サーバの役割として並列なプロセスを割り当てていれば、プロセス間の通信回数を減らすものとして、本実施形態の並列データベースシステムルーチン実行方法を適用可能である。
【０１５１】
上記、並列データベースの構成以外の構成でも、図２の構成に対応が取れる構成であれば、本実施形態の並列データベースシステムルーチン実行方法を適用可能である。
【０１５２】
図１５は、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の具体例を適用した概略構成を示す図である。
【０１５３】
図１５に示す様に、本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置では、図１４の構成図に、本実施形態の並列データベースシステムルーチン実行方法の具体例を適用した例を表している。関数ｇは本体にデータベース操作文を含まない関数であり、その為データベース操作文チェック情報１０４はＯＦＦである。
【０１５４】
関数ｇの呼び出しｇ（ｃ２）を含む問合せを解析し実行手順指示を作成し、フロントエンド側と各分割データ側のデータベース操作文実行部２５で実行を行なう。分割データ側では、表ｔ１の列データｃ１、ｃ２をディスクから順に取り出し、ｇ（ｃ２）を実行しようとする。
【０１５５】
実行するｇのデータベース操作文チェック情報１０４がＯＦＦである為、ｇの実行は分割データ側のルーチン実行部１４で行ない、関数実行毎の通信は起こらない。
【０１５６】
ｇ（ｃ２）の結果から条件評価を行ない、条件にあっているデータはフロントエンド側に転送する。フロントエンド側では、各分割データ側からの結果をまとめ、ＵＡＰ問合せ側に結果を転送する。
【０１５７】
以上示したフローチャートの処理は、図２で例として示した並列データベースシステムにおける処理プログラム２１０〜２１２として実行される。しかし、そのプログラムは図２の例の様にコンピュータシステムに物理的に直接接続される外部記憶装置に格納されるものに限定されることはなく、ハードディスク装置、フロッピーディスク装置等のコンピュータで読み書きできる記憶媒体に格納することができる。
【０１５８】
以上説明した様に、本実施形態の並列データベースシステムルーチン実行方法によれば、分割データ側で呼び出されるルーチンの本体にデータベース操作文を含まない場合、分割データ側に用意したルーチン実行部でルーチンを実行するので、ルーチンの呼び出しによって起こる通信回数を削減して問合せ時間を小さくすることが可能である。
【０１５９】
また、本実施形態の並列データベースシステムルーチン実行方法によれば、実行時にルーチンの本体にデータベース操作文が含まれるかどうかの情報を参照してルーチンを実行するルーチン実行部を選択するので、実行時までどのルーチンが実行されるか決定されない場合でもルーチンの呼び出しによって起こる通信回数を削減して問合せ時間を小さくすることが可能である。
【０１６０】
また、本実施形態の並列データベースシステムルーチン実行方法によれば、当該ルーチンから呼び出される他のルーチンの本体にデータベース操作文が含まれるかどうかの情報も参照して当該ルーチンを実行するルーチン実行部を選択するので、ルーチンの呼び出しがネストして存在する場合であってもルーチンの呼び出しによって起こる通信回数を削減して問合せ時間を小さくすることが可能である。
【０１６１】
以上、本発明を前記実施形態に基づき具体的に説明したが、本発明は、前記実施形態に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは勿論である。
【０１６２】
【発明の効果】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば、下記のとおりである。
【０１６３】
すなわち、分割データ側で呼び出されるルーチンの本体にデータベース操作文を含まない場合、分割データ側に用意したルーチン実行部でルーチンを実行するので、ルーチンの呼び出しによって起こる通信回数を削減して問合せ時間を小さくすることが可能である。
【図面の簡単な説明】
【図１】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の概要を示す図である。
【図２】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の概略構成を示す図である。
【図３】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の関数定義文１０１の一例を示す図である。
【図４】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の問合せ文２０１の一例を示す図である。
【図５】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の関数定義情報１０２の一例を示す図である。
【図６】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の関数実行手順指示１０３の一例を示す図である。
【図７】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の定義文解析部１２の処理手順を示すフローチャートである。
【図８】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の問合せ解析部２１の処理手順を示すフローチャートである。
【図９】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置のデータベース操作文の有るルーチン実行部１３の処理手順を示すフローチャートである。
【図１０】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置のデータベース操作文に対する処理を含まないルーチン実行部１４の処理手順を示すフローチャートである。
【図１１】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置のフロントエンド側のデータベース操作文実行部２４の処理手順を示すフローチャートである。
【図１２】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の分割データ側のデータベース操作文実行部２５の処理手順を示すフローチャートである。
【図１３】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置のデータベース操作文に対する処理を含まないルーチン実行部１４の実行手順指示実行の処理手順を示すフローチャートである。
【図１４】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の概略構成を示す図である。
【図１５】本実施形態の並列データベースシステムルーチン実行方法を実施する実施装置の概略構成を示す図である。
【符号の説明】
１１…解析部、１２…定義文解析部、１３…ルーチン実行部、１４…ルーチン実行部、１５…辞書情報格納部、１０１…関数定義文、１０２…関数定義情報、１０３…関数実行手順指示、１０４…データベース操作文チェック情報、１１０…データベース操作文有り状態、１１１…データベース操作文無し状態、２０１…問合せ文、２１０〜２１２…処理プログラム、２１…問合せ解析部、２２…問合せ実行部、２３…問合せ実行部、２４…データベース操作文実行部、２５…データベース操作文実行部、３１…ＦＵＮＣＴＩＯＮ構文、３０１…ＳＥＴ文、３０２…ＩＦ文、３０３…ＳＥＬＥＣＴ文、４０１…呼び出し文、６１…関数本体用実行手順指示、６２及び６３…検索用実行手順指示、６４〜６６…共通情報、１４０１…フロントエンドサーバ、１４０２…データベース操作サーバ。
【図１】
0003742177.tif 000003
【図２】
0003742177.tif 000004
【図３】
0003742177.tif 000005
【図４】
0003742177.tif 000006
【図５】
0003742177.tif 000007
【図６】
0003742177.tif 000008
【図７】
0003742177.tif 000009
【図８】
0003742177.tif 000010
【図９】
0003742177.tif 000011
【図１０】
0003742177.tif 000012
【図１１】
0003742177.tif 000013
【図１２】
0003742177.tif 000014
【図１３】
0003742177.tif 000015
【図１４】
0003742177.tif 000016
【図１５】
0003742177.tif 000017