(57)【要約】【課題】複数のクライアントが１サーバに継続してデータを安定して送信すること【解決手段】上記課題を解決するために第１の態様として、複数のクライアント・コンピュータからサーバにデータを収集する方法であって、前記データ収集毎に、サーバを最上位ノードとし、前記複数のクラインアント・コンピュータを子ノードとしてツリー構造の収集ネットワークを再構築するステップと、前記サーバから下位ノードに親子宣言をブロードキャストするステップと、各ノードがデータを上位ノードに転送するステップとを有する方法を提供する。【選択図】図４
2011120122.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置を有する複数のクライアント・コンピュータからサーバにデータを収集する方法であって、
前記データ収集毎に、サーバを最上位ノードとし、前記複数のクラインアント・コンピュータを子ノードとしてツリー構造の収集ネットワークを既定の間隔で再構築するステップと、
前記サーバが前記収集ネットワークに基づき子ノードに親子宣言をブロードキャストするステップと、
親子宣言を受信したノードは送受信データの対応関係を記録する識別子対応表を前記記憶装置に作成するステップと、
各ノードが前記収集ネットワークに基づきデータを親ノードに転送する際、前記識別子対応表に送受信データの対応関係を記録するステップと
を有する方法。
【請求項２】
前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有する、請求項１記載の方法。
【請求項３】
前記方法がさらに、サーバが受信したデータに対応するＡＣＫを前記収集ネットワークに基づき子ノードに送信するステップを有し、
各ノードは、前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信するステップを有する、請求項１記載の方法。
【請求項４】
前記方法がさらに、各ノードは前記親ノードからのＡＣＫ受信をもって、収集ネットワークの終了とし、前記識別子対応表を削除するステップを有する、請求項１記載の方法。
【請求項５】
前記ブロードキャストがＰ２Ｇで行われる、請求項１記載の方法。
【請求項６】
記憶装置を有する複数のクライアント・コンピュータからサーバにデータを収集するシステムであって、
前記データ収集毎に、サーバを最上位ノードとし、前記複数のクラインアント・コンピュータを子ノードとしてツリー構造の収集ネットワークを既定の間隔で再構築する手段と、
前記サーバが前記収集ネットワークに基づき子ノードに親子宣言をブロードキャストする手段と、
親子宣言を受信したノードは送受信データの対応関係を記録する識別子対応表を前記記憶装置に作成する手段と、
各ノードが前記収集ネットワークに基づきデータを親ノードに転送する際、前記識別子対応表に送受信データの対応関係を記録する手段と
を有するシステム。
【請求項７】
前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有する、請求項６記載のシステム。
【請求項８】
前記システムがさらに、サーバが受信したデータに対応するＡＣＫを前記収集ネットワークに基づき子ノードに送信する手段を有し、
各ノードは、前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信する手段を有する、請求項６記載のシステム。
【請求項９】
前記システムがさらに、各ノードは前記親ノードからのＡＣＫ受信をもって、収集ネットワークの終了とし、前記識別子対応表を削除する手段を有する、請求項６記載のシステム。
【請求項１０】
前記ブロードキャストがＰ２Ｇで行われる、請求項６記載のシステム。
【請求項１１】
記憶装置を有する複数のクライアント・コンピュータからのデータを収集するサーバであって、
前記データ収集毎に、サーバを最上位ノードとし、前記複数のクラインアント・コンピュータを子ノードとしてツリー構造の収集ネットワークを既定の間隔で再構築する手段と、
前記収集ネットワークに基づき子ノードに親子宣言をブロードキャストする手段と、
親子宣言を受信したノードが前記収集ネットワークに基づきデータを親ノードに転送する際、識別子対応表を前記記憶装置に作成し、送受信データの対応関係を前記識別子対応表に記録した後、転送されたデータを、最上位ノードとして受信する手段と
を有するサーバ。
【請求項１２】
前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有する、請求項１１記載のサーバ。
【請求項１３】
前記サーバがさらに、サーバが受信したデータに対応するＡＣＫを前記収集ネットワークに基づき子ノードに送信する手段を有し、
各ノードは、前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信する手段を有する、請求項１１記載のサーバ。
【請求項１４】
データを収集しサーバに送信する、記憶装置を有するクライアント・コンピュータであって、
前記データ収集毎に、前記サーバを最上位ノードとし、クラインアント・コンピュータを子ノードとして既定の間隔で再構築したツリー構造の収集ネットワークを、ブロードキャストされた親子宣言としてサーバから受信する手段と、
前記親子宣言の受信に伴い、送受信データの対応関係を記録する識別子対応表を前記記憶装置に作成する手段と、
前記収集ネットワークに基づき自身のノードの親ノードにデータを転送する際、前記識別子対応表に送受信データの対応関係を記録する手段と、
を有するクライアント・コンピュータ。
【請求項１５】
前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有する、請求項１４記載のクライアント・コンピュータ。
【請求項１６】
さらに、サーバにおいて受信したデータに対応するＡＣＫを前記収集ネットワークに基づき受信する手段を有し、
前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信する手段
を有する、請求項１４記載のクライアント・コンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高信頼のデータ収集方法に関し、特に複数のクライアントがサーバに継続して安定してデータ送信する方法に関する。
【背景技術】
【０００２】
Webサーバとブラウザのような、クライアント手動でデータをサーバに送信する仕組み（全プッシュ型）や、サーチエンジンのページ回収ロボットのような、サーバ手動で全クライアントにデータを回収する仕組み（全プル型）では、収集するデータ単位が小さいため、サーバの負荷が高くなる。たとえば、データ収集ツリーの上位層にいるクライアントは、常に大量のデータを受信し、送信する必要がある。そのため、ツリー構造を固定にした場合、特定のクライアントの負荷が集中しやすくなってしまう。
【０００３】
例えば特許文献１は、階層構造のネットワークシステムにおいて各ノードが属する階層を変更する際、サーバからのストリーミング配信を途切れさせることなく階層を入れ替えるための技術を開示している。特に、自ノードと通信相手の上位・下位ノードのバッファリング量、ハードウェア資源、転送速度に基づく指標に基づいて適切な入れ替えを行う技術を開示している。しかしながらこの技術では単純に配信能力の高いクライアントが階層の上位に置かれるため、能力の高いクライアントに常時負荷が集中するとともに、能力の高いクライアントの障害が生じた場合配信が不可能になる。複数のクライアントが１サーバにデータを継続に安定して送信するための、特定のクライアントに負荷が集中することない高信頼のデータ収集という課題に対する解決方法を示していない。
【０００４】
特許文献２は、アプリケーションレイヤーマルチキャスト通信（一斉配信）において、信頼性を実現するためにマルチキャストされる各データの受信可否 (ACK/NACK) を各受信者が通知し、またそれに基づいてデータ再送を行う手法に関するものであり、特に、ACK/NACK の通知とデータ再送を、マルチキャストツリー上で同一の親を持つ兄弟ノード間でローカルに行うことを特徴としています。この方法はマルチキャスト、すなわちサーバから各受信者に同一のデータを一斉配信する場合を想定しており、それにより初めて受信確認および再送を兄弟ノード間でローカルに行うことが可能になる。しかしながら、各クライアントがそれぞれのデータをサーバに送信する場合において、サーバが受信したことの確認を必要とする状況には適用できない。非特許文献１はＰ２Ｇ(Peer to Group)の技術に関する論文である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開2009-044661
【特許文献２】特開2007-228064
【非特許文献】
【０００６】
【非特許文献１】清水周一、”多候補送信の再帰的ルーティングによる安定した端末型マルチキャスト” 情報処理学会論文誌，Vol.49 No.3 2008年3月
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従って、本発明は複数のクライアントがサーバに継続してデータを安定して送信することを課題とし、そのための方法およびシステムを提供することである。また安定して送信するために、サーバの負荷が小さく、特定のクライアントに負荷が集中することなく、高信頼のデータ収集する方法およびシステムを提供することである。
【課題を解決するための手段】
【０００８】
本発明は上記課題を解決するために、記憶装置を有する複数のクライアント・コンピュータからサーバにデータを収集する方法であって、前記データ収集毎に、サーバを最上位ノードとし、前記複数のクラインアント・コンピュータを子ノードとしてツリー構造の収集ネットワークを既定の間隔で再構築するステップと、前記サーバが前記収集ネットワークに基づき子ノードに親子宣言をブロードキャストするステップと、親子宣言を受信したノードは送受信データの対応関係を記録する識別子対応表を前記記憶装置に作成するステップと、各ノードが前記収集ネットワークに基づきデータを親ノードに転送する際、前記識別子対応表に送受信データの対応関係を記録するステップとを有する方法を開示する。
【０００９】
ここで、前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有する、ようにする。
【００１０】
前記方法がさらに、サーバが受信したデータに対応するＡＣＫを前記収集ネットワークに基づき子ノードに送信するステップを有し、各ノードは、前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信するステップを有するようにする。
【００１１】
前記方法がさらに、各ノードは前記親ノードからのＡＣＫ受信をもって、収集ネットワークの終了とし、前記識別子対応表を削除するステップを有するようにする。
【００１２】
また前記ブロードキャストがＰ２Ｇで行われるようにしてもよい。
【００１３】
また別の態様として、記憶装置を有する複数のクライアント・コンピュータからサーバにデータを収集するシステムであって、前記データ収集毎に、サーバを最上位ノードとし、前記複数のクラインアント・コンピュータを子ノードとしてツリー構造の収集ネットワークを既定の間隔で再構築する手段と、前記サーバが前記収集ネットワークに基づき子ノードに親子宣言をブロードキャストする手段と、親子宣言を受信したノードは送受信データの対応関係を記録する識別子対応表を前記記憶装置に作成する手段と、各ノードが前記収集ネットワークに基づきデータを親ノードに転送する際、前記識別子対応表に送受信データの対応関係を記録する手段とを有するシステムを開示する。
【００１４】
ここで、前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有するようにする。
【００１５】
前記システムがさらに、サーバが受信したデータに対応するＡＣＫを前記収集ネットワークに基づき子ノードに送信する手段を有し、各ノードは、前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信する手段を有するようにする。
【００１６】
前記システムがさらに、各ノードは前記親ノードからのＡＣＫ受信をもって、収集ネットワークの終了とし、前記識別子対応表を削除する手段を有するようにする。
【００１７】
また前記ブロードキャストがＰ２Ｇで行われるようにしてもよい。
【００１８】
また別の態様として、記憶装置を有する複数のクライアント・コンピュータからのデータを収集するサーバであって、前記データ収集毎に、サーバを最上位ノードとし、前記複数のクラインアント・コンピュータを子ノードとしてツリー構造の収集ネットワークを既定の間隔で再構築する手段と、前記収集ネットワークに基づき子ノードに親子宣言をブロードキャストする手段と、親子宣言を受信したノードは送受信データの対応関係を記録する識別子対応表を前記記憶装置に作成し、各ノードが前記収集ネットワークに基づきデータを親ノードに転送する際、前記識別子対応表に送受信データの対応関係を記録し、サーバは最上位ノードとして前記転送されたデータを受信する手段とを有するサーバを開示する。
【００１９】
ここで、前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有するようにする。
【００２０】
前記サーバがさらに、サーバが受信したデータに対応するＡＣＫを前記収集ネットワークに基づき子ノードに送信する手段を有し、各ノードは、前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信する手段を有するようにする。
【００２１】
また別の態様として、サーバに対してデータを収集して送信する、記憶装置を有するクライアント・コンピュータであって、前記サーバが、前記データ収集毎に、前記サーバを最上位ノードとし、クラインアント・コンピュータを子ノードとして既定の間隔で再構築したツリー構造の収集ネットワークを、ブロードキャストされた親子宣言として受信する手段と、親子宣言を受信に伴い、送受信データの対応関係を記録する識別子対応表を前記記憶装置に作成する手段と、前記収集ネットワークに基づき自身のノードの親ノードにデータを転送する際、前記識別子対応表に送受信データの対応関係を記録する手段と、を有するクライアント・コンピュータを開示する。
【００２２】
ここで、前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有するようにする。
【００２３】
さらに、サーバが受信したデータに対応するＡＣＫを前記収集ネットワークに基づき受信する手段を有し、前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信する手段を有するようにする。
【発明の効果】
【００２４】
本発明では、クライアントから構成される一過性の収集ネットワーク（ツリー構造）を自律的に生成することにより、専用の中間サーバを不要にすることが可能になる。データ収集ネットワークの定期的な更新を行う仕組みによって、特定ノードの障害による収集の停滞や、収集の負荷集中を避け、レイテンシを低く保つことが可能になる。
【００２５】
また一過性の収集ネットワーク内で、上下ノード間でのデータの集約情報を保持することによって、効率的な送達確認を実現することができる。収集ネットワークをまたがった再送による耐障害性を実現し、送達確認と組み合わせることにより信頼性を確保することが可能になる。
【図面の簡単な説明】
【００２６】
【図１】全プッシュ型のノード構成を示す図である。
【図２】全プル型のノード構成を示す図である。
【図３】ツリー・プル型のネットワークを示す図である。
【図４】最初の収集ネットワークを２回目、３回目と再構築する様子を図示したものである。
【図５】親子宣言を親ノードから子ノードにブロードキャストする図である。
【図６】データ転送の様子を図である。
【図７】本発明におけるＡＣＫの流れを示す図である。
【図８】未送信のデータ送信についてを示す図である。
【図９】中継ノードが故障した場合のＡＣＫの流れを示す図である。
【図１０】各サーバまたは各クライアント・ノードが有するコンピュータ・ハードウェアのブロック図を一例である。
【図１１】サーバの処理のフローチャートを示す。
【図１２】各ノードにおける識別対応表を示す図である。
【図１３】ノードにおける収集ネットワークの識別子対応表の作成のフローチャートを示す図である。
【図１４】ノードにおける収集ネットワークの識別子対応表の記録のフローチャートを示す図である。
【図１５】ノードにおけるデータの生成およびデータ・レポジトリへの登録のフローチャートを示す図である。
【図１６】ノードにおける識別子対応表に基づくデータ・レポジトリおよびＡＣＫバッファの使用フローチャートを示す図である。
【発明を実施するための形態】
【００２７】
安定したデータ収集には、サーバ負荷を低減し、特定のクライアントへの負荷集中を無くし、高信頼のデータ収集が必要である。Webサーバとブラウザのような、クライアント手動でデータをサーバに送信する仕組み（全プッシュ型）や、サーチエンジンのページ回収ロボットのような、サーバ手動で全クライアントにデータを回収する仕組み（全プル型）では、収集するデータ単位が小さいため、サーバの負荷が高くなってしまう。図１に全プッシュ型のノード構成を示す。図２に全プル型のノード構成を示す。なおノードは通常コンピュータで構成されるので以下、クライアント・コンピュータをクライアント・ノードまたは単にクライアントと記載する。またサーバ・コンピュータは最上位のノードとなる。
【００２８】
そこで、本発明では、全クライアントが、既存のネットワーク上で、サーバを頂点とするツリー状のネットワーク（収集ネットワーク）を構成し、階層的にデータを収集していく方法（ツリー・プル型）を採る。本方法を用いることで、サーバは大きい単位でデータを収集することが可能となり、負荷が軽減する。図３にツリー・プル型のネットワークを示す。
【００２９】
図３では、ツリーの上位にいるクライアントは、常に大量のデータを受信し、送信する必要がある。そのため、ツリー構造を固定にした場合、特定のクライアントの負荷が集中しやすくなってしまう。そこで、定期的にツリー構造を変化させることで、特定のクライアントに負荷を集中させず、分散させることが可能となる。図４には最初の収集ネットワークを２回目、３回目と再構築する様子を図示する。
【００３０】
上記のような一過性のネットワーク上では、各クライアントは、自身のデータをどこまでサーバに送信済みかを認識する必要がある。つまり、ある中継ノードが故障した場合や、ある収集ネットワークが終了した場合、各クライアントは新しい収集ネットワークでどのデータから送信を開始するか、認識する必要がある。そこで本発明では、ある収集ネットワークでサーバが各クライアントに対しどのデータを収集できたか（ACK）を通知する手法を採る。
【００３１】
１つの実施形態としてサーバが各クライアントに、ACKを送信する方法が考えられる。この方法では、サーバが全クライアントに対し、収集ネットワークを利用して、全ACKをブロードキャストするため、サーバの負荷、クライアントの負荷が増える問題点がある。そこで本発明では、サーバが送信するデータ量の小さいACKを各クライアントが解釈し、下位のクライアントにACKとして伝える方法を採る。
【００３２】
［本発明の動作手順］
まずネットワークのツリーを構築する。ツリーの構築には多くの手法が存在する。例えば最も簡単には、サーバは全ノードの存在を仮定して、
（１）サーバが、ランダムに第一階層のノード集をランダムに決定する
（２）サーバが、決定されていないノードから、第二階層のノード集をランダムに決定し、各ノードの親ノードを第一階層からランダムに決定する。
（３）サーバが、決定されていないノードから、第三階層のノード集をランダムに決定し、各ノードの親ノードを第二階層からランダムに決定する。
（４）以上（１）〜（３）のステップでサーバが、全てのノードを決定したら、その決定した木を第一階層のノードに転送する。
（５）第一階層のノードが、受信した木を、自身の子ノードに転送する。
（６）第二階層のノードが、受信した木を、自身の子ノードに転送する。
以下同様にして末端ノードまで転送する。上記の構築は既定の時間間隔で定期的に実行される。すなわち収集ネットワークは定期的に再構築される。
【００３３】
そのほかの実施例として、Ｐ２Ｇの技術（非特許文献１）を使ってツリーを構成しても良い。Ｐ２Ｇの場合にはサーバが全てノードを知る必要がなく、その代わりにサーバを含む各ノードは任意の数のノードを知っているという状態から機能する。
【００３４】
上記ネットワークの再構築において決定された木の転送時に、親子宣言を行う。図５に親子宣言を親ノードから子ノードにブロードキャストする図を示す。図５ではブロードキャストはＰ２Ｇで行っても良い。図５ではサーバから親子宣言（９）が子ノードに送信される。移行の図において水平方向はノード間の通信を表し、垂直方向は時間の流れを表す。本発明ではネットワークの再構築される度に親子宣言がされる。数字９はネットワークの再構築番号を示し、これが９回目のネットワークであることを意味する。親子宣言は上記決定された木に従って、まず１つ下の子ノードＡに送られ、Ａからその子ノードＧ、Ｅに送信される。
【００３５】
親子宣言を受信したノードは送受信データの対応関係を記録するための識別子対応表をクリアする。図１２に識別対応表を図示する。識別子対応表は、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有する。
【００３６】
識別対応表に示されるデータの種類には大きく分けて、生成データと複合データの２種類に分けられる。生成データとは、各ノードが生成するデータであり、生成データIDを持っている。この生成データIDは、各ノード内で一意に決められる。複合データとは、各ノードが親ノードに送信するデータであり、複合データIDを持っている。この複合データIDは、送信するノード側で一意に決定される。送信元子ノードはデータを送信した子ノードのIDを表す。また送信するデータそのものの記憶領域データ・レポジトリとサーバがデータを受信したことを示すＡＣＫのデータを記憶するためのＡＣＫバッファを有している。
【００３７】
識別子対応表の役割は、生成データと送信複合データ、受信複合データと送信複合データの対応をとることである。換言すると、各ノードにおいて、何を受信し、何を生成し、何を送信したかを記録した表である。つまり生成データと送信複合データの対応は、生成データIDと、その生成データを含む送信済みの複合データの複合データIDの対応をとる。また受信複合データと送信複合データの対応は、子ノードから受信した複合データの複合データIDと、その複合データを含む送信済みの複合データの複合データIDの対応をとる。なお受信複合データと送信複合データの対応をとる場合は、受信複合データを送信したノードIDの対応もとる。
【００３８】
親子宣言が終了したノードはデータ転送を行う。転送にあたりその内容を識別子対応表に記録する。図６にデータ転送の様子を図示する。末端の階層のノードＥは自分の生成したデータe3に送信複合データIDとして10を付与し次の階層における親ノードＡにたいして送信する。ノードＡにはその他の子ノードＧから、送信複合データIDが11のデータg7も受信する。Ａの識別子対応表にはこれらが追加される。次にＡ自身が生成したデータa1とともに送信複合データIDを2としてサーバに送信する。ノードＡはサーバにデータを定期的に送信するので、それまでに溜まったデータに送信複合データIDを付与して送信する。以下同様に送信複合データIDとして3を付与して送信する。送信するデータが無い場合には何も送信しない。
【００３９】
サーバは、各クライアントに、受信済みのデータが何か、各クライアントに通知したいが、クライアントごとにACKを送信するのは、通信回数が多くなり、負荷が高い。またデータ収集の際に利用した収集ネットワークで、全ACKをブロードキャストするのも、通信コストが高い。そこで本発明では各ノードが受信したデータと転送したデータの関係を識別子対応表として記録しておき、親ノードからのACKを子ノードが解釈可能なACKに変換する。これにより、各クライアントは、サーバが受信していないデータを認識し、保持する。そして、次の収集ネットワークに移行する前に、親から、どの識別子までが受信されたかを伝えていくことで、効率よくACKを送信する。
【００４０】
このＡＣＫの流れを図７に示す。サーバはデータID2および3を受信したことを示すＡＣＫを次の階層のノードＡに送信する。ノードＡは識別対応表から送信複合データIDが2または3である、受信複合データIDを見つける。この場合、ノードＥは10および11、ノードＧについては11である。ノードＡは子ノードＥ対してデータID10および11を受信したことを示すＡＣＫを送信する。同様にＧに対してデータID11を受信したことを示すＡＣＫを送信する。その後、サーバＡは識別対応表から送信複合データIDが2および3の行を削除する。ＡＣＫを受信したノードＥ，Ｇは識別対応表から送信複合データIDが10または11である行を削除する。このようにしてサーバで受信されたＡＣＫが効率よく末端のノードへ到達する。
【００４１】
ＡＣＫの受信は収集ネットワークの終了を意味する。各クライアントは以前の識別対応表を破棄して次の収集ネットワーク構築を待機し、次の収集ネットワークを利用して未送信のデータ送信を開始する。図８に未送信のデータ送信について図示する。新しい木に基づいてサーバから親子宣言がなされると各クライアント・ノードは識別対応表を破棄するが、未送信のデータはクリアしない。図８では親子宣言１０がサーバから子ノードＧに対してなされ、ノードＧからその子ノードＥに親子宣言がなされる。その際ノードＥはデータe5が未送信のためこの行は削除しない。ノードＥはその子ノードＡに対して親子宣言する。そして未送信であったデータe5を新しい親ノードＧに対して送信複合データID13として送信する。
【００４２】
もし、中継ノードが故障してしまったら、ACKは受信できない。その場合は、その収集ネットワークでは全データが送信できていなかったものとし、そのデータを再送対象とする。図９に中継ノードが故障した場合のＡＣＫを図示する。中継ノードＡの故障によりノードＥの送信複合データID13に対するＡＣＫが受信できなかった場合、ノードＥは次の親子宣言の時にその全データe3,e4,e5を再送信する。図９では親子宣言がサーバから子ノードＧに対してなされ、ノードＧからその子ノードＥに親子宣言がなされる。その際ノードＥはＡＣＫが受信できなかったデータe3,e4,e5を新しい親ノードＧに再送信する。
【００４３】
図１１にサーバの処理のフローチャートを示す。まずステップ１１０２で収集ネットワークiを開始し，識別子対応表iを生成する。次にステップ１１０４で子ノードの集合iに親子宣言を通知する。そしてステップ１１０６で子ノードの集合iからデータの受信を開始する。ステップ１１０８で一定時間データを受信し、識別子対応表iに受信したデータ識別子と子ノード名を記録する。そしてステップ１１１０で識別子対応表iを利用し、各子ノードに受信したデータの識別子の集合をＡＣＫとして送信する。最後に識別子対応表iを破棄する。
【００４４】
図１３にクライアント・ノードにおける収集ネットワークの識別子対応表の作成のフローチャートを示す。まずステップ１３０２で収集ネットワークiの親子宣言を受信する。次にステップ１３０４で収集ネットワークi以前の識別子対応表を破棄する。次にステップ１３０６で収集ネットワークiに入っていない子ノードを認識しているか確認する。収集ネットワークiに入っていない子ノードを認識した場合にはステップ１３０８で認識した子ノードに収集ネットワークiの親子宣言を送信する。収集ネットワークiに入っていない子ノードがない場合はステップ１３１０で収集ネットワークiの識別子対応表iを生成する。
【００４５】
図１４にクライアント・ノードにおける収集ネットワークの識別子対応表の記録のフローチャートを示す。まずステップ１４０２で収集ネットワークiに対する複合データID(Child)を子ノードcから受信する。次にステップ１４０４で識別子対応表iが存在するか判断する。ステップ１４０４で識別子対応表iが存在しない場合にはステップ１４０６で収集したデータを破棄して終了する。ステップ１４０４で識別子対応表iが存在する場合にはステップ１４０８で、cおよびID(Child)を識別子対応表iに記録する。次にステップ１４１０で親ノードに識別子ID(me)として転送する。最後にcおよびID(child)の行にID(me)を記録する。
【００４６】
図１５にクライアント・ノードにおけるデータの生成およびデータ・レポジトリへの登録のフローチャートを示す。ステップ１５０２でデータdを生成し、データ・レポジトリに登録する。次にステップ１５０４で識別子対応表が存在するか判断する。識別子対応表がない場合にはステップ１５０６で識別子対応表が生成されるまで待機する。識別子対応表がある場合にはステップ１５０８でdを識別子対応表に記録する。そしてステップ１５１０で親ノードに識別子ID(me)として転送する。次にステップ１５１２でdの行にID(me)を記録する。次にステップ１５１４で識別子対応表からdの行が削除されるまで待機する。最後にステップ１５１６でデータ・レポジトリにdが存在するか判断し、存在しない場合にはステップ１５０４へ戻り、存在する場合には処理を終了する。
【００４７】
図１６にクライアント・ノードにおける識別子対応表に基づくデータ・レポジトリおよびＡＣＫバッファの使用フローチャートを示す。ステップ１６０２で収集ネットワークiのACK{IDme}を受信する。次にステップ１６０４で収集ネットワークiの識別子対応表に行が存在するか判断する。もし存在しない場合は処理はステップ１６０６に進む。
【００４８】
ステップ１６０６では識別子対応表iを破棄する。次にステップ１６０８でACKバッファ内の，各cにする{IDfrom}を，cに送信する。最後にステップ１６１０でACKバッファをクリアして終了する。
【００４９】
ステップ１６０４で収集ネットワークiの識別子対応表に行が存在する場合にはステップ１６１２に進む。ステップ１６１２ではまず識別子対応表iの1行を選択する。次にステップ１６１４で{IDme}が含まれているか判断し、もし含まれていない場合にはステップ１６２２に進み
選択した1行を破棄してステップ１６０４に戻る。ステップ１６１４で{IDme}が含まれている場合には、ステップ１６１６で自身が生成したデータが対応されているかを判断する。もし自身が生成したデータが対応している場合には、ステップ１６１８で自身が生成したデータをデータ・レポジトリから破棄する。自身が生成したデータが対応されていない場合にはステップ１６２０で、対応されるcとIDfromをACKバッファに入れて、ステップ１６２２へ進む。
【００５０】
＜コンピュータ・ハードウェアのブロック図＞
図１０に本発明の実施態様における、各サーバまたは各クライアント・ノードが有するコンピュータ・ハードウェアのブロック図を一例として示す。本発明の実施形態に係るコンピュータ・システム（１００１）は、ＣＰＵ（１００２）とメイン・メモリ（１００３）と含み、これらはバス（１００４）に接続されている。ＣＰＵ（１００２）は好ましくは、３２ビット又は６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のＸｅｏｎ（商標）シリーズ、Ｃｏｒｅ（商標）シリーズ、Ａｔｏｍ（商標）シリーズ、Ｐｅｎｔｉｕｍ（商標）シリーズ、Ｃｅｌｅｒｏｎ（商標）シリーズ、ＡＭＤ社のＰｈｅｎｏｍ（商標）シリーズ、Ａｔｈｌｏｎ（商標）シリーズ、Ｔｕｒｉｏｎ（商標）シリーズ及びＳｅｍｐｒｏｎ（商標）などを使用することができる。
【００５１】
バス（１００４）には、ディスプレイ・コントローラ（１００５）を介して、ＬＣＤモニタなどのディスプレイ（１００６）が接続されている。ディスプレイ（１００６）は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バス（１００４）にはまた、ＩＤＥ又はＳＡＴＡコントローラ（１００７）を介して、ハードディスク又はシリコン・ディスク（１００８）と、ＣＤ−ＲＯＭ、ＤＶＤドライブ又はＢｌｕ−ｒａｙドライブ（１００９）が接続されている。
【００５２】
ハードディスク（１００８）には、オペレーティング・システム、本発明のクライアント・サーバ間の通信を行うコードを含むプログラム及びデータが、メイン・メモリ（１００３）にロード可能なように記憶されている。本発明の通信処理に使用されるデータはハードディスク（１００８）もしくはメイン・メモリ（１００３）に格納されＣＰＵ（１００２）により処理が行われる。
【００５３】
ＣＤ−ＲＯＭ、ＤＶＤ又はＢｌｕ−ｒａｙドライブ（１００９）は、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又はＢｌｕ−ｒａｙディスクからプログラムをハードディスクに追加導入するために使用される。バス（１００４）には更に、キーボード・マウスコントローラ（１０１０）を介して、キーボード（１０１１）及びマウス（１０１２）が接続されている。
【００５４】
通信インタフェース（１０１４）は、例えばイーサネット（商標）・プロトコルに従う。通信インタフェース（１０１４）は、通信コントローラ（１０１３）を介してバス（１００４）に接続され、コンピュータ・システム及び通信回線（１０１５）を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インターフェース層を提供する。なお、通信回線は、有線ＬＡＮ環境、或いは例えばＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどの無線ＬＡＮ接続規格に基づく無線ＬＡＮ環境であってもよい。この通信インターフェース（１０１４）を介してクライアント・サーバ間の通信を行う。
【図１】
2011120122.tif 000003
【図２】
2011120122.tif 000004
【図３】
2011120122.tif 000005
【図４】
2011120122.tif 000006
【図５】
2011120122.tif 000007
【図６】
2011120122.tif 000008
【図７】
2011120122.tif 000009
【図８】
2011120122.tif 000010
【図９】
2011120122.tif 000011
【図１０】
2011120122.tif 000012
【図１１】
2011120122.tif 000013
【図１２】
2011120122.tif 000014
【図１３】
2011120122.tif 000015
【図１４】
2011120122.tif 000016
【図１５】
2011120122.tif 000017
【図１６】
2011120122.tif 000018
【手続補正書】
【提出日】平成22年10月26日(2010.10.26)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高信頼のデータ収集方法に関し、特に複数のクライアントがサーバに継続して安定してデータ送信する方法に関する。
【背景技術】
【０００２】
Webサーバとブラウザのような、クライアント主導でデータをサーバに送信する仕組み（全プッシュ型）や、サーチエンジンのページ回収ロボットのような、サーバ主導で全クライアントにデータを回収する仕組み（全プル型）では、収集するデータ単位が小さいため、サーバの負荷が高くなる。たとえば、データ収集ツリーの上位層にいるクライアントは、常に大量のデータを受信し、送信する必要がある。そのため、ツリー構造を固定にした場合、特定のクライアントの負荷が集中しやすくなってしまう。
【０００３】
例えば特許文献１は、階層構造のネットワークシステムにおいて各ノードが属する階層を変更する際、サーバからのストリーミング配信を途切れさせることなく階層を入れ替えるための技術を開示している。特に、自ノードと通信相手の上位・下位ノードのバッファリング量、ハードウェア資源、転送速度に基づく指標に基づいて適切な入れ替えを行う技術を開示している。しかしながらこの技術では単純に配信能力の高いクライアントが階層の上位に置かれるため、能力の高いクライアントに常時負荷が集中するとともに、能力の高いクライアントの障害が生じた場合配信が不可能になる。複数のクライアントが１サーバにデータを継続に安定して送信するための、特定のクライアントに負荷が集中することない高信頼のデータ収集という課題に対する解決方法を示していない。
【０００４】
特許文献２は、アプリケーションレイヤーマルチキャスト通信（一斉配信）において、信頼性を実現するためにマルチキャストされる各データの受信可否 (ACK/NACK) を各受信者が通知し、またそれに基づいてデータ再送を行う手法に関するものであり、特に、ACK/NACK の通知とデータ再送を、マルチキャストツリー上で同一の親を持つ兄弟ノード間でローカルに行うことを特徴としています。この方法はマルチキャスト、すなわちサーバから各受信者に同一のデータを一斉配信する場合を想定しており、それにより初めて受信確認および再送を兄弟ノード間でローカルに行うことが可能になる。しかしながら、各クライアントがそれぞれのデータをサーバに送信する場合において、サーバが受信したことの確認を必要とする状況には適用できない。非特許文献１はＰ２Ｇ(Peer to Group)の技術に関する論文である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開2009-044661
【特許文献２】特開2007-228064
【非特許文献】
【０００６】
【非特許文献１】清水周一、”多候補送信の再帰的ルーティングによる安定した端末型マルチキャスト” 情報処理学会論文誌，Vol.49 No.3 2008年3月
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従って、本発明は複数のクライアントがサーバに継続してデータを安定して送信することを課題とし、そのための方法およびシステムを提供することである。また安定して送信するために、サーバの負荷が小さく、特定のクライアントに負荷が集中することなく、高信頼のデータ収集する方法およびシステムを提供することである。
【課題を解決するための手段】
【０００８】
本発明は上記課題を解決するために、記憶装置を有する複数のクライアント・コンピュータからサーバにデータを収集する方法であって、前記データ収集毎に、サーバを最上位ノードとし、前記複数のクラインアント・コンピュータを子ノードとしてツリー構造の収集ネットワークを既定の間隔で再構築するステップと、前記サーバが前記収集ネットワークに基づき子ノードに親子宣言をブロードキャストするステップと、親子宣言を受信したノードは送受信データの対応関係を記録する識別子対応表を前記記憶装置に作成するステップと、各ノードが前記収集ネットワークに基づきデータを親ノードに転送する際、前記識別子対応表に送受信データの対応関係を記録するステップとを有する方法を開示する。
【０００９】
ここで、前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有する、ようにする。
【００１０】
前記方法がさらに、サーバが受信したデータに対応するＡＣＫを前記収集ネットワークに基づき子ノードに送信するステップを有し、各ノードは、前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信するステップを有するようにする。
【００１１】
前記方法がさらに、各ノードは前記親ノードからのＡＣＫ受信をもって、収集ネットワークの終了とし、前記識別子対応表を削除するステップを有するようにする。
【００１２】
また前記ブロードキャストがＰ２Ｇで行われるようにしてもよい。
【００１３】
また別の態様として、記憶装置を有する複数のクライアント・コンピュータからサーバにデータを収集するシステムであって、前記データ収集毎に、サーバを最上位ノードとし、前記複数のクラインアント・コンピュータを子ノードとしてツリー構造の収集ネットワークを既定の間隔で再構築する手段と、前記サーバが前記収集ネットワークに基づき子ノードに親子宣言をブロードキャストする手段と、親子宣言を受信したノードは送受信データの対応関係を記録する識別子対応表を前記記憶装置に作成する手段と、各ノードが前記収集ネットワークに基づきデータを親ノードに転送する際、前記識別子対応表に送受信データの対応関係を記録する手段とを有するシステムを開示する。
【００１４】
ここで、前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有するようにする。
【００１５】
前記システムがさらに、サーバが受信したデータに対応するＡＣＫを前記収集ネットワークに基づき子ノードに送信する手段を有し、各ノードは、前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信する手段を有するようにする。
【００１６】
前記システムがさらに、各ノードは前記親ノードからのＡＣＫ受信をもって、収集ネットワークの終了とし、前記識別子対応表を削除する手段を有するようにする。
【００１７】
また前記ブロードキャストがＰ２Ｇで行われるようにしてもよい。
【００１８】
また別の態様として、記憶装置を有する複数のクライアント・コンピュータからのデータを収集するサーバであって、前記データ収集毎に、サーバを最上位ノードとし、前記複数のクラインアント・コンピュータを子ノードとしてツリー構造の収集ネットワークを既定の間隔で再構築する手段と、前記収集ネットワークに基づき子ノードに親子宣言をブロードキャストする手段と、親子宣言を受信したノードは送受信データの対応関係を記録する識別子対応表を前記記憶装置に作成し、各ノードが前記収集ネットワークに基づきデータを親ノードに転送する際、前記識別子対応表に送受信データの対応関係を記録し、サーバは最上位ノードとして前記転送されたデータを受信する手段とを有するサーバを開示する。
【００１９】
ここで、前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有するようにする。
【００２０】
前記サーバがさらに、サーバが受信したデータに対応するＡＣＫを前記収集ネットワークに基づき子ノードに送信する手段を有し、各ノードは、前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信する手段を有するようにする。
【００２１】
また別の態様として、サーバに対してデータを収集して送信する、記憶装置を有するクライアント・コンピュータであって、前記サーバが、前記データ収集毎に、前記サーバを最上位ノードとし、クラインアント・コンピュータを子ノードとして既定の間隔で再構築したツリー構造の収集ネットワークを、ブロードキャストされた親子宣言として受信する手段と、親子宣言を受信に伴い、送受信データの対応関係を記録する識別子対応表を前記記憶装置に作成する手段と、前記収集ネットワークに基づき自身のノードの親ノードにデータを転送する際、前記識別子対応表に送受信データの対応関係を記録する手段と、を有するクライアント・コンピュータを開示する。
【００２２】
ここで、前記識別子対応表が、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有するようにする。
【００２３】
さらに、サーバが受信したデータに対応するＡＣＫを前記収集ネットワークに基づき受信する手段を有し、前記識別子対応表を参照して、親ノードからのＡＣＫを子ノードが判別可能なＡＣＫに変換して送信する手段を有するようにする。
【発明の効果】
【００２４】
本発明では、クライアントから構成される一過性の収集ネットワーク（ツリー構造）を自律的に生成することにより、専用の中間サーバを不要にすることが可能になる。データ収集ネットワークの定期的な更新を行う仕組みによって、特定ノードの障害による収集の停滞や、収集の負荷集中を避け、レイテンシを低く保つことが可能になる。
【００２５】
また一過性の収集ネットワーク内で、上下ノード間でのデータの集約情報を保持することによって、効率的な送達確認を実現することができる。収集ネットワークをまたがった再送による耐障害性を実現し、送達確認と組み合わせることにより信頼性を確保することが可能になる。
【図面の簡単な説明】
【００２６】
【図１】全プッシュ型のノード構成を示す図である。
【図２】全プル型のノード構成を示す図である。
【図３】ツリー・プル型のネットワークを示す図である。
【図４】最初の収集ネットワークを２回目、３回目と再構築する様子を図示したものである。
【図５】親子宣言を親ノードから子ノードにブロードキャストする図である。
【図６】データ転送の様子を図である。
【図７】本発明におけるＡＣＫの流れを示す図である。
【図８】未送信のデータ送信についてを示す図である。
【図９】中継ノードが故障した場合のＡＣＫの流れを示す図である。
【図１０】各サーバまたは各クライアント・ノードが有するコンピュータ・ハードウェアのブロック図を一例である。
【図１１】サーバの処理のフローチャートを示す。
【図１２】各ノードにおける識別対応表を示す図である。
【図１３】ノードにおける収集ネットワークの識別子対応表の作成のフローチャートを示す図である。
【図１４】ノードにおける収集ネットワークの識別子対応表の記録のフローチャートを示す図である。
【図１５】ノードにおけるデータの生成およびデータ・レポジトリへの登録のフローチャートを示す図である。
【図１６】ノードにおける識別子対応表に基づくデータ・レポジトリおよびＡＣＫバッファの使用フローチャートを示す図である。
【発明を実施するための形態】
【００２７】
安定したデータ収集には、サーバ負荷を低減し、特定のクライアントへの負荷集中を無くし、高信頼のデータ収集が必要である。Webサーバとブラウザのような、クライアント主導でデータをサーバに送信する仕組み（全プッシュ型）や、サーチエンジンのページ回収ロボットのような、サーバ主導で全クライアントにデータを回収する仕組み（全プル型）では、収集するデータ単位が小さいため、サーバの負荷が高くなってしまう。図１に全プッシュ型のノード構成を示す。図２に全プル型のノード構成を示す。なおノードは通常コンピュータで構成されるので以下、クライアント・コンピュータをクライアント・ノードまたは単にクライアントと記載する。またサーバ・コンピュータは最上位のノードとなる。
【００２８】
そこで、本発明では、全クライアントが、既存のネットワーク上で、サーバを頂点とするツリー状のネットワーク（収集ネットワーク）を構成し、階層的にデータを収集していく方法（ツリー・プル型）を採る。本方法を用いることで、サーバは大きい単位でデータを収集することが可能となり、負荷が軽減する。図３にツリー・プル型のネットワークを示す。
【００２９】
図３では、ツリーの上位にいるクライアントは、常に大量のデータを受信し、送信する必要がある。そのため、ツリー構造を固定にした場合、特定のクライアントの負荷が集中しやすくなってしまう。そこで、定期的にツリー構造を変化させることで、特定のクライアントに負荷を集中させず、分散させることが可能となる。図４には最初の収集ネットワークを２回目、３回目と再構築する様子を図示する。
【００３０】
上記のような一過性のネットワーク上では、各クライアントは、自身のデータをどこまでサーバに送信済みかを認識する必要がある。つまり、ある中継ノードが故障した場合や、ある収集ネットワークが終了した場合、各クライアントは新しい収集ネットワークでどのデータから送信を開始するか、認識する必要がある。そこで本発明では、ある収集ネットワークでサーバが各クライアントに対しどのデータを収集できたか（ACK）を通知する手法を採る。
【００３１】
１つの実施形態としてサーバが各クライアントに、ACKを送信する方法が考えられる。この方法では、サーバが全クライアントに対し、収集ネットワークを利用して、全ACKをブロードキャストするため、サーバの負荷、クライアントの負荷が増える問題点がある。そこで本発明では、サーバが送信するデータ量の小さいACKを各クライアントが解釈し、下位のクライアントにACKとして伝える方法を採る。
【００３２】
［本発明の動作手順］
まずネットワークのツリーを構築する。ツリーの構築には多くの手法が存在する。例えば最も簡単には、サーバは全ノードの存在を仮定して、
（１）サーバが、第一階層のノード集をランダムに決定する
（２）サーバが、決定されていないノードから、第二階層のノード集をランダムに決定し、各ノードの親ノードを第一階層からランダムに決定する。
（３）サーバが、決定されていないノードから、第三階層のノード集をランダムに決定し、各ノードの親ノードを第二階層からランダムに決定する。
（４）以上（１）〜（３）のステップでサーバが、全てのノードを決定したら、その決定した木を第一階層のノードに送信する。
（５）第一階層のノードが、受信した木を、自身の子ノードに転送する。
（６）第二階層のノードが、受信した木を、自身の子ノードに転送する。
以下同様にして末端ノードまで転送する。上記の構築は既定の時間間隔で定期的に実行される。すなわち収集ネットワークは定期的に再構築される。
【００３３】
そのほかの実施例として、Ｐ２Ｇの技術（非特許文献１）を使ってツリーを構成しても良い。Ｐ２Ｇの場合にはサーバが全てノードを知る必要がなく、その代わりにサーバを含む各ノードは任意の数のノードを知っているという状態から機能する。
【００３４】
上記ネットワークの再構築において決定された木の転送時に、親子宣言を行う。図５に親子宣言を親ノードから子ノードにブロードキャストする図を示す。図５ではブロードキャストはＰ２Ｇで行っても良い。図５ではサーバから親子宣言（９）が子ノードに送信される。以降の図において水平方向はノード間の通信を表し、垂直方向は時間の流れを表す。本発明ではネットワークの再構築される度に親子宣言がされる。数字９はネットワークの再構築番号を示し、これが９回目のネットワークであることを意味する。親子宣言は上記決定された木に従って、まず１つ下の子ノードＡに送られ、Ａからその子ノードＧ、Ｅに送信される。
【００３５】
親子宣言を受信したノードは送受信データの対応関係を記録するための識別子対応表をクリアする。図１２に識別対応表を図示する。識別子対応表は、送信元を示す送信元子ノード名、子ノードから受信したデータの識別子である受信複合データ識別子、ノード自身が生成したデータの識別子である生成データ識別子、親ノードに送信するデータの識別子である送信複合データ識別子を有する。
【００３６】
識別対応表に示されるデータの種類には大きく分けて、生成データと複合データの２種類に分けられる。生成データとは、各ノードが生成するデータであり、生成データIDを持っている。この生成データIDは、各ノード内で一意に決められる。複合データとは、各ノードが親ノードに送信するデータであり、複合データIDを持っている。この複合データIDは、送信するノード側で一意に決定される。送信元子ノード名はデータを送信した子ノードのIDを表す。また送信するデータそのものの記憶領域データ・レポジトリとサーバがデータを受信したことを示すＡＣＫのデータを記憶するためのＡＣＫバッファを有している。
【００３７】
識別子対応表の役割は、生成データと送信複合データ、受信複合データと送信複合データの対応をとることである。換言すると、各ノードにおいて、何を受信し、何を生成し、何を送信したかを記録した表である。つまり生成データと送信複合データの対応は、生成データIDと、その生成データを含む送信済みの複合データの複合データIDの対応をとる。また受信複合データと送信複合データの対応は、子ノードから受信した複合データの複合データIDと、その複合データを含む送信済みの複合データの複合データIDの対応をとる。なお受信複合データと送信複合データの対応をとる場合は、受信複合データを送信したノードIDの対応もとる。
【００３８】
親子宣言が終了したノードはデータ転送を行う。転送にあたりその内容を識別子対応表に記録する。図６にデータ転送の様子を図示する。末端の階層のノードＥは自分の生成したデータe3に送信複合データIDとして10を付与し次の階層における親ノードＡにたいして送信する。ノードＡにはその他の子ノードＧから、送信複合データIDが11のデータg7も受信する。Ａの識別子対応表にはこれらが追加される。次にＡ自身が生成したデータa1とともに送信複合データIDを2としてサーバに送信する。ノードＡはサーバにデータを定期的に送信するので、それまでに溜まったデータに送信複合データIDを付与して送信する。以下同様に送信複合データIDとして3を付与して送信する。送信するデータが無い場合には何も送信しない。
【００３９】
サーバは、各クライアントに、受信済みのデータが何か、各クライアントに通知したいが、クライアントごとにACKを送信するのは、通信回数が多くなり、負荷が高い。またデータ収集の際に利用した収集ネットワークで、全ACKをブロードキャストするのも、通信コストが高い。そこで本発明では各ノードが受信したデータと転送したデータの関係を識別子対応表として記録しておき、親ノードからのACKを子ノードが解釈可能なACKに変換する。これにより、各クライアントは、サーバが受信していないデータを認識し、保持する。そして、次の収集ネットワークに移行する前に、親から、どの識別子までが受信されたかを伝えていくことで、効率よくACKを送信する。
【００４０】
このＡＣＫの流れを図７に示す。サーバはデータID2および3を受信したことを示すＡＣＫを次の階層のノードＡに送信する。ノードＡは識別対応表から送信複合データIDが2または3である、受信複合データIDを見つける。この場合、ノードＥは10および11、ノードＧについては11である。ノードＡは子ノードＥ対してデータID10および11を受信したことを示すＡＣＫを送信する。同様にＧに対してデータID11を受信したことを示すＡＣＫを送信する。その後、ノードＡは識別対応表から送信複合データIDが2および3の行を削除する。ＡＣＫを受信したノードＥ，Ｇは識別対応表から送信複合データIDが10または11である行を削除する。このようにしてサーバで受信されたデータのＡＣＫが効率よく末端のノードへ到達する。
【００４１】
ＡＣＫの受信は収集ネットワークの終了を意味する。各クライアントは以前の識別対応表を破棄して次の収集ネットワーク構築を待機し、次の収集ネットワークを利用して未送信のデータ送信を開始する。図８に未送信のデータ送信について図示する。新しい木に基づいてサーバから親子宣言がなされると各クライアント・ノードは識別対応表を破棄するが、未送信のデータはクリアしない。図８では親子宣言１０がサーバから子ノードＧに対してなされ、ノードＧからその子ノードＥに親子宣言がなされる。その際ノードＥはデータe5が未送信のためこの行は削除しない。ノードＥはその子ノードＡに対して親子宣言する。そして未送信であったデータe5を新しい親ノードＧに対して送信複合データID13として送信する。
【００４２】
もし、中継ノードが故障してしまったら、ACKは受信できない。その場合は、その収集ネットワークでは全データが送信できていなかったものとし、そのデータを再送対象とする。図９に中継ノードが故障した場合のＡＣＫを図示する。中継ノードＡの故障によりノードＥの送信複合データID13に対するＡＣＫが受信できなかった場合、ノードＥは次の親子宣言の時にその全データe3,e4,e5を再送信する。図９では親子宣言がサーバから子ノードＧに対してなされ、ノードＧからその子ノードＥに親子宣言がなされる。その際ノードＥはＡＣＫが受信できなかったデータe3,e4,e5を新しい親ノードＧに再送信する。
【００４３】
図１１にサーバの処理のフローチャートを示す。まずステップ１１０２で収集ネットワークiを開始し，識別子対応表iを生成する。次にステップ１１０４で子ノードの集合iに親子宣言を通知する。そしてステップ１１０６で子ノードの集合iからデータの受信を開始する。ステップ１１０８で一定時間データを受信し、識別子対応表iに受信したデータ識別子と子ノード名を記録する。そしてステップ１１１０で識別子対応表iを利用し、各子ノードに受信したデータの識別子の集合をＡＣＫとして送信する。最後に識別子対応表iを破棄する。
【００４４】
図１３にクライアント・ノードにおける収集ネットワークの識別子対応表の作成のフローチャートを示す。まずステップ１３０２で収集ネットワークiの親子宣言を受信する。次にステップ１３０４で収集ネットワークi以前の識別子対応表を破棄する。次にステップ１３０６で収集ネットワークiに入っていない子ノードを認識しているか確認する。収集ネットワークiに入っていない子ノードを認識した場合にはステップ１３０８で認識した子ノードに収集ネットワークiの親子宣言を送信する。収集ネットワークiに入っていない子ノードがない場合はステップ１３１０で収集ネットワークiの識別子対応表iを生成する。
【００４５】
図１４にクライアント・ノードにおける収集ネットワークの識別子対応表の記録のフローチャートを示す。まずステップ１４０２で収集ネットワークiに対する複合データID(Child)を子ノードcから受信する。次にステップ１４０４で識別子対応表iが存在するか判断する。ステップ１４０４で識別子対応表iが存在しない場合にはステップ１４０６で収集したデータを破棄して終了する。ステップ１４０４で識別子対応表iが存在する場合にはステップ１４０８で、cおよびID(Child)を識別子対応表iに記録する。次にステップ１４１０で親ノードに識別子ID(me)として転送する。最後にcおよびID(child)の行にID(me)を記録する。
【００４６】
図１５にクライアント・ノードにおけるデータの生成およびデータ・レポジトリへの登録のフローチャートを示す。ステップ１５０２でデータdを生成し、データ・レポジトリに登録する。次にステップ１５０４で識別子対応表が存在するか判断する。識別子対応表がない場合にはステップ１５０６で識別子対応表が生成されるまで待機する。識別子対応表がある場合にはステップ１５０８でdを識別子対応表に記録する。そしてステップ１５１０で親ノードに識別子ID(me)として転送する。次にステップ１５１２でdの行にID(me)を記録する。次にステップ１５１４で識別子対応表からdの行が削除されるまで待機する。最後にステップ１５１６でデータ・レポジトリにdが存在するか判断し、存在しない場合にはステップ１５０４へ戻り、存在する場合には処理を終了する。
【００４７】
図１６にクライアント・ノードにおける識別子対応表に基づくデータ・レポジトリおよびＡＣＫバッファの使用フローチャートを示す。ステップ１６０２で収集ネットワークiのACK{IDme}を受信する。次にステップ１６０４で収集ネットワークiの識別子対応表iに行が存在するか判断する。もし存在しない場合は処理はステップ１６０６に進む。
【００４８】
ステップ１６０６では識別子対応表iを破棄する。次にステップ１６０８でACKバッファ内の，各cに対応する{IDfrom}を，cに送信する。最後にステップ１６１０でACKバッファをクリアして終了する。
【００４９】
ステップ１６０４で収集ネットワークiの識別子対応表に行が存在する場合にはステップ１６１２に進む。ステップ１６１２ではまず識別子対応表iの1行を選択する。次にステップ１６１４で{IDme}が含まれているか判断し、もし含まれていない場合にはステップ１６２２に進み
選択した1行を破棄してステップ１６０４に戻る。ステップ１６１４で{IDme}が含まれている場合には、ステップ１６１６で自身が生成したデータが対応されているかを判断する。もし自身が生成したデータが対応している場合には、ステップ１６１８で自身が生成したデータをデータ・レポジトリから破棄する。自身が生成したデータが対応されていない場合にはステップ１６２０で、対応されるcとIDfromをACKバッファに入れて、ステップ１６２２へ進む。
【００５０】
＜コンピュータ・ハードウェアのブロック図＞
図１０に本発明の実施態様における、各サーバまたは各クライアント・ノードが有するコンピュータ・ハードウェアのブロック図を一例として示す。本発明の実施形態に係るコンピュータ・システム（１００１）は、ＣＰＵ（１００２）とメイン・メモリ（１００３）と含み、これらはバス（１００４）に接続されている。ＣＰＵ（１００２）は好ましくは、３２ビット又は６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のＸｅｏｎ（商標）シリーズ、Ｃｏｒｅ（商標）シリーズ、Ａｔｏｍ（商標）シリーズ、Ｐｅｎｔｉｕｍ（商標）シリーズ、Ｃｅｌｅｒｏｎ（商標）シリーズ、ＡＭＤ社のＰｈｅｎｏｍ（商標）シリーズ、Ａｔｈｌｏｎ（商標）シリーズ、Ｔｕｒｉｏｎ（商標）シリーズ及びＳｅｍｐｒｏｎ（商標）などを使用することができる。
【００５１】
バス（１００４）には、ディスプレイ・コントローラ（１００５）を介して、ＬＣＤモニタなどのディスプレイ（１００６）が接続されている。ディスプレイ（１００６）は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バス（１００４）にはまた、ＩＤＥ又はＳＡＴＡコントローラ（１００７）を介して、ハードディスク又はシリコン・ディスク（１００８）と、ＣＤ−ＲＯＭ、ＤＶＤドライブ又はＢｌｕ−ｒａｙドライブ（１００９）が接続されている。
【００５２】
ハードディスク（１００８）には、オペレーティング・システム、本発明のクライアント・サーバ間の通信を行うコードを含むプログラム及びデータが、メイン・メモリ（１００３）にロード可能なように記憶されている。本発明の通信処理に使用されるデータはハードディスク（１００８）もしくはメイン・メモリ（１００３）に格納されＣＰＵ（１００２）により処理が行われる。
【００５３】
ＣＤ−ＲＯＭ、ＤＶＤ又はＢｌｕ−ｒａｙドライブ（１００９）は、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又はＢｌｕ−ｒａｙディスクからプログラムをハードディスクに追加導入するために使用される。バス（１００４）には更に、キーボード・マウスコントローラ（１０１０）を介して、キーボード（１０１１）及びマウス（１０１２）が接続されている。
【００５４】
通信インタフェース（１０１４）は、例えばイーサネット（商標）・プロトコルに従う。通信インタフェース（１０１４）は、通信コントローラ（１０１３）を介してバス（１００４）に接続され、コンピュータ・システム及び通信回線（１０１５）を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インターフェース層を提供する。なお、通信回線は、有線ＬＡＮ環境、或いは例えばＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどの無線ＬＡＮ接続規格に基づく無線ＬＡＮ環境であってもよい。この通信インターフェース（１０１４）を介してクライアント・サーバ間の通信を行う。