(57)【特許請求の範囲】
【請求項１】
ユーザアカウントに関連付けられた第１のコンピューティングデバイスにおいて、前記第１のコンピューティングデバイス上で動作しているアプリケーションから実行中のクエリを受信するステップと、
前記実行中のクエリを満たすデータ項目がリモートストレージロケーションで利用可能であることの通知を受信するステップであって、前記実行中のクエリを満たす前記データ項目は、前記ユーザアカウントに関連付けられた第２のコンピューティングデバイスによって提供されたものである、ステップと、
前記通知に基づき、１つ以上のアプリケーション別アクセスポリシーにより前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第１データ項目へのアクセスの許可を有することを判定するステップと、
前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第２データ項目へのアクセスの許可を有さないことを判定するステップと、
前記アプリケーションに対して前記実行中のクエリを満たす前記第１データ項目を提示するステップと、
前記アプリケーションに対する前記第２データ項目の提示を控えるステップと、
を含み、
前記実行中のクエリは、前記アプリケーションが終了又は削除されるまでアクティブのままであることを特徴とする方法。
【請求項２】
前記リモートストレージロケーションに、前記第１データ項目を受信する要求を送信するステップと、
前記リモートストレージロケーションから前記第１データ項目を受信するステップと、
を含むことを特徴とする請求項１に記載の方法。
【請求項３】
ユーザアカウントに関連付けられた第１のコンピューティングデバイスにおいて、前記第１のコンピューティングデバイス上で動作しているアプリケーションから実行中のクエリを受信するステップと、
前記実行中のクエリを満たすデータ項目がリモートストレージロケーションで利用可能であることの通知を受信するステップであって、前記実行中のクエリを満たす前記データ項目は、前記ユーザアカウントに関連付けられた第２のコンピューティングデバイスによって提供されたものである、ステップと、
前記通知に基づき、１つ以上のアプリケーション別アクセスポリシーにより前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第１データ項目へのアクセスの許可を有することを判定するステップと、
前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第２データ項目へのアクセスの許可を有さないことを判定するステップと、
前記アプリケーションに対して前記実行中のクエリを満たす前記第１データ項目を提示するステップと、
前記アプリケーションに対する前記第２データ項目の提示を控えるステップと、
を含み、
前記アプリケーションが前記第１データ項目へのアクセスの許可を有することを判定するステップは、前記第１データ項目に関連付けられた識別子が前記アプリケーションに関連付けられた識別子と適合するかを判定するステップを含み、
前記アプリケーションに関連付けられた前記識別子は、当該識別子に関連付けられたデータ項目への共有アクセスを有するアプリケーションのファミリーを識別することを特徴とする方法。
【請求項４】
前記実行中のクエリを満たす前記データ項目がリモートストレージロケーションで利用可能であることの前記通知は、前記アプリケーションに関連付けられた前記識別子が適合する前記第１データ項目に関連付けられた前記識別子を示すデータを含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記受信した通知のデータに基づき、前記データ項目が前記実行中のクエリを満たすことを判定するステップを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記通知を前記ユーザアカウントに関連付けられた別のコンピューティングデバイスから受信することを特徴とする請求項１に記載の方法。
【請求項７】
ユーザアカウントに関連付けられた第１のコンピューティングデバイスと、サーバシステムと、を備えているシステムであって、
前記第１のコンピューティングデバイスは、
前記第１のコンピューティングデバイス上で動作しているアプリケーションから実行中のクエリを受信し、
前記実行中のクエリを満たすデータ項目であって、前記ユーザアカウントに関連付けられた第２のコンピューティングデバイスによって提供されたものである前記データ項目が、リモートストレージロケーションで利用可能であることの通知を受信し、
前記通知に基づき、１つ以上のアプリケーション別アクセスポリシーにより前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第１データ項目へのアクセスの許可を有することを判定し、
前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第２データ項目へのアクセスの許可を有さないことを判定し、
前記アプリケーションに対して前記実行中のクエリを満たす前記第１データ項目を提示し、
前記アプリケーションに対する前記第２データ項目の提示を控える様に構成され、
前記サーバシステムは、
前記第１のコンピューティングデバイスから、前記第１のコンピューティングデバイス上で動作している前記アプリケーションに関連付けられたデータ項目を受信し、
前記データ項目を格納し、
前記ユーザアカウントに関連付けられた１つ以上の別のデバイスに前記データ項目の通知を送信する様に構成され、
前記通知は、前記データ項目に関連付けられた前記アプリケーションの識別子を含み、
前記実行中のクエリは、前記アプリケーションが終了又は削除されるまでアクティブのままであることを特徴とするシステム。
【請求項８】
前記第１のコンピューティングデバイスは、
前記リモートストレージロケーションに、前記第１データ項目を受信する要求を送信し、
前記リモートストレージロケーションから前記第１データ項目を受信する様にさらに構成されていることを特徴とする請求項７に記載のシステム。
【請求項９】
ユーザアカウントに関連付けられた第１のコンピューティングデバイスと、サーバシステムと、を備えているシステムであって、
前記第１のコンピューティングデバイスは、
前記第１のコンピューティングデバイス上で動作しているアプリケーションから実行中のクエリを受信し、
前記実行中のクエリを満たすデータ項目であって、前記ユーザアカウントに関連付けられた第２のコンピューティングデバイスによって提供されたものである前記データ項目が、リモートストレージロケーションで利用可能であることの通知を受信し、
前記通知に基づき、１つ以上のアプリケーション別アクセスポリシーにより前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第１データ項目へのアクセスの許可を有することを判定し、
前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第２データ項目へのアクセスの許可を有さないことを判定し、
前記アプリケーションに対して前記実行中のクエリを満たす前記第１データ項目を提示し、
前記アプリケーションに対する前記第２データ項目の提示を控える様に構成され、
前記サーバシステムは、
前記第１のコンピューティングデバイスから、前記第１のコンピューティングデバイス上で動作している前記アプリケーションに関連付けられたデータ項目を受信し、
前記データ項目を格納し、
前記ユーザアカウントに関連付けられた１つ以上の別のデバイスに前記データ項目の通知を送信する様に構成され、
前記通知は、前記データ項目に関連付けられた前記アプリケーションの識別子を含み、
前記アプリケーションが前記第１データ項目へのアクセスの許可を有することを判定することは、前記第１データ項目に関連付けられた識別子が前記アプリケーションに関連付けられた識別子と適合するかを判定することを含み、
前記アプリケーションに関連付けられた前記識別子は、当該識別子に関連付けられたデータ項目への共有アクセスを有するアプリケーションのファミリーを識別することを特徴とするシステム。
【請求項１０】
前記実行中のクエリを満たす前記データ項目がリモートストレージロケーションで利用可能であることの前記通知は、前記アプリケーションに関連付けられた前記識別子に適合する前記第１データ項目に関連付けられた前記識別子を示すデータを含むことを特徴とする請求項９に記載のシステム。
【請求項１１】
前記受信した通知のデータに基づき、前記データ項目が前記実行中のクエリを満たすことを判定することを含むことを特徴とする請求項７に記載のシステム。
【請求項１２】
前記通知を前記ユーザアカウントに関連付けられた別のコンピューティングデバイスから受信することを特徴とする請求項７に記載のシステム。
【請求項１３】
前記第１のコンピューティングデバイスからデータベースのトランザクションログファイルを受信し、複数の関連するコンピューティングデバイスのそれぞれに前記トランザクションログファイルを通知する様に構成されたサーバシステムを含み、
前記データベースのトランザクションログファイルは、データベースになされた個別の変更を識別し、前記データベースの代わりに受信され、
前記関連するコンピューティングデバイスは、第１のコンピューティングデバイスに関連付けられた前記ユーザアカウントに関連付けられていることを特徴とする請求項７に記載のシステム。
【請求項１４】
前記サーバシステムは、前記複数の関連するコンピューティングデバイスの１つのデバイスからの要求に応答して、前記トランザクションログファイルの１つ以上を提供する様に構成されていることを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記第１のコンピューティングデバイスから、データベースになされた個別の変更を識別する第１のトランザクションログを受信し、
第２のコンピューティングデバイスから、前記データベースになされた個別の変更を識別する第２のトランザクションログを受信し、
前記第１のトランザクションログと前記第２のトランザクションログとの間の競合が存在するかを判定し、
前記トランザクションログの２つ以上のトランザクションをマージできるかを判定し、
前記２つ以上のトランザクションをマージできる場合、前記データベースにマージしたトランザクションを適用する様に構成されたサーバシステムを備えていることを特徴とする請求項７に記載のシステム。
【請求項１６】
前記２つ以上のトランザクションをマージできない場合、前記サーバシステムは、競合において優先するトランザクションを判定し、前記判定したトランザクションを前記データベースに適用する様に構成されていることを特徴とする請求項１５に記載のシステム。
【請求項１７】
前記２つ以上のトランザクションのマージは、共通する祖先データベースを判定し、前記共通する祖先データベースと、前記第１のトランザクションログと、前記第２のトランザクションログとの間の３ウェイマージを実行することを含むことを特徴とする請求項１５に記載のシステム。
【請求項１８】
前記競合は、ユーザの介入なしに解決されることを特徴とする請求項１５に記載のシステム。
【請求項１９】
コンピュータ可読記憶媒体に保存され、第１のコンピューティングデバイスで実行されると、前記第１のコンピューティングデバイスに、
前記第１のコンピューティングデバイス上で動作しているアプリケーションから実行中のクエリを受信し、
前記実行中のクエリを満たすデータ項目であって、ユーザアカウントに関連付けられた第２のコンピューティングデバイスによって提供されたものである前記データ項目が、リモートストレージロケーションで利用可能であることの通知を受信し、
前記通知に基づき、１つ以上のアプリケーション別アクセスポリシーにより前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第１データ項目へのアクセスの許可を有することを判定し、
前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第２データ項目へのアクセスの許可を有さないことを判定し、
前記アプリケーションに対して前記実行中のクエリを満たす前記第１データ項目を提示し、
前記アプリケーションに対する前記第２データ項目の提示を控える、
ことを含む動作を実行させる命令を含み、
前記実行中のクエリは、前記アプリケーションが終了又は削除されるまでアクティブのままであることを特徴とするコンピュータプログラム。
【請求項２０】
前記動作は、
前記リモートストレージロケーションに、前記第１データ項目を受信する要求を送信することと、
前記リモートストレージロケーションから前記第１データ項目を受信することを含むことを特徴とする請求項１９に記載のコンピュータプログラム。
【請求項２１】
コンピュータ可読記憶媒体に保存され、第１のコンピューティングデバイスで実行されると、前記第１のコンピューティングデバイスに、
前記第１のコンピューティングデバイス上で動作しているアプリケーションから実行中のクエリを受信し、
前記実行中のクエリを満たすデータ項目であって、ユーザアカウントに関連付けられた第２のコンピューティングデバイスによって提供されたものである前記データ項目が、リモートストレージロケーションで利用可能であることの通知を受信し、
前記通知に基づき、１つ以上のアプリケーション別アクセスポリシーにより前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第１データ項目へのアクセスの許可を有することを判定し、
前記アプリケーションが前記実行中のクエリを満たす前記データ項目の第２データ項目へのアクセスの許可を有さないことを判定し、
前記アプリケーションに対して前記実行中のクエリを満たす前記第１データ項目を提示し、
前記アプリケーションに対する前記第２データ項目の提示を控える、
ことを含む動作を実行させる命令を含み、
前記アプリケーションが前記第１データ項目へのアクセスの許可を有することを判定することは、前記第１データ項目に関連付けられた識別子が前記アプリケーションに関連付けられた識別子と適合するかを判定することを含み、
前記アプリケーションに関連付けられた前記識別子は、当該識別子に関連付けられたデータ項目への共有アクセスを有するアプリケーションのファミリーを識別することを特徴とするコンピュータプログラム。
【請求項２２】
前記実行中のクエリを満たす前記データ項目がリモートストレージロケーションで利用可能であることの前記通知は、前記アプリケーションに関連付けられた前記識別子に適合する前記第１データ項目に関連付けられた前記識別子を示すデータを含むことを特徴とする請求項２１に記載のコンピュータプログラム。
【請求項２３】
前記受信した通知のデータに基づき、前記データ項目が前記実行中のクエリを満たすことを判定することを含むことを特徴とする請求項１９に記載のコンピュータプログラム。
【請求項２４】
前記データ項目を決定することは、前記ユーザアカウントに関連付けられた別のコンピューティングデバイスからのデータ項目の通知を受信したことの応答であることを特徴とする請求項１９に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データストレージに関する。
【背景技術】
【０００２】
ユーザは、例えばネットワーク記憶位置である遠隔地にデータを格納できる。ユーザは、デバイス間でもデータを転送できる。一般にユーザは、ファイルを転送又は共有することで他のユーザとデータを共有する。例えばユーザは、電子メール又はファイル転送プロトコルを使用すること等により、他のユーザに送出する特定のファイルを識別できる。ファイル共有により、例えばネットワーク上の他のユーザはファイルにアクセスできるが、一般に、ファイルは元の位置のままである。あるいは、他のユーザが元の記憶位置からファイルを確認できるが、一般に、ファイルを修正できるのはそのファイルを確認したユーザだけである。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明は、データの格納及び同期に関連する技術を説明する。
【課題を解決するための手段】
【０００４】
一般に、本発明において説明される主題の一態様は、アプリケーションから実行中のクエリを識別する動作と、アプリケーションが１つ以上のアプリケーション別アクセスポリシーに従って閲覧する許可を有する複数のデータ項目のうちの１つ以上のデータ項目を判定する動作と、１つ以上のデータ項目をアプリケーションに対して提示する一方で、複数のデータ項目のうちの他のデータ項目を提示しない動作とを含む方法において実施されうる。
【０００５】
この態様の他の実施形態は、各々が方法の動作を実行するように構成された対応するシステムと、装置と、コンピュータ記憶装置上に記録されたコンピュータプログラムとを含む。
【０００６】
これらの実施形態及び他の実施形態の各々は、オプションとして以下の特徴のうちの１つ以上を含むことができる。１つ以上のデータ項目を判定することは、複数のデータ項目の各々と関連付けられた識別子がアプリケーションと関連付けられた識別子と一致するかを判定することを含む。アプリケーションと関連付けられた識別子は、アプリケーションを一意に識別する。アプリケーションと関連付けられた識別子は、関連するデータ項目への共用アクセスを有するアプリケーションのファミリーを識別する。データ項目を判定することは、他のデバイスからデータ項目の通知を受信することに応答することである。
【０００７】
一般に、本発明において説明される主題の一態様は、複数のアプリケーションと、データ項目をリモートストレージにアップロードし且つ他のデバイスによりデータストレージにアップロードされたデータ項目を受信するように構成された同期マネージャと、１つ以上のアプリケーション別アクセスポリシーに従って複数のアプリケーションの各々に対して使用可能なデータ項目を閲覧する許可を判定するように構成されたアクセスマネージャとを提供するように構成された１つ以上のコンピューティングデバイスを備える装置において実施されうる。
【０００８】
一般に、本発明において説明される主題の一態様は、デバイスからデータ項目を受信する動作と、データ項目と関連付けられたユーザアカウント及びアプリケーションに特有のデータ項目を格納するコンテナを判定する動作と、データ項目をコンテナに格納する動作と、ユーザアカウントと関連付けられた１つ以上の他のデバイスにデータ項目の通知を送出する動作とを含む方法において実施されうる。この態様の他の実施形態は、各々が方法の動作を実行するように構成された対応するシステムと、装置と、コンピュータ記憶装置上に記録されたコンピュータプログラムとを含む。
【０００９】
一般に、本発明において説明される主題の一態様は、各々がデータベースに対して加えられた個別の変更を識別し且つデータベースの代わりに受信される１つ以上のデータベーストランザクションログファイルを１つ以上のデバイスから受信する動作と、複数の関連するデバイスの各々にトランザクションログファイルを通知する動作とを含む方法において実施されうる。この態様の他の実施形態は、各々が方法の動作を実行するように構成された対応するシステムと、装置と、コンピュータ記憶装置上に記録されたコンピュータプログラムとを含む。
【００１０】
これらの実施形態及び他の実施形態の各々は、オプションとして以下の特徴のうちの１つ以上を含むことができる。方法は、トランザクションログファイルを格納することを更に備える。方法は、複数のデバイスのうちの１つのデバイスからの要求に応答して１つ以上のトランザクションログファイルを提供することを更に備える。
【００１１】
一般に、本発明において説明される主題の一態様は、各々がデータベースに対して加えられた個別の変更を識別する複数のトランザクションログを受信する動作と、複数のトランザクションログのうちの２つ以上のトランザクションログの間に競合が存在することを判定する動作と、競合するトランザクションログのうちの２つ以上のトランザクションをマージできるかを判定する動作と、２つ以上のトランザクションをマージできる場合にマージされたトランザクションをデータベースに適用する動作と、２つ以上のトランザクションをマージできない場合に勝ったトランザクションを判定し且つそのトランザクションをデータベースに適用する動作と、を含む方法において実施されうる。この態様の他の実施形態は、各々が方法の動作を実行するように構成された対応するシステムと、装置と、コンピュータ記憶装置上に記録されたコンピュータプログラムとを含む。
【００１２】
これらの実施形態及び他の実施形態の各々は、オプションとして以下の特徴のうちの１つ以上を含むことができる。トランザクションをマージすることは、共通の祖先のデータベースを判定することと、３方向マージを実行することとを含む。競合はユーザ対話なしで解決される。
【００１３】
本発明において説明される主題の特定の実施形態は、以下の利点のうちの１つ以上を実現するように実現可能である。アプリケーションベースのポリシーに従って、データを安全に格納できる。アプリケーションは、許可が与えられているクラウドストレージからのデータ項目のみを閲覧及び読み出しできる。アクセス制御は、アプリケーションベースのポリシーを使用して各クライアントデバイスにおいて実行可能である。
【００１４】
データベースは、デバイス間で全体としてデータベースを原子的に同期せずにトランザクションログを使用して同期されうる。個々のデータベーストランザクション間の競合は、競合するトランザクション及び共通の祖先のデータベースを使用して各クライアントデバイスにおいて解決されうる。システム又はアプリケーションが公表するポリシーは、ユーザ対話なしでファイル内の記録の間の競合を自動的に解決できる。クライアントデバイスは、新しいピアデバイスをオンラインに導くため又はローカルファイルに関する問題を解決するために同期されたデータを使用してゼロからデータベースを再構成できる。
【００１５】
以下の添付の図面及び説明において、本発明において説明される主題の１つ以上の実施形態の詳細を説明する。主題の他の特徴、態様及び利点は、説明、図面及び特許請求の範囲から明らかとなるだろう。
【図面の簡単な説明】
【００１６】
【図１】データ項目を安全に格納するシステムの一例を示す図。
【図２】データ項目を同期するシステムの一例を示す図。
【図３】データ項目を安全に格納及び同期する方法の一例を示すフローチャート。
【図４】アプリケーションデータ項目をアップロードし、読み出す方法の一例を示すフローチャート。
【図５】データベーストランザクションを格納するシステムの一例を示す図。
【図６】データベースを同期する方法の一例を示すフローチャート。
【図７】データベースを同期する方法の一例を示すフローチャート。
【図８】競合を管理する方法の一例を示すフローチャート。
【図９】システムアーキテクチャの一例を示す図。
【発明を実施するための形態】
【００１７】
種々の図面における同一の参照符号及び名称は、同様の要素を示す。
【００１８】
アプリケーション中心のセキュリティ保護されたストレージの技術を説明する。特定のアプリケーションと関連付けられたファイル等のデータ項目は、クラウドストレージ等の１つ以上の遠隔地に格納され且つ他のデバイスと同期されうる。各アプリケーションは、許可を有する遠隔地に格納されたデータ項目のみを閲覧できる。各クライアントデバイス上のアクセスマネージャは、アプリケーション別アクセスポリシーを実行する。遠隔地のストレージは、例えば隔離されたコンテナを使用してユーザ又はユーザアカウントと関連付けられたアプリケーション毎にセキュリティ保護されうる。
【００１９】
アプリケーションがデータ項目を保存する時、データ項目はリモート記憶位置に同期されうる。リモート記憶位置は、ユーザと関連付けられた他のデバイスにデータ項目を通知する。個々のデバイス上のアクセスマネージャは、特定のアプリケーションがアプリケーションに対するアクセスポリシー及びこれらのアプリケーションから受信した何らかの特定のクエリに基づいてデータ項目を通知されるか否かを判定する。アプリケーションが通知され且つアプリケーションがデータ項目を読み出す要求をする場合、データ項目はリモートストレージから読み出される。
【００２０】
データベースの同期の技術も説明する。データベースは、データベース全体をリモート記憶位置に又はピアデバイス間で自動的に移動せずにクライアントデバイス間で同期されうる。トランザクションログファイルは、特定のベースライン状態に対するデータベースへの変更を識別する。トランザクションログファイルは、トランザクションログファイルにおいて識別されたトランザクションがローカルデータベースに適用される際にデータベースが同期されるように同期される。トランザクションログファイル間で競合が検出されると、トランザクションをマージしてデータベースに適用できるか否かに関する判定が行われる。トランザクションをマージできない場合、競合の勝者は、特定の競合解決ポリシーに従って判定される。
【００２１】
図１は、データ項目を安全に格納するシステム１００の一例を示す図である。システム１００は、第１のデバイス１０２と、第２のデバイス１０４と、第３のデバイス１０６と、リモート記憶位置１０８とを含む。
【００２２】
第１のデバイス１０２、第２のデバイス１０４、第３のデバイス１０６及びリモート記憶位置１０８は、１つ以上のネットワーク１１０を使用して共に通信可能に結合される。１つ以上のネットワーク１１０は、有線ネットワーク及び無線ネットワークの双方を含むことができる。例えばネットワーク１１０は、ローカルエリアネットワーク、ワイドエリアネットワーク又はインターネットの一部であってよい。
【００２３】
第１のデバイス１０２、第２のデバイス１０４及び第３のデバイス１０６は、デスクトップコンピューティングデバイス又はラップトップコンピューティングデバイス、移動デバイス、タブレットデバイス、パーソナルデータアシスタント、あるいは他のコンピューティングデバイス等を備えることができる。特に図１に示されるように、デバイス１０２及び１０４の各々は、第１のユーザ又はユーザアカウント１１２と関連付けられる。同様に、第３のデバイス１０６及び不図示の１つ以上の他のデバイスは、第２のユーザ又はユーザアカウント１１４と関連付けられる。リモート記憶位置１０８は、１つ以上の異なるユーザ又は異なるユーザアカウントと関連付けられる不図示の他の多くのデバイスに更に結合されうる。
【００２４】
リモート記憶位置１０８は、単一又は複数の記憶位置であってよい。例えば、サーバ、ネットワークアドレス指定された記憶位置、コンピューティングデバイスの集合又は仮想化ネットワークストレージを示すクラウドストレージシステムの一部として。
【００２５】
リモート記憶位置１０８は、異なるユーザ／ユーザアカウントとアプリケーションとの組合せからデータを格納する独立した論理コンテナを含む。いくつかの例において、論理コンテナは、ファイルシステムにおけるディレクトリ又はデータ構造、あるいは別の種類のデータ組織単位でありうる。例えば第１のユーザ／ユーザアカウント１１２は、リモート記憶位置１０８上にコンテナ１１６を有することができ、ユーザ又はユーザアカウントと関連付けられた個々のアプリケーション毎に１つのコンテナを有する。同様に、第２のユーザ／ユーザアカウント１１４は、それぞれのアプリケーション用のコンテナ１１８を有することができる。個々のデバイス（例えば、第１のデバイス１０２）から受信したアプリケーションデータ項目は、そのアプリケーション用のそれぞれのコンテナに格納される。リモート記憶位置１０８は、コンテナを作成及び管理し、且つユーザと関連付けられたデバイスに対する通知を生成するストレージマネージャを含むことができる。
【００２６】
第１のデバイス１０２は、１つ以上のアプリケーション１２０と、同期マネージャ１２２と、アクセスマネージャ１２４とを含む。１つ以上のアプリケーション１２０は、例えば生産アプリケーション、システムアプリケーション、ゲーム等の種々のアプリケーションを含むことができる。各アプリケーションは、アプリケーション及びそのアプリケーションの特定のアクセス許可を識別するために使用可能な一意のキー又は他の識別子と関連付けられうる。いくつかの実現例において、１つ以上のアプリケーション１２０は、他の各アプリケーションから隔離されるようにサンドボックスされる。
【００２７】
以下に更に詳細に説明されるように、同期マネージャ１２２は、データ項目をリモート記憶位置１０８に送出することと、リモート記憶位置１０８から情報（例えば、データ項目又は通知）を受信することとを管理する。アクセスマネージャ１２４は、それぞれのアプリケーションからのクエリに応答してアプリケーション１２０の特定のアプリケーションに対して使用可能なデータ項目を提示する。アクセスマネージャ１２４は、１つ以上のアクセスポリシーを適用して、アプリケーション１２０の特定のアプリケーションに対して可視になるデータ項目を判定する。
【００２８】
同様に、第２のデバイス１０４は、１つ以上のアプリケーション１２６と、同期マネージャ１２８と、アクセスマネージャ１３０とを含む。アプリケーション１２０及びアプリケーション１２６は、同一のアプリケーションのうちの１つ以上を含むことができる。同様に、第３のデバイス１０６は、１つ以上のアプリケーション１３２と、同期マネージャ１３４と、アクセスマネージャ１３６とを含む。しかし、第３のデバイス１０６は、第２のユーザ又はユーザアカウント１１４と関連付けられる。
【００２９】
図２は、デバイス間でデータ項目を同期するシステム２００の一例を示す図である。システム２００は、第１のデバイス２０２と、第２のデバイス２０４と、クラウドストレージ２０６とを含む。
【００３０】
第１のデバイス２０２は、アプリケーション２０８と、同期マネージャ２１０と、アクセスマネージャ２１２とを含む。同様に、第２のデバイス２０４は、アプリケーション２１４と、同期マネージャ２１６と、アクセスマネージャ２１８とを含む。それぞれの同期マネージャ、アクセスマネージャ及びアプリケーションは、図１に対して上述したものに類似してよい。
【００３１】
データ項目がアプリケーション２０８のアプリケーションにより（例えば、新しいファイルの生成又は既存のファイルの更新により）格納されると、同期マネージャ２１０は、データ項目を検出し（例えば、デバイスカーネルにより提供された事象通知であるが）、データ項目をクラウドストレージ２０６に送出する。クラウドストレージ２０６は、クラウドストレージ２０６内の対応するアプリケーションコンテナにデータ項目を格納する。クラウドストレージ２０６は、第２のデバイス２０４にデータ項目を更に通知する。第２のデバイス上の同期マネージャ２１６は通知を受信する。同期マネージャ２１６は、どのアプリケーションがデータ項目を見ることができるかを制御するアクセスマネージャ２１８に受信した通知を通知する。
【００３２】
アクセスマネージャ２１８は、１つ以上のアクセスポリシーに従ってデータ項目を読み出す許可を有するアプリケーションを判定する。データ項目の通知は、データ項目と関連付けられた１つ又は複数のアプリケーション等を示す識別子を含むことができる（例えば通知は、データ項目を生成したアプリケーションの対応するアプリケーションキーを含むことができる）。
【００３３】
アクセスマネージャ２１８は、新しいデータ項目を認識させることを要求するアプリケーションからのクエリがあるかを更に判定する。例えば対応するアプリケーションは、アプリケーションと関連付けられた新しいデータ項目に対する実行中のクエリを開始できる（例えば、第２のデバイス２０４にインストールされた後）。データ項目に対するクエリがある場合、アクセスマネージャ２１８は、対応するアプリケーション２１４にデータ項目を通知する。特定のアプリケーション２１４は、使用可能な１つ以上のデータ項目を閲覧し且つ必要に応じてデータ項目を要求できる。特にデータ項目は、アプリケーションに対して提示されるためにクラウドストレージ２０６から読み出される必要はない。アプリケーションが読み出しアクセスを要求すると、データ項目は、リモートで検索又は読み出し可能である。データ項目の位置は、アプリケーションには見えなくてよい（例えばデータ項目は、クラウドストレージに配置される場合にローカルで配置されるように見えてよい）。
【００３４】
図３は、データ項目を安全に格納及び同期する方法３００の一例を示すフローチャートである。方法３００は、１つ以上のコンピューティングデバイス、例えば図１のデバイス及びリモート記憶位置により実行可能である。
【００３５】
アプリケーションデータ項目は、格納及び／又は同期のために受信される（ステップ３０２）。アプリケーションデータ項目は、データ項目が特定のデバイス上にローカルで格納されることに応答して受信されうる。例えば所定のアプリケーションは、デバイス上の記憶装置にファイルを保存できる。データ項目は、ユーザ動作（例えば、アプリケーションデータに対するユーザの修正）に応答して格納されうる。データ項目は、新しいファイル又は以前に格納されたデータ項目の修正バージョンとして保存されうる。例えば、ワードプロセシングアプリケーションのユーザは、新しいファイルの作成又は既存のファイルの修正を実行できる。いくつかの実現例において、同期マネージャ（例えば、同期マネージャ１２２）は、格納されている新しいデータ項目又は変更されたデータ項目を識別する。例えば同期マネージャは、データ項目を識別するためにファイルシステムの事象を監視できる。他のいくつかの実現例において、個々のアプリケーションは同期マネージャに通知する。同期マネージャは、データ項目をリモート記憶位置（例えば、リモート記憶位置１０８）に送出できる。
【００３６】
データ項目を受信することは、データ項目のデータ及び追加情報又はデータ項目に関するメタデータを受信することを含むことができる。追加情報は、データ項目と関連付けられたアプリケーション（例えば、データ項目を生成したアプリケーション）を識別する情報を含むことができる。他のいくつかの実現例において、追加情報は、データ項目にアクセスする許可を有するアプリケーションを識別する。識別は、特定のアプリケーション又は関連するアプリケーションのグループを識別する一意のキーを含むことができる。例えば、特定のアプリケーション開発者は、データ項目を共有できる多数の関連するアプリケーション（開発者又は会社による一組のアプリケーション）を生成できる。
【００３７】
データ項目は、安全なアプリケーションコンテナに格納される（ステップ３０４）。例えば、クラウドストレージ等のリモート記憶位置は、所定のユーザ又はユーザアカウントと関連付けられたアプリケーション毎に独立したコンテナを含むことができる。従って、アプリケーション及びユーザ毎のデータ項目は、リモート記憶位置上に別個に格納されうる。また、いくつかの実現例において、各コンテナはセキュリティ保護及び／又は暗号化される。
【００３８】
ピアデバイスに通知される（ステップ３０６）。ユーザ又はユーザアカウントと関連付けられた多数のデバイス等のピアデバイスを間でデータ項目を同期するために、関連するデバイスに新しいデータ項目を通知する。デバイスは、例えばデバイスをピアにリンクするユーザによる登録処理を通して関連付けられる。通知は、要求されるまで実際のデータ項目を個々のピアデバイスに送出する必要がないように送出される。しかし、いくつかの別の実現例において、通知の代わりにデータ項目自体をピアデバイスに送出できる。
【００３９】
通知されると、特定のピアデバイスは通知を処理できる。処理することは、データ項目が以前に識別されていたか否か（例えば、遠隔地において格納された以前のデータ項目の先行する通知の一部として）を判定することを含むことができる。処理することは、例えば通知に含まれた（例えば、アプリケーションを識別するキーを含む）データ項目に関する情報又はメタデータを使用してデータ項目と関連付けられた１つ又は複数のアプリケーションを判定することも含むことができる。それぞれのピアデバイスは、関連するアプリケーションにデータ項目を通知できる。
【００４０】
データ項目は、要求に応答してデバイスに提供される（ステップ３０８）。例えば、デバイス上の特定のアプリケーションは、読み出しアクセスを即座に要求できる。あるいは、アプリケーションは、データ項目をリモート記憶位置上に残しつつ、その可用性を格納できる。データ項目は、例えばデータ項目を開く要求に応答して、必要に応じて読み出され得る。例えばユーザは、アプリケーション内で特定のデータ項目を開くことを要求できる。次にアプリケーションは、リモート記憶位置からデータ項目を要求するアクセスマネージャからデータ項目を要求する。
【００４１】
図４は、アプリケーションデータ項目をアップロードし、読み出す方法４００の一例を示すフローチャートである。方法４００は、１つ以上のコンピューティングデバイス、例えば図１の第１のデバイス１０２により実行可能である。
【００４２】
クエリはアプリケーションから受信される（ステップ４０２）。例えばアプリケーションが最初にインストール又は設定される時にクエリを受信できる。あるいは、他のデバイスとの同期のためにアプリケーションを構成する時にクエリを受信できる。クエリは、待ち状態のままの実行中のクエリであってよく、デバイス上のアプリケーションの寿命の間に（例えば、アプリケーションが無効又は削除されるまで）応答してよい。
【００４３】
アプリケーションと関連付けられたデータ項目へのアクセスが検査される（ステップ４０４）。一意の識別子（例えば、特定のアプリケーションキー）は、識別され且つアプリケーションがアクセス権を有するデータ項目又はデータ項目の種類を判定するために使用されうる。例えばアプリケーションは、特定のアプリケーションアクセスポリシーに一致されうるキーを提供できる。
【００４４】
アプリケーションと関連付けられたデータ項目を含む新しいデータ項目の通知が受信される（ステップ４０６）。特定のピアデバイスは、アプリケーションにデータ項目を通知する（ステップ３１０）。特に、アクセスマネージャ（例えば、アクセスマネージャ１２４）は、データ項目にアクセスする許可を有する１つ又は複数のアプリケーションを判定できる。データ項目にアクセスする許可は、１つ以上のアクセスポリシーに従って判定されうる。アクセスポリシーは、アプリケーションのキー又は他の一意の識別子に基づいて特定のアプリケーションに対する許可を識別できる。識別子は、アプリケーションをインストールする前に検査されうる。データ項目と関連付けられた情報は、データ項目にアクセスする許可を有するアプリケーションを判定するアクセスポリシーにより規定された許可と比較されうる。いくつかの実現例において、単一のアプリケーションのみがアプリケーションのデータ項目にアクセスする許可を有する。他のいくつかの実現例において、特定の指定されたアプリケーション間でいくつかのデータ項目を共有できる。
【００４５】
いくつかの実現例において、アプリケーションがデータ項目にアクセスする許可を有する場合でも、アプリケーションクエリがない限り通知は送出されない。例えばアプリケーションクエリは、何らかの新しいデータ項目を要求できる。いくつかの実現例において、クエリは、アプリケーションが最初にデバイスにインストールされるか、あるいは最初に他のデバイスと同期される時に開始された実行中のクエリである。
【００４６】
アプリケーションは、アプリケーションと関連付けられたデータ項目のみを通知される（ステップ４０８）。アプリケーションへの通知により、ユーザは、アプリケーションがアクセス権を有するデータ項目を閲覧できるだけである。従って、例えば、他のアプリケーションと関連付けられた他のデータ項目が受信されている場合、アプリケーションは、必要な許可を有さない限りこれらのデータ項目を閲覧できない。
【００４７】
読み出し要求が受信され、対応するデータが提示される（ステップ４１０）。アプリケーションは、読み出しアクセスを即座に要求できる。あるいは、アプリケーションは、データ項目をリモート記憶位置上に残しつつ、データ項目の可用性を格納できる。データ項目は、例えばデータ項目を開く要求に応答して、必要に応じて読み出され得る。例えばユーザは、アプリケーション内で特定のデータ項目を開くことを要求できる。次にアプリケーションは、リモート記憶位置からデータ項目を要求するアクセスマネージャからデータ項目を要求する。
【００４８】
図５は、データベーストランザクションを格納するシステム５００の一例を示す図である。
【００４９】
システム５００は、第１のデバイス５０２と第２のデバイス５０４とを備える。第１のデバイス５０２及び第２のデバイス５０４は、第１のユーザ５０６と関連付けられる。第１のデバイス５０２及び第２のデバイス５０４は、ネットワーク５１０を介してリモート記憶位置５０８に接続される。
【００５０】
第１のデバイス５０２及び第２のデバイス５０４は、デスクトップコンピューティングデバイス又はラップトップコンピューティングデバイス、移動デバイス、タブレットデバイス、パーソナルデータアシスタント、あるいは他のコンピューティングデバイス等を備えることができる。
【００５１】
例えばネットワーク５１０は、ローカルエリアネットワーク、ワイドエリアネットワーク又はインターネットの一部であってよい。
【００５２】
第１のデバイス５０２は、データベース５１２と、事象モニタ５１４と、トランザクションキャッシュ５１６とを含む。同様に、第２のデバイス５０４は、データベース５１８と、事象モニタ５２０と、トランザクションキャッシュ５２２とを含む。
【００５３】
ユーザがデータベース５１２に変更を加えると、その変更は事象モニタ５１４により検出されうる。例えばユーザは、特定の行及び列に対応するデータベースのセルを修正できる。変更は、個々のトランザクションログとしてトランザクションキャッシュ５１６に書き込まれうる。トランザクションログは、特定の基準に従って周期的に送出される１つ以上のトランザクションファイルの束の一部として、周期的に又は受信の都度リモート記憶位置５０８に送出されうる。同様に、データベース５１８への変更は、事象モニタ５２０により検出され、且つトランザクションキャッシュ５２２に格納されたトランザクションログに書き込まれうる。トランザクションログは、リモート記憶位置５０８に送出されうる。
【００５４】
リモート記憶位置５０８は、第１のユーザ５０６を含む多数のユーザのユーザ毎のデータベース情報に対する独立したストレージを含む。特に、第１のユーザに対するトランザクションログ５２４及び第２のユーザに対するトランザクションログ５２６を図５に示す。リモート記憶位置５０８は、ユーザ毎のトランザクションログを安全に格納できる。
【００５５】
また、いくつかの実現例において、データベース５１２及びデータベース５１８がそれぞれ第１のデバイス１０２及び第２のデバイス１０４上にローカルで格納されている間、対応するデータベースはリモート記憶位置５０８に格納されない。代わりに、リモート記憶位置５０８に提供されたトランザクションログは、第１のデバイス５０２及び第２のデバイス５０４の各々で同期されうる。従って、例えば、大きなデータベースにおけるセルへの変更は、デバイスとリモート記憶位置との間で大きなデータベース全体を送出せずに効率的に同期されうる。
【００５６】
特定のデバイス内において、トランザクションログは、ユーザ間でデータベースを同期するために、ローカルで格納されたデータベースに適用されうる。例えば、第１のデバイス５０２からのトランザクションログは、第２のデバイス５０４と同期されうる。第２のデバイス５０４において受信されたトランザクションログは、全体としてそれぞれのデータベースを転送せずにデータベース５１８をデータベース５１２と同期するためにデータベース５１８に適用されうる。
【００５７】
図６は、データベースを同期する方法６００の一例を示すフローチャートである。方法６００は、１つ以上のコンピューティングデバイス、例えば図５の第１のデバイス５０２により実行可能である。
【００５８】
各データベーストランザクションはトランザクションログファイルに格納される（ステップ６０２）。トランザクションログファイルは、トランザクションを取り消す又は繰り返すことができるように特定のトランザクションに対するデータベースの状態をカプセル化する。トランザクションログファイルは、特定のデータベーストランザクションに対して単一の個別のコンテナを提供する。トランザクションは、個々のデータベースセルに加えて、全体として行又は列を編集、追加、あるいは削除することを含むことができる。トランザクションは、孤立して単一のセルに影響を及ぼすことができるか、あるいは編集されたセルの内容に関連する他のセルに結び付けられうる。
【００５９】
トランザクションログファイルは、データベースに対して発生するトランザクションの時間順の履歴を更に提供する。いくつかの実現例において、各トランザクションログは、トランザクションが発生した時を示すタイムスタンプを含むことができる。他のいくつかの実現例において、トランザクションログファイルは変化ベクトルを含む。変化ベクトルにより、トランザクションログファイルを読み出すデバイスは、ログが生成された時間においてトランザクションログを生成したデバイスが以前に見た他のトランザクションはどれか（例えば、デバイスにおいて又は前の同期により最初に適用されたか）を判定できる。タイムライン及びトランザクションログデータ自体を使用することにより、トランザクションが発生したデータベースに共通の状態を有する別のデータベース上でトランザクションを再作成できる。
【００６０】
１つ以上のトランザクションログファイルはリモート記憶位置にプッシュされる（ステップ６０４）。トランザクションログファイルは、特定の基準に従ってデータベースにより格納されるかあるいはバッチで周期的に送出される時に個々に送出されうる。例えば、個々のトランザクションログファイルは、トランザクションキャッシュ（例えば、トランザクションキャッシュ５１６）に格納されうる。基準は、個々のトランザクションログファイルの数又は時間を含むことができる。例えば基準は、トランザクションログファイルの数の閾値をキャッシュに設定してリモート記憶位置へのアップロードをトリガできる。同様に、基準は、トランザクションログファイルをアップロードするための期間又は時間範囲を特定できる（例えば、毎時又は夜間）。基準が満たされると、キャッシュにおけるトランザクションログファイルは、リモート記憶位置に送出されうる。基準は組み合わされてよく、例えば、特定された数のトランザクションログファイルがまだキャッシュに格納されていない場合でも、時間制限はトランザクションログファイルの送出をトリガできる。
【００６１】
別のデバイスによりリモート記憶位置に提供されたトランザクションログファイルの通知が受信される（ステップ６０６）。特に、デバイス（例えば、第１のデバイス５０２）は、他のデバイスによりリモート記憶位置にアップロードされた（例えば、第２のデバイス５０４）トランザクションログファイルを通知される。例えばデバイスは、トランザクションログファイルの一覧を受信できる。この一覧は、受信した全てのトランザクションログファイル、あるいは最後の通知又は共通のデータベースの状態等からの特定の時点からの全てのトランザクションログファイルを識別できる。一覧は、デバイスによりアップロードされたトランザクションログファイルを含むことができる。いくつかの実現例において、特定のトランザクションログファイルに対する通知は、時間順で受信されない。従って、デバイスは、全てのトランザクションログファイルが識別されるまで待機できる。
【００６２】
変化ベクトルは、失われたトランザクションがあるかを判定するために使用可能である。変化ベクトルは、デバイスに既知のトランザクション毎に識別子を含むことができる。特に、各トランザクションは、トランザクション及び特定のトランザクションを作成したデバイスを識別する識別子を有することができる。変化ベクトルは、オーサリングピアデバイスが他のデバイスから見ているトランザクションをカプセル化する。他のデバイスのログは、オーサリングピアデバイスによりインポートされている。例えば、ピアデバイスＡ、Ｂ及びＣの場合、各ピアデバイスは自身のカウンタ（例えば、トランザクション＃１、トランザクション＃２等）を維持できる。グローバルな順序を確立することは困難であるため、代わりに、何らかのピアが新しいログを作成する時間に見ていたトランザクションにより順序が判定される。例えばピアデバイスＣは、（ピアデバイスＣのトランザクション＃４２、ピアデバイスＡのトランザクション＃１２、ピアデバイスＢのトランザクション＃１０１）の変化ベクトルを使用してもよい。例えば結び付きを破るか、あるいは変化ベクトルエントリが一貫していることを確認するために更なる処理が必要とされる場合、タイムスタンプが含まれうる。
【００６３】
トランザクションログファイルにより識別されたトランザクションは、データベースに適用される（ステップ６０８）。トランザクションログファイルは、前のトランザクションに後続する状態を与えられたトランザクションを再作成するのに必要な全ての状態情報を提供する。データベースの現在の状態が判定されうる。現在の状態は、データベースを適用し始めるトランザクションログファイルはどれかを示す。例えば、受信したトランザクションログファイルを適用することでデータベースが修正された最後の時間により、新しいトランザクションログファイルを適用できるデータベースの状態を確立できる。いくつかの実現例において、ベースラインデータベースの状態は、トランザクションが共通のベースライン状態から適用されるように関連する全てのデバイスにわたり周期的に確立される。
【００６４】
データベースに適用されるトランザクションを識別した後、リモート記憶位置から対応するトランザクションログファイルを要求できる。トランザクションログファイルは、検索されると、データベース上で各トランザクションを順番に再実行するために使用可能である。
【００６５】
図７は、データベースを同期する方法７００の一例を示すフローチャートである。方法７００は、１つ以上のコンピューティングデバイス、例えば図５のリモート記憶位置５０８により実行可能である。
【００６６】
１つ以上のデータベーストランザクションログは、１つ以上のデバイスから受信される（ステップ７０２）。トランザクションログファイルは、種々のデバイスから周期的にアップロードされうる。デバイスのグループは、特定のユーザ又はユーザアカウントと関連付けられうる。いくつかの実現例において、データベーストランザクションログは、それぞれの別個のユーザ又はユーザアカウントと関連付けられた多くのデバイスのグループから受信される。
【００６７】
トランザクションログが格納される（ステップ７０４）。リモート記憶位置は、特定のユーザ又はユーザアカウントと関連付けられたデバイス毎に独立した記憶位置を含むことができる。アップロードされたトランザクションログファイルは、リモート記憶位置上の対応する位置に格納されうる。いくつかの実現例において、これはサブディレクトリ又はコンテナである。全てのトランザクションを適用することからデータベースを再作成できるため、関連する全てのデバイスからアップロードされた全てのトランザクションログファイルの組合せは、リモート格納されたバージョンのデータベースを構成する。
【００６８】
トランザクションログの通知は、それぞれの１つ以上のデバイスに送出される（ステップ７０６）。いくつかの実現例において、所定のユーザ／ユーザアカウントに対して、周期的な通知は、受信した１つ以上のトランザクションログと関連付けられた各デバイスに同報通信される。個々のトランザクションログファイルがピアデバイスから又は特定のスケジュールに従って受信される時、通知は送出されうる。いくつかの実現例において、通知は、データベースに対して受信された全てのトランザクションログファイルの実行中のリストを提供する。他のいくつかの実現例において、通知は、特定の時点の後に受信したトランザクションログファイルのリストを提供する。その時点は、デバイスに送出された最後の通知又は最後に確立されたベースラインデータベースに基づいてもよい。
【００６９】
１つ以上のトランザクションログファイルは、要求に応答してデバイスに提供される（ステップ７０８）。個々のデバイスは、受信した通知に応答してトランザクションログファイルのうちの１つ以上を要求できる。
【００７０】
ベースラインデータベースは、オプションとして周期的に格納される（ステップ７１０）。特に、いくつかの実現例において、ベースラインデータベースの状態は周期的に確立される。このデータベースは、例えばリモート記憶位置上に格納されうる。その後トランザクションログファイルを維持でき、通知はこのベースラインデータベースに対して送出される。あるいは、他のいくつかの実現例において、受信したトランザクションログファイルの実行中の集合のみが維持される。
【００７１】
図８は、競合を管理する方法８００の一例を示すフローチャートである。方法８００は、１つ以上のコンピューティングデバイス、例えば図５の第１のデバイス５０２又は第２のデバイス５０４により実行可能である。
【００７２】
トランザクションログが受信される（ステップ８０２）。特にトランザクションログファイルは、２つ以上の異なるデバイスから受信されうる。競合があるかに関する判定が行われる（ステップ８０４）。競合の判定は、トランザクションログファイルの比較に基づいて行われうる。各トランザクションによりデータベースに適用された変更の特性を判定するために、比較を使用できる。例えば、第１のデバイス上の第１のトランザクションにおいて列名の変更があり、且つ異なるデバイスから第２のトランザクションにおいて同一の列名への別の変更がある場合、競合が発生しうる。いくつかの実現例において、データベースの同一の行を変更する２つのトランザクションは、競合であると考えられる。
【００７３】
別のいくつかの実現例において、トランザクションログファイルの内容に関するメタデータがキャッシュされうる。これにより、競合の検出を高速化できる。例えばメタデータは、競合するトランザクションログを迅速に識別できるように、トランザクションにより変更された行を識別できる。
【００７４】
競合がない場合、トランザクションはデータベースに適用される（ステップ８０６）。トランザクションが適用されると、データベースは、ベースラインデータベースに適用されたようなトランザクションの合計に対応する状態を有することができる。
【００７５】
競合がある場合、競合するトランザクションをマージできるか否かに関する判定が行われる（ステップ８０８）。例えば２つ以上のトランザクションは、データベースの同一の行に変更を加えることができる。しかし、個々のセルが互いに依存せず且つ行への変更が異なる列において発生する場合、各トランザクションを別個に適用できる。これに対して、変更が互いに矛盾するため、データベースの同一のセルに対する２つのトランザクションは、共にマージしなくてもよい。
【００７６】
いくつかの実現例において、同一のセルが２回変更されている競合を有するトランザクションは、最近の変更を選択（例えば、変化ベクトル及びタイムスタンプを使用して）することで解決され、同時により最近の変更による明らかに間違っているデータ量を最小限にする。このように、ユーザの介入又はアプリケーション開発者の努力なしで、高度なマージを実行できる。
【００７７】
競合の最小化は、列毎に、或いは、結合テーブルエントリ（ｔｏ−ｍａｎｙ  ｒｅｌａｔｉｏｎｓｈｉｐの内容）に対して実行できる。一例として、データベースは、グループ内のメンバーシップの識別子を含むことができる。多数のピアデバイスが例えばメンバーを追加及び除外することでグループ内のメンバーシップを編集できる。異なるデバイスが、異なるメンバーを追加又は除外しても競合は発生しない。同一のメンバーが異なるデバイス間で異なる方法で追加又は削除される場合にのみ競合が発生する。どのメンバーシップの変更が追加又は削除であるかは、デバイスの共通の祖先に対して判定される。これは、「３方向マージ」（例えば、以下に更に詳細に説明されるように、デバイスが事前に同意した最後のデータベースの状態であるデバイス＃１、デバイス＃２及び共通の祖先）である。
【００７８】
いくつかの実現例において、マージが起こりうるか否かを判定するために、競合するトランザクションと共通の祖先のデータベースの状態とを比較する。マージ不可能なデータベース内で他の競合を発生させずに双方のトランザクションを適用できるかを判定するために、比較が使用される。
【００７９】
１つ以上の要因を使用して共通の祖先のデータベースを識別できる。要因は、リモート記憶位置に接続される第１のピアデバイスの識別と、最も遅いピアデバイス（例えば、全てのピアデバイスが到達する共通のデータベースの状態を識別するための）と、不活動状態のためにピアを死んだものとして宣言することとを含むことができる。競合を有するピアデバイスが事前に同意されたデータベースの状態に到達する共通の祖先の状態は、トランザクションにおいて十分先までさかのぼるためにログの変化ベクトル及びタイムスタンプを使用して判定される。ベースラインデータベースは、全てのピアに対して最も後方であってよいが、いずれか２つのピアデバイスが少数のトランザクションログによりオフされるだけであってもよい。それらは、逆の順序でログを検査して、それらの間で解決されていない第１の競合の前の状態を得る。また、いくつかの実現例において、競合の解決は２つのピアに限定されない。３つ以上のピアは競合していることに気付くことができる。
【００８０】
競合するトランザクションをマージできる場合、マージされたトランザクションをデータベースに適用できる（ステップ８１０）。トランザクションが適用されると、データベースは、ベースラインデータベースに適用されたようなトランザクションの合計に対応する状態を有することができる。
【００８１】
競合するトランザクションをマージできない場合、競合の勝者が競合するトランザクションの間で判定される（ステップ８１２）。いくつかの実現例において、競合の勝者は、各トランザクションと関連付けられたタイムスタンプに基づいて判定される。例えば、各トランザクションログファイルは、トランザクションがそれぞれのデバイス上で発生した時間を示すタイムスタンプを含むことができる。競合の勝者は、競合するトランザクションの最後の変更として選択されうる。競合の勝者を判定するために、他のヒューリスティクスを使用できる。規則により、特定の種類のトランザクションに対する優先順位を確立できる。例えば削除は、異なる種類の変更に勝つことができる。競合の勝者のトランザクションをデータベースに適用できる一方で、競合の敗者のトランザクションを破棄できる。
【００８２】
いくつかの実現例において、特定のデータベース構造に対するマージポリシーは、データベース開発者又はユーザにより規定されうる。ユーザインタフェースは、マージポリシーを入力又は修正するために提示されうる。
【００８３】
いくつかの実現例において、ピアデータベースは、リモート記憶位置上に格納されたトランザクションログファイルを使用して損害を受けた状態から復元されうる。同様に、リモート記憶位置上に格納されたトランザクションログファイルは、リモート記憶位置に追加された新しいユーザデバイスからのデータベースを最新の状態にするために使用可能である。
【００８４】
いくつかの実現例において、「ＡＢＡ」問題により識別された競合が発生する。たとえ列の値が共通の祖先（例えば、Ａ）から変化していないように見えたとしても、ＡＢＡ問題は、実際には２回変更されている（ＡからＢ、そしてＡに戻る）時である。これを検出することにより、最後の変更を好むように競合を解決できるようになる。従って、この場合、Ａは、共通の祖先と同一であるように見えるが、依然として別のデバイスからの新しい値より最近のものでありうる。
【００８５】
図９は、コンピュータシステムに対するシステムアーキテクチャ９００の一例を示す。システムアーキテクチャ９００は、本明細書において説明される動作を実行できる。アーキテクチャ９００は、１つ以上のプロセッサ９０２（例えば、ＩＢＭ  ＰｏｗｅｒＰＣ、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ  ４等）と、１つ以上の表示装置９０４（例えば、ＣＲＴ、ＬＣＤ）と、グラフィック処理装置９０６（例えば、ＮＶＩＤＩＡ  ＧｅＦｏｒｃｅ等）と、ネットワークインタフェース９０８（例えば、イーサネット、ＦｉｒｅＷｉｒｅ、ＵＳＢ等）と、入力装置９１０（例えば、キーボード、マウス等）と、１つ以上のコンピュータ可読記憶媒体９１２とを備える。これらの構成要素は、１つ以上のバス９１４（例えば、ＥＩＳＡ、ＰＣＩ、ＰＣＩ  Ｅｘｐｒｅｓｓ等）を使用して通信及びデータをやり取りする。
【００８６】
「コンピュータ可読記憶媒体」という用語は、実行するために命令をプロセッサ９０２に提供することに関係するあらゆる有形の媒体を示す。コンピュータ可読媒体９１２は、オペレーティングシステム９１６（例えば、Ｍａｃ  ＯＳ(r)、Ｗｉｎｄｏｗｓ(r)、Ｌｉｎｕｘ等）と、ネットワーク通信モジュール９１８と、アクセス制御マネージャ９２０と、同期マネージャ９２２と、他のアプリケーション９２４とを更に備える。
【００８７】
オペレーティングシステム９１６は、マルチユーザ、マルチ処理、マルチタスキング、マルチスレッディング及びリアルタイム等であってよい。オペレーティングシステム９１６は、入力装置９１０からの入力を識別することと、出力を表示装置９０４に送出することと、コンピュータ可読記憶媒体９１２（例えば、メモリ又は記憶装置）上でファイル及びディレクトリを追跡することと、周辺装置（例えば、ディスクドライブ、プリンタ等）を制御することと、１つ以上のバス９１４上のトラフィックを管理することとを含むがそれらに限定されない基本タスクを実行する。ネットワーク通信モジュール９１８は、ネットワーク接続を確立及び維持する種々の構成要素（例えば、通信プロトコル、例えばＴＣＰ／ＩＰ、ＨＴＴＰ、イーサネット等を実現するソフトウェア）を含む。
【００８８】
アクセス制御マネージャ９２０及び同期マネージャ９２２は、アプリケーション別アクセス制御及び図１〜図８に関連して説明したようなデバイス間のデータベーストランザクションを含むデータ項目の同期を実行する種々の機能を実行する種々のソフトウェアコンポーネントを提供する。
【００８９】
主題の実施形態及び本発明において説明された動作は、デジタル電子回路網、あるいは本発明において開示された構造及び構造的同値を含むコンピュータのソフトウェア、ファームウェア又はハードウェア、あるいはそれらのうちの１つ以上の組合せにおいて実現可能である。本発明において説明された主題の実施形態は、１つ以上のコンピュータプログラム、すなわちデータ処理装置により又はデータ処理装置の動作を制御するように実行するためにコンピュータ記憶媒体上に符号化されたコンピュータプログラム命令の１つ以上のモジュールとして実現可能である。あるいは又は更に、プログラム命令は、データ処理装置により実行するために適切な受信機装置に送信するための情報を符号化するように生成される機械によって生成された電気信号、光信号又は電磁信号等の人工的に生成された伝搬信号上に符号化されうる。コンピュータ可読媒体は、コンピュータ可読記憶装置、コンピュータ可読記憶基板、ランダムアクセスメモリアレイ又はランダムアクセスメモリ素子、あるいはシリアルアクセスメモリアレイ又はシリアルアクセスメモリ素子、あるいはそれらのうちの１つ以上の組合せであってよく、あるいはそれらに含まれてよい。更にコンピュータ記憶媒体は、伝搬信号ではないが、人工的に生成された伝搬信号において符号化されたコンピュータプログラム命令の供給元又は供給先でありうる。更にコンピュータ記憶媒体は、１つ以上の独立した物理的な構成要素又は媒体（例えば、多数のＣＤ、ディスク又は他の記憶装置）であってよくあるいはそれに含まれてよい。
【００９０】
本発明において説明された動作は、１つ以上のコンピュータ可読記憶装置上に格納されたデータ又は他の供給元から受信したデータ上でデータ処理装置により実行された動作として実現可能である。
【００９１】
「データ処理装置」という用語は、プログラマブルプロセッサ、コンピュータ、１つ又は複数のチップ上のシステム、あるいは上記の組合せを例として含むデータを処理する全ての種類の装置、デバイス及び機械を含む装置は、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）等の専用論理回路網を含むことができる。装置は、ハードウェアに加え、当該コンピュータプログラムに対する実行環境を作成するコード、例えばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォーム実行時環境、仮想マシン又はそれらのうちの１つ以上の組合せを構成するコードも含むことができる。装置及び実行環境は、ウェブサービス、分散コンピューティングインフラストラクチャ及びグリッドコンピューティングインフラストラクチャ等の種々の異なるコンピューティングモデルインフラストラクチャを実現できる。
【００９２】
コンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト又はコードとしても知られている）は、コンパイル又は解釈された言語、宣言形言語又は手続き形言語を含むあらゆる形態のプログラミング言語で書き込まれてよく、スタンドアロンプログラム、あるいはモジュール、構成要素、サブルーチン、オブジェクト又はコンピューティング環境において使用するのに適した他のユニットである形態を含むあらゆる形態で展開されてよい。コンピュータプログラムは、ファイルシステムのファイルに対応してもよいが、必ずしもそうでなくてもよい。当該プログラム専用の単一のファイル又は複数の連係ファイル（例えば、１つ以上のモジュール、サブプログラム又はコードの部分を格納するファイル）において他のプログラム又はデータ（例えば、マークアップ言語の文書に格納された１つ以上のスクリプト）を保持するファイルの一部にプログラムを格納できる。コンピュータプログラムは、１つのサイトに配置される１つ又は複数のコンピュータ上で実行されるか、あるいは複数のサイトにわたり分散され且つ通信ネットワークにより相互接続されるように展開されうる。
【００９３】
本発明において説明された処理及び論理フローは、入力データ上で動作し且つ出力を生成することで動作を実行するように１つ以上のコンピュータプログラムを実行する１つ以上のプログラマブルプロセッサにより実行可能である。処理及び論理フローは、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）等の専用論理回路網により更に実行可能であり、装置は専用論理回路網としても実現可能である。
【００９４】
コンピュータプログラムを実行するのに適したプロセッサは、汎用マイクロプロセッサ及び専用マイクロプロセッサの双方と、あらゆる種類のデジタルコンピュータのあらゆる１つ以上のプロセッサとを例として備える。一般にプロセッサは、読み出し専用メモリ又はランダムアクセスメモリ、あるいはそれら双方から命令及びデータを受信する。コンピュータの必須要素は、命令に従って動作を実行するプロセッサ、並びに命令及びデータを格納する１つ以上のメモリ素子である。一般に、更にコンピュータは、磁気ディスク、光磁気ディスク又は光ディスク等のデータを格納する１つ以上の大容量記憶装置を備えるか、あるいはその１つ以上の大容量記憶装置からデータを受信するか又はその１つ以上の大容量記憶装置にデータを転送するかあるいは受信及び転送の双方を実行するように動作可能に結合される。しかし、コンピュータは必ずしもそのようなデバイスを有さなくてもよい。更にコンピュータは、ほんの一例を挙げてみただけでも、移動電話、パーソナルデジタルアシスタント（ＰＤＡ）、モバイルオーディオプレーヤ又はモバイルビデオプレーヤ、ゲーム機、全地球測位システム（ＧＰＳ）受信機、あるいはポータブル記憶装置（例えば、ＵＳＢ（ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ）フラッシュドライブ）等の別のデバイスに組み込み可能である。コンピュータプログラム命令及びデータを格納するのに適したデバイスは、ＥＰＲＯＭ、ＥＥＰＲＯＭ及びフラッシュメモリ素子等の半導体メモリ素子、内部のハードディスク又はリムーバブルディスク等の磁気ディスク、光磁気ディスク、並びにＣＤ−ＲＯＭディスク及びＤＶＤ−ＲＯＭディスクを例として含む全ての形態の不揮発性メモリ、媒体及びメモリ素子を含む。プロセッサ及びメモリは、専用論理回路網により補足されうるか、あるいは専用論理回路網に組み込み可能である。
【００９５】
ユーザと対話するために、本発明において説明された主題の実施形態は、ユーザに情報を表示するＣＲＴ（ブラウン管）モニタ又はＬＣＤ（液晶ディスプレイ）モニタ等の表示装置、並びにユーザがコンピュータに入力を提供できるマウス又はトラックボール等のキーボード及びポインティングデバイスを有するコンピュータ上で実現可能である。他の種類のデバイスはユーザと対話するために使用可能であり、例えば、ユーザに提供されたフィードバックは、視覚フィードバック、聴覚フィードバック又は触覚フィードバック等のあらゆる形態の感覚フィードバックであってよく、ユーザからの入力は、音響入力、音声入力又は触覚入力を含むあらゆる形態で受信されてよい。更にコンピュータは、ユーザにより使用されるデバイスに文書を送出し且つそのデバイスから文書を受信すること、例えばウェブブラウザから受信した要求に応答してユーザのクライアントデバイス上でウェブページをウェブブラウザに送出することにより、ユーザと対話できる。
【００９６】
本発明において説明された主題の実施形態は、例えばデータサーバであるバックエンドコンポーネント又はアプリケーションサーバ等のミドルウェアコンポーネント、あるいはユーザが本発明において説明された主題の実現例と対話できるグラフィカルユーザインタフェース又はウェブブラウザを有するクライアントコンピュータ等のフロントエンドコンポーネント、あるいは１つ以上のそのようなバックエンドコンポーネント、ミドルウェアコンポーネント又はフロントエンドコンポーネントのあらゆる組合せを含むコンピューティングシステムにおいて実現可能である。システムのコンポーネントは、あらゆる形態又はあらゆる媒体のデジタルデータ通信、例えば通信ネットワークにより相互接続されてよい。通信ネットワークの例には、ローカルエリアネットワーク（「ＬＡＮ」）及びワイドエリアネットワーク（「ＷＡＮ」）、インターネットワーク（例えば、インターネット）、並びにピアツーピアネットワーク（例えば、アドホックピアツーピアネットワーク）が含まれる。
【００９７】
コンピューティングシステムは、クライアント及びサーバを含むことができる。クライアント及びサーバは、一般に互いに離れており、通常、通信ネットワークを介して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行し且つ互いにクライアント−サーバの関係を有するコンピュータプログラムにより生じする。いくつかの実施形態において、サーバは、データ（例えば、ＨＴＭＬページ）をクライアントデバイスに送信する（例えば、クライアントデバイスと対話するユーザに対してデータを表示し且つそのユーザからユーザ入力を受信するために）。クライアントデバイスにおいて生成された（例えば、ユーザ対話の結果）データは、サーバにおいてクライアントデバイスから受信されうる。
【００９８】
本発明は多くの特定の実現例の詳細を含むが、これらは、あらゆる発明の範囲又は請求される可能性のあるものの範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実施形態に特有の特徴を説明するものとして解釈されるべきである。独立した実施形態に照らして本発明において説明されるある特定の特徴は、単一の実施形態において組み合わせても実現可能である。逆に、単一の実施形態に照らして説明される種々の特徴は、複数の実施形態において別個に又はあらゆる適切な組合せの一部でも実現可能である。また、特徴は、ある特定の組合せで動作するものとして上述され且つ最初にそのように請求されてもよいが、請求された組合せからの１つ以上の特徴は、場合によってはその組合せから削除されてよく、請求された組合せは、組合せの一部又は組合せの一部の変形に関連してもよい。
【００９９】
同様に、動作は特定の順序で図示されるが、これは、所望の結果を得るためにそのような動作が示された特定の順序又は連続した順序で実行されること、あるいは示された全ての動作が実行されること要求するものとして理解されるべきではない。ある特定の状況においては、マルチタスキング及び並列処理が有利だろう。また、上述の実施形態における種々のシステムコンポーネントの分離は、全ての実施形態においてそのような分離を要求するものとして理解されるべきではなく、説明されたプログラム構成要素及びシステムは、一般に、単一のソフトウェア製品に共に組み込み可能であるかあるいは複数のソフトウェア製品にパッケージ化可能であることが理解されるべきである。
【０１００】
従って、主題の特定の実施形態が説明された。他の実施形態は、以下の特許請求の範囲内である。場合によっては、特許請求の範囲において列挙された動作は、異なる順序で実行されても所望の結果を得ることができる。また、添付の図面に示された処理は、所望の結果を得るために必ずしも示された特定の順序又は連続した順序を必要としない。ある特定の実現例においては、マルチタスキング及び並列処理が有利だろう。
【図１】
0006000401.tif 000002
【図２】
0006000401.tif 000003
【図３】
0006000401.tif 000004
【図４】
0006000401.tif 000005
【図５】
0006000401.tif 000006
【図６】
0006000401.tif 000007
【図７】
0006000401.tif 000008
【図８】
0006000401.tif 000009
【図９】
0006000401.tif 000010