(58)【調査した分野】(Int.Cl.,DB名)
前記プロセッサ毎に、処理が割り当てられた前記入力レコードの数と、処理が割り当てられた前記入力レコード夫々が有する前記キーと、を保持する分散管理テーブルをさらに有する
請求項1乃至3いずれか1項記載の並列化装置。
【発明を実施するための形態】
【0017】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
【0018】
はじめに、本実施の形態における並列化装置100の概要について説明する。並列化装置100は、ループ集計処理を並列化する処理を行う装置である。すなわち、並列化装置100は、逐次処理を前提として設計されたループ集計処理を、分散メモリ型並列計算機上において効率的に稼働するような並列化処理に再構築する処理を行うことに特徴を有するものである。ループ集計処理は、複数の入力レコード間に依存関係がないため各入力レコードを独立して処理できる部分と、各入力レコード間に依存関係がある処理と、の2種類の処理に分けることができる。前者は、例えば集計キーをIDとしたマスタ引き当て処理や、1レコード内の情報の加工処理がある。後者は、集計キーが同一のグループの複数の入力レコードに含まれる集計対象の集計処理や、入力レコード数のカウントアップ処理がある。本発明は、従来、主に逐次処理によって行われていた後者の処理を、効率的に並列化する手法に関する。
【0019】
本実施の形態では、一例として、
図4の表41のような、複数の入力レコードからなる入力データを、親キー及び子キーをソートキーとして使用して集計し、
図4の表42のような集計結果を得る、ループ集計処理に本発明を適用する場合について説明する。すなわち、並列化装置100は、このループ集計処理を複数のプロセッサに効率的に並列処理させる手法に特徴を有するものである。
【0020】
なお、ここでいう親キー及び子キーとは、例えば、店舗名(親キー)と、その店舗で売れた商品名(子キー)のような、集計対象(およそ「商品」)を分類するための互いに独立したキーとしての関係を有する。この例に則れば、
図4の表41の1レコード目(親キー=X、子キー=A、データ=3)は、「店舗Xにおいて商品Aが3個売れた」ことを意味する。同様に、3レコード目(親キー=Y、子キー=B、データ=5)は、「店舗Yにおいて商品Bが5個売れた」ことを意味する。そして、集計処理とは、店舗(親キー)毎及び商品名(子キー)毎に、その商品が何個売れたのかを集計する処理をいう。集計結果である表42は、例えば、店舗Xにおいて商品が合計9個売れたこと、そのうち商品Aの販売数は5であったことを示している。
【0021】
図1乃至
図5を用いて、本実施の形態における並列化装置100の構成について説明する。
【0022】
並列化装置100は、入力レコード分類手段101、複数のプロセッサ111、集計手段121の処理手段を有する。また、並列化手段100は、図示しない記憶領域上に、しきい値131、プロセッサ数132、分散管理テーブル102、入力ファイル等141、出力ファイル等142のデータを保持する。
【0023】
入力レコード分類手段101は、ループ集計処理が処理される際に、入力ファイル141等から入力レコードを読み込み、各プロセッサに入力レコードの集計処理をさせる指示を出す処理を行う。具体的には、入力レコード分類手段101は、現在の処理環境において利用できるプロセッサの数を、プロセッサ数132の情報を読み込むことで認識し、指示を出力すべきプロセッサ数の上限値を決定する。また、入力レコード分類手段101は、分散管理テーブル102を参照することで、各入力レコードを処理するため最も効率が良いプロセッサを選択する。ここでいう効率を判断するための処理フローは後述するが、入力レコード分類手段101は、しきい値131の情報を読み込んでその判断に利用する。
【0024】
図2に示すように、分散管理テーブル102は、プロセッサ番号21、子キー22、親キー23、処理レコード数24の各項目を管理する記憶手段である。ここで管理するプロセッサの数、すなわち分散管理テーブル102が管理するレコード数は、プロセッサ数132の情報に応じて決定される。
【0025】
複数のプロセッサ111は、ループ集計処理を実際に実行する演算処理手段である。プロセッサ111の数はプロセッサ数132の情報により決定される。
【0026】
集計手段121は、全プロセッサ111によるループ集計処理の集計処理(第1段階の集計処理)が完了するまで待ち合わせ、各プロセッサ111による第1段階の集計処理結果を集計する処理(第2段階の集計処理)を行う。なお、集計手段121による第2段階の集計処理は、最も効率よく複数のプロセッサ111に処理が分散された場合は行われない。すなわち、この場合は、プロセッサ111における第1段階の集計処理によってすべての処理が完了するので、集計手段121による第2段階の集計処理は必要ない。一方、分散が効率よくなされなかったときは、各プロセッサ111における第1段階の集計処理の結果を対象として、集計手段121が第2段階の集計処理を行うことで、集計が完了する。
【0027】
しきい値131は、複数のプロセッサ111のうちどのプロセッサ111に処理を行わせれば効率が良いかを判断する際の判断基準となる数値である。しきい値131は、分散管理テーブル102での処理レコード数の標準偏差と比較される。なお、しきい値131は、事前に利用者によって任意の適切な値に設定されるべきパラメータである。しきい値131を小さくすると、処理の分散がなされやすくなり、多くのプロセッサ111が活用されるようになる。しきい値131を大きくすると、処理が集中されやすくなり、使用されるプロセッサ111が偏在するようになる。
【0028】
プロセッサ数132は、現在の処理環境下において使用可能なプロセッサ111の数を示す数値である。
【0029】
入力ファイル等141は、ループ集計処理の処理対象となる入力ファイル、DB(データベース)の表(テーブル)、またはメモリ上の複数のレコード等である。入力ファイル等141に含まれる複数のレコードは、必ずしも集計キーでソートされている必要はない。
【0030】
出力ファイル等142は、ループ集計処理の処理結果の格納先となる出力ファイル、DB(データベース)の表(テーブル)、またはメモリ上の複数のレコード等である。一般に、出力ファイル等142には、明細レコードと集計結果となるレコードとが混在している。
【0031】
つづいて、
図3のフローチャートを用いて、並列化装置100の動作について説明する。ここでは、並列化装置100が、入力ファイル等141としての入力レコード41(
図4)を入力し、入力レコード41に対する集計処理を実行する場合を例として説明する。
【0032】
ここで、集計処理とは、入力レコード41の親キーおよび子キーをキーとしてレコードの名寄せを行い、データを合算する処理をいう。かかる集計処理の結果、並列化装置100は、出力ファイル等142としての出力レコード42(
図4)を出力する。
【0033】
なお、この集計処理の前提として、しきい値131は1.5に設定されているものとする。また、分散管理テーブル102として、
図5に示す分散管理テーブル61乃至65を使用するものとする。
【0034】
ステップ31:入力ファイル等141の1レコードを入力する。
入力レコード分類手段101が、入力レコード41の1レコード目を入力する。1レコード目の内容は、親キー=X、子キー=A、データ=3である。
【0035】
ステップ32:入力レコードの子キーが分散管理テーブル102に存在するか確認する。
入力レコード分類手段101が、分散管理テーブル61(
図5)を参照し、ステップ31で入力したレコードの子キーが、分散管理テーブル61に存在するか判定する。分散管理テーブルとは、あるプロセッサ111が、あるレコードを対象とする集計処理を行っている場合、そのレコードの子キー及び親キーの情報を、そのプロセッサ111のプロセッサ番号と紐付けて保持する役割を担うテーブルである。いま、分散管理テーブル61には、いずれのプロセッサ111にも、何らの子キーも紐付けられていない。すなわち、ステップ31で入力したレコードの子キー「A」と紐付けられたプロセッサ111は存在しない。これは、この時点で、子キー「A」を有するレコードを処理しているプロセッサ111が1つも存在しないことを意味している。この場合、ステップ34に移行する。
【0036】
ステップ34:入力レコードの親キーが分散管理テーブル102に存在するか確認する。
入力レコード分類手段101が、分散管理テーブル61(
図5)を参照し、ステップ31で入力したレコードの親キーが、分散管理テーブル61に存在するか判定する。いま、分散管理テーブル61には、いずれのプロセッサ111にも、何らの親キーも紐付けられていない。すなわち、ステップ31で入力したレコードの親キー「X」と紐付けられたプロセッサ111は存在しない。これは、この時点で、親キー「X」を有するレコードを処理しているプロセッサ111が1つも存在しないことを意味している。この場合、ステップ37に移行する。
【0037】
ステップ37:負荷が最も低いプロセッサ111を選択。
入力レコード分類手段101は、現時点で最も処理負荷が低いプロセッサ111を1つ選択し、そのプロセッサ111を、ステップ31で入力したレコードの集計処理を行うべきプロセッサとして決定する。なお、最も処理負荷が低いプロセッサ111が複数存在する場合は、その中から任意の1つのプロセッサ111を選択する。例えば、複数のプロセッサ111に予め序列を付与しておき、最も序列の高いプロセッサ111を選択することができる。ここでは、入力レコード分類手段101によりプロセッサ「1」が選択されたものとする。
【0038】
この時点で、入力レコード分類手段101は、分散管理テーブル61の内容を、分散管理テーブル62のように更新する。すなわち、選択されたプロセッサ111のプロセッサ番号「1」と、入力レコードの子キー「A」及び親キー「X」とを、紐付けて保持する。また、プロセッサ番号「1」が集計処理を行うべきレコード数を保持する。ここでは、処理レコード数は「1」となる。この後、ステップ31に移行する。
【0039】
ステップ31(2回目):
入力レコード分類手段101が、入力レコード41の2レコード目を入力する。1レコード目の内容は、親キー=X、子キー=A、データ=2である。
【0040】
ステップ32:
入力レコード分類手段101が、現時点の分散管理テーブル62を参照し、2回目の入力レコードの子キー「A」が、分散管理テーブル62に存在するか判定する。いま、分散管理テーブル62では、プロセッサ「1」と子キー「A」が紐付けられている。これは、この時点で、子キー「A」を有するレコードを、プロセッサ「1」が既に処理していることを意味している。この場合、ステップ33に移行する。
【0041】
ステップ33:既に子キーを処理しているプロセッサ111を選択。
入力レコード分類手段101が、2レコード目をプロセッサ「1」で処理すべきことを決定する。これは、同じキーを持つレコードの集計処理は極力同一プロセッサで行う方が、プロセッサ間のデータ通信を削減でき、効率的だからである。
【0042】
入力レコード分類手段101は、この時点で、分散管理テーブル62の内容を、分散管理テーブル63のように更新する。すなわち、プロセッサ番号「1」が集計処理を行うべきレコード数は「2」となる。この後、再びステップ31に移行する。
【0043】
ステップ31(3回目):
入力レコード分類手段101が、入力レコード41の3レコード目を入力する。3レコード目の内容は、親キー=Y、子キー=B、データ=5である。
【0044】
ステップ32:
入力レコード分類手段101が、現時点の分散管理テーブル63を参照し、3回目の入力レコードの子キー「B」が、分散管理テーブル63に存在するか判定する。この時点で、分散管理テーブル63には該当するレコードがない。これは、子キー「B」を有するレコードを処理しているプロセッサ111は存在しないことを意味している。この場合、ステップ34に移行する。
【0045】
ステップ34:
入力レコード分類手段101が、現時点の分散管理テーブル63を参照し、3回目の入力レコードの親キー「Y」が、分散管理テーブル63に存在するか判定する。この時点で、分散管理テーブル63には該当するレコードがない。これは、親キー「Y」を有するレコードを処理しているプロセッサ111は存在しないことを意味している。この場合、ステップ37に移行する。
【0046】
ステップ37:負荷が最も低いプロセッサ111を選択。
入力レコード分類手段101は、現時点で最も処理負荷が低いプロセッサ111を1つ選択し、そのプロセッサ111を、3レコード目を処理すべきプロセッサとして決定する。ここでは、入力レコード分類手段101によりプロセッサ「2」が選択されたものとする。
【0047】
この時点で、入力レコード分類手段101は、分散管理テーブル63の内容を、分散管理テーブル64のように更新する。すなわち、選択されたプロセッサ111のプロセッサ番号「2」と、入力レコードの子キー「B」及び親キー「Y」とを、紐付けて保持する。また、プロセッサ「2」の処理レコード数は「1」となる。この後、再びステップ31に移行する。
【0048】
ステップ31(4回目):
入力レコード分類手段101が、入力レコード41の4レコード目を入力する。4レコード目の内容は、親キー=X、子キー=C、データ=4である。
【0049】
ステップ32:
入力レコード分類手段101が、現時点の分散管理テーブル64を参照し、4回目の入力レコードの子キー「C」が、分散管理テーブル64に存在するか判定する。この時点で、分散管理テーブル64には該当するレコードがない。これは、子キー「C」を有するレコードを処理しているプロセッサ111は存在しないことを意味している。この場合、ステップ34に移行する。
【0050】
ステップ33:
入力レコード分類手段101が、現時点の分散管理テーブル64を参照し、4回目の入力レコードの親キー「X」が、分散管理テーブル64に存在するか判定する。いま、分散管理テーブル64では、プロセッサ「1」と親キー「X」が紐付けられている。これは、この時点で、親キー「X」を有するレコードを、プロセッサ「1」が既に処理していることを意味している。この場合、ステップ35に移行する。
【0051】
ステップ35:しきい値判定
入力レコード分類手段101は、入力レコードをステップ33で発見したプロセッサ111に処理させるべきかを判断するため、しきい値判定を行う。しきい値判定の処理は次の通りである。まず、入力レコード分類手段101は、現在の分散管理テーブル64に対し、入力レコードと同一の親キーを既に処理しているプロセッサ111で入力レコードを処理すると仮定して、分散管理テーブル64の「処理レコード数」カラムを更新した状態を想定する。この例では、プロセッサ「1」の処理レコード数を「3」とした状態を想定する。その上で、処理レコード数の標準偏差を求める。この例では、標準偏差は1.24となり、しきい値1.5を超えない。この場合、入力レコード分類手段101は、入力レコードをステップ33で発見したプロセッサ111に処理させてよいと判断する。すなわち、4レコード目をプロセッサ「1」に割り当てることとする。この場合、ステップ36に移行する。
【0052】
なお、処理レコード数の標準偏差が閾値を超えた場合は、入力レコード分類手段101は、入力レコードをステップ33で発見したプロセッサ111に処理させるべきでないと判断する。すなわち、4レコード目の処理をプロセッサ「1」以外のプロセッサ111に割り当てることとする。この場合、ステップ37に移行し、現時点で処理負荷が最も低いプロセッサに処理を割り当てる。
【0053】
同じ親キーを持つレコードの集計処理は極力同一プロセッサで行う方が、プロセッサ間のデータ通信を削減できる点で効率的である。しかしながら、特定のプロセッサに処理が集中しすぎると、逆にシステム全体として処理効率が低下してしまう。そのため、本実施の形態ではプロセッサ111の分散を調整する役割を担うしきい値131を導入し、これを利用者により適宜調整可能として、最も優れた処理効率を求めることができるようにした。
【0054】
ステップ36:既に親キーを処理しているプロセッサ111を選択。
入力レコード分類手段101は、4レコード目を、既に同一の親キー「X」処理しているプロセッサ「1」で処理すべきものと決定する。
【0055】
この時点で、入力レコード分類手段101は、分散管理テーブル64の内容を、分散管理テーブル65のように更新する。すなわち、選択されたプロセッサ111のプロセッサ番号「1」と、入力レコードの子キー「C」及び親キー「Y」とを、紐付けて保持する。この結果、プロセッサ「1」に紐づけられる子キーは「A,C」となる。また、プロセッサ「1」の処理レコード数は累計「3」となる。この後、再びステップ31に移行する。
【0056】
以下、入力レコード分類手段101は、入力レコード41の5レコード目から7レコード目についても、上述の処理と同様に、
図3のフローチャートに沿って特定のプロセッサ111に割り当てる処理を行う。その結果、7レコード全てを処理した時点では、分散管理テーブル102は、分散管理テーブル66(
図5)のようになる。
【0057】
そして、各プロセッサ111は、入力レコード分類手段101によって自らに割り当てられた入力レコード41のレコードのみについて、それぞれ集計処理を行う。かかる集計処理により、
図4の出力レコード42のように、プロセッサ1では親キー「X」の集計値「9」と子キー「A」「C」の集計値「5」「4」が得られ、プロセッサ2では親キー「Y」の集計値「11」と子キー「B」の集計値「11」が得られ、プロセッサ3で親キー「Z」の集計値「5」と子キー「D」「E」の集計値「3」「2」が得られる。
【0058】
この例における集計処理の効率について検討するに、
図5の分散管理テーブル66における処理レコード数の標準偏差は、0.47と低い。このことから、3つのプロセッサ「1」「2」「3」が偏りなく均等に利用されていることがわかる。また、各プロセッサ111で行われた集計処理において使用されたキーの数は、「X」「A」「C」「Y」「B」「Z」「D」「E」の8個と少ない。このことから、効率よく分散処理がなされていることがわかる。
【0059】
なお、標準偏差は、以下の数1により求めることができる。ここで、n:分散管理テーブルのレコード数、i:プロセッサ番号、xi:プロセッサ番号iの処理レコード数、xa:処理レコード数の平均、を示す。
【数1】
【0060】
ここで、仮に、本実施の形態にかかる手法を採用せず、単に各プロセッサ111を均等に利用することを重視する手法(例えば、ラウンドロビン等の公知の負荷分散手法)を採用し(これはしきい値131を0に近づけた場合と等価である)、上記7レコードを処理する場合を想定する。この場合、処理レコード数の標準偏差は0.47であり、本実施の形態と略同等である。しかしながら、各プロセッサ111で行われた集計処理において使用されるキーの数は、「X」「A」「Y」「Z」「B」「E」「X」「Z」「C」「D」の10個となり、本実施の形態よりも多い。これは、異なるプロセッサ111で、同じキーを有する異なるレコードの集計処理が、より多く行われていることを意味する。この場合、プロセッサ間の通信が増加する。加えて、複数のプロセッサ111で分散して集計された親キー「X」と「Z」については、集計手段121を使用して、最終的な集計処理(第2段階の集計処理)を実施する必要が生ずる。
【0061】
また、仮に、本実施の形態にかかる手法を採用せず、単にプロセッサ間の通信を最小化することのみを重視し、親キーが同一のレコードをすべて同一プロセッサで処理することとした手法を採用し(これはしきい値131を∞に近づけた場合と等価である)、上記7レコードを処理する場合を想定する。この場合は、処理レコード数の標準偏差、及び各プロセッサ111で行われた集計処理において使用されたキーの数は、本実施の形態と同等となる。しかしながら、例えば入力ファイル等141として、
図6の入力レコード71を使用した場合では、本実施の形態に示す手法では処理レコード数の標準偏差が0.47であるのに対し、親キーが同一のレコードをすべて同一プロセッサで処理する手法における標準偏差は2.05と比較的大きくなる。これは、後者の手法において、利用されないプロセッサがより多く現れることを示している。
【0062】
本実施の形態によれば、入力レコード分類手段101が、入力レコードと同一のキーを有する他の入力レコードを既に処理しているプロセッサ111が無い場合、処理負荷が最も低いプロセッサ111に処理を割り当てる。これにより、利用可能なプロセッサ111を均等に利用し、並列処理を効果的に行うことができる。
【0063】
また、本実施の形態によれば、入力レコード分類手段101が、同一のキーを有する複数の入力レコードの集計処理を、同一のプロセッサ111に処理させる。これにより、集計結果を得るために必要なプロセッサ間の通信量を最小限に抑制し、並列処理を効率的に行うことができる。
【0064】
さらに、本実施の形態によれば、入力レコード分類手段101は、しきい値131の値に応じて、複数のプロセッサ111に処理を分散させる程度を変更することができる。これにより、入力レコードの傾向に即した最適な並列処理を行うことができる。
【0065】
このように、本実施の形態によれば、従来の逐次処理を前提としたループ集計処理を、適切なしきい値を与えるだけで、効率的に稼働する並列化処理に再構築することが可能である。
【0066】
<その他の実施の形態>
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述の実施の形態では親キーを1つとした例を説明したが、親キーが2つ以上の場合も同様の考えで処理できる。この場合、しきい値131は親キーの数だけ別々に設定し、
図2の分散管理テーブル102の親キーの列を親キーの数だけ増やし、かつ
図3のフローチャートのステップ34:親キー判定処理を、親キーの数だけ実施することになる。
【0067】
また、上述の実施の形態では、本発明を主にハードウェアの構成として説明したが、これに限定されるものではなく、任意の処理を、CPU(Central Processing Unit)にコンピュータプログラムを実行させることにより実現することも可能である。この場合、コンピュータプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non−transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(random access memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。