(57)【特許請求の範囲】
【請求項１】
複数のデータを含むテーブルを所定の分割手法により複数のデータベースに分割して記憶させる場合に各データの登録先のデータベースの決定に用いる割当情報を、割当変更コマンドが発行された場合に変更する変更手段と、
変更される前に用いられた割当情報である割当履歴情報を記憶する履歴記憶手段と、
新たなデータの登録を要求する登録要求をクライアントから受信する受信手段と、
前記登録要求に応じて、前記履歴記憶手段に記憶された割当履歴情報及び変更後の割当情報を用いて、登録先のデータベースを決定する決定手段と、
決定されたデータベースを有するデータベースサーバに対して、前記新たなデータの登録を要求する登録要求を送信する送信手段とを備え、
前記データは、少なくとも１つのカラムを有し、当該カラムのうち、登録先のデータベースの決定に用いられる対象のカラムが予め定められており、
前記決定手段は、
前記履歴記憶手段に記憶された割当履歴情報及び変更後の割当情報を用いて、前記複数のデータベースのうち、前記対象のカラムの値が同一であるデータを記憶している可能性のある第１データベースを少なくとも１つ割り出すデータベース割出手段と、
前記第１データベースを有する第１データベースサーバに対して、前記対象のカラムの値が同一であるデータの検索を要求する検索要求を送信する要求送信手段と、
前記検索要求に応じて前記第１データベースサーバが検索した結果該当したデータの件数を示すものとして送信した検索結果を受信する結果受信手段と、
前記第１データベースサーバのうち、所定の件数以上を示す検索結果を送信した第２データベースサーバに対して、前記新たなデータの登録を要求する登録要求を送信する登録送信手段と
を有することを特徴とするコーディネータサーバ。 
【請求項２】
前記割当情報は、前記対象のカラムに対して演算処理を行う関数及びその関数の演算に用いるパラメータを示し、
前記変更手段は、所定の状態が生起した場合に前記割当情報によって示される前記関数及び前記パラメータのうち少なくとも一方を変更し、
前記データベース割出手段は、
前記対象のカラムの値に対して前記履歴記憶手段に記憶された割当履歴情報及び変更後の割当情報を各々用いて演算処理を行って処理結果を各々算出する算出手段と、
算出された各処理結果を用いて、前記対象のカラムの値が同一であるデータを記憶している可能性のあるデータベースを割り出す割出手段とを有する
ことを特徴とする請求項１に記載のコーディネータサーバ。 
【請求項３】
前記所定の分割手法は、ハッシュ分割であり、
前記割当情報は、前記対象のカラムに対して演算処理を行うハッシュ関数及びそのハッシュ関数の演算に用いるパラメータを示し、
前記変更手段は、所定の状態が生起した場合に前記割当情報によって示される前記ハッシュ関数及び前記パラメータのうち少なくとも一方を変更し、
前記算出手段は、前記履歴記憶手段に記憶された割当履歴情報によって示されるハッシュ関数及び変更後の割当情報によって各々示されるハッシュ関数及びパラメータを用いて演算処理を行ってハッシュ値を各々算出し、
前記割出手段は、算出された各ハッシュ値を用いて、前記対象のカラムの値が同一であるデータを記憶している可能性のあるデータベースを割り出す
ことを特徴とする請求項２に記載のコーディネータサーバ。 
【請求項４】
前記演算処理を行って算出され得るハッシュ値は、前記複数のデータベースの各々と１対１対応しており、
前記割出手段は、前記対象のカラムの値が同一であるデータを記憶している可能性のあるデータベースとして、算出された各ハッシュ値に対応するデータベースを割り出す
ことを特徴とする請求項３に記載のコーディネータサーバ。 
【請求項５】
前記所定の分割手法は、キーレンジ分割であり、
前記割当情報は、前記対象のカラムに対するレンジを示し、
前記変更手段は、所定の状態が生起した場合に前記割当情報によって示されるレンジを変更し、
前記割出手段は、前記履歴記憶手段に記憶された割当履歴情報によって示されるレンジ及び変更後の割当情報によって示されるレンジを用いて、前記対象のカラムの値が同一であるデータを記憶している可能性のあるデータベースを割り出す
ことを特徴とする請求項１に記載のコーディネータサーバ。 
【請求項６】
前記変更手段は、前記複数のデータベースに各々記憶されるデータの合計サイズが不均衡になる状態又は新たなデータベースが増設される状態が生起した場合に前記割当情報を変更する
ことを特徴とする請求項１乃至請求項５のいずれか一項に記載のコーディネータサーバ。
【請求項７】
変更手段と、複数のデータを含むテーブルを所定の分割手法により複数のデータベースに分割して記憶させる場合に各データの登録先のデータベースの決定に用いる割当情報であり、変更される前に用いられた割当情報である割当履歴情報を記憶する履歴記憶手段と、受信手段と、決定手段と、送信手段とを備えるコーディネータサーバにおいて実現される方法であって、
前記データは、少なくとも１つのカラムを有し、当該カラムのうち、登録先のデータベースの決定に用いられる対象のカラムが予め定められており、
前記割当情報を、割当変更コマンドが発行された場合に変更する変更ステップと、
新たなデータの登録を要求する登録要求をクライアントから受信する受信ステップと、
前記登録要求に応じて、前記履歴記憶手段に記憶された割当履歴情報及び変更後の割当情報を用いて、登録先のデータベースを決定する決定ステップと、
前記履歴記憶手段に記憶された割当履歴情報及び変更後の割当情報を用いて、前記複数のデータベースのうち、前記対象のカラムの値が同一であるデータを記憶している可能性のある第１データベースを少なくとも１つ割り出すデータベース割出ステップと、
前記第１データベースを有する第１データベースサーバに対して、前記対象のカラムの値が同一であるデータの検索を要求する検索要求を送信する要求送信ステップと、
前記検索要求に応じて前記第１データベースサーバが検索した結果該当したデータの件数を示すものとして送信した検索結果を受信する結果受信ステップと、
前記第１データベースサーバのうち、所定の件数以上を示す検索結果を送信した第２データベースサーバに対して、前記新たなデータの登録を要求する登録要求を送信する登録送信ステップと
決定されたデータベースを有するデータベースサーバに対して、前記新たなデータの登録を要求する登録要求を送信する送信ステップと
を含むことを特徴とするデータ割当方法。 
【請求項８】
請求項７に記載された方法をコンピュータで実行させることを特徴とするデータ割当プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶するデータベースを各々有する複数のデータベースサーバと接続されて分散データベースを構成し、各データベースにデータを割り当てるコーディネータサーバ、データ割当方法及びプログラムに関する。
【背景技術】
【０００２】
近年では、巨大なデータに対応するため、複数のデータベースから構成される分散データベースが構築されている。このような分散データベースでは、データを複数のデータベースに分割配置する必要がある。データを分割配置する手法としては、キーレンジ分割、ハッシュ分割などが知られている（例えば、特許文献１〜２参照）。キーレンジ分割やハッシュ分割では、テーブルの１カラム値を使用する場合と、表の複数のカラム値を使用する場合とがある。
【０００３】
キーレンジ分割とは、分割に使用するキーの値をあらかじめ決めておき、その値に割り当てられたデータベースにデータを分割格納するというものである。データの格納先を分割することで、データの検索処理を並列化し、スループットの向上を図る。例えば、大量の売上データを扱う場合に、年月日の「月」をキーにして別々のデータベース(ディスク)に格納することで、並列処理を行う際のスループット向上を図る。
【０００４】
このようにしてデータの分割（データ分割）を行うと、負荷は集中するものの、対象カラムに対する範囲条件つきの検索では無関係なデータベースにアクセスする非効率を回避することができる。さらに、対象カラムでの自然結合を含む検索では、異なるデータベース間の結合が不要となるので、性能を大幅に改善することができる。
【０００５】
【特許文献１】特開平６−１３９１１９号公報
【特許文献２】特開平６−３１４２９９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、分散データベースでは、均衡がとれたデータ分割を行わないと、検索時に特定のデータベースに負荷が集中する恐れがある。このため、分散化の効果を発揮することが困難である。しかし、データベースに登録されるデータの傾向の変化により、各データベースに登録されているデータのサイズは不均衡になる可能性がある。従って、事前に決められたデータ分割ルールではこのような不均衡を回避することが困難である。そのため、キーレンジを動的に変更する、ハッシュ値を変更するなどの改善手法が提案されてきた。しかし、このような改善手法では、キーレンジやハッシュ値の変更に伴うデータの移動などの処理負担が大きくなる恐れがある。
【０００７】
本発明は、上記に鑑みてなされたものであって、処理負担を抑えて、データベースに記憶されるデータの不均衡を回避可能なコーディネータサーバ、データ割当方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、本発明は、コーディネータサーバであって、複数のデータを含むテーブルを所定の分割手法により複数のデータベースに分割して記憶させる場合に各データの登録先のデータベースの決定に用いる割当情報を、割当変更コマンドが発行された場合に変更する変更手段と、変更される前に用いられた割当情報である割当履歴情報を記憶する履歴記憶手段と、新たなデータの登録を要求する登録要求をクライアントから受信する受信手段と、前記登録要求に応じて、前記履歴記憶手段に記憶された割当履歴情報及び変更後の割当情報を用いて、登録先のデータベースを決定する決定手段と、決定されたデータベースを有するデータベースサーバに対して、前記新たなデータの登録を要求する登録要求を送信する送信手段とを備え、前記データは、少なくとも１つのカラムを有し、当該カラムのうち、登録先のデータベースの決定に用いられる対象のカラムが予め定められており、前記決定手段は、前記履歴記憶手段に記憶された割当履歴情報及び変更後の割当情報を用いて、前記複数のデータベースのうち、前記対象のカラムの値が同一であるデータを記憶している可能性のある第１データベースを少なくとも１つ割り出すデータベース割出手段と、前記第１データベースを有する第１データベースサーバに対して、前記対象のカラムの値が同一であるデータの検索を要求する検索要求を送信する要求送信手段と、前記検索要求に応じて前記第１データベースサーバが検索した結果該当したデータの件数を示すものとして送信した検索結果を受信する結果受信手段と、前記第１データベースサーバのうち、所定の件数以上を示す検索結果を送信した第２データベースサーバに対して、前記新たなデータの登録を要求する登録要求を送信する登録送信手段とを有することを特徴とする。 
【０００９】
また、本発明は、変更手段と、複数のデータを含むテーブルを所定の分割手法により複数のデータベースに分割して記憶させる場合に各データの登録先のデータベースの決定に用いる割当情報であり、変更される前に用いられた割当情報である割当履歴情報を記憶する履歴記憶手段と、受信手段と、決定手段と、送信手段とを備えるコーディネータサーバにおいて実現される方法であって、前記データは、少なくとも１つのカラムを有し、当該カラムのうち、登録先のデータベースの決定に用いられる対象のカラムが予め定められており、前記割当情報を、割当変更コマンドが発行された場合に変更する変更ステップと、新たなデータの登録を要求する登録要求をクライアントから受信する受信ステップと、前記登録要求に応じて、前記履歴記憶手段に記憶された割当履歴情報及び変更後の割当情報を用いて、登録先のデータベースを決定する決定ステップと、前記履歴記憶手段に記憶された割当履歴情報及び変更後の割当情報を用いて、前記複数のデータベースのうち、前記対象のカラムの値が同一であるデータを記憶している可能性のある第１データベースを少なくとも１つ割り出すデータベース割出ステップと、前記第１データベースを有する第１データベースサーバに対して、前記対象のカラムの値が同一であるデータの検索を要求する検索要求を送信する要求送信ステップと、前記検索要求に応じて前記第１データベースサーバが検索した結果該当したデータの件数を示すものとして送信した検索結果を受信する結果受信ステップと、前記第１データベースサーバのうち、所定の件数以上を示す検索結果を送信した第２データベースサーバに対して、前記新たなデータの登録を要求する登録要求を送信する登録送信ステップと、決定されたデータベースを有するデータベースサーバに対して、前記新たなデータの登録を要求する登録要求を送信する送信ステップとを含むことを特徴とする。
【００１０】
また、本発明は、データ割当プログラムであって、上記に記載された方法をコンピュータで実行させることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、処理負担を抑えて、データベースに記憶されるデータの不均衡を回避可能である。
【発明を実施するための最良の形態】
【００１２】
以下に添付図面を参照して、この発明にかかるコーディネータサーバ、データ割当方法及びプログラムの最良な実施の形態を詳細に説明する。
【００１３】
[実施の形態]
（１）構成
図１は、本実施の形態にかかる分散データベースシステムの構成を例示する図である。分散データベースシステムは、アプリケーションプログラムが実行されるクライアントコンピュータ（以下、クライアントという）５０と、分散データベース５１とを有し、これらがネットワーク５２を介して接続されて構成される。分散データベース５１は１台のコーディネータサーバ６０と複数台のデータベースサーバ７０Ａ〜７０Ｃとを有する。ネットワーク５２は、例えば、ＬＡＮ（Local Area Network）、イントラネット、イーサネット（登録商標）又はインターネットなどである。
【００１４】
コーディネータサーバ６０は、処理要求をクライアント５０から受信すると、当該処理要求に応じてデータベースサーバ７０Ａ〜７０Ｃに対して処理要求を行い、当該処理要求に応じて行われた処理の結果をデータベースサーバ７０Ａ〜７０Ｃから受信し、当該処理の結果に基づいて、処理結果のデータをクライアント５０に適宜送信する。
【００１５】
データベースサーバ７０Ａは、データを記憶するデータベース７００Ａを有し、コーディネータサーバ６０からの処理要求に応じたデータをデータベース７００Ａから取得し、当該データからなるデータ集合を適宜加工して、その結果のデータを処理結果としてコーディネータサーバ６０に送信する。データベースサーバ７０Ｂは、データを記憶するデータベース７００Ｂを有し、データベースサーバ７０Ａと同様の機能を実現させる。データベースサーバ７０Ｃは、データを記憶するデータベース７００Ｃを有し、データベースサーバ７０Ａと同様の機能を実現させる。尚、以降、データベースサーバ７０Ａ〜７０Ｃを各々区別しない場合には、単にデータベースサーバ７０と記載し、データベース７００Ａ〜７００Ｃをを各々区別しない場合には、単にデータベース７００と記載する。
【００１６】
ここで、クライアント５０、コーディネータサーバ６０及びデータベースサーバ７０ののハードウェア構成について説明する。クライアント５０、コーディネータサーバ６０及びデータベースサーバ７０は各々、装置全体の制御を行うＣＰＵ（Central Processing Unit）等の制御装置と、各種データや各種プログラムを記憶するＲＯＭ（Read Only Memory）やＲＡＭ（Random Access Memory）等の記憶装置と、各種データや各種プログラムを記憶するＨＤＤ（Hard Disk Drive）やＣＤ（Compact Disk）ドライブ装置等の外部記憶装置と、情報を表示するディスプレイ装置等の表示装置と、ユーザが各種処理要求を入力するためのキーボードやマウス等の入力装置と、ネットワーク５２を介して外部のコンピュータと通信を行う通信制御装置と、これらを接続するバスとを備えており、通常のコンピュータを利用したハードウェア構成となっている。
【００１７】
次に、本実施の形態において取り扱うデータについて説明する。図２は、本実施の形態において取り扱うデータを例示する図である。同図に示されるテーブルＴＢは、技術レポートの書誌情報を示すデータをレコード単位で記憶している。各データは、文書ＩＤ、タイトル、及び筆者の３カラムを有している。ここでは、文書ＩＤにより複数の技術レポートを束ねており、各技術レポートに対応して同じ文書ＩＤを有するデータが複数存在する場合がある。
【００１８】
このようなデータが少量である場合には、このようなテーブルＴＢを単一のデータベースに格納しても、データを検索して結果を返す応答時間は実用的である。しかし、データの数が増大しテーブルＴＢのデータサイズが巨大化すると、単一のデータベースでは、実用的な応答時間を維持するのが困難になる。ここでは、実用的な応答時間を維持するため、データを複数のデータベースに分割配置している。
【００１９】
図３は、テーブルＴＢを複数のデータベース７００Ａ〜７００Ｃに重複無しにデータ単位で分割した例を説明する図である。ここでは、テーブルＴＢを水平分割した礼を示してる。尚、データ分割の手法としてキーレンジ分割、ハッシュ分割などがあるが、ここではハッシュ分割を用いるものとする。ハッシュ分割のベースとなるハッシュ関数は、データの有するカラムのうち対象となるカラム（対象カラム）に対して適用される。対象カラムはユーザが予め設定するものとする。ここでは、データの有する文書ＩＤ、タイトル及び筆者のうち、文書ＩＤが対象カラムとして設定されるものとする。この文書ＩＤ対して適用されるハッシュ関数をハッシュ関数１[文書ＩＤ]とする。ハッシュ関数１[文書ＩＤ]は例えば以下の式（１）により表される。
【００２０】
【数１】
0005203733.tif 000002
【００２１】
このハッシュ関数１[文書ＩＤ]は、登録対象のデータの有する文書ＩＤがVARCHAR(20)など文字列として宣言されていると、文字を構成する文字コードを加算し、それをハッシュサイズで除算するという演算処理を表している。ハッシュサイズは、最初は、データベース７００Ａ〜７００Ｃの個数と同数の「３」が設定されている。
【００２２】
例えば、文書ＩＤ「Ｓ０１」「Ｓ０２」「Ｓ０３」に対してハッシュ関数１[文書ＩＤ]の演算処理がなされた結果は以下の通りとなる。
【００２３】
ハッシュ関数１[“S01”]=0
ハッシュ関数１[“S10”]=0
ハッシュ関数１[“S02”]=1
ハッシュ関数１[“S03”]=2
【００２４】
このハッシュ関数１[文書ＩＤ]による演算結果であるハッシュ値「０」〜「２」は、各データベース７００Ａ〜７００Ｃ、即ち、各データベースサーバ７０Ａ〜７０Ｃに１対１対応する。例えばハッシュ値「０」に対してデータベースサーバ７０Ａが対応し、ハッシュ値「１」に対してデータベースサーバ７０Ｂが対応し、ハッシュ値「２」に対してデータベースサーバ７０Ｃが対応しているものとする。従って、図２に示したデータＤＴ１〜ＤＴ６については、図３に示されるように、データＤＴ１，ＤＴ４，ＤＴ６がデータベース７００Ａに割り当てられ、データＤＴ３，ＤＴ５がデータベース７００Ｂに割り当てられ、データＤＴ２がデータベース７００Ｃに割り当てられることになる。
【００２５】
つまり、このようなハッシュ関数１[文書ＩＤ]を用いてハッシュ分割が行われることにより、複数のデータベース７００Ａ〜７００Ｃに記憶される各データは、文書ＩＤというカラムでクラスタリングされることになる。
【００２６】
次に、このような構成において、コーディネータサーバ６０が、記憶装置や外部記憶装置に記憶された各種プログラムを実行することにより実現される各種機能について図１を用いて説明する。以下に、コーディネータサーバ６０において実現される各種機能の実体となる各部について説明する。コーディネータサーバ６０は、要求受信部６００と、割当履歴管理部６０１と、要求処理部６０２と、割当変更部６０３と、結果送信部６０４とを有する。要求受信部６００と、要求処理部６０２と、割当変更部６０３と、結果送信部６０４との実体は、ＣＰＵが各種プログラムを実行することにより例えば記憶装置（例えばＲＡＭ）上に生成される。割当履歴管理部６０１は、例えば外部記憶装置に記憶される。
【００２７】
割当変更部６０３は、割当変更コマンドが発行された場合に、管理ツールを用いて、ハッシュ関数を変更する。割当変更コマンドは、例えば、判定関数によりデータベース７００Ａ〜７００Ｃに各々記憶されるデータの合計サイズの均衡がとれない状態になったと判定される場合やデータベースが増設される場合などに入力装置を介してユーザから発行される。尚、管理ツールとは記憶装置や外部記憶装置に記憶される所定のプログラムモジュールである。そして、割当変更部６０３は、ハッシュ関数を変更した場合、ハッシュ関数の変更前に、即ち、過去の登録時に用いられたハッシュ関数及びパラメータを示す割当履歴情報と、変更後（最新）のハッシュ関数及びパラメータを示す割当情報とを割当履歴管理部６０１に記憶させる。
【００２８】
要求受信部６００は、データの登録を要求する登録要求や、条件に該当するデータの検索を要求する検索要求などの処理要求をクライアント５０から受信する。要求処理部６０２は、要求受信部６００が受信した処理要求が、新たなデータの登録を要求する登録要求である場合、割当履歴管理部６０１に記憶された全ての割当履歴情報及び割当情報を用いて、演算処理を行い、その演算結果に応じて、データの登録先のデータベースサーバ７０を選出する。そして、要求処理部６０２は、選出したデータベースサーバ７０に対して、登録対象の新たなデータと共に当該データの登録を要求する登録要求を送信する。また、要求受信部６００が受信した処理要求が、データの検索を要求する検索要求である場合、当該検索要求に応じて、データベースサーバ７０に対して検索要求を行い、検索結果要求に応じてデータベースサーバ７０が行った検索の結果を受信し、当該結果に対して併合や結合などの加工を適宜施して、その結果のデータ（結果データ）を生成する。
【００２９】
結果送信部６０４は、要求処理部６０２が生成した結果データをクライアント５０に送信する。
【００３０】
（２）動作
次に、本実施の形態にかかるコーディネータサーバ６０の行うデータ登録処理の手順について図４を用いて説明する。コーディネータサーバ６０は、新たなデータの登録を要求する登録要求をクライアント５０から受信すると、まず、必要なロックを確保する（ステップＳ１）。具体的には、各データは文書ＩＤで水平分割されているので、コーディネータサーバ６０は、文書ＩＤの値を用いて新たなデータに対するハッシュ値を割り出し、そのハッシュ値を持つスレーブのロックポイントに対してロックをかけて、他の同一の文書ＩＤを持つデータの登録に対して排他をかける。次いで、コーディネータサーバ６０は、登録対象のデータの文章ＩＤの値に対して、割当履歴管理部６０１に記憶されている全ての割当履歴情報及び割当情報によって各々示されるハッシュ関数及びパラメータを用いた演算処理を行って、当該文書ＩＤから算出される可能性のあるハッシュ値の集合を得る（ステップＳ２）。そのハッシュ値はデータベースサーバと１対１対応しているので、データベースサーバ７０の集合（データベースサーバ７０Ａ〜７０Ｃの少なくとも１つ）を割り出すことができる。即ち、ハッシュ値に応じて、新たなデータの文書ＩＤの値が同一のデータを記憶している可能性のあるデータベースサーバ７０を割り出すことができる。そして、コーディネータサーバ６０は、割り出されたデータベースサーバ７０の集合に対して新たなデータの文書ＩＤの値が同一のデータの検索を要求する検索要求（ＳＱＬ）を発行する（ステップＳ３）。
【００３１】
当該処理要求に対してデータベースサーバ７０から送信された処理結果が、該当のデータがない（０件）であることを示す場合（ステップＳ４：0件）、コーディネータサーバ６０は、最新のハッシュ関数を用いてハッシュ値を算出し、データの登録先のデータベースサーバ７０（データベースサーバ７０Ａ〜７０Ｃのいずれか）を選出する（ステップＳ５）。
【００３２】
当該処理要求に対してデータベースサーバ７０から送信された処理結果が、該当のデータが１件以上あることを示す場合（ステップＳ４：1件以上）、コーディネータサーバ６０は、当該処理結果を送信したデータベースサーバ７０（データベースサーバ７０Ａ〜７０Ｃのいずれか）を選出する。そして、コーディネータサーバ６０は、選出したデータベースサーバ７０に対して新たなデータの登録を要求する登録要求（登録ＳＱＬ）を発行する（ステップＳ６）。次いで、コーディネータサーバ６０は、上述のロックを解放する（ステップＳ７）。
【００３３】
ここで、分散データベースにおいてデータベース７００Ｄを有するデータベースサーバ７０Ｄを１つ増設した後の状態においてデータを登録する場合について説明する。この場合、割当変更部６０３は、データの登録時に用いるハッシュ関数及びパラメータを変更し、変更前のハッシュ関数及びパラメータを示す割当履歴情報と、変更後のハッシュ関数及びパラメータを示す割当情報とを割当履歴管理部６０１に記憶させる。尚、ここでは、変更前のデータの登録時に用いられるハッシュ関数は、上述のハッシュ関数１[文書ＩＤ]と同様であるが、ハッシュ関数１[文書ＩＤ]で用いられるハッシュサイズが、「４」に変更されるものとする。従って、割当履歴管理部６０１には、ハッシュ関数１[文書ＩＤ]と上述のハッシュサイズ「３」とを示す割当履歴情報（割当履歴情報１とする）と、ハッシュ関数１[文書ＩＤ]とハッシュサイズ「４」とを示す割当情報とが記憶されることになる。
【００３４】
図５は、分散データベースにおいてデータベースサーバ７０Ｄを１つ増設した後の状態を概念的に示す図である。このような状態において、図６に示されるような新たなデータＤＴ１０の登録を要求する登録要求をコーディネータサーバ６０がクライアント５０から受信した場合について説明する。この場合、コーディネータサーバ６０は、上述のステップＳ１〜Ｓ２を行って、割当履歴情報１に示されるハッシュ関数１[文書ＩＤ]及びハッシュサイズ「３」を用いた演算処理と、割当情報によって示されるハッシュ関数１[文書ＩＤ] ハッシュサイズ「４」を用いた演算処理とを各々行う。そして、コーディネータサーバ６０は、割当履歴情報１を用いた演算処理の結果ハッシュ値「０」を得て、割当情報を用いた演算処理の結果ハッシュ値「２」を得る。
【００３５】
ハッシュ値はデータベースサーバ７０と１対１対応しているから、ステップＳ３では、コーディネータサーバ６０は、ハッシュ値「０」に対応するデータベースサーバ７０Ａと、ハッシュ値「２」に対応するデータベースサーバ７０Ｃとを割り出す。次いで、コーディネータサーバ６０は、割り出したデータベースサーバ７０Ａ，７０Ｃに対して新たなデータの文書ＩＤの値が同一のデータの検索を要求する検索要求（ＳＱＬ）を発行する。そのＳＱＬは例えば以下のように表される。
【００３６】
SELECT 文書ID
FROM 技術レポート
WHERE 文書ID=”S01”
【００３７】
図７は、コーディネータサーバ６０からデータベースサーバ７０Ａ，７０Ｃに対して検索要求が発行された様子を例示する図である。この検索要求に応じてデータベースサーバ７０Ａが処理を実行すると、該当のデータがデータベース７００Ａに２件記憶されているため、データベースサーバ７０Ａは、該当のデータが２件存在することを示す処理結果をコーディネータサーバ６０に送信する。同様に、検索要求に応じてデータベースサーバ７０Ｃが処理を実行すると、該当のデータがデータベース７００Ｃには記憶されていないため、データベースサーバ７０Ｃは、該当のデータが存在しないことを示す処理結果をコーディネータサーバ６０に送信する。
【００３８】
一方、コーディネータサーバ６０は、データベースサーバ７０Ａ，７０Ｃから当該処理結果を受信すると、データベースサーバ７０Ａから受信した処理結果が該当のデータが１件以上存在することを示すものであるから、ステップＳ６では、登録先のデータベースサーバとしてデータベースサーバ７０Ａを選出する。そして、コーディネータサーバ６０は、データベースサーバ７０Ａに対して新たなデータの登録を要求する登録要求（登録ＳＱＬ）を発行する。この結果、図６に示されるデータがデータベース７００Ａに登録されることになる。
【００３９】
次に、図５の状態で、図８に示されるような新たなデータＤＴ２０の登録を要求する登録要求をコーディネータサーバ６０がクライアント５０から受信した場合について説明する。コーディネータサーバ６０は、上述のステップＳ１〜Ｓ２を行って、割当履歴情報１によって示されるハッシュ関数１[文書ＩＤ]及びハッシュサイズ「３」を用いた演算処理と、割当情報によって示されるハッシュ関数１[文書ＩＤ] 及びハッシュサイズ「４」を用いた演算処理とを各々行う。そして、コーディネータサーバ６０は、割当履歴情報１を用いた演算処理の結果ハッシュ値「３」を得て、割当情報を用いた演算処理の結果ハッシュ値「３」を得る。
【００４０】
ステップＳ３で割り出されるデータベースサーバは、ハッシュ値「３」に対応するデータベースサーバ７０Ｄとなる。次いで、コーディネータサーバ６０は、割り出したデータベースサーバ７０Ｄに対して新たなデータの文書ＩＤの値が同一のデータの検索を要求する検索要求（ＳＱＬ）を発行する。そのＳＱＬは例えば以下のように表される。
【００４１】
SELECT 文書ID
FROM 技術レポート
WHERE 文書ID=”S19”
【００４２】
図９は、コーディネータサーバ６０からデータベースサーバ７０Ｄに対して検索要求が発行された様子を例示する図である。この検索要求に応じてデータベースサーバ７０Ｄが処理を実行すると、該当のデータがデータベース７００Ｄには記憶されていないため、データベースサーバ７０Ｄは、該当のデータが存在しないことを示す処理結果をコーディネータサーバ６０に送信する。
【００４３】
一方、コーディネータサーバ６０は、データベースサーバ７０Ｄから当該処理結果を受信すると、データベースサーバ７０Ｄから受信した処理結果が該当のデータが１件も存在しないことを示すものであるから、ステップＳ５では、最新のハッシュ関数を用いた演算処理を行ってハッシュ値を得て、データの登録先のデータベースサーバ７０を選出する。ここでは、コーディネータサーバ６０は、上述の割当情報を用いたハッシュ関数１[文書ＩＤ]及びハッシュ値「４」による演算処理を行い、その結果ハッシュ値「３」を得る。当該ハッシュ値に対応するのはデータベースサーバ７０Ｄである。このため、データベースサーバ７０Ｄが選出される。そして、コーディネータサーバ６０は、選出したデータベースサーバ７０Ｄに対して新たなデータの登録を要求する登録要求（登録ＳＱＬ）を発行する。この結果、図８に示されるデータＤＴ２０がデータベース７００Ｄに登録されることになる。
【００４４】
図１０は、図６に示したデータＤＴ１０及び図８に示したデータＤＴ２０が登録され、その後、数件のデータが登録された状態を示す図である。このような構成によれば、各データベース７００Ａ〜７００Ｄが各々記憶しているデータの合計サイズの均衡を図ることが可能になる。このように、均衡したデータ分割を行うことができることにより、分散化の効果を発揮させることができる。即ち、データベースに登録されるデータの傾向の変化により、各合計サイズは不均衡になる可能性があり、従来、事前に決められたデータ分割ルールではそれを回避することが困難であった。本実施の形態においては、管理ツールを用いてデータベースサーバが増設される操作がなされ、データの登録時に用いるハッシュ関数及びパラメータが変更されると、コーディネータサーバ６０が有する割当履歴管理部６０１が、ハッシュ関数及びパラメータの履歴を記憶する。そして、コーディネータサーバ６０がハッシュ関数及びパラメータの履歴及び最新のハッシュ関数及びパラメータを用いて新たなデータの登録先のデータベースを選出することにより、既に記憶されているデータを移動させることなく且つ当該データの傾向に従いつつ、均衡したデータ分割を行うことができる。従って、処理負担を抑えて、データベースに記憶されるデータの不均衡を回避可能である。
【００４５】
次に、分散データベース５１においてデータを検索する場合について説明する。まず、図３に示されるように、データベース７００Ａ〜７００Ｃにデータが分散されている場合について説明する。図１１は、データの検索を要求する検索要求（ＳＱＬ）を例示する図である。同図に示されるＳＱＬは、技術レポートの各データについて、同じ文書ＩＤで集約して(GROUP BY)、その件数(COUNT)を文書IDとともに返す(SELECT)ことを要求している。図１２は、図１１に示したＳＱＬを用いてデータを検索する処理のイメージを例示する図である。コーディネータサーバ６０は、このような検索要求（ＳＱＬ）をクライアント５０から受信すると、ＳＱＬの構文を解析し、解析の結果に基づいて、データの検索をデータベースサーバ７０に要求するためのコードを適宜生成し、生成したコードをデータベースサーバ７０に送信する。そして、コーディネータサーバ６０は、データベースサーバ７０でコードを実行した結果得られたデータを処理結果としてデータベースサーバ７０から受信すると、これらのデータを適宜加工して、その結果のデータを生成し、これを処理結果としてクライアント５０に送信する。
【００４６】
図１１に示されるＳＱＬでは、文書ＩＤで集約(GROUP BY)することが要求されており、一方、分散データベース５１にあるデータベース７００Ａ〜７００Ｄに記憶されているデータは文書ＩＤでクラスタリングされている。このため、コーディネータサーバ６０は、図１１に示されるＳＱＬを解析した結果、図１２に示されるように、当該ＳＱＬをコードとしてそのままデータベースサーバ７０に送信して、その結果得られる処理結果のデータＤＴ３０〜ＤＴ３２をマージするだけで、クライアント５０に送信する処理結果のデータＤＴ３３を生成することができる。
【００４７】
次に、図１０に示されるようにデータベースサーバ７０Ｄが増設された状態において、分散データベースにおいてデータを検索する場合について説明する。図１３は、図１０に示される状態において、図１１に示したＳＱＬを用いてデータを検索する処理のイメージを例示する図である。このような状態においても、コーディネータサーバ６０は、上述と同様にして、図１１に示されるＳＱＬをデータベースサーバ７０に送信して、その結果得られる処理結果のデータをマージするだけで、クライアント５０に送信する処理結果のデータを生成することができる。
【００４８】
以上のような構成によれば、データ登録時に登録対象のデータと同じ文書ＩＤのデータを検索する処理を１度行うため、データの登録時のオーバヘッドは多少増えるものの、対象カラムでの自然結合を含む検索を高速化することができると共に、データベースの分散化の効果を十分に発揮させることができる。
【００４９】
[変形例]
なお、本発明は前記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、前記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。また、以下に例示するような種々の変形が可能である。
【００５０】
＜変形例１＞
上述した実施の形態において、コーディネータサーバ６０で実行される各種プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また当該各種プログラムを、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成しても良い。この場合には、プログラムは、コーディネータサーバ６０においてＣＰＵが上記記録媒体から読み出して実行することにより主記憶装置（例えばＲＡＭ）上にロードされ、上記機能的構成において説明した要求受信部６００と、要求処理部６０２と、結果送信部６０４とが主記憶装置上に生成される。
【００５１】
＜変形例２＞
上述した実施の形態においては、データ分割の手法として、ハッシュ分割を用いるようにしたが、これに限らず、キーレンジ分割の手法を用いても良い。この場合、割当履歴管理部６０１は、ハッシュ関数の履歴ではなく、キーレンジの履歴として、過去の登録時に用いられたキーレンジを示す情報として、対象カラムに対するレンジを示す割当履歴情報と、現在の登録時に用いられるキーレンジを示す情報として、対象カラムに対する最新のレンジを示す情報とを割当情報として記憶するようにすれば良い。
【００５２】
また、データベースに登録される対象のデータは上述のものに限らず、データが有する各カラムも上述のものに限らない。例えば、日付、所属などのカラムがあっても良い。また、対象カラムとして設定されるカラムも上述のものに限らない。
【００５３】
例えば、対象カラムが日付である場合、日付の範囲を対象カラムに対するレンジを示す割当情報及び割当履歴情報として取り扱い、各レンジに各データベース７００を対応付けるようにすれば良い。そして、要求処理部６０２は、新たなデータの登録時に、割当履歴情報及び割当情報によって各々示される日付の範囲に対応するデータベース７００を割り出し、割り出したデータベースサーバ７０に対して当該データの有する日付の値が同一の日付のデータの検索を要求して、上述と同様にして、検索の結果該当したデータの件数に応じて、登録先のデータベース７００を選出するようにすれば良い。
【００５４】
＜変形例３＞
上述の実施の形態においては、変更後（最新）のハッシュ関数及びパラメータを示す割当情報も、割当履歴情報と同様に割当履歴管理部６０１に記憶されるものとした。しかし、割当情報は、外部記憶装置において割当履歴管理部６０１とは異なる記憶領域や他の記憶装置に別途記憶するようにしても良い。
【００５５】
また、上述の実施の形態においては、割当変更部６０３は、ハッシュ関数のパラメータのみを変更するようにしたが、これに限らず、ハッシュ関数自体を変更するようにしても良いし、ハッシュ関数及びパラメータの両方を変更するようにしても良い。
【００５６】
＜変形例４＞
上述した実施の形態においては、コーディネータサーバ６０は１つであるとしたが、複数あっても良く、この場合、複数のコーディネータサーバで割当履歴情報を共有するようにすれば良い。
【図面の簡単な説明】
【００５７】
【図１】本実施の形態にかかる分散データベースシステムの構成を例示する図である。
【図２】同実施の形態において取り扱うデータを例示する図である。
【図３】同実施の形態にかかるテーブルＴＢを複数のデータベース７００Ａ〜７００Ｃに重複無しにデータ単位で分割した例を説明する図である。
【図４】同実施の形態にかかるコーディネータサーバ６０の行うデータ登録処理の手順を示すフローチャートである。
【図５】同実施の形態にかかる分散データベースにおいてデータベースサーバ７０Ｄを１つ増設した後の状態を概念的に示す図である
【図６】登録対象の新たなデータを例示する図である。
【図７】同実施の形態にかかるコーディネータサーバ６０からデータベースサーバ７０Ａ，７０Ｃに対して検索要求が発行された様子を例示する図である。
【図８】登録対象の新たなデータを例示する図である。
【図９】同実施の形態にかかるコーディネータサーバ６０からデータベースサーバ７０Ｄに対して検索要求が発行された様子を例示する図である。
【図１０】図６に示したデータＤＴ１０及び図８に示したデータＤＴ２０が登録され、その後、数件のデータが登録された状態を示す図である。
【図１１】データの検索を要求する検索要求（ＳＱＬ）を例示する図である。
【図１２】同実施の形態にかかる図１１に示したＳＱＬを用いてデータを検索する処理のイメージを例示する図である。
【図１３】同実施の形態にかかる図１０に示される状態において、図１１に示したＳＱＬを用いてデータを検索する処理のイメージを例示する図である。
【符号の説明】
【００５８】
５０    クライアント
５１    分散データベース
５２    ネットワーク
６０    コーディネータサーバ
７０，７０Ａ，７０Ｂ，７０Ｃ，７０Ｄ  データベースサーバ
６００  要求受信部
６０１  割当履歴管理部
６０２  要求処理部
６０３  割当変更部
６０４  結果送信部
７００，７００Ａ，７００Ｂ，７００Ｃ，７００Ｄ  データベース
【図１】
0005203733.tif 000003
【図２】
0005203733.tif 000004
【図３】
0005203733.tif 000005
【図４】
0005203733.tif 000006
【図５】
0005203733.tif 000007
【図６】
0005203733.tif 000008
【図７】
0005203733.tif 000009
【図８】
0005203733.tif 000010
【図９】
0005203733.tif 000011
【図１０】
0005203733.tif 000012
【図１１】
0005203733.tif 000013
【図１２】
0005203733.tif 000014
【図１３】
0005203733.tif 000015