(57)【特許請求の範囲】
【請求項１】
ネットワークに接続する複数のノード装置を備え、前記複数のノード装置に分散保存されるコンテンツが複数の分割データに分割されており、前記分割データを保存した前記ノード装置から他の前記ノード装置が前記分割データを取得する情報通信システムであって、
前記ノード装置は、
要求する前記コンテンツを構成する前記分割データを識別する第１識別情報と、前記コンテンツを要求する前記ノード装置を識別する第２識別情報と、を含む要求情報を、前記第１識別情報が示す前記分割データを保存するノード装置である保存ノード装置へ前記分割データ毎に送信する送信手段と、
前記送信手段により送信された前記要求情報に含まれる前記第１識別情報が示す前記分割データを前記保存ノード装置から取得する第１取得手段と、
前記第１取得手段により取得された前記分割データを記憶する第１記憶手段と、
前記第１記憶手段により記憶された前記分割データが他の前記ノード装置によって取得されることを可能にする公開手段と、
を備え、
少なくとも１つの前記保存ノード装置は、
他の前記ノード装置から送信された前記要求情報を受信する第１受信手段と、
前記第１受信手段により受信された前記要求情報に含まれる前記第１識別情報に基づいて、要求された前記コンテンツを識別する第３識別情報を取得する第２取得手段と、
前記第１受信手段により受信された前記要求情報に含まれる前記第２識別情報と、前記第２取得手段により取得された前記第３識別情報と、が対応付けて第２記憶手段に記憶されていない場合、前記要求情報に含まれる前記第２識別情報と、前記第２取得手段により取得された前記第３識別情報と、前記要求情報が受信された時刻を示す時刻情報と、を対応付けて前記第２記憶手段に記憶させ、前記第２識別情報と前記第３識別情報とが対応付けて記憶されている場合、前記時刻情報を前記第２記憶手段に記憶させない第１制御手段と、
前記第１受信手段により受信された前記要求情報が格納されるキューとして、前記要求情報が受信された時刻が早い順に前記要求情報が取り出されるキューを記憶する第３記憶手段と、
前記第３記憶手段に記憶された前記キューから前記要求情報が取り出される順序を、前記要求情報に含まれる前記第２識別情報と、前記要求情報に含まれる前記第１識別情報が示す前記分割データにより構成される前記コンテンツを示す前記第３識別情報と、に対応付けて前記第２記憶手段に記憶された前記時刻情報が示す時刻が早い順に入れ替える入替手段と、
前記入替手段により入れ替えられた順に従って、前記第３記憶手段により記憶された前記キューから前記要求情報を取り出して、取り出した前記要求情報に含まれる前記第２識別情報が示す前記ノード装置へ、取り出した前記要求情報に含まれる前記第１識別情報が示す前記分割データをアップロードする処理を、順次行う第２制御手段と、
を備えることを特徴とする情報通信システム。
【請求項２】
前記送信手段は、前記第１識別情報と、前記第２識別情報と、前記第３識別情報と、を含む要求情報を、前記第１識別情報が示す前記分割データを保存する前記保存ノード装置へ前記分割データ毎に送信し、
前記第２取得手段は、前記第１受信手段により受信された前記要求情報から前記第３識別情報を取得し、
前記入替手段は、前記要求情報が取り出される順序を、前記要求情報に含まれる前記第２識別情報及び前記第３識別情報に対応付けて前記第２記憶手段に記憶された前記時刻情報が示す時刻が早い順に入れ替えることを特徴とする請求項１に記載の情報通信システム。
【請求項３】
前記ノード装置は、
要求する前記コンテンツを構成する前記分割データを保存する前記保存ノード装置を定期的に検索する検索手段を更に備え、
前記送信手段は、前記検索手段により検索された前記保存ノード装置へ前記要求情報を送信し、
前記公開手段は、前記第１取得手段により前記分割データが取得されたときに、前記分割データが他の前記ノード装置によって取得されることを可能にすることを特徴とする請求項１または２に記載の情報通信システム。
【請求項４】
各前記分割データを配信する配信装置を更に備え、
前記配信装置は、
各前記分割データを記憶する第４記憶手段と、
前記ノード装置から送信された前記要求情報を受信する第２受信手段と、
前記第２受信手段により受信された前記要求情報に含まれる前記第１識別情報が示す前記分割データを、前記要求情報に含まれる前記第２識別情報が示す前記ノード装置へアップロードするアップロード手段と、
を備え、
前記検索手段は、前記検索の結果、前記配信装置のみが前記分割データを保存していると判定した場合に、前記検索を定期的に行い、
前記送信手段は、前記検索手段により検索された前記ノード装置または前記配信装置へ前記要求情報を送信し、
前記第１取得手段は、前記要求情報の送信先である前記ノード装置または前記配信装置から前記分割データを取得することを特徴とする請求項３に記載の情報通信システム。
【請求項５】
前記入替手段は、前記キューに格納された前記要求情報の数であって、前記要求情報に含まれる前記第１識別情報が示す前記分割データにより構成される前記コンテンツごとに計算される数が多い順に、前記キューから前記要求情報が取り出される順序を入れ替え、同一の前記コンテンツを構成する前記分割データを示す前記第１識別情報を含む複数の要求情報が前記キューから取り出される順序を、前記時刻情報が示す時刻が早い順に入れ替えることを特徴とする請求項１乃至４の何れか１項に記載の情報通信システム。
【請求項６】
前記複数のノード装置に含まれる各前記ノード装置が、前記第１受信手段、前記第２取得手段、前記第２記憶手段、前記第１制御手段、前記入替手段及び前記第２制御手段を備えることを特徴とする請求項１乃至５の何れか１項に記載の情報通信システム。
【請求項７】
ネットワークに接続する複数のノード装置を備え、前記複数のノード装置に分散保存されるコンテンツが複数の分割データに分割されており、前記分割データを保存した前記ノード装置から他の前記ノード装置が前記分割データを取得する情報通信システムにおける少なくとも１つの前記ノード装置であって、
要求された前記コンテンツを構成する前記分割データを識別する第１識別情報と、前記コンテンツを要求する前記ノード装置を識別する第２識別情報と、を含む要求情報を、他の前記ノード装置から受信する第１受信手段と、
前記第１受信手段により受信された前記要求情報に含まれる前記第１識別情報に基づいて、要求された前記コンテンツを識別する第３識別情報を取得する第２取得手段と、
前記第１受信手段により受信された前記要求情報に含まれる前記第２識別情報と、前記第２取得手段により取得された前記第３識別情報と、が対応付けて第２記憶手段に記憶されていない場合、前記要求情報に含まれる前記第２識別情報と、前記第２取得手段により取得された前記第３識別情報と、前記要求情報が受信された時刻を示す時刻情報と、を対応付けて前記第２記憶手段に記憶させ、前記第２識別情報と前記第３識別情報とが対応付けて記憶されている場合、前記時刻情報を前記第２記憶手段に記憶させない第１制御手段と、
前記第１受信手段により受信された前記要求情報が格納されるキューとして、前記要求情報が受信された時刻が早い順に前記要求情報が取り出されるキューを記憶する第３記憶手段と、
前記第３記憶手段に記憶された前記キューから前記要求情報が取り出される順序を、前記要求情報に含まれる前記第２識別情報と、前記要求情報に含まれる前記第１識別情報が示す前記分割データにより構成される前記コンテンツを示す前記第３識別情報と、に対応付けて前記第２記憶手段に記憶された前記時刻情報が示す時刻が早い順に入れ替える入替手段と、
前記入替手段により入れ替えられた順に従って、前記第３記憶手段により記憶された前記キューから前記要求情報を取り出して、取り出した前記要求情報に含まれる前記第２識別情報が示す前記ノード装置へ、取り出した前記要求情報に含まれる前記第１識別情報が示す前記分割データをアップロードする処理を、順次行う第２制御手段と、
を備えることを特徴とするノード装置。
【請求項８】
ネットワークに接続する複数のノード装置を備え、前記複数のノード装置に分散保存されるコンテンツが複数の分割データに分割されており、前記分割データを保存した前記ノード装置から他の前記ノード装置が前記分割データを取得する情報通信システムにおける情報処理方法であって、
前記ノード装置が、要求する前記コンテンツを構成する前記分割データを識別する第１識別情報と、前記コンテンツを要求する前記ノード装置を識別する第２識別情報と、を含む要求情報を、前記第１識別情報が示す前記分割データを保存するノード装置である保存ノード装置へ前記分割データ毎に送信する送信ステップと、
前記ノード装置が、前記送信ステップにおいて送信された前記要求情報に含まれる前記第１識別情報が示す前記分割データを前記保存ノード装置から取得する取得ステップと、
前記ノード装置が、前記取得ステップにおいて取得された前記分割データを記憶する第１記憶ステップと、
前記ノード装置が、前記第１記憶ステップにおいて記憶された前記分割データが他の前記ノード装置によって取得されることを可能にする公開ステップと、
少なくとも１つの前記保存ノード装置が、他の前記ノード装置から送信された前記要求情報を受信する第１受信ステップと、
前記少なくとも１つの前記保存ノード装置が、前記第１受信ステップにおいて受信された前記要求情報に含まれる前記第１識別情報に基づいて、要求された前記コンテンツを識別する第３識別情報を取得する第２取得ステップと、
前記少なくとも１つの前記保存ノード装置が、前記第１受信ステップにおいて受信された前記要求情報に含まれる前記第２識別情報と、前記第２取得ステップにおいて取得された前記第３識別情報と、が対応付けて第２記憶手段に記憶されていない場合、前記要求情報に含まれる前記第２識別情報と、前記第２取得ステップにおいて取得された前記第３識別情報と、前記要求情報が受信された時刻を示す時刻情報と、を対応付けて前記第２記憶手段に記憶させ、前記第２識別情報と前記第３識別情報とが対応付けて記憶されている場合、前記時刻情報を前記第２記憶手段に記憶させない第１制御ステップと、
前記少なくとも１つの前記保存ノード装置が、前記第１受信ステップにおいて受信された前記要求情報が格納されるキューとして、前記要求情報が受信された時刻が早い順に前記要求情報が取り出されるキューを記憶する第３記憶手段に記憶された前記キューから前記要求情報が取り出される順序を、前記要求情報に含まれる前記第２識別情報と、前記要求情報に含まれる前記第１識別情報が示す前記分割データにより構成される前記コンテンツを示す前記第３識別情報と、に対応付けて前記第２記憶手段に記憶された前記時刻情報が示す時刻が早い順に入れ替える入替ステップと、
前記少なくとも１つの前記保存ノード装置が、前記入替ステップにおいて入れ替えられた順に従って、前記第３記憶手段により記憶された前記キューから前記要求情報を取り出して、取り出した前記要求情報に含まれる前記第２識別情報が示す前記ノード装置へ、取り出した前記要求情報に含まれる前記第１識別情報が示す前記分割データをアップロードする処理を、順次行う第２制御ステップと、
を含むことを特徴とする情報処理方法。
【請求項９】
ネットワークに接続する複数のノード装置を備え、前記複数のノード装置に分散保存されるコンテンツが複数の分割データに分割されており、前記分割データを保存した前記ノード装置から他の前記ノード装置が前記分割データを取得する情報通信システムにおける少なくとも１つの前記ノード装置に含まれるコンピュータに、
要求された前記コンテンツを構成する前記分割データを識別する第１識別情報と、前記コンテンツを要求する前記ノード装置を識別する第２識別情報と、を含む要求情報を、他の前記ノード装置から受信する第１受信ステップと、
前記第１受信ステップにおいて受信された前記要求情報に含まれる前記第１識別情報に基づいて、要求された前記コンテンツを識別する第３識別情報を取得する第２取得ステップと、
前記第１受信ステップにおいて受信された前記要求情報に含まれる前記第２識別情報と、前記第２取得ステップにおいて取得された前記第３識別情報と、が対応付けて第２記憶手段に記憶されていない場合、前記要求情報に含まれる前記第２識別情報と、前記第２取得ステップにおいて取得された前記第３識別情報と、前記要求情報が受信された時刻を示す時刻情報と、を対応付けて前記第２記憶手段に記憶させ、前記第２識別情報と前記第３識別情報とが対応付けて記憶されている場合、前記時刻情報を前記第２記憶手段に記憶させない第１制御ステップと、
前記第１受信ステップにおいて受信された前記要求情報が格納されるキューとして、前記要求情報が受信された時刻が早い順に前記要求情報が取り出されるキューを記憶する第３記憶手段に記憶された前記キューから前記要求情報が取り出される順序を、前記要求情報に含まれる前記第２識別情報と、前記要求情報に含まれる前記第１識別情報が示す前記分割データにより構成される前記コンテンツを示す前記第３識別情報と、に対応付けて前記第２記憶手段に記憶された前記時刻情報が示す時刻が早い順に入れ替える入替ステップと、
前記入替ステップにおいて入れ替えられた順に従って、前記第３記憶手段により記憶された前記キューから前記要求情報を取り出して、取り出した前記要求情報に含まれる前記第２識別情報が示す前記ノード装置へ、取り出した前記要求情報に含まれる前記第１識別情報が示す前記分割データをアップロードする処理を、順次行う第２制御ステップと、
を実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介して互いに通信可能な複数のノード装置を備えたピアツーピア（Peer to Peer（P2P））方式の通信システムの技術分野に関する。
【背景技術】
【０００２】
近年、ピアツーピア方式の通信システムが注目されている。このピアツーピア方式の通信システムにおいて、１つのコンテンツを複数のデータに分割して、複数のノード装置に分散して保存させる技術が知られている。ここで、分割された各データを、「分割データ」と称する。例えば、特許文献１に記載の技術では、ノード装置がコンテンツを取得する場合、そのコンテンツを構成する分割データを他のノード装置に要求する。要求を受けたノード装置は、その都度、要求された分割データを要求元のノード装置にアップロードする。分割データをダウンロードして保存したノード装置は、その分割データを保存していることを公開する処理を行う。そうすると、コンテンツ全体の取得が完了する前であっても、他のノード装置は、分割データを保存したノード装置からこの分割データを取得することができる。このようにして、コンテンツをアップロードする負荷が複数のノード装置に分散される。また、コンテンツを構成する全ての分割データが取得されることにより、コンテンツ全体の取得が完了する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−１９３４６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、分割データを保存しているノード装置が、複数のノード装置から分割データの要求を受けることにより、複数のノード装置に対して並行して分割データをアップロードすることがある。このとき、アップロードするノード装置の負荷が高くなる場合がある。また、通信回線の帯域幅の制限により、各ノード装置へ分割データをアップロードするための帯域を十分に確保することができない場合がある。こうした場合、各ノード装置に対する分割データの転送速度がそれぞれ遅くなる。これによって、分割データを要求している各ノード装置において、分割データの取得の完了がそれぞれ遅延する。分割データの取得が完了するまでは、その分割データを保存していることは公開されないことから、コンテンツをアップロードする負荷を効率的に分散することができない。また、分割データの取得の遅延によって、コンテンツ全体の取得の完了が遅延する場合もある。
【０００５】
そこで、本発明は、以上の点に鑑みてなされたものである。本発明は、ノード装置が複数の分割データに分割されたコンテンツを取得するときにその分割データを早く公開することを可能とするとともに、コンテンツ全体の取得に要する時間を短縮することを可能とする情報通信システム、ノード装置、情報処理方法、及び情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、請求項１に記載の発明は、ネットワークに接続する複数のノード装置を備え、前記複数のノード装置に分散保存されるコンテンツが複数の分割データに分割されており、前記分割データを保存した前記ノード装置から他の前記ノード装置が前記分割データを取得する情報通信システムであって、前記ノード装置は、要求する前記コンテンツを構成する前記分割データを識別する第１識別情報と、前記コンテンツを要求する前記ノード装置を識別する第２識別情報と、を含む要求情報を、前記第１識別情報が示す前記分割データを保存するノード装置である保存ノード装置へ前記分割データ毎に送信する送信手段と、前記送信手段により送信された前記要求情報に含まれる前記第１識別情報が示す前記分割データを前記保存ノード装置から取得する第１取得手段と、前記第１取得手段により取得された前記分割データを記憶する第１記憶手段と、前記第１記憶手段により記憶された前記分割データが他の前記ノード装置によって取得されることを可能にする公開手段と、を備え、少なくとも１つの前記保存ノード装置は、他の前記ノード装置から送信された前記要求情報を受信する第１受信手段と、前記第１受信手段により受信された前記要求情報に含まれる前記第１識別情報に基づいて、要求された前記コンテンツを識別する第３識別情報を取得する第２取得手段と、前記第１受信手段により受信された前記要求情報に含まれる前記第２識別情報と、前記第２取得手段により取得された前記第３識別情報と、が対応付けて第２記憶手段に記憶されていない場合、前記要求情報に含まれる前記第２識別情報と、前記第２取得手段により取得された前記第３識別情報と、前記要求情報が受信された時刻を示す時刻情報と、を対応付けて前記第２記憶手段に記憶させ、前記第２識別情報と前記第３識別情報とが対応付けて記憶されている場合、前記時刻情報を前記第２記憶手段に記憶させない第１制御手段と、前記第１受信手段により受信された前記要求情報が格納されるキューとして、前記要求情報が受信された時刻が早い順に前記要求情報が取り出されるキューを記憶する第３記憶手段と、前記第３記憶手段に記憶された前記キューから前記要求情報が取り出される順序を、前記要求情報に含まれる前記第２識別情報と、前記要求情報に含まれる前記第１識別情報が示す前記分割データにより構成される前記コンテンツを示す前記第３識別情報と、に対応付けて前記第２記憶手段に記憶された前記時刻情報が示す時刻が早い順に入れ替える入替手段と、前記入替手段により入れ替えられた順に従って、前記第３記憶手段により記憶された前記キューから前記要求情報を取り出して、取り出した前記要求情報に含まれる前記第２識別情報が示す前記ノード装置へ、取り出した前記要求情報に含まれる前記第１識別情報が示す前記分割データをアップロードする処理を、順次行う第２制御手段と、を備えることを特徴とする。
【０００７】
この発明によれば、コンテンツの要求が早かったノード装置の順に、保存ノード装置から分割データが取得されるように制御される。そのため、保存ノード装置の処理負荷を軽減することができる。また、各分割データのアップロードの帯域幅をそれぞれ広く確保することができる。よって、分割データの取得に要する時間が短くなるので、分割データを早く公開することができる。また、コンテンツの要求が早かったノード装置であるほど、コンテンツを構成する各分割データを先に取得することができる。よって、コンテンツ全体の取得に要する時間を短縮することができる。
【０００９】
また、この発明によれば、コンテンツの要求がコンテンツ単位で早かったノード装置の順に、保存ノード装置から分割データが取得されるように制御される。よって、ノード装置は、要求が早かったコンテンツであるほど、そのコンテンツ全体を早く取得することができる。
また、この発明によれば、キューを用いることによって、コンテンツを要求した時刻が早いノード装置の順に分割データをアップロードすることができる。
また、この発明によれば、コンテンツを要求した時刻が早いノード装置の順に取り出されるように、要求情報をキューに格納させることができる。
【００１０】
請求項２に記載の発明は、前記送信手段は、前記第１識別情報と、前記第２識別情報と、前記第３識別情報と、を含む要求情報を、前記第１識別情報が示す前記分割データを保存する前記保存ノード装置へ前記分割データ毎に送信し、前記第２取得手段は、前記第１受信手段により受信された前記要求情報から前記第３識別情報を取得し、前記入替手段は、前記要求情報が取り出される順序を、前記要求情報に含まれる前記第２識別情報及び前記第３識別情報に対応付けて前記第２記憶手段に記憶された前記時刻情報が示す時刻が早い順に入れ替えることを特徴とする。
【００１１】
この発明によれば、コンテンツの要求がコンテンツ単位で早かったノード装置の順に、保存ノード装置から分割データが取得されるように制御される。よって、ノード装置は、要求が早かったコンテンツであるほど、そのコンテンツ全体を早く取得することができる。
【００１６】
請求項６に記載の発明は、前記ノード装置は、要求する前記コンテンツを構成する前記分割データを保存する前記保存ノード装置を定期的に検索する検索手段を更に備え、前記送信手段は、前記検索手段により検索された前記保存ノード装置へ前記要求情報を送信し、前記公開手段は、前記第１取得手段により前記分割データが取得されたときに、前記分割データが他の前記ノード装置によって取得されることを可能にすることを特徴とする。
【００１７】
保存ノード装置が、ノード装置に分割データの取得を待たせている間に、他のノード装置にアップロードを行うことで、取得を待たされている分割データを保存する保存ノード装置が増加する可能性がある。この発明によれば、ノード装置が、検索を定期的に行うことで前回までに検索されなかった新たな保存ノード装置が検索されれば、新たな保存ノード装置から分割データを取得することができる。よって、コンテンツのアップロードの負荷をより効率的に分散することができる。
【００１８】
請求項７に記載の発明は、各前記分割データを配信する配信装置を更に備え、前記配信装置は、各前記分割データを記憶する第４記憶手段と、前記ノード装置から送信された前記要求情報を受信する第２受信手段と、前記第２受信手段により受信された前記要求情報に含まれる前記第１識別情報が示す前記分割データを、前記要求情報に含まれる前記第２識別情報が示す前記ノード装置へアップロードするアップロード手段と、を備え、前記検索手段は、前記検索の結果、前記配信装置のみが前記分割データを保存していると判定した場合に、前記検索を定期的に行い、前記送信手段は、前記検索手段により検索された前記ノード装置または前記配信装置へ前記要求情報を送信し、前記第１取得手段は、前記要求情報の送信先である前記ノード装置または前記配信装置から前記分割データを取得することを特徴とする。
【００１９】
この発明によれば、各分割データを配信することができる配信装置に対する要求の集中を早く解消することができる。
【００２０】
請求項５に記載の発明は、前記入替手段は、前記キューに格納された前記要求情報の数であって、前記要求情報に含まれる前記第１識別情報が示す前記分割データにより構成される前記コンテンツごとに計算される数が多い順に、前記キューから前記要求情報が取り出される順序を入れ替え、同一の前記コンテンツを構成する前記分割データを示す前記第１識別情報を含む複数の要求情報が前記キューから取り出される順序を、前記時刻情報が示す時刻が早い順に入れ替えることを特徴とする。
【００２１】
この発明によれば、分割データの取得をノード装置に待たせている数が多いコンテンツを構成する分割データが優先して取得されて保存される。よって、要求されることが多いコンテンツを構成する分割データを保存する保存ノード装置への要求の集中を早く解消することができる。
【００２２】
請求項６に記載の発明は、前記複数のノード装置に含まれる各前記ノード装置が、前記第１受信手段、前記第２取得手段、前記第２記憶手段、前記第１制御手段、前記入替手段及び前記第２制御手段を備えることを特徴とする。
【００２３】
この発明によれば、各ノード装置によって、コンテンツを要求した時刻が早いノード装置の順に、保存ノード装置から分割データが取得されるように制御される。よって、情報通信システム全体において、分割データを公開するまでに要する時間及びコンテンツ全体の取得に要する時間を短縮させることができる。
【００２４】
請求項７に記載の発明は、ネットワークに接続する複数のノード装置を備え、前記複数のノード装置に分散保存されるコンテンツが複数の分割データに分割されており、前記分割データを保存した前記ノード装置から他の前記ノード装置が前記分割データを取得する情報通信システムにおける少なくとも１つの前記ノード装置であって、要求された前記コンテンツを構成する前記分割データを識別する第１識別情報と、前記コンテンツを要求する前記ノード装置を識別する第２識別情報と、を含む要求情報を、他の前記ノード装置から受信する第１受信手段と、前記第１受信手段により受信された前記要求情報に含まれる前記第１識別情報に基づいて、要求された前記コンテンツを識別する第３識別情報を取得する第２取得手段と、前記第１受信手段により受信された前記要求情報に含まれる前記第２識別情報と、前記第２取得手段により取得された前記第３識別情報と、が対応付けて第２記憶手段に記憶されていない場合、前記要求情報に含まれる前記第２識別情報と、前記第２取得手段により取得された前記第３識別情報と、前記要求情報が受信された時刻を示す時刻情報と、を対応付けて前記第２記憶手段に記憶させ、前記第２識別情報と前記第３識別情報とが対応付けて記憶されている場合、前記時刻情報を前記第２記憶手段に記憶させない第１制御手段と、前記第１受信手段により受信された前記要求情報が格納されるキューとして、前記要求情報が受信された時刻が早い順に前記要求情報が取り出されるキューを記憶する第３記憶手段と、前記第３記憶手段に記憶された前記キューから前記要求情報が取り出される順序を、前記要求情報に含まれる前記第２識別情報と、前記要求情報に含まれる前記第１識別情報が示す前記分割データにより構成される前記コンテンツを示す前記第３識別情報と、に対応付けて前記第２記憶手段に記憶された前記時刻情報が示す時刻が早い順に入れ替える入替手段と、前記入替手段により入れ替えられた順に従って、前記第３記憶手段により記憶された前記キューから前記要求情報を取り出して、取り出した前記要求情報に含まれる前記第２識別情報が示す前記ノード装置へ、取り出した前記要求情報に含まれる前記第１識別情報が示す前記分割データをアップロードする処理を、順次行う第２制御手段と、を備えることを特徴とする。
【００２５】
請求項８に記載の発明は、ネットワークに接続する複数のノード装置を備え、前記複数のノード装置に分散保存されるコンテンツが複数の分割データに分割されており、前記分割データを保存した前記ノード装置から他の前記ノード装置が前記分割データを取得する情報通信システムにおける情報処理方法であって、前記ノード装置が、要求する前記コンテンツを構成する前記分割データを識別する第１識別情報と、前記コンテンツを要求する前記ノード装置を識別する第２識別情報と、を含む要求情報を、前記第１識別情報が示す前記分割データを保存するノード装置である保存ノード装置へ前記分割データ毎に送信する送信ステップと、前記ノード装置が、前記送信ステップにおいて送信された前記要求情報に含まれる前記第１識別情報が示す前記分割データを前記保存ノード装置から取得する取得ステップと、前記ノード装置が、前記取得ステップにおいて取得された前記分割データを記憶する第１記憶ステップと、前記ノード装置が、前記第１記憶ステップにおいて記憶された前記分割データが他の前記ノード装置によって取得されることを可能にする公開ステップと、少なくとも１つの前記保存ノード装置が、他の前記ノード装置から送信された前記要求情報を受信する第１受信ステップと、前記少なくとも１つの前記保存ノード装置が、前記第１受信ステップにおいて受信された前記要求情報に含まれる前記第１識別情報に基づいて、要求された前記コンテンツを識別する第３識別情報を取得する第２取得ステップと、前記少なくとも１つの前記保存ノード装置が、前記第１受信ステップにおいて受信された前記要求情報に含まれる前記第２識別情報と、前記第２取得ステップにおいて取得された前記第３識別情報と、が対応付けて第２記憶手段に記憶されていない場合、前記要求情報に含まれる前記第２識別情報と、前記第２取得ステップにおいて取得された前記第３識別情報と、前記要求情報が受信された時刻を示す時刻情報と、を対応付けて前記第２記憶手段に記憶させ、前記第２識別情報と前記第３識別情報とが対応付けて記憶されている場合、前記時刻情報を前記第２記憶手段に記憶させない第１制御ステップと、前記少なくとも１つの前記保存ノード装置が、前記第１受信ステップにおいて受信された前記要求情報が格納されるキューとして、前記要求情報が受信された時刻が早い順に前記要求情報が取り出されるキューを記憶する第３記憶手段に記憶された前記キューから前記要求情報が取り出される順序を、前記要求情報に含まれる前記第２識別情報と、前記要求情報に含まれる前記第１識別情報が示す前記分割データにより構成される前記コンテンツを示す前記第３識別情報と、に対応付けて前記第２記憶手段に記憶された前記時刻情報が示す時刻が早い順に入れ替える入替ステップと、前記少なくとも１つの前記保存ノード装置が、前記入替ステップにおいて入れ替えられた順に従って、前記第３記憶手段により記憶された前記キューから前記要求情報を取り出して、取り出した前記要求情報に含まれる前記第２識別情報が示す前記ノード装置へ、取り出した前記要求情報に含まれる前記第１識別情報が示す前記分割データをアップロードする処理を、順次行う第２制御ステップと、を含むことを特徴とする。
【００２６】
請求項９に記載の発明は、ネットワークに接続する複数のノード装置を備え、前記複数のノード装置に分散保存されるコンテンツが複数の分割データに分割されており、前記分割データを保存した前記ノード装置から他の前記ノード装置が前記分割データを取得する情報通信システムにおける少なくとも１つの前記ノード装置に含まれるコンピュータに、要求された前記コンテンツを構成する前記分割データを識別する第１識別情報と、前記コンテンツを要求する前記ノード装置を識別する第２識別情報と、を含む要求情報を、他の前記ノード装置から受信する第１受信ステップと、前記第１受信ステップにおいて受信された前記要求情報に含まれる前記第１識別情報に基づいて、要求された前記コンテンツを識別する第３識別情報を取得する第２取得ステップと、前記第１受信ステップにおいて受信された前記要求情報に含まれる前記第２識別情報と、前記第２取得ステップにおいて取得された前記第３識別情報と、が対応付けて第２記憶手段に記憶されていない場合、前記要求情報に含まれる前記第２識別情報と、前記第２取得ステップにおいて取得された前記第３識別情報と、前記要求情報が受信された時刻を示す時刻情報と、を対応付けて前記第２記憶手段に記憶させ、前記第２識別情報と前記第３識別情報とが対応付けて記憶されている場合、前記時刻情報を前記第２記憶手段に記憶させない第１制御ステップと、前記第１受信ステップにおいて受信された前記要求情報が格納されるキューとして、前記要求情報が受信された時刻が早い順に前記要求情報が取り出されるキューを記憶する第３記憶手段に記憶された前記キューから前記要求情報が取り出される順序を、前記要求情報に含まれる前記第２識別情報と、前記要求情報に含まれる前記第１識別情報が示す前記分割データにより構成される前記コンテンツを示す前記第３識別情報と、に対応付けて前記第２記憶手段に記憶された前記時刻情報が示す時刻が早い順に入れ替える入替ステップと、前記入替ステップにおいて入れ替えられた順に従って、前記第３記憶手段により記憶された前記キューから前記要求情報を取り出して、取り出した前記要求情報に含まれる前記第２識別情報が示す前記ノード装置へ、取り出した前記要求情報に含まれる前記第１識別情報が示す前記分割データをアップロードする処理を、順次行う第２制御ステップと、を実行させることを特徴とする。
【発明の効果】
【００２７】
本発明によれば、分割データの取得に要する時間が短くなるので、分割データを早く公開することができる。また、コンテンツの要求が早かったノード装置であるほど、コンテンツを構成する各分割データを先に取得することができる。よって、コンテンツ全体の取得に要する時間を短縮することができる。また、コンテンツの要求がコンテンツ単位で早かったノード装置の順に、保存ノード装置から分割データが取得されるように制御される。よって、ノード装置は、要求が早かったコンテンツであるほど、そのコンテンツ全体を早く取得することができる。
【図面の簡単な説明】
【００２８】
【図１】一実施形態におけるコンテンツ分散保存システムＳにおける各ノード装置の接続態様の一例を示す図である。
【図２】一実施形態におけるホルダノードにより、受信したチャンク要求メッセージに対するチャンクのアップロードが制御される様子の一例を示す図である。
【図３】一実施形態におけるホルダノードにより、受信したチャンク要求メッセージに対するチャンクのアップロードが制御される様子の一例を示す図である。
【図４】センターサーバＳＡの概要構成例を示す図である。
【図５】ノードＮｎの概要構成例を示す図である。
【図６】一実施形態におけるユーザノードの制御部２１のコンテンツ要求処理における処理例を示すフローチャートである。
【図７】一実施形態におけるホルダノードの制御部２１のチャンク要求受信処理における処理例を示すフローチャートである。
【図８】一実施形態におけるホルダノードの制御部２１のチャンク送信処理における処理例を示すフローチャートである。
【発明を実施するための形態】
【００２９】
以下、本発明の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ分散保存システムに本発明を適用した場合の実施形態である。
【００３０】
［１．コンテンツ分散保存システムの概要構成及び動作概要］
始めに、図１を参照して、本実施形態におけるコンテンツ分散保存システムの構成及び動作概要について説明する。図１は、本実施形態におけるコンテンツ分散保存システムＳにおける各ノード装置の接続態様の一例を示す図である。図１は、コンテンツ分散保存システムＳの具体的構成図１０１と、概念的構成図１００とから構成される。コンテンツ分散保存システムＳの具体的構成図１０１が示すように、コンテンツ分散保存システムＳは、多数のノード装置Ｎｎ（ｎ＝１，２，３・・・の何れか）から構成される。
【００３１】
図１の具体的構成図１０１内に示すように、コンテンツ分散保存システムＳは、複数のノード装置Ｎｎがインターネットを介して接続されることで構成される。また、図１の下部枠１０１内に示すように、ＩＸ（Internet eＸchange）３、ＩＳＰ（Internet Service Provider）４ａ，４ｂ、ＤＳＬ（Digital Subscriber Line）回線事業者の装置５ａ，５ｂ、ＦＴＴＨ（Fiber To The Home）回線事業者の装置６、及び通信回線７等によって、インターネット等のネットワーク８が構築されている。ネットワーク８は、現実世界の通信ネットワークである。なお、図１の例におけるネットワーク８には、データパケットを転送するためのルータが適宜挿入されているが、図１では図示を省略している。また、通信回線７としては、例えば、電話回線や光ケーブル等が用いられる。
【００３２】
このようなネットワーク８には、複数のノード装置Ｎｎ（ｎ＝１，２，３・・・の何れか）が接続されている。以下、ノード装置を、「ノード」という。また、各ノードＮｎには、固有の製造番号及びＩＰ（Internet Protocol）アドレスが割り当てられている。そして、本実施形態におけるコンテンツ分散保存システムＳは、これらのノードＮｎのうち、図１の概念的構成図１００内に示すように、何れか複数のノードＮｎの接続により形成されるピアツーピア方式のネットワークシステムとなっている。
【００３３】
なお、図１の概念的構成図１００内に示すネットワーク９は、既存のネットワーク８を用いて形成された仮想的なリンクを構成するオーバーレイネットワーク９である。論理的なネットワークであるオーバーレイネットワーク９は、特定のアルゴリズム、例えば、ＤＨＴを利用したアルゴリズムにより実現される。そして、コンテンツ分散保存システムＳに接続されている各ノードＮｎには、所定桁数からなる固有の識別情報であるノードＩＤが割り当てられている。
【００３４】
各ノードＮｎは、夫々、ＤＨＴ（Distributed Hash Table）を用いたルーティングテーブルを保持している。このルーティングテーブルは、コンテンツ分散保存システムＳ上における各種メッセージの転送先を規定している。具体的に、このルーティングテーブルには、ＩＤ空間内で適度に離れたノードＮｎのノードＩＤ、ＩＰアドレス及びポート番号を含むノード情報が複数登録されている。コンテンツ分散保存システムＳに接続している１台のノードは、必要最低限のノードＮｎのノード情報をルーティングテーブルとして記憶している。各ノードＮｎ間で互いに各種メッセージが転送されることで、ノード情報を記憶していないノードＮｎについてのノード情報が取得される。
【００３５】
コンテンツ分散保存システムＳにおいては、内容の異なる様々なコンテンツが複数のノードＮｎに分散して保存される。各コンテンツには、それぞれコンテンツ名及びコンテンツ毎に固有の識別情報であるコンテンツＩＤが付与されている。各コンテンツのコンテンツ名及びコンテンツＩＤ等の属性情報は、コンテンツカタログ情報に記述されている。コンテンツカタログ情報は、センターサーバＳＡにより作成されて、全てのノードＮｎに配信される。
【００３６】
また、各コンテンツは、複数のデータに分割されている。この分割されたデータを、「チャンク」という。各チャンクは、例えば、センターサーバＳＡにより、コンテンツを所定のデータサイズで分割することにより生成される。各チャンクは、複数のノードＮｎに分散されて保存される。これにより、元となるコンテンツが複数のノードＮｎに分散して保存されることになる。各チャンクのオリジナルは、センターサーバＳＡに保存されている。各チャンクには、それぞれシーケンス番号及びチャンクＩＤが付与されている。シーケンス番号は、例えば、分割された複数のチャンクを、元となるコンテンツを構成するように並べたときの並び順に相当する。チャンクＩＤは、チャンク毎に固有の識別情報である。なお、チャンクは、本発明における分割データの一例である。また、チャンクＩＤは、本発明における第１識別情報の一例である。また、ノードＩＤは、本発明における第２識別情報の一例である。また、コンテンツＩＤは、本発明における第３識別情報の一例である。また、センターサーバＳＡは、本発明における配信装置の一例である。
【００３７】
各ノードＮｎは、或るコンテンツのコンテンツＩＤを取得すると、そのコンテンツを構成する各チャンクのチャンクＩＤを、そのシーケンス番号と対応付けて取得することができる。コンテンツを構成する各チャンクのチャンクＩＤは、例えば、コンテンツカタログ情報において、元となるコンテンツの属性情報中に、シーケンス番号と対応付けて記述されていても良い。
【００３８】
チャンクを保存しているノードＮｎを、「ホルダノード」という。また、チャンクの所在は、インデックス情報として、チャンクの所在を管理（記憶）しているノードＮｎにより記憶される。以下、チャンクの所在を管理しているノードＮｎを、「ルートノード」という。インデックス情報は、チャンクを保存したノードＮｎのノード情報と、チャンクのチャンクＩＤと等の組を含む。このようなルートノードは、例えば、チャンクＩＤと最も近いノードＩＤを有するノードＮｎであるように定められる。チャンクＩＤと最も近いノードＩＤとは、例えば、ＩＤの上位桁が最も多く一致するノードＩＤである。なお、ホルダノードは、本発明における保存ノード装置の一例である。
【００３９】
或るノードＮｎのユーザが、所望のコンテンツを取得したい場合、ノードＮｎは、所望されたコンテンツを構成する各チャンクを保存するホルダノードをそれぞれ検索する。以下、ユーザによりチャンクの取得を望むノードＮｎを、「ユーザノード」という。具体的に、ユーザノードは、検索メッセージを送信する。この検索メッセージは、取得を望むチャンクのチャンクＩＤ及びユーザノードのノードＩＤを含む。この検索メッセージが、ユーザノードが記憶するＤＨＴのルーティングテーブルに従って、他のノードＮｎに対して送信される。つまり、ユーザノードは、検索メッセージを、ルートノードに向けて送信する。これにより、検索メッセージは、チャンクＩＤをキーとするＤＨＴルーティングによって最終的にルートノードに到着することになる。なお、ＤＨＴルーティングについては、特開２００６−１９７４００号公報等で公知であるので、詳しい説明を省略する。
【００４０】
検索メッセージを受信したルートノードは、これに含まれるチャンクＩＤに対応するインデックス情報をインデックス情報キャッシュから１または複数取得する。取得されたインデックス情報は、検索メッセージの送信元であるユーザノードに対して返信される。こうしてインデックス情報を取得したユーザノードは、インデックス情報に基づいてチャンクを取得（ダウンロード）する。具体的に、ユーザノードは、インデックス情報に含まれるホルダノードのＩＰアドレス及びポート番号等に基づいて、チャンク要求メッセージをホルダノードに送信する。チャンク要求メッセージには、ユーザノードのノード情報、所望するコンテンツのコンテンツＩＤ及び取得を望むチャンクのチャンクＩＤが含まれている。なお、チャンク要求メッセージに含まれるノード情報中のノードＩＤ、コンテンツＩＤ及びチャンクＩＤは、本発明における要求情報の一例である。
【００４１】
チャンク要求メッセージを受信したホルダノードは、チャンク要求メッセージに含まれるチャンクＩＤに対応するチャンクをユーザノードに送信（アップロード）する。一方、所望するチャンクを保存するホルダノードが存在しないとき、ユーザノードは、ホルダノードのインデックス情報を取得することができない。この場合、ユーザノードは、センターサーバＳＡからチャンクを取得する。なお、ホルダノードがチャンク要求メッセージを受信したときのチャンクのアップロードの制御内容の詳細については後述する。
【００４２】
ユーザノードは、ホルダノードからチャンクを取得して保存したとき、チャンクを公開する。チャンクの公開とは、ユーザノードがホルダノードとしてチャンクを保存したことをルートノードへ知らせることをいう。チャンクの公開により、公開したホルダノードから、公開されたチャンクを他のノードＮｎが取得可能になる。具体的に、チャンクを保存したユーザノードは、パブリッシュメッセージを送信する。パブリッシュメッセージは、チャンクのチャンクＩＤ及びチャンクを保存したユーザノードのノード情報を含む。パブリッシュメッセージは、ルートノードに向けて送出される。これにより、パブリッシュメッセージは、検索メッセージと同じように、チャンクＩＤをキーとするＤＨＴルーティングによってルートノードに到着することになる。ルートノードは、受信したパブリッシュメッセージに含まれるノード情報及びチャンクＩＤの組を含むインデックス情報をインデックス情報キャッシュに記憶する。こうして、上記ユーザノードは、新たに、上記チャンクを保存するホルダノードとなる。
【００４３】
［２．チャンクのアップロードの制御］
ホルダノードが、チャンク要求メッセージを受信する都度、即時にチャンクをユーザノードにアップロードするものと仮定する。この場合、ホルダノードが、複数のユーザノードから同時期にチャンク要求メッセージを受信すると、複数のユーザノードに対して同時並行してチャンクをアップロードしなければならなくなる。このとき、ホルダノードの負荷が高くなると、各ユーザノードに対するチャンクの転送速度が遅くなる。また、ホルダノードがネットワーク８に接続するための通信回線の帯域幅が狭いと、各ユーザノードに対してアップロードするための帯域が十分に確保することができない。この場合も、各ユーザノードに対するチャンクの転送速度が遅くなる。そこで、各ホルダノードは、所定のキューとテーブルを用いて、ユーザノードによるチャンクの取得を制御する。ユーザノードのチャンクの取得の制御は、ホルダノードがユーザノードに対するチャンクのアップロードを制御することによって行われる。この制御に用いられるキューを、「リクエストキュー」という。また、この制御に用いられるテーブルを、「リクエスト管理テーブル」という。リクエストキュー及びリクエスト管理テーブルは、各ノードＮｎにより保持される。
【００４４】
リクエストキューは、受信されたチャンク要求メッセージが格納される。そして、格納されたチャンク要求メッセージが、優先順位が付けられて取り出される。具体的に、リクエストキューには、チャンク要求メッセージに含まれるノード情報と、コンテンツＩＤとチャンクＩＤとが夫々対応付けて格納される。リクエストキューは、コンテンツのリクエスト時刻の早い順にチャンク要求メッセージが取り出されるようになっている。リクエスト時刻の管理のため、リクエスト管理テーブルには、コンテンツを要求したノードのノードＩＤと、要求されたコンテンツのコンテンツＩＤと、リクエスト時刻とが対応付けて登録される。ユーザノードは、コンテンツを取得するため、このコンテンツを構成するチャンク毎にチャンク要求メッセージを受信する。そのため、ホルダノードは、チャンクＩＤは異なるが、ノードＩＤとコンテンツＩＤとの組み合わせが同一であるチャンク要求メッセージを複数受信する場合がある。リクエスト時刻は、リクエスト管理テーブルに登録されていないノードＩＤとコンテンツＩＤとの組み合わせを含むチャンク要求メッセージが受信された時刻である。なお、リクエスト時刻は、本発明における時刻情報の一例である。ホルダノードは、チャンク要求メッセージを受信すると、チャンク要求メッセージに含まれるノード情報中のノードＩＤとコンテンツＩＤとの組み合わせがリクエスト管理テーブルに既に登録されているか否かを判定する。そして、ホルダノードは、ノードＩＤとコンテンツＩＤとの組み合わせが登録されていない場合に、この組み合わせをリクエスト管理テーブルに登録する。また、ホルダノードは、現在時刻をリクエスト時刻として登録する。また、ホルダノードは、チャンク要求メッセージを受信すると、リクエスト管理テーブルに登録された情報に基づいて、チャンク要求メッセージが取り出される順番を決定する。そして、ホルダノードは、決定した順番でチャンク要求メッセージが取り出されるように、受信したチャンク要求メッセージをリクエストキューに格納する。なお、ホルダノードは、例えば、リクエスト時刻から所定時間が経過すると、リクエスト管理テーブルから、登録したノードＩＤ、コンテンツＩＤ及びリクエスト時刻を削除する。
【００４５】
一方、ホルダノードは、リクエストキューからチャンク要求メッセージを取り出して、ユーザノードによるチャンクの取得を許可する。具体的に、ホルダノードは、取り出したチャンク要求メッセージに含まれるチャンクＩＤに対応するチャンクを取得する。そして、ホルダノードは、取り出したチャンク要求メッセージに含まれるノード情報中のノードＩＤに対応するユーザノードに、取得したチャンクをアップロードする。そして、ホルダノードは、アップロードが完了すると、リクエストキューから次のチャンク要求メッセージを取り出して、アップロードを行う。つまり、ホルダノードは、ユーザノードによるチャンクの取得を順次許可する。換言すると、ホルダノードは、リクエストキューからチャンク要求メッセージを取り出す順番が来るまで、そのチャンク要求メッセージを送信したユーザノードによるチャンクの取得を待たせる。これにより、同時並行してアップロードが行われる数が制限される。従って、ホルダノードの負荷が低くなる。また、各ユーザノードに対してアップロードするときの帯域を広く確保することができる。これにより、転送速度が速くなる。そして、コンテンツのリクエスト時刻が早いユーザノードであるほど、早くチャンクを取得することができる。
【００４６】
以下に具体例を説明する。図２及び図３は、本実施形態におけるホルダノードにより、受信したチャンク要求メッセージに対するチャンクのアップロードが制御される様子の一例を示す図である。図２及び図３が示す具体例の前提として、コンテンツＸ、Ｙ及びＺが存在するものとする。コンテンツＸは、チャンクＸＡ及びＸＢにより構成されている。またコンテンツＹは、チャンクＹＡ及びＹＢにより構成されている。コンテンツＺは、チャンクＺＡ及びＺＢにより構成されている。ノードＮ１０は、チャンクＸＡ、ＸＢ、ＹＡ、ＹＢ、ＺＡ及びＺＢを保存している。つまり、ノードＮ１０は、これらのチャンクのホルダノードである。また、ノードＮ１０が保持するリクエストキュー及びリクエスト管理テーブルには、まだ何らの情報も登録されていない。
【００４７】
先ず、ノードＮ１が、ユーザノードとしてノードＮ１０にチャンクＸＡを要求したとする（図２（１））。つまり、ノードＮ１は、ノードＮ１のノードＩＤ、コンテンツＸのコンテンツＩＤ及びチャンクＸＡのチャンクＩＤを含むチャンク要求メッセージを、ノードＮ１０に送信する。チャンク要求メッセージを受信したノードＮ１０は、チャンク要求メッセージに含まれるノードＮ１のノードＩＤ、コンテンツＸのコンテンツＩＤ及び現在時刻をリクエスト管理テーブルに登録する（図２（２））。また、ノードＮ１０は、チャンク要求メッセージをリクエストキューに格納する（図２（３））。
【００４８】
ノードＮ１からのチャンク要求メッセージは、１番目に取り出されるように、リクエストキューに格納される。従って、ノードＮ１０は、リクエストキューからノードＮ１からのチャンク要求メッセージを取り出す。そして、ノードＮ１０は、取り出したチャンク要求メッセージに基づいて、ノードＮ１に対するチャンクＸＡのアップロードを開始する（図２（４））。ノードＮ１０がノードＮ１に対するアップロードを行っている間に、ノードＮ２、Ｎ３及びＮ４の順に、各ノードＮｎがノードＮ１０にチャンク要求メッセージを送信したとする（図２（５））。例えば、ノードＮ２が送信したチャンク要求メッセージには、コンテンツＹのコンテンツＩＤ及びチャンクＹＡのチャンクＩＤが含まれている。また、ノードＮ３が送信したチャンク要求メッセージには、コンテンツＺのコンテンツＩＤ及びチャンクＺＡのチャンクＩＤが含まれている。また、ノードＮ４が送信したチャンク要求メッセージには、コンテンツＸのコンテンツＩＤ及びチャンクＸＡのチャンクＩＤが含まれている。ノードＮ１０は、チャンク要求メッセージを受信する度に、それぞれのチャンク要求メッセージに含まれるノードＩＤ及びコンテンツＩＤと、そのときの現在時刻とを、リクエスト管理テーブルに登録する（図２（６））。リクエスト管理テーブルに登録されたリクエスト時刻は、ノードＮ１、Ｎ２、Ｎ３、Ｎ４の順に早くなっている。従って、ノードＮ１０は、ノードＮ２〜Ｎ４からのチャンク要求メッセージを、受信した順番で取り出されるように、順次リクエストキューに格納する（図２（７））。
【００４９】
ノードＮ１へのアップロードが完了すると、ノードＮ１０は、リクエストキューから、ノードＮ２からのチャンク要求メッセージを取り出す。そして、ノードＮ１０は、ノードＮ２に対するチャンクＹＡのアップロードを開始する（図３（８））。ノードＮ１０がノードＮ２に対するアップロードを行っている間に、ノードＮ１がノードＮ１０にチャンク要求メッセージを送信したとする（図３（９））。このチャンク要求メッセージには、コンテンツＸのコンテンツＩＤ及びチャンクＸＢのチャンクＩＤが含まれている。このチャンク要求メッセージに含まれているノードＩＤとコンテンツＩＤとの組み合わせは、リクエスト管理テーブルに既に登録されている。従って、チャンク要求メッセージを受信したノードＮ１０は、リクエスト管理テーブルへの登録を行わない。次いで、ノードＮ１０は、リクエストキューに対するチャンク要求メッセージの格納を行う。この時点でリクエストキューには、ノードＮ３がコンテンツＺのチャンクＺＡを要求するチャンク要求メッセージと、ノードＮ４がコンテンツＸのチャンクＸＡを要求するチャンク要求メッセージとが格納されている。そして、リクエスト管理テーブルにおいては、ノードＮ１のコンテンツＸのリクエスト時刻の方が、ノードＮ３のコンテンツＺのリクエスト時刻及びノードＮ４のコンテンツＸのリクエスト時刻よりも早い。従って、ノードＮ１０は、ノードＮ３及びＮ４のチャンク要求メッセージの順番を追い越して、ノードＮ１のチャンク要求メッセージが１番目となるように、リクエストキューに格納する（図３（１０））。
【００５０】
その後、ノードＮ２へのアップロードが完了すると、ノードＮ１０は、リクエストキューから、ノードＮ１からのチャンク要求メッセージを取り出す。そして、ノードＮ１０は、ノードＮ１に対するチャンクＸＢのアップロードを開始する（図３（１１））。
【００５１】
また、ホルダノードは、待機ノード数が多いコンテンツを構成するチャンクを要求しているユーザノードを優先して、チャンクをアップロードする。待機ノード数とは、チャンクの取得を待たせているユーザノードの数である。待機ノード数は、コンテンツ毎に計算される。例えば、図２及び図３に示す例において、ノードＮ１０が、リクエストキューからノードＮ１のチャンク要求メッセージを取り出す前に、ノードＮ２〜Ｎ４からチャンク要求メッセージを受信したとする（図２（５））。この場合、コンテンツＸ、Ｙ、Ｚの待機ノード数は、２、１、１である。つまり、コンテンツＸの待機ノード数が、コンテンツＹ及びＺそれぞれの待機ノード数よりも多い。この場合、ノードＮ１０は、ノードＮ４からのチャンク要求メッセージが取り出される順番が、ノードＮ２及びＮ３からのチャンク要求メッセージよりも早く取り出されるように、メッセージキューへの格納を行う。なお、ノードＮ１とノードＮ４との間では、コンテンツが同一であり、待機ノード数が同一である。また、ノードＮ１のリクエスト時刻の方が、ノードＮ４のリクエスト時刻よりも早い。従って、この場合、ノードＮ１からのチャンク要求メッセージの方が優先される。以上の結果、チャンク要求メッセージは、ノードＮ１、Ｎ４、Ｎ２、Ｎ３の順で取り出されることになる。このようにすると、待機ノード数が多いコンテンツを構成するチャンクを保存するホルダノードが早く増加する。従って、例えば、人気が高いコンテンツを構成するチャンクの要求がホルダノードに集中することが、早い段階で解消される。
【００５２】
なお、ノードＮｎのみならず、サーバＳＡにおいても、リクエストキュー及びリクエスト管理テーブルを保持し、上述したホルダノードと同様の処理を行うようにしても良い。また、各ホルダノードは、複数のアップロードを同時並行して行っても良い。チャンクをアップロードするときの転送速度が、システム上必要とされる速度以上となる限りにおいては、複数のアップロードが同時並行して行われても良いのである。この場合、例えば、同時並行してアップロードを行うことができる最大数が、ノードＮｎ毎に予め設定される。またこの場合、ホルダノードは、例えば、複数のスレッドを生成し、各スレッドで、リクエストキューからのチャンク要求メッセージの取り出しと、チャンクのアップロードを行う。
【００５３】
上述したチャンクのアップロードの制御は、計画的にコンテンツを配信する場合にも効果がある。計画的なコンテンツの配信とは、例えば、予め計画された時期に、コンテンツ分散保存システムＳに参加する全てのノードＮｎまたは一部の複数のノードＮｎに対して、特定のコンテンツを配信することをいう。例えば、チャンクＸＡ、ＸＢ、ＸＣ・・・により構成されるコンテンツＸを計画的に配信するとする。各チャンクは、当初はセンターサーバＳＡが保存している。そして、コンテンツＸの配信開始時期が到来すると、例えばノードＮ１及びＮ２が、センターサーバＳＡからチャンクＸＡの取得を開始する。そして、ノードＮ１及びＮ２は、チャンクＸＡ、ＸＢ、ＸＣ・・・と、順次チャンクを取得する。なお、１番目にチャンクの取得を開始するノードＮ１及びＮ２を、グループ１とする。グループ１によるチャンクＸＡの取得の開始から所定時間経過後、例えばノードＮ３〜Ｎ６が、グループ１からチャンクＸＡの取得を開始し、チャンクＸＡ、ＸＢ、ＸＣ・・・と、順次チャンクを取得する。なお、２番目にチャンクの取得を開始するノードＮ３〜Ｎ６を、グループ２とする。このようにして、例えば、チャンクを取得するノードＮｎの数を順次増やしていき、最終的に、配信の対象となる全てのノードＮｎが、コンテンツＸ全体の取得を完了させる。
【００５４】
ここで、各ホルダノードが、リクエストキュー及びリクエスト管理テーブルを用いず、チャンク要求メッセージを受信する都度アップロードを行っていると、チャンク取得の追いつき現象が発生する。チャンク取得の追いつき現象とは、チャンクを取得する順番が遅いグループが、チャンクを取得する順番が早いグループと同じチャンクを取得することである。例えば、チャンクを取得する順番が遅いグループほど、グループに属するノードＮｎの数を多くすると、チャンクをアップロードするときの負荷分散の効果が高くなる。つまり、特定のノードＮｎに負荷が集中しにくい。ユーザノードは、取得するチャンクのホルダノードが複数存在する場合、取得先のホルダノードを、例えば、ランダムに選択する。上記例のグループ１は、２つのノードＮｎが属している。例えば、グループ２に属するノードＮ３及びＮ４がノードＮ１をホルダノードとして選択し、ノードＮ５及びＮ６がノードＮ２をホルダノードとして選択したとする。この場合は、ノードＮ１とＮ２とでアップロードの処理負荷は同じである。一方、ノードＮ３〜Ｎ６がノードＮ１をホルダノードとして選択したとする。すると、ノードＮ１によるアップロードの処理負荷が高くなる。アップロードの処理負荷が高くなると、チャンクの転送速度が遅くなる。この場合、グループ２に属する全てのノードによるチャンクの取得完了が遅くなる。グループに属するノードＮｎの数を多くしていくと、そのグループよりもチャンクを取得する順番が遅いグループに属するノードＮｎから、ホルダノードとして選択されるノードＮｎが分散されやすくなる。そうすると、チャンクを取得する順番が遅いグループほど、チャンクをアップロードするときの転送速度が速くなる傾向にある。或るグループに属するノードＮｎがチャンクをアップロードするときの転送速度は、そのグループよりもチャンクを取得する順番が1つ遅いグループに属するノードＮｎがチャンクをダウンロードするときの転送速度となる。従って、チャンクを取得する順番が遅いグループほど、チャンクを１つ取得するのに要する時間が短くなる傾向がある。そのため、チャンクの取得の追いつき現象が発生する。
【００５５】
例えば、グループ１がセンターサーバＳＡからのチャンクＸＣの取得を完了する前に、グループ２がチャンクＸＢの取得を完了したとする。グループ１によってチャンクＸＣはまだ公開されていないので、グループ２は、グループ１からチャンクＸＣを取得することができない。そこで、グループ２は、グループ１よりも前のグループからチャンクを取得する。ただし、この時点では、センターサーバＳＡのみがチャンクＸＣを保存している。そのため、グループ２は、センターサーバＳＡからチャンクＸＣを取得する。そうすると、センターサーバＳＡは、グループ１とグループ２に対して同時にチャンクをアップロードしなければならない。従って、センターサーバＳＡによるチャンクの転送速度が遅くなる。これにより、グループ１によるチャンクの取得の遅延が増長される。また、グループ２によるチャンクの取得も遅延する。こうした遅延が、各グループにおいて発生する。そして、配信対象となる全てのノードＮｎによるコンテンツＸ全体の取得の完了が、計画よりも遅延する。
【００５６】
これに対し、コンテンツ分散保存システムＳにおいては、各ホルダノードが、リクエストキュー及びリクエスト管理テーブルを用いて、チャンクのアップロードを制御する。ここで、各ノードＮｎにおいて同時並行してアップロードを行うことができる最大数を、例えば２とする。すると、各ホルダノードは、同時並行してアップロードを行う数が２以下となるように、アップロードを制御する。そして、各ホルダノードは、コンテンツＸのリクエスト時刻が早いノードＮｎほど、優先してアップロードを行う。上記の例においては、チャンクの取得の順番が早いグループほど、リクエスト時刻が早ことになる。従って、チャンクの取得の順番が早いグループは、チャンクの取得の順番が遅いグループが要求してくるチャンクを、先に取得することができる。よって、チャンク取得の追いつき現象の発生が抑止される。その結果、コンテンツの計画的な配信が円滑に行われる。
【００５７】
［３．各装置の構成及び機能］
次に、図４及び図５を参照して、各装置の構成及び機能について説明する。図４は、センターサーバＳＡの概要構成例を示す図である。また、図５は、ノードＮｎの概要構成例を示す図である。
【００５８】
［３．１  センターサーバＳＡの構成］
センターサーバＳＡは、図３に示すように、演算機能を有するＣＰＵ，作業用ＲＡＭ，各種データ及びプログラムを記憶するＲＯＭ等から構成された制御部１１を備えている。また、センターサーバＳＡは、各種データ及び各種プログラム等を記憶保存するためのＨＤ（ハードディスク）等から構成された記憶部１２を備えている。更に、センターサーバＳＡは、ネットワーク８等を通じてノードＮｎとの間の情報の通信制御を行うための通信部１３を備えている。また更に、センターサーバＳＡは、各種情報を表示するＣＲＴ，液晶ディスプレイ等の表示部１４を備えている。更にまた、センターサーバＳＡは、オペレータからの指示を受け付けこの指示に応じた指示信号を制御部１１に対して与える入力部１５（例えば、キーボード、マウス等）を備えている。そして、制御部１１、記憶部１２、通信部１３、表示部１４、及び入力部１５はバス１６を介して相互に接続されている。
【００５９】
記憶部１２は、本発明の第４記憶手段の一例を構成する。この記憶部１２には、各ノードＮｎのノードＩＤ、ＩＰアドレス及びポート番号等が記憶されている。また、記憶部１２には、配信の対象である各チャンクが、チャンクＩＤに対応付けて記憶されている。また、記憶部１２には、リクエストキュー及びリクエスト管理テーブルが記憶されている。更に、記憶部１２には、オペレーティングシステム、制御プログラム等の各種プログラムが記憶されている。制御部１１は、ＣＰＵが記憶部１２等に記憶されたプログラムを読み出して実行することにより、第２受信手段及びアップロード手段として機能する。
【００６０】
［３．２  ノードＮｎの構成］
各ノードＮｎは、図５に示すように、演算機能を有するＣＰＵ，作業用ＲＡＭ，各種データ及びプログラムを記憶するＲＯＭ等から構成されたコンピュータとしての制御部２１を備えている。また、各ノードＮｎは、各種データ及び各種プログラム等を記憶保存するためのＨＤ（ハードディスク）等から構成された記憶部２２と、受信されたコンテンツのレプリカ等を一時蓄積するバッファメモリ２３とを備えている。更に、各ノードＮｎは、コンテンツのレプリカに含まれるエンコードされたビデオデータ（映像情報）及びオーディオデータ（音声情報）等をデコードするデコーダ部２４を備えている。また更に、各ノードＮｎは、このデコードされたビデオデータ等に対して所定の描画処理を施しビデオ信号として出力する映像処理部２５と、この映像処理部２５から出力されたビデオ信号に基づき映像表示するＣＲＴ，液晶ディスプレイ等の表示部２６と、を備えている。更にまた、各ノードＮｎは、上記デコードされたオーディオデータをアナログオーディオ信号にＤ （Digital）／Ａ（Analog）変換した後これをアンプにより増幅して出力する音声処理部２７と、この音声処理部２７から出力されたオーディオ信号を音波として出力するスピーカ２８と、を備えている。また更に、各ノードＮｎは、ネットワーク８を通じて他のノードＮｎ等間の情報の通信制御を行うための通信部２９を備えている。更にまた、各ノードＮｎは、ユーザからの指示を受け付けこの指示に応じた指示信号を制御部２１に対して与える入力部３０（例えば、キーボード、マウス、或いは、リモコンや操作パネル等）を備えている。そして、制御部２１、記憶部２２、バッファメモリ２３、デコーダ部２４、通信部２９、及び入力部３０はバス３１を介して相互に接続されている。
【００６１】
記憶部２２は、本発明における第１記憶手段、第２記憶手段、及び第３記憶手段の一例を構成する。この記憶部２２には、ＤＨＴを用いたルーティングテーブル、インデックス情報、及びセンターサーバＳＡのアドレス情報等が記憶されている。また、記憶部２２には、ダウンロードされたチャンクが、チャンクＩＤに対応付けて記憶されている。また、記憶部２２には、リクエストキュー及びリクエスト管理テーブルが記憶されている。更に、記憶部２２には、オペレーティングシステム、及び各種プログラム（本発明の情報処理プログラムを含む）が記憶されている。なお、各種プログラムは、例えば、センターサーバＳＡ等からダウンロードされるようにしても良い。また、各種プログラムは、例えば、ＤＶＤ（Digital Versatile Disc）等の記録媒体に記録されて当該記録媒体からドライブを介して読み込まれるようにしても良い。
【００６２】
制御部２１は、ＣＰＵが記憶部２２等に記憶されたプログラムを読み出して実行することにより、送信手段、第１取得手段、公開手段、第１受信手段、制御手段、第２取得手段、及び検索手段として機能する。
【００６３】
［４．コンテンツ分散保存システムの動作］
次に、図６乃至図８を参照して、本実施形態におけるコンテンツ分散保存システムＳの動作について説明する。図６は、本実施形態におけるユーザノードの制御部２１のコンテンツ要求処理における処理例を示すフローチャートである。コンテンツ要求処理は、例えば、ユーザが入力部３０を操作して所望のコンテンツを指定し、指定されたコンテンツのコンテンツＩＤを制御部２１が取得したときに開始される。なお、ユーザが所望したコンテンツを、コンテンツＣとする。また、コンテンツＣを構成する各チャンクをチャンクＣｉ（ｉ＝１，２，３・・・Ｎの何れか）とする。ここで、ｉは、シーケンス番号である。また、Ｎは、コンテンツＣを構成するチャンクの総数である。
【００６４】
先ず、制御部２１は、取得したコンテンツＩＤに対応するコンテンツを構成する各チャンクのシーケンス番号及びチャンクＩＤを、コンテンツＩＤに基づいて取得する（ステップＳ１）。また、制御部２１は、取得したチャンクＩＤの数を計算することにより、チャンクの総数Ｎを算出する。次いで、制御部２１は、シーケンス番号ｉに１を設定する（ステップＳ２）。次いで、制御部２１は、シーケンス番号ｉが総数Ｎ以下であるか否かを判定する（ステップＳ３）。このとき、制御部２１は、シーケンス番号ｉが総数Ｎ以下である場合には（ステップＳ３：ＹＥＳ）、チャンクＣｉのインデックス情報が作業用ＲＡＭに保持されているか否かを判定する（ステップＳ４）。このとき、制御部２１は、チャンクＣｉのインデックス情報が作業用ＲＡＭに保持されている場合には（ステップＳ４：ＹＥＳ）、ステップＳ５に移行する。一方、制御部２１は、チャンクＣｉのインデックス情報が作業用ＲＡＭに保持されていない場合には（ステップＳ４：ＮＯ）、ステップＳ６に移行する。ステップＳ５において、制御部２１は、前回チャンクＣｉのホルダノードを検索してから一定時間が経過したか否かを判定する。このとき、制御部２１は、前回チャンクＣｉのホルダノードを検索してから一定時間が経過した場合には（ステップＳ５：ＹＥＳ）、作業用ＲＡＭからインデックス情報を削除して、ステップＳ６に移行する。一方、制御部２１は、一定時間が経過していない場合には（ステップＳ５：ＮＯ）、ステップＳ９に移行する。なお、ステップＳ４及びＳ５の判定処理が存在する理由については後述する。
【００６５】
ステップＳ６において、制御部２１は、チャンクＣｉのホルダノードを検索する。具体的に、制御部２１は、チャンクＣｉのチャンクＩＤを含む検索メッセージを、ルートノードに向けて送信する。次いで、制御部２１は、検索メッセージを送信してから一定時間内に、ルートノードからインデックス情報を受信したか否かを判定する（ステップＳ７）。このとき、制御部２１は、一定時間内にインデックス情報を受信した場合には（ステップＳ７：ＹＥＳ）、インデックス情報を作業用ＲＡＭに保持して（ステップＳ８）、ステップＳ９に移行する。一方、制御部２１は、一定時間が経過してもインデックス情報を受信しなかった場合には（ステップＳ７：ＮＯ）、ステップＳ１０に移行する。
【００６６】
ステップＳ９において、制御部２１は、ホルダノードにチャンクＣｉを要求する。具体的に、制御部２１は、作業用ＲＡＭに保持されているインデックス情報のうち任意のインデックス情報を選択する。次いで、制御部２１は、選択したインデックス情報に含まれるノード情報が示すホルダノードに、チャンク要求メッセージを送信する。このとき、制御部２１は、送信するチャンク要求メッセージに、ユーザノード自身のノード情報、コンテンツＣのコンテンツＩＤ及びチャンクＣｉのチャンクＩＤを設定する。制御部２１は、ステップＳ９の処理を終えると、ステップＳ１２に移行する。
【００６７】
一方、ステップＳ１０において、制御部２１は、センターサーバＳＡにチャンクＣｉを要求する。具体的に、制御部２１は、センターサーバＳＡにチャンク要求メッセージを送信する。このとき、制御部２１は、送信するチャンク要求メッセージに、ユーザノード自身のノード情報、コンテンツＣのコンテンツＩＤ及びチャンクＣｉのチャンクＩＤを設定する。次いで、制御部２１は、チャンクＣｉの受信を待っている間、チャンクＣｉのホルダノードの検索を、所定時間間隔で定期的に実行する（ステップＳ１１）。このときの検索の処理自体は、ステップＳ６〜Ｓ８の処理と同様である。制御部２１は、チャンクＣｉを受信した場合、または、チャンク要求メッセージを送信してから一定時間が経過すると、定期的な検索を終了させて、ステップＳ１２に移行する。
【００６８】
ユーザノードは、チャンクＣｉを保存するチャンク保存ノードが存在しない場合には、センターサーバＳＡにチャンク要求メッセージを送信する。そのため、センターサーバＳＡは、ノードＮｎと比べて、ユーザノードからの要求が集中しやすい。要求が集中すると、センターサーバＳＡによるチャンクのアップロードが遅くなり、センターサーバＳＡからのチャンクの取得に失敗する場合がある。ユーザノードがチャンクＣｉの受信を待っている間に、チャンクＣｉをセンターサーバＳＡが他のユーザノードにアップロードしている場合がある。そうすると、チャンクＣｉを保存するホルダノードが増加する。この場合には、センターサーバＳＡからのチャンクＣｉの取得に失敗したときに、ホルダノードからチャンクＣｉを取得することができる。そして、ユーザノードは、ホルダノードを事前に検索することができていれば、チャンクＣｉの取得に失敗した後に検索を行う必要がない。そこで、制御部２１は、定期的に検索を実行する。なお、制御部２１が、定期的な検索の実行によってホルダノードを検索した時点で、このホルダノードにチャンク要求メッセージを送信すると良い。そうすることにより、このままセンターサーバＳＡからのチャンクＣｉの受信を待つだけよりも、チャンクＣｉを早く取得することができる可能性が生じてくる。そして、ユーザノードがチャンクＣｉを早く取得することにより、ホルダノードが早く増加する。すると、センターサーバＳＡに対する要求の集中を早く解消することができる。
【００６９】
ステップＳ１２において、制御部２１は、ホルダノードまたはセンターサーバＳＡにチャンク要求メッセージを送信してから一定時間内にチャンクＣｉを受信したか否かを判定する。このとき、制御部２１は、一定時間内にチャンクＣｉを受信した場合には（ステップＳ１２：ＹＥＳ）、受信したチャンクＣｉを記憶部２２に記憶する。そして、制御部２１は、パブリッシュメッセージをルートノードに向けて送信する（ステップＳ１３）。これにより、チャンクＣｉが公開される。次いで、制御部２１は、シーケンス番号ｉに１を加算して（ステップＳ１４）、ステップＳ３に移行する。
【００７０】
一方、制御部２１は、一定時間が経過してもチャンクＣｉを受信しなかった場合には（ステップＳ１２：ＮＯ）、チャンク要求メッセージを送信したときに選択したインデックス情報を、作業量ＲＡＭから削除する（ステップＳ１５）。つまり、制御部２１は、チャンクＣｉの取得に失敗したホルダノードのインデックス情報を削除する。制御部２１は、ステップＳ１５の処理を終えると、ステップＳ４に移行する。なお、制御部２１は、センターサーバＳＡにチャンク要求メッセージを送信した場合には、ステップＳ１５の処理を実行しないで、ステップＳ４に移行する。
【００７１】
ここで、ステップＳ４及びＳ５の判定処理が存在する理由を説明する。ステップＳ６における検索により、ユーザノードは、複数のホルダノードのインデックス情報を取得することができる場合がある。ユーザノードは、ホルダノードからのチャンクの取得が失敗した場合、別のホルダノードからチャンクの取得を試みる。このとき、別のホルダノードのインデックス情報が作業用ＲＡＭに保持されているので、ユーザノードは、再度の検索を行う必要がない。ステップＳ４の判定は、このような場合を判定するために存在する。一方で、チャンクの取得が何度も失敗するような場合は、この後別のホルダノードに要求しても、チャンクの取得に失敗する可能性がある。この場合、今までに検索されたホルダノードとは異なるホルダノードからチャンクの取得を試みた方が良い場合がある。そのため、ユーザノードは、ホルダノードの検索を再度行う。このとき、前回の検索から或る程度の時間を置いた上で再度検索した方が、前回検索されたホルダノードとは異なるホルダノードが検索される可能性が高くなる。ステップＳ５の判定は、再度検索を行うまでに一定の時間を置くために存在する。
【００７２】
制御部２１は、ステップＳ３〜Ｓ１５の処理を繰り返すことにより、チャンクＣ１〜ＣＮを取得する。すると、ステップＳ３において、制御部２１は、シーケンス番号ｉは総数Ｎ以下ではないと判定し（ステップＳ３：ＮＯ）、コンテンツ要求処理を終了させる。
【００７３】
図７は、本実施形態におけるホルダノードの制御部２１のチャンク要求受信処理における処理例を示すフローチャートである。チャンク要求受信処理は、ホルダノードがユーザノードからチャンク要求メッセージを受信したときに開始される。
【００７４】
先ず、制御部２１は、受信したチャンク要求メッセージに含まれるノードＩＤとコンテンツＩＤとの組をキーとし、これと同じ組を含む情報を、リクエスト管理テーブルから検索する（ステップＳ２１）。次いで、制御部２１は、チャンク要求メッセージに含まれるノードＩＤとコンテンツＩＤとの組と同じ組を含む情報が検索されたか否かを判定する（ステップＳ２２）。このとき、制御部２１は、同じ組を含む情報が検索された場合には（ステップＳ２２：ＹＥＳ）、検索された情報に含まれるリクエスト時刻を、リクエスト時刻Ｔとしてリクエスト管理テーブルから取得する（ステップＳ２３）。一方、制御部２１は、同じ組を含む情報が検索されなかった場合には（ステップＳ２２：ＮＯ）、ＣＰＵの計時機能から、現在時刻をリクエスト時刻Ｔとして取得する。そして、制御部２１は、チャンク要求メッセージに含まれるノードＩＤ及びコンテンツＩＤと、リクエスト時刻Ｔとを対応付けて、リクエスト管理テーブルに登録する（ステップＳ２４）。
【００７５】
制御部２１は、ステップＳ２３またはＳ２４の処理を終えると、ステップＳ２５〜Ｓ３５において、受信したチャンク要求メッセージが取り出される順番を決定し、リクエストキューにチャンク要求メッセージを格納する。先ず、制御部２１は、コンテンツ毎の待機ノード数を計算する（ステップＳ２５）。具体的に、制御部２１は、リクエストキューに格納されているコンテンツＩＤの数を、コンテンツＩＤ毎に計算する。コンテンツＩＤは、実際にはリクエストキューに格納されている各チャンク要求メッセージに含まれている。ここで、制御部２１は、今回受信したチャンク要求メッセージが仮にリクエストキューに格納されているものとして、計算を行う。つまり、制御部２１は、今回受信したチャンク要求メッセージの分も、待機ノード数の計算に含める。
【００７６】
次いで、制御部２１は、計算された待機ノード数のうち、今回受信したチャンク要求メッセージに含まれるコンテンツＩＤに対応する待機ノード数を、待機ノード数Ｍに設定する（ステップＳ２６）。次いで、制御部２１は、順番ｊにＬ＋１を設定する（ステップＳ２７）。格納数Ｌは、今回受信したチャンク要求メッセージを除いて、現在リクエストキューに格納されているチャンク要求メッセージの数を示す。リクエストキューには、１番目からＬ番目までの順番が割り当てられたＬ個のチャンク要求メッセージが格納されている。１番目のチャンク要求メッセージが、最も先に取り出される。順番ｊは、今回受信したチャンク要求メッセージが取り出される順番である。今回受信したチャンク要求メッセージが取り出される順番ｊの初期値として、Ｌ＋１、すなわち、最後の順番が設定される。
【００７７】
次いで、制御部２１は、順番ｊが１番目であるか否かを判定する（ステップＳ２８）。このとき、制御部２１は、順番ｊが１番目ではない場合には（ステップＳ２８：ＮＯ）、リクエストキューに格納されているチャンク要求メッセージのうち、ｊ−１番目のチャンク要求メッセージを取得する。ｊ−１番目のチャンク要求メッセージは、取り出される順番が、今回受信したチャンク要求メッセージの順番ｊよりも１つ早いチャンク要求メッセージである。
【００７８】
次いで、制御部２１は、ｊ−１番目のチャンク要求メッセージに含まれるコンテンツＩＤに対応する待機ノード数を、待機ノード数Ｍｊ−１に設定する（ステップＳ２９）。待機ノード数Ｍｊ−１は、今回受信したチャンク要求メッセージよりも順番が１つ早いチャンク要求メッセージに対応する待機ノード数である。次いで、制御部２１は、今回受信したチャンク要求メッセージに対応する待機ノード数Ｍが、今回受信したチャンク要求メッセージよりも順番が１つ早いチャンク要求メッセージに対応する待機ノード数Ｍｊ−１より多いか否かを判定する（ステップＳ３０）。このとき、制御部２１は、待機ノード数Ｍが待機ノード数Ｍｊ−１より多い場合には（ステップＳ３０：ＹＥＳ）、順番ｊから１を減算して（ステップＳ３１）、ステップＳ２８に移行する。これにより、今回受信したチャンク要求メッセージが取得される順番ｊが１つ繰り上げられる。ステップＳ２９〜Ｓ３１の処理は、チャンク要求メッセージに対応する待機ノード数に基づいて、リクエストキューにおけるチャンク要求メッセージの順番を入れ替える処理である。
【００７９】
一方、制御部２１は、待機ノード数Ｍが待機ノード数Ｍｊ−１より多くはない場合には（ステップＳ３０：ＮＯ）、待機ノード数Ｍと待機ノード数Ｍｊ−１とが等しいか否かを判定する（ステップＳ３２）。このとき、制御部２１は、待機ノード数Ｍと待機ノード数Ｍｊ−１とが等しい場合には（ステップＳ３２：ＹＥＳ）、リクエスト時刻の比較を行う。先ず、制御部２１は、ｊ−１番目のチャンク要求メッセージに含まれるノードＩＤとコンテンツＩＤとの組と同じ組を含む情報を、リクエスト管理テーブルから検索する。そして、制御部２１は、検索された情報に含まれるリクエスト時刻を、リクエスト時刻Ｔｊ−１としてリクエスト管理テーブルから取得する（ステップＳ３３）。リクエスト時刻Ｔｊ−１は、今回受信したチャンク要求メッセージよりも順番が１つ早いチャンク要求メッセージに対応するリクエスト時刻である。次いで、制御部２１は、今回受信したチャンク要求メッセージに対応するリクエスト時刻Ｔが、順番が１つ早いチャンク要求メッセージに対応するリクエスト時刻Ｔｊ−１よりも早いか否かを判定する（ステップＳ３４）。このとき、制御部２１は、リクエスト時刻Ｔがリクエスト時刻Ｔｊ−１よりも早い場合には（ステップＳ３４：ＹＥＳ）、ステップＳ３１に移行する。これにより、今回受信したチャンク要求メッセージが取得される順番ｊが１つ繰り上げられる。ステップＳ３２〜３４及びＳ３１の処理は、チャンク要求メッセージに対応するコンテンツのリクエスト時刻に基づいて、リクエストキューにおけるチャンク要求メッセージの順番を入れ替える処理である。
【００８０】
一方、制御部２１は、リクエスト時刻Ｔがリクエスト時刻Ｔｊ−１よりも早くはない場合には（ステップＳ３４：ＮＯ）、ステップＳ３５に移行する。また、制御部２１は、ステップＳ３２において待機ノード数Ｍが待機ノード数Ｍｊ−１よりも少ない場合には（ステップＳ３２：ＮＯ）、ステップＳ３５に移行する。また、制御部２１は、ステップＳ２８において順番ｊが１番目である場合には（ステップＳ２８：ＹＥＳ）、ステップＳ３５に移行する。
【００８１】
ステップＳ３５において、制御部２１は、今回受信したチャンク要求メッセージをリクエストキューのｊ番目に挿入する。具体的に、制御部２１は、今回受信されたチャンク要求メッセージに順番が追い越された各チャンク要求メッセージの順番を、それぞれ１つ繰り下げる。また、制御部２１は、今回受信したチャンク要求メッセージが取り出される順番が現時点でｊ番目となるように、このチャンク要求メッセージをリクエストキューに格納する。制御部２１は、ステップＳ３５の処理を終えると、チャンク要求受信処理を終了させる。
【００８２】
図８は、本実施形態におけるホルダノードの制御部２１のチャンク送信処理における処理例を示すフローチャートである。チャンク送信処理は、リクエストキューにチャンク要求メッセージが格納されていない状態で、リクエストキューにチャンク要求メッセージが格納されたときに開始される。
【００８３】
先ず、制御部２１は、リクエストキューにチャンク要求メッセージが格納されているか否かを判定する（ステップＳ４１）。このとき、制御部２１は、リクエストキューにチャンク要求メッセージが格納されている場合には（ステップＳ４１：ＹＥＳ）、リクエストキューから、優先順位が最も高いチャンク要求メッセージを取り出す（ステップＳ４２）。つまり、制御部２１は、リクエストキューから、取り出す順番が最も早いチャンク要求メッセージを取り出す。そして、制御部２１は、リクエストキューからは、取り出したチャンク要求メッセージを削除する。
【００８４】
次いで、制御部２１は、ユーザノードにチャンクをアップロードする（ステップＳ４３）。具体的に、制御部２１は、取り出したチャンク要求メッセージに含まれるチャンクＩＤに対応するチャンクを記憶部２２から取得する。そして、制御部２１は、取り出したチャンク要求メッセージに含まれるノード情報に基づいて、取得したチャンクをアップロードする。このとき、制御部２１は、ノード情報に含まれるノードＩＤに対応するユーザノードにチャンクをアップロードする。制御部２１は、アップロードが完了すると、ステップＳ４１に移行する。ステップＳ４１において、制御部２１は、リクエストキューにチャンク要求メッセージが格納されていない場合には（ステップＳ４１：ＮＯ）、チャンク送信処理を終了させる。
【００８５】
以上説明したように、本実施形態によれば、ホルダノードが、受信されたチャンク要求メッセージに含まれるノードＩＤと、チャンク要求メッセージが受信された時刻を示すリクエスト時刻と、を対応付けて、リクエスト管理テーブルに登録する。ホルダノードは、登録されたリクエスト時刻に基づいて、登録されたノードＩＤを含むチャンク要求メッセージが受信された時刻が早い順に許可する。また、ユーザノードが、ホルダノードからチャンクを取得して記憶する。また、ユーザノードが、記憶したチャンクについてパブリッシュメッセージを送信する。従って、ホルダノードの処理負荷を軽減することができる。また、各チャンクのアップロードの帯域幅をそれぞれ広く確保することができる。よって、チャンクの取得に要する時間が短くなるので、ユーザノードがチャンクを早く公開することができる。また、コンテンツの要求が早かったユーザノードであるほど、コンテンツを構成する各チャンクを先に取得することができる。よって、コンテンツ全体の取得に要する時間を短縮することができる。また、コンテンツ分散保存システムＳ全体において、チャンクを公開するまでに要する時間及びコンテンツ全体の取得に要する時間を短縮させることができる。
【００８６】
また、ユーザノードが、チャンクＩＤ、ノードＩＤ及びコンテンツＩＤを含むチャンク要求メッセージ送信する。また、ホルダノードが、対応付けて登録されたノードＩＤ及びコンテンツＩＤを含むチャンク要求メッセージが受信された時刻が早い順に、チャンクの取得を許可する。従って、ユーザノードが、要求が早かったコンテンツであるほど、そのコンテンツ全体を早く取得することができる。
【００８７】
また、ホルダノードが、チャンク要求メッセージが受信されたときに、登録されたリクエスト時刻に基づいて、受信されたチャンク要求メッセージをキューから取り出す順番を決定し、決定した順番に基づいてチャンク要求メッセージをキューに格納する。ホルダノードが、取り出したチャンク要求メッセージに含まれるノードＩＤが示すユーザノードへ、取り出したチャンク要求メッセージに含まれるチャンクＩＤが示すチャンクをアップロードする。これらの処理をホルダノードが順次行う。従って、キューを用いることによって、コンテンツを要求した時刻が早いユーザノードの順にチャンクをアップロードすることができる。
【００８８】
なお、上記実施形態においては、ユーザノードが、ホルダノードへ送信するチャンク要求メッセージにコンテンツＩＤを設定していた。しかしながら、チャンク要求メッセージにコンテンツＩＤを含めなくても良い。チャンク要求メッセージには、チャンクＩＤが含まれている。取得するチャンクのチャンクＩＤが特定されれば、そのチャンクを構成するコンテンツは一意に決定される。そこで、ホルダノードが、チャンクＩＤから、要求されたコンテンツのコンテンツＩＤを取得すれば良い。例えば、センターサーバＳＡにおいてコンテンツをチャンクに分割するとき、各チャンクのヘッダ情報中に、元となるコンテンツのコンテンツＩＤを設定しておく。そして、ヘッダ情報にコンテンツＩＤが設定された各チャンクが各ノードに分散して保存されていく。チャンク要求メッセージを受信したホルダノードは、チャンク要求メッセージに含まれているチャンクＩＤから、記憶部２２に記憶されているチャンクを特定する。次いで、ホルダノードは、特定したチャンクのヘッダ情報に設定されているコンテンツＩＤを取得する。これにより、ホルダノードは、取得したコンテンツＩＤと、チャンク要求メッセージに含まれているノードＩＤと、リクエスト時刻とを対応付けてリクエスト管理テーブルに登録することができる。また、ホルダノードは、取得したコンテンツＩＤとチャンク要求メッセージに含まれているノードＩＤとの組み合わせに対応するリクエスト時刻を、リクエスト管理テーブルから取得することもできる。そして、ホルダノードは、リクエスト管理テーブルに登録されたノードＩＤに対応付けて登録されたコンテンツＩＤに対応するコンテンツを要求するチャンク要求メッセージを受信した時刻が早い順にチャンクの取得を許可する。
【００８９】
また例えば、センターサーバＳＡが、コンテンツＩＤと、コンテンツＩＤに対応するコンテンツを構成する各チャンクのチャンクＩＤとを対応付けて示すリストを作成して記憶しても良い。この場合、ホルダノードは、例えば、チャンクＩＤに対応するコンテンツＩＤをセンターサーバＳＡに問い合わせる。具体的に、ホルダノードは、チャンク要求メッセージを受信したとき、チャンク要求メッセージからチャンクＩＤを取得する。そして、ホルダノードは、取得したチャンクＩＤを含む問い合わせメッセージをセンターサーバＳＡに送信する。センターサーバＳＡは、受信した問い合わせメッセージに含まれるチャンクＩＤに対応するコンテンツＩＤをリストから取得して、ホルダノードに送信する。また例えば、コンテンツＩＤとチャンクＩＤとを対応付けて示すリストを各ノードＮｎが記憶しても良い。この場合、例えば、センターサーバＳＡが、作成したリストを各ノードＮｎに配信する。
【００９０】
また、ホルダノードは、リクエスト管理テーブルにノードＩＤとリクエスト時刻とを登録して、コンテンツＩＤは登録しなくても良い。この場合、チャンク要求メッセージを受信したホルダノードは、例えば、チャンク要求メッセージに含まれているノードＩＤを、リクエスト管理テーブルから検索する。そして、ホルダノードは、チャンク要求メッセージに含まれているノードＩＤがリクエスト管理テーブルに登録されていない場合に、このノードＩＤとリクエスト時刻とを対応付けてリクエスト管理テーブルに登録する。この場合、ユーザノードがどのコンテンツを要求したかに関係なく、ホルダノードがコンテンツの要求を受けた時刻が早いユーザノードの順に、チャンクがアップロードされる。
【００９１】
また、上記実施形態においては、ユーザノードが、チャンクを取得する際に必要なノード情報、コンテンツＩＤ及びチャンクＩＤを、チャンク要求メッセージに含めてホルダノードに直接送信していた。しかしながら、チャンクを取得する際に必要な情報は、例えば、ルートノードを経由してホルダノードに送信されても良い。例えば、ユーザノードは、ノード情報、コンテンツＩＤ及びチャンクＩＤを含む検索メッセージをルートノードに向けて送信する。ルートノードは、検索メッセージに含まれているチャンクＩＤに対応するチャンクを保存するホルダノードを選択する。そして、ルートノードは、選択したホルダノードに、チャンクのアップロードを指示する。具体的に、ルートノードは、ホルダノードにチャンク送信指示メッセージを送信する。このとき、ルートノードは、検索メッセージに含まれているノード情報、コンテンツＩＤ及びチャンクＩＤを、チャンク送信指示メッセージに設定する。ホルダノードは、チャンク送信指示メッセージを受信した場合には、チャンク要求メッセージを受信したときと同様の処理を行えば良い。
【００９２】
また、ホルダノードは、チャンク要求メッセージをリクエストキューに格納するとき、リクエストキューに格納されるチャンク要求メッセージが取り出される順番を、同一のコンテンツの待機ノード数でソートしても良い。また、ホルダノードは、同一のコンテンツの待機ノード数に基づいて、均等にチャンク要求メッセージが取り出されるようにしても良い。例えば、コンテンツＸの待機ノード数が４、コンテンツＹの待機ノード数が２、コンテンツＺの待機ノード数が１であるとする。この場合、ホルダノードは、Ｘ、Ｘ、Ｙ、Ｘ、Ｘ、Ｙ、Ｚの順番でチャンク要求メッセージが取り出されるように、順番の並べ替えを行う。この場合、同一のコンテンツの間では、リクエスト時刻が早いユーザノードからのチャンク要求メッセージが、先に取り出されるようにする。また、ホルダノードは、同一のコンテンツの待機ノード数を考慮せず、リクエスト時刻のみに基づいて、リクエストキューに対するチャンク要求メッセージの格納を行っても良い。また、ホルダノードは、リクエスト管理テーブルにコンテンツＩＤが登録されている数が多いコンテンツから優先して、リクエストキューからチャンク要求メッセージが取り出されるようにしても良い。
【００９３】
また、上記実施形態においては、ユーザノードは、センターサーバＳＡにチャンク要求メッセージを送信した場合にのみ、ホルダノードの検索を定期的に行っていた。しかしながら、ユーザノードは、ホルダノードにチャンク要求メッセージを送信した場合にも、検索を定期的に行っても良い。また、ホルダノードは、チャンク要求メッセージを送信したときの定期的な検索を行わなくても良い。また、上記実施形態においては、各ノードＮｎが、リクエストキュー及びリクエスト管理テーブルを保持し、チャンク要求メッセージに対する上記アップロードの制御を行っていた。しかしながら、一部のノードＮｎのみが、上記アップロードの制御を行うようにしても良い。
【００９４】
また、上記実施形態においては、オーバーレイネットワークに、ＤＨＴを利用したピアツーピアネットワークが適用されていたが、これに限られるものではない。例えば、他のピアツーピアシステム、または、オーバーレイネットワークを用いたシステムが適用されても良い。ＤＨＴを利用しないピアツーピアシステムとしては、例えば、ハイブリッド型のピアツーピアシステムがある。
【符号の説明】
【００９５】
８  ネットワーク
９  オーバーレイネットワーク
２１  制御部
２２  記憶部
２３  バッファメモリ
２９  通信部
Ｎｎ  ノード
ＳＡ  センターサーバ
Ｓ  コンテンツ分散保存システム
【図１】
0005614530.tif 000002
【図２】
0005614530.tif 000003
【図３】
0005614530.tif 000004
【図４】
0005614530.tif 000005
【図５】
0005614530.tif 000006
【図６】
0005614530.tif 000007
【図７】
0005614530.tif 000008
【図８】
0005614530.tif 000009