(57)【特許請求の範囲】
【請求項１】
所定のレコード群を格納するデータベースを有する各ノードに、前記レコード群に対する複数の処理を割り当てる分散処理装置であって、
前記レコード群に含まれる各レコードを特定する属性名ごとに、前記属性名から特定されるレコードに対する処理の実行頻度を取得する取得手段と、
前記取得手段によって取得された属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、他の属性名から特定されるレコードに対する処理の実行頻度よりも実行頻度が大きい一の属性名から特定されるレコードに対する一の処理の集合と、前記一の処理とは異なる他の処理の集合とに分類する分類手段と、
前記分類手段によって分類された一の処理の集合の割当先となるノードを前記複数のノードの中から決定する決定手段と、
前記決定手段によって前記一の処理の集合の割当先に決定されたノードに前記一の処理を割り当てる割当手段と、
を備えることを特徴とする分散処理装置。
【請求項２】
前記一の属性名は実行頻度が最大となる処理の属性名であることを特徴とする請求項１に記載の分散処理装置。
【請求項３】
前記割当手段は、
前記一の処理の集合の割当先に決定されたノード（以下、「一のノード」という）に前記一の処理を割り当てるとともに、前記複数のノードのうち前記一のノードとは異なる他のノードに前記他の処理を割り当てることを特徴とする請求項１または２に記載の分散処理装置。
【請求項４】
前記一の処理の集合のうち前記割当手段によって割り当てられていない未割当の一の処理の集合の中から、処理要求を受け付けた時刻が最古の一の処理を検索する第１の検索手段と、
前記複数のノードのうち前記一のノードを除く残余のノードの中から前記他のノードを選択する選択手段と、
前記他の処理の集合のうち前記割当手段によって割り当てられていない未割当の他の処理の集合の中から、処理要求を受け付けた時刻が最古の他の処理を検索する第２の検索手段と、を備え、
前記割当手段は、
前記第１の検索手段によって検索された一の処理を前記一のノードに割り当てるとともに、前記第２の検索手段によって検索された他の処理を前記選択手段によって選択された他のノードに割り当てることを特徴とする請求項３に記載の分散処理装置。
【請求項５】
前記第２の検索手段は、
前記他の処理が検索されなかった場合、前記割当手段によって前記複数のノードのいずれかのノードに割り当てられた割当済の処理の集合の中から、処理要求を受け付けた時刻が最古の割当済の処理を検索し、
前記割当手段は、
前記一の処理を前記一のノードに割り当てるとともに、前記第２の検索手段によって検索された割当済の処理を前記他のノードに割り当てることを特徴とする請求項４に記載の分散処理装置。
【請求項６】
前記レコードに対する処理の処理要求を受け付ける受付手段と、
前記受付手段によって所定期間中に受け付けた処理の処理要求に基づいて、前記所定期間中の前記レコードに対する処理の実行頻度を前記属性名ごとに算出する算出手段をさらに備え、
前記取得手段は、
前記算出手段によって算出された属性名ごとの前記所定期間中の処理の実行頻度を取得することを特徴とする請求項１〜５のいずれか一つに記載の分散処理装置。
【請求項７】
所定のレコード群を格納するデータベースを有する各ノードに、前記レコード群に対する複数の処理を割り当てるコンピュータを、
前記レコード群に含まれる各レコードを特定する属性名ごとに、前記属性名から特定されるレコードに対する処理の実行頻度を取得する取得手段、
前記取得手段によって取得された属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、他の属性名から特定されるレコードに対する処理の実行頻度よりも実行頻度が大きい一の属性名から特定されるレコードに対する一の処理の集合と、前記一の処理とは異なる他の処理の集合とに分類する分類手段、
前記分類手段によって分類された一の処理の集合の割当先となるノードを前記複数のノードの中から決定する決定手段、
前記決定手段によって前記一の処理の集合の割当先に決定されたノードに前記一の処理を割り当てる割当手段、
として機能させることを特徴とする分散処理プログラム。
【請求項８】
所定のレコード群を格納するデータベースを有する各ノードに、前記レコード群に対する複数の処理を割り当てるコンピュータが、
前記レコード群に含まれる各レコードを特定する属性名ごとに、前記属性名から特定されるレコードに対する処理の実行頻度を取得する取得工程と、
前記取得工程によって取得された属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、他の属性名から特定されるレコードに対する処理の実行頻度よりも実行頻度が大きい一の属性名から特定されるレコードに対する一の処理の集合と、前記一の処理とは異なる他の処理の集合とに分類する分類工程と、
前記分類工程によって分類された一の処理の集合の割当先となるノードを前記複数のノードの中から決定する決定工程と、
前記決定工程によって前記一の処理の集合の割当先に決定されたノードに前記一の処理を割り当てる割当工程と、
を実行することを特徴とする分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の処理をノード群に割り当てる分散処理装置、分散処理プログラムおよび分散処理方法に関する。
【背景技術】
【０００２】
近年、クラウドコンピューティングなどにおいて、データベースへの処理要求を複数の要求元から行うシステムが普及している。要求元とする複数のクライアントから共通のサーバへの処理要求を受け付けるシステムの場合、受け付けた処理要求を実行するノードも複数個用意されている。
【０００３】
ところが、複数の処理要求を単純に複数のノードによって実行させるシステムを用意しても、処理要求からはノードの実行状況を把握できず、特定のノードにばかり処理要求が集中する可能性がある。そこで、複数のクライアントからの処理要求を一元的に受け付けるフォワードプロキシ装置を利用する技術が提供されている。
【０００４】
フォワードプロキシ装置は、受け付けた処理要求を複数のノードに均等に振り分けて、負荷を分散する。また、フォワードプロキシ装置を用意することによって、クライアントなどの処理要求元が要求した処理をどのノードで実行しているか把握させることによって、複製透過性や位置透過性を担保する（たとえば、下記特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第２５８６２１９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術によれば、信頼性の向上などを目的として各ノードが独立してデータベースを持つシステムの場合、ノード間でのデータベースの同期のために、各ノードの処理効率の低下を招くという問題があった。また、各ノードがステートフルな設計の場合、ノード間でのステートの同期も行われるため、ノード間での同期頻度が増加する。このため、処理引受先となるノード数を増やしてもスケールアウトによる処理速度の向上につながらない場合があるという問題があった。
【０００７】
本開示技術は、上述した従来技術による問題点を解消するため、ノード間での同期の発生を抑制して各ノードの処理効率を向上させることのできる分散処理装置、分散処理プログラムおよび分散処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、開示の分散処理装置は、所定のレコード群を格納するデータベースを有する各ノードに、当該レコード群に対する複数の処理を割り当てる分散処理装置であって、前記レコード群に含まれる各レコードを特定する属性名ごとに、当該属性名から特定されるレコードに対する処理の実行頻度を取得し、取得された属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、一の属性名から特定されるレコードに対する一の処理の集合と、当該一の処理とは異なる他の処理の集合とに分類し、分類された一の処理の集合の割当先となるノードを前記複数のノードの中から決定し、前記一の処理の集合の割当先に決定されたノードに前記一の処理を割り当てることを要件とする。
【発明の効果】
【０００９】
本分散処理装置、分散処理プログラムおよび分散処理方法によれば、ノード間での同期の発生を抑制して各ノードの処理効率を向上させることのできるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】実施の形態にかかるネットワークシステムの一実施例を示すシステム構成図である。
【図２】実施の形態にかかる分散処理装置の一実施例を示す説明図である。
【図３】実施の形態にかかる分散処理装置のハードウェア構成を示すブロック図である。
【図４】分散処理装置の機能的構成を示すブロック図である。
【図５】実施の形態にかかる分散処理装置の分散処理手順の一例を示すフローチャートである。
【図６−１】実施の形態にかかる分散処理装置を適用したフォワードプロキシ装置を示す説明図である。
【図６−２】処理対象となるデータの一例を示すデータテーブルである。
【図７】各形式の電文およびスキーマ取得例を示す説明図である。
【図８】排他アイテム名の定義例を示すデータテーブルである。
【図９】トランザクション取得処理部の処理手順を示すフローチャートである。
【図１０】排他アイテム追加処理部の処理手順を示すフローチャートである。
【図１１−１】相関性に応じたデータレコードのパターン分け処理の手順を示すフローチャートである。
【図１１−２】相関性に応じたデータレコードのパターン分け処理を示す説明図である。
【図１２】トラン・アイテムキャッシュテーブルの格納例を示すデータテーブルである。
【図１３】排他アイテムビット列の挿入例を示す説明図である。
【図１４】検索処理部の処理手順を示すフローチャートである。
【図１５】処理ノードごとのレコード抽出例を示す説明図である。
【図１６】格納処理部の処理手順を示すフローチャートである。
【図１７】ディスパッチ処理部の処理手順を示すフローチャートである。
【図１８−１】部分同期モードを用いた排他識別レジスタへの格納処理例を示す説明図（その１）である。
【図１８−２】部分同期モードを用いた排他識別レジスタへの格納処理例を示す説明図（その２）である。
【図１８−３】部分同期モードを用いた排他識別レジスタへの格納処理例を示す説明図（その３）である。
【図１８−４】部分同期モードを用いた排他識別レジスタへの格納処理例を示す説明図（その４）である。
【図１９−１】部分同期モードを用いた排他識別レジスタへの格納処理の手順を示すフローチャート（その１）である。
【図１９−２】部分同期モードを用いた排他識別レジスタへの格納処理の手順を示すフローチャート（その２）である。
【図２０】処理ノードが４個のトラン・アイテムキャッシュテーブルの格納例を示すデータテーブルである。
【図２１】処理ノード間の一括同期処理を示す説明図である。
【図２２】トラン・アイテムキャッシュテーブルに対する処理済みトランザクションＩＤの消込み例を示す説明図である。
【図２３】トラン・アイテムキャッシュテーブルに対する未処理トランザクションＩＤの格納例を示す説明図である。
【図２４】一括同期モードを用いたトラン・アイテムキャッシュテーブルの消込み・格納処理の手順を示す説明図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、この発明にかかる分散処理装置、分散処理プログラムおよび分散処理方法の好適な実施の形態を詳細に説明する。
【００１２】
図１は、実施の形態にかかるネットワークシステムの一実施例を示すシステム構成図である。図１において、ネットワークシステム１００は、分散処理装置１０１とノードＮ１〜Ｎｎとクライアント装置Ｃとを含む構成である。また、ネットワークシステム１００において、分散処理装置１０１とノードＮ１〜Ｎｎとクライアント装置Ｃとは、有線または無線のネットワーク１２０を介して接続されている。
【００１３】
ネットワークシステム１００は、たとえば、高い可用性が要求されるＨＡ（Ｈｉｇｈ  Ａｖａｉｌａｂｉｌｉｔｙ）構成のシステムに適用される。分散処理装置１０１は、クライアント装置Ｃから各種処理の処理要求を受け付けて、ノードＮ１〜Ｎｎに処理を割り当てる機能を有する。分散処理装置１０１は、たとえば、プロキシサーバである。
【００１４】
ノードＮ１〜Ｎｎは、共通のレコード群を格納するデータベース１１０−１〜１１０−ｎをそれぞれ備え、分散処理装置１０１から割り当てられた処理を実行するコンピュータである。クライアント装置Ｃは、データベース１１０−１〜１１０−ｎ内のレコード群に対する処理の処理要求を分散処理装置１０１に送信する。クライアント装置Ｃは、たとえば、パーソナル・コンピュータやサーバである。
【００１５】
以下の説明では、データベース１１０−１〜１１０−ｎに格納されている共通のレコード群を「レコード群Ｒ１〜Ｒｍ」と表記し、レコード群Ｒ１〜Ｒｍのうち任意のレコードを「レコードＲｊ」と表記する（ｊ＝１，２，…，ｍ）。また、ノードＮ１〜Ｎｎのうち任意のノードを「ノードＮｉ」と表記する（ｉ＝１，２，…，ｎ）。
【００１６】
つぎに、実施の形態にかかる分散処理装置１０１の一実施例について説明する。図２は、実施の形態にかかる分散処理装置の一実施例を示す説明図である。ただし、ここでは説明のため、各データベース１１０−１〜１１０−ｎに格納されているレコード群を「レコードＲ１〜Ｒ５」とし、レコード群Ｒ１〜Ｒ５に対する処理群を「処理Ｔ１〜Ｔ１０」とする。
【００１７】
（１）分散処理装置１０１は、各レコードＲｊを特定する属性名ごとに、当該属性名から特定されるレコードＲｊに対する処理の実行頻度を取得する。ここで、レコードＲｊに対する処理とは、たとえば、レコードＲｊの更新処理、参照処理および書込処理などである。
【００１８】
属性名は、レコードＲｊを特定するための属性情報である。属性名は、たとえば、レコードＲｊに含まれるデータの項目名（フィールド名）や、レコードＲｊを含むファイル（テーブル）のファイル名（テーブル名）などである。一つのレコードＲｊを特定するための属性名として、たとえば、ファイル名と項目名の組み合わせを設定してもよく、また、複数の項目名を設定してもよい。
【００１９】
一例として、テーブル名「学生構成」のテーブル内のフィールド名「総人数」、「１年生」、「２年生」、「３年生」の各データを含むレコードＲｊを例に挙げると、レコードＲｊの属性名は、たとえば『学生構成、１年生、２年生、３年生』となる。ただし、データベース１１０−１〜１１０−ｎに格納されている各レコードＲｊを特定するための属性名は予め設定されている。
【００２０】
また、レコードＲｊに対する処理の実行頻度とは、たとえば、クライアント装置Ｃから分散処理装置１０１が受け付ける処理の処理要求の中に、レコードＲｊに対する処理の処理要求が出現する割合である。一例として、分散処理装置１０１がクライアント装置Ｃから受け付けた１００［個］の処理要求の中に、レコードＲｊに対する処理の処理要求が１０［個］含まれていたとする。この場合、レコードＲｊに対する処理の実行頻度は、たとえば、０．１（＝１０／１００）となる。
【００２１】
以下の説明では、各レコードＲ１〜Ｒｍを特定するための属性名を「属性名Ａ１〜Ａｍ」と表記し、属性名Ａ１〜Ａｍのうち任意の属性名を「Ａｊ」と表記する（ｊ＝１，２，…，ｍ）。また、レコードＲｊに対する処理の実行頻度を「実行頻度Ｆｊ」と表記する。
【００２２】
図２に示す例では、レコードＲ１〜Ｒ５を特定するための属性名Ａ１〜Ａ５ごとに、各レコードＲ１〜Ｒ５に対する処理の実行頻度Ｆ１〜Ｆ５が取得されている。ここで、実行頻度Ｆ１〜Ｆ５の大小関係を「Ｆ１＞Ｆ２＞Ｆ３＞Ｆ４＞Ｆ５」とすると、レコードＲ１〜Ｒ５に対する処理のうちレコードＲ１に対する処理が最頻出の処理となる。
【００２３】
（２）分散処理装置１０１は、属性名Ａｊごとの処理の実行頻度Ｆｊに基づいて、複数の処理Ｔ１〜ＴＫを、一の属性名から特定されるレコードに対する一の処理の集合と、一の処理とは異なる他の処理の集合とに分類する。ここで、各処理の処理要求には、処理対象となるレコードＲｊを特定するための属性名Ａｊが含まれている。したがって、分散処理装置１０１は、処理要求に含まれる属性名Ａｊから各処理の処理対象となるレコードＲｊを特定することができる。
【００２４】
具体的には、たとえば、分散処理装置１０１は、処理Ｔｋの処理要求に含まれる属性名が一の属性名の場合は、処理Ｔｋを一の処理の集合に分類する（ｋ＝１，２，…，Ｋ）。一方、分散処理装置１０１は、処理Ｔｋの処理要求に含まれる属性名が一の属性名とは異なる属性名の場合は、処理Ｔｋを他の処理の集合に分類する。
【００２５】
ここでは、一例として、属性名Ａ１〜Ａ５のうち、処理の実行頻度が最大の属性名Ａ１を一の属性名とする。この場合、分散処理装置１０１は、処理Ｔｋの処理要求に含まれる属性名が属性名Ａ１の場合は処理Ｔｋを一の処理の集合に分類し、処理Ｔｋの処理要求に含まれる属性名が属性名Ａ１とは異なる場合は処理Ｔｋを他の処理の集合に分類する。この結果、処理Ｔ１，Ｔ３，Ｔ５が一の処理の集合に分類され、処理Ｔ２，Ｔ４，Ｔ６，Ｔ７，Ｔ８，Ｔ９，Ｔ１０が他の処理の集合に分類されている。
【００２６】
（３）分散処理装置１０１は、分類された一の処理の集合の割当先となるノードをノードＮ１〜Ｎｎの中から決定する。ここでは、ノードＮ１〜Ｎｎの中から、一の処理の集合の割当先としてノードＮ１が決定されている。
【００２７】
（４）分散処理装置１０１は、一の処理の集合の割当先に決定されたノードＮｉに一の処理を割り当てる。ここでは、一の処理の集合に含まれる処理Ｔ１，Ｔ３，Ｔ５がノードＮ１に割り当てられる。この結果、レコードＲ１に対する処理Ｔ１，Ｔ３，Ｔ５は、ノードＮ１が備えるデータベース１１０−１に対してのみ実行される。なお、他の処理の集合に含まれる処理Ｔ２，Ｔ４，Ｔ６，Ｔ７，Ｔ８，Ｔ９，Ｔ１０は、たとえば、ノードＮ１〜ＮｎのいずれかのノードＮｉに割り当てられる。
【００２８】
このように、分散処理装置１０１によれば、ノードＮ１〜Ｎｎに割り当てる処理Ｔ１〜ＴＫを、一の処理の集合と他の処理の集合に分類して、一の処理を同一のノードに割り当てることができる。これにより、一の処理を一つのノードに集中させることができ、一の処理の処理対象となるレコードＲｊのデータ内容を一致させるための同期を後回しにして同期回数を減らし、同期処理にかかるオーバーヘッドを削減することができる。
【００２９】
また、分散処理装置１０１によれば、属性名Ａｊごとの処理の実行頻度Ｆｊをもとに一の属性名を指定することができる。このため、たとえば、実行頻度Ｆｊが最大となる属性名Ａｊを一の属性名として指定することで、最頻出の処理の実行時に発生する同期処理のオーバーヘッドを効果的に削減することができる。
【００３０】
上述した例では、一の処理の割当先をノードＮ１に固定している間は、レコードＲ１のデータ内容をノード間で同期させる必要がない。これにより、最頻出の処理の実行時に発生する同期処理のオーバーヘッドを削減して、ネットワークシステム１００のパフォーマンス低下を抑制することができる。
【００３１】
（分散処理装置１０１のハードウェア構成）
図３は、実施の形態にかかる分散処理装置のハードウェア構成を示すブロック図である。図３において、分散処理装置１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、磁気ディスクドライブ３０４と、磁気ディスク３０５と、光ディスクドライブ３０６と、光ディスク３０７と、ディスプレイ３０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０９と、キーボード３１０と、マウス３１１と、スキャナ３１２と、プリンタ３１３と、を備えている。また、各構成部はバス３００によってそれぞれ接続されている。
【００３２】
ここで、ＣＰＵ３０１は、分散処理装置１０１の全体の制御を司る。ＲＯＭ３０２は、ブートプログラムや分散処理を実現するための分散処理プログラムなどの各種プログラムを記憶している。ＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される。磁気ディスクドライブ３０４は、ＣＰＵ３０１の制御にしたがって磁気ディスク３０５に対するデータのリード／ライトを制御する。磁気ディスク３０５は、磁気ディスクドライブ３０６の制御で書き込まれたデータを記憶する。
【００３３】
光ディスクドライブ３０６は、ＣＰＵ３０１の制御にしたがって光ディスク３０７に対するデータのリード／ライトを制御する。光ディスク３０７は、光ディスクドライブ３０６の制御で書き込まれたデータを記憶したり、光ディスク３０７に記憶されたデータをコンピュータに読み取らせたりする。
【００３４】
ディスプレイ３０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ３０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３５】
インターフェース（以下、「Ｉ／Ｆ」と略する。）３０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１２０に接続され、このネットワーク１２０を介して他の装置に接続される。そして、Ｉ／Ｆ３０９は、ネットワーク１２０と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ３０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３６】
キーボード３１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス３１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３７】
スキャナ３１２は、画像を光学的に読み取り、分散処理装置１０１内に画像データを取り込む。なお、スキャナ３１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ３１３は、画像データや文書データを印刷する。プリンタ３１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００３８】
（分散処理装置１０１の機能的構成）
つぎに、実施の形態にかかる分散処理装置１０１の機能的構成について説明する。図４は、分散処理装置の機能的構成を示すブロック図である。図４において、分散処理装置１０１は、受付部４０１と、検出部４０２と、生成部４０３と、取得部４０４と、分類部４０５と、決定部４０６と、割当部４０７と、算出部４０８と、第１の検索部４０９と、選択部４１０と、第２の検索部４１１と、指示部４１２と、を含む構成である。各機能部（受付部４０１〜指示部４１２）は、具体的には、たとえば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶装置に記憶されたプログラムをＣＰＵ３０１に実行させることにより、または、Ｉ／Ｆ３０９により、その機能を実現する。なお、各機能部（受付部４０１〜指示部４１２）の処理結果は、たとえば、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶装置に記憶される。
【００３９】
受付部４０１は、各データベース１１０−１〜１１０−ｎに格納されているレコードＲｊに対する処理Ｔｋを要求する処理要求をクライアント装置Ｃから受け付ける機能を有する。ここで、処理要求は、たとえば、レコードＲｊに対する処理Ｔｋを要求する電文や順編成ファイルである。
【００４０】
また、処理要求は、一つの処理Ｔｋを要求するものでもよく、トランザクションやバッチジョブのように複数の処理Ｔｋを要求するものでもよい。すなわち、処理要求は、一つのレコードＲｊに対する処理Ｔｋを要求するものでもよく、また、複数のレコードＲｊに対する一連の処理Ｔｋを要求するものでもよい。
【００４１】
また、処理要求は、たとえば、ＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）等のスキーマ構造が定義済みの電文（データ）として記述されている。処理要求には、処理対象となるレコードＲｊを特定するための属性名Ａｊが含まれている。また、更新処理や書込処理などの処理要求の場合は、処理要求には、更新対象または書込対象となるデータが含まれている。
【００４２】
各レコードＲｊを特定するための属性名Ａｊは、たとえば、予め設定されてＲＯＭ３０２、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶装置に記憶されている。なお、各レコードＲｊを特定するための属性名Ａｊの具体例については、図７および図８を用いて後述する。
【００４３】
検出部４０２は、受け付けた処理Ｔｋの処理要求の中から属性名Ａｊを検出する機能を有する。具体的には、たとえば、検出部４０２が、処理要求のデータ形式にしたがって、処理要求の中から属性名Ａｊを表す文字列（たとえば、タグに囲まれた文字列）を検出する。処理要求のデータ形式としては、たとえば、ＸＭＬ要素形式やＸＭＬ属性形式などがある。
【００４４】
生成部４０３は、検出された検出結果に基づいて、レコードＲｊを特定するための属性名Ａｊごとに、受け付けた処理Ｔｋの処理要求に属性名Ａｊが含まれているか否かを示すビット列を生成する機能を有する。具体的には、たとえば、生成部４０３が、属性名Ａｊごとに、処理要求に属性名Ａｊが含まれている場合は「１」、属性名Ａｊが含まれていない場合は「０」を示すビット列を生成する。このため、予め設定された属性名Ａｊの総数がｍ個の場合、ビット列はｍビットとなる。
【００４５】
一例として、「ｍ＝５」とし、受け付けた処理Ｔｋの処理要求に属性名Ａ３が含まれている場合を説明する。この場合、各属性名Ａ１〜Ａ５が処理要求に含まれているか否かを示すビット列は、属性名Ａ１〜Ａ５の順に「００１００」となる。ビット列によれば、各処理Ｔｋの処理要求に含まれている属性名Ａｊ（上記例では属性名Ａ３）を容易に特定することができる。
【００４６】
取得部４０４は、各レコードＲｊを特定するための属性名Ａｊごとに、属性名Ａｊから特定されるレコードＲｊに対する処理の実行頻度Ｆｊを取得する機能を有する。具体的には、たとえば、取得部４０４が、図３に示したキーボード３１０やマウス３１１を用いたユーザの操作入力により、レコードＲｊに対する処理の実行頻度Ｆｊを取得してもよい。また、取得部４０４が、後述する算出部４０８によって算出されたレコードＲｊに対する処理の実行頻度Ｆｊを取得してもよい。
【００４７】
分類部４０５は、取得された属性名Ａｊごとの処理の実行頻度Ｆｊに基づいて、複数の処理Ｔ１〜ＴＫを、一の属性名から特定されるレコードに対する一の処理の集合と、一の処理とは異なる他の処理の集合とに分類する機能を有する。ここで、一の属性名は、属性名Ａ１〜Ａｍの中から任意に設定可能である。具体的には、たとえば、一の属性名は、属性名Ａ１〜Ａｍのうち少なくとも他の属性名よりも実行頻度が大きい属性名である。
【００４８】
一例として、一の属性名を、属性名Ａ１〜Ａｍのうち実行頻度が最大の属性名とする。この場合、たとえば、分類部４０５が、取得された属性名Ａｊごとの処理の実行頻度Ｆｊをもとに、属性名Ａ１〜Ａｍの中から実行頻度が最大の処理の属性名Ａmaxを特定する。
【００４９】
そして、分散処理装置１０１は、処理Ｔｋの処理要求に含まれる属性名が属性名Ａmaxの場合は処理Ｔｋを一の処理の集合に分類する。一方、分散処理装置１０１は、処理Ｔｋの処理要求に含まれる属性名が属性名Ａmaxとは異なる場合は処理Ｔｋを他の処理の集合に分類する。このとき、分類部４０５は、生成された処理Ｔｋの処理要求のビット列を参照することで、処理要求に属性名Ａmaxを含むか否かを容易に特定でき、分類処理の効率化を図ることができる。
【００５０】
決定部４０６は、分類された一の処理の集合の割当先となるノードＮｉをノードＮ１〜Ｎｎの中から決定する機能を有する。具体的には、たとえば、決定部４０６が、ノードＮ１〜Ｎｎの中から任意に選ばれたノードＮｉを、一の処理の集合の割当先に決定してもよい。また、決定部４０６が、ノードＮ１〜Ｎｎのうち処理能力が最大のノードＮｉを一の処理の集合の割当先に決定してもよい。以下の説明では、一の処理の集合の割当先に決定されたノードＮｉを「一のノード」という。
【００５１】
割当部４０７は、一のノードに一の処理を割り当てる機能を有する。具体的には、たとえば、割当部４０７が、後述する第１の検索部４０９によって検索された一の処理を一のノードに割り当てることにしてもよい。また、割当部４０７は、ノードＮ１〜Ｎｎのうち一のノードとは異なる他のノードに他の処理を割り当てる機能を有する。具体的には、たとえば、割当部４０７が、後述する第２の検索部４１１によって検索された他の処理を他のノードに割り当てることにしてもよい。
【００５２】
算出部４０８は、受け付けた処理Ｔｋの処理要求に基づいて、属性名ＡｊごとにレコードＲｊに対する処理の実行頻度Ｆｊを算出する機能を有する。具体的には、たとえば、算出部４０８が、所定期間中に受け付けた処理Ｔｋの処理要求に基づいて、所定期間中のレコードＲｊに対する処理の実行頻度Ｆｊを算出することにしてもよい。
【００５３】
この場合、取得部４０４は、たとえば、割当対象となる処理Ｔ１〜ＴＫの処理要求を受け付けた期間に合わせて、算出された該期間中のレコードＲｊに対する処理の実行頻度Ｆｊを取得することにしてもよい。具体的には、たとえば、割当対象となる処理Ｔ１〜ＴＫの処理要求を月曜日に受け付けた場合、以前の月曜日に受け付けた処理Ｔｋの処理要求に基づく処理の実行頻度Ｆｊを取得する。
【００５４】
これにより、月や曜日や時間帯などによって変動する処理の実行頻度Ｆｊの変動に合わせて一の属性名を指定することができる。また、レコードＲｊに対する処理の実行頻度Ｆｊは、たとえば、既存のアプリオリ（ａ  ｐｒｉｏｒｉ）アルゴリズムを用いて算出することができる。なお、算出部４０８の具体的な処理内容は、図１１−１および図１１−２を用いて後述する。
【００５５】
選択部４１０は、ノードＮ１〜Ｎｎのうち一のノードを除く残余のノードの中から他のノードを選択する機能を有する。具体的には、たとえば、選択部４１０が、残余のノードＮ１〜Ｎｎの中から他のノードを任意に選択してもよく、また、処理能力が高い順に他のノードを選択してもよい。
【００５６】
第１の検索部４０９は、所定の検索条件に基づいて、一の処理の集合の中から一の処理を検索する機能を有する。具体的には、たとえば、第１の検索部４０９が、一の処理の集合の中から、処理要求を受け付けた時刻が最も古い一の処理を検索することにしてもよい。また、割当部４０７は、第１の検索部４０９によって検索された一の処理を一のノードに割り当てることにしてもよい。
【００５７】
これにより、一の処理を最古のものから実行でき、一の処理の処理対象となるレコードＲｊのデータ内容の整合性を保証することができる。また、第１の検索部４０９は、一の処理の集合の中から、各処理Ｔｋの処理要求に付与されている優先度が最大となる一の処理を検索することにしてもよい。これにより、一の処理を優先度の高いものから実行することができる。
【００５８】
第２の検索部４１１は、所定の検索条件に基づいて、他の処理の集合の中から他の処理を検索する機能を有する。具体的には、たとえば、第２の検索部４１１が、他の処理の集合の中から、処理要求を受け付けた時刻が最も古い他の処理を検索することにしてもよい。また、割当部４０７は、第２の検索部４１１によって検索された他の処理を、選択部４１０によって選択された他のノードに割り当てることにしてもよい。
【００５９】
これにより、他の処理を最古のものから実行でき、他の処理の処理対象となるレコードＲｊのデータ内容の整合性を保証することができる。また、第２の検索部４１１は、他の処理の集合の中から、各処理Ｔｋの処理要求に付与されている優先度が最大となる他の処理を検索することにしてもよい。これにより、他の処理を優先度の高いものから実行することができる。
【００６０】
また、第２の検索部４１１は、他の処理が検索されなかった場合、割当部４０７によってノードＮ１〜ＮｎのいずれかのノードＮｉに割り当てられた割当済の処理の集合の中から、処理要求を受け付けた時刻が最古の割当済の処理を検索することにしてもよい。この場合、割当部４０７は、第２の検索部４１１によって検索された割当済の処理を他のノードに割り当てることにしてもよい。これにより、ノードＮ１〜Ｎｎのうち一のノードを除く残余のノードのデータベース間で各レコードＲｊのデータ内容を一致させるための同期を行うことができる。
【００６１】
指示部４１２は、第１の検索部４０９によって一の処理が検索されなかった場合、データベース間でレコード群Ｒ１〜Ｒｍのデータ内容を一致させる同期指示をノードＮ１〜Ｎｎに指示する機能を有する。具体的には、たとえば、指示部４１２が、ネットワーク１２０を介して、ノードＮ１〜Ｎｎに同期指示を送信する。
【００６２】
これにより、後回しにしていた同期処理を自動で行うことができ、レコード群Ｒ１〜Ｒｍのデータ内容のデータベース間での同一性を確保することができる。ただし、キーボード３１０やマウス３１１を用いたユーザの操作入力により、任意のタイミングで同期指示をノードＮ１〜Ｎｎに指示することにしてもよい。
【００６３】
（分散処理装置１０１の分散処理手順）
つぎに、実施の形態にかかる分散処理装置１０１の分散処理手順について説明する。図５は、実施の形態にかかる分散処理装置の分散処理手順の一例を示すフローチャートである。ただし、ここでは、ノードＮ１〜Ｎｎに対する割当対象となる複数の処理を「処理Ｔ１〜ＴＫ」とする。
【００６４】
図５において、まず、取得部４０４により、各レコードＲｊを特定するための属性名Ａｊごとに、属性名Ａｊから特定されるレコードＲｊに対する処理の実行頻度Ｆｊを取得する（ステップＳ５０１）。そして、分類部４０５により、取得された属性名Ａｊごとの処理の実行頻度Ｆｊに基づいて、処理Ｔ１〜ＴＫを、一の属性名から特定されるレコードに対する一の処理の集合と他の処理の集合とに分類する（ステップＳ５０２）。なお、一の属性名は、たとえば、属性名Ａ１〜Ａｍのうち実行頻度が最大の属性名である。
【００６５】
このあと、決定部４０６により、分類された一の処理の集合の割当先となる一のノードをノードＮ１〜Ｎｎの中から決定する（ステップＳ５０３）。つぎに、第１の検索部４０９により、一の処理の集合の中から、処理要求を受け付けた時刻が最も古い一の処理を検索する（ステップＳ５０４）。
【００６６】
ここで、一の処理が検索された場合（ステップＳ５０５：Ｙｅｓ）、割当部４０７により、検索された一の処理を一のノードに割り当てる（ステップＳ５０６）。そして、選択部４１０により、ノードＮ１〜Ｎｎのうち一のノードを除く残余のノードの中から他のノードを選択する（ステップＳ５０７）。
【００６７】
つぎに、第２の検索部４１１により、他の処理の集合の中から、処理要求を受け付けた時刻が最も古い他の処理を検索する（ステップＳ５０８）。ここで、他の処理が検索された場合（ステップＳ５０９：Ｙｅｓ）、割当部４０７により、検索された他の処理を、選択された他のノードに割り当てる（ステップＳ５１０）。
【００６８】
そして、選択部４１０により、ノードＮ１〜Ｎｎのうち一のノードを除く残余のノードの中から選択されていない未選択のノードがあるか否かを判断する（ステップＳ５１１）。ここで、未選択のノードがある場合（ステップＳ５１１：Ｙｅｓ）、ステップＳ５０７に戻る。一方、未選択のノードがない場合（ステップＳ５１１：Ｎｏ）、割当部４０７により、割り当てた割当結果を一のノードおよび他のノードに送信して（ステップＳ５１２）、ステップＳ５０５に戻る。
【００６９】
ここで、一のノードの割当結果とは、たとえば、一のノードに割り当てた一の処理の処理要求である。他のノードの割当結果とは、たとえば、他のノードに割り当てた他の処理または割当済の処理の処理要求である。
【００７０】
また、ステップＳ５０９において、他の処理が検索されなかった場合（ステップＳ５０９：Ｎｏ）、第２の検索部４１１により、ノードＮ１〜ＮｎのいずれかのノードＮｉに割り当てられた割当済の処理の集合の中から、処理要求を受け付けた時刻が最古の割当済の処理を検索する（ステップＳ５１３）。
【００７１】
ここで、割当済の処理が検索された場合（ステップＳ５１４：Ｙｅｓ）、割当部４０７により、検索された割当済の処理を他のノードに割り当てて（ステップＳ５１５）、ステップＳ５１１に移行する。一方、割当済の処理が検索されなかった場合（ステップＳ５１４：Ｎｏ）、ステップＳ５１１に移行する。
【００７２】
また、ステップＳ５０５において、一の処理が検索されなかった場合（ステップＳ５０５：Ｎｏ）、指示部４１２により、レコード群Ｒ１〜Ｒｍのデータ内容を一致させる同期指示をノードＮ１〜Ｎｎに送信して（ステップＳ５１６）、本フローチャートによる一連の処理を終了する。
【００７３】
以上説明したように、実施の形態にかかる分散処理装置１０１によれば、属性名Ａｊごとの処理の実行頻度Ｆｊに基づいて、処理Ｔ１〜ＴＫを、一の属性名から特定されるレコードに対する一の処理の集合と、他の処理の集合とに分類することができる。また、分散処理装置１０１によれば、一の処理の集合の割当先となる一のノードをノードＮ１〜Ｎｎの中から決定して、一の処理を一のノードに割り当てることができる。
【００７４】
これにより、一の処理を一のノードに集中させることができ、一の処理の処理対象となるレコードＲｊのデータ内容を一致させるための同期を後回しにして同期回数を減らし、同期処理にかかるオーバーヘッドを削減することができる。また、実行頻度Ｆｊが最大となる属性名Ａｊを一の属性名として指定することで、最頻出の処理の実行時に発生する同期処理のオーバーヘッドを効果的に削減することができる。
【００７５】
また、分散処理装置１０１によれば、一のノードに一の処理を割り当てるとともに、ノードＮ１〜Ｎｎのうち一のノードとは異なる他のノードに他の処理を割り当てることができる。これにより、一のノードについて、他の処理が割り当てられることがないため、他の処理の処理対象となるレコードＲｊのデータ内容を一致させるための同期を後回しにすることができる。
【００７６】
また、分散処理装置１０１によれば、一の処理の集合のうち未割当の一の処理の集合の中から、処理要求を受け付けた時刻が最古の一の処理を検索して、一のノードに割り当てることができる。これにより、一の処理を最古のものから実行でき、一の処理の処理対象となるレコードＲｊのデータ内容の整合性を保証することができる。
【００７７】
また、分散処理装置１０１によれば、他の処理の集合のうち未割当の他の処理の集合の中から、処理要求を受け付けた時刻が最古の他の処理を検索し、ノードＮ１〜Ｎｎのうち一のノードを除く残余のノードの中から選ばれた他のノードに割り当てることができる。これにより、他の処理を最古のものから実行でき、他の処理の処理対象となるレコードＲｊのデータ内容の整合性を保証することができる。
【００７８】
また、分散処理装置１０１によれば、他の処理が非検索の場合は、ノードＮ１〜ＮｎのいずれかのノードＮｉに割り当てられた割当済の処理の集合の中から、処理要求を受け付けた時刻が最古の割当済の処理を検索して、他のノードに割り当てることができる。これにより、ノードＮ１〜Ｎｎのうち一のノードを除く残余のノードのデータベース間で各レコードＲｊのデータ内容を一致させるための同期を行うことができる。
【００７９】
また、分散処理装置１０１によれば、各レコードＲｊを特定するための属性名Ａｊごとに、各処理Ｔｋの処理要求に属性名Ａｊが含まれているか否かを示すビット列を生成することができる。また、分散処理装置１０１によれば、各処理Ｔｋの処理要求のビット列を参照することにより、処理要求に一の属性名を含むか否かを容易に特定でき、分類処理の効率化を図ることができる。
【００８０】
また、分散処理装置１０１によれば、所定期間中に受け付けた各処理Ｔｋの処理要求に基づいて、属性名Ａｊごとの処理の実行頻度Ｆｊを算出することにより、期間ごとの傾向に応じた処理の実行頻度Ｆｊを取得することができる。これにより、月や曜日や時間帯などによって変動する処理の実行頻度Ｆｊの変動に合わせて一の属性名を指定することができる。
【００８１】
また、分散処理装置１０１によれば、一の処理が検索されなかった場合、データベース間でレコード群Ｒ１〜Ｒｍのデータ内容を一致させる同期指示をノードＮ１〜Ｎｎに指示することができる。これにより、後回しにしていた同期処理を自動で行うことができ、レコード群Ｒ１〜Ｒｍのデータ内容のデータベース間での同一性を確保することができる。
【００８２】
つぎに、実施の形態にかかる分散処理装置１０１の実施例について説明する。ここでは、分散処理装置１０１をフォワードプロキシ装置に適用した場合を例に挙げて、具体的なトランザクションデータの分散処理について説明する。
【００８３】
（分散処理を適用したフォワードプロキシ装置）
図６−１は、実施の形態にかかる分散処理装置を適用したフォワードプロキシ装置を示す説明図である。図６−２は、処理対象となるデータの一例を示すデータテーブルである。図６−１に示したような、フォワードプロキシ装置６００では、図６−２に示したようなデータテーブル５００に示すような、エンティティと属性とが設定されたトランザクションデータを取得して、各処理ノードに実行させる。すなわち、フォワードプロキシ装置６００が扱うトランザクションデータの場合、データテーブルが表している属性に基づいてデータベース内の１レコードが構成されていることを意味する。
【００８４】
図６−１において、フォワードプロキシ装置６００は、共通のデータベースへの処理を要求するトランザクションデータを一括して取得して、共通のデータベースへの並列処理が可能な各処理ノード、たとえば、後述する図１７に示す「ア」、「イ」、「ウ」の各処理ノードへ振り分ける機能を有している。
【００８５】
トランザクションデータとしては、たとえば、オンラインクライアントから入力された電文６０１が挙げられる。フォワードプロキシ装置６００は、各処理ノードにそれぞれ用意された共通のデータベースへの処理要求として、上述のようなトランザクションデータを取得する。そしてフォワードプロキシ装置６００は、トランザクションデータを一旦装置内に格納する。そして、格納済みのトランザクションデータの中の未処理のトランザクションデータを各処理ノードに振り分けて、同一の処理ステップとして実行させる。
【００８６】
特に、フォワードプロキシ装置６００の場合、トランザクションデータを実行する際にアクセスされるレコードのアクセス頻度を参照する。そして、フォワードプロキシ装置６００は、最もアクセス頻度が高いレコードの組み合わせに該当するトランザクションデータに関しては、他のトランザクションデータと分けて優先的に処理を実行させる。なお、ここでのアクセス頻度は、上述した処理の実行頻度Ｆｊに相当する。
【００８７】
また、フォワードプロキシ装置６００は、アクセス頻度が高いレコードの組み合わせ以外をもつトランザクションデータを、アクセス頻度が高いレコードを含むトランザクションデータとは異なる処理ノードにて実行するように振り分ける。すなわち、同じ処理ステップで異なる処理ノードに振り分けられた上記の２種類のトランザクションデータは、処理対象となるレコード同士に排他性が保たれている。
【００８８】
フォワードプロキシ装置６００は、同じレコードにアクセスする必要のあるトランザクションデータ同士については、同一の処理ノード（たとえば、処理ノード「ア」）によって優先的に実行されるように振り分ける。したがって、同じレコードにアクセスするトランザクションデータを他の処理ノードで実行させないため、同期処理の必要性を可能な限り削減することができる。
【００８９】
結果として、従来の分散処理装置のように、同一のレコードへのアクセス集中によるロック状態の発生や、頻繁な同期処理を防ぐことができる。したがって、各処理ノードはそれぞれ独立してトランザクションデータを実行できるとともに、同期処理の際の待機時間が削減されるため、処理効率を向上させることができる。
【００９０】
具体的な構成について説明すると、フォワードプロキシ装置６００は、図６−１のように、上述した分散処理装置１０１の各機能部を実現するための機能部として、トランザクション取得処理部６１０と、排他アイテム追加処理部６２０と、検索処理部６３０と、格納処理部６４０と、ディスパッチ処理部６５０とを備えている。
【００９１】
トランザクション取得部０００は、上述した分散処理装置１０１の受付部４０１、検出部４０２および生成部４０３に相当する機能を実現する。また、排他アイテム追加処理部６２０は、上述した分類部４０５および取得部４０４に相当する機能を実現する。さらに、検索処理部６３０は、上述した決定部４０６、選択部４１０および第２の検索部４１１に相当する機能を実現する。また、格納処理部６４０は、上述した割当部４０７に相当する機能を実現する。そして、ディスパッチ処理部６５０は、上述の割当部４０７によって処理が割り当てられたノードの動作を制御する機能を実現している。各処理部の詳細な機能については順に後述する。
【００９２】
また、フォワードプロキシ装置６００には、各種データを記憶する記憶領域として、トラン・アイテムテーブル６０２と、振分前データテーブル６０３と、処理ノードごとのデータキュー６０４とが用意されている。トラン・アイテムテーブル６０２内には、高速アクセス可能なトラン・アイテムキャッシュテールおよび排他識別レジスタが用意されている。各記憶領域の役割についても関連する機能部の説明に合わせて詳しく後述する。
【００９３】
＜データ構成＞
ここで、フォワードプロキシ装置６００による分散処理の説明に入る前に、フォワードプロキシ装置６００に入力されるトランザクションデータのデータ構成について説明する。フォワードプロキシ装置６００では、取得したトランザクションデータに含まれている情報に基づいて、トランザクションデータを処理する際にアクセスするレコードが特定される。上述したように、各処理ノードが共通のデータベースに対して並列処理を行う場合には、各処理ノードがそれぞれ処理を実行する際に、アクセスするレコードが重複しないようなトランザクションデータを振り分けなければならない。
【００９４】
そこで、フォワードプロキシ装置６００は、取得したトランザクションデータの中から、処理実行時にアクセスするレコードを特定するための情報を参照して、予めどのレコードへアクセスが発生するかを表す情報を用意しておく。具体的には、取得したトランザクションのデータ形式に基づいて、データテーブル５００（図６−２参照）に挙げられたエンティティのいずれのデータが処理対象となるかを特定する。そして、特定された処理対象となるデータに応じて、トランザクションデータを処理ノードによって実行する際に、アクセスされるレコードを特定することができる。
【００９５】
ここで、図７は、各形式の電文およびスキーマ取得例を示す説明図である。図７のデータ列７００は、フォワードプロキシ装置６００に入力される電文６０１の形式の具体例と、データ形式ごとの電文６０１の表示内容の仕様を意味するスキーマとを表している。図７のデータ列７００では、電文６０１の形式として、（Ａ）ＸＭＬ要素形式と、（Ｂ）ＸＭＬ属性系と、（Ｃ）ＣＳＶ（Ｃｏｍｍａ  Ｓｅｐａｒａｔｅｄ  Ｖａｌｕｅｓ）形式とが挙げられている。いずれの形式の電文６０１も、学生構成テーブル学校ＩＤ“ＪＯ１２３４”のレコードについて、総数を“１８３”名に更新するための処理が記されている。
【００９６】
そして、図８は、排他アイテム名の定義例を示すデータテーブルである。フォワードプロキシ装置６００の場合、図８のデータ列８００に示したような排他アイテム名リストが設定されている。排他アイテム名リストは、「学生構成」、「教職員構成」、「収入」、「支出」などが、それぞれ排他アイテム名として設定されている。各トランザクションデータは、各排他アイテム名のどの属性を表すデータが含まれているかに応じて、処理実行時にアクセスするデータテーブル８１０を特定する。
【００９７】
具体的には、属性と各排他アイテム名とが同列に設定されているデータテーブル８１０を利用して、トランザクションデータに含まれる属性から排他アイテム名を一意的に特定することができる。すなわち、フォワードプロキシ装置６００が図７のデータ列７００に示したような電文６０１を取得すると、電文６０１に含まれる属性から排他アイテム名を特定する。また、排他アイテム名は、「学生構成」、「教職員構成」など、実際の名称ではなく、少ないビット数で識別できるように、下記のように識別子を設定しておく。
【００９８】
学生構成に関する属性８１１  →排他アイテム名Ａ
教職員構成に関する属性８１２→排他アイテム名Ｂ
収入に関する属性８１３      →排他アイテム名Ｃ
支出に関する属性８１４      →排他アイテム名Ｄ
その他の任意の属性          →排他アイテム名Ｅ
【００９９】
上述したように、同じ排他アイテム名に設定される属性のデータであれば同じレコードに格納されていることを意味する。したがって、たとえば、学生構成に関する属性８１１のいずかが含まれた電文６０１であれば、上記のような設定が行われている場合には、電文６０１は排他アイテム名Ａを処理対象とすると特定される。また、電文６０１によって排他アイテム名Ａ，Ｃを処理対象とするといったように複数の排他アイテム名が設定されている場合、当然のことながら、１つのトランザクションデータによって複数のレコードにアクセスが行われる。
【０１００】
＜トランザクション取得処理部＞
図９は、トランザクション取得処理部の処理手順を示すフローチャートである。トランザクション取得処理部６１０は、共通のデータベースを処理対象とするトランザクションデータを取得する機能を有する。トランザクション取得処理部６１０は、オンラインクライアントなどからのトランザクションデータ（たとえば、電文６０１）の入力をトリガに処理を開始する。
【０１０１】
図９のように、トランザクション取得処理部６１０では、事前処理として、排他対象を抽出するためのキーワードである「排他アイテム名」が設定されているか否かを判断する（ステップＳ９０１）。ステップＳ９０１において、排他アイテム名が設定されていないと判断された場合（ステップＳ９０１：Ｎｏ）、トランザクション取得処理部６１０は、設計者や上位システムからの指示を受け付けて、排他アイテム名を設定する（ステップＳ９０２）。
【０１０２】
なお、フォワードプロキシ装置６００の場合、ステップＳ９０２では、「排他アイテム名」としてＡ，Ｂ，Ｃ，Ｄ，Ｅの５個が設定される。また、ステップＳ９０１において、排他アイテム名が設定されていると判断された場合（ステップＳ９０１：Ｙｅｓ）、そのままステップＳ９０３の処理に移行する。
【０１０３】
そして、トランザクション取得処理部６１０は、実際にトランザクションデータを取得したか否かを判断する（ステップＳ９０３）。ステップＳ９０３では、トランザクションデータを取得するまで待機状態となる（ステップＳ９０３：Ｎｏのループ）。ステップＳ９０３において、トランザクションデータを取得したと判断されると（ステップＳ９０３：Ｙｅｓ）、トランザクション取得処理部６０１は、トランザクションデータの排他条件逐次をチェックするための準備として、「排他アイテムビット列」を作成する（ステップＳ９０４）。
【０１０４】
さらに、トランザクション取得処理部６０１は、ステップＳ９０４によって作成した「排他アイテムビット列」を排他識別ハッシュ値にエンコードし（ステップＳ９０５）、トランザクションＩＤを採番する（ステップＳ９０６）。なお、トランザクションＩＤは、他のトランザクションデータとの区別し、なおかつ、トランザクション取得処理部６１０による取得順序を特定する必要があるため通し番号が振られる。
【０１０５】
「排他アイテムビット列」は、トランザクションデータを実行する際にアクセスされる排他アイテム名（レコード単位）を表している。したがって、たとえば、排他アイテム名「Ａ，Ｂ，Ｃ，Ｄ，Ｅ」に対応した排他アイテムビット列が「０１０１１」であれば、ビットが立っている排他アイテム名Ｂ，Ｄ，Ｅを参照するトランザクションデータであることを意味する。
【０１０６】
そして、生成された排他アイテムビット列「０１０１１」は、排他識別ハッシュ値にエンコードされ、１０進表示の「１１」となる。なお、本実施例では排他識別ハッシュ値として１０進数化したものを例示するが、１６進など排他アイテムビット列に戻すことが可能な表現であればどのようなものを用いても良い。
【０１０７】
その後、トランザクション取得処理部６１０は、ステップＳ９０６によって採番されたトランザクションＩＤをキーとして、ステップＳ９０５によってエンコードされた排他識別ハッシュ値をトラン・アイテムテーブル６０２に追加する（ステップＳ９０７）。また、トランザクション取得処理部６１０は、トランザクションＩＤをキーに取得したデータ（処理内容に相当するトランザクションデータ）を、振分前データテーブル６０３に格納する（ステップＳ９０８）。
【０１０８】
そして、トランザクション取得処理部６１０は、あらたなトランザクションデータを取得したことによって、トラン・アイテムテーブル６０２と振分前データテーブル６０３が更新されたことを排他アイテム追加処理部６２０に通知して（ステップＳ９０９）、一連の処理を終了する。
【０１０９】
以上説明したように、トランザクション取得処理部６１０は、共通のデータベースへの処理を行うトランザクションデータを一括して取得して、各処理ノードへ振り分ける前、振分前データテーブル６０３に一時的に格納する。同時に、トランザクション取得処理部６１０は、後段の処理によって、各処理ノードによって並列処理する際に、同一のレコードへのアクセスが競合しないような準備処理を行う。具体的には、トランザクション取得処理部６１０における、トランザクションデータを振り分けるための排他アイテムビット列の作成処理が上述の準備処理に相当する。
【０１１０】
また、トランザクション取得処理部６１０は、トランザクションデータから作成した排他アイテムビット列を排他識別ハッシュ値にエンコードして、トラン・アイテムテーブル６０２に格納している。エンコードによって、トランザクションデータごとの排他アイテムビット列の格納に要する容量が大幅に削減される。したがって、フォワードプロキシ装置６００にトランザクションデータが集中してもオーバーフローを起こすことなく、効率的に振り分けることができる。
【０１１１】
＜排他アイテム追加処理部＞
図１０は、排他アイテム追加処理部の処理手順を示すフローチャートである。また、図１１−１は、相関性に応じたデータレコードのパターン分け処理の手順を示すフローチャートである。図１１−２は、相関性に応じたデータレコードのパターン分け処理を示す説明図である。排他アイテム追加処理部６２０は、トランザクション取得処理部６１０によってあらたに取得したトランザクションデータを各処理ノードによって実行させるための準備処理として、排他アイテムビット列とともに、トラン・アイテムキャッシュテーブルに追加する機能を有する。
【０１１２】
排他アイテム追加処理部６２０における処理では、トランザクションデータに含まれている排他アイテム名の頻度に関する情報は、トランザクションデータの処理ノードへの振り分けに大きく影響する。具体的には、排他アイテム追加処理部６２０は、最頻出な排他アイテム名のパターンを含んだトランザクションデータを優先的に特定の処理ノードによって実行するように振り分ける。
【０１１３】
上述したような振り分けを支援するために、排他アイテム追加処理部６２０は、最頻出な排他アイテム名のパターンを含んだトランザクションデータをその他のトランザクションデータとは区別してトラン・アイテムキャッシュテーブルに格納する。したがって、以下、図１０を用いて、排他アイテム追加処理部６２０の処理の流れを説明し、図１１−１および図１１−２を用いて、データレコードのグループ分けについて説明する。
【０１１４】
排他アイテム追加処理部６２０は、まず、トラン・アイテムテーブル６０２から１レコードを抽出する（ステップＳ１００１）。なお、ステップＳ１００１の抽出処理は、トランザクション取得処理部６１０によるトラン・アイテムテーブル６０２と振分前データテーブル６０３が更新された旨の通知指示を受けた時、もしくは、トラン・アイテムキャッシュテーブルに空きがある時に行われる。当然のことながら、トランザクション取得処理部６１０からの通知指示を受けた場合であっても、トラン・アイテムキャッシュテーブルに空きがなければ、空きが発生するまで待機状態となる。
【０１１５】
図１２は、トラン・アイテムキャッシュテーブルの格納例を示すデータテーブルである。上述したように、トラン・アイテムテーブルには、高速アクセス可能なトラン・アイテムキャッシュテーブルが用意されている。トラン・アイテムキャッシュテーブルには、トランザクションＩＤごとに、トランザクションＩＤに該当するトランザクションデータについて作成された排他アイテムビット列が格納されている。
【０１１６】
なお、トラン・キャッシュアイテムテーブルへ排他アイテムビット列を格納する際には、排他アイテム名の頻度に応じた（ａ），（ｂ），（ｃ）にグループ分けがなされている。したがって、トラン・アイテムキャッシュテーブルに格納されている排他アイテムビット列は、全レコードをみるとトランザクションＩＤの値に応じた降順もしくは昇順にはならない。しかしながら、（ａ），（ｂ），（ｃ）にグループ分けされたレコードごとには、降順もしくは昇順となる。なお、各レコードの取得タイミングの古さは、上述したようにトランザクションＩＤを参照すればよい。したがって、図１２のように必ずしも挿入順序に基づいた配置を保つ必要はない。
【０１１７】
また、トラン・キャッシュアイテムテーブルの容量は（ａ），（ｂ），（ｃ）のグループごとに上限を調整することができる。望ましくは、（ａ）＋（ｂ）のグループの排他アイテムビット列の総数が（ｃ）のグループの排他アイテムビット列の総数と等しくなるような数がよい。上述のような調整を行うことによって、後述する検索処理部６３０において、（ａ），（ｂ），（ｃ）の各グループの排他アイテムビット列をバランスよく抽出して、一括同期の実行タイミングを遅延させることができる。
【０１１８】
また、図１２のようにトラン・アイテムキャッシュテーブルには、各処理ノード（たとえば、処理ノード「ア」、「イ」、「ウ」）に対応したノード属性を表すビット列が用意されている。ノード属性は、レコードに対応するトランザクションデータがどのノードで実行済みかを表すビット列である。
【０１１９】
つぎに、排他アイテム追加処理部６２０は、ステップＳ１００１によって抽出したレコードの排他識別ハッシュ値をデコードし、排他アイテムビット列を生成する（ステップＳ１００２）。すなわち、ステップＳ１００２の処理によって、トランザクションＩＤと紐付いていた排他識別ハッシュ値（１０進表示）が、ステップＳ９０４（図９参照）によって作成された排他アイテムビット列（２進表示）に戻される。
【０１２０】
その後、排他アイテム追加処理部６２０は、事前処理によるデータレコードのグループ分けを参照する（ステップＳ１００３）。データレコードは、トランザクションデータ内の排他アイテム名の出現頻度に基づいて、下記の３パターンに分けられる。パターン分けは、効率的な分散処理を実現するため、直近のトランザクションデータによって行われる処理の傾向（たとえば、排他アイテム名○，△へのアクセスを要する処理が多いなど）を反映する必要がある。したがって、所定の間隔ごとに、パターン分けを行うことによって、直近に取得されるトランザクションデータの傾向を反映させる。なお、ステップＳ１００３の事前処理については図１１−１および図１１−２を用いて詳しく説明する。
【０１２１】
（ａ）最頻出パターンのみを含むデータレコード
（ｂ）最頻出パターンを含むデータレコード（（ａ）を除く）
（ｃ）最頻出パターンを含まないデータレコード
【０１２２】
さらに、排他アイテム追加処理部６２０は、トランザクションＩＤをキーとして、排他アイテムビット列をステップＳ１００３によって参照された（ａ），（ｂ），（ｃ）のグループ別に、トラン・アイテムキャッシュテーブルに挿入する（ステップＳ１００４）。
【０１２３】
図１３は、排他アイテムビット列の挿入例を示す説明図である。たとえば、ステップＳ１００２によって、トランザクションＩＤ：３４に紐付いたハッシュ値から排他アイテムビット列が生成されたとする。すると、ステップＳ１００３によって、トランザクションＩＤ：３４はグループ（ａ）であると判断される。したがって、トラン・アイテムキャッシュテーブルに図１３に示すように、排他アイテムビット列１３１０が（ａ）のグループに挿入される。また、追加された排他アイテムビット列１３１０は、いずれの処理ノードにも実行されていないトランザクションデータである。したがって、属性ノードのビット列は「０００」になっている。
【０１２４】
図１０の説明に戻り、ステップＳ１００４の処理が完了すると、排他アイテム追加処理部６２０は、ステップＳ１００４の処理によってトラン・アイテムキャッシュテーブルが更新されたことを検索処理部６３０に通知して（ステップＳ１００５）、一連の処理を終了する。
【０１２５】
＜データレコードのパターン分け＞
ここで、図１１−１および図１１−２を用いてデータレコードのパターン分けについて説明する。排他アイテム追加処理部６２０では、トラン・アイテムキャッシュテーブルに格納するデータレコード（トランザクションＩＤと排他アイテムビット列の組み合わせ）が（ａ），（ｂ）、（ｃ）のグループに設定された、いずれかのパターンに該当するかを判断している。
【０１２６】
図１１−１に示すように、排他アイテム追加処理部６２０は、まず、トラン・アイテムキャッシュテーブルにあらたなデータレコードが追加された際に、アイテムカウンタをインクリメントする（ステップＳ１１０１）。図１１−２に示すように、アイテムカウンタは、データレコードが表す排他アイテムビット列の中のビットが立っているアイテム名のみをカウントする。したがって、図１１−２のように、あらたなデータレコードとしてトラン４（トランザクションＩＤ：４に相当）が追加されると、アイテムカウンタでは、排他アイテム名Ｅ，Ｄをカウントする。
【０１２７】
つぎに、排他アイテム追加処理部６２０は、トラン・アイテムキャッシュテーブルにレコードが追加された際に、排他アイテムビット列の排他識別ハッシュ値を求め（ステップＳ１１０２）、求められた排他識別ハッシュ値に基づいて、パターンカウンタをインクリメントする（ステップＳ１１０３）。パターンカウンタは、アイテムカウンタと異なり、排他アイテム名ごとではなく、排他アイテムビット列のパターンごとの出現をカウントする。
【０１２８】
その後、排他アイテム追加処理部６２０は、アプリオリアルゴリズムを適用して、アイテムカウンタから、ラージアイテムを抽出する（ステップＳ１１０４）。ラージアイテムとは、アイテムカウンタによってカウントされたカウントごとの累積値のうち、所定の条件を満たす値（たとえば、総トランザクションデータの５０％以上の回数カウントされた値）をもつアイテムである。排他アイテム追加処理部６２０は、図１１−２のように、まずアイテムカウンタを母集団として、「ラージアイテム集合：Ｌ１」を抽出する。抽出処理の結果、「ラージアイテム集合：Ｌ１」としてアイテム名Ａ，Ｃ，Ｄ，Ｅが抽出される。
【０１２９】
なお、アプリオリアルゴリズムは、信頼度と支持度に基づいて設定されたルールを評価するアルゴリズムであり、排他アイテム追加処理部６２０の場合、出現頻度が所定値以上のアイテム名を抽出するルールを設定して抽出処理を行っている。なお、アプリオリアルゴリズム自体は、公知の技術のため詳しい説明は省略する。
【０１３０】
そして、排他アイテム追加処理部６２０は、図１１−２のように、「ラージアイテム集合：Ｌ１」を母集団として、２つのアイテム名に着目した「ラージアイテム集合：Ｌ２」を抽出する。抽出処理の結果、「ラージアイテム集合：Ｌ２」としてアイテム名ＡＣ，ＣＤ，ＣＥ，ＤＥが抽出される。その後、排他アイテム追加処理部６２０は、Ｌ２以上のラージアイテム集合から最頻出パターンを求める（ステップＳ１１０５）。
【０１３１】
図１１−２の例では、ステップＳ１１０５の処理によって、「ラージアイテム集合：Ｌ２」の中から最頻出パターンとしてＤＥを含んだパターンが抽出される。ＤＥとは排他アイテムビット列「１１０００」を意味しており、排他識別ハッシュ値で表すと「２４」となる。そして、排他アイテム追加処理部６２０は、ステップＳ１１０５の抽出結果によって求められた最頻出パターンのビット列を含むすべてのパターンを求める（ステップＳ１１０６）。
【０１３２】
最頻出パターンのビット列を含むすべてのパターンとはＤＥを含むすべての排他アイテム名のパターンを意味する。すなわち、ｘｘｘＤＥとなるｘｘｘ部分のいずれかのビットが立っていればよい。したがって、「ＡＤＥ，ＢＤＥ，ＡＢＤＥ，ＣＤＥ，ＡＣＤＥ，ＢＣＤＥ，ＡＢＣＤＥ」が挙げられる。また、挙げられた各パターンは排他識別ハッシュ値では「２５，２６，２７，２８，２９，３０，３１」となる。
【０１３３】
その後、排他アイテム追加処理部６２０は、上述のように最頻出パターンが複数ある場合、パターンカウンタを参照して、前のステップの合計出現数が、総トランザクション数の半数に近いものを最頻出パターンとして選出する（ステップＳ１１０７）。結果として、図１１−２に例示したように、パターンカウンタのカウント値が１１となっているパターン２４（排他アイテムビット列の場合「１１０００」）が最頻出パターンとして選出される。
【０１３４】
したがって、グループ（ａ）→「１１０００」のパターンのビット列、グループ（ｂ）→上記グループ（ａ）以外の「１１ｘｘｘ」、「１０ｘｘｘ」および「０１ｘｘｘ」のパターンのビット列、グループ（ｃ）→上記グループ（ａ），（ｂ）以外のパターンのビット列となる。
【０１３５】
以上説明したように、排他アイテム追加処理部６２０は、あらたに取得したトランザクションデータの排他アイテムビット列をトランザクションＩＤとともに、トラン・アイテムキャッシュテーブルに追加する。また、排他アイテム追加処理部６２０は、排他アイテムビット列をそのまま格納するのではなく、排他アイテム名の頻度に応じたグループごとに、トラン・アイテムキャッシュテーブルに格納する。すなわち、あらたに取得したトランザクションデータを、各処理ノードへの振り分け対象となるトランザクションデータの一つとして、排他アイテムビット列が示すパターンごとに登録することを意味する。
【０１３６】
＜検索処理部＞
図１４は、検索処理部の処理手順を示すフローチャートである。検索処理部６３０は、排他識別レジスタを利用して、トラン・アイテムキャッシュテーブルに格納されているトランザクションＩＤの中から、処理ノード「ア」、「イ」、「ウ」によって同一のステップで実行させるトランザクションデータのトランザクションＩＤを検索する機能を有する。
【０１３７】
検索処理部６３０は、排他識別レジスタに設定する排他アイテムビット列を設定するため、まず、各処理ノード「ア」、「イ」、「ウ」によって実行させるトランザクションデータの検索条件を決定する（ステップＳ１４０１）。検索処理部６３０では、トラン・アイテムキャッシュテーブルに排他アイテムビット列の中から、格納されたタイミングの古さと、グループ分け結果と、排他アイテムビット列と、属性ノードのビット列とを検索条件とする。なお、詳しい検索条件については、詳しく後述する。
【０１３８】
そして、検索処理部６３０は、トラン・アイテムキャッシュテーブルから、ステップＳ１４０１によって決定された検索条件に当てはまるレコードを検索する（ステップＳ１４０２）。その後、検索処理部６３０は、排他識別レジスタにステップＳ１４０２によって検索されたレコードを設定する（ステップＳ１４０３）。検索処理部６３０は、ステップＳ１４０３による排他識別レジスタの設定後、設定されたレコードのノード属性フラグを更新し、すべてのフラグが立ったレコードをトラン・アイテムキャッシュテーブルから削除する（ステップＳ１４０４）。
【０１３９】
図１５は、処理ノードごとのレコード抽出例を示す説明図である。図１５を用いて、ステップＳ１４０１〜Ｓ１４０４の処理について具体例を挙げて説明する。図１５のように、排他識別レジスタは、処理ノードごとに用意されている。なお、図１５には２段階の処理ステップ（前回の処理ステップと今回の処理ステップとする）の排他識別レジスタへの設定例が示されているが、上段は、前回の処理ステップにおける排他識別レジスタの設定を表し、下段は今回の処理ステップにおける排他識別レジスタの設定例を表している。
【０１４０】
検索処理部６３０では、下記のような検索条件にしたがって、各処理ノードに排他アイテムビット列を設定している。
・処理ノード「ア」には、グループ（ｂ）もしくはグループ（ａ）の中で属性ビットにフラグが立っておらず、なおかつ、トラン・アイテムキャッシュテーブルに格納されている中の最古のトランザクションデータに相当する排他アイテムビット列を設定する。処理ノード「ア」にグループ（ａ）が設定されると、つぎの一括同期まで、上記の条件を満たすグループ（ａ）の排他アイテムビット列が優先的に設定される。
・処理ノード「ア」以外の処理ノードには、グループ（ｃ）の排他アイテムビット列の中から、他の処理ノードと排他アイテム名が競合しない排他アイテムビット列を最古のものから設定すればよい。
・上記の検索条件に見合う排他アイテムビット列が存在しない場合には、同期処理に影響しないＮＵＬＬ値を設定する。たとえば、設定済みのトランザクションＩＤの中から、格納先の処理ノードの属性ビットのフラグが立っていない排他アイテムビット列を設定してもよい。
【０１４１】
以上の検索条件に基づいた具体的な処理手順について、図１５を用いて説明するが、まず、上段の前回の処理ステップにおける排他識別レジスタの設定について説明する。前回の処理ステップでは、処理ノード「ア」にグループ（ａ）の中から適した排他アイテムビット列を設定することができなかった。そこで、検索処理部６３０は、グループ（ｂ）の中から検索条件に適したトランザクションＩＤ：１５に該当する排他アイテムビット列を設定する。
【０１４２】
処理ノード「ア」に最頻出パターン以外を意味するグループ（ａ）以外ではなく、グループ（ｂ）の排他アイテムビット列が設定された場合、残りの処理ノードには、処理対象となるレコードが競合しない処理を設定する。なお、処理対象となるレコードが競合しない処理とは、排他アイテムビット列が重複しない、もしくは、属性ビットのフラグが立っていないことが条件となる。
【０１４３】
したがって、処理ノード「イ」には、グループ（ｃ）の排他アイテムビット列の中からトランザクションＩＤ：１５と排他アイテムビット列が重複しないトランザクションＩＤ：８に該当する排他ビット列が設定された。さらに、処理ノード「ウ」には、設定済みの排他アイテムビット列と重複しない排他アイテムビット列を設定したいが、適したレコードが存在しない。そこで、検索処理部６３０は、前回の処理ステップの時点で処理ノード「ウ」の属性ビットにフラグが立っていないトランザクションＩＤ：１５に該当する排他アイテムビット列を、処理ノード「ウ」に設定する。
【０１４４】
したがって、トラン・アイテムキャッシュテーブルの中のトランザクションＩＤ：１５に該当する排他アイテムビット列は処理ノード「ア」、「ウ」の属性ビットにフラグが立った状態になっている。各排他識別レジスタの設定内容は、格納処理部６４０へ通知された後、初期化され、格納内容はクリア（オール０）される。
【０１４５】
以上説明したような前回の処理ステップを経た後、検索処理部６３０は、今回の処理ステップとして、検索条件に基づいて、処理ノード「ア」に対応する排他識別レジスタに排他アイテムビット列を設定する。排他識別レジスタは、処理ノード「ア」から順に設定を行うため、まず、各排他識別レジスタが未設定の状態から処理が開始される。
【０１４６】
そして、検索処理部６３０は、処理ノード「ア」に対応する排他識別レジスタに排他アイテムビット列として、トラン・アイテムキャッシュテーブルのグループ（ａ）内の最も古い排他アイテムビット列を特定する。なお、トランザクション取得処理部６１０の説明にて述べたように、トランザクションＩＤは、通し番号が振られている。したがって、グループ（ａ）の中の最も若いトランザクションＩＤを参照する。そして、検索処理部６３０は、特定したトランザクションＩＤが、トラン・アイテムキャッシュテーブルの中の属性ビットが立っていない排他アイテムビット列の中で最も古いトランザクションデータか否かを判断する。
【０１４７】
したがって、図１５の場合、検索処理部６３０は、トラン・アイテムキャッシュテーブルから抽出１によってグループ（ａ）の中からトランザクションＩＤ：１２を抽出する。抽出されたトランザクションＩＤ：１２の排他アイテムビット列は、処理ノード「ア」に対応する排他識別レジスタに設定される。処理ノード「ア」にグループ（ａ）の排他アイテムビット列が設定されると、処理ノード「ア」は、次回の一括同期を行うまでグループ（ａ）の排他アイテムビット列を優先的に設定する処理ノードとなる。
【０１４８】
つぎに、検索処理部６３０は、トラン・アイテムキャッシュテーブルから抽出２，３によってグループ（ｃ）の中から競合しないトランザクションＩＤ：１９，３２を抽出する。抽出されたトランザクションＩＤ：１９，３２の排他アイテムビット列は、処理ノード「イ」、「ウ」に対応する排他識別レジスタにそれぞれ設定される。
【０１４９】
今回の処理によって、トランザクションＩＤ：１２に該当する排他アイテムビット列では、属性ノード「Ａ」にフラグが立つ。同様に、トランザクションＩＤ：１９に該当する排他アイテムビット列では、属性ノード「Ｂ」にフラグが立ち、トランザクションＩＤ：３２に該当する排他アイテムビット列では、属性ノード「Ｃ」にフラグが立つ。その後、排他識別レジスタの更新時にすべての属性フラグが立ったレコードはトラン・アイテムキャッシュレコードから削除される。したがって、図１５に例示したトラン・アイテムキャッシュテーブルの場合、トランザクションＩＤ：２０に該当する排他アイテムビット列が削除される。なお、上述した処理の詳細な手順については、詳しく後述する。
【０１５０】
図１４の説明に戻り、ステップＳ１４０４の処理と並列して、検索処理部６３０は、ステップＳ１４０３によって排他識別レジスタの設定後、つぎに各処理ノード「ア」、「イ」、「ウ」によって実行するトランザクションＩＤと処理ノード名とを格納処理部６４０に通知する（ステップＳ１４０５）。最後に、検索処理部６３０は、ステップＳ１４０５の通知後、排他識別レジスタの処理ステップをインクリメントして、レジスタを初期化し（ステップＳ１４０６）、一連の処理を終了する。
【０１５１】
以上説明したように、検索処理部６３０は、排他識別レジスタを利用して、最頻出のパターンをもつトランザクションデータについては、優先的に処理ノード「ア」に格納するともに、その他のトランザクションデータに関しては、排他アイテム名が重複しないように各処理ノードによって実行させるように設定することができる。また、トランザクションデータと実行させる処理ノードを設定する際に、トランザクションＩＤが若い、すなわち、古いトランザクションデータを優先的に設定するため、トランザクションデータの待機時間を最小限に抑えることができる。
【０１５２】
＜格納処理部＞
図１６は、格納処理部の処理手順を示すフローチャートである。格納処理部６４０は、検索処理部６３０からの通知結果に基づいて、振分前データテーブル６０３に格納されたトランザクション（たとえば、電文６０１）をデータキュー６０４に格納する機能を有する。
【０１５３】
格納処理部６４０は、検索処理部６３０からの通知によって、トランザクションＩＤが指定されたか否かを判断する（ステップＳ１６０１）。トランザクションＩＤが指定されるまで待機状態となる（ステップＳ１６０１：Ｎｏのループ）。その後、トランザクションＩＤが指定されると（ステップＳ１６０１：Ｙｅｓ）、格納処理部６４０は、まず、振分前データテーブル６０４に格納されているトランザクションデータの中から、検索処理部６３０による通知で指定されたトランザクションＩＤに該当するトランザクションデータを抽出する（ステップＳ１６０２）。
【０１５４】
つぎに、格納処理部６４０は、ステップＳ１６０２によって抽出したトランザクションデータを、検索処理部６３０からの通知によって指定された処理ノード名のデータキュー６０４に格納する（ステップＳ１６０３）。すなわち、トランザクションＩＤ：１の処理ノードとして処理ノード「ア」が指定された場合には、トランザクションＩＤ：１に該当するトランザクションデータを処理ノード「ア」に対応するデータキュー６０４に格納する。
【０１５５】
以上説明したように、格納処理部６４０は、検索処理部６３０によって検索されたトランザクションデータを各処理ノードによって実行させるための準備処理を行う。すなわち、格納処理部６４０では、同一のステップとして実行させる処理として検索された各トランザクションデータを、実際に各処理ノードによって実行させるためのデータキュー６０４に振り分けることができる。
【０１５６】
＜ディスパッチ処理部＞
図１７は、ディスパッチ処理部の処理手順を示すフローチャートである。ディスパッチ処理部６５０では、データキュー６０４に格納されたトランザクションを対象となる処理ノードによって実行させるディスパッチ機能を有する。
【０１５７】
ディスパッチ処理部６５０は、まず、データキュー６０４から、つぎの処理ステップで実行するデータをすべて抽出する（ステップＳ１７０１）。したがって、処理ノード「ア」、処理ノード「イ」、処理ノード「ウ」に対応したデータキュー６０４のうち、つぎの処理ステップで実行するデータが格納されているデータキュー６０４から実際の処理に用いるデータ、すなわち、トランザクションデータを抽出する。
【０１５８】
つぎに、ディスパッチ処理部６５０は、データキュー６０４から抽出したトランザクションデータを、各処理ノードにディスパッチする（ステップＳ１７０２）。最後に、ディスパッチ処理部６５０は、各処理ノードのデータキューにディスパッチされたデータを、一旦保持させる。その後、ディスパッチ処理部６５０は、各処理ノードによる順次処理を可能にして（ステップＳ１７０３）、一連の処理を終了する。
【０１５９】
以上説明したように、ディスパッチ処理部６５０は、データキュー６０４に格納されたトランザクションデータを、共通のタイミングで、各処理ノードにディスパッチさせることができる。したがって、各処理ノードによる処理を実現することができる。
【０１６０】
フォワードプロキシ装置６００は、最頻出の排他アイテム名を含むグループ（ａ）が処理ノード「ア」に設定されると、グループ（ａ）に所定の条件を満たす排他アイテムビット列が存在する限り、処理ノード「ア」以外の処理ノードには部分同期を実行させる。そして、グループ（ａ）に条件を満たす排他アイテムビット列が無くなると、処理ノード「ア」が空ノードとなるため、一括同期モードを実行して、グループ（ａ）に相当するトランザクションデータに必要な同期処理を完了させる。
【０１６１】
同期処理完了後のトランザクションデータに対応する排他アイテムビット列はトラン・アイテムキャッシュテーブルから削除されるため、後続のトランザクションデータの処理に移行できる。そこで、以下に部分同期モードと一括同期モードにおける検索処理部６３０と格納処理部６４０の処理内容について詳しく説明する。また、以下の説明では、多様な実装例を考慮して、処理ノードが４つ用意された場合について説明する。
【０１６２】
（部分同期モード）
図１８−１〜図１８−４は、部分同期モードを用いた排他識別レジスタへの格納処理例を示す説明図である。上述したように部分同期モードは、一旦、処理ノード「ア」にグループ（ａ）の排他アイテムビット列が設定されると、トラン・アイテムキャッシュテーブルのグループ（ａ）の中に条件を満たす未処理の排他アイテムビット列が無くなるまで継続される。
【０１６３】
図１８−１〜図１８−４では、あるトラン・アイテムキャッシュテーブルに格納された排他アイテムビット列が排他識別レジスタに格納され、部分同期されながらステップ８まで実行した後、一括同期モードに状態遷移するまでの格納処理を表している。したがって、各排他識別レジスタに対してどのような判断を経て各排他アイテムビット列が格納されたかをステップ順に説明する。
【０１６４】
なお、排他識別レジスタの格納処理には下記の条件の成否を判断基準として利用している。
条件（Ａ）：
グループ（ａ）、最古、対象の処理ノードのノード属性０＆排他アイテム名が競合しない
条件（Ｂ）：
グループ（ｂ）、最古、対象の処理ノードのノード属性０＆排他アイテム名が競合しない
条件（Ｃ）：
グループ（ｃ）、最古、対象の処理ノードのノード属性０＆排他アイテム名が競合しない
※最古の条件は、同じステップにおいて他の処理ノードに格納済みのものを除く
【０１６５】
・ステップ１
図１８−１に示したステップ１では、
１．条件（Ｂ）を満たすレコード（排他アイテムビット列）を格納する
２．排他フラグ「Ｅ，Ａ」について処理ノード「ア」によって最新の値となる
３．処理ノード「イ」の排他識別レジスタでは条件（Ｃ）を満たすレコードを格納する
４．排他フラグ「Ｂ」について処理ノード「イ」によって最新の値となる
５．条件（Ｃ）での他のレコードの抽出が成功する
６．排他フラグ「Ｃ」について処理ノード「ウ」によって最新の値となる
７．条件（Ｃ）を満たす他のレコードがないため、グループ（ｂ）と同期可能な他のレコードを抽出する（以下の抽出条件を条件（Ｂ’））とする
８．排他フラグ「Ａ」について処理ノード「エ」によって最新の値となる
以上の処理が行われ、３トラン（トランザクションデータ）が処理されたことになる。また、上記８．のように、部分同期によってフラグが最新化された場合には複数のノードが最新となることがある。
【０１６６】
・ステップ２
図１８−１に示したステップ２では、
９．条件（Ｂ）を満たすレコードが存在しないため条件（Ａ）を満たすレコードを格納
１０．排他フラグ「Ｄ」について処理ノード「ア」によって最新の値となる
１１．条件（Ｃ）での他のレコードの抽出が成功する
１２．排他フラグ「Ｂ」について処理ノード「イ」によって最新の値となる
１３．条件（Ｃ）での他のレコードの抽出が成功する
１４．排他フラグ「Ｃ」について処理ノード「ウ」によって最新の値となる
１５．条件（Ｃ）での他のレコードの抽出が成功する
１６．排他フラグ「Ａ」について処理ノード「エ」によって最新の値となる
以上の処理が行われ、あらたに４トランが処理され、合計７トラン処理されたことになる。
【０１６７】
・ステップ３
図１８−２に示したステップ３では、
１７．条件（Ｂ）を満たすレコードが存在しないため条件（Ａ）を満たすレコードを格納
１８．排他フラグ「Ｅ，Ｄ」について処理ノード「ア」によって最新の値となる
１９．条件（Ｃ）を満たすレコードが存在しないため条件（Ｂ’）を満たすレコードを格納
２０．排他フラグ「Ｅ，Ａ」については最新にならない（格納済みのトランであるため）
２１．条件（Ｃ）を満たすレコードが存在しないため条件（Ｂ’）を満たすレコードを格納
２２．排他フラグ「Ｅ，Ａ」については最新にならない
２３．条件（Ｃ）での他のレコードの抽出が成功する
２４．排他フラグ「Ａ」について処理ノード「エ」によって最新の値となる
以上の処理が行われ、あらたに２トランが処理され、合計９トラン処理されたことになる。
【０１６８】
・ステップ４
図１８−２に示したステップ４では、
２５．条件（Ｂ）を満たすレコードが存在しないため条件（Ａ）を満たすレコードを格納
２６．排他フラグ「Ｅ，Ｄ」について処理ノード「ア」によって最新の値となる
２７．条件（Ｃ）を満たす他のレコードも、条件（Ｂ’）を満たす他のレコードもないため、グループ（ｃ）の中から同期可能な他のレコードを抽出する（以下の抽出条件を条件（Ｃ’））とする
２８．排他フラグ「Ｃ」については最新にならない（格納済みのトランであるため）
２９．条件（Ｃ），（Ｂ’）を満たすレコードが存在しないため条件（Ｃ’）を満たすレコードを格納
３０．排他フラグ「Ｂ」については最新にならない（格納済みのトランであるため）
３１．条件（Ｃ），（Ｂ’）を満たすレコードが存在しないため条件（Ｃ’）を満たすレコードを格納
３２．排他フラグ「Ｂ」については最新にならない
以上の処理が行われ、あらたに１トランが処理され、合計１０トラン処理されたことになる。
【０１６９】
同様に、図１８−３に示したステップ５では、３３．〜４０．の処理によって、あらたに処理ノード「ア」に相当する排他識別レジスタによって１トランが処理され、合計１１トラン処理されたことになる。さらに、図１８−３に示したステップ６では、４１．〜４８．の処理によってあらたに処理ノード「ア」に相当する排他識別レジスタによって１トランが処理され、合計１２トラン処理されたことになる。
【０１７０】
同様に、図１８−４に示したステップ７では、４９．〜５６．の処理によって、あらたに処理ノード「ア」、「イ」に相当する排他識別レジスタによって２トランが処理され、合計１４トラン処理されたことになる。
【０１７１】
その後、図１８−４に示したステップ８では５７．〜６４の処理によってあらたに処理ノード「ア」に対応した排他識別レジスタにレコードを格納することができなかった。そこで、一括同期モードへの状態遷移指示を出力する。他の処理ノードに対応した排他識別レジスタでは、５７．の処理によって出力した状態遷移指示を受けて未同期のトランのうち、最も古いものをそれぞれ格納する。結果としてステップ８では、１トランも処理されず、一括同期モードへ状態遷移される。
【０１７２】
図１９−１および図１９−２は、部分同期モードを用いた排他識別レジスタへの格納処理の手順を示すフローチャートである。図１８−１〜図１８−４によって実行された判断を一般化すると、図１９−１、図１９−２のフローチャートのような手順の処理が行われている。図１９−１および図１９−２の各ステップを実行することによって、図１８−１〜図１８−４に例示したように、所定の検索条件に合った排他アイテムビット列を排他識別レジスタへ格納することができる。
【０１７３】
図１９−１において、検索処理部６３０は、まず、排他識別レジスタの中に空ノードがあるか否かを判断する（ステップＳ１９０１）。ステップＳ１９０１において、空ノードがあると判断された場合（ステップＳ１９０１：Ｙｅｓ）、検索処理部６３０は、空ノードが処理ノード「ア」か否かを判断する（ステップＳ１９０２）。なお、ステップＳ１９０１において、空ノードではないと判断された場合（ステップＳ１９０１：Ｎｏ）、検索処理部６３０は、図１９−２のステップＳ１９１３の処理に移行する。
【０１７４】
ステップＳ１９０２において、空ノードが処理ノード「ア」であると判断された場合（ステップＳ１９０２：Ｙｅｓ）、検索処理部６３０は、処理ノード「ア」に排他アイテムビット列を格納するための処理に移行する。まず、検索処理部６３０は、処理対象となっているレコードが、『グループ（ｂ）』＆『最も古い』＆『処理ノードのノード属性の値が０（未処理）』となる排他識別ビット列か否かを判断する（ステップＳ１９０３）。グループ（ｂ）は、（ａ）と（ｃ）の両方の属性を含むが故に、最初に処理可能性の判定を行わないと一括同期まで処理対象として選択されない性質を持つ。そのため（ａ）や（ｃ）に優先して判定を行うことで、処理を促進している。
【０１７５】
なお、上述の処理対象となっているレコードとは、処理ノードがアクセスする共通のデータベース内のレコードではなく、トラン・アイテムキャッシュテーブルに格納されている各排他アイテムビット列を表すレコード群の中のいずれかのレコードを意味する。
【０１７６】
ステップＳ１９０３において、最も古いとはトラン・アイテムキャッシュテーブルに格納されている排他アイテムビット列の中でトランザクションＩＤが最も若い排他アイテムビット列を意味する。なお、ステップＳ１９０２において、空ノードが処理ノード「ア」でないと判断された場合（ステップＳ１９０２：Ｎｏ）、他の処理ノードに格納する排他アイテムビット列についての検索条件を判断する処理（ステップＳ１９０９〜Ｓ１９１１）に移行する。
【０１７７】
ステップＳ１９０３において、処理対象となっているレコードが、『グループ（ｂ）』＆『最も古い』＆『処理ノードのノード属性の値が０（未処理）』となる排他識別ビット列であると判断された場合（ステップＳ１９０３：Ｙｅｓ）、検索処理部６３０は、処理ノード（ア）に格納する排他アイテムビット列をグループ（ｂ）の中から確定したと判断する。したがって、検索処理部６３０は、まず、現在対象となっているレコードの排他アイテムビット列をトランザクションＩＤとともに排他識別レジスタに格納する（ステップＳ１９０４）。さらに、検索処理部６３０は、ノード属性のフラグを立てて（ステップＳ１９０５）、他の処理ノードについての格納処理を行うために、ステップＳ１９０１に移行する。
【０１７８】
また、ステップＳ１９０３において、処理対象となっているレコードが、『グループ（ｂ）』＆『最も古い』＆『処理ノードのノード属性の値が０（未処理）』となる排他識別ビット列ではないと判断された場合（ステップＳ１９０３：Ｎｏ）、処理対象となっているレコードが、『グループ（ａ）』＆『最も古い』＆『処理ノードのノード属性の値が０（未処理）』となる排他識別ビット列か否かを判断する（ステップＳ１９０６）。
【０１７９】
ステップＳ１９０６において、処理対象となっているレコードが、『グループ（ａ）』＆『最も古い』＆『処理ノードのノード属性の値が０（未処理）』となる排他識別ビット列であると判断された場合（ステップＳ１９０６：Ｙｅｓ）、検索処理部６３０は、処理ノード（ア）に格納する排他アイテムビット列をグループ（ａ）の中から確定したと判断する。したがって、検索処理部６３０は、現在対象となっているレコードの排他アイテムビット列をトランザクションＩＤとともに排他識別レジスタに格納する（ステップＳ１９０４）。さらに、検索処理部６３０は、ノード属性のフラグを立てて（ステップＳ１９０５）、他の処理ノードについての格納処理を行うために、ステップＳ１９０１に移行する。
【０１８０】
また、ステップＳ１９０６において、処理対象となっているレコードが、『グループ（ａ）』＆『最も古い』＆『処理ノードのノード属性の値が０（未処理）』となる排他識別ビット列ではないと判断された場合（ステップＳ１９０６：Ｎｏ）、検索処理部６３０は、処理ノード（ア）に格納するのに適した排他アイテムビット列がないと判断する。したがって、検索処理部６３０は、処理ノード（ア）の排他識別レジスタにＮＵＬＬ値を格納する（ステップＳ１９０７）。さらに、検索処理部６３０は、一括同期モードへの状態遷移をシステムに指示して（ステップＳ１９０８）、他の処理ノードについての格納処理を行うために、ステップＳ１９０１に移行する。
【０１８１】
一方、ステップＳ１９０２において、空ノードが処理ノード「ア」でないと判断された場合（ステップＳ１９０２：Ｎｏ）、検索処理部６３０は、他の処理ノードに格納する排他アイテムビット列を特定する処理に移行する。したがって、検索処理部６３０は、まず、処理対象となっているレコードが、『グループ（ｃ）』＆『最も古い』＆『処理ノードのノード属性の値が０（未処理）』となる排他識別ビット列か否かを判断する（ステップＳ１９０９）。
【０１８２】
ステップＳ１９０９において、処理対象となっているレコードが、『グループ（ｃ）』＆『最も古い』＆『処理ノードのノード属性の値が０（未処理）』となる排他識別ビット列であると判断された場合（ステップＳ１９０９：Ｙｅｓ）、検索処理部６３０は、処理ノード（ア）以外の処理ノードに格納する排他アイテムビット列をグループ（ｃ）の中から確定したと判断する。したがって、検索処理部６３０は、現在対象となっているレコードの排他アイテムビット列をトランザクションＩＤとともに排他識別レジスタに格納する（ステップＳ１９０４）。さらに、検索処理部６３０は、ノード属性のフラグを立てて（ステップＳ１９０５）、他の処理ノードについての格納処理を行うために、ステップＳ１９０１に移行する。
【０１８３】
また、ステップＳ１９０９において、処理対象となっているレコードが、『グループ（ｃ）』＆『最も古い』＆『処理ノードのノード属性の値が０（未処理）』となる排他識別ビット列でないと判断された場合（ステップＳ１９０９：Ｎｏ）、検索処理部６３０は、処理対象となるレコードが処理ノード（ア）以外の処理ノードと並列処理可能か否かを判断する。したがって、検索処理部６３０は、処理対象となっているレコードが、『グループ（ｂ）』で同期可能なビット列か否かを判断する（ステップＳ１９１０）。
【０１８４】
ステップＳ１９１０において、処理対象となっているレコードが、『グループ（ｂ）』で同期可能なビット列であると判断されなかった場合（ステップＳ１９１０：Ｎｏ）、検索処理部６３０は、さらに、処理対象となっているレコードが、『グループ（ｃ）』で同期可能なビット列か否かを判断する（ステップＳ１９１１）。
【０１８５】
ステップＳ１９１０もしくはステップＳ１９１１において、処理対象となっているレコードが、同期可能なビット列であると判断された場合（ステップＳ１９１０もしくはステップＳ１９１１：Ｙｅｓ）、検索処理部６３０は、処理ノード（ア）以外の処理ノードに格納する排他アイテムビット列をグループ（ｃ）の中から確定したと判断する。したがって、検索処理部６３０は、現在対象となっているレコードの排他アイテムビット列をトランザクションＩＤとともに排他識別レジスタに格納する（ステップＳ１９０４）。さらに、検索処理部６３０は、ノード属性のフラグを立てて（ステップＳ１９０５）、他の処理ノードについての格納処理を行うために、ステップＳ１９０１に移行する。
【０１８６】
一方、ステップＳ１９１０とステップＳ１９１１において、いずれも、処理対象となるレコードが同期可能なビット列ではないと判断された場合（ステップＳ１９１０かつステップＳ１９１１：Ｎｏ）、検索処理部６３０は、処理ノード（ア）以外の処理ノードに格納するのに適した排他アイテムビット列がないと判断する。したがって、検索処理部６３０は、処理ノード（ア）以外の他の処理ノードの排他識別レジスタにＮＵＬＬ値を格納し（ステップＳ１９１２）、他の処理ノードについての格納処理を行うために、ステップＳ１９０１に移行する。
【０１８７】
続いて検索処理部６３０は、図１９−２に移り、まず、排他識別レジスタのデータを格納処理部６４０に通知する（ステップＳ１９１３）。そして、格納処理部６４０は、ステップＳ１９１３が完了すると排他識別レジスタを初期化する（ステップＳ１９１４）。
【０１８８】
その後、検索処理部６３０は、一括同期モードへの状態遷移指示があるか否かを判断する（ステップＳ１９１５）。ステップＳ１９１５において、一括同期モードへの状態遷移指示を受け付けた場合（ステップＳ１９１５：Ｙｓｓ）、部分同期可能なエリアαおよびエリアβのうち、エリアβのノードの部分同期が完了したか否かを判断する（ステップＳ１９１６）。エリアβのとは、最頻出パターン以外の排他アイテムビット列を含むトランザクションデータ群が格納されたデータベースであり、一方エリアαのノードとは、最頻出パターンの排他アイテムビット列を含むトランザクションデータ群が格納されたデータベースである。
【０１８９】
ステップＳ１９１６において、エリアβのノードの部分同期が完了したと判断された場合（ステップＳ１９１６：Ｙｅｓ）、検索処理部６３０は、部分同期モードを一旦終了して、一括同期モードへ移行する。一方、ステップＳ１９１５において、一括同期モードへの状態遷移指示を受け付けていない場合（ステップＳ１９１５：Ｎｏ）、検索処理部６３０は、ステップＳ１９０１の処理（図１９−１参照）に状態遷移する。
【０１９０】
また、ステップＳ１９１６において、エリアβのノードの部分同期が完了していないと判断された場合（ステップＳ１９１６：Ｎｏ）、検索処理部６３０は、ステップＳ１９０１の処理（図１９−１参照）に移行する。
【０１９１】
すなわち、検索処理部６３０は、一括同期モードへの状態遷移指示を受けていない場合は、一括同期モードへ状態遷移するまでに猶予があるため、空いている処理ノードに排他アイテムビット列を設定するように動作する。また、検索処理部６３０は、部分同期が完了していない場合にも、まだ、部分同期できるトランザクションデータがあるため、一括同期モードへの状態遷移指示を受けるまでの間、時間が許す限り空いている処理ノードに排他アイテムビット列を設定するように動作する。
【０１９２】
以上説明したように、フォワードプロキシ装置６００では、処理ノード「ア」に条件（Ａ）を満たすレコードが設定されたことをトリガに部分同期モードが行われる。図１８−１〜図１８−４に例示した部分同期モードでは、一括同期モードへの状態遷移まで、８ステップ分の部分同期が行われ、一括同期を実行することなく、１４トランを処理することができた。従来の分散処理であれば、１４トランを実行するまでに、少なくとも４回の一括同期の発生が想定される。したがって、同じ数のトランザクションデータを４つの処理ノードによって実行させる場合と比較して、一括同期の回数が削減され処理時間が短縮される。結果として各処理ノードごとの単位時間当たりの処理量が増加し、処理効率を向上させることができる。
【０１９３】
（一括同期モード）
つぎに、部分同期モードから状態遷移した一括同期モードについて説明する。一括同期モードは、図２０は、処理ノードが４個のトラン・アイテムキャッシュテーブルの格納例を示すデータテーブルである。図２０に示したトラン・アイテムキャッシュテーブルは、部分同期が完了したタイミングの排他アイテムビット列と属性テーブルのフラグを表している。すなわち、図２０のトラン・アイテムキャッシュテーブルは、一括同期待ちのトランザクションデータで満杯になっている状態である。
【０１９４】
図２１は、処理ノード間の一括同期処理を示す説明図である。図２１において、左側は一括同期処理前の状態を表し、右側は一括同期処理後の状態を表す。なお、処理ノード間で一括同期を実行する際には、図２１のように、エリアαとエリアβとに分けて扱われる。エリアαは、優先的に実行されていた処理ノード「ア」によって処理対象となるＤＢに相当する。したがって、排他アイテム名「Ｅ」，「Ｄ」についての最新データを保持している。
【０１９５】
一方、エリアβは、上述したように、処理ノード「ア」以外の処理ノードによって処理対象となる各ＤＢに相当する。したがって、排他アイテム名「Ｅ」，「Ｄ」以外の排他アイテム名「Ｃ」，「Ｂ」，「Ａ」についての最新データを保持している。
【０１９６】
一括同期処理では、エリアα、βそれぞれのＤＢに保持された最新のデータをお互いに反映させる。したがって、右側に示したエリアα、βのように、お互いのエリアに格納されていた排他アイテム名のデータを反映させたため、全排他アイテム名に関する情報を含んだ最新データが保持される。
【０１９７】
図２２は、トラン・アイテムキャッシュテーブルに対する処理済みトランザクションＩＤの消込み例を示す説明図であり、図２３は、トラン・アイテムキャッシュテーブルに対する未処理トランザクションＩＤの格納例を示す説明図である。図２０に示したようなトラン・アイテムキャッシュテーブルについて一括同期処理が行われたトランザクションデータに対応するトランザクションＩＤは、（ａ），（ｂ），（ｃ）のグループ分けにかかわらず、図２２に例示したように、一括で消込まれる。なお、処理済みトランザクションＩＤか否かの判断は、属性テーブルのフラグが参照される。
【０１９８】
処理済みトランザクションＩＤの消込み後は、トラン・アイテムキャッシュテーブルに空きが生じるため、図２３に例示したように、あらたに受け付けたトランザクションデータに対応したトランザクションＩＤが格納される。
【０１９９】
図２４は、一括同期モードを用いたトラン・アイテムキャッシュテーブルの消込み・格納処理の手順を示す説明図である。図２４に示すように、一括同期モードでは、まず、図２１にて説明したような処理ノード間のＤＢ（データベース）について、一括同期が実行される（ステップＳ２４０１）。なおステップＳ２４０１の処理は、ディスパッチ処理部６５０によって実行される。
【０２００】
その後、トラン・アイテムキャッシュテーブルから処理済みのトランザクションＩＤを消し込む（ステップＳ２４０２）。ステップＳ２４０２の処理によって、図２２にて説明したように、トラン・アイテムキャッシュテーブル内の処理済みデータのみが消し込まれる。なお、ステップＳ２４０１の処理は、格納処理部６４０によって実行される。
【０２０１】
最後に、トラン・アイテムキャッシュテーブルに未処理のトランザクションＩＤを順次格納し（ステップＳ２４０３）。その後、トラン・アイテムキャッシュテーブルの空きが無くなったことをトリガとして、部分同期モードへの状態遷移をシステムに指示して（ステップＳ２４０４）、一括同期モードを終了する。なお、ステップＳ２４０３，Ｓ２４０４の処理は、排他アイテム追加処理部６２０によって実行される。
【０２０２】
また、図２３にて説明したように、トラン・アイテムキャッシュテーブルには未処理のトランザクションデータに対応したトランザクションＩＤが格納されるが、トランザクション取得処理部６１０によって取得したトランザクションデータでなければ格納できない。トランザクション取得処理部６１０によって、すでに多くのトランザクションデータを取得済みの場合には、即座に、トラン・アイテムキャッシュテーブルが埋まるが、空きがある場合には、埋まるまで待機状態となる。
【０２０３】
仮に、トラン・アイテムキャッシュテーブルが埋まる前に、部分同期モードに状態遷移しても、処理ノード「ア」に実行させるトランザクションデータが不足して、すぐに一括同期モードに移行してしまう恐れがある。したがって、トラン・アイテムキャッシュテーブルの総容量も、グループ（ａ），（ｂ），（ｃ）ごとの容量と同様に、実行するトランザクションデータの傾向によって調整することによって、さらに効率的に各処理ノードを実行させることができる。
【０２０４】
（本実施の形態にかかる分散処理の適用シーン）
以上説明したように、本実施の形態にかかる分散処理は、ニアリアルタイム性を求められるマスタ系データの更新処理において、特にその効果を発揮する。具体的には、たとえば、ホテル、乗り物、その他イベントなどのチケットのオンライン予約システムへの適用が挙げられる。
【０２０５】
チケット予約システムの場合、人気の高い部屋や座席など同一のレコードへのアクセスが集中する。従来の分散処理の場合、同一レコードへのアクセスの集中によって、発生したロック状態がシステム全体に影響を及ぼしていた。すなわち、人気薄の部屋や座席などの予約に関しての処理要求などが同じレコードへアクセスする処理要求にもかかわらず各処理ノードに分散されてしまう。結果として、同一レコードへのアクセス集中によるロック状態の発生や、頻繁な同期処理の発生によって処理負荷以上の待機時間が発生する事態があった。
【０２０６】
そこで、本実施の形態にかかる分散処理を適用することによって、アクセスの集中する処理に関しては特定の処理ノードに振り分けるため、同一レコードへのアクセス集中によるロック状態が回避される。上述のような同一レコードへの処理要求にステートフルな設計がされていた場合には、同期処理が頻出してしまうが、本実施の形態にかかる分散処理を適用すれば、特定の処理ノードにアクセスの集中する処理を振り分けるとともに、人気薄の部屋や座席などの予約といった処理対象が分散するような処理要求に関しては、並列に残りの処理ノードに振り分けることができる。したがって、各処理要求間の同期処理（一括同期）の回数を抑制して、各処理ノードにて発生していた待機時間を短縮することができる。
【０２０７】
その他にも、複数の取引先からの処理要求を受け付けるオンラインの在庫引当システムに本実施の形態にかかる分散処理を適用してもよい。在庫引当システムの場合も、予約システムと同様に、人気商品とそれ以外の商品とでは、処理要求の頻度が異なる。
【０２０８】
したがって、人気商品への処理要求を優先的に特定の処理ノードによって実行させることによって、その他の処理要求に関しては他の処理ノードで並列に実行させることができる。また同期集中してもロック状態を防ぐとともに、同期処理を抑制するため、従来と比較して、各処理ノードを、各処理要求に応じた処理の実行に専念させることができる。結果として、システム全体の処理効率の向上が期待できる。
【０２０９】
なお、本実施の形態で説明した分散処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本分散処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本分散処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【０２１０】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２１１】
（付記１）所定のレコード群を格納するデータベースを有する各ノードに、当該レコード群に対する複数の処理を割り当てる分散処理装置であって、
前記レコード群に含まれる各レコードを特定する属性名ごとに、当該属性名から特定されるレコードに対する処理の実行頻度を取得する取得手段と、
前記取得手段によって取得された属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、一の属性名から特定されるレコードに対する一の処理の集合と、当該一の処理とは異なる他の処理の集合とに分類する分類手段と、
前記分類手段によって分類された一の処理の集合の割当先となるノードを前記複数のノードの中から決定する決定手段と、
前記決定手段によって前記一の処理の集合の割当先に決定されたノードに前記一の処理を割り当てる割当手段と、
を備えることを特徴とする分散処理装置。
【０２１２】
（付記２）前記割当手段は、
前記一の処理の集合の割当先に決定されたノード（以下、「一のノード」という）に前記一の処理を割り当てるとともに、前記複数のノードのうち前記一のノードとは異なる他のノードに前記他の処理を割り当てることを特徴とする付記１に記載の分散処理装置。
【０２１３】
（付記３）前記一の処理の集合のうち前記割当手段によって割り当てられていない未割当の一の処理の集合の中から、処理要求を受け付けた時刻が最古の一の処理を検索する第１の検索手段と、
前記複数のノードのうち前記一のノードを除く残余のノードの中から前記他のノードを選択する選択手段と、
前記他の処理の集合のうち前記割当手段によって割り当てられていない未割当の他の処理の集合の中から、処理要求を受け付けた時刻が最古の他の処理を検索する第２の検索手段と、を備え、
前記割当手段は、
前記第１の検索手段によって検索された一の処理を前記一のノードに割り当てるとともに、前記第２の検索手段によって検索された他の処理を前記選択手段によって選択された他のノードに割り当てることを特徴とする付記２に記載の分散処理装置。
【０２１４】
（付記４）前記第２の検索手段は、
前記他の処理が検索されなかった場合、前記割当手段によって前記複数のノードのいずれかのノードに割り当てられた割当済の処理の集合の中から、処理要求を受け付けた時刻が最古の割当済の処理を検索し、
前記割当手段は、
前記一の処理を前記一のノードに割り当てるとともに、前記第２の検索手段によって検索された割当済の処理を前記他のノードに割り当てることを特徴とする付記３に記載の分散処理装置。
【０２１５】
（付記５）前記レコードに対する処理の処理要求を受け付ける受付手段と、
前記各レコードを特定する属性名ごとに、前記受付手段によって受け付けた処理要求に当該属性名が含まれているか否かを示すビット列を生成する生成手段と、をさらに備え、
前記分類手段は、
前記生成手段によって生成された前記処理要求ごとのビット列と前記属性名ごとの処理の実行頻度とに基づいて、前記複数の処理を前記一の処理の集合と前記他の処理の集合とに分類することを特徴とする付記１〜４のいずれか一つに記載の分散処理装置。
【０２１６】
（付記６）前記受付手段によって所定期間中に受け付けた処理の処理要求に基づいて、当該所定期間中の前記レコードに対する処理の実行頻度を前記属性名ごとに算出する算出手段をさらに備え、
前記取得手段は、
前記算出手段によって算出された属性名ごとの前記所定期間中の処理の実行頻度を取得することを特徴とする付記５に記載の分散処理装置。
【０２１７】
（付記７）前記第１の検索手段によって前記一の処理が検索されなかった場合、前記データベース間で前記レコード群のデータ内容を一致させる同期指示を前記複数のノードに指示する指示手段を備えることを特徴とする付記３〜６のいずれか一つに記載の分散処理装置。
【０２１８】
（付記８）前記分類手段は、
前記属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、前記実行頻度が最大の一の属性名から特定されるレコードに対する一の処理の集合と、当該一の処理とは異なる他の処理の集合とに分類することを特徴とする付記１〜７のいずれか一つに記載の分散処理装置。
【０２１９】
（付記９）所定のレコード群を格納するデータベースを有する各ノードに、当該レコード群に対する複数の処理を割り当てるコンピュータを、
前記レコード群に含まれる各レコードを特定する属性名ごとに、当該属性名から特定されるレコードに対する処理の実行頻度を取得する取得手段、
前記取得手段によって取得された属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、一の属性名から特定されるレコードに対する一の処理の集合と、当該一の処理とは異なる他の処理の集合とに分類する分類手段、
前記分類手段によって分類された一の処理の集合の割当先となるノードを前記複数のノードの中から決定する決定手段、
前記決定手段によって前記一の処理の集合の割当先に決定されたノードに前記一の処理を割り当てる割当手段、
として機能させることを特徴とする分散処理プログラム。
【０２２０】
（付記１０）所定のレコード群を格納するデータベースを有する各ノードに、当該レコード群に対する複数の処理を割り当てるコンピュータが、
前記レコード群に含まれる各レコードを特定する属性名ごとに、当該属性名から特定されるレコードに対する処理の実行頻度を取得する取得工程と、
前記取得工程によって取得された属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、一の属性名から特定されるレコードに対する一の処理の集合と、当該一の処理とは異なる他の処理の集合とに分類する分類工程と、
前記分類工程によって分類された一の処理の集合の割当先となるノードを前記複数のノードの中から決定する決定工程と、
前記決定工程によって前記一の処理の集合の割当先に決定されたノードに前記一の処理を割り当てる割当工程と、
を実行することを特徴とする分散処理方法。
【符号の説明】
【０２２１】
１００  ネットワークシステム
１０１  分散処理装置
１１０−１〜１１０−ｎ  データベース
４０１  受付部
４０２  検出部
４０３  生成部
４０４  取得部
４０５  分類部
４０６  決定部
４０７  割当部
４０８  算出部
４０９  第１の検索部
４１０  選択部
４１１  第２の検索部
４１２  指示部
６００  フォワードプロキシ装置
６０１  電文
６０２  トラン・アイテムテーブル
６０３  振分前データテーブル
６０４  データキュー
６１０  トランザクション取得処理部
６２０  排他アイテム追加処理部
６３０  検索処理部
６４０  格納処理部
６５０  ディスパッチ処理部
Ｃ  クライアント装置
Ｎ１〜Ｎｎ  ノード
【図１】
0005625450.tif 000002
【図２】
0005625450.tif 000003
【図３】
0005625450.tif 000004
【図４】
0005625450.tif 000005
【図５】
0005625450.tif 000006
【図６−１】
0005625450.tif 000007
【図６−２】
0005625450.tif 000008
【図７】
0005625450.tif 000009
【図８】
0005625450.tif 000010
【図９】
0005625450.tif 000011
【図１０】
0005625450.tif 000012
【図１１−１】
0005625450.tif 000013
【図１１−２】
0005625450.tif 000014
【図１２】
0005625450.tif 000015
【図１３】
0005625450.tif 000016
【図１４】
0005625450.tif 000017
【図１５】
0005625450.tif 000018
【図１６】
0005625450.tif 000019
【図１７】
0005625450.tif 000020
【図１８−１】
0005625450.tif 000021
【図１８−２】
0005625450.tif 000022
【図１８−３】
0005625450.tif 000023
【図１８−４】
0005625450.tif 000024
【図１９−１】
0005625450.tif 000025
【図１９−２】
0005625450.tif 000026
【図２０】
0005625450.tif 000027
【図２１】
0005625450.tif 000028
【図２２】
0005625450.tif 000029
【図２３】
0005625450.tif 000030
【図２４】
0005625450.tif 000031