(57)【要約】【課題】更新頻度に基づいて、Ｍａｐ−Ｒｅｄｕｃｅ処理において有効にキャッシュを利用することができるキャッシュ構造を提供すること。【解決手段】複数のデータを分散処理するＭａｐ−Ｒｅｄｕｃｅ処理システムにおいて、キャッシュ機構を構築する方法であって、処理対象である複数のデータを、それらデータそれぞれの更新頻度に基づいて、複数のグループに分けるステップと、複数のグループそれぞれを構成するデータの更新頻度であるデータ更新頻度に基づいて、複数のグループそれぞれの更新頻度であるグループ更新頻度を計算するステップと、複数のグループのうち、グループ更新頻度が閾値以下であるグループに対するＭａｐ−Ｒｅｄｕｃｅ処理段階の部分的結果を生成するステップと、生成された部分的結果をキャッシュするステップ、を含む。【選択図】図２
2010092222.tif 000002
【特許請求の範囲】
【請求項１】
Ｍａｐ処理とＲｅｄｕｃｅ処理とを実行し、複数のデータを分散処理するＭａｐ−Ｒｅｄｕｃｅ処理システムにおいて、前記Ｒｅｄｕｃｅ処理のためのキャッシュ機構を構築する方法であって、
前記Ｍａｐ処理の結果に対して前記Ｒｅｄｕｃｅ処理を部分的に実行し、部分的に処理した結果を段階的に処理するＲｅｄｕｃｅＭｅｒｇｅ処理を追加した、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理システムにおいて、
前記複数のデータを、前記複数のデータそれぞれの更新頻度であるデータ更新頻度に基づいて、複数のグループに分類するステップと、
前記複数のグループそれぞれを構成するデータの前記データ更新頻度に基づいて、前記複数のグループそれぞれの更新頻度であるグループ更新頻度を計算するステップと、
前記複数のグループのうち、前記グループ更新頻度が予め設定された前記グループ更新頻度の閾値以下であるグループそれぞれに対して前記Ｍａｐ処理を実行して複数のＭａｐ結果を生成するステップと、
前記複数のＭａｐ結果に対して部分的に前記Ｒｅｄｕｃｅ処理を実行して、複数の部分的Ｒｅｄｕｃｅ結果を生成するステップと、
前記複数の部分的Ｒｅｄｕｃｅ結果に対して前記ＲｅｄｕｃｅＭｅｒｇｅ処理を段階的に実行し、新たな部分的Ｒｅｄｕｃｅ結果を生成するステップと、
前記部分的Ｒｅｄｕｃｅ結果をキャッシュに保存するステップと、
を含む方法。
【請求項２】
更に、前記部分的Ｒｅｄｕｃｅ結果が、キャッシュに保存される際に、前記部分的Ｒｅｄｕｃｅ結果に対応するグループを特定する情報を合わせてキャッシュに保存する、請求項１に記載の方法。
【請求項３】
更に、前記部分的Ｒｅｄｕｃｅ結果に対応するグループの前記グループ更新頻度に基づいて、前記部分的Ｒｅｄｕｃｅ結果の更新頻度である部分更新頻度を計算するステップを含み、
前記部分的Ｒｅｄｕｃｅ結果が、キャッシュに保存される際に、前記部分更新頻度を合わせてキャッシュに保存する、請求項１に記載の方法。
【請求項４】
前記部分的Ｒｅｄｕｃｅ結果を生成するステップは更に、
前記部分的Ｒｅｄｕｃｅ結果を、前記部分更新頻度に基づいて組み合わせ、それぞれに対して前記部分的Ｒｅｄｕｃｅ結果を新たに生成するステップと、
前記部分的Ｒｅｄｕｃｅ結果を新たに生成するステップを、前記部分的Ｒｅｄｕｃｅ結果の組み合わせを作成することができなくなるまで、繰り返すステップと、
を含む請求項３に記載の方法。
【請求項５】
新たな前記部分的Ｒｅｄｕｃｅ結果を生成するステップは、
組み合わせる前記部分的Ｒｅｄｕｃｅ結果の部分更新頻度の和が、予め設定された前記部分更新頻度の閾値以下になるようにし、
前記繰り返すステップは、
前記部分更新頻度の閾値を段階的に高くすることにより、前記部分的Ｒｅｄｕｃｅ結果を新たに生成するステップを繰り返す、請求項４に記載の方法。
【請求項６】
更に、前記複数のデータのうち少なくとも１つのデータが更新されたことに応じて、更新されたデータを含む前記グループを特定するステップと、
特定された前記グループに対応する前記部分的Ｒｅｄｕｃｅ結果のキャッシュを無効化するステップと、
を含む請求項１に記載の方法。
【請求項７】
更に、前記複数のデータのうち少なくとも１つのデータの前記データ更新頻度が、前記複数のデータを前記複数のグループに分けた時と比較して著しく変化したことに応じて、前記データ更新頻度が著しく変化したデータが属するグループを変更するステップと、
前記データ更新頻度が著しく変化したデータが、変更前に含まれていたグループと変更後に含まれていたグループとに対応する前記部分的Ｒｅｄｕｃｅ結果のキャッシュを無効化するステップと、
を含む請求項１に記載の方法。
【請求項８】
更に、前記部分的Ｒｅｄｕｃｅ結果のキャッシュ位置について、インデックスを作成するステップと、
作成された前記インデックスを、前記Ｍａｐ−Ｒｅｄｕｃｅ処理システムを構成するコンピュータのいずれか１つに保存するステップと、
を含む請求項１に記載の方法。
【請求項９】
前記Ｍａｐ結果を生成するステップが、前記複数のグループのうち、前記グループ更新頻度が前記グループ更新頻度の閾値を越えているグループそれぞれに対して前記Ｍａｐ処理を実行して複数のＭａｐ結果を生成する請求項１に記載の方法。
【請求項１０】
更に、前記複数のＭａｐ結果をキャッシュに保存するステップを含む請求項１に記載の方法。
【請求項１１】
Ｍａｐ処理とＲｅｄｕｃｅ処理とを実行し、複数のデータを分散処理するＭａｐ−Ｒｅｄｕｃｅ処理システムにおいて、前記Ｒｅｄｕｃｅ処理のためのキャッシュ機構を構築する方法であって、
前記Ｍａｐ処理の結果に対して前記Ｒｅｄｕｃｅ処理を部分的に実行し、部分的に処理した結果を段階的に処理するＲｅｄｕｃｅＭｅｒｇｅ処理を追加した、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理システムにおいて、
前記複数のデータを、前記複数のデータそれぞれの更新頻度であるデータ更新頻度に基づいて、複数のグループに分けるステップと、
前記複数のグループそれぞれを構成するデータの前記データ更新頻度に基づいて、前記複数のグループそれぞれの更新頻度であるグループ更新頻度を計算するステップと、
前記複数のグループのうち、前記グループ更新頻度が予め設定された前記グループ更新頻度の閾値以下であるグループそれぞれに対して前記Ｍａｐ処理を実行して複数のＭａｐ結果を生成するステップと、
前記複数のＭａｐ結果に対して部分的に前記Ｒｅｄｕｃｅ処理を実行して、複数の部分的Ｒｅｄｕｃｅ結果を生成するステップと、
前記複数の部分的Ｒｅｄｕｃｅ結果に対して前記ＲｅｄｕｃｅＭｅｒｇｅ処理を段階的に実行し、新たな部分的Ｒｅｄｕｃｅ結果を生成するステップと、
前記部分的Ｒｅｄｕｃｅ結果に対応するグループの前記グループ更新頻度に基づいて、前記部分的Ｒｅｄｕｃｅ結果の更新頻度である部分更新頻度を計算するステップと、
前記部分的Ｒｅｄｕｃｅ結果と、前記部分的Ｒｅｄｕｃｅ結果に対応するグループを特定する情報と、前記部分的Ｒｅｄｕｃｅ結果の更新頻度とをキャッシュに保存するステップと、
を含み、
更に、
前記部分的Ｒｅｄｕｃｅ結果と、前記部分的Ｒｅｄｕｃｅ結果に対応するグループを特定する情報と、前記部分的Ｒｅｄｕｃｅ結果の更新頻度とがキャッシュに保存されている際に、
前記複数のデータのうち少なくとも１つのデータが更新されたことに応じて、更新されたデータを含む前記グループを特定するステップと、
特定された前記グループに対応する前記部分的Ｒｅｄｕｃｅ結果のキャッシュを無効化するステップと、
前記複数のデータのうち少なくとも１つのデータの前記データ更新頻度が、前記複数のデータを前記複数のグループに分けた時と比較して著しく変化したことに応じて、前記データ更新頻度が著しく変化したデータが属するグループを変更するステップと、
前記データ更新頻度が著しく変化したデータが、変更前に含まれていたグループと変更後に含まれていたグループとに対応する前記部分的Ｒｅｄｕｃｅ結果のキャッシュを無効化するステップと
を含む方法。
【請求項１２】
Ｍａｐ処理とＲｅｄｕｃｅ処理とを実行し、複数のデータを分散処理するＭａｐ−Ｒｅｄｕｃｅ処理システムにおいて、前記Ｒｅｄｕｃｅ処理のためのキャッシュ機構を構築するプログラムであって、
前記Ｍａｐ処理の結果に対して前記Ｒｅｄｕｃｅ処理を部分的に実行し、部分的に処理した結果を段階的に処理するＲｅｄｕｃｅＭｅｒｇｅ処理を追加した、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理システムにおいて、
前記Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理システムを構成するコンピュータに、
前記複数のデータを、前記複数のデータそれぞれの更新頻度であるデータ更新頻度に基づいて、複数のグループに分けるステップと、
前記複数のグループそれぞれを構成するデータの前記データ更新頻度に基づいて、前記複数のグループそれぞれの更新頻度であるグループ更新頻度を計算するステップと、
前記複数のグループのうち、前記グループ更新頻度が予め設定された前記グループ更新頻度の閾値以下であるグループそれぞれに対して前記Ｍａｐ処理を実行して複数のＭａｐ結果を生成するステップと、
前記複数のＭａｐ結果に対して部分的に前記Ｒｅｄｕｃｅ処理を実行して、複数の部分的Ｒｅｄｕｃｅ結果を生成するステップと、
前記複数の部分的Ｒｅｄｕｃｅ結果に対して前記ＲｅｄｕｃｅＭｅｒｇｅ処理を段階的に実行し、新たな部分的Ｒｅｄｕｃｅ結果を生成するステップと、
前記部分的Ｒｅｄｕｃｅ結果をキャッシュに保存するステップと、
を実行させる、プログラム。
【請求項１３】
Ｍａｐ処理とＲｅｄｕｃｅ処理とを実行し、複数のデータを分散処理するＭａｐ−Ｒｅｄｕｃｅ処理システムにおいて、前記Ｒｅｄｕｃｅ処理のためのキャッシュ機構を構築するシステムであって、
前記Ｍａｐ処理の結果に対して前記Ｒｅｄｕｃｅ処理を部分的に実行し、部分的に処理した結果を段階的に処理するＲｅｄｕｃｅＭｅｒｇｅ処理を追加した、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理システムにおいて、
前記複数のデータを、前記複数のデータそれぞれの更新頻度であるデータ更新頻度に基づいて、複数のグループに分ける分類手段と、
前記複数のグループそれぞれを構成するデータの前記データ更新頻度に基づいて、前記複数のグループそれぞれの更新頻度であるグループ更新頻度を計算する頻度計算手段と、
前記複数のグループのうち、前記グループ更新頻度が予め設定された前記グループ更新頻度の閾値以下であるグループそれぞれに対して前記Ｍａｐ処理を実行して複数のＭａｐ結果を生成するＭａｐ処理手段と、
前記複数のＭａｐ結果に対して部分的に前記Ｒｅｄｕｃｅ処理を実行して、複数の部分的Ｒｅｄｕｃｅ結果を生成するＲｅｄｕｃｅ処理手段と、
前記複数の部分的Ｒｅｄｕｃｅ結果に対して前記ＲｅｄｕｃｅＭｅｒｇｅ処理を段階的に実行し、新たな部分的Ｒｅｄｕｃｅ結果を生成するＲｅｄｕｃｅＭｅｒｇｅ処理手段と、
前記部分的Ｒｅｄｕｃｅ結果をキャッシュに保存するキャッシュ手段と、
を備えるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、更新頻度に基づくキャッシュ機構に関する。特に、本発明は、並列性の高いプログラムを記述可能なＭａｐ−Ｒｅｄｕｃｅプログラミングモデルを拡張したプログラミングモデルに用い得るキャッシュ機構に関する。
【背景技術】
【０００２】
複数サーバに配置されたデータ（ファイル）を処理するための分散プログラミングモデルであるＭａｐ−Ｒｅｄｕｃｅプログラミングモデルが近年利用されてきている（非特許文献１）。Ｍａｐ−Ｒｅｄｕｃｅプログラミングモデルは、任意のデータからキー・値のペアを生成するＭａｐ関数とその中間データから同じキーを持つ値を統合するＲｅｄｕｃｅ関数とからなり、一般に数百台から数千台のパーソナル・コンピュータ（Ｐｅｒｓｏｎａｌ  ｃｏｍｐｕｔｅｒ：ＰＣ）クラスタ上で実行される。このＭａｐ−Ｒｅｄｕｃｅプログラミングモデルを実装したものには、例えば、Ｈａｄｏｏｐというオープンソースのソフトウエアがある（非特許文献２）。
【０００３】
Ｍａｐ−ＲｅｄｕｃｅプログラミングモデルによるＭａｐ−Ｒｅｄｕｃｅ処理は多数のＰＣ上で行なわれるが、その中には、「マスタ（Ｍａｓｔｅｒ）」と「ワーカー（Ｗｏｒｋｅｒ）」という２つのサーバが存在する。マスタは、Ｍａｐ−Ｒｅｄｕｃｅ処理全体の動作を管理し、ワーカーに仕事を割り振る。ワーカーは、マスタの要求に従って、Ｍａｐ関数、または、Ｒｅｄｕｃｅ関数のいずれかを実行する。但し、ワーカーは、Ｍａｐ関数、Ｒｅｄｕｃｅ関数のいずれか一方ではなく、必要に応じていずれの処理も行なえるようになっている。
【０００４】
以下、ワーカーがデータに対してＭａｐ関数を実行することをＭａｐ処理といい、Ｍａｐ処理を行なっているワーカーをＭａｐワーカー（図面においては、ＭａｐＷｏｒｋｅｒと記載）という。同様に、ワーカーがデータに対してＲｅｄｕｃｅ関数を実行することをＲｅｄｕｃｅ処理といい、Ｒｅｄｕｃｅ処理を行なっているワーカーをＲｅｄｕｃｅワーカー（図面においては、ＲｅｄｕｃｅＷｏｒｋｅｒと記載）という。
【０００５】
具体的に、Ｍａｐ処理は、ＭａｐワーカーがＭａｐ関数を利用して、ローカルのデータからマップ型の結果（Ｍａｐ結果）を生成する。Ｒｅｄｕｃｅ処理は、ＲｅｄｕｃｅワーカーがＲｅｄｕｃｅ関数を利用して、全てのＭａｐ結果内の、同じキー値を持つ全ての値から１つの値（Ｒｅｄｕｃｅ結果）を生成する。複数ファイルのワード集計を例に、Ｍａｐ−Ｒｅｄｕｃｅ処理の概要について説明する。図１４は、従来技術に係る、Ｍａｐ−Ｒｅｄｕｃｅ処理概要を示す図である。
【０００６】
まず、Ｍａｐワーカーは、それぞれが担当するファイル内に含まれる、全てのワードの出現回数を生成する（Ｍａｐ処理）。Ｍａｐワーカー１は、ｆｉｌｅ１（ｃａｔ，ｆｏｘ，ｄｏｇ，ｃａｔ）とｆｉｌｅ２（ｆｏｘ，ｆｏｘ，ｆｏｘ，ｒａｔ）との２つのファイルに含まれる、全てのワードの出現回数をＭａｐ結果１０として生成する。同様に、Ｍａｐワーカー２はｆｉｌｅ３とｆｉｌｅ５との２つのファイル、Ｍａｐワーカー３はｆｉｌｅ４の１つのファイル、それぞれに含まれる全てのワードの出現回数をそれぞれＭａｐ結果２０，３０として生成する。すなわち、図１４に示すように、Ｍａｐ結果はワードを「キー」、ワードの出現回数を「値」とするＭａｐ型データとして、Ｍａｐワーカーから生成される。
【０００７】
次に、Ｒｅｄｕｃｅワーカーは、Ｍａｐ結果のキー毎の出現回数を計算し、生成する（Ｒｅｄｕｃｅ処理）。図１４において、Ｒｅｄｕｃｅワーカー１はキー「ｃａｔ」およびキー「ｄｏｇ」、Ｒｅｄｕｃｅワーカー２はキー「ｆｏｘ」およびキー「ｒａｔ」それぞれに関し、Ｒｅｄｕｃｅ処理を行なう。
【０００８】
Ｒｅｄｕｃｅワーカー１は、Ｍａｐ結果１０、２０、３０からキー「ｃａｔ」に対するＭａｐ結果を収集し、そのＭａｐ結果に含まれる値の和をＲｅｄｅｃｅ結果１１として生成する。Ｒｅｄｕｃｅワーカー１は、キー「ｄｏｇ」に関してもキー「ｃａｔ」と同様のＲｅｄｕｃｅ処理を行い、Ｒｅｄｅｃｅ結果１１を生成する。また、Ｒｅｄｕｃｅワーカー２は、キー「ｆｏｘ」およびキー「ｒａｔ」それぞれに関し、Ｒｅｄｕｃｅ処理を行ない、Ｒｅｄｅｃｅ結果２１を生成する。なお、Ｍａｐ結果１０’、２０’、３０’は、Ｍａｐ処理とＲｅｄｕｃｅ処理との間に行なわれる、Ｍａｐ結果内の同じキーの値を集約する、シャッフル（Ｓｈｕｆｆｌｅ）という作業を行なった結果である。このように、Ｍａｐ−Ｒｅｄｕｃｅプログラミングモデルを利用することで、ワード集計のような大量のファイルに対する処理を、並列に処理することが可能となる。その結果として、処理全体を低レイテンシで実現することが可能となる。
【０００９】
【非特許文献１】Jeffrey  Dean  and  Sanjay  Ghemawat、“MapReduce:  Simplified  Data  Processing  on  Large  Clusters”［online］、平成２０年６月３日、［平成２０年８月２６日検索］、インターネット、＜URL：http://labs.google.com/papers/mapreduce-osdi04.pdf＞
【非特許文献２】Hadoop“Welcome  to  Hadoop”、［online］、［平成２０年１０月７日検索］、インターネット、＜URL：http://hadoop.apache.org/core/＞
【発明の開示】
【発明が解決しようとする課題】
【００１０】
Ｍａｐ−Ｒｅｄｕｃｅ処理を効率化するために、Ｍａｐ−Ｒｅｄｕｃｅプログラミングモデルに、ＲｅｄｕｃｅワーカーがＲｅｄｕｃｅ結果を自身のキャッシュに保存する機能を追加し、拡張することが考えられる。つまり、Ｒｅｄｕｃｅ結果を生成したＲｅｄｕｃｅワーカーとなっているサーバ装置のキャッシュに、Ｒｅｄｕｃｅ結果を保存することができる。それにより、同じファイルに対して、Ｍａｐ−Ｒｅｄｕｃｅ処理を定期的に実行する場合に、キャッシュに保存したＲｅｄｕｃｅ結果を利用することが可能となる。
【００１１】
しかし、キャッシュに保存されているＲｅｄｕｃｅ結果は、Ｍａｐ−Ｒｅｄｕｃｅ処理対象のファイルに更新が加わり、Ｍａｐワーカーが生成するＭａｐ結果が更新になると、更新になったＭａｐ結果から得られるＲｅｄｕｃｅ結果と整合性が無く、利用できないため、無効化する必要がある。そのため、Ｒｅｄｕｃｅ結果をキャッシュに保存しても有効に利用できないという問題点がある。
【００１２】
そこで、本発明は上記課題に鑑み、Ｍａｐ−Ｒｅｄｕｃｅプログラミングを、キャッシュを有効活用することができるプログラミングに拡張し、更新頻度に基づく、拡張Ｍａｐ−Ｒｅｄｕｃｅプログラミングモデルの処理におけるキャッシュ機構の構築方法、およびシステムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の１つの態様では、以下のような解決手段を提供する。
【００１４】
本発明の１つの態様によると、Ｍａｐ処理とＲｅｄｕｃｅ処理とを実行し、複数のデータを分散処理するＭａｐ−Ｒｅｄｕｃｅ処理システムにおいて、前記Ｒｅｄｕｃｅ処理のためのキャッシュ機構を構築する方法であって、前記Ｍａｐ処理の結果に対して前記Ｒｅｄｕｃｅ処理を部分的に実行し、部分的に処理した結果を段階的に処理するＲｅｄｕｃｅＭｅｒｇｅ処理を追加した、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理システムにおいて、キャッシュ機構を構築する方法を提供する。キャッシュ機構を構築する方法は、処理対象である複数のデータを、それらデータそれぞれの更新頻度に基づいて、複数のグループに分けるステップと、複数のグループそれぞれを構成するデータの更新頻度であるデータ更新頻度に基づいて、複数のグループそれぞれの更新頻度であるグループ更新頻度を計算するステップと、複数のグループのうち、グループ更新頻度が予め設定されたグループ更新頻度の閾値以下であるグループそれぞれに対してＭａｐ処理を実行して複数のＭａｐ結果を生成するステップと、複数のＭａｐ結果に対して部分的にＲｅｄｕｃｅ処理を実行して、複数の部分的Ｒｅｄｕｃｅ結果を生成するステップと、複数の部分的Ｒｅｄｕｃｅ結果に対してＲｅｄｕｃｅＭｅｒｇｅ処理を段階的に実行し、新たな部分的Ｒｅｄｕｃｅ結果を生成するステップと、生成された部分的Ｒｅｄｕｃｅ結果をキャッシュするステップとを含む。
【００１５】
本態様によると、Ｍａｐ−Ｒｅｄｕｃｅ処理に、ＲｅｄｕｃｅＭｅｒｇｅ処理を追加することにより、一度にＲｅｄｕｃｅ処理をするのではなく、部分的Ｒｅｄｕｃｅ結果を生成し、段階的にＲｅｄｕｃｅ処理を行うようにする。また、Ｍａｐ−Ｒｅｄｕｃｅ処理にＲｅｄｕｃｅＭｅｒｇｅ処理を追加して拡張したＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理において、グループ更新頻度が閾値以下であるグループに対するＲｅｄｕｃｅ処置およびＲｅｄｕｃｅＭｅｒｇｅ処理段階の部分的Ｒｅｄｕｃｅ結果をキャッシュに保存する。すなわち、あまり更新されないデータ群に対するＲｅｄｕｃｅ処置およびＲｅｄｕｃｅＭｅｒｇｅ処理段階の部分的Ｒｅｄｕｃｅ結果をキャッシュに保存することにより、次回のＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理の際に再利用することができる。
【００１６】
ここで、Ｒｅｄｕｃｅ処置およびＲｅｄｕｃｅ−Ｍｅｒｇｅ処理段階の部分的Ｒｅｄｕｃｅ結果とは、処理対象である複数のグループの部分に対するＲｅｄｕｃｅ結果であって、Ｍａｐ−Ｒｅｄｕｃｅ処理において段階的に生成される。例えば、グループＡ、Ｂ、Ｃ、Ｄに対するＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理においては、グループＡ、Ｂ、Ｃ、Ｄの部分であるグループＡ、Ｂ、グループＣ、グループＤ等のＲｅｄｕｃｅ結果が部分的Ｒｅｄｕｃｅ結果である。また、グループＣおよびグループＤそれぞれのＲｅｄｕｃｅ結果（部分的Ｒｅｄｕｃｅ結果）から生成されるグループＣ、ＤのＲｅｄｕｃｅ結果も部分的Ｒｅｄｕｃｅ結果である。
【００１７】
また、本態様は、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理が、複数のグループのうち、グループ更新頻度が閾値以下であるグループを、グループ更新頻度に基づいて組み合わせ、それぞれに対して部分的Ｒｅｄｕｃｅ結果を生成するステップと、部分的Ｒｅｄｕｃｅ結果に対応するグループのグループ更新頻度に基づいて、部分的Ｒｅｄｕｃｅ結果の更新頻度である部分更新頻度を計算するステップと、部分的Ｒｅｄｕｃｅ結果の組み合わせを作成することができなくなるまで、部分的Ｒｅｄｕｃｅ結果を部分更新頻度に応じて組み合わせて、新たな部分的Ｒｅｄｕｃｅ結果を生成するステップと、を含む。
【００１８】
本態様によると、部分更新頻度に基づいて、部分的Ｒｅｄｕｃｅ結果を段階的に生成することができ、それらをキャッシュに保存することにより、キャッシュが有効であって、再利用することができるキャッシュ機構を構築することができる。部分更新頻度に基づいて、段階的に部分的Ｒｅｄｕｃｅ結果を生成することにより、データが更新になった場合に、データ更新による影響を受けない部分的Ｒｅｄｕｃｅ結果のキャッシュをそのまま利用することができる。
【００１９】
ここで、部分更新頻度とは、部分的Ｒｅｄｕｃｅ結果の更新頻度であり、すなわち、処理対象である複数のグループの部分に対するＲｅｄｕｃｅ結果の更新頻度である。また、部分的Ｒｅｄｕｃｅ結果を段階的に生成するとは、例えば、グループＡ、Ｂ、ＣのＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理においては、グループＡの部分的Ｒｅｄｕｃｅ結果、グループＢの部分的Ｒｅｄｕｃｅ結果、グループＣの部分的Ｒｅｄｕｃｅ結果、およびグループＡ、Ｂの部分的Ｒｅｄｕｃｅ結果といった、最終的なグループＡ、Ｂ、ＣのＲｅｄｕｃｅ結果が得られるまでの間の部分的Ｒｅｄｕｃｅ結果を段階的に生成することである。それにより、グループＣが更新された場合であっても、グループＣを含まないグループＡの部分的Ｒｅｄｕｃｅ結果、グループＢの部分的Ｒｅｄｕｃｅ結果、およびグループＡ、Ｂの部分的Ｒｅｄｕｃｅ結果のキャッシュはそのまま利用することができる。
【００２０】
本発明は、分散ファイルシステムのＧＦＳ（Ｇｏｏｇｌｅ（登録商標）  Ｆｉｌｅ  Ｓｙｓｔｅｍ）や大規模分散データベースＢｉｇＴａｂｌｅ等の既存の技術と組み合わせることができ、そのように組み合わせた技術もまた、本発明の技術範囲に含まれる。また、本発明の技法は、キャッシュ機構を構築する方法の諸段階を、ＦＰＧＡ（現場でプログラム可能なゲートアレイ）、ＡＳＩＣ（特定用途向け集積回路）、これらと同等のハードウェアロジック素子、プログラム可能な集積回路、またはこれらの組み合わせが記憶し得るプログラムの形態、すなわちプログラム製品として提供し得る。具体的には、データ入出力、データバス、メモリバス、システムバス等を備えるカスタムＬＳＩ（大規模集積回路）の形態として、本発明に係るキャッシュ機構を構築する方法の実施手段、デバイス、組み込み装置等を提供でき、そのように集積回路に記憶されたプログラム製品の形態も、本発明の技術範囲に含まれる。
【発明の効果】
【００２１】
本発明によれば、Ｍａｐ−Ｒｅｄｕｃｅプログラミングをキャッシュを有効活用することができるように拡張したＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理において、キャッシュを有効活用することにより、従来のＭａｐ−Ｒｅｄｕｃｅ処理と比較し、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理を低レイテンシで実現すること、すなわち、ＣＰＵコスト、通信コストを削減し、処理を効率化することが可能となる、更新頻度に基づく、Ｍａｐ−Ｒｅｄｕｃｅ処理に適用するキャッシュ機構の構築方法、およびシステムを提供することができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の実施形態について図を参照しながら説明する。なお、これらはあくまでも一例であって、本発明の技術的範囲はこれらに限られるものではない。
【００２３】
最初に、従来のＭａｐ−Ｒｅｄｕｃｅ処理において、キャッシュを利用する場合について説明する。上述した図１４のＭａｐ−Ｒｄｅｕｃｅ処理における、Ｒｅｄｕｃｅ結果のキャッシュ方法について、図１５を用いて説明する。
【００２４】
図１５は、従来技術に係る、Ｍａｐ−Ｒｅｄｕｃｅ処理における、Ｒｅｄｕｃｅ結果のキャッシュ例を示す図である。Ｒｅｄｕｃｅワーカー１は、キー「ｄｏｇ」およびキー「ｃａｔ」に関してＲｅｄｕｃｅ処理を行い、Ｒｅｄｕｃｅ結果１１を生成するとともに、Ｒｅｄｕｃｅワーカー１のキャッシュ（図面においては、Ｃａｃｈｅと記載）１にＲｅｄｕｃｅ結果１１を保存する。同様に、Ｒｅｄｕｃｅワーカー２は、キー「ｆｏｘ」およびキー「ｒａｔ」のＲｅｄｕｃｅ処理を行い、Ｒｅｄｕｃｅ結果２１を生成するとともに、Ｒｅｄｕｃｅワーカー２のキャッシュ２にＲｅｄｕｃｅ結果２１を保存する。
【００２５】
このようにすることで、同じファイルに対する、２回目以降のキー「ｄｏｇ」、キー「ｃａｔ」、キー「ｆｏｘ」、およびキー「ｒａｔ」に関するＲｅｄｕｃｅ結果はキャッシュ１、２から取得することができる。すなわち、２回目以降のＭａｐ処理とＲｅｄｕｃｅ処理とを省略することができ、ＣＰＵコスト、通信コストを削減することが可能となる。
【００２６】
しかし、キャッシュに保存されているＲｅｄｕｃｅ結果は、Ｍａｐ−Ｒｅｄｕｃｅ処理対象のファイルに更新が加わり、Ｍａｐワーカーが生成するＭａｐ結果が更新になると、更新になったＭａｐ結果から得られるＲｅｄｕｃｅ結果と整合性が無く、利用できないため、無効化する必要がある。そのため、Ｒｅｄｕｃｅ結果をキャッシュに保存しても有効に利用できないという問題点がある。上述した図１５に示したＲｅｄｕｃｅ結果をキャッシュに保存したＭａｐ−Ｒｅｄｕｃｅ処理において、Ｍａｐ結果が更新になった場合について、図１６を用いて説明する。
【００２７】
図１６は、従来技術に係る、キャッシュに保存されているＲｅｄｕｃｅ結果の利用時における、ファイル更新を示す図である。図１５から図１６への変更箇所は太字にて示す。図１６に示すｆｉｌｅ１のｆｏｘがｄｏｇに更新された場合、ｆｉｌｅ１を担当するＭａｐワーカー１のＭａｐ結果１０が更新され、更新されたワード「ｆｏｘ」および「ｄｏｇ」のＲｅｄｕｃｅ結果１１、２１は更新される。
【００２８】
すなわち、更新されたワード「ｆｏｘ」と「ｄｏｇ」とに関して、Ｒｅｄｕｃｅワーカー１、２のキャッシュに保存した値と異なるＲｅｄｕｃｅ結果となるため、Ｒｅｄｕｃｅワーカー１、２は再度Ｒｅｄｕｃｅ処理をやり直すこととなり、Ｒｅｄｕｃｅワーカー１、２のキャッシュに保存した値を利用することはできない。このように、Ｍａｐ結果、すなわち、ファイルに更新が加わると、キャッシュに保存されているＲｅｄｕｃｅ結果は利用できず、無効化されてしまう。
【００２９】
図１７は、従来技術に係る、実際のＭａｐ−Ｒｅｄｕｃｅ処理を示す図である。図１４から１７を用いて、１つのＭａｐワーカーが処理するファイルは１または２つとしてＭａｐ−Ｒｅｄｕｃｅ処理の概要について説明したが、実際のＭａｐ−Ｒｅｄｕｃｅ処理においては、図１７に示すように１つのＭａｐワーカーは大量のファイルを処理する。そのため、ファイルの更新は頻繁に行われ、Ｒｅｄｕｃｅワーカーのキャッシュは頻繁に無効化される。その結果、Ｍａｐ−Ｒｅｄｕｃｅ処理において、Ｒｅｄｕｃｅ結果をキャッシュしても有効に利用することはできない。
【００３０】
次に、従来のＭａｐ−Ｒｅｄｕｃｅ処理においてキャッシュを有効に利用できないという問題点を解決する本発明の一実施形態について説明する。本発明の一実施形態においては、Ｍａｐ−Ｒｅｄｕｃｅ処理にＲｅｄｕｃｅＭｅｒｇｅ処理を追加し、Ｍａｐ−Ｒｅｄｕｃｅ処理を拡張したＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理を用いることで、キャッシュを有効に利用することができるキャッシュ機構を構築する。Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理は、Ｍａｐ−Ｒｅｄｕｃｅ処理とほぼ同等の機能を実現可能である。
【００３１】
Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理は、Ｍａｐ処理と、Ｒｅｄｕｃｅ処理と、ＲｅｄｕｃｅＭｅｒｇｅ処理とからなる。背景技術にて説明したように、Ｍａｐ処理は、複数のファイルにＭａｐ関数を適用してＭａｐ結果を生成し、Ｒｅｄｕｃｅ処理は、Ｍａｐ結果にＲｅｄｕｃｅ関数を適用してＲｅｄｕｃｅ結果（部分的Ｒｅｄｕｃｅ結果）を生成する。
【００３２】
ＲｅｄｕｃｅＭｅｒｇｅ処理は、同一キーに対する複数のＲｅｄｕｃｅ結果にＲｅｄｕｃｅＭｅｒｇｅ関数を適用して、新たなＲｅｄｕｃｅ結果（部分的Ｒｅｄｕｃｅ結果）を生成する。なお、ＲｅｄｕｃｅＭｅｒｇｅ処理は、全Ｍａｐ結果がＲｅｄｕｃｅ結果に反映された時点で、すなわち、処理対象である全ファイルに対するＲｅｄｕｃｅ結果が生成された時点で処理を終了する。ＲｅｄｕｃｅＭｅｒｇｅ処理はワーカーが行い、ＲｅｄｕｃｅＭｅｒｇｅ処理を行なっているワーカーをＲｅｄｕｃｅＭｅｒｇｅワーカーという。
【００３３】
ＲｅｄｕｃｅＭｅｒｇｅ関数とは、同じキーに対する複数のＲｅｄｕｃｅ結果をマージして、新たな１つのＲｅｄｕｃｅ結果を生成する関数である。ＲｅｄｕｃｅＭｅｒｇｅ関数の入力はＲｅｄｕｃｅ処理またはＲｅｄｕｃｅＭｅｒｇｅ処理により生成されたＲｅｄｕｃｅ結果である。
【００３４】
すなわち、ＲｅｄｕｃｅＭｅｒｇｅ処理により、Ｒｅｄｕｃｅ処理またはＲｅｄｕｃｅＭｅｒｇｅ処理により生成された同じキーに対する複数のＲｅｄｕｃｅ結果は段階的にマージされ、最終的に、キー毎に処理対象である全ファイルに対する１つのＲｅｄｕｃｅ結果が生成される。図１を用いて、ＲｅｄｕｃｅＭｅｒｇｅ処理について具体的に説明する。
【００３５】
図１は、本発明の一実施形態に係る、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理例を示す図である。本例において、Ｍａｐワーカーは、ファイルを更新頻度に分けて処理しないとする。Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理の場合も、従来のＭａｐ−Ｒｅｄｕｃｅ処理と同様、まず、入力された複数のファイル（ＩＤ＝１から３００００）から、ＭａｐワーカーとＲｅｄｕｃｅワーカーとによりＲｅｄｕｃｅ結果２００、２０１、２０２が生成される。
【００３６】
ＲｅｄｕｃｅＭｅｒｇｅワーカー（図面においては、ＲｅｄｕｃｅＭｅｒｇｅＷｏｒｋｅｒと記載）１は、Ｒｅｄｕｃｅ結果２００、２０１にＲｅｄｕｃｅＭｅｒｇｅ関数を適用し、新たなＲｅｄｕｃｅ結果２１０を生成する。更に、ＲｅｄｕｃｅＭｅｒｇｅワーカー２は、Ｒｅｄｕｃｅ結果２０２、２１０にＲｅｄｕｃｅＭｅｒｇｅ関数を適用し、新たなＲｅｄｕｃｅ結果２２０を生成する。
【００３７】
上述したように、ＲｅｄｕｃｅＭｅｒｇｅワーカーが、Ｒｅｄｕｃｅ結果を段階的にマージすることにより、処理対象であるファイルに対する部分的Ｒｅｄｕｃｅ結果を生成することができる。この部分的Ｒｅｄｕｃｅ結果をキャッシュに保存することにより、キャッシュを有効に利用することができるキャッシュ機構を構築することができる。すなわち、従来のＭａｐ−Ｒｅｄｕｃｅ処理においては一度で行われていたＲｅｄｕｃｅ処理を、本発明の一実施形態に係る、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理においては、部分的Ｒｅｄｕｃｅ結果を生成し，段階的にＲｅｄｕｃｅ処理を行うことにより、従来のＲｅｄｕｃｅ処理ではできなかった、キャッシュを有効に利用することができるキャッシュ機構を構築できる処理とすることができる。
【００３８】
本発明の一実施形態に係る、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理におけるキャッシュ機構の構築方法には、大きく分けて３つの方法が含まれ、最初のＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理の際にキャッシュを生成する方法（キャッシュ生成方法）と、既にキャッシュが生成されているＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理において、データが更新された際にキャッシュを無効化する方法（キャッシュ無効化方法）と、キャッシュを利用してＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理を行う方法（キャッシュ再利用方法）と、がある。以下、それぞれの方法について説明する。
【００３９】
なお、本発明の一実施形態において、キャッシュとは、サーバ内でデータやプログラムを記憶する記憶手段である、ＲＡＭやＲＯＭ等の半導体媒体、ハードディスク、デバイスドライバによりＯＳが割り当てた磁気媒体・電気媒体等である。
【００４０】
図２に、本発明の一実施形態に係る、キャッシュ生成方法を示すフローチャートである。図２に示すキャッシュ生成方法により生成されたキャッシュを用いることにより、２回目以降のＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理の一部を減らすことができる。
【００４１】
Ｓ１０：Ｍａｐワーカーが、担当するファイル（データ）を、ファイルのファイル更新頻度（データ更新頻度）毎にグループ分けをする。ステップＳ１０の処理について、ＩＤ＝１からＩＤ＝８までのファイルをファイル更新頻度毎にグループ分けする場合を例として、具体的に、説明する。
【００４２】
図３は、本発明の一実施形態に係る、ファイルのグループ分け例を示す図である。図３の例は、あるＭａｐワーカーが担当するＩＤ＝１からＩＤ＝８までのファイルを、ファイル更新頻度の高いグループＡとファイル更新頻度の低いグループＢとの２種類のグループ（Ｈｉｇｈ、Ｌｏｗ）に分類した場合である。各ファイルのファイル更新頻度は、一定時間における更新回数にて表し、例えば、１０秒に１回更新される場合には、１／１０とする。
【００４３】
図３には、各ファイル対し、ファイル内容、ＩＤ、およびファイル更新頻度を一まとまりとして表している。ここで、グループＡとグループＢのファイル更新頻度の閾値を１／１５０とすると、ファイル更新頻度が１／１５０以上であるファイル、ＩＤ＝１，２，５，８はグループＡに分けられる。一方、ファイル更新頻度が１／１５０以下であるファイル、ＩＤ＝３，４，６，７はグループＢに分けられる。なお、ファイル更新頻度の閾値は任意であり、ファイル更新頻度を変えてテストし、キャッシュを有効に利用できる最適な値を見つけてもよい。
【００４４】
図２に戻って、
Ｓ２０：Ｍａｐワーカーは、ステップＳ１０にて分けたグループ毎のグループ更新頻度を計算する。
【００４５】
例えば、上述した図３のグループＡのグループ更新頻度を計算する場合、グループＡを構成するＩＤ＝１、２、５、８それぞれのファイル更新頻度を加算する。すなわち、１／１０（ＩＤ＝１）＋３／２０（ＩＤ＝２）＋１／５（ＩＤ＝５）＋１／４０（ＩＤ＝８）＝１９／４０が、グループＡのグループ更新頻度となる。
【００４６】
Ｓ３０：Ｍａｐワーカーは、グループ毎にＭａｐ関数を適用し、それぞれについてＭａｐ結果を生成するとともに、対応するグループのグループ更新頻度を、Ｍａｐ結果の更新頻度とする。すなわち、ステップＳ２０にて計算されたグループ毎のグループ更新頻度が、対応するＭａｐ結果の更新頻度となる。図４を用いて、ステップＳ３０の処理について具体的に説明する。
【００４７】
図４は、本発明の一実施形態に係る、Ｍａｐワーカーの処理例を示す図である。図４の例は、ＩＤ＝１からＩＤ＝３００００までのファイルをＡからＦの６グループに分け、それぞれのグループについてＭａｐ関数を適用した場合である。なお、図４以下、説明省略のため、キー「ｄｏｇ」のＲｅｄｕｃｅ結果を求めるための記述とする。
【００４８】
グループＡはＩＤ＝１からＩＤ＝１００００までのファイルのうち、所定の閾値よりも更新頻度が高いファイルのグループであり、一方、グループＢは所定の閾値よりも更新頻度の低いファイルのグループである。同様に、Ｃ、ＤグループはＩＤ＝１０００１からＩＤ＝２００００までのファイル、Ｅ、ＦグループはＩＤ＝２０００１からＩＤ＝３００００までのファイルを所定の閾値よりも更新頻度が高いか低いかによって分けられたグループである。
【００４９】
Ｍａｐワーカー１は、グループＡにＭａｐ関数を適用し、Ｍａｐ結果１００を生成する。グループＡのグループ更新頻度が１／８であるとき、Ｍａｐ結果１００はＡグループのグループ更新頻度を引き継ぎ、１／８となる。同様に、Ｍａｐワーカー１は、グループＢに対してもＭａｐ関数を適用し、Ｍａｐ結果１０１を生成する。Ｍａｐ結果１０１はグループＢのグループ更新頻度を引き継ぎ、１／１０００となる。ＣからＦグループについても同様に、グループ毎にＭａｐ結果が生成され、合わせて、Ｍａｐ結果の更新頻度が決定される。
【００５０】
このように、Ｍａｐワーカーにて生成されたＭａｐ結果は、対応するグループのグループ更新頻度に基づいて、更新頻度が決定される。
【００５１】
図２に戻って、
Ｓ４０：Ｒｅｄｕｃｅワーカーは、１以上のＭａｐ結果に対し、Ｒｅｄｕｃｅ関数を適用し、Ｒｅｄｕｃｅ結果を生成する。ただし、複数のＲｅｄｕｃｅワーカーによって、全Ｍａｐ結果、つまり全グループからＲｅｄｕｃｅ結果が生成される。
【００５２】
Ｓ５０：Ｒｅｄｕｃｅワーカーは、ステップＳ４０にて生成したＲｅｄｕｃｅ結果をキャッシュに保存する。なお、複数のＲｅｄｕｃｅワーカーそれぞれのキャッシュには、各Ｒｅｄｕｃｅワーカーが生成したＲｅｄｕｃｅ結果が保存される。また、Ｒｅｄｕｃｅワーカーは、キャッシュにＲｅｄｕｃｅ結果の元データであるグループの名前を元データ情報として保存する。更に、Ｒｅｄｕｃｅワーカーは、生成したＲｅｄｕｃｅ結果の更新頻度をその元データとなっているグループのグループ更新頻度の和として求めることができ、キャッシュにＲｅｄｕｃｅ結果の更新頻度を保存する。図５を用いて、ステップＳ４０の処理について具体的に説明する。
【００５３】
図５は、本発明の一実施形態に係る、Ｒｅｄｕｃｅワーカーによる処理例を示す図である。図５の例は、ＡからＦの６グループから得られたＲｅｄｕｃｅ結果が各Ｒｅｄｕｃｅワーカーのキャッシュに保存される場合である。
【００５４】
Ｒｅｄｕｃｅワーカー１は、Ｍａｐ結果１００を用いて得られたＲｅｄｕｃｅ結果１１０をキャッシュ１に保存する。また、Ｒｅｄｕｃｅワーカー１は、Ｒｅｄｕｃｅ結果１１０の元データであるＡグループを元データ情報としてキャッシュ１に保存する。Ｒｅｄｕｃｅ結果１１０の入力データであるＭａｐ結果１００は、Ａグループから得られた値だからである。また、Ｒｅｄｕｃｅワーカー１は、Ｒｅｄｕｃｅ結果１１０の元データであるＡグループのグループ更新頻度１／８を、Ｒｅｄｕｃｅ結果１１０の更新頻度としてキャッシュ１に保存する。Ｒｅｄｕｃｅ結果１１０の更新頻度は入力データであるＭａｐ結果１００の更新頻度であり、Ｍａｐ結果１０１の更新頻度はＡグループのグループ更新頻度だからである。
【００５５】
Ｒｅｄｕｃｅワーカー２は、Ｍａｐ結果１０１、１０３、１０５を用いて得られたＲｅｄｕｃｅ結果１１１をキャッシュ２に保存する。また、Ｒｅｄｕｃｅワーカー２は、Ｒｅｄｕｃｅ結果１１１の元データがＢ、Ｄ、Ｆグループであること元データ情報としてキャッシュ２に保存する。Ｒｅｄｕｃｅ結果１１１の入力データであるＭａｐ結果１０１、１０３、１０５それぞれはＢ、Ｄ、Ｆグループそれぞれから得られた値だからである。
【００５６】
また、Ｒｅｄｕｃｅワーカー２は、Ｒｅｄｕｃｅ結果１１１の元データであるＢ、Ｄ、Ｆグループの更新頻度の和１／１０００＋１／２０００＋１／４０００＝７／４０００を、Ｒｅｄｕｃｅ結果１１１の更新頻度としてキャッシュ２に保存する。Ｒｅｄｕｃｅ結果１１１の更新頻度は入力データであるＭａｐ結果１０１、１０３、１０５の更新頻度の和であり、Ｍａｐ結果１０１、１０３、１０５それぞれはＢ、Ｄ、Ｆグループそれぞれの更新頻度だからである。
【００５７】
なお、上述したＲｅｄｕｃｅワーカー２のように、Ｒｅｄｕｃｅワーカーが複数のＭａｐ結果に対して、Ｒｅｄｕｃｅ関数を適用する場合には、更新頻度が高くならないようにＭａｐ結果を選択する。Ｒｅｄｕｃｅワーカーのキャッシュを有効に利用するためである。更新頻度が高くならないようにＭａｐ結果を選択する方法については、図１１および１２を用いて後述する。
【００５８】
図２に戻って、
Ｓ６０：ＲｅｄｕｃｅＭｅｒｇｅワーカーは、複数のＲｅｄｕｃｅワーカーが生成したＲｅｄｕｃｅ結果に対し、ＲｅｄｕｃｅＭｅｒｇｅ関数を適用し、新たなＲｅｄｕｃｅ結果を生成する。
【００５９】
Ｓ７０：ＲｅｄｕｃｅＭｅｒｇｅワーカーは、ステップＳ６０にて生成したＲｅｄｕｃｅ結果をキャッシュに保存する。また、ＲｅｄｕｃｅＭｅｒｇｅワーカーは、キャッシュにＲｅｄｕｃｅ結果の元データであるグループの名前を元データ情報として保存する。更に、ＲｅｄｕｃｅＭｅｒｇｅワーカーは、生成したＲｅｄｕｃｅ結果の更新頻度をその元データとなっているグループのグループ更新頻度の和として求めることができ、キャッシュにＲｅｄｕｃｅ結果の更新頻度を保存する。
【００６０】
Ｓ８０：マスタは、全てのグループのＲｅｄｕｃｅ結果をマージしたか判断し、ＹＥＳの場合には、処理を終了する。一方、ＮＯの場合には、ステップＳ６０へ戻る。なお、ステップＳ８０の全てのグループのＲｅｄｕｃｅ結果をマージしたか判断は、ＲｅｄｕｃｅＭｅｒｇｅワーカーが行ってもよい。図６を用いて、ステップＳ６０からＳ８０までの処理について具体的に説明する。
【００６１】
図６は、本発明の一実施形態に係る、ＲｅｄｕｃｅＭｅｒｇｅワーカーによる処理例を示す図である。なお、図５に示したＲｅｄｕｃｅワーカーの処理例の続きである。ＲｅｄｕｃｅＭｅｒｇｅワーカーは、複数のＲｅｄｕｃｅ結果に対し、ＲｅｄｕｃｅＭｅｒｇｅ関数を適用し、最終的に全てのグループを含むＲｅｄｕｃｅ結果を生成する。ＲｅｄｕｃｅＭｅｒｇｅワーカー１は、Ｒｅｄｕｃｅワーカー１が生成したＲｅｄｕｃｅ結果１１０と、Ｒｅｄｕｃｅワーカー２が生成したＲｅｄｕｃｅ結果１１１とにＲｅｄｕｃｅＭｅｒｇｅ関数を適用し、Ｒｅｄｕｃｅ結果１２０を生成する。ＲｅｄｕｃｅＭｅｒｇｅワーカー１は、Ｒｅｄｕｃｅ結果１２０をキャッシュ１１に保存する。
【００６２】
また、キャッシュ１１には、ＲｅｄｕｃｅＭｅｒｇｅワーカー１は、Ｒｅｄｕｃｅ結果１２０の元データがＡ、Ｂ、Ｄ、Ｆグループであることが合わせて保存される。Ｒｅｄｕｃｅ結果１２０は、Ａグループを元データとするＲｅｄｕｃｅ結果１１０と、Ｂ、Ｄ、Ｆグループを元データとするＲｅｄｕｃｅ結果１１１とから生成されるので、Ａ、Ｂ、Ｄ、ＦグループがＲｅｄｕｃｅ結果１２０の元データであるからである。
【００６３】
更に、キャッシュ１１には、Ｒｅｄｕｃｅ結果１２０の更新頻度が保存される。Ｒｅｄｕｃｅ結果１２０の更新頻度は、Ｒｅｄｕｃｅ結果１１０の更新頻度１／８とＲｅｄｕｃｅ結果１１１の更新頻度７／４０００との和であり、１／８＋７／４０００＝５０７／４０００である。なお、Ｒｅｄｕｃｅ結果１２０の更新頻度は元データであるＡ、Ｂ、Ｄ、Ｆグループの更新頻度の和である。
【００６４】
更に、ＲｅｄｕｃｅＭｅｒｇｅワーカー２は、Ｒｅｄｕｃｅワーカー３が生成したＲｅｄｕｃｅ結果１１２と、ＲｅｄｕｃｅＭｅｒｇｅワーカー１が生成したＲｅｄｕｃｅ結果１２０とにＲｅｄｕｃｅＭｅｒｇｅ関数を適用し、Ｒｅｄｕｃｅ結果１３０を生成する。また、ＲｅｄｕｃｅＭｅｒｇｅワーカー２は、Ｒｅｄｕｃｅ結果１３０をキャッシュ２１に保存する。
【００６５】
このように、ＲｅｄｕｃｅＭｅｒｇｅワーカーは、他のＲｅｄｕｃｅＭｅｒｇｅワーカーにて生成されたＲｅｄｕｃｅ結果に対しても、Ｒｅｄｕｃｅ関数を適用することができ、最終的に全てのグループを含むＲｅｄｕｃｅ結果を生成がされるまで、ＲｅｄｕｃｅＭｅｒｇｅワーカーの処理は続く。つまり、複数のグループの部分的なＲｅｄｕｃｅ結果が複数生成され最終的にそれらがまとめられ、１つのＲｅｄｕｃｅ結果が生成される。このようにＲｅｄｕｃｅＭｅｒｇｅワーカーは、Ｒｅｄｕｃｅ結果を段階的に生成し、それらをキャッシュに保存する。
【００６６】
このように段階的に生成されたＲｅｄｕｃｅ結果それぞれをキャッシュに保存することにより、段階的なキャッシュ機構を構築することができる。その結果、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理においてキャッシュを有効に利用することができる。すなわち、ＲｅｄｕｃｅＭｅｒｇｅ処理をＭａｐ−Ｒｅｄｕｃｅ処理に加えることにより、キャッシュの効きやすいＭａｐ−Ｒｅｄｕｃｅ処理に拡張することができる。
【００６７】
キャッシュ機構を構築するシステムにおける各手段について、図２に示したキャッシュ生成処理フローを用いて説明する。分類手段は、処理対象であるファイルを受信すると、図２のステップＳ１０の処理を行う。頻度計算手段はファイルそれぞれの更新頻度を受信し、図２のステップＳ２０の処理を行う。結果生成手段は、分類手段にて分類されたグループを受信し、グループ毎に図２のステップＳ３０からＳ４０の処理を行う。キャッシュ手段は、結果生成手段にて作成されたＲｅｄｕｃｅ結果を受信し、図２のステップＳ５０の処理を行う。
【００６８】
また、結果生成手段は、結果生成手段にて作成されたＲｅｄｕｃｅ結果を受信し、図２のステップＳ６０の処理により、新たなＲｅｄｕｃｅ結果を生成することもできる。更に、キャッシュ手段は、結果生成手段にて新たに作成されたＲｅｄｕｃｅ結果を受信し、図２のステップＳ７０の処理を行う。
【００６９】
次に、上述したキャッシュ生成処理にて構築されたキャッシュ機構をファイルが更新された際に一部無効化するキャッシュ無効化方法について説明する。図７は、本発明の一実施形態に係る、キャッシュ無効化処理を示すフローチャートである。なお、キャッシュ無効化処理は、Ｍａｐワーカーが行っても、マスタが行ってもよい。以下、マスタがキャッシュ無効化処理を行う場合について説明する。
【００７０】
Ｓ１００：マスタは、ファイルの更新を検知する。具体的には、マスタは、ロボットやクローラと呼ばれるプログラムを常駐させ、ファイルの更新を検知する。
【００７１】
Ｓ１１０：マスタは、ステップＳ１００で検知した、更新されたファイルを含むグループを特定する。
【００７２】
Ｓ１２０：マスタは、ステップＳ１１０で特定したグループを元データの１つとして生成されたＲｅｄｕｃｅ結果のキャッシュを全て無効化する。具体的には、マスタは、ステップＳ１１０で特定したグループを、元データ情報に含むキャッシュを検索し、ステップＳ１１０で特定したグループを元データ情報に含むキャッシュを検知するとキャッシュを無効化する。
【００７３】
図８は、本発明の一実施形態に係る、キャッシュ無効化例を示す図である。図８を用いて、上述したキャッシュ無効化方法について、具体的に説明する。なお、図８は図５と図６とをマージした図である。
【００７４】
グループＣの内のファイルが更新されたとする。更新箇所は太字で表す。まず、マスタはファイルが更新されたことを検知し、更新されたファイルが含まれるグループ、ここではグループＣを特定する。マスタはファイルが更新されたグループがグループＣであることに基づいて、元データ情報にグループＣを含むキャッシュ３およびキャッシュ２１を無効化する。
【００７５】
また、個別ファイルの更新頻度が、そのファイルが属するグループ（Ｈｉｇｈ、またはＬｏｗ）の更新頻度の閾値よりも大きくなった場合、以下の手順によりグループの再構成とキャッシュの無効化を行う。
【００７６】
図９は、本発明の一実施形態に係る、グループ再構成によるキャッシュ無効化の例を示す図である。図９のグループＡ、Ｂのうち、Ｂにあるデータが頻繁に更新されている場合について説明する。
【００７７】
まず、マスタは、頻繁に更新されているファイルを特定する。頻繁に更新されているか否かは、ファイル更新頻度が、ファイルをグループ分けした時の閾値を越えたか否かで判断する。マスタは特定したファイルの移動元のグループと移動先のグループとの情報を取得する。本例において、マスタは特定したファイルはグループＢに含まれているので、移動元のグループはグループＢである。グループＢに対応するファイル更新頻度の高いグループはグループＡであるので、移動先のグループはＡグループである。
【００７８】
マスタは取得した情報に基づいて、キャッシュを無効化する。本例において、マスタは、グループＡ、Ｂを元データ情報に含むキャッシュ１、２、１１、２１を無効化する。ただし、この際、Ａ、Ｂ以外のグループに由来するキャッシュ３はそのまま保持される。
【００７９】
次に、マスタは、特定したデータを移動元のグループであるグループＢから、移動先のグループであるグループＡに移す。
【００８０】
更新頻度の低いファイルをＡからＢに移す場合も同様の手順により行える。なお、ファイルは同じサーバの中でグループを移動されるだけなので、サーバ間のスプリッティングの状況には変化がない。また、本例では、たくさんのキャッシュが無効化されてしまっているように見えるが、実際にはキャッシュの数はもっと多く、無効化は局所的である。
【００８１】
次に、上述したキャッシュ生成方法およびキャッシュ無効化方法にて構築されたキャッシュ機構を利用したキャッシュ再利用方法について説明する。
【００８２】
図１０は、本発明の一実施形態に係る、キャッシュ機構を利用したＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理を示すフローチャートである。
【００８３】
Ｓ２００：マスタは、全ての有効なキャッシュを検索し、全グループのＲｅｄｕｃｅ結果が含まれるようにキャッシュを選択する。ただし、グループはかぶらないようにする必要がある。
【００８４】
Ｓ２１０：マスタは、選択された１以上のキャッシュの中に含まれないグループを担当するＭａｐワーカーに対し、Ｍａｐ処理を依頼する。
【００８５】
Ｓ２２０：Ｒｅｄｕｃｅワーカーは、ステップＳ２１０でマスタからＭａｐ処理を依頼されたＭａｐワーカーが作成したＭａｐ結果に基づいて、Ｒｅｄｕｃｅ結果を生成する。
【００８６】
Ｓ２３０：ステップＳ２００でマスタが選択したキャッシュのＲｅｄｕｃｅ結果と、ステップＳ２２０でＲｅｄｕｃｅワーカーが生成したＲｅｄｕｃｅ結果に対し、ＲｅｄｕｃｅＭｅｒｇｅ処理を行い、最終的なＲｅｄｕｃｅ結果を生成する。
【００８７】
図１１は、本発明の一実施形態に係る、キャッシュ機構を利用したＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理例を示す図である。例えば、キャッシュが図１１のようになっている場合、ＲｅｄｕｃｅＭｅｒｇｅワーカー１のキャッシュ１１は、Ｒｅｄｕｃｅワーカー１のキャッシュ１とＲｅｄｕｃｅワーカー２のキャッシュ２とを含んでいる。この場合、グループＡ、Ｂ、Ｄ、ＦのＲｅｄｕｓｅ結果のキャッシュとして、ＲｅｄｕｃｅＭｅｒｇｅワーカー１のキャッシュ１１、もしくは、Ｒｅｄｕｃｅワーカー１とＲｅｄｕｃｅワーカー２のそれぞれのキャッシュ１、２が選択される。図１１では、ＲｅｄｕｃｅＭｅｒｇｅワーカー１のキャッシュ１１を選択する。
【００８８】
次に、選択したキャッシュに含まれないグループに対して、ＭａｐワーカーがＭａｐ関数を適用し、Ｍａｐ結果を生成する。ＲｅｄｕｃｅＭｅｒｇｅワーカー１のキャッシュ１１には、グループＣ、Ｅを元データに含まないＲｅｄｕｃｅ結果が保存されているため、Ｍａｐワーカー２、３はＭａｐ関数を適用し、グループＣ、ＥそれぞれのＭａｐ結果１２、１４を生成する。
【００８９】
次に、Ｍａｐワーカーが生成したＭａｐ結果から、ＲｅｄｕｃｅワーカーがＲｅｄｕｃｅ結果を生成する。図１１では、Ｒｅｄｕｃｅワーカー３がＭａｐ結果１２、１４からＲｅｄｕｃｅ結果１１２を生成する。
【００９０】
最後に、選択したキャッシュのＲｅｄｕｃｅ結果と、Ｒｅｄｕｃｅワーカーが生成したＲｅｄｕｃｅ結果に対し、ＲｅｄｕｃｅＭｅｒｇｅ処理を行い、最終的なＲｅｄｕｃｅ結果を生成する。図１１では、ＲｅｄｕｃｅＭｅｒｇｅワーカー２が、ＲｅｄｕｃｅＭｅｒｇｅワーカー１のキャッシュ１１に保存されたＲｅｄｕｃｅ結果１２０と、Ｒｅｄｕｃｅワーカー３が生成したＲｅｄｕｃｅ結果１１２とから、Ｒｅｄｕｃｅ結果１３０を生成している。
【００９１】
図１１において、点線で表示される部分は、キャッシュを利用にしたことにより省略された処理を示している。図１１からわかるように、多くの処理はキャッシュを利用することにより、省略することができる。その結果、システム全体の負荷を軽減させること、および処理全体を従来のＭａｐ−Ｒｅｄｕｃｅ処理と比較し、低レイテンシで実現することが可能となる。
【００９２】
（変形例１）
上記実施形態では、ＭａｐワーカーまたはＲｅｄｕｃｅワーカーを行うサーバは任意でよく、あるサーバのＭａｐワーカーにて作成されたＭａｐ結果を、同一サーバのＲｅｄｕｃｅワーカーが処理しても、別のサーバのＲｅｄｕｃｅワーカーが処理してもよい。しかし、あるＭａｐワーカーにて作成されたＭａｐ結果を同一サーバのＲｅｄｕｃｅワーカーが処理するほうが効率がよい。なぜならＭａｐ結果の受け渡しが発生しないからである。そこで、ＭａｐワーカーとＲｅｄｕｃｅワーカーの物理的な配置を最適化することにより、より効率のよいＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理が実現可能となる。
【００９３】
（変形例２）
上記実施形態では、全てのＲｅｄｕｃｅ結果を更新頻度に関わらず、キャッシュに保存している。しかし、更新頻度の高いＲｅｄｕｃｅ結果のキャッシュが利用できる回数は、更新頻度の低いＲｅｄｕｃｅ結果のキャッシュに比べ少ないので、更新頻度が高いＲｅｄｕｃｅ結果を、キャッシュ対象外としてもよい。それにより、更新頻度の高いＲｅｄｕｃｅ結果をキャッシュする処理、キャッシュを無効化する処理を省略することができ、より効率のよいＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理を実現可能となる。
【００９４】
（変形例３）
上記実施形態では、Ｒｅｄｕｃｅ結果をキャッシュに保存したが、Ｒｅｄｕｃｅ結果同様にＭａｐ結果をキャッシュに保存してもよい。Ｍａｐ結果は、それを生成したＭａｐワーカーのキャッシュに保存される。更に、このとき、更新頻度の高いＭａｐ結果を対象外としてもよい。これにより、Ｒｅｄｕｃｅ結果のキャッシュを利用できない場合であっても、Ｍａｐ結果のキャッシュを利用できるので、より効率のよいＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理を実現可能となる。
【００９５】
（変形例４）
上記実施形態にて、キャッシュされていないグループの特定は、全てのキャッシュのグループを確認して行うが、キャッシュ位置を格納するインデックスを１サーバに配置することにより、キャッシュされていないグループの特定を低レイテンシで実現することができる。その結果、より効率のよいＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理を実現可能となる。
【００９６】
（変形例５）
上記実施形態にて、ファイル更新頻度によるグループ分けは、ファイル更新頻度の高いグループ（Ｈｉｇｈ）とファイル更新頻度の低いグループ（Ｌｏｗ）との２つのグループに分割する以外にも、任意の数に分割可能してもよい。ファイルをファイル更新頻度毎に細かくグループ分けすることにより、有効であるキャッシュを増やすことができ、より効率のよいＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理を実現可能となる。
【００９７】
（変形例６）
上記実施形態にて、Ｒｅｄｕｃｅ（ＲｅｄｕｃｅＭｅｒｇｅ）する組み合わせについては任意であったが、有効であるキャッシュをより多くするために、Ｒｅｄｕｃｅ（ＲｅｄｕｃｅＭｅｒｇｅ）する組み合わせを最適化する処理を付け加えてもよい。
【００９８】
図１２は、本発明の一実施形態に係る、Ｒｅｄｕｃｅ（ＲｅｄｕｃｅＭｅｒｇｅ）する組み合わせを最適化する処理のフローチャートである。
Ｓ３００：マスタは、Ｒｅｄｕｃｅ（ＲｅｄｕｃｅＭｅｒｇｅ）処理により生成されるＲｅｄｕｃｅ結果の更新頻度の閾値αを取得する。更新頻度の閾値は任意でよく、人間が決定してもよい。但し、閾値は１に近すぎないほうがよい。なぜならば、閾値が１に近いと、Ｒｅｄｕｃｅ結果は多くのグループに対する結果となるため、Ｒｅｄｕｃｅ結果のキャッシュが無効化される確率が上がり、キャッシュを有効に利用できないからである。
【００９９】
Ｓ３１０：マスタは、Ｒｅｄｕｃｅワーカー（ＲｅｄｕｃｅＭｅｒｇｅワーカー）を１つ選択する。このとき、すでに処理対象であるファイルが決まっているＲｅｄｕｃｅワーカー（ＲｅｄｕｃｅＭｅｒｇｅワーカー）は除く。また、マスタは、グループ集合Ｇを空にする。グループ集合Ｇは、Ｒｅｄｕｃｅ（ＲｅｄｕｃｅＭｅｒｇｅ）する組み合わせを作成する際に、その組み合わせを一時的に格納するために用いる。
【０１００】
Ｓ３２０：マスタは、未選択のグループのうち、最もグループ更新頻度の低いグループ（以下、グループｇとする）を１つ選択する。
【０１０１】
Ｓ３３０：マスタは、ステップＳ３２０で選択したグループｇをグループ集合Ｇに加えて、グループ集合Ｇを入力としてＲｅｄｕｃｅ処理を行った場合に、そのＲｅｄｕｃｅ結果の更新頻度がαを越すか否か判断する。判断結果が、ＹＥＳの場合にはステップＳ３５０へ、ＮＯの場合にはステップＳ３４０へ処理を移す。
【０１０２】
Ｓ３４０：マスタは、ステップＳ３３０でＹＥＳと判断すると、グループ集合Ｇにグループｇを加えて、ステップＳ３２０へ戻る。このようにして、グループ集合Ｇから得られるＲｅｄｕｃｅ結果の更新頻度が閾値αを越えるまで、グループ集合Ｇにグループｇが加えられる。
【０１０３】
Ｓ３５０：マスタは、ステップＳ３３０でＮＯと判断すると、グループ集合Ｇが空であるか否か判断する。判断の結果がＹＥＳの場合にはステップＳ３６０へ、ＮＯの場合にはステップＳ３７０へ処理を移す。
【０１０４】
Ｓ３６０：マスタは、グループ集合Ｇにグループｇを加える。このようにするのは、１つのグループで、それから得られるＲｅｄｕｃｅ結果の更新頻度が閾値αを越えるものは、他のグループとは組み合わせず、単体でＲｅｄｕｃｅ処理を行うためである。
Ｓ３６０：マスタは、ステップＳ３１０にて選択されたＲｅｄｕｃｅ（ＲｅｄｕｃｅＭｅｒｇｅ）ワーカーはグループ集合Ｇ内の全グループをＲｅｄｕｃｅ（ＲｅｄｕｃｅＭｅｒｇｅ）対象とする。
【０１０５】
Ｓ３８０：マスタは、全てのグループが選択されたか、つまり、全てのグループがＲｅｄｕｃｅ（ＲｅｄｕｃｅＭｅｒｇｅ）ワーカーの処理対象となったか判断する。判断結果が、ＹＥＳの場合には処理は終了し、ＮＯの場合にはステップＳ３１０へ戻る。
【０１０６】
このようにすることで、グループ更新頻度の低いグループはまとめられ、それらから１つのＲｅｄｕｃｅ結果が生成され、キャッシュに保存される。このようにすることで、Ｒｅｄｕｃｅ対象であるグループの組み合わせを最適化することができ、より効率のよいＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理を実現可能となる。
【０１０７】
図１３は、本発明の一実施形態に係る、ＲｅｄｕｃｅＭｅｒｇｅ処理のフローチャートである。
Ｓ４００：マスタは、閾値γとΔとを取得する。ここで、マスタは、ＲｅｄｕｃｅＭｅｒｇｅ処理により生成されるＲｅｄｕｃｅ結果の更新頻度α＝γとする。なお、γとΔとは任意でよく、人間が決定してもよい。
Ｓ４１０：マスタは、更新頻度αを入力して、図１３に示したＲｅｄｕｃｅする組み合わせを最適化する処理を行う。
Ｓ４２０：ステップＳ４１０にて決定された処理対象であるグループを入力として、それぞれのＲｅｄｕｃｅワーカーは、Ｒｅｄｕｃｅ処理を行う。
【０１０８】
Ｓ４３０：マスタは、ステップＳ４２０にて生成されたＲｅｄｕｃｅ結果が１つであるか判断する。判断結果が、ＮＯの場合にはステップＳ４４０へ処理を移す。一方、ＹＥＳの場合には処理は終了する。ＲｅｄｕｃｅＭｅｒｇｅ処理の終了条件は、全てのグループに対応するＲｅｄｕｃｅ結果が生成されたことである。ステップＳ４２０にて生成されたＲｅｄｕｃｅ結果が１つであるということは、その結果は全てのグループに対応するＲｅｄｕｃｅ結果であり、ＲｅｄｕｃｅＭｅｒｇｅ処理の終了条件を満たしているからである。
【０１０９】
Ｓ４４０：マスタは、更新頻度α＝α＋Δとする。更新頻度を少しずつ大きくすることで、生成されるＲｅｄｕｃｅ結果の数を段階的に減らしていくことができる。すなわち、段階的にＲｅｄｕｃｅＭｅｒｇｅ処理を行うことができる。
Ｓ４５０：マスタは、更新頻度αを入力して、図１３に示したＲｅｄｕｃｅＭｅｒｇｅする組み合わせを最適化する処理を行う。
Ｓ４６０：ステップＳ４５０にて２つ以上のグループをＲｅｄｕｃｅＭｅｒｇｅ処理対象としたＲｅｄｕｃｅＭｅｒｇｅワーカーは、ＲｅｄｕｃｅＭｅｒｇｅ処理を行い、ステップＳ４３０へ処理を戻す。
【０１１０】
このようにして、Ｒｅｄｕｃｅ結果の更新頻度に応じて何段階かＲｅｄｕｃｅＭｅｒｇｅ処理を行うことにより、更新が頻繁に起こっても、キャッシュしたＲｅｄｕｃｅ結果を有効に利用することができるキャッシュ機構を構築することができる。その結果、より効率のよいＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理を実現可能となる。
【０１１１】
以上、本発明を実施形態に則して説明したが、本発明は上述した実施形態に限るものではない。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態または実施例に記載されたものに限定されるものではない。
【図面の簡単な説明】
【０１１２】
【図１】本発明の一実施形態に係る、Ｍａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理例を示す図である。
【図２】本発明の一実施形態に係る、キャッシュ生成方法を示すフローチャートである。
【図３】本発明の一実施形態に係る、ファイルのグループ分け例を示す図である。
【図４】本発明の一実施形態に係る、Ｍａｐワーカーの処理例を示す図である。
【図５】本発明の一実施形態に係る、Ｒｅｄｕｃｅワーカーによる処理例を示す図である。
【図６】本発明の一実施形態に係る、ＲｅｄｕｃｅＭｅｒｇｅワーカーによる処理例を示す図である。
【図７】本発明の一実施形態に係る、キャッシュ無効化処理を示すフローチャートである。
【図８】本発明の一実施形態に係る、キャッシュ無効化例を示す図である。
【図９】本発明の一実施形態に係る、グループ再構成によるキャッシュ無効化の例を示す図である。
【図１０】本発明の一実施形態に係る、キャッシュ機構を利用したＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理のフローチャートである。
【図１１】本発明の一実施形態に係る、キャッシュ機構を利用したＭａｐ−Ｒｅｄｕｃｅ−ＲｅｄｕｃｅＭｅｒｇｅ処理例を示す図である。
【図１２】本発明の一実施形態に係る、Ｒｅｄｕｃｅ（ＲｅｄｕｃｅＭｅｒｇｅ）するグループの最適化処理のフローチャートである。
【図１３】本発明の一実施形態に係る、ＲｅｄｕｃｅＭｅｒｇｅ処理のフローチャートである。
【図１４】従来技術に係る、Ｍａｐ−Ｒｅｄｕｃｅ処理概要を示す図である。
【図１５】従来技術に係る、Ｍａｐ−Ｒｅｄｕｃｅ処理における、Ｒｅｄｕｃｅ結果のキャッシュ例を示す図である。
【図１６】従来技術に係る、キャッシュに保存されているＲｅｄｕｃｅ結果の利用時における、ファイル更新を示す図である。
【図１７】従来技術に係る、実際のＭａｐ−Ｒｅｄｕｃｅ処理を示す図である。
【図１】
2010092222.tif 000003
【図２】
2010092222.tif 000004
【図３】
2010092222.tif 000005
【図４】
2010092222.tif 000006
【図５】
2010092222.tif 000007
【図６】
2010092222.tif 000008
【図７】
2010092222.tif 000009
【図８】
2010092222.tif 000010
【図９】
2010092222.tif 000011
【図１０】
2010092222.tif 000012
【図１１】
2010092222.tif 000013
【図１２】
2010092222.tif 000014
【図１３】
2010092222.tif 000015
【図１４】
2010092222.tif 000016
【図１５】
2010092222.tif 000017
【図１６】
2010092222.tif 000018
【図１７】
2010092222.tif 000019