(57)【要約】【課題】分散システムにおいて、インデックス同士のマージ結合を高速化させる。【解決手段】本発明は、インデックスＡの先頭から順にＮ個分のレコードのキー値のみをもう一方のインデックスＢに送り、Ｎ回インデックスの突合せを行い、最後のレコードのキー値だけそのキー値を超える最小の値を検索し、そのレコードから順にＮ個分のレコードのキー値のみをインデックスＡに送る。このとき、インデックスを検索した結果「真」だったものを記録する検索フラグリストも合わせて送信する。更に、検索時に「真」だったインデックスＡとインデックスＢをバッファに格納し、バッファに格納可能な許容量単位で、結合を行うプロセッサＪに送信する。【選択図】図１
2010128721.tif 000002
【特許請求の範囲】
【請求項１】
バス転送速度がプロセッサ内部より遅いネットワークに複数のプロセッサが接続されている分散ネットワークシステムにおいて、該ネットワークを経由してインデックス同士をマージする分散インデックスの結合方法であって、
複数のレコードのインデックスからなるインデックスＡ，該インデックスＡを走査するためのＮ個のポインタからなるポインタリスト及び、該ポインタに対応するレコードのキー値からなるキー値リストを格納する記憶手段Ａを有するプロセッサＡと、
複数のレコードのインデックスからなるインデックスＢ、該インデックスＢを走査するためのＮ個のポインタからなるポインタリスト及び、該ポインタに対応するレコードのキー値からなるキー値リストを格納する記憶手段Ｂを有するプロセッサＢと、
前記プロセッサＡの前記インデックスＡのレコードと前記プロセッサＢの前記インデックスＢのレコードを結合するプロセッサＪと、が前記ネットワークを介して接続されているシステムにおいて、
前記プロセッサＡにおいて、
前記プロセッサＢから、該プロセッサＢがインデックスＡで前記記憶手段Ａを検索した結果の真偽値が設定された検索フラグリストＢと、Ｎ個分のポインタに対応するレコードのキー値からなるキー値リストＢを受信する受信Ａステップと、
前記検索フラグリストＢに基づいて、該プロセッサＢで検索された前記インデックスＢのレコードに対応するインデックスＡのレコードを前記記憶手段Ａから検索し、バッファＡに格納し、該当する検索フラグリストＡに「真」を設定する検索Ａステップと、
前記プロセッサＢから取得した前記キー値リストＢのＮ番目の値を超える最小の値から順にＮ個分のキー値リストＡを生成するキー値リストＡ生成ステップと、
前記キー値リストＡと前記検索フラグリストＡを前記プロセッサＢに送信する送信Ａステップと、を行い、
前記プロセッサＢにおいて、
前記プロセッサＡから受信した前記検索フラグリストＡに基づいて、前記プロセッサＡで検索された前記インデックスＡのレコードに対応するインデックスＢのレコードを前記記憶手段Ｂから検索し、バッファＢに格納し、該当する検索フラグリストＢに「真」を設定する検索Ｂステップと、
前記キー値リストＡのＮ番目の値を超える最小の値から順にＮ個分のキー値リストＢを生成するキー値リストＢ生成ステップと、
前記検索フラグリストＢと前記キー値リストＢを前記プロセッサＡに送信する第１の送信Ｂステップと、
を行うことを特徴とする分散インデックスの結合方法。
【請求項２】
前記プロセッサＡまたは前記プロセッサＢにおいて、
前記バッファＡまたは、前記バッファＢに格納されたレコードの格納量が、予め決められた閾値以上になった場合に、該バッファのレコードを前記プロセッサＪに送信し、
前記プロセッサＪは、
前記プロセッサＡから受信したレコードをプロセッサＡ用バッファに格納し、前記プロセッサＢから受信したレコードをプロセッサＢ用バッファに格納し、
前記プロセッサＡ用バッファと前記プロセッサＢ用バッファに格納されているレコードを結合して出力する
請求項１記載の分散インデックスの結合方法。
【請求項３】
前記プロセッサＢは、
検索Ｂステップにおいて、
前記検索フラグリストＡから取り出したｉ番目（ｉ≧１）フラグが立っている場合は、インデックスＢのポインタリストのｉ番目のポインタが指すレコードを送信用バッファＢに格納し、
前記キー値リストから取り出したｉ番目のキー値で前記記憶手段ＢからインデックスＢを検索し、検索条件を満たすレコードがある場合は、該レコードを前記送信用バッファＢに格納し、前記検索フラグリストＢのｉ番目にフラグを立てる
請求項１記載の分散インデックスの結合方法。
【請求項４】
前記プロセッサＡは、
検索Ａステップにおいて、
前記検索フラグリストＢから取り出したｉ番目（ｉ≧１）フラグが立っている場合は、インデックスＡのポインタリストのｉ番目のポインタが指すレコードを送信用バッファＡに格納し、
前記キー値リストから取り出したｉ番目のキー値で前記記憶手段ＡからインデックスＡを検索し、検索条件を満たすレコードがある場合は、該レコードを前記送信用バッファＡに格納し、前記検索フラグリストＡのｉ番目にフラグを立てる
請求項１記載の分散インデックスの結合方法。
【請求項５】
バス転送速度がプロセッサ内部より遅いネットワークに複数のプロセッサが接続されている分散ネットワークシステムにおいて、該ネットワークを経由してインデックス同士をマージする分散インデックスの結合システムであって、
前記システムは、
複数のレコードのインデックスからなるインデックスＡ，該インデックスＡを走査するためのＮ個のポインタからなるポインタリスト及び、該ポインタに対応するレコードのキー値からなるキー値リストを格納する記憶手段Ａを有するプロセッサＡと、
複数のレコードのインデックスからなるインデックスＢ、該インデックスＢを走査するためのＮ個のポインタからなるポインタリスト及び、該ポインタに対応するレコードのキー値からなるキー値リストを格納する記憶手段Ｂを有するプロセッサＢと、
前記プロセッサＡの前記インデックスＡのレコードと前記プロセッサＢの前記インデックスＢのレコードを結合するプロセッサＪと、を有し、
前記プロセッサＡは、
前記インデックスＡで前記記憶手段Ａを検索した結果の真偽値を設定する検索フラグリストＡを初期化する検索フラグリストＡ初期化手段と、
前記プロセッサＢから受信した前記検索フラグリストＢに基づいて、前記プロセッサＢで検索された前記インデックスＢのレコードに対応するインデックスＡのレコードを前記記憶手段Ａから検索し、バッファＡに格納し、該当する検索フラグリストＡに「真」を設定する検索Ａ手段と、
前記プロセッサＢから取得したキー値リストＢのＮ番目の値を超える最小の値から順にＮ個分のキー値リストＡを生成するキー値リストＡ生成手段と、
前記検索フラグリストＡと前記キー値リストＡを前記プロセッサＢに送信する送信Ａ手段と、を有し、
前記プロセッサＢは、
インデックスＢで前記記憶手段Ｂを検索した結果の真偽値を設定する検索フラグリストＢを初期化する検索フラグリストＢ初期化手段と、
前記プロセッサＡから受信した前記検索フラグリストＡに基づいて、前記プロセッサＡで検索された前記インデックスＡのレコードに対応するインデックスＢのレコードを前記記憶手段Ｂから検索し、バッファＢに格納し、該当する検索フラグリストＢに「真」を設定する検索Ｂ手段と、
前記プロセッサＡから取得した前記キー値リストＡのＮ番目の値を超える最小の値から順にＮ個分のキー値リストＢを生成するキー値リストＢ生成手段と、
前記検索フラグリストＢと前記キー値リストＢを前記プロセッサＡに送信する送信Ｂ手段と、
を有することを特徴とする分散インデックスの結合システム。
【請求項６】
前記プロセッサＡは、
前記バッファＡに格納されたレコードの格納量が、予め決められた閾値以上になった場合に、該バッファＡのレコードを前記プロセッサＪに送信するレコードＡ送信手段を有し、
前記プロセッサＢは、
前記バッファＢに格納されたレコードの格納量が、予め決められた閾値以上になった場合に、該バッファＢのレコードを前記プロセッサＪに送信するレコードＢ送信手段を有し、
前記プロセッサＪは、
前記プロセッサＡから受信したレコードを格納するプロセッサＡ用バッファと、
前記プロセッサＢから受信したレコードを格納するプロセッサＢ用バッファと、
前記プロセッサＡ用バッファと前記プロセッサＢ用バッファに格納されているレコードを結合して出力するレコード結合手段と、
を有する請求項５記載の分散インデックスの結合システム。
【請求項７】
前記プロセッサＢの前記検索Ｂ手段は、
前記検索フラグリストＡから取り出したｉ番目（ｉ≧１）フラグが立っている場合は、インデックスＢのポインタリストのｉ番目のポインタが指すレコードを送信用バッファＢに格納する手段と、
前記キー値リストから取り出したｉ番目のキー値で前記記憶手段ＢからインデックスＢを検索し、検索条件を満たすレコードがある場合は、該レコードを前記送信用バッファＢに格納し、前記検索フラグリストＢのｉ番目にフラグを立てる手段と、を含む
請求項５記載の分散インデックスの結合システム。
【請求項８】
前記プロセッサＡの前記検索Ａ手段は、
前記検索フラグリストＢから取り出したｉ番目（ｉ≧１）フラグが立っている場合は、インデックスＡのポインタリストのｉ番目のポインタが指すレコードを送信用バッファＡに格納する手段と、
前記キー値リストから取り出したｉ番目のキー値で前記記憶手段ＡからインデックスＡを検索し、検索条件を満たすレコードがある場合は、該レコードを前記送信用バッファＡに格納し、前記検索フラグリストＡのｉ番目にフラグを立てる手段と、を含む
請求項５記載の分散インデックスの結合システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散インデックス結合方法及びシステムに係り、特に、ネットワーク上の分散システムにおけるリレーショナル・データベースのインデックス同士を結合するための分散インデックス結合システム及び方法及びプログラムに関する。詳しくは、リレーショナル・データベースのインデックス同士がコンピュータ内部のバス転送速度と比べて遅いネットワークで接続されている分散システムにおける分散インデックス結合方法及びシステムに関する。
【背景技術】
【０００２】
従来、リレーショナル・データベース同士の結合操作を実行するためのアルゴリズムとして、順次２つのデータベースのレコードの突合せを行い、結合条件を満たすものに対して結果のレコードを生成する入れ子ループ結合や、２つのデータベースが結合条件でソートされている場合には、先頭から順次突き合わせてマージするマージ結合や、一方のデータベースのレコードをハッシュ表に展開することにより結合条件を満たすレコードを求めるハッシュやインデックスを用いたハッシュ結合等が知られている。この例を図１０に示す。
【０００３】
ステップ１０）  インデックスＡ，Ｂのレコードを指すポインタを先頭にするように初期化する。
【０００４】
ステップ１１）  インデックスＡのポインタが指すレコードのキー値をマシンＢに送信する。
【０００５】
ステップ１２）  インデックスＡのポインタが指すレコードのキー値でインデックスＢを検索する。
【０００６】
ステップ１３）  検索条件を満たすレコードがインデックスＢにあるかを判定し、ある場合には、ステップ１４に移行し、ない場合は、ステップ１５に移行する。
【０００７】
ステップ１４）  インデックスＡ、ＢのレコードをマシンＪに送り、当該マシンＪで両レコードを結合し、出力する。
【０００８】
ステップ１５）  インデックスＡのポインタが指すレコードのキー値を超える最小の値をインデックスＢから検索する。
【０００９】
ステップ１６）  検索条件を満たすレコードがインデックスＢにあるかを判定し、ある場合には、ステップ１７に移行し、ない場合には処理を終了する。
【００１０】
ステップ１７）  インデックスＢのポインタを該当するレコードのところに進める。
【００１１】
ステップ１８）  インデックスＢのポインタが指すレコードのキー値をマシンＡに送る。
【００１２】
ステップ１９）  インデックスＢのポインタが指すレコードのキー値でインデックスＡを検索する。
【００１３】
ステップ２０）  検索条件を満たすレコードがインデックスＡにあるかを判定し、ある場合は、ステップ２１に移行し、ない場合はステップ２２に移行する。
【００１４】
ステップ２１）  インデックスＡ，ＢのレコードをマシンＪに送りマシンＪで両レコードを結合して出力する。
【００１５】
ステップ２２）  インデックスＢのポインタが指すレコードのキー値を超える最小の値をインデックスＡから検索する。
【００１６】
ステップ２３）  検索条件を満たすレコードがインデックスＡにあるかを判定し、ある場合はステップ２４に移行し、ない場合は、処理を終了する。
【００１７】
ステップ２４）  インデックスＡのポインタを該当するレコードのところに進め、ステップ１１の処理に移行する。
【００１８】
また、結合操作を別々のジョブに区分し、それらのジョブを複数のプロセッサ間で最適にスケジューリングすることにより、データ・スキューの存在下で並列リレーショナル・データベース環境にある共通フィールド上の２つのデータベース・リレーションをマージ結合する技術がある。この技術は、最小メークスパン最適化技法を使用して、プロセッサ間でジョブの現集合をスケジューリングすることによって、２つのリレーションの自然結合のための全実行時間を最小することができる（例えば、特許文献１参照）。
【特許文献１】特開平３−１２６１６９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１９】
しかしながら、上記の図１０に示すアルゴリズムをネットワークにより分散したシステムにそのまま適用すると、通信回数が増大し、性能が現れないという問題がある。
【００２０】
また、最小メークスパン最適化技法を使用して、マージ結合する技術は、マルチプロセッサシステムを想定したもので、分散システム間の通信はネットワークよりも高速なインターコネクトを前提としており、インデックス同士がコンピュータ内部のバス転送速度と比べて遅いネットワークで接続された分散システムについては考慮されていない。
【００２１】
本発明は、上記の点に鑑みなされたもので、インデックス同士がコンピュータ内部のバス転送速度と比べて遅いネットワークで接続された分散システムにおいて、インデックス同士のマージ結合を高速化させ、処理中の通信回数を削減することが可能な分散インデックス結合システム及び方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２２】
図１は、本発明の原理を説明するための図である。
【００２３】
本発明（請求項１）は、バス転送速度がプロセッサ内部より遅いネットワークに複数のプロセッサが接続されている分散ネットワークシステムにおいて、該ネットワークを経由してインデックス同士をマージする分散インデックスの結合方法であって、
複数のレコードのインデックスからなるインデックスＡ，該インデックスＡを走査するためのＮ個のポインタからなるポインタリスト及び、該ポインタに対応するレコードのキー値からなるキー値リストを格納する記憶手段Ａを有するプロセッサＡと、
複数のレコードのインデックスからなるインデックスＢ、該インデックスＢを走査するためのＮ個のポインタからなるポインタリスト及び、該ポインタに対応するレコードのキー値からなるキー値リストを格納する記憶手段Ｂを有するプロセッサＢと、
プロセッサＡのインデックスＡのレコードとプロセッサＢのインデックスＢのレコードを結合するプロセッサＪと、がネットワークを介して接続されているシステムにおいて、
プロセッサＡにおいて、
プロセッサＢから、該プロセッサＢがインデックスＡで記憶手段Ａを検索した結果の真偽値が設定された検索フラグリストＢと、Ｎ個分のポインタに対応するレコードのキー値からなるキー値リストＢを受信する受信Ａステップ（ステップ１）と、
検索フラグリストＢに基づいて、該プロセッサＢで検索されたインデックスＢのレコードに対応するインデックスＡのレコードを記憶手段Ａから検索し、バッファＡに格納し、該当する検索フラグリストＡに「真」を設定する検索Ａステップ（ステップ２）と、
プロセッサＢから取得したキー値リストＢのＮ番目の値を超える最小の値から順にＮ個分のキー値リストＡを生成するキー値リストＡ生成ステップ（ステップ３）と、
キー値リストＡと検索フラグリストＡをプロセッサＢに送信する送信Ａステップ（ステップ４）と、を行い、
プロセッサＢにおいて、
プロセッサＡから受信した検索フラグリストＡに基づいて、プロセッサＡで検索されたインデックスＡのレコードに対応するインデックスＢのレコードを記憶手段Ｂから検索し、バッファＢに格納し、該当する検索フラグリストＢに「真」を設定する検索Ｂステップと、
キー値リストＡのＮ番目の値を超える最小の値から順にＮ個分のキー値リストＢを生成するキー値リストＢ生成ステップ（ステップ５）と、
検索フラグリストＢとキー値リストＢをプロセッサＡに送信する第１の送信Ｂステップ（ステップ６）と、を行う。
【００２４】
また、本発明（請求項２）は、プロセッサＡまたはプロセッサＢにおいて、
バッファＡまたは、バッファＢに格納されたレコードの格納量が、予め決められた閾値以上になった場合に、該バッファのレコードをプロセッサＪに送信し（ステップ１１）、
プロセッサＪは、
プロセッサＡから受信したレコードをプロセッサＡ用バッファに格納し、プロセッサＢから受信したレコードをプロセッサＢ用バッファに格納し（ステップ１２）、
プロセッサＡ用バッファとプロセッサＢ用バッファに格納されているレコードを結合して出力する（ステップ１３）。
【００２５】
また、本発明（請求項３）は、プロセッサＢの検索Ｂステップにおいて、
検索フラグリストＡから取り出したｉ番目（ｉ≧１）フラグが立っている場合は、インデックスＢのポインタリストのｉ番目のポインタが指すレコードを送信用バッファＢに格納し、
キー値リストから取り出したｉ番目のキー値で記憶手段ＢからインデックスＢを検索し、検索条件を満たすレコードがある場合は、該レコードを送信用バッファＢに格納し、検索フラグリストＢのｉ番目にフラグを立てる。
【００２６】
また、本発明（請求項３）は、プロセッサＡの検索Ａステップにおいて、
検索フラグリストＢから取り出したｉ番目（ｉ≧１）フラグが立っている場合は、インデックスＡのポインタリストのｉ番目のポインタが指すレコードを送信用バッファＡに格納し、
キー値リストから取り出したｉ番目のキー値で記憶手段ＡからインデックスＡを検索し、検索条件を満たすレコードがある場合は、該レコードを送信用バッファＡに格納し、検索フラグリストＡのｉ番目にフラグを立てる。
【００２７】
図２は、本発明の原理構成図である。
【００２８】
本発明（請求項５）は、バス転送速度がプロセッサ内部より遅いネットワークに複数のプロセッサが接続されている分散ネットワークシステムにおいて、該ネットワークを経由してインデックス同士をマージする分散インデックスの結合システムであって、
複数のレコードのインデックスからなるインデックスＡ，該インデックスＡを走査するためのＮ個のポインタからなるポインタリスト及び、該ポインタに対応するレコードのキー値からなるキー値リストを格納する記憶手段１３０Ａを有するプロセッサＡと、
複数のレコードのインデックスからなるインデックスＢ、該インデックスＢを走査するためのＮ個のポインタからなるポインタリスト及び、該ポインタに対応するレコードのキー値からなるキー値リストを格納する記憶手段１３０Ｂを有するプロセッサＢと、
プロセッサＡのインデックスＡのレコードとプロセッサＢのインデックスＢのレコードを結合するプロセッサＪと、を有し、
プロセッサＡは、
インデックスＡで記憶手段Ａ１３０Ａを検索した結果の真偽値を設定する検索フラグリストＡを初期化する検索フラグリストＡ初期化手段１５１Ａと、
プロセッサＢから受信した検索フラグリストＢに基づいて、プロセッサＢで検索されたインデックスＢのレコードに対応するインデックスＡのレコードを記憶手段Ａ１３０Ａから検索し、バッファＡに格納し、該当する検索フラグリストＡに「真」を設定する検索Ａ手段１１０Ａと、
プロセッサＢから取得したキー値リストＢのＮ番目の値を超える最小の値から順にＮ個分のキー値リストＡを生成するキー値リストＡ生成手段１２０Ａと、
検索フラグリストＡとキー値リストＡをプロセッサＢに送信する送信Ａ手段１４１Ａと、を有し、
プロセッサＢは、
インデックスＢで記憶手段Ｂ１３０Ｂを検索した結果の真偽値を設定する検索フラグリストＢを初期化する検索フラグリストＢ初期化手段１５１Ｂと、
プロセッサＡから受信した検索フラグリストＡに基づいて、プロセッサＡで検索されたインデックスＡのレコードに対応するインデックスＢのレコードを記憶手段Ｂ１３０Ｂから検索し、バッファＢに格納し、該当する検索フラグリストＢに「真」を設定する検索Ｂ手段１１０Ｂと、
プロセッサＡから取得したキー値リストＡのＮ番目の値を超える最小の値から順にＮ個分のキー値リストＢを生成するキー値リストＢ生成手段１２０Ｂと、
検索フラグリストＢとキー値リストＢをプロセッサＡに送信する送信Ｂ手段１４１Ｂと、
を有する。
【００２９】
また、本発明（請求項６）は、プロセッサＡにおいて、
バッファＡに格納されたレコードの格納量が、予め決められた閾値以上になった場合に、該バッファＡのレコードをプロセッサＪに送信するレコードＡ送信手段１４１Ａを有し、
プロセッサＢにおいて、
バッファＢに格納されたレコードの格納量が、予め決められた閾値以上になった場合に、該バッファＢのレコードをプロセッサＪに送信するレコードＢ送信手段１４１Ｂを有し、
プロセッサＪは、
プロセッサＡから受信したレコードを格納するプロセッサＡ用バッファと、
プロセッサＢから受信したレコードを格納するプロセッサＢ用バッファと、
プロセッサＡ用バッファとプロセッサＢ用バッファに格納されているレコードを結合して出力するレコード結合手段２２０と、を有する。
【００３０】
また、本発明（請求項７）は、プロセッサＢの検索Ｂ手段１１０Ｂにおいて、
検索フラグリストＡから取り出したｉ番目（ｉ≧１）フラグが立っている場合は、インデックスＢのポインタリストのｉ番目のポインタが指すレコードを送信用バッファＢに格納する手段と、
キー値リストから取り出したｉ番目のキー値で記憶手段ＢからインデックスＢを検索し、検索条件を満たすレコードがある場合は、該レコードを送信用バッファＢに格納し、検索フラグリストＢのｉ番目にフラグを立てる手段と、を含む。
【００３１】
また、本発明（請求項８）は、プロセッサＡの検索Ａ手段１１０Ａにおいて、
検索フラグリストＢから取り出したｉ番目（ｉ≧１）フラグが立っている場合は、インデックスＡのポインタリストのｉ番目のポインタが指すレコードを送信用バッファＡに格納する手段と、
キー値リストから取り出したｉ番目のキー値で記憶手段ＡからインデックスＡを検索し、検索条件を満たすレコードがある場合は、該レコードを送信用バッファＡに格納し、検索フラグリストＡのｉ番目にフラグを立てる手段と、を含む。
【発明の効果】
【００３２】
上記のように本発明によれば、各プロセッサにおいて、インデックスを走査するポインタをＮ個有し、プロセッサ間においてＮ個のポインタからなるポインタリスト単位で、Ｎ個分のポインタに対応するレコードのキー値のみ(キー値リスト）を送信することにより、処理負荷が低減される。これは、ネットワーク経由の場合、データ送受信の起動・停止に関わる処理のオーバヘッドが大きいため、送受信するデータの総量は同じであっても、そのやり取りに要する回数を減らすことにより、処理時間が短縮される。
【００３３】
さらに、キー値のみ送信するのでは、自分が送ったキー値が他方のプロセッサで検索されたかどうかを知ることができなくなるため、インデックスを検索した結果「真」だったものを記録した検索フラグリストも同時に送信する。検索フラグは、真／偽値のみを持つため、レコード全体を相手のプロセッサに送信することに比べ情報量としては十分小さく、結果として通信量の削減につながる。
【００３４】
さらに、プロセッサＡまたはプロセッサＢとプロセッサＪとの間の通信を行う際に、送信対象をバッファリングしてまとめて処理することで、ネットワーク経由の通信におけるデータ送受信の起動・停止に関わる処理のオーバヘッドを削減し、通信効率を向上させることが可能となる。
【発明を実施するための最良の形態】
【００３５】
以下、図面と共に本発明の実施の形態を説明する。
【００３６】
図３は、本発明の一実施の形態における分散インデックス結合システムの構成を示す。
【００３７】
同図に示す分散インデックス結合システムは、インデックスＡを有するプロセッサＡと、インデックスＢを有するプロセッサＢと、プロセッサＡとプロセッサＢのレコードを結合を統括し、以下に説明する動作のトリガとなるプロセッサＪから構成される。
【００３８】
プロセッサＡとプロセッサＢは、同様の構成であり、それぞれ、入出力部１００、検索部１１０、キー値リスト処理部１２０、キー値リスト記憶部１３０、通信部１４０、検索フラグリスト処理部１５０、バッファ１７０から構成される。また、図示しないが、以下に説明する検索フラグリストは、メモリに格納するものとする。
【００３９】
キー値リスト記憶部１３０は、図４に示すように、ポインタリストとキー値リストを格納する。以下の説明において、「ポインタ」とは、インデックスのどこを検索しているかを指すポインタであり、複数のポインタをリスト化したものを「ポインタリスト」と呼ぶ。また、ポインタリストで指し示しているインデックスのレコードのキー値のみをリスト化したものがキー値リストである。図４の例では、ポインタリストの先頭は、インデックスの先頭のレコードを指しており、当該レコードのキー値「００３４」がキー値リストに設定されている。ポインタリストの２番目はインデックスのｎ番目のレコードを指しており、当該レコードのキー値「０３０５」がキー値リストに設定されている。
【００４０】
なお、プロセッサＪにはレコード全体が送信される。
【００４１】
プロセッサＪは、インデックスＡを持つプロセッサＡ，インデックスＢを持つプロセッサＢとは別の、インデックス同士のマージ結合を統括するプロセッサで、以下のフローチャートで表される処理全体を実行するトリガとなるプロセッサである。プロセッサＪは、マージ処理部２１０、レコード結合部２２０、通信部２３０、プロセッサＢ用バッファ２４０、プロセッサＡ用バッファ２５０を有し、マージ処理部２１０は、検索条件入力装置３１０と接続され、レコード結合部２２０は、結合結果出力装置３２０と接続されている。
【００４２】
マージ処理部２１０は、プロセッサＡ，Ｂに対して、検索条件入力装置３１０から入力された検索条件をプロセッサＡ，Ｂに出力する。
【００４３】
レコード結合部２２０は、プロセッサＡ及び、プロセッサＢの通信部１４０から送信され、バッファ２４０，２５０に格納されたインデックスの検索結果の該当レコードを結合し、結合結果出力装置３２０に出力する。この処理が実行されるということは、両インデックスに共通するキー値を持つレコードがあったということを示している。
【００４４】
以下に、上記の構成における動作を説明する。
【００４５】
図５は、本発明の一実施の形態における全体の動作のシーケンスチャートである。
【００４６】
ステップ５１）  プロセッサＪは、検索条件入力装置から検索条件が入力されると、プロセッサＡ，Ｂに対して、検索条件を送信することにより、インデックスＡ，Ｂの結合処理の開始を指示する。
【００４７】
ステップ５２）  プロセッサＡは、キーリスト処理部１２０ＡにおいてインデックスＡの先頭から順にＮ個分のキー値リストＡを生成する。
【００４８】
ステップ５３）  検索フラグリスト処理部１５０Ａにおいて、インデクスＡの検索フラグリストＡを初期化する。
【００４９】
ステップ５４）  通信部１４０Ａを介して、キー値リストＡと検索フラグリストＡを送信する。
【００５０】
ステップ５５）  プロセッサＢは、インデックスＢの検索フラグリストＢを初期化する。
【００５１】
ステップ５６）  ステップ５４で受信した検索フラグリストＡを確認し、プロセッサＡで検索されたインデックスＡのレコードに対応するインデックスＢのレコードをバッファＢに格納する。なお、初回の場合は、ステップ５３で初期化された検索フラグリストＡを参照することになるため、バッファＢに格納するレコードはない。
【００５２】
ステップ５７）  キー値リストＡをキーとしてインデクスＢを検索し、検索されたレコードがあった場合は、バッファＢに格納し、検索フラグリストＢにフラグ「真」を設定する。
【００５３】
ステップ５８）  通信部１４０Ｂは、バッファＢに格納されたインデックスＢのレコードの格納量が所定のバッファ格納閾値を超えているかを判定し、超えている場合は、バッファＢに格納されたレコード群をプロセッサＪに送信する。超えていない場合はステップ６１に移行する。
【００５４】
プロセッサ５９）  プロセッサＪでは、プロセッサＢから受信したレコード群をバッファＢ２４０に格納する。
【００５５】
ステップ６０）  プロセッサＪのレコード結合部２２０では、バッファＡ２５０に格納されているインデックスＡのレコードと、バッファＢ２４０に格納されているインデックスＢのレコードが結合可能であるかを判定し、結合可能であれば結合する。
【００５６】
ステップ６１）  キー値リスト処理部１２０Ｂは、インデクスＢにおいて、キー値リストＡのＮ番目の値（リスト中の最大値）を超える最小の値から順にＮ個分のキー値リストＢを作成する。
【００５７】
ステップ６２）  通信部１４０Ｂからキー値リストＢと検索フラグリストＢをプロセッサＡに送信する。
【００５８】
ステップ６３）  プロセッサＡでは、検索フラグリスト処理部１５０Ａは、インデクスＡの検索フラグリストＡを初期化する。
【００５９】
ステップ６４）  プロセッサＡの検索部１１０Ａは、検索フラグリストＢを確認し、プロセッサＢで検索されたインデックスＢのレコードに対応するインデックスＡのレコードをバッファ１７０Ａに格納する。
【００６０】
ステップ６５）  検索部１１０Ａは、キー値リストＢをキーとして、インデックスＡを検索し、検索されたレコードがあったら、バッファ１７０Ａに格納し、検索フラグリスト処理部１５０Ａは、該当する検索フラグリストＡに「真」を設定する。
【００６１】
ステップ６６）  通信部１４０Ａは、バッファ１７０Ａに格納されたインデクスＡのレコードの格納量が所定のバッファ格納閾値を超えているかを判定し、超えている場合は、バッファ１７０Ａに格納されたレコード群をプロセッサＪに送信する。超えていない場合はステップ６９に移行する。
【００６２】
ステップ６７）  プロセッサＪでは、プロセッサＡから受信したレコード群をバッファＡ２５０に格納する。
【００６３】
ステップ６８）  プロセッサＪのレコード結合部２２０では、バッファＡ２５０に格納されているインデックスＡのレコードと、バッファＢ２４０に格納されているインデックスＢのレコードが結合可能であるかを判定し、結合可能であれば結合する。
【００６４】
ステップ６９）  キー値リスト処理部１２０Ａは、インデクスＡにおいてキー値リストＢのＮ番目の値（リスト中の最大値）を超える最小の値から順にＮ個分のキー値リストを作成する。
【００６５】
ステップ７０）  プロセッサＡは、通信部１４０Ａからキー値リストと検索フラグリストＡをプロセッサＢに送信する。
【００６６】
以降、ステップ５５以下の処理を繰り返す。
【００６７】
次に、マージ結合処理を説明する。
【００６８】
図６は、本発明の一実施の形態におけるマージ結合のフローチャートである。
【００６９】
ステップ１１０）  プロセッサＢにおいて、入出力部１００Ｂを介してレコードを指すＮ個のポインタリストが入力されると、キー値リスト処理部１２０Ｂは、ポインタがインデックスＢの先頭レコードを指すように、キー値リスト記憶部１３０ＢのＮ個のインデックスＢのポインタリストを初期化する。
【００７０】
ステップ１１６）  プロセッサＡにおいて、インデックスＡのレコードを指すＮ個のポインタが入出力部１００Ａを介して入力されると、キー値リスト処理部１２０Ａにおいて、インデックスＡの先頭レコードから順にＮ個分のレコードを指すように、Ｎ個のポインタを初期化し、初期化済みのインデックスＡのレコードを指すＮ個のポインタリストを出力する。
【００７１】
ステップ１１７）  プロセッサＢから送られてきたキー値リストのうち、インデックスＡを検索した結果、「真」となったものを記録するための検索フラグリストを初期化し、初期化済みのインデックスＡの検索フラグリストを出力する。
【００７２】
ステップ１２０）  キー値リスト処理部１２０Ａにおいて、キー値リスト記憶部１３０ＡからインデックスＡのレコードを指すＮ個のポインタリストを読み込み、Ｎ個のポインタリストが示すインデックスＡの各レコードのキー値を取得してリスト化し、キー値リストとしてキー値リスト記憶部１３０Ａに格納すると共に、通信部１４０Ａを介してプロセッサＢに送信する。
【００７３】
ステップ１２２）  このとき、インデックスＡを検索した結果「真」となったものを記録したインデックスＡの検索フラグリストＡもプロセッサＢに送信する。
【００７４】
ステップ１２５）  プロセッサＢの通信部１４０Ｂでキー値リストを受信すると、キー値リスト処理部１２０Ｂは、そのキー値リストをメモリ（図示せず）のプロセッサＡのキー値リスト領域に格納する。そして、検索部１１０Ｂは、プロセッサＡから取得したインデックスＡのＮ個のキー値リストのレコードのキー値を検索キーとして、キー値リスト記憶部１３０ＢからインデックスＢを検索し、インデックスＢのレコードを指すＮ個のポインタリストを取得する。当該ステップの詳細については後述する。
【００７５】
ステップ１３０）  キー値リスト処理部１２０Ｂは、取得したインデックスＢのレコードを指すＮ個のポインタリストが示すインデックスＢの各レコードのキー値を取得してキー値リストとしてキー値リスト記憶部１３０Ｂに格納すると共に、通信部１４０Ｂを介してプロセッサＡに送信する。
【００７６】
ステップ１３２）  このとき、プロセッサＢでは、インデックスＢを検索した結果「真」となったものを記録したインデックスＢの検索フラグリストＢもプロセッサＡに送信する。
【００７７】
ステップ１３５）  プロセッサＡの通信部１４０を介してプロセッサＢからキー値リストを取得すると、キー値リスト処理部１２０において、そのキー値リストをメモリ（図示せず）に格納する。検索部１１０Ａは、取得したインデックスＢのＮ個のキー値リストのレコードのキー値を検索キーとして、キー値リスト記憶部記憶部１３０ＡからインデックスＡを検索し、インデックスＢのレコードを指すＮ個のポインタリストを取得する。詳細については後述する。さらに、検索フラグリスト処理部１５０Ａは、インデックスＡを検索した結果「真」となったものを記録したインデックスＡの検索フラグリストを出力する。
【００７８】
次に、上記のステップ１２５のインデックスＢの検索処理について詳細に説明する。
【００７９】
図７は、本発明の一実施の形態におけるインデックス検索処理のフローチャートである。
【００８０】
ステップ２０５）  プロセッサＢの検索フラグリスト処理部１５０Ｂは、プロセッサＡから送られてきたキー値リストのうち、インデックスＢを検索した結果「真」となったものを記録するための検索フラグリストＢを初期化する。
【００８１】
ステップ２１０）  プロセッサＢのキー値リスト処理部１２０Ｂにおいて、メモリ（図示せず）に、Ｎ個分まとめて処理するためのループカウンタｊを設け、ｊ＝１と初期化する。
【００８２】
ステップ２１１）  検索フラグリスト処理部１５０Ｂは、インデックスＡの検索フラグリストＡからカウンタｊに相当する検索フラグを取り出す。
【００８３】
ステップ２１２）  検索フラグリスト処理部１５０Ｂは、検索フラグＡに、インデックスＡのｊ番目の検索フラグが立っているかどうかを確認する。立っている場合は、ステップ２１３に移行し、立っていない場合はステップ２１６に移行する。
【００８４】
ステップ２１３）  ステップ２１２にて、インデックスＡのｊ番目の検索フラグが立っていたということは、前回インデックスＢを検索した際に、ステップ２５１にてｊ番目に記録したポインタが指すレコードのキー値がインデックスＡにて検索されたということを意味する。よって、検索部１１０Ｂは、以下の処理を行う。
【００８５】
１．インデックスＢのレコードを指すＮ個のポインタリストからｊ番目のポインタを取り出す。
【００８６】
２．キー値リスト記憶部１３０Ｂから１．で取得したポインタが指すインデックスＢのレコードを取得する。
【００８７】
３．２．で取得したレコードをプロセッサＪに送るためのバッファ１７０Ｂに格納する。
【００８８】
ステップ２１５）  キー値リスト処理部１２０Ｂは、プロセッサＡから送信されたインデックスＡのＮ個のキー値リストからカウンタｊに相当するキー値（インデックスＡのキー値リスト中ｊ番目のキー値）を取り出す。
【００８９】
ステップ２２５）  検索部１１０Ｂは、ステップ２１５で取り出されたインデックスＡのキー値リスト中ｊ番目のキー値を用いて、キー値リスト記憶部１３０ＢからインデックスＢを検索する。検索結果が「真」の場合はインデックスＢの検索結果該当レコードを指すポインタが出力される。
【００９０】
ステップ２３０）  検索部１１０Ｂは、検索条件を満たすレコードが、キー値リスト記憶部１３０ＢのインデックスＢに存在するか否かを判定する。ステップ２２５における検索結果が「真」の場合はステップ２３２に移行し、「偽」の場合はステップ２６５に移行する。
【００９１】
ステップ２３２）  以下の処理を行う。
【００９２】
１．ステップ２２５で得られたポインタが指すインデックスＢの検索結果該当レコードを取得する。
【００９３】
２．１．で取得したレコードをプロセッサＪに送るためのバッファ１７０Ｂに格納する。この処理が行われるということは、両インデックスに共通するキー値を持つレコードがあったということである。
【００９４】
ステップ２３３）  検索フラグリスト処理部１５０Ｂは、インデックスＡのキー値リストのうちｊ番目のキーが検索されたことをプロセッサＡに伝えるため、インデックスＢの検索フラグリストのｊ番目のフラグを立てる。
【００９５】
ステップ２６５）  ループ用のカウンタｊがＮを超えていないかどうか確認する。Ｎを超えていない、すなわち、Ｎ回のループが終了していなければ、ステップ２７０に移行し、Ｎを超えている、すなわち、Ｎ回のループが終了していればステップ２３８に移行する。
【００９６】
ステップ２７０）  カウンタｊを１インクリメントし、ステップ２１５に移行する。
【００９７】
ステップ２３８）  通信部１４０Ｂは、プロセッサＪに送るためのバッファ１７０Ｂの格納量が予め決められた閾値を超えていないかどうかを確認し、超えていなければステップ２４０に移行し、超えていればステップ２３９に移行する。
【００９８】
ステップ２３９）  バッファ１７０Ｂに格納されたインデックスＢの検索結果該当レコードを全てプロセッサＪに送信する。当該検索結果該当レコードを取得したプロセッサＪの動作については、図９において詳述する。
【００９９】
ステップ２４０）  検索部１１０Ｂは、ステップ２６５の条件分岐により、ステップ２１５にて取り出されたインデックスＡのキー値リスト中のＮ番目のキー値を用いて、キー値リスト記憶部１３０ＢのインデックスＢから、「キー値を超える最小の値」を検索する。検索結果が「真」の場合は、インデックスＢの検索結果該当レコードを指すポインタを出力する。
【０１００】
ステップ２４５）  ステップ２４０において、プロセッサＪから与えられた検索条件を満たすレコードがインデックスＢに存在するかどうか確認し、存在すれば、ステップ２５１に移行し、存在しなければステップ２５２に移行する。
【０１０１】
ステップ２５１）  キー値リスト処理部１２０Ｂは、インデックスＢの検索結果該当レコードから順にＮ個分のレコードを指すように、インデックスＢのレコードを指すＮ個のポインタリストへ記録する。その後、インデックスＢ検索処理を終了し、図４のステップ１３０に移行する。
【０１０２】
ステップ２５２）  ステップ２４５において、検索条件を満たすレコードがインデックスＢに存在しない場合は、インデックスＢの検索フラグリスト中のフラグが１つ以上立っているかどうかを確認する。（ステップ２３２にてインデックスＡのキー値リストのうちいずれかのキーが検索されていれば、ステップ２４５でインデックスＢの検索が最後までたどり着いたと判定されたとしても、処理を継続し、プロセッサＡにプロセッサＢ側の検索結果を伝える必要がある）もし、立っていたら「インデックスＢ検索処理」を終了し、図４のステップ１３０に移行する。立っていなければ処理を終了する。
【０１０３】
図８は、本発明の一実施の形態におけるインデックスＡ検索処理のフローチャートである。
【０１０４】
ステップ３０５）  プロセッサＢから送られてきたキー値リストのうち、インデックスＡを検索した結果「真」となったものを記録するための検索フラグリストを初期化する。
【０１０５】
ステップ３１０）  プロセッサＡのキー値リスト処理部１２０Ａにおいて、メモリ（図示せず）にＮ個分纏めて処理するためのループカウンタｉを設け、ｉ＝１とする。
【０１０６】
ステップ３１１）  インデックスＢの検索フラグリストから、カウンタｉに相当する検索フラグを取り出す。
【０１０７】
ステップ３１２）  インデックスＢのｉ番目の検索フラグが立っているかどうかを確認し、立っていた場合はステップ３１３に移行し、立っていない場合はステップ３１６に移行する。
【０１０８】
ステップ３１３）  ステップ３１２にてインデックスＢのｉ番目の検索フラグが立っていたということは、前回インデックスＡを検索した際、ステップ３５１にてｉ番目に記録したポインタが指すレコードのキー値がインデックスＢにて検索されたことを意味する。よって、検索部１１０Ａは、以下の処理を行う。
【０１０９】
１．キー値リスト記憶部１３０ＡからインデックスＡのレコードを指すＮ個のポインタリストからｉ番目のポインタを取り出す。
【０１１０】
２．１．で取得したポインタが指すインデックスＡのレコードを取得する。
【０１１１】
３．２．で取得したレコードをプロセッサＪに送るためのバッファ１７０Ａに格納する。
【０１１２】
ステップ３１５）  キー値リスト処理部１２０Ａは、プロセッサＢから送信されたＮ個のキー値リストから、カウンタｉに相当するキー値（インデックスＢのキー値リスト中ｉ番目のキー値）を取り出す。
【０１１３】
ステップ３２６）  検索部１１０Ａは、ステップ３１５で取り出されたインデックスＡのキー値リスト中ｊ番目のキー値を用いて、キー値リスト記憶部１３０ＡからインデックスＡを検索する。検索結果が「真」の場合はインデックスＡの検索結果該当レコードを指すポインタが出力される。
【０１１４】
ステップ３３１）  検索部１１０Ａは、検索条件を満たすレコードが、キー値リスト記憶部１３０ＡのインデックスＡに存在するか否かを判定する。検索結果が「真」の場合はステップ３３２に移行し、「偽」の場合はステップ３６５に移行する。
【０１１５】
ステップ３３２）  検索部１１０Ａは、以下の処理を行う。
【０１１６】
１．ステップ３２６で得られたポインタが指すインデックスＡの検索結果該当レコードを取得する。
【０１１７】
２．１．で取得したレコードをプロセッサＪに送るためのバッファ１７０Ａに格納する（この処理が行われるということは、両インデックスに共通するキー値を持つレコードがあったということである）。
【０１１８】
ステップ３３３）  検索フラグリスト処理部１５０Ａは、インデックスＢのキー値リストのうちｉ番目のキーが検索されたことをプロセッサＢに伝えるため、インデックスＡの検索フラグリストのｉ番目のフラグを立てる。
【０１１９】
ステップ３６５）  ループ用カウンタｉがＮを超えていないかどうか確認し、Ｎを超えていない、すなわち、Ｎ回のループが終了していなければステップ３７０に移行し、Ｎを超えている、すなわち、Ｎ回のループが終了していれば、ステップ３３８に移行する。
【０１２０】
ステップ３７０）  カウンタｉを１インクリメントし、ステップ３１５に移行する。
【０１２１】
ステップ３３８）  プロセッサＪに送るためのバッファ１７０Ａの格納量が予め決められた閾値を超えていないかどうかを確認し、超えていなければステップ３４１に移行し、超えていればステップ３３９に移行する。
【０１２２】
ステップ３３９）  バッファ１７０Ａに格納されたインデックスＡの検索結果該当レコードをプロセッサＪに送る。
【０１２３】
ステップ３４１）  検索部１１０Ａは、ステップ３６５の条件分岐により、ステップ３１５にて取り出されたインデックスＢのキー値リスト中Ｎ番目のキー値を用いて、キー値リスト記憶部１３０ＡのインデックスＡから「キー値を超える最小の値」を検索する。検索結果が「真」の場合は、インデックスＡの検索結果該当レコードを指すポインタを出力する。
【０１２４】
ステップ３４６）  ステップ３４１において、プロセッサＪから与えられた検索条件を満たすレコードがインデックスＡに存在するかどうかを判定し、存在すればステップ３５１に移行し、存在しなければステップ３５２に移行する。
【０１２５】
ステップ３５１）  キー値リスト処理部１２０Ａは、インデックスＡの検索結果の該当レコードから順にＮ個分のレコードを指すように、インデックスＡのレコードを指すＮ個のポインタリストへ記録する。その後「インデックスＡ検索処理」を終了し、図４のステップ１２０に移行する。
【０１２６】
ステップ３５２）  インデックスＡの検索フラグリストの中のフラグが１つ以上立っているかどうかを確認する（ステップ３３２にて、インデックスＢのキー値リストのうちいずれかのキーが検索されていれば、ステップ３４６でインデックスＡの検索が最後までたどり着いたと判定されたとしても、処理を継続し、プロセッサＢにプロセッサＡ側の検索結果を伝える必要がある）。もし立っていたたら、「インデックスＡ検索処理リ」を終了し、図４のステップ１２０に移行する。もし立っていなければ処理を終了する。
【０１２７】
次に、プロセッサＡ，プロセッサＢからインデックスＡ，インデックスＢの検索結果の該当レコードを取得したプロセッサＪの動作について説明する。
【０１２８】
図９は、本発明の一実施の形態におけるプロセッサＪによるインデックスＡ，Ｂ結合処理のフローチャートである。
【０１２９】
ステップ４１０）  通信部２３０は、プロセッサＡまたはプロセッサＢからの検索結果該当レコードが届くまで通信を待ち受ける。
【０１３０】
ステップ４１５）  通信部２３０は、プロセッサＡまたは、プロセッサＢから検索結果該当レコードを受信すると、検索結果該当レコードの送信元がプロセッサＡかどうかを確認し、プロセッサＡであった場合は、ステップ４２０に移行し、そうでなければステップ４４０に移行する。
【０１３１】
ステップ４２０）  通信部２３０は、プロセッサＡから受信した検索結果該当レコードをプロセッサＡ用のバッファ２５０に格納する。
【０１３２】
ステップ４２５）  プロセッサＡ用のバッファに格納されたレコードのキー値の最大値が、プロセッサＢ用のバッファに格納されたレコードのキー値の最大値以上になっているかどうか確認する（インデックスＡ，Ｂの結合をプロセッサＪにて行うには、両方のインデックスＡ，Ｂが揃った状態で行う必要がある。図７、図８に示したアルゴリズムでは、キー値は小さい値から順番に処理していくので、ここで最大値を確認し、他方の最大値以上であれば、キー値が等しいレコードまで結合することが可能となる）。
【０１３３】
ステップ４３０）  最大値以上になっている場合は、ステップ４３５に移行し、なっていない場合はステップ４４０に移行する。
【０１３４】
ステップ４３５）  レコード結合部２２０は、プロセッサＡ用のバッファ２５０、プロセッサＢ用のバッファ２４０から、キー値が等しいレコードまでを抽出し、結合し、インデックスＡ，Ｂの結合処理結果として結合結果出力装置３２０に出力する。
【０１３５】
ステップ４４０）  検索結果該当レコードの送信元がプロセッサＢかどうかを確認する。プロセッサＢから受信した場合はステップ４４５に移行し、そうでない場合はステップ４１０に戻る。
【０１３６】
ステップ４４５）  通信部２３０は、プロセッサＢから受信した検索結果該当レコードをプロセッサＢ用のバッファ２４０に格納する。
【０１３７】
ステップ４５０）  レコード結合部２２０は、プロセッサＢ用のバッファ２４０に格納されたレコードのキー値の最大値が、プロセッサＡ用のバッファ２５０に格納されたレコードのキー値の最大値以上になっているかどうかを確認する（インデックスＡ，Ｂの結合をプロセッサＪにて行うには、両方のインデックスキー値が揃った状態で行う必要がある。図７、図８に示したアルゴリズムでは、キー値は小さい値から順番に処理していくので、ここで最大値を確認し、他方の最大値以上であれば、キー値が等しいレコードまで結合することが可能となる）。
【０１３８】
ステップ４５５）  プロセッサＢ用のバッファ２４０に格納されたレコードのキー値の最大値が、プロセッサＡ用のバッファ２５０に格納されたレコードのキー値の最大値以上になっている場合は、ステップ４６０に移行し、そうでなければステップ４１０に戻る。
【０１３９】
ステップ４６０）  レコード結合部２２０は、プロセッサＡ用のバッファ２５０、プロセッサＢ用のバッファ２４０からキー値が等しいレコードまでを抽出し、結合して結合結果出力装置３２０に出力する。
【０１４０】
以下に、本発明による手法と、従来の技術による手法で５００万件のデータ同士を全件マージ結合した場合の比較データを図１０に示す。モックアップによる試験のため、インデックス読み込み処理等に違いがあり、インデックス読み込み処理時間等を公平に比較することはできないが、本発明により、ネットワーク転送処理時間が減少していることが確認できた。
【０１４１】
本発明は、図３に示すプロセッサの構成に基づいて説明したが、この例に限定されることなく、各プロセッサの構成要素の動作をプログラムとして構築し、各プロセッサ（コンピュータ）にインストールして実行させる、または、ネットワークを介して流通させることが可能である。
【０１４２】
また、構築されたプログラムをハードディスクや、フレキシブルディスク、ＣＤ−ＲＯＭ等の可搬記憶媒体に格納し、コンピュータにインストールする、または、配布することが可能である。
【０１４３】
なお、本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において種々変更・応用が可能である。
【産業上の利用可能性】
【０１４４】
本発明は、ＤＢＭＳ（Data Base Management System）やＲＤＢＭＳ（Relational Date Base Management System）に適用可能である。
【図面の簡単な説明】
【０１４５】
【図１】本発明の原理を説明するための図である。
【図２】本発明の原理構成図である。
【図３】本発明の一実施の形態における分散インデックス結合システムの構成図である。
【図４】本発明の一実施の形態におけるレコードリスト記憶部を説明するための図である。
【図５】本発明の一実施の形態における全体の動作のフローチャートである。
【図６】本発明の一実施の形態におけるマージ結合のフローチャートである。
【図７】本発明の一実施の形態におけるインデックスＢ検索処理のフローチャートである。
【図８】本発明の一実施の形態におけるインデックスＡ検索処理のフローチャートである。
【図９】本発明の一実施の形態におけるプロセッサＪによるインデックスＡ，Ｂ結合処理のフローチャートである。
【図１０】本発明の手法と従来の手法の比較結果である。
【図１１】従来のマージ結合のフローチャートである。
【符号の説明】
【０１４６】
１００  入出力部
１１０  検索手段、検索部
１２０  キー値リスト生成手段、キー値リスト処理部
１３０  記憶手段、キー値リスト記憶部
１４０  通信部
１４１  送信手段
１５０  検索フラグリスト処理部
１５１  検索フラグリストＢ初期化手段
１５２  検索フラグリスト
２１０  マージ処理部
２２０  レコード結合手段、レコード結合部
２３０  通信部
２４０  バッファＢ
２５０  バッファＡ
３１０  検索条件入力装置
３２０  結合結果出力装置
【図１】
2010128721.tif 000003
【図２】
2010128721.tif 000004
【図３】
2010128721.tif 000005
【図４】
2010128721.tif 000006
【図５】
2010128721.tif 000007
【図６】
2010128721.tif 000008
【図７】
2010128721.tif 000009
【図８】
2010128721.tif 000010
【図９】
2010128721.tif 000011
【図１０】
2010128721.tif 000012
【図１１】
2010128721.tif 000013