(57)【特許請求の範囲】
【請求項１】
複数のキー種で分類された複数のデータを集約するコンピュータに、
前記データ毎に関連するキーを集めたリストであるキーリスト、及び当該キーのうちの１つのキーである集約キーを関連付けたマップデータを生成して記憶部に記憶し、
前記記憶部を参照して、同一の集約キーに関連付けられたマップデータのグループのキーリストを取得し、該取得したキーリストに含まれるキー数の中で最大のキー数と、取得した全てのキーリストをマージした合計キー数と、を比較し、
前記比較の結果、前記合計キー数の方が大きかった場合に、当該マージしたキーリストに含まれるキーそれぞれを集約キーとし、キーリストとして前記マージしたキーリストを関連付けた新たなマップデータを、前記マージしたキーリストに含まれるキーの数分だけ生成して前記記憶部に記憶する、
処理を実行させることを特徴とする処理プログラム。
【請求項２】
前記マップデータは、前記データの内容のリストであるイベントリストを含み、
前記新たなマップデータを生成して記憶する処理では、前記比較の結果、前記合計キー数の方が大きかった場合に、前記マージしたキーリストに含まれるキーのうち辞書式に先頭となるキーを集約キーとするマップデータを特定し、当該特定されたマップデータのイベントリストにのみデータを関連付けることを特徴とする請求項１に記載の処理プログラム。
【請求項３】
前記比較する処理における比較の結果、前記合計キー数の方が大きくなかった場合であって、前記取得したイベントリストにデータが含まれる場合には、前記マージしたキーリストのうち辞書式に先頭となるキーを集約キーとし、前記取得したイベントリストをマージしたイベントリスト及び前記マージしたキーリストが関連付けられた新たなマップデータを生成し、前記記憶部に記憶することを特徴とする請求項１又は２に記載の処理プログラム。
【請求項４】
前記比較する処理における比較の結果、前記記憶部に記憶されている全ての集約キーに関連付けられたキーリストにおいて、前記合計キー数の方が大きくなかった場合に、前記記憶部に記憶されているキーリストに基づいて一意の値を作成し、当該値を集約キーとするマップデータを生成する処理、
を前記コンピュータに実行させることを特徴とする請求項１〜３のいずれか一項に記載の処理プログラム。
【請求項５】
複数のキー種で分類された複数のデータを集約するコンピュータが、
前記データ毎に関連するキーを集めたリストであるキーリスト、及び当該キーのうちの１つのキーである集約キーを関連付けたマップデータを生成して記憶部に記憶する工程と、
前記記憶部を参照して、同一の集約キーに関連付けられたマップデータのグループのキーリストを取得し、該取得したキーリストに含まれるキー数の中で最大のキー数と、取得した全てのキーリストをマージした合計キー数と、を比較する工程と、
前記比較する工程における比較の結果、前記合計キー数の方が大きかった場合に、当該マージしたキーリストに含まれるキーそれぞれを集約キーとし、キーリストとして前記マージしたキーリストを関連付けた新たなマップデータを、前記マージしたキーリストに含まれるキーの数分だけ生成して前記記憶部に記憶する工程と、を実行することを特徴とする処理方法。
【請求項６】
複数のキー種で分類された複数のデータを集約する処理装置であって、
前記複数のデータ及び当該複数のデータから生成されるマップデータを記憶する記憶部と、
前記データ毎に関連するキーを集めたリストであるキーリスト、及び当該キーのうちの１つのキーである集約キーを関連付けたマップデータを生成して前記記憶部に記憶する第１生成・記憶部と、
前記記憶部を参照して、同一の集約キーに関連付けられたマップデータのグループのキーリストを取得し、該取得したキーリストに含まれるキー数の中で最大のキー数と、取得した全てのキーリストをマージした合計キー数と、を比較する比較部と、
前記比較する工程における比較の結果、前記合計キー数の方が大きかった場合に、当該マージしたキーリストに含まれるキーそれぞれを集約キーとし、キーリストとして前記マージしたキーリストを関連付けた新たなマップデータを、前記マージしたキーリストに含まれるキーの数分だけ生成して前記記憶部に記憶する第２生成・記憶部と、を備える処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、処理プログラム、処理方法及び処理装置に関する。
【背景技術】
【０００２】
大量データを対象にした分析処理には、非常に長い処理時間を要する。これに対し、最近では、複数のマシンを用いて分散・並列処理を行うことで処理時間を短縮するアプローチがとられている。分散・並列処理としては、例えば、MapReduceアルゴリズムを用いた方法（例えば、非特許文献１参照）がある。また、MapReduceアルゴリズムのオープンソース実装として、Apache Hadoopが存在している。
【０００３】
MapReduceは、主に元のデータを多数のキーと値のセットに分割する「Ｍａｐ処理」と、それらのキーと値のセットをあるルールによって集約する「Ｒｅｄｕｃｅ処理」とによって構成される。Ｍａｐ処理及びＲｅｄｕｃｅ処理の各処理は、それぞれ複数並列に実行可能であるため、それらを複数の処理マシン（サーバなど）に割り当てることにより、複数マシンの処理性能を活用することができる。
【０００４】
ただし、MapReduceによる分散・並列処理の効果を高めるには、それぞれのＭａｐ処理、Ｒｅｄｕｃｅ処理の独立性を高くし、他の部分に依存せずに処理を行えるようにする必要がある。
【０００５】
分析処理の一種として、大量のデータ群の中から、関係のあるデータをグルーピングするものがある。例えば、図２２（ａ）に示すように、ある時期に行われた業務ログを、図２２（ｂ）に示すように、一連となっている業務フロー単位にグルーピングする場合などである。グルーピングの処理では、あるグループのデータ群を扱う際、別のグループのデータを考慮する必要が無いため、各グループの処理を複数サーバに分散させることにより、効率的に処理が行える。
【０００６】
なお、図２２（ａ）のように一連の業務フローが１つのキー種（図２２（ａ）ではフローＩＤ）によって示されるデータをグルーピングする際には、MapReduceを用いることによってグルーピングは容易に達成される。MapReduceを行う処理マシンでは、あるキー値を持つデータ群を一箇所に集約する機能を標準で有しているためである。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Jeffrey Dean and Sanjay Ghemawat. MapReduce: Simplified Data Processing on Large Clusters OSDI 2004
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、図２３（ａ）のように、一連の業務フローを示すキーが複数（図２３（ａ）では３種）存在する場合もあり得る。なお、図２３（ｂ）は、図２３（ａ）のデータを集約した例を示している。このような場合には、単純にはグルーピングを行うことができない。複数のキー種を用いて関連のあるデータ群を集約する処理（以下、「複数キー集約処理」と呼ぶ）では、どのキーの組み合わせが一連のデータ群を示すのかが、データ全体を見ないと完全には確定しないからである。例えば、図２３（ａ）の場合、伝票番号＝001で集約しようとすると、伝票明細詳細テーブルのデータを集約できない。一方、伝票明細詳細番号＝001-001-001で集約する場合、伝票テーブルのデータを集約できない。
【０００９】
この場合、処理の進展に応じてキー値の組み合わせの情報を最新化しながら集約処理を進めるような工夫が必要であり、また、最新化する処理が不十分な場合には、データの集約漏れが発生する場合がある。
【００１０】
これに対し、キー種間の関連を管理する表をＲＤＢ（関係データベース(Relational Database））などに作成することも考えられる。しかるに、分散・並列処理する各処理マシンが共通に参照・更新する箇所があると、分散処理の性能・スケーラビリティが劣化するおそれがある。
【００１１】
そこで本件は上記の課題に鑑みてなされたものであり、複数のキー種で分類された複数のデータを集約する際に、データ集約漏れを防止し、性能・スケーラビリティの向上を図ることが可能な処理プログラム、処理方法及び処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本明細書に記載の処理プログラムは、複数のキー種で分類された複数のデータを集約するコンピュータに、前記データ毎に関連するキーを集めたリストであるキーリスト、及び当該キーのうちの１つのキーである集約キーを関連付けたマップデータを生成して記憶部に記憶し、前記記憶部を参照して、同一の集約キーに関連付けられたマップデータのグループのキーリストを取得し、該取得したキーリストに含まれるキー数の中で最大のキー数と、取得した全てのキーリストをマージした合計キー数と、を比較し、前記比較の結果、前記合計キー数の方が大きかった場合に、当該マージしたキーリストに含まれるキーそれぞれを集約キーとし、キーリストとして前記マージしたキーリストを関連付けた新たなマップデータを、前記マージしたキーリストに含まれるキーの数分だけ生成して前記記憶部に記憶する、処理を実行させる処理プログラムである。
【００１３】
本明細書に記載の処理方法は、複数のキー種で分類された複数のデータを集約するコンピュータが、前記データ毎に関連するキーを集めたリストであるキーリスト、及び当該キーのうちの１つのキーである集約キーを関連付けたマップデータを生成して記憶部に記憶する工程と、前記記憶部を参照して、同一の集約キーに関連付けられたマップデータのグループのキーリストを取得し、該取得したキーリストに含まれるキー数の中で最大のキー数と、取得した全てのキーリストをマージした合計キー数と、を比較する工程と、前記比較する工程における比較の結果、前記合計キー数の方が大きかった場合に、当該マージしたキーリストに含まれるキーそれぞれを集約キーとし、キーリストとして前記マージしたキーリストを関連付けた新たなマップデータを、前記マージしたキーリストに含まれるキーの数分だけ生成して前記記憶部に記憶する工程と、を実行する処理方法である。
【００１４】
本明細書に記載の処理装置は、複数のキー種で分類された複数のデータを集約する処理装置であって、前記複数のデータ及び当該複数のデータから生成されるマップデータを記憶する記憶部と、前記データ毎に関連するキーを集めたリストであるキーリスト、及び当該キーのうちの１つのキーである集約キーを関連付けたマップデータを生成して前記記憶部に記憶する第１生成・記憶部と、前記記憶部を参照して、同一の集約キーに関連付けられたマップデータのグループのキーリストを取得し、該取得したキーリストに含まれるキー数の中で最大のキー数と、取得した全てのキーリストをマージした合計キー数と、を比較する比較部と、前記比較する工程における比較の結果、前記合計キー数の方が大きかった場合に、当該マージしたキーリストに含まれるキーそれぞれを集約キーとし、キーリストとして前記マージしたキーリストを関連付けた新たなマップデータを、前記マージしたキーリストに含まれるキーの数分だけ生成して前記記憶部に記憶する第２生成・記憶部と、を備える処理装置である。
【発明の効果】
【００１５】
本明細書に記載の処理プログラム、処理方法及び処理装置は、複数のキー種で分類された複数のデータを集約する際に、データ集約漏れを防止し、性能・スケーラビリティの向上を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】一実施形態に係る分散処理システムの構成を概略的に示す図である。
【図２】処理サーバのハードウェア構成を示す図である。
【図３】図３（ａ）は、処理サーバの機能ブロック図であり、図３（ｂ）は、管理サーバの機能ブロック図である。
【図４】MapReduce処理の基本的な処理内容について説明するための図である。
【図５】MapReduce処理の一連の流れについて示すフローチャートである。
【図６】図６（ａ）は、処理対象データの一例を示す図であり、図６（ｂ）、図６（ｃ）は、図６（ａ）のデータから生成されるＭａｐデータを示す図である。
【図７】集約対象のデータの一例を示す図である。
【図８】図８（ａ）、図８（ｂ）は、図７における、元キーがＹ＝０１０１で、関連キーがＸ＝０１，Ｙ＝０１０１のデータのから生成される２つのＭａｐデータを示す図である。
【図９】１回目の集約を示す図（その１）である。
【図１０】図５のステップＳ１４において、各処理サーバで並列実行されるＲｅｄｕｃｅ処理の具体的処理を示すフローチャートである。
【図１１】１回目の集約を示す図（その２）である。
【図１２】１回目の集約を示す図（その３）である。
【図１３】１回目の集約を示す図（その４）である。
【図１４】２回目の集約を示す図（その１）である。
【図１５】２回目の集約を示す図（その２）である。
【図１６】２回目の集約を示す図（その３−１）である。
【図１７】２回目の集約を示す図（その３−２）である。
【図１８】３回目の集約を示す図である。
【図１９】４回目の集約を示す図である。
【図２０】５回目の集約を示す図である。
【図２１】図２１（ａ）は、図５のステップＳ１６の判断が肯定されたときのデータの集約状態を示す図であり、図２１（ｂ）は、ステップＳ１８、Ｓ２２０が行われた後のデータの集約状態を示す図である。
【図２２】従来例を説明するための図（その１）である。
【図２３】従来例を説明するための図（その２）である。
【発明を実施するための形態】
【００１７】
以下、一実施形態について、図１〜図２１に基づいて詳細に説明する。図１には、分散処理システム１００の構成が概略的に示されている。本実施形態の分散処理システム１００では、複数のキー種で分類されたデータを集約する「複数キー集約処理」を行うこととし、当該処理では、MapReduceアルゴリズムを適用するものとする。ここで、集約とは、同一のキーのデータを取得し纏めることを意味する。
【００１８】
分散処理システム１００は、図１に示すように、処理を実行するｎ台の処理装置（コンピュータ）としての処理サーバ１０と、各処理サーバ１０の処理を管理する管理サーバ２０と、を備える。各処理サーバ１０と管理サーバ２０は、ＬＡＮ（Local Area Network）、インターネットなどのネットワーク３０に接続されている。
【００１９】
図２には、処理サーバ１０のハードウェア構成が示されている。図２に示すように、処理サーバ１０は、ＣＰＵ９０、ＲＯＭ９２、ＲＡＭ９４、記憶部（ここではＨＤＤ（Hard Disk Drive））９６、ネットワークインタフェース９７、可搬型記憶媒体用ドライブ９９等を備えている。これら処理サーバ１０の構成各部は、バス９８に接続されている。処理サーバ１０では、ＲＯＭ９２あるいはＨＤＤ９６に格納されているプログラム（処理プログラム）、又は可搬型記憶媒体用ドライブ９９が可搬型記憶媒体９１から読み出したプログラム（処理プログラム）をＣＰＵ９０が実行することにより、図３（ａ）の各部の機能が実現される。なお、管理サーバ２０も処理サーバ１０と同様の構成を有しているが、管理サーバ２０では、ＲＯＭあるいはＨＤＤに格納されているプログラム（管理プログラム）、又は可搬型記憶媒体用ドライブが可搬型記憶媒体から読み出したプログラム（管理プログラム）をＣＰＵが実行することで、図３（ｂ）の各部の機能が実現される。なお、図３（ａ）、図３（ｂ）の各機能の詳細については、後述する。
【００２０】
図１に戻り、各処理サーバ１０のディスク（ＨＤＤ９６）は、仮想的に１つのディスクに見える記憶部としての分散ファイルシステム４０に組み込まれている。なお、図示の便宜上、図１では、ＨＤＤ９６を各処理サーバ１０の外側に出して示している。
【００２１】
図３（ａ）には、処理サーバ１０の機能ブロック図が示されている。処理サーバ１０は、ＣＰＵ９０が処理プログラムを実行することで、図３（ａ）に示す、第１生成・記憶部としてのＭａｐ処理部１２、第２生成・記憶部及び比較部としてのＲｅｄｕｃｅ処理部１４、としての機能を実現する。
【００２２】
Ｍａｐ処理部１２は、分散ファイルシステム４０に格納されているデータを用いて、後述するＭａｐ処理を実行する。Ｒｅｄｕｃｅ処理部１４は、Ｍａｐ処理部１２においてＭａｐ処理されたデータ（Ｍａｐデータ）を用いて、後述するＲｅｄｕｃｅ処理を行う。
【００２３】
図３（ｂ）には、管理サーバ２０の機能ブロック図が示されている。管理サーバ２０では、ＣＰＵが管理プログラムを実行することで、図３（ｂ）に示す、処理管理部２２、キー数増加フラグ管理部２４、通信部２６、としての機能を実現する。なお、本実施形態では、管理サーバ２０における管理プログラムの実行に連動して各処理サーバ１０の処理プログラムが起動されるようになっている。
【００２４】
処理管理部２２は、各処理サーバ１０の状態を通信部２６を介して把握するとともに、キー数増加フラグ管理部２４が管理する後述するキー数増加フラグを参照して、各処理サーバ１０に対して処理を実行させる。
【００２５】
キー数増加フラグ管理部２４は、通信部２６を介して各処理サーバ１０から取得した情報に基づいて、キー数増加フラグの値を管理する。キー数増加フラグは、「０」又は「１」の値をとりうるものである。なお、キー数増加フラグの値は、キー数増加フラグ管理部２４のみが参照可能である。したがって、各処理サーバ１０においては、カウンタの値を参照せずに、キー数増加フラグ管理部２４に対してフラグの値を変更する指示をリモートかつ非同期的にて行うのみである。このため、処理プログラムの処理がカウンタの影響で待たされたりすることはない。
【００２６】
通信部２６は、処理サーバ１０との間で通信を行い、通信結果を処理管理部２２及びキー数増加フラグ管理部２４に対して送信する。また、通信部２６は、処理管理部２２からの指示を処理サーバ１０に対して送信する。
【００２７】
なお、上記構成は、分散処理ミドルウェアとしてApache Hadoopを利用したときの標準的な構成である。したがって、分散ファイルシステム４０や、処理プログラムの起動・停止・制御、及びカウンタの機能はHadoopの基本機能として実装されているものである。
【００２８】
次に、MapReduce処理の基本的な処理内容について、図４に基づいて説明する。処理の流れとして、最初は、処理対象のデータは全て管理サーバ２０上のストレージに格納されているものとする。これを管理サーバ２０が分散ファイルシステム４０にアップロードすると、処理対象のデータは自動的に分割され、均一な量になるように、各処理サーバ１０のストレージに格納される。この後に、MapReduce処理が実行される。図４は、MapReduce処理の基本概念を示す図である。
【００２９】
MapReduce処理では、分散ファイルシステム４０上の処理対象のデータを、主キー（集約に用いるキーであるので「集約キー」とも呼ばれる）と値からなるＭａｐデータに分割する処理（Ｍａｐ処理）と、主キーの値に応じてＭａｐデータを纏める処理（Ｒｅｄｕｃｅ処理）とを、各処理サーバ１０において分散・並列的に行う。Ｍａｐ処理における主キーと値の形式は自由であり、また、Ｍａｐデータをひとつも生成しないＭａｐ処理もあり得る。例えば、各処理サーバ１０において分散・並列的に行われたＭａｐ処理によって、図４の上段に示すようなＭａｐデータが生成されたとする。
【００３０】
一方、Ｒｅｄｕｃｅ処理とは、Ｍａｐ処理によって生成されたＭａｐデータを元データとし、その主キーの値によって処理サーバを振分け、ある基準でグループ化したＭａｐデータ群に対して何らかの処理を行うことを指す。一般的には、同一の主キー値を持つＭａｐデータ群をグループ化し、そのＭａｐデータのグループに対して処理を行う。
【００３１】
図４に示したのは、最も基本的な処理サーバの振分け方法である。具体的には、各処理サーバ１０又は管理サーバ２０は、各Ｍａｐデータの主キーの値に対し、一意なハッシュ値を公知の計算方法により計算し、そのハッシュ値を処理サーバ数（図４では３）で割った剰余（０〜２）を求める。この場合、予め、各処理サーバ１０に関し、対応する剰余値を、図４の下段に示す番号（０〜２）で決めておくことで、各Ｍａｐデータを処理する処理サーバ１０を決定することができる。なお、同一の値の主キーに対しては常に同一のハッシュ値が得られるため、同一の主キーの値を持ったＭａｐデータ群は１つの処理サーバに集められる。また、ハッシュ値が偏りのない前提であれば、各Ｍａｐデータの処理を各サーバに偏りなく分散させることができる。なお、上述したハッシュ値から一意に処理サーバを決定する方法は、最も単純な例である。したがって、例えば、ハッシュ値に加えて、その時点の処理サーバの負荷を考慮に入れるなどして、より高度に処理サーバを決定することとしてもよい。なお、一般には処理サーバ１０の数より主キーの値の種類の方が多くなるので、各処理サーバ１０は複数のＭａｐデータグループを処理する。各処理サーバ１０は、マルチプロセスまたはマルチスレッドにより、同時に複数のＭａｐデータグループの処理を行う。
【００３２】
各処理サーバ１０（Ｒｅｄｕｃｅ処理部１４）は、集められたＭａｐデータの主キーの値を参照する。そして、各処理サーバ１０（Ｒｅｄｕｃｅ処理部１４）は、同一の主キーの値を持ったＭａｐデータ（Ｍａｐデータ群）を１つのグループとし、そのグループに対してＲｅｄｕｃｅ処理を行う（図４の下段における主キー＝ＣＣＣのグループ参照）。なお、管理サーバ２０（処理管理部２２）は、各処理サーバ１０の状態を把握しているため、各処理サーバ１０におけるＭａｐ処理やＲｅｄｕｃｅ処理が完了したかどうかについても把握している。このため、管理サーバ２０は、Ｒｅｄｕｃｅ処理の結果を受けて、再度各処理サーバ１０にＭａｐ処理を実行させるなどすることで、MapReduce処理を繰り返し行うことができる。
【００３３】
次に、本実施形態の分散処理システム１００における、複数キー集約処理の詳細について、説明する。この場合の複数キー集約処理とは、図２３（ａ）に示すような一連の業務フローを示すキーの種類（キー種）が複数存在する場合の集約処理を意味する。
【００３４】
図５は、複数キー集約処理における具体的な処理の流れを示すフローチャートである。この図５の処理は、管理サーバ２０の処理管理部２２が、処理対象の元データを分散ファイルシステム４０にアップロードした後に開始される。図５の複数キー集約処理では、Ｍａｐ処理とＲｅｄｕｃｅ処理とが必要回数繰り返される。このMapReduce処理の繰り返しによって、データのグループ化が進展し、最後に複数キーで紐付いたデータを正しくグループ化した結果を得ることができる。なお、以下においては、１回のMapReduce処理を「集約」と呼ぶものとする。
【００３５】
図５の処理では、まず、ステップＳ１０において、管理サーバ２０のキー数増加フラグ管理部２４が、キー数増加フラグを０に初期化する。
【００３６】
次いで、ステップＳ１２では、処理サーバ１０のＭａｐ処理部１２が、元データからＭａｐデータを生成するＭａｐ処理を実行する。各処理サーバ１０のＭａｐ処理の起動は、Hadoopの機能で実行される。各サーバのＭａｐ処理では、分散ファイルシステム４０にアップロードされた処理対象データのうち、そのサーバに格納されている元データ（例えば図６（ａ））に対し、図６（ｂ）、図６（ｃ）に示すような構造のＭａｐデータを生成する処理を行う。なお、一般的にHadoopでは、分散ファイルシステム４０にアップロードされたファイルは、冗長性のために同じ内容のデータを複数のサーバにコピーして保持する。しかしながら、ここでは、説明の単純化のため、同じ内容のデータは１箇所にのみ存在するものとして説明する。ここで、図６（ａ）のデータは、複数のキーによって関連付けられたデータであるので、各レコードは必ず主キーを持ち、また、０〜複数個の関連キーを持っている。１つのレコードの中でどの項目が主キーで、どの項目が関連キーであるかは自明であることとし、あらかじめ定義しておくこととする。例えば、複数個のキーの中で辞書式に最初のキーとなるキー（Ｘ→Ｙ→Ｚの順、かつ数値の小さい順に先頭となるキー）が主キーであるものとする。この定義は管理サーバ２０上に存在し、Ｍａｐ処理の起動の際のパラメータとして、各処理サーバ１０に通知される。Ｍａｐデータは、「主キー」と「値」を有し、「値」にはキーリストとイベントリストが格納される。ここでイベントとは入力データそのものを指す。
【００３７】
Ｍａｐ処理部１２では、Ｍａｐ処理に際して、処理対象データの１レコードを読込み、その主キーと関連キーの項目名・値をリストアップし、キーリストを作成する。図６（ａ）は、伝票明細詳細テーブルの１レコードを処理する場合の例で、「伝票明細詳細番号（Ｙ）」が主キーで、その値は「０１０１」である。また、関連キーは「伝票明細番号（Ｚ）」で、値は「０１０１０１」である。よって、キーリストは２つのキーから構成されることになる。
【００３８】
また、Ｍａｐ処理部１２は、キーリストの要素数分（キー数分）のＭａｐデータを作成する。図６（ａ）の例ではキーリストに含まれるキー数は、２個であるので、生成するＭａｐデータは図６（ｂ）、図６（ｃ）に示す２個になる。生成した各Ｍａｐデータの主キーには、キーリストの各要素を用いる。よって、１つ目のＭａｐデータの主キーは「伝票明細詳細番号（Ｙ）」の「０１０１」になり、２つ目のＭａｐデータの主キーは「伝票明細番号（Ｚ）」の「０１０１０１」になる。
【００３９】
また、Ｍａｐ処理部１２は、作成したＭａｐデータのうち、キーの値を辞書式に評価し、先頭となるＭａｐデータのイベントリストにのみ、入力レコードの内容（データ内容）を１要素として格納する。初回の集約時には、イベントリストに格納されるのは最大で1個のみとなる。キー値が先頭以外のＭａｐデータに関しては、イベントリストは空にする（図６（ｃ）参照）。なお、元の入力データに、その後の処理では用いない無駄なデータが含まれている場合、どの項目が不要かを定義しておくことで、イベントリスト格納の際にフィルタリングをすることが可能である。
【００４０】
ここで、図７には、本実施形態における複数の処理対象データの初期状態の一例が示されている。この図７の例では、太線矩形枠がイベントデータを示し、破線矩形枠がキーリストを示している。また、１つのイベントが入力データ１レコードに対応し、各イベント下部のキーリストは、そのレコードに含まれる主キーおよび関連キーを示している。本実施形態ではキーリストにおいて主キーと関連キーの区別をする必要はないが、イベントの判別のため、入力データの主キーの値を「元キー」として表記している。また、図７において各データを結ぶ破線は、関連キーと主キーの関係を示している。入力データは３層からなり、１番下の層から２番目の層、２番目から最上位の層へ関連が設定されている。図７では、最終的に２つのグループ（一点鎖線で分割されたグループ）にグループ化されるのが正解である。また、図７では、左側のグループのＺ＝０１０１０１等において、下層の１種類のキーが、上層の複数のキーに関連付いているケースが含まれている。このため、単純に最下層から上の層へ向かって集約を繰り返す方法で集約させる方法は適用できない。
【００４１】
この図７に示す各処理対象のデータに関しても、Ｍａｐ処理部１２によって、上述したようなＭａｐ処理が行われる。例えば、元キーがＹ＝０１０１で、関連キーがＸ＝０１，Ｙ＝０１０１のデータの場合、図８（ａ）、図８（ｂ）に示すような２つのＭａｐデータが生成されることになる。これら２つのＭａｐデータは、図９において、矢印（→）で示すＭａｐデータである。なお、図７のその他のデータについても同様にＭａｐ処理が行われ、図９に示すような多数のＭａｐデータが生成されることになる。なお、図９において、各Ｍａｐデータの上部に記載されているキーは、主キーを意味する。
【００４２】
Ｍａｐ処理完了後、生成されたＭａｐデータは図４で説明したように各処理サーバに再分配される。Ｍａｐ処理の完了検知、Ｍａｐデータの振分け、Ｒｅｄｕｃｅ処理の起動はHadoopの機能で実行される。
【００４３】
図５に戻り、ステップＳ１４では、Ｒｅｄｕｃｅ処理部１４が、主キー毎にデータ群を集約し、Ｒｅｄｕｃｅ処理を実行する。このステップＳ１４では、具体的には、各処理サーバ１０で並列的に図１０のフローチャートに沿った処理が実行される。なお、Ｒｅｄｕｃｅ処理は、主キーの値が一致するＭａｐデータ群に対して実行される。ここでは、その処理単位を「集約グループ」または「グループ」と呼ぶことにする。
【００４４】
図１０の処理では、ステップＳ３０において、Ｒｅｄｕｃｅ処理部１４が、各グループ（主キーがＸ＝０１〜Ｚ＝０１０１０６）のイベントリスト、キーリスト、及び最大入力キー数を初期化する。この場合、最大入力キー数の初期値は０である。なお、図１１は、図９のＭａｐデータをグループ毎に纏めて示す図である。これ以降、ステップＳ３２からステップＳ４０においては、各Ｍａｐデータを対象とするループ処理が行われる。
【００４５】
ステップＳ３２では、Ｒｅｄｕｃｅ処理部１４が、処理対象のＭａｐデータを取得する。この場合、各処理サーバ１０のＲｅｄｕｃｅ処理部１４は、図１１で示される集約グループ（主キーの値が一致するデータ群）の中から１つのＭａｐデータを取得することになる。
【００４６】
次いで、ステップＳ３４では、Ｒｅｄｕｃｅ処理部１４が、Ｍａｐデータのキーリストの要素数（キー数）が、これまでに取得した同一グループ内の最大入力キー数より大きければ、そのキー数を最大入力キー数に設定する。すなわち、Ｒｅｄｕｃｅ処理部１４は、取得したＭａｐデータ（群）に対し、そのＭａｐデータのキーリストの要素数（キー数）をカウントし、グループの最大入力キー数より大きければ、グループの最大入力キー数をその値で更新する。したがって、集約グループの全てのＭａｐデータに対してステップＳ３４を行った場合には、最終的に、グループの最大入力キー数は、入力されたＭａｐデータ群のキーリストのうち、最大のもののキー数と一致することになる。例えば、図１１の主キーがＸ＝０１のグループでは、最大入力キー数は、２つのキーリストのうち最大のキー数である「２」となる。
【００４７】
次いで、ステップＳ３６では、Ｒｅｄｕｃｅ処理部１４が、Ｍａｐデータのキーリストの内容をグループのキーリスト（図１２の太破線枠参照）にコピーする。ただし、グループのキーリストに同じキーがすでに含まれている場合、そのキー（重複するキー）については、コピーせず、破棄するものとする。したがって、集約グループの全てのＭａｐデータに対してステップＳ３６を行った場合には、最終的に、各キーリストをマージ（集計）したグループのキーリスト（図１２の太破線枠）が生成されることになる。
【００４８】
次いで、ステップＳ３８では、Ｒｅｄｕｃｅ処理部１４が、Ｍａｐデータにイベントが含まれていた場合に、そのイベントをイベントリストに追加（コピー）する。イベントに関しては、同一の内容のものが複数存在することは無い（仮に同一の内容だったとしても別のレコードに起因する別データである）。したがって、Ｒｅｄｕｃｅ処理部１４は、内容のチェックを特に行うことなく、イベントリストにイベントをコピーすることができる。
【００４９】
次いで、ステップＳ４０では、Ｒｅｄｕｃｅ処理部１４が、未処理のＭａｐデータが存在するか否かを判断する。ここでの判断が肯定された場合には、ステップＳ３２に戻る。一方、ステップＳ４０の判断が否定された場合には、ステップＳ４２に移行する。ステップＳ４０の判断が否定された段階では、全てのＭａｐデータの処理が終了しており、各グループの最大入力キー数と、各グループのマージしたキーリストの要素数（キー数）とが求められている。なお、図１２において、各グループの右上に記載されている数値（ａ→ｂ）は、「ａ」が各グループの最大入力キー数を意味し、「ｂ」が各グループのマージしたキーリストの要素数（キー数）を意味する。
【００５０】
ステップＳ４０の判断が否定されてステップＳ４２に移行すると、Ｒｅｄｕｃｅ処理部１４は、グループのマージしたキーリストのキー数（ｂ）が、最大入力キー数（ａ）より大きいか否かを判断する。なお、この比較では、最大入力キー数とマージしたキーリストの要素数（キー数）が一致するか、マージしたキーリストの要素数（キー数）の方が大きくなるかのいずれかになる。
【００５１】
ステップＳ４２の判断が肯定された場合（マージしたキーリストのキー数が、最大入力キー数より大きい場合）には、ステップＳ４４に移行する。なお、図１２では、主キーがＸ＝０３，０５、Ｙ＝０１０１，０１０２，０１０３，０１０４，０１０５、Ｚ＝０１０１０１のグループのいずれかの処理の場合にステップＳ４２の判断が肯定される。このように、マージしたキーリストのキー数の方が多い場合、集約によって新たなキー間の関連が判明したことを意味するので、新しいキー間の関連を利用した再度の集約が必要になる。
【００５２】
したがって、マージしたキーリストのキー数の方が多かった場合には、ステップＳ４４において、Ｒｅｄｕｃｅ処理部１４が、管理サーバ２０に通知し、キー数増加フラグ管理部２４が、キー数増加フラグを１に設定する。キー数増加フラグが１に設定された場合、管理サーバ２０の処理管理部２２が必ず再度の集約を実行するので、処理サーバ１０から再集約を指示したのと同じ効果になる。
【００５３】
次いで、ステップＳ４６では、Ｒｅｄｕｃｅ処理部１４は、ａ＜ｂのグループについて、キーリストの要素数（キー数）分のＭａｐデータを作成する。ここで、各Ｍａｐデータのキーは、マージされたキーリストに含まれる各キーになる。また、各Ｍａｐデータのキーリストには、グループのキーリストをそのまま格納する。また、Ｍａｐデータのうち、キーの値が辞書式に先頭になるＭａｐデータ（Ｘ→Ｙ→Ｚの順、かつ数値の小さい順に先頭となるＭａｐデータ）についてのみ、イベントリストにグループのイベントリストをそのまま格納する。すなわち、Ｒｅｄｕｃｅ処理部１２は、マージしたキーリストに含まれるキーのうち辞書式に先頭となるキーを主キーとするマップデータを特定し、当該特定されたマップデータのイベントリストにのみデータを関連付ける
【００５４】
そして、ステップＳ４８では、Ｒｅｄｕｃｅ処理部１４が、Ｍａｐデータ群の中間生成データとして、ステップＳ４６で作成されたＭａｐデータを、分散ファイルシステム４０上の中間ファイルに出力する。図１３は、図１０の全処理が終了した直後（１回目の集約処理が終了した直後）の状態を示す図である。この図１３では、一点鎖線で囲まれたＭａｐデータ（のいずれか）が中間ファイルに出力されることになる。なお、この処理は、マージしたキーリストにおいて新たに関連が確定したキーを主キーとするＭａｐデータのグループに対して、マージしたキーリストをコピー配布する処理であるといえる。その後は、図１０の全処理を終了し、図５のステップＳ１６に移行する。
【００５５】
なお、出力したＭａｐデータは、再度集約が実行された際、Ｍａｐ処理によって中間ファイルからＭａｐデータとして復元され、次のＲｅｄｕｃｅ処理でキー値に対応した処理サーバ１０に再配布される。従って、２回目以降の集約におけるＭａｐ処理（Ｓ１２）は、入力データファイルからＭａｐデータを生成する初回集約のＭａｐ処理（Ｓ１２）と異なり、中間ファイルにシリアライズされたＭａｐデータをオブジェクトとして復元するだけの処理になる。
【００５６】
一方、図１０のステップＳ４２の判断が否定された場合には、ステップＳ５０に移行する。ステップＳ５０では、Ｒｅｄｕｃｅ処理部１４が、イベントリストにイベントが存在するか否かを判断する。ここでの判断が肯定された場合には、ステップＳ５２に移行する。なお、ステップＳ５２に移行するのは、図１２のＸ＝０１，０２，０４のグループのいずれかを処理している場合のみである。
【００５７】
ステップＳ５２では、キーリストのうち辞書的に先頭となるキーを主キーとして、単一のＭａｐデータを生成する。具体的には、Ｍａｐデータを一つだけ生成し、グループのキーリストのうち、辞書式に先頭となる値をキーとし、キーリストにはグループのキーリストをそのまま格納し、イベントリストにはグループのイベントリストをそのまま格納する。そして、ステップＳ４８に移行すると、Ｒｅｄｕｃｅ処理部１４は、Ｍａｐデータ群の中間生成データとして、ステップＳ５２で生成したＭａｐデータを中間ファイルに出力する。なお、ここで複数のＭａｐデータを生成しないのは、キーリストが増えない場合はキー間の新たな関係が判明しておらず、情報が増えないためにすべての集約グループにキーリストを送付しても無駄になるためである。なお、ステップＳ５２にて生成され、ステップＳ４８にて中間ファイルに出力されるＭａｐデータは、図１３において一点鎖線で囲まれていないＭａｐデータ（のいずれか）である。その後は、図１０の全処理を終了し、図５のステップＳ１６に移行する。
【００５８】
これに対し、図１０のステップＳ５０の判断が否定された場合、すなわち、イベントリストにイベントが存在しない場合には、その集約グループでは新たなキーの関連付けは生じなかったことになる。この場合、中間生成データとして何も出力することなく（すなわち、グループを削除して）、図１０の全処理を終了し、図５のステップＳ１６に移行する。ここでステップＳ５０の判断が否定された場合に中間生成データとして何も出力しないこととしているのは、キー数が増えない場合、もしそのキー群に関連したイベントが存在するのであれば、そのイベントが処理されているグループにも同内容のキーリストが送られているはずであるので、そのグループでキーリストを保持すれば良いためである。換言すれば、イベントが存在しないグループではキーリストを捨てても情報が失われることはないためである。
【００５９】
図５に戻り、各処理サーバ１０による処理（ステップＳ１２、Ｓ１４の処理）が完了した後は、図５のステップＳ１６に移行する。ステップＳ１６では、キー数増加フラグ管理部２４が、キー数増加フラグをチェックし、当該フラグが「１」か否かの判断をする。ここでの判断が肯定された場合、すなわち、キー数増加カウンタが「１」の場合、キーの集約が完了していないため、ステップＳ１０に戻り、処理管理部２２の指示の下、各処理サーバ１０が再度同様のMapReduce処理を実行する。
【００６０】
例えば、２回目のステップＳ１２、Ｓ１４の処理の場合（２回目の集約の場合）、図１４に示すように、図１３のＭａｐデータが集約される。なお、図１５は、図１４に最大入力キー数ａ及びマージしたキーリストのキー数ｂを明示した図である。この図１５に示すように、２回目の集約処理では、主キーがＸ＝０３，０５、Ｙ＝０１０１，０１０２，０１０３，０１０４，０１０５、Ｚ＝０１０１０１の８グループが、マージしたキーリストのキー数（ｂ）が最大入力キー数（ａ）より大きくなっている。したがって、これらのグループに関しては、ステップＳ４８において、図１６，図１７で一点鎖線で囲んで示すＭａｐデータが生成され、中間ファイルとして出力される。
【００６１】
一方、主キーがＸ＝０１，０２，０４の３グループでは、ステップＳ４２の判断が否定され、ステップＳ５０の判断が肯定される。このため、ステップＳ５２において、図１６で一点鎖線で囲まれていない３つのＭａｐデータが生成され、中間ファイルとして出力される。また、その他の主キーのグループについては、中間ファイルとして出力されない（削除される）。
【００６２】
この２回目の集約においても、ステップＳ４２の判断が肯定されることがあるため、キー数増加フラグは「１」に設定される。したがって、３回目の集約も行われることになる（ステップＳ１６が肯定される）。
【００６３】
３回目の集約では、図１６、図１７のＭａｐデータが、図１８に示すように集約される。この場合、図１８に示すように、主キーがＸ＝０３、Ｙ＝０１０１，０１０２，０１０３、Ｚ＝０１０１０１の５グループが、キーリストの要素数が最大入力キー数より多くなっている（ステップＳ４２の判断が肯定される）。また、主キーがＸ＝０１，０５の２グループでは、ステップＳ４２の判断が否定され、ステップＳ５０の判断が肯定される。
【００６４】
次いで、４回目の集約では、上述したのと同様に、ステップＳ４４，Ｓ４６、Ｓ４８、Ｓ５２が実行される。これにより、図１９に示すように、Ｍａｐデータが集約される。
【００６５】
次いで、５回目の集約では、図１９に示すように、ステップＳ４２の判断が肯定されるグループ（ａ＜ｂのグループ）が存在しない。一方、ステップＳ５０の判断が肯定されるグループは、主キーがＸ＝０１，０５の２グループである。したがって、５回目の集約では、図２０に示すように、２つのグループに集約されることになる。
【００６６】
この５回目の集約では、上述のようにステップＳ４２が肯定されないため、キー数増加フラグは「０」である。このため、図５のステップＳ１６の判断が否定される。キー数増加フラグが「０」の場合、関連のあるキー群の集約が完了したことを意味するので、キー集約のループ処理（ステップＳ１０〜Ｓ１６）は完了し、図５のステップＳ１８に移行することになる。
【００６７】
ステップＳ１８では、Ｍａｐ処理部１２が、最終集約処理のＭａｐ処理を実行する。具体的には、最後集約処理として、Ｍａｐ処理部１２は、ループの最後のＲｅｄｕｃｅ処理において中間ファイルに出力したＭａｐデータ（図２１（ａ））を入力とし、最終のＭａｐ処理を実行する。このＭａｐ処理では、Ｍａｐ処理部１２は、中間ファイルのＭａｐデータを入力とし、各Ｍａｐデータのキーリストをキーとし、イベントリストを値とした新たなＭａｐデータを作成し、また、元のＭａｐデータを破棄する。なお、「Ｍａｐデータのキーリストをキーとする」とは、キーリストの各キーを羅列して新たなキーを作成することを意味する。すなわち、図２１（ａ）に示すようなＭａｐデータからは、図２１（ｂ）に示すようなキー（主キー）で新たなＭａｐデータが生成される。
【００６８】
次いで、ステップＳ２０では、Ｒｅｄｕｃｅ処理部１４が、ステップＳ１８のＭａｐ処理で作成された新たなＭａｐデータを対象として、最終集約処理のＲｅｄｕｃｅ処理を実行する。Ｒｅｄｕｃｅ処理では、集めたＭａｐデータのイベントリストから全イベントデータを抽出する。これらのイベントデータからイベントの種類やタイムスタンプの情報を抽出し、イベントを時系列に並べれば、各集約グループにつき１つずつのフローインスタンスが完成する。
【００６９】
なお、最終集約で関連するイベントを集約するので、ループ内部の集約においては、イベントの移動は必須ではない。しかし、ループの内部でイベントを移動させ、段階的にイベントを集めた方が、イベントの統計処理等をＲｅｄｕｃｅ処理の内部で段階的に行わせることなどが可能になり、メリットが大きい。
【００７０】
以上の処理により、図５の全処理が終了すると、図２１（ｂ）のように、複数キーのデータを正しく集計することができる。
【００７１】
なお、ステップＳ１８、Ｓ２０の処理は、図２０のように、ステップＳ１８以前の処理で全てのイベント（データ）を正しく集計できるような場合には行わなくてもよい。ただし、実際には、ステップＳ１８、Ｓ２０の処理を行わないと全てのデータを正しく集計できない可能性もあるので、本実施形態では、ステップＳ１８、Ｓ２０の処理を常に行うこととしている。
【００７２】
以上詳細に説明したように、本実施形態によると、複数のキー種で分類された複数のデータを集約する処理サーバ１０が、データ毎に関連するキーを集めたリストであるキーリスト、及び当該キーのうちの１つのキーである主キーを関連付けたＭａｐデータを生成して分散ファイルシステム４０に記憶し、分散ファイルシステム４０を参照して、同一の主キーに関連付けられたマップデータのグループのキーリストを取得し、該取得したキーリストに含まれるキー数の中で最大のキー数（最大入力キー数）と、取得した全てのキーリストをマージした合計キー数と、を比較し、比較の結果、合計キー数の方が大きかった場合に、当該マージしたキーリストに含まれるキーそれぞれを主キーとし、キーリストとしてマージしたキーリストを関連付けた新たなＭａｐデータを、マージしたキーリストに含まれるキーの数分だけ生成して分散ファイルシステム４０に記憶する。これにより、マージしたキーリストを、当該マージしたキーリストに含まれるキー（関連することが確定した複数のキー）それぞれを主キーとするＭａｐデータのグループにコピー配布することができる（ステップＳ４６）。このようにすることで、ＲＤＢ（関係データベース）を用いなくとも、Ｍａｐデータ（特にキーリスト）を参照するのみで、関連するキーを集約することができる。したがって、複数のキー種で分類された複数のデータを集約する際に、性能・スケーラビリティ改善効果を得ることが可能となる。また、新たに生成されるＭａｐデータが、各処理サーバにおいてＲｅｄｕｃｅ処理されるという処理が繰り返されるので、データ集約の漏れをなくすことができる。また、本実施形態では、同一の主キーに関連付けられたキーリストのキー数が増える場合に、マージしたキーリストに含まれるキーそれぞれを主キーとして新たなＭａｐデータが生成されるので、同時に分散実行される集約処理数を大きくすることができる。これにより、少ない回数のMapReduce処理の繰り返しで、関連するキーを集約することができる。
【００７３】
また、本実施形態によると、Ｍａｐデータは、データの内容のリストであるイベントリストを含んでおり、取得したキーリストに含まれるキー数の中で最大のキー数（最大入力キー数）と、取得した全てのキーリストをマージした合計キー数と、を比較した結果、合計キー数の方が大きかった場合に、マージしたキーリストに含まれるキーのうち辞書式に先頭となるキーを主キーとするＭａｐデータを特定し、当該特定されたＭａｐデータのイベントリストにのみデータを関連付ける。これにより、関連するキーの集約及びイベント（データ）の集約を適切に行うことができるので、集約を少ない回数のMapReduce処理の繰り返しで行うことができる。
【００７４】
また、本実施形態によると、合計キー数の方が最大入力キー数よりも大きくなかった場合（合計キー数と最大入力キー数が一致した場合）であって、取得したイベントリストにデータが含まれる場合には、マージしたキーリストのうち辞書式に先頭となるキーを主キーとし、取得したイベントリストをマージしたイベントリスト及びマージしたキーリストが関連付けられた新たなマップデータを生成する。これにより、本実施形態では、データ（イベント）に関連しないＭａｐデータの必要以上の集約処理の発生を抑制することができる。
【００７５】
また、本実施形態によると、分散ファイルシステム４０に記憶されている全ての主キーに関連付けられたグループのキーリストにおいて、合計キー数の方が最大入力キー数よりも大きくなかった場合（合計キー数と最大入力キー数が一致した場合）に、分散ファイルシステム４０に記憶されているキーリストに基づいて一意の値を作成し、当該値を主キーとするＭａｐデータを生成する。これにより、全グループにおいて合計キー数が最大入力キー数よりも大きくなくなるまでの間に全てのデータを正しく集約できなかった場合でも、一意の値を主キーとしてＭａｐデータを生成することで、正しく集約できなかったデータを正しく集約することができる。
【００７６】
ここで、本出願の発明者（及び出願人）は、特願２０１１−０５０７４５号（以下、「先願」と呼ぶ）において、本願と同一の課題を解決するための発明について出願している。本実施形態では、同時に分散実行される集約処理数を大きくすることで、上述したように集約の回数を極力減らすことができる。このため、本実施形態では、特に、多数の処理サーバ１０から構成される処理システムを、あるデータを対象にした単一の集約処理で占有できる場合、あるいは、複数の集約処理を行う場合でも処理システムの性能に余裕がある場合に、最短の処理時間で処理を終えることが可能である。これに対し、先願では、集約の回数は本実施形態に比べて多少多いものの、１回の集約における処理量は少ないので、ある処理システムにおいて複数のデータを対象にした集約処理を同時に実行する場合で、かつ処理システムの性能に余裕が無い場合に、最高のスループット性能を得ることが可能である。すなわち、本実施形態と先願とは、処理システムの規模や、処理システムに対する利用者の数などの条件に応じて適宜使い分けることができる。
【００７７】
なお、上記実施形態では、管理サーバ２０を設ける場合について説明したが、これに限らず、管理サーバ２０と同様の処理を処理サーバ１０のいずれかが行うこととしてもよい。
【００７８】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、処理装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【００７９】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ（Digital Versatile Disc）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）などの可搬型記録媒体の形態で販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【００８０】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【００８１】
上述した実施形態は本発明の好適な実施の例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施可能である。
【００８２】
なお、以上の説明に関して更に以下の付記を開示する。
（付記１）  複数のキー種で分類された複数のデータを集約するコンピュータに、
前記データ毎に関連するキーを集めたリストであるキーリスト、及び当該キーのうちの１つのキーである集約キーを関連付けたマップデータを生成して記憶部に記憶し、
前記記憶部を参照して、同一の集約キーに関連付けられたマップデータのグループのキーリストを取得し、該取得したキーリストに含まれるキー数の中で最大のキー数と、取得した全てのキーリストをマージした合計キー数と、を比較し、
前記比較の結果、前記合計キー数の方が大きかった場合に、当該マージしたキーリストに含まれるキーそれぞれを集約キーとし、キーリストとして前記マージしたキーリストを関連付けた新たなマップデータを、前記マージしたキーリストに含まれるキーの数分だけ生成して前記記憶部に記憶する、処理を実行させることを特徴とする処理プログラム。
（付記２）  前記マップデータは、前記データの内容のリストであるイベントリストを含み、
前記新たなマップデータを生成して記憶する処理では、前記比較の結果、前記合計キー数の方が大きかった場合に、前記マージしたキーリストに含まれるキーのうち辞書式に先頭となるキーを集約キーとするマップデータを特定し、当該特定されたマップデータのイベントリストにのみデータを関連付けることを特徴とする付記１に記載の処理プログラム。
（付記３）  前記比較する処理における比較の結果、前記合計キー数の方が大きくなかった場合であって、前記取得したイベントリストにデータが含まれる場合には、前記マージしたキーリストのうち辞書式に先頭となるキーを集約キーとし、前記取得したイベントリストをマージしたイベントリスト及び前記マージしたキーリストが関連付けられた新たなマップデータを生成し、前記記憶部に記憶することを特徴とする付記１又は２に記載の処理プログラム。
（付記４）  前記比較する処理における比較の結果、前記記憶部に記憶されている全ての集約キーに関連付けられたキーリストにおいて、前記合計キー数の方が大きくなかった場合に、前記記憶部に記憶されているキーリストに基づいて一意の値を作成し、当該値を集約キーとするマップデータを生成する処理、を前記コンピュータに実行させることを特徴とする付記１〜３のいずれかに記載の処理プログラム。
（付記５）  複数のキー種で分類された複数のデータを集約するコンピュータが、
前記データ毎に関連するキーを集めたリストであるキーリスト、及び当該キーのうちの１つのキーである集約キーを関連付けたマップデータを生成して記憶部に記憶する工程と、
前記記憶部を参照して、同一の集約キーに関連付けられたマップデータのグループのキーリストを取得し、該取得したキーリストに含まれるキー数の中で最大のキー数と、取得した全てのキーリストをマージした合計キー数と、を比較する工程と、
前記比較する工程における比較の結果、前記合計キー数の方が大きかった場合に、当該マージしたキーリストに含まれるキーそれぞれを集約キーとし、キーリストとして前記マージしたキーリストを関連付けた新たなマップデータを、前記マージしたキーリストに含まれるキーの数分だけ生成して前記記憶部に記憶する工程と、を実行することを特徴とする処理方法。
（付記６）  前記マップデータは、前記データの内容のリストであるイベントリストを含み、
前記新たなマップデータを生成して記憶する工程では、前記比較の結果、前記合計キー数の方が大きかった場合に、前記マージしたキーリストに含まれるキーのうち辞書式に先頭となるキーを集約キーとするマップデータを特定し、当該特定されたマップデータのイベントリストにのみデータを関連付けることを特徴とする付記５に記載の処理方法。
（付記７）  前記比較する工程における比較の結果、前記合計キー数の方が大きくなかった場合であって、前記取得したイベントリストにデータが含まれる場合には、前記マージしたキーリストのうち辞書式に先頭となるキーを集約キーとし、前記取得したイベントリストをマージしたイベントリスト及び前記マージしたキーリストが関連付けられた新たなマップデータを生成し、前記記憶部に記憶する工程を、前記コンピュータが実行することを特徴とする付記５又は６に記載の処理方法。
（付記８）  前記比較する処理における比較の結果、前記記憶部に記憶されている全ての集約キーに関連付けられたキーリストにおいて、前記合計キー数の方が大きくなかった場合に、前記記憶部に記憶されているキーリストに基づいて一意の値を作成し、当該値を集約キーとするマップデータを生成する工程、を前記コンピュータが実行することを特徴とする付記５〜７のいずれかに記載の処理方法。
（付記９）  複数のキー種で分類された複数のデータを集約する処理装置であって、
前記複数のデータ及び当該複数のデータから生成されるマップデータを記憶する記憶部と、
前記データ毎に関連するキーを集めたリストであるキーリスト、及び当該キーのうちの１つのキーである集約キーを関連付けたマップデータを生成して前記記憶部に記憶する第１生成・記憶部と、
前記記憶部を参照して、同一の集約キーに関連付けられたマップデータのグループのキーリストを取得し、該取得したキーリストに含まれるキー数の中で最大のキー数と、取得した全てのキーリストをマージした合計キー数と、を比較する比較部と、
前記比較する工程における比較の結果、前記合計キー数の方が大きかった場合に、当該マージしたキーリストに含まれるキーそれぞれを集約キーとし、キーリストとして前記マージしたキーリストを関連付けた新たなマップデータを、前記マージしたキーリストに含まれるキーの数分だけ生成して前記記憶部に記憶する第２生成・記憶部と、を備える処理装置。
（付記１０）  前記マップデータは、前記データの内容のリストであるイベントリストを含み、
前記第２生成・記憶部では、前記比較部による比較の結果、前記合計キー数の方が大きかった場合に、前記マージしたキーリストに含まれるキーのうち辞書式に先頭となるキーを集約キーとするマップデータを特定し、当該特定されたマップデータのイベントリストにのみデータを関連付けることを特徴とする付記９に記載の処理装置。
（付記１１）  前記比較部による比較の結果、前記合計キー数の方が大きくなかった場合であって、前記取得したイベントリストにデータが含まれる場合に、前記マージしたキーリストのうち辞書式に先頭となるキーを集約キーとし、前記取得したイベントリストをマージしたイベントリスト及び前記マージしたキーリストが関連付けられた新たなマップデータを生成し、前記記憶部に記憶する第３生成・記憶部を、備える付記９又は１０に記載の処理装置。
（付記１２）  前記比較部による比較の結果、前記記憶部に記憶されている全ての集約キーに関連付けられたキーリストにおいて、前記合計キー数の方が大きくなかった場合に、前記記憶部に記憶されているキーリストに基づいて一意の値を作成し、当該値を集約キーとするマップデータを生成する生成部を備える付記９〜１１のいずれかに記載の処理装置。
【符号の説明】
【００８３】
１０  処理サーバ（コンピュータ、処理装置）
１２  Ｍａｐ処理部（第１生成・記憶部）
１４  Ｒｅｄｕｃｅ処理部（比較部、第２生成・記憶部）
４０  分散ファイルシステム（記憶部）
【図１】
0005637071.tif 000002
【図２】
0005637071.tif 000003
【図３】
0005637071.tif 000004
【図４】
0005637071.tif 000005
【図５】
0005637071.tif 000006
【図６】
0005637071.tif 000007
【図７】
0005637071.tif 000008
【図８】
0005637071.tif 000009
【図９】
0005637071.tif 000010
【図１０】
0005637071.tif 000011
【図１１】
0005637071.tif 000012
【図１２】
0005637071.tif 000013
【図１３】
0005637071.tif 000014
【図１４】
0005637071.tif 000015
【図１５】
0005637071.tif 000016
【図１６】
0005637071.tif 000017
【図１７】
0005637071.tif 000018
【図１８】
0005637071.tif 000019
【図１９】
0005637071.tif 000020
【図２０】
0005637071.tif 000021
【図２１】
0005637071.tif 000022
【図２２】
0005637071.tif 000023
【図２３】
0005637071.tif 000024