(57)【要約】【課題】有限のリソースの効率的な割り当てを可能とするデータベース管理装置を提供する。【解決手段】実施形態によれば、データベース管理装置は、サーバ情報管理部、クエリ解析部、クエリ分割部および結果集積部を具備する。サーバ情報管理部は、自サーバおよび下位サーバのサーバ情報を管理する。クエリ解析部は、入力されたクエリを解析して前記クエリで使用されるテーブルを判定する。クエリ分割部は、自サーバおよび下位サーバのサーバ情報に基づき、クエリを実行するクエリ実行部の生成数を決定し、１つの下位サーバに対して複数のクエリ実行部が生成される場合、その数に応じてクエリを分割する。結果集積部は、決定された生成数のクエリ実行部によるクエリの結果を集積する。【選択図】図４
2020004339.tif 000002
【特許請求の範囲】
【請求項１】
ツリー構造の分散型データベースを構成する複数のサーバの中の１つとして動作することが可能なデータベース管理装置であって、
自サーバおよび下位サーバのサーバ情報を管理するサーバ情報管理部と、
入力されたクエリを解析して前記クエリで使用されるテーブルを判定するクエリ解析部と、
自サーバおよび下位サーバのサーバ情報に基づき、前記クエリを実行するクエリ実行部の生成数を決定し、１つの下位サーバに対して複数のクエリ実行部が生成される場合、その数に応じて前記クエリを分割するクエリ分割部と、
前記決定された生成数の前記クエリ実行部による前記クエリの結果を集積する結果集積部と、
を具備するデータベース管理装置。
【請求項２】
前記サーバ情報管理部は、自サーバおよび下位サーバのプロセッサ数と、複数の下位サーバに分散するテーブルについての各下位サーバの保有レコード数とを前記サーバ情報として管理し、
前記クエリ分割部は、自サーバのプロセッサ数と、前記クエリで使用されるテーブルを保持する下位サーバのプロセッサ数と、各下位サーバの保有レコード数の総レコード数に対する比の値とに基づき、前記クエリ実行部の生成数を決定する請求項１に記載のデータベース管理装置。
【請求項３】
前記クエリ分割部は、自サーバのプロセッサ数に各下位サーバの保有レコード数の総レコード数に対する比の値を乗じて得られる値に基づき、各下位サーバに対して生成する前記クエリ実行部の数を決定する請求項２に記載のデータベース管理装置。
【請求項４】
前記クエリ分割部は、いずれかの下位サーバにおいて、自サーバのプロセッサ数に当該下位サーバの保有レコード数の総レコード数に対する比の値を乗じて得られる値が当該下位サーバのプロセッサ数を超える場合、当該下位サーバに対して生成する前記クエリ実行部の数を当該下位サーバのプロセッサ数に決定する請求項３に記載のデータベース管理装置。
【請求項５】
前記クエリ分割部は、いずれかの下位サーバにおいて、自サーバのプロセッサ数に当該下位サーバの保有レコード数の総レコード数に対する比の値を乗じて得られる値が１未満である場合、当該下位サーバに対して生成する前記クエリ実行部の数を１に決定する請求項３に記載のデータベース管理装置。
【請求項６】
前記クエリ分割部は、前記１未満の値が得られて生成された前記クエリ実行部が複数存在する場合、当該複数のクエリ実行部の中の２以上を自サーバの１つのプロセッサに割り当てる請求項５に記載のデータベース管理装置。
【請求項７】
自サーバに保持されるテーブルの保有レコード数が更新された場合、更新後の自サーバのサーバ情報を上位サーバへ送信する自サーバ情報送信部と、
下位サーバのサーバ情報を取得する下位サーバ情報取得部と、
を具備し、
前記サーバ情報管理部は、前記下位サーバ情報取得部によって取得される下位サーバのサーバ情報を管理する、
請求項１に記載のデータベース管理装置。
【請求項８】
前記下位サーバ情報取得部は、下位サーバが、前記自サーバ情報送信部を有する、自サーバと同様の構成の場合、当該下位サーバのサーバ情報を、当該下位サーバ側に具備される前記自サーバ情報送信部から受信する請求項７に記載のデータベース管理装置。
【請求項９】
前記下位サーバ情報取得部は、下位サーバが、前記自サーバ情報送信部を有しない、自サーバと異なる構成の場合、当該下位サーバのサーバ情報を、当該下位サーバから定期的に収集する請求項７に記載のデータベース管理装置。
【請求項１０】
前記下位サーバ情報取得部は、下位サーバが、前記自サーバ情報送信部を有しない、自サーバと異なる構成の場合、前記クエリ実行部が当該下位サーバへクエリを送信するタイミングで、サーバ情報を収集するためのクエリを前記クエリ実行部に当該下位サーバへ送信させる請求項７に記載のデータベース管理装置。
【請求項１１】
ツリー構造の分散型データベースを構成する複数のサーバの中の１つとして動作することが可能なデータベース管理装置のクエリ分割方法であって、
自サーバおよび下位サーバのサーバ情報を管理することと、
入力されたクエリを解析して前記クエリで使用されるテーブルを判定することと、
自サーバおよび下位サーバのサーバ情報に基づき、前記クエリを並列的に実行する並列数を決定し、１つの下位サーバに対して複数のクエリが並列的に実行される場合、その数に応じて前記クエリを分割することと、
前記決定された並列数で実行される前記クエリの結果を集積することと、
を具備するクエリ分割方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データベース管理装置およびクエリ分割方法に関する。
【背景技術】
【０００２】
近年、ネットワーク環境の整備などに伴い、たとえば企業が業務のために蓄積すべきデータの量は飛躍的に増加している。このようなことから、たとえば複数のサーバが各々保持するデータを一括して扱うことなどを可能とする分散型データベースの重要性も増してきている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第５０１１００６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする課題は、有限のリソースの効率的な割り当てを可能とするデータベース管理装置およびクエリ分割方法を提供することである。
【課題を解決するための手段】
【０００５】
実施形態によれば、データベース管理装置は、ツリー構造の分散型データベースを構成する複数のサーバの中の１つとして動作することが可能であり、サーバ情報管理部と、クエリ解析部と、クエリ分割部と、結果集積部とを具備する。サーバ情報管理部は、自サーバおよび下位サーバのサーバ情報を管理する。クエリ解析部は、入力されたクエリを解析して前記クエリで使用されるテーブルを判定する。クエリ分割部は、自サーバおよび下位サーバのサーバ情報に基づき、前記クエリを実行するクエリ実行部の生成数を決定し、１つの下位サーバに対して複数のクエリ実行部が生成される場合、その数に応じて前記クエリを分割する。結果集積部は、前記決定された生成数の前記クエリ実行部による前記クエリの結果を集積する。
【図面の簡単な説明】
【０００６】
【図１】実施形態のデータベース管理装置が備える基本的な機能を概略的に説明するための図。
【図２】実施形態のデータベース管理装置によって構成され得るツリー構造の分散型データベースの一例を示す図。
【図３】実施形態のデータベース管理装置のハードウェア構成の一例を示す図。
【図４】実施形態のデータベース管理装置上で動作するＤＢＭＳプログラムの機能ブロックの一例を示す図。
【図５】実施形態のデータベース管理装置上で動作するＤＢＭＳプログラムで用いられる情報の一例を示す図。
【図６】実施形態のデータベース管理装置によって構成される分散型データベースにおける上位サーバ−下位サーバ間の連携を示す図。
【図７】実施形態のデータベース管理装置の具体的な動作例（第１ケース）を説明するための第１図。
【図８】実施形態のデータベース管理装置の具体的な動作例（第１ケース）を説明するための第２図。
【図９】実施形態のデータベース管理装置の具体的な動作例（第２ケース）を説明するための第１図。
【図１０】実施形態のデータベース管理装置の具体的な動作例（第２ケース）を説明するための第２図。
【図１１】実施形態のデータベース管理装置の具体的な動作例（第３ケース）を説明するための第１図。
【図１２】実施形態のデータベース管理装置の具体的な動作例（第３ケース）を説明するための第２図。
【図１３】実施形態のデータベース管理装置における複数のプロセスを１つのプロセッサに纏めて割り当てる動作を説明するための図。
【図１４】実施形態のデータベース管理装置におけるクエリの分割方法を説明するための図。
【図１５】実施形態のデータベース管理装置によって実行されるクエリ受付処理の流れを示すフローチャート。
【図１６】実施形態のデータベース管理装置によって構成され得るツリー構造の分散型データベースの一変形例を示す図。
【図１７】実施形態のデータベース管理装置によって構成される分散型データベースにおける異構成のサーバ間の連携の第１例を示す図。
【図１８】実施形態のデータベース管理装置によって構成される分散型データベースにおける異構成のサーバ間の連携の第２例を示す図。
【図１９】実施形態のデータベース管理装置によって実行される下位サーバ情報更新処理の流れを示すフローチャート。
【発明を実施するための形態】
【０００７】
以下、実施形態について図面を参照して説明する。
図１は、実施形態のデータベース管理装置１が備える基本的な機能を概略的に説明するための図である。
このデータベース管理装置１は、図１に示されるように、他のデータベース管理装置１の上位に位置づけられる上位サーバとして動作することができ、また、他のデータベース管理装置１の下位に位置づけられる下位サーバとして動作することができる。データベース管理装置１は、異なるデータソースのデータ、より詳しくは、下位サーバが保持するテーブルを、あたかも自身が保持するテーブルであるかのように扱うことのできる外部テーブル機能を有している。データベース管理装置１は、外部テーブル機能を使用し、複数の下位サーバに分散するテーブルを１つのテーブルに仮想化する仮想テーブル化を行うことによって、複数のテーブルから１度にデータを取得することができる。
【０００８】
たとえば、図１に示されるように、上位サーバとして動作するデータベース管理装置１は、下位サーバとして動作する２つの他のデータベース管理装置１に分散するテーブルであるTable1のデータを、「SELECT * FROM Table1」というクエリを発行することによって、あたかも自身が保持するテーブルから取得したかのように、かつ、１度に取得することができる。
【０００９】
また、前述したように、データベース管理装置１は、上位サーバまたは下位サーバのいずれとしても動作することができる。上位サーバまたは下位サーバのいずれとしても動作することができるとは、上位サーバまたは下位サーバの一方として排他選択的に動作することのみならず、ある他のデータベース管理装置１との関係では上位サーバとして動作しながら、別のある他のデータベース管理装置１との関係では下位サーバとして動作することも含み得る。したがって、たとえば図２に示されるように、複数のデータベース管理装置１をツリー状に接続することで、ツリー構造の分散型データベースを構成することができる。換言すれば、データベース管理装置１は、ツリー構造の分散型データベースを構成する複数のサーバの中の１つとして動作することができる。図２中、たとえばデータベース管理装置［２−１］１は、データベース管理装置［１］１との関係では下位サーバとして動作し、データベース管理装置［３−１］１やデータベース管理装置［３−２］１との関係では上位サーバとして動作する。また、図２中の各データベース管理装置１は、ユーザからのクエリを受け付けることができ、かつ、直属の下位サーバが保持するテーブルのデータを使って、そのクエリの結果を得ることができる。なお、各データベース管理装置１は、自身が保持するテーブルのデータを使って、ユーザから受け付けたクエリの結果を得ることも可能である。
【００１０】
図３は、データベース管理装置１のハードウェア構成の一例を示す図である。
図３に示されるように、データベース管理装置１は、プロセッサ１１、主メモリ（内部記憶装置）１２、通信装置１３、外部記憶装置１４などを有している。データベース管理装置１は、汎用的なコンピュータであってもよく、たとえば、外部記憶装置１４に格納されるＤＢＭＳ（DataBase Management System）プログラム１００が主メモリ１２にロードされてプロセッサ１１によって実行されることで、汎用的なコンピュータがデータベース管理装置１として動作する。通信装置１３は、ユーザからのクエリを受信したり、そのクエリの結果をユーザへ送信したり、上位サーバである他のデータベース管理装置１からのクエリを受信したり、そのクエリの結果を当該他のデータベース管理装置１へ送信したり、下位サーバである他のデータベース管理装置１へクエリを送信したり、そのクエリの結果を当該他のデータベース管理装置１から受信したりするための通信を司る。
【００１１】
なお、図３は、ハードウェア構成を概略的に示すものであり、各コンポーネントを１つずつ表しているが、各コンポーネントは複数存在し得る。たとえば、データベース管理装置１は、通常、複数のプロセッサ１１を搭載する。
図４は、ＤＢＭＳプログラム１００の機能ブロックの一例を示す図である。なお、図４には、ＤＢＭＳプログラム１００によって確保される記憶領域２００内の概要も併せて示されている。この記憶領域２００は、たとえば、外部記憶装置１４上に確保される領域であって、主メモリ１２を介して、ＤＢＭＳプログラム１００、より詳しくは、ＤＢＭＳプログラム１００を実行するプロセッサ１１によってアクセスされる。
【００１２】
ＤＢＭＳプログラム１００は、大きく分けて、上位サーバとしての動作を行うための処理部１１０と、下位サーバとしての動作を行うための処理部１２０とを有する。ＤＢＭＳプログラム１００は、前者の処理部１１０の要素として、下位サーバ情報管理部１１１、下位サーバ情報取得部１１２、クエリ解析部１１３、クエリ分割部１１４、クエリ実行部１１５、結果集積部１１６などを有する。また、ＤＢＭＳプログラム１００は、後者の処理部１２０の要素として、テーブル管理部１２１、自サーバ情報管理部１２２、自サーバ情報送信部１２３、クエリ実行部１２４などを有する。なお、これらは、ＤＢＭＳプログラム１００の１モジュールとして実現することに限らず、たとえば電子回路などとして実現するようにしてもよい。
【００１３】
また、記憶領域２００内に格納される情報も、大きく分けて、上位サーバとしての動作を行うために用いられる情報２１０と、下位サーバとしての動作を行うために用いられる情報２２０とが存在する。前者の情報２１０の要素として、プロセッサ数情報２１１、下位テーブルレコード数情報２１２などが存在し、後者の情報２２０の要素として、テーブル２２１などが存在する。
【００１４】
下位サーバ情報管理部１１１は、下位サーバ情報取得部１１２が取得する下位サーバ情報を、後述する、プロセッサ数情報２１１や下位テーブルレコード数情報２１２などとして記憶領域２００内に格納して管理する。下位サーバ情報取得部１１２は、下位サーバから送信されてくる下位サーバ情報を受信して下位サーバ情報管理部１１１に転送する。この下位サーバ情報は、下位サーバ側において自サーバ情報送信部１２３が上位サーバへ送信する自サーバ情報に相当する。
【００１５】
クエリ解析部１１３は、ユーザから受け付けたクエリを解析し、そのクエリに関わるテーブル、より詳しくは、そのクエリがどのテーブルを使用するのかを判定する。クエリ分割部１１４は、クエリ解析部１１３の判定結果を受けて、第１に、下位サーバ情報管理部１１１によって管理されるプロセッサ数情報２１１および下位テーブルレコード数情報２１２に基づき、そのクエリを実行するクエリ実行部１１５の生成数を決定し、決定した生成数のクエリ実行部１１５を生成する。クエリ実行部１１５の生成数は、クエリを並列的に実行する並列数に相当する。また、クエリ分割部１１４は、第２に、たとえば１つの下位サーバに対して複数のクエリ実行部１１５が生成される場合、その数に応じてクエリを分割する。このクエリ分割部１１４に働きによって、このデータベース管理装置１は、有限のリソースの効率的な割り当てを可能としたものであり、この点については後述する。
【００１６】
クエリ実行部１１５は、クエリ分割部１１４によって動的に生成され、クエリ分割部１１４から渡されるクエリを実行する。より詳しくは、クエリ実行部１１５は、自身が割り当てられる下位サーバに対して、クエリ分割部１１４から渡されるクエリを送信し、下位サーバから受信した当該クエリの結果を結果集積部１１６に転送する。
【００１７】
結果集積部１１６は、クエリ実行部１１５から受け取ったクエリの結果を集積し、そのクエリの発行元であるユーザへ転送する。
テーブル管理部１２１は、テーブル２２１を管理する。テーブル２２１は、行（レコード）と列（カラム）とからなる表（テーブル）形式のデータ構造体であり、複数のテーブル２２１が保持され得る。
【００１８】
自サーバ情報管理部１２２は、データベース管理装置１のブロセッサ数やテーブル２２１の保有レコード数を自サーバ情報として管理する。なお、データベース管理装置１のブロセッサ数は、プロセッサ数情報２１１として記憶領域２００内に格納される。自サーバ情報送信部１２３は、自サーバ情報管理部１２２が管理する自サーバ情報を上位サーバへ送信する。この自サーバ情報は、上位サーバ側において下位サーバ情報取得部１１２が取得する下位サーバ情報に相当する。自サーバ情報送信部１２３による自サーバ情報の上位サーバへの送信は、たとえば、テーブル２２１の保有レコード数が更新された場合などに実行される。
【００１９】
クエリ実行部１２４は、上位サーバ、より詳しくは、上位サーバ側のクエリ実行部１１５から送信されるクエリに基づき、自サーバが保持するテーブルからデータを取得し、当該取得したデータを上位サーバのクエリ実行部１１５へ転送する。クエリ分割部１１４によって動的に生成されるクエリ実行部１１５に対し、クエリ実行部１２４は、たとえばデータベース管理装置１のブロセッサ数だけ静的に生成される。または、上位サーバからのクエリが受信される都度、クエリ実行部１２４が動的に生成されるようにしてもよい。
【００２０】
なお、ユーザから受け付けたクエリをクエリ解析部１１３で解析した結果、そのクエリが複数の下位サーバに分散するテーブルを使用するものではなく、自サーバが保持するテーブルを使用するものであった場合、このクエリはクエリ解析部１１３からクエリ実行部１２４に転送される。クエリ実行部１２４は、クエリをクエリ解析部１１３から受け取った場合には、その結果を、そのクエリの発行元であるユーザへ転送する。この場合においても、クエリ分割部１１４によって、たとえば自サーバのブロセッサ数と同数のクエリ実行部１２４の数に応じてクエリを分割し、当該分割したクエリをクエリ実行部１２４に転送するようにしてもよい。
【００２１】
図５は、ＤＢＭＳプログラム１００によって確保される記憶領域２００内に格納されるプロセッサ数情報２１１、下位テーブルレコード数情報２１２およびテーブル２２１の一例を示す図である。
図５（Ａ）に示されるように、プロセッサ数情報２１１は、自サーバ、つまりデータベース管理装置１のプロセッサ数と、下位サーバ（サーバ１，サーバ２，…）のプロセッサ数とを含む。この例では、データベース管理装置１は、１６個のプロセッサをもち、サーバ１やサーバ２は、４個のプロセッサをもつことなどが示されている。
【００２２】
図５（Ｂ）に示されるように、下位テーブルレコード数情報２１２は、複数の下位サーバに分散するテーブルの各下位サーバにおける保有レコード数を含む。この例では、テーブル１のレコードは、サーバ１には１００レコード、サーバ２には０レコード、サーバ３には２５レコード保持されていることなどが示されている。
【００２３】
図５（Ｃ）に示されるように、テーブル２２１は、自サーバ、つまりデータベース管理装置１が保持するテーブルである。この例では、テーブルＡやテーブルＢが保持されていることなどが示されている。
図６は、上位サーバとして動作するデータベース管理装置１と、下位サーバとして動作するデータベース管理装置１との間の連携を示す図である。
【００２４】
前述したように、上位サーバと下位サーバとは、まず、下位サーバ側の自サーバ情報送信部１２３が上位サーバ側の下位サーバ情報取得部１１２へ自サーバ情報を転送する点で連携する（図６：ａ１）。また、上位サーバと下位サーバとは、上位サーバ側のクエリ実行部１１５が下位サーバ側のクエリ実行部１２４へクエリを送信し、下位サーバ側のクエリ実行部１２４が上位サーバ側のクエリ実行部１１５へクエリの結果を送信する点で連携する（図６：ａ２）。
【００２５】
ここで、本実施形態のデータベース管理装置１についての理解をより深めるために、複数の下位サーバに分散するテーブルを使用するクエリを実行する典型的な手法を一比較例として説明する。
たとえば、そのクエリで使用されるテーブルが３つの下位サーバに分散して保持されている場合、このクエリを実行するプロセス（本実施形態のデータベース管理装置１におけるクエリ実行部１１５に相当）を３つ生成し、これらを各下位サーバへ割り当て、各々にクエリを実行させる。しかしながら、この手法では、たとえば各下位サーバにおける保有レコード数などが考慮されていないため、リソースの効率的な割り当てが行われているとは言い難い。
【００２６】
これに対して、本実施形態のデータベース管理装置１は、クエリで使用されるテーブルを保持する各下位サーバにおける当該テーブルの保有レコード数のみならず、自サーバのプロセッサ数と、各下位サーバのプロセッサ数とをさらに考慮して、リソースの効率的な割り当てを実現する。以下、この点について詳述する。
【００２７】
まず、複数の下位サーバに分散するテーブルを使用するクエリの実行にあたっての本実施形態のデータベース管理装置１の基本的な規則について説明する。
第１に、このデータベース管理装置１では、クエリ分割部１１４によるクエリ実行部１１５の合計生成数（並列数）を、最大で自サーバのプロセッサ数とする。なお、たとえば自サーバのプロセッサ数が下位サーバ数未満の場合などにおいては、クエリ実行部１１５の合計生成数が自サーバのプロセッサ数を超えることも生じ得る。
【００２８】
第２に、このデータベース管理装置１では、各下位サーバに対して生成するクエリ実行部１１５の数を、最大で各下位サーバのプロセッサ数とする。
以上の基本的な規則を踏まえて、このデータベース管理装置１、より詳しくは、クエリ分割部１１４は、適正な数のクエリ実行部１１５を以下の通りに生成する。
【００２９】
クエリ分割部１１４は、まず、クエリ解析部１１３によって判定されたクエリに使用されるテーブルについての各下位サーバの保有レコード数の比率εを、下位サーバ情報管理部１１１によって管理される下位テーブルレコード数情報２１２を用いて算出する。この保有レコード数の比率εは、たとえば「下位サーバ１の保有レコード数の比率εサーバ１＝下位サーバ１の保有レコード数／下位サーバ全体の保有レコード数」として算出する。
【００３０】
次に、クエリ分割部１１４は、各下位サーバについて算出した保有レコード数の比率εと、下位サーバ情報管理部１１１によって管理されるプロセッサ数情報２１１に含まれる自サーバのプロセッサ数Ｎとを用いて、各下位サーバに対して生成するクエリ実行部１１５の数を暫定的に算出する。このクエリ実行部１１５の生成数は、たとえば「下位サーバ１に対するクエリ実行部１１５の生成数＝自サーバのプロセッサ数Ｎ×下位サーバ１の保有レコード数の比率εサーバ１」として算出する。ここで、クエリ分割部１１４は、算出された値が１未満であった場合は１とし、１以上であって小数を含む場合はたとえば四捨五入によって整数値化する。
【００３１】
最後に、クエリ分割部１１４は、暫定的に算出した各下位サーバに対して生成するクエリ実行部１１５の数と、下位サーバ情報管理部１１１によって管理されるプロセッサ数情報２１１に含まれる自サーバのプロセッサ数Ｎおよび各下位サーバのプロセッサ数Ｍとを用いて、各下位サーバに対して生成するクエリ実行部１１５の数、つまりはクエリ実行部１１５の合計生成数を決定する。より詳しくは、前述した本実施形態のデータベース管理装置１における基本的な規則に沿うようにクエリ実行部１１５の生成数を決定する。つまり、クエリ実行部１１５の合計生成数が自サーバのプロセッサ数を超えず、また、各下位サーバに対して生成するクエリ実行部１１５の数が各下位サーバのプロセッサ数を超えないように、クエリ実行部１１５の生成数を決定する。
【００３２】
次に、クエリ分割部１１４がクエリ実行部１１５の生成数を決定する具体的な動作例をいくつかのモデルケースを挙げて説明する。
まず、図７および図８を、図６と併せて参照して、上位サーバ（自サーバ）のプロセッサ数が（クエリで使用されるテーブルを保持する）下位サーバのプロセッサ数よりも多い場合におけるクエリ分割部１１４の動作例を説明する。
【００３３】
ここでは、下位サーバとしてサーバ１〜３が存在し、これらの下位サーバに分散するテーブル１を使用するクエリを実行することを想定する。また、図７（Ａ）に示されるように、プロセッサ数は、自サーバ（上位サーバ）が８、サーバ１が４、サーバ２が１、サーバ３が２であることを想定する。さらに、図７（Ｂ）に示されるように、テーブル１の保有レコード数は、サーバ１が１００、サーバ２が０、サーバ３が２５であることを想定する。つまり、下位サーバ全体の保有レコード数は１２５である。
【００３４】
クエリ分割部１１４は、まず、図８（Ａ）に示されるように、テーブル１についてのサーバ１〜３の保有レコード数の比率εを算出する。各下位サーバについて保有レコード数の比率εを算出すると、クエリ分割部１１４は、次に、図８（Ｂ）に示されるように、各下位サーバに対して生成するクエリ実行部１１５の数を暫定的に算出する。
【００３５】
この時点で、サーバ１については６．４、サーバ２については０、サーバ３については１．６が算出されている。ここで、サーバ１のプロセッサ数は４なので、クエリ分割部１１４は、サーバ１に対して生成するクエリ実行部１１５の数を、６．４を四捨五入して得られる６ではなく、４に決定する。また、クエリ分割部１１４は、サーバ２に対して生成するクエリ実行部１１５の数を０に決定する。さらに、クエリ分割部１１４は、サーバ３に対して生成するクエリ実行部１１５の数を、１．６を四捨五入して得られる（サーバ２のプロセッサ数内の）２に決定する。
【００３６】
つまり、クエリ分割部１１４は、図８（Ｃ）に示されるように、サーバ１に対して４、サーバ２に対して０、サーバ３に対して２、の合計６つのクエリ実行部１１５を生成することを決定する。よって、このクエリは、自サーバの８つのプロセッサの中の６つのプロセッサが用いられて６つのクエリ実行部１１５によって並列に実行されることになる。また、６つのクエリ実行部１１５のうち、４つのクエリ実行部１１５はサーバ１に対するものであり、２つのクエリ実行部１１５はサーバ３に対するものである。クエリ分割部１１４は、各下位サーバ当りのクエリ実行部１１５の生成数に応じてクエリを分割することを併せて実行する。このクエリの分割方法については後述するが、たとえばサーバ１を例として簡単に述べるならば、１００レコード中の互いに異なる２５レコードを対象とする４つのクエリを生成する。分割後の４つのクエリは、サーバ１に対して生成された４つのクエリ実行部１１５に分配され、各クエリ実行部１１５から下位サーバ側のクエリ実行部１２４へ転送される。クエリ分割部１１４によって生成された６つのクエリ実行部１１５それぞれは、下位サーバ側のクエリ実行部１２４からクエリの結果を受け取り、結果集積部１１６へ転送する。クエリの結果は、結果集積部１１６によって集積され、ユーザへ返却される。
【００３７】
このように、クエリ分割部１１４は、保有レコード数（処理量）が多く、負荷が大きい下位サーバに関する処理に多くのプロセッサが割り当てられるように動作する。また、ある下位サーバのプロセッサ数を超えて、当該下位サーバに関する処理に自サーバのプロセッサを割り当てることは、たとえば一部のプロセッサを待機させてしまうなど無駄であるので、クエリ分割部１１４は、このような無駄を発生させないように動作する。
【００３８】
つまり、先に説明した一比較例のように、クエリを実行するプロセスを下位サーバの数に応じて均等に生成する場合と比較して、本実施形態のデータベース管理装置１は、リソースの効率的な割り当てを実現する。
次に、図９および図１０を、図６と併せて参照して、（クエリで使用されるテーブルを保持する）下位サーバの処理量がすべて同程度の場合におけるクエリ分割部１１４の動作例を説明する。
【００３９】
ここでも、下位サーバとしてサーバ１〜３が存在し、これらの下位サーバに分散するテーブル１を使用するクエリを実行することを想定する。また、図９（Ａ）に示されるように、プロセッサ数は、自サーバ（上位サーバ）が８、サーバ１が４、サーバ２が２、サーバ３が２であることを想定する。さらに、図９（Ｂ）に示されるように、テーブル１の保有レコード数は、サーバ１〜３のいずれもが１０であることを想定する。つまり、下位サーバ全体の保有レコード数は３０である。
【００４０】
この場合も、クエリ分割部１１４は、まず、図１０（Ａ）に示されるように、テーブル１についてのサーバ１〜３の保有レコード数の比率εを算出する。各下位サーバについて保有レコード数の比率εを算出すると、クエリ分割部１１４は、次に、図１０（Ｂ）に示されるように、各下位サーバに対して生成するクエリ実行部１１５の数を暫定的に算出する。
【００４１】
この時点で、サーバ１〜３のすべてについて２．４が算出されている。クエリ分割部１１４は、これらのサーバ１〜３に対して生成するクエリ実行部１１５の数を、２．４を四捨五入して得られる（サーバ１〜３のプロセッサ数内の）２に決定する。
つまり、クエリ分割部１１４は、図１０（Ｃ）に示されるように、サーバ１〜３に対して２つずつの合計６つのクエリ実行部１１５を生成することを決定する。よって、このクエリは、自サーバの８つのプロセッサの中の６つのプロセッサが用いられて６つのクエリ実行部１１５によって並列に実行されることになる。また、クエリ分割部１１４は、各下位サーバに対して生成される２つのクエリ実行部１１５用にクエリを２分割することを併せて実行する。その後、各下位サーバに対して、２つのクエリ分割部１１４から分割後のクエリが転送されることとなる。
【００４２】
このように、下位サーバの処理量がすべて同程度の場合、クエリ分割部１１４は、プロセッサが均等に割り当てられるように動作する。なお、自サーバのプロセッサ数が８であるところ、クエリ実行部１１５の合計生成数が６であり、かつ、サーバ１のプロセッサ数が４であるところ、当該サーバ１に対して生成されるクエリ実行部１１５の数が６であることから、当該サーバ１に関する処理にさらに２つのプロセッサを割り当てること、つまり、さらに２つのクエリ実行部１１５を生成する余地があるが、ここでは、自サーバのプロセッサ数と下位サーバの保有レコード数の比率とから算出される数を超えて、自サーバのプロセッサを割り当てることはしないこととする。
【００４３】
次に、図１１および図１２を、図６と併せて参照して、上位サーバ（自サーバ）のプロセッサ数が（クエリで使用されるテーブルを保持する）下位サーバの数よりも少ない場合におけるクエリ分割部１１４の動作例を説明する。
ここでも、下位サーバとしてサーバ１〜３が存在し、これらの下位サーバに分散するテーブル１を使用するクエリを実行することを想定する。また、図１１（Ａ）に示されるように、プロセッサ数は、自サーバ（上位サーバ）が２、サーバ１が４、サーバ２が１、サーバ３が２であることを想定する。さらに、図１１（Ｂ）に示されるように、テーブル１の保有レコード数は、サーバ１が１０、サーバ２が２０、サーバ３が１０であることを想定する。つまり、下位サーバ全体の保有レコード数は４０である。
【００４４】
この場合も、クエリ分割部１１４は、まず、図１２（Ａ）に示されるように、テーブル１についてのサーバ１〜３の保有レコード数の比率εを算出する。各下位サーバについて保有レコード数の比率εを算出すると、クエリ分割部１１４は、次に、図１２（Ｂ）に示されるように、各下位サーバに対して生成するクエリ実行部１１５の数を暫定的に算出する。
【００４５】
この時点で、サーバ１については０．５、サーバ２については１、サーバ３については０．５が算出されている。ここで、サーバ１およびサーバ３については１未満が算出されているので、クエリ分割部１１４は、サーバ１およびサーバ３に対して生成するクエリ実行部１１５の数を１に決定する。サーバ２については１が算出されているので、クエリ分割部１１４は、サーバ２に対して生成するクエリ実行部１１５の数を１に決定する。
【００４６】
つまり、クエリ分割部１１４は、図１２（Ｃ）に示されるように、サーバ１〜３に対して１つずつの合計３つのクエリ実行部１１５を生成することを決定する。ここで、自サーバのプロセッサ数は２であるので、自サーバのプロセッサ数を超えてクエリ実行部１１５が生成されることになる。このように、上位サーバ（自サーバ）のプロセッサ数が（クエリに関わるテーブルを保持する）下位サーバの数よりも少ない場合、自サーバのプロセッサ数を超えてクエリ実行部１１５が生成され得る。この場合、２つのプロセッサの中の一方のプロセッサに２つのクエリ実行部１１５が割り当てられることになる。各下位サーバに対して１つずつクエリ実行部１１５を生成するクエリ分割部１１４は、クエリを分割することなく、そのまま各クエリ実行部１１５に配布する。
【００４７】
なお、クエリ分割部１１４は、自サーバのプロセッサ数と下位サーバの保有レコード数の比率とから算出される値が１未満であるためにクエリ実行部１１５の生成数が１に決定された下位サーバの処理が複数存在する場合、これらを１つのプロセッサに割り当てるように制御を行ってもよい。たとえば、図１３（Ａ）に示されるように、サーバ１とサーバ３とが、自サーバのプロセッサ数と下位サーバの保有レコード数の比率とから０．５が算出されたことによってクエリ実行部１１５の生成数が１に決定されたとすると、これらを各々異なるプロセッサに割り当てるのではなく、図１３（Ｂ）に示されるように、１つのプロセッサに纏めて割り当てるようにしてもよい。
【００４８】
より詳しくは、自サーバのプロセッサ数と下位サーバの保有レコード数の比率とから１未満の値が算出された下位サーバの中で最も処理量の小さい下位サーバから順に、当該算出された値を足し合わせていき、その値が１を超えるまで、１つのプロセッサに割り当てられるようにしてもよい。図１３には、サーバ１に対して生成されたクエリ実行部１１５とサーバ３に対して生成されたクエリ実行部１１５とが、自サーバのプロセッサ１とプロセッサ３とに各々割り当てられるところ、プロセッサ１に纏めて割り当てられる例が示されている。
【００４９】
次に、図１４を参照して、クエリ分割部１１４によるクエリの分割方法について説明する。
クエリ分割部１１４は、たとえばＳＱＬ（Structured Query Language）において標準的なLIMIT句（図１４：ｂ１）およびOFFSET句（図１４：ｂ２）を使用してクエリを分割する。
【００５０】
ここでは、クエリで使用されるテーブル１（Table1）の保有レコード数が１００の下位サーバに対して３つのクエリ実行部１１５を生成することを決定したクエリ分割部１１４が、このクエリを３つに分割する場合を想定する。
この場合、クエリ分割部１１４は、図１４に示されるように、（Ａ）「SELECT * FROM Table1」というクエリを、（Ｂ１）「SELECT * FROM Table1 LIMIT 100/3」、（Ｂ２）「SELECT * FROM Table1 OFFSET 100/3 + 1 LIMIT 100/3」、（Ｂ３）「SELECT * FROM Table1 OFFSET 2(100/3) + 1」という３つのクエリに分割する。これらは自サーバのクエリ実行部１１５から下位サーバ側のクエリ実行部１２４に転送されて並列に実行されることになる。
【００５１】
図１５は、データベース管理装置１によって実行されるクエリ受付処理の流れを示すフローチャートである。なお、ここでは、ユーザから受け付けたクエリが、下位サーバに分散するテーブルを使用するものである場合を想定して、データベース管理装置１がクエリ受付処理を実行する手順を説明する。
【００５２】
データベース管理装置１は、まず、クエリを解析し、どのテーブルを使用するのかを判定する（ステップＡ１）。次に、データベース管理装置１は、そのテーブルの各下位サーバにおける保有レコード数の比率を求める（ステップＡ２）。
続いて、データベース管理装置１は、保有レコード数の比率と（自サーバおよび各下位サーバの）プロセッサ数とに基づき、生成するクエリ実行部１１５の数、つまり各下位サーバへ割り当てる（自サーバの）プロセッサ数を決定する（ステップＡ３）。また、データベース管理装置１は、下位サーバごとに、生成するクエリ実行部１１５の数に基づき、クエリを分割する（ステップＡ４）。
【００５３】
クエリ実行部１１５の生成数を決定し、かつ、クエリを分割すると、データベース管理装置１は、それぞれのクエリ実行部１１５でクエリを実行する（ステップＡ５）。データベース管理装置１は、それぞれのクエリ実行部１１５で得られた結果を集積する（ステップＡ６）。
【００５４】
ところで、以上の説明では、上位サーバと下位サーバとが同様の構成であり、下位サーバ側の自サーバ情報送信部１２３が上位サーバへ送信する自サーバ情報を、上位サーバ側の下位サーバ情報取得部１１２が受信し、これを下位サーバ情報管理部１１１が下位サーバ情報として管理することとしている。一方で、たとえば図１６に示されるように、既存かつ異なる構成のデータソース２Ａ，２Ｂなどを、ツリー構造の分散型データベースを構成する複数のサーバの中の１つとして組み込みたいという要求も発生し得る。異なる構成のデータソース２Ａ，２Ｂなどとしては、自サーバ情報送信部１２３を有していないもののみならず、たとえばクエリとして受け付けるＳＱＬを実行できないＣＳＶ（Comma-Separated Value）形式でテーブルを保持するものなどが考えられ得る。
【００５５】
このような要求に応えるために、データベース管理装置１は、異なる構成の下位サーバが存在する場合において、自サーバ−下位サーバ間の違いを吸収する仕組みをさらに備えるようにしてもよい。
図１７は、下位サーバが異なる構成のデータソースである場合における当該下位サーバの違いを吸収するための仕組みの第１例を説明するための図である。なお、ここでは、図１６で示した異なる構成のデータソース２Ａ，２Ｂなどを、異構成データソース２と総称する。また、ここでは、図１７中の異構成データソース２が、ＳＱＬを実行できないＣＳＶ形式でデータを保持するものであることを想定する。異構成データソース２は、クエリを実行するクエリ実行部１３１と、ＣＳＶ形式で保持されるテーブルを管理するテーブル管理部１３２とを少なくとも含むＤＢＭＳ処理部１３０を有する。
【００５６】
第１例においては、まず、下位サーバ情報取得部１１２が、異構成データソース２である下位サーバについて、その下位サーバに関する下位サーバ情報を、その下位サーバからたとえば定期的に収集する（図１７：ｃ１）。この下位サーバ情報の収集は、たとえば、その下位サーバが保有するテーブルの保有レコード数を問い合わせるクエリを送信することなどによって実行する。下位サーバから送信されるクエリの結果は、下位サーバ情報取得部１１２から下位サーバ情報管理部１１１へ転送される。下位サーバ情報管理部１１１は、このクエリの結果に基づき、下位テーブルレコード数情報２１２を更新する。
【００５７】
また、クエリ実行部１１５は、クエリ変換部１１５Ａを備え、クエリ分割部１１４から渡されるクエリを、当該クエリ変換部１１５Ａによって下位サーバが実行可能な形式に変換し、変換後のクエリを下位サーバへ送信する（図１７：ｃ２）。変換前の形式と変換後の形式とが判明していれば、この変換は既存の種々の手法によって実現可能である。
【００５８】
たとえば、どの下位サーバが異構成データソース２であるかや、異構成データソース２である下位サーバがいずれの形式でテーブルを保持するかなどの情報は、あらかじめデータベース管理装置１に与えられてもよいし、データベース管理装置１が能動的に取得するようにしてもよい。たとえば、下位サーバが新たに接続された際、一定期間を超えて自サーバが送信されてこなかった場合、その下位サーバを異構成データソース２と判定し、保有するテーブルやそのテーブルの保有レコード数などを問い合わせるクエリを送信するなどといったことを行うようにしてもよい。
【００５９】
これにより、データベース管理装置１は、自サーバ−下位サーバ間の違いを吸収することができる。なお、下位サーバ情報を定期的に収集することとした場合、たとえばクエリの実行時において保有レコード数に誤差が生じ得るが、図１４に示したようにクエリを分割するので、分割されたクエリ間で負荷のばらつきが起きることはあっても、レコードの漏れが起きることはない。
【００６０】
また、図１８は、下位サーバが異なる構成のデータソースである場合における当該下位サーバの違いを吸収するための仕組みの第２例を説明するための図である。ここでも、異構成データソース２については、前述の第１例と同様の事項を想定する。また、クエリ実行部１１５は、クエリ変換部１１５Ａを備える。
【００６１】
この第２例では、下位サーバ情報を定期的に収集することに代えて、クエリ実行部１１５が下位サーバへクエリを送信するタイミングで（図１８：ｄ１−１）、下位サーバ情報を収集する。下位サーバ情報取得部１１２は、異構成データソース２である下位サーバへクエリを送信するクエリ実行部１１５からの通知を受けて（図１８：ｄ１−２）、たとえば、その下位サーバが保有するテーブルの保有レコード数を問い合わせるクエリも下位サーバへ送信してもらう。下位サーバ情報取得部１１２は、自身が依頼したクエリの結果をクエリ実行部１１５から受け取り、下位サーバ情報管理部１１１へ転送する。
【００６２】
第２例における下位サーバ情報の収集は、クエリ実行部１１５が下位サーバへクエリを送信する都度行うようにしてもよいし、前回の収集から一定期間以上経過した以降にクエリ実行部１１５から下位サーバへクエリが送信される場合に行うようにしてもよい。
【００６３】
図１９は、データベース管理装置１によって実行される下位サーバ情報更新処理の流れを示すフローチャートである。
データベース管理装置１は、下位サーバが自サーバ（上位サーバ）と同様の構成であるか否かを調べる（ステップＢ１）。同様の構成である場合（ステップＢ１：ＹＥＳ）、下位サーバ側から自サーバ情報として下位サーバ情報が送信されてくるので、データベース管理装置１は、下位サーバ情報を能動的に下位サーバから収集することは行わない。
【００６４】
一方、異なる構成である場合（ステップＢ１：ＮＯ）、データベース管理装置１は、所定のタイミングで、テーブルの件数を下位サーバから取得し、その下位サーバに関する下位サーバ情報を更新する（ステップＢ２）。
以上のように、本実施形態のデータベース管理装置１は、各下位サーバにおけるテーブルの保有レコード数、上位サーバ（自サーバ）のプロセッサ数、各下位サーバのプロセッサ数を考慮した、リソースの効率的な割り当てを実現する。
【００６５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６６】
１…データベース管理装置、１１…プロセッサ、１２…主メモリ、１３…通信装置、１４…外部記憶装置、１００…ＤＢＭＳプログラム、１１１…下位サーバ情報管理部、１１２…下位サーバ情報取得部、１１３…クエリ解析部、１１４…クエリ分割部、１１５…クエリ実行部、１１５Ａ…クエリ変換部、１１６…結果集積部、１２１…テーブル管理部、１２２…自サーバ情報管理部、１２３…自サーバ情報送信部、１２４…クエリ実行部、２００…記憶領域、２１１…プロセッサ数情報、２１２…下位テーブルレコード数情報、２２１…テーブル。
【図１】
2020004339.tif 000003
【図２】
2020004339.tif 000004
【図３】
2020004339.tif 000005
【図４】
2020004339.tif 000006
【図５】
2020004339.tif 000007
【図６】
2020004339.tif 000008
【図７】
2020004339.tif 000009
【図８】
2020004339.tif 000010
【図９】
2020004339.tif 000011
【図１０】
2020004339.tif 000012
【図１１】
2020004339.tif 000013
【図１２】
2020004339.tif 000014
【図１３】
2020004339.tif 000015
【図１４】
2020004339.tif 000016
【図１５】
2020004339.tif 000017
【図１６】
2020004339.tif 000018
【図１７】
2020004339.tif 000019
【図１８】
2020004339.tif 000020
【図１９】
2020004339.tif 000021