(57)【特許請求の範囲】
【請求項１】
各々がデータ要素の集合である１以上の完全データ集合の組が、各々が１以上の前記完全データ集合を含むようなＭ個（Ｍは１以上）の部分集合に分割され、前記Ｍ個の部分集合がそれぞれＭ個のデータ装置群に分散して配置され、前記Ｍ個のデータ装置群の各々が当該データ装置群に配置される前記部分集合を分散して格納する１または複数のデータ装置を包含する場合に、前記Ｍ個のデータ装置群の各々の１または複数のデータ装置、および、前記データ装置群の何れかから前記完全データ集合を取得するＪ台（Ｊは複数）の処理装置に接続されている分散処理管理装置であって、
前記処理装置と前記データ装置群の組み合わせ毎に、前記処理装置が前記データ装置群内の各データ装置から単位データ量のデータを受信するときに生ずる通信負荷である装置間通信負荷を取得し、取得した前記装置間通信負荷から、前記処理装置が単位データ量の前記完全データ集合を得る為に前記データ装置群に属する前記データ装置からデータを受信するときの通信負荷である完全データ単位量取得負荷ｃを算出する負荷算出手段と、
前記処理装置と前記データ装置群の組み合わせ毎に、前記処理装置が前記データ装置群の前記データ装置からデータを受信する０以上の通信量ｆを、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の所定和が最小となるように決定して、決定された前記通信量ｆにもとづいて通信を実行する処理装置とデータ装置との組み合わせ情報を出力する処理割当手段、
を備える分散処理管理装置。
【請求項２】
前記Ｍ個のデータ装置群の各々が複数の前記データ装置を包含する場合に、
前記データ装置群はｎ台（ｎは複数）の前記データ装置を包含し、当該ｎ台の前記データ装置は、対応する前記部分集合に含まれる前記完全データ集合に属する各データ要素を前記ｎ台の前記データ装置のうちのｋ台（ｋはｎより小さい１以上の整数）にそれぞれ格納されたｋ個のデータから復元できるように多重化又は符号化して格納し、
前記処理装置は、前記データ装置群に属する前記ｎ台の前記データ装置のうちの何れかのｋ台からそれぞれ受信したｋ個のデータから前記完全データ集合を取得し、
前記負荷算出手段は、前記処理装置と前記データ装置群の組み合わせ毎に、前記データ装置群内の前記ｎ台のデータ装置の各々に係る前記装置間通信負荷のうち、小さい方からｋ個を加算して、前記完全データ単位量取得負荷ｃを求める
請求項１の分散処理管理装置。
【請求項３】
前記Ｍ個のデータ装置群の各々が複数の前記データ装置を包含する場合に、
各々がデータ要素の集合であるｎ個（ｎは複数）のデータ集合の各々が、複数の分割集合に分割され、当該複数の分割集合が、それぞれ、複数の前記完全データ集合に割り当てられ、
前記データ装置群はｎ台の前記データ装置を包含し、当該ｎ台の前記データ装置は、それぞれ、対応する前記部分集合に含まれる前記完全データ集合に前記ｎ個のデータ集合から割り当てられたｎ個の分割集合を格納し、
前記処理装置は、前記データ装置群に属する前記ｎ台の前記データ装置から、それぞれ、前記ｎ個の分割集合のデータ要素を受信することで、前記完全データ集合を取得し、
前記負荷算出手段は、前記処理装置と前記データ装置群の組み合わせ毎に、前記データ装置群内の前記ｎ台の前記データ装置の各々に係る前記装置間通信負荷と当該データ装置が格納するデータ要素のサイズに比例した係数を乗算した結果を全て加算して、前記完全データ単位量取得負荷ｃを求める
請求項１の分散処理管理装置。
【請求項４】
各々がデータ要素の集合である１個のデータ集合が、複数の分割集合に分割され、当該複数の分割集合は、それぞれ、複数の前記完全データ集合に割り当てられ、
前記データ装置群内の１台の前記データ装置は、対応する前記部分集合に含まれる前記完全データ集合に前記１個のデータ集合から割り当てられた分割集合を格納し、
前記処理装置は、前記データ装置群に属する前記１台の前記データ装置から前記割り当てられた分割集合のデータ要素を受信することで、前記完全データ集合を取得し、
前記負荷算出手段は、前記処理装置と前記データ装置群の組み合わせ毎に、取得した１個の前記装置間通信負荷を前記完全データ単位量取得負荷ｃとして出力する
請求項１の分散処理管理装置。
【請求項５】
前記負荷算出手段は、前記処理装置と前記データ装置群の組み合わせ毎に、前記完全データ単位量取得負荷ｃと前記処理装置の処理能力の逆数に比例した値を加算して、完全データ単位量処理負荷ｃ’を算出し、
前記処理割当手段は、前記処理装置と前記データ装置群の組み合わせ毎に、前記通信量ｆと前記完全データ単位量処理負荷ｃ’の積の総和が最小となるように前記通信量ｆを決定する
請求項１乃至４の何れかの分散処理管理装置。
【請求項６】
前記処理割当手段は、前記処理装置と前記データ装置群の組み合わせ毎に、前記処理装置の処理能力に比例した最大許容値ｄ’を算出し、前記通信量ｆが最大許容値ｄ’以下であるとの制約下で、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の前記所定和が最小となるように前記通信量ｆを決定する
請求項１乃至４の何れかの分散処理管理装置。
【請求項７】
前記処理割当手段は、前記処理装置と前記データ装置群の組み合わせ毎に、前記データ装置が前記処理装置に同一割合のデータを送信するとの制約下で、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の前記所定和が最小となるように前記通信量ｆを決定する
請求項１乃至４の何れかの分散処理管理装置。
【請求項８】
前記処理割当手段は、
前記処理装置と前記データ装置群の組み合わせ毎に、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の総和を前記所定和として求め、または、前記処理装置毎に、前記データ装置群全てについての前記通信量ｆと前記完全データ単位量取得負荷ｃの積の和を算出して、算出された値のうちの最大値を前記所定和として求め、
前記処理装置と前記データ装置群の組み合わせ毎に、前記所定和が最小となるように前記通信量ｆを決定する
請求項１乃至４、６、および７の何れかの分散処理管理装置。
【請求項９】
前記処理割当手段は、
前記処理装置毎に、前記処理装置が予め有する処理負荷又は通信負荷を示す値δを入力して、
前記処理装置毎に、前記データ装置群全てについての前記通信量ｆと前記完全データ単位量取得負荷ｃの積と、前記δの和を算出し、
前記処理装置と前記データ装置群の組み合わせ毎に、算出された値の内の最大値が最小となるように前記通信量ｆを決定する
請求項１乃至４の何れかの分散処理管理装置。
【請求項１０】
各々がデータ要素の集合である１以上の完全データ集合の組が、各々が１以上の前記完全データ集合を含むようなＭ個（Ｍは１以上）の部分集合に分割され、前記Ｍ個の部分集合がそれぞれＭ個のデータ装置群に分散して配置され、前記Ｍ個のデータ装置群の各々が当該データ装置群に配置される前記部分集合を分散して格納する１または複数のデータ装置を包含する場合に、前記Ｍ個のデータ装置群の各々の１または複数のデータ装置、および、前記データ装置群の何れかに属するデータ装置から前記完全データ集合を取得するＪ台（Ｊは複数）の処理装置と接続されているコンピュータの分散処理管理方法であって、
前記コンピュータに具備された負荷算出手段が、前記処理装置と前記データ装置群の組み合わせ毎に、前記処理装置が前記データ装置群内の前記データ装置から単位データ量のデータを受信するときに生ずる通信負荷である装置間通信負荷を取得し、取得した前記装置間通信負荷から、前記処理装置が単位データ量の前記完全データ集合を得る為に前記データ装置群に属する前記データ装置からデータを受信するときの通信負荷である完全データ単位量取得負荷ｃを算出し、
前記コンピュータに具備された処理割当手段が、前記処理装置と前記データ装置群の組み合わせ毎に、前記処理装置が前記データ装置群の前記データ装置からデータを受信する０以上の通信量ｆを、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の所定和が最小となるように決定して、決定された前記通信量ｆにもとづいて通信を実行する処理装置とデータ装置との組み合わせ情報を出力する、
分散処理管理方法。
【請求項１１】
前記Ｍ個のデータ装置群の各々が複数の前記データ装置を包含する場合に、
前記データ装置群はｎ台（ｎは複数）の前記データ装置を包含し、当該ｎ台の前記データ装置は、対応する前記部分集合に含まれる前記完全データ集合に属する各データ要素を前記ｎ台の前記データ装置のうちのｋ台（ｋはｎより小さい１以上の整数）にそれぞれ格納されたｋ個のデータから復元できるように多重化又は符号化して格納し、
前記処理装置は、前記データ装置群に属する前記ｎ台の前記データ装置のうちの何れかのｋ台からそれぞれ受信したｋ個のデータから前記完全データ集合を取得する場合に、
前記コンピュータに具備された前記負荷算出手段が、前記処理装置と前記データ装置群の組み合わせ毎に、前記データ装置群内の前記ｎ台のデータ装置の各々に係る前記装置間通信負荷のうち、小さい方からｋ個を加算して、前記完全データ単位量取得負荷ｃを求める
請求項１０の分散処理管理方法。
【請求項１２】
前記Ｍ個のデータ装置群の各々が複数の前記データ装置を包含する場合に、
各々がデータ要素の集合であるｎ個（ｎは複数）のデータ集合の各々が、複数の分割集合に分割され、当該複数の分割集合が、それぞれ、複数の前記完全データ集合に割り当てられ、
前記データ装置群はｎ台の前記データ装置を包含し、当該ｎ台の前記データ装置は、それぞれ、対応する前記部分集合に含まれる前記完全データ集合に前記ｎ個のデータ集合から割り当てられたｎ個の分割集合を格納し、
前記処理装置は、前記データ装置群に属する前記ｎ台の前記データ装置から、それぞれ、前記ｎ個の分割集合のデータ要素を受信することで前記完全データ集合を取得する場合に、
前記コンピュータに具備された前記負荷算出手段が、前記処理装置と前記データ装置群の組み合わせ毎に、前記データ装置群内の前記ｎ台の前記データ装置の各々に係る前記装置間通信負荷と当該データ装置が格納するデータ要素のサイズに比例した係数を乗算した結果を全て加算して、前記完全データ単位量取得負荷ｃを求める
請求項１０の分散処理管理方法。
【請求項１３】
各々がデータ要素の集合である１個のデータ集合が、複数の分割集合に分割され、当該複数の分割集合は、それぞれ、複数の前記完全データ集合に割り当てられ、
前記データ装置群内の１台の前記データ装置は、対応する前記部分集合に含まれる前記完全データ集合に前記１個のデータ集合から割り当てられた分割集合を格納し、
前記処理装置は、前記データ装置群に属する前記１台の前記データ装置から前記割り当てられた分割集合のデータ要素を受信することで、前記完全データ集合を取得する場合に、
前記コンピュータに具備された前記負荷算出手段が、前記処理装置と前記データ装置群の組み合わせ毎に、取得した１個の前記装置間通信負荷を前記完全データ単位量取得負荷ｃとして出力する
請求項１０の分散処理管理方法。
【請求項１４】
前記コンピュータに具備された前記負荷算出手段が、前記処理装置と前記データ装置群の組み合わせ毎に、前記完全データ単位量取得負荷ｃと前記処理装置の処理能力の逆数に比例した値を加算して、完全データ単位量処理負荷ｃ’を算出し、
前記コンピュータに具備された前記処理割当手段が、前記通信量ｆと前記完全データ単位量処理負荷ｃ’の積の総和が最小となるように前記通信量ｆを決定する
請求項１０乃至１３の何れかの分散処理管理方法。
【請求項１５】
前記コンピュータに具備された前記処理割当手段が、前記処理装置と前記データ装置群の組み合わせ毎に、前記処理装置の処理能力に比例した最大許容値ｄ’を算出し、前記通信量ｆが前記最大許容値ｄ’以下であるとの制約下で、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の前記所定和が最小となるように前記通信量ｆを決定する
請求項１０乃至１３の何れかの分散処理管理方法。
【請求項１６】
前記コンピュータに具備された前記処理割当手段が、前記処理装置と前記データ装置群の組み合わせ毎に、前記データ装置が前記処理装置に同一割合のデータを送信するとの制約下で、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の前記所定和が最小となるように前記通信量ｆを決定する
請求項１０乃至１３の何れかの分散処理管理方法。
【請求項１７】
前記コンピュータに具備された前記処理割当手段が、
前記処理装置と前記データ装置群の組み合わせ毎に、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の総和を前記所定和として求め、または、前記処理装置毎に、前記データ装置群全てについての前記通信量ｆと前記完全データ単位量取得負荷ｃの積の和を算出して、算出された値のうちの最大値を前記所定和として求め、
前記処理装置と前記データ装置群の組み合わせ毎に、前記所定和が最小となるように前記通信量ｆを決定する
請求項１０乃至１３、１５、および１６の何れかの分散処理管理方法。
【請求項１８】
前記コンピュータに具備された前記処理割当手段が、
前記処理装置毎に、前記処理装置が予め有する処理負荷又は通信負荷を示す値δを入力して、
前記処理装置毎に、前記データ装置群全てついての前記通信量ｆと前記完全データ単位量取得負荷ｃの積と、前記δの和を算出し、
前記処理装置と前記データ装置群の組み合わせ毎に、算出された値の内の最大値が最小となるように前記通信量ｆを決定する
請求項１０乃至１３の何れかの分散処理管理方法。
【請求項１９】
各々がデータ要素の集合である１以上の完全データ集合の組が、各々が１以上の前記完全データ集合を含むようなＭ個（Ｍは１以上）の部分集合に分割され、前記Ｍ個の部分集合がそれぞれＭ個のデータ装置群に分散して配置され、前記Ｍ個のデータ装置群の各々が当該データ装置群に配置される前記部分集合を分散して格納する１または複数のデータ装置を包含する場合に、前記Ｍ個のデータ装置群の各々の１または複数のデータ装置、および、前記データ装置群の何れかに属するデータ装置から前記完全データ集合を取得するＪ台（Ｊは複数）の処理装置に接続されたコンピュータに、
前記処理装置と前記データ装置群の組み合わせ毎に、前記処理装置が前記データ装置群内の前記データ装置から単位データ量のデータを受信するときに生ずる通信負荷である装置間通信負荷を取得し、取得した前記装置間通信負荷から、前記処理装置が単位データ量の前記完全データ集合を得る為に前記データ装置群に属する前記データ装置からデータを受信するときの通信負荷である完全データ単位量取得負荷ｃを算出する負荷算出処理と、
前記処理装置と前記データ装置群の組み合わせ毎に、前記処理装置が前記データ装置群の前記データ装置からデータを受信する０以上の通信量ｆを、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の所定和が最小となるように決定して、決定された前記ｆにもとづいて通信を実行する処理装置とデータ装置との組み合わせ情報を出力する処理割当処理、
を実行させる分散処理管理プログラム。
【請求項２０】
前記Ｍ個のデータ装置群の各々が複数の前記データ装置を包含する場合に、
前記データ装置群はｎ台（ｎは複数）の前記データ装置を包含し、当該ｎ台の前記データ装置は、対応する前記部分集合に含まれる前記完全データ集合に属する各データ要素を前記ｎ台の前記データ装置のうちのｋ台（ｋはｎより小さい１以上の整数）にそれぞれ格納されたｋ個のデータから復元できるように多重化又は符号化して格納し、
前記処理装置は、前記データ装置群に属する前記ｎ台の前記データ装置のうちの何れかのｋ台からそれぞれ受信したｋ個のデータから前記完全データ集合を取得する場合に、
前記コンピュータに、前記処理装置と前記データ装置群の組み合わせ毎に、前記データ装置群内の前記ｎ台のデータ装置の各々に係る前記装置間通信負荷のうち、小さい方からｋ個を加算して、前記完全データ単位量取得負荷ｃを求める前記負荷算出処理を実行させる
請求項１９の分散処理管理プログラム。
【請求項２１】
前記Ｍ個のデータ装置群の各々が複数の前記データ装置を包含する場合に、
各々がデータ要素の集合であるｎ個（ｎは複数）のデータ集合の各々が、複数の分割集合に分割され、当該複数の分割集合が、それぞれ、複数の前記完全データ集合に割り当てられ、
前記データ装置群はｎ台の前記データ装置を包含し、当該ｎ台の前記データ装置は、それぞれ、対応する前記部分集合に含まれる前記完全データ集合に前記ｎ個のデータ集合から割り当てられたｎ個の分割集合を格納し、
前記処理装置は、前記データ装置群に属する前記ｎ台の前記データ装置から、それぞれ、前記ｎ個の分割集合のデータ要素を受信することで前記完全データ集合を取得する場合に、
前記コンピュータに、前記処理装置と前記データ装置群の組み合わせ毎に、前記データ装置群内の前記ｎ台の前記データ装置の各々に係る前記装置間通信負荷と当該データ装置が格納するデータ要素のサイズに比例した係数を乗算した結果を全て加算して、前記完全データ単位量取得負荷ｃを求める前記負荷算出処理を実行させる
請求項１９の分散処理管理プログラム。
【請求項２２】
各々がデータ要素の集合である１個のデータ集合が、複数の分割集合に分割され、当該複数の分割集合は、それぞれ、複数の前記完全データ集合に割り当てられ、
前記データ装置群内の１台の前記データ装置は、対応する前記部分集合に含まれる前記完全データ集合に前記１個のデータ集合から割り当てられた分割集合を格納し、
前記処理装置は、前記データ装置群に属する前記１台の前記データ装置から前記割り当てられた分割集合のデータ要素を受信することで、前記完全データ集合を取得する場合に、
前記コンピュータに、前記処理装置と前記データ装置群の組み合わせ毎に、取得した１個の前記装置間通信負荷を前記完全データ単位量取得負荷ｃとして出力する前記負荷算出処理を実行させる
請求項１９の分散処理管理プログラム。
【請求項２３】
前記コンピュータに、
前記処理装置と前記データ装置群の組み合わせ毎に、前記完全データ単位量取得負荷ｃと前記処理装置の処理能力の逆数に比例した値を加算して、完全データ単位量処理負荷ｃ’を算出する前記負荷算出処理と、
前記処理装置と前記データ装置群の組み合わせ毎に、前記通信量ｆと前記完全データ単位量処理負荷ｃ’の積の総和が最小となるように前記通信量ｆを決定する前記処理割当処理を実行させる
請求項１９乃至２２の何れかの分散処理管理プログラム。
【請求項２４】
前記コンピュータに、前記処理装置と前記データ装置群の組み合わせ毎に、前記処理装置の処理能力に比例した最大許容値ｄ’を算出し、前記通信量ｆが前記最大許容値ｄ’以下であるとの制約下で、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の前記所定和が最小となるように前記通信量ｆを決定する前記処理割当処理を実行させる
請求項１９乃至２２の何れかの分散処理管理プログラム。
【請求項２５】
前記コンピュータに、前記処理装置と前記データ装置群の組み合わせ毎に、前記データ装置が前記処理装置に同一割合のデータを送信するとの制約下で、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の前記所定和が最小となるように前記通信量ｆを決定する前記処理割当処理を実行させる
請求項１９乃至２２の何れかの分散処理管理プログラム。
【請求項２６】
前記コンピュータに、
前記処理装置と前記データ装置群の組み合わせ毎に、前記通信量ｆと前記完全データ単位量取得負荷ｃの積の総和を前記所定和として求め、または、前記処理装置毎に、前記データ装置群全てについての前記通信量ｆと前記完全データ単位量取得負荷ｃの積の和を算出して、算出された値のうちの最大値を前記所定和として求め、
前記処理装置と前記データ装置群の組み合わせ毎に、前記所定和が最小となるように前記通信量ｆを決定する
前記処理割当処理を実行させる
請求項１９乃至２２、２４、および２５の何れかの分散処理管理プログラム。
【請求項２７】
前記コンピュータに、
前記処理装置毎に、前記処理装置が予め有する処理負荷又は通信負荷を示す値δを入力して、
前記処理装置毎に、前記データ装置群全てについての前記通信量ｆと前記完全データ単位量取得負荷ｃの積と、前記δの和を算出し、
前記処理装置と前記データ装置群の組み合わせ毎に、算出された値の内の最大値が最小となるように前記通信量ｆを決定する
前記処理割当処理を実行させる
請求項１９乃至２２の何れかの分散処理管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散処理管理サーバ、分散システム、分散処理管理プログラム及び分散処理管理方法に関する。
【背景技術】
【０００２】
非特許文献１乃至３は、複数の計算機に格納されたデータを、どの複数の計算サーバに送信し、処理させるかを決定する分散システムを開示する。同システムは、個々のデータを格納するサーバから最も近傍な利用可能計算サーバを逐次決定して、全体の通信を決定する。
特許文献１は、一台の計算機に格納されたデータを一台のクライアント３００に転送するに際して、データ転送時間が最小となるように中継サーバを移動させるシステムを開示する。
特許文献２は、ファイル転送元マシンからファイル転送先マシンへのファイル転送時に、各転送経路の回線速度と負荷状況に応じて、分割転送するシステムを開示する。
特許文献３は、一台のジョブ分散装置が、ジョブの実行に必要なデータを分割して、複数のネットワークセグメントのそれぞれに複数配置される計算サーバに送信するシステムを開示する。本システムは、データを各ネットワークセグメント単位に一旦蓄積させることで、ネットワーク負荷を低減する。
特許文献４は、プロセッサ間の距離を示す通信グラフを作成し、当該グラフに基づいて、通信スケジュールを作成する技術を開示する。
【非特許文献１】Ｊｅｆｆｒｅｙ  Ｄｅａｎ  ａｎｄ  Ｓａｎｊａｙ  Ｇｈｅｍａｗａｔ，“ＭａｐＲｅｄｕｃｅ：Ｓｉｍｐｌｉｆｉｅｄ  Ｄａｔａ  Ｐｒｏｃｅｓｓｉｎｇ  ｏｎ  Ｌａｒｇｅ  Ｃｌｕｓｔｅｒｓ″，Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ｓｉｘｔｈ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｄｅｓｉｇｎ  ａｎｄ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ（ＯＳＤＩ’０４），２００４年１２月６日
【非特許文献２】Ｓａｎｊａｙ  Ｇｈｅｍａｗａｔ，Ｈｏｗａｒｄ  Ｇｏｂｉｏｆｆ，ａｎｄ  Ｓｈｕｎ−Ｔａｋ  Ｌｅｕｎｇ，“Ｔｈｅ  Ｇｏｏｇｌｅ  Ｆｉｌｅ  Ｓｙｓｔｅｍ″，Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ｎｉｎｅｔｅｅｎｔｈ  ＡＣＭ  ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍｓ  ｐｒｉｎｃｉｐｌｅｓ（ＳＯＳＰ’０３），２００３年１０月１９日
【非特許文献３】西田圭介，Ｇｏｏｇｌｅを支える技術，ｐ．７４、ｐ１３６−ｐ１６３，２００８年４月２５日
【特許文献１】特開平８−２０２７２６
【特許文献２】特開２００１−３２０４３９
【特許文献３】特開２００６−２３６１２３
【特許文献４】特開平９−３３０３０４
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上記特許文献の技術は、データを記憶する複数のサーバと、当該データを処理可能な複数のサーバが分散配置されるシステムに於いて、どのサーバからどのサーバにデータを転送するのが適切であるかを決定できない。
特許文献１及び２の技術は、一対一のデータ転送を最適化しているに過ぎない。非特許文献１乃至３の技術も、一対一のデータ転送を逐次的に最適化しているに過ぎない（図２Ａを参照）。特許文献３の技術は、一対Ｎのデータ転送技術を開示するに過ぎない。特許文献４の技術は、データ転送コストを小さくしない。
本発明の目的は、上記課題を解決する分散処理管理サーバ、分散システム、分散処理管理プログラム及び分散処理管理方法を提供することである。
【課題を解決するための手段】
【０００４】
本発明の一実施形態の分散処理管理サーバは、複数の処理サーバの識別子ｊと、一以上（ｍ個）の完全データ集合ｉ毎に、当該完全データ集合に所属するデータを記憶する一以上（ｎ個、ｍ又はｎは複数）のデータサーバの識別子（データサーバリストｉ）、を取得して、取得した各処理サーバと各データサーバ間の単位データ量毎の通信負荷（サーバ間通信負荷）に基づいて、各処理サーバが、各完全データ集合の単位データ量を、各完全データ集合のデータサーバリスト内のデータサーバから受信する通信負荷（完全データ単位量取得負荷ｃｉｊ）を含む完全データ単位量処理負荷（ｃ’ｉｊ）を算出する負荷算出手段と、各処理サーバが各完全データ集合を受信する０以上の量（通信量ｆｉｊ）を、各完全データ単位量処理負荷と各通信量の積（完全データ処理負荷ｆｉｊｃ’ｉｊ）を含む値の所定和が最小となるように決定して、決定情報を出力する処理割当手段、を備える。
本発明の一実施形態のコンピュータ読み取り可能な記録媒体に格納された分散処理管理プログラムは、コンピュータに、複数の処理サーバの識別子ｊと、一以上（ｍ個）の完全データ集合ｉ毎に、当該完全データ集合に所属するデータを記憶する一以上（ｎ個、ｍ又はｎは複数）のデータサーバの識別子（データサーバリストｉ）、を取得して、取得した各処理サーバと各データサーバ間の単位データ量毎の通信負荷（サーバ間通信負荷）に基づいて、各処理サーバが、各完全データ集合の単位データ量を、各完全データ集合のデータサーバリスト内のデータサーバから受信する通信負荷（完全データ単位量取得負荷ｃｉｊ）を含む完全データ単位量処理負荷（ｃ’ｉｊ）を算出する負荷算出処理と、各処理サーバが各完全データ集合を受信する０以上の量（通信量ｆｉｊ）を、各完全データ単位量処理負荷と各通信量の積（完全データ処理負荷ｆｉｊｃ’ｉｊ）を含む値の所定和が最小となるように決定して、決定情報を出力する処理割当処理、を実行させる。
本発明の一実施形態の分散処理管理方法は、複数の処理サーバの識別子ｊと、一以上（ｍ個）の完全データ集合ｉ毎に、当該完全データ集合に所属するデータを記憶する一以上（ｎ個、ｍ又はｎは複数）のデータサーバの識別子（データサーバリストｉ）、を取得して、取得した各処理サーバと各データサーバ間の単位データ量毎の通信負荷（サーバ間通信負荷）に基づいて、各処理サーバが、各完全データ集合の単位データ量を、各完全データ集合のデータサーバリスト内のデータサーバから受信する通信負荷（完全データ単位量取得負荷ｃｉｊ）を含む完全データ単位量処理負荷（ｃ’ｉｊ）を算出し、各処理サーバが各完全データ集合を受信する０以上の量（通信量ｆｉｊ）を、各完全データ単位量処理負荷と各通信量の積（完全データ処理負荷ｆｉｊｃ’ｉｊ）を含む値の所定和が最小となるように決定して、決定情報を出力する。
【発明の効果】
【０００５】
本発明は、複数のデータ格納サーバと複数の処理可能サーバが与えられた際に、全体として適切なサーバ間のデータ送受信を実現出来る。
【図面の簡単な説明】
【０００６】
【図１Ａ】図１Ａは、第１の実施形態にかかる分散システム３４０の構成図である。
【図１Ｂ】図１Ｂは、分散システム３４０の構成例を示す。
【図２Ａ】図２Ａは、分散システム３４０の非効率な通信例を示す。
【図２Ｂ】図２Ｂは、分散システム３４０の効率的な通信例を示す。
【図３】図３は、クライアント３００、分散処理管理サーバ３１０、処理サーバ３２０及びデータサーバ３３０の構成を示す。
【図４】図４はクライアント３００に入力される利用者プログラムを例示する。
【図５Ａ】図５Ａは、データ集合とデータ要素の例を示す。
【図５Ｂ】図５Ｂは、データ集合の分散形態を示す。
【図６Ａ】図６Ａは、データ所在格納部３１２０に格納される情報を例示する。
【図６Ｂ】図６Ｂは、サーバ状態格納部３１１０に格納される情報を例示する。
【図６Ｃ】図６Ｃは決定情報の構成を例示する。
【図６Ｄ】図６Ｄは、通信負荷行列Ｃの一般的な構成を例示する。
【図６Ｅ】図６Ｅは、第１の実施の形態に於ける通信負荷行列Ｃを例示する。
【図７Ａ】図７Ａは、本実施の形態が説明する、データサーバ３３０が格納するデータ量と分割処理の組み合わせを示す（１／２）。
【図７Ｂ】図７Ｂは、本実施の形態が説明する、データサーバ３３０が格納するデータ量と分割処理の組み合わせを示す（２／２）。
【図８】図８は、分散システム３４０の全体動作フローチャートである。
【図９】図９は、ステップ８０１のクライアント３００の動作フローチャートである。
【図１０】図１０は、ステップ８０２の分散処理管理サーバ３１０の動作フローチャートである。
【図１１】図１１は、ステップ８０３の分散処理管理サーバ３１０の動作フローチャートである。
【図１２】図１２は、ステップ８０５の分散処理管理サーバ３１０の動作フローチャートである。
【図１３】図１３は、第３の実施の形態のクライアント３００に入力される利用者プログラムを例示する。
【図１４】図１４は、第３の実施の形態のクライアント３００に入力される他の利用者プログラムを例示する。
【図１５】図１５は、第３の実施の形態のステップ８０２及び８０３の分散処理管理サーバ３１０の動作フローチャートである。
【図１６】図１６は、データ要素の出現順で関連付けるａｓｓｏｃｉａｔｅｄ指定時のデータサーバリストの集合を例示する。
【図１７】図１７は、第４の実施の形態のステップ８０３の分散処理管理サーバ３１０の動作フローチャートである。
【図１８Ａ】図１８Ａは、第１の実施の形態等の具体例で使用される分散システム３４０の構成を示す。
【図１８Ｂ】図１８Ｂは、分散処理管理サーバ３１０が備える、サーバ状態格納部３１１０に格納される情報を示す。
【図１８Ｃ】図１８Ｃは、分散処理管理サーバ３１０が備える、データ所在格納部３１２０に格納される情報を示す。
【図１８Ｄ】図１８Ｄは、クライアント３００に入力される利用者プログラムを示す。
【図１８Ｅ】図１８Ｅは通信負荷行列Ｃを示す。
【図１８Ｆ】図１８Ｆは流量行列Ｆを示す。
【図１８Ｇ】図１８Ｇは、図１８Ｆの流量行列Ｆに基づいて決定される、データ送受信を示す。
【図１９Ａ】図１９Ａは、第２の実施の形態の具体例で入力される利用者プログラムを示す。
【図１９Ｂ】図１９Ｂは、第２の実施の形態の第１例におけるデータ所在格納部３１２０に格納されている情報を示す。
【図１９Ｃ】図１９Ｃは通信負荷行列Ｃを示す。
【図１９Ｄ】図１９Ｄは流量行列Ｆを示す。
【図１９Ｅ】図１９Ｅは、図１９Ｄの流量行列Ｆに基づいて決定される、データ送受信を示す。
【図１９Ｆ】図１９Ｆは、処理割当部３１４による流量行列Ｆ作成の動作フローチャート例である。
【図１９Ｇ】図１９Ｇは、目的関数最小化における行列変換過程を示す。
【図１９Ｈ】図１９Ｈは、第２の実施の形態の第２例におけるデータ所在格納部３１２０に格納されている情報を示す。
【図１９Ｉ】図１９Ｉは通信負荷行列Ｃを示す。
【図１９Ｊ】図１９Ｊは示す流量行列Ｆを示す。
【図１９Ｋ】図１９Ｋは、図１９Ｊの流量行列Ｆに基づいて決定される、データ送受信を示す。
【図２０Ａ】図２０Ａは、第３の実施の形態の第１例のデータ所在格納部３１２０が格納する情報を示す。
【図２０Ｂ】図２０Ｂは、第１例の分散システム３４０の構成を示す。
【図２０Ｃ】図２０Ｃは通信負荷行列Ｃを示す。
【図２０Ｄ】図２０Ｄは流量荷行列Ｆを示す。
【図２０Ｅ】図２０Ｅは、第３の実施の形態の第２例のデータ所在格納部３１２０が格納する情報を示す。
【図２０Ｆ】図２０Ｆは、第２例の分散システム３４０の構成を示す。
【図２０Ｇ】図２０Ｇは、負荷算出部３１３のデータサーバリスト取得の動作フローチャートである。
【図２０Ｈ】図２０Ｈは、図２０Ｇの処理で使用される第１のデータ集合（ＭｙＤａｔａＳｅｔ１）用の作業表を示す。
【図２０Ｉ】図２０Ｉは、図２０Ｇの処理で使用される第２のデータ集合（ＭｙＤａｔａＳｅｔ２）用の作業表を示す。
【図２０Ｊ】図２０Ｊは、図２０Ｇの処理で作成される出力リストを示す。
【図２０Ｋ】図２０Ｋは通信負荷行列Ｃを示す。
【図２０Ｌ】図２０Ｌは流量荷行列Ｆを示す。
【図２１Ａ】図２１Ａは、第４の実施形態の具体例の分散システム３４０の構成を示す。
【図２１Ｂ】図２１Ｂは、データ所在格納部３１２０に格納されている情報を示す。
【図２１Ｃ】図２１Ｃは、符号化された部分データの復元例を示す。
【図２１Ｄ】図２１Ｄは通信負荷行列Ｃを示す。
【図２１Ｅ】図２１Ｅは流量行列Ｆを示す。
【図２２Ａ】図２２Ａは、第５の実施の形態の第１例の具体例のステム構成を示す。
【図２２Ｂ】図２２Ｂは通信負荷行列Ｃを示す。
【図２２Ｃ】図２２Ｃは流量行列Ｆを示す。
【図２２Ｄ】図２２Ｄは、サーバ間負荷取得部３１８等が計測したサーバ間帯域を示す。
【図２２Ｅ】図２２Ｅは通信負荷行列Ｃを示す。
【図２２Ｆ】図２２Ｆは流量行列Ｆを示す。
【図２３】図２３は、分散処理管理サーバ３１０、複数のデータサーバ３３０、複数の処理サーバ３２０に加え、複数のアウトプットサーバ３５０を包含する分散システム３４０を示す。
【図２４】図２４は、基本構成の実施の形態を示す。
【符号の説明】
【０００７】
３００  クライアント
３０１  構造プログラム格納部
３０２  処理プログラム格納部
３０３  処理要求部
３０４  処理要件格納部
３１０  分散処理管理サーバ
３１３  負荷算出部
３１４  処理割当部
３１５  メモリ
３１６  作業域
３１７  分散処理管理プログラム
３１８  サーバ間負荷取得部
３２０  処理サーバ
３２１  Ｐデータ格納部
３２２  Ｐサーバ管理部
３２３  プログラムライブラリ
３３０  データサーバ
３３１  Ｄデータ格納部
３３２  Ｄサーバ管理部
３４０  分散システム
３５０  アウトプットサーバ
３１１０  サーバ状態格納部
３１１１  ＰサーバＩＤ
３１１２  負荷情報
３１１３  構成情報
３１２０  データ所在格納部
３１２１  データ集合名
３１２２  分散形態
３１２３  部分データ記述
３１２４  ローカルファイル名
３１２５  ＤサーバＩＤ
３１２６  データ量
３１２７  部分データ名
【発明を実施するための形態】
【０００８】
図１Ａは、第１の実施形態にかかる分散システム３４０の構成図である。分散システム３４０は、ネットワーク３５０で接続された分散処理管理サーバ３１０、複数の処理サーバ３２０、複数のデータサーバ３３０を包含する。分散システム３４０は、クライアント３００や図示されない他のサーバを包含していても良い。
分散処理管理サーバ３１０は分散処理管理装置、処理サーバ３２０は処理装置、データサーバ３３０はデータ装置、クライアント３００は端末装置とも呼ばれる。
各データサーバ３３０は、処理の対象となるデータを記憶している。各処理サーバ３２０は、データサーバ３３０からデータを受信して処理プログラムを実行し、当該データを処理する処理能力を有する。
クライアント３００は、データ処理開始を分散処理管理サーバ３１０に要求する。分散処理管理サーバ３１０は、どの処理サーバ３２０がどのデータサーバ３３０からどれだけデータを受信するかを決定して決定情報を出力する。各データサーバ３３０及び処理サーバ３２０は、当該決定情報に基づくデータ送受信を行う。処理サーバ３２０は受信したデータを処理する。
ここで、分散処理管理サーバ３１０、処理サーバ３２０、データサーバ３３０、クライアント３００は、専用の装置であっても汎用のコンピュータであっても良い。また、一台の装置又はコンピュータ（コンピュータ等）が、分散処理管理サーバ３１０、処理サーバ３２０、データサーバ３３０、クライアント３００（分散処理管理サーバ３１０等）のうちの複数の機能を有しても良い。多くの場合、一台のコンピュータ等が処理サーバ３２０及びデータサーバ３３０の両者として機能する。
図１Ｂ、図２Ａ、及び、図２Ｂは、分散システム３４０の構成例を示す。これらの図に於いては、処理サーバ３２０及びデータサーバ３３０は、コンピュータとして記述されている。ネットワーク３５０は、スイッチを経由するデータ送受信経路として記述されている。分散処理管理サーバ３１０は明記されていない。
図１Ｂにおいて、分散システム３４０は、例えば、コンピュータ１１３〜１１５と、それらを接続するスイッチ１０４及び１０７〜１０９とを包含する。コンピュータ及びスイッチは、ラック１１０〜１１２に収容され、さらにそれらはデータセンタ１０１〜１０２に収容され、データセンタ間は拠点間通信１０３にて接続されている。
図１Ｂは、スイッチとコンピュータをスター型に接続した分散システム３４０を例示する。図２Ａ及び図２Ｂは、カスケード接続されたスイッチにより構成された分散システム３４０を例示する。
図２Ａ及び図２Ｂは、それぞれ、データサーバ３３０と処理サーバ３２０間のデータ送受信の一例を示す。両図に於いて、コンピュータ２０５と２０６がデータサーバ３３０として機能し、コンピュータ２０７と２０８が処理サーバ３２０として機能する。なお、本図に於いて、例えばコンピュータ２２０が、分散処理管理サーバ３１０として機能している。
図２Ａ及び図２Ｂに於いて、スイッチ２０２〜２０４で接続されたコンピュータのうち、２０７及び２０８以外は他の処理を実行中で利用不可能である。その利用不可能なコンピュータのうちコンピュータ２０５及び２０６は、それぞれ処理対象のデータ２０９及び２１０を記憶している。利用可能なコンピュータ２０７及び２０８は、処理プログラム２１１及び２１２を備えている。
図２Ａにおいて、処理対象のデータ２０９は、データ送受信経路２１３で伝送されて、利用可能コンピュータ２０８で処理される。処理対象データ２１０は、データ送受信経路２１４で伝送されて、利用可能コンピュータ２０７で処理される。
一方、図２Ｂにおいては、処理対象データ２０９は、データ送受信経路２３４で伝送され、利用可能コンピュータ２０７で処理される。処理対象データ２１０は、データ送受信経路２３３で伝送され、利用可能コンピュータ２０８で処理される。
図２Ａにおけるデータ送受信ではスイッチ間通信が３回あるのに対して、図２Ｂにおけるデータ送受信では１回である。図２Ｂにおけるデータ送受信は、図２Ａにおけるデータ送受信に較べて通信負荷が低く、効率的である。
各処理対象データについて逐次的に、構成的な距離に基づいていてデータ送受信を行うコンピュータを決定するシステムは、図２Ａに示したような非効率な送受信を行うことがある。例えば、先に処理対象データ２０９に注目し、利用可能コンピュータとして２０７と２０８を検出し、構成的に近いコンピュータ２０８を処理サーバ３２０として選択するシステムは、結果的に図２Ａに示した送受信を行う。
本実施形態の分散システム３４０は、図２Ａ及び図２Ｂに例示した状況において、図２Ｂで示した効率的なデータ送受信を行う可能性を高める。
図３は、クライアント３００、分散処理管理サーバ３１０、処理サーバ３２０及びデータサーバ３３０の構成を示す。一台のコンピュータ等が、分散処理管理サーバ３１０等のうちの複数の機能を有するとき、当該コンピュータ等が有する構成は、例えば、分散処理管理サーバ３１０等の複数の構成を足し合わせたものとなる。この場合、コンピュータ等は、共通的な構成要素を重複して持たず、共用しても良い。
例えば、分散処理管理サーバ３１０が、処理サーバ３２０としても動作する場合、当該サーバの構成は、例えば、分散処理管理サーバ３１０と処理サーバ３２０の各々の構成を足し合わせたものとなる。Ｐデータ格納部３２１とＤデータ格納部３３１は、共通の格納部で有っても良い。
処理サーバ３２０は、Ｐデータ格納部３２１、Ｐサーバ管理部３２２、プログラムライブラリ３２３を包含する。Ｐデータ格納部３２１は、分散システム３４０において一意に識別されるデータを格納する。このデータの論理的な構成は後述される。Ｐサーバ管理部３２２は、Ｐデータ格納部３２１に格納されたデータを対象に、クライアント３００が要求した処理を実行する。Ｐサーバ管理部３２２は、プログラムライブラリ３２３に格納された処理プログラムを実行して、当該処理を実行する。
処理対象のデータは、分散管理サーバ３１０から指定されたデータサーバ３３０から受信されてＰデータ格納部３２１に格納される。処理サーバ３２０がデータサーバ３３０と同一のコンピュータ等である場合、処理対象のデータは、クライアント３００が処理依頼をする以前から予めＰデータ格納部３２１に格納されていても良い。
処理プログラムは、クライアント３００の処理依頼時にクライアント３００から受信してプログラムライブラリ３２３に格納される。処理プログラムは、データサーバ３３０、又は分散処理管理サーバ３１０から受信されても良いし、クライアント３００の処理依頼以前から予めプログラムライブラリ３２３に格納されていても良い。
データサーバ３３０は、Ｄデータ格納部３３１、Ｄサーバ管理部３３２を包含する。Ｄデータ格納部３３１は、分散システム３４０において一意に識別されるデータを格納する。データは、データサーバ３３０が出力したもの又は出力中のものであっても、他のサーバ等から受信したものでも、記憶媒体等から読み込んだものでも良い。
Ｄサーバ管理部３３２は、Ｄデータ格納部３３１に格納されたデータを分散処理管理サーバ３１０から指定された処理サーバ３２０に送信する。データの送信要求は、処理サーバ３２０又は分散処理管理サーバ３１０から受信する。
クライアント３００は、構造プログラム格納部３０１、処理プログラム格納部３０２、処理要求部３０３、処理要件格納部３０４を包含する。
構造プログラム格納部３０１は、データに対する処理の与え方や処理によって得られるデータの構造情報を格納する。クライアント３００の利用者が、これらの情報を指定する。
構造プログラム格納部３０１は、指定したデータの集合に対して各々に同一処理を施すといった構造に関する情報、同一処理を施して得られるデータ集合の格納先に関する情報、又は得られたデータ集合を別の後段の処理が受け取るといった構造情報を格納する。構造情報は、例えば、指定入力データ集合に対して指定した処理を前段で実行し、後段で前段処理の出力データを集約する等の構造を規定する情報である。
処理プログラム格納部３０２は、指定されたデータ集合やそれに含まれるデータ要素に対して、どのような処理を施すかを記した処理プログラムを格納するものである。ここに格納された処理プログラムが、例えば、処理サーバ３２０に配布実行されて、当該処理が行われる。
処理要件格納部３０４は、当該処理を分散システム３４０で実行する際に、利用する処理サーバ３２０の量に関する要求を格納する。処理サーバ３２０の量は、台数で指定されても、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）クロック数に基づく処理能力換算値で指定されても良い。さらに、処理要件格納部３０４は、処理サーバ３２０の種別に関する要求も格納しても良い。処理サーバ３２０の種別とは、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、ＣＰＵ、メモリ、周辺装置に関する種別であっても、メモリ量等、それらに関する定量的な指標であっても良い。
構造プログラム格納部３０１、処理プログラム格納部３０２、及び、処理要件格納部３０４に格納される情報は、利用者プログラム、又は、システムパラメータとしてクライアント３００に与えられる。
図４はクライアント３００に入力される利用者プログラムを例示する。利用者プログラムは、（ａ）構造プログラムと（ｂ）処理プログラムから構成される。構造プログラムと処理プログラムは、利用者により直接記述されることもあるし、利用者が記述したアプリケーションプログラムがコンパイル等された結果、コンパイラ等により生成されることもある。構造プログラムは、処理対象データ名、処理プログラム名、処理要件を記述する。処理対象データ名は、例えば、ｓｅｔ＿ｄａｔａ句の引数として記述される。処理対象プログラム名は、例えば、ｓｅｔ＿ｍａｐ句又はｓｅｔ＿ｒｅｄｕｃｅ句の引数として記述される。処理要件は、例えば、ｓｅｔ＿ｃｏｎｆｉｇ句の引数として記述される。
図４に於ける構造プログラムは、例えば、ＭｙＤａｔａＳｅｔというデータ集合に対してＭｙＭａｐという処理プログラムを、その出力結果に対してＭｙＲｅｄｕｃｅという処理プログラムを適用することを記述している。さらに、構造プログラムは、ＭｙＭａｐは４台、ＭｙＲｅｄｕｃｅは２台の処理サーバ３２０で並列に処理すべきであることを記述している。図４の（ｃ）構造図は利用者プログラムの構造を表現した図である。
この構造図は明細書の理解を容易にする目的で追記されたものであり、利用者プログラムに含まれない。このことは、以降の図に記述される利用者プログラムについても当てはまる。
処理プログラムはデータ処理手順を記述する。図４に於ける処理プログラムは、例えば、ＭｙＭａｐ及びＭｙＲｅｄｕｃｅという処理手続きをプログラム言語で具体的に記述する。
分散処理管理サーバ３１０は、データ所在格納部３１２０、サーバ状態格納部３１１０、負荷算出部３１３、サーバ間負荷取得部３１８及び処理割当部３１４、メモリ３１５を包含する。
データ所在格納部３１２０には、分散システム３４０において一意に識別されるデータ集合の名称に対して、そのデータ集合に所属するデータを格納しているデータサーバ３３０の識別子が一以上格納されている。
データ集合は、一以上のデータ要素の集合である。データ集合は、データ要素の識別子の集合、データ要素群の識別子の集合、共通条件を満足するデータの集合として定義されても良いし、これらの集合の和集合や積集合として定義されても良い。
データ要素は、一つの処理プログラムの入力又は出力の単位となる。データ集合は構造プログラムにおいて、図４の構造プログラムに示したように、識別名で明示的に指定されても、指定した処理プログラムの出力結果等、他の処理との関係により指定されても良い。
データ集合とデータ要素は、典型的にはファイルとファイル内のレコードに対応するが、この対応に限られない。図５Ａは、データ集合とデータ要素の例を示す。同図は、分散ファイルシステムにおける対応を例示する。
処理プログラムが引数として受け取る単位が個々の分散ファイルである場合、データ要素は各分散ファイルである。この場合、データ集合は分散ファイルの集合であり、例えば、分散ファイルディレクトリ名、複数の分散ファイル名の列挙、あるいは、ファイル名に対する共通条件指定によって特定される。データ集合は、複数の分散ファイルディレクトリ名の列挙であっても良い。
処理プログラムが引数として受け取る単位が行又はレコードである場合、データ要素は分散ファイル中の各行又は各レコードとなる。この場合、データ集合は、例えば、分散ファイルである。
データ集合がリレーショナル・データベースにおけるテーブルであって、データ要素が当該テーブルの各行であっても良い。データ集合がＣ＋＋やＪａｖａ（登録商標）等のプログラムのＭａｐやＶｅｃｔｏｒ等のコンテナであって、データ要素がコンテナの要素であってもよい。さらに、データ集合が行列であって、データ要素が、行、列、あるいは行列要素であっても良い。
このデータ集合と要素の関係は、処理プログラムの内容で規定される。この関係は、構造プログラムに記述されていても良い。
データ集合及びデータ要素が何れの場合であっても、データ集合の指定やデータ要素の複数登録により、処理対象のデータ集合が定まり、これを格納するデータサーバ３３０との対応付けが、データ所在格納部３１２０に格納される。
各データ集合は、複数の部分集合（部分データ）に分割されて、複数のデータサーバ３３０に分散配置されていても良い（図５Ｂ（ａ））。図５Ｂにおいて、サーバ５０１〜５５２は、データサーバ３３０である。
ある分散データが各々２以上のデータサーバ３３０に多重化されて配置されていても良い（図５Ｂ（ｂ））。処理サーバ３２０は、多重化されたデータ要素を処理するために、多重化された分散データの何れかの一つからデータ要素を入力すれば良い。
ある分散データが各々ｎ（３以上）台のデータサーバ３３０に符号化されて配置されていても良い（図５Ｂ（ｃ））。ここで、符号化は、公知のＥｒａｓｕｒｅ符号あるいはＱｕｏｒｕｍ方式等を用いて行われる。処理サーバ３２０は、データ要素を処理するために、符号化された分散データの最低取得数ｋ個（ｋはｎより小さい）からデータ要素を入力すれば良い。
図６Ａは、データ所在格納部３１２０に格納される情報を例示する。データ所在格納部３１２０は、データ集合名３１２１又は部分データ名３１２７毎の複数の行を格納する。データ集合（例えば、ＭｙＤａｔａＳｅｔ１）が分散配置されている場合、当該データ集合の行は、その旨の記述（分散形態３１２２）、並びに当該データ集合に属する部分データ毎に部分データ記述３１２３を包含する。
部分データ記述３１２３は、ローカルファイル名３１２４、ＤサーバＩＤ３１２５、及びデータ量３１２６の組を包含する。ＤサーバＩＤ３１２５は、当該部分データを格納するデータサーバ３３０の識別子である。当該識別子は、分散システム３４０内一意の名称でも良いしＩＰアドレスでも良い。ローカルファイル名３１２４は、当該部分データが格納されるデータサーバ３３０内で一意のファイル名である。データ量３１２６は、当該部分データの大きさを示すギガバイト（ＧＢ）数等である。
データ集合（ＭｙＤａｔａＳｅｔ５等）の一部又は全ての部分データが多重化あるいは符号化等されているとき、当該データ集合に対応する行は、分散配置の記述（分散形態３１２２）、並びに当該部分データの部分データ名３１２７（ＳｕｂＳｅｔ１、ＳｕｂＳｅｔ２等）が格納される。このとき、データ所在格納部３１２０は、当該部分データ名３１２７対応の行（例えば、図６Ａの６、７行目）を格納する。
部分データ（例えば、ＳｕｂＳｅｔ１）が多重化（例えば二重化）されている場合、当該部分データの行は、その旨の記述（分散形態３１２２）、並びに、部分データの多重化データ毎に部分データ記述３１２３を包含する。当該部分データ記述３１２３は、部分データの多重化データを格納するデータサーバ３３０の識別子（ＤサーバＩＤ３１２５）、データサーバ３３０内で一意のファイル名（ローカルファイル名３１２４）及びデータの大きさ（データ量３１２６）を格納する。
部分データ（例えば、ＳｕｂＳｅｔ２）が符号化されている場合、当該部分データの行は、その旨の記述（分散形態３１２２）、並びに、部分データの符号化データ毎に部分データ記述３１２３を包含する。当該部分データ記述３１２３は、部分データの符号化データを格納するデータサーバ３３０の識別子（ＤサーバＩＤ３１２５）、データサーバ３３０内で一意のファイル名（ローカルファイル名３１２４）及びデータの大きさ（データ量３１２６）を格納する。分散形態３１２２は、符号化されたｎ個のデータ中、任意のｋ個のデータを取得すれば部分データが復元できる旨の記述も包含している。
データ集合（例えば、ＭｙＤａｔａＳｅｔ２）は、部分データに分割されずに多重化されても良い。この場合、当該データ集合の行の部分データ記述３１２３は、データ集合の多重化データ対応に存在する。当該部分データ記述３１２３は、多重化データを格納するデータサーバ３３０の識別子（ＤサーバＩＤ３１２５）、データサーバ３３０内で一意のファイル名（ローカルファイル名３１２４）及びデータの大きさ（データ量３１２６）を格納する。
データ集合（例えば、ＭｙＤａｔａＳｅｔ３）は、部分データに分割されずに符号化されても良い。データ集合（例えば、ＭｙＤａｔａＳｅｔ４）は、部分データに分割も、冗長化も、符号化もされていなくても良い。
なお、分散システム３４０が扱うデータ集合の分散態様が単一である場合、データ所在格納部３１２０は、分散形態３１２２の記述を包含しなくても良い。簡単のため、以降の実施形態の説明は、原則的にデータ集合の分散態様が上述した何れか単一の態様であることを仮定して与えられる。複数の形態の組み合わせに対応するためには、分散処理管理サーバ３１０等は、分散形態３１２２の記述に基づいて、以降説明する処理を切り替える。
処理対象のデータは、クライアント３００がデータ処理を要求するより以前に、Ｄデータ格納部３３１格納されている。処理対象のデータは、クライアント３００がデータ処理を要求するときに、クライアント３００やその他のサーバ等がデータサーバ３３０に与えても良い。
なお、図３は、この分散処理管理サーバ３１０が、特定の一台のコンピュータ等内に存在する場合を示しているが、サーバ状態格納部３１１０やデータ所在格納部３１２０が分散ハッシュテーブル等の技術にて分散した装置に格納されていても良い。
図６Ｂは、サーバ状態格納部３１１０に格納される情報を例示する。サーバ状態格納部３１１０は、分散システム３４０内で運転されている処理サーバ３２０毎に、ＰサーバＩＤ３１１１、負荷情報３１１２及び構成情報３１１３を格納する。ＰサーバＩＤ３１１１は、処理サーバ３２０の識別子である。負荷情報３１１２は、処理サーバ３２０の処理負荷に関する情報、例えば、ＣＰＵ利用率、入出力ビジー率を包含する。構成情報３１１３は、処理サーバ３２０の構成や設定の状態情報、例えば、ＯＳやハードウェアの仕様を包含する。
サーバ状態格納部３１１０やデータ所在格納部３１２０に格納される情報は、処理サーバ３２０やデータサーバ３３０からの状態通知によって更新されても、分散処理管理サーバ３１０が状態を問い合わせて得られた応答情報によって更新されても良い。
処理割当部３１４は、クライアント３００の処理要求部３０３からデータ処理要求を受け付ける。処理割当部３１４は、当該処理のために利用する処理サーバ３２０を選択し、どの処理サーバ３２０がどのデータサーバ３３０からデータ集合を取得して処理すべきかを決定し、決定情報を出力する。
図６Ｃは決定情報の構成を例示する。図６Ｃに例示される決定情報は、処理割当部３１４により各処理サーバ３２０に送信される。決定情報は、受信した処理サーバ３２０が、どのデータサーバ３３０から、どのデータ集合を受信すべきかを特定する。一台のデータサーバ３３０のデータを複数の処理サーバ３２０が受信するような場合（図７Ａの７０４で後述）、決定情報は受信データ特定情報も包含する。受信データ特定情報は、データ集合内のどのデータが受信対象であるかを特定する情報であり、例えば、データの識別子集合、データサーバ３３０のローカルファイル内の区間指定（開始位置、転送量）である。受信データ特定情報は、間接的にデータ転送量を規定する。決定情報を受信した各処理サーバ３２０は、当該情報で特定されたデータサーバ３３０にデータ送信を要求する。
なお、決定情報は、処理割当部３１４により各データサーバ３３０に送信されても良い。この場合、決定情報は、どの処理サーバ３２０へ、どのデータ集合のどのデータを送信すべきかを特定する。
処理割当部３１４がクライアント３００から受け付けるデータ処理要求は、データ処理対象のデータ集合名３１２１、処理内容を表す処理プログラム名、処理プログラムとデータ集合間の関係を記述する構造プログラム、並びに、処理プログラム実体を包含する。分散処理管理サーバ３１０又は処理サーバ３２０が処理プログラムを既に備えている場合、データ処理要求は、処理プログラムの実体を含まなくても良い。また、データ処理対象のデータ集合名３１２１、処理内容を表す処理プログラム名、処理プログラムとデータ集合間の関係が固定的であれば、データ処理要求は構造プログラムを含まなくても良い。
また、データ処理要求は、当該処理に利用する処理サーバ３２０の処理要件として、制約と数量を包含しても良い。制約は、選択する処理サーバ３２０のＯＳやハードウェア仕様等である。数量は、利用するサーバ台数やＣＰＵコア数、あるいはそれに類する数量である。
データ処理要求を受け付けると、処理割当部３１４は負荷算出部３１３を起動する。負荷算出部３１３は、データ所在格納部３１２０を参照して、完全データ集合に所属するデータを格納したデータサーバ３３０のリスト、例えばデータサーバ３３０の識別子のリスト（データサーバリスト）の集合を取得する。
完全データ集合は、処理サーバ３２０が処理を実行するために必要となるデータ要素の集合である。完全データ集合は構造プログラムの記述（ｓｅｔ＿ｄａｔａ句）等から決定される。例えば、図４の（ａ）に示す構造プログラムは、ＭｙＭａｐ処理の完全データ集合がＭｙＤａｔａＳｅｔのデータ要素の集合であることを示している。
構造プログラムが処理対象として一つのデータ集合を指定し、当該データ集合が、分散配置されて各分散データが多重化も符号化もなされていないとき（例えば、図６ＡのＭｙＤａｔａＳｅｔ１）は、各部分データ又は各部分データの一部が完全データ集合となる。このとき、各データサーバリストは、各部分データを格納する一台のデータサーバ３３０の識別子（ＤサーバＩＤ３１２５）であり、要素数が１のリストとなる。例えば、ＭｙＤａｔａＳｅｔ１の最初の完全データ集合、即ち部分データ（ｄ１，ｊ１，ｓ１）のサーバリストはｊ１という要素数が１のリストである。ＭｙＤａｔａＳｅｔ１の２番目の完全データ集合、即ち部分データ（ｄ２，ｊ２，ｓ２）のサーバリストはｊ２という要素数が１のリストである。従って、負荷算出部３１３は、データサーバリストの集合として、ｊ１、ｊ２を取得する。
なお、他の分散形態３１２２のデータ集合を対象にした処理は、後続する実施形態で説明される。
次に、負荷算出部３１３は、サーバ状態格納部３１１０を参照してデータ処理に利用可能な処理サーバ３２０を選択して、その識別子集合を取得する。ここで、負荷算出部３１３は、負荷情報３１１２を参照して、処理サーバ３２０がデータ処理に利用可能か否かを判断しても良い。例えば、負荷算出部３１３は、他の計算処理で利用中（ＣＰＵ使用率が所定閾値以上）であれば、その処理サーバ３２０は利用可能でないと判断しても良い。
さらに、負荷算出部３１３は、構成情報３１１３を参照して、クライアント３００から受信したデータ処理要求に含まれる処理要件を満足しない処理サーバ３２０を利用可能でないと判断しても良い。例えば、データ処理要求が特定のＣＰＵ種別やＯＳ種別を指定しており、ある処理サーバ３２０の構成条件３１１３が他のＣＰＵ種別やＯＳ種別を包含するとき、負荷算出部３１３は、当該処理サーバ３２０は利用可能でないと判断しても良い。
なお、サーバ状態格納部３１１０は、構成情報３１１３に図示されない優先度を包含しても良い。サーバ状態格納部３１１０格納される優先度は、例えば、処理サーバ３２０がクライアント３００から要求されたデータ処理以外の処理（他の処理）の優先度である。優先度は、他の処理実行中に格納されている。
負荷算出部３１３は、処理サーバ３２０が他の処理を実行中であってＣＰＵ使用率が高い場合であっても、当該優先度がデータ処理要求に含まれる優先度より低い場合は、当該処理サーバ３２０を利用可能として取得しても良い。同部は、このように取得された処理サーバ３２０に、実行中処理中止要求を送信等する。
なお、データ処理要求に含まれる優先度は、クライアント３００に入力されるプログラム等から取得される。例えば、構造プログラムがＳｅｔ＿ｃｏｎｆｉｇ句内に優先度指定を包含する。
負荷算出部３１３は、上述で取得した各処理サーバ３２０とデータサーバ３３０間の通信に関する負荷（サーバ間通信負荷）を基に、完全データ単位取得負荷ｃｉｊを要素とする通信負荷行列Ｃをメモリ３１５の作業域３１６等に作成する。
サーバ間通信負荷は、２つのサーバ間の通信を避けたい度合い（忌避度）を単位通信データ量あたりの値として表現した情報である。
サーバ間通信負荷は、例えば、一単位通信量あたりの通信時間、又は通信路上にあるバッファ量（滞留データ量）である。通信時間は、１パケットの往来に要する時間、あるいは、一定のデータ量の転送に要する時間（リンク層の帯域の逆数や、その時点における利用可能帯域の逆数等）であっても良い。負荷は実測値であっても推測値であっても良い。
例えば、サーバ間負荷取得部３１８が、分散処理管理サーバ３１０の図示されない記憶装置等に格納されている、二つのサーバ間あるいは当該サーバを収容しているラック間の通信の実績データの平均等の統計値を算出する。同部は、算出した値をサーバ間通信負荷として作業域３１６等に格納する。負荷算出部３１３は作業域３１６等を参照してサーバ間通信負荷を得る。
また、サーバ間負荷取得部３１８が、前述の実績データから時系列予測技術を用いてサーバ間通信負荷の予測値を算出しても良い。更に同部は、各サーバに対して有限の次数座標を割り当て、当該座標間のユークリッド距離から推測される遅延値を求めて、サーバ間通信負荷としても良い。同部は、各サーバに割り当てられたＩＰアドレスの先頭からの一致長から推測される遅延値を求めて、サーバ間通信負荷としても良い。
更に、サーバ間通信負荷は、一単位通信量あたりに発生する通信業者への支払金額等であってもよい。この場合等、各処理サーバ３２０とデータサーバ３３０間のサーバ間通信行列が、分散システム３４０の管理者等からシステムパラメータ等として負荷算出部３１３に与えられる。このような場合、サーバ間負荷取得部３１８は不要となる。
通信負荷行列Ｃは、上記で取得した処理サーバ３２０を列に、データサーバリストを行に並べた、完全データ単位取得負荷ｃｉｊを要素とした行列である。完全データ単位取得負荷ｃｉｊは、処理サーバｊが完全データ集合ｉの単位通信量を得るための通信負荷である。
なお、以降の実施の形態で示されるように通信負荷行列Ｃは、ｃｉｊに処理サーバｊの処理能力指標値が加算された値（完全データ単位処理負荷ｃ’ｉｊ）を要素としても良い。図６Ｄは、通信負荷行列Ｃを例示する。
本実施の形態で対象とするデータ集合の場合、上記で説明の通り各部分データが完全データ集合である為、完全データ単位取得負荷ｃｉｊは部分データｉを格納するデータサーバｉだけから単位通信量を受信する負荷となる。即ち、完全データ単位取得負荷ｃｉｊはデータサーバｉと処理サーバｊの間のサーバ間通信負荷そのものとなる。図６Ｅは、本実施の形態に於ける通信負荷行列Ｃを例示する。
処理割当部３１４は、目的関数を最小化するような流量行列Ｆを算出する。流量行列Ｆは、得られた通信負荷行列Ｃと対応する行及び列を持った通信量（流量）の行列である。目的関数は、通信負荷行列Ｃを定数として持ち流量行列Ｆを変数として持つ。
目的関数は、分散システム３４０全体に与える総通信負荷量の最小化が目的であれば総和（Ｓｕｍ）関数であり、データ処理の最長実行時間を最小にすることが目的であれば最大（Ｍａｘ）関数となる。
処理割当部３１４が最小化対象とする目的関数とその最小化時に使用する制約式は、分散システム３４０において、各データサーバ３３０にどのようにデータが分散しているか、またそのデータを処理する方法に依存する。目的関数や制約式は、分散システム３４０に応じて、システムパラメータ等としてシステム管理者等により分散処理管理サーバ３１０に与えられる。
各データサーバ３３０のデータ量は、メガバイト（ＭＢ）等のバイナリ量や、予め一定量に区切られたブロックの数量で計測される。図７Ａに示すように、各データサーバ３３０が格納するデータの量は、データサーバ３３０毎に異なる場合と同一である場合がある。また一つのデータサーバ３３０が格納するデータが、異なる処理サーバ３２０で分割して処理可能な場合と不可能な場合もある。負荷算出部３１３は、図７Ａに示す場合に応じた目的関数と制約式を使用する。
まず、対象とするデータ集合がデータサーバ３３０に分散する量が、均一である場合（７０１）と、不均一である場合（７０２）がある。不均一である場合（７０２）には、そのデータを保持するデータサーバ３３０と複数の処理サーバ３２０が対応づけられる場合（７０４）と、１つの処理サーバ３２０しか対応づかない場合（７０３）とがある。複数の処理サーバ３２０と対応づく場合とは、例えば、データが分割されて、複数の処理サーバ３２０はその一部を処理する場合である。なお、均一な場合の分割は、例えば、不均一な場合（７０４）に含めて処理される。また、分散処理管理サーバ３１０は、図７Ｂに示すように、不均一な場合（７０５）も、本来同一のデータサーバ３３０を処理上は複数の別サーバと捉えて、均一な場合（７０６）に含めて扱う。
本実施の形態は、この３モデルについて目的関数と制約式を示す。第２以降の実施の形態は上述の３つのモデルのうちの一つを使用するが、対象とする分散システム３４０に応じて他のモデルを採用しても良い。
式中で用いる記号は下記の通りである。ＶＤはデータサーバ３３０の集合であり、ＶＮは利用可能な処理サーバ３２０の集合である。ｃｉｊは完全データ単位取得負荷であり、本実施例に於いては、ＶＤの要素であるｉとＶＮの要素であるｊとの間のサーバ間通信負荷であって、通信負荷行列Ｃの要素である。ｆｉｊは流量行列Ｆの要素であり、ＶＤの要素であるｉとＶＮの要素であるｊとの間の通信量である。ｄｉは、ＶＤに属する全てのサーバｉに格納されるデータ量である。Σは指定した集合について加算をとり、Ｍａｘは指定した集合について最大の値をとる。また、ｍｉｎは最小化を表し、ｓ．ｔ．は制約を表す。
図７Ａの７０１のモデルに対する目的関数の最小化式は、式１あるいは式２の目的関数をとり、制約式は式３かつ式４である。
ｍｉｎ．  Σｉ∈ＶＤ，ｊ∈ＶＮ  ｃｉｊｆｉｊ  ．．．（１）
ｍｉｎ．  Ｍａｘｊ∈ＶＮ  Σｉ∈ＶＤ  ｃｉｊｆｉｊ  ．．．（２）
ｓ．ｔ．  ｆｉｊ∈｛０，１｝（∀ｉ∈ＶＤ，∀ｊ∈ＶＮ）  ．．．（３）
ｓ．ｔ．  Σｊ∈ＶＮ  ｆｉｊ＝１（∀ｉ∈ＶＤ）  ．．．（４）
すなわち、処理割当部３１４は、データサーバｉと処理サーバｊとの間のサーバ間通信負荷とその間の通信量との積（完全データ処理負荷）について、式１では全組み合わせについての加算を最小化するようなサーバ間の通信量を算出する。同部は、式２では各処理サーバ３２０の中で、当該積を全データサーバ３３０に渡って加算した数の最大値を最小化するようなサーバ間の通信量を算出する。通信量は、送信するかしないかで０か１の値を取り、また、いずれのデータサーバ３３０についても、全処理サーバ３２０に渡っての通信量の和は１である。
図７Ａの７０３のモデルでは、処理割当部３１４は、式５あるいは式６の目的関数を使用し、式３かつ式４の制約式を使用する。式５及び式６は、ｄｉ＝１（∀ｉ∈ＶＤ）として式１及び式２に一致する。
ｍｉｎ．  Σｉ∈ＶＤ，ｊ∈ＶＮ  ｄｉｃｉｊｆｉｊ  ．．．（５）
ｍｉｎ．  Ｍａｘｊ∈Ｖ  Ｎ  Σｉ∈ＶＤ  ｄｉｃｉｊｆｉｊ  ．．．（６）
すなわち、処理割当部３１４は、式１及び式２における各データサーバｉからの通信負荷に、各データサーバｉにおけるデータ量ｄｉを乗じる。
次に、図７Ａの７０４のモデルでは、処理割当部３１４は、式１あるいは式２の目的関数を使用し、式７かつ式８の制約式を使用する。
ｓ．ｔ．  ｆｉｊ≧０（∀ｉ∈ＶＤ，∀ｊ∈ＶＮ）  ．．．（７）
ｓ．ｔ．  Σｊ∈ＶＮ  ｆｉｊ＝ｄｉ（∀ｉ∈ＶＤ）  ．．．（８）
処理割当部３１４は、式３ではデータサーバｉから転送するか否か（０又は１）であった流量を、データサーバｉからの通信量の総和が当該サーバｉにおけるデータ量に一致するとの制約の下、連続値として算出する。
目的関数の最小化は、線形計画法や非線形計画法、あるいは二部グラフマッチングにおけるハンガリー法、最小費用流問題における負閉路除法や、最大流問題におけるフロー増加法やプリフロープッシュ法等を用いて実現できる。処理割当部３１４は、上述の何れか又はその他の解法を実行するように実現される。
処理割当部３１４は、流量行列Ｆが決定されると、データ処理に利用する（通信量ｆｉｊが０でない）処理サーバ３２０を選択し、流量行列Ｆに基づいて図６Ｃに例示したような決定情報を生成する。
続いて、処理割当部３１４は、利用する処理サーバ３２０のＰサーバ管理部３２２に対して決定情報を送信する。処理サーバ３２０が予め処理プログラムを備えていない場合、処理割当部３１４は、同時に、例えばクライアント３００から受信した処理プログラムを配布しても良い。
クライアント３００、分散処理管理サーバ３１０、処理サーバ３２０及びデータサーバ３３０内の各部は、専用ハードウェア装置として実現されても良いし、コンピュータでもあるクライアント３００等のＣＰＵがプログラムを実行することで実現されても良い。例えば、分散管理サーバ３１０の処理割当部３１４及び負荷算出部３１３は専用ハードウェア装置として実現されても良い。これらは、コンピュータでもある分散処理管理サーバ３１０のＣＰＵがメモリ３１５にロードされている分散処理管理プログラム３１７を実行することで実現されても良い。
また、上述したモデル、制約式、目的関数の指定は、構造プログラム等に記述されて、クライアント３００から分散処理管理サーバ３１０に与えられても良いし、起動パラメータ等として分散処理管理サーバ３１０に与えられても良い。さらに、分散処理管理サーバ３１０が、データ所在格納部３１２０等を参照してモデルを決定しても良い。
分散処理管理サーバ３１０は、全てのモデル、制約式、目的関数に対応するように実装されていても良いし、特定のモデル等だけに対応するように実装されていても良い。
次に、フローチャートを参照して、分散システム３４０の動作を説明する。
図８は、分散システム３４０の全体動作フローチャートである。利用者プログラムを入力されると、クライアント３００はそのプログラムを解釈し、データ処理要求を分散処理管理サーバ３１０に送信する（ステップ８０１）。
分散処理管理サーバ３１０は、処理対象データ集合の部分データを格納するデータサーバ３３０及び利用可能な処理サーバ３２０の集合を取得する（ステップ８０２）。分散処理管理サーバ３１０は、取得した各処理サーバ３２０と各データサーバ３３０間のサーバ間通信負荷を基に、通信負荷行列Ｃを作成する（ステップ８０３）。分散処理管理サーバ３１０は、通信負荷行列Ｃを入力して、各処理サーバ３２０と各データサーバ３３０間の通信量を、所定制約条件下で所定の目的関数を最小化するように決定する（ステップ８０４）。
分散処理管理サーバ３１０は、各処理サーバ３２０と各データサーバ３３０に当該決定に従ったデータ送受信を実施させ、各処理サーバ３２０に受信したデータを処理させる（ステップ８０５）。
図９は、ステップ８０１のクライアント３００の動作フローチャートである。クライアント３００の処理要求部３０３は、構造プログラムから処理対象データ集合と処理プログラム間の入出力関係等を抽出し、抽出情報を構造プログラム格納部３０１に格納する（ステップ９０１）。同部は、処理プログラムの内容、インターフェース情報等を処理プログラム格納部３０２に格納する（ステップ９０２）。更に、同部は、データ処理に必要なサーバ資源量あるいはサーバ資源の種別等について、構造プログラムあるいは予め与えられた設定情報等から抽出し、抽出情報を処理要件格納部３０４に格納する（ステップ９０３）。
処理対象データ集合が、当該クライアント３００から与えられる場合、処理要求部３０３は、データ集合に所属するデータを通信帯域や記憶容量等の所定基準で選択したデータサーバ３３０のＤデータ格納部３３１に格納する（ステップ９０４）。同部は、構造プログラム格納部３０１、処理プログラム格納部３０２、及び、処理要件格納部３０４を参照してデータ処理要求を生成し、分散処理管理サーバ３１０の処理割当部３１４に送信する（ステップ９０５）。
図１０は、ステップ８０２の分散処理管理サーバ３１０の動作フローチャートである。負荷算出部３１３は、データ所在格納部３１２０を参照して、クライアント３００から受信したデータ処理要求で指定された処理対象データ集合の各部分データを格納するデータサーバ３３０の集合を取得する（ステップ１００１）。データサーバ３３０の集合とは、データサーバ３３０の識別子の集合等を意味する。次に、同部は、データ処理要求で指定された処理要件を満たす利用可能な処理サーバ３２０の集合を、サーバ状態格納部３１１０を参照して取得する（ステップ１００２）。
図１１は、ステップ８０３の分散処理管理サーバ３１０の動作フローチャートである。分散処理管理サーバ３１０の負荷算出部３１３が、サーバ間負荷取得部３１８等を経由して、取得した各データサーバ３３０と各処理サーバ３２０間のサーバ間通信負荷を求め、通信負荷行列Ｃを作成する（ステップ１１０３）。
負荷算出部３１３は、ステップ８０４において通信負荷行列Ｃを基に目的関数を最小化する。この最小化は線形計画法やハンガリー法等を用いて行う。ハンガリー法を用いた動作具体例が図１９Ｆ、図１９Ｇを参照して後述される。
図１２は、ステップ８０５の分散処理管理サーバ３１０の動作フローチャートである。分散処理管理サーバ３１０の処理割当部３１４は、取得された処理サーバ３２０集合内の処理サーバｊについて（ステップ１２０１）、処理サーバｊが受信する全通信量の和を算出する（ステップ１２０２）。その値が０出ない場合（ステップ１２０３でＮＯ）、処理割当部３１４は、処理サーバｊに処理プログラムを送付する。
さらに、同部は、処理サーバｊに、『自身と通信量が０でないようなデータサーバｉにデータ取得要求を出し、データ処理の実行をする』ように指示する（ステップ１２０４）。例えば、処理割当部３１４は、図６Ｃに例示した決定情報を作成して、処理サーバｊに送信する。
なお、本実施の形態の処理割当部３１４は、式９Ａが示すように、処理サーバｊについての通信量の総和に一定の制約ｄ’ｊを課しても良い。
ｓ．ｔ．  Σｉ∈ＶＤ  ｆｉｊ≦ｄ’ｊ（∀ｊ∈ＶＮ）  ．．．（９Ａ）
ただし、処理割当部３１４は、ｄ’ｊが式９Ｂを満たすように設定する。
Σｉ∈ＶＤ  ｄｉ  ≦  Σｊ∈ＶＮ  ｄ’ｊ．．．（９Ｂ）
本実施の形態の分散システム３４０の第１の効果は、複数のデータサーバ３３０と複数の処理サーバ３２０が与えられた際に、全体として適切なサーバ間のデータ送受信を実現出来ることである。
その理由は、分散処理管理サーバ３１０が、各データサーバ３３０と各処理サーバ３２０の任意の組み合わせ全体の中から、送受信を行うデータサーバ３３０と処理サーバ３２０を決定するからである。換言すれば、分散処理管理サーバ３１０は、個別のデータサーバ３３０と処理サーバ３２０注目して逐次的にサーバ間のデータ送受信を決定しないからである。
本分散システム３４０のデータ送受信は、ネットワーク帯域不足による計算処理の遅れや、他のネットワークを共有するシステムへの悪影響を低減する。
本分散システム３４０の第２の効果は、サーバ間の通信遅延の大きさや、帯域の狭さ、故障頻度の多さ、同じ通信路を共有する他のシステムと比較した優先度の低さ等、種々の観点の通信負荷を低減出来ることである。
その理由は、分散処理管理サーバ３１０は、負荷の性質に依存しない手法で、適切なサーバ間のデータ送受信を決定するからである。負荷算出部３１３は、サーバ間通信負荷として、伝送時間の実測値や推定値、通信帯域、優先度等を入力できる。
本分散システム３４０の第３の効果は、通信負荷の総量を低減するのか、あるいは最も通信負荷の大きな経路の通信負荷を下げるのか等を、使用者のニーズに合わせて選択できることである。その理由は、分散処理管理サーバ３１０の処理割当部３１４は、式１、式２等、複数のなかから選択された目的関数を最小化出来るからである。
本分散システム３４０の第４の効果は、処理サーバ３２０で他の処理が実行されていても、依頼を受けたデータ処理の優先度が高ければ、他の処理を中断してデータに近い処理サーバ３２０で処理させることが可能なことである。その結果、分散システム３４０は、優先度の高い処理の全体として適切なサーバ間のデータ送受信を実現出来る。
その理由は、サーバ状態格納部３１１０に処理サーバ３２０の実行中処理の優先度を格納し、データ処理要求に依頼された新たなデータ処理の優先度を包含し、後者の優先度が高ければ、負荷にかかわらず処理サーバ３２０にデータを送信させるからである。
［第２の実施の形態］第２の実施の形態について図面を参照して詳細に説明する。本実施の形態の分散処理管理サーバ３１０は、各処理サーバ３２０が処理するデータ量の平準化効果も備えた処理割当決定を行う。
本実施の形態の処理割当部３１４は、サーバ状態格納部３１１０に格納された処理サーバ３２０の処理能力の情報を利用する。処理能力の情報とは、ＣＰＵのクロック数やコア数、あるいはそれに類する定量化された指標である。
本実施形態の処理割当部３１４が用いる方法としては、処理能力指標を制約式に含める方式と、目的関数に含める方式とがある。本実施の形態の処理割当部３１４は、どちらの方式を用いて実現されても良い。
以下の式中において、ｐｊはＶＮに属する処理サーバｊの処理能力の比であり、Σｊ∈ＶＮｐｊ＝１である。処理割当部３１４は、サーバ状態格納部３１１０の負荷情報３１１２及び構成情報３１１３を参照して、負荷算出部３１３により取得された利用可能な各処理サーバｊの利用可能な処理能力比ｐｊを計算する。
制約式に含める場合、処理サーバｊにおいて処理するデータ量の最大許容値ｄ’ｊを用いた式１０Ｂが処理割当部３１４に与えられる。処理割当部３１４は、ｄ’ｊを、例えば、式１０Ａに基づいて算出する。ここで、正の係数α（＞０）は、サーバ間通信負荷を考慮して、処理能力比に応じた割当からの誤差を許容する程度を規定する値であり、システムパラメータ等として処理割当部３１４に与えられる。
ｄ’ｊ＝（１＋α）ｐｊ  Σｉ∈ＶＤ  ｄｉ（∀ｊ∈ＶＮ）．．（１０Ａ）
ｓ．ｔ．  Σｉ∈ＶＤ  ｆｉｊ≦ｄ’ｊ（∀ｊ∈ＶＮ）．．．．（１０Ｂ）
すなわち、処理割当部３１４は、全データサーバ３３０の総データ量を処理サーバ３２０の処理能力比で分配し、各処理サーバ３２０のデータ送受信量の総量は、これと同程度のデータ量までしか受けないものように制約する。
厳密に能力比割当である必要がない場合、システム管理者等は処理割当部３１４に大きなαの値を与える。この場合、処理割当部３１４は、多少能力比以上のデータ量を受信する処理サーバ３２０の存在を許容して、目的関数を最小化する。なお、ＶＮの要素数を｜ＶＮ｜として、α＝０かつｐｊ＝１／｜ＶＮ｜（∀ｊ∈ＶＮ）の時、各処理サーバ３２０は均一な量のデータ処理を行う。
目的関数に含める場合には、負荷算出部３１３は、完全データ単位量処理負荷ｃ’ｉｊを要素として、式１、式２、式５、式６に示した目的関数における通信負荷行列Ｃを作成する。完全データ単位量処理負荷ｃ’ｉｊは、完全データ単位量処理負荷ｃｉｊにサーバ処理負荷を加算した値であり、式１１で与えられる。
ここで、βは、単位データ量当たりの処理時間であり、例えば、データ処理（処理プログラム）ごとに、構造プログラムに記述されたり、分散処理管理サーバ３１０のシステムパラメータに指定されたりして、処理割当部３１４に与えられる。サーバ処理負荷は、このβを各サーバの処理能力ｐｊについて規格化した値である。
ｃ’ｉｊ  ∝  ｃｉｊ  ＋  β／ｐｊ（∀ｉ∈ＶＤ，∀ｊ∈ＶＮ）．．（１１）
すなわち、データサーバｉから処理サーバｊへの通信量を増やすに応じて、目的関数の値には、ｃｉｊが加算されるのと同時に、処理サーバｊの処理能力の逆数に比例した負荷が加わる。
本方式は、目的関数が式２である場合等、処理サーバ３２０当たりの合計完全データ処理負荷の最大値を最小化する場合に、特に有用である。例えば、ｃｉｊがネットワーク帯域の逆数である場合、処理割当部３１４は、処理サーバｊが受けるデータ総量の受信時間と受信後の処理時間の和が、最も大きな処理サーバ３２０の時間を短くするように、サーバ間のデータ送受信を決定する。
本分散システム３４０の追加的な効果は、処理サーバ３２０がデータを受信する通信負荷だけでなく処理サーバ３２０の処理能力も考慮して目的関数を最小化できることである。その結果、例えば、各処理サーバ３２０のデータ受信と処理の両方の完了時点の平準化が出来る。
その効果が発生する理由は、目的関数を最小化において、処理サーバ３２０毎の計算能力を制約式や目的関数に含めるからである。
［第３の実施の形態］第３の実施の形態について図面を参照して説明する。本実施の形態のデータ処理サーバ３２０は、複数（Ｎ個）のデータ集合からデータ要素を入力してデータ処理を行う。
図１３は、本実施の形態のクライアント３００に入力される利用者プログラムを例示する。図１３の構造プログラムは、ＭｙＤａｔａＳｅｔ１とＭｙＤａｔａＳｅｔ２という２つのデータ集合の直積（ｓｅｔ＿ｄａｔａ句のｃａｒｔｅｓｉａｎ指定で指定）を処理することを記述している。本構造プログラムは、先ずＭｙＭａｐという処理プログラムを実行し、その出力結果に対してＭｙＲｅｄｕｃｅという処理プログラムを適用することを記述している。さらに、構造プログラムは、ＭｙＭａｐは４台、ＭｙＲｅｄｕｃｅは２台の処理サーバ３２０で並列に処理すべきであることを記述（ｓｅｔ＿ｃｏｎｆｉｇ句のＳｅｒｖｅｒ指定）している。図１３の（ｃ）はこの構造を表現した図である。
ＭｙＤａｔａＳｅｔ１とＭｙＤａｔａＳｅｔ２という２つのデータ集合の直積からなるデータとは、前者に含まれるデータ要素１１及び１２と、後者に含まれるデータ要素２１及び２２とからなる組み合わせデータである。具体的には、（要素１１と要素２１）、（要素１２と要素２１）、（要素１１と要素２２）、（要素１２と要素２２）の４組のデータがＭｙＭａｐに入力される。
本実施形態の分散システム３４０は、集合間の直積演算を要する任意の処理に利用することができる。例えば、処理がリレーショナル・データベースにおける複数テーブル間のＪＯＩＮである場合、２つのデータ集合はテーブルであり、データ要素１１〜１２と２１〜２２はテーブルに含まれる行である。複数のデータ要素の組を引数とするＭｙＭａｐ処理は、例えば、ＳＱＬのＷｈｅｒｅ節で宣言されるテーブル間の結合処理である。
ＭｙＭａｐの処理は、行列やベクトルの演算処理であってもよい。この場合、行列やベクトルがデータ集合であり、行列やベクトル内の値がデータ要素となる。
本実施形態に於いて、各データ集合は、単純な分散配置、冗長化された分散配置、符号化された分散配置等（図５Ｂ、図６Ａ参照）の何れの分散形態３１２２をとっていても良い。以降の説明は、単純な分散配置の場合についてのものである。
本実施の形態に於いて、構造プログラムで指定された複数データ集合から得られた要素の組の集合が完全データ集合となる。従って、データサーバリストは、各データ集合の何れかの部分データを格納したデータサーバ３３０のリストとなる。図１３で指示された如く複数データ集合の直積を処理する場合、データリストの集合は、各データ集合の何れかの部分データを格納したデータサーバ３３０のリストの全組み合わせとなる。
換言すれば、データサーバリストの集合は、複数の処理対象データ集合の部分データを格納したデータサーバ３３０の集合の直積で得られるデータサーバ３３０のリストからなる集合となる。
また、本実施形態における完全データ単位量取得負荷ｃｉｊは、処理サーバｊがサーバリストｉに属する各データサーバ３３０から各々単位データ量（例えば、１データ要素）を取得する為の通信負荷となる。従って、ｃｉｊは、処理サーバｊとサーバリストｉに属する各データサーバ３３０の間のサーバ間通信負荷の和となる。
図１５は、第３の実施の形態のステップ８０２及び８０３（図８）の分散処理管理サーバ３１０の動作フローチャートである。即ち、本実施の形態に於いては、本図が図１０、図１１を置き換える。
負荷算出部３１３は、処理対象となるＮ個のデータ集合の各々について、そのデータ集合の部分データを格納したデータサーバ３３０の集合をデータ所在格納部３１２０の部分データ記述３１２３から取得する。次に、同部は、これらＮ個のデータサーバ３３０の集合の直積を求め、当該直積の各要素をデータサーバリストとする（ステップ１５０１）。
同部は、データ処理要求の処理要件を満たす利用可能な処理サーバ３２０の集合を、サーバ状態格納部３１１０を参照して取得する（ステップ１５０２）。
同部は、上記ステップで取得した各データサーバリストｉ（ステップ１５０３）と、処理サーバ３２０集合内の各サーバｊ（ステップ１５０４）の組み合わせについて以下の処理を実行する。
同部は、データサーバリストｉを構成する各データサーバｋと処理サーバｊとのサーバ間通信負荷を算出し、サーバ間通信負荷のリスト｛ｂｋｊ｝ｉ（ｋ＝１〜Ｎ）を求める（ステップ１５０５）。なお、各部分データが多重化や符号化をされている場合、同部は、後述の第４の実施形態で示される方法で各サーバ間通信負荷を算出する。
同部は、求めたサーバ間通信負荷のリスト｛ｂｋｊ｝ｉのｋについての和Σｂｉｊを、データサーバリストｉと処理サーバｊとの間の完全データ単位量取得負荷ｃｉｊとする通信負荷行列Ｃを生成する（ステップ１５０６）。
なお、各データ集合のデータ量の総和が均一でない場合は、負荷算出部３１３は、データ集合毎にデータ要素のサイズ比で重み付けた和を完全データ単位量取得負荷ｃｉｊとする。各データ集合のデータ要素数が同一である場合は、データ要素のサイズ比で重み付けする代わりに、データ集合のデータ量比で重み付けても良い。
処理割当部３１４は、ここで生成された通信負荷行列Ｃを用いて目的関数の最小化等（図８のステップ８０４以降）を行う。
本実施形態の分散システム３４０が入力する利用者プログラムは、複数のデータ集合の直積を処理するプログラムに限られない。利用者プログラムは、例えば、複数のデータ集合の各々から、同一順序、同一識別子を有する等により関連付けられたデータ要素を１つずつ選択して、選択されたデータ要素で構成される組を処理する処理プログラムを包含するものでも良い。
このような利用者プログラムは、例えば、ＭｙＤａｔａＳｅｔ１とＭｙＤａｔａＳｅｔ２という２つのデータ集合の同一順番のデータ要素組（この場合は、対）を処理するようなプログラムである。図１４は、このようなプログラムの例である。このような利用者プログラムにおける構造プログラムは、例えば、指定された２つのデータ集合の関連データ要素組を処理対象（ｓｅｔ＿ｄａｔａ句のａｓｓｏｃｉａｔｅｄ指定で指定）とすることを記述している。
図１４のプログラムに於いても、図１３のプログラムに於ける場合と同様、構造プログラムで指定された複数データ集合から得られた要素の組の集合が完全データ集合となる。従って、データサーバリストは、各データ集合の何れかの部分データを格納したデータサーバ３３０のリストとなる。
ただし、図１４で示された如く複数データ集合の関連データ要素対を処理する場合、データサーバリストの集合は、図１３の利用者プログラムの場合とは異なる。負荷算出部３１３は、図１５のステップ１５０１に代えて、例えば、処理対象となる複数のデータ集合の各々をデータ量に比例する大きさの部分データに分割して、同順位の各部分データの組を格納するデータサーバ３３０のリストの集合を取得する。取得したリストの集合が、データサーバリストの集合である。
図１６は、データ要素の出現順で関連付けるａｓｓｏｃｉａｔｅｄ指定時のデータサーバリストの集合を例示する。同図に於いて、８ＧＢのデータ量を有するＭｙＤａｔａＳｅｔ１は、データサーバｎ１上に格納されている６ＧＢの部分データ１１と、データサーバｎ２上に格納されている２ＧＢの部分データ１２から構成される。
４ＧＢのデータ量を有するＭｙＤａｔａＳｅｔ２は、データサーバｎ３上に格納されている２ＧＢの部分データ２１と、データサーバｎ４上に格納されている２ＧＢの部分データ２２から構成される。
この場合、負荷算出部３１３は、ＭｙＤａｔａＳｅｔ１とＭｙＤａｔａＳｅｔ２をそのデータ容量比（８：４＝２：１）のセグメントに分割し、順番に対を構成する（ステップ１５０１）。この結果同部は、（部分データ１１の前半４ＧＢ、部分データ２１）、（部分データ１１の後半２ＧＢ、部分データ２２の前半１ＧＢ）、（部分データ１２、部分データ２２の後半１ＧＢ）の３つの部分データの対を得る。同部は、これらの部分データ対を格納するデータサーバリストの集合として、（ｎ１，ｎ３）、（ｎ１，ｎ４）、（ｎ２，ｎ４）との集合を得る。
以降の処理は、図１５と同じである。
本実施の形態の分散システム３４０の追加的な効果は、処理サーバ３２０が複数のデータ集合の各々に属する複数のデータ要素の組を入力して処理する際にも、ネットワーク負荷の所定和を低減するような処理配置を実現できることである。
その理由は、処理サーバ３２０がデータ要素のＮ個の組を取得する通信負荷ｃｉｊを算出して、そのｃｉｊを基に目的関数の最小化を実施するからである。
［第４の実施の形態］第４の実施の形態について図面を参照して説明する。本実施の形態の分散システム３４０は、多重化又は符号化されたデータを扱う。
本実施の形態のクライアント３００に入力されるプログラム例は、図４、図１３又は図１４に示した何れでも良い。説明の簡単のため、以降では、入力される利用者プログラム例は図４で示したものであるとする。但し、ｓｅｔ＿ｄａｔａ句で指定される処理対象データ集合は、図６Ａに例示するＭｙＤａｔａＳｅｔ５であるとする。
ＭｙＤａｔａＳｅｔ５が例示する如く、処理対象のデータ集合はその部分データ毎に異なるデータサーバ３３０に格納される。データ集合の一部の部分データが、多重化されている場合（図６ＡのＳｕｂＳｅｔ１等）、同一のデータが複数のデータサーバ３３０（例えば、データサーバｊｄ１、ｊｄ２）に複製され分散格納される。多重化は二重化に限られない。図６Ａにおけるデータサーバｊｄ１、ｊｄ２は、例えば、図５Ｂのサーバ５１１、５１２に相当する。
データ集合の一部の部分データ（図６ＡのＳｕｂＳｅｔ２等）が、Ｅｒａｓｕｒｅ符号化等を用い、データが分割・冗長化され、一つの部分データを構成する同サイズの異なるチャンクが互いに異なるデータサーバ３３０（例えば、データサーバｊｅ１〜ｊｅｎ）に格納される。図６Ａにおけるデータサーバｊｅ１〜ｊｅｎは、例えば、図５Ｂのサーバ５３１〜５５１に相当する。
この場合、部分データ（ＳｕｂＳｅｔ２等）は、ある一定の冗長数ｎに分割され、そのうち一定の最低取得数ｋ（ｋ＜ｎ）以上を取得した場合に部分データを復元できる。多重化の場合、全体としてデータ量は元のデータ量の多重度倍必要であるが、Ｅｒａｓｕｒｅ符号化の場合は、元の部分データ量の数割増し程度で良い。
また、負荷算出部３１３は、Ｑｕｏｒｕｍによって複製を分散配置されている部分データも、符号化されている部分データと同様に扱うように実現されても良い。Ｑｕｏｒｕｍは、分散したデータに対して一貫性を保って読み書きを行う方式である。複製数ｎ及び読み込み定数及び書き込み定数ｋが、分散形態３１２２に格納されて負荷算出部３１３に与えられる。負荷算出部３１３は、複製数を冗長数、読み込み定数及び書き込み定数を最低取得数と置き換えて扱う。
図４の利用者プログラムの場合、各部分データが完全データ集合である。部分データｉがｎ重化されている場合、完全データ単位取得負荷ｃｉｊは、部分データｉの多重化データを格納するｎ個のデータサーバｉ１〜データサーバｉｎ（データサーバリスト）の任意の一つから単位通信量を受信する負荷となる。そこで、負荷算出部３１３は、完全データ単位取得負荷ｃｉｊをデータサーバｉ１〜データサーバｉｎの各々と処理サーバｊの間のサーバ間通信負荷のうち、最小のものとする。
部分データｉがＥｒａｓｕｒｅ符号化又はＱｕｏｒｕｍで冗長化されている場合、完全データ単位取得負荷ｃｉｊは、部分データｉの冗長化データを格納するｎ個のデータサーバｉ１〜データサーバｉｎ（データサーバリスト）の任意のｋ個から単位通信量を受信する負荷となる。そこで、負荷算出部３１３は、完全データ単位取得負荷ｃｉｊをデータサーバｉ１〜データサーバｉｎの各々と処理サーバｊの間のサーバ間通信負荷のうち、小さい方からｋ個を加算したものとする。
図１７は、第４の実施の形態のステップ８０３（図８）の分散処理管理サーバ３１０の動作フローチャートである。即ち、本実施の形態に於いては、本図が図１１を置き換える。なお、本図は、各部分データがＥｒａｓｕｒｅ符号化又はＱｕｏｒｕｍで冗長化されている場合のフローチャートである。ｋを１に置換すると、本図は多重化された部分データに対応するフローチャートとなる。
負荷算出部３１３は、処理対象データ集合の各部分データｉについて（ステップ１７０１）、部分データｉを冗長格納しているデータサーバ３３０の識別子リスト（データサーバリスト）を、データ所在格納部３１２０から取得する（ステップ１７０２）。
同部は、利用可能な処理サーバ３２０集合に含まれる各処理サーバｊについて（ステップ１７０３）、部分データｉのデータサーバリストを構成する各データサーバｍとの間のサーバ間通信負荷リスト｛ｂｍｊ｝ｉ（ｍ＝１〜ｎ）を求める（ステップ１７０４）。同部は、サーバ間通信負荷リスト｛ｂｍｊ｝ｉのうち、小さい方からｋ個分の値を取り出して加算し、その加算値をｉ行ｊ列の要素ｃｉｊ（部分データｉと処理サーバｊの間の完全データ単位量取得負荷）とする通信負荷行列Ｃを生成する（ステップ１７０５）。
同部は、部分データｉと処理サーバｊ毎に、サーバ間通信負荷リスト｛ｂｍｊ｝ｉのうちどのサーバを選んだかについて、作業域３１６に記憶する（ステップ１７０６）。
処理割当部３１４は、ここで生成された通信負荷行列Ｃを用いて目的関数の最小化等（図８のステップ８０４以降）を行う。
なお、多重化又は符号化されている部分データｉを構成する複数のデータの各々が更に多重化又は符号化されている場合がある。例えば、二重化されている部分データｉを構成する一方が多重化され、他の一方が符号化されている場合などである。または、符号化されている部分データｉを構成する３個のチャンクのうち、１つのチャンクが二重化され、他の２つのチャンクが各々３個のチャンクに符号化されている場合である。このように、部分データｉは、多段階に多重化または符号化されていることがある。各段における多重化または符号化の方式の組み合わせは自由である。段数も二段に限定されない。
このような場合、図６Ａの部分データ名３１２７（例えば、ＳｕｂＳｅｔ１）に対応する行は、部分データ記述３１２３に代えて、下位の段の部分データ名３１２７（例えば、ＳｕｂＳｅｔ１１、ＳｕｂＳｅｔ１２．．．）を含む。そして、データ所在格納部３１２０は、それらのＳｕｂＳｅｔ１１、ＳｕｂＳｅｔ１２．．．に対応する行も包含する。図１７のステップ１７０２において、このようなデータ所在格納部３１２０を参照した負荷算出部３１３は、部分データｉに対してネスト構造を有するデータサーバリストを取得する。さらに、同部はネストしている各データサーバリストの各々について、ネストの深い順に、ステップ１７０５のサーバ間通信負荷加算を実行し、最終的に通信負荷行列Ｃを作成する。
符号化されている部分データを構成するｎ個のチャンクが、当該部分データが複数に分割されたデータ断片からなるチャンクとパリティ情報からなるチャンクである場合等には、処理サーバ３２０は、部分データを復元するために、特定のｋ個のチャンクの集合（復元可能集合）を必要とする。
この場合、負荷算出部３１３は、ステップ１７０５において、「｛ｂｍｊ｝ｉのうち、小さい方からｋ個分の値を取り出して加算し、その加算値をｉ行ｊ列の要素ｃｉｊとする」ことは出来ない。代わりに、同部は最小復号可能通信負荷ｉｊをｃｉｊとする。最小復号可能通信負荷ｉｊは、部分データｉの各復元可能集合ｉに属する各チャンクを格納するデータサーバｍｉに関する｛ｂｍｊ｝ｉの要素の加算値のうち、最小のものである。
ここでｂｍｊは断片ｍのデータ量を考慮した負荷である。また、どのチャンクが、各特定のｋ個の集合を構成するかは、チャンク化された時点で、各チャンクの属性情報等に記述されている。負荷算出部３１３は、当該情報を参照して各復元可能集合に属するチャンクを識別する。
例えば、部分データｉが、｛ｎ１，ｎ２，ｎ３，ｎ４，ｐ１，ｐ２｝という６チャンクに符号化されている場合、負荷算出部３１３は、例えば２つの復元可能集合Ｖｍ｛ｎ１，ｎ２，ｎ４，ｐ１，ｐ２｝および｛ｎ１，ｎ２，ｎ３，ｐ１，ｐ２｝をチャンクの属性情報から検索する。同部は、この２つの復元可能集合Ｖｍのうちで、Σｍ∈Ｖｍ｛ｂｍｊ｝ｉが最小となるＶｍに関するΣｍ∈Ｖｍ｛ｂｍｊ｝ｉをｃｉｊとする。
なお、特定のｋ個が任意のｋ個である場合、どちらの値をｃｉｊとしても結果は同じである。即ち、後者の処理は前者を一般化した処理である。
本実施の形態の分散システム３４０の追加的な効果は、データ集合が冗長化（多重化、符号化）されている場合、冗長化を利用してデータ転送に伴うネットワーク負荷を低減出来ることである。その理由は、分散処理管理サーバ３１０が、各処理サーバ３２０へ、当該処理サーバ３２０との間のサーバ間通信負荷の低いデータサーバ３３０から優先的に、データ送信するように、サーバ間の通信量を決定するからである。
［第５の実施の形態］第５の実施の形態について図面を参照して説明する。本実施の形態の分散システム３４０に於いては、各処理サーバｊは、全てのデータサーバ３３０から処理サーバ３２０毎に決定された同一割合ｗｊのデータを受信する。
本実施の形態のクライアント３００に入力されるプログラム例は、図４、図１３又は図１４に示した何れでも良い。説明の簡単のため、以降では、入力されるプログラム例は図４で示したものであるとする。
図４のプログラムは、ＭｙＭａｐという処理プログラムが出力したデータ集合に対して、ＭｙＲｅｄｕｃｅという処理プログラムを適用することを記述する。ＭｙＲｅｄｕｃｅ処理は、例えば、ＭｙＭａｐ処理の出力データ集合のデータ要素を入力して、予め定められた、あるいは構造プログラム等で与えられた条件のデータ要素にまとめ、まとまりのある複数のデータ集合を生成する処理である。このような処理は、例えば、ＳｈｕｆｆｌｅあるいはＧｒｏｕｐＢｙという処理である。
ＭｙＭａｐ処理は、例えば、Ｗｅｂページの集合を入力して、各ページから単語を抜き出して、抜きだした単語とともにページ内での発生回数を出力データ集合として出力する処理である。ＭｙＲｅｄｕｃｅ処理は、例えば、当該出力データ集合を入力して、全ページでの全単語の発生回数を調べ、同一の単語の結果を全ページに渡って加算する処理である。このようなプログラムの処理に於いて、全単語のうちの一定の割合のＳｈｕｆｆｌｅあるいはＧｒｏｕｐＢｙ処理を行うＭｙＲｅｄｕｃｅ処理の処理サーバ３２０は、前段のＭｙＭａｐ処理の処理サーバ３２０の全てから一定割合のデータを取得する場合がある。
本実施形態の分散処理管理サーバ３１０は、このような場合に後段処理の処理サーバ３２０を決定するとき等に用いられる。
なお、本実施形態の分散処理管理サーバ３１０は、ＭｙＭａｐ処理の出力データ集合を、第１の実施の形態乃至第４の実施の形態に於ける入力データ集合と同様に扱うように実現出来る。即ち、本実施形態の分散処理管理サーバ３１０は、前段処置の処理サーバ３２０、即ち前段処理の出力データ集合を格納する処理サーバ３２０を、後段処理のデータサーバ３３０と見なして機能するように構成され得る。
あるいは、本実施形態の分散処理管理サーバ３１０は、ＭｙＭａｐ処理の出力データ集合のデータ量を、ＭｙＭａｐ処理の入力データ集合のデータ量とＭｙＭａｐ処理の入出力データ量比の期待値から推定する等しても求めて良い。分散処理管理サーバ３１０は、推定値を求めることで、ＭｙＭａｐ処理の完了前にＭｙＲｅｄｕｃｅ処理の処理サーバ３２０を決定することが出来る。
本実施の形態の分散処理管理サーバ３１０は、Ｒｅｄｕｃｅ処理実行サーバの決定要求を受けて、第１乃至第４の実施の形態における分散処理管理サーバ３１０と同様に、式１又は式２の目的関数を最小化する（図８のステップ８０４）。但し、本実施の形態の分散処理管理サーバ３１０は、式１２、式１３の制約を加えて目的関数を最小化する。
式中のｄｉはデータサーバｉのデータ量である。上述したように、この値は、例えば、ＭｙＭａｐ処理の出力データ量あるいはその予測値である。ｗｊは処理サーバｊが担当する割合を表す。
このような制約の結果、処理割当部３１４は、すべてのデータサーバｉから一定割合ｗｊのデータが処理サーバｊに転送されるという条件下で目的関数を最小化する。
ｓ．ｔ．  ｆｉｊ／ｄｉ＝ｗｊ（∀ｉ∈ＶＤ，∀ｊ∈ＶＮ）  ．．．（１２）
ｓ．ｔ．  Σｊ∈ＶＮ  ｗｊ＝１，ｗｊ≧０（∀ｊ∈ＶＮ）  ．．．（１３）
式１２を用いて式１及び式２を書き換えると、ｆｉｊを変数とする目的関数の最小化が式１４及び式１５のようにｗｊを変数とする目的関数の最小化となる。処理割当部３１４は、式１４又は式１５の最小化によりｗｊを求め、そこからｆｉｊを算出するように実現されても良い。
ｍｉｎ．  Σｊ∈ＶＮ（Σｉ∈ＶＤ  ｄｉｃｉｊ）ｗｊ  ．．．（１４）
ｍｉｎ．  Ｍａｘｊ∈ＶＮ（Σｉ∈ＶＤ  ｄｉｃｉｊ）ｗｊ  ．．．（１５）
上述（図８のステップ８０４）以外の点は、本実施形態の分散システム３４０は、第１の実施の形態乃至第４の実施の形態と同様に動作する（図８等）。即ち、処理割当部３１４は、算出された結果を用い、どの処理サーバ３２０でどれだけのデータ量を処理するかを求める。更に、同部は、ｗｊあるいはｆｉｊから、通信量が０でない処理サーバｊを決定し、その処理サーバｊが各データサーバｉからどれ程のデータ量を取得するかを決定する。
分散システム３４０の各処理サーバ３２０が、予め一定量の負荷を担っている場合がある。本実施の形態の分散処理管理サーバ３１０は、その負荷を反映して、式２の最小化を行うように実現されても良い。この場合、処理割当部３１４は、式２の代わりに式１６を目的関数として最小化する。即ち、同部は、完全データ処理負荷ｆｉｊｃ’ｉｊ（サーバ処理負荷を考慮しない場合、ｆｉｊｃｉｊ）に処理サーバｊの負荷δｊも加えた加算値の最大合計値を持つ処理サーバｊが、最小の加算値をとるようにｆｉｊを決定する。
負荷δｊは、処理サーバｊを利用するには、予め何らかの通信負荷あるいは処理負荷が必須であるような場合に設定される値である。負荷δｊは、システムパラメータ等として処理割当部３１４に与えられても良い。処理割当部３１４が、処理サーバｊから負荷δｊを受信しても良い。
処理サーバ３２０がＳｈｕｆｆｌｅ処理のようなデータ集約を行う場合、式１２、式１３の制約が適用され、式１６の目的関数は式１７のようにｗｊを変数とする関数となる。処理割当部３１４は、式１７の最小化によりｗｊを求め、そこからｆｉｊを算出するように実現される。
ｍｉｎ．  Ｍａｘｊ∈ＶＮ  Σｉ∈ＶＤ  ｃｉｊｆｉｊ＋δｊ  ．．．（１６）
ｍｉｎ．  Ｍａｘｊ∈ＶＮ（Σｉ∈ＶＤ  ｄｉｃｉｊ）ｗｊ＋δｊ  ．．．（１７）
本実施の形態の分散システム３４０の追加的な第１の効果は、各データサーバ３３０のデータを固定割合ずつ、複数の処理サーバ３２０に配信するという条件下で通信負荷の低減が可能である。その理由は、割合情報を制約条件に加えて、目的関数の最小化を行うからである。
本実施の形態の分散システム３４０の追加的な第２の効果は、処理サーバ３２０に処理（受信データ）を割り当てる際に、当該処理サーバ３２０が予め何らかの負荷を有している場合でも、その負荷も考慮して処理を割り当てることが出来る。このことにより、分散システム３４０は各処理サーバ３２０での処理完了時のばらつきを低下できる。
かかる効果が得られる理由は、処理サーバ３２０が現在負っている負荷を目的関数に含めて、目的関数を最小化、特に、最大負荷の最小化が可能だからである。
本実施の形態の分散システム３４０は、前段処理の出力結果を受けて後段処理を行うような場合に、前段処理の出力結果を後段処理の処理サーバ３２０に転送する際の通信負荷低減にも有効である。その理由は、本実施形態の分散処理管理サーバ３１０は、前段処置の処理サーバ３２０、即ち前段処理の出力データ集合を格納する処理サーバ３２０を、後段処理のデータサーバ３３０と見なして機能できるからである。同様な効果は、第１乃至第４の実施の形態の分散システム３４０から得ることも出来る。
［［各実施の形態についての具体例に則した説明］］
［第１の実施の形態の具体例］図１８Ａは、本具体例等で使用される分散システム３４０の構成を示す。本図を用いて、前述した各実施の形態の分散システム３４０の動作が説明される。本分散システム３４０は、スイッチ０１〜０３で接続されたサーバｎ１〜ｎ６から構成される。
サーバｎ１〜ｎ６は、状況に応じ処理サーバ３２０としてもデータサーバ３３０としても機能する。サーバｎ２、ｎ５、ｎ６は、各々、あるデータ集合の部分データｄ１、ｄ２、ｄ３を格納する。本図に於いて、サーバｎ１〜ｎ６の何れかが、分散処理管理サーバ３１０として機能する。
図１８Ｂは、分散処理管理サーバ３１０が備える、サーバ状態格納部３１１０に格納される情報を示す。負荷情報３１１２はＣＰＵ使用率を格納する。サーバが他の計算処理を実行していると、当該サーバのＣＰＵ使用率は高くなる。分散処理管理サーバ３１０の負荷算出部３１３は、各サーバのＣＰＵ使用率と所定の閾値（５０％以下等）を比較して各サーバが利用可能かを判断する。本例では、サーバｎ１〜ｎ５が利用可能と判断される。
図１８Ｃは、分散処理管理サーバ３１０が備える、データ所在格納部３１２０に格納される情報を示す。当該データは、データ集合ＭｙＤａｔａＳｅｔの部分データが、５ＧＢずつサーバｎ２、ｎ５、ｎ６に格納されていることを示す。ＭｙＤａｔａＳｅｔは、単純に分散配置され（図５Ｂ（ａ））、多重化や符号化（図５Ｂ（ｂ）、（ｃ））はされていない。
図１８Ｄは、クライアント３００に入力される利用者プログラムを示す。この利用者プログラムは、データ集合ＭｙＤａｔａＳｅｔをＭｙＭａｐという処理プログラムで処理すべきことを記述する。
当該利用者プログラムが入力されると、クライアント３００は構造プログラム及び処理プログラムを解釈し、分散処理管理サーバ３１０にデータ処理要求を送信する。このとき、サーバ状態格納部３１１０が図１８Ｂ、データ所在格納部３１２０が図１８Ｃに示す状況であったとする。
分散処理管理サーバ３１０の負荷算出部３１３は、図１８Ｃのデータ所在格納部３１２０を参照して、データサーバ３３０の集合として｛ｎ２、ｎ５、ｎ６｝を得る。次に、同部は、図１８Ｂのサーバ状態格納部３１１０から処理サーバ３２０の集合として｛ｎ１、ｎ２、ｎ３、ｎ４｝を得る。
同部は、これら２つのサーバの集合（｛ｎ２、ｎ５、ｎ６｝、｛ｎ１、ｎ２、ｎ３、ｎ４｝）の各々から一つずつ要素を選択した全組み合わせの各々について、サーバ間通信負荷に基づいて通信負荷行列Ｃを作成する。
図１８Ｅは、作成された通信負荷行列Ｃを示す。本具体例に於いて、サーバ間負荷はサーバ間の通信経路上に存在するスイッチ数である。サーバ間のスイッチ数は、例えば、システムパラメータとして負荷算出部３１３に予め与えられている。また、サーバ間負荷取得部３１８が、構成管理プロトコルを用いて構成の情報を取得し、負荷算出部３１３に与えても良い。
分散システム３４０がサーバのＩＰアドレスからネットワーク接続が分かるようなシステムである場合は、サーバ間負荷取得部３１８が、ｎ２等のサーバの識別子からＩＰアドレスを取得し、サーバ間通信負荷を得ても良い。
図１８Ｅは、サーバ間通信負荷を、同一サーバ内は０、同一スイッチ内サーバ間は５、スイッチ間接続は１０であると仮定した場合の通信負荷行列Ｃを示す。
処理割当部３１４は、図１８Ｅの通信負荷行列Ｃを基に利用量行列Ｆを初期化し、式３、式４の制約のもとで、式１の目的関数の最小化を行う。
図１８Ｆは、目的関数最小化の結果得られた流量行列Ｆを示す。処理割当部３１４は、得られた流量行列Ｆに基づき、クライアント３００から得られた処理プログラムをｎ１〜ｎ３に送信し、さらに、処理サーバｎ１、ｎ２、ｎ３に、決定情報を送信して、データ受信と処理実行を指示する。決定情報を受信した処理サーバｎ１は、データサーバｎ５からデータｄ２を取得し処理する。処理サーバｎ２は、データサーバｎ２（同一サーバ）上のデータｄ１を処理する。処理サーバｎ３は、データサーバｎ６上のデータｄ３を取得して処理する。図１８Ｇは、図１８Ｆの流量行列Ｆに基づいて決定される、データ送受信を示す。
［第２の実施の形態の具体例］
第２の実施の形態の具体例では、処理対象のデータ集合は複数のデータサーバ３３０に異なるデータ量で分散している。一つのデータサーバ３３０のデータが分割されて、複数の処理サーバ３２０にデータが転送されて処理される。
本具体例では、目的関数の違いと、負荷の均一化条件を制約式に加える方式と目的関数に含める方式の違いを示すため２例が説明される。第１例は全ネットワーク負荷（式１）を低減し、第２例は最も遅い処理のネットワーク負荷（式２）を低減する。また、第１例は、負荷の均一化条件を制約式に含む。第２例は、負荷の均一化条件を目的関数に含む。通信負荷行列について、第１例はスイッチやサーバのトポロジーから類推される遅延を用い、第２例は測定される可用帯域を用いる。
図１８Ａで示される構成は、第２の実施の形態の具体例でも使用される。但し、データｄ１〜ｄ３のデータ量は同一ではない。
図１９Ａは、第２の実施の形態の具体例で入力される利用者プログラムを示す。当該プログラムの構造プログラムは、処理要件の指定（ｓｅｔ＿ｃｏｎｆｉｇ句）を包含する。
第２の実施の形態の具体例におけるサーバ状態格納部３１１０は、図１８Ｂと同じである。但し、各処理サーバ３２０対応の構成情報３１１３は、同一のＣＰＵコア数及び同一のＣＰＵクロック数を包含する。
図１９Ｂは、第２の実施の形態の第１例におけるデータ所在格納部３１２０に格納されている情報を示す。当該情報は、部分データｄ１、ｄ２、ｄ３のデータ量が、各々６ＧＢ、５ＧＢ、５ＧＢであることを示す。
第１例に於いて、分散処理管理サーバ３１０の負荷算出部３１３は、処理要件としてサーバ台数＝４が指定されているため、サーバ状態格納部３１１０（図１８Ｂ）から利用可能な処理サーバ３２０の集合として｛ｎ１、ｎ２、ｎ３、ｎ４｝を得る。
続いて、同部は、図１９Ｂのデータ所在格納部３１２０を参照して、データサーバ３３０の集合として｛ｎ２、ｎ５、ｎ６｝を得る。同部は、これら２つの集合と各サーバ間のサーバ間通信負荷とから通信負荷行列Ｃを得る。図１９Ｃは、第一例の通信負荷行列Ｃを示す。
処理割当部３１４は、図１９Ｂのデータ格納部３１２から、各データサーバ３３０が格納する、処理対象データ集合に属する部分データのデータ量を得る。同部は、サーバ状態格納部３１１０から各処理サーバ３２０の性能の相対値を得る。第１例では、同部は各処理サーバ３２０のＣＰＵコア数とＣＰＵクロック数から処理能力比１：１：１：１：１を得る。
図１９Ｃの通信負荷行列Ｃが得られると、同部は、上記で取得したデータ量と性能相対値、さらに予め与えられたパラメータα＝０を用いて、式７、式８及び式１０Ｂの制約の下で、式１の目的関数の最小化を行う。各データサーバ３３０のデータ量は、上述したように、各々６ＧＢ、５ＧＢ、５ＧＢである。
各処理サーバ３２０の性能相対値が同一であることから、処理サーバｎ１〜ｎ４は全て４ＧＢのデータを処理する。この最小化の結果として、同部は、図１９Ｄの流量行列Ｆを得る。
図１９Ｄの流量行列Ｆの流量と完全データ単位量処理負荷（この場合、完全データ単位量取得、あるいは負荷サーバ間通信負荷と同じ）の積（完全データ処理負荷）の総和は８５である。データサーバ３３０毎に近傍な処理サーバ３２０を逐次的に選ぶ方式では、同和が１５０となることもある。
第１例において、負荷算出部３１３は処理要件で指定されたサーバ台数を利用可能処理サーバ３２０の候補としている為、全ての処理サーバｎ１〜ｎ４上でＭｙＭａｐ処理を実行することとなる。従って、処理割当部３１４は、クライアント３００から得られた処理プログラムを、処理サーバｎ１〜ｎ４に送信する。
さらに、同部は、各処理サーバｎ１〜ｎ４に決定情報を送信して、データ受信と処理実行を指示する。
決定情報を受信した処理サーバｎ１は、データサーバｎ２からデータｄ１の２ＧＢ分とデータサーバｎ５からデータｄ２の２ＧＢ分を受信して処理する。処理サーバｎ２は、同一サーバ上のデータｄ１の４ＧＢ分を処理する。処理サーバｎ３は、データサーバｎ５からデータｄ２の１ＧＢ分とデータサーバｎ６からデータｄ３の３ＧＢ分を受信して処理する。処理サーバｎ４は、データサーバｎ６からデータｄ３の２ＧＢ分とデータサーバｎ５からデータｄ２の２ＧＢ分を受信して処理する。
図１９Ｅは、図１９Ｄの流量行列Ｆに基づいて決定される、データ送受信を示す。
以降、処理割当部３１４による目的関数の最小化により、通信負荷行列Ｃから流量行列Ｆを作成する動作（図８のステップ８０４の具体例）が説明される。
図１９Ｆは、処理割当部３１４による流量行列Ｆ作成の動作フローチャート例である。同図は、２部グラフにおけるハンガリー法を用いたフローチャートを例示する。図１９Ｇは、目的関数最小化における行列変換過程を示す。
なお、目的関数最小化の動作フローチャートはここでのみ提示され、以降の例では省略される。そのため図１９Ｆは上述の条件・設定に加え、各データサーバ３３０が格納するデータ量が異なる場合、処理サーバ３２０に受信データ量の制約がある場合を例にとる。
まず、処理割当部３１４は、通信負荷行列Ｃの各行について、その行の各列の値をその行の最小値で差し引き、各列についても同様の処理を行う（ステップ１８０１）。この結果、図１９Ｇの行列００（通信負荷行列Ｃ）から行列０１が得られる。
同部は、行列０１においてゼロ要素からなる２部グラフを生成し（ステップ１８０２）、２部グラフ１１を得る。
続いて、同部は、データ量の残る頂点から２部グラフ上の処理頂点を辿り、その処理頂点から既に割り当てられたフローを持つ経路のデータ頂点を順次辿り（ステップ１８０４）、流れ１２を得る。
この状態からフローを割り当てることができないため（ステップ１８０５でＮｏ）、同部は、データを流しうる辺１３を２部グラフに加え、より多くの負荷を許容するように行列０１を修正する（ステップ１８０６）。この結果、同部は行列０２を得る。
同部は、行列０２から再度２部グラフを生成し（ステップ１８０２）、データ量の残るデータ頂点からフローを割当可能な処理頂点に至る経路を探索する（ステップ１８０４）。この時、処理頂点からデータ頂点に至る辺は、既に割り当てられたフローに属す辺に属するものである。探索結果の代替経路１４は、データ頂点ｄ１から処理頂点ｎ１、データ頂点ｄ２を経て、処理頂点ｎ４に至る。
同部は、代替経路１４上のデータ頂点に残るデータ量、処理頂点で割当可能なデータ量、既に割り当てたフローの量の最小値を求める。同部は、この量を代替経路上のデータ頂点から処理頂点への辺に新たにフローとして追加し、同経路上の処理頂点からデータ頂点への辺上の既に割り当てられたフローから差し引く（ステップ１８０７）。これにより、同部はフロー１５を得る。フロー１５がこの条件下における総和（式１）を最小化する流量行列Ｆとなる。
図１９Ｈは、第２の実施の形態の第２例におけるデータ所在格納部３１２０に格納されている情報を示す。当該情報は、部分データｄ１、ｄ２、ｄ３のデータ量が、各々７ＭＢ、９ＭＢ、８ＭＢであることを示す。
第２例に於いて、負荷算出部３１３は、図１８Ｂのサーバ状態格納部３１１０を参照して、利用可能な処理サーバ３２０の集合｛ｎ１，ｎ２，ｎ３，ｎ４｝を取得する。続いて同部は、ＣＰＵコア数とＣＰＵクロック数に加えて、ＣＰＵ使用率も参照して各サーバの処理能力比５：４：４：５を得る。
サーバ間負荷取得部３１８はサーバ間通信路の可用帯域を計測して、計測値に基づいてサーバ間通信負荷（２／サーバｉｊ間の最小帯域（Ｇｂｐｓ））を求めて負荷算出部３１３に与える。測定値は、図１９Ｋ（および図１８Ａ）のスイッチ０１−０２間が２００Ｍｂｐｓ、スイッチ０２−０３間が１００Ｍｂｐｓ、スイッチ内のサーバ間は１Ｇｂｐｓであったとする。
本具体例では、単位データ量当たりの処理時間β＝４０が負荷算出部３１３に与えられる。この値は実測等に基づいてシステム管理者等が決定し、パラメータとして負荷算出部３１３に与えられる。
負荷算出部３１３は、完全データ単位量処理負荷ｃ’ｉｊを、完全データ単位量取得負荷（＝サーバ間通信負荷）＋２０／９ｐｊで算出し、図１９Ｉの通信負荷行列Ｃを作成する。
処理割当部３１４は、この通信負荷行列Ｃを用い、式２の目的関数を、式７、式８の制約の下で最小化する。この最小化の結果として、同部は図１９Ｊに示す流量行列Ｆを得る。
同部は、各処理サーバｎ１〜ｎ４に決定情報を送信して、データ受信と処理実行を指示する。
決定情報を受信した処理サーバｎ１は、データサーバｎ５からデータｄ２の４．９ＭＢ分を受信して処理する。処理サーバｎ２は、自身が格納するデータｄ１の７ＭＢ分を処理し、さらに、データサーバｎ５からデータｄ２の０．９ＭＢ分を受信して処理する。処理サーバｎ３は、データサーバｎ５からデータｄ２の２．９ＭＢ分を受信して処理する。処理サーバｎ４は、データサーバｎ５からデータｄ２の０．３ＭＢとデータサーバｎ６からデータｄ３の８ＭＢ分を受信して処理する。
図１９Ｋは、図１９Ｊの流量行列Ｆに基づいて決定される、データ送受信を示す。
以上のようにすることで、分散処理管理サーバ３１０は、サーバ処理性能の違いを考慮して処理を平滑化しつつ、通信負荷を低減させる。
［第３の実施の形態の具体例］
第３の実施の形態の具体例は、複数のデータ集合を入力して処理する例を示す。第１例の分散システム３４０は、複数のデータ集合の直積集合を処理する（ｃａｒｔｅｓｉａｎ指定）。同システムは、各データ集合を複数のデータサーバ３３０に同一のデータ量で分散させて保持する。
第２例の分散システム３４０は、複数のデータ集合の関連付けられたデータ要素の組を処理する（ａｓｓｏｃｉａｔｅｄ指定）。同システムは、各データ集合を複数のデータサーバ３３０に異なるデータ量で分散する。各データ集合に含まれるデータ要素の数は同一で、データ量（データ要素のサイズ等）は異なる。
第１例の分散システム３４０が入力する利用者プログラムは、図１３で示された利用者プログラムである。同プログラムは、ＭｙＤａｔａＳｅｔ１とＭｙＤａｔａＳｅｔ２の２つのデータ集合の直積集合に含まれる各要素に対して、ＭｙＭａｐという処理プログラムを適用することを記述している。同プログラムは、ＭｙＲｅｄｕｃｅ処理についても記述するが本例では無視する。
図２０Ａは、第１例のデータ所在格納部３１２０が格納する情報を示す。即ち、ＭｙＤａｔａＳｅｔ１は、データサーバｎ２のローカルファイルｄ１と、データサーバｎ５のローカルファイルｄ２に分かれて格納されている。ＭｙＤａｔａＳｅｔ２は、データサーバｎ２のローカルファイルＤ１と、データサーバｎ５のローカルファイルＤ２に分かれて格納されている。
上述した各部分データは、多重化も符号化もされていない。また、各部分データのデータ量は２ＧＢで同一である。
図２０Ｂは、第１例の分散システム３４０の構成を示す。本分散システム３４０は、スイッチで接続されたサーバｎ１〜ｎ６から構成される。サーバｎ１〜ｎ６は、状況に応じ処理サーバ３２０としてもデータサーバ３３０としても機能する。本図に於いて、サーバｎ１〜ｎ６の何れかが、クライアント３００及び分散処理管理サーバ３１０として機能する。
先ず、分散処理管理サーバ３１０がクライアント３００からデータ処理要求を受信する。分散処理管理サーバ３１０の負荷算出部３１３は、図２０Ａのデータ所在格納部３１２０からＭｙＤａｔａＳｅｔ１及びＭｙＤａｔａＳｅｔ２を構成するローカルファイル（ｄ１、ｄ２）及び（Ｄ１、Ｄ２）を列挙する。
同部は、ＭｙＤａｔａＳｅｔ１及びＭｙＤａｔａＳｅｔ２の直積データ集合を格納するローカルファイル対の集合として、｛（ｄ１、Ｄ１）、（ｄ１、Ｄ２）、（ｄ２、Ｄ１）、（ｄ２、Ｄ２）｝を列挙する。同部は、ローカルファイル対から、データ所在格納部３１２０を参照してデータサーバリストの集合｛（ｎ２、ｎ４）、（ｎ２、ｎ５）、（ｎ６、ｎ４）、（ｎ６、ｎ５）｝を取得する。
次に、同部は、サーバ状態格納部３１１０を参照して、利用可能な処理サーバ３２０の集合として｛ｎ１、ｎ２、ｎ３、ｎ４｝を得る。
同部は、サーバ間負荷取得部３１８の出力結果等を参照して、各処理サーバ３２０と各データサーバリスト内のデータサーバ３３０とのサーバ間通信負荷を取得する。同部は、例えば処理サーバｎ１と各データサーバリスト内データサーバ３３０間のサーバ間通信負荷｛（５、２０）、（５、１０）、（１０、２０）、（１０、１０）｝を得る。
同部は、データサーバリスト毎に、サーバ間通信負荷を加算して、通信負荷行列Ｃにおける、処理サーバｎ１対応の列｛２５、１５、３０、２０｝を生成する。
同部は、同様の処理を処理サーバ３２０ごとに実施して、上述のデータサーバリストの集合と処理サーバ３２０の集合間の通信負荷行列Ｃを作成する。図２０Ｃは、作成された通信負荷行列Ｃを示す。
処理割当部３１４は、当該通信負荷行列Ｃを入力して、式３乃至式４の制約式のもとで、式１を最小化する流量行列Ｆを求める。図２０Ｄは、求められた流量荷行列Ｆを示す。
同部は、得られた流量荷行列Ｆを基に決定情報を作成して、処理サーバｎ１乃至ｎ４に送信する。
図２０Ｂは、当該決定情報に従ったデータ送受信を示す。例えば、処理サーバｎ１は、データサーバｎ６のデータｄ２と、データサーバｎ５のデータＤ２を受信して処理する。
第２例の分散システム３４０が入力する利用者プログラムは、図１４で示された利用者プログラムである。同プログラムは、ＭｙＤａｔａＳｅｔ１とＭｙＤａｔａＳｅｔ２の２つのデータ集合の一対一に関連付けられた要素対に対して、ＭｙＭａｐという処理プログラムを適用することを記述している。
図２０Ｅは、第２例のデータ所在格納部３１２０が格納する情報を示す。第１例と異なり、各ローカルファイルのデータ量は同一ではない。ローカルファイルｄ１のデータ量は６ＧＢであるが、ｄ２、Ｄ１、Ｄ２は２ＧＢである。
図２０Ｆは、第２例の分散システム３４０の構成を示す。本分散システム３４０は、スイッチで接続されたサーバｎ１〜ｎ６から構成される。サーバｎ１〜ｎ６は、状況に応じ処理サーバ３２０としてもデータサーバ３３０としても機能する。本図に於いて、サーバｎ１〜ｎ６の何れかが、クライアント３００及び分散処理管理サーバ３１０として機能する。
先ず、分散処理管理サーバ３１０がクライアント３００からデータ処理要求を受信する。分散処理管理サーバ３１０の負荷算出部３１３は、データ所在格納部３１２０を参照して、ＭｙＤａｔａＳｅｔ１及びＭｙＤａｔａＳｅｔ２の各要素の組からなる全完全データ集合を得るためのデータサーバリストの集合を取得する。
図２０Ｇは、負荷算出部３１３のデータサーバリスト取得の動作フローチャートである。この処理は、構造プログラムにａｓｓｏｃｉａｔｅｄが指定されたときに、図１５のステップ１５０４の処理を置換するものである。図２０Ｈは、本処理で使用される第１のデータ集合（ＭｙＤａｔａＳｅｔ１）用の作業表を示す。図２０Ｉは、本処理で使用される第２のデータ集合（ＭｙＤａｔａＳｅｔ２）用の作業表を示す。図２０Ｊは、本処理で作成される出力リストを示す。作業表や出力リストは、分散管理サーバ３１０の作業域３１６等に作成される。
第１のデータ集合ＭｙＤａｔａＳｅｔ１のデータｄ１には、インデックス１から４５０までのデータ要素が、データｄ２にはインデックス４５１〜６００のデータ要素が格納されている。インデックスは、例えば、データ要素のデータ集合内に於ける順番である。
負荷算出部３１３は、本処理に先立ち図２０Ｈの作業表に第１のデータ集合の各部分集合の最後のインデックスを格納する。同部は、データｄ１、ｄ２のデータ量からこのデータ集合のデータ量として８ＧＢを算出し、その全体に対する割合の累積した累積割合を図２０Ｈの作業表に格納しても良い。
第２のデータ集合ＭｙＤａｔａＳｅｔ２のデータＤ１には、インデックス１から３００までのデータ要素が、データＤ２にはインデックス３０１〜６００のデータ要素が格納されている。
同部は、本処理に先立ち図２０Ｉの作業表に第２のデータ集合の各部分データの最後のインデックスを格納する。同部は、データＤ１、Ｄ２のデータ量からこのデータ集合のデータ量として、４ＧＢを算出し、その全体に対する割合の累積した累積割合を図２０Ｉの作業表に格納しても良い。
負荷算出部３１３は、２つのデータ集合のポインタが各作業表の最初の行を指すように初期化、現在と過去のインデックスを０に初期化し、出力リストを空で初期化する（ステップ２００１）。次のステップ２００２、２５０３は最初の実行では意味を持たない。
同部は、２つのポインタが指す第１のデータ集合のインデックスと第２のデータ集合のインデックスを比較する（ステップ２００４）。
第１のデータ集合のインデックス４５０と第２のデータ集合のインデックス３００間では、第２のデータインデックスが小さいため、同部は、インデックス３００を現在のインデックスに代入する。同部は、過去と現在のインデックス（０、３００）の指す範囲のデータ要素で組を構成し、この情報を出力リスト第１行目（図２０Ｊ）のインデックスおよび割合欄に格納する（ステップ２００７）。
この組のデータ量として出力リストに格納される値は、実際にこの組でデータを生成して得られるデータ量である。当該値は、インデックスと同様に処理される累積割合の範囲と２つのデータ集合の和の累積データ量とから概算される値でも良い。
続いて、同部は第２の作業表のポインタだけ進めて、第２のデータ集合のインデックスを６００とし（ステップ２００７）、現在のインデックス３００を過去のインデックスに代入する（ステップ２００２）。
同部は、２回目の第１のデータ集合のインデックスと第２のデータ集合のインデックスを比較する（ステップ２００４）。今度は、第１のデータ集合のインデックス４５０と第２のデータ集合のインデックス６００間では、第１のデータインデックスが小さいため、同部は、そのポインタのインデックス４５０を現在のインデックスに代入する。同部は、過去と現在のインデックス（３００、４５０）の指す範囲のデータ要素で組を構成し、この情報を出力リスト第２行目（図２０Ｊ）に格納する（ステップ２００５）。
同様に、最後のデータ要素組を構成し、この情報を出力リスト第３行目（図２０Ｊ）に格納する（ステップ２００６）し、その後、２つのデータ集合のポインタが最終要素６００を指しているので（ステップ２００３でＹｅｓ）、処理を終了する。
同部は、処理の終了に当たり、出力リストのインデックスの各範囲対応のローカルファイル対（（ｄ１、Ｄ１）等）を出力リストに追記する。
負荷算出部３１３は、図２０Ｊの出力リストのローカルファイル対から、ローカルファイルを格納したサーバの対、即ち、データサーバリストの集合｛（ｎ２、ｎ４）、（ｎ２、ｎ５）、（ｎ６、ｎ５）｝を取得する。
次に、同部は、サーバ状態格納部３１１０から利用可能な処理サーバ３２０の集合として｛ｎ１、ｎ２、ｎ３、ｎ４｝を得る。
同部は、サーバ間負荷取得部３１８の出力結果等を参照して、各処理サーバ３２０と各データリスト内のデータサーバ３３０とのサーバ間通信負荷を取得する。例えば、同部は処理サーバｎ１と各データサーバリスト内データサーバ３３０間のサーバ間通信負荷｛（５、２０）、（５、１０）、（１０、１０）｝を得る。
同部は、データサーバリスト毎に、サーバ間通信負荷をデータ要素数で規格化し、データ集合のデータ量で重み付け加算して、通信負荷行列Ｃにおける処理サーバｎ１対応の列｛３０、２０、３０｝を生成する。重み付け加算に於いて、ＭｙＤａｔａＳｅｔ１（８ＧＢ）の部分データ格納データサーバ３３０とのサーバ間通信負荷は、ＭｙＤａｔａＳｅｔ２（４ＧＢ）の部分データ格納データサーバ３３０とのサーバ間通信負荷の２倍に重み付けられる。
同部は、同様の処理を処理サーバ３２０ごとに実施して、上述のデータサーバリストの集合と処理サーバ３２０の集合間の通信負荷行列Ｃを作成する。図２０Ｋは、作成された通信負荷行列Ｃを示す。
処理割当部３１４は、当該通信負荷行列Ｃを入力して、式７乃至式８の制約の下での、式１の目的関数を最小化する流量行列Ｆを求める。図２０Ｌは、求められた流量荷行列Ｆを示す。
同部は、得られた流量荷行列Ｆを基に決定情報を作成して、処理サーバｎ１乃至ｎ４に送信する。
図２０Ｆは、当該決定情報に従ったデータ送受信を示す。例えば、処理サーバｎ１は、データサーバｎ２のデータｄ１（２ＧＢ分）と、データサーバｎ５のデータＤ２（１ＧＢ分）を受信して処理する。
［第４の実施の形態の具体例］
本具体例では、処理対象データ集合の部分データがＥｒａｓｕｒｅ符号化等されている。また、本具体例の分散処理管理サーバ３１０は、優先度に応じて、実行中の他の処理を中止してクライアント３００の要求するデータ処理を実行するように処理サーバ３２０に要求する。
本実施例の分散処理管理サーバ３１０が備えるサーバ状態格納部３１１０は、図１８Ｂに示す情報に加え、各処理サーバ３２０の構成情報３１１３に図示されない優先度を格納し得る。優先度は、処理サーバ３２０が実行中の他の処理の優先度である。
図１９Ａに示したプログラムが、本具体例のクライアント３００に入力される利用者プログラムである。但し、当該利用者プログラムは、Ｓｅｔ＿ｃｏｎｆｉｇ句内にサーバ利用量＝４以外に、優先度＝４の指定を追加的に包含する。優先度指定は、処理サーバ３２０が他の処理を実行中であっても、当該サーバの優先度が４以下であれば、本利用者プログラムが要求する処理を実行すべきことを指定する。
図１９Ａのプログラムは、データ集合ＭｙＤａｔａＳｅｔに含まれるデータ要素に対してＭｙＭａｐ処理プログラムを適用することを記述している。
図２１Ａは、本具体例の分散システム３４０の構成を示す。本分散システム３４０は、スイッチで接続されたサーバｎ１〜ｎ６から構成される。サーバｎ１〜ｎ６は、状況に応じ処理サーバ３２０としてもデータサーバ３３０としても機能する。本図に於いて、サーバｎ１〜ｎ６の何れかが、クライアント３００及び分散処理管理サーバ３１０として機能する。
本具体例のサーバ状態格納部３１１０は、図１８Ｂに示す情報に加え、処理サーバｎ５の構成情報３１１３に優先度＝３を、処理サーバｎ６の構成情報３１１３に優先度＝３を格納する。
図２１Ｂは、本具体例のデータ所在格納部３１２０に格納されている情報を示す。この情報は、ＭｙＤａｔａＳｅｔがｄ１、ｄ２という部分データに分割されて格納されていること、各部分データが、冗長数３、最低取得数２で符号化あるいはＱｕｏｒｕｍされていることを示している。この情報は、ｄ１がデータサーバｎ２、ｎ４、ｎ６に６ＧＢずつ符号化格納され、ｄ２はデータサーバｎ２、ｎ５、ｎ７に各々２ＧＢずつ符号化格納されていることを記述している。
処理サーバ３２０は、例えば、データサーバｎ４上のデータｄ１２とデータサーバｎ６上のデータｄ１３を取得すると、部分データｄ１を復元できる。処理サーバ３２０は、例えば、データサーバｎ２上のデータｄ２１とデータサーバｎ５上のデータｄ２２を取得すると、部分データｄ２を復元できる。図２１Ｃは、この符号化された部分データの復元例を示す。
クライアント３００は、図１９Ａのプログラムを入力して、サーバ利用量＝４、優先度＝４の指定を含むデータ処理要求を分散処理管理サーバ３１０に送信する。
分散処理管理サーバ３１０の負荷算出部３１３は、データ所在格納部３１２０を参照して、データ集合ＭｙＤａｔａＳｅｔの部分データとして（ｄ１、ｄ２）を列挙し、データサーバリストの集合｛（ｎ２，ｎ４，ｎ６），（ｎ２，ｎ５，ｎ７）｝を取得する。同部は同時に、各部分データが最低取得数２で格納されていることも取得する。
次に、同部は、サーバ状態格納部３１１０から、ＣＰＵ使用率が閾値より低い等の理由で利用可能な処理サーバｎ１〜ｎ４と、優先度が４より低い他の処理を実行中である処理サーバｎ６を選択し、利用可能な処理サーバ３２０の集合を得る。
同部は、上記で取得した各処理サーバ３２０と各データサーバリスト内の各データサーバ３３０とのサーバ間通信負荷を得る。例えば、同部は、処理サーバｎ１と各データサーバ３３０とのサーバ間通信負荷｛（５，２０，１０），（５，２０，１０）｝を得る。最低取得数が２であることから、同部は、ｄ１とｄ２に対応する通信負荷の組に対し、小さい方から２番目までの値の総和をとり、完全データ単位量取得負荷｛１５，１５｝を得る。同部は、このとき対応する処理サーバ３２０の識別子も記録し、ｎ１については｛（ｎ２，ｎ６），（ｎ２，ｎ５）｝を得る。
図２１Ｄは、このようにして得られた通信負荷行列Ｃを示す。同部は、サーバ利用量＝４との処理条件から、完全データ単位量取得負荷の大きな処理サーバｎ３を排除する。
処理割当部３１４は、式７乃至式８の制約の下での式１の目的関数を最小化する流量行列Ｆを求める。図２１Ｅは、このようにして得られた流量行列Ｆを示す。
同部は、得られた流量行列Ｆを基に決定情報を作成して、処理サーバｎ１、ｎ２、ｎ４、ｎ５に送信する。
図２１Ａは、当該決定情報に従ったデータ送受信を示す。例えば、処理サーバｎ１は、は部分データｄ１を２ＧＢ取得するため、データサーバｎ２とｎ６から各々２ＧＢ分のデータを取得し、これらを復号化して処理する。
［第５の実施の形態の具体例］
本実施の形態の具体例は、各処理サーバ３２０が不可避な処理負荷を有する場合と、有さない場合の２つある。第１例の通信負荷は構成から推定される遅延であり、目的関数は総負荷の低減である。第２例の通信負荷は計測で得られる最小帯域であり、目的関数は最大負荷を持つ処理サーバ３２０の通信負荷低減である。
第１例及び第２例で入力する利用者プログラムは図４に示されたものである。本具体例の分散処理管理サーバ３１０は、ＭｙＭａｐ処理で出力されて複数のデータサーバ３３０に分散配置されるデータ集合を、複数のＭｙＲｅｄｕｃｅ処理の処理サーバ３２０の何れに送信するかを決定する。なお、本具体例に於けるデータサーバ３３０は、ＭｙＭａｐ処理の処理サーバ３２０であることが多い。
本具体例のステム構成は図２２Ａに示されたものである。同図に示される分散システム３４０のサーバｎ１、ｎ３、ｎ４がＭｙＭａｐ処理を実行中であり、出力データ集合ｄ１、ｄ２、ｄ３を作成している。本具体例に於いては、サーバｎ１、ｎ３、ｎ４がデータサーバ３３０となる。本具体例では、データサーバｎ１、ｎ３、ｎ４が格納する分散データのデータ量は、ＭｙＭａｐ処理過程等で出力される見積もり値である。ＭｙＭａｐ処理実行中のサーバｎ１、ｎ３、ｎ４は、入出力データ量比の期待値が１／４であるとの仮定に基づいて、見積もり値を１ＧＢ、１ＧＢ、２ＧＢと算出し、分散処理管理サーバ３１０に送信する。分散処理管理サーバ３１０は、当該見積もり値をデータ所在格納部３１２０に格納する。
第１例において、ＭｙＲｅｄｕｃｅ処理の実行開始に際し負荷算出部３１３は、データ所在格納部３１２０を参照して、データサーバ３３０の集合｛ｎ１，ｎ３，ｎ４｝を列挙する。同部は、サーバ状態格納部３１１０を参照して、処理サーバ３２０の集合として｛ｎ２，ｎ５｝を列挙する。
同部は、それぞれの集合の要素間のサーバ間通信負荷に基づいて、通信負荷行列Ｃを作成する。図２２Ｂは、作成された通信負荷行列Ｃを示す。
処理割当部３１４は、本通信負荷行列Ｃに基づいて、式１３の制約のもとで式１４の目的関数を最小化して、ｗｊ（ｊ＝ｎ２，ｎ５）を得て、流量行列Ｆを作成する。図２２Ｃは、作成された流量行列Ｆを示す。
これに基づき、処理割当部３１４は、処理サーバｎ５に対して、データサーバｎ１、ｎ３、ｎ４のデータｄ１、ｄ２、ｄ３をそれぞれ１ＧＢ、１ＧＢ、２ＧＢを取得して処理することを指示する決定情報を送信する。
なお、処理割当部３１４は、データサーバｎ１、ｎ３、ｎ４に対して、出力データを処理サーバｎ５に送信するように指示しても良い。
第２例においても、ＭｙＲｅｄｕｃｅ処理の実行開始に際し負荷算出部３１３は、データ所在格納部３１２０を参照して、データサーバ３３０の集合｛ｎ１，ｎ３，ｎ４｝を列挙する。
同部はサーバ状態格納部３１１０を参照して、処理サーバ３２０の集合｛ｎ１、ｎ２、ｎ３、ｎ４｝を取得する。さらに同部は、当該処理サーバ３２０の処理能力比５：４：４：５、ＭｙＭａｐ処理実行等の不可避な負荷量（２５，０，２５，２５）を取得する。
図２２Ｄは、サーバ間負荷取得部３１８等が計測したサーバ間帯域を示す。負荷算出部３１３は、当該帯域値を用いて、式１１からＣ’ｉｊ＝１／経路ｉｊ間の最小帯域＋２０／サーバｊの処理能力を算出し、通信負荷行列Ｃを作成する。図２２Ｅは、作成された通信負荷行列Ｃを示す。
処理割当部３１４は、本通信負荷行列Ｃに基づいて、式１３の制約のもとで式１７の目的関数を最小化して、ｗｊ（０．１２，０．４２，０．２１，０．２５）を求める。同部は、このｗｊと分散データｉのデータ量（１，１，２）から、流量行列Ｆを作成する。図２２Ｆは、作成された流量行列Ｆを示す。
これに基づき、処理割当部３１４は、処理サーバｎ１〜ｎ４に対して、データの取得と処理を指示する。あるいは、処理割当部３１４はデータサーバｎ１、ｎ３、ｎ４に対して、処理サーバｎ１〜ｎ４にデータを送信するように指示しても良い。
例えば、ＭｙＭａｐ処理の処理対象データ集合がＷｅｂページであり、ＭｙＭａｐ処理が各ページに含まれる単語の数を出力し、ＭｙＲｅｄｕｃｅ処理がその単語ごとの数を全Ｗｅｂページに渡って加算するとする。ＭｙＭａｐ処理を実行するサーバｎ１、ｎ３、ｎ４は、上記流量行列Ｆに基づく決定情報を受信して、単語のハッシュ値を０〜１の間で算出し、以下のような振り分け送信を行う。１）ハッシュ値が０〜０．１２であれば、当該単語のカウント値をサーバｎ１に送信する。２）ハッシュ値が０．１２〜０．５４であれば、当該単語のカウント値をサーバｎ２に送信する。３）ハッシュ値が０．５４〜０．７５であれば、当該単語のカウント値をサーバｎ３に送信する。４）ハッシュ値が０．７５〜１．０であれば、当該単語のカウント値をサーバｎ４に送信する。
上述した各実施の形態の説明に於いて、分散処理管理サーバ３１０は、複数のデータサーバ３３０から複数の処理サーバ３２０にデータを送信する際の適切な通信を実現した。しかしながら、本発明は、データを生成する複数の処理サーバ３２０が、当該データを受け取って格納する複数のデータサーバ３３０に向けて送信する際の適切な通信実現にも利用できる。二つのサーバ間の通信負荷は、どちらが送信又は受信しても変わらないからである。
さらに、本発明は、送信と受信が混在した際の適切な通信実現にも利用できる。図２３は、分散処理管理サーバ３１０、複数のデータサーバ３３０、複数の処理サーバ３２０に加え、複数のアウトプットサーバ３５０を包含する分散システム３４０を示す。本システムに於いて、データサーバ３３０の各データ要素は、複数の処理サーバ３２０の何れかの処理サーバ３２０で処理されて予めデータ要素毎に定められたいずれかのアウトプットサーバ３５０に格納される。
本システムの分散処理管理サーバ３１０は、各データ要素を処理する適切な処理サーバ３２０を選択することにより、処理サーバ３２０のデータサーバ３３０からの受信とアウトプットサーバ３５０への送信の両方を含む適切な通信を実現できる。
処理サーバ３２０とアウトプットサーバ３５０間の通信を逆方向の通信として適用することで、本システムは、二つのデータサーバ３３０の各々から関連付けられた二つのデータ要素の各々を取得する、第３の実施形態の第２例の分散処理管理サーバ３１０を使用できる。
図２４は、基本構成の実施の形態を示す。分散処理管理サーバ３１０は、負荷算出部３１３と処理割当部３１４を備える。
負荷算出部３１３は、処理サーバ３２０の識別子ｊと、完全データ集合ｉ毎に、当該完全データ集合に所属するデータを記憶するデータサーバ３３０のリストｉを取得する。同部は、取得した各処理サーバ３２０と各データサーバ３３０間の単位データ量毎の通信負荷に基づいて、各処理サーバ３２０が、各完全データ集合の単位データ量を受信する通信負荷ｃｉｊを含むｃ’ｉｊを算出する。
処理割当部３１４は、各処理サーバ３２０が各完全データ集合を受信する０以上の通信量ｆｉｊを、ｆｉｊｃ’ｉｊを含む値の所定和が最小となるように決定する。
本実施の形態の分散システム３４０の効果は、複数のデータサーバ３３０と複数の処理サーバ３２０が与えられた際に、全体として適切なサーバ間のデータ送受信を実現出来ることである。
その理由は、分散処理管理サーバ３１０が、各データサーバ３３０と各処理サーバ３２０の任意の組み合わせ全体の中から、送受信を行うデータサーバ３３０と処理サーバ３２０を決定するからである。換言すれば、分散処理管理サーバ３１０は、個別のデータサーバ３３０と処理サーバ３２０注目して逐次的にサーバ間のデータ送受信を決定しないからである。
以上、実施形態（及び実施例）を参照して本願発明を説明したが、本願発明は上記実施形態（及び実施例）に限定されものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、２００９年１２月１８日に出願された日本出願特願２００９−２８７０８０を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１Ａ】
0005929196.tif 000002
【図１Ｂ】
0005929196.tif 000003
【図２Ａ】
0005929196.tif 000004
【図２Ｂ】
0005929196.tif 000005
【図３】
0005929196.tif 000006
【図４】
0005929196.tif 000007
【図５Ａ】
0005929196.tif 000008
【図５Ｂ】
0005929196.tif 000009
【図６Ａ】
0005929196.tif 000010
【図６Ｂ】
0005929196.tif 000011
【図６Ｃ】
0005929196.tif 000012
【図６Ｄ】
0005929196.tif 000013
【図６Ｅ】
0005929196.tif 000014
【図７Ａ】
0005929196.tif 000015
【図７Ｂ】
0005929196.tif 000016
【図８】
0005929196.tif 000017
【図９】
0005929196.tif 000018
【図１０】
0005929196.tif 000019
【図１１】
0005929196.tif 000020
【図１２】
0005929196.tif 000021
【図１３】
0005929196.tif 000022
【図１４】
0005929196.tif 000023
【図１５】
0005929196.tif 000024
【図１６】
0005929196.tif 000025
【図１７】
0005929196.tif 000026
【図１８Ａ】
0005929196.tif 000027
【図１８Ｂ】
0005929196.tif 000028
【図１８Ｃ】
0005929196.tif 000029
【図１８Ｄ】
0005929196.tif 000030
【図１８Ｅ】
0005929196.tif 000031
【図１８Ｆ】
0005929196.tif 000032
【図１８Ｇ】
0005929196.tif 000033
【図１９Ａ】
0005929196.tif 000034
【図１９Ｂ】
0005929196.tif 000035
【図１９Ｃ】
0005929196.tif 000036
【図１９Ｄ】
0005929196.tif 000037
【図１９Ｅ】
0005929196.tif 000038
【図１９Ｆ】
0005929196.tif 000039
【図１９Ｇ】
0005929196.tif 000040
【図１９Ｈ】
0005929196.tif 000041
【図１９Ｉ】
0005929196.tif 000042
【図１９Ｊ】
0005929196.tif 000043
【図１９Ｋ】
0005929196.tif 000044
【図２０Ａ】
0005929196.tif 000045
【図２０Ｂ】
0005929196.tif 000046
【図２０Ｃ】
0005929196.tif 000047
【図２０Ｄ】
0005929196.tif 000048
【図２０Ｅ】
0005929196.tif 000049
【図２０Ｆ】
0005929196.tif 000050
【図２０Ｇ】
0005929196.tif 000051
【図２０Ｈ】
0005929196.tif 000052
【図２０Ｉ】
0005929196.tif 000053
【図２０Ｊ】
0005929196.tif 000054
【図２０Ｋ】
0005929196.tif 000055
【図２０Ｌ】
0005929196.tif 000056
【図２１Ａ】
0005929196.tif 000057
【図２１Ｂ】
0005929196.tif 000058
【図２１Ｃ】
0005929196.tif 000059
【図２１Ｄ】
0005929196.tif 000060
【図２１Ｅ】
0005929196.tif 000061
【図２２Ａ】
0005929196.tif 000062
【図２２Ｂ】
0005929196.tif 000063
【図２２Ｃ】
0005929196.tif 000064
【図２２Ｄ】
0005929196.tif 000065
【図２２Ｅ】
0005929196.tif 000066
【図２２Ｆ】
0005929196.tif 000067
【図２３】
0005929196.tif 000068
【図２４】
0005929196.tif 000069