(57)【要約】  フィルタを用いて、特定のデータ集合のマルチマスタ同期を可能とする方法である。同期要求では、知識およびフィルタを含むデータを提供することができる。応答は変更を含むデータを備えることができる。その変更は、上記のフィルタにより識別され、要求元が知らないバージョンを有する。
2009535689.tif 000002
【特許請求の範囲】
【請求項１】
ストアされたデータの少なくとも１つの変更を、同期群内のレプリカ間で複製する方法であって、各レプリカは前記同期群内の他のレプリカと独立して変更を行うことができ、該方法は、
第１のレプリカが認識するストアされたデータの変更の知識を表す第１のレプリカの知識値と、前記ストアされたデータ内の特定のデータ集合を識別するフィルタとを第２のレプリカで受信するステップと、
前記第１のレプリカの知識値を、前記第２のレプリカ内にストアされたデータの変更に関連するバージョンと比較して、前記第１のレプリカが認識しておらず前記第２のレプリカが知っている少なくとも１つの変更を識別するステップであって、前記少なくとも１つの変更は前記フィルタにより識別された前記特定のデータ集合に関連する、識別するステップと、
前記少なくとも１つの変更を前記第１のレプリカに送信するステップと
を含むことを特徴とする方法。
【請求項２】
前記第２のレプリカが認識するストアされたデータの変更の知識を表す第２のレプリカの知識値を、前記第１のレプリカに対して送信するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記第１のレプリカの知識値により表されず、且つ前記フィルタにより識別した前記特定のデータ集合にも関連しない、前記ストアされたデータの少なくとも１つの非絞込み変更を前記第２のレプリカに従って識別するステップと、
前記少なくとも１つの非絞込み変更を識別する情報を前記第１のレプリカに送信するステップと
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記フィルタは伸縮可能フィルタであり、
前記フィルタにより識別された前記特定のデータ集合は、前記比較するステップの間に適用されるフィルタ基準により識別されたデータと、前記第１のレプリカの知識値により表された時点で適用された前記フィルタ基準により識別されたデータとを備える、
ことを特徴とする請求項１に記載の方法。
【請求項５】
各々が別々のデータを識別し、前記データが前記フィルタに入ることに関連する少なくとも１つのバージョンを有する、１つまたは複数のストアされたデータ識別子を備える前記フィルタに関連するリストをさらに備えることを特徴とする請求項１に記載の方法。
【請求項６】
前記の１つまたは複数のストアされたデータ識別子の少なくとも１つは、前記フィルタから前記データが出ることに関連する少なくとも１つのバージョンを備えることを特徴とする請求項５に記載の方法。
【請求項７】
前記リストは、
フィルタ基準を評価することと、
前記フィルタ内にあるストアされたデータを前記フィルタ基準が識別するときに、前記データが前記フィルタに入ることに関連するバージョンを加えることと、
前記フィルタ内にないストアされたデータを前記フィルタ基準が識別するときに、前記データが前記フィルタから出ることに関連するバージョンを加えることと
により保持されることを特徴とする請求項５に記載の方法。
【請求項８】
前記リストは、同期動作の直前または最中に保持されていることを特徴とする請求項７に記載の方法。
【請求項９】
前記リストは、同期動作から離れた時点で保持されることを特徴とする請求項７に記載の方法。
【請求項１０】
ストアされたデータの少なくとも１つの変更を、同期群内のレプリカ間で複製する方法であって、各レプリカは前記同期群内の他のレプリカと独立して変更を行うことができ、該方法は、
第１のレプリカが認識するストアされたデータの変更の知識を表す第１のレプリカの知識値と、前記ストアされたデータ内の特定のデータ集合を識別するフィルタとを第２のレプリカに送信するステップと、
前記第１のレプリカが認識しなかった前記第２のレプリカ内に存在するストアされたデータの少なくとも１つの変更を受信するステップであって、前記少なくとも１つの変更は、前記フィルタにより識別された前記特定のデータ集合に関連する、受信するステップと、
前記少なくとも１つの受信した変更を、前記第１のレプリカにより保持された前記ストアされたデータに取り込むステップと
を含むことを特徴とする方法。
【請求項１１】
前記第２のレプリカが認識する前記ストアされたデータの変更の知識を表す第２のレプリカの知識値を受信するステップと、
前記フィルタにより識別された前記特定のデータ集合に対してのみ、前記第２のレプリカが認識する前記ストアされたデータの変更の知識を表すように、前記第１のレプリカの知識値を更新するステップと
をさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記第１のレプリカの知識値により表されず、且つ前記フィルタが識別する前記特定のデータ集合にも関連しない前記ストアされたデータの少なくとも１つの非絞込み変更を識別する情報を、前記第２のレプリカによって受信するステップと、
前記少なくとも１つの非絞込み変更を識別する情報を用いて、前記第１のレプリカにより保持された前記ストアされたデータを更新するステップと
をさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１３】
前記第１のレプリカにより保持された前記ストアされたデータを更新するステップは、
前記少なくとも１つの非絞込み変更を識別する前記情報に従って前記第１のレプリカの知識値内に少なくとも１つの例外を生成することであって、前記少なくとも１つの例外は、前記少なくとも１つの変更を受信する前に前記第１のレプリカが認識した前記ストアされたデータの前記変更の知識を参照することをさらに含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記第１のレプリカにより保持された前記ストアされたデータを更新するステップは、前記少なくとも１つの非絞込み変更を識別する前記情報に対応した前記ストアされたデータの少なくとも一部を削除することをさらに含むことを特徴とする請求項１２に記載の方法。
【請求項１５】
前記少なくとも１つの受信した変更を取り込むステップは、
前記少なくとも１つの受信した変更が前記第２のレプリカ上で行われたときに前記第２のレプリカが認識しなかった前記ストアされたデータの変更の知識を表す知識生成値を前記第２のレプリカから受信することと、
単一の前記ストアされたデータについて、
前記第１のレプリカ上で第１の変更を行い、
前記第２のレプリカ上で第２の変更を行い、
前記第１の変更に関連する第１の変更ＩＤが前記知識生成値内になく、
前記第２の変更に関連する第２の変更ＩＤが前記第１のレプリカの知識値内にないとき
にコンフリクトが存在すると判断することと
を含むことを特徴とする請求項１０に記載の方法。
【請求項１６】
ストアされたデータの変更を同期群内のレプリカ間で管理および複製するシステムであって、各レプリカは前記同期群内の他のレプリカと独立して変更を行うことができ、該システムは、
前記ストアされたデータを管理するよう構成した項目データストアモジュールと、
前記ストアされたデータの変更の知識を管理するよう構成した知識ストアモジュールと、
それぞれが前記ストアされたデータ内の特定のデータ集合を識別する１つまたは複数のフィルタを保持するよう構成したフィルタストアモジュールと、
第１のレプリカが認識する前記ストアされたデータの変更の知識を表す第１のレプリカの知識値と、前記ストアされたデータ内の第１の特定のデータ集合を識別する第１のフィルタとを受信し、
前記第１のレプリカの知識値と前記項目データストアモジュールが提供する変更に関連するバージョンとを比較して、前記第１のレプリカが認識しない前記システムが知っている少なくとも１つの列挙した変更を識別し、前記少なくとも１つの列挙した変更は前記第１のフィルタが識別する前記第１の特定のデータ集合に関連しており、
前記第１のレプリカの前記少なくとも１つの列挙した変更を送信する
よう構成した変更列挙モジュールと、
前記システムが認識する前記ストアされたデータの変更の知識を表す前記知識ストアにより提供したシステム知識値と、前記ストアされたデータ内の第２の特定のデータ集合を識別する前記フィルタストアが提供する第２のフィルタとを第２のレプリカに送信し、
前記システムが認識しなかった前記第２のレプリカ内に存在する少なくとも１つの受信した変更を受信し、前記少なくとも１つの受信した変更は、前記第２のフィルタにより識別した前記第２の特定のデータ集合に関連しており、
前記少なくとも１つの受信した変更を、前記項目データストアモジュールに関連する前記ストアされたデータに取り込む
よう構成した変更取り込みモジュールと
を備えることを特徴とするシステム。
【請求項１７】
前記システムが認識する前記ストアされたデータの変更の知識を表す前記知識ストアにより提供した前記システム知識値を、前記第１のレプリカに送信するよう前記変更列挙モジュールをさらに構成したことを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記変更取り込みモジュールは、
前記第２のレプリカが認識する前記ストアされたデータの変更の知識を表す第２のレプリカの知識値を受信し、
前記第２のレプリカが認識する前記ストアされたデータの変更の知識を表すように、前記フィルタが識別する前記特定のデータ集合に対してのみ、前記システムの知識値を更新する
ようにさらに構成したことを特徴とする請求項１６に記載のシステム。
【請求項１９】
前記変更取り込みモジュールは、
前記少なくとも１つの受信した変更が前記第２のレプリカ上で行われたときに前記第２のレプリカが認識しなかった前記ストアされたデータの変更の知識を表す知識生成値を前記第２のレプリカから受信し、
単一の前記ストアされたデータについて、
前記第１のレプリカ上で第１の変更を行い、
前記第２のレプリカ上で第２の変更を行い、
前記第１の変更に関連する第１の変更ＩＤが前記知識生成値内になく、
前記第２の変更に関連する第２の変更ＩＤが前記システムの知識値内にないとき
にコンフリクトが存在すると判断する
ようさらに構成したことを特徴とする請求項１６に記載のシステム。
【請求項２０】
前記第１のフィルタは伸縮可能フィルタであること、および、
前記第１のフィルタにより識別した前記第１の特定のデータ集合は、前記比較動作中に適用したフィルタ基準により識別したデータと、前記第１のレプリカの知識値により表す時点で適用した前記フィルタ基準により識別したデータとを備えること
を特徴とする請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データストアの絞込み複製に関する。
【背景技術】
【０００２】
今日のデジタル情報処理の世界では、個人は様々な装置を用いて、および様々な場所に情報またはデータをストアすることができる。ユーザが同じ情報を複数の装置または場所にストアすることがよくある。多くの場合、上記のユーザは、それぞれのデータストアに同じ変更を手動で入力する必要なしに、全ての自分のデータストアに同じ情報があることを好むであろう。データの複製、または同期は、それぞれのデータストアが同じ情報を有することを保証するために使用される１つのプロセスである。
【０００３】
例えば、ユーザは電子アドレス帳または一連の電子メールメッセージを無数の異なる装置または場所に保持することができる。ユーザはアドレス帳または電子メールアドレスを例えば、個人情報管理ソフトウェアを用いてアクセス可能なデスクトップコンピュータ上のデータストアに保持することができ、オンラインコンタクトマネージャまたは電子メール管理ウェブサイト等を用いてラップトップコンピュータ上、あるいはＰＤＡ（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ）または携帯電話上で保持することができる。ユーザは連絡先情報を修正すること、またはそれぞれの場所に関連するアプリケーションを用いて電子メールアドレスを送受信することができる。変更を行った場所または方法にかかわらず、複製の１つの目的は、特定の装置上または特定の場所で行った変更が最終的に他の装置または他の場所のデータストアに反映されることを保証することである。
【０００４】
１つの一般的な複製方法には、以前の複製以降に行った変更を追跡することが含まれる。例えば、別の装置との複製を求める装置は、変更要求を他の装置に送信することができる。他の装置が送信した変更は、最後の複製以降に行ったものであることが理想的である。更新情報要求に応答する装置、すなわち「レプリカ」は、以前の複製以降にタイムスタンプした任意の変更をチェックすることができる。次いでそのタイムスタンプを有する任意の変更を、複製を要求する装置に送信することができる。一般的にその複製では、それぞれのレプリカが、他のレプリカまたは自分が動作している複製トポロジを認識する必要がある。それぞれのレプリカは、他のレプリカ上で複製した変更の記録を保持する必要もあるかもしれない。実際、それぞれのレプリカは、そのトポロジ内の他のレプリカ上でストアしたと信ずるものに関する情報を保持する必要があるかもしれない。
【０００５】
複製の課題は、３つ以上のレプリカが同じ同期群またはトポロジに含まれるときにより複雑になる。これらの課題の中には、装置の複製順序に基づいて、より新しいデータを古いデータで置換すること、既に同期した可能性があるデータを複製すること、および同期状態にあるデータをコンフリクトしているとして報告することとを含む問題がある。
【０００６】
１つの例として、３つのレプリカを含む同期群を考える。ユーザはレプリカ１を時点１に更新する。時点２で、同じデータをレプリカ２内で更新する。レプリカ２を次いでレプリカ３に複製し、レプリカ２で行った変更をレプリカ３に取り込む。レプリカ３が引き続きレプリカ１からの変更を受信すると、もとはレプリカ２上で更新されたデータが、レプリカ１からの変更が最新の変更でないにもかかわらず、レプリカ１からの初期データで置換される恐れがある。
【０００７】
いくつかの場合、レプリカが自分の情報が非同期であると誤って信じるとき通信リソースが浪費され、不要な同期動作が実施される恐れがある。例えば、上で導入した３つのレプリカの同期群においてユーザがレプリカ１を更新すると仮定する。レプリカ１の変更を次いでレプリカ２に複製する。レプリカ２は次いでその変更をレプリカ３に複製し、その結果、レプリカ２からの情報は、現時点でレプリカ１からの情報でもあり、レプリカ３上で変更される。レプリカ３をレプリカ１で複製する。いくつかの場合、レプリカ３はレプリカ１が更新されたことを知ることができるが、レプリカ１上の情報のバージョンを知ることはできない。このため、同じ情報が既にレプリカ１にあるにもかかわらず、レプリカ３はその情報をレプリカ１に複製する恐れある。さらに、レプリカ１をレプリカ２に複製するかまたは他のペアをなす複製を後の時点に実施すると、さらに不要な複製が続く恐れがある。
【０００８】
いくつかの場合、そうでないときでも、複製データがコンフリクトしているように実際に見える恐れがある。例えば、再度３つのレプリカ同期群を考える。レプリカ１上の情報を更新してレプリカ２に複製する。レプリカ１上の情報を次いでレプリカ３に複製する。レプリカ２および３は次いで複製を試みるが、最後の複製以降行った（レプリカ１での複製からの）変更をそれぞれが有することを結果として発見する。変更が同じである場合でも、レプリカ２および３は自身がコンフリクトしていると考えるかもしれない。
【０００９】
データストア内のデータの一部を特定の時点に複製するだけが望ましいとき、別の問題が発生する恐れがある。例えば、データストアが、受信箱フォルダといくつかの他のフォルダとを含む様々なフォルダ内に電子メールメッセージを含むと仮定する。上記の他のフォルダには、保存した電子メールメッセージを含むフォルダが恐らく含まれる。いくつかの場合、ユーザは変更を全ての電子メールフォルダに複製したいかもしれない。例えば、これは、複製装置間の通信帯域幅が大きいときに妥当かもしれない。他の場合、携帯電話またはＰＤＡで時々ありうるように恐らく帯域幅が限られるとき、ユーザは、変更を受信箱のような特定のフォルダに複製したいだけかもしれない。
【００１０】
ユーザが自分の全データの一部のみを全ての場合で同期したいかもしれないことも考えられる。例えば、ユーザは全ての電子メールをデスクトップコンピュータまたはサーバ上に保持したいが、自分の受信箱および選択した一連のフォルダのみを、限られたストア容量を有する小型装置に同期したいかもしれない。この場合、一部の情報は特定の装置と決して同期されないくてよい。
【００１１】
別の例として、デジタル音楽ファイルを含むデータストアを考える。いくつかの場合、ユーザは自分のデジタル音楽ライブラリ全体を同期したいかもしれない。恐らく、彼らは大型ハードドライブ付きのポータブル音楽プレイヤまたはコンピュータを持っている。彼らは限られた量のフラッシュメモリ付きの小型ポータブル音楽プレイヤも持っていることがあり、彼らは選択した音楽をそこにストアしたいだけである。１つの例では、この同期すべき音楽には、例えば、自分が「四つ星」または「五つ星」で評価したデジタル音楽ファイル、および先週ダウンロードした音楽が含まれるかもしれない。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
上で導入した状況のように特定のデータ集合を同期するとき、様々な問題がさらに発生するかもしれない。例えば、ある時点またはある装置上ではデータがフィルタ基準に適合したり、所望のデータ集合内にあるが、別の時点または別の装置上ではその基準に適合せず、またその所望のデータ集合内にないかもしれない。さらに、それぞれのレプリカは異なる装置から同期したデータが、例えばいくらかの同期の間は完全なデータ集合のサブセットであり、その他の同期の間は完全なデータ集合であるかもしれないときでも、そのデータを理解し続ける必要があるかもしれない。
【課題を解決するための手段】
【００１３】
以下で、読者に基本的な理解を与えるため本開示の簡潔な要約を提示する。本要約は本開示の広範囲な概要ではなく、本発明の主要または重要な要素を特定せず、本発明の範囲を区別することもない。その唯一の目的は、本明細書で開示したいくつかの概念を、後に提示するより詳細な説明の前置きとして提示することである。
【００１４】
本明細書では、データの絞込み複製を対象とする様々な技術および技法を説明する。より詳細には、本明細書ではとりわけ、「フィルタ」により識別した特定のデータ集合をレプリカ間で複製することを促進するシステム、方法、およびデータ構造を説明する。フィルタは部分的または全体的に、レプリカ間で複製される特定のデータ集合を識別する。
【００１５】
本明細書で説明する絞込み複製システムおよびプロセスのいくつかの実装では、別のレプリカからの変更を望むレプリカは「知識値」と、フィルタを識別または指定するいくつかのデータとを他のレプリカに送信することができる。知識値は第１のレプリカが知っており、その知識を有する変更を表すことができ、フィルタは特定のデータ集合を表すことができる。第１のレプリカは、その特定のデータ集合に関する変更を望む。本例では、第２のレプリカは第１のレプリカへ送信する変更を、自分が有する変更のバージョンを第１のレプリカが知る変更と比較することで識別することができ、この場合、その第１のレプリカが知る変更は第１のレプリカが提供するフィルタ内にもある。次いで、第１のレプリカによって両方とも知られておらず、且つフィルタによって指定された第２のレプリカが識別する任意の変更を、第１のレプリカに送信することができる。
【００１６】
本明細書で説明するシステムおよびプロセスの他の実装では、第１のレプリカは第２のレプリカから変更を受信することができる。例えば、その変更を、前の段落で説明したようなプロセスにより決定することができる。次いで第１のレプリカは上記の変更をそのデータストアに取り込むことができる。
【００１７】
本明細書で説明するシステムおよびプロセスのさらに他の実装では、単一のレプリカを変更の送信者および変更の受信者の両方として動作させることができる。
【発明を実施するための最良の形態】
【００１８】
本発明は、データの絞込み複製を対象とした様々な技術および技法に及ぶ。複製は一般に、同期群を形成する参加レプリカのグループの間で行われる。同期群の全てのメンバは、必ずしも任意の所与の時点で任意の所与のレプリカに知られている必要はない。同期群のトポロジも、必ずしも任意の所与の時点で任意の所与のレプリカに知られていない。本出願のコンテキストでは、同期群のトポロジは任意のグラフであってもよい。そのグラフにおいては、グラフのノードがレプリカであり、ノード間のエッジは可能な同期関係を表す。同期群内のそれぞれのレプリカはＩＤを有し、そのＩＤは１つの実施形態ではＧＵＩＤ（ｇｌｏｂａｌ  ｕｎｉｑｕｅ  ｉｄｅｎｔｉｆｉｅｒ）である。
【００１９】
いくつかの実施形態では、それぞれの変更に「変更ＩＤ」を関連付けることができる。この「変更ＩＤ」は、レプリカのＩＤと、その変更に関連するバージョンとを含む対であることができる。例えば、変更ＩＤ「Ａ１０」は、変更を実施したかまたはその変更にレプリカ「Ａ」を関連付けたこと、およびそのレプリカに関連する、恐らくレプリカＡにより割り当てたバージョンが「１０」であることを示すことができる。
【００２０】
それぞれのレプリカは、効率的な複製を促進する「知識」を保持する。いくつかの実施形態では、知識は、特定のレプリカが認識する変更を表すメタデータである。上記の実施形態では、他のレプリカを、任意の他の特定のレプリカに既知であるものを追跡することから解放できる。なぜならば、この情報を、それぞれのレプリカが保持する知識により効率的に表せるからである。
【００２１】
知識を様々な方法でストアまたは表現することができる。一般に、知識表現は、その形成または設計方法にかかわらず、以下の動作をサポートすることができる。即ち、（１）知識表現への変更の追加、（２）変更が知識表現に含まれるかどうかの評価、および（３）２つの知識表現を組み合わせて、単一の知識表現を形成すること、である。
【００２２】
特定のレプリカが認識する変更を簡潔に表すことが有利である場合があるので、いくつかの実施形態では、知識を対ベクトルすなわち変更ＩＤとして表す。この場合、変更ＩＤのそれぞれの対はレプリカのＩＤ、およびその変更に関連するバージョンの最大値である。上記の表現を「知識ベクトル」と称することができる。例えば、レプリカが、レプリカＡによる最初の変更から１０回目の変更までの全ての変更を認識し、Ｂとラベル付けしたレプリカによる最初の変更から５回目の変更までの全ての変更を認識する場合、レプリカはＡ１０Ｂ５の知識ベクトルを有することができる。これは、レプリカが変更ＩＤ  Ａ１からＡ１０までに対応する全ての変更と、変更ＩＤ  Ｂ１からＢ５に対応する全ての変更とを認識することを示すことができる。
【００２３】
データを別のレプリカと同期したいレプリカ、即ち、自分が有さない任意の変更を別のレプリカから受信したいレプリカは、最初にその知識を他のレプリカに提供することができる。複製レプリカ間で送信しなければならない知識を表すデータの量を削減するため、前述のように知識を知識ベクトルとして表すことができる。即ち、レプリカ間で送信される知識は全ての変更ＩＤを含む必要はないが、多数の変更ＩＤを表すベクトル形式であることができる。他のレプリカは、第１のレプリカから受信した知識を使用して、自分は有するが第１のレプリカは有さない任意の変更を列挙し、次いで任意の上記変更を第１のレプリカに送信し戻すことができる。次いで第１のレプリカは、受信した変更のうち自分が保持する変更とコンフリクトするものがあるかどうかを評価し、適切または妥当と考える変更（恐らくコンフリクトしないもの）をそのデータストアに取り込むことができる。第１のレプリカは、第１のレプリカが受信した新規の変更を知識表現が含むように、第１のレプリカの知識表現を更新することもできる。
【００２４】
本明細書での大部分の議論のため、前の段落で導入したように、複製を１方向であると考えることができる。即ち、１回の複製ではあるレプリカから別のレプリカに変更を転送することができる。両方のレプリカが他方のレプリカからの変更を有するように２つのレプリカ間の複製を実現するため、２つの１方向同期または複製を並行に、即ち、同時に、または同期的に、次々と実施することができる。他の実装では、変更を１方向のみに流すことが有利であるかもしれない。例えば、レプリカは別のレプリカから変更を取り込むことができるが、自分自身は決して上記の他のレプリカ内のデータを変更できない。この場合、１方向同期で十分であろう。
【００２５】
レプリカを同期群に追加または同期群から除去する際、特定の知識ベクトル内の対の数は変化しうることに留意されたい。さらに、特定の知識が、同期群内のそれぞれのレプリカに対する変更ＩＤを具体的に含む必要はない。
【００２６】
いくつかの実施形態では、同期要求中にフィルタを指定または提供することもできる。本出願のコンテキストでは、フィルタはデータストア中の特定の項目集合を識別する役割を果たす任意の構造体である。複製中に、フィルタにより識別した変更のみを要求者に返すように、変更を列挙するレプリカにより識別した変更を、フィルタを用いて絞り込むことができる。例えば、非常に単純なフィルタは「緑である全ての項目」を指定することができる。要求レプリカに返される変更は、緑である項目の変更のみを含むことができる。緑でない項目の変更を要求者に送信しなくともよい。フィルタが項目のサブセットを識別することは一般的かもしれないが、いくつかの場合ではフィルタは、フィルタなしでも識別されたであろう同じデータ集合を識別できることに留意すべきである。即ち、フィルタはデータ集合全体の真のサブセットであるデータを識別しなくともよい。フィルタが「緑である全ての項目」を指定する前の例を続けると、偶然データ集合内の全ての項目が緑である場合、そのフィルタにより識別したデータはその集合内の全ての項目を含むことになり、そのフィルタにより識別したデータはデータ集合全体の真のサブセットとはならない。さらに、フィルタが特定のデータ集合を「識別する」と言うとき、これは、フィルタが明示的に例えばデータ集合内の特定の項目に名前を付けなければならないこと、または特定の項目を常に明示的に列挙またはフィルタと関連付けなければならないことは意味しないことに留意すべきである。いくつかの実装では、フィルタは例えば任意の特定の項目を明示的に参照しないクエリを用いて特定の項目または変更を識別することができ、一方で同じ実装または他の実装では、フィルタは明示的な項目リストを使用すること、クエリまたは明示的なリストの任意の組合せを使用すること、あるいはデータストア内の特定の項目または変更の集合を識別または照合する任意の他の構造体を使用することができる。
【００２７】
絞込み複製の理解に重要である要素を本明細書に渡って説明する。図８から図１９に関連する文章は、これらの図面がデータの絞込み複製に具体的に関連する実施形態および例を示すので、本明細書に含まれる絞込み複製の議論に特に関連する。
【００２８】
図１を参照する。図１では、同期群１００の１つの例を示す。同期群１００は多数のレプリカを含み、本技術および技法の実施形態を実装可能な環境の１つの例である。同期群１００内のレプリカは様々なデータストアまたは装置を表すことができる。そのデータストアまたは装置は、コンピュータ、ノートブックコンピュータ、携帯情報端末、携帯電話、他の無線装置、サーバコンピュータ、オンラインサービス等、またはそれらの任意の組合せを含むことができるが、これらに限らない。
【００２９】
図１では、レプリカＡ１０２を、通信リンク１０６を通してレプリカＢ１０４に電気的に接続することができる。レプリカＡ１０２を、通信リンク１０８を通してレプリカＣ１１０に接続することができる。レプリカＣ１１０を、通信リンク１１２を通してレプリカＢ１０４に接続することができる。レプリカＣ１１０を、通信リンク１１６を通してレプリカＤ１１４にさらに接続することができる。図示した通信リンクは、２つのコンピューティング装置間でデータを交換可能とする任意の種類のリンクであることができ、有線リンクおよび無線リンクが含まれる。
【００３０】
この同期群１００では、通信リンクを通して全てのレプリカを直接接続することはないが、任意のレプリカにおける変更を同期群１００内部の任意の他のレプリカに複製することができる。例えば、レプリカＡ１０２をレプリカＤ１１４に複製するために、通信リンク１０８を通してレプリカＡ１０２およびＣ１１０を複製することができる。上記複製の後、レプリカＣ１１０はレプリカＡ１０２で行った変更を含むことができる。レプリカＣおよびＤは通信リンク１１６を通して複製することができ、その結果、レプリカＤ１１４はレプリカＡ１０２からの変更を取り込むことができる。このように、レプリカＡ１０２を直接リンクなしにレプリカＤ１１４に複製することができる。実際、レプリカＡ１０２およびＤ１１４は、同期群１００内部の互いの存在を認識しなくともよい。
【００３１】
図２を参照する。図２では、レプリカ内での変更管理方法を説明する実施形態を示す。図２は、レプリカＡ２００の時間進捗を示す。レプリカＡ２００は、この場合はＫＡとラベル付けした知識２０２と、この場合はΔＡとラベル付けした変更２０４とを含む。変更２０４内のそれぞれの変更は、項目の最新のデータ内容である。変更は、変更された項目自体がない場合でもレプリカに加えた新規の項目、項目の削除等であることができる。変更２０４の各々をバージョンに関連付ける。そのバージョンは１つの実施形態では変更ＩＤである。特に、本発明の１つの有利な態様は、以前の変更に関する情報を含む変更ログを保持する必要がないことである。寧ろ、それぞれのレプリカは変更（即ち、最新の項目）の知識およびデータベースを含む。この場合、それぞれの変更は対応するバージョンを含む。
【００３２】
時点（１）で、レプリカＡ２００は安定状態にある。時点（２）で、ユーザはＸとラベル付けした変更をレプリカＡ２００に入力する。図２は、変更Ｘを変更２０４のメンバとして追加していることを示す。変更ＩＤ、ＣｈａｎｇｅＩＤ（Ｘ）を含めるように知識２０２を更新する。ＣｈａｎｇｅＩＤ（Ｘ）に変更Ｘを関連付け、ＣｈａｎｇｅＩＤ（Ｘ）は変更２０４への変更Ｘの追加を識別する。本実施形態は、レプリカの変更を特定の変更ＩＤに関連付ける１つの方法を示す。
【００３３】
知識２０２はレプリカＡ２００が認識している変更を表し、知識２０２を知識ベクトルとして実施することができる。１つの実施形態では、バージョンまたは変更ＩＤを項目またはオブジェクトに対して保持し、上記のバージョンを使用して複製すべき任意の項目を識別することができる。あるいは、変更ログを保持することもできる。
【００３４】
図３を参照する。図３には、複製中に知識を使用して変更を列挙する１つの例を示す。図面の説明では特定の実行順序を示すかもしれないが、１つまたは複数の代替実施形態では動作を異なって順序付けしてもよい。さらに、図面では複数のステップを示すが、いくつかの実装ではこれらのステップの一部または全部を組み合わせるか、または同時に実行してもよいことは理解されるべきである。
【００３５】
図３は２つのレプリカ、即ちレプリカＡ３０２およびレプリカＢ３０４を示す。レプリカＡ３０２は知識３０８を含み、本例では知識３０８にＫＡのラベルを付けてある。知識３０８は上述したもののような変更ＩＤのリストを含むことができる。レプリカＡ３０２はさらに変更集合３０６を含み、本例では変更集合３０６にΔＡのラベルを付けてある。同様に、レプリカＢ  ３０４は、ＫＢとラベル付けした知識３１２と、ΔＢとラベル付けした変更集合３１０とを含み、それぞれを変更ＩＤに関連付ける。
【００３６】
複製を開始するため、時点１での動作３５０において、レプリカＡ３０２は同期要求をレプリカＢ３０４に送信する。同期要求はレプリカＡの知識３０８を含む。
【００３７】
動作３５２の実装では、「変更を列挙」と称する場合があるが、レプリカＢ３０４は、知識３０８をその変更集合３１０内の変更の各々と関連するバージョンと比較することができ、それにより、その変更３１０のうちレプリカＡの変更３０６内に既に存在するもの、およびレプリカＡの変更内に存在しない変更を決めることができる。別の実装では、レプリカＢ内の変更の各々を検査する代わりに、レプリカＢは知識３０８を、レプリカＢが保持するそれぞれの項目と関連するバージョンと比較することができる。何れかのプロセスを用いて、レプリカＢは、レプリカＡが認識しない変更を列挙することができる。例えば、レプリカＡの知識ベクトルがＡ３Ｂ１２であり、変更ＩＤ  Ｂ１３およびＢ１４であるバージョンと関連する最新の変更をレプリカＢが有する場合、レプリカＡに送信すべき列挙した変更は、変更ＩＤ  Ｂ１３およびＢ１４に関連するものを含むことができる。１つの実施形態では、Ｂ１３およびＢ１４により識別した変更を同じ項目に対して行った場合、Ｂ１４のみを送信することができる。
【００３８】
結果として、時点２での動作３５４においてレプリカＢ３０４は、レプリカＡの知識３０８に含まれないバージョンと関連するレプリカＢの変更３１０の一部のみを、レプリカＡ３０２に送信することができる。これらの変更を、変更３１４を用いて示す。列挙した変更に加えて、レプリカＢ３０４はレプリカＢの知識３１２をレプリカＡ３０２に送信することもできる。
【００３９】
本例では、レプリカＡは元々レプリカＡ内にあった全ての変更の知識を、これらの変更がレプリカＢ３０４により送信した変更で置き換えられていない限り、有する。さらに、レプリカＢは、レプリカＡ内にまだ存在しなかった全てのレプリカＢ内の変更を送信している。従って、レプリカＡは、レプリカＢ３０４が認識した全ての変更に関する情報も有する。従って、時点３での動作３５６において、レプリカＡはその知識３０８を更新して、変更３１４の追加を反映することができる。この場合これを、レプリカＡの知識３０８をレプリカＢの知識３１２に単純に追加してその結果をレプリカＡの知識３０８の新しい値として定義することで、行うことができる。この時点でまだ完了していない場合、レプリカＡはレプリカＢから受信した任意の変更を取り込むこともできる。
【００４０】
このメカニズムを通して効率的な複製を実施する。この場合、必要な変更のみが複製され、個々のレプリカは、特定のレプリカ内部に存在する変更とそのレプリカが認識する以前の変更とに関する情報を保持するだけで十分である。
【００４１】
変更の列挙に加えて、レプリカの知識を使用して変更間のコンフリクトを検出することもできる。これは、同期動作を開始し、両方の変更を受信し、別のレプリカからの知識を学習したレプリカに対して共通なタスクである。次いで開始レプリカは、他のレプリカから受信した変更が、既にその開始レプリカ内にある変更とコンフリクトするかどうかを決定したいかもしれない。このコンテキストでは、コンフリクトを、別の変更を知らずに行った変更として定義する。別の変更を知って変更を行った場合、後の変更、即ち、他方の変更を知って行った変更を最終的な変更と考えることができ、コンフリクトは発生しなかったと考えることができる。
【００４２】
図４を参照する。図４には、コンフリクト検知の実現方法を実証する１つの実施形態を示す。図４の以下の説明を、図３を参照して行う。しかしながら、図４を参照して説明した動作は、図３または任意の他の図面で図示した要素で用いているものに限定されるとは意図していないことは理解されるべきである。さらに、図面の説明では特定の実行順序を示すかもしれないが、１つまたは複数の代替実施形態ではその動作を異なって順序付けしてもよいことは理解されるべきである。さらに、図面では複数のステップを示すが、いくつかの実装ではこれらのステップの一部または全部を組み合わせるか、または同時に実行してもよいことは理解されるべきである。
【００４３】
図４は、通信リンクで接続した２つのレプリカを示す。レプリカＡ４０２は知識４０８と変更集合４０６を含む。図３の例でのように、知識４０８は、変更４０６に関連付け、以前の変更と関連する変更ＩＤの集合を含むことができる。レプリカＡはさらに、本例の目的で、項目の変更を含む。この場合、その変更をレプリカＡ内で行った。その変更は、Ｘとラベル付けしてあり、変更４０６のメンバである。同様に、レプリカＢ４０４は知識４１２、変更集合４１０、およびＹとラベル付けした項目の変更を含み、その項目は変更４１０のメンバである。
【００４４】
実例として、時点１での動作４５０において、レプリカＡ４０２は変更ＸをレプリカＢ４０４に送信する。２つの他の値、即ち、ＣｈａｎｇｅＩＤ（Ｘ）とラベル付けし、変更Ｘに関連する変更ＩＤと、ＫＡ（Ｘ）とラベル付けした知識生成値とを変更Ｘに関連付け、変更Ｘとともに送信する。知識生成値は、変更ＸをレプリカＡ４０２内で行った時点でレプリカＡ４０２に存在した知識であることができる。あるいは、いくつかの実施形態では、知識生成値は、変更の送信時にレプリカに存在する知識であることができる。レプリカＡの最新知識４０８は本例ではＫＡとラベル付けしてあり、最新知識４０８をレプリカＢ４０４に送信することもできる。
【００４５】
時点２での動作４５２において示すように、レプリカＢ４０４は変更Ｘに関連する項目、即ち変更Ｘを行ったときに変化した項目を、変更Ｙに関連する項目と比較する。変更Ｘと変更Ｙが異なる項目に対応する場合、コンフリクトは存在せず、動作フローは動作４６０に進む。
【００４６】
変更が同じ項目に関する場合、変更がコンフリクトするかどうかを決定するためにさらなる分析が必要である。時点３での動作４５４において、レプリカＢ４０４は、変更ＹをレプリカＢ内で行ったときに変更Ｘが変更Ｂに既知であったかどうかをチェックする。変更Ｘのように、変更Ｙは関連する変更ＩＤ、ＣｈａｎｇｅＩＤ（Ｙ）と、知識生成値、ＫＢ（Ｙ）を有する。ＣｈａｎｇｅＩＤ（Ｘ）が変更Ｙの知識生成値ＫＢ（Ｙ）のメンバである場合、コンフリクトはない。換言すれば、この場合、レプリカＡ４０２内で行った変更Ｘを知って変更ＹをレプリカＢ内で行った。従って、変更Ｙは現時点でレプリカＡおよびＢに対する最新で妥当なデータを表す（図４に示す例では図示していないが、後の時点で、恐らく図３で説明した方式で変更ＹをレプリカＡに送信し、変更ＸおよびＹに関連する項目をレプリカＡ上で変更Ｙに更新することができる）。
【００４７】
変更ＸおよびＹが同じ項目に対するものであり、ＣｈａｎｇｅＩＤ（Ｘ）がＫＢ（Ｙ）内に現れない場合、動作フローは動作４５６に進む。この動作では、時点４で、変更Ｘを行ったときにレプリカＡ４０２が変更Ｙを知っていたかどうかをチェックする。これは、動作４５４で実施した動作の鏡像であって、一般に、ＣｈａｎｇｅＩＤ（Ｙ）で示した変更Ｙの変更ＩＤが、変更Ｘを行った時点でのレプリカＡの知識４０８、ＫＡ（Ｘ）に含まれるかどうかをチェックすることで行われる。ＣｈａｎｇｅＩＤ（Ｙ）がＫＡ（Ｘ）のメンバである場合、変更Ｙを知って変更Ｘを行ったのでコンフリクトはない。この場合、変更Ｘは特定の項目に対する最新で妥当な変更である。
【００４８】
変更ＸおよびＹが同じ項目に対するものであり、ＣｈａｎｇｅＩＤ（Ｙ）がＫＡ（Ｘ）内に現れず、ＣｈａｎｇｅＩＤ（Ｘ）がＫＢ（Ｙ）内に現れない場合、真のコンフリクトが存在する。換言すれば、この場合、変更Ｘと変更Ｙは互いと独立に行われた。コンフリクトが見つかると、それを報告し、様々なコンフリクト解決規則を適用してどちらの変更、即ちＸまたはＹを保持するかを決定することができる。上記の規則は、どちらの変更を最近行ったかを決定するためのタイムスタンプのチェック、（サーバ上にストアしたもののような）ある種のレプリカを常に優先したコンフリクトの解決、および／または任意の他の適切なコンフリクト解決を含むことができる。あるいは、コンフリクト解決の１つの形態では、コンフリクトする変更を有する項目を、そのコンフリクトする変更をマージして新規の変更を形成するように更新することができる。
【００４９】
図５を参照する。図５には、変更ＩＤと知識追跡の１つの例示的な実施形態を示す。図５は、レプリカ５０２の選択した要素を示す。これらの要素には変更集合５０６と知識５０８が含まれる。変更集合５０６は、いくつかの個々の変更５１０を含み、本例ではＸ、Ｙ、およびＺとして示してある。本例では、レプリカの知識の最新状態を知識ベクトル５１２により表す。この場合、知識ベクトル５１２はＡ４である。知識ベクトル５１２はレプリカＡの知識５０８を表す。
【００５０】
図５には、個々の項目５１６に関連する多数の変更ＩＤ５１４も表してある。本例では、レプリカＡ５０２は３つの変更された項目５１６、即ちＩＸ、ＩＹ、およびＩＺを含む。これらの項目は、Ｘ、Ｙ、およびＺとラベル付けした、対応する変更５１０を有する。変更ＩＤを用いると、変更ＩＤ  Ａ１を有する項目ＩＸが、数字「１」により表す、第１の時点にレプリカＡ内で変更されたこと、変更ＩＤ  Ａ２を有する項目ＩＹが、ＩＸを変更した後の時点にレプリカＡ内で変更されたこと、を識別することができる。さらに変更ＩＤ  Ａ４を有する項目ＩＺは、項目ＩＹを変更した後（項目ＩＸを変更した後でもある）の時点にレプリカＡ内で変更された。変更ＩＤ  Ａ３は、図５では直接図示していないが、例えば、Ａ４でラベル付けした項目ＩＺへの変更により置き換えられた以前の変更に対応することができる。換言すれば、項目ＩＺは時点３に変更され、この変更に変更ＩＤ  Ａ３が与えられていた可能性がある。項目ＩＺを時点４で再度変更したとき、項目ＩＺに変更ＩＤ  Ａ４が与えられ、変更ＩＤ  Ａ３を置き換えた。
【００５１】
本例では項目ＩＺに関連する変更ＩＤ  Ａ４と、やはりＡ４とラベル付けしたレプリカＡの知識ベクトル５１２との間の違いに留意することは重要である。本例では、Ａ４であるレプリカＡの知識ベクトルは、レプリカＡの知識５０８が、Ａ４、Ａ３、Ａ２およびＡ１とラベル付けした変更ＩＤに対応する変更を含むことを意味する。即ち、この知識ベクトルは、その知識ベクトルと同じである変更ＩＤ５１８により表した変更と、その知識ベクトルにより表した変更ＩＤ  ５１８の前に行った同じレプリカＩＤを有する全ての変更とを含む。それに対し、本例では、Ａ４とラベル付けした変更ＩＤ５１８は、項目ＩＺに行った変更Ｚを表すに過ぎない。
【００５２】
図６を参照する。図６には、２つのレプリカ間での複製の１つの例を示す。図６の以下の説明を、図４を参照して行う。しかしながら、図６を参照して説明した動作は、図４または任意の他の図面で図示した要素で用いているものに限定されるとは意図していないことは理解されるべきである。さらに、図面の説明では特定の実行順序を示すかもしれないが、１つまたは複数の代替実施形態ではその動作を異なって順序付けしてもよいことは理解されるべきである。さらに、図面では複数のステップを示すが、いくつかの実装ではこれらのステップの一部または全部を組み合わせるか、または同時に実行してもよいことは理解されるべきである。
【００５３】
本例は、レプリカＡおよびレプリカＢの両方が変更を他方のレプリカに送信する２方向同期を実証する。再度、前述のように、２方向同期を２つの１方向同期動作として実施することができる。また、図６に示した例は、一般的な１方向または２方向同期動作に存在しうる全ての動作を説明するわけではない。例えば、図６は、レプリカＡまたはレプリカＢが他方のレプリカから変更を受信した後にコンフリクト検出を実施する方法は示さない。上記のコンフリクト検出を、例えば、図４を参照して前述したもののような技術を用いて実施することができる。
【００５４】
本例ではレプリカＡ６０２は変更集合６０４、知識６０６、および知識６０６の短縮表現である知識ベクトル６０８を含む。実例として、レプリカＡの知識ベクトル６０８はＡ５Ｂ３Ｃ１Ｄ１０であり、これはレプリカＡがレプリカＡ６０２内の５回目までの変更の知識、レプリカＢ６１０内の３回目の変更までの知識、レプリカＣ内の最初の変更までの知識、およびレプリカＤ内の１０回目の変更までの知識を有することを示す。本例のレプリカＢは変更集合６１２、知識６１４、およびレプリカＢの知識６１４の短縮表現である知識ベクトル６１６を含む。レプリカＢの知識ベクトル６１６はＡ３Ｂ３Ｃ５Ｄ８であり、これはレプリカＢがレプリカＡ６０２による３回目の変更までの知識６１４、レプリカＢ６１０による３回目の変更までの知識、レプリカＣによる５回目の変更までの知識、およびレプリカＤによる８回目の変更までの知識を有することを示す。本例ではこれらの知識ベクトルは、最初の変更から幾らか後の変更までレプリカが行った変更の連続的な表現を含む。例えば「Ｄ１０」とラベル付けしたベクトル部分は変更Ｄ１から変更Ｄ１０までの変更の知識を示す。本明細書でより詳細に後述するように、知識ベクトルはとりわけ、レプリカによる最初の変更と幾らか異なる変更に関連する開始点も含むことができる。
【００５５】
時点１での動作６５０で、レプリカＡ６０２は、レプリカＡの知識６０６とともに同期要求６１８をレプリカＢ６１０に送信する。
【００５６】
動作６５２で、レプリカＢ６１０は、レプリカＢ内の変更に関連する変更ＩＤとレプリカＡの知識６０６を比較することで、レプリカＡに送信する変更を列挙する。この比較の最中にレプリカＢは、レプリカＣによる変更を自分が有することを発見する。レプリカＡはその変更を認識しない。これらの変更を変更ＩＤ  Ｃ２、Ｃ３、Ｃ４、およびＣ５と関連付ける。１つの実施形態では、その項目の各々を検査し、レプリカＡが送信した知識のメンバでない変更ＩＤを有する項目をメモすることで、レプリカＢはこの動作を実施する。別の実施形態では、レプリカＢはその変更を直接検査し、レプリカＡが送信した知識のメンバでない変更を識別する。
【００５７】
時点２での動作６５４において、レプリカＢは、その変更６２２のうちこれらの変更ＩＤに対応するものを、これらの変更ＩＤでラベル付けした変更がレプリカＢ６１０内の項目に適用可能な最新の変更である限り、送信する。即ち、変更ＩＤが以前の、現時点では古い変更に対応する場合、送信できるそのＩＤに対応する変更はない。例えば、本図面では図示していないが、以前はバージョンＣ３を有した項目を再度更新して新規のバージョン、恐らく変更ＩＤ  Ｃ４を割り当てた場合、Ｃ３に関連する変更は最早レプリカＢ６１０内には存在できず、その存在状態にかかわらず、レプリカＡに送信することはできない。代わりに、最新のＩＤ、本段落の議論では変更ＩＤ  Ｃ４に関連する変更のみを送信することができる。
【００５８】
動作６５６で、後の時点３に、または時点２の動作６５４と同時に、レプリカＢ６１０はレプリカＢの知識６１４の最新状態をレプリカＡ６０２に送信する。本例では、その知識は知識ベクトルＡ３Ｂ３Ｃ５Ｄ８から構成される。
【００５９】
この時点で、レプリカＡが変更をレプリカＢ６１０から受信して、レプリカＡ６０２が開始した１方向同期は完了したと考えることができる（図示していないが、上述したように、レプリカＡは受信した変更およびコンフリクト検知の取り込みのような他の動作を実施してもよい）。図６の例では、後述するように、動作６５６および動作６５８をさらに実施することで、２方向同期が実現される。
【００６０】
動作６５８で、レプリカＢが送信した知識６１４をレプリカＡ６０２内での変更に対応する変更ＩＤと比較することで、レプリカＡ６０２は自分が有しうるレプリカＢ６１０が認識しない変更を列挙する。本例では、レプリカＡは、変更ＩＤ  Ａ４、Ａ５、Ｄ９およびＤ１０により表した変更をレプリカＢが有さないことを発見する。
【００６１】
従って、時点４での動作６６０においてレプリカＡ６０２は、変更ＩＤ  Ａ４、Ａ５、Ｄ９、およびＤ１０に対応する、レプリカＡの変更６０４に存在しない最新の変更６２４を送信する（例えば、その変更ＩＤが古い変更を表す場合を除く。この場合、送信できる変更はない）。
【００６２】
動作６６２で、レプリカＡ６０２およびレプリカＢ６１０は、それぞれのレプリカが最近複製した変更の知識を現時点で有するので、それぞれ自身の知識ベクトル６０８および６１６を更新する。時点５での動作６６２に示すように、レプリカＡの更新済み知識ベクトル、Ａ５Ｂ３Ｃ５Ｄ１０は、レプリカＢの知識ベクトルと等しい。両方の知識ベクトルは、レプリカＡによる５回目の変更までの知識、レプリカＢによる３回目の変更までの知識、レプリカＣによる５回目の変更までの知識、およびレプリカＤによる１０回目の変更までの知識を表す。両方のレプリカは、動作６６２の前、最中、または後に他の動作を実施してもよい。その動作には、受信した変更の取り込みおよびコンフリクト検知の実施が含まれる。
【００６３】
図７Ａおよび図７Ｂを参照する。図７Ａおよび図７Ｂでは、図６で表したもののような完全な複製に続いて知識ベクトルを更新する２つの方法を示す。
【００６４】
実例として、図７Ａは、レプリカにストアした例外リスト７０２を用いて知識ベクトルを更新する方法を示す。本例では、レプリカＡの初期知識ベクトルである知識ベクトル６０８を使用する。知識ベクトル６０８はＡ５Ｂ３Ｃ１Ｄ１０に等しい。例外リスト７０２を生成するため、レプリカは、同期動作中に受信した変更に関連する変更ＩＤをメモする。変更をレプリカに追加するとき、対応する変更ＩＤを例外リスト７０２に対する例外として追加する。幾らか後の時点で、レプリカＡに対する知識を検査する。図７Ａにおいて、再度図６でレプリカＡにより受信した変更に対応して、知識は知識ベクトル６０８と例外リストとを含む。その例外リストは、例外Ｃ２、Ｃ３、Ｃ４およびＣ５を含む。知識ベクトル６０８と併せて例外リスト７０２を検査することで、例外リスト７０２からの変更ＩＤを含めて、レプリカＡの知識はレプリカＣによる５回目までの全ての変更を含むことが示される。従って、例外を、レプリカＡの知識から除去し、更新済み知識ベクトル７０４において示されるように、要素Ｃ５を含めるよう更新したレプリカＡの知識ベクトルから除去することができる。
【００６５】
同様な分析を、レプリカＢ６１０の知識６１４に実施することができる。例外リスト７０３内の例外Ａ４、Ａ５、Ｄ９およびＤ１０と結合した初期知識ベクトル６１６により、知識ベクトル６１６を、更新済み知識ベクトル７０６に更新することができる。
【００６６】
とりわけ、部分的な複製のみを実施した場合、例えば変更ＩＤ  Ａ４およびＤ９に対応する変更が複製において送信されない場合、例えば変更ＩＤ  Ａ４およびＤ９で表される変更をレプリカＢに転送する別のレプリカが後に複製することでそれらを除去できるまで、レプリカＢ６１０の知識６１４は例外Ａ５およびＤ１０を保持する必要があるであろう。
【００６７】
図７Ｂは、知識ベクトル６０８および６１６を更新して図６に示す複製を反映する別の方法を示す。本例では知識ベクトルを、要素単位、またはポイント単位の、初期知識ベクトル６０８および６１６内要素の各々に対する最大値を用いて更新し、更新済み知識ベクトル７０８を形成する。知識ベクトル６０８および６１６の各々の第１の要素は、レプリカＡ内で行った変更に関連する変更ＩＤの集合に対応する。Ａ５は２つの知識ベクトル６０８および６１６の要素単位の最大要素であるので、更新済み知識ベクトル７０８は要素Ａ５を含む。同様に、ベクトル要素Ｂ３、Ｃ５およびｄ１０はそれぞれ、それら要素の各々が対応する特定のレプリカ上の変更に対応する要素単位の最大要素を表す。
【００６８】
更新済み知識ベクトル７０４、７０６、および７０８の各々を検査したかどうかが分かるので、同じ更新済み知識ベクトルが何れかの方法で取得される。一般に知識ベクトル更新の要素単位最大法を、完全な複製を実施したときに使用することができる。知識ベクトル更新の例外リスト法は、完全な複製が行われたことが確かでないとき（例えば、ユーザが複製をキャンセルするとき、装置がクラッシュするとき等に発生する可能性がある）に有用である可能性がある。即ち、完全なレプリカの知識を単純なベクトル形式で表せないときに例外が特定のレプリカの知識の一部を含み続けることができるように、例外リスト法を使用する必要があるかもしれない。
【００６９】
図７Ｃを参照する。知識を更新する例を、不完全な複製からの情報を有するレプリカに対して示す。図７Ｃは初期知識ベクトル７１０、初期例外リスト７１２、更新済み知識ベクトル７１４、および更新済み例外リスト７１６を含む。示したレプリカに関して、部分的な複製の後に、レプリカは、ベクトル要素Ａ５で表す、Ａ１からＡ５でラベル付けした変更ＩＤの全てと、Ａ７、Ａ８、Ａ９およびＡ１０を含む例外のリストで表す、Ａ７からＡ１０でラベル付けした変更ＩＤの全てとを有する。図７Ｃに示すように、更新したバージョンの知識では、図７Ｃに示すように例えば表現（Ａ７：Ａ１０）により、更新済み例外リスト７１６を短縮してＡ７からＡ１０の全ての要素を含むことを示す。この表現は単純に、ベクトルの開始点がレプリカＡに対する最初の変更と幾分異なる点であることを除いて、本明細書で前に議論したもののようなベクトルである。従って、レプリカの知識の表現は、それがＡに関連するので、ベクトルＡ５および例外ベクトル（Ａ７：Ａ１０）により表される。
【００７０】
レプリカＢに関するレプリカの知識の場合、知識ベクトル７１０を更新して、レプリカＢに対するベクトル要素に含まれる変更ＩＤに続く連続的な変更ＩＤを含めることができる。ベクトル要素Ｂ１は変更ＩＤ  Ｂ１のみを含む。変更ＩＤ  Ｂ２、Ｂ３、およびＢ４が例外リスト７１２に存在し、それらは知識ベクトル７１０に含まれる変更ＩＤ  Ｂ１に続くので、レプリカＢに対するベクトル要素を、更新済み知識ベクトル７１４内のＢ４に更新し、Ｂ１からＢ４の要素が含まれることを表すことができる。変更ＩＤ  Ｂ５が例外リストにないので、例外Ｂ６は更新済み知識例外リスト７１６内に留まらなければならない。レプリカＢの要素は、Ｂ６を更新済み知識ベクトル７１４に含めることはできない。
【００７１】
レプリカＣによる変更に関する知識について同様な分析を実施することができる。初期知識ベクトル７１０はＣ５を含む。初期例外リストはＣ６、Ｃ７およびＣ８を含む。初期知識ベクトル要素Ｃ５はＣ１からＣ５の変更ＩＤを含み、Ｃ５は初期例外リスト７１２内の変更ＩＤに続くので、レプリカＣに対する更新済み知識ベクトル要素をＣ８に更新することができる。
【００７２】
絞込み複製
いくつかの実施形態では、同期要求中にフィルタを指定または提供することもできる。フィルタは、データストア内の特定の項目集合を識別する役割を果たす任意の構造体である。複製中に、フィルタにより識別した変更のみを要求者に返すように、列挙した変更をフィルタを用いて絞り込むことができる。例えば、単純なフィルタでは「緑である全ての項目」を指定することができる。要求レプリカに返される変更は、緑である項目の変更のみを含む。緑でない項目の変更は、要求者に送信することはできない。
【００７３】
図８を参照する。図８には、フィルタを用いた２つのレプリカ間の複製の例を示す。図８の以下の説明を、図３および図４を参照して行う。しかしながら、図８を参照して説明した動作は、図３および図４または任意の他の図面で図示した要素で用いているものに限定されるとは意図していないことは理解されるべきである。さらに、図面の説明では特定の実行順序を示すかもしれないが、１つまたは複数の代替実施形態ではその動作を異なって順序付けしてもよいことは理解されるべきである。さらに、図面では複数のステップを示すが、いくつかの実装ではこれらのステップの一部または全部を組み合わせるか、または同時に実行してもよいことは理解されるべきである。
【００７４】
図８に示す例は、レプリカＡが開始した１方向同期である。本例では、レプリカＢはレプリカＡにない変更を識別し、上記の変更をレプリカＡに送信する。この場合、送信された変更を、既にレプリカＡにある変更に取り込むことができる。前の例と対照的に、図３を参照して説明した例のように、本例では、レプリカＢにより識別および返却された項目を場合によって修正するためのフィルタの使用を実証する。
【００７５】
図８は２つのレプリカ、即ちレプリカＡ８０２およびレプリカＢ８０４を示す。レプリカＡは知識８０８を含み、本例では知識８０８をＫＡでラベル付けしてある。レプリカＡはさらに変更集合８０６を含み、本例では変更集合８０６をΔＡでラベル付けしてある。同様に、レプリカＢ８０４は、ＫＢとラベル付けした知識８１２とΔＢとラベル付けした変更集合８１０とを含む。
【００７６】
複製を始めるために、動作８５０で、レプリカＡ８０２は同期要求を送信し、その同期要求をレプリカＢにより受信する。前の例で示したように、同期要求はレプリカＡの知識８０８を含む。しかしながら、前の例と対照的に、同期要求はフィルタ８２０も含む。フィルタ８２０はメカニズムを提供する任意の構造体であり、そのメカニズムによりレプリカは１つ以上の特定の項目または変更を識別することができる。例えば、いくつかの実施形態では、フィルタは、項目に対して評価できる基準、例えば「緑である全ての項目」から構成することができる。他の実施形態では、フィルタは明示的な項目リストであることができる。いくつかの実施形態では、フィルタ自体を同期要求の一部として送信することができる。他の実施形態では、フィルタを他所にストアすることができ、フィルタを識別する何らかの手段のみを同期要求の一部として送信することができる。さらに他の実施形態では、ある種の同期要求の結果自動的にある特定のフィルタを使用することになり、この場合、フィルタ自体を同期要求で送信しなくともよい。例えば、低帯域幅の接続上で送信される同期要求の結果自動的に、返される項目の数や性質または変更を何らかの方法で削減するフィルタを使用することになりうる。
【００７７】
動作８５２の１つの実装では、レプリカＢ８０４はレプリカＡに送信される変更を識別する。上記変更は、ａ）送信した知識ＫＡにより識別されるように、レプリカＡが未知であるもの、およびｂ）フィルタにより識別されるものである。フィルタにより識別されない変更は、それらがレプリカＡに未知である場合でも、レプリカＡに返すように選ばれない。本動作を様々な方法で実現することができる。１つの実施形態では、例えば、レプリカＢはその項目の各々を検査し、フィルタ内にある項目を識別し、次いでフィルタ内のそれぞれの項目に関連するバージョンを送信された知識と比較し、バージョンが送信された知識内にない項目を選択することができる。別の例示的な実施形態では、レプリカＡはその変更を検査して、レプリカＡが送信した知識内にないものを識別し、フィルタ８２０を用いて結果の変更を絞り込む。
【００７８】
本説明でさらに議論した後に理解されるように、フィルタの評価期間は「フィルタ内」または「フィルタ外」にあると考えられる項目に影響を及ぼすことができる。例えば、いくつかの実装では、特定の項目がフィルタ内にあるとレプリカＡが考え、一方で同じ項目がフィルタ外にあるとレプリカＢが考えることがありうる。本問題を処理する様々な技術を、本説明の残りの様々な箇所で議論する。
【００７９】
動作８５４で、レプリカＢ８０４は動作８５２中に識別した変更を送信し、レプリカＡはその変更を受信する。図８では、これらの変更をΔＦ８２２として示す。レプリカＢは知識値も送信する。その知識値を、学習知識値とも呼ぶ場合があり、レプリカＢに関連付け、ＫＬ８２４とラベル付けする。本知識値をレプリカＡ８０２が使用してその知識８０８を更新することができる。
【００８０】
動作８５６では、レプリカＡ８０２はその知識８０８を、レプリカＢ８０４が返した知識値ＫＬ８２４を取り込むことで更新する。レプリカＡのような受信レプリカがその知識を更新する方法は、フィルタ付き複製において異なってもよい。前に議論した実施形態では、データストア全体を変更に対して考慮し、且つフィルタを使用しなかったとき、更新したレプリカＡの知識値８０８を例えば、ＫＡとＫＬを結合することで形成することができる。限定ではなく例として、複製前のレプリカＡの知識値がＫＡ＝Ａ２Ｂ５であり、且つレプリカＢが返す知識値がＫＬ＝Ａ１Ｂ７であったと仮定する。前のいくつかの例では、フィルタなしで、恐らく図７Ａまたは図７Ｂに関して説明したメカニズムを用いて、更新済み知識値８０８をＫＡおよびＫＬを結合することで決定することができる。上記の場合、動作８５６で決定した結果の知識値ＫＡ８０８はＫＡ＝Ａ２Ｂ７（Ａ２Ｂ５およびＡ１Ｂ７の最大値）であったかもしれない。
【００８１】
対照的に、絞込み複製を用いると、更新済み知識値はいくつかの場合、例えば既存の知識値と送信された学習知識との最大を取ることで決定することはできない。これは、レプリカＢが必ずしもその変更の全てを送信しなかったからである。レプリカＢは特定の変更のみ、即ち、指定のフィルタが識別する変更のみを送信した。仮に開始レプリカがフィルタの使用に無関係にその知識値を更新するならば、更新済み知識値が、（恐らくフィルタにより識別されなかったため）実際には送信されなかった変更の知識をレプリカが有すると示すことが起こるであろう。
【００８２】
この問題を解決するため、「基礎知識」とフィルタの使用に関連する追加の知識値とを用いて、動作８５６において知識値８０８を更新する。前の段落で導入した例を用いて、初期知識ＫＡ＝Ａ２Ｂ５および返された知識値ＫＬ＝Ａ１Ｂ７により、レプリカＡに対する更新済み知識値８０８を多数の方法のうち１つで表すことができる。その方法にはＫＡ＝Ａ２Ｂ５＋Ｆ：Ａ１Ｂ７とすることが含まれる。ここで、Ａ２Ｂ５は基礎知識であり、Ｆ：Ａ１Ｂ７は追加の絞込み知識値である。上記の知識値は、レプリカＡがＡ２Ｂ５までの一般的な変更の知識（即ち、レプリカＡの第２のバージョンまで、レプリカＢの第５のバージョンまでの、全ての項目の変更の知識）を有することを示す。追加の絞込み知識値は、レプリカＡが、フィルタＦが識別する項目または変更に対するＡ１Ｂ７までの変更を知ることも示す。
【００８３】
知識を蓄積的、または付加的と考える。その結果、項目または変更がフィルタＦ内にあると識別される場合、レプリカＡはＡ１Ｂ７までの、およびＡ２Ｂ５までの知識を有すると考えることができる。例えば、特定の項目に対する特定の変更が変更ＩＤ  Ｂ６に関連付けられると仮定する。変更した項目がフィルタＦ内にある場合、レプリカＡはその変更の知識を有すると考えることができる。なぜならば、変更ＩＤ  Ｂ６が知識Ａ２Ｂ５＋Ｆ：Ａ１Ｂ７内にあるからである。この場合、変更ＩＤ  Ｂ６は全体の知識値の絞込み知識部にある。対照的に、変更ＩＤ  Ｂ６に関連する項目がフィルタＦ内になかった場合、レプリカＡはその変更の知識を有さなかったであろう。この場合、変更ＩＤ  Ｂ６は基本知識値Ａ２Ｂ５に対してのみ比較され、Ａ２Ｂ５のメンバではないことが分かったであろう。変更または項目がフィルタ内にない場合、レプリカＡが絞込み知識値Ｆ：Ａ１Ｂ７を有するという事実は有用ではない。
【００８４】
レプリカＢが送信した変更ΔＦ８２２をレプリカＡが実際に取り込む場合、レプリカＡは学習知識値ＫＬ８２４を用いてその知識のみを更新することができる。送信された変更をレプリカが取り込まない場合、そのレプリカはその知識を更新することができない。
【００８５】
本メカニズムを通して、効率的な絞込み複製を実施することができる。この場合、開始レプリカが未知であるフィルタ内の知識が識別され、開始レプリカに送信される。
【００８６】
例えば図３に関して前述したもののような非絞込み複製に関して、開始レプリカは既に開始レプリカ上にある変更と他のレプリカが送信したものとの間のコンフリクトを検出することができる。開始レプリカは、両方のレプリカ上の変更に関連する変更ＩＤと、知識生成値とを用いてそれを行うことができる。例えば図４を参照して詳細に議論したもののような前に議論したコンフリクト検出技術もフィルタ付き複製に適用される。
【００８７】
図９を参照する。図９には、絞込み複製の例で使用できるデータの１つの例示的な実施形態を示す。図９は、レプリカＢ９０２の選択した要素を示す。これらの要素は変更集合９０６と知識９０８とを含む。変更集合９０６はいくつかの個々の変更９１０を含み、本例では、それらをＷ、Ｘ、およびＹとして示す。本例では、知識の現在状態、即ち、レプリカ９０２の知識９０８を、この場合はＡ２Ｂ５に等しい知識ベクトル９１２により表す。
【００８８】
図９には、個々の項目９１６に関連する、多数の変更ＩＤ９１４と色９２０も表している。本例では、レプリカＢ９０２は３つの変更項目９１６、即ちＩＷ、ＩＸ、およびＩＹを含む。これらの項目は対応する色の値９２０を有する。例えば、項目ＩＷは緑であり、項目ＩＸは青である。項目は、Ｗ、Ｘ、およびＹとラベル付けした対応する変更９１０も有する。変更ＩＤを用いると、項目ＩＷが、変更ＩＤ  Ａ２を有し、バージョン番号２で表した時点でレプリカＡ内で変更されたことを識別することができる。項目ＩＸは、変更ＩＤ  Ｂ５を有し、バージョン番号５で表した時点にレプリカＢ内で変更された（注記として、ＩＷが変更ＩＤ  Ａ２で変更された時点と、ＩＸが変更ＩＤ  Ｂ５で変更された時点との間の関係は、それ自体未知である。なぜならば、それらの変更は異なるレプリカ上で行われたからである。即ち、図９内の情報を検査することで、変更ＩＤ  Ａ２に関連する変更が、変更ＩＤ  Ｂ５に関連する変更の前または後に行われたかどうかを判断することはできない。しかしながら、変更ＩＤ  Ｂ３を有する項目ＩＹが、変更ＩＤ  Ｂ５を有する項目ＩＸの前に変化したと決定することはできる。なぜならば、これらの変更の両方ともレプリカＢ上で行われ、番号３が番号５より小さいからである）。
【００８９】
図１０を参照する。図１０には、２つのレプリカ間の絞込み複製の１つの例を示す。図１０の以下の説明を、図６および図９を参照して行う。しかしながら、図１０を参照して説明した動作は、図６および図９または任意の他の図面で図示した要素で用いているものに限定されるとは意図していないことは理解されるべきである。さらに、図面の説明では特定の実行順序を示すかもしれないが、１つまたは複数の代替実施形態ではその動作を異なって順序付けしてもよいことは理解されるべきである。さらに、図面では複数のステップを示すが、いくつかの実装ではこれらのステップの一部または全部を組み合わせるか、または同時に実行してもよいことは理解されるべきである。
【００９０】
本例では、レプリカＡ１００２が開始した１方向同期を示す。本例でレプリカＡが複製しているレプリカはレプリカＢ９０２である。レプリカＢ９０２は、図９を参照して前に導入および説明した。図１０に示す例は、一般的な同期動作に存在しうる全ての動作を説明するわけではないことに留意すべきである。例えば、図１０は、レプリカＡがレプリカＢから変更を受信した後にレプリカＡがコンフリクト検出を実施できる方法は示さない。
【００９１】
本例では、レプリカＡ１００２はΔＡとラベル付けした変更集合１００４、ＫＡとラベル付けした知識１００６、および知識１００６の短縮表現である知識ベクトル１００８を含む。実例として、レプリカＡの知識ベクトル１００８はＡ４Ｂ２であり、これはレプリカＡが、レプリカＡ内の４回目の変更までの知識、およびレプリカＢ内の２回目の変更までの知識を有することを示す。図９の議論で前述したように、レプリカＢ９０２はΔＢとラベル付けした変更集合９０６を有し、変更集合９０６は個々の変更Ｗ、Ｘ、およびＹ９１０を含む。レプリカＢはＫＢとラベル付けした知識９０８と、この場合はＡ２Ｂ５である対応する知識ベクトル９１２とを含み、レプリカＢが、レプリカＡ上の２回目の変更までの知識、およびレプリカＢ内上５回目の変更までの知識を有することを示す。
【００９２】
動作１０５０で、レプリカＡ１００２は同期要求１０１８をレプリカＢに送信する。レプリカＡはその知識１００８とフィルタＦＧＲＥＥＮ１０１６の両方も含む。フィルタ１０１６は本例では、緑である項目に対する全ての変更をレプリカが求めることを指示する。
【００９３】
動作１０５２で、レプリカＢ９０２は、同期要求１０１８に応じて送信すべき変更を決定する。本例では、送信すべき変更はフィルタ内にあるべきである。即ち、緑である項目の変更のみを送信すべきである。さらに、前の例でもそうであったが、図６に示すもののように、レプリカＡ１００２に未知である変更のみを送信すべきである。本例では、これは、送信した知識１００６により表されない、知識ベクトルＡ４Ｂ２に等しい変更のみを送信すべきであることを意味する。図９に示すように、レプリカＢ内の変更および項目を検査すると、項目ＩＹおよび変更ＩＤ  Ｂ３に関連する変更Ｙのみを送信すべきであることは明らかである。項目ＩＹは緑であり、従ってフィルタに入る。さらに、項目ＩＹに関連する変更ＩＤはＢ３であり、これは送信した知識Ａ４Ｂ２内にはなく、レプリカＡがこの変更をまだ知らないことを示す。対照的に、項目ＩＷの変更Ｗも項目ＩＸの変更Ｘも送信すべきではない。項目ＩＷは緑であり、従ってフィルタに入るが、その変更ＩＤはＡ２であり、従ってレプリカＡは既にその変更を知っている。項目ＩＸは青であって緑ではないので、フィルタ１０１６内にはなく、レプリカＡがその変更を知っているかどうかにかかわらず送信すべきではない（この場合は、レプリカＡはその変更を知らない。仮にフィルタがなかった場合、項目ＩＸの変更は送信されていたであろう。なぜならば、その変更は変更ＩＤ  Ｂ５を有し、レプリカＡの送信した知識内にはないからである）。
【００９４】
動作１０５４で、レプリカＢ９０２は単一の識別した変更を送信する。その変更には、変更ＩＤ  Ｂ３を有する項目ＩＹを関連付け、ΔＦ１０２２とラベル付けする。レプリカＢは、本例ではＫＬ＝ＦＧＲＥＥＮ：Ａ２Ｂ５とラベル付けした学習知識ＫＬ１０１４も送信する。この学習知識は、送信した変更を取り込んだ後、開始レプリカがフィルタＦＧＲＥＥＮ内の項目に対してのみＡ２Ｂ５までの変更の知識を有するように、開始レプリカがその知識を更新できることを示す。代替実施形態では、レプリカＢはフィルタで学習知識を制限することができない。即ち、本例ではレプリカＢはＫＬ＝Ａ２Ｂ５のみを送信することができる。レプリカＢが自分の送信する学習知識を制限する方法にかかわらず、レプリカＡはその知識をフィルタ内の項目にのみ適用できることを知っており、従って、レプリカＡがその知識を更新するとき、動作１０５６を参照して以下で議論するように、レプリカＡはフィルタ内のこれらの項目に対してのみその知識を更新することができる。
【００９５】
動作１０５６で、レプリカＡ１００２は、項目ＩＹと変更ＩＤ  Ｂ３に関連する送信された変更Ｙをその変更ΔＡ１００４に取り込む。レプリカＡは、レプリカＡがＡ４Ｂ２＋ＦＧＲＥＥＮ：Ａ２Ｂ５を含むように、その知識ＫＡ１００６も更新する。この知識は、レプリカＡが、全ての項目に対して、レプリカＡ上の４番目の変更（Ａ４）までの知識、レプリカＢ上の第２の変更（Ｂ２）までの知識を有することを示す。この知識は、フィルタＦＧＲＥＥＮ内の項目に対して、レプリカＡが、レプリカＡ上の２番目の変更（Ａ２）までの知識、レプリカＢ上の第２の変更（Ｂ５）までの知識を有することも示す。前に議論したように、本知識は付加的である。即ち、フィルタＦＧＲＥＥＮ内の項目は、少なくとも次のうち１つが成り立つときにその知識内にある。即ち、その項目が絞込み知識断片Ａ２Ｂ５内にあること、またはその項目が基礎知識Ａ４Ｂ２内にあることである。変更ＩＤがこれらの知識部分の何れかにあり、且つ関連項目がフィルタ内にある場合、その変更はレプリカに既知である。本概念および技法を、任意数の知識断片に拡張することができる。例えば、まだ議論していないいくつかのレプリカの知識は、Ａ１０Ｂ５Ｃ２＋Ｆ１：Ａ５Ｃ２＋Ｆ２：Ａ２０Ｂ２０Ｃ２０＋．．．＋ＦＸ：Ｂ５Ｃ１０Ｄ１５のようなものでありうることが考えられる。ここで、Ｘは何らかの任意の数または他の識別子である。
【００９６】
前に議論したフィルタＦＧＲＥＥＮは「プロパティベースフィルタ」と呼ばれる種類のフィルタの例である。このコンテキストでは、プロパティベースフィルタを、そのフィルタ内にあるかまたはそのフィルタ内にない項目に関連する１つまたは複数の特性によってのみそのメンバが定義されるフィルタとして定義する。従って、例えば緑である項目をフィルタＦＧＲＥＥＮが含むと、フィルタＦＧＲＥＥＮはプロパティベースフィルタである。前に議論したように、フィルタはデータ集合を分割または制限できる任意の構造体である。
【００９７】
対照的に、プロパティベースでないフィルタの１つの例は、個々の項目のコンテキスト外で変化する日付または時刻に基づくフィルタである。例えば、あるフィルタは「過去２週間に受信した全ての電子メール」を指定することができる。本フィルタは、そのフィルタのメンバが電子メールの任意の特性から独立して日付とともに変化するので、プロパティベースではない。即ち、１４日前に受信した電子メールは、その電子メールに関連する特性が変化していないにもかかわらず、今日はフィルタ内にあり、明日にはフィルタ内にないかもしれない。
【００９８】
望ましい場合があるプロパティベースフィルタの特徴は、フィルタのメンバに入ったり出たりする項目に帰着する項目に対する任意の変更が、関連する変更ＩＤを有することである。即ち、項目は、関連する変更を生成しなければフィルタに入ったり出たりすることはできない。これは、とりわけ、フィルタメンバを評価する時点に起因したフィルタメンバ内の差異のために発生しうる問題を解決するときに有用である可能性がある。
【００９９】
図１１を参照する。図１１には、フィルタメンバを評価する時点に起因したフィルタメンバ内の差異のために発生しうる問題を対象とした例示的な技術を示す。即ち、例えば異なる時点で「どの項目が緑か？」というフィルタを２つのレプリカが評価するとき、２つのレプリカが、異なる項目がフィルタ内にあり、およびフィルタ外にあると信ずることができる。図１１は、図１０と同じ動作フローおよび要素を含み、図１０に関する前の議論も適用される。さらに、図１１はこの問題を対象とする新規動作１１５６および新規動作１１５８も含む。図１１の以下の説明を、図９および図１０を参照して行う。しかしながら、図１１を参照して説明した動作は、図９および図１０または任意の他の図面で図示した要素で用いているものに限定されるとは意図していないことは理解されるべきである。さらに、図面の説明では特定の実行順序を示すかもしれないが、１つまたは複数の代替実施形態ではその動作を異なって順序付けしてもよいことは理解されるべきである。さらに、図面では複数のステップを示すが、いくつかの実装ではこれらのステップの一部または全部を組み合わせるか、または同時に実行してもよいことは理解されるべきである。
【０１００】
図１０に関して前に議論した例、および図９で与えたデータに関して前に議論した例を続けると、項目ＩＸと変更ＩＤ  Ｂ５とに関連する変更ＸはレプリカＢ９０２からレプリカＡ１００２に返されなかったことを想起されたい。これは、レプリカＢがフィルタＦＧＲＥＥＮを評価した時点に項目ＩＸが青であったために起こった。その項目は緑ではなくそれゆえフィルタ内になかったので、レプリカＢはその項目をレプリカＡに返さなかった。図１０の議論のコンテキストでは、これによりレプリカＡを適切に更新することができる。
【０１０１】
しかしながら、Ｂ５に関連する変更が、実際に項目ＩＸの色において生じたと仮定する。例えば、恐らく変更Ｂ５の直前の時点で項目ＩＸは緑であった。次いで項目ＩＸが緑から青に変化し、この変化に変更ＩＤ  Ｂ５を与えた。レプリカＡ１００２は緑から青への変化を知らないので、レプリカＡは項目ＩＸがフィルタ内にあると信じる可能性がある。レプリカＡは項目ＩＸがフィルタ内にあると信じるので、レプリカＡは項目ＩＸに対する任意の変更に関心があり、従って変更Ｂ５に関連する変更Ｘを受信すべきである。図１０における議論だけでは、これは起こらないであろう。再度、レプリカＢ９０２が動作１０５２で返す変更を評価すると、レプリカＢ９０２は、項目ＩＸはフィルタ内にないことを理解し、項目に関連する任意の変更を送信しないであろう。この問題を対象とした技術なしでは、レプリカＡが複製の最後に保持する知識は、レプリカＡが網羅すべき全ての変更を網羅することができない。本例では、図１０を参照して議論したように、レプリカＡの知識はＡ４Ｂ２＋ＦＧＲＥＥＮ：Ａ２Ｂ５であろう。これは、レプリカＡが、フィルタ内の項目に対するＡ２Ｂ５までの全ての変更に関して知っていることを示す。この特定の更なる例においてこれが成り立つとは考えられない。なぜならば、変更Ｂ５がレプリカＢから送信されなかったのでレプリカＡは変更Ｂ５に関して知らないからである。レプリカが変更Ｂ５に関して知らないので、そのレプリカは、実際には項目ＩＸが青であると知るべきときでも、なお項目ＩＸが緑であると信じる。
【０１０２】
図１１を参照して説明する技術は、プロパティベースフィルタで本問題を解決することを対象とする。さらに、本明細書の他の部分、例えば図１２を参照して説明するさらなる技術をこの一般的な問題に適用することもできる。
【０１０３】
図１１に戻る。レプリカＢ９０２は最初に、識別した変更と、動作１０５４における学習知識とを送信する。再度、上記の識別した変更は、項目ＩＹおよび変更ＩＤ  Ｂ３に関連する変更Ｙである。
【０１０４】
次いで、新規動作１１５６の１つの例では、レプリカＢは、レプリカＡ１００２が最後に複製してから変化し、且つレプリカＢがフィルタ内にないと考える項目に関する識別情報も送信する。これらの変更を「非絞込み変更」と称することができる。本情報により、自分が受信していない変更に関して自分が何かを知っていると主張することを回避するように、レプリカＡはその知識を更新することができる。
【０１０５】
レプリカＢは、レプリカＡにより送信した知識、本例では知識ＫＡ１００６、を用いて最後にレプリカＡが複製してから変化した項目を決定することができる。送信した知識ＫＡにより表されないレプリカＢが知っている任意の変更は、最後の複製の後に行われたと考えることができる。「最後の複製」という言葉は、レプリカが最後にこの特定の他のレプリカと同期した時点を意味しない。即ち、本例では、「レプリカＡが最後にレプリカＢから変更を受信した時点」を意味しない。代わりに、「最後の複製」は、例えば図１を参照して前述したように、任意の他のレプリカとの任意の以前の複製を通して得られる変更に関するレプリカＡの知識を指す。この場合、レプリカは、どのレプリカが過去の複製の一部であったかを具体的に理解し続けることなく独立して変更を行い、様々な他のレプリカと同期することができる。
【０１０６】
レプリカＢが送信する識別情報は、レプリカＡが特定の項目を識別できる任意の情報であることができる。具体的な例として、いくつかの実装では、識別情報はそれぞれの項目に関連する一意な識別子であることができる。
【０１０７】
この具体的な例では、同期要求１０１８とともに、レプリカＡはＡ４Ｂ２である関連知識ベクトル１００８とともに知識ＫＡ１００６を送信する。この知識ベクトルを用いて、レプリカＢは、レプリカＡが最後に複製してから項目ＩＸとＩＹの両方が変化したことを決定することができる。なぜならば、（項目ＩＸに関連する）変更ＩＤ  Ｂ５と（項目ＩＹに関連する）変更ＩＤ  Ｂ３の両方が知識ベクトルＡ４Ｂ２内にないからである。レプリカＢは、最後の複製から項目ＩＷが変化していないことを決定することもできる。なぜならば、Ａ２である項目ＩＷの変更ＩＤは知識ベクトルＡ４Ｂ２内にあるからである。フィルタをレプリカＢにより評価した時点で項目ＩＹがフィルタ内にあるので、項目ＩＹの変更は動作１０５４の一部として既に送信してある。しかしながら、レプリカＢは、項目ＩＸに関連する変更Ｂ５は送信されていないことを理解することができる。なぜならば、レプリカＢに関する限り、項目ＩＸはフィルタＦＧＲＥＥＮ内にないからである。項目ＩＸがレプリカＡの最後の複製から変化したので、レプリカＢは項目ＩＸに対する識別情報を動作１１５６の一部として送信する。これを図１１ではＩＤΔ＝ＩＸ  １１２２としてラベル付けしてある。
【０１０８】
この識別情報を本例ではレプリカＡのような開始レプリカに送信すると、その開始レプリカはその情報を少なくとも少数の異なる方法の１つで使用して、レプリカＡが、自分が受信していない変更に関して何かを知っているとの主張の回避を保証することができる。これを、図１１では更新動作１１５８で示す。
【０１０９】
１つの可能なアプローチは、動作１１５６で識別した任意の項目を単に削除することである。本技法は、例えば、開始レプリカがフィルタ内にあるデータのみを保持する場合に有用である可能性がある。例えば、これは、開始レプリカが全ての電子メールメッセージではなく受信箱の電子メールメッセージのみを保持する場合に有用である可能性がある。その理由は恐らく、開始レプリカが限られたストア容量を有するコンピューティング装置上にあるからである。レプリカがストアされたデータのサブセットのみを保持し、他のレプリカが特定の項目がフィルタ内にないと主張するとき、受信レプリカは最早その項目に関連するデータを気にせず、問題の項目を削除することができる。このアプローチを用いると、ＦＧＲＥＥＮの前の例において、レプリカＡ１００２は項目ＩＸを削除することができる。このアプローチを用いるときのレプリカの知識を、図１０に関して実証したように更新する。
【０１１０】
いくつかのレプリカは全てのデータの保持を望むかもしれず、従って前の段落で議論した識別項目を削除するアプローチを使用することはできない。これらの場合では、別の代替手段は、それぞれの識別項目に対するレプリカの知識において例外を生成することである。識別項目に対して、レプリカは以前の知識を知っていることだけを主張することができる。即ち、複製によりレプリカがその識別項目に関して何か付加的なものを知ることが可能となったと言うことはできない。前の例では、レプリカＡは前のようにその知識を最初に更新して、知識Ａ４Ｂ２＋ＦＧＲＥＥＮ：Ａ２Ｂ５を得たであろう。次いでレプリカＡは項目ＩＸに対する例外を追加して、（レプリカＢ９０２が項目ＩＸに関する変更を送信していないので）レプリカＡが項目ＩＸに関してレプリカＡが複製前に知っていたことのみを知ることを示す。前の例を続けると、結果の知識をＡ４Ｂ２＋ＦＧＲＥＥＮ：Ａ２Ｂ５＋ＩＸ：Ａ４Ｂ２のように表すことができる。この知識は、レプリカＡが（複製開始前のレプリカＡの知識であった）Ａ４およびＢ２をまでの項目ＩＸの変更のみを知ることを除いて、レプリカＡがＡ４およびＢ２までの全ての項目の変更を知り、Ａ２およびＢ５までのフィルタＦＧＲＥＥＮ内の項目の変更を知ることを意味する。
【０１１１】
後の絞込み複製中に、追加の例外を加えることができる。次いで、装置がフィルタを使用せずに完全複製を行うとき、全ての例外、および絞り込み知識断片を、除去し、完全複製からの単一の基礎知識で置換することができる。
【０１１２】
図１２を参照する。図１２には、「伸縮可能フィルタ」と称する一種のフィルタを用いた２つのレプリカ間の複製の例を示す。図１２の以下の説明を、図４、図８、および図１１を参照して行う。しかしながら、図１２を参照して説明した動作は、図４、図８、および図１１または任意の他の図面で図示した要素で用いているものに限定されるとは意図していないことは理解されるべきである。さらに、図面の説明では特定の実行順序を示すかもしれないが、１つまたは複数の代替実施形態ではその動作を異なって順序付けしてもよいことは理解されるべきである。さらに、図面では複数のステップを示すが、いくつかの実装ではこれらのステップの一部または全部を組み合わせるか、または同時に実行してもよいことは理解されるべきである。
【０１１３】
伸縮可能フィルタを理解するため、図１１の議論では、２つの異なるレプリカが、そのレプリカがフィルタを異なる時点で評価したために異なる項目が単一の共通フィルタのメンバであったと信じる問題を対象としたことを考える。図１１に関する議論では、例えば、特定の項目の識別子を識別変更および学習知識とともに送信し、これらの識別子を用いて知識内の項目を削除または例外を生成することにより、この問題を解決するいくつかの技術を与えた。
【０１１４】
同じ基本的な問題に対する別のアプローチは、フィルタを定義および使用することである。そのフィルタによりレプリカは、過去の任意の時点にいたそのフィルタのメンバを決定することができる。これが当てはまるフィルタを「伸縮可能フィルタ」と称する。伸縮可能フィルタが与えられると、レプリカは現時点でフィルタ内にあるものを評価できるだけでなく、過去の時点でフィルタ内にあった項目を決定することができる。
【０１１５】
図１２の動作フローは、例えば図１１を参照して議論した動作に対する別の代替手段として上記の伸縮可能フィルタを使用する方法を実証する。図１２は２つのレプリカ、即ちレプリカＡ１２０２およびレプリカＢ１２０４を示す。レプリカＡは知識１２０８を含み、知識１２０８をＫＡでラベル付けする。レプリカＡはさらに変更集合１２０６を含み、本例では変更集合１２０６をΔＡでラベル付けする。同様に、レプリカＢ１２０４は、ＫＢとラベル付けした知識１２１２と、ΔＢとラベル付けした変更集合８１０を含む。
【０１１６】
複製を開始するため、動作１２５０で、レプリカＡ１２０２は同期要求をレプリカＢ１２０４に送信する。同期要求とともに、レプリカＡはその知識１２０８を送信する。本例では、レプリカＡは伸縮可能フィルタ１２２０も含む。
【０１１７】
動作１２５２の１つの実装で、レプリカＢ１２０４はレプリカＡ１２０２に返すべき変更を識別する。前の絞込み複製の議論と対照的に、例えば図８を参照して、レプリカＢは、現時点でフィルタとマッチする項目の変更と、そのフィルタをマッチするためにレプリカＡに既知である項目、即ち、送信した知識ＫＡ１２０８により表される時点でフィルタにマッチした項目の変更とを評価する。レプリカＢはこの評価を実施することができる。なぜならば、伸縮可能フィルタは過去の任意の時点でのフィルタのメンバに関する情報を提供するからである。この追加情報を用いて、レプリカＢは、レプリカＡによれば現在フィルタ内にある項目に対する任意の変更とフィルタ内にあった項目に対する任意の変更とがあるかどうかを、これらの項目がレプリカＢによれば現時点でフィルタ内にない場合でも、決定することができる。これらの識別した変更の任意に対して、レプリカＢはその変更が送信された知識のメンバであるかどうかを前に議論したように評価することができ、次いで任意の上記変更の送信を決定することができる。
【０１１８】
動作１２５４の実装では、レプリカＢ１２０４は動作１２５２中に識別した変更をレプリカＡに送信する。図１２では、これらの変更をΔＦ１２２２として示す。レプリカＢは、ＫＬ１２２４とラベル付けした、レプリカＢに関連する知識値も送信し、その結果レプリカＡはその変更を検査して場合によってΔＦ１２２２に取り込んだ後に、その知識１２０８を更新することができる。
【０１１９】
最後に、動作１２５６の実装では、レプリカＡは、例えば図８を参照して前に議論したような方法で変更を取り込み、その知識１２０８を更新することができる。
【０１２０】
いくつかの場合、伸縮可能フィルタの使用では、変更を取り込んで知識を更新するときに追加の処理が必要となる可能性がある。これが生じうる１つの場合は、レプリカＡのような開始レプリカが、レプリカＢのような受信レプリカが認識しない少なくともいくつかの変更の知識を有するときである。この場合、レプリカＡが送信し、変更列挙中にレプリカＢが使用する知識ＫＡ１２０８は、レプリカＡが、レプリカＢが認識しない少なくともいくつかの変更を知ることを示すであろう。レプリカＢは、ＫＡが示す時点でレプリカＢがフィルタを完全に評価できない場合でも、例えば動作１２５２を参照して前述したように変更列挙を実施することができる。なぜならば、レプリカＢはＫＡが網羅する全ての変更を知らないからである。次いで、動作１２５６中に、レプリカＡは、レプリカＢが知らない変更を有する項目に対してレプリカＡがその知識を更新しないことを保証すべきである。レプリカＢが知らない変更を有する項目に対して、レプリカＡは、この特定の項目に対して例外を生成することができる。その例外は、絞込み複製前にレプリカＡに既知であったものを知っていることを示す。レプリカＡは、上記項目を、以下の３つの基準全てが満たされるかどうかを決定することで識別することができる。即ち、ａ）レプリカＡによれば項目が現在フィルタ内にあること、ｂ）学習知識ＫＬを検査することで、レプリカＢによれば項目がフィルタ内にないこと、およびｃ）レプリカＢが送信した変更集合内に項目がないことである。これらの基準の全てが満たされる場合、開始レプリカは、自分がその特定の項目に関する追加の知識を有することを知っている。
【０１２１】
さらに、項目が現時点でフィルタに入るように項目が局所的に変化、即ち、恐らく変更がアプリケーション変更内または何らかの他の手段を通して行われるので複製せずに項目が変化し、且つ図１２を参照して説明したような絞込み複製に続いて、同じフィルタを用いてその変更が行われる場合、そのローカルレプリカは前の段落で説明したものと同様にその知識を更新することができる。具体的には、ローカルレプリカは、更新した項目に対する例外を、絞込み複製の一部として追加した知識断片を取り込まない知識値で生成することができる。
【０１２２】
絞込み複製および非絞込み複製の前の議論に関して、開始レプリカは、既にその開始レプリカ上にある変更と他のレプリカにより送信したものとの間のコンフリクトを検出することができる。開始レプリカは、両方のレプリカ上の変更に関連する変更ＩＤと知識生成値とを用いてそれを行うことができる。例えば図４を参照して詳細に議論したもののような、以前に議論したコンフリクト検出技術を伸縮可能フィルタ付きの複製に適用することもできる。
【０１２３】
図１３を参照する。図１３には、「リストベースフィルタ」を使用する絞込み複製シナリオにおいて使用可能なリストメンバデータ集合の例を示す。リストベースフィルタを理解するため、多数のフィルタが伸縮可能でないことを先ず考える。例えば、緑である全ての項目を含み、例えば図１０を参照して前に議論したＦＧＲＥＥＮフィルタは伸縮可能ではない。フィルタを評価した時点でのデータの状態に従ってフィルタ内にあるものを決定することに対して、データ集合の最新状態にのみ関する情報と、「緑である全ての項目」が特定のフィルタに入るという単純なステートメントを与えることだけで十分である。本情報を用いて、以前の時点でのフィルタ内のメンバを決定することはできず、従ってフィルタＦＧＲＥＥＮは伸縮可能ではない。
【０１２４】
伸縮可能フィルタを定義する１つのメカニズムは、項目リストと関連する入出情報リストとを保持することで、項目がフィルタのメンバに入ったり出たりする時点を追跡することである。上記リストを用いるフィルタを「リストベースフィルタ」と称することができる。リストベースフィルタは、項目がフィルタのメンバに入ったり出たりする時点を追跡するので、この種のフィルタに対する別の名前は「メンバ追跡フィルタ」であろう。
【０１２５】
図１３の表に示したリストメンバデータ１３００は、レプリカの例Ｂ１４０２上の、Ｆ１とラベル付けしたリストベースフィルタの例のメンバデータを示す。これを、図１４を参照して以下でさらに詳細に議論する。リストメンバデータ１３００は、項目リスト１３０２と入出情報リスト１３０４とから成る。図１３に関して図示したメンバデータの特定の例は、ＩＷが変更ＩＤ  Ａ２でフィルタに入ること；項目ＩＸが変更ＩＤ  Ａ３でフィルタに入り、変更ＩＤ  Ｂ７でフィルタを出ること；項目ＩＹが変更ＩＤ  Ｂ２でフィルタに入り、変更ＩＤ  Ｂ４で出て、変更ＩＤ  Ｂ１０でフィルタに再度入ること；および項目ＩＺが変更ＩＤ  Ａ１１でフィルタに入ることを示す。リストメンバデータにより表される時点で、項目ＩＷ、ＩＹ、およびＩＺはフィルタ内にあり、項目ＩＸはフィルタ内にない。別の項目、恐らく項目ＩＶはリスト内になく、従って現在はフィルタ内になく、過去の任意の時点でフィルタ内になかったと考えることができる。
【０１２６】
リストメンバデータ１３００を用いると、レプリカは項目が過去の特定の時点でフィルタ内にあったかどうかを決定することができる。この場合、過去のその時点は知識ベクトルにより表される。例えば、Ａ１２Ｂ５である知識ベクトルの例を用いると、項目ＩＷ、ＩＸ、およびＩＺはフィルタ内にあると考えることができ、項目ＩＹはフィルタ内にないと考えることができる。項目ＩＷは、知識ベクトルＡ１２Ｂ５の一部である変更ＩＤ  Ａ２でフィルタに入り、フィルタを出ていないので、項目ＩＷはＡ１２Ｂ５で表される時点でフィルタ内にある。同様に、項目ＩＺもフィルタ内にある。なぜならば、項目ＩＺは、再度知識ベクトルＡ１２Ｂ５内にある時点Ａ１１でフィルタに入り、そのフィルタを出ていないからである。項目ＩＸは、知識ベクトルＡ１２Ｂ５内にある変更ＩＤ  Ａ３としてフィルタに入り、項目ＩＤ  Ｂ７としてフィルタを出た。退出変更ＩＤ  Ｂ７は知識ベクトルＡ１２Ｂ５内にないので、項目ＩＸは、項目ＩＸが後にそのフィルタを出ることをリストメンバデータ１３００が示すとしても、Ａ１２Ｂ５で表す時点でフィルタ内にあると考えられる。最後に、項目ＩＹは知識ベクトルＡ１２Ｂ５が表す時点でフィルタ内にないと考えられる。なぜならば、Ａ１２Ｂ５はＢ２およびＢ４という入出変更ＩＤをそれぞれ含むが、Ｂ１０という最新の入場変更ＩＤ１０を含まないからである。即ち、この場合、やはり知識ベクトルＡ１２Ｂ５内にある項目ＩＹに対するデータ内の最新の変更ＩＤは退出変更ＩＤであり、従ってその項目は、Ａ１２Ｂ５が表す時点ではフィルタ内にない。
【０１２７】
図１３の例で示したリストメンバデータは、リストメンバデータをリストベースフィルタに対して保持できる多数の方法のうちの１つを表すに過ぎず、限定とは意図していない。項目リストならびに関連する入出時点を保持する任意のフィルタを、「リストベースフィルタ」と考えることができる。
【０１２８】
図１４を参照する。図１４には、項目バージョン情報の１つの例示的な実施形態を示す。図１４はレプリカＢ１４０２の選択した要素を示す。これらの要素は変更集合１４０６と知識１４０８を含む。変更集合１４０６はいくつかの個々の変更１４１０を含み、本例ではそれらをＶ、Ｗ、Ｘ、Ｙ、およびＺとして示す。本例では、レプリカの知識の現在状態を、本例ではＡ１１Ｂ２０である知識ベクトル１４１２により表す。知識ベクトル１４１２はレプリカＢの知識１４０８を表す。図１４はレプリカＢ１４０２の選択した要素のみを示し、レプリカ内に存在しうる全ての要素は示さないことに留意されたい。
【０１２９】
図１４には、個々の項目１４１６に関連する多数の変更ＩＤ  １４１４も示してある。本例では、レプリカＢ１４０２は５つの変更項目１４１６、即ち、ＩＶ、ＩＷ、ＩＸ、ＩＹ、およびＩＺを含む。これらの項目は、Ｖ、Ｗ、Ｘ、Ｙ、およびＺとラベル付けした、対応する変更１４１０を有する。変更ＩＤ１４１４を用いて、例えば、変更ＩＤ  Ｂ１４を有する項目ＩＶは時点１４にレプリカＢ内で変化したことを識別することができる。例えば図５および図９を参照して前に説明したように、他の項目が、示した時点に示したレプリカ内で変化したことを決定することもできる。
【０１３０】
図１５を参照する。図１５には、リストベースフィルタを用いた絞込み複製の例を示す。図１５の以下の説明を、図４、図１０、図１３、および図１４を参照して行う。しかしながら、図１５を参照して説明した動作は、図４、図１０、図１３、および図１４または任意の他の図面で図示した要素で用いているものに限定されるとは意図していないことは理解されるべきである。さらに、図面の説明では特定の実行順序を示すかもしれないが、１つまたは複数の代替実施形態ではその動作を異なって順序付けしてもよいことは理解されるべきである。さらに、図面では複数のステップを示すが、いくつかの実装ではこれらのステップの一部または全部を組み合わせるか、または同時に実行してもよいことは理解されるべきである。
【０１３１】
本例ではレプリカＡ１５０２が開始した１方向同期を示す。レプリカＡが複製しているレプリカは本例ではレプリカＢ１４０２である。レプリカＢ１４０２は、図１４を参照して前に導入および説明した。図１５に示す例は、一般的な同期動作に存在しうる全ての動作を説明するわけではない。例えば、図１５は、レプリカＡがレプリカＢから変更を受信した後にレプリカＡがコンフリクト検出を実施する方法は示さない。
【０１３２】
本例では、レプリカＡはΔＡとラベル付けした変更集合１５０４と、ＫＡとラベル付けした知識１５０６と、知識１５０６の短縮表現である知識ベクトル１５０８とを含む。実例として、レプリカＡの知識ベクトル１５０８はＡ１２Ｂ５であり、前に説明したように、これはレプリカＡが、レプリカＡ内の１２回目の変更までの知識、レプリカＢ内の５回目の変更までの知識を有することを示す。前の図１４の議論で述べたように、レプリカＢ１４０２はΔＢとラベル付けした変更集合１４０６を有し、その変更集合１４０６は個々の変更Ｖ、Ｗ、Ｘ、Ｙ、およびＺ１４１０を含む。レプリカＢはＫＢとラベル付けした知識１４０８と、この場合はＡ１１Ｂ２０である対応する知識ベクトル１４１２も有し、レプリカＢが、レプリカＡ内の１１回目の変更までの知識、レプリカＢ内の２０回目の変更までの知識を有することを示す。
【０１３３】
動作１５５０で、レプリカＡ１５０２は同期要求をレプリカＢに送信する。レプリカＡはその知識１５０６の両方も含み、リストベースフィルタＦ１１５１６を指定する。本例ではフィルタ１５１６は、この場合フィルタＦ１であるリストベースフィルタを識別できるが、レプリカＡが送信する実際の情報は任意の実際のリストメンバ情報を含まなくともよい。即ち、指定のフィルタに関連する実際のメンバデータを発見および使用することを、変更を列挙および返却するレプリカ、本例ではレプリカＢ１４０２に委ねることができる。これにより、少なくとも同期要求でリストメンバデータを送信する必要性をレプリカから排除することができ、リストメンバデータの同期を何らかの他の時点で行うことができる。別の実施形態では、レプリカＡおよびレプリカＢはリストメンバデータを同期しなくともよく、例えばレプリカＡおよびレプリカＢの両方によりアクセス可能なネットワーク上の何らかの位置で同じデータにアクセスすることができる。これにより、複製間でリストメンバデータを送信する方法および、複製間でリストメンバデータの同期を保つ方法を別のレベルまたは層に問い合わせることが省略され、データを要求する任意のレプリカ上にリストメンバ情報が存在するか、またはそのレプリカからそのリストメンバ情報がアクセス可能であることをレプリカが仮定することができる。
【０１３４】
動作１５５２で、レプリカＢは、同期要求に応じて送信すべき変更を決定する。フィルタＦ１はこの場合はリストベースフィルタとして実装される伸縮可能フィルタであるので、レプリカＢは、現時点でフィルタ内にある項目の変更と、Ａ１２Ｂ５であるレプリカＡの送信した知識により表される時点でフィルタ内にあった項目の変更との両方を検査することができる。これらの項目のいずれかが、送信した知識のメンバでない変更を有する場合、レプリカＢは、それらの項目をレプリカＡに返すべきであることを決定することができる。
【０１３５】
変更を評価すべき項目を識別するためにレプリカＢが使用するリストメンバデータは、本例では、図１３のリストメンバデータ１３００であることができる。送信した知識に無関係に、即ち、単にリストメンバを検査することで本データを最初に用いると、レプリカＢは、項目ＩＷ、ＩＹ、およびＩＺが現在フィルタＦ１内にあることを決定することができる。なぜならば、これらの項目は入場変更ＩＤを有し、退出変更ＩＤに関連付けられないからである。項目ＩＸはその唯一の入場変更ＩＤに対する退出変更ＩＤを有し、従って項目ＩＸは、リストメンバデータにより表される時点にフィルタ内にないと考えられる。本データを用いて、レプリカＢは送信した知識内にない項目ＩＷ、ＩＹ、およびＩＺを対する任意の変更をレプリカＡに返すべきであることを知る。さらに、Ａ１２Ｂ５である送信した知識１５０６を用いて、レプリカＢは、項目ＩＸも現在フィルタ内にあるとレプリカＡが信じることを決定することができる。図１３を参照して前により詳細に議論したように、ＩＸは、レプリカＡの知識Ａ１２Ｂ５内にある変更ＩＤ  Ａ３でフィルタに入り、レプリカＡの知識内にない変更ＩＤ  Ｂ７までフィルタを出ない。従って、レプリカＡはまだ項目ＩＸがフィルタ内にあると考え、従って変更がレプリカＡの知識内にない場合、レプリカＢはその変更をこの項目に送信すべきである。
【０１３６】
前の段落で議論した論理に基づいて、レプリカＢ１４０２は、項目ＩＷ、ＩＸ、ＩＹ、およびＩＺの変更の送信確率を評価すべきであることを知る（レプリカＡまたはレプリカＢに関する限り項目ＩＶはフィルタ内になく、従って項目ＩＶに関連する変更は送信されないであろう）。レプリカＢ上の項目に関連するバージョンを検査すると、図１４に示すように、レプリカＢは（変更ＩＤ  Ｃ３および変更Ｗを有する）項目ＩＷの変更、（変更ＩＤ  Ｂ６および変更Ｘを有する）項目ＩＸの変更、および（変更ＩＤ  Ｂ８および変更Ｙを有する）項目ＩＹの変更を送信すべきであることを理解することができる。これら３つの項目の全ては、Ａ１２Ｂ５であるレプリカＡの送信した知識内にない変更ＩＤを有する。項目ＩＺはフィルタ内にあり、そのように考えられもしたが、変更ＩＤ  Ａ９に関連するその最新の変更はＡ１２Ｂ５内にあり、従って送信する必要はない。
【０１３７】
動作１５５４で、レプリカＢ１４０２は識別した変更Ｗ、Ｘ、およびＹを、ΔＦ１１５２２とラベル付けしたレプリカＡ１５０２に返す。レプリカＢは学習知識ＫＬ１５１４も送信する。学習知識ＫＬ１５１４は、フィルタＦ１内の要素にのみ適用されるレプリカＢの最新の知識に等しい。図１０に関連して前に議論したように、レプリカＢは代替的に、フィルタが制限しない知識表現を送信せず、その知識表現をレプリカＡの知識の一部とする前にその知識表現を正しく制限することをレプリカＡに委ねてもよい。
【０１３８】
動作１５５６で、レプリカＡ１５０２はレプリカＢが返した変更をその知識ストアに取り込み、返された学習知識値ＫＬ１５１４を用いてその知識を更新する。これは、図１０を参照して説明した類似動作１０５６と同様に動作する。レプリカＡの変更ΔＡ１５０４を、項目ＩＷ、ＩＸ、およびＩＹとそれぞれ関連する変更Ｗ、Ｘ、およびＹを含むように更新する。これは、受信した変更のいずれかがレプリカＡ上に既にある変更とコンフリクトするかどうかを決定する、レプリカＡ上のコンフリクト検出ステップを含むことができる。これらのコンフリクト検出ステップは、図４を参照して前述したものと同様に動作し、ここではこれ以上説明しない。レプリカＡは、レプリカＡがＦ１：Ａ１１Ｂ２０の知識断片を含み、複製が完了するときにそれが全体としてＡ１２Ｂ５＋Ｆ１：Ａ１１Ｂ２０に等しいように、その知識ＫＡ１５０６も更新する。
【０１３９】
図１６を参照する。図１６には、「リスト具体化」と称する技術を実証するために、プロパティベースフィルタに対するデータの例の表現を示す。前に議論したように、プロパティベースフィルタのような多数の共通フィルタを含めて、全てのフィルタが伸縮可能であるわけではない。非伸縮可能フィルタは、例えば、図１１を参照して議論したもののような追加の技術を要求して、フィルタ内のメンバが異なる時点で異なる場合を処理することができる。対照的に、伸縮可能フィルタにより、これらの問題に対してより見事な解決策でありうるものが可能となる。「リスト具現化」または「フィルタのリストへの具体化」という技法を、プロパティベースフィルタのような様々な非伸縮可能フィルタを伸縮可能なリストベースフィルタに変換する任意の手段として定義する。リスト具体化を実施するいくつかの技法を以下で説明する。非伸縮可能フィルタをリストへ具体化した結果生ずるリストベースフィルタを非伸縮可能フィルタの代わりに使用することができ、その結果、図１１を参照して議論したような技法を使用する必要はない。
【０１４０】
フィルタをリストに具体化する１つの方法を実証するために、例示的なプロパティベースフィルタ、恐らく前に議論したＦＧＲＥＥＮに対して、時点Ｔ１での項目データ集合１６０２と時点Ｔ２での項目データ集合１６０４とを考える。両方の項目データ集合は、２つの異なる時点、Ｔ１およびＴ２で同じ項目を参照する。時点Ｔ１での項目１６０２の表と時点Ｔ２での項目１６０４の表における情報は、例えば前に説明したように、通常の変更および複製の結果であることができる。例えば、項目ＩＹの色はユーザにより時点１０にレプリカＡ上で青から緑に変更された可能性があり、従って、時点Ｔ２での項目データ集合１６０４で示したように、変更ＩＤ  Ａ１０を与えてある。
【０１４１】
図１７を参照し、リスト具体化の議論を続ける。図１７には、緑の項目に対してプロパティベースフィルタを具体化することにより生成した例示的なリストベースフィルタに対するリストメンバデータの表現を示す。
【０１４２】
時点Ｔ１直後のリストメンバデータ１７０２が示すように、図１６の時点Ｔ１での項目データ集合１６０２内で参照される同じ時点Ｔ１直後の何らかの時点で、具体化フィルタに対するリストメンバは項目ＩＸおよびＩＺを含む。即ち、例えば図１２および図１５を参照して前述したように、図１６の項目データは、伸縮可能またはリストベースフィルタが適切である任意の場所で使用可能なリストベースフィルタに変換されている。図１１を参照して説明したように、変更を特に追跡する必要はない。本例では、時点Ｔ１直後のリストメンバデータ１７０２を、フィルタ基準、この場合は「項目が緑か？」をデータ集合内のそれぞれの項目に対して評価することで生成する。この場合、時点Ｔ１での例示的な項目データ集合１６０２により示すように、項目ＩＸは緑であり、従って項目ＩＸを、時点Ｔ１直後のリストメンバデータ１７０２に関連するリストベースフィルタに対するリストメンバに追加する。項目ＩＺも緑であるので、項目ＩＸと同様に項目ＩＺもリストメンバデータに追加する。
【０１４３】
さらに、リストメンバデータへの項目ＩＸの追加を、本例ではＡ３である自身の変更ＩＤに関連付ける。項目ＩＺの追加に変更ＩＤ  Ａ４を与える。これらの変更ＩＤを使用することで、これらのリスト具体化動作がレプリカＡ上で実施されていることを示す。リストメンバ内でこれらの変更ＩＤを使用することは、数値的に増加するバージョン値を有する単一の変更ＩＤ集合が２つのデータ集合に渡って共有されていることを意味することにも留意されたい。即ち、同じ変更ＩＤ集合を、時点Ｔ１での項目データ集合１６０２で示したもののように項目データの変更に使用し、時点Ｔ１直後のリストメンバデータ１７０２で示したもののようにリストメンバデータにおける変更に対して使用する。
【０１４４】
ここで、いくらかの時間が経過し時点Ｔ１での項目データ集合内のいくつかの項目が更新され、その結果、それらの値が現時点で時点Ｔ２での項目データ集合１６０４により表されると仮定する。何らかの理由、恐らく同期動作をやがて実施しなければならないので、レプリカＡは、項目データをリストベースフィルタに具体化することが有利でありうることを決定した。前述したことと同様にして、時点Ｔ２での項目集合１６０４内のそれぞれの項目を例示的な基準「項目は線か？」に対して評価し、それに従って時点Ｔ２直後のリストメンバデータ１７０４を更新する。本例では、項目ＩＸはまだ緑であり、変化していないので、項目ＩＸに対するリストメンバデータは同じままである。項目ＩＹは現時点では緑であり、以前は青であったので、項目ＩＹをＴ２直後のリストメンバデータ１７０４に追加し、その追加に新規の変更ＩＤ  Ａ１１を与える。項目ＩＺは現時点では青であり、以前は縁であったので、項目ＩＺはフィルタから「除去」する。リストベースフィルタのコンテキストでは、「除去」は、除去すべき特定の項目に対するデータを退出変更ＩＤ、この場合はＡ１２である新規に与えた変更ＩＤで更新することを意味する。除去した項目に対するデータはリストメンバデータからは実際には削除されない。これによりフィルタは伸縮可能のままであり、以前の時点でのフィルタ内のメンバを決定することが可能となる。
【０１４５】
リストベースフィルタへのフィルタの具体化、具体化したリストベースフィルタ内のリストメンバデータの更新、またはリストメンバデータの更新による任意のリストベースフィルタのメンテナンスを、いくつかの実装では任意の時点で行うことができる。それを、例えば、各同期の前、各同期の後、または任意の他の特定の時点で行う必要はない。フィルタのリストメンバデータが同期動作の前に更新されていない場合、同期動作はなお無事に完了することができるが、例えば、特定の項目が具体化フィルタ内にない場合、それらの項目データによりその特定の項目が同期の候補となろうとも、その特定の項目を同期することはできない。いくつかの変更を上記の状況で送信することはできないが、リストメンバデータの更新時に新規の変更ＩＤを使用することで、変更が何らかの将来の時点で送信されることを保証することができる。即ち、知識を使用することで、後にフィルタに追加されるデータが将来の複製でなお同期されることが保証される。そういう訳で、いくつかの実装では、例えば全ての既知の変更が割合早く同期されるように、同期前にリストメンバデータを更新することが有用である可能性がある。
【０１４６】
特定のリストベースフィルタに対するリストメンバデータはいくつかの実装では単一のアクセス可能なストア内、例えば恐らくグローバルにアクセス可能なサーバ上に存在することができる。別の一般的な実装では、リストメンバデータをレプリカ間で同期することができる。上記の実装では、リストメンバデータの同期を、項目データの同期から完全に独立して行うことができる。実際、項目データの同期に対して本明細書で説明した同じ技法をリストメンバデータで使用することもできる。リストメンバデータを、それを要求した任意のレプリカによりアクセスできるように、本明細書で説明していない他の同期または複製技法を使用することも可能である。
【０１４７】
図１８を参照する。図１８には、絞込み複製を実装可能なシステムの１つの実施形態を示す。図面には、絞込み複製システム１８１０、項目データストアモジュール１８２０、知識ストアモジュール１８３０、フィルタストアモジュール１８４０、変更列挙モジュール１８５０、および変更取り込みモジュール１８６０が含まれる。図１８の以下の説明を、他の図面を参照して行う。しかしながら、図１８に関して説明する動作は、これらの他の図面により示した要素で用いるように限定するとは意図していない。
【０１４８】
項目データストア１８２０を構成して、管理されるデータ集合をストアおよび管理することができ、いくつかの場合、絞込み複製システムにより複製することができる。例えば、電子メールメッセージをそのデータの一部として含む絞込み複製システム１８１０の実装では、項目データストアモジュール１８２０は電子メールメッセージデータと、例えば電子メールフォルダ情報のような電子メールメッセージのストアおよびアクセスに関連する他のデータとに対するアクセスをストアおよび提供することができる。別の例では、項目データストアモジュール１８２０によりストアしたデータは、限定ではなく例として前述の電子メールメッセージを含むコンピューティング装置上の全ての一貫したデータを備えることができるが、全ての種類のデータをストアする全ての種類のコンピュータ可読ファイルも備えることができる。前に議論した図面を参照した非限定的な例として、項目データストアモジュール１８２０はいくつかの実装では、図９を参照して説明した項目データをストア、管理、およびその項目データに対するアクセスを提供することができる。その項目データには、限定ではなく例として、項目９１６、項目の色９２０、および／または変更９１０が含まれる。同じ実装または他の実装では、項目データストア１８２０は図８を参照して説明した変更集合８０６のような情報をストアすることができる。いくつかの実装では、項目データストアモジュール１８２０は、特定のデータ項目の１つまたは複数のバージョンのみを保持することができる。他の実装または同じ実装では、項目データストアモジュール１８２０は同じデータ項目の複数バージョン間の差異をストアすることができる。いくつかの実装では、これにより別の完全なバージョンを、１つまたは複数の変更を特定の完全なバージョンのデータ項目に適用することで、構築することができる。いくつかの実装では、項目データストアモジュールは項目データ情報自体をストアしなくともよく、代わりに他所にストアした上記項目データ情報に対するアクセスを提供することができる。
【０１４９】
知識ストアモジュール１８３０を構成して、絞込み複製システム１８１０が認識する変更およびデータに関する知識をストアおよび管理することができる。例えば、前に議論した図面を参照する非限定的な例として、いくつかの実装では知識ストアモジュール１８３０を構成して図８の知識８０８をストア、管理、および知識８０８に対するアクセスを提供することができる。知識８０８は、図８を参照して説明した例では、知識ベクトルＡ２Ｂ５を含み、任意の他の知識表現をストアすることができる。いくつかの実施形態では、知識ストアモジュールは知識情報自体をストアしなくともよく、代わりに他所にストアした上記知識情報に対するアクセスを提供することができる。
【０１５０】
フィルタストアモジュール１８４０を構成して、複製で用いるフィルタに関するデータをストアおよび管理することができる。再度、前に議論した図面を参照した非限定的な例として、いくつかの実装ではフィルタストアモジュール１８４０を構成して、図８を参照して説明した例で用いるフィルタ８２０をストア、管理、およびそのフィルタ８２０に対するアクセスを提供することができる。同じ実装または他の実装では、フィルタストアモジュール１８４０は、図１３に図示したリストメンバデータ１３００のようなフィルタ、ならびに図１７に図示した時点Ｔ１直後のリストメンバデータ１７０２および時点Ｔ２直後のリストメンバデータ１７０４のようなフィルタに関する情報をストアすることができる。いくつかの実施形態では、フィルタストアモジュールはフィルタ情報自体をストアしなくともよく、代わりに他所にストアした上記フィルタ情報に対するアクセスを提供することができる。
【０１５１】
変更列挙モジュール１８５０を構成して、別のレプリカからの複製に対する要求を受信するために必要なタスクを実施し、他のレプリカが認識しない変更を識別し、これらの変更および任意の他の有用な知識を、その要求を開始したレプリカに返すことができる。これらの動作は前に詳細に議論した。限定ではなく例として、その動作には動作８５０、動作８５２、図８の動作８５４および動作１２５０、動作１２５２、ならびに図１２の動作１２５４に関する動作が含まれる。
【０１５２】
変更取り込みモジュール１８６０を構成して、複製要求を開始してその要求を別のレプリカに送信するために必要なタスクを実施し、次いで、他のレプリカが応答した後に、コンフリクトに対して返されたデータを評価して適切な変更を項目データストアモジュール１８２０、知識ストアモジュール１８３０、および／またはフィルタストアモジュール１８４０に取り込むことができる。これらの動作は前に詳細に議論した。限定ではなく例として、その動作には動作８５０、動作８５４、図８の動作８５６および動作１２５０、動作１２５４、ならびに図１２の動作１２５６に関するものが含まれる。
【０１５３】
絞込み複製システム１８１０は、前に議論したように、様々なタスクを実施しフィルタを用いたデータの複製に関連する様々な機能の役割を果たすモジュールを含む。絞込み複製システム１８１０は様々なモジュールを含むが、１つまたは複数の代替的な実装では、単一のモジュールが、システム内のモジュールに関連する複数のタスクまたは機能を実施できることは理解されるべきである。限定ではなく例として、いくつかの実装では、項目データストアモジュール１８２０に依存して、項目に関するデータならびに知識およびフィルタに関するデータを含む、システム内の全てのデータをストアすることができる。限定ではなく別の例として、単一のモジュールは、変更列挙モジュール１８５０と変更取り込みモジュール１８６０とに関連するタスクを実施することができる。同様に、１つまたは複数の代替的な実装では、モジュールは図示または議論していない追加のタスクを実施することができる。さらに、１つまたは複数の代替的な実装では、モジュールは複数のコンピューティング装置上に存在することができる。限定ではなく例として、１つの実装では、変更列挙モジュール１８５０および変更取り込みモジュール１８６０は特定のコンピューティング装置上に存在することができ、項目データストアモジュール１８２０、知識ストアモジュール１８３０、およびフィルタストアモジュール１８４０は１つまたは複数の他のコンピューティング装置上に存在する。上記の実装では、変更列挙モジュール１８５０および変更取り込みモジュール１８６０は、通信リンクを提供可能なネットワークまたは他のシステムを用いてこれらのストア内の情報にアクセスすることができる。別の例示的な実装では、全てのモジュールは単一のコンピューティング装置上に存在することができる。さらに別の例示的な実装では、フィルタストアモジュール１８４０を除いた全てが単一のコンピューティング装置上に存在することができ、フィルタストアモジュール１８４０が提供するフィルタデータを別のコンピューティング装置上にストアして、通信リンクを提供可能なネットワークまたは何らかの他のシステムを用いて絞込み複製システム１８１０からアクセスすることができる。
【０１５４】
コンピューティング環境の例
図１９を参照する。本図面および関連する議論は、本明細書で説明した様々な技術を実装可能な例示的なコンピューティング環境の簡潔で一般的な説明を与えることを意図している。必要ではないが、その技術を本明細書では少なくとも部分的にコンピュータ実行可能命令の一般的なコンテキストで説明する。そのコンピュータ実行可能命令には例えば、コントローラ、プロセッサ、パーソナルコンピュータ、または図１９に図示したコンピューティング装置１９００のような他のコンピューティング装置により実行されるプログラムモジュールがある。
【０１５５】
一般に、プログラムモジュールには、特定のタスクを実施するかまたは特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等が含まれる。プログラムモジュールが実施するタスクは、１つまたは複数のブロック図および動作フローチャートを用いて前述してある。
【０１５６】
当業界の技術者は、説明、ブロック図、およびフローチャートをコンピュータ実行可能命令の形で実施することができ、その命令を１つまたは複数のコンピュータ可読媒体の形で具現化することができる。本明細書で使用するとき、コンピュータ可読媒体は、コンピュータがアクセスおよび理解できる形でエンコードした情報をストアまたは具現化可能な任意の媒体であることができる。コンピュータ可読媒体の一般的な形態には、限定としてではなく、揮発性および不揮発性メモリの両方、取り外し可能および／または取り外し不能媒体を含むデータストア装置、および通信媒体が含まれる。
【０１５７】
通信媒体は、コンピュータ可読情報を搬送波または他の伝送メカニズムのような変調データ信号で具現化し、任意の情報配信媒体を含む。用語「変調データ信号」は、１つまたは複数のその特性集合を有するかまたは信号内の情報をエンコードするように変化した信号を意味する。限定ではなく例として、通信媒体には有線ネットワークまたは直接配線接続のような有線媒体、ならびに音響、ＲＦ、赤外線および他の無線媒体のような無線媒体が含まれる。
【０１５８】
図１９に図示したシステムは、その最も基本的な構成では、少なくとも１つの演算装置１９０２およびメモリ１９０４を含むコンピューティング装置１９００を有する。コンピューティング装置の厳密な構成および種類に依存して、メモリ１９０４は（ＲＡＭのような）揮発性、（ＲＯＭ、フラッシュメモリ等のような）不揮発性、またはその２つのいくつかの組合せであることができる。この最も基本的な構成を図１９において破線１９０６で示す。さらに、コンピューティング装置１９００は追加の特徴および機能性も有することができる。例えば、コンピューティング装置１９００は（取り外し可能および／または取り外し不能の）追加の記憶装置も含むことができる。その記憶装置には、磁気または光ディスクおよびテープが含まれるがこれらに限らない。上記の追加の記憶装置を図１９において取り外し可能記憶装置１９０８および取り外し不能記憶装置１９１０により示す。
【０１５９】
コンピューティング装置１９００は１つまたは複数の通信接続（複数）１９１２も含むことができる。その通信接続（複数）１９１２により、コンピューティング装置１９００は他の装置と通信することができる。コンピューティング装置１９００は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置、（カメラまたはスキャナのような）イメージ入力装置等のような１つまたは複数の入力装置（複数）１９１４も有することができる。ディスプレイ、スピーカ、プリンタ等のような１つまたは複数の出力装置（複数）１９１６をコンピューティング装置１９００に含めることもできる。
【０１６０】
当業界の技術者は、本明細書で説明した技術を、図１９に図示したコンピューティング装置１９００以外のコンピューティング装置で実践できることを理解するであろう。限定ではなく例として、本明細書で説明した技術を同様にハンドヘルド装置で実践することができる。そのハンドヘルド装置には、携帯電話およびＰＤＡ、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能の消費家電、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ等が含まれる。
【０１６１】
本明細書で説明した技術を、通信ネットワークを通して接続したリモート処理装置によりタスクが実施される分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールをローカルおよびリモートメモリ記憶装置の両方に配置することができる。
【０１６２】
本明細書ではソフトウェアで実施するとして説明したが、本明細書で説明した技術を代替的に、全体的または部分的にハードウェア、ファームウェア、あるいはソフトウェア、ハードウェア、および／またはファームウェアの様々な組合せで実施することができる。
【０１６３】
システムおよび方法のいくつかの特定の実装を添付図面で図示し、「発明を実施するための最良の形態」で説明したが、図示および説明したシステムおよび方法は説明した特定の実装に限定されず、添付請求項で説明および定義した精神から逸脱せずに多数の再配置、修正および置換が可能であることは理解されるであろう。
【図面の簡単な説明】
【０１６４】
【図１】同期群の例を示す図である。
【図２】レプリカ内での変更管理方法を示す図である。
【図３】複製中に知識を使用して変更を列挙する例を示す図である。
【図４】コンフリクト検知の実現方法を実証する実施形態を示す図である。
【図５】変更ＩＤおよび知識追跡の例示的な実施形態を示す図である。
【図６】２つのレプリカ間の複製の例を示す図である。
【図７Ａ】例外リストを用いてレプリカ内知識を更新する実施形態を示す図である。
【図７Ｂ】対単位の最大知識ベクトルを用いてレプリカ内の知識を更新する実施形態を示す図である。
【図７Ｃ】更新した知識に例外が存在する場合に、レプリカ内の知識を更新する実施形態を示す図である。
【図８】フィルタを用いて２つのレプリカ間で複製する例を示す図である。
【図９】絞込み複製の例で使用できるデータの例示的な実施形態を示す図である。
【図１０】２つのレプリカ間での別の絞込み複製の例を示す図である。
【図１１】フィルタの評価時点に起因したフィルタメンバシップ内の差異のために生ずる問題を対象とする例示的な技術を示す図である。
【図１２】伸縮可能フィルタを用いた２つのレプリカ間の複製の例を示す図である。
【図１３】リストベースフィルタを用いた絞込み複製のシナリオで使用されうるリストメンバデータの例の集合を示す図である。
【図１４】項目バージョン情報の例示的な実施形態を示す図である。
【図１５】リストベースフィルタを用いた絞込み複製の例を示す図である。
【図１６】リスト具体化と称する技術を実証するための、プロパティベースフィルタに対するデータの例を示す図である。
【図１７】特定の項目向けのプロパティベースフィルタの具体化により生成した例示的なリストベースフィルタに対するリストメンバデータの例を示す図である。
【図１８】絞込み複製を実装可能なシステムの１つの実施形態を示す図である。
【図１９】本明細書で説明した様々な技術を実装可能な例示的なコンピュータ装置を示す図である。
【図１】
2009535689.tif 000003
【図２】
2009535689.tif 000004
【図３】
2009535689.tif 000005
【図４】
2009535689.tif 000006
【図５】
2009535689.tif 000007
【図６】
2009535689.tif 000008
【図７Ａ】
2009535689.tif 000009
【図７Ｂ】
2009535689.tif 000010
【図７Ｃ】
2009535689.tif 000011
【図８】
2009535689.tif 000012
【図９】
2009535689.tif 000013
【図１０】
2009535689.tif 000014
【図１１】
2009535689.tif 000015
【図１２】
2009535689.tif 000016
【図１３】
2009535689.tif 000017
【図１４】
2009535689.tif 000018
【図１５】
2009535689.tif 000019
【図１６】
2009535689.tif 000020
【図１７】
2009535689.tif 000021
【図１８】
2009535689.tif 000022
【図１９】
2009535689.tif 000023
【国際調査報告】
2009535689.tif 000024
2009535689.tif 000025