以下に添付図面を参照して、この発明にかかる分散処理装置、分散処理プログラムおよび分散処理方法の好適な実施の形態を詳細に説明する。
図1は、実施の形態にかかるネットワークシステムの一実施例を示すシステム構成図である。図1において、ネットワークシステム100は、分散処理装置101とノードN1〜Nnとクライアント装置Cとを含む構成である。また、ネットワークシステム100において、分散処理装置101とノードN1〜Nnとクライアント装置Cとは、有線または無線のネットワーク120を介して接続されている。
ネットワークシステム100は、たとえば、高い可用性が要求されるHA(High Availability)構成のシステムに適用される。分散処理装置101は、クライアント装置Cから各種処理の処理要求を受け付けて、ノードN1〜Nnに処理を割り当てる機能を有する。分散処理装置101は、たとえば、プロキシサーバである。
ノードN1〜Nnは、共通のレコード群を格納するデータベース110−1〜110−nをそれぞれ備え、分散処理装置101から割り当てられた処理を実行するコンピュータである。クライアント装置Cは、データベース110−1〜110−n内のレコード群に対する処理の処理要求を分散処理装置101に送信する。クライアント装置Cは、たとえば、パーソナル・コンピュータやサーバである。
以下の説明では、データベース110−1〜110−nに格納されている共通のレコード群を「レコード群R1〜Rm」と表記し、レコード群R1〜Rmのうち任意のレコードを「レコードRj」と表記する(j=1,2,…,m)。また、ノードN1〜Nnのうち任意のノードを「ノードNi」と表記する(i=1,2,…,n)。
つぎに、実施の形態にかかる分散処理装置101の一実施例について説明する。図2は、実施の形態にかかる分散処理装置の一実施例を示す説明図である。ただし、ここでは説明のため、各データベース110−1〜110−nに格納されているレコード群を「レコードR1〜R5」とし、レコード群R1〜R5に対する処理群を「処理T1〜T10」とする。
(1)分散処理装置101は、各レコードRjを特定する属性名ごとに、当該属性名から特定されるレコードRjに対する処理の実行頻度を取得する。ここで、レコードRjに対する処理とは、たとえば、レコードRjの更新処理、参照処理および書込処理などである。
属性名は、レコードRjを特定するための属性情報である。属性名は、たとえば、レコードRjに含まれるデータの項目名(フィールド名)や、レコードRjを含むファイル(テーブル)のファイル名(テーブル名)などである。一つのレコードRjを特定するための属性名として、たとえば、ファイル名と項目名の組み合わせを設定してもよく、また、複数の項目名を設定してもよい。
一例として、テーブル名「学生構成」のテーブル内のフィールド名「総人数」、「1年生」、「2年生」、「3年生」の各データを含むレコードRjを例に挙げると、レコードRjの属性名は、たとえば『学生構成、1年生、2年生、3年生』となる。ただし、データベース110−1〜110−nに格納されている各レコードRjを特定するための属性名は予め設定されている。
また、レコードRjに対する処理の実行頻度とは、たとえば、クライアント装置Cから分散処理装置101が受け付ける処理の処理要求の中に、レコードRjに対する処理の処理要求が出現する割合である。一例として、分散処理装置101がクライアント装置Cから受け付けた100[個]の処理要求の中に、レコードRjに対する処理の処理要求が10[個]含まれていたとする。この場合、レコードRjに対する処理の実行頻度は、たとえば、0.1(=10/100)となる。
以下の説明では、各レコードR1〜Rmを特定するための属性名を「属性名A1〜Am」と表記し、属性名A1〜Amのうち任意の属性名を「Aj」と表記する(j=1,2,…,m)。また、レコードRjに対する処理の実行頻度を「実行頻度Fj」と表記する。
図2に示す例では、レコードR1〜R5を特定するための属性名A1〜A5ごとに、各レコードR1〜R5に対する処理の実行頻度F1〜F5が取得されている。ここで、実行頻度F1〜F5の大小関係を「F1>F2>F3>F4>F5」とすると、レコードR1〜R5に対する処理のうちレコードR1に対する処理が最頻出の処理となる。
(2)分散処理装置101は、属性名Ajごとの処理の実行頻度Fjに基づいて、複数の処理T1〜TKを、一の属性名から特定されるレコードに対する一の処理の集合と、一の処理とは異なる他の処理の集合とに分類する。ここで、各処理の処理要求には、処理対象となるレコードRjを特定するための属性名Ajが含まれている。したがって、分散処理装置101は、処理要求に含まれる属性名Ajから各処理の処理対象となるレコードRjを特定することができる。
具体的には、たとえば、分散処理装置101は、処理Tkの処理要求に含まれる属性名が一の属性名の場合は、処理Tkを一の処理の集合に分類する(k=1,2,…,K)。一方、分散処理装置101は、処理Tkの処理要求に含まれる属性名が一の属性名とは異なる属性名の場合は、処理Tkを他の処理の集合に分類する。
ここでは、一例として、属性名A1〜A5のうち、処理の実行頻度が最大の属性名A1を一の属性名とする。この場合、分散処理装置101は、処理Tkの処理要求に含まれる属性名が属性名A1の場合は処理Tkを一の処理の集合に分類し、処理Tkの処理要求に含まれる属性名が属性名A1とは異なる場合は処理Tkを他の処理の集合に分類する。この結果、処理T1,T3,T5が一の処理の集合に分類され、処理T2,T4,T6,T7,T8,T9,T10が他の処理の集合に分類されている。
(3)分散処理装置101は、分類された一の処理の集合の割当先となるノードをノードN1〜Nnの中から決定する。ここでは、ノードN1〜Nnの中から、一の処理の集合の割当先としてノードN1が決定されている。
(4)分散処理装置101は、一の処理の集合の割当先に決定されたノードNiに一の処理を割り当てる。ここでは、一の処理の集合に含まれる処理T1,T3,T5がノードN1に割り当てられる。この結果、レコードR1に対する処理T1,T3,T5は、ノードN1が備えるデータベース110−1に対してのみ実行される。なお、他の処理の集合に含まれる処理T2,T4,T6,T7,T8,T9,T10は、たとえば、ノードN1〜NnのいずれかのノードNiに割り当てられる。
このように、分散処理装置101によれば、ノードN1〜Nnに割り当てる処理T1〜TKを、一の処理の集合と他の処理の集合に分類して、一の処理を同一のノードに割り当てることができる。これにより、一の処理を一つのノードに集中させることができ、一の処理の処理対象となるレコードRjのデータ内容を一致させるための同期を後回しにして同期回数を減らし、同期処理にかかるオーバーヘッドを削減することができる。
また、分散処理装置101によれば、属性名Ajごとの処理の実行頻度Fjをもとに一の属性名を指定することができる。このため、たとえば、実行頻度Fjが最大となる属性名Ajを一の属性名として指定することで、最頻出の処理の実行時に発生する同期処理のオーバーヘッドを効果的に削減することができる。
上述した例では、一の処理の割当先をノードN1に固定している間は、レコードR1のデータ内容をノード間で同期させる必要がない。これにより、最頻出の処理の実行時に発生する同期処理のオーバーヘッドを削減して、ネットワークシステム100のパフォーマンス低下を抑制することができる。
(分散処理装置101のハードウェア構成)
図3は、実施の形態にかかる分散処理装置のハードウェア構成を示すブロック図である。図3において、分散処理装置101は、CPU(Central Processing Unit)301と、ROM(Read‐Only Memory)302と、RAM(Random Access Memory)303と、磁気ディスクドライブ304と、磁気ディスク305と、光ディスクドライブ306と、光ディスク307と、ディスプレイ308と、I/F(Interface)309と、キーボード310と、マウス311と、スキャナ312と、プリンタ313と、を備えている。また、各構成部はバス300によってそれぞれ接続されている。
ここで、CPU301は、分散処理装置101の全体の制御を司る。ROM302は、ブートプログラムや分散処理を実現するための分散処理プログラムなどの各種プログラムを記憶している。RAM303は、CPU301のワークエリアとして使用される。磁気ディスクドライブ304は、CPU301の制御にしたがって磁気ディスク305に対するデータのリード/ライトを制御する。磁気ディスク305は、磁気ディスクドライブ306の制御で書き込まれたデータを記憶する。
光ディスクドライブ306は、CPU301の制御にしたがって光ディスク307に対するデータのリード/ライトを制御する。光ディスク307は、光ディスクドライブ306の制御で書き込まれたデータを記憶したり、光ディスク307に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ308は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ308は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
インターフェース(以下、「I/F」と略する。)309は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク120に接続され、このネットワーク120を介して他の装置に接続される。そして、I/F309は、ネットワーク120と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F309には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード310は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス311は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ312は、画像を光学的に読み取り、分散処理装置101内に画像データを取り込む。なお、スキャナ312は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ313は、画像データや文書データを印刷する。プリンタ313には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
(分散処理装置101の機能的構成)
つぎに、実施の形態にかかる分散処理装置101の機能的構成について説明する。図4は、分散処理装置の機能的構成を示すブロック図である。図4において、分散処理装置101は、受付部401と、検出部402と、生成部403と、取得部404と、分類部405と、決定部406と、割当部407と、算出部408と、第1の検索部409と、選択部410と、第2の検索部411と、指示部412と、を含む構成である。各機能部(受付部401〜指示部412)は、具体的には、たとえば、図3に示したROM302、RAM303、磁気ディスク305、光ディスク307などの記憶装置に記憶されたプログラムをCPU301に実行させることにより、または、I/F309により、その機能を実現する。なお、各機能部(受付部401〜指示部412)の処理結果は、たとえば、RAM303、磁気ディスク305、光ディスク307などの記憶装置に記憶される。
受付部401は、各データベース110−1〜110−nに格納されているレコードRjに対する処理Tkを要求する処理要求をクライアント装置Cから受け付ける機能を有する。ここで、処理要求は、たとえば、レコードRjに対する処理Tkを要求する電文や順編成ファイルである。
また、処理要求は、一つの処理Tkを要求するものでもよく、トランザクションやバッチジョブのように複数の処理Tkを要求するものでもよい。すなわち、処理要求は、一つのレコードRjに対する処理Tkを要求するものでもよく、また、複数のレコードRjに対する一連の処理Tkを要求するものでもよい。
また、処理要求は、たとえば、XML(eXtensible Markup Language)等のスキーマ構造が定義済みの電文(データ)として記述されている。処理要求には、処理対象となるレコードRjを特定するための属性名Ajが含まれている。また、更新処理や書込処理などの処理要求の場合は、処理要求には、更新対象または書込対象となるデータが含まれている。
各レコードRjを特定するための属性名Ajは、たとえば、予め設定されてROM302、RAM303、磁気ディスク305、光ディスク307などの記憶装置に記憶されている。なお、各レコードRjを特定するための属性名Ajの具体例については、図7および図8を用いて後述する。
検出部402は、受け付けた処理Tkの処理要求の中から属性名Ajを検出する機能を有する。具体的には、たとえば、検出部402が、処理要求のデータ形式にしたがって、処理要求の中から属性名Ajを表す文字列(たとえば、タグに囲まれた文字列)を検出する。処理要求のデータ形式としては、たとえば、XML要素形式やXML属性形式などがある。
生成部403は、検出された検出結果に基づいて、レコードRjを特定するための属性名Ajごとに、受け付けた処理Tkの処理要求に属性名Ajが含まれているか否かを示すビット列を生成する機能を有する。具体的には、たとえば、生成部403が、属性名Ajごとに、処理要求に属性名Ajが含まれている場合は「1」、属性名Ajが含まれていない場合は「0」を示すビット列を生成する。このため、予め設定された属性名Ajの総数がm個の場合、ビット列はmビットとなる。
一例として、「m=5」とし、受け付けた処理Tkの処理要求に属性名A3が含まれている場合を説明する。この場合、各属性名A1〜A5が処理要求に含まれているか否かを示すビット列は、属性名A1〜A5の順に「00100」となる。ビット列によれば、各処理Tkの処理要求に含まれている属性名Aj(上記例では属性名A3)を容易に特定することができる。
取得部404は、各レコードRjを特定するための属性名Ajごとに、属性名Ajから特定されるレコードRjに対する処理の実行頻度Fjを取得する機能を有する。具体的には、たとえば、取得部404が、図3に示したキーボード310やマウス311を用いたユーザの操作入力により、レコードRjに対する処理の実行頻度Fjを取得してもよい。また、取得部404が、後述する算出部408によって算出されたレコードRjに対する処理の実行頻度Fjを取得してもよい。
分類部405は、取得された属性名Ajごとの処理の実行頻度Fjに基づいて、複数の処理T1〜TKを、一の属性名から特定されるレコードに対する一の処理の集合と、一の処理とは異なる他の処理の集合とに分類する機能を有する。ここで、一の属性名は、属性名A1〜Amの中から任意に設定可能である。具体的には、たとえば、一の属性名は、属性名A1〜Amのうち少なくとも他の属性名よりも実行頻度が大きい属性名である。
一例として、一の属性名を、属性名A1〜Amのうち実行頻度が最大の属性名とする。この場合、たとえば、分類部405が、取得された属性名Ajごとの処理の実行頻度Fjをもとに、属性名A1〜Amの中から実行頻度が最大の処理の属性名Amaxを特定する。
そして、分散処理装置101は、処理Tkの処理要求に含まれる属性名が属性名Amaxの場合は処理Tkを一の処理の集合に分類する。一方、分散処理装置101は、処理Tkの処理要求に含まれる属性名が属性名Amaxとは異なる場合は処理Tkを他の処理の集合に分類する。このとき、分類部405は、生成された処理Tkの処理要求のビット列を参照することで、処理要求に属性名Amaxを含むか否かを容易に特定でき、分類処理の効率化を図ることができる。
決定部406は、分類された一の処理の集合の割当先となるノードNiをノードN1〜Nnの中から決定する機能を有する。具体的には、たとえば、決定部406が、ノードN1〜Nnの中から任意に選ばれたノードNiを、一の処理の集合の割当先に決定してもよい。また、決定部406が、ノードN1〜Nnのうち処理能力が最大のノードNiを一の処理の集合の割当先に決定してもよい。以下の説明では、一の処理の集合の割当先に決定されたノードNiを「一のノード」という。
割当部407は、一のノードに一の処理を割り当てる機能を有する。具体的には、たとえば、割当部407が、後述する第1の検索部409によって検索された一の処理を一のノードに割り当てることにしてもよい。また、割当部407は、ノードN1〜Nnのうち一のノードとは異なる他のノードに他の処理を割り当てる機能を有する。具体的には、たとえば、割当部407が、後述する第2の検索部411によって検索された他の処理を他のノードに割り当てることにしてもよい。
算出部408は、受け付けた処理Tkの処理要求に基づいて、属性名AjごとにレコードRjに対する処理の実行頻度Fjを算出する機能を有する。具体的には、たとえば、算出部408が、所定期間中に受け付けた処理Tkの処理要求に基づいて、所定期間中のレコードRjに対する処理の実行頻度Fjを算出することにしてもよい。
この場合、取得部404は、たとえば、割当対象となる処理T1〜TKの処理要求を受け付けた期間に合わせて、算出された該期間中のレコードRjに対する処理の実行頻度Fjを取得することにしてもよい。具体的には、たとえば、割当対象となる処理T1〜TKの処理要求を月曜日に受け付けた場合、以前の月曜日に受け付けた処理Tkの処理要求に基づく処理の実行頻度Fjを取得する。
これにより、月や曜日や時間帯などによって変動する処理の実行頻度Fjの変動に合わせて一の属性名を指定することができる。また、レコードRjに対する処理の実行頻度Fjは、たとえば、既存のアプリオリ(a priori)アルゴリズムを用いて算出することができる。なお、算出部408の具体的な処理内容は、図11−1および図11−2を用いて後述する。
選択部410は、ノードN1〜Nnのうち一のノードを除く残余のノードの中から他のノードを選択する機能を有する。具体的には、たとえば、選択部410が、残余のノードN1〜Nnの中から他のノードを任意に選択してもよく、また、処理能力が高い順に他のノードを選択してもよい。
第1の検索部409は、所定の検索条件に基づいて、一の処理の集合の中から一の処理を検索する機能を有する。具体的には、たとえば、第1の検索部409が、一の処理の集合の中から、処理要求を受け付けた時刻が最も古い一の処理を検索することにしてもよい。また、割当部407は、第1の検索部409によって検索された一の処理を一のノードに割り当てることにしてもよい。
これにより、一の処理を最古のものから実行でき、一の処理の処理対象となるレコードRjのデータ内容の整合性を保証することができる。また、第1の検索部409は、一の処理の集合の中から、各処理Tkの処理要求に付与されている優先度が最大となる一の処理を検索することにしてもよい。これにより、一の処理を優先度の高いものから実行することができる。
第2の検索部411は、所定の検索条件に基づいて、他の処理の集合の中から他の処理を検索する機能を有する。具体的には、たとえば、第2の検索部411が、他の処理の集合の中から、処理要求を受け付けた時刻が最も古い他の処理を検索することにしてもよい。また、割当部407は、第2の検索部411によって検索された他の処理を、選択部410によって選択された他のノードに割り当てることにしてもよい。
これにより、他の処理を最古のものから実行でき、他の処理の処理対象となるレコードRjのデータ内容の整合性を保証することができる。また、第2の検索部411は、他の処理の集合の中から、各処理Tkの処理要求に付与されている優先度が最大となる他の処理を検索することにしてもよい。これにより、他の処理を優先度の高いものから実行することができる。
また、第2の検索部411は、他の処理が検索されなかった場合、割当部407によってノードN1〜NnのいずれかのノードNiに割り当てられた割当済の処理の集合の中から、処理要求を受け付けた時刻が最古の割当済の処理を検索することにしてもよい。この場合、割当部407は、第2の検索部411によって検索された割当済の処理を他のノードに割り当てることにしてもよい。これにより、ノードN1〜Nnのうち一のノードを除く残余のノードのデータベース間で各レコードRjのデータ内容を一致させるための同期を行うことができる。
指示部412は、第1の検索部409によって一の処理が検索されなかった場合、データベース間でレコード群R1〜Rmのデータ内容を一致させる同期指示をノードN1〜Nnに指示する機能を有する。具体的には、たとえば、指示部412が、ネットワーク120を介して、ノードN1〜Nnに同期指示を送信する。
これにより、後回しにしていた同期処理を自動で行うことができ、レコード群R1〜Rmのデータ内容のデータベース間での同一性を確保することができる。ただし、キーボード310やマウス311を用いたユーザの操作入力により、任意のタイミングで同期指示をノードN1〜Nnに指示することにしてもよい。
(分散処理装置101の分散処理手順)
つぎに、実施の形態にかかる分散処理装置101の分散処理手順について説明する。図5は、実施の形態にかかる分散処理装置の分散処理手順の一例を示すフローチャートである。ただし、ここでは、ノードN1〜Nnに対する割当対象となる複数の処理を「処理T1〜TK」とする。
図5において、まず、取得部404により、各レコードRjを特定するための属性名Ajごとに、属性名Ajから特定されるレコードRjに対する処理の実行頻度Fjを取得する(ステップS501)。そして、分類部405により、取得された属性名Ajごとの処理の実行頻度Fjに基づいて、処理T1〜TKを、一の属性名から特定されるレコードに対する一の処理の集合と他の処理の集合とに分類する(ステップS502)。なお、一の属性名は、たとえば、属性名A1〜Amのうち実行頻度が最大の属性名である。
このあと、決定部406により、分類された一の処理の集合の割当先となる一のノードをノードN1〜Nnの中から決定する(ステップS503)。つぎに、第1の検索部409により、一の処理の集合の中から、処理要求を受け付けた時刻が最も古い一の処理を検索する(ステップS504)。
ここで、一の処理が検索された場合(ステップS505:Yes)、割当部407により、検索された一の処理を一のノードに割り当てる(ステップS506)。そして、選択部410により、ノードN1〜Nnのうち一のノードを除く残余のノードの中から他のノードを選択する(ステップS507)。
つぎに、第2の検索部411により、他の処理の集合の中から、処理要求を受け付けた時刻が最も古い他の処理を検索する(ステップS508)。ここで、他の処理が検索された場合(ステップS509:Yes)、割当部407により、検索された他の処理を、選択された他のノードに割り当てる(ステップS510)。
そして、選択部410により、ノードN1〜Nnのうち一のノードを除く残余のノードの中から選択されていない未選択のノードがあるか否かを判断する(ステップS511)。ここで、未選択のノードがある場合(ステップS511:Yes)、ステップS507に戻る。一方、未選択のノードがない場合(ステップS511:No)、割当部407により、割り当てた割当結果を一のノードおよび他のノードに送信して(ステップS512)、ステップS505に戻る。
ここで、一のノードの割当結果とは、たとえば、一のノードに割り当てた一の処理の処理要求である。他のノードの割当結果とは、たとえば、他のノードに割り当てた他の処理または割当済の処理の処理要求である。
また、ステップS509において、他の処理が検索されなかった場合(ステップS509:No)、第2の検索部411により、ノードN1〜NnのいずれかのノードNiに割り当てられた割当済の処理の集合の中から、処理要求を受け付けた時刻が最古の割当済の処理を検索する(ステップS513)。
ここで、割当済の処理が検索された場合(ステップS514:Yes)、割当部407により、検索された割当済の処理を他のノードに割り当てて(ステップS515)、ステップS511に移行する。一方、割当済の処理が検索されなかった場合(ステップS514:No)、ステップS511に移行する。
また、ステップS505において、一の処理が検索されなかった場合(ステップS505:No)、指示部412により、レコード群R1〜Rmのデータ内容を一致させる同期指示をノードN1〜Nnに送信して(ステップS516)、本フローチャートによる一連の処理を終了する。
以上説明したように、実施の形態にかかる分散処理装置101によれば、属性名Ajごとの処理の実行頻度Fjに基づいて、処理T1〜TKを、一の属性名から特定されるレコードに対する一の処理の集合と、他の処理の集合とに分類することができる。また、分散処理装置101によれば、一の処理の集合の割当先となる一のノードをノードN1〜Nnの中から決定して、一の処理を一のノードに割り当てることができる。
これにより、一の処理を一のノードに集中させることができ、一の処理の処理対象となるレコードRjのデータ内容を一致させるための同期を後回しにして同期回数を減らし、同期処理にかかるオーバーヘッドを削減することができる。また、実行頻度Fjが最大となる属性名Ajを一の属性名として指定することで、最頻出の処理の実行時に発生する同期処理のオーバーヘッドを効果的に削減することができる。
また、分散処理装置101によれば、一のノードに一の処理を割り当てるとともに、ノードN1〜Nnのうち一のノードとは異なる他のノードに他の処理を割り当てることができる。これにより、一のノードについて、他の処理が割り当てられることがないため、他の処理の処理対象となるレコードRjのデータ内容を一致させるための同期を後回しにすることができる。
また、分散処理装置101によれば、一の処理の集合のうち未割当の一の処理の集合の中から、処理要求を受け付けた時刻が最古の一の処理を検索して、一のノードに割り当てることができる。これにより、一の処理を最古のものから実行でき、一の処理の処理対象となるレコードRjのデータ内容の整合性を保証することができる。
また、分散処理装置101によれば、他の処理の集合のうち未割当の他の処理の集合の中から、処理要求を受け付けた時刻が最古の他の処理を検索し、ノードN1〜Nnのうち一のノードを除く残余のノードの中から選ばれた他のノードに割り当てることができる。これにより、他の処理を最古のものから実行でき、他の処理の処理対象となるレコードRjのデータ内容の整合性を保証することができる。
また、分散処理装置101によれば、他の処理が非検索の場合は、ノードN1〜NnのいずれかのノードNiに割り当てられた割当済の処理の集合の中から、処理要求を受け付けた時刻が最古の割当済の処理を検索して、他のノードに割り当てることができる。これにより、ノードN1〜Nnのうち一のノードを除く残余のノードのデータベース間で各レコードRjのデータ内容を一致させるための同期を行うことができる。
また、分散処理装置101によれば、各レコードRjを特定するための属性名Ajごとに、各処理Tkの処理要求に属性名Ajが含まれているか否かを示すビット列を生成することができる。また、分散処理装置101によれば、各処理Tkの処理要求のビット列を参照することにより、処理要求に一の属性名を含むか否かを容易に特定でき、分類処理の効率化を図ることができる。
また、分散処理装置101によれば、所定期間中に受け付けた各処理Tkの処理要求に基づいて、属性名Ajごとの処理の実行頻度Fjを算出することにより、期間ごとの傾向に応じた処理の実行頻度Fjを取得することができる。これにより、月や曜日や時間帯などによって変動する処理の実行頻度Fjの変動に合わせて一の属性名を指定することができる。
また、分散処理装置101によれば、一の処理が検索されなかった場合、データベース間でレコード群R1〜Rmのデータ内容を一致させる同期指示をノードN1〜Nnに指示することができる。これにより、後回しにしていた同期処理を自動で行うことができ、レコード群R1〜Rmのデータ内容のデータベース間での同一性を確保することができる。
つぎに、実施の形態にかかる分散処理装置101の実施例について説明する。ここでは、分散処理装置101をフォワードプロキシ装置に適用した場合を例に挙げて、具体的なトランザクションデータの分散処理について説明する。
(分散処理を適用したフォワードプロキシ装置)
図6−1は、実施の形態にかかる分散処理装置を適用したフォワードプロキシ装置を示す説明図である。図6−2は、処理対象となるデータの一例を示すデータテーブルである。図6−1に示したような、フォワードプロキシ装置600では、図6−2に示したようなデータテーブル500に示すような、エンティティと属性とが設定されたトランザクションデータを取得して、各処理ノードに実行させる。すなわち、フォワードプロキシ装置600が扱うトランザクションデータの場合、データテーブルが表している属性に基づいてデータベース内の1レコードが構成されていることを意味する。
図6−1において、フォワードプロキシ装置600は、共通のデータベースへの処理を要求するトランザクションデータを一括して取得して、共通のデータベースへの並列処理が可能な各処理ノード、たとえば、後述する図17に示す「ア」、「イ」、「ウ」の各処理ノードへ振り分ける機能を有している。
トランザクションデータとしては、たとえば、オンラインクライアントから入力された電文601が挙げられる。フォワードプロキシ装置600は、各処理ノードにそれぞれ用意された共通のデータベースへの処理要求として、上述のようなトランザクションデータを取得する。そしてフォワードプロキシ装置600は、トランザクションデータを一旦装置内に格納する。そして、格納済みのトランザクションデータの中の未処理のトランザクションデータを各処理ノードに振り分けて、同一の処理ステップとして実行させる。
特に、フォワードプロキシ装置600の場合、トランザクションデータを実行する際にアクセスされるレコードのアクセス頻度を参照する。そして、フォワードプロキシ装置600は、最もアクセス頻度が高いレコードの組み合わせに該当するトランザクションデータに関しては、他のトランザクションデータと分けて優先的に処理を実行させる。なお、ここでのアクセス頻度は、上述した処理の実行頻度Fjに相当する。
また、フォワードプロキシ装置600は、アクセス頻度が高いレコードの組み合わせ以外をもつトランザクションデータを、アクセス頻度が高いレコードを含むトランザクションデータとは異なる処理ノードにて実行するように振り分ける。すなわち、同じ処理ステップで異なる処理ノードに振り分けられた上記の2種類のトランザクションデータは、処理対象となるレコード同士に排他性が保たれている。
フォワードプロキシ装置600は、同じレコードにアクセスする必要のあるトランザクションデータ同士については、同一の処理ノード(たとえば、処理ノード「ア」)によって優先的に実行されるように振り分ける。したがって、同じレコードにアクセスするトランザクションデータを他の処理ノードで実行させないため、同期処理の必要性を可能な限り削減することができる。
結果として、従来の分散処理装置のように、同一のレコードへのアクセス集中によるロック状態の発生や、頻繁な同期処理を防ぐことができる。したがって、各処理ノードはそれぞれ独立してトランザクションデータを実行できるとともに、同期処理の際の待機時間が削減されるため、処理効率を向上させることができる。
具体的な構成について説明すると、フォワードプロキシ装置600は、図6−1のように、上述した分散処理装置101の各機能部を実現するための機能部として、トランザクション取得処理部610と、排他アイテム追加処理部620と、検索処理部630と、格納処理部640と、ディスパッチ処理部650とを備えている。
トランザクション取得部000は、上述した分散処理装置101の受付部401、検出部402および生成部403に相当する機能を実現する。また、排他アイテム追加処理部620は、上述した分類部405および取得部404に相当する機能を実現する。さらに、検索処理部630は、上述した決定部406、選択部410および第2の検索部411に相当する機能を実現する。また、格納処理部640は、上述した割当部407に相当する機能を実現する。そして、ディスパッチ処理部650は、上述の割当部407によって処理が割り当てられたノードの動作を制御する機能を実現している。各処理部の詳細な機能については順に後述する。
また、フォワードプロキシ装置600には、各種データを記憶する記憶領域として、トラン・アイテムテーブル602と、振分前データテーブル603と、処理ノードごとのデータキュー604とが用意されている。トラン・アイテムテーブル602内には、高速アクセス可能なトラン・アイテムキャッシュテールおよび排他識別レジスタが用意されている。各記憶領域の役割についても関連する機能部の説明に合わせて詳しく後述する。
<データ構成>
ここで、フォワードプロキシ装置600による分散処理の説明に入る前に、フォワードプロキシ装置600に入力されるトランザクションデータのデータ構成について説明する。フォワードプロキシ装置600では、取得したトランザクションデータに含まれている情報に基づいて、トランザクションデータを処理する際にアクセスするレコードが特定される。上述したように、各処理ノードが共通のデータベースに対して並列処理を行う場合には、各処理ノードがそれぞれ処理を実行する際に、アクセスするレコードが重複しないようなトランザクションデータを振り分けなければならない。
そこで、フォワードプロキシ装置600は、取得したトランザクションデータの中から、処理実行時にアクセスするレコードを特定するための情報を参照して、予めどのレコードへアクセスが発生するかを表す情報を用意しておく。具体的には、取得したトランザクションのデータ形式に基づいて、データテーブル500(図6−2参照)に挙げられたエンティティのいずれのデータが処理対象となるかを特定する。そして、特定された処理対象となるデータに応じて、トランザクションデータを処理ノードによって実行する際に、アクセスされるレコードを特定することができる。
ここで、図7は、各形式の電文およびスキーマ取得例を示す説明図である。図7のデータ列700は、フォワードプロキシ装置600に入力される電文601の形式の具体例と、データ形式ごとの電文601の表示内容の仕様を意味するスキーマとを表している。図7のデータ列700では、電文601の形式として、(A)XML要素形式と、(B)XML属性系と、(C)CSV(Comma Separated Values)形式とが挙げられている。いずれの形式の電文601も、学生構成テーブル学校ID“JO1234”のレコードについて、総数を“183”名に更新するための処理が記されている。
そして、図8は、排他アイテム名の定義例を示すデータテーブルである。フォワードプロキシ装置600の場合、図8のデータ列800に示したような排他アイテム名リストが設定されている。排他アイテム名リストは、「学生構成」、「教職員構成」、「収入」、「支出」などが、それぞれ排他アイテム名として設定されている。各トランザクションデータは、各排他アイテム名のどの属性を表すデータが含まれているかに応じて、処理実行時にアクセスするデータテーブル810を特定する。
具体的には、属性と各排他アイテム名とが同列に設定されているデータテーブル810を利用して、トランザクションデータに含まれる属性から排他アイテム名を一意的に特定することができる。すなわち、フォワードプロキシ装置600が図7のデータ列700に示したような電文601を取得すると、電文601に含まれる属性から排他アイテム名を特定する。また、排他アイテム名は、「学生構成」、「教職員構成」など、実際の名称ではなく、少ないビット数で識別できるように、下記のように識別子を設定しておく。
学生構成に関する属性811 →排他アイテム名A
教職員構成に関する属性812→排他アイテム名B
収入に関する属性813 →排他アイテム名C
支出に関する属性814 →排他アイテム名D
その他の任意の属性 →排他アイテム名E
上述したように、同じ排他アイテム名に設定される属性のデータであれば同じレコードに格納されていることを意味する。したがって、たとえば、学生構成に関する属性811のいずかが含まれた電文601であれば、上記のような設定が行われている場合には、電文601は排他アイテム名Aを処理対象とすると特定される。また、電文601によって排他アイテム名A,Cを処理対象とするといったように複数の排他アイテム名が設定されている場合、当然のことながら、1つのトランザクションデータによって複数のレコードにアクセスが行われる。
<トランザクション取得処理部>
図9は、トランザクション取得処理部の処理手順を示すフローチャートである。トランザクション取得処理部610は、共通のデータベースを処理対象とするトランザクションデータを取得する機能を有する。トランザクション取得処理部610は、オンラインクライアントなどからのトランザクションデータ(たとえば、電文601)の入力をトリガに処理を開始する。
図9のように、トランザクション取得処理部610では、事前処理として、排他対象を抽出するためのキーワードである「排他アイテム名」が設定されているか否かを判断する(ステップS901)。ステップS901において、排他アイテム名が設定されていないと判断された場合(ステップS901:No)、トランザクション取得処理部610は、設計者や上位システムからの指示を受け付けて、排他アイテム名を設定する(ステップS902)。
なお、フォワードプロキシ装置600の場合、ステップS902では、「排他アイテム名」としてA,B,C,D,Eの5個が設定される。また、ステップS901において、排他アイテム名が設定されていると判断された場合(ステップS901:Yes)、そのままステップS903の処理に移行する。
そして、トランザクション取得処理部610は、実際にトランザクションデータを取得したか否かを判断する(ステップS903)。ステップS903では、トランザクションデータを取得するまで待機状態となる(ステップS903:Noのループ)。ステップS903において、トランザクションデータを取得したと判断されると(ステップS903:Yes)、トランザクション取得処理部601は、トランザクションデータの排他条件逐次をチェックするための準備として、「排他アイテムビット列」を作成する(ステップS904)。
さらに、トランザクション取得処理部601は、ステップS904によって作成した「排他アイテムビット列」を排他識別ハッシュ値にエンコードし(ステップS905)、トランザクションIDを採番する(ステップS906)。なお、トランザクションIDは、他のトランザクションデータとの区別し、なおかつ、トランザクション取得処理部610による取得順序を特定する必要があるため通し番号が振られる。
「排他アイテムビット列」は、トランザクションデータを実行する際にアクセスされる排他アイテム名(レコード単位)を表している。したがって、たとえば、排他アイテム名「A,B,C,D,E」に対応した排他アイテムビット列が「01011」であれば、ビットが立っている排他アイテム名B,D,Eを参照するトランザクションデータであることを意味する。
そして、生成された排他アイテムビット列「01011」は、排他識別ハッシュ値にエンコードされ、10進表示の「11」となる。なお、本実施例では排他識別ハッシュ値として10進数化したものを例示するが、16進など排他アイテムビット列に戻すことが可能な表現であればどのようなものを用いても良い。
その後、トランザクション取得処理部610は、ステップS906によって採番されたトランザクションIDをキーとして、ステップS905によってエンコードされた排他識別ハッシュ値をトラン・アイテムテーブル602に追加する(ステップS907)。また、トランザクション取得処理部610は、トランザクションIDをキーに取得したデータ(処理内容に相当するトランザクションデータ)を、振分前データテーブル603に格納する(ステップS908)。
そして、トランザクション取得処理部610は、あらたなトランザクションデータを取得したことによって、トラン・アイテムテーブル602と振分前データテーブル603が更新されたことを排他アイテム追加処理部620に通知して(ステップS909)、一連の処理を終了する。
以上説明したように、トランザクション取得処理部610は、共通のデータベースへの処理を行うトランザクションデータを一括して取得して、各処理ノードへ振り分ける前、振分前データテーブル603に一時的に格納する。同時に、トランザクション取得処理部610は、後段の処理によって、各処理ノードによって並列処理する際に、同一のレコードへのアクセスが競合しないような準備処理を行う。具体的には、トランザクション取得処理部610における、トランザクションデータを振り分けるための排他アイテムビット列の作成処理が上述の準備処理に相当する。
また、トランザクション取得処理部610は、トランザクションデータから作成した排他アイテムビット列を排他識別ハッシュ値にエンコードして、トラン・アイテムテーブル602に格納している。エンコードによって、トランザクションデータごとの排他アイテムビット列の格納に要する容量が大幅に削減される。したがって、フォワードプロキシ装置600にトランザクションデータが集中してもオーバーフローを起こすことなく、効率的に振り分けることができる。
<排他アイテム追加処理部>
図10は、排他アイテム追加処理部の処理手順を示すフローチャートである。また、図11−1は、相関性に応じたデータレコードのパターン分け処理の手順を示すフローチャートである。図11−2は、相関性に応じたデータレコードのパターン分け処理を示す説明図である。排他アイテム追加処理部620は、トランザクション取得処理部610によってあらたに取得したトランザクションデータを各処理ノードによって実行させるための準備処理として、排他アイテムビット列とともに、トラン・アイテムキャッシュテーブルに追加する機能を有する。
排他アイテム追加処理部620における処理では、トランザクションデータに含まれている排他アイテム名の頻度に関する情報は、トランザクションデータの処理ノードへの振り分けに大きく影響する。具体的には、排他アイテム追加処理部620は、最頻出な排他アイテム名のパターンを含んだトランザクションデータを優先的に特定の処理ノードによって実行するように振り分ける。
上述したような振り分けを支援するために、排他アイテム追加処理部620は、最頻出な排他アイテム名のパターンを含んだトランザクションデータをその他のトランザクションデータとは区別してトラン・アイテムキャッシュテーブルに格納する。したがって、以下、図10を用いて、排他アイテム追加処理部620の処理の流れを説明し、図11−1および図11−2を用いて、データレコードのグループ分けについて説明する。
排他アイテム追加処理部620は、まず、トラン・アイテムテーブル602から1レコードを抽出する(ステップS1001)。なお、ステップS1001の抽出処理は、トランザクション取得処理部610によるトラン・アイテムテーブル602と振分前データテーブル603が更新された旨の通知指示を受けた時、もしくは、トラン・アイテムキャッシュテーブルに空きがある時に行われる。当然のことながら、トランザクション取得処理部610からの通知指示を受けた場合であっても、トラン・アイテムキャッシュテーブルに空きがなければ、空きが発生するまで待機状態となる。
図12は、トラン・アイテムキャッシュテーブルの格納例を示すデータテーブルである。上述したように、トラン・アイテムテーブルには、高速アクセス可能なトラン・アイテムキャッシュテーブルが用意されている。トラン・アイテムキャッシュテーブルには、トランザクションIDごとに、トランザクションIDに該当するトランザクションデータについて作成された排他アイテムビット列が格納されている。
なお、トラン・キャッシュアイテムテーブルへ排他アイテムビット列を格納する際には、排他アイテム名の頻度に応じた(a),(b),(c)にグループ分けがなされている。したがって、トラン・アイテムキャッシュテーブルに格納されている排他アイテムビット列は、全レコードをみるとトランザクションIDの値に応じた降順もしくは昇順にはならない。しかしながら、(a),(b),(c)にグループ分けされたレコードごとには、降順もしくは昇順となる。なお、各レコードの取得タイミングの古さは、上述したようにトランザクションIDを参照すればよい。したがって、図12のように必ずしも挿入順序に基づいた配置を保つ必要はない。
また、トラン・キャッシュアイテムテーブルの容量は(a),(b),(c)のグループごとに上限を調整することができる。望ましくは、(a)+(b)のグループの排他アイテムビット列の総数が(c)のグループの排他アイテムビット列の総数と等しくなるような数がよい。上述のような調整を行うことによって、後述する検索処理部630において、(a),(b),(c)の各グループの排他アイテムビット列をバランスよく抽出して、一括同期の実行タイミングを遅延させることができる。
また、図12のようにトラン・アイテムキャッシュテーブルには、各処理ノード(たとえば、処理ノード「ア」、「イ」、「ウ」)に対応したノード属性を表すビット列が用意されている。ノード属性は、レコードに対応するトランザクションデータがどのノードで実行済みかを表すビット列である。
つぎに、排他アイテム追加処理部620は、ステップS1001によって抽出したレコードの排他識別ハッシュ値をデコードし、排他アイテムビット列を生成する(ステップS1002)。すなわち、ステップS1002の処理によって、トランザクションIDと紐付いていた排他識別ハッシュ値(10進表示)が、ステップS904(図9参照)によって作成された排他アイテムビット列(2進表示)に戻される。
その後、排他アイテム追加処理部620は、事前処理によるデータレコードのグループ分けを参照する(ステップS1003)。データレコードは、トランザクションデータ内の排他アイテム名の出現頻度に基づいて、下記の3パターンに分けられる。パターン分けは、効率的な分散処理を実現するため、直近のトランザクションデータによって行われる処理の傾向(たとえば、排他アイテム名○,△へのアクセスを要する処理が多いなど)を反映する必要がある。したがって、所定の間隔ごとに、パターン分けを行うことによって、直近に取得されるトランザクションデータの傾向を反映させる。なお、ステップS1003の事前処理については図11−1および図11−2を用いて詳しく説明する。
(a)最頻出パターンのみを含むデータレコード
(b)最頻出パターンを含むデータレコード((a)を除く)
(c)最頻出パターンを含まないデータレコード
さらに、排他アイテム追加処理部620は、トランザクションIDをキーとして、排他アイテムビット列をステップS1003によって参照された(a),(b),(c)のグループ別に、トラン・アイテムキャッシュテーブルに挿入する(ステップS1004)。
図13は、排他アイテムビット列の挿入例を示す説明図である。たとえば、ステップS1002によって、トランザクションID:34に紐付いたハッシュ値から排他アイテムビット列が生成されたとする。すると、ステップS1003によって、トランザクションID:34はグループ(a)であると判断される。したがって、トラン・アイテムキャッシュテーブルに図13に示すように、排他アイテムビット列1310が(a)のグループに挿入される。また、追加された排他アイテムビット列1310は、いずれの処理ノードにも実行されていないトランザクションデータである。したがって、属性ノードのビット列は「000」になっている。
図10の説明に戻り、ステップS1004の処理が完了すると、排他アイテム追加処理部620は、ステップS1004の処理によってトラン・アイテムキャッシュテーブルが更新されたことを検索処理部630に通知して(ステップS1005)、一連の処理を終了する。
<データレコードのパターン分け>
ここで、図11−1および図11−2を用いてデータレコードのパターン分けについて説明する。排他アイテム追加処理部620では、トラン・アイテムキャッシュテーブルに格納するデータレコード(トランザクションIDと排他アイテムビット列の組み合わせ)が(a),(b)、(c)のグループに設定された、いずれかのパターンに該当するかを判断している。
図11−1に示すように、排他アイテム追加処理部620は、まず、トラン・アイテムキャッシュテーブルにあらたなデータレコードが追加された際に、アイテムカウンタをインクリメントする(ステップS1101)。図11−2に示すように、アイテムカウンタは、データレコードが表す排他アイテムビット列の中のビットが立っているアイテム名のみをカウントする。したがって、図11−2のように、あらたなデータレコードとしてトラン4(トランザクションID:4に相当)が追加されると、アイテムカウンタでは、排他アイテム名E,Dをカウントする。
つぎに、排他アイテム追加処理部620は、トラン・アイテムキャッシュテーブルにレコードが追加された際に、排他アイテムビット列の排他識別ハッシュ値を求め(ステップS1102)、求められた排他識別ハッシュ値に基づいて、パターンカウンタをインクリメントする(ステップS1103)。パターンカウンタは、アイテムカウンタと異なり、排他アイテム名ごとではなく、排他アイテムビット列のパターンごとの出現をカウントする。
その後、排他アイテム追加処理部620は、アプリオリアルゴリズムを適用して、アイテムカウンタから、ラージアイテムを抽出する(ステップS1104)。ラージアイテムとは、アイテムカウンタによってカウントされたカウントごとの累積値のうち、所定の条件を満たす値(たとえば、総トランザクションデータの50%以上の回数カウントされた値)をもつアイテムである。排他アイテム追加処理部620は、図11−2のように、まずアイテムカウンタを母集団として、「ラージアイテム集合:L1」を抽出する。抽出処理の結果、「ラージアイテム集合:L1」としてアイテム名A,C,D,Eが抽出される。
なお、アプリオリアルゴリズムは、信頼度と支持度に基づいて設定されたルールを評価するアルゴリズムであり、排他アイテム追加処理部620の場合、出現頻度が所定値以上のアイテム名を抽出するルールを設定して抽出処理を行っている。なお、アプリオリアルゴリズム自体は、公知の技術のため詳しい説明は省略する。
そして、排他アイテム追加処理部620は、図11−2のように、「ラージアイテム集合:L1」を母集団として、2つのアイテム名に着目した「ラージアイテム集合:L2」を抽出する。抽出処理の結果、「ラージアイテム集合:L2」としてアイテム名AC,CD,CE,DEが抽出される。その後、排他アイテム追加処理部620は、L2以上のラージアイテム集合から最頻出パターンを求める(ステップS1105)。
図11−2の例では、ステップS1105の処理によって、「ラージアイテム集合:L2」の中から最頻出パターンとしてDEを含んだパターンが抽出される。DEとは排他アイテムビット列「11000」を意味しており、排他識別ハッシュ値で表すと「24」となる。そして、排他アイテム追加処理部620は、ステップS1105の抽出結果によって求められた最頻出パターンのビット列を含むすべてのパターンを求める(ステップS1106)。
最頻出パターンのビット列を含むすべてのパターンとはDEを含むすべての排他アイテム名のパターンを意味する。すなわち、xxxDEとなるxxx部分のいずれかのビットが立っていればよい。したがって、「ADE,BDE,ABDE,CDE,ACDE,BCDE,ABCDE」が挙げられる。また、挙げられた各パターンは排他識別ハッシュ値では「25,26,27,28,29,30,31」となる。
その後、排他アイテム追加処理部620は、上述のように最頻出パターンが複数ある場合、パターンカウンタを参照して、前のステップの合計出現数が、総トランザクション数の半数に近いものを最頻出パターンとして選出する(ステップS1107)。結果として、図11−2に例示したように、パターンカウンタのカウント値が11となっているパターン24(排他アイテムビット列の場合「11000」)が最頻出パターンとして選出される。
したがって、グループ(a)→「11000」のパターンのビット列、グループ(b)→上記グループ(a)以外の「11xxx」、「10xxx」および「01xxx」のパターンのビット列、グループ(c)→上記グループ(a),(b)以外のパターンのビット列となる。
以上説明したように、排他アイテム追加処理部620は、あらたに取得したトランザクションデータの排他アイテムビット列をトランザクションIDとともに、トラン・アイテムキャッシュテーブルに追加する。また、排他アイテム追加処理部620は、排他アイテムビット列をそのまま格納するのではなく、排他アイテム名の頻度に応じたグループごとに、トラン・アイテムキャッシュテーブルに格納する。すなわち、あらたに取得したトランザクションデータを、各処理ノードへの振り分け対象となるトランザクションデータの一つとして、排他アイテムビット列が示すパターンごとに登録することを意味する。
<検索処理部>
図14は、検索処理部の処理手順を示すフローチャートである。検索処理部630は、排他識別レジスタを利用して、トラン・アイテムキャッシュテーブルに格納されているトランザクションIDの中から、処理ノード「ア」、「イ」、「ウ」によって同一のステップで実行させるトランザクションデータのトランザクションIDを検索する機能を有する。
検索処理部630は、排他識別レジスタに設定する排他アイテムビット列を設定するため、まず、各処理ノード「ア」、「イ」、「ウ」によって実行させるトランザクションデータの検索条件を決定する(ステップS1401)。検索処理部630では、トラン・アイテムキャッシュテーブルに排他アイテムビット列の中から、格納されたタイミングの古さと、グループ分け結果と、排他アイテムビット列と、属性ノードのビット列とを検索条件とする。なお、詳しい検索条件については、詳しく後述する。
そして、検索処理部630は、トラン・アイテムキャッシュテーブルから、ステップS1401によって決定された検索条件に当てはまるレコードを検索する(ステップS1402)。その後、検索処理部630は、排他識別レジスタにステップS1402によって検索されたレコードを設定する(ステップS1403)。検索処理部630は、ステップS1403による排他識別レジスタの設定後、設定されたレコードのノード属性フラグを更新し、すべてのフラグが立ったレコードをトラン・アイテムキャッシュテーブルから削除する(ステップS1404)。
図15は、処理ノードごとのレコード抽出例を示す説明図である。図15を用いて、ステップS1401〜S1404の処理について具体例を挙げて説明する。図15のように、排他識別レジスタは、処理ノードごとに用意されている。なお、図15には2段階の処理ステップ(前回の処理ステップと今回の処理ステップとする)の排他識別レジスタへの設定例が示されているが、上段は、前回の処理ステップにおける排他識別レジスタの設定を表し、下段は今回の処理ステップにおける排他識別レジスタの設定例を表している。
検索処理部630では、下記のような検索条件にしたがって、各処理ノードに排他アイテムビット列を設定している。
・処理ノード「ア」には、グループ(b)もしくはグループ(a)の中で属性ビットにフラグが立っておらず、なおかつ、トラン・アイテムキャッシュテーブルに格納されている中の最古のトランザクションデータに相当する排他アイテムビット列を設定する。処理ノード「ア」にグループ(a)が設定されると、つぎの一括同期まで、上記の条件を満たすグループ(a)の排他アイテムビット列が優先的に設定される。
・処理ノード「ア」以外の処理ノードには、グループ(c)の排他アイテムビット列の中から、他の処理ノードと排他アイテム名が競合しない排他アイテムビット列を最古のものから設定すればよい。
・上記の検索条件に見合う排他アイテムビット列が存在しない場合には、同期処理に影響しないNULL値を設定する。たとえば、設定済みのトランザクションIDの中から、格納先の処理ノードの属性ビットのフラグが立っていない排他アイテムビット列を設定してもよい。
以上の検索条件に基づいた具体的な処理手順について、図15を用いて説明するが、まず、上段の前回の処理ステップにおける排他識別レジスタの設定について説明する。前回の処理ステップでは、処理ノード「ア」にグループ(a)の中から適した排他アイテムビット列を設定することができなかった。そこで、検索処理部630は、グループ(b)の中から検索条件に適したトランザクションID:15に該当する排他アイテムビット列を設定する。
処理ノード「ア」に最頻出パターン以外を意味するグループ(a)以外ではなく、グループ(b)の排他アイテムビット列が設定された場合、残りの処理ノードには、処理対象となるレコードが競合しない処理を設定する。なお、処理対象となるレコードが競合しない処理とは、排他アイテムビット列が重複しない、もしくは、属性ビットのフラグが立っていないことが条件となる。
したがって、処理ノード「イ」には、グループ(c)の排他アイテムビット列の中からトランザクションID:15と排他アイテムビット列が重複しないトランザクションID:8に該当する排他ビット列が設定された。さらに、処理ノード「ウ」には、設定済みの排他アイテムビット列と重複しない排他アイテムビット列を設定したいが、適したレコードが存在しない。そこで、検索処理部630は、前回の処理ステップの時点で処理ノード「ウ」の属性ビットにフラグが立っていないトランザクションID:15に該当する排他アイテムビット列を、処理ノード「ウ」に設定する。
したがって、トラン・アイテムキャッシュテーブルの中のトランザクションID:15に該当する排他アイテムビット列は処理ノード「ア」、「ウ」の属性ビットにフラグが立った状態になっている。各排他識別レジスタの設定内容は、格納処理部640へ通知された後、初期化され、格納内容はクリア(オール0)される。
以上説明したような前回の処理ステップを経た後、検索処理部630は、今回の処理ステップとして、検索条件に基づいて、処理ノード「ア」に対応する排他識別レジスタに排他アイテムビット列を設定する。排他識別レジスタは、処理ノード「ア」から順に設定を行うため、まず、各排他識別レジスタが未設定の状態から処理が開始される。
そして、検索処理部630は、処理ノード「ア」に対応する排他識別レジスタに排他アイテムビット列として、トラン・アイテムキャッシュテーブルのグループ(a)内の最も古い排他アイテムビット列を特定する。なお、トランザクション取得処理部610の説明にて述べたように、トランザクションIDは、通し番号が振られている。したがって、グループ(a)の中の最も若いトランザクションIDを参照する。そして、検索処理部630は、特定したトランザクションIDが、トラン・アイテムキャッシュテーブルの中の属性ビットが立っていない排他アイテムビット列の中で最も古いトランザクションデータか否かを判断する。
したがって、図15の場合、検索処理部630は、トラン・アイテムキャッシュテーブルから抽出1によってグループ(a)の中からトランザクションID:12を抽出する。抽出されたトランザクションID:12の排他アイテムビット列は、処理ノード「ア」に対応する排他識別レジスタに設定される。処理ノード「ア」にグループ(a)の排他アイテムビット列が設定されると、処理ノード「ア」は、次回の一括同期を行うまでグループ(a)の排他アイテムビット列を優先的に設定する処理ノードとなる。
つぎに、検索処理部630は、トラン・アイテムキャッシュテーブルから抽出2,3によってグループ(c)の中から競合しないトランザクションID:19,32を抽出する。抽出されたトランザクションID:19,32の排他アイテムビット列は、処理ノード「イ」、「ウ」に対応する排他識別レジスタにそれぞれ設定される。
今回の処理によって、トランザクションID:12に該当する排他アイテムビット列では、属性ノード「A」にフラグが立つ。同様に、トランザクションID:19に該当する排他アイテムビット列では、属性ノード「B」にフラグが立ち、トランザクションID:32に該当する排他アイテムビット列では、属性ノード「C」にフラグが立つ。その後、排他識別レジスタの更新時にすべての属性フラグが立ったレコードはトラン・アイテムキャッシュレコードから削除される。したがって、図15に例示したトラン・アイテムキャッシュテーブルの場合、トランザクションID:20に該当する排他アイテムビット列が削除される。なお、上述した処理の詳細な手順については、詳しく後述する。
図14の説明に戻り、ステップS1404の処理と並列して、検索処理部630は、ステップS1403によって排他識別レジスタの設定後、つぎに各処理ノード「ア」、「イ」、「ウ」によって実行するトランザクションIDと処理ノード名とを格納処理部640に通知する(ステップS1405)。最後に、検索処理部630は、ステップS1405の通知後、排他識別レジスタの処理ステップをインクリメントして、レジスタを初期化し(ステップS1406)、一連の処理を終了する。
以上説明したように、検索処理部630は、排他識別レジスタを利用して、最頻出のパターンをもつトランザクションデータについては、優先的に処理ノード「ア」に格納するともに、その他のトランザクションデータに関しては、排他アイテム名が重複しないように各処理ノードによって実行させるように設定することができる。また、トランザクションデータと実行させる処理ノードを設定する際に、トランザクションIDが若い、すなわち、古いトランザクションデータを優先的に設定するため、トランザクションデータの待機時間を最小限に抑えることができる。
<格納処理部>
図16は、格納処理部の処理手順を示すフローチャートである。格納処理部640は、検索処理部630からの通知結果に基づいて、振分前データテーブル603に格納されたトランザクション(たとえば、電文601)をデータキュー604に格納する機能を有する。
格納処理部640は、検索処理部630からの通知によって、トランザクションIDが指定されたか否かを判断する(ステップS1601)。トランザクションIDが指定されるまで待機状態となる(ステップS1601:Noのループ)。その後、トランザクションIDが指定されると(ステップS1601:Yes)、格納処理部640は、まず、振分前データテーブル604に格納されているトランザクションデータの中から、検索処理部630による通知で指定されたトランザクションIDに該当するトランザクションデータを抽出する(ステップS1602)。
つぎに、格納処理部640は、ステップS1602によって抽出したトランザクションデータを、検索処理部630からの通知によって指定された処理ノード名のデータキュー604に格納する(ステップS1603)。すなわち、トランザクションID:1の処理ノードとして処理ノード「ア」が指定された場合には、トランザクションID:1に該当するトランザクションデータを処理ノード「ア」に対応するデータキュー604に格納する。
以上説明したように、格納処理部640は、検索処理部630によって検索されたトランザクションデータを各処理ノードによって実行させるための準備処理を行う。すなわち、格納処理部640では、同一のステップとして実行させる処理として検索された各トランザクションデータを、実際に各処理ノードによって実行させるためのデータキュー604に振り分けることができる。
<ディスパッチ処理部>
図17は、ディスパッチ処理部の処理手順を示すフローチャートである。ディスパッチ処理部650では、データキュー604に格納されたトランザクションを対象となる処理ノードによって実行させるディスパッチ機能を有する。
ディスパッチ処理部650は、まず、データキュー604から、つぎの処理ステップで実行するデータをすべて抽出する(ステップS1701)。したがって、処理ノード「ア」、処理ノード「イ」、処理ノード「ウ」に対応したデータキュー604のうち、つぎの処理ステップで実行するデータが格納されているデータキュー604から実際の処理に用いるデータ、すなわち、トランザクションデータを抽出する。
つぎに、ディスパッチ処理部650は、データキュー604から抽出したトランザクションデータを、各処理ノードにディスパッチする(ステップS1702)。最後に、ディスパッチ処理部650は、各処理ノードのデータキューにディスパッチされたデータを、一旦保持させる。その後、ディスパッチ処理部650は、各処理ノードによる順次処理を可能にして(ステップS1703)、一連の処理を終了する。
以上説明したように、ディスパッチ処理部650は、データキュー604に格納されたトランザクションデータを、共通のタイミングで、各処理ノードにディスパッチさせることができる。したがって、各処理ノードによる処理を実現することができる。
フォワードプロキシ装置600は、最頻出の排他アイテム名を含むグループ(a)が処理ノード「ア」に設定されると、グループ(a)に所定の条件を満たす排他アイテムビット列が存在する限り、処理ノード「ア」以外の処理ノードには部分同期を実行させる。そして、グループ(a)に条件を満たす排他アイテムビット列が無くなると、処理ノード「ア」が空ノードとなるため、一括同期モードを実行して、グループ(a)に相当するトランザクションデータに必要な同期処理を完了させる。
同期処理完了後のトランザクションデータに対応する排他アイテムビット列はトラン・アイテムキャッシュテーブルから削除されるため、後続のトランザクションデータの処理に移行できる。そこで、以下に部分同期モードと一括同期モードにおける検索処理部630と格納処理部640の処理内容について詳しく説明する。また、以下の説明では、多様な実装例を考慮して、処理ノードが4つ用意された場合について説明する。
(部分同期モード)
図18−1〜図18−4は、部分同期モードを用いた排他識別レジスタへの格納処理例を示す説明図である。上述したように部分同期モードは、一旦、処理ノード「ア」にグループ(a)の排他アイテムビット列が設定されると、トラン・アイテムキャッシュテーブルのグループ(a)の中に条件を満たす未処理の排他アイテムビット列が無くなるまで継続される。
図18−1〜図18−4では、あるトラン・アイテムキャッシュテーブルに格納された排他アイテムビット列が排他識別レジスタに格納され、部分同期されながらステップ8まで実行した後、一括同期モードに状態遷移するまでの格納処理を表している。したがって、各排他識別レジスタに対してどのような判断を経て各排他アイテムビット列が格納されたかをステップ順に説明する。
なお、排他識別レジスタの格納処理には下記の条件の成否を判断基準として利用している。
条件(A):
グループ(a)、最古、対象の処理ノードのノード属性0&排他アイテム名が競合しない
条件(B):
グループ(b)、最古、対象の処理ノードのノード属性0&排他アイテム名が競合しない
条件(C):
グループ(c)、最古、対象の処理ノードのノード属性0&排他アイテム名が競合しない
※最古の条件は、同じステップにおいて他の処理ノードに格納済みのものを除く
・ステップ1
図18−1に示したステップ1では、
1.条件(B)を満たすレコード(排他アイテムビット列)を格納する
2.排他フラグ「E,A」について処理ノード「ア」によって最新の値となる
3.処理ノード「イ」の排他識別レジスタでは条件(C)を満たすレコードを格納する
4.排他フラグ「B」について処理ノード「イ」によって最新の値となる
5.条件(C)での他のレコードの抽出が成功する
6.排他フラグ「C」について処理ノード「ウ」によって最新の値となる
7.条件(C)を満たす他のレコードがないため、グループ(b)と同期可能な他のレコードを抽出する(以下の抽出条件を条件(B’))とする
8.排他フラグ「A」について処理ノード「エ」によって最新の値となる
以上の処理が行われ、3トラン(トランザクションデータ)が処理されたことになる。また、上記8.のように、部分同期によってフラグが最新化された場合には複数のノードが最新となることがある。
・ステップ2
図18−1に示したステップ2では、
9.条件(B)を満たすレコードが存在しないため条件(A)を満たすレコードを格納
10.排他フラグ「D」について処理ノード「ア」によって最新の値となる
11.条件(C)での他のレコードの抽出が成功する
12.排他フラグ「B」について処理ノード「イ」によって最新の値となる
13.条件(C)での他のレコードの抽出が成功する
14.排他フラグ「C」について処理ノード「ウ」によって最新の値となる
15.条件(C)での他のレコードの抽出が成功する
16.排他フラグ「A」について処理ノード「エ」によって最新の値となる
以上の処理が行われ、あらたに4トランが処理され、合計7トラン処理されたことになる。
・ステップ3
図18−2に示したステップ3では、
17.条件(B)を満たすレコードが存在しないため条件(A)を満たすレコードを格納
18.排他フラグ「E,D」について処理ノード「ア」によって最新の値となる
19.条件(C)を満たすレコードが存在しないため条件(B’)を満たすレコードを格納
20.排他フラグ「E,A」については最新にならない(格納済みのトランであるため)
21.条件(C)を満たすレコードが存在しないため条件(B’)を満たすレコードを格納
22.排他フラグ「E,A」については最新にならない
23.条件(C)での他のレコードの抽出が成功する
24.排他フラグ「A」について処理ノード「エ」によって最新の値となる
以上の処理が行われ、あらたに2トランが処理され、合計9トラン処理されたことになる。
・ステップ4
図18−2に示したステップ4では、
25.条件(B)を満たすレコードが存在しないため条件(A)を満たすレコードを格納
26.排他フラグ「E,D」について処理ノード「ア」によって最新の値となる
27.条件(C)を満たす他のレコードも、条件(B’)を満たす他のレコードもないため、グループ(c)の中から同期可能な他のレコードを抽出する(以下の抽出条件を条件(C’))とする
28.排他フラグ「C」については最新にならない(格納済みのトランであるため)
29.条件(C),(B’)を満たすレコードが存在しないため条件(C’)を満たすレコードを格納
30.排他フラグ「B」については最新にならない(格納済みのトランであるため)
31.条件(C),(B’)を満たすレコードが存在しないため条件(C’)を満たすレコードを格納
32.排他フラグ「B」については最新にならない
以上の処理が行われ、あらたに1トランが処理され、合計10トラン処理されたことになる。
同様に、図18−3に示したステップ5では、33.〜40.の処理によって、あらたに処理ノード「ア」に相当する排他識別レジスタによって1トランが処理され、合計11トラン処理されたことになる。さらに、図18−3に示したステップ6では、41.〜48.の処理によってあらたに処理ノード「ア」に相当する排他識別レジスタによって1トランが処理され、合計12トラン処理されたことになる。
同様に、図18−4に示したステップ7では、49.〜56.の処理によって、あらたに処理ノード「ア」、「イ」に相当する排他識別レジスタによって2トランが処理され、合計14トラン処理されたことになる。
その後、図18−4に示したステップ8では57.〜64の処理によってあらたに処理ノード「ア」に対応した排他識別レジスタにレコードを格納することができなかった。そこで、一括同期モードへの状態遷移指示を出力する。他の処理ノードに対応した排他識別レジスタでは、57.の処理によって出力した状態遷移指示を受けて未同期のトランのうち、最も古いものをそれぞれ格納する。結果としてステップ8では、1トランも処理されず、一括同期モードへ状態遷移される。
図19−1および図19−2は、部分同期モードを用いた排他識別レジスタへの格納処理の手順を示すフローチャートである。図18−1〜図18−4によって実行された判断を一般化すると、図19−1、図19−2のフローチャートのような手順の処理が行われている。図19−1および図19−2の各ステップを実行することによって、図18−1〜図18−4に例示したように、所定の検索条件に合った排他アイテムビット列を排他識別レジスタへ格納することができる。
図19−1において、検索処理部630は、まず、排他識別レジスタの中に空ノードがあるか否かを判断する(ステップS1901)。ステップS1901において、空ノードがあると判断された場合(ステップS1901:Yes)、検索処理部630は、空ノードが処理ノード「ア」か否かを判断する(ステップS1902)。なお、ステップS1901において、空ノードではないと判断された場合(ステップS1901:No)、検索処理部630は、図19−2のステップS1913の処理に移行する。
ステップS1902において、空ノードが処理ノード「ア」であると判断された場合(ステップS1902:Yes)、検索処理部630は、処理ノード「ア」に排他アイテムビット列を格納するための処理に移行する。まず、検索処理部630は、処理対象となっているレコードが、『グループ(b)』&『最も古い』&『処理ノードのノード属性の値が0(未処理)』となる排他識別ビット列か否かを判断する(ステップS1903)。グループ(b)は、(a)と(c)の両方の属性を含むが故に、最初に処理可能性の判定を行わないと一括同期まで処理対象として選択されない性質を持つ。そのため(a)や(c)に優先して判定を行うことで、処理を促進している。
なお、上述の処理対象となっているレコードとは、処理ノードがアクセスする共通のデータベース内のレコードではなく、トラン・アイテムキャッシュテーブルに格納されている各排他アイテムビット列を表すレコード群の中のいずれかのレコードを意味する。
ステップS1903において、最も古いとはトラン・アイテムキャッシュテーブルに格納されている排他アイテムビット列の中でトランザクションIDが最も若い排他アイテムビット列を意味する。なお、ステップS1902において、空ノードが処理ノード「ア」でないと判断された場合(ステップS1902:No)、他の処理ノードに格納する排他アイテムビット列についての検索条件を判断する処理(ステップS1909〜S1911)に移行する。
ステップS1903において、処理対象となっているレコードが、『グループ(b)』&『最も古い』&『処理ノードのノード属性の値が0(未処理)』となる排他識別ビット列であると判断された場合(ステップS1903:Yes)、検索処理部630は、処理ノード(ア)に格納する排他アイテムビット列をグループ(b)の中から確定したと判断する。したがって、検索処理部630は、まず、現在対象となっているレコードの排他アイテムビット列をトランザクションIDとともに排他識別レジスタに格納する(ステップS1904)。さらに、検索処理部630は、ノード属性のフラグを立てて(ステップS1905)、他の処理ノードについての格納処理を行うために、ステップS1901に移行する。
また、ステップS1903において、処理対象となっているレコードが、『グループ(b)』&『最も古い』&『処理ノードのノード属性の値が0(未処理)』となる排他識別ビット列ではないと判断された場合(ステップS1903:No)、処理対象となっているレコードが、『グループ(a)』&『最も古い』&『処理ノードのノード属性の値が0(未処理)』となる排他識別ビット列か否かを判断する(ステップS1906)。
ステップS1906において、処理対象となっているレコードが、『グループ(a)』&『最も古い』&『処理ノードのノード属性の値が0(未処理)』となる排他識別ビット列であると判断された場合(ステップS1906:Yes)、検索処理部630は、処理ノード(ア)に格納する排他アイテムビット列をグループ(a)の中から確定したと判断する。したがって、検索処理部630は、現在対象となっているレコードの排他アイテムビット列をトランザクションIDとともに排他識別レジスタに格納する(ステップS1904)。さらに、検索処理部630は、ノード属性のフラグを立てて(ステップS1905)、他の処理ノードについての格納処理を行うために、ステップS1901に移行する。
また、ステップS1906において、処理対象となっているレコードが、『グループ(a)』&『最も古い』&『処理ノードのノード属性の値が0(未処理)』となる排他識別ビット列ではないと判断された場合(ステップS1906:No)、検索処理部630は、処理ノード(ア)に格納するのに適した排他アイテムビット列がないと判断する。したがって、検索処理部630は、処理ノード(ア)の排他識別レジスタにNULL値を格納する(ステップS1907)。さらに、検索処理部630は、一括同期モードへの状態遷移をシステムに指示して(ステップS1908)、他の処理ノードについての格納処理を行うために、ステップS1901に移行する。
一方、ステップS1902において、空ノードが処理ノード「ア」でないと判断された場合(ステップS1902:No)、検索処理部630は、他の処理ノードに格納する排他アイテムビット列を特定する処理に移行する。したがって、検索処理部630は、まず、処理対象となっているレコードが、『グループ(c)』&『最も古い』&『処理ノードのノード属性の値が0(未処理)』となる排他識別ビット列か否かを判断する(ステップS1909)。
ステップS1909において、処理対象となっているレコードが、『グループ(c)』&『最も古い』&『処理ノードのノード属性の値が0(未処理)』となる排他識別ビット列であると判断された場合(ステップS1909:Yes)、検索処理部630は、処理ノード(ア)以外の処理ノードに格納する排他アイテムビット列をグループ(c)の中から確定したと判断する。したがって、検索処理部630は、現在対象となっているレコードの排他アイテムビット列をトランザクションIDとともに排他識別レジスタに格納する(ステップS1904)。さらに、検索処理部630は、ノード属性のフラグを立てて(ステップS1905)、他の処理ノードについての格納処理を行うために、ステップS1901に移行する。
また、ステップS1909において、処理対象となっているレコードが、『グループ(c)』&『最も古い』&『処理ノードのノード属性の値が0(未処理)』となる排他識別ビット列でないと判断された場合(ステップS1909:No)、検索処理部630は、処理対象となるレコードが処理ノード(ア)以外の処理ノードと並列処理可能か否かを判断する。したがって、検索処理部630は、処理対象となっているレコードが、『グループ(b)』で同期可能なビット列か否かを判断する(ステップS1910)。
ステップS1910において、処理対象となっているレコードが、『グループ(b)』で同期可能なビット列であると判断されなかった場合(ステップS1910:No)、検索処理部630は、さらに、処理対象となっているレコードが、『グループ(c)』で同期可能なビット列か否かを判断する(ステップS1911)。
ステップS1910もしくはステップS1911において、処理対象となっているレコードが、同期可能なビット列であると判断された場合(ステップS1910もしくはステップS1911:Yes)、検索処理部630は、処理ノード(ア)以外の処理ノードに格納する排他アイテムビット列をグループ(c)の中から確定したと判断する。したがって、検索処理部630は、現在対象となっているレコードの排他アイテムビット列をトランザクションIDとともに排他識別レジスタに格納する(ステップS1904)。さらに、検索処理部630は、ノード属性のフラグを立てて(ステップS1905)、他の処理ノードについての格納処理を行うために、ステップS1901に移行する。
一方、ステップS1910とステップS1911において、いずれも、処理対象となるレコードが同期可能なビット列ではないと判断された場合(ステップS1910かつステップS1911:No)、検索処理部630は、処理ノード(ア)以外の処理ノードに格納するのに適した排他アイテムビット列がないと判断する。したがって、検索処理部630は、処理ノード(ア)以外の他の処理ノードの排他識別レジスタにNULL値を格納し(ステップS1912)、他の処理ノードについての格納処理を行うために、ステップS1901に移行する。
続いて検索処理部630は、図19−2に移り、まず、排他識別レジスタのデータを格納処理部640に通知する(ステップS1913)。そして、格納処理部640は、ステップS1913が完了すると排他識別レジスタを初期化する(ステップS1914)。
その後、検索処理部630は、一括同期モードへの状態遷移指示があるか否かを判断する(ステップS1915)。ステップS1915において、一括同期モードへの状態遷移指示を受け付けた場合(ステップS1915:Yss)、部分同期可能なエリアαおよびエリアβのうち、エリアβのノードの部分同期が完了したか否かを判断する(ステップS1916)。エリアβのとは、最頻出パターン以外の排他アイテムビット列を含むトランザクションデータ群が格納されたデータベースであり、一方エリアαのノードとは、最頻出パターンの排他アイテムビット列を含むトランザクションデータ群が格納されたデータベースである。
ステップS1916において、エリアβのノードの部分同期が完了したと判断された場合(ステップS1916:Yes)、検索処理部630は、部分同期モードを一旦終了して、一括同期モードへ移行する。一方、ステップS1915において、一括同期モードへの状態遷移指示を受け付けていない場合(ステップS1915:No)、検索処理部630は、ステップS1901の処理(図19−1参照)に状態遷移する。
また、ステップS1916において、エリアβのノードの部分同期が完了していないと判断された場合(ステップS1916:No)、検索処理部630は、ステップS1901の処理(図19−1参照)に移行する。
すなわち、検索処理部630は、一括同期モードへの状態遷移指示を受けていない場合は、一括同期モードへ状態遷移するまでに猶予があるため、空いている処理ノードに排他アイテムビット列を設定するように動作する。また、検索処理部630は、部分同期が完了していない場合にも、まだ、部分同期できるトランザクションデータがあるため、一括同期モードへの状態遷移指示を受けるまでの間、時間が許す限り空いている処理ノードに排他アイテムビット列を設定するように動作する。
以上説明したように、フォワードプロキシ装置600では、処理ノード「ア」に条件(A)を満たすレコードが設定されたことをトリガに部分同期モードが行われる。図18−1〜図18−4に例示した部分同期モードでは、一括同期モードへの状態遷移まで、8ステップ分の部分同期が行われ、一括同期を実行することなく、14トランを処理することができた。従来の分散処理であれば、14トランを実行するまでに、少なくとも4回の一括同期の発生が想定される。したがって、同じ数のトランザクションデータを4つの処理ノードによって実行させる場合と比較して、一括同期の回数が削減され処理時間が短縮される。結果として各処理ノードごとの単位時間当たりの処理量が増加し、処理効率を向上させることができる。
(一括同期モード)
つぎに、部分同期モードから状態遷移した一括同期モードについて説明する。一括同期モードは、図20は、処理ノードが4個のトラン・アイテムキャッシュテーブルの格納例を示すデータテーブルである。図20に示したトラン・アイテムキャッシュテーブルは、部分同期が完了したタイミングの排他アイテムビット列と属性テーブルのフラグを表している。すなわち、図20のトラン・アイテムキャッシュテーブルは、一括同期待ちのトランザクションデータで満杯になっている状態である。
図21は、処理ノード間の一括同期処理を示す説明図である。図21において、左側は一括同期処理前の状態を表し、右側は一括同期処理後の状態を表す。なお、処理ノード間で一括同期を実行する際には、図21のように、エリアαとエリアβとに分けて扱われる。エリアαは、優先的に実行されていた処理ノード「ア」によって処理対象となるDBに相当する。したがって、排他アイテム名「E」,「D」についての最新データを保持している。
一方、エリアβは、上述したように、処理ノード「ア」以外の処理ノードによって処理対象となる各DBに相当する。したがって、排他アイテム名「E」,「D」以外の排他アイテム名「C」,「B」,「A」についての最新データを保持している。
一括同期処理では、エリアα、βそれぞれのDBに保持された最新のデータをお互いに反映させる。したがって、右側に示したエリアα、βのように、お互いのエリアに格納されていた排他アイテム名のデータを反映させたため、全排他アイテム名に関する情報を含んだ最新データが保持される。
図22は、トラン・アイテムキャッシュテーブルに対する処理済みトランザクションIDの消込み例を示す説明図であり、図23は、トラン・アイテムキャッシュテーブルに対する未処理トランザクションIDの格納例を示す説明図である。図20に示したようなトラン・アイテムキャッシュテーブルについて一括同期処理が行われたトランザクションデータに対応するトランザクションIDは、(a),(b),(c)のグループ分けにかかわらず、図22に例示したように、一括で消込まれる。なお、処理済みトランザクションIDか否かの判断は、属性テーブルのフラグが参照される。
処理済みトランザクションIDの消込み後は、トラン・アイテムキャッシュテーブルに空きが生じるため、図23に例示したように、あらたに受け付けたトランザクションデータに対応したトランザクションIDが格納される。
図24は、一括同期モードを用いたトラン・アイテムキャッシュテーブルの消込み・格納処理の手順を示す説明図である。図24に示すように、一括同期モードでは、まず、図21にて説明したような処理ノード間のDB(データベース)について、一括同期が実行される(ステップS2401)。なおステップS2401の処理は、ディスパッチ処理部650によって実行される。
その後、トラン・アイテムキャッシュテーブルから処理済みのトランザクションIDを消し込む(ステップS2402)。ステップS2402の処理によって、図22にて説明したように、トラン・アイテムキャッシュテーブル内の処理済みデータのみが消し込まれる。なお、ステップS2401の処理は、格納処理部640によって実行される。
最後に、トラン・アイテムキャッシュテーブルに未処理のトランザクションIDを順次格納し(ステップS2403)。その後、トラン・アイテムキャッシュテーブルの空きが無くなったことをトリガとして、部分同期モードへの状態遷移をシステムに指示して(ステップS2404)、一括同期モードを終了する。なお、ステップS2403,S2404の処理は、排他アイテム追加処理部620によって実行される。
また、図23にて説明したように、トラン・アイテムキャッシュテーブルには未処理のトランザクションデータに対応したトランザクションIDが格納されるが、トランザクション取得処理部610によって取得したトランザクションデータでなければ格納できない。トランザクション取得処理部610によって、すでに多くのトランザクションデータを取得済みの場合には、即座に、トラン・アイテムキャッシュテーブルが埋まるが、空きがある場合には、埋まるまで待機状態となる。
仮に、トラン・アイテムキャッシュテーブルが埋まる前に、部分同期モードに状態遷移しても、処理ノード「ア」に実行させるトランザクションデータが不足して、すぐに一括同期モードに移行してしまう恐れがある。したがって、トラン・アイテムキャッシュテーブルの総容量も、グループ(a),(b),(c)ごとの容量と同様に、実行するトランザクションデータの傾向によって調整することによって、さらに効率的に各処理ノードを実行させることができる。
(本実施の形態にかかる分散処理の適用シーン)
以上説明したように、本実施の形態にかかる分散処理は、ニアリアルタイム性を求められるマスタ系データの更新処理において、特にその効果を発揮する。具体的には、たとえば、ホテル、乗り物、その他イベントなどのチケットのオンライン予約システムへの適用が挙げられる。
チケット予約システムの場合、人気の高い部屋や座席など同一のレコードへのアクセスが集中する。従来の分散処理の場合、同一レコードへのアクセスの集中によって、発生したロック状態がシステム全体に影響を及ぼしていた。すなわち、人気薄の部屋や座席などの予約に関しての処理要求などが同じレコードへアクセスする処理要求にもかかわらず各処理ノードに分散されてしまう。結果として、同一レコードへのアクセス集中によるロック状態の発生や、頻繁な同期処理の発生によって処理負荷以上の待機時間が発生する事態があった。
そこで、本実施の形態にかかる分散処理を適用することによって、アクセスの集中する処理に関しては特定の処理ノードに振り分けるため、同一レコードへのアクセス集中によるロック状態が回避される。上述のような同一レコードへの処理要求にステートフルな設計がされていた場合には、同期処理が頻出してしまうが、本実施の形態にかかる分散処理を適用すれば、特定の処理ノードにアクセスの集中する処理を振り分けるとともに、人気薄の部屋や座席などの予約といった処理対象が分散するような処理要求に関しては、並列に残りの処理ノードに振り分けることができる。したがって、各処理要求間の同期処理(一括同期)の回数を抑制して、各処理ノードにて発生していた待機時間を短縮することができる。
その他にも、複数の取引先からの処理要求を受け付けるオンラインの在庫引当システムに本実施の形態にかかる分散処理を適用してもよい。在庫引当システムの場合も、予約システムと同様に、人気商品とそれ以外の商品とでは、処理要求の頻度が異なる。
したがって、人気商品への処理要求を優先的に特定の処理ノードによって実行させることによって、その他の処理要求に関しては他の処理ノードで並列に実行させることができる。また同期集中してもロック状態を防ぐとともに、同期処理を抑制するため、従来と比較して、各処理ノードを、各処理要求に応じた処理の実行に専念させることができる。結果として、システム全体の処理効率の向上が期待できる。
なお、本実施の形態で説明した分散処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本分散処理プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本分散処理プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)所定のレコード群を格納するデータベースを有する各ノードに、当該レコード群に対する複数の処理を割り当てる分散処理装置であって、
前記レコード群に含まれる各レコードを特定する属性名ごとに、当該属性名から特定されるレコードに対する処理の実行頻度を取得する取得手段と、
前記取得手段によって取得された属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、一の属性名から特定されるレコードに対する一の処理の集合と、当該一の処理とは異なる他の処理の集合とに分類する分類手段と、
前記分類手段によって分類された一の処理の集合の割当先となるノードを前記複数のノードの中から決定する決定手段と、
前記決定手段によって前記一の処理の集合の割当先に決定されたノードに前記一の処理を割り当てる割当手段と、
を備えることを特徴とする分散処理装置。
(付記2)前記割当手段は、
前記一の処理の集合の割当先に決定されたノード(以下、「一のノード」という)に前記一の処理を割り当てるとともに、前記複数のノードのうち前記一のノードとは異なる他のノードに前記他の処理を割り当てることを特徴とする付記1に記載の分散処理装置。
(付記3)前記一の処理の集合のうち前記割当手段によって割り当てられていない未割当の一の処理の集合の中から、処理要求を受け付けた時刻が最古の一の処理を検索する第1の検索手段と、
前記複数のノードのうち前記一のノードを除く残余のノードの中から前記他のノードを選択する選択手段と、
前記他の処理の集合のうち前記割当手段によって割り当てられていない未割当の他の処理の集合の中から、処理要求を受け付けた時刻が最古の他の処理を検索する第2の検索手段と、を備え、
前記割当手段は、
前記第1の検索手段によって検索された一の処理を前記一のノードに割り当てるとともに、前記第2の検索手段によって検索された他の処理を前記選択手段によって選択された他のノードに割り当てることを特徴とする付記2に記載の分散処理装置。
(付記4)前記第2の検索手段は、
前記他の処理が検索されなかった場合、前記割当手段によって前記複数のノードのいずれかのノードに割り当てられた割当済の処理の集合の中から、処理要求を受け付けた時刻が最古の割当済の処理を検索し、
前記割当手段は、
前記一の処理を前記一のノードに割り当てるとともに、前記第2の検索手段によって検索された割当済の処理を前記他のノードに割り当てることを特徴とする付記3に記載の分散処理装置。
(付記5)前記レコードに対する処理の処理要求を受け付ける受付手段と、
前記各レコードを特定する属性名ごとに、前記受付手段によって受け付けた処理要求に当該属性名が含まれているか否かを示すビット列を生成する生成手段と、をさらに備え、
前記分類手段は、
前記生成手段によって生成された前記処理要求ごとのビット列と前記属性名ごとの処理の実行頻度とに基づいて、前記複数の処理を前記一の処理の集合と前記他の処理の集合とに分類することを特徴とする付記1〜4のいずれか一つに記載の分散処理装置。
(付記6)前記受付手段によって所定期間中に受け付けた処理の処理要求に基づいて、当該所定期間中の前記レコードに対する処理の実行頻度を前記属性名ごとに算出する算出手段をさらに備え、
前記取得手段は、
前記算出手段によって算出された属性名ごとの前記所定期間中の処理の実行頻度を取得することを特徴とする付記5に記載の分散処理装置。
(付記7)前記第1の検索手段によって前記一の処理が検索されなかった場合、前記データベース間で前記レコード群のデータ内容を一致させる同期指示を前記複数のノードに指示する指示手段を備えることを特徴とする付記3〜6のいずれか一つに記載の分散処理装置。
(付記8)前記分類手段は、
前記属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、前記実行頻度が最大の一の属性名から特定されるレコードに対する一の処理の集合と、当該一の処理とは異なる他の処理の集合とに分類することを特徴とする付記1〜7のいずれか一つに記載の分散処理装置。
(付記9)所定のレコード群を格納するデータベースを有する各ノードに、当該レコード群に対する複数の処理を割り当てるコンピュータを、
前記レコード群に含まれる各レコードを特定する属性名ごとに、当該属性名から特定されるレコードに対する処理の実行頻度を取得する取得手段、
前記取得手段によって取得された属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、一の属性名から特定されるレコードに対する一の処理の集合と、当該一の処理とは異なる他の処理の集合とに分類する分類手段、
前記分類手段によって分類された一の処理の集合の割当先となるノードを前記複数のノードの中から決定する決定手段、
前記決定手段によって前記一の処理の集合の割当先に決定されたノードに前記一の処理を割り当てる割当手段、
として機能させることを特徴とする分散処理プログラム。
(付記10)所定のレコード群を格納するデータベースを有する各ノードに、当該レコード群に対する複数の処理を割り当てるコンピュータが、
前記レコード群に含まれる各レコードを特定する属性名ごとに、当該属性名から特定されるレコードに対する処理の実行頻度を取得する取得工程と、
前記取得工程によって取得された属性名ごとの処理の実行頻度に基づいて、前記複数の処理を、一の属性名から特定されるレコードに対する一の処理の集合と、当該一の処理とは異なる他の処理の集合とに分類する分類工程と、
前記分類工程によって分類された一の処理の集合の割当先となるノードを前記複数のノードの中から決定する決定工程と、
前記決定工程によって前記一の処理の集合の割当先に決定されたノードに前記一の処理を割り当てる割当工程と、
を実行することを特徴とする分散処理方法。