(57)【要約】  それぞれが対応するオブジェクトの局所表現を記憶するように構成された１組のコンピューターが、オブジェクトセットを冗長的に記憶することができる。或るコンピューターが（例えば、オブジェクトを追加又は改変することによって）オブジェクトセットを変更すると、更新オブジェクトを記憶しているノードの近隣者からアドホックスウォームネットワークを反復的に形成して用いることにより、コンピューター間で更新オブジェクトを同期させることができる。このスウォームネットワークは協調して動作することができ、各ノードはオブジェクトチャンクを他のノードに可能な限り迅速に分配する。また、このスウォームネットワークは、公平性及び不正行為回避等の競合スウォームネットワークの概念を無視することができる。これらの概念は協調的スウォーミングには適用することができず、適用されたならば、オブジェクトの伝播を低速化するおそれがある。代替的な「アスク」技法を含めて、欠落したオブジェクト更新を識別して回復することができ、最後の手段の信頼できるオブジェクト送信元及び／又はオブジェクトストアとしてコンピューティング環境ホストを含めることができる。
2012528402.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサー（１６４）を有するコンピューター（１６２）によって記憶されたオブジェクトセット（１６６）のオブジェクト（１４）を、少なくとも１つのネットワーク（１６）を介してアクセス可能な少なくとも１つのノードによって記憶されたオブジェクトセットの対応するオブジェクトと同期させる方法（１２０）であって、
前記プロセッサー（１６４）上で、
少なくとも１つの近隣者を含む近隣者セットを前記ノード（１８）から選択するように構成された命令であって、前記少なくとも１つの近隣者は、前記少なくとも１つのネットワーク（１６）を介して、前記コンピューター（１６２）及び前記近隣者セットの他の近隣者にアクセス可能である、選択するように構成された命令と、
前記オブジェクトセット（１６６）内に更新オブジェクト（１４）を識別すると、
前記更新オブジェクト（１４）を記憶していない前記近隣者セット内の前記近隣者を決定するように構成された命令と、
前記更新オブジェクト（１４）を記憶していない前記近隣者を含むスウォームノード（１１８）のスウォームネットワーク（１１６）を形成するように構成された命令と、
前記更新オブジェクト（１４）について前記スウォームネットワーク（１１６）が形成されたことを前記スウォームノード（１１８）に通知するように構成された命令と、
前記スウォームネットワーク（１６６）を用いて、前記更新オブジェクト（１４）を前記スウォームノード（１１８）に送信するように構成された命令と、
を実行すること、
を含む、方法。
【請求項２】
前記近隣者セットを選択することは、
前記ネットワークの前記ノードを数えること、及び
それぞれのノードについて、以下の式に従って数えられた前記ネットワークの前記ノードを含む近隣者セットを選択すること、
【数１】
2012528402.tif 000004
を含み、ここで、
Ｓｉは前記ノードの近隣者ｉを表し、
ｎは前記ノードの計数値を表し、
Ｎは前記ネットワーク内のノード数を表す、
請求項１に記載の方法。
【請求項３】
前記更新オブジェクトを記憶していない前記近隣者を決定することは、
それぞれの近隣者について、
前記更新オブジェクトの識別子及び前記更新オブジェクトの内容指示子を前記近隣者に送信すること、並びに
前記近隣者が前記更新オブジェクトを記憶しているか否かの通知を該近隣者から受信すること、
を含む、請求項１に記載の方法。
【請求項４】
前記更新オブジェクトを前記スウォームノードに送信することは、
前記更新オブジェクトを少なくとも１つのチャンクにチャンキングすること、
それぞれのスウォームノードが前記更新オブジェクトのそれぞれのチャンクを記憶しているか否かを示すスウォームチャンクマップを初期化すること、並びに
前記スウォームノードが前記チャンクを受信したことを前記スウォームチャンクマップが示すまで、
前記スウォームチャンクマップに従って、チャンクを、該チャンクを記憶していないスウォームノードに送信すること、及び
チャンクを記憶していることの通知をスウォームノードから受信すると、該スウォームノードが該チャンクを記憶していることを示すように前記スウォームチャンクマップを更新すること、並びに
前記スウォームノードが前記チャンクを受信したものと、前記スウォームチャンクマップから判断すると、前記スウォームネットワークを終了すること、
を含む、請求項１に記載の方法。
【請求項５】
前記命令は、前記オブジェクトセット内に更新オブジェクトを識別すると、前記近隣者によって記憶されていない更新オブジェクトを含む更新オブジェクトバッチに前記更新オブジェクトを追加するように構成され、
前記スウォームネットワークを形成することは、前記更新オブジェクトバッチがオブジェクトバッチしきい値を超えると、前記スウォームネットワークを形成することを含む、請求項１に記載の方法。
【請求項６】
前記オブジェクトは、コンピューティング環境ホストのオブジェクトストアに、対応するオブジェクトとして記憶され、
前記命令は、前記更新オブジェクトを識別すると、
前記コンピューティング環境ホストが前記更新オブジェクトを記憶しているか否かを判断し、
前記コンピューティング環境ホストが前記更新オブジェクトを記憶していないと判断すると、該更新オブジェクトを前記コンピューティング環境ホストに送信する、
ように構成される、請求項１に記載の方法。
【請求項７】
前記命令は、
識別子及び内容指示子を含む更新オブジェクトの通知が近隣者によって行われると、
前記更新オブジェクトの前記識別子及び前記内容指示子を前記オブジェクトストア内の対応するオブジェクトと比較し、
前記コンピューターが前記更新オブジェクトを記憶しているか否かの通知を前記近隣者に送信する、
ように構成される、請求項１に記載の方法。
【請求項８】
前記命令は、送信元による、更新オブジェクトについての、前記コンピューターを含むスウォームネットワークの形成が通知されると、
対応する更新オブジェクトを前記オブジェクトストア内に作成し、
前記スウォームノードが前記オブジェクトを受信するまで、
前記オブジェクトを受信すると、該オブジェクトを前記オブジェクトストアに記憶し、
前記オブジェクトを、該オブジェクトを記憶していないスウォームノードに送信し、
前記スウォームノードが前記オブジェクトを受信したと判断すると、前記スウォームネットワークを終了する、
ように構成される、請求項１に記載の方法。
【請求項９】
前記命令は、送信元による、更新オブジェクトについての、前記コンピューターを含むスウォームネットワークの形成が通知されると、それぞれのスウォームノードが前記更新オブジェクトのそれぞれのチャンクを記憶しているか否かを示すスウォームチャンクマップを作成するように構成され、
前記オブジェクトを受信することは、
チャンクを受信すると、
前記チャンクを前記オブジェクトストアに記憶すること、及び
前記コンピューターが前記チャンクを記憶していることを示すように前記スウォームチャンクマップを更新すること、
を含み、
前記オブジェクトを送信することは、
前記スウォームノードが前記オブジェクトの前記チャンクを受信するまで、
前記スウォームチャンクマップに従って、チャンクを、該チャンクを記憶していないスウォームノードに送信すること、及び
前記スウォームノードが前記チャンクを記憶していることを示すように前記スウォームチャンクマップを更新すること、
を含み、
前記スウォームノードが前記オブジェクトを受信したと判断することは、前記スウォームチャンクマップに従って、前記スウォームノードが前記チャンクを受信したと判断することを含む、
請求項８に記載の方法。
【請求項１０】
チャンクを受信することは、前記スウォームノード及び前記送信元に、前記コンピューターが前記チャンクを記憶していることを通知することを含み、
前記命令は、スウォームノードがチャンクを記憶している通知が行われると、該スウォームノードが該チャンクを記憶していることを示すように前記スウォームチャンクマップを更新するように構成される、請求項９に記載の方法。
【請求項１１】
前記命令は、前記コンピューターを含む前記スウォームネットワークの前記形成の通知が行われると、それぞれのスウォームノード用の送信キューを生成するように構成され、
前記チャンクを前記スウォームノードに送信することは、
前記チャンクを前記スウォームノードの前記送信キューにエンキューすること、
前記チャンクを前記スウォームノードの空の送信キューにエンキューすると、前記チャンクを前記スウォームノードに送信することを開始すること、並びに
チャンクを前記スウォームノードに送信することを完了すると、
前記チャンクを前記送信キューからデキューすること、及び
前記スウォームノードの前記送信キュー内で次のエンキューされたチャンクを識別すると、前記送信キュー内の該次のエンキューされたチャンクを前記スウォームノードに送信することを開始すること、
を含む、請求項９に記載の方法。
【請求項１２】
前記命令は、同期事象を検出すると、
少なくとも１つの近隣者によって記憶されているとともに前記コンピューターの前記オブジェクトストアに記憶されていない更新オブジェクトを識別し、
少なくとも１つの近隣者によって記憶されているとともに前記コンピューターの前記オブジェクトストアに記憶されていない更新オブジェクトを識別すると、
前記更新オブジェクトを前記オブジェクトストアに作成し、
前記更新オブジェクトを少なくとも１つのチャンクにチャンキングし、
前記更新オブジェクトの前記チャンクが前記オブジェクトストアに記憶されるまで、
前記オブジェクトストアに記憶されていない少なくとも１つのチャンクを、該チャンクを記憶している近隣者に要求し、
前記近隣者から前記チャンクを受信すると、該チャンクを前記オブジェクトストアに記憶する、
ように構成される、請求項１に記載の方法。
【請求項１３】
前記命令は、前記コンピューターの前記オブジェクトストアに記憶されたオブジェクトのチャンクの要求を近隣者から受信すると、該オブジェクトの該チャンクを該近隣者に送信するように構成される、請求項１２に記載の方法。
【請求項１４】
コンピューター（１６２）によって記憶されたオブジェクトセットの更新オブジェクト（１４）を、少なくとも１つのネットワーク（１６）を介してアクセス可能な少なくとも１つのノード（１８）によって記憶されたオブジェクトセットの対応するオブジェクト（１４）と同期させるように構成されるシステム（１６８）であって、
少なくとも１つの近隣者を含む近隣者セットを前記ノード（１８）から選択するように構成された近隣者選択構成要素（１７０）であって、前記少なくとも１つの近隣者は、前記少なくとも１つのネットワーク（１６）を介して、前記コンピューター（１６２）及び前記近隣者セットの他の近隣者にアクセス可能である、近隣者選択構成要素（１７０）と、
スウォームネットワーク形成構成要素（１７４）であって、
前記更新オブジェクト（１４）を記憶していない前記近隣者セット内の前記近隣者を決定し、
前記更新オブジェクト（１４）を記憶していない前記近隣者を含むスウォームノード（１１８）のスウォームネットワーク（１１６）を形成し、
前記更新オブジェクト（１４）について前記スウォームネットワーク（１１６）が形成されたことを前記スウォームノード（１１８）に通知する、
ように構成されたスウォームネットワーク形成構成要素（１７４）と、
前記スウォームネットワーク（１１６）を用いて、前記更新オブジェクト（１４）を前記スウォームノード（１１８）に送信するように構成されたスウォームネットワーク送信構成要素（１７６）と、
を備える、システム。
【請求項１５】
コンピューター可読ストレージ媒体（１８２）であって、少なくとも１つのネットワーク（１６）を介してアクセス可能な少なくとも１つのノード（１８）によって記憶されているとともに、コンピューティング環境ホスト（１００）のオブジェクトストア（１６６）内の対応するオブジェクト（１４）として記憶されているオブジェクトセットのオブジェクト（１４）に対応するオブジェクト（１４）を含むオブジェクトセットを記憶するコンピューター（１６２）の少なくとも１つのプロセッサー（１６４）によって実行されると、該少なくとも１つのプロセッサー（１６４）に、以下のことを実行させる命令を含む媒体、すなわち、
少なくとも１つのネットワーク変更事象を検出すると、
前記ネットワーク（１６）の前記ノード（１８）を数えること、及び
それぞれのノード（１８）について、以下の式に従って数えられた前記ネットワーク（１６）の前記ノード（１８）を含む近隣者セットを選択すること、
【数２】
2012528402.tif 000005
なお、Ｓｉは前記ノード（１８）の近隣者ｉを表し、
ｎは前記ノード（１８）の計数値を表し、
Ｎは前記ネットワーク（１６）内のノード（１８）の数を表す、
によって、少なくとも１つの近隣者を含む近隣者セットを前記ノード（１８）から選択すること、
小さな近隣者セットに配信される少数の小さな更新オブジェクト（１４）を含む小さな更新オブジェクトセットを識別すると、該小さな更新オブジェクトセットを該小さな近隣者セットの前記近隣者に送信し、小さな更新オブジェクトセットを超える前記オブジェクトセット内の更新オブジェクト（１４）を識別すると、
それぞれの近隣者について、
前記更新オブジェクト（１４）の識別子及び前記更新オブジェクト（１４）の内容指示子を前記近隣者に送信すること、並びに
前記近隣者が前記更新オブジェクト（１４）を記憶しているか否かの通知を該近隣者から受信すること、
によって、前記更新オブジェクト（１４）を記憶していない前記近隣者を決定すること、
前記更新オブジェクト（１４）を記憶していない前記近隣者を含むスウォームノード（１１８）のスウォームネットワーク（１１６）を形成すること、
前記更新オブジェクト（１４）について前記スウォームネットワーク（１１６）が形成されたことを前記スウォームノード（１１８）に通知すること、並びに
前記スウォームネットワーク（１１６）を用いて前記更新オブジェクト（１４）を前記スウォームノード（１１８）に送信することであって、
前記更新オブジェクト（１４）を少なくとも１つのチャンクにチャンキングすること、
それぞれのスウォームノード（１１８）が前記更新オブジェクト（１４）のそれぞれのチャンクを記憶しているか否かを示すスウォームチャンクマップ（１９２）を初期化すること、並びに
前記スウォームノード（１１８）が前記チャンクを受信したことを前記スウォームチャンクマップ（１９２）が示すまで、
前記スウォームチャンクマップ（１９２）に従って、チャンクを、該チャンクを記憶していないスウォームノード（１１８）に送信すること、及び
チャンクを記憶していることの通知をスウォームノード（１１８）から受信すると、該スウォームノード（１１８）が前記チャンクを記憶していることを示すように前記スウォームチャンクマップ（１９２）を更新すること、並びに
前記スウォームノード（１１８）が前記チャンクを受信したと前記スウォームチャンクマップ（１９２）から判断すると、前記スウォームネットワーク（１１６）を終了すること、
前記コンピューティング環境ホスト（１００）が前記更新オブジェクト（１４）を記憶しているか否かを判断すること、並びに
前記コンピューティング環境ホスト（１００）が前記更新オブジェクト（１４）を記憶していないと判断すると、該更新オブジェクト（１４）を前記コンピューティング環境ホスト（１００）に送信すること、
によって送信すること、
識別子及び内容指示子を含む更新オブジェクト（１４）の通知が近隣者によって行われると、
前記更新オブジェクト（１４）の前記識別子及び前記内容指示子を前記オブジェクトストア（１６６）内の対応するオブジェクト（１４）と比較すること、並びに
前記コンピューター（１６２）が前記更新オブジェクト（１４）を記憶しているか否かの通知を前記近隣者に送信すること、
送信元による、更新オブジェクト（１４）についての、前記コンピューター（１６２）を含むスウォームネットワーク（１１６）の形成が通知されると、
対応する更新オブジェクト（１４）を前記オブジェクトストア（１６６）内に作成すること、
それぞれのスウォームノード（１１８）用の送信キューを生成すること、
それぞれのスウォームノード（１１８）が前記更新オブジェクト（１４）のそれぞれのチャンクを記憶しているか否かを示すスウォームチャンクマップ（１９２）を作成すること、
前記スウォームノード（１１８）が前記オブジェクト（１４）の前記チャンクを受信するまで、
前記オブジェクト（１４）のチャンクを受信すると、
前記チャンクを前記オブジェクトストア（１６６）に記憶すること、
前記コンピューター（１６２）が前記チャンクを記憶していることを示すように前記スウォームチャンクマップ（１９２）を更新すること、並びに
前記コンピューター（１６２）が前記チャンクを記憶していることを前記スウォームノード（１１８）及び前記送信元に通知すること、
スウォームノード（１１８）がチャンクを記憶していることの通知が行われると、該スウォームノード（１１８）が該チャンクを記憶していることを示すように前記スウォームチャンクマップ（１９２）を更新すること、
前記スウォームチャンクマップ（１９２）に従って、前記チャンクを、該チャンクを記憶していないスウォームノード（１１８）に送信することであって、
前記スウォームチャンクマップ（１９２）に従って、前記オブジェクトストア（１６６）に記憶されているとともに前記スウォームノード（１１８）間でめったに記憶されない珍しいチャンクを含むチャンクを選択すること、
前記スウォームノード（１１８）の前記送信キューに前記チャンクをエンキューすること、
前記スウォームノード（１１８）の空の送信キューに前記チャンクをエンキューすると、該チャンクを前記スウォームノード（１１８）に送信することを開始すること、並びに
チャンクを前記スウォームノード（１１８）に送信することを完了すると、
前記チャンクを前記送信キューからデキューすること、及び
前記スウォームノード（１１８）の前記送信キュー内に次のエンキューされたチャンクを識別すると、前記送信キュー内の該次のエンキューされたチャンクを前記スウォームノード（１１８）に送信することを開始すること、並びに
前記スウォームノード（１１８）が前記チャンクを記憶していることを示すように前記スウォームチャンクマップ（１９２）を更新すること、
によって、送信すること、並びに
前記スウォームチャンクマップ（１９２）に従って、前記スウォームノード（１１８）が前記チャンクを受信したと判断すると、前記スウォームネットワーク（１１６）を終了すること、
同期事象を検出すると、
前記コンピューティング環境ホスト（１００）の前記オブジェクトストア（１６６）に記憶されているとともに前記コンピューター（１６２）の前記オブジェクトストア（１６６）に記憶されていない更新オブジェクト（１４）のリストを前記コンピューティング環境ホスト（１００）に要求することによって、少なくとも１つの近隣者によって記憶されているとともに前記コンピューター（１６２）の前記オブジェクトストア（１６６）に記憶されていない更新オブジェクト（１４）を識別すること、
少なくとも１つの近隣者によって記憶されるとともに前記コンピューター（１６２）の前記オブジェクトストア（１６６）に記憶されていない更新オブジェクト（１４）を識別すると、
前記更新オブジェクト（１４）を前記オブジェクトストア（１６６）に作成すること、
前記更新オブジェクト（１４）を少なくとも１つのチャンクにチャンキングすること、並びに
更新オブジェクト（１４）の少なくとも１つのチャンクを前記近隣者から受信しないと、
前記少なくとも１つのチャンクを前記コンピューティング環境ホスト（１００）に要求すること、及び
前記コンピューティング環境ホスト（１００）から前記少なくとも１つのチャンクを受信すると、該少なくとも１つのチャンクを前記オブジェクトストア（１６６）に記憶すること、
前記更新オブジェクト（１４）の前記チャンクが前記オブジェクトストア（１６６）に記憶されるまで、
前記オブジェクトストア（１６６）に記憶されていない少なくとも１つのチャンクを、該チャンクを記憶している近隣者に要求すること、及び
前記近隣者から前記チャンクを受信すると、該チャンクを前記オブジェクトストア（１６６）に記憶すること、並びに
少なくとも１つの近隣者の前記オブジェクトセットに記憶されていない、前記コンピューター（１６２）の前記オブジェクトセットに記憶されたオブジェクト（１４）について、該オブジェクト（１４）を更新オブジェクト（１４）として識別すること、並びに
前記コンピューター（１６２）の前記オブジェクトストア（１６６）に記憶されたオブジェクト（１４）のチャンクの要求を近隣者から受信すると、該オブジェクト（１４）の該チャンクを前記近隣者に送信すること、
を実行させる命令を含む媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オブジェクトストアのネットワークを介したスウォームベースの同期に関する。
【背景技術】
【０００２】
[0001]コンピューティングの分野では、多くのシナリオが、１組のオブジェクトとして表されることがあるデータを記憶するように構成された１組のコンピューター又はデバイスを伴っている。これらのシナリオでは、コンピューターはネットワークを介して接続されている。いくつかのシナリオでは、１組のコンピューター又はデバイスは、それぞれ特定のオブジェクトの局所表現を記憶することができる。オブジェクトの或る局所表現に対する変更は、ネットワークを介して通信することにより、他のコンピューター又はデバイスに記憶された対応するオブジェクトの他の局所表現に伝播することが望ましい場合がある。より複雑なシナリオでは、１組の共有オブジェクトは大規模である可能性があり、変更は頻繁である可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、特定のコンピューター又はデバイスの利用可能なネットワーク帯域幅は制限される場合があり、コンピューター又はデバイスが変更されたオブジェクトについてのデータを受信し、局所表現に対する変更についてのデータを他のコンピューター又はデバイスに送信することができるレートを制限する働きをする場合がある。したがって、コンピューター及びデバイスがそのようなオブジェクトに対する変更の通知を通信することができるとともに、ネットワークの制限された帯域幅を割り当ててそのようなデータオブジェクトに対する変更の効率的な伝播を達成することができる信頼できるメカニズムを確立することは困難な場合がある。
【課題を解決するための手段】
【０００４】
[0002]この概要は、以下の詳細な説明において更に説明する概念の抜粋を簡略化した形で紹介するために提供されている。この概要は、特許請求される主題の主要な因子又は本質的な特徴を特定することを意図するものでもなければ、特許請求される主題の範囲を限定するのに用いられることを意図するものでもない。
【０００５】
[0003]オブジェクトを同期させる１つのメカニズムは、ノードが、新たなオブジェクトの書込み又は既存のオブジェクトの改変等（そのようないずれの変更も本明細書では「更新（された）オブジェクト（updated object）」と呼ばれる）、オブジェクトの局所表現に対する変更を検出すると、完全相互接続されたノード（「近隣者」）のサブセットに更新オブジェクトを通知し、更新オブジェクトを有していない近隣者を識別する、ネットワークのノード間の仕組みを含む。このメカニズムは、更に、オブジェクトが、ピアツーピアネットワーク等を介してこれらの近隣者に効率的な方法で送信されるようにすることができる。詳細には、小さな１組の近隣者が、「スウォーム（swarm）」タイプのピアツーピアネットワークを形成することができ、このネットワークでは、各近隣者は、送信元（すなわち、ピアツーピアネットワークを開始し、完全な更新オブジェクトを有するノード）からオブジェクトの一部分を受信する一方、そのオブジェクトの受信した部分を他の近隣者に転送することができ、同時に、オブジェクトの他の部分を他の近隣者から受信することができる。したがって、この技法は、スウォームネットワークを構成するノードのアップロード帯域幅及びダウンロード帯域幅の双方を利用して、送信元から各近隣者へのオブジェクトの集中型転送よりも高速なオブジェクトの分配を達成する。さらに、競合する公平性を促進するように構成された他のスウォームネットワーク（例えば、交換されるデータの大部分を有するノード間でのアップロード容量の「公平」な分配を促進するＢｉｔＴｏｒｒｅｎｔの態様）とは対照的に、これらのデバイスを接続するスウォームネットワークは、更新オブジェクトのより高速な分配を達成するために、より多くのアップロード容量を有するノードからより多くの帯域幅を利用するように構成することができる。経済性及びロバスト性を促進するために、さまざまなシナリオに更なる特徴を任意選択で組み込むことができる（例えば、「アスク（Ask）」技法を含めて、新たに接続又は再接続されたコンピューター又はデバイスがオフラインである間に分配された変更を、該コンピューター又は該デバイスが受信することを可能にすることができ、コンピューティング環境ホストとの通信を含めて、オブジェクトセットの集中型でかつ信頼できる送信元とオブジェクトを同期させることができる）。
【０００６】
[0004]上記の目的及び関係する目的を達成するために、以下の説明及び添付図面は、或る特定の例示的な態様及び実施態様を述べている。これらは、１つ又は複数の態様を使用することができるさまざまな方法のうちのほんの僅かしか示していない。この開示の他の態様、利点、及び新規な特徴は、以下の詳細な説明を添付図面とともに検討すると、その詳細な説明から明らかになる。
【図面の簡単な説明】
【０００７】
【図１】[0005]ネットワークを介してオブジェクトを１組のノードに送信する送信元ノードの説明図である。
【図２】[0006]ネットワークを介してオブジェクトを１組のノードに送信する送信元ノードの別の説明図である。
【図３】[0007]ネットワークを介してオブジェクトを１組のノードに送信する送信元ノードの別の説明図である。
【図４】[0008]ネットワークを介してオブジェクトを１組のノードに送信する送信元ノードの別の説明図である。
【図５】[0009]ネットワークを介してオブジェクトを１組のノードに送信する送信元ノードの別の説明図である。
【図６】[0010]１組のコンピューター間で記憶されたオブジェクトの局所表現をコンピューティング環境ホストによって同期させるように構成された該１組のコンピューターの説明図である。
【図７】[0011]ネットワークによりオブジェクトを同期させる１組のノードの説明図である。
【図８】[0012]ネットワークを介してアクセス可能な少なくとも１つのノードによって記憶された対応するオブジェクトと共にコンピューターによって記憶されたオブジェクトセットのうちの更新オブジェクトを同期する一例示の方法を示すフローチャートである。
【図９】[0013]ネットワークを介してアクセス可能な少なくとも１つのノードによって記憶された対応するオブジェクトと共にコンピューターによって記憶されたオブジェクトセットのうちの更新オブジェクトを同期する別の例示の方法を示すフローチャートである。
【図１０】[0014]ネットワークを介してアクセス可能な少なくとも１つのノードによって記憶された対応するオブジェクトと共にコンピューターによって記憶されたオブジェクトセットのうちの更新オブジェクトを同期する一例示のシステムを示す構成要素ブロック図である。
【図１１】[0015]本明細書で述べるプロビジョン（provision）うちの１つ又は複数を実施するように構成されたプロセッサー実行可能命令に含む一例示のコンピューター可読媒体の説明図である。
【図１２】[0016]スウォームチャンクマップ（swarm chunk map）を用いてオブジェクトの局所表現を同期するように構成された１組のコンピューターの説明図である。
【図１３】[0017]ネットワークを介してアクセス可能な少なくとも１つのノードによって記憶された対応するオブジェクトと共にコンピューターによって記憶されたオブジェクトセットのうちの更新オブジェクトを同期する別の例示の方法を示すフローチャートである。
【図１４】[0018]本明細書で述べるプロビジョンのうちの１つ又は複数を実施することができる一例示のコンピューティング環境を示す図である。
【発明を実施するための形態】
【０００８】
[0019]次に、特許請求された主題を図面を参照して説明する。図面において、同様の参照番号は、全体を通じて同様の要素を参照するのに用いられる。以下の説明では、特許請求された主題の徹底した理解を提供するために、説明の目的で、多数の具体的な詳細が述べられる。しかしながら、特許請求された主題は、これらの特定の詳細がなくても実施できることが明らかであろう。他の例では、特許請求された主題の説明を容易にするために、構造及びデバイスはブロック図の形態で示されている。
【０００９】
[0020]コンピューティングの分野では、多くのシナリオが、さまざまな１組のデータを記憶しネットワークにより通信することができる１組のコンピューター（例えば、サーバー、ワークステーション、ノートブック、移動電話、及び他のデバイス）を伴っている。これらのシナリオのうちのいくつかでは、２つ以上のコンピューターが、それぞれ、１つ又は複数のオブジェクト（例えば、ファイル、データベースレコード、タプル、クラスインスタンス等）等の特定のデータセットの表現を記憶することができる。例えば、オブジェクトは、例えば、ローカルな使用、より高速なアクセス、及び／又はネットワークの分割若しくは切断の場合のオブジェクトへのアクセスの維持のためにオブジェクトへのローカルアクセスを提供するようにいくつかのコンピューターにわたって複製することができる。加えて、コンピューターは、或るコンピューターにおけるオブジェクトの局所表現に対する変更を他のコンピューターにおける他の表現に伝播することができるように、オブジェクトのさまざまな表現を同期させるように努めることができる。
【００１０】
[0021]より一般的には、それぞれのコンピューターは、１つ又は複数のネットワークを介して接続することができ（例えば、コンピューターＡ、Ｂ、及びＣは第１のネットワークを介して相互にアクセス可能とすることができる一方、コンピューターＡは第２のネットワークを介してコンピューターＤ及びＥと接続することができる）、それぞれのコンピューターは、１組のオブジェクトを記憶するように構成されたオブジェクトストアを備えることができ、ここで、第１のコンピューターの第１のオブジェクトストア内の特定のオブジェクトは、第２のコンピューターの第２のオブジェクトストア内の特定のオブジェクトに対応する。これらのコンピューター間では、オブジェクトに対する変更は、他のコンピューターのそれぞれのオブジェクトストアに記憶された対応するオブジェクトと同期されることになる。コンピューターは、ネットワークを介してこの同期を達成するように協調することができる。しかしながら、それぞれのコンピューターは、多くの場合、アップロード容量及び／又はダウンロード容量が制限され、場合によっては（例えば、移動デバイス）、処理能力及び／又はバッテリー寿命が制限されている。これらの制限は、変更の伝播レートを制限する可能性があり、同期を達成する際にいくつかのコンピューターに対して過度でかつ場合によっては非効率的な負担を負わせる場合がある。
【００１１】
[0022]図１〜図４は、不適切に設計された同期ストラテジーが呈するおそれがあるネットワークの非効率な点の４つの例を示している。これらのシナリオのそれぞれにおいて、送信元ノード１２は、１つ又は複数のネットワークを介して１つ又は複数のノードに送信されるオブジェクト１４を記憶する。同期されるオブジェクト１４は、例えば、ノードのオブジェクトストアにまだない新たなオブジェクト、又は送信元１２において、ノードに伝播される変更で更新されたオブジェクト、又は送信元１２が同じネットワーク若しくは別のネットワークを介して別のノードから（新しく又は更新された形態で）受信したオブジェクトを含むことができる。
【００１２】
[0023]図１の第１の例１０では、送信元１２は、ネットワーク１６を介してオブジェクト１４を１組のノード１８に送信するように努める。ここで、送信元１２は比較的大きなアップロード容量を有する。しかしながら、この第１の例１０の送信元１２は、オブジェクト１４を省略せずにノード１８のそれぞれに送信し、それによって、オブジェクト１４の送信に関与するアップロード帯域幅を５倍に拡大する。送信元１２のネットワーク接続１６が、比較的大きなアップロード容量を特色としている場合であっても、アップロード容量は、ノード１８の数が拡大するにつれて急速に枯渇するおそれがあり、ノード１８へのオブジェクト１４の配信が低速化又は失敗することになる。
【００１３】
[0024]図２の第２の例２０では、送信元１２は、第１のノード２２、第２のノード２４、及び第３のノード２６を含む小さな１組のノードにネットワーク接続１６を介してオブジェクト１４を送信するように努める。しかしながら、第１のノード２２及び第３のノード２６は、オブジェクト１４を既に受信している（例えば、送信元１２は、該送信元１２に知らせることなく、第１のノード２２及び第３のノード２６へのオブジェクト１４の送信を既に達成している上流側ノードからオブジェクト１４を受信している場合がある）。したがって、第１のノード２２及び第３のノード２６へのオブジェクト１４の送信は、冗長となる場合があり、送信元１２のアップロード容量の効果のない使用となる場合がある。
【００１４】
[0025]図３の第３の例３０では、送信元ノード１２は、第１のネットワーク３４を介して第１のノード３２にオブジェクト１４を送信するとともに、第２のネットワーク３８を介して第２のノード３６にオブジェクト１４を送信するように連係することができる。第１のノード３２及び第２のノード３６はともに第３のノード４０にも接続されている場合があり、第３のノード４０にも、オブジェクト１４が送信される場合がある。送信元１２は、それぞれ第１のネットワーク３４及び第２のネットワーク３８を介して第１のノード３２及び第２のノード３６へのオブジェクト１４の配信を達成する場合があり、これらのノードは、オブジェクト１４を第３のノード４０に送信するように努める場合がある。非効率な点の一例として、双方のノードがオブジェクト１４を第３のノード４０に送信する場合があり、それによって、配信が冗長となり、帯域幅の使用が効果のないものとなる場合がある。非効率な点の別の例として、第１のノード３２及び第２のノード３６は、この冗長性を回避するために、オブジェクト１４を最初に受信したノードの方が他方のノードを排除してオブジェクト１４を第３のノード４０に配信することができるように、通信する場合がある。この連係は冗長性を回避することができるが、いずれのノードがオブジェクトを第３のノード４０に送信するのかの判定は、容量の評価ではなく、任意の競合条件に基づくことができる。例えば、第１のノード３２が、第２のノード３６の前にオブジェクト１４を偶然受信した場合、第１のネットワーク３４を介した第１のノード３２のアップロード容量が、第２のネットワーク３８を介した第２のノード３６のアップロード容量よりもはるかに小さくても、第１のノード３２は、オブジェクト１４を第３のノード４０に送信する方を選ぶことができる。したがって、オブジェクト１４を第３のノード４０に送信する際に回避可能な遅延を被る場合がある。加えて、第２のノード３６のより豊富なアップロード容量ではなく、第１のノード３２のより制限されたアップロード容量を過度に消費する場合があり、これによって、例えば、第１のノード３２が第１のネットワーク３４を介して到達可能であるが、第２のノード３６が第２のネットワーク３８を介して到達可能でない場合がある更なるノードへのオブジェクト１４の配信が大幅に遅延するおそれがある。
【００１５】
[0026]図４の第４の例５０では、送信元１２は、大規模ネットワークのノード１８に配信されるオブジェクト１４を記憶することができる。図１〜図３の例よりも効率的な方法でオブジェクト１４の配信をノード１８間で連係することができる場合であっても、ノード１８は、それにもかかわらず、オブジェクト１４についての情報を送信元１２に要求する場合がある。（代替的に、送信元１２は、更新オブジェクト１４を各ノード１８に通知することを担当する場合もある）。オブジェクト１４を送信するコストを無視しても、オブジェクト１４についてのクエリを処理し、オブジェクト１４についての情報を提供するネットワークコスト及び処理コストは、送信元１２を圧倒するおそれがあり、ノード１８へのオブジェクト１４の伝播を大幅に遅延させるおそれがある。
【００１６】
[0027]図１〜図４の例は、さまざまなタイプのネットワークの非効率な点を示しているが、これらの不備の多くは、送信元１２のアップロード容量及びノード１８のダウンロード容量に対する過度の依存から生じる。これらのボトルネックは、ネットワークが拡大するにつれて悪化するおそれがあり、更なる遅延及び場合によってはオブジェクト１４をノード１８の全てに配信する能力の破綻をもたらす。これらのネットワークの難題に鑑み、少なくとも１つのネットワークによって接続された１組のコンピューターにわたってオブジェクトのより効率的な配信を促進する代替的な同期ストラテジーが考案された。ノード１８のアップロード容量（例えば、オブジェクト１４又はその一部を他のノード１８に再分配する）及び／又は送信元のダウンロード容量（例えば、ノード１８間でオブジェクト１４の受信ステータスを追跡する）も利用することによって、より良いスケーリングを達成することができる。加えて、ネットワーク帯域幅の割当てをそれぞれのノード１８に委任することができ、それによって、ネットワークのノード１８にわたり計算能力を分散させ、そのような割当てをローカルに検出されたネットワーク容量と相関させることができる。これらのストラテジーは、「スウォームネットワーク（swarm network）」技法に従い、それにより、ネットワークリソースの使用を拡張してオブジェクト１４のより高速な分配を達成し、割当てを委任することによって、ノード１８の数及びノード１８間で交換されるオブジェクト１４の数が拡大するにつれて大幅な改善をもたらすことができる。
【００１７】
[0028]図５は、ＢｉｔＴｏｒｒｅｎｔとして知られている１つのそのようなスウォームネットワークの簡略化した例６０を提示している。通常のＢｉｔＴｏｒｒｅｎｔネットワークでは、オブジェクト１４は、１つ又は複数の「シード（seed）」ノードによって１組の「リーチ（leech）」ノードに送信されることになる。シードノードのそれぞれは、オブジェクト１４の同一のコピーを記憶し、リーチノードのそれぞれは、オブジェクト１４のフルコピーに満たないコピーを記憶する。オブジェクト１４をリーチノードに配信するために、シードノードはオブジェクト１４をチャンクに分割する。チャンクは、例えば、サイズ、ユーティリティ（オブジェクト１４を構成する１組の個別のサブオブジェクト等）、任意の「チャンキング」アルゴリズム等に基づいて選択することができる。さらに、ＢｉｔＴｏｒｒｅｎｔネットワークのノードは、任意のノードがネットワーク１６を介して他の任意のノードと連絡することができるように完全相互接続されている。したがって、ＢｉｔＴｏｒｒｅｎｔスウォームネットワークの相互接続されたノードは、いくつかのノードから受信したチャンクを記憶しかつチャンクを他のノードに再分配することによって、オブジェクト１４のチャンクを交換するように協調することができる。リーチノードは、ＢｉｔＴｏｒｒｅｎｔスウォームに加入すると、オブジェクト１４を構成するチャンクのリスト、オブジェクト１４の全てのチャンクを記憶するシードノードのリスト、並びにリーチノード及び各ノードによって記憶されたオブジェクト１４のチャンクのリストを受信することができる。したがって、リーチノードは、オブジェクト１４のチャンクをさまざまなシードノード及びリーチノードに要求することができ、受信したチャンクを他のリーチノードに再分配することができる。リーチノードは、オブジェクト構成するチャンクの全てのを受信すると、ＢｉｔＴｏｒｒｅｎｔスウォームネットワークにシードノードとして留まることができる。
【００１８】
[0029]図５に提示したＢｉｔＴｏｒｒｅｎｔスウォームネットワークの簡略化した例６０では、オブジェクト１４は、第１のシード６２及び第２のシード６４（それぞれはオブジェクト１４の完全なかつ同一のコピーを記憶する）から、第１のリーチ７４、第２のリーチ７６、第３のリーチ７８、及び第４のリーチ８０を含む１組のリーチに分配されることになる。オブジェクト１４は、第１のチャンク６６、第２のチャンク６８、第３のチャンク７０、及び第４のチャンク７２を含み、これらのチャンクのそれぞれは、第１のシード６２及び第２のシード６４によって記憶され、これらのチャネルは、リーチノード間で不均一かつ不完全に分配される（例えば、第１のリーチ７４は第２のチャンク６８を記憶し、第２のリーチ７６は第１のチャンク６６及び第４のチャンク７２を記憶する）。オブジェクト１４のチャンクの迅速な普及を促進するために、第１のシード６２は第１のチャンク６６を第１のリーチ７４に送信し、第２のシード６４は第３のチャンク７０を第１のリーチ７４に送信している。第１のシード６２は、第２のシード６８又は第３のシード７０を第２のリーチ７６に送信可能とすることもできるが、そうしないで、これらのチャンクを第２のリーチ７６に分配する別のノード（第１のリーチ７４等）に頼ることができる。同様に、第２のリーチ７６は、第２のチャンク６８を第１のリーチ７４から取得することができるので、第２のシード１６は、この第２のチャンク６８を第２のリーチ７６に送信することを控えることができる。同時に、第１のリーチ７４及び第２のリーチ７６は、いくつかの初期チャンクを第３のリーチ７８及び第４のリーチ８０に送信することができる。これらのリーチのそれぞれは、当初（例えば、ＢｉｔＴｏｒｒｅｎｔネットワークに丁度加入したとき）、チャンクを記憶していない。このように、第１のシード６２及び第２のシード６４は、分配コストをリーチノードと分担することにより、リーチノードと協調してオブジェクト１４のチャンクを分配する。
【００１９】
[0030]ＢｉｔＴｏｒｒｅｎｔネットワークは、比較的信頼できない１組のノード間ではピアツーピア形式で、「公平」な方法で分配を割り当てることによりオブジェクトを同期させることに熟達している。第１の例として、ノード１８のオペレーターは、通常、ＢｉｔＴｏｒｒｅｎｔスウォームネットワークに加入することによって交換される特定のオブジェクトを取得するために、ＢｉｔＴｏｒｒｅｎｔスウォームネットワークに加入することを選び、ＢｉｔＴｏｒｒｅｎｔスウォームネットワークをいつでも（オブジェクト１４を完全に受信する前であっても）脱退することを選ぶことができる。ノードの各オペレーターは、独立に「自分本位」に動作し、すなわち、参加がオペレーターに利益を与える限りにおいてのみネットワークに参加（並びにそのノードのアップロード容量及びダウンロード容量をスウォームネットワークに提供）するものと考えることもできる。例えば、ノードのオペレーターは、オブジェクトを受信（ダウンロード）することによって利益を受けるが、特に、そのようなアップロード容量が他の使用によって制限及び転用される場合には、オブジェクトを他のノードに送信（アップロード）することから直接利益を受けない。ノードのオペレーターは、ノードのダウンロード容量を完全に利用してオブジェクトの迅速な受信を達成するが、ノードのアップロード容量を制限又は除去してより望ましいタスクにアップロード容量を保存することにより協調同期で「不正行為（cheat）」を試みる場合がある。ＢｉｔＴｏｒｒｅｎｔスウォームネットワークは、リーチ１４によるチャンクの再分配のレートに比例したレートでオブジェクト１４のチャンクの配信をリーチに割り当てることによって「不正行為」を低減するように構成される。したがって、アップロード容量を絞る（又は単にスウォームネットワークに寄与するアップロード容量がほとんどない）リーチノードには、オブジェクト１４の新たなチャンクが低いレートで提供される。逆に、ＢｉｔＴｏｒｒｅｎｔスウォームネットワークは、チャンクの再分配に熟達したリーチノードを認識することにより、及び場合によっては（シード等による）そのような配信をあまり良く動作しないノードへのチャンクの配信よりも優先して、オブジェクト１４の新たなチャンクを高レートで提供することによってそのような再分配に報いることにより、ノードへのチャンクの分配間の「公平性」を促進するように構成される。加えて、ＢｉｔＴｏｒｒｅｎｔネットワークを介して通常、交換される多くのオブジェクトは、全てのチャンクが受信されるまで、ノードオペレーターに役立たない場合があるので、ネットワークは、ほぼ全てのチャンクを受信したリーチへのチャンクの配信を、記憶しているチャンクがそれよりも少ないリーチへのチャンクの配信よりも優先することができる。逆に、ノードは、チャンクをほとんど又は全く記憶していない最近加入したリーチへのチャンクの配信のレートを大幅に制限することができる（その理由は、特にそのようなリーチのオペレーターは、オブジェクトの完成により近いリーチのオペレーターよりもスウォームネットワークとの接続を切断する可能性が高いからである）。
【００２０】
[0031]第２の例として、ＢｉｔＴｏｒｒｅｎｔスウォームネットワークは、オブジェクトの変更バージョン又は損傷バージョンを分配する悪意又は不備のあるノードを検出、報告、及び軽減するように設計される。多くの実施態様では、オブジェクトを構成するチャンクは、スウォームネットワークの形成時に固定され、信頼できる（authoritative）チャンクリストが、それぞれのチャンクのハッシュコードを示す１つ又は複数の指定されたシードノード（「追跡者（tracker）」ノードとして識別される）によって全てのノードに提供される。受信ノードは、ノードからチャンクを受信すると、そのチャンクのハッシュコードに従ってそのチャンクの内容を検証する。チャンクが（分配ノード等によって）変更又は損傷を受けている場合、受信ノードは、送信ノードを不備又は悪意のある可能性があるとして追跡者ノードに報告することができ、追跡者ノードは、そのようなノードをスウォームネットワークから追い払うことができる。
【００２１】
[0032]ＢｉｔＴｏｒｒｅｎｔスウォームネットワークのこれらの特殊化は、不正行為の削減、公平性の促進、並びに悪意又は不備のあるノードの検出及び追い払いを行うことによって、信頼できないスウォームノード間での静的オブジェクトの分配を促進することができる。しかしながら、他のシナリオでは、ＢｉｔＴｏｒｒｅｎｔスウォームネットワーク等のスウォームネットワークのこれらの態様は、役立たないか又は不要である場合があり、オブジェクトの効率的な分配を低減する場合がある。図６は、１つのそのようなシナリオの一例示の説明図９０を提示している。スウォームネットワークのノードは、ユーザー９２によって操作される１組のコンピューターを含む。コンピューターは、例えば、ワークステーション９４、ノートブックコンピューター９６、及びセルフォンデバイス９８を含むことができる。ユーザー９２は、これらのコンピューターのそれぞれにオブジェクト１４の局所表現を記憶することを望む場合があり、コンピューターがネットワークを介して通信することができるときは、そのような全てのコンピューター間でオブジェクト１４を同期させることを望む場合がある。さらに、ユーザー９２は、ユーザー９２のコンピューティング環境１０２の信頼できるバージョンを記憶するコンピューティング環境ホスト１００を利用することができる。このコンピューティング環境１０２は、ファイル、アプリケーション、アプリケーション構成情報、ユーザープロフィール、セキュリティクレデンシャル（ユーザー名及びパスワード、証明書、並びに公開暗号鍵及び私有暗号鍵等）等のユーザー９２が用いるオブジェクト一式を含む。コンピューティング環境１０２は、コンピューティング環境ホスト１００が各コンピューターに（全体的又は部分的に）配備することができる。コンピューティング環境ホスト１００は、コンピューティング環境１０２にオブジェクト１４の局所（かつ場合によっては信頼できる）表現も含むことができ、オブジェクト１４の同期に参加することができる。
【００２２】
[0033]例示のシナリオ９０は、いくつかの態様において、ＢｉｔＴｏｒｒｅｎｔスウォームネットワークがカスタマイズされているシナリオとは異なる。第１の例として、ユーザー９２は、コンピューター又はコンピューティング環境ホスト１００のうちの任意のものを用いてオブジェクト１４を変更することができ、そのような変更は、全てのコンピューター及びコンピューティング環境ホスト１００の間で伝播されることになる。この態様は、静的オブジェクト１４を推定するとともに、特定のノードによるオブジェクト１４に対する変更を、オブジェクト１４の悪意又は不備のある改変の証拠とみなす多くのスウォームネットワーク（ＢｉｔＴｏｒｒｅｎｔを含む）と異なる。第２の例として、ＢｉｔＴｏｒｒｅｎｔスウォームネットワークの各ノードは、スウォームネットワークに参加することを特に選ぶのに対して、図６の例示のシナリオ９０のコンピューターは、（特に、更新が自然発生的又は予想外である場合に）オブジェクト１４の更新を受信するために、新しく形成されたスウォームネットワークに「引き込む」ことができる。第３の例として、ＢｉｔＴｏｒｒｅｎｔネットワークは、ネットワーク容量の消費の「公平性」を確立しようとするとともに、ノードオペレーターによる不正行為を削減しようとするのに対して、図６のユーザー９２は、スウォームネットワークのノードを完全に信頼し、「公平性」の追跡及び調整並びに不正行為の回避よりも、オブジェクト１４の迅速かつ完全な配備の方を望む場合がある。例えば、ＢｉｔＴｏｒｒｅｎｔネットワークは、ノードによって再配信されるチャンクのレートと比例してノードへのチャンクの配信を調整しようとするのに対して、このネットワークのユーザー９２は、例えば、達成可能である限り完全にノードのアップロード容量を利用することによって、全てのノードへのオブジェクト１４の高レートの配信を達成することを好む場合がある。第４の例として、ＢｉｔＴｏｒｒｅｎｔスウォームネットワークの各ノードは、比較的自分本位でかつ個別に動作して、ノードオペレーターの目標を達成することができるのに対して、図６に示すスウォームネットワークのノードは、全体論的に動作することできる。例えば、オブジェクトのチャンクを受信するレートが低いか又は存在しない場合であっても、高いアップロード容量を有するノードは、全てのノード間でのオブジェクト１４の分配を促進するために、アップロード容量の多く又は全てをオブジェクト１４の分配に割り当てる方を選ぶ場合がある。
【００２３】
[0034]協調ネットワークのこれらの差異のある特徴を考慮すると、効率的な方法でオブジェクトセットの局所表現を記憶するようにそれぞれ構成された１組のコンピューターにわたってオブジェクトセットを同期させる技法を考案することができる。この協調ネットワークでは、どのノードもオブジェクトに対する変更を生成する場合があり、変更は、不正行為の低減、「公平性」の促進、バランス、及び悪意又は不備のあるノードの検出等の競合的な態様を必ずしも考慮することなく、ネットワーク全体にわたって直ちにかつ確実に伝播される。そのようなスウォームネットワークは、各ノードが自身のオブジェクトセット内に更新オブジェクトを識別すると他のノードに通知する「テル（tell）」アーキテクチャと、ノードが、更新オブジェクトを記憶していないノードへの更新オブジェクトの送信を開始する「プッシュ（push）」アーキテクチャとを利用することができる。したがって、この相互作用を制御するノード１８は、更新オブジェクト１４（又はそのチャンク）を、該更新オブジェクト１４を受信するように構成されたクライアントとして動作するノード１８に配信するサーバーとして動作する。さらに、ネットワークのノードが完全相互接続され、同等のレートで通信することができても、更新オブジェクトのネットワーク伝播は、（図４の第４の例５０等における）スケーリング問題を低減するために、小さなノード（「近隣者」ノード）群内で行うことができる。
【００２４】
[0035]図７は、ネットワーク１６を介して接続された１組のノード１８（オブジェクト１４の局所表現を記憶しかつオブジェクト１４に対する変更を他のコンピューターと同期させるようにそれぞれ構成された１組のコンピューター等）（文字、例えばＮＡ＝ノードＡ及びＮＢ＝ノードＢによって識別される）にわたるオブジェクト１４の同期を伴う一例示のシナリオ（第１の時点１１０、第２の時点１１２、及び第３の時点１１４において示される）を提示している。オブジェクト１４は、例えば、ノードによって作成された新たなオブジェクト、又はノードにわたって存在するが或るノードで更新されるオブジェクト、又は別の送信元からノードによって受信されたオブジェクトを含むことができる。図７には相互接続は完全に示されていないが、ノード１８は完全相互接続されていること、及びどの２つのノード１８もネットワーク１６を介して相互にアクセス可能であることを理解することができる。
【００２５】
[0036]図７の例示のシナリオの第１の時点１１０において、ノードＣは、オブジェクト１４を受信し、オブジェクト１４を他のノード１８と同期させるように努める。オブジェクト１４をノード１８の全てと同期させる試みは、又はオブジェクト１４に対する更新をノード１８の全てに通知する試みでさえも、図４に示すように、同期のレートを制限する大きなネットワーク輻輳につながる場合がある。それとは逆に、ノードＣは、最初に、ノード１８のサブセットを相互にアクセス可能な「近隣者」として選択する（すなわち、このサブセットでは、各ノードは、選択された近隣者の全てにアクセス可能である）。例えば、ノードＣは、ノードＢ、Ｄ、及びＨを近隣者として選択することができる。ノードＣは、１組の近隣者を選択すると、次に、どの近隣者が、更新オブジェクト１４を記憶していないのかを判断する。（例えば、ノードＣは、各近隣者に更新を通知することができ、更新オブジェクト１４を近隣者に送信することを申し出ることができ、近隣者は肯定的又は否定的に応答することができる。）近隣者が更新オブジェクト１４を記憶している場合、ノードＣと近隣者との間でそれ以上の同期は必要とされない。しかしながら、図７の第１の時点１１０において、選択された近隣者Ｂ、Ｄ、及びＨは、更新オブジェクト１４を記憶しておらず、記憶していないことをノードＣに示す。
【００２６】
[0037]図７に更に示すように、ノードＣは、どのノード１８が更新オブジェクト１４を記憶していないのかを判断した後、更新オブジェクト１４を記憶していない相互にアクセス可能な各近隣者をスウォームネットワーク１１６のスウォームノード１１８として指定して、スウォームネットワーク１１６を形成する。（ノードＣもスウォームノード１１８として参加することができるが、ノードＣは、スウォームノード１１８の創設者であるので、いずれのチャンクも受信する必要はなく、スウォームネットワーク１１６内では、更新オブジェクト１４の送信元とみなすことができる。）ノードＣ  １８は、スウォームネットワーク１１６の形成をスウォームノード１１８に通知し、スウォームネットワーク１１６のスウォームノード１１８への更新オブジェクト１４の送信を開始する。例えば、第２の時点１１２に示されるように、ノードＣは、オブジェクト１４を、１組のチャンク、すなわち個別に配信することができるオブジェクト１４のデータユニットにセグメント化、すなわち「チャンキング」することができる。図７のオブジェクト１４は、４つのチャンク「チャンキング」され、ノードＣは、手始めに、オブジェクト１４のさまざまなチャンクをスウォームノード１１８に配信する。同時に、各スウォームノード１１８（ノードＢ、Ｄ、及びＨ）は、チャンクを受信して、スウォームノード１１８のオブジェクトストアにそれらのチャンクを記憶することができ、他のスウォームノード１１８にチャンクを再配信することができる。例えば、第２の時点１１２において、ノードＨは、第２のチャンク６８を記憶しており、ノードＢが第２のチャンク６８を有していないことを識別することができ、したがって、第２のチャンク６８をノードＢに再分配することができる。チャンクのこのスウォーミング配信（swarming delivery）は、スウォームノード１１８の全てがオブジェクト１４のチャンクの全てを有するまで続けることができ、スウォームノード１１８の全てがオブジェクト１４のチャンクの全てを有した時点で、スウォームネットワーク１１６は終了することができる。
【００２７】
[0038]一方、スウォームネットワーク１１６が終了すると、それまでのスウォームネットワーク１１６のスウォームノード１１８のそれぞれは、その時点で、それぞれのオブジェクトストアに記憶されている更新オブジェクト１４を識別することができる。その結果、ノードＢ、Ｄ、及びＨのそれぞれは、新たな１組の近隣者を選択することができ、各近隣者が更新オブジェクト１４を記憶しているか否かを判断することができる。例えば、ノードＢは、ノードＡ、Ｆ、及びＧを近隣者として選択することができ、これらのノードのいずれも更新オブジェクト１４を記憶していないと判断することができ、更新オブジェクト１４の同期のためにこれらのノード１８をスウォームノード１１８として指定することによってスウォームネットワーク１１６を形成することができる。ノードＢは、次に、スウォームネットワーク１１６のスウォームノード１１８のそれぞれに通知することができ、スウォームノード１１８間での再分配のためにスウォームノード１１８へのチャンクの送信を開始することができる。同様に、ノードＨは、ノードＬ、Ｍ、及びＮを近隣者として選択することができ、これらのノード１８が更新オブジェクト１４を記憶していないと判断した後、これらのノード１８をスウォームノード１１８として指定してスウォームネットワーク１１６を形成することができ、ノードＤは、ノードＥ、Ｉ、及びＪを近隣者として選択して、これらのノードも更新オブジェクト１４を記憶していないと判断することができ、これらのノードのスウォームネットワーク１１６を形成することができる。第３の時点１１４において、これらの３つのスウォームネットワーク１１６は、ノード１８にわたってより広範囲に、更新オブジェクト１４を分配するように動作し、アドホックスウォームネットワークによる（例えば、ノードＫ及びＯへの）更なる伝播によって、全てのノード１８の間でのオブジェクト１４の同期を完了させることができる。
【００２８】
[0039]図７の例示のシナリオに基づいて、この技法のいくつかの追加の態様を示すことができかつ／又は理解することができる。第１の例として、ノード１８は、近隣者が更新オブジェクト１４を既に記憶していることに気付くことができる。これは、例えば、近隣者が、別のスウォームネットワークによって、更新オブジェクト１４を既に受信しているか又は既に受信した場合に起こることがある。この場合、ノード１８は、その近隣者をスウォームネットワークから単に除外することができる。代替的に、特に、その近隣者が予備のアップロード容量を有する場合には、その近隣者を追加の「シード」としてスウォームネットワークに含めておくことが有利な場合がある。第２の例として、スウォームノード１１８が更新オブジェクト１４のチャンクを受信しているレートにかかわらずチャンクを可能な限り高速に分配するために、スウォームノード１１８は、そのアップロード容量の多く又は全てをスウォームネットワーク１１６に与えるように構成することができる。この割当ては、スウォームノード１１８に「公平」でない場合があるが、スウォームネットワーク１１６は、ＢｉｔＴｏｒｒｅｎｔスウォームネットワークの独立したノードのオペレーターに関係することがあるように、ノードに対する更新オブジェクト１４の迅速な同期を促進するように形成され、「公平性」の促進も不正行為の低減もするようには形成されない。第３の例として、ノードＣは、スウォームネットワーク１１６のスウォームノード１１８への更新オブジェクト１４の配信が完了すると、（例えば、ネットワーク１６のノード１８の間で計算能力又はネットワーク利用のロードバランシングを促進するために）自身のデータ交換への参加を終了することができる。この変形形態は、例えば、特に、近隣者の選択がネットワーク１６のノード１８を比較的均一な方法でクラスタリングするように設計されている場合、近隣者選択が計算処理的に困難でかつ／又はリソース集約的なプロセスとなる場合があるので、役立つことができる。したがって、各ノード１８は、自身のネットワーク規模の同期に対する貢献として、更新オブジェクト１４を自身の近隣者の間で同期させることができる。代替的に、ノード（ノードＣ等）が、特定のオブジェクト１４の同期のために近隣者をアドホックに選択することを認められている場合、ノードは、自身と第１の近隣者セットとの同期を完了した後、更新オブジェクト１４をまだ記憶していない新たな１組の近隣者を選択するように努めることができ、その１組の近隣者間での交換のために第２のスウォームネットワーク１１６を形成することができる。
【００２９】
[0040]図８は、本明細書で検討されている技法の第１の実施形態を提示している。この第１の実施形態は、プロセッサーを有するコンピューターによって記憶されたオブジェクトセットのオブジェクト１４を、少なくとも１つのネットワーク１６を介してアクセス可能な少なくとも１つのノード１８によって記憶されたオブジェクトセットの対応するオブジェクトと同期させる一例示の方法１２０を含む。この例示の方法１２０は、１２２から開始し、同期を実行するように構成された命令をプロセッサー上で実行する（１２４）ことを含んでいる。これらの命令は、少なくとも１つのネットワーク１６を介してコンピューター及び近隣者セットの他の近隣者にアクセス可能な少なくとも１つの近隣者を含む近隣者セットをノード１８から選択する（１２６）ように構成することができる。命令は、オブジェクトセットにおいて更新オブジェクト１４を識別すると（１２８）、更新オブジェクト１４を記憶していない近隣者を決定し（１３０）；更新オブジェクト１４を記憶していない近隣者を含むスウォームノード１１８のスウォームネットワーク１１６を形成し（１３２）；更新オブジェクト１４についてスウォームネットワーク１１６が形成されたことをスウォームノード１１８に通知し（１３４）；そして、スウォームネットワーク１１６を用いて、更新オブジェクト１４をスウォームノード１１８に送信する（１３６）ように構成することもできる。例示の方法１２０は、スウォームネットワーク１１６を構成するノード１８へのオブジェクト１４の配信を達成すると、それによって、オブジェクトの同期を達成し、したがって、１３８で終了する。
【００３０】
[0041]図８の例示の方法１２０は、コンピューターによる、１組のノードへの更新オブジェクト１４の配信を達成することができるが、コンピューターが、更新オブジェクト１４の送信元として動作する別のノード１８によって形成されたスウォームネットワーク１１６に参加することによって、更新オブジェクト１４を受信するようにも構成されている（すなわち、コンピューターを、この同期技法においてサーバーとしてだけでなく、クライアントとしても構成することができる）場合には、更なる利点を達成することができる。図９は、オブジェクトストア内のオブジェクト１４の同期の過程で、更新オブジェクト１４を受信する一例示の方法１４０を示している。この例示の方法１４０は、例えば、プロセッサー上で実行される命令を更に構成することよって達成することができる。この例示の方法１４０では、送信元が更新オブジェクト１４についてコンピューターを含むスウォームネットワーク１１６を形成したことの通知があると（１４４）、命令は、１４２から開始し、対応する更新オブジェクト１４をオブジェクトストアに作成する（１４６）ように更に構成することができる。命令は、スウォームノード１１８がオブジェクト１４を受信するまで、スウォームネットワーク１１６に参加するように構成することもできる。この参加は、オブジェクト１４を受信すると、オブジェクト１４をオブジェクトストアに記憶する（１５０）こと、及びオブジェクト１４を記憶していないスウォームノード１１８にオブジェクト１４を送信する（１５２）ことを含むことができる。最後に、命令は、スウォームノード１１８がオブジェクト１４を受信したと判断すると、スウォームネットワーク１１６を終了するように構成することができる。例示の方法１４０は、スウォームネットワーク１１６を用いてオブジェクト１４の受信及び再分配を達成すると、ノード１８にわたるオブジェクト１４の同期を更に促進することができ、したがって、１５６で終了する。
【００３１】
[0042]図１０は、プロセッサー１６４と少なくとも１つのオブジェクト１４を記憶するように構成されたオブジェクトストア１６６とを有するコンピューター１６２を伴う一例示のシナリオ１６０内における本明細書で検討されている技法の別の実施形態を示している。コンピューター１６２は、ネットワーク１６に接続することができ、ネットワーク１６を介して１組のノード１８に相互にアクセス可能とすることができる。ノード１８のそれぞれも、オブジェクト１４の対応する局所表現を記憶するオブジェクトストア１６６を含むことができる。したがって、例示のコンピューター１６２は、ノード１８と協調して、オブジェクトストア１６６内の更新オブジェクト１４を同期させることができる。この協調は、本明細書で検討されている技法を利用するように構成された一例示のシステム１６８をコンピューター１６２に含めることによって達成することができる。例えば、例示のシステム１６８は、近隣者選択構成要素１７０を含むことができる。近隣者選択構成要素１７０は、少なくとも１つの近隣者を含む近隣者セット１７２をノード１８から選択するように構成することができる。この少なくとも１つの近隣者は、少なくとも１つのネットワーク１６を介してコンピューター１６２及び近隣者セット１７２の他の近隣者にアクセス可能である。例示のシステムは、スウォームネットワーク形成構成要素１７４も含むことができる。スウォームネットワーク形成構成要素１７４は、更新オブジェクト１４を記憶していない近隣者セット１７２内の近隣者を決定し；更新オブジェクト１４を記憶していない近隣者を含むスウォームノード１１８のスウォームネットワーク１１６を形成し；そして、更新オブジェクト１４についてスウォームネットワーク１１６が形成されたことをスウォームノード１１８に通知するように構成することができる。最後に、例示のシステム１６８は、スウォームネットワーク送信構成要素１７６を含むことができる。スウォームネットワーク送信構成要素１７６は、スウォームネットワーク１１６を用いて、更新オブジェクト１４をスウォームノード１１８に送信するように構成することができる。例示のシステム１６８は、スウォームネットワーク１１６の形成及びオブジェクトストア１６６内の更新オブジェクト１４の、スウォームノード１１８への分配を達成すると、それによって、オブジェクトセットのオブジェクト１４の同期を促進する。
【００３２】
[0043]本明細書で検討されている技法の更に別の実施形態は、コンピューターの少なくとも１つのプロセッサーによって実行されると、該少なくとも１つのプロセッサーに、オブジェクトセットのオブジェクト１４を、ネットワーク１６を介してコンピューターにアクセス可能とすることができるノード１８によって記憶された対応するオブジェクト１４と同期させる命令を含むコンピューター可読ストレージ媒体を含んでいる。これらの方法で考案することができる一例示のコンピューター可読媒体が図１１に示されている。図１１において、実施態様１８０は、コンピューター可読媒体１８２（例えば、ＣＤ−Ｒ、ＤＶＤ−Ｒ、又はハードディスクドライブのプラッター）を含む。このコンピューター可読媒体１８２上には、コンピューター可読データ１８４がコード化されている。このコンピューター可読データ１８４は、更には、本明細書で述べる原理に従って動作するように構成された１組のコンピューター命令１８６も含む。１つのそのような実施形態では、プロセッサー実行可能命令１８６は、図８の一例示の方法１２０等、コンピューターによって記憶されたオブジェクトセットの更新オブジェクトを、ネットワークを介してアクセス可能な少なくとも１つのノードによって記憶された対応するオブジェクトと同期させる方法を実行するように構成することができる。別のそのような実施形態では、プロセッサー実行可能命令１８６は、図１０の例示のシステム１６８等、コンピューターによって記憶されたオブジェクトセットの更新オブジェクトを、ネットワークを介してアクセス可能な少なくとも１つのノードによって記憶された対応するオブジェクトと同期させるシステムを実施するように構成することができる。本明細書で提示した技法に従って動作するように構成された多くのそのようなコンピューター可読媒体は、当業者が考案することができる。
【００３３】
[0044]本明細書で検討されている技法は、多くの態様の変形形態で考案することができ、いくつかの変形形態は、これらの技法及び他の技法の他の変形形態に対して更なる利点を提示することができかつ／又は不利な点を低減することができる。さらに、いくつかの変形形態は、組み合わせて実施することができ、いくつかの組合せは、相乗効果を有する協調による利点の追加及び／又は不利な点の削減を特色とすることができる。これらの変形形態をさまざまな実施形態（例えば、図８の例示の方法１２０及び図１０の例示のシステム１６８）に組み込んで、そのような実施形態に対して個々の利点及び／又は相乗効果を有する利点を授けることができる。
【００３４】
[0045]これらの技法の実施形態間で異なり得る第１の態様は、スウォームネットワーク１１６を形成して用いることによりオブジェクト１４の更新をノード１８に送信する方法に関するものである。これらの変形形態は、例えば、コンピューターが図８の例示の方法１２０等に従ってスウォームネットワーク１１６でサーバー又は送信元として機能している間、適用することができる。
【００３５】
[0046]この第１の態様の第１の変形形態は、更新オブジェクト１４の識別に関するものである。この識別は、他のノード１８とのオブジェクト１４の同期をトリガーすることができる。同期は、例えば、オブジェクトストア１６６内での新たなオブジェクト１４の作成又はオブジェクトストア１６６内でのオブジェクト１４の更新によってトリガーすることができる。また、同期は、別のデバイス、ネットワーク１６の別のノード１８、又はコンピューティング環境ホスト１０２等の別の送信元から新たなオブジェクト１４又はオブジェクト１４の更新バージョンを受信することによってトリガーすることもできる。さらに、同期は、例えば、オブジェクトストア１６６内で、更新オブジェクトに気付くことによってトリガーすることもできる。例えば、コンピューターは、ネットワーク１６に加入してノード１８に接続したとき、自身のオブジェクトストア１６６を他のノード１８のオブジェクトストアと比較して、自身がオフラインであった間に起こっていた可能性のある変更に気付くことができる。コンピューターは、そのような更新オブジェクト１４に気付くと、更新オブジェクト１４を他のノード１８と同期させることができる。１つのそのような実施形態では、例えば、ネットワーク１６を飽和させるおそれがある多くのノード１８のブロードキャストクエリを回避するために、変更に気付くために調べる１組の他のノード１８を以前選択された１組の近隣者に制限することができる。したがって、更新オブジェクト１４に気付くためにコンタクトするノード１８を制限することによって、本明細書で検討されている技法のスケーラビリティを促進することができる。
【００３６】
[0047]この第１の態様の第２の変形形態は、更新オブジェクト１４についてスウォームノード１１８とみなされる１組の近隣者の、ノード１８による選択に関するものである。近隣者セットの選択は、図４で示した問題を回避するのに役立つことができる。図４では、送信元ノード１２が、更新オブジェクト１４を過度に大きな１組の相互接続されたノード１８と同期させようと試み、ネットワーク輻輳及び非効率的な同期を引き起こしている。近隣者の選択は、任意とすることができるが、任意選択の結果、ネットワーク１６は、完全相互接続されたものとは言えないものとなるおそれがあり、このネットワークでは、第１のノード１８及び第２のノード１８が通信することができない。したがって、近隣者の選択は、ネットワーク１６の分割をもたらすおそれがある近隣者の選択を軽減するように構成することができる。近隣者の選択は、（例えば）物理的近接性、ネットワークトポロジー（例えば、同じローカルエリアネットワーク上又は或る範囲のＩＰアドレス内のノードのサブセット）、又は送信元ノード１２と近隣者との間の比較的低いネットワークレイテンシ等のさまざまな他の因子に基づくこともできる。この変形形態の第２の例として、送信元ノード１２は、任意の数の近隣者を含む近隣者セットを任意の方法で形成することができる。例えば、送信元ノード１２は、空の近隣者セットから開始することができ、ノード１８と選択された近隣者との相互アクセス性について該ノードを反復的に調べることができ、そして、そのようないずれかのノード１８を近隣者セットに加えることができる。送信元ノード１２は、近隣者セットの任意の特定のサイズを指定することもできる（例えば、近隣者セットがｌｏｇ２（Ｎ）個の近隣者等の有利なサイズに達するまで、近隣者を近隣者セットに追加することができる。ここで、Ｎは、ネットワーク１６を介してアクセス可能なノードを数えたものある）。この変形形態の第３の例として、送信元ノード１２は、更新オブジェクト１８の同期の開始時、例えば、更新オブジェクト１８の識別時に近隣者を選択することができる。これは、例えば、第１のスウォームネットワーク１１６を終了した後、送信元ノード１２が更新オブジェクト１８の伝播を促進することを可能にするのに望ましい場合がある。第１のスウォームネットワーク１１６の終了時には、送信元ノード１２は、新たな１組の近隣者が更新オブジェクト１４を記憶していない場合に、そのような近隣者を選択し、第２のスウォームネットワーク１１６を形成することができる。代替的に、近隣者の選択は、ノード１８が少なくとも１つのネットワーク変更事象を検出したとき（例えば、ノード１８がネットワーク１６に接続したとき、新たなノード１８がオンラインになったとき、選択された近隣者がオフラインになったとき、又はノード１８がネットワーク１６の分割を検出したとき）に行うこともできる。これは、特に、近隣者が、レイテンシを調べることによって又はネットワーク１６の能力をモデル化することによって選択される場合に、近隣者の選択が計算集約的又はリソース集約的となる場合があるので、有利とすることができる。
【００３７】
[0048]この第１の態様のこの第２の変形形態に従って実施される１つのそのような実施形態では、ネットワーク１６のノード１８は、ハイパーキューブトポロジーに従ってモデル化することができる。このトポロジーによれば、各ノード１８がハイパーキューブの各エッジに沿って他のノード１８を近隣者として選択するように、ネットワーク１６のそれぞれのノード１８を接続することができる。ハイパーキューブトポロジーの第１の利点は、単に、ハイパーキューブ内におけるノード１８の位置を識別し、さまざまなエッジにおいて接続されたノード１８を近隣者として選択することによって、近隣者が簡単に選択されることを含んでいる。例えば、完全相互接続されたネットワーク１６のノード１８を１〜Ｎ（ネットワーク１６のノード１８の数を表す）と数えることができる場合、特定のノード（ｎと数えられる）の近隣者（０〜ｉ）を以下の式に従って識別及び選択することができる。
【００３８】
【数１】
2012528402.tif 000003
【００３９】
したがって、新たなノード１８は、単に、該新たなノード１８の計数値を識別し、該新たなノード１８がハイパーキューブモデルのエッジによって接続されたノード１８の計数値を計算することによって、該新たなノード１８の近隣者を識別及び選択することができる。
【００４０】
[0049]この第１の態様の第３の変形形態は、近隣者が更新オブジェクト１４を記憶しているか否かを識別する方法に関するものである。第１の例として、各ノード１８は、他のノード１８（特に近隣者）によって記憶されたオブジェクト１４のリストを記憶することができる。ノード１８は、更新オブジェクト１４を識別すると、最初に他のノード１８（特に近隣者）に通知することができ、それらの他のノード１８のそれぞれは、該ノードによって記憶されたオブジェクト１４の自身の内部リストを更新することができる。その後、ノード１８は、近隣者を識別してスウォームネットワーク１１６に追加すると、自身の近隣者によって記憶されたオブジェクト１４の自身のリストを参照することができる。これによって、ノード１８が（例えば、別の送信元から又は別のスウォームネットワークを介して）更新オブジェクト１４を既に受信した近隣者を除外することを可能にすることができる。第２の例として、更新オブジェクト１４を記憶しているノード１８は、各近隣者が更新オブジェクト１４を記憶しているか否かを、そのような近隣者をポーリングすることによって判断することができる。例えば、近隣者ごとに、ノード１８は、該近隣者に、更新オブジェクト１４の識別子（例えば、オブジェクト１４の名称、他との区別を表すロケーション、ＧＵＩＤ、又はｉｎｏｄｅ番号）及び更新オブジェクト１４の内容指示子（例えば、オブジェクト１４のハッシュコード、バージョン番号、又は最新の変更日）を送信することができる。次に、ノード１８は、近隣者が更新オブジェクト１４を記憶しているか否かの通知を該近隣者から受信することができる。近隣者は、例えば、識別子及び内容指示子を自身のオブジェクトストア１６６内のオブジェクト１４と比較することによって、この通知を生成することができる。
【００４１】
[0050]この第１の態様の第４の変形形態は、改変されたオブジェクト１４と、他の表現のオブジェクト１４の改変を達成するためにスウォームネットワーク１１６を介して交換されたデータとの間の関係に関するものである。第１の例として、オブジェクトの改変が検出されると常に、スウォームネットワーク１１６は、オブジェクト１４の全内容を交換することができる。第２の例として、スウォームネットワーク１１６は、オブジェクト１４のうち、該オブジェクト１４の前バージョンと現バージョンとの間で変更された部分のみを交換することができる。この例は、例えば、オブジェクトに対する変更が特定のチャンクに制限されている場合に特に有利とすることができ、それによって、スウォームネットワーク１１６は、改変されたチャンクのみを交換することができ、改変されたチャンクは、ノード１８のオブジェクトストア１６６内のそのようなチャンクの従前のバージョンに上書きすることができる。代替的に、オブジェクト１４は、内部構造（例えば、データベースを構成するレコードのアレイ）を規定することができ、ノード１８は、変更された構造の部分（例えば、データベース内の新たなレコード、更新されたレコード、又は削除されたレコード）のみを交換することができる。第３の例として、スウォームネットワーク１１６は、オブジェクト１４を更新バージョンに更新するために各ノード１８が適用することができる差分パッチを交換することができる。例えば、差分パッチは、特定のロケーションにオブジェクト１４のデータブロックを挿入するとともに別のデータブロックを削除するように各ノード１８に命令することができる。差分パッチ及び部分的更新は、例えば、大きなオブジェクトに対して小さな更新が行われる場合に有利とすることができる一方、オブジェクト全体の再分配は、オブジェクトが小さい場合又は変更が広範囲にわたる場合に有利とすることができる。
【００４２】
[0051]そのような１組の変形形態は、各チャンクが或るスウォームノード１１８から別のノード１１８に個別に配信することができるオブジェクト１４のデータユニットを含む、１組のチャンクにオブジェクト１４を「チャンキング」することに関するものである。この変形形態では、「チャンキング」アルゴリズムを適用して、オブジェクト１４をチャンクにセグメント化することができる。多くのそのようなチャンキングアルゴリズムが、本明細書で検討されている技法と適合することができる。例えば、チャンキングアルゴリズムは、多くの方法でセグメントを選ぶことができ、例えば、このアルゴリズムは、固定サイズのチャンクを生成することもできるし、オブジェクト１４の内部構造を識別して該内部構造に従いオブジェクト１４をグメント化することもできるし、任意の位置にチャンクを生成することもできる。これらの技法に適することができる１つのそのようなチャンキングアルゴリズムはリモート差分圧縮（ＲＤＣ）である。このＲＤＣでは、オブジェクト１４をスキャンして、オブジェクト１４のそれぞれの部分内の極大値を識別することができ、そのような極大値間に入るようにオブジェクト１４のチャンクを選択することができる。このチャンキングアルゴリズムは、例えば、オブジェクト１４の１つの位置における変更（例えば、バイトの挿入）がオブジェクト１４における後続の全てのチャンクの改変を間違ってシグナリングする可能性を低減するのに特に適している場合がある。さらに、リモート差分圧縮は、大きなオブジェクト１４の複数レベルのチャンクを認めている。例えば、オブジェクト１４を一連のチャンクにチャンキングすることができ、各チャンク内にそれよりも小さなチャンクを識別すること等が可能である。オブジェクト１４の小さな部分（例えば単一バイト）のみが変更された場合、大きなチャンクを検査して変更を識別し、変更された大きなチャンク内にあるそれよりも小さなチャンクを検査して変更の箇所を更に突き止め、次いで、変更を含むその小さなチャンクのみを１つ又は複数の近隣者に要求することがより効率的な場合がある。代替的に、オブジェクト１４が、１組のアイテム（例えば、同期のために１つのオブジェクトとして共にバッチされた１組の小さなオブジェクト）を含む場合、各アイテムをチャンクとして選択することができる。特定のチャンキングの変形形態では、他との区別を表すデータパターン（例えば、特定の１組のバイト）をオブジェクト内で識別することができ、それに応じてオブジェクト１４をチャンキングすることができる。
【００４３】
[0052]オブジェクトのチャンキングは、いくつかの理由から有利とすることができる。第１の例として、オブジェクト１４内の小さな変更（データの挿入、改変、又は削除）が、少数のチャンク内にしか含まれない場合があり、チャンクの差分比較が、オブジェクト１４を更新するには特定のチャンクのみを交換することを示す場合がある。第２の例は、欠落したチャンクとビットごとに完全に同一であるチャンクを再利用する可能性を含んでいる。オブジェクト１４内の第１のチャンクが、オブジェクト１４内又は別のオブジェクト１４内の第２のチャンクと同一である場合、第１のチャンクを有するが第２のチャンクを有しないノード１８は、単に第１のチャンクを複製するだけで、オブジェクトストア１６６内に第２のチャンクを作成することでき、したがって、ネットワーク１６を介して第２のチャンクを転送することを回避することができる。
【００４４】
[0053]更なる利点は、これらの変形形態に基づくこれらの技法の特定の実施形態によって達成することができる。図１２は一例示のシナリオ１９０を示している。このシナリオ１９０は、送信元ノード１２が、スウォームネットワーク１１６を構成するスウォームノード１１８にネットワーク１２を介してオブジェクト１４を送信するように構成されていることを特色とする。送信元ノード１２は、更新オブジェクト１４を少なくとも１つのチャンクにチャンキングすることができ（この例示のシナリオ１９０では、４つのそのようなチャンクが形成されている）、次に、内部に記憶されたスウォームチャンクマップ１９２を初期化することができる。このスウォームチャンクマップ１９２は、それぞれのスウォームノード１１８が、更新オブジェクト１４のそれぞれのチャンクを記憶しているか否かを示す。スウォームチャンクマップ１９２は、例えば、それぞれのチャンクがそれぞれのスウォームノード１１８によって記憶されている箇所では１を示し、それ以外の箇所では０を示す２次元アレイに配列されたビットマップを含むことができる。送信元ノード１２は、スウォームチャンクマップ１９２を参照することにより、チャンクを選択してスウォームノード１１８に送信することができる。さらに、スウォームノード１１８は、（送信元ノード１２又は別のスウォームノード１１８のいずれかから）チャンクを受信すると、該チャンクを記憶していることを送信元ノード１２に通知することができ、送信元ノード１２は、それに応じて、スウォームチャンクマップ１９２を更新することができる。最後に、送信元ノード１２は、スウォームチャンクマップ１９２を検査することによって、スウォームノード１１８がオブジェクト１４を受信したと判断することができる。各スウォームノード１１８が、チャンクを他のスウォームノード１１８に送信するために参照されるスウォームチャンクマップ１９２を記憶及び初期化すること、及び各スウォームノード１１８が、チャンクを記憶すると他の全てのスウォームノード１１８に通知することが、更に有利な場合がある。
【００４５】
[0054]スウォームチャンクマップ１９２を含めることによって、これらの技法における更なる改善を可能にすることもできる。例えば、スウォームノード１１８（送信元ノード１２を含む）は、別のスウォームノード１１８に送信するチャンクを選択するとき、自身のオブジェクトストア内に記憶されているが、スウォームノード１１８間ではめったに記憶されない珍しいチャンクをスウォームチャンクマップ１９２に従って選択することができる。この選択によって、スウォームノード１１８間でのオブジェクト１４を構成するチャンクの均一な分配及び幅広い可用性を容易にすることができ、それによって、チャンクのアクセス性及びスウォームネットワーク１１６のロバスト性を改善することができる（例えば、オフラインになるノードが特定のチャンクの唯一の送信元であり得るシナリオを回避する）。例えば、図１２の例示のシナリオ１９０に示された時点において、送信元ノード１２は、チャンクを別のスウォームノード１１８に送信する準備ができている場合があり、スウォームチャンクマップ１９２を検査して珍しいチャンクを識別することができる。例えば、送信元ノード１２は、第１のチャンク６６が、分配範囲が最も狭いチャンクであると判断することができ、したがって、第１のチャンク６６を記憶していないスウォームノード１１８（例えば、ノードＢ、Ｃ、Ｄ、又はＥ）に送信される該第１のチャンク６６を選択することができる。
【００４６】
[0055]この第１の態様の第５の変形形態は、スウォームノード１１８と同期される更新オブジェクト１４を選択することを含んでいる。第１の例として、オブジェクトストア１６６は、他のノード１８とともに同期させるのに、個別に同期させるよりも効率的である１組のアイテムを含むことができる。例えば、アイテムは、意味論的又は論理的に関係したもの（例えば、データベース内の１組の関係したレコード又はアプリケーションをともに含む１組のリソース）とすることもできるし、高い頻度でともに更新されるものとすることもできる。アイテムは、個別にはほどんどデータを含まないか又はデータ転送をほとんど伴わない小さな更新を含む１組のアイテムを含むこともできる。代替的に、アイテムは、近時に更新された１組のアイテムを含むことができる。例えば、コンピューターは、同期される１組のアイテムをキャッシュすることができ、或る特定のしきい値（例えば、経過時間又は更新されるデータ量のしきい値）が経過すると、アイテムの全てをともに同期させるためにキャッシュすることができる。そのようなシナリオでは、個々のアイテムについて、スウォームネットワーク１１６を生成すること（スウォームノード１１８を選択しスウォームノード１１８に通知すること、オブジェクト（複数の場合もある）１４をチャンキングすること、スウォームチャンクマップ１９２を初期化すること、並びにチャンクの送信を開始することを含む）が、スウォームネットワーク１１６を介して同期されるオブジェクトバッチ内のアイテムをともにバンドルにすることよりも効率的でない場合がある。したがって、コンピューターは、オブジェクトセット内で更新オブジェクト１４を識別すると、近隣者によって記憶されていない更新オブジェクト１４を含む更新オブジェクトバッチに、更新オブジェクト１４を追加し、更新オブジェクトバッチがオブジェクトバッチしきい値を超えると、スウォームネットワーク１１６を形成するように構成することができる。
【００４７】
[0056]代替的に又は付加的に、コンピューターは、スウォームネットワーク１１６を形成することなく、単に、同期されるデータを近隣者に直接送信するだけで、小さな更新（例えば、これらの小さな更新は、１メガバイト未満等の同期される比較的小さなデータ量、１０未満等の少数の更新オブジェクト１４、及び／又は３つ未満の近隣者等の小さな近隣者セットを含んでいる）を同期させるように構成することができる。したがって、コンピューターは、小さなデータ更新（例えば、少数の更新オブジェクト１４、小さな更新オブジェクト１４、又は小さな近隣者セット）を識別すると、小さな更新オブジェクトセットを小さな近隣者セットの近隣者に送信するように構成することができる。この代替的な構成によって、送信元ノード１２がより敏速にかつスウォームネットワークの不要なオーバーヘッドを招くことなく小さなデータ更新を伝播することを可能にすることができる。
【００４８】
[0057]この第１の態様の第６の変形形態は、送信元ノード１２によって同期されるオブジェクト１４の優先順位付けに関するものである。第１の例として、低優先順位オブジェクト１４の前に又はより厳密な同期スケジュールに基づいて、高優先順位オブジェクト１４を同期させることが有利な場合がある（例えば、低優先順位オブジェクト１４に対する更新の同期は延期又はバッチすることができる一方、高優先順位オブジェクト１４の同期は敏速に行うことができる）。第２の例として、オブジェクト１４は、異なるグループに属する場合があり、第１のグループに属するオブジェクト１４を、第２のグループに属するオブジェクト１４の前に同期させることが望ましい場合がある。したがって、コンピューターは、送信元ノード１２として動作している間、優先順位に従って特定のオブジェクトを同期する順序を確立することができ、更新オブジェクト１４に対して、その優先順位に従って順に、本明細書で検討されている技法（図８の例示の方法１２０等）を実行することができる。
【００４９】
[0058]この第１の態様の第７の変形形態は、コンピューティング環境ホスト１００等、集中型オブジェクトストア及び／又はスウォームネットワーキングの集中型調整を利用するコンピューター（サーバー又は送信元ノード１２として）の構成に関するものである。１つのそのような変形形態では、コンピューティング環境ホスト１００は、どのノード１８がどのオブジェクト１４を記憶しているのかを集中的に追跡することができ、更新オブジェクト１４を同期させるために近隣者間でのスウォームノード１１８の選択に参加することができる。例えば、各ノード１８は、更新オブジェクト１４を識別すると、まず、コンピューティング環境ホスト１００に通知することができる。次に、コンピューティング環境ホスト１００は、どの近隣者が更新オブジェクト１４を記憶しているのかについて、任意のノード１８によるクエリを受けることができ、その応答は、スウォームネットワーク１１６を形成するのに用いることができる。別のそのような変形形態では、コンピューティング環境ホスト１００は、オブジェクトセットの信頼できる送信元としての機能を果たすことができる。例えば、コンピューティング環境ホスト１００は、オブジェクト１４の最新バージョンを要求に応じてを提供することができ、バージョン付け競合（versioning conflict）を解決することができ、かつ／又はオブジェクト１４を記憶している他のノード１８が利用不能である場合には、オブジェクト１４の信頼できる送信元としての機能を果たすことができる。したがって、コンピューターのオブジェクトストア１６６内のオブジェクト１４がコンピューティング環境ホスト１００のオブジェクトストア１６６内の対応するオブジェクトとしても記憶されている場合、コンピューターは、更新オブジェクト１４を識別すると、コンピューティング環境ホスト１００が更新オブジェクト１４を記憶しているか否かを判断し、記憶していない場合には、更新オブジェクト１４をコンピューティング環境ホスト１００に送信するように構成することができる。さらに、更新オブジェクト１４を近隣者と同期させる前に、更新オブジェクト１４をコンピューティング環境ホスト１００と同期させることが有利な場合がある。当業者ならば、本明細書で検討されている技法を実施すると同時に、コンピューター（例えば、送信元ノード１２又はサーバーとして）の構成において更なる特徴を実施することができる。
【００５０】
[0059]これらの技法の実施形態間で異なり得る第２の態様は、別の送信元ノード１２によって記憶された更新オブジェクト１４について形成されたスウォームネットワーク１１６に参加するようにコンピューターを構成する方法に関するものである。これらの変形形態は、例えば、コンピューターが、図９の例示の方法１４０におけるように、スウォームネットワーク１１６内でクライアント又はスウォームノード１１８として機能している間に適用することができる。
【００５１】
[0060]この第２の態様の第１の変形形態として、コンピューターは、該コンピューターが更新オブジェクト１４を記憶しているか否かを送信元ノード１２が識別することを援助するように構成することができる。例えば、送信元ノード１２は、識別子（例えば、名称、他との区別を表すロケーション、ＧＵＩＤ、又はｉｎｏｄｅ番号）及び内容指示子（例えば、オブジェクト１４のハッシュコード、バージョン番号、又は最後の変更日）をコンピューターに送信することができる。コンピューターは、この情報をオブジェクトストア１６６内のオブジェクト１４（及び対応するオブジェクト１４がオブジェクトストア１６６内に存在する場合には、該対応するオブジェクト１４）と比較するように構成することができる。その後、コンピューターは、一致するオブジェクトが突き止められた場合や、同じ識別子を有するオブジェクトがより最近のバージョンのものである場合等には、送信元ノード１２に肯定的に通知することができ、そのようなオブジェクトが見つからない場合には、否定的に通知することができ、更新オブジェクト１４は、コンピューターによって受信されて、オブジェクトストア１６６に記憶されることになる。
【００５２】
[0061]この第２の態様の第２の変形形態として、コンピューターは、オブジェクト１４のチャンクを受信すると、他のスウォームノード１１８及び／又は送信元ノード１２に通知することによってスウォームネットワーク１１６に参加するように構成することができる。これは、例えば、送信元ノード１２及び／又は他のスウォームノード１１８が、コンピューターによって記憶された１組のチャンクを示すようにスウォームチャンクマップ１９２を更新することを可能にすること等により、コンピューターに配信されチャンクの分配を容易にするのに役立つことができる。加えて、コンピューターは、どのスウォームノード１１８が更新オブジェクト１４のどのチャンクを記憶しているのかを示すスウォームチャンクマップ１９２を初期化し、維持し、用いることによって、スウォームネットワーク１１６に参加するように構成することができる。このスウォームチャンクマップ１９２は、送信元ノード１２と同様の方法で生成し用いることができる。例えば、コンピューターは、スウォームネットワーク１１６に参加すると、スウォームチャンクマップ１９２を初期化することができ、また、コンピューターは、別のスウォームノード１１８が特定のチャンクを記憶している通知を受けると、そのスウォームノード１１８がそのチャンクを記憶していることを示すようにスウォームチャンクマップ１９２を更新することができる。このスウォームチャンクマップ１９２は、例えば、スウォームノード１１８がチャンクをいつ受信したのかを判断し、（例えば、コンピューターは記憶しているが、他のスウォームノード１１８はめったに記憶しない珍しいチャンクを選択することによって）さまざまなスウォームノード１１８に送信されるチャンクの選択を容易にするのに用いることができる。
【００５３】
[0062]この第２の態様の第３の変形形態は、コンピューターが、スウォームネットワーク１１６に参加している間、チャンクを他のスウォームノード１１８に配信する方法に関するものである。第１の例として、コンピューターは、単に、一時に１つのチャンクを１つスウォームノード１１８に送信することができ、現在のチャンクの送信が完了すると、次のチャンクを選択してスウォームノード１１８に送信することができる。第２の例として、コンピューターは、１つ又は複数のチャンクを１つ又は複数のスウォームノードに同時に送信することができる。１つのそのような実施形態では、コンピューターは、さまざまなスウォームノード１１８に送信されるチャンクをエンキューすることができる。コンピューターは、該コンピューターを含むスウォームネットワークの形成の通知を受けると、それぞれのスウォームノード１１８用の送信キューを生成するように構成することができる。その後、１つ又は複数のチャンクをスウォームノード１１８の送信キューにエンキューすることによって、それぞれのスウォームノード１１８にチャンクを送信することができる。コンピューターは、チャンクをスウォームノード１１８の空の送信キューにエンキューするか又は（送信されたチャンクを送信キューからデキューした後）スウォームノードへのチャンクの送信を完了すると、スウォームノード１１８用の送信キュー内で次のエンキューされたチャンクを識別することができ、該次のエンキューされたチャンクの送信を開始することができる。この実施形態は、それぞれのスウォームノード１１８への再分配されるチャンクの一様なストリームを促進することができ、コンピューターのアップロード容量の高い利用率を維持することもできる。１つの更なる洗練形態として、コンピューターは、次のエンキューされたチャンクを識別すると、スウォームチャンクマップ１９２を検査して、スウォームノード１１８が次のエンキューされたチャンクを既に受信したか否かを判断することができる。既に受信した場合、コンピューターは、エンキューされたチャンクをスウォームノード１１８に送信することなく単にデキューのみすることができる。当業者ならば、本明細書で検討されている技法を実施すると同時に、スウォームノード１１８としてスウォームネットワーク１１６に参加するようにコンピューターを構成することができる他の改良及び特徴を考案することができる。
【００５４】
[0063]これらの技法の実施形態間で異なり得る第３の態様は、スウォームネットワーク技法が成功しない場合がある、それぞれのオブジェクトストア１６６の同期を達成するノード１８の更なる構成に関するものである。図７に関して理解することができるように、本明細書で検討されているスウォームネットワーク技法は、分割されていないネットワーク１６、ノード１８を完全に包含する１組の近隣者の選択、及び全てのノード１８の破損していないネットワーク接続等の特定の状況内で更新オブジェクト１４を全てのノード１８に伝播することに成功する可能性がある。しかしながら、これらの状況が達成されない場合、スウォームネットワーク技法は、更新オブジェクト１４を１つ又は複数のノード１８に伝播するすることができない場合がある。第１の例として、ネットワーク１６は、ノード１８の２つ以上のパーティションに分割される場合があり、この場合、第１のパーティションのノードは、別のパーティションのいずれのノードにもアクセス可能ではない。この分割は、例えば、接続障害、ブリッジノードのオフラインへの移行、又は不適切に選ばれたネットワークトポロジーによって生じる場合がある。このシナリオでは、更新オブジェクト１４は、第１のパーティションのノード１８間で伝播することができるが、第２のパーティションのノード１８のいずれにも伝播することができない。さらに、第２のパーティションのノード１８は、オブジェクト１４が更新されたことの通知を受けることさえできない。第２の例として、ノード１８がスウォームネットワーク１１６を形成するのに利用した不適切な近隣者選択アルゴリズムが、いずれの近隣者セットからも１つ又は複数のノード１８を不注意に除外する場合（例えば、第１のノードが第２のノードにしかアクセス可能でなく、第２のノードが自身の近隣者セットに第１のノードを含め損なっている場合）がある。このシナリオでは、除外されたノード１８は、いずれのスウォームネットワーク１１６にも含まれず、更新オブジェクト１４を受信せず、更新オブジェクト１４の通知を受けることさえできない。第３の例として、更新オブジェクト１４がスウォームネットワーク１１６によってノード１８を伝播中であるときに、ノード１８が一時的にオフラインになる場合があり、更新オブジェクト１４を受信することもできなければ、オブジェクト１４が更新された通知を受信することもできない。
【００５５】
[0064]これらのシナリオ及び他のシナリオでは、スウォームネットワーク技法がそのような同期を達成することができないとき、追加の技法を利用して、さまざまなノード１８により記憶されたオブジェクトセットの同期を促進することができる。１つのそのような例として、コンピューターは、更新が失われていること又は欠如した更新を取得する機会を示すことができる同期事象（例えば、ネットワーク１６への再接続、ネットワーク１６の分割又は分割解除の検出、又は新たな１組の近隣者の選択）を検出すると、更新オブジェクト１４を識別して取得しようと努めるように構成することができる。次に、コンピューターは、更新オブジェクト１４を識別するようにノード１４（近隣者等）に依頼することができ、いずれかの識別された更新オブジェクト１４を記憶しているそのようなノード１４に、更新オブジェクト１４をコンピューターに送信するように依頼することができる。したがって、スウォームネットワーク１１６によって示された近隣者に更新オブジェクト１４を配信する「テル（telling）」アーキテクチャ及び「プッシュ（pushing）」アーキテクチャとは対照的に、この補助技法は、「アスク」アーキテクチャ（ノードが、近隣のノードに更新オブジェクト１４を依頼する）及び「プル（pull）」アーキテクチャ（ノードが、更新オブジェクト１４を記憶している１つ又は複数のノードから更新オブジェクト１４を受信する要求を開始する）を示す。したがって、相互作用を制御するノード１８は、更新オブジェクト１４のサーバーとして動作するノード１８に更新オブジェクト１４（又はそのチャンク）を要請するクライアントとして動作する。
【００５６】
[0065]図１３は、コンピューターのオブジェクトストア１６６のオブジェクト１４を、他のノード１８のオブジェクトストア１６６に記憶された対応する更新オブジェクト１４と同期させる一例示の方法２００を含むこの技法の１つの実施形態を示している。この実施形態は、例えば、これらの技法の他の実施形態（例えば、図８の例示の方法１２０又は図１０の例示のシステム１６８）に追加することができる。例示の方法２００は、２０２から開始し、同期事象を検出すると（２０４）、少なくとも１つの近隣者によって記憶されているとともにコンピューターのオブジェクトストア１６６には記憶されていない更新オブジェクト１４を識別する（２０６）ことを含んでいる。例示の方法２００は、１つ又は複数のそのような更新オブジェクト１４を識別すると（２０８）、コンピューターのオブジェクトストア１６６内に更新オブジェクト１４を作成する（２１０）こと、及び更新オブジェクト１４を少なくとも１つのチャンクにチャンキングする（２１２）ことを含んでいる。（代替的に、このチャンキング２１２は、コンピューターにオブジェクト１４のチャンクを通知することができる別のコンピューター、例えば更新オブジェクト１４の送信元ノード１２、が実行することができる。）例示の方法２００は、更新オブジェクト１４のチャンクがオブジェクトストア１６６に記憶されるまで（２１４）、オブジェクトストア１６６に記憶されていない少なくとも１つのチャンクを、該チャンクを記憶している近隣者に要求する（２１６）こと、及び近隣者からチャンクを受信すると、該チャンクをオブジェクトストア１６６に記憶することも含んでいる。コンピューターは、更新オブジェクト１４が受信されて記憶されるまで、更新オブジェクト１４のチャンクを、そのようなチャンクを記憶している近隣者に要求し続けることができる。更新オブジェクト１４が受信されて記憶されることによって例示の方法２００は２２０で終了する。
【００５７】
[0066]代替的に又は付加的に、実施形態は、（例えば、図１３の例示の方法２００を利用してクライアントノードによる要求を受けることができる、更新オブジェクト１４又はそのチャンクのサーバーとして動作することによって）更新オブジェクト１４を要求するノード１８へのそのような更新オブジェクト１４の配信をサポートするように構成することができる。例えば、コンピューターは、該コンピューターのオブジェクトストア１６６に記憶されたオブジェクト１４のチャンクの要求を近隣者から受信すると、該オブジェクト１４のチャンクを近隣者に送信するように構成することができる。加えて、コンピューターは、他のノード１８によって記憶された更新オブジェクト１４を識別しようとしている間、自身のオブジェクトストア１６６に記憶された、他のノード１８に配信される１つ又は複数の更新オブジェクト１４を識別することができる。例えば、コンピューターは、オフライン中に、オブジェクトストア１６６内のオブジェクト１４を更新している場合があり、ネットワーク１６と再接続すると、他のノード１８によって記憶された更新オブジェクト１４について尋ねている間に、そのオブジェクト１４を、ローカルに更新されたものとして識別することができる。このシナリオでは、コンピューターは、オブジェクト１４を更新オブジェクト１４として識別することができ、それによって、図８の例示の方法１２０等の更新オブジェクト１４を同期させる「テル」技法及び「プッシュ」技法を起動することができる。当業者ならば、本明細書で検討されている技法を実施すると同時にスウォームネットワーク同期を補助することができる、オブジェクトセットを同期させる多くの方法を考案することができる。
【００５８】
[0067]これらの技法の実施形態間で異なり得る第４の態様は、これらの技法、詳細には「アスク」同期技法及び「プル」同期技法へのコンピューティング環境ホスト１００の参加に関するものである。この第４の態様の第１の変形形態は、そのような実施形態とコンピューティング環境ホスト１００との相互作用を含んでいる。これによって、他のノード１８からの更新オブジェクト１４の同期を容易にすることができる。コンピューティング環境ホスト１００は、コンピューターを含むさまざまなノード１８によって記憶された更新オブジェクト１４のリストを記憶することができる。コンピューターは、同期事象を検出すると、更新されたがコンピューターのオブジェクトストア１６６に記憶されていないオブジェクト１４の記録をコンピューティング環境ホスト１００に要求することができる。この記録は、例えば、それぞれのノード１８が、更新オブジェクト１４を自身のオブジェクトストア１６６に記憶するとコンピューティング環境ホスト１００に通知するように構成されている場合に取得することができる。コンピューティング環境ホスト１００は、例えば、コンピューターによって記憶されたオブジェクトセット１４の自身の記録を、コンピューティング環境ホスト１００によって含む他のノード１８により記憶されたオブジェクトセット１４と比較することによって、そのようなリストを識別し提供することができる。比較の結果、更新オブジェクト１４を識別することができ、コンピューターによる要求時に提供することができるそのような更新オブジェクト１４を記憶しているノード１８を識別することもできる。代替的に、コンピューティング環境ホスト１００は、ノード１８によって記憶された更新オブジェクト１４のログを保持することができ、該ログのうち、コンピューターが他のノード１８と同期されたことが最後に知られた以降（例えば、コンピューターによって検出された最後のネットワーク同期事象以降）の部分をコンピューターに送信することができる。その後、コンピューターは、ログのその部分を検査して、該コンピューターのオブジェクトストア１６６に記憶されていないあらゆる更新オブジェクト１４を識別することができる。代替的に、オブジェクトセットが、コンピューティング環境ホスト１００によって管理されていない場合、他の技法を用いて、更新オブジェクト１４を識別することができる。例えば、コンピューターは、近時の更新オブジェクト１４のリストを近隣者に要求することもできるし、自身のオブジェクトストア１６６に記憶されたオブジェクト１４を近隣者のオブジェクトストア１６６に記憶されたオブジェクト１４と比較することもできる。
【００５９】
[0068]この第４の態様の第２の変形形態は、コンピューターと、更新オブジェクト１４又はそのチャンクの代替的な送信元としてのコンピューティング環境ホスト１００との別の相互作用を含んでいる。いくつかのシナリオでは、コンピューターは、ノード１８のいずれからよりもコンピューティング環境ホスト１００からの方が容易に更新オブジェクト１４を取得することができる。第１の例として、更新オブジェクト１４を記憶しているノード１８は、コンピューティング環境ホスト１００と直接コンタクトすることによって達成することができるものよりも低速のネットワーク接続を介してコンピューターにアクセス可能な場合がある（例えば、家庭用ブロードバンド接続によって接続されたホームネットワークをときに説明するとき、ノード１８からのアップリンクがアップロード容量を制限している場合）。第２の例として、更新オブジェクト１４を記憶しているノード１８は、これらのノード１８がネットワーク接続を失っているとき、又はネットワークパーティションが、これらのノード１８を、コンピューターから切り離されたパーティションに隔離しているとき等、コンピューターに全くアクセス可能でない場合がある。これらの場合には、コンピューターは、更新オブジェクト１４又はそのチャンクをコンピューティング環境ホスト１００に要求することに頼ることができる。例えば、コンピューターは、更新オブジェクト１４の少なくとも１つのチャンクを自身の近隣者から受信することができないと、その少なくとも１つのチャンクをコンピューティング環境ホスト１００に要求するように構成することができ、その少なくとも１つのチャンクをコンピューティング環境ホスト１００から受信すると、その少なくとも１つのチャンクをオブジェクトストア１６６に記憶するように構成することができる。コンピューティング環境ホスト１００のネットワーク容量及び処理リソースを保存するには、最後の手段としてのみそのような要求を行うようにノード１８を構成することが有利であり得るが、この選択肢を行使するようにコンピューターを構成することは、コンピューターによって記憶されたオブジェクト１４がオブジェクト１４に対する最新の更新と同期されていない期間が長引くよりも望ましい場合がある。
【００６０】
[0069]この第４の態様の第３の変形形態は、コンピューティング環境ホスト１００を利用してバージョン競合（version conflict）を調停することを含んでいる。多くのシナリオでは、オブジェクト１４は、２つのノード１８によって同時にかつ異なって更新されている場合があり、更新を調和させ、オブジェクト１４の一方のバージョンを他方に優先することは困難な場合がある。例えば、第１のノード１８は、ネットワーク１６から切断されている間に、オブジェクト１４の自身の局所表現を更新する場合があり、この期間中に、第２のノード１８が、同じオブジェクト１４の自身の局所表現を異なって更新する場合がある。第１のノード１８は、ネットワーク１６に再接続すると、第２のノード１８よるオブジェクト１４の競合している更新に気付くことができる。そのようなシナリオでは、コンピューティング環境ホスト１００は、オブジェクトセットの信頼できる表現をホストすることができるので、ノード１８は、コンピューティング環境ホスト１００に照会して、バージョン競合を調停することができる。コンピューティング環境ホスト１００は、さまざまな因子に基づいて（例えば、最も近時に更新されたバージョン、又は低優先順位のノードデバイスで更新されたオブジェクト１４のバージョンに優先して高優先順位のデバイスで更新されたオブジェクト１４のバージョン）、一方のバージョンを他方のバージョンに優先して選ぶことにより応答することができる。代替的に、コンピューティング環境ホスト１００は、オブジェクト１４に対する異なった更新を調和又はマージするように試みることができ、ノード１８に分配されるハイブリッドオブジェクトを生成することもできる。他の代替形態として、コンピューティング環境ホスト１００は、（例えば、オブジェクト１４のバージョンのうちの少なくとも一方の名称を変えることによって）オブジェクト１４の双方のバージョンが記憶されることを示すこともできるし、バージョンを選ぶようにユーザーに依頼することもできる。当業者は、本明細書で検討されている技法に関係するコンピューティング環境ホスト１００の多くの使用法を考案することができる。
【００６１】
[0070]構造的な特徴及び／又は方法論的な行為に特有の文言で主題を説明してきたが、添付の特許請求の範囲に規定される主題は、必ずしも、上述した特定の特徴にも行為にも限定されるものではないことが理解されるべきである。逆に、上述した特定の特徴又は行為は、特許請求の範囲を実施する形態の例として開示されている。
【００６２】
[0071]用語「構成要素」、「モジュール」、「システム」、「インターフェース」等は、本願で用いられるとき、一般に、ハードウェア、ハードウェア及びソフトウェアの組合せ、ソフトウェア、又は実行中のソフトウェアのいずれかであるコンピューター関連エンティティを指すことを意図している。例えば、構成要素は、限定されるわけではないが、プロセッサー上で実行されるプロセス、プロセッサー、オブジェクト、実行可能ファイル、実行スレッド、プログラム、及び／又はコンピューターとすることができる。実例として、コントローラー上で実行されるアプリケーション及び該コントローラーはともに構成要素とすることができる。１つ又は複数の構成要素は、プロセス及び／又は実行スレッド内に存在する場合があり、構成要素は、１つのコンピューターに局在する場合がありかつ／又は２つ以上のコンピューターの間に分散する場合がある。
【００６３】
[0072]また、特許請求された主題は、開示した主題を実施するようにコンピューターを制御するソフトウェア、ファームウェア、ハードウェア、又はそれらの任意の組合せを作り出す標準的なプログラミング及び／又はエンジニアリング技法を用いて、方法、装置、又は製品として実施することができる。用語「製品」は、本明細書で用いられるとき、任意のコンピューター可読デバイス、担体、又は媒体からアクセス可能なコンピュータープログラムを包含することを意図している。もちろん、当業者ならば、特許請求された主題の範囲又は趣旨から逸脱することなく、この構成に多くの変更を行えることを認識するであろう。
【００６４】
[0073]図１４及び以下の検討は、本明細書で述べたプロビジョンのうちの１つ又は複数の実施形態を実施する適したコンピューティング環境の簡潔な一般的説明を提供する。図１４の動作環境は、適した動作環境の一例にすぎず、この動作環境の使用又は機能の範囲に関していかなる限定も示唆するように意図されていない。コンピューティングデバイスの例には、パーソナルコンピューター、サーバーコンピューター、ハンドヘルドデバイス又はラップトップデバイス、移動デバイス（移動電話、携帯情報端末（ＰＤＡ）、メディアプレーヤー等）、マルチプロセッサーシステム、民生用電子機器、ミニコンピューター、メインフレームコンピューター、上記システム又はデバイスの任意のものを含む分配型コンピューティング環境等が含まれるが、これらに限定されるものではない。
【００６５】
[0074]必須ではないが、実施形態は、「コンピューター可読命令」が１つ又は複数のコンピューティングデバイスによって実行される一般的な状況で説明される。コンピューター可読命令は、コンピューター可読媒体（以下で検討）を介して配布することができる。コンピューター可読命令は、特定のタスクを実行するか又は特定の抽象データタイプを実施する機能、オブジェクト、アプリケーションプログラミングインターフェース（ＡＰＩ）、データ構造等のプログラムモジュールとして実施することができる。通常、コンピューター可読命令の機能は、さまざまな環境で所望に応じて結合することもできるし、分散させることもできる。
【００６６】
[0075]図１４は、本明細書で提供している１つ又は複数の実施形態を実施するように構成されたコンピューティングデバイス２３２を備えるシステム２３０の一例を示している。１つの構成では、コンピューティングデバイス２３２は、少なくとも１つの処理ユニット２３６及びメモリ２３８を含む。コンピューティングデバイスの正確な構成及びタイプに応じて、メモリ２３８は、揮発性（例えばＲＡＭ等）とすることもできるし、不揮発性（例えばＲＯＭ、フラッシュメモリ等）とすることもできるし、これらの２つの何らかの組合せとすることもできる。この構成は、図１４に破線２３４によって示されている。
【００６７】
[0076]他の実施形態では、デバイス２３２は、更なる特徴及び／又は機能を含むことができる。例えば、デバイス２３２は、追加ストレージ（例えば、リムーバブル及び／又は非リムーバブル）を含むこともできる。この追加ストレージには、磁気ストレージ、光ストレージ等が含まれるが、これらに限定されるものではない。そのような追加ストレージは、図１４にストレージ２４０によって示されている。１つの実施形態では、本明細書で提供している１つ又は複数の実施形態を実施するコンピューター可読命令は、ストレージ２４０内に存在することができる。ストレージ２４０は、オペレーティングシステム、アプリケーションプログラム等を実施する他のコンピューター可読命令を記憶することもできる。コンピューター可読命令は、例えば処理ユニット２３６によって実行するためにメモリ２３８にロードすることができる。
【００６８】
[0077]用語「コンピューター可読媒体」は、本明細書で用いられるとき、コンピューターストレージ媒体を含む。コンピューターストレージ媒体には、任意の方法又は技術で実施された、コンピューター可読命令又は他のデータ等の情報を記憶する揮発性及び不揮発性のリムーバブル及び非リムーバブルの媒体が含まれる。メモリ２３８及びストレージ２４０はコンピューターストレージ媒体の例である。コンピューターストレージ媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、若しくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、若しくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、若しくは他の磁気ストレージデバイス、又は所望の情報を記憶するのに用いることができるとともにデバイス２３２がアクセスすることができる他の任意の媒体が含まれるが、これらに限定されるものではない。そのようないずれのコンピューターストレージ媒体もデバイス２３２の一部とすることができる。
【００６９】
[0078]デバイス２３２は、該デバイス２３２が他のデバイスと通信することを可能にする通信接続（複数の場合もある）２４６も含むことができる。通信接続（複数の場合もある）２４６には、モデム、ネットワークインターフェースカード（ＮＩＣ）、統合ネットワークインターフェース、無線周波数送信機／受信機、赤外線ポート、ＵＳＢ接続、又はコンピューティングデバイス２３２を他のコンピューティングデバイスに接続する他のインターフェースを含めることができるが、これらに限定されるものではない。通信接続（複数の場合もある）２４６は、有線接続又は無線接続を含むことができる。通信接続（複数の場合もある）２４６は、通信媒体を送信及び／又は受信することができる。
【００７０】
[0079]用語「コンピューター可読媒体」は、通信媒体を含むことができる。通信媒体は、通常、コンピューター可読命令又は他のデータを、搬送波又は他のトランスポートメカニズム等の「変調データ信号」で実施し、任意の情報配信媒体を含む。用語「変調データ信号」は、信号の特性のうちの１つ又は複数が、信号に情報を符号化するように設定又は変更された信号を含むことができる。
【００７１】
[0080]デバイス２３２は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、赤外線カメラ、ビデオ入力デバイス、及び／又は他の任意の入力デバイス等の入力デバイス（複数の場合もある）２４４を含むことができる。１つ又は複数のディスプレイ、スピーカー、プリンター、及び／又は他の任意の出力デバイス等の出力デバイス（複数の場合もある）２４２も、デバイス２３２に含めることができる。入力デバイス（複数の場合もある）２４４及び出力デバイス（複数の場合もある）２４２は、有線接続、無線接続、又はそれらの任意の組合せを介してデバイス２３２に接続することができる。１つの実施形態では、別のコンピューティングデバイスからの入力デバイス又は出力デバイスを、コンピューティングデバイス２３２の入力デバイス（複数の場合もある）２４４又は出力デバイス（複数の場合もある）２４２として用いることができる。
【００７２】
[0081]コンピューティングデバイス２３２の構成要素は、バス等のさまざまな相互接続によって接続することができる。そのような相互接続は、ＰＣＩエクスプレス等の周辺機器相互接続（ＰＣＩ）、ユニバーサルシリアルバス（ＵＳＢ）、ファイアワイヤ（ＩＥＥＥ１３９４）、光バス構造等を含むことができる。別の実施形態では、コンピューティングデバイス２３２の構成要素は、ネットワークによって相互接続することができる。例えば、メモリ２３８は、ネットワークによって相互接続されたさまざまな物理ロケーションに位置する複数の物理メモリユニットで構成することができる。
【００７３】
[0082]当業者ならば、コンピューター可読命令を記憶するのに利用されるストレージデバイスをネットワークにわたって分散させることができることを理解するであろう。例えば、ネットワーク２４８を介してアクセス可能なコンピューティングデバイス２５０が、本明細書で提供している１つ又は複数の実施形態を実施するコンピューター可読命令を記憶することができる。コンピューティングデバイス２３２は、コンピューティングデバイス２５０にアクセスし、コンピューター可読命令の一部又は全部を実行するためにダウンロードすることができる。代替的に、コンピューティングデバイス２３２は、必要に応じて、コンピューター可読命令の断片をダウンロードすることもできるし、一部の命令はコンピューティングデバイス２３２において実行し、一部はコンピューティングデバイス２５０において実行することもできる。
【００７４】
[0083]実施形態のさまざまな動作を本明細書で提供している。１つの実施形態では、説明した動作の１つ又は複数は、１つ又は複数のコンピューター可読媒体に記憶されたコンピューター可読命令を構成することができ、これらのコンピューター可読命令は、コンピューティングデバイスによって実行される場合、コンピューティングデバイスに、説明した動作を実行させる。動作の一部又は全部を説明している順序は、これらの動作が必然的に順序依存性があることを暗示するものとして解釈されるべきではない。この説明から利益を得る当業者には、代わりの順序付けが理解されよう。また、全ての動作が必ずしも、本明細書で提供した各実施形態に存在することは限らないことも理解されよう。
【００７５】
[0084]さらに、単語「例示の」は、本明細書では、例、具体例、又は実例としての役割を果たすことを意味するのに用いられている。本明細書で「例示の」として説明したいずれの態様又は設計も、他の態様又は設計よりも有利であると必ずしも解釈されない。むしろ、例示のという単語の使用は、概念を具体的に提示することを意図している。用語「又は」は、本願で用いられるとき、排他的な「又は」ではなく包含的な「又は」を意味することを意図している。すなわち、別段の指定もなく文脈から明らかでもない限り、「ＸがＡ又はＢを使用する」は、自然な包含的な組合せ（permutation）のいずれをも意味することを意図している。すなわち、ＸがＡを使用する場合；ＸがＢを使用する場合；又はＸがＡ及びＢの双方を使用する場合、これらの具体例のいずれのもとでも、「ＸがＡ又はＢを使用する」は満たされる。加えて、数が明示されていないもの（the articles "a" and "an"）は、本願及び添付特許請求の範囲で用いられるとき、一般に、単数形を対象とするように別段の指定もなく文脈から明らかでもない限り「１つ又は複数」を意味するものと解釈することができる。
【００７６】
[0085]また、この開示を１つ又は複数の実施態様に関して図示及び説明してきたが、この明細書及び添付図面を読んで理解することに基づき、均等な改変及び変更が他の当業者には思い浮かぶであろう。この開示は、そのような全ての変更及び改変を含み、この後に続く特許請求の範囲の範囲によってのみ限定される。特に、上述した構成要素（例えば、要素、リソース等）によって実行されるさまざまな機能に関して、そのような構成要素を説明するのに用いられた用語は、本明細書で示したこの開示の例示の実施態様における機能を実行する開示した構造と構造的に等価でなくても、別段の指示がない限り、説明した構成要素の（例えば、機能的に等価である）指定した機能を実行するいずれの構成要素にも対応することを意図している。加えて、この開示の特定の特徴は、いくつかの実施態様のうちの１つのみに関して開示していることもあり得るが、そのような特徴は、任意の所与の用途又は特定の用途にとって望ましくかつ有利な場合がある他の実施態様の１つ又は複数の他の特徴と組み合わせることができる。また、用語「含む（include）」、「有する（having）」、「有する（with）」若しくは「と（with）」、又はそれらの変形が、詳細な説明（発明を実施するための形態）又は特許請求の範囲のいずれかで用いられる限りにおいて、そのような用語は、用語「備える（comprising）」若しくは「含む（comprising）」と同様に包含的であることを意図している。
【図１】
2012528402.tif 000006
【図２】
2012528402.tif 000007
【図３】
2012528402.tif 000008
【図４】
2012528402.tif 000009
【図５】
2012528402.tif 000010
【図６】
2012528402.tif 000011
【図７】
2012528402.tif 000012
【図８】
2012528402.tif 000013
【図９】
2012528402.tif 000014
【図１０】
2012528402.tif 000015
【図１１】
2012528402.tif 000016
【図１２】
2012528402.tif 000017
【図１３】
2012528402.tif 000018
【図１４】
2012528402.tif 000019
【国際調査報告】
2012528402.tif 000020
2012528402.tif 000021
2012528402.tif 000022