(57)【要約】  さまざまなタイプのデバイスおよび／またはサービスの間でのデータの同期を改善するさまざまなテクノロジおよび技法を開示する。完全参加者は、別の参加者から、同期動作を実行する要求を受信する。同期エンジンは、デバイスまたはサービスが完全参加者、部分参加者、または単純参加者のどれであるかを判定する。デバイスまたはサービスは、同期されたデータ用のデータストアを有し、知識ストアを有しない場合に、単純参加者である。デバイスまたはサービスは、同期されたデータ用のデータストアを有し、知識ストアを有するが、その知識を理解しない場合に、部分参加者である。デバイスまたはサービスは、同期されたデータ用のデータストアを有し、知識ストアを有し、その知識を理解する場合に、完全参加者である。同期エンジンは、デバイスまたはサービスのタイプに適当なロジックのセットを使用して、デバイスまたはサービスとの同期動作を実行する。
2009527055.tif 000002
【特許請求の範囲】
【請求項１】
データを同期する方法であって、
部分参加者を提供するステップであって、前記部分参加者は、データストアおよび知識ストアを有し、前記データストアは、第１完全参加者との同期処理中に取り出されるデータのセットを格納するように動作可能であり、前記知識ストアは、前記データストア内の前記データに関する知識のセットを格納するように動作可能であり、前記知識のセットは、前記第１完全参加者が知っている前記データに対する変更を表し（２８２）、前記部分参加者は、前記知識のセットを理解せず（２８４）、前記部分参加者は、前記部分参加者が前記データストア内の前記データのセットに対して行う変更を追跡する責任を負う（２９０）、ステップと、
前記データストア内の前記データのセット内の特定のレコードを変更する要求を前記部分参加者のユーザから受信するステップ（２８６）と、
前記ユーザから前記要求を受信した時に前記データストア内の前記特定のレコードを更新するステップ（２８８）であって、前記更新は、前記変更のソースを前記部分参加者として識別する情報を格納することを含むステップ（２９０）と
を含むことを特徴とする方法。
【請求項２】
前記部分参加者は、第２完全参加者と同期するように動作可能である（６６）ことを特徴とする請求項１に記載の方法。
【請求項３】
前記部分参加者は、前記第１完全参加者上のハンドラを介して前記第１完全参加者と同期される（６６）ことを特徴とする請求項１に記載の方法。
【請求項４】
前記第１完全参加者は、パーソナルコンピュータである（２４２）ことを特徴とする請求項１に記載の方法。
【請求項５】
前記第１完全参加者は、モバイルデバイスである（２４２）ことを特徴とする請求項１に記載の方法。
【請求項６】
前記部分参加者は、モバイルデバイスである（２８２）ことを特徴とする請求項１に記載の方法。
【請求項７】
前記部分参加者は、ウェブサービスである（２８２）ことを特徴とする請求項１に記載の方法。
【請求項８】
前記変更の前記ソースを識別する前記情報は、バージョンである（３０４）ことを特徴とする請求項１に記載の方法。
【請求項９】
前記バージョンの第１部分は、前記部分参加者を一意に識別する識別子を含み、前記バージョンの第２部分は、レコードバージョンを示す番号を含む（３０４）ことを特徴とする請求項８に記載の方法。
【請求項１０】
前記変更の前記ソースを識別する前記情報は、前記レコードの一意識別子と、前記レコードが変更された時を示す日時識別子とである（３１４）ことを特徴とする請求項１に記載の方法。
【請求項１１】
前記第１完全参加者は前記同期処理の後に前記知識のセットを更新した後に、前記第１完全参加者から更新された知識のセットを受信すること（２９６）
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項１２】
請求項１に記載のステップ（２００）をコンピュータに実行させるコンピュータ実行可能命令を有することを特徴とするコンピュータ可読媒体。
【請求項１３】
同期エンジンを使用して同期動作を実行する要求を参加者から受信するステップ（２４４）と、
前記参加者のタイプを判定するステップであって、前記タイプは、完全参加者タイプ、部分参加者タイプ、および単純参加者タイプからなるグループから選択される、ステップ（２４６）と
を含むステップをコンピュータに実行させるコンピュータ実行可能命令を有するコンピュータ可読媒体であって、
前記参加者は、単純参加者データストアを有し、知識を有しない場合に、前記単純参加者タイプであると判定され（２４８）、
前記参加者は、部分参加者データストアを有し、格納されるが理解されない知識を有する場合に、前記部分参加者タイプであると判定され（２５０）、
前記参加者は、完全参加者データストアを有し、格納され理解される知識を有する場合に、前記完全参加者タイプであると判定され（２５２）、
前記同期エンジンは、参加者の前記タイプに適当であるロジックのセットを使用して前記参加者との前記同期動作を実行する（２５６）
ことを特徴とするコンピュータ可読媒体。
【請求項１４】
前記参加者の前記タイプは前記単純参加者タイプであると判定される場合に、前記同期エンジンは、前記単純参加者データストア内のデータのセットに対する変更を検出することと、すべての衝突をローカルデータストアに格納することと（２５４）によって、前記単純参加者データストア内のデータのセットを同期するように動作可能であることを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１５】
前記参加者の前記タイプは前記部分参加者タイプであると判定される場合に、前記同期エンジンは、前記参加者から前記格納されるが理解されない知識を受信し（２５８）、例外が発生する場合に前記参加者上の前記格納されるが理解されない知識を更新する（２６０）ことを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１６】
前記同期エンジンは、ローカルコピーを変更することと、その後、前記ローカルコピーを前記参加者に転送することと（２６２）によって前記参加者上の前記格納されるが理解されない知識を更新することを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項１７】
前記参加者の前記タイプは前記部分参加者タイプであると判定される場合に、前記参加者は、前記参加者上の前記格納されるが理解されない知識のゆえにマルチマスタ２ウェイ同期動作に参加するように動作可能であることを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１８】
前記同期エンジンは、前記同期動作のハンドラを登録する要求を前記参加者から受信する（２４４）ことを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１９】
データ同期化の方法であって、
単純参加者を提供するステップであって、前記単純参加者は、データストアを有し、知識ストアを有しておらず、前記データストアは、完全参加者との同期処理中に提供されるデータのセットを格納するように動作可能であり、前記単純参加者は、前記単純参加者が前記データストア内の前記データのセットに対して行う変更を追跡する責任を負わない、ステップ（４２４）と、
前記データストア内の前記データのセット内の特定のレコードを変更する要求を前記単純参加者のユーザから受信するステップ（４２８）と、
前記要求を前記ユーザから受信する時に前記データストア内の前記特定のレコードを更新するステップ（４３０）と
を含むことを特徴とする方法。
【請求項２０】
請求項１９に記載の前記ステップをコンピュータに実行させるコンピュータ実行可能命令を有することを特徴とするコンピュータ可読媒体（２００）。
【発明の詳細な説明】
【技術分野】
【０００１】
さまざまなタイプのデバイスおよび／またはサービスの間でのデータの同期を改善するさまざまなテクノロジおよび技法に関する。
【背景技術】
【０００２】
現在のテクノロジおよびディジタル情報処理の世界では、個人が、さまざまな異なるデバイスおよび位置に情報またはデータを格納することができる。しばしば、ユーザは、同一の情報を複数のデバイスおよび／または位置に格納する。ユーザは、同一の変更を各データストアに手動で入力する必要なしに、さまざまなデータストアのすべてが同一の情報を有することを好む。複製は、各データストアが同一の情報を持つことを保証するのに使用されるプロセスの１つである。
【０００３】
たとえば、ユーザが、電子アドレス帳をさまざまな異なるデバイスまたは位置で維持する場合がある。そのユーザが、たとえばデスクトップコンピュータ、ラップトップコンピュータ、携帯情報端末（ＰＤＡ）、オンラインコンタクトマネージャ、および類似物に格納されるパーソナル情報マネージャでアドレス帳を維持する場合がある。そのユーザは、たとえば連絡先を追加し、連絡先を削除し、または連絡先情報を変更することによって、各位置の電子アドレス帳を変更することができる。複製は、特定のデバイスで行われた変更が、そのユーザの他のデバイスのデータストアに最終的に反映されることを保証するのに使用される。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
複製は、特定のユーザが使用するデバイスおよび／またはサービスの数が増え、および／またはこれらのデバイスのサイズもしくは処理能力が減ると、ますますより複雑になる。たとえば、多くのユーザが、サムドライブ、リムーバブルメモリ、ＰＤＡ、電話機、ポータブル音楽デバイスなどを有する。連絡先レコードなどの情報を、これらのデバイスの多くに有し、および／またはこれらのデバイスの間で同期することが有用であるが、これらのタイプのデバイスの多くが、通常の同期処理に参加するのにしばしば必要になるコンピュータプロセッサを有してさえいない。これらの同期問題は、複数のユーザがグループカレンダを共有するなど、データのグループ共有が伴うと、さらに悪化する可能性がある。
【課題を解決するための手段】
【０００５】
さまざまなタイプのデバイスおよび／またはサービスの間でのデータの同期を改善するさまざまなテクノロジおよび技法を開示する。完全参加者（ｆｕｌｌ  ｐａｒｔｉｃｉｐａｎｔ）デバイスまたはサービスは、同期エンジンを使用して同期動作を実行する要求を別のデバイスまたはサービスから受信する。他のデバイスまたはサービスは、ハンドラインターフェースの実施を介して完全参加者の同期エンジンと通信する。同期エンジンは、システム上のさまざまなインストール済みハンドラの間の通信をオーケストレートして、エンドポイント間の同期を駆動する。同期エンジンに接続されたならば、ハンドラは、そのハンドラが参加できる同期シナリオを判定するために、または単純に、ピア参加者モデルで定義される参加レベルを判定するために点検される。
【０００６】
一実施形態で、同期エンジンは、デバイスまたはサービスが、完全参加者（ｆｕｌｌ  ｐａｒｔｉｃｉｐａｎｔ）、部分参加者（ｐａｒｔｉａｌ  ｐａｒｔｉｃｉｐａｎｔ）、または単純参加者（ｓｉｍｐｌｅ  ｐａｒｔｉｃｉｐａｎｔ）のどれであるかを判定する。デバイスまたはサービスは、同期されたデータ用のデータストアを有するが、知識ストアを有しない場合、単純参加者である。単純参加者は、それがデータに対して行う変更を追跡する責任を負わない。デバイスまたはサービスは、同期されたデータ用のデータストアを有し、知識ストアを有するが、その知識を理解することができない場合、部分参加者である。部分参加者は、それがデータに対して行う変更を追跡する責任を負う。デバイスまたはサービスは、同期されたデータ用のデータストアを有し、知識ストアを有し、その知識およびそれに対する一部のまたはすべての動作を理解する場合に、完全参加者である。知識を、「同期メタデータ」と称する。同期エンジンは、デバイスまたはサービスのタイプに適当なロジックのセットを使用して、デバイスとの同期動作を実行する。このアーキテクチャの一実施形態は、マルチマスタ２ウェイ同期コミュニティを提供し、限られた処理能力および／またはストレージ能力を有するデバイスおよび／またはサービス（サムドライブ、一部の携帯情報端末、および／または電話機など）があるレベルで同期処理に参加することを可能にする。複数マスタ同期は、それぞれが同一データの書き込み可能なレプリカを有する複数の参加者が、以前に通信したか否かにかかわりなく、協力し、同期することを可能にすることを意味する。
【０００７】
１つの非限定的な例として、部分参加者デバイスまたは部分参加者サービスは、その部分参加者が知識を理解すらしない場合であっても、その部分参加者に格納された知識のゆえに、一実施形態でマルチマスタ２ウェイ同期動作に参加することができる。もう１つの非限定的な例として、複製されたデータを格納するデータストアを有するが知識を有しない単純参加者（サムドライブなど）は、一実施形態で、完全参加者との同期処理に参加することができる。
【０００８】
この概要は、以下の詳細な説明でさらに説明する概念の選択物を単純化された形で紹介するために提供されたものである。この概要は、クレーム主題の主要な特徴または本質的な特徴を識別することを意図されたものではなく、クレーム主題の範囲を判定する際の助けとして使用されることを意図されたものでもない。
【発明を実施するための最良の形態】
【０００９】
本発明の原理の理解を促進するために、これから、図面に示された実施形態を参照し、特定の言葉を使用してこれを説明する。それでも、これによって範囲の限定が意図されていないことを理解されたい。説明される実施形態でのすべての変更およびさらなる修正ならびに本明細書で説明される原理のすべてのさらなる応用が、当業者が普通に思い浮かべるものとして企図されている。
【００１０】
このシステムを、全般的な文脈で、さまざまな機能を有するさまざまなデバイスの間のデータの同期を改善する１つまたは複数の技法として説明することができるが、このシステムは、これらに加えて、他の目的のためにも働く。一実施形態で、本明細書で説明される技法のうちの１つまたは複数を、ＭＩＣＲＯＳＯＦＴ（登録商標）ＡＣＴＩＶＥＳＹＮＣ（登録商標）などの同期プログラム内の特徴として実施するか、デバイス間の同期処理に参加する任意の他のタイプのプログラムまたはサービスから実施することができる。もう１つの実施形態では、本明細書で説明される技法のうちの１つまたは複数は、デバイスおよび／またはサービスにまたがるデータの同期を扱う他のアプリケーションを伴う特徴として実施される。本明細書で使用される用語「モバイルデバイス」は、携帯電話、携帯情報端末、ポータブルメディアプレイヤ、ｖｏｉｃｅ−ｏｖｅｒ−ＩＰ電話機、およびさまざまなレベルの機能を有する多数の他のタイプのモバイルデバイスを含むことが意図されている。
【００１１】
図１は、完全参加者１０、部分参加者２０、および単純参加者３０のグラフィカル表現を示す、一実施形態に係る同期ピア参加者モデルの概略図である。用語「参加者」を、本明細書では「レプリカ」とも称する。参加者およびレプリカは、同期コミュニティに参加するデバイスおよび／またはサービスを指す。完全参加者１０は、知識データストア１２を有し、知識１４を理解する能力を有する。完全参加者１０は、連絡先情報またはデバイスの間で同期される他の情報など、同期された実際のデータを格納する同期データストア１６をも有する。完全参加者の少数の非限定的な例に、パーソナルコンピュータ、一部のＰＤＡ、一部の電話機、一部の他のモバイルデバイス、および／または知識を格納し、理解することのできる他のデバイスが含まれる。
【００１２】
各完全参加者は、効率的で改善された複製を容易にする知識データストア内の「知識」を維持する。一実施形態で、「知識」は、所与の参加者に既知の変更を記述するメタデータである。知識は、ペアまたは変更ＩＤのベクトルとして表すことができ、ここで、各ペアまたは変更ＩＤは、レプリカＩＤおよび最大バージョンを表す（レプリカＩＤ、最大バージョン）。特定の知識ベクトル内のペアの個数は、参加者が同期コミュニティに追加されるか同期コミュニティから除去される時に変化する可能性がある。知識ベクトルは、異なる形で表すこともできるが、特定の参加者が知っている変更を簡潔に表すことが有利である。特定の知識が、同期コミュニティの参加者ごとに変更ＩＤを特に含むことは、要件ではない。参加者は、他の参加者が既に知っていることを追跡することから解放される。というのは、この情報が、効果的にその参加者の知識によって表されるからである。
【００１３】
完全参加者１０に似て、部分参加者２０も、知識データストア２２を含む。しかし、完全参加者１０とは異なって、部分参加者２０は、知識２４を理解する能力を有しない（または、限られた能力を有する）。部分参加者は、同期されたデータを格納する同期データストア２６を含む。部分参加者は、その部分参加者が同期データストア２６に対して行う変更に関係する情報を格納するバージョンデータストア２５を含む。部分参加者の非限定的な例には、一部の携帯情報端末、電話機、一部の他のモバイルデバイス、および／または同期データストア２６に対して行われた変更を追跡する単純なプログラムを動作させることができる他のタイプのデバイスを含めることができる。
【００１４】
単純参加者３０は、同期データストア３６を有し、知識ストアを有しない。単純参加者の例には、一部のサムドライブ、一部のメモリカード、および／または同期データストア３６に対して行われた変更を追跡する単純なプログラムを動作させることができない他のデバイスを含めることができるが、これらに限定はされない。
【００１５】
ここで図２に移ると、ピア参加者モデルの表による表現５０が示されている。単純参加者５２、部分参加者５４、および完全参加者５６は、１つまたは複数の特性を有する。これらの特性のうちのいくつかは、図１の議論で説明した。たとえば、単純参加者５２は、知識を格納することができない５８。単純参加者は、ハンドラを介して単一の完全参加者と同期することができる６０。部分参加者５４は、知識を格納するが理解しない６２。部分参加者５４は、マルチマスタ２ウェイ同期に参加することができる６４。その代わりにまたはそれに加えて、部分参加者５４は、完全参加者上のハンドラを介して同期することができる６６。この形で、部分参加者５４は、１つまたは複数の完全参加者デバイスを介して、管理されたピアツーピアシナリオに参加することができる。したがって、部分参加者は、完全参加者の使用を介して互いと同期することができる。完全参加者５６は、知識を理解し、格納し６８、マルチマスタ２ウェイ同期ターゲットに参加することができ７０、ピアツーピア同期を実行することができる７２。
【００１６】
図３は、１つまたは複数の参加者デバイスとインターフェースするためのハンドラを用いる一実施形態に係る同期システム８０の概略図である。同期アプリケーション８２は、参加者の間の同期ループを完了し、他の接続された参加者の間で更新された変更を転送する責任を負う同期オーケストレーションエンジン８４を含む。さまざまなハンドラ８６、８８、および９０は、同期コミュニティ内の他の参加者が同期エンジン８４と通信することを可能にするのに使用される。同期エンジン８４は、それぞれハンドラインターフェース９１、９２、および９７を介してハンドラ８６、８８、および９０と通信する。ハンドラ８６、８８、および９０は、適用可能な場合に、知識ストア９３および９５、ローカル同期データストア９４、ならびにリモート同期データストア９６と通信して、データにアクセスする。一実施形態で、リモート同期データストア９６などの、図１に示されたデータストアのうちの１つまたは複数は、１つまたは複数の別々のコンピュータまたはデバイスに配置される。
【００１７】
図４に示されているように、このシステムの１つまたは複数の部分を実施するのに使用される例示的コンピュータシステムは、パーソナルコンピューティングデバイス１００などのコンピューティングデバイスを含む。その最も基本的な構成で、コンピューティングデバイス１００は、通常、少なくとも１つの処理ユニット１０２およびメモリ１０４を含む。コンピューティングデバイスの正確な構成およびタイプに応じて、メモリ１０４は、揮発性（ＲＡＭなど）、不揮発性（ＲＯＭ、フラッシュメモリなど）、またはこの２つのある組合せとすることができる。この最も基本的な構成は、図４では破線１０６によって示される。
【００１８】
さらに、デバイス１００は、追加の特徴／機能性を有することもできる。たとえば、デバイス１００は、磁気ディスク、磁気テープ、光ディスク、または光テープを含むがこれらに限定はされない追加ストレージ（リムーバブルおよび／またはノンリムーバブル）をも含むことができる。そのような追加ストレージは、図４ではリムーバブルストレージ１０８およびノンリムーバブルストレージ１１０によって示されている。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報の格納のための任意の方法またはテクノロジで実施された、揮発性および不揮発性、リムーバブルおよびノンリムーバブルの媒体を含む。メモリ１０４、リムーバブルストレージ１０８、およびノンリムーバブルストレージ１１０は、すべてが、コンピュータ記憶媒体の例である。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、もしくは他のメモリテクノロジ、ＣＤ−ＲＯＭ、ディジタル多用途ディスク（ＤＶＤ）、もしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、もしくは他の磁気ストレージデバイス、または所望の情報の格納に使用でき、デバイス１００によってアクセスできる任意の他の媒体を含むが、これらに限定はされない。任意のそのようなコンピュータ記憶媒体が、デバイス１００の一部となり得る。
【００１９】
コンピューティングデバイス１００は、コンピューティングデバイス１００が、完全参加者、部分参加者、および／または単純参加者などの他のデバイス１１５と通信することを可能にする１つまたは複数の通信接続１１４を含む。コンピューティングデバイス１００は、他のコンピュータおよび／またはアプリケーション１１３とも通信することができる。デバイス１００は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなどの入力デバイス（１つまたは複数）１１２をも有することができる。ディスプレイ、スピーカ、プリンタなどの出力デバイス（１つまたは複数）１１１をも含めることができる。これらのデバイスは、当技術分野で周知であり、ここで長々しく述べる必要はない。
【００２０】
一実施形態で、コンピューティングデバイス１００は、本明細書で述べる技法のうちの１つまたは複数を実施する完全参加者デバイスとして働く。そのような実施形態で、コンピューティングデバイス１００は、同期オーケストレーションエンジン１２４を伴う同期アプリケーション１２２ならびに知識データストア１２５および同期データストア１２６を含む。一実施形態で、知識データストア１２５および／または同期データストア１２６は、メモリ１０４、リムーバブルストレージ１０８、ノンリムーバブルストレージ１１０、および／または他のコンピュータ記憶媒体などの本明細書で説明したコンピュータ記憶媒体の一部として含まれる。一実施形態で、同期アプリケーション１２２は、図３に示された同期アプリケーション８２と同一である。
【００２１】
ここで図４の参照を継続しながら図５に移ると、一実施形態に係る同期アプリケーション２００が示されている。一実施形態で、同期アプリケーション２００は、コンピューティングデバイス１００に常駐するアプリケーションプログラムの１つである。その代わりにまたはそれに加えて、同期アプリケーション２００の１つまたは複数の部分を、システムメモリ１０４の一部とするか、他のコンピュータおよび／またはアプリケーション１１３上にあるものとするか、あるいはコンピュータソフトウェア技術の当業者が思い浮かべる他のそのような変形形態とすることができる。
【００２２】
同期アプリケーション２００は、プログラムロジック２０４を含み、プログラムロジック２０４は、本明細書で説明する技法の一部またはすべてを実行する責任を負う。プログラムロジック２０４は、各デバイスおよび／またはサービスが同期処理に参加するためのハンドラを登録するロジック２０６、接続されたデバイスおよび／またはサービスのタイプ（単純参加者、部分参加者、または完全参加者）を検出するロジック２０８、部分参加者から知識を受信し、例外の場合に変更を行い、知識を部分参加者に戻して転送するロジック２１０、単純参加者での変更を検出し、それ自体のローカルデータストアに衝突（ｃｏｎｆｌｉｃｔｓ）を格納するロジック２１２、知識を使用してデータの変更されたセットを同期するために他の完全参加者と共に働くロジック２１４、他の接続されたデバイスおよび／またはサービスの間で同期ループを完了し、更新された変更をプルするためにオーケストレーションを実行するロジック２１６、ならびにこのアプリケーションを動作させる他のロジック２２０を含む。
【００２３】
一実施形態で、プログラムロジック２０４は、プログラムロジック２０４内のプロシージャへの単一の呼び出しを使用するなど、別のプログラムからプログラム的に呼び出されるように動作可能である。それに加えてまたはその代わりに、プログラムロジック２０４を、それに加えてまたはその代わりに、１つまたは複数のコンピュータ上のコンピュータ実行可能命令として、および／または図４に示されたものとは異なる変形形態で実施できることを理解されたい。
【００２４】
図６は、同期アプリケーション２００のハイレベル処理フロー図である。一形態で、図６のプロセスは、コンピューティングデバイス１００、他のコンピュータ／アプリケーション１１３、および／または他の参加者デバイス１１５の動作ロジック内で少なくとも部分的に実施される。このプロシージャは、開始ポイント２４０で開始され、ここで、参加者デバイスまたはサービスは、同期エンジンを用いて完全参加者（コンピューティングデバイス１００または一部のモバイルデバイスなど）に接続する（ステージ２４２）。デバイスまたはサービスは、ハンドラを登録するか、他の形で完全参加者上の同期エンジンと通信する（ステージ２４４）。同期エンジンは、デバイスまたはサービスのタイプを検出し（ステージ２４６）、参加者のタイプに基づく適当な同期ロジックすなわち単純（判断ポイント２４８）、部分（判断ポイント２５０）、または完全（判断ポイント２５２）を実行する。たとえば、デバイスまたはサービスが、同期データストアを有するが知識を有しない単純参加者である場合に（判断ポイント２４８）、同期エンジンは、単純参加者での変更を検出し、完全参加者上のそれ自体のローカルデータストアにすべての衝突を格納する（ステージ２５４）。
【００２５】
デバイスまたはサービスが、同期データストアを有し、格納されるが理解されない知識を有する部分参加者である場合に（判断ポイント２５０）、そのデバイスまたはサービスは、その知識ストアを完全参加者上の同期エンジンに提供する（ステージ２５８）。完全参加者は、例外の場合など、知識に対する変更を行い（ステージ２６０）、完全参加者は、変更された知識を部分参加者に戻して転送する（ステージ２６２）。部分参加者デバイスまたは部分参加者サービスによって担持される知識は、例外が発生する時であっても、そのデバイスまたはサービスが複数のマスタと安全に同期することを可能にする（ステージ２６４）。デバイスまたはサービスが、同期データストアを有し、また、知識を格納し理解する、完全参加者である場合に（判断ポイント２５２）、両方の参加者が、知識を使用してデータの変更されたセットをどのようにして最適に同期すべきかを知っている（ステージ２６６）。完全参加者の間でデータを同期する１つまたは複数の実施形態を、図１８〜２６の議論で詳細に説明する。
【００２６】
デバイスまたはサービスがそれである参加者のタイプの判定と、それに従う変更および衝突の処理の後に、同期エンジンは、オーケストレーションに従って同期ループを完了し、他の接続された参加者デバイスおよび／または参加者サービスの間で更新された変更をプルインする（ステージ２５６）。このプロセスは、終了ポイント２６８で終了する。
【００２７】
図７は、部分参加者デバイスを使用するデータの更新および同期に用いられるステージを示す処理フロー図である。一形態で、図７のプロセスは、コンピューティングデバイス１００、他のコンピュータ／アプリケーション１１３、および／または他の参加者デバイス１１５の動作ロジック内で少なくとも部分的に実施される。このプロシージャは、開始ポイント２８０で開始され、ここで、部分参加者デバイスまたは部分参加者サービスに、同期処理中に取り出されたデータを格納するデータストアと、データに対して行われた変更に関する情報（たとえば、ベクトル、ストリング、および／または完全参加者（１つまたは複数）／マスタ（１つまたは複数）が見た変化を追跡する他の形での）を格納するバージョンデータストアとを提供する（ステージ２８２）。部分参加者の少数の非限定的な例は、一部のウェブサービス、一部のサムドライブ、一部のＰＤＡおよび／または一部の電話機などの一部のモバイルデバイス、および／または知識を格納できるが理解はできない他のデバイスまたはサービスを含む。
【００２８】
部分参加者は、知識をどのように理解すべきかを知らないが、単純に知識を格納する（ステージ２８４）。部分参加者は、同期データストア内のデータの一部またはすべてを変更する要求をユーザから受け取る（ステージ２８６）。部分参加者は、ユーザによる要求通りにデータストア内のデータを変更する（ステージ２８８）。部分参加者は、それがデータに対して行う変更を追跡する責任を負い、したがって、ユーザの要求に基づいて行う変更に関連する情報を格納する（ステージ２９０）。一実施形態では、部分参加者が完全参加者と同期する時に、同期は、完全から部分へ、および部分から完全へと行われる（ステージ２９２）。一実施形態で、２つの別々の一方向同期がある。他の実施形態で、単一の一方向同期など、他の順序および／または同期シナリオも可能である。同期中に、部分参加者によって行われるすべての変更が、完全参加者によって取り出される（ステージ２９４）。完全参加者は、すべての衝突を解決した後に、部分参加者上のデータストアおよび知識を更新する（ステージ２９６）。このプロセスは、終了ポイント２９８で終了する。
【００２９】
図８は、部分参加者に、新規ティックカウントまたは他の識別子を用いてレコードを更新することによってデータに対する変更を追跡させるのに用いられるステージを示す一実施形態に係る処理フロー図である。一形態で、図８のプロセスは、コンピューティングデバイス１００、他のコンピュータ／アプリケーション１１３、および／または他の参加者デバイス１１５の動作ロジック内で少なくとも部分的に実施される。このプロシージャは、開始ポイント３００で開始され、ここで、部分参加者は、それがデータに対して行う変更を追跡する責任を負う（ステージ３０２）。部分参加者は、変更が発生したことを示すためにバージョンデータストアレコードを更新する（ステージ３０４）。少数の非限定的な例として、バージョンデータストアを、レコードが変化したことを識別し、および／またはその変更を行った最後のデバイスまたはサービスを識別する新規ティックカウント、バージョン、または他の識別子を用いて更新することができる。完全参加者は、変更されたティックカウントまたは他の識別子を読み取って、特定のレコードが特定の参加者によって変更されたことを知る（ステージ３０６）。このプロセスは、終了ポイント３０８で終了する。
【００３０】
図９は、レコード識別子および変更の日付／時刻を別々に格納することによって、部分参加者がデータに対して行った変更をその部分参加者が追跡する一実施形態に用いられるステージを示す処理フロー図である。一形態で、図９のプロセスは、コンピューティングデバイス１００、他のコンピュータ／アプリケーション１１３、および／または他の参加者デバイス１１５の動作ロジック内で少なくとも部分的に実施される。このプロシージャは、開始ポイント３１０で開始され、ここで、部分参加者は、それがデータに対して行う変更を追跡する責任を負う（ステージ３１２）。部分参加者は、レプリカレコードを識別する一意の識別子およびレコードが変更された日付／時刻を示す日付／タイムスタンプを追跡する（ステージ３１４）。完全参加者は、一意の識別子および日付／タイムスタンプを読み取って、特定のレコードが変化したことを知る（ステージ３１６）。完全参加者は、この事例では部分参加者である、レコードを変更した最後のデバイスまたはサービスを識別するティックカウントまたは他の識別子を更新する（ステージ３１８）。このプロセスは、終了ポイント３２０で終了する。
【００３１】
図１０〜１１は、図８で説明したステージに従う部分参加者デバイスによる変更の前後の部分参加者デバイス上のレコードの例を示す。一実施形態で、図１０のレコード３３０は、レプリカＩＤフィールド３３２、レコードを変更した最後の参加者のティックカウントフィールド３３４、およびレコードが完全参加者から来た時のローカルティックカウントフィールド３３６を含む。フィールド３３２、３３４、および３３６内の各々の値３３８、３４０、および３４２は、それぞれ、限られたストレージ容量および／またはリソースを有するデバイスまたはサービスでの格納に適切な、ストリング、ベクトル、および／または任意の他のタイプの表現で格納することができる。上述のように、多数の他の変形形態を使用して、部分参加者上の特定のレコードが変化したことを示すこともできる。
【００３２】
ここで図１１に移ると、レコード３４３は、部分参加者によって部分参加者上で改訂された後のデータを示す。レプリカＩＤフィールド３３２は、レコードの一意の識別子なので、「Ｘ１」（３５０）の値のままである。レコードを変更した最後のコンピュータのティックカウントフィールド３３４は、「Ｇ６６」の値（図１０の３４０）から「Ｇ６７」の値（３５２）に変更されている。「Ｇ」は、変更を行った参加者を表し、「６７」は、ティックカウンタシーケンス内で使用可能な次に大きい番号である。レコードが完全参加者フィールドから来た時のローカルティックカウントフィールド３３６は、「３４」の同一の値（３５４）のままである。
【００３３】
図１２は、図９に示されたステージによる変更の前の部分参加者デバイス上のレコードの例を示す。図１０および１１の例に似て、レコード３６０は、レプリカＩＤフィールド３６２の値３６８、レコードを変更した最後の参加者のティックカウントフィールド３６４の値３７０、および完全参加者から来た時からのローカルティックカウントフィールド３６６の値３７２を含む。この実施形態では、部分参加者は、ティックカウントを用いてレコードを更新するのではなく、別々の変更追跡レコードを更新する。レコード３６０は、部分参加者による基礎となるデータの変更の前のティックカウントを有するレコードを示す。図１３のレコード３７５は、図９で説明したステージに従って図１２のレコードに対して行われる変更を追跡するための、部分参加者デバイス上の変更追跡レコードの例を示す。レプリカＩＤフィールド３７４およびレコードが変化した時の日付／時刻フィールド３７６は、部分参加者上に格納される。この例では、値「Ｘ１」３７８が、レプリカＩＤ  ３７４について格納され、「０１−２６−０６−１２：３２ＰＭ」３８０が、日付／時刻フィールド３７６について格納される。部分参加者が、完全参加者に次に接続される時に、完全参加者は、レコード３７５を取り出し、解釈して、部分参加者が同期データストア内の基礎になるデータに対する変更を行ったことを判定する。ここで図１４に移ると、完全参加者は、次に、レコード３８１の、そのレコードを変更した最後の参加者のティックカウントフィールド３９０を更新し、このフィールド３９０は、この事例では、部分参加者および次に大きいティックカウント番号を表す「Ｇ６７」である。ローカルティックカウントフィールド３６６は、適当な場合に、更新された値３９２に改訂される。レプリカＩＤフィールド３６２の値３８８は、同一のままである。
【００３４】
図１５は、一実施形態に係る部分参加者デバイスまたは完全参加者デバイス上で格納される知識レコードの例である。図示の例では、知識レコード３９６が、本明細書で説明するようにストリングベクトルとして表され、値３９８、４００、４０２、および４０４は、参加者識別子およびその特定のデバイスについて見られた最後の変更のシーケンス番号を示す。たとえば、値「Ｇ１００」（３９８）は、この参加者が、デバイスＧに関する変更のすべてをレコード１００を介して見たことを意味する。これらの知識ベクトルは、図１８〜２６の議論でより詳細に説明する。
【００３５】
ここで図１６に移ると、単純参加者デバイスを使用するデータの更新および同期に用いられるステージを示す処理フロー図が示されている。一形態で、図１６のプロセスは、コンピューティングデバイス１００、他のコンピュータ／アプリケーション１１３、および／または他の参加者デバイス１１５の動作ロジック内で少なくとも部分的に実施される。このプロシージャは、開始ポイント４２０で開始され、ここで、同期されたデータを格納するデータストアを有するが知識を有さない単純参加者デバイスまたは単純参加者サービスを提供する（ステージ４２４）。単純なデバイスの非限定的な少数の例は、一部のサムドライブ、一部のメモリスティック／カード、一部のＰＤＡ、一部の携帯電話、および／または知識を格納できず、理解できない他のデバイスもしくはサービスを含む。単純参加者は、デバイスもしくはサービスの制限またはユーザセッティングのゆえに、知識を格納できず、理解することができない（ステージ４２６）。単純参加者は、同期データストア内のデータの一部またはすべてを変更する要求をユーザから受け取る（ステージ４２８）。
【００３６】
単純参加者は、ユーザによる要求に従って、同期データストア内のデータを変更する（ステージ４３０）。ユーザが同期データストアを変更できる方法の１つの非限定的な例は、サムドライブをパーソナルコンピュータに挿入し、その後、サムドライブの内容を変更することなど、パーソナルコンピュータなどの別のデバイスからファイルブラウザ内のデータを変更することを含む。単純参加者は、何も知らないと仮定されるので、それがデータに対して行う変更を追跡する責任を負わない（ステージ４３２）。単純参加者が、完全参加者と同期する時に、その同期は、完全参加者から単純参加者へ、およびその後に単純参加者から完全参加者へと行われる（ステージ４３４）。同期中に、単純参加者によって同期データストアに対して行われたすべての変更が、完全参加者によって取り出される（ステージ４３６）。完全参加者は、すべての衝突を解決した後に、単純参加者上の同期データストアを更新する（ステージ４３８）。このプロセスは、終了ポイント４４０で終了する。
【００３７】
図１７は、複数のデバイスおよびハンドラを有する一実施形態に係る例示的同期コミュニティの概略図である。図１７は、パーソナルコンピュータ１または「ＰＣ１」（５０６）と呼ばれる完全参加者５００と、デバイス１（５１４）と呼ばれる単純参加者と、「サービス１」と呼ばれる部分参加者５０２と、パーソナルコンピュータ２または「ＰＣ２」と呼ばれる第２の完全参加者５０４とを示す。図示のために、デバイス１（５１４）は、サムドライブまたは他のメモリカードであり、サービス１は、ウェブサーバに配置された音楽サービスであり、ＰＣ１およびＰＣ２は、コンピューティングデバイス１００に似たパーソナルコンピュータであると仮定する。完全参加者５００は、ハンドラ５０８、５１０、および５１２を有し、完全参加者５０４は、ハンドラ５１６、５１８、および５２０を有する。これらのハンドラは、同期コミュニティの一部であるさまざまな参加者とインターフェースする責任を負う。デバイス１（５１４）がＰＣ１（５０６）に接続する時に、図６で説明した同期処理が実行される。参加者のタイプ（この事例では単純）が判定され、同期が、デバイス１（５１４）と完全参加者５００のＰＣ１（５０６）との間で行われる。同期が２つの参加者（５００および５１４）の間で完了したならば、オーケストレーションは、他の参加者（５０２および５０４）がＰＣ１（５０６）またはデバイス１（５１４）に接続されている場合および／または次に接続される時に、他の参加者を更新させる。
【００３８】
ここで図１８〜２６に移り、完全参加者（たとえば、デバイス１００などの２台のパーソナルコンピュータ）の間のデータ同期の１つまたは複数の実施形態を説明する。図１８〜２６で述べる例のうちの１つまたは複数は、少なくともいくつかの部分で、前の図で説明した部分参加者シナリオまたは他のシナリオにも適用することができる。その代わりにまたはそれに加えて、図１８〜２６で述べる技法のうちの１つまたは複数を、図４のコンピューティングデバイス１００などのデバイス上で実施することができる。次の議論で使用される用語「レプリカ」は、「参加者」をも意味する。
【００３９】
同期コミュニティのレプリカ／参加者は、それら自体の知識を、それらが複製するレプリカに与えることによって複製する。複製するレプリカの間で送信されなければならない知識を表すデータの量を減らすために、知識を、前述のように知識ベクトルとして表すことができる。したがって、レプリカの間で送信される知識は、すべての変更ＩＤを含む必要はなく、複数の変更ＩＤを表すベクトルの形とすることができる。たとえば、あるレプリカが、第１変更から第１０変更までのレプリカＡによって行われたすべての変更と、第１変更から第５変更までのＢというラベルを付けられたレプリカによって行われたすべての変更とを知っている場合に、そのレプリカは、そのレプリカが変更ＩＤ  Ａ１からＡ１０までに対応するすべての変更および変更ＩＤ  Ｂ１からＢ５までに対応するすべての変更を知っていることを示す知識ベクトルＡ１０Ｂ５を送信することができる。知識を、知識ベクトルとして表すことができるが、本発明の他の実施形態は、知識の他の表現をも企図している。たとえば、本発明のいくつかの実施形態は、（１）知識の表現に変更を追加でき、（２）ある変更が知識の表現に含まれるかどうかをチェックでき、（３）知識の２つの表現を一緒にマージできる、知識の任意の表現を使用して知識を表す。
【００４０】
図１８に、図示のトポロジーを有する同期コミュニティ１１００の一例を示す。同期コミュニティ１１００は、複数のレプリカを含み、本発明の実施形態を実施する環境の一例である。同期コミュニティ１１００内のレプリカは、コンピュータ、ノートブックコンピュータ、携帯情報端末、携帯電話、他の無線デバイス、サーバコンピュータ、オンラインサービス、および類似物、またはこれらの任意の組合せを含むことができるがこれらに限定はされない様々なデータストアまたはデバイスを表す。
【００４１】
図１８では、レプリカＡ  １１０２を、通信リンク１１０６を介してレプリカＢ  １１０４に電子的に接続することができる。レプリカＡ  １１０２を、通信リンク１１０８を介してレプリカＣ  １１１０に接続することができる。レプリカＣ  １１１０を、通信リンク１１１２を介してレプリカＢ  １１０４に接続することができる。レプリカＣ  １１１０を、さらに、通信リンク１１１６を介してレプリカＤ  １１１４に接続することができる。この同期コミュニティ１１００では、レプリカのすべてが通信リンクを介して直接に接続されているのではないが、レプリカのいずれかでの変更を、同期コミュニティ１１００内の他のレプリカのいずれにも複製することができる。
【００４２】
たとえば、レプリカＡ  １１０２をレプリカＤ  １１１４に複製するために、レプリカＡ  １１０２およびレプリカＣ  １１１０を、通信リンク１１０８を介して複製することができる。したがって、レプリカＣ  １１１０は、レプリカＡ  １１０２上で行われた変更を含む。次に、レプリカＣおよびＤを、通信リンク１１１６を介して複製し、このようにして、レプリカＤ  １１１４は、レプリカＡ  １１０２からの変更を含む。この形で、レプリカＡ  １１０２は、いかなる種類の直接リンクを用いることなく、レプリカＤ  １１１４に複製することができる。実際に、レプリカＡ  １１０２およびレプリカＤ  １１１４は、同期コミュニティ１１００内でお互いの存在を知りさえしない場合がある。図示の通信リンクは、有線リンクおよび／または無線リンクとすることができる。
【００４３】
ここで図１９を参照すると、本発明の一実施形態が、変更がレプリカ内でどのように管理されるかを示す。図１９は、レプリカＡ  １２００の時間的進行を示す。レプリカＡ  １２００は、この事例ではＫAというラベルを付けられた知識１２０２と、この事例ではΔAというラベルを付けられた変更１２０４とを含む。変更１２０４内の各変更は、あるアイテムの現在のデータ内容である。変更は、どのアイテムも本質的に変更されていない場合であっても、レプリカに追加された新規アイテム、アイテムの削除、および類似物とすることができる。変更１２０４のそれぞれは、本発明の一実施形態では変更ＩＤである、バージョンに関連する。特に、本発明の１つの有利な側面は、以前の変更に関する情報を含む変更ログを維持する必要がないことである。そうではなく、各レプリカは、知識と変更（すなわち、現在のアイテム）のデータベースとを含み、各変更は、対応するバージョンを有する。時刻（１）に、レプリカＡ  １２００は、定常状態である。時刻（２）に、ユーザが、Ｘというラベルを付けられた変更をレプリカＡ  １２００に入力する。図１９は、変更Ｘが変更１２０４のメンバーとして追加されていることを示す。知識１２０２は、変更ＩＤすなわちＣｈａｎｇｅＩＤ（Ｘ）を含むように更新され、このＣｈａｎｇｅＩＤ（Ｘ）は、変更Ｘに関連し、変更１２０４への変更Ｘの追加を識別する。この実施形態は、レプリカに対する変更が特定の変更ＩＤに関連付けられる１つの形を示す。知識１２０２は、知識ベクトルとすることができ、レプリカＡ  １２００が知っている変更を表す。本発明の一実施形態で、バージョンまたは変更ＩＤは、データベース内でアイテムまたはオブジェクトについて維持され、バージョンは、複製される必要があるものを識別するのに使用することができる。もしくは、変更のログをも維持することができる。
【００４４】
図２０は、複製中に変更を列挙するための知識の使用を示す。図２０は、２つのレプリカすなわち、レプリカＡ  １３０２およびレプリカＢ  １３０４を示す。レプリカＡ  １３０２は、この例ではΔAというラベルを付けられた変更のセット１３０６を含む。レプリカＡ  １３０２は、さらに、この例ではＫAというラベルを付けられた知識１３０８を含む。知識１３０８は、上述したような変更ＩＤのリストを含む。同様に、レプリカＢ  １３０４は、変更ＩＤであるバージョンにそれぞれが関連する変更のセット１３１０を含む。複製を開始するために、時刻（１）に、レプリカＡ  １３０２は、知識１３０８を含む同期要求をレプリカＢ  １３０４に送信する。レプリカＢ  １３０４は、知識１３０８を、変更のセット１３１０内の変更のそれぞれに関連するバージョンと比較することによって、レプリカＡ  １３０２が既にレプリカＢの変更１３１０のどれをその変更１３０６内に有するか、およびレプリカＡが知っている変更に関する判断を行うことができる。もしくは、レプリカＢ  １３０４は、知識１３０８を各アイテムのバージョンと比較する。したがって、レプリカＢ  １３０４は、時刻（２）に、レプリカＢの変更１３１０のうちで、変更１３１４によって示される、レプリカＡ  １３０２の知識１３０８に含まれていないバージョンに関連する部分だけをレプリカＡ  １３０２に送信する。たとえば、レプリカＡの知識ベクトルが、Ａ３Ｂ１２であり、レプリカＢが、変更ＩＤ  Ｂ１３およびＢ１４であるバージョンに関連する現在の変更を有する場合に、レプリカＡに送信される変更は、変更ＩＤ  Ｂ１３およびＢ１４に関連する変更を含むはずである。一実施形態で、Ｂ１３およびＢ１４が同一アイテムに対して行われた場合には、Ｂ１４だけが送信される。
【００４５】
さらに、レプリカＢ  １３０４は、レプリカＢの知識１３１２をもレプリカＡ  １３０２に送信する。レプリカＢ  １３０４が、まだレプリカＡ  １３０２にはない、レプリカＢ  １３０４内で使用可能な変更１３１０のすべてをレプリカＡ  １３０２に送信したので、レプリカＡ  １３０２は、今や、変更１３１０がレプリカＢ  １３０４によって送信された変更によって取って代わられてはいない限り、最初にレプリカＢ  １３０４内にあった変更１３１０に加えて、最初にレプリカＡ  １３０２内にあった変更１３０６のすべてを有する。レプリカＡ  １３０２は、さらに、レプリカＢ  １３０４が知っていた変更のすべてに関する情報を有する。したがって、レプリカＡ  １３０２は、変更１３１０の追加を反映するためにその知識１３０８を更新することができる。これは、単純に、図２０の時刻（３）に示されているように、レプリカＡの知識１３０８をレプリカＢの知識１３１２に追加し、その値をレプリカＡの知識１３０８として定義することによって行われる。
【００４６】
したがって、必要な変更だけが複製され、複製する個々のレプリカが、その特定のレプリカ内に存在する変更およびその特定のレプリカが知っている以前の変更に関する情報を維持することだけが必要である、効率的な複製が実行される。この例は、レプリカＢ上のすべての変更のレプリカＡへの完全な複製を示すが、変更の一部だけが複製される場合が存在する。したがって、複製される変更に対応する変更ＩＤだけが、更新を受信するレプリカの知識に追加される。
【００４７】
変更の列挙に加えて、レプリカの知識を、衝突検出に使用することもできる。ここで図２１を参照すると、本発明の一実施形態は、衝突検出をどのように達成できるかを示す。図２１は、通信および複製のために電子リンク（無線および／または有線）によって接続された２つのレプリカを示す。レプリカＡ  １４０２は、知識１４０８と変更のセット１４０６とを含む。図２０の例と同様に、知識１４０８は、変更１４０６に関連する変更ＩＤおよび以前の変更に関連する変更ＩＤの集合を含む。レプリカＡ  １４０２は、さらに、この例において、レプリカＡ  １４０２内で行われた、アイテムに対する変更を含む。この変更は、Ｘというラベルを付けられ、Ｘは、変更１４０６のメンバーである。同様に、レプリカＢ  １４０４は、知識１４１２と、それぞれがその現在のバージョン（変更ＩＤ）を有するアイテムの集合１４１０とを含む。実例として、時刻（１）に、レプリカＡ  １４０２は、変更ＸをレプリカＢ  １４０４に送信する。
【００４８】
変更Ｘに関連し、変更Ｘと共に送信されるのが、２つの他の値すなわち、ＣｈａｎｇｅＩＤ（Ｘ）というラベルを付けられた、変更Ｘに関連する変更ＩＤと、ＫA（Ｘ）というラベルを付けられた、知識を用いた作成（ｍａｄｅ−ｗｉｔｈ−ｋｎｏｗｌｅｄｇｅ）値である。知識を用いた作成値は、変更ＸがレプリカＡ  １４０２に対して行われた時にレプリカＡ  １４０２に存在した知識である。その代わりに、本発明のいくつかの実施形態では、知識を用いた作成を、変更が送信される時にレプリカに存在した知識としてもよい。レプリカＡの現在の知識１４０８をも、レプリカＢ  １４０４に送信することができる。時刻（２）に示されているように、レプリカＢ  １４０４は、変更Ｘによって変更されたアイテムを、変更Ｙによって変更されたアイテムと比較して、Ａの変更（Ｘ）がＢの状態と衝突する可能性があるかどうかを判定する。
【００４９】
変更が、同一アイテムの異なるバージョンを参照する場合には、さらなる分析が必要である。レプリカＢ  １４０４は、次に、変更Ｘが、変更ＹがレプリカＢ  １４０４で行われた時にレプリカＢ  １４０４に知られていたかを調べる。変更Ｙは、変更ＩＤ  ＣｈａｎｇｅＩＤ（Ｙ）と、それに関連する、知識を用いた作成値ＫB（Ｙ）とを有する。ＣｈａｎｇｅＩＤ（Ｘ）が、変更Ｙの知識を用いた作成ＫB（Ｙ）のメンバーである場合には、衝突はない。言い換えると、変更Ｙは、レプリカＡ  １４０２で行われた変更Ｘの知識を用いて、レプリカＢ  １４０４内で行われた。したがって、変更Ｙは、今は、レプリカＡおよびＢに関する最新の有効なデータを表す。図２１によって示される例に示されてはいないが、後続の時刻に、変更Ｙは、おそらくはレプリカＡ  １４０２に送信され、変更ＸおよびＹに関連するアイテムが、図２０で説明した形でレプリカＡ  １４０２上で変更Ｙに更新される。
【００５０】
変更ＸおよびＹが同一アイテムに関するものであり、ＣｈａｎｇｅＩＤ（Ｘ）がＫB（Ｙ）に現れない場合には、時刻（４）に示されているように、変更Ｙが、変更Ｘが行われた時にレプリカＡ  １４０２に知られていたかを知るためにチェックを行う。これは、通常、ＣｈａｎｇｅＩＤ（Ｙ）として図示された、変更Ｙに関する変更列挙が、変更Ｘが行われた時のレプリカＡの知識１４０８すなわちＫA（Ｘ）に含まれるかどうかを調べることによって行われる。ＣｈａｎｇｅＩＤ（Ｙ）がＫA（Ｘ）のメンバーである場合には、変更Ｘは、変更Ｙの知識を用いて作成されたもので、衝突はない。変更Ｘは、その特定のアイテムに関する最新の有効な変更である。したがって、レプリカＢ  １４０４は、おそらくは、図２０で説明した形で変更Ｘを用いて更新される。
【００５１】
変更ＸおよびＹが同一アイテムに関するものであり、ＣｈａｎｇｅＩＤ（Ｙ）がＫA（Ｘ）に現れず、ＣｈａｎｇｅＩＤ（Ｘ）がＫB（Ｙ）に現れない場合には、真の衝突が存在する。言い換えると、変更Ｘおよび変更Ｙは、お互いに独立に行われた。この場合に、衝突が報告され、変更ＸまたはＹのどちらが最新の有効な変更であるかを判定するために、さまざまな衝突解決ルールを適用することができる。そのようなルールは、どの変更が最も最近に行われたかを判定するためのタイムスタンプのチェック、あるタイプのレプリカ（サーバに格納されたレプリカなど）を優先して必ず衝突を解決すること、および／または任意の他の適切な衝突解決を含むことができる。あるいは、衝突解決の１つの形で、衝突する変更を伴うアイテムを、新しい変更を形成するために衝突する変更がマージされるように、更新することができる。
【００５２】
ここで図２２を参照すると、変更ＩＤおよび知識追跡の１つの例示的実施形態が示されている。図２２は、レプリカ１５０２を示す。レプリカ１５０２は、変更の集合１５０６および知識１５０８を含む。変更の集合１５０６は、この例ではＸ、Ｙ、およびＺとして図示された複数の個々の変更１５１０を含む。図２２に示された例では、レプリカの知識の現在の状態は、この事例ではＡ４である知識ベクトル１５１２によって表される。知識ベクトル１５１２は、レプリカＡの知識１５０８のすべてを表す。
【００５３】
図２２には、複数の変更ＩＤ  １５１４も表されている。図２２の例では、レプリカＡ  １５０２は、変更１５１０に対応する３つの変更されたアイテム１５１６すなわちＩX、ＩY、およびＩZを含む。変更ＩＤを使用すると、変更ＩＤ  Ａ１を有するアイテムＩXが、レプリカＡ  １５０２内で最初に作られたことを見分けることができる。変更ＩＤ  Ａ２を有する変更ＩYは、アイテムＩXより後の時刻にレプリカＡ  １５０２内で行われた。変更ＩＤ  Ａ４を有するアイテムＩZは、アイテムＩYが作られた時より後の時刻にレプリカＡ  １５０２内で行われた。Ａ３は、図２２に直接に図示されてはいないが、一例でＡ４というラベルを付けられたアイテムＩZへの変更によって取って代わられる変更など、以前の変更に対応するものとすることができる。
【００５４】
変更ＩＤ  Ａ４と、やはりＡ４というラベルを付けられたレプリカＡの知識ベクトル１５１２との間には、相違がある。この例では、知識ベクトルＡ４は、レプリカＡの知識１５０８が、Ａ４、Ａ３、Ａ２、およびＡ１というラベルを付けられた変更ＩＤに対応する変更を含むことを意味する。言い換えると、知識ベクトルは、その知識ベクトルと等しい変更ＩＤ  １５１８によって表される変更ならびにその知識ベクトルで表される変更ＩＤ  １５１８の前に行われた同一レプリカＩＤを有するすべての変更を含む。その一方で、現在の例では、Ａ４というラベルを付けられた変更ＩＤ  １５１８は、アイテムＩZに対して行われた変更Ｚだけを表す。
【００５５】
ここで図２３を参照すると、複数のレプリカを含むトポロジー内で複製する２つのレプリカの例が示されている。レプリカＡ  １６０２は、変更のセット１６０４、知識１６０６、および知識１６０６の省略表現である知識ベクトル１６０８を含む。実例として、レプリカＡ  １６０２の知識ベクトル１６０８すなわちＡ５Ｂ３Ｃ１Ｄ１０は、レプリカＡの知識１６０６が、レプリカＡ  １６０２の第５の変更までに行われた変更、レプリカＢ  １６１０の第３の変更までの知識、レプリカＣの第１の変更までの知識、およびレプリカＤの第１０の変更までの知識を含むことを示す。レプリカＢ  １６１０は、図２３の例では、変更のセット１６１２、知識１６１４、およびレプリカＢの知識１６１４の省略表現である知識ベクトル１６１６を含む。レプリカＢの知識ベクトル１６１６すなわちＡ３Ｂ３Ｃ５Ｄ８は、レプリカＢが、レプリカＡ  １６０２によって行われた第３の変更までの知識、レプリカＢ  １６１０によって行われた第３の変更までの知識、レプリカＣによって行われた第５の変更までの知識、およびレプリカＤによって行われた第８の変更までの知識を含む知識を有することを示す。上で示した知識ベクトルは、あるレプリカによって行われた、第１の変更からある後続変更までの変更列挙の連続表現を含む。本明細書で後でより詳細に説明するように、知識ベクトルは、レプリカによって行われた最初の変更列挙ではない他の変更列挙である開始ポイントをも含むことができる。
【００５６】
レプリカＢ  １６１０とのレプリカＡ  １６０２の複製の時間的な図が、図２３に示されている。時刻（１）に、レプリカＡ  １６０２は、レプリカＡの知識ベクトル１６０８によって表すことができるレプリカＡの知識１６０６と一緒に、同期要求１６１８をレプリカＢ  １６１０に送信する。レプリカＢ  １６１０は、時刻（２）に、レプリカＡの知識１６０６をレプリカＢ内の変更に関連する変更ＩＤと比較することによって、レプリカＡの知識１６０６を検査する。レプリカＢ  １６１０は、レプリカＡが、変更ＩＤ  Ｃ２、Ｃ３、Ｃ４、およびＣ５というラベルを付けられた、レプリカＣによって行われた変更を知らないことを発見する。したがって、レプリカＢは、これらの変更ＩＤのラベルを付けられた変更がレプリカＢ  １６１０内のアイテムに適用可能な最新の変更である限り、これらの変更ＩＤに対応するレプリカＢの変更１６１２を送信する。変更ＩＤが、以前の古い変更に対応する場合には、そのＩＤに対応する変更は送信されない。たとえば、バージョンＣ３を有したアイテムが、更新され、新しいバージョンを割り当てられた場合に、Ｃ３に関連する変更は、もはやレプリカＢ  １６１０内に存在せず、レプリカＡには送信されない。その後または同時に、時刻（３）に示されているように、レプリカＢ  １６１０は、知識ベクトル１６１６として表すことができるレプリカＢの知識１６１４をレプリカＡ  １６０２に送信する。
【００５７】
時刻（４）に、レプリカＡ  １６０２は、レプリカＢによって送信された知識１６１４をレプリカＡ  １６０２内の変更に対応する変更ＩＤと比較することによって、知識１６１４を検査する。レプリカＡ  １６０２は、レプリカＢが、変更ＩＤ  Ａ４、Ａ５、Ｄ９、およびＤ１０によって表される変更またはこれらの変更に関する知識のいずれをも有しないことを発見する。したがって、レプリカＡ  １６０２は、これらの変更ＩＤに対応するレプリカＡの変更１６０４に存在するすべての現在の変更を送信する（変更ＩＤが古い変更を表し、変更が送信されない時を除く）。レプリカＡ  １６０２は、その後、すべての変更が送信され、レプリカＡ  １６０２およびレプリカＢ  １６１０が、今や、最近複製された変更を含めるためにそれぞれ知識ベクトル１６０８および１６１６を更新できることを示すメッセージをレプリカＢ  １６１０に送信することができる。図２３で時刻（５）に示されているように、レプリカＡの知識ベクトルＡ５Ｂ３Ｃ５Ｄ１０は、レプリカＢの知識ベクトルと等しく、これらの知識ベクトルは、第５の変更列挙までのレプリカＡによって行われたすべての変更、第３の変更列挙までのレプリカＢによって行われたすべての変更、第５の変更列挙までのレプリカＣによって行われたすべての変更、および第１０の変更列挙までのレプリカＤによって行われたすべての変更を含む。
【００５８】
ここで図２４Ａおよび２４Ｂを参照すると、図２３に表されたものなどの完全な複製の後に知識ベクトルを更新する２つの方法が示されている。具体的に言うと、図２４Ａは、レプリカで格納される例外リスト１７０２を使用して知識ベクトルを更新する方法を示す。例外リスト１７０２を作成するために、変更がレプリカの間で送信される時に、それらの変更は、変更に関連する変更ＩＤと共に送信される。変更がレプリカに追加される時に、変更ＩＤが、例外として例外リスト１７０２に追加される。ここで図２４ＡのレプリカＡの知識を調べると、この知識は、知識ベクトル１６０８と、例外Ｃ２、Ｃ３、Ｃ４、およびＣ５を含む例外リスト１７０２とを含む。知識ベクトル１６０８と共に例外リスト１７０２を検査することによって、例外リスト１７０２からの変更ＩＤを含めて、レプリカＡの知識が、レプリカＣによって行われた第５の変更までのすべての変更を含むことが明らかになる。したがって、例外を、レプリカＡ  １６０２の知識から除去することができ、知識ベクトルを、更新された知識ベクトル１７０４に示されているように、要素Ｃ５を含むように更新することができる。類似する分析を、レプリカＢ  １６１０の知識１６１４に対して実行することができる。例外リスト１７０３の例外Ａ４、Ａ５、Ｄ９、およびＤ１０と組み合わされたオリジナルの知識ベクトル１６１６は、知識ベクトル１６１６を更新された知識ベクトル１７０６に更新することを可能にする。
【００５９】
特に、部分的複製だけが実行された場合、たとえば変更ＩＤ  Ａ４およびＤ９に対応する変更が図２３によって表されるものなどの複製で送信されなかった場合などに、レプリカＢ  １６１０の知識１６１４は、変更ＩＤ  Ａ４およびＤ９によって表される変更をレプリカＢ  １６１０に転送する、別のレプリカとの後続複製まで、例外Ａ５およびＤ１０を維持する必要がある。
【００６０】
図２４Ｂに、図２３に示された複製を反映するために知識ベクトル１６０８および１６１６を更新するもう１つの方法を示す。この例では、更新された知識ベクトル１７０８を形成するために、知識ベクトルが、オリジナルの知識ベクトル１６０８および１６１６内の要素のそれぞれの要素ごとの最大値を使用して更新される。知識ベクトル１６０８および１６１６のそれぞれの第１要素は、レプリカＡ内で行われた変更にラベルを付ける変更ＩＤのセットに対応する。Ａ５は、２つの知識ベクトル１６０８および１６１６の要素ごとの最大要素なので、更新された知識ベクトル１７０８は、要素Ａ５を含む。同様に、ベクトル要素Ｂ３、Ｃ５、およびＤ１０は、それぞれ、要素のそれぞれが対応する特定のレプリカ上の変更に対応する、要素ごとの最大要素である。更新された知識ベクトル１７０４、１７０６、および１７０８のそれぞれを調べることによって、どちらの方法によっても、同一の更新された知識ベクトルが得られることが明らかになる。知識ベクトル更新の要素ごとの最大値法は、通常、完全な複製が実行された時に使用され、知識ベクトル更新の例外リスト法は、完全な複製が行われたことが確かではない（ユーザが複製を取り消す可能性があり、デバイスがクラッシュする可能性があるなど）時に有用である可能性がある。すなわち、例外リスト法は、レプリカの完全な知識を単純なベクトル形式で表現できない時に、例外が特定のレプリカの知識の一部を構成し続ける可能性があるので、使用される必要がある場合がある。
【００６１】
ここで図２４Ｃを参照すると、知識更新の例が、不完全な複製からの情報を有するレプリカについて示されている。図２４Ｃは、オリジナルの知識ベクトル１７１０、オリジナルの例外リスト１７１２、更新された知識ベクトル１７１４、および更新された例外リスト１７１６を含む。図示のレプリカに関して、部分的複製の後に、このレプリカは、ベクトル要素Ａ５によって表される、Ａ１からＡ５までのラベルを付けられた変更ＩＤのすべてと、Ａ７、Ａ８、Ａ９、およびＡ１０を含む例外のリストによって表される、Ａ７からＡ１０までのラベルを付けられた変更ＩＤのすべてとを有する。図２４Ｃに示されているように、知識の更新されたバージョンでは、更新された例外リスト１７１６を短縮して、図２４Ｃに示された例外（Ａ７：Ａ１０）によるなど、Ａ７からＡ１０までのすべての要素の包含を示すことができる。この表現は、ベクトルの開始ポイントがレプリカＡの第１の変更列挙以外のあるポイントであることを除いて、単純に、本明細書で前に述べたベクトルなどのベクトルである。したがって、Ａに関するレプリカの知識の表現は、ベクトル要素Ａ５および例外ベクトル（Ａ７：Ａ１０）によって表される。
【００６２】
レプリカＢに関するレプリカの知識の場合に、知識ベクトル１７１０を、レプリカＢのベクトル要素に含まれる変更ＩＤの後に連続する変更ＩＤを含むように更新することができる。ベクトル要素Ｂ１は、変更ＩＤ  Ｂ１だけを含む。変更ＩＤ  Ｂ２、Ｂ３、およびＢ４は、例外リスト１７１２に存在し、知識ベクトル１７１０に含まれる変更ＩＤ  Ｂ１と連続するので、レプリカＢのベクトル要素を、要素Ｂ１からＢ４までの包含を表す更新された知識ベクトル１７１４内のＢ４に更新することができる。変更ＩＤ  Ｂ５は、例外リストから欠けているので、例外Ｂ６は、更新された知識内の例外リスト１７１６内に残らなければならない。
【００６３】
類似する分析を、レプリカＣによって行われた変更に関する図２４Ｃのレプリカの知識に関して実行することができる。オリジナルの知識ベクトル１７１０は、Ｃ５を含む。オリジナルの例外リストは、Ｃ６、Ｃ７、およびＣ８を含む。オリジナルの知識ベクトル要素Ｃ５は、変更ＩＤ  Ｃ１からＣ５までを含み、Ｃ５は、オリジナルの例外リスト１７１２内の変更ＩＤと連続するので、レプリカＣの更新された知識ベクトル要素を、Ｃ８に更新することができる。
【００６４】
知識ベクトルのサイズに関して生じる可能性がある１つの課題は、同期コミュニティ内のレプリカの個数が多い時に特に認められる。知識ベクトルが同期コミュニティ内の各すべてのレプリカの変更ＩＤまたは他のベクトル要素を含むトポロジーでは、知識ベクトルは、同期コミュニティに追加される各レプリカに伴って増大する。１つの最適化は、いくつかの同期コミュニティで、すべてのレプリカを知識ベクトルで表現する必要があるのではないことを認識することである。そのような事例の１つの例示は、ハブアンドスポークサーバトポロジーを表す図２５に示された同期コミュニティである。図２５は、レプリカＡ  １８０４、レプリカＢ  １８０６、レプリカＣ  １８０８、およびレプリカＤ  １８１０を含む複数のクライアントに接続されたサーバ１８０２を示す。この例では、クライアントの間のすべての複製経路１８１２〜１８１８が、サーバ１８０２を通り、したがって、サーバ１８０２は、サーバ１８０２を含む変更ＩＤをレプリカＩＤとして割り当てることができる。個々のクライアント１８０４〜１８１０内で行われるすべての変更が、それぞれのクライアント内に留まり、それぞれのクライアントでは、変更は、複製が実行されるまで変更ＩＤの割当なしで行われる。したがって、この例では、知識ベクトルは、サーバ１８０２のレプリカＩＤおよび変更ＩＤを備える単一の要素を含む。実例として、変更が、レプリカＡ  １８０４内で行われ、サーバ１８０２で初めて複製される場合に、サーバ１８０２は、その変更にＳ１の変更列挙を割り当てる。後の時刻に、レプリカＢ  １８０６内で行われる変更が、サーバ１８０２に複製される。この変更は、サーバによってＳ２の変更列挙を割り当てられる。特に、この例では、サーバ１８０２がすべての変更列挙を割り当てるが、サーバ１８０２が一部の変更列挙を割り当て、他のレプリカが他の変更列挙を割り当てる、他の実施形態が存在し得る。
【００６５】
本発明の実施形態は、他のトポロジーの知識ベクトルをも最適化するように適合可能である。たとえば、図１８で、レプリカＤ  １１１４は、レプリカＣ  １１１０との複製だけを行う。したがって、ＣおよびＤによって行われる変更は、単一のレプリカＩＤを有する変更列挙を使用して列挙することができる。一例で、レプリカＣのレプリカＩＤが、レプリカＣ  １１１０またはレプリカＤ  １１１４のいずれかによるすべての変更の変更列挙の一部になるように選択される場合に、レプリカＣでの最初の変更は、変更列挙Ｃ１によってラベルを付けられるはずである。レプリカＤ  １１１４での後続の変更は、Ｃ２というラベルを付けられ、以下同様である。１つのレプリカが、異なるレプリカで行われる変更の変更ＩＤを作成する時に、その変更ＩＤを作成するレプリカを、サロゲートオーサ（ｓｕｒｒｏｇａｔｅ  ａｕｔｈｏｒ）と称する場合がある。
【００６６】
特定のトポロジーまたは同期コミュニティの知識ベクトルを最適化することによって、知識ベクトルを格納するのに使用されるリソースを、図２５に示されたようなハブアンドスポークサーバクライアントトポロジーとほぼ等しいトポロジーで節約することができる。ピアツーピアネットワークにより似たトポロジーでは、より大きい知識ベクトルが必要であるが、個々のレプリカは、同期ループ、偽衝突、および類似物などの問題を回避しながらより多数の他のレプリカと効率的に独立に複製することができる。
【００６７】
異なるレプリカが、互いに独立にアイテムに対する変更を行うことを許容される時に、独立に行われる変更の間の、解決されなければならない衝突が生じる場合がある。衝突解決は、通常、どのアイテムバージョンを有効なアイテムとして選択しなければならないかを決定する、あるルールがあることを必要とする。これらのルールの一部の例は、最後に行われたアイテム変更を選択すること、または他のタイプのレプリカによって行われる変更よりもサーバによって行われる変更を優先するなど、特定のタイプのレプリカによって行われるアイテム変更を選択することを含む。あるいは、すべての衝突を、手動解決のためにログ記録することができる。手動解決は、衝突しているアイテムの新しい値をユーザが提供し衝突する変更が置き換わることによって達成される。
【００６８】
ある同期コミュニティまたはトポロジー内のすべてのレプリカが、同一の方式で衝突を解決する場合、そのシステム内のすべてのレプリカが任意の衝突の複製された解決策に移行するので、他の解決ルールまたは解決システムは、通常は不要である。同期コミュニティ内のレプリカは、正確に同一の方式で衝突を解決するように特に設計されてはいない場合があるが、ある同期コミュニティ内のレプリカは、それでも、正確に同一の方式で衝突を解決することができる。これのそのような例を、図２６Ａに示す。図２６Ａは、レプリカＤ  １９０２を示す。レプリカＤ  １９０２は、アイテムＩXでの変更に対応する変更ＩＤを受信する。ここで、その変更ＩＤはＡ４である。その後、レプリカＤ  １９０２は、同一アイテムＩXの変更ＩＤを受信する。ここで、その変更ＩＤはＢ５である。レプリカＤ  １９０２は、アイテムＩXに対する変更のうちのどれが好ましい変更であるかを選択する衝突解決ルールを有する。この場合に、レプリカＤは、変更ＩＤ  Ａ４によってラベルを付けられた、アイテムＩXに対する変更を選択する。衝突がレプリカＤ  １９０２によって解決されたこと、およびその衝突がどのように解決されたかを示すために、衝突解決の結果と、衝突解決を行った特定のレプリカによって割り当てられた新しい変更ＩＤとの両方を含む新しい変更ＩＤが、アイテムＩXに割り当てられる。この新しい変更ＩＤは、衝突解決を行ったレプリカの次のシーケンシャル変更列挙を含む。この場合に、新しい変更ＩＤは、Ａ４というラベルを付けられた変更が衝突解決で選択されたことと、衝突がレプリカＤ  １９０２によって解決されたこととを示すために、Ａ４（Ｄ７）というラベルが付けられる。図２６Ａに示されているように、類似するプロセスが、変更の衝突がレプリカＣ  １９０４によって検出される時に発生する。レプリカＣ  １９０４は、レプリカＤ  １９０２と同一の方法で衝突を解決する。したがって、Ａ４（Ｃ３）というラベルを付けられた新しい変更ＩＤが、アイテムＩXの変更に割り当てられる。この場合、変更ＩＤ  Ａ４およびＢ５を用いてラベルを付けられたアイテムＩXに対する変更の間の衝突は、最終的に、トポロジー内のレプリカのすべてで同一の方式で解決される。
【００６９】
図２６Ｂに、衝突がトポロジー内の異なるレプリカによって異なって解決される例を示す。図２６Ｂでは、時刻（１）に、レプリカＤ  １９０２が、ある方式で衝突を解決し、衝突の解決Ｂ５およびその変更を行ったレプリカ（Ｄ７）を示す新しい変更ＩＤをアイテムに割り当てる。時刻（２）に、レプリカＣ  １９０４が、レプリカＣ  １９０４によって割り当てられる新しい変更ＩＤすなわちＡ４（Ｃ３）によって示される異なる方式で、同一の衝突を解決する。時刻（３）に、レプリカＤ  １９０２は、レプリカＣによる衝突の解決を受信する。レプリカＤ  １９０２は、この時点で、この特定の衝突が２つの異なる方式で解決されたことを認識する。したがって、本発明の実施形態は、アイテムＩXに対する衝突する変更の間で決定論的解決が行われることを指定する。図２６Ｂによって示される特定の決定論的解決は、最小の値のレプリカＩＤを有する変更を決定論的結果として選択させる。したがって、Ａは、レプリカＢより小さい値のレプリカＩＤなので、衝突の決定論的解決は、変更ＩＤ  Ａ４によってラベルを付けられた変更になるように選択される。したがって、レプリカＤ  １９０２は、アイテムＩに対する変更に関連する変更ＩＤを、Ａ４（Ｄ７）になるように変更する。複製ループまたは他の衝突問題を避けるために、変更を行うレプリカに関連する変更列挙（すなわち、Ｄ７）は、決定論的結果１９０６において、オリジナルの衝突の解決１９０８と同一であることに留意されたい。
【００７０】
本主題を、構造的特徴および／または方法論的行為に固有の言葉で説明したが、添付の特許請求の範囲で定義される本主題が、必ずしも上述の特定の特徴または行為に限定されないことを理解されたい。そうではなく、上述の特定の特徴および行為は、特許請求の範囲を実施する例の形態として開示される。本明細書でおよび／または添付の特許請求の範囲によって記述される実施形態の趣旨に含まれるすべての同等物、変更、および修正形態が、保護されることが望まれる。
【００７１】
たとえば、コンピュータソフトウェア技術の当業者は、本明細書で述べた例で説明されるクライアントおよび／またはサーバ配置、ユーザインターフェース画面内容、および／またはデータレイアウトを、その例に示されたものより少数のまたは追加のオプションまたは特徴を含めるために、１つまたは複数のコンピュータで異なって編成できることを認めるであろう。
【図面の簡単な説明】
【００７２】
【図１】完全参加者、部分参加者、および単純参加者をグラフィカル表現で示す、一実施形態に係る同期ピア参加者モデルを示す概略図である。
【図２】完全参加者、部分参加者、および単純参加者を表表現で示す、一実施形態に係る同期ピア参加者モデルを示す概略図である。
【図３】参加者デバイスとインターフェースするハンドラを用いる一実施形態に係る同期システムを示す概略図である。
【図４】完全参加者デバイス上で同期アプリケーションを動作させるためなど、１つまたは複数の実施形態のための好適な動作環境である例示的コンピュータシステムを示す図である。
【図５】一実施形態に係る同期アプリケーションの概略図である。
【図６】本システムの一実施形態のハイレベル処理フロー図である。
【図７】部分参加者デバイスを使用するデータの更新および同期に用いられるステージを示す、一実施形態の処理フロー図である。
【図８】部分参加者デバイスに、新規ティックカウントまたは他の識別子でレコードを更新することによって、データに対する変更を追跡させるのに用いられるステージを示す、一実施形態の処理フロー図である。
【図９】レコード識別子および変更の日付／時刻を別々に格納することによって、部分参加者デバイスがデータに対して行った変更をその部分参加者デバイスに追跡させるのに用いられるステージを示す、一実施形態の処理フロー図である。
【図１０】部分参加者デバイスによる変更の前の部分参加者デバイス上のレコードの例を示す図である。
【図１１】部分参加者デバイスによる変更の後の部分参加者デバイス上のレコードの例を示す図である。
【図１２】変更の前の部分参加者デバイス上のレコードの例を示す図である。
【図１３】図１２のレコードに対して行われる変更を追跡するための部分参加者デバイス上の変更追跡レコードの例を示す図である。
【図１４】図１３の変更追跡レコードの記述に従って部分参加者がデータを変更したことを判定した後に完全参加者デバイスによって更新される図１２のレコードの例を示す図である。
【図１５】一実施形態に係る部分参加者デバイスまたは完全参加者デバイスに格納される知識レコードの例を示す図である。
【図１６】単純参加者デバイスを使用するデータの更新および同期に用いられるステージを示す、一実施形態の処理フロー図である。
【図１７】複数のデバイスおよびハンドラを有する一実施形態に係る例示的同期コミュニティの概略図である。
【図１８】一実施形態に係る同期コミュニティの例を示す図である。
【図１９】変更が参加者に追加されることと参加者の知識がその変更を含むために更新されることとを示す一実施形態に係る参加者および時間的な図を示す図である。
【図２０】２つの参加者の間の時間的な複製シナリオの一実施形態を示す図である。
【図２１】時間的な衝突検出シナリオの一実施形態を示す図である。
【図２２】一実施形態での、参加者での変更への変更ＩＤの割当の例を示す図である。
【図２３】知識ベクトルを使用する時間的な複製シナリオの一実施形態を示す図である。
【図２４Ａ】例外リストを使用して複製の後に参加者内の知識を更新することの一実施形態を示す図である。
【図２４Ｂ】知識ベクトルのペアごとの最大値を使用して複製の後に参加者内の知識を更新することの一実施形態を示す図である。
【図２４Ｃ】更新された知識に例外が存在する場合の複製の後に参加者内の知識を更新することの一実施形態を示す図である。
【図２５】サロゲート複製を含む複製を実施する一実施形態に係るハブアンドスポークトポロジーを示す図である。
【図２６Ａ】一実施形態での衝突解決シナリオの例を示す図である。
【図２６Ｂ】一実施形態での他の衝突解決シナリオを示す図である。
【図１】
2009527055.tif 000003
【図２】
2009527055.tif 000004
【図３】
2009527055.tif 000005
【図４】
2009527055.tif 000006
【図５】
2009527055.tif 000007
【図６】
2009527055.tif 000008
【図７】
2009527055.tif 000009
【図８】
2009527055.tif 000010
【図９】
2009527055.tif 000011
【図１０】
2009527055.tif 000012
【図１１】
2009527055.tif 000013
【図１２】
2009527055.tif 000014
【図１３】
2009527055.tif 000015
【図１４】
2009527055.tif 000016
【図１５】
2009527055.tif 000017
【図１６】
2009527055.tif 000018
【図１７】
2009527055.tif 000019
【図１８】
2009527055.tif 000020
【図１９】
2009527055.tif 000021
【図２０】
2009527055.tif 000022
【図２１】
2009527055.tif 000023
【図２２】
2009527055.tif 000024
【図２３】
2009527055.tif 000025
【図２４Ａ】
2009527055.tif 000026
【図２４Ｂ】
2009527055.tif 000027
【図２４Ｃ】
2009527055.tif 000028
【図２５】
2009527055.tif 000029
【図２６Ａ】
2009527055.tif 000030
【図２６Ｂ】
2009527055.tif 000031
【国際調査報告】
2009527055.tif 000032
2009527055.tif 000033