(57)【要約】【課題】分散データベースシステムでのテーブル等結合処理において、データベース装置の処理負荷を均等に分散する技術を提供する。【解決手段】処理負荷の大きいデータベース装置１０Ａと処理負荷の小さいデータベース装置１０Ｂとがある場合、処理負荷情報を等結合相手のデータベース装置１０に送信して（ステップ（ｂ）（ｄ））、処理負荷の小さいデータベース装置１０Ｂには、結合対象カラム値の個数を多くし、処理負荷の大きいデータベース装置１０Ａには、結合対象カラム値の個数を少なくする。このようにして、データベース装置１０間の処理負荷を均等に分散する。【選択図】 図１
2010271998.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも２つのデータベース装置がネットワークを介して通信可能に接続され、２つの前記データベース装置が記憶するテーブルを等結合するために、双方の前記テーブルの指定されたカラムのカラム値が等しいレコードを抽出する前記データベース装置において用いられるデータベース管理方法であって、
前記データベース装置は、
処理部と、前記テーブルと自身の処理負荷の状態と他方のデータベース装置の処理負荷の状態とを記憶する記憶部とを備え、
（１）一方の前記データベース装置の処理部が、
前記一方のデータベース装置の記憶部から前記自身の処理負荷の状態と前記他方のデータベース装置の処理負荷の状態とを読み出して、該自身の処理負荷と該他方のデータベース装置の処理負荷とを比較し、該他方のデータベース装置の処理負荷が該自身の処理負荷より大きくなるにしたがい、前記他方のデータベース装置に送信するカラム値の個数を少なくなるように設定し、その少なく設定された個数のカラム値を自身のテーブルから読み出して、その自身のテーブルから読み出したカラム値および前記自身の処理負荷の状態を前記他方のデータベース装置に送信し、
（２）前記他方のデータベース装置の処理部が、受信した処理負荷の状態を自身の記憶部に記憶し、受信したカラム値を用いて、自身のテーブルを参照して、該受信したカラム値に等しいカラム値を含むレコードを抽出し、
（３）前記一方のデータベース装置および前記他方のデータベース装置の間で、どちらかの前記送信するカラム値の個数が０になるまで、（１）および（２）を交代で繰り返す
ことを特徴とするデータベース管理方法。
【請求項２】
前記記憶部は、前記送信するカラム値の個数のデフォルト値を記憶し、
前記処理部は、前記処理負荷を、ＣＰＵ使用率、ＣＰＵの動作周波数、メモリ使用率、メモリ空き容量の逆数のいずれか一つまたはそれらの組み合わせを変数として算出した値とし、その算出した値と前記デフォルト値とを用いて、前記送信するカラム値の個数を算出する
ことを特徴とする請求項１に記載のデータベース管理方法。
【請求項３】
前記処理部は、前記他方のデータベース装置の処理負荷の状態を前記記憶部から読み出せない場合、前記送信するカラム値の個数を、前記デフォルト値に設定する
ことを特徴とする請求項２に記載のデータベース管理方法。
【請求項４】
他のデータベース装置とネットワークを介して通信可能に接続され、前記他のデータベース装置が記憶するテーブルの指定されたカラムのカラム値と、自身の記憶するテーブルの指定されたカラムのカラム値とを等結合するために、双方のカラム値が等しいレコードを抽出するデータベース装置であって、
前記データベース装置は、
自身のテーブルと自身の処理負荷の状態と前記他のデータベース装置の処理負荷の状態とを記憶する記憶部と処理部とを備え、
前記処理部が、
前記記憶部から自身の処理負荷の状態と前記他のデータベース装置の処理負荷の状態とを読み出して、該自身の処理負荷と該他のデータベース装置の処理負荷とを比較し、該他のデータベース装置の処理負荷が該自身の処理負荷より大きくなるにしたがい、前記他のデータベース装置に送信するカラム値の個数を少なくなるように設定し、その少なく設定された個数のカラム値を前記自身のテーブルから読み出して、前記自身のテーブルから読み出したカラム値および自身の処理負荷の状態を前記他のデータベース装置に送信し、
前記他のデータベース装置から受信したカラム値を用いて、前記自身のテーブルを参照して、該受信したカラム値に等しいカラム値を含むレコードを抽出する
ことを特徴とするデータベース装置。
【請求項５】
請求項１ないし請求項３のいずれか一項に記載のデータベース管理方法を、コンピュータとしての前記データベース装置に実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散したデータベース装置に格納されているテーブルを等結合する処理において、データベース装置の処理負荷をできるだけ均等にする技術に関する。
【背景技術】
【０００２】
データベース技術分野におけるテーブル（表）の等結合処理とは、図７に示すように、入荷価格テーブルの商品名のカラム（列）と受注管理テーブルの商品名のカラム（列）とを結合対象カラムとして指定し、それらのカラム値が等しくなるカラム値を含むレコード（行）を抽出して１つのレコードとして結合し、その結合したレコードの集合である等結合結果テーブルを作成する処理のことである。図７に示す等結合結果テーブルでは、等しくなるカラム値（結合可能カラム値）として、きゅうり、なす、ピーマン、かぼちゃが抽出され、そのカラム値ごとに入荷価格テーブルおよび受注管理テーブルのレコードが結合されている。
【０００３】
従来技術として、ネットワーク上に分散された２つのデータベース装置のテーブル間で等結合処理を行う方法として、セミジョイン法がある（非特許文献１）。ここで、セミジョイン法について、図８〜図１０を用いて説明する。図８に示すように、データベース装置Ａ（８１）とデータベース装置Ｂ（８２）とが、ネットワーク８６によって通信可能に接続されている。データベース装置Ａ（８１）にはテーブルＡ１が格納され、データベース装置Ｂ（８２）にはテーブルＢ１が格納されている。なお、カラム値は、説明を簡単にするために、数字で示しているが、数字に限られなくとも良い。そして、結合対象カラムとして、テーブルＡ１のカラムＪと、テーブルＢ１のカラムＬとが指定されたとする。
【０００４】
次に、図９に示すように、結合対象カラムである、データベース装置Ａ（８１）のテーブルＡ１のカラムＪが、結合対象カラムＪ（９１）として、テータベース装置Ｂ（８２）へ送信され、記憶される。そして、図１０に示すように、データベース装置Ｂ（８２）において、テーブルＢ１から結合対象カラムＪ（９１）のカラム値と等しくなるカラムＬのカラム値（「１３」および「３」）が結合可能カラム値として抽出される。そのテーブルＢ１から抽出された結合可能カラム値を含むレコードが、結合可能レコードとして、データベース装置Ａ（８１）に送信される。なお、送信された結合可能レコードは、中間テーブル（９２）として、データベース装置Ａ（８１）に記憶される。最後に、データベース装置Ａ（８１）は、テーブルＡ１のカラムＪのカラム値と、中間テーブル９２のカラムＬのカラム値とが等しいレコード同士を結合して、結合結果テーブルＲを作成する。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】西川陽一著，“図解・標準  最新データベース技術  マスタリングハンドブック”，株式会社秀和システム，2002年11月11日，p.381-382
【発明の概要】
【発明が解決しようとする課題】
【０００６】
セミジョイン法の等結合処理では、データベース装置の処理負荷（特に処理にかかる時間の長さ）の大半を占めるのは、図１０に示す、送信された結合対象カラムＪ（９１）のカラム値と、データベース装置Ｂ（８２）のテーブルＢ１のカラム値との比較処理である。すなわち、セミジョイン法では、この比較処理が片方のデータベース装置（図１０では、データベース装置Ｂ（８２））だけで行われるため、処理負荷が偏るという問題がある。
【０００７】
また、セミジョイン法では、図１０に示すように、データベース装置Ａ（８１），Ｂ（８２）間で送受信される結合対象カラムＪ（９１）や中間テーブル（９２）が一時的に記憶される。そのため、レコード数が膨大な大規模テーブル間の等結合処理を実行する場合、一時的に必要となるメモリ容量が大幅に必要になる。したがって、一時的にメモリ容量が足りなくなった場合には、ＨＤＤ（Hard Disc Drive）とのスワップが発生し、極端に処理時間が掛かるようになる、すなわち、一時的にメモリ容量が足りなくなった方のデータベース装置の処理負荷が大幅に増加するという問題が起きる。
【０００８】
そこで、本発明の課題は、前記した問題を解決するために、分散したデータベース装置に格納されているテーブルを等結合する処理において、データベース装置の処理負荷（特に処理にかかる時間の長さ）をできるだけ均等にする技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
前記課題を解決するために、請求項１に記載の発明は、少なくとも２つのデータベース装置がネットワークを介して通信可能に接続され、２つのデータベース装置が記憶するテーブルを等結合するために、双方のテーブルの指定されたカラムのカラム値が等しいレコードを抽出するデータベース装置において用いられるデータベース管理方法であって、データベース装置が、処理部と、テーブルと自身の処理負荷の状態と他方のデータベース装置の処理負荷の状態とを記憶する記憶部とを備え、（１）一方のデータベース装置の処理部が、一方のデータベース装置の記憶部から自身の処理負荷の状態と他方のデータベース装置の処理負荷の状態とを読み出して、該自身の処理負荷と該他方のデータベース装置の処理負荷とを比較し、該他方のデータベース装置の処理負荷が該自身の処理負荷より大きくなるにしたがい、他方のデータベース装置に送信するカラム値の個数を少なくなるように設定し、その少なく設定された個数のカラム値を自身のテーブルから読み出して、その自身のテーブルから読み出したカラム値および自身の処理負荷の状態を他方のデータベース装置に送信し、（２）他方のデータベース装置の処理部が、受信した処理負荷の状態を自身の記憶部に記憶し、受信したカラム値を用いて、自身のテーブルを参照して、該受信したカラム値に等しいカラム値を含むレコードを抽出し、（３）一方のデータベース装置および他方のデータベース装置の間で、どちらかの送信するカラム値の個数が０になるまで、（１）および（２）を交代で繰り返すことを特徴とする。
【００１０】
また、請求項４に記載の発明は、他のデータベース装置とネットワークを介して通信可能に接続され、他のデータベース装置が記憶するテーブルの指定されたカラムのカラム値と、自身の記憶するテーブルの指定されたカラムのカラム値とを等結合するために、双方のカラム値が等しいレコードを抽出するデータベース装置であって、データベース装置が、自身のテーブルと自身の処理負荷の状態と他のデータベース装置の処理負荷の状態とを記憶する記憶部と処理部とを備え、処理部が、記憶部から自身の処理負荷の状態と他のデータベース装置の処理負荷の状態とを読み出して、該自身の処理負荷と該他のデータベース装置の処理負荷とを比較し、該他のデータベース装置の処理負荷が該自身の処理負荷より大きくなるにしたがい、他のデータベース装置に送信するカラム値の個数を少なくなるように設定し、その少なく設定された個数のカラム値を自身のテーブルから読み出して、自身のテーブルから読み出したカラム値および自身の処理負荷の状態を他のデータベース装置に送信し、他のデータベース装置から受信したカラム値を用いて、自身のテーブルを参照して、該受信したカラム値に等しいカラム値を含むレコードを抽出することを特徴とする。
【００１１】
このような構成によれば、データベース装置は、自身の処理負荷と他方の（または他の）データベース装置の処理負荷とを比較して、処理負荷が大きくなるにしたがい、カラム値の送信個数を少なくなるように送信して、双方に等しいカラム値（結合可能カラム値）を抽出する処理を実行する。そのため、処理負荷を均等に分散することができる。また、データベース装置は、データベース装置間で交互に最新の処理負荷の状態を送信するため、タイムリーに処理負荷をカラム値の送信個数によって調整することができる。
【００１２】
また、請求項２に記載の発明は、請求項１に記載のデータベース管理方法において、記憶部が、送信するカラム値の個数のデフォルト値を記憶し、処理部が、処理負荷を、ＣＰＵ(Central Processing Unit)使用率、ＣＰＵの動作周波数、メモリ使用率、メモリ空き容量の逆数のいずれか一つまたはそれらの組み合わせを変数として算出した値とし、その算出した値とデフォルト値とを用いて、送信するカラム値の個数を算出することを特徴とする。
【００１３】
このような構成によれば、処理負荷の大きさを物理量によって表現できるため、送信するカラム値の個数を定量的に決定することができる。
【００１４】
また、請求項３に記載の発明は、請求項２に記載のデータベース管理方法において、処理部が、他方のデータベース装置の処理負荷の状態を記憶部から読み出せない場合、送信するカラム値の個数を、デフォルト値に設定することを特徴とする。
【００１５】
このような構成によれば、他のデータベース装置の処理負荷の状態を読み出せない場合にも、送信するカラム値の個数を決定することができる。
【００１６】
請求項５に記載の発明は、請求項１ないし請求項３のいずれか一項に記載のデータベース管理方法を、コンピュータとしてのデータベース装置に実行させるためのプログラムとした。
【００１７】
このようなプログラムをインストールされたコンピュータは、このプログラムに基づいた機能を実現することができる。
【発明の効果】
【００１８】
本発明によれば、分散したデータベース装置に格納されているテーブルを等結合する処理において、データベース装置の処理負荷を均等にする技術を提供することができる。
【図面の簡単な説明】
【００１９】
【図１】本実施形態の概要を示す図である。
【図２】クライアント装置およびデータベース装置の各構成および機能を示す図である。
【図３】クライアント装置の処理の流れを示す図である。
【図４】データベース装置の処理の流れを示す図である。
【図５】データベース装置の処理の流れを示す図である。
【図６】ステップＳ４０３，Ｓ４１３の処理の詳細な流れを示す図である。
【図７】等結合処理について示す図である。
【図８】セミジョイン法について示す図である。
【図９】セミジョイン法について示す図である。
【図１０】セミジョイン法について示す図である。
【発明を実施するための形態】
【００２０】
次に、本発明を実施するための形態（以降「本実施形態」と称す）について、適宜図面を参照しながら詳細に説明する。
【００２１】
≪概要≫
本実施形態の概要について、図１を用いて説明する。図１に示す分散データベースシステムでは、データベース装置１０Ａ，１０Ｂとクライアント装置２０とがネットワーク６０を介して相互に通信可能に接続されている。仮に、データベース装置１０Ａの処理負荷が相対的に大きく、データベース装置１０Ｂの処理負荷が相対的に小さいものとする。そして、クライアント装置２０から、データベース装置１０ＡのテーブルＡ１のカラムＪと、データベース装置１０ＢのテーブルＢ１のカラムＬとを結合対象カラムとして、等結合処理を実行する要求（等結合依頼）を、データベース装置１０Ａが受ける場合を例として説明する。
【００２２】
まず、ステップ（ａ）では、クライアント装置２０が、データベース装置１０Ａに、等結合依頼を送信する。ステップ（ｂ）では、まず、データベース装置１０Ａは、自身のＣＰＵ使用率等の処理負荷および等結合相手（データベース装置１０Ｂ）の処理負荷を読み出す。ただし、等結合相手の処理負荷は、等結合相手の処理負荷を示す処理負荷情報を受信した後に、各データベース装置１０の図示しない記憶部に格納されているものとする。そして、データベース装置１０Ａは、自身および等結合相手（データベース装置１０Ｂ）の処理負荷に応じた個数のカラムＪのカラム値と、結合可能カラム値と、自身の処理負荷を示す処理負荷情報とを等結合相手（データベース装置１０Ｂ）に送信する。図１では、送信した結合対象カラムＪ（３０）のカラム値の個数は３つの場合を示している。なお、結合可能カラム値については、ステップ（ｃ）のところで、説明する。
【００２３】
ステップ（ｃ）では、データベース装置１０Ｂは、受信した結合対象カラムＪ（３０）のカラム値と、テーブルＢ１のカラムＬのカラム値とを比較し、双方が等しいカラム値（結合可能カラム値）「３」を抽出する。ステップ（ｄ）では、データベース装置１０Ｂは、自身の処理負荷および等結合相手（データベース装置１０Ａ）の処理負荷を読み出して、その処理負荷に応じた個数のカラムＬのカラム値と、結合可能カラム値と、自身の処理負荷情報とを等結合相手であるデータベース装置１０Ａに送信する。図１では、データベース装置１０Ａは、処理負荷が相対的に大きいため、データベース装置１０Ｂから受信した結合対象カラムＬ（５０）の個数は１つの場合を示している。すなわち、データベース装置１０Ａの処理負荷がデータベース装置１０Ｂの処理負荷より相対的に大きいとき、データベース装置１０Ｂが送信するカラム値の個数は少なくなる。また、データベース装置１０Ｂが送信する結合可能カラム値４０は、ステップ（ｃ）の比較でカラム値が等しい「３」である。
【００２４】
ステップ（ｅ）（ｆ）では、各データベース装置１０Ａ，１０Ｂは、結合可能カラム値「３」を含むレコードをそれぞれのテーブルＡ１，Ｂ１から読み出し、その結合可能カラム値を含むレコード（結合可能レコード）を、クライアント装置２０に送信する。ステップ（ｇ）では、データベース装置１０Ａは、受信した結合対象カラムＬ（５０）のカラム値「１３」について、テーブルＡ１のカラムＪのカラム値と比較を行う。そして、各データベース装置１０は、ステップ（ｂ）〜（ｇ）を繰り返し、送信する結合対象カラムのカラム値が無くなった場合に、等結合処理を終了する。
【００２５】
前記したように、処理負荷の相対的に小さいデータベース装置１０Ｂには、データベース装置１０Ａから送信する結合対象カラム値の個数を多くし、処理負荷の相対的に大きいデータベース装置１０Ａには、データベース装置１０Ｂから送信する結合対象カラム値の個数を少なくする。このように、データベース装置１０の処理負荷に応じて送信する結合対象カラム値の個数を調整することによって、データベース装置１０の処理負荷をほぼ均等に分散することが可能となる。すなわち、従来技術のセミジョイン法のように処理負荷が片方のデータベース装置１０に偏ることを防ぐことが可能である。
【００２６】
≪クライアント装置≫
次に、クライアント装置２０の構成および機能について、図２を用いて説明する。クライアント装置２０は、ネットワーク６０を介して、複数のデータベース装置１０と通信可能に接続されている。なお、図２には、クライアント装置２０は、１つしか記載されていないが、２以上であっても構わない。クライアント装置２０は、処理部２１と記憶部２２とを備える。処理部２１は、コンピュータのＣＰＵとメインメモリとで構成され、記憶部２２に格納されているアプリケーションプログラムをメインメモリに展開して、各機能を具現化する。記憶部２２は、各種プログラムや処理部２１の演算結果を記憶する。処理部２１の機能は、図２に示すように、等結合処理要求受付部２１１、等結合処理要求送信部２１２、等結合処理結果受信部２１３、および等結合処理結果出力部２１４を備える。
【００２７】
等結合処理要求受付部２１１は、等結合処理の対象として指定するデータベース装置名、テーブル名、および結合対象カラム名を示す結合対象データベース装置情報と、結合対象カラム値の送信個数のデフォルト値ｎとの入力を受け付ける。
【００２８】
等結合処理要求送信部２１２は、等結合処理要求受付部２１１から結合対象データベース装置情報と結合対象カラム値の送信個数のデフォルト値ｎとを取得し、それらを等結合依頼情報として一つにまとめ、データベース装置１０Ａ，１０Ｂへそれぞれ送信する。その後、等結合処理要求送信部２１２は、データベース装置１０Ａ，１０Ｂのどちらかを等結合処理の開始起点に指定し、等結合処理の開始指示を示す等結合処理開始指示を、その開始起点となるデータベース装置１０に送信する。
【００２９】
等結合処理結果受信部２１３は、各データベース装置１０から結合可能レコードを逐次受信し、等しいカラム値を含む結合可能レコード同士を結合して生成した結合結果レコードを記憶部２２に記憶する。なお、結合可能レコードとは、前記したように、結合対象カラムのカラム値が等しいカラム値（結合可能カラム値）を含むレコードのことである。また、等結合処理結果受信部２１３は、データベース装置１０から等結合処理完了通知を受信した場合、結合結果レコードを等結合処理結果出力部２１４へ出力する。なお、等結合処理完了通知とは、どちらかのデータベース装置１０のテーブルの結合対象カラムのカラム値がすべて等結合処理済みになった場合に、等結合処理が完了したこと通知する情報である。
【００３０】
等結合処理結果出力部２１４は、結合結果レコードをまとめて結合結果テーブルＲ（図１参照）を生成し、その結合結果テーブルＲを図示しない出力装置（ディスプレイやファイル等）に出力する。
【００３１】
≪データベース装置≫
次に、データベース装置１０の構成および機能について、図２を用いて説明する。データベース装置１０Ａ，１０Ｂ（１０）は、ネットワーク６０を介して、クライアント装置２０と通信可能に接続されている。各データベース装置１０Ａ，１０Ｂは、同じ構成であるので、データベース装置１０Ａ（１０）を代表させて、詳細な説明を行う。なお、図２には、データベース装置１０は、２つしか記載されていないが、３以上であっても構わない。
【００３２】
データベース装置１０は、処理部１１と記憶部１２とを備える。処理部１１は、コンピュータのＣＰＵとメインメモリとで構成され、記憶部１２に格納されているアプリケーションプログラムをメインメモリに展開して、各機能を具現化する。記憶部１２は、各種プログラムや処理部１１の演算結果を記憶する。
【００３３】
処理部１１の機能は、図２に示すように、等結合依頼受信部１１１、カラム値ブロック作成部１１２、カラム値ブロック送信部１１３、カラム値ブロック受信部１１４、カラム値ブロック解析部１１５、結合可能レコード検索部１１６、結合可能レコード送信部１１７、結合対象カラム値個数判定部１１８、ソートマージ結合処理部１１９、結合完了通知送信部１２０、ＣＰＵ使用率取得部１２１、およびテーブル管理部１２２である。
【００３４】
等結合依頼受信部１１１は、クライアント装置２０から、結合対象データベース装置情報および結合対象カラム値の送信個数のデフォルト値ｎを示す等結合依頼情報を受信する。この処理は、例えば、図１のステップ（ａ）に示す等結合依頼をデータベース装置１０Ａが受信することに相当する。そして、等結合依頼受信部１１１は、自身の結合対象データベース装置情報のうち、テーブル名および結合対象カラム名を結合可能レコード検索部１１６およびソートマージ結合処理部１１９へ出力する。また、等結合依頼受信部１１１は、結合対象カラム値の送信個数のデフォルト値ｎをカラム値ブロック作成部１１２へ転出する。また、等結合依頼受信部１１１は、クライアント装置２０から、等結合処理開始指示を受信した場合、カラム値ブロック作成部１１２へ、カラム値ブロックを作成する指示であるカラム値ブロック作成指示を通知する。なお、カラム値ブロックについては、後記する。
【００３５】
カラム値ブロック作成部１１２は、等結合依頼受信部１１１から受信した結合対象カラム値の送信個数のデフォルト値ｎをメインメモリに記憶する。そして、カラム値ブロック作成部１１２は、等結合依頼受信部１１１からの等結合処理開始指示の受信を契機として、ＣＰＵ使用率取得部１２１がメインメモリに記憶した自身のＣＰＵ使用率ｘおよび等結合相手のＣＰＵ使用率ｙを読み出す。このとき、カラム値ブロック作成部１１２は、等結合相手のＣＰＵ使用率ｙを読み出せた場合には、自身のＣＰＵ使用率ｘおよび等結合相手のＣＰＵ使用率ｙを適用した所定の演算を行って、等結合相手に送信する結合対象カラム値の個数ｑを決定する。ただし、カラム値ブロック作成部１１２は、等結合相手のＣＰＵ使用率ｙを読み出せなかった場合には、ｑ＝ｎ（デフォルト値ｎ）と設定する。そして、カラム値ブロック作成部１１２は、記憶部１２に記憶されているテーブルから、ｑ個の結合対象カラム値を取得する。
【００３６】
なお、ｑ個の結合対象カラム値を取得する方法は、例えば、テーブルのレコードの読み出し位置を、テーブル管理部１２２によって制御されるレコード位置ポインタを用いて設定し、レコード位置ポインタが設定されているレコードのカラムに対して、読み出すことができるものとする。ｑ個の結合対象カラム値を取得する過程の具体例は、図１に示すデータベース装置１０ＡのテーブルＡ１のカラムＪに付されている破線で囲まれたカラム値を取得することに相当する。
【００３７】
また、カラム値ブロック作成部１１２は、ソートマージ結合処理部１１９から、結合可能カラム値を取得する。なお、取得した結合可能カラム値をｐ個とする。そして、カラム値ブロック作成部１１２は、ｑ個の結合対象カラム値、ｐ個の結合可能カラム値、および自身のＣＰＵ使用率ｘを一つのカラム値ブロックに格納して、カラム値ブロック送信部１１３へ出力する。なお、ｑ≧０，ｐ≧０，ｘ≧０，ｙ≧０である。
【００３８】
カラム値ブロック送信部１１３は、カラム値ブロック作成部１１２からカラム値ブロックを受信し、等結合依頼受信部１１１から受信した等結合相手のデータベース装置１０に、そのカラム値ブロックを送信する。この送信過程は、例えば、図１のステップ（ｂ）に相当する。
【００３９】
カラム値ブロック受信部１１４は、等結合相手のデータベース装置１０からカラム値ブロックを受信し、カラム値ブロック解析部１１５へ、そのカラム値ブロックを出力する。この受信過程は、例えば、図１のステップ（ｄ）に相当する。
【００４０】
カラム値ブロック解析部１１５は、カラム値ブロック受信部１１４が受信したカラム値ブロックから、ｑ’個の結合対象カラム値、ｐ’個の結合可能カラム値、および等結合相手のＣＰＵ使用率ｙを読み出す。ただし、ｑ’≧０，ｐ’≧０である。なお、以降の説明では、結合対象カラム値の個数ｑおよび結合可能カラム値の個数ｐを表示するとき、動作主体が自身のテーブルから取得したカラム値についてはｑおよびｐと表示し、等結合相手から受信したカラム値についてはｑ’およびｐ’とダッシュを付して区別する。例えば、図１に示すデータベース装置１０Ａでは、カラム値ブロック解析部１１５は、データベース装置１０Ｂから受信した結合対象カラムＬ（５０）のカラム値を１個、結合可能カラム値４０を１個読み出す。また、ｑ’＝０，ｐ’＝０の場合、それぞれのカラム値は読み出されない。そして、カラム値ブロック解析部１１５は、読み出したｑ’個の結合対象カラム値を結合対象カラム個数判定部１１８に出力し、読み出したｐ’個の結合可能カラム値を結合可能レコード検索部１１６へ出力し、読み出した等結合相手のＣＰＵ使用率ｙをＣＰＵ使用率取得部１２１へ出力する。
【００４１】
結合可能レコード検索部１１６は、記憶部１２に記憶されているテーブルを参照して、カラム値ブロック解析部１１５から受信したｐ’個の結合可能カラム値と、テーブルの結合対象カラムのカラム値とを比較する。この比較過程は、例えば、図１のステップ（ｃ）（ｇ）に相当する。そして、結合可能レコード検索部１１６は、結合可能カラム値と等しい結合対象カラムのカラム値を含むレコードを結合可能レコードとして抽出する。その抽出した結合可能レコードの個数をｐ’個とする。そして、結合可能レコード検索部１１６は、逐次、ｐ’個の結合可能レコードを結合可能レコード送信部１１７へ出力する。なお、テーブルを参照する際に、等結合依頼受信部１１１から受信した「テーブル名」および「結合対象カラム名」が用いられる。
【００４２】
結合可能レコード送信部１１７は、結合可能レコード検索部１１６が抽出した、等結合相手のｐ’個の結合可能カラム値と等しい結合対象カラム値を含むレコード（結合可能レコード）を、逐次、クライアント装置２０へ送信する。また、等結合相手のデータベース装置１０の結合可能レコード送信部１１７は、ソートマージ結合処理部１１９によって抽出したｐ個の結合可能レコードを、逐次、クライアント装置２０へ送信する。この送信過程は、例えば、それぞれ図１のステップ（ｆ）、（ｅ）に相当する。
【００４３】
結合対象カラム値個数判定部１１８は、カラム値ブロック解析部１１５からｑ’個の結合対象カラム値を受信し、ｑ’＝０の場合（結合対象カラム値が一つも無い場合）に、結合完了通知送信部１２０に等結合処理の完了を示す等結合処理完了通知を出力する。また、結合対象カラム値個数判定部１１８は、ｑ’＞０の場合、ｑ’個の結合対象カラム値をソートマージ結合処理部１１９へ出力する。
【００４４】
ソートマージ結合処理部１１９は、結合対象カラム値個数判定部１１８から受信したｑ’個の結合対象カラム値と、レコート位置ポインタが設定されているテーブルのレコードの読み出し位置以降の結合対象カラム値とを用いて、ソートマージ結合処理（例えば、「増永良文著，“リレーショナルデータベース入門［新訂版］−データモデル・ＳＱＬ・管理システム−”，株式会社サイエンス社，2003年1月25日，p.227-229」に記載されている）を実行する。なお、テーブルの結合対象カラム値は、予めソートされているものとする。そして、ソートマージ結合処理部１１９は、テーブルを参照して、ｐ個の結合可能カラム値とその結合可能カラム値を含むｐ個の結合可能レコードとを抽出する。この抽出過程は、例えば、図１のステップ（ｃ）に相当する。なお、テーブルを参照する際に、等結合依頼受信部１１１から受信したテーブル名および結合対象カラム名が用いられる。そして、ソートマージ結合処理部１１９は、抽出したｐ個の結合可能レコードを結合可能レコード送信部１１７へ出力する。また、ソートマージ結合処理部１１９は、ｐ個の結合可能カラム値を処理部１１のメインメモリに記憶しておき、カラム値ブロック作成部１１２から取得要求があった場合、そのｐ個の結合可能カラム値を出力する。なお、メインメモリに記憶しておいたｐ個の結合可能カラム値は、カラム値ブロック送信部１１３がカラム値ブロックを送信後に、消去される。
【００４５】
結合完了通知送信部１２０は、結合対象カラム値個数判定部１１８から等結合処理完了通知を受信し、クライアント装置２０へ等結合処理完了通知を送信する。
【００４６】
ＣＰＵ使用率取得部１２１は、カラム値ブロック解析部１１５から受信した等結合相手のＣＰＵ使用率ｙを処理部１１のメインメモリに格納する。そして、ＣＰＵ使用率取得部１２１は、カラム値ブロック作成部１１２からの要求に応じて、等結合相手のＣＰＵ使用率ｙをカラム値ブロック作成部１１２に出力する。なお、メインメモリに記憶しておいた等結合相手のＣＰＵ使用率ｙは、カラム値ブロック送信部１１３がカラム値ブロックを送信後に、消去される。また、ＣＰＵ使用率取得部１２１は、カラム値ブロック作成部１１２からの要求に応じて、自身の直近のＣＰＵ使用率ｘを取得し、カラム値ブロック作成部１１２に出力する。なお、自身のＣＰＵ使用率ｘは、例えば、データベース装置１０がLinux（登録商標）の場合にはtopコマンドやvmstatコマンドによって取得できる。また、取得した自身のＣＰＵ使用率ｘは、メインメモリに格納され、カラム値ブロック送信部１１３がカラム値ブロックを送信後に、消去される。
【００４７】
テーブル管理部１２２は、記憶部１２に記憶しているテーブルを管理する。具体的には、テーブル管理部１２２は、テーブルのレコード位置を指定するために、レコード位置ポインタを管理する。なお、等結合処理の開始前では、このレコード位置ポインタは、テーブルの先頭のレコードに設定されるものとする。
【００４８】
≪クライアント装置の処理≫
次に、クライアント装置２０の処理の流れについて、図３を用いて説明する（適宜図２参照）。ステップＳ３０１では、クライアント装置２０の等結合処理要求受付部２１１が等結合依頼情報を受け付ける。なお、等結合依頼情報には、少なくとも、等結合処理の対象として指定する、データベース装置名、テーブル名、および結合対象カラム名を示す結合対象データベース装置情報と、結合対象カラム値の送信個数のデフォルト値ｎとが含まれている。
【００４９】
ステップＳ３０２では、等結合処理要求送信部２１２が、等結合処理の対象として指定されるデータベース装置１０Ａ，１０Ｂへ、等結合依頼情報を送信する。ステップＳ３０３では、等結合処理要求送信部２１２が、開始起点となるデータベース装置１０へ、等結合処理の開始を指示する等結合処理開始指示を送信する。ステップＳ３０４では、等結合処理結果受信部２１３が、データベース装置１０から結合可能レコードを受信する。
【００５０】
ステップＳ３０５では、等結合処理結果受信部２１３が、データベース装置１０Ａから受信した結合可能レコードと、データベース装置１０Ｂから受信した結合可能レコードとを、結合可能カラム値が等しいレコード同士を結合処理して、結合結果レコードとして処理部２１のメインメモリに記憶する。なお、この結合処理において、クライアント装置２０は、予め等結合依頼情報を受け付けたときに、その等結合依頼情報に含まれる結合対象カラム名を記憶しているので、受信した結合可能レコードの結合可能カラム値を比較することができる。
【００５１】
ステップＳ３０６では、等結合処理結果受信部２１３が、データベース装置１０から等結合処理完了通知を受信したか否かを判定する。そして、データベース装置１０から等結合処理完了通知を受信した場合（ステップＳ３０６でＹｅｓ）、ステップＳ３０７へ進み、等結合処理結果出力部２１４が、処理部２１に記憶されている結合結果レコードをまとめ、結合結果テーブルとして、ディスプレイやファイル等へ出力する。また、データベース装置１０から等結合処理完了通知を受信していない場合（ステップＳ３０６でＮｏ）、処理は、ステップＳ３０４へ戻る。
【００５２】
≪データベース装置の処理≫
次に、データベース装置１０の処理の流れについて、図４〜６を用いて説明する（適宜図２参照）。図４は、ステップＳ４０１〜Ｓ４０８の処理を示し、図５は、その続きのステップＳ４０９〜Ｓ４１６の処理を示している。図４に示すように、ステップＳ４０１では、等結合処理の対象となるデータベース装置１０Ａ，１０Ｂの等結合依頼受信部１１１が、クライアント装置２０から、等結合依頼情報を受信する。ステップＳ４０２では、データベース装置１０Ａの等結合依頼受信部１１１が、クライアント装置２０から、等結合処理開始指示を受信する。ステップＳ４０３では、カラム値ブロック作成部１１２が、カラム値ブロックを作成する。このカラム値ブロックは、少なくとも、ｑ個の結合対象カラム値、ｐ個の結合可能カラム値、およびデータベース装置１０Ａ自身のＣＰＵ使用率ｘを含んでいる。なお、このステップＳ４０３の処理の詳細については、後記する。
【００５３】
ステップＳ４０４では、カラム値ブロック送信部１１３が、カラム値ブロックを等結合相手のデータベース装置１０Ｂへ送信する。ステップＳ４０５では、結合対象カラム値個数判定部１１８が、結合対象カラム値の個数ｑが０か否かを判定する。そして、結合対象カラム値の個数ｑが０の場合（ステップＳ４０５でＹｅｓ）、データベース装置１０Ａの処理は終了する。なお、結合対象カラム値の個数ｑが０でない場合（ステップＳ４０５でＮｏ）、データベース装置１０Ａは、ステップＳ４１６に示すように、データベース装置１０Ｂからカラム値ブロックを受信して、ステップＳ４１７に記載の処理へと移行する。ステップＳ４１７では、データベース装置１０Ａ，１０Ｂの間で、交互にステップＳ４０７〜Ｓ４１５と同様の処理が実行される。
【００５４】
ステップＳ４０６では、データベース装置１０Ｂのカラム値ブロック受信部１１４が、カラム値ブロックを受信する。ステップＳ４０７では、カラム値ブロック解析部１１５が、受信したカラム値ブロックから、ｑ’個の結合対象カラム値、ｐ’個の結合可能カラム値、および等結合相手（データベース装置１０Ａ）のＣＰＵ使用率ｙを抽出する。抽出した等結合相手のＣＰＵ使用率ｙは、処理部１１のメインメモリに記憶される。ステップＳ４０８では、結合可能レコード検索部１１６が、テーブルから、ｐ’個の結合可能カラム値と等しい結合対象カラム値を含むレコード（結合可能レコード）を抽出する。そして、結合可能レコード送信部１１７が、その抽出した結合可能レコードをクライアント装置２０へ送信する。ただし、ｐ’が０の場合は、ステップＳ４０８は実行されない。
【００５５】
次に、図５に示すように、ステップＳ４０９では、データベース装置１０Ｂの結合対象カラム値個数判定部１１８が、結合対象カラム値の個数ｑ’が０より多いか否かを判定する。そして、結合対象カラム値の個数ｑ’が０より多くない場合（ステップＳ４０９でＮｏ）、ステップＳ４１０で、結合完了通知送信部１２０が、等結合処理完了通知をクライアント装置２０へ送信する。そして、データベース装置１０Ｂの処理は終了する。なお、結合対象カラム値の個数ｑ’が０より多い場合（ステップＳ４０９でＹｅｓ）、データベース装置１０Ｂの処理は、ステップＳ４１１へ進む。
【００５６】
ステップＳ４１１では、ソートマージ結合処理部１１９が、ｑ’個の結合対象カラム値と、等結合処理の対象となるテーブル内の結合対象カラム値とを用いて、ソートマージ結合処理を実行し、ｐ個の結合可能カラム値およびその結合可能カラム値を含むｐ個の結合可能レコードを抽出する。なお、ソートマージ結合処理の開始レコードは、レコード位置ポインタによって設定されている。そして、ソートマージ結合処理が終了した時点では、レコード位置ポインタは、ｑ’個の結合対象カラム値の最大値より大きい値の範囲の中で最小のカラム値を含むレコードに設定される。ステップＳ４１２では、結合可能レコード送信部１１７が、ｐ個の結合可能レコードをクライアント装置２０へ送信する。ステップＳ４１３では、カラム値ブロック作成部１１２が、ステップＳ４０３と同様の処理を実行する。
【００５７】
ステップＳ４１４では、カラム値ブロック送信部１１３が、カラム値ブロックを等結合相手のデータベース装置１０Ａに送信する。ステップＳ４１５では、結合対象カラム値個数判定部１１８が、結合対象カラム値の個数ｑが０か否かを判定する。そして、結合対象カラム値の個数ｑが０の場合（ステップＳ４１５でＹｅｓ）、処理は終了する。また、結合対象カラム値の個数ｑが０でない場合（ステップＳ４１５でＮｏ）、処理はステップＳ４１７に記載の処理へと移行する。そして、ステップＳ４１７では、データベース装置１０Ａ，１０Ｂの間で、交互にステップＳ４０７〜Ｓ４１５と同様の処理が実行される。
【００５８】
図６は、カラム値ブロック作成部１１２が実行する、ステップＳ４０３（図４参照）およびステップＳ４１３（図５参照）の処理の詳細な流れを示す。ステップＳ６０１では、カラム値ブロック作成部１１２は、等結合相手のＣＰＵ使用率ｙがメインメモリに記憶されているか否かを判定する。等結合相手のＣＰＵ使用率ｙがメインメモリに記憶されている場合（ステップＳ６０１でＹｅｓ）、ステップＳ６０２で、その等結合相手のＣＰＵ使用率ｙが読み出される。
【００５９】
次に、ステップＳ６０３では、自身のＣＰＵ使用率ｘが取得される。ステップＳ６０４では、自身のＣＰＵ使用率ｘおよび等結合相手のＣＰＵ使用率ｙを適用した所定の演算を行って、結合対象カラム値の個数ｑが算出される。所定の演算の例として、各ＣＰＵ使用率ｘ，ｙ（ただし、ｘ，ｙは百分率表示）の逆のＣＰＵ未使用率（１００−ｘ），（１００−ｙ）の割合に応じて、ＣＰＵ未使用率の大きい（処理負荷の小さい）データベース装置１０の方に、大きな個数（送信個数）ｑ個の結合対象カラム値を送信する。例えば、等結合相手のＣＰＵ使用率ｙが自身のＣＰＵ使用率ｘより大きくなるにしたがって、等結合相手（処理負荷の大きい方）のデータベース装置１０に送信する結合対象カラム値の個数ｑを少なくするように算出する具体例を下記の式（１）に示す。
ｑ＝２ｎ（１００−ｙ）／｛（１００−ｘ）＋（１００−ｙ）｝    ・・式（１）
ただし、式（１）では、ｑが小数点以下の値を持つ場合は、すべて切上げて自然数の値とする。また、等結合処理完了の判断が、等結合相手から受信した結合対象カラム値の個数ｑ’によって行われることから（ステップＳ４０９参照）、ｙ＝１００の場合は、ｑ＝１と設定する。
【００６０】
なお、等結合相手のＣＰＵ使用率ｙがメインメモリに記憶されていない場合（ステップＳ６０１でＮｏ）、ステップＳ６０５で、結合対象カラム値の個数ｑは、ｎ（等結合依頼情報に含まれている結合対象カラム値の送信個数のデフォルト値ｎ）に設定される。
【００６１】
ステップＳ６０６では、レコード位置ポインタ以降のｑ個のレコードから結合対象カラム値が取得され、レコード位置ポインタがｑ個進める。ただし、取得可能な結合対象カラム値がｑ個より少ない場合は、レコード位置ポインタを、テーブルのレコードの終端に設定する。また、レコード位置ポインタが、既にテーブルのレコードの終端に設定されていて、結合対象カラム値を一つも取得できない場合には、ｑ＝０と設定する。
【００６２】
ステップＳ６０７では、ソートマージ結合処理部１１９からｐ個の結合可能カラム値が取得される。ただし、取得できる結合可能カラム値が無い場合、ｐ＝０と設定する。そして、ステップＳ６０８では、カラム値ブロック作成部１１２は、ｑ個の結合対象カラム値と、ｐ個の結合可能カラム値と、自身のＣＰＵ使用率ｘとを、一つのカラム値ブロックに格納する。ただし、ｑ＝０の場合には結合対象カラム値は格納されず、ｐ＝０の場合には結合可能カラム値は格納されない。
【００６３】
（変形例）
前記した実施形態のステップＳ６０４では、結合対象カラム値の個数ｑを、自身のＣＰＵ使用率ｘおよび等結合相手のＣＰＵ使用率ｙを用いて算出する場合を示した。変形例においては、この結合対象カラム値の個数ｑを、ＣＰＵ使用率以外に、メモリ使用率や、ＣＰＵの動作周波数やメモリ容量といったＣＰＵ性能を用いて算出する場合について説明する。例えば、メモリ使用率が大きい場合、または、メモリ空き容量が少ない場合、未使用のメモリ領域を超える個数の結合対象カラム値を受信しても、ＨＤＤ（Hard Disc Drive）とのスワップが発生し、演算処理速度が格段に遅くなる。また、ＣＰＵの動作周波数が遅いと、多くの演算時間が必要となる。そのため、処理負荷を効率的に分散するためには、ＣＰＵ使用率、ＣＰＵの動作周波数、メモリ使用率およびメモリ空き容量の逆数のいずれか一つまたはそれらの組み合わせに基づいて、結合対象カラム値の個数ｑが算出されても良い。具体的には、等結合相手のＣＰＵの動作周波数が遅い場合には、結合対象カラム値の個数ｑが少なくなるようにする。また、等結合相手のメモリ使用率が大きい場合には、結合対象カラム値の個数ｑが少なくなるようにする。さらに、等結合相手のメモリ空き容量の逆数が大きい場合には、結合対象カラム値の個数ｑが少なくなるようにする。なお、ＣＰＵの動作周波数、メモリ使用率およびメモリ空き容量の逆数は、ステップＳ４１３（図５参照）で作成されるカラム値ブロックに格納されて、等結合相手のデータベース装置１０に送信される。そして、前記した実施形態において、ＣＰＵ使用率の代わりに、ＣＰＵ使用率、ＣＰＵの動作周波数、メモリ使用率およびメモリ空き容量の逆数のいずれか一つまたはそれらの組み合わせを用いるようにしても良い。
【００６４】
以上、本実施形態および変形例のデータベース装置１０によれば、自身および等結合相手の処理負荷を比較して、等結合相手の処理負荷が自身の処理負荷より大きくなるにしたがって、等結合相手に送信する結合対象カラム値の個数を少なくなるように設定するので、処理負荷を均等に分散することが可能になる。また、処理負荷を均等に分散すると、分散データベースシステム全体の処理遅延を低減することが可能になる。
【００６５】
また、等結合相手のＣＰＵ使用率、メモリ使用率、メモリ空き容量、ＣＰＵの動作周波数に係る情報を、等結合処理のための情報と独立して送信せずに、カラム値ブロックに格納して送信することによって、データベース装置１０間の通信回数を増加させることがないため、分散データベースシステム全体の処理時間を増加させることがない。また、カラム値ブロックを受信する度に、直近の等結合相手のＣＰＵの負荷状態を取得するので、タイムリーに処理負荷を分散することが可能になる。
【００６６】
また、本実施形態および変形例では、クライアント装置２０において、結合可能レコード同士の結合処理を実行することにしているが、データベース装置１０のいずれか一方が結合処理を実行した場合においても、本実施形態および変形例に記載と同様に処理負荷を均等に分散することができる。この場合、カラム値ブロックには、結合可能レコードが格納される。
【００６７】
また、本実施形態において、データベース装置１０（図２参照）の各部の処理は、データベース装置１０をコンピュータで実現したときに搭載されるプログラムによって実現されてもよい。このプログラムは、通信回線を介して提供することもできるし、ＣＤ−ＲＯＭ等のコンピュータ読み取り可能な記録媒体に書き込んで配布することも可能である。
【符号の説明】
【００６８】
１０    データベース装置
１１    処理部
１２    記憶部
２０    クライアント装置
２１    処理部
２２    記憶部
１１１  等結合依頼受信部
１１２  カラム値ブロック作成部
１１３  カラム値ブロック送信部
１１４  カラム値ブロック受信部
１１５  カラム値ブロック解析部
１１６  結合可能レコード検索部
１１７  結合可能レコード送信部
１１８  結合対象カラム値個数判定部
１１９  ソートマージ結合処理部
１２０  結合完了通知送信部
１２１  ＣＰＵ使用率取得部
１２２  テーブル管理部
２１１  等結合処理要求受付部
２１２  等結合処理要求送信部
２１３  等結合処理結果受信部
２１４  等結合処理結果出力部
６０    ネットワーク
【図１】
2010271998.tif 000003
【図２】
2010271998.tif 000004
【図３】
2010271998.tif 000005
【図４】
2010271998.tif 000006
【図５】
2010271998.tif 000007
【図６】
2010271998.tif 000008
【図７】
2010271998.tif 000009
【図８】
2010271998.tif 000010
【図９】
2010271998.tif 000011
【図１０】
2010271998.tif 000012