本明細書のいくつかの実施形態は、ファイルおよびデータストレージを管理するための技術および構成を対象とする。一例として、クライアントデバイスはサービスコンピューティングデバイスと通信してもよく、クライアントデバイスのうちのいくつかはいくつかのユーザファイルのスタブファイルメタデータのみを格納してもよく、一方、これらのファイルのファイルメタデータおよびファイルコンテンツの両方はクライアントデバイスのうちのいくつかの他のものおよびサービスコンピューティングデバイス上に格納してもよい。ユーザまたはアプリケーションがスタブファイルのファイルコンテンツにアクセスしようとするとき、ファイルコンテンツは、サービスコンピューティングデバイスから直にダウンロードしてもよい。さらに、スタブファイルメタデータが各ファイルの最新のバージョンおよび条件を反映するように、複数のクライアントデバイスにわたってファイルを同期させてもよい。したがって、個々のクライアントデバイス上の記憶容量は個々のクライアントデバイス上のいくつかのファイルのみのファイルコンテンツを記憶することによって管理されてもよく、一方、すべてのファイルのファイルコンテンツはサービスコンピューティングデバイス上に記憶される。
場合によっては、通知サービスを、リスニング側クライアントに記憶位置に対する特定の変更のための変更通知イベントを提供することができるサービスコンピューティングデバイス上で実行可能なプログラムとしてもよい。さらに、トランザクションクエリエンジンはサービスコンピューティングデバイス上で実行可能なプログラムであってもよく、サービスコンピューティングデバイスは特定の期間にわたって記憶位置に対して生じるファイル変更トランザクションの時間順リストを要求側クライアントに提供することができる。トランザクションクエリエンジンは、スタブファイルのメタデータを更新するためのファイルシステム変更情報を提供することによって、スタブファイルデータのローカル仮想表現を最新に維持するプロセスを実行してもよい。さらに、データ同期サービスは通知サービスからの変更通知を登録し、変更通知に基づいてトランザクションクエリエンジンからの更新を要求することを、クライアントコンピューティングデバイス上で実行可能なプログラムとしてもよい。
いくつかの例では、コンテンツデータの大部分がネットワーク記憶位置に格納されていても、低ストレージ空間環境で実行されているクライアントが格納されている情報の完全な仮想ビューをクライアントデバイス上に提示することができる。例えば、本明細書のシステムは、クライアントデバイスが必要に応じてローカルアクセスのためにオフロードされたファイルコンテンツを容易に呼び出すことができる。さらに、本明細書の通知サービス、トランザクションクエリエンジン、およびデータ同期サービス処理を有するシステムは、共有ファイルシステムに参加するすべてのクライアントデバイスが1つまたは複数の他のクライアントデバイスからの修正にもかかわらず、ファイルシステムの最新のビューを維持することを可能にしてもよい。
場合によっては、通知サービスは、カーソルとして働くトークンを使用して、サービスコンピューティングデバイスと1つまたは複数のクライアントデバイスとの間で定義される特定のストレージセット、たとえばファイルシステムの変更を追跡してもよい。このファイルシステムは、特定のクライアントデバイスに対して私的であってもよく、複数のクライアントデバイス間で共有されてもよい。各クライアントデバイスは、そのトークンを使用してファイルシステムイベントを追跡してもよい。サービスコンピューティングデバイスによって受信されたファイルシステムの変更は、サービスコンピューティングデバイスに、ファイルシステムのためにサービスコンピューティングデバイスによって使用されるトークンを変更させてもよい。トークン交換を使用して、クライアントデバイスは、クライアントデバイスが登録された関心を有するファイルシステムに何らかの変化があった場合に通知されてもよい。通知サービスはクライアントデバイスに関連するファイルシステムへの変更がサービスコンピューティングデバイスで受信されたことを1つまたは複数の登録されたクライアントデバイスに報告することができるが、通知サービスは実際の変更を特定のファイルシステムに報告しなくてもよい。
クライアントデバイス上で実行されるデータ同期サービスは、登録されたファイルシステムに影響を及ぼすファイルシステム変更イベントの通知を受信するために、通知サービスに登録してもよい。通知サービスがクライアントデバイスに関連するファイルシステムに未処理の変更があることを報告すると、クライアントデバイス上のデータ同期サービスは、トランザクションクエリエンジンに要求を送信して、特定の変更のリストを取り出してもよい。トランザクションクエリエンジンは特定の変更のリストを決定し、要求しているクライアントデバイスに送信する。トランザクションクエリエンジンは、トークンを使用して、対応するファイルシステムのイベントを追跡してもよい。クライアントデバイスはクライアントデバイスのトークンが最後に更新されてから1つまたは複数の指定されたファイルシステムで発生した変更をトランザクションクエリエンジンが返すという要求と共に、その最も最近に受信されたトークンを送信してもよい。これにより、クライアントデバイスは、クライアントデバイスが以前に認識していないファイルシステムイベントのみを処理することができる。クライアントデバイス上のデータ同期サービスは、クライアントデバイス上のローカル構成に基づいて、トランザクションクエリエンジンによって報告された変更のリストを処理してもよい。この処理はミラー構成のためのファイルコンテンツをダウンロードすること、スタブ構成のためのスタブメタデータを作成または更新すること、または特定のファイルがサービスコンピューティングデバイスから除去された場合に、ファイルデータおよび/またはスタブメタデータのローカル表現を完全に除去することを含んでもよい。
本明細書の実施形態は、クライアントデバイス上に存在するスタブファイルメタデータが例えば、多対1クライアントデバイス対サービスコンピューティングデバイス関係の状況において、サービスコンピューティングデバイスによって維持されるファイルのネットワークストレージバージョンと更新され、同期されることを可能にする。例えば、いくつかの例は、サービスコンピューティングデバイスに存在するデータが共有ファイルシステムに基づいて複数のクライアントデバイスにわたって等しく共有され得る環境を含む。したがって、任意のクライアントデバイスは、データを変更することを許可されてもよく、結果として生じる変更はスタブファイルのそれらのそれぞれのローカル仮想表現が変更に応答して最新のままであるように、それぞれの通知を受信するデータを共有するすべてのクライアントデバイスにおいてそれらのローカルスタブファイル状態を更新することをもたらしてもよい。
本明細書のファイルスタブ技術のいくつかの例では、ファイルデータがクライアントデバイス上のオリジナルファイルのローカルでコンパクトな表現を維持しながら、1つのサービスコンピューティングデバイスまたはネットワーク記憶位置から別のサービスコンピューティングデバイスに再配置されてもよく、その結果、ファイルコンテンツは要求された場合に、サービスコンピューティングデバイスからクライアントデバイスに容易かつシームレスに呼び戻されてもよい。本明細書の例は、複数のクライアントがローカルポリシーによって定義されたローカルデータを自由に表すことができる。例えば、第1クライアントデバイスはミラーリングポリシーを使用するように構成されてもよく、その結果、サービスコンピューティングデバイス上のファイルのコンテンツに対する変更は第1クライアントデバイスに直ちに呼び出され、一方、第2クライアントデバイスはファイルに対するスタビングポリシーを使用するように構成されてもよく、その結果、サービスコンピューティングデバイス上のファイルのコンテンツに対する変更は実際のファイルデータが第2クライアントデバイスに送信されることなく、スタブファイルメタデータが第2クライアントデバイス上で更新される。さらに、任意の単一のクライアントデバイスはそのデータビューを区分してもよく、その結果、クライアントデバイスは、ミラーリングされたデータとスタブデータの両方を同じクライアントデバイス上でインタリーブすることができる。例えば、ストレージ管理者は、性能上の理由から特定のクライアントに常駐(すなわち、ピン止め)されたままであるように特定のデータセットにフラグをたてることを選択してもよい一方で、あまり頻繁にアクセスされないデータをスタブファイルとして維持させるようにしてもよい。さらに、クライアントデバイスは、非同期モードまたは同期モードのいずれかで動作するように構成されてもよい。
場合によっては、クライアントデバイスとサービスコンピューティングデバイスとの間の通信がREST(representational state transfer)ベースのAPI(アプリケーションプログラムインターフェース)または他のデータAPIを介して実行されてもよい。サービスコンピューティングデバイスは、クライアント動作モードを含むことができるデータAPIを介してクライアントデバイスの動作モードを検出してもよい。いくつかの例では、サービスコンピューティングデバイスは、2ノード構成でセットアップしてもよく、したがって、常にオンラインとすることができる。サービスコンピューティングデバイスは、ストレージエリアネットワーク、クラウドストレージ、または他のネットワークベースのストレージなどを介して、クライアントデバイスデータを格納するためにバックエンドストレージをさらに採用してもよい。
説明のために、いくつかの例示的な実施形態が、1つまたは複数のネットワーク記憶位置、およびファイルおよび他のデータのストレージを管理するための複数のクライアントデバイスと通信する1つまたは複数のサービスコンピューティングデバイスの環境で説明される。しかし、本明細書の実施形態は提供される特定の例に限定されず、本明細書の開示に照らして当業者には明らかであるように、他のタイプのコンピューティングシステム構成、他のタイプのストレージ環境、他のタイプのクライアント構成、他のタイプのデータオブジェクトなどに拡張することができる。
図1は、いくつかの実施形態による、データオブジェクトおよび関連するメタデータを格納するように構成されたシステム100の論理構成例を示す。システム100は、1つまたは複数のネットワーク105などを介してストレージ104と通信することができるか、または他の方法でストレージ104に接続することができる1つまたは複数のサービスコンピューティングデバイス102を含む。さらに、サービスコンピューティングデバイス102は、1つまたは複数のネットワーク106を介して、1つまたは複数のユーザ110に関連付けることができるクライアントコンピューティングデバイス108(1)、108(2)、108(3)..(以下、「クライアントデバイス」)などの1つまたは複数のクライアントコンピューティングデバイス108と通信することができるようにしてもよい。この例では、第1クライアントデバイス108(1)および第2クライアントデバイス108(2)が第1ユーザ110(1)に関連付けられ、第3クライアントデバイス108(3)が第2ユーザ110(2)に関連付けられていると仮定する。さらに、この例では3つのクライアントデバイス108および2つのユーザ110が示されているが、他の例では任意の数のクライアントデバイス108および関連するユーザ110が存在してもよい。
1つまたは複数のネットワーク105および106は、インターネットなどの広域ネットワーク、イントラネットなどのローカルエリアネットワーク(LAN)、セルラーネットワークなどのワイヤレスネットワーク、Wi−Fiおよび/またはBLUETOOTH(登録商標)などの短距離ワイヤレス通信などのローカルワイヤレスネットワーク、ファイバチャネル、光ファイバ、イーサネット、または任意の他のそのようなネットワークを含む有線ネットワーク、直接有線接続、または前述のもの任意の組合せを含む、任意の適切なネットワークを含んでもよい。したがって、1つまたは複数のネットワーク105および106は有線および/または無線通信技術の両方を含むことができ、いくつかの例では、ネットワーク105および106が同じ1つまたは複数のネットワークを含んでもよい。そのような通信に使用されるコンポーネントは、ネットワークのタイプ、選択された環境、またはその両方に少なくとも部分的に依存することができる。このようなネットワークを介して通信するためのプロトコルは周知であり、本明細書では詳細に説明しない。したがって、サービスコンピューティングデバイス102およびクライアントデバイス108は、有線または無線接続、およびそれらの組合せを使用して、1つまたは複数のネットワーク106を介して通信することができる。さらに、場合によっては、負荷分散コンピューティングデバイス(図1には図示せず)を、サービスコンピューティングデバイス102とクライアントコンピューティングデバイス108との間に配置してもよい。さらに、いくつかの例ではネットワーク105がLANおよび/またはストレージエリアネットワークであってもよく、サービスコンピューティングデバイス102およびストレージ104は互いにローカルに配置されてもよい。
各サービスコンピューティングデバイス102は、トランザクションクエリエンジン112、通知サービス114、ファイルシステムデータベース116、およびサーバプログラム118を含んでもよい。例えば、サーバプログラム118は、ストレージ104からファイルを供給するため、および/またはストレージ104に格納するためにクライアントデバイス108からファイルを受信するためなど、それぞれのクライアントデバイス108上のそれぞれのクライアントアプリケーション120と対話してもよい。
クライアントデバイス108はそれぞれ、クライアントアプリケーション120、データ同期サービス122、1つまたは複数のファイルシステム124、ローカルストレージ126、およびトークン128を含んでもよい。各クライアントデバイス108はストレージ104上に格納するためにユーザデータを送信し、ストレージ104からデータを取り出すために、サーバプログラム118と通信するなどのために、それぞれのクライアントデバイス108上で実行することができるクライアントアプリケーション120のそれぞれのインスタンスを含んでもよい。
本明細書の他の場所でさらに説明するように、各クライアントデバイス108に関連付けられたそれぞれのトークン128は、それぞれ、そのクライアントデバイス108の現在の構成に特に適用してもよい。したがって、第1クライアントデバイスに関連付けられたトークン128(1)は第2クライアントデバイス108(2)に関連付けられたトークン128(2)とは異なってもよく、第3クライアントデバイス108(3)に関連付けられたトークン128(3)は、トークン128(1)および128(2)と異なってもよい。各トークン128はサービスコンピューティングデバイス102と各クライアントデバイス108との間で(例えば、クライアントデバイス108に関連するユーザアカウントに基づいて)定義される、ファイルシステムなどの特定のストレージセットの変更を追跡するためのカーソルとして働くことができる。
ファイルシステム124は、特定のクライアントデバイス108に対してプライベートであり得るプライベートファイルシステム、および/または複数のクライアントデバイス108間で共有され得る共有ファイルシステムを含んでもよい。各ユーザは、それぞれのユーザに関連する複数のクライアントデバイスにわたって使用され得るプライベートファイルシステムを有していてもよい。プライベートファイルシステムは、典型的にはそれぞれのユーザによってのみアクセスされてもよい。さらに、一部のユーザは、1つまたは複数の共有ファイルシステムのメンバであってもよく、それらのファイルシステム内のファイルを、同じ1つまたは複数の共有ファイルシステムのメンバでもある他のユーザと共有してもよい。例えば、ユーザが属する共有ファイルシステムは、ユーザのプライベートファイルシステムの下のマウントポイントにマウントされてもよい。
各クライアントデバイス108は、そのそれぞれのトークン112を使用して、ファイルシステム124内のファイルに対する更新または他の変更など、ファイルシステムイベントの更新を受け取ってもよい。サービスコンピューティングデバイス102はファイルシステムデータベース116を介してクライアントデバイス108のファイルシステム124を追跡してもよく、ファイルシステムデータベース116は、ファイルシステム124および関連付けられたクライアントデバイス108に関する情報を維持するための任意のタイプのデータ構造としてもよい。例えば、ファイルシステムデータベース116は、特定のユーザ110の特定のユーザアカウントおよび関連付けられたログイン証明書を、特定のそれぞれのファイルシステム124に関連付けてもよい。サービスコンピューティングデバイス102によって受信されたファイルシステム124に対する変更は、サーバプログラム118および/またはトランザクションクエリエンジン112に、クライアントデバイス108におけるそれぞれのファイルシステム124に対する更新を追跡するために、トランザクションクエリエンジン112によって使用されるトランザクションログ130を特定のファイルシステムに対する変更により更新させるようにしてもよい。
図1の例では、第1ファイルメタデータ136および第1ファイルコンテンツ138を含む第1ファイル134と、第2ファイルメタデータ142および第2ファイルコンテンツ144を含む第2ファイル140とがあると仮定する。さらに、ファイル134、140のメタデータ136、142は説明の便宜上、この例ではそれぞれファイルコンテンツ138、144と共に格納されているように示されているが、実際にはメタデータ136、142の少なくともいくつかはファイルが存在するファイルシステム124のデータ構造に格納されていてもよく、したがって、ファイルコンテンツとは別の格納場所に格納されてもよい。別の代替として、少なくともいくつかのメタデータは、別個のメタデータデータベース(図1には図示せず)に格納されてもよい。
この例では第1ファイル134が第1ユーザ110(1)および第2ユーザ110(2)によって共有される共有ファイルシステムに含まれる共有ファイルであってもよく、第2ファイルは第1ユーザ110(1)と共有されない第2ユーザ110(2)のプライベートファイルシステムに含まれるプライベートファイルであってもよい。さらに、各クライアントデバイス108は、あるファイルがスタブファイルとして維持され、スタブファイルのメタデータのみがローカルストレージ126に格納され、ファイルのファイルコンテンツがネットワークストレージ104に格納され、ある他のファイルがファイルメタデータおよびファイルのファイルコンテンツの両方と共にローカルストレージ126に格納されるように指定するストレージ管理ポリシー(図1には図示せず)を有してもよい。例えば、ユーザが頻繁にアクセスする可能性が高いファイルはローカルストレージ126に格納されてもよく、一方、ユーザがまれにしかアクセスしない可能性が高いファイルはファイルのメタデータのみがローカルに格納されるようにスタブされてもよい。
場合によっては、スタブデータ構造が各スタブファイルの他のメタデータに加えて、ローカルストレージ126に格納されてもよい。図2に関して以下でさらに説明するように、スタブデータ構造は、最新のファイルコンテンツのハッシュ、ファイルのコンテンツがローカルストレージに存在するかどうかの示唆、およびソフトウェアバージョン情報など、特定のファイルに関連する追加のメタデータを含んでもよい。この例では、第1ファイル134が第1および第3クライアントデバイス108(1)および108(3)上のスタブファイルとして維持され、第1ファイルは第2クライアントデバイス108(2)上のファイルコンテンツとともに完全に維持される。したがって、第1ファイル134のいくつかのメタデータを含むスタブデータ構造146は第1クライアントデバイス108(1)および第3クライアントデバイス108(3)のローカルストレージ126に格納されている一方、第1ファイル134のコンテンツ138は第2クライアントデバイス108(2)のローカルストレージ126に格納されている。
同様に、第2ファイル140は、第3クライアントデバイス108(3)上のスタブファイルとして維持されている。したがって、第2ファイル140のいくつかのメタデータを含むスタブデータ構造147は第3クライアントデバイス108(3)のローカルストレージ126に格納されている、一方、第2ファイル140のコンテンツ144はサービスコンピューティングデバイス102によって管理されるネットワークストレージ104に格納されている。
どのファイルをスタブファイルとして維持するか、およびどのファイルがファイルコンテンツをローカルに格納するかを決定するためのストレージ管理ポリシーは、ファイルシステム内の特定のフォルダまたはディレクトリに格納されているファイルに基づいて、管理者によってまたはデフォルトによって選択されているファイルまたはフォルダまたはディレクトリに基づいて、最近アクセスされたファイルに基づいて、ユーザによって選択されているファイルに基づいて、および/または様々な他の技法に基づいて決定されてもよい。場合によっては、制限された記憶容量を有するもの(例えば、ポータブルデバイス)などのいくつかのクライアントデバイス108について、ストレージ管理ポリシーは、指定されたファイルグループ、ファイルのタイプ、最近アクセスされたファイルなどを除いて、すべてのユーザファイルがスタブファイルとして格納されるように、デフォルト設定を有するようにしてもよい。さらに、場合によっては、大容量のワークステーションまたはデスクトップなどの他のタイプのクライアントデバイス108では、指定されたファイルサイズを超え、まれにしかアクセスされないファイルなど、特定のファイルだけをスタブファイルとして格納されるようにしてもよい。例えば、指定されたファイルサイズを超えるファイルが指定された期間アクセスされなかった後、ファイルのコンテンツはローカルストレージ126から削除され、ネットワークストレージ104でのみ維持されてもよく、一方、ファイルのメタデータはクライアントデバイス108のローカルストレージ126に維持され、且つ、本明細書の技術を使用して最新の状態に維持されてもよい。
場合によっては、クライアントアプリケーション120が、特定のファイル、特定のフォルダ、特定のディレクトリなどをユーザ指定することを可能にするために、ユーザインターフェースを提示するように構成されてもよく、これらは指定された期間の経過後にスタブされる、スタブされない、スタブされるなどである。例えば、デフォルトストレージ管理ポリシーは、ほとんどまたはすべてのファイルがスタブファイルとしてもよく、ユーザまたはシステム管理者が、スタブファイルではない特定のファイル、フォルダなどを指定してもよい。
データ同期サービス122はクライアントデバイス108上に構成されたファイルシステムに影響を及ぼすイベントの通知を受信するために、通知サービス114に登録するために各クライアントデバイス108上で実行されてもよい。クライアントデバイス108は、特定のクライアントデバイス108が登録したファイルシステム124に変更があった場合、通知サービス114によって通知されてもよい。いくつかの例では、HTTP(ハイパーテキスト転送プロトコル)サーバプッシュ技法またはHTTPロングポーリング技法を、クライアントデバイス108にそれぞれのファイルシステム124に対する変更を通知するために使用してもよい。
例えば、HTTPロングポーリングの場合、クライアントデバイス108は、サービスコンピューティングデバイス102が直ちに応答しない可能性があることを予想して、HTTP/S(セキュアHTTP)要求をサービスコンピューティングデバイス102に定期的に送信してもよい。特に、サービスコンピューティングデバイス102が要求が受信されたときにクライアントデバイス108のための新しい情報を有さない場合、空の応答を送信するのではなく、サービスコンピューティングデバイス102は、要求を開いたままにして、要求の対象であるファイルシステム124のいずれかへの変更を待つようにしてもよい。サービスコンピューティングデバイス102が対応するファイルシステムに対する変更の指示を受信した後、通知サービス114は直ちに、そのファイルシステムに対して登録されたクライアントデバイス108にHTTP/S応答を送信し、オープンHTTP/S要求を完了してもよい。通知サービス114からHTTP/S応答を受信すると、クライアントデバイス108は任意の追加のファイルシステム変更の任意の後続のプッシュ通知を受信するように、サービスコンピューティングデバイス102に別のHTTP/S要求を発行するように構成されてもよい。さらに、クライアントデバイス108は更新の詳細を受信するために、以下でさらに説明するように、トランザクションクエリエンジン112に要求を発行してもよい。
さらに、または代替として、クライアントデバイス108から通知サービス114への要求は、クライアントに対して登録された特定のファイルシステムの変更を追跡するためのカーソルとして働くトークンを含んでもよい。トークンは、クライアントがトランザクションクエリエンジン112から更新情報を受信したファイルシステムおよび最新のファイルシステムトランザクションを識別してもよい。いくつかの例では、トークンはトランザクションクエリエンジン112によってクライアントデバイス108に以前に提供されたトークン128と同じであってもよく、他の例ではトークンが単に、ファイルシステム識別子と、クライアントデバイスによって受信された最後のトランザクション番号とを含んでもよい。したがって、各クライアントデバイス108は、それぞれのトークンに基づいて、どのファイルシステムトランザクションがクライアントデバイス108によって見られ、同化されたかを追跡することができる。通知サービス114がクライアントデバイス108からトークン128を受信すると、通知サービス114は、識別されたファイルシステムに対応するトランザクションログ130をチェックして、トークン128に列挙されたトランザクションよりも最近のトランザクションがトランザクションログ130にあるかどうかを判定してもよい。トークン128の中よりも最近のトランザクションがトランザクションログにある場合、通知サービス114は、ファイルシステムに変更があったことを示す応答をクライアントデバイス108に送信してもよい。さらに、通知サービス114によって使用されるトークンがトランザクションクエリエンジン112によって使用されるトークン128と異なる場合、通知サービスはファイルシステムに対する変更に基づいてトークンを更新してもよく、クライアントデバイスが通知サービス114にクエリを行う次のときに使用するために、更新されたトークンをクライアントデバイス108に送信してもよい。いずれの場合も、トークン交換を使用して、クライアントデバイス108は、クライアントデバイスが関心を有するファイルシステムに何らかの変更があったときに通知を受けてもよい。
したがって、上述の技法または他の技法を使用して、特定のファイルシステム内のファイルが作成、変更、または削除されると、通知サービス114は、サービスコンピューティングデバイス102で特定のファイルシステムへの変更が受信されたことを示すファイルシステム変更通知148を1つまたは複数の登録済みクライアントデバイス108に送信することができる。上述のように、いくつかの例では、ファイルシステム変更通知148が更新された通知トークンを含んでもよい。例えば、通知サービス114はファイルシステムデータベース116を参照して、どのクライアント108がどのファイルシステムに対する変更通知を待っているかを判定してもよく、ファイルシステムに対する変更が受信されたクライアントデバイス108のみにファイルシステム変更通知148を向けてもよい。さらに、いくつかの例では通知サービス114が変更通知148において、特定のファイルシステムに変更があったことを示してもよいが、通知を引き起こした実際の変更が何であるかを報告しなくてもよい。
通知サービス114がクライアントデバイスのファイルシステムに未処理の変更があることを示すファイルシステム変更通知148を送信すると、それに応答して、対象のクライアントデバイス108のデータ同期サービス122は、特定の変更のリストを要求する要求をトランザクションクエリエンジン112に送信するように構成してもよい。トランザクションクエリエンジン112はトランザクションログ130から、および/またはストレージ104から直接、情報を決定してもよく、特定の変更のリストを、更新されたトークン128と共に要求側のクライアントデバイス108に送信することができる。例えば、トランザクションクエリエンジン112はトークン128を使用して、以下でさらに説明するように、トークン128に含まれるトランザクション識別子に基づいて、対応するファイルシステムのイベントを追跡してもよい。
通知サービス114からファイルシステム変更通知を受信すると、クライアントデバイス108上のデータ同期サービス122は、要求150と共にクライアントデバイスの現在のトークン128をサービスコンピューティングデバイス102に送信してもよい。トランザクションクエリエンジン112はトークンと、ファイルシステムに対する変更の要求150を受信し、受信したトークンに含まれる情報に基づいて、クライアントデバイスのトークンが最後に更新されてから1つまたは複数の指定されたファイルシステムで発生した変更を返してもよい。これにより、クライアントデバイス108は、クライアントデバイスが以前に認識していないイベントのみを処理することができる。データ同期サービス122は、クライアントデバイス108上のローカル構成に基づいて、トランザクションクエリエンジン112によって報告された変更のリストを処理する。この処理は、ミラーリングされたファイル構成のためのファイルコンテンツをダウンロードすること、スタブファイル構成のためのスタブメタデータを作成または更新すること、または特定のファイルがストレージ104から除去された場合にデータのローカル表現を完全に除去することを含んでもよい。
ユーザまたはアプリケーションが第1クライアントデバイス108(1)上の第1ファイル134などのスタブファイルであるファイルのコンテンツにアクセスしようと試みる場合、クライアントアプリケーション120は、アクセス要求を傍受し、要求されたファイルのコンテンツ138がローカルに維持されていないと判定し、コンテンツ138の要求をサービスコンピューティングデバイス102に送信するオペレーティングシステムレベルのコンポーネントを含んでもよい。一例として、クライアントデバイス108がWINDOWSを使用している場合は、クライアントアプリケーション120を含むことができるか、または使用することができるか スタブされたファイルに向けられたファイルアクセス要求を傍受するように構成された、WINDOWSファイルシステムフィルタドライバを含む、または採用してもよい。ファイルシステムフィルタドライバは、1つまたは複数のファイルシステムまたはファイルシステムボリュームのファイル操作をフィルタすることができるカーネルモードコンポーネントであってもよい。同様のオペレーティングシステムレベルのファイル操作傍受技法を、異なるオペレーティングシステムを採用しているクライアントデバイス108上で使用してもよい。
スタブファイルコンテンツにアクセスする要求が傍受されると、クライアントアプリケーションコンポーネントは、要求をサービスコンピューティングデバイス102にリダイレクトしてもよい。サービスコンピューティングデバイス102上のサーバプログラム118は、ストレージ104からファイルコンテンツを取り出し、そのファイルコンテンツを要求側のクライアント108に送信してもよい。場合によってはクライアントアプリケーション120は、サービスコンピューティングデバイス102と通信するためにデータAPI154を採用してもよく、サービスコンピューティングデバイスはデータAPI154に従って応答してもよい。上述のように、いくつかの例では、データAPI154はREST APIであってもよい。ファイルコンテンツがサービスコンピューティングデバイス102から受信されると、ファイルシステムフィルタドライバは、あたかもファイルコンテンツがローカルストレージにすでに維持されているのと同様な方法で、クライアントデバイス108上の要求アプリケーションおよび/またはユーザに応答してもよい。
図1の例では、第2クライアント110(2)が、クライアントアプリケーション112、第3クライアントデバイス108(3)上のオペレーティングシステム(図1には図示せず)、または第3クライアントデバイス108(3)上のアプリケーション(図1には図示せず)を使用して、第1ファイル134にアクセスすると仮定する。クライアントアプリケーション112は、上述したように、サービスコンピューティングデバイス102から第1ファイルのファイルコンテンツ138を取得してもよい。さらに、第2ユーザ110(2)が第1ファイルに変更を行い、その変更をローカルストレージ126上のローカル第1ファイルに保存し、第1ファイル134を閉じると仮定する。第1ファイル134への変更は、第3クライアントデバイス108(3)上のデータ同期サービス122によってサービスコンピューティングデバイス102に同期させてもよい。例えば、更新されたファイルコンテンツおよびメタデータはサーバプログラム118に送信されてもよく、サーバプログラム118は更新されたファイルコンテンツおよびメタデータをストレージ104に格納してもよい。さらに、サーバプログラム118はトランザクションログ130内の共有ファイルシステムのトランザクション識別子をインクリメントし、共有ファイルシステム内のファイルに対する変更の詳細を含めることなどによって、第1ユーザ110(1)および第2ユーザ110(2)によって共有されている共有ファイルシステムに対する変更を示すトランザクションログ130を更新してもよい。
ファイルシステム変更情報の受信に応答して、サービスコンピューティングデバイス102上の通知サービス114は、第1クライアントデバイス108(1)および第2クライアントデバイス108(2)が登録されているファイルシステムデータベース116から、共有ファイルシステムの変更通知を受信することを決定してもよい。したがって、通知サービス114は、ファイルシステム変更通知148を第1クライアントデバイス108(1)および第2クライアントデバイス108(2)のそれぞれに送信してもよい。これに応答して、第1クライアントデバイス108(1)および第2クライアントデバイス108(2)のそれぞれは、共有ファイルシステムへの変更を求めるそれぞれの要求150と共に、その現在のトークン128(1)および128(2)を送信してもよい。
これに応答して、トランザクションクエリエンジン112は、受信したトークン128(1)および128(2)内のトランザクション識別子をトランザクションログ130内の最新のトランザクション識別子と比較し、第1クライアントデバイス108(1)および第2クライアントデバイス108(2)のそれぞれで、どのトランザクションが更新されるべきかを決定してもよい。この例では、第1のファイル134に対する1つの変更のみがあると仮定する。したがって、トランザクションクエリエンジン112は第1クライアントデバイス108(1)および第2クライアントデバイス108(2)のそれぞれに、変更のリスト152とともに修正されたトークンを送信することができる。
したがって、第1ファイル134のスタブファイルのみが第1クライアントデバイス108(1)のローカルストレージ126上に維持されるので、第1クライアントデバイス108(1)上のデータ同期サービス122は、メタデータ同期156のみを実行すればよい。さらに、ファイルコンテンツ138が第2クライアントデバイス108(2)上のローカルストレージ126に格納されるので、第2クライアントデバイス108(2)上のデータ同期サービス122は、メタデータ同期156とコンテンツデータ同期158との両方を実行すればよい。
したがって、本明細書の実施形態では、クライアントデバイス108は、特定のクライアントデバイス108に関連するユーザアカウントおよびログイン証明書に基づいて、特定のファイルシステムへのアクセスが割り当てられる。例えば、各ユーザアカウントは少なくとも1つのプライベートファイルシステム(例えば、特定のユーザアカウントに関連付けられたデバイスのみがファイルシステムを読み取る/書き込むことを許可される)または共有(例えば、複数のユーザアカウントに関連付けされた複数のデバイスがファイルシステムを読み取る/書き込むことを許可される)と対応付けられてもよい。この情報はファイルシステムデータベース116内で維持し、追跡してもよい。
場合によっては、サービスコンピューティングデバイス102がサービスコンピューティングデバイス102に登録されたそれぞれのファイルシステムごとにそれぞれのトランザクションログ130を格納することができる。ファイルシステムの各ファイルシステム変更イベント(作成、削除、修正)はそのファイルシステムのトランザクションログ130内に対応するエントリを有することができ、それに関連する対応するトランザクション識別子を有することができる。例えば、トランザクション識別子は、トランザクションログ130が更新されると、サーバプログラム118および/またはトランザクションクエリエンジン112によって生成されてもよい。
さらに、上述のように、各クライアントデバイス108は、どのファイルがスタブファイルであるか、どのファイルがサービスコンピューティングデバイス102からミラーリングされているか等を示す、関連付けられたストレージ管理ポリシー(図1には図示せず)を有してもよい。ストレージ管理ポリシーに基づいて、クライアントデバイスは、ローカルストレージ126上のストレージ要件がストレージ空間を節約するために最小限に抑えられるように、データ同期サービス122がローカルファイルをスタブするように構成してもよい。例えば、本明細書のスタブデータ管理技法はすべてのデータが常にローカルストレージ内に常駐することを可能にすることなく、ユーザが幅広いデータアレイにアクセスすることを可能にするために、制限されたストレージ容量を有するクライアントデバイス108上で使用してもよい。データ同期サービス122がストレージ管理ポリシーに基づいてファイルまたは他のデータをスタブすることを決定すると、データ同期サービス122は、まず、サービスコンピューティングデバイス102がローカルストレージ126から削除されるべきファイルコンテンツの最新のフルコピーを受信したことを保証してもよい。次いで、データ同期サービス122は除去されたコンテンツデータを表すために、ローカルファイルシステム内にスタブファイルデータ構造を含むスタブファイルを作成することができる。
さらに、クライアントデバイス108は各ファイルについて、そのファイルシステム内にメタデータ値のセット(例えば、ファイルコンテンツのファイルサイズ、ファイルコンテンツが最後に変更された時間、ファイルコンテンツのファイルパスなど、本明細書の他の箇所で列挙されているもの)を維持することができ、これは、いくつかの例では第1ファイル134のメタデータ136に対応していてもよい。このメタデータは、スタブデータ構造自体が小さなプレースホルダに過ぎず、ファイルの実際のコンテンツがクライアントデバイス108上に存在しない場合であっても、クライアントデバイス108上のオペレーティングシステムおよび/またはユーザにファイルデータを表すために使用してもよい。いくつかの例では、メタデータの記憶位置が実装に依存してもよい。例えば、メタデータ値はファイルシステム自体内に格納されてもよく、または他の例では別個のメタデータデータベース内に維持されてもよい。
本明細書の例では、クライアントデバイス108(1)および108(3)は、スタブデータ構造146をその対応するメタデータ136のセットに関連付けて、第1ファイル134の仮想表現を提示してもよい。ファイルのデータは、ローカルイベントまたはリモートイベント(例えば、サービスコンピューティングデバイス102または別のクライアントデバイス)に少なくとも部分的に基づいて、クライアントデバイス108によってスタブされ得る。例えば、クライアントデバイス108上のデータ同期サービス122は、クライアントデバイス108に関連付けられたストレージ管理ポリシーに基づいてローカルディスク空間を解放するために、ローカルに格納されたファイルをスタブファイルに変換することを決定してもよい。さらに、別の例として、共有フォルダに参加する場合、クライアントデバイス108上のデータ同期サービス122はファイルコンテンツがクライアントデバイス108上で実行されるユーザまたはプロセスによって明示的に要求されない限り、ファイルコンテンツを転送するための帯域、およびファイルコンテンツを保持するためのローカルディスク空間のコストが発生しないように、他のクライアントデバイスで最初に実行されるファイル作成をスタブファイルとして表すことを決定してもよい。
さらに、第1ユーザおよび第2ユーザの両方が同時に同じファイルを更新している場合、最初に変更を保存するユーザは他のユーザの前に、それぞれのクライアントデバイス108によってサービスコンピューティングデバイス102にプッシュされた変更を有してもよい。サービスコンピューティングデバイス102は、更新されたファイルにバージョン番号を割り当ててもよい。その後、他のユーザが変更を保存する場合、サービスコンピューティングデバイス102は、関連するファイルバージョン番号に基づいて、ファイルが以前のバージョンから既に更新されていることを検出してもよい。この場合、他のユーザはファイルがすでに変更されており、他のユーザによって行われた変更が、更新されたオリジナルのファイルとは別の異なるファイルを使用して保存されていることが通知されてもよい。次いで、他のユーザは、既に更新されたバージョンなどに変更をマージするか、さもなければ組み込むかを決定することによって、競合を解決してもよい。
図2は、いくつかの実施形態によるスタブデータ構造200の例を示す。例えば、スタブデータ構造200は、上述の第1のファイル134のスタブデータ構造146、または本明細書で説明する他のスタブデータ構造に対応してもよい。場合によってはスタブデータ構造200がファイルコンテンツの代わりにクライアントデバイスのローカルストレージ内のファイルシステムに格納されたスタブファイルメタデータの実際のデータオブジェクトであるが、各スタブファイルの他のメタデータはファイルが格納されているファイルシステムによって、または別個のメタデータデータベース内に維持してもよい。例えば、ファイルサイズ、ファイル修正時間、ファイルパス、ファイルバージョンなどのファイルメタデータのメタデータ値は任意の他の非スタブファイルの場合と同様に、ファイルシステムによって維持してもよい。
この例では、スタブデータ構造200がソフトウェアバージョン0202、コンテンツデータ状態インジケータ204、およびファイルコンテンツハッシュ206を含む。ソフトウェアバージョンインジケータ202はスタブデータ構造200を生成するために使用されたソフトウェアのバージョン(例えば、クライアントアプリケーションおよび/またはデータ同期サービスのバージョン)を示してもよく、この情報は、スタブデータ構造200と将来のソフトウェアバージョンとの互換性を維持するために使用してもよい。さらに、コンテンツデータ状態インジケータ204は、スタブに対応するファイルのファイルコンテンツがローカルストレージに現在位置しているか、ネットワークストレージ104にリモートに現在格納されているかを示してもよい。例えば、コンテンツデータ状態は、1つまたは複数のフラグ、ダーティビットなどによって示されてもよい。さらに、ファイルコンテンツハッシュ206は、スタブファイルのファイルコンテンツの最も最近更新されたバージョンのハッシュであってもよい。例えば、ファイルコンテンツハッシュ206はファイルコンテンツが検索されるときにスタブデータ構造が正しいファイルコンテンツに関連付けられていることを検証するために使用されてもよく、および/または名前を誤ったスタブなどのために対応するコンテンツを見つけるために使用されてもよい。SHA−1、SHA−3、MD−5などの任意の適切なハッシュ関数を使用して、ファイルコンテンツからファイルコンテンツハッシュ206を生成してもよい。
図3は、いくつかの実施形態によるトークンデータ構造300の例を示す。トークンデータ構造300は、いくつかの実施形態に係るクライアントデバイスにおけるファイルシステム(複数可)に対する更新のリストと共にトランザクションクエリエンジン112によって発行されてもよく、上述のトークン128に対応してもよい。この例では、トークンデータ構造は、第1ファイルシステム識別子302(1)、第2ファイルシステム識別子302(2)などの1つまたは複数のファイルシステム識別子302を含んでもよい。トークンデータ構造300に含まれる各ファイルシステム識別子302について、トークンデータ構造300は、関連付けられたマウントポイント情報304および関連付けられたトランザクション識別子306を含んでもよい。例えば、第1ファイルシステム識別子302(1)は、第1マウントポイント情報304(1)および第1トランザクション識別子306(1)に関連付けられ、第2ファイルシステム識別子302(2)は、第2マウントポイント情報304(2)および第2トランザクション識別子306(2)に関連付けられている。
例えば、ファイルシステム識別子302は、対応するクライアントデバイスによって維持されるファイルシステムを示してもよい。マウントポイント情報304はファイルシステムに格納されているどの情報(例えば、フォルダ、ファイルなど)が他のクライアントデバイスと共有されている情報であり、どの情報がクライアントデバイスのプライベート情報であるかを示すために使用されてもよい。さらに、トランザクション識別子306は、ファイルシステム内の各トランザクションを一意に識別するか、または個別に区別する情報を含むことができるトランザクション識別子情報を含んでもよい。一例として、トランザクション識別子には、トランザクションが上述のトランザクションログに入力される際にトランザクションに順次割り当てられる番号であってもよい。さらに、上述のように、トランザクションクエリエンジン112は、クライアントデバイスからの以前に発行されたトークンの受信に応答して、新たに生成されたトークンをクライアントデバイスに送信してもよい。
図4〜11は、いくつかの実装によるプロセス例を示す流れ図である。プロセスは一連の動作を表す論理流れ図におけるブロックの集合として示されており、これらの動作の一部または全部は、ハードウェア、ソフトウェア、またはこれらの組み合わせで実装してもよい。ソフトウェアの文脈では、1つまたは複数のプロセッサによって実行されると、列挙された動作を実行するようにプロセッサをプログラムする、1つまたは複数のコンピュータ可読媒体上に格納されたコンピュータ実行可能命令を表してもよい。一般に、コンピュータ実行可能命令は、特定の機能を実行するか、または特定のデータタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。ブロックが説明される順序は、限定として解釈されるべきではない。任意の数の説明されたブロックはプロセス、または代替プロセスを実施するために任意の順序で、および/または並列に組み合わせることができ、ブロックのすべてが実行される必要はない。議論の目的のために、プロセスは本明細書の例で説明される環境、フレームワーク、およびシステムを参照して説明されるが、プロセスは多種多様な他の環境、フレームワーク、およびシステムで実装されてもよい。
図4は、いくつかの実施形態による、クライアントデータを更新するための例示的なプロセス400を示す流れ図である。場合によっては、プロセス400がクライアントデバイスによって部分的に実行されてもよく、サービスコンピューティングデバイスまたは他の適切なコンピューティングデバイスによって部分的に実行されてもよい。
402において、クライアントデバイスは、サービスコンピューティングデバイス上の通知サービスに少なくとも1つのファイルシステムを登録してもよい。例えば、クライアントデバイスは、ユーザログイン証明書などを介して、クライアントデバイスに関連付けられたユーザアカウントに関連付けられたプライベートファイルシステムを登録してもよい。さらに、いくつかの例では、1つまたは複数の共有ファイルシステムを、ユーザアカウントおよびユーザのプライベートファイルシステムに関連付けてもよい。
404において、クライアントデバイスは定期的に、サービスコンピューティングデバイス上の通知サービスに、ファイルシステムに対する更新の要求を送信してもよい。いくつかの例では、更新要求を送信するときに、クライアントデバイスは、HTTPロングポーリングまたは他の適切な技法を使用してもよい。さらに、場合によってはクライアントデバイスは、更新要求を伴うトークンを含んでもよく、トークンは、少なくとも、クライアントデータが更新された最新のファイルシステムトランザクションのファイルシステム識別子およびトランザクション識別子を含んでもよい。
406において、サービスコンピューティングデバイス上の通知サービスはクライアントデバイスから要求を受信してもよく、識別されたファイルシステムに対する変更をチェックしてもよい。例えば、通知サービスは、識別されたファイルシステムのトランザクションログを参照して、トークン内のトランザクション識別子がトランザクションログ内の最新のトランザクション識別子と同じであるかどうかを判定してもよい。
408で、トランザクション識別子が同じである場合、保留中の変更はなく、通知サービスは更新がないことを示す応答を送信してもよく、プロセスは、ブロック404に戻ってもよい。さらに、場合によっては応答がトークンを含んでもよく、トークンはクライアントデバイスから受信されたトークンと同じであってもよい。一方、トランザクション識別子が同じでない場合、保留中の変更があり、通知サービスはファイルシステム変更があることを示す応答を送信してもよく、プロセスは、ブロック410に進んでもよい。いくつかの例では、応答がトランザクションログから取得された更新されたトランザクション識別子を有する更新された通知トークンを含んでもよい。
410において、ファイルシステムに変更があるという指示の受信に応答して、クライアントデバイスは、ファイルシステムの変更を求める要求をトランザクションクエリエンジンに送信してもよい。要求は、ファイルシステムデータが最後に更新されたときにトランザクションクエリエンジンから以前に受信されたトークンを含んでもよい。例えば、トークンは図3を参照して上述したように、ファイルシステム識別子、マウントポイント情報、及びトランザクション識別子を含んでもよい。クライアントデバイスがトランザクションクエリエンジンに照会するプロセスの詳細については、図5を参照してさらに説明する。
412で、クライアントデバイスはトランザクションクエリエンジンから応答を受信し、処理すべき変更がさらにあるかどうかを判定してもよい。例えば、クライアントデバイスは、まだ処理されていない、トランザクションクエリエンジンから受信した応答にリストされた変更があるかどうかを判定してもよい。処理に変更がなければ、処理はブロック404に進む。一方、プロセスに対する変更がさらにある場合、プロセスはブロック414に進む。
414で、クライアントデバイスは、ファイルシステムに対する変更が作成イベントであるか更新イベントであるかを判定してもよい。変更が作成または更新イベントでない場合、その変更が削除イベントであることを示し、プロセスはブロック416に進む。一方、変更が作成イベントまたは更新イベントである場合、プロセスはブロック418に進む。
416で、変更が削除イベントであると判定することに基づいて、プロセスは、データのローカル表現を削除してもよい。例えば、ファイルの場合、クライアントデバイスは、ローカルファイルシステムから対応するファイルを削除してもよい。次いで、プロセスはブロック412に戻り、トランザクションクエリエンジンによって提供された変更のリスト内に、実行するためのさらなる変更が存在するかどうかを判定してもよい。
418で、変更が作成イベントまたは更新イベントである場合、クライアントデバイスは、スタビングポリシーがデータに適用されるかどうかを判定してもよい。例えば、クライアントデバイスは、ファイルがクライアントデバイスにおいてスタブファイルとして維持されるか、またはローカルに格納されたファイルコンテンツを含む完全なファイルとして維持されるかを決定してもよい。クライアントデバイスは、スタビングが特定のデータに適用されるかどうかに関する決定を行うときに、クライアントデバイスのために確立されたストレージ管理ポリシーを参照してもよい。スタビングがデータに適用される場合、プロセスはブロック422に進む。一方、スタビングがデータに適用されない場合、プロセスはブロック420に進む。
420で、データがクライアントデバイスでスタブされていない場合、クライアントデバイスは、ファイルの更新されたファイルコンテンツをダウンロードする要求をサービスコンピューティングデバイスに送信してもよい。例えば、クライアントデバイスは対応するファイルの更新されたファイルコンテンツを要求するために、サービスコンピューティングデバイス上のサーバプログラムに要求を送信してもよい。ファイルのメタデータは、クライアントデバイスによってローカルにダウンロードおよび/または作成/更新してもよい。
422において、データがクライアントデバイスにおいてスタブファイルとして維持されている場合、クライアントデバイスは、トランザクションクエリエンジンによって提供される情報に基づいてスタブファイルのメタデータを追加および/または更新してもよい。したがって、スタブファイルがクライアントデバイス上にまだ存在しない場合、クライアントデバイスはスタブファイルのスタブデータ構造を追加し、スタブファイルのスタブファイルメタデータをファイルシステムまたは他のメタデータ記憶位置(たとえば、別個のメタデータデータベース)に追加してもよい。あるいは、スタブ・ファイルが既に存在する場合、クライアントデバイスはスタブファイルメタデータを更新してもよい。いずれのイベントの場合も、トランザクションクエリエンジンによって提供される変更情報は、ファイルサイズ、ファイルパス、実行されたイベントのタイプ、修正時間、ファイルバージョン、オブジェクトタイプなどのメタデータ値だけでなく、ファイルのコンテンツの最新のハッシュを含んでもよい。上述のように、クライアントデバイスはファイルサイズ、ファイルパス、イベントタイプ、修正時間、およびファイルバージョンなどのメタデータ値を、クライアントデバイス上のファイルシステムデータ構造または別個のメタデータデータベースに格納してもよく、一方、ファイルコンテンツのハッシュはクライアントデバイス上のローカルストレージに格納されたスタブデータ構造に、またはそれに関連付けて格納してもよい。
図5は、いくつかの実施形態に係る、クライアントがファイルシステムに対する変更についてトランザクションクエリエンジンに問い合わせる例示的なプロセス500を示す流れ図である。場合によっては、プロセス500は、クライアントデバイスによって部分的に実行されてもよく、サービスコンピューティングデバイスまたは他の適切なコンピューティングデバイスによって部分的に実行されてもよい。
502において、クライアントデバイスは、サービスコンピューティングデバイス上の通知サービスから、クライアントデバイスに関連付けられたファイルシステムに変更があるという指示を受信してもよい。例えば、ファイルシステム変更の通知は、クライアントデバイスによってサービスコンピューティングデバイスに送信された要求に応答するなど、上述の技法のいずれかに基づいて、通知サービスから受信いてもよい。代替的に、他の例では、通知サービスを省いてもよく、クライアントデバイスはトランザクションクエリエンジンに更新要求を定期的に送信してもよく、最も最近に受信されたトークンを要求に含めてもよい。
504において、クライアントデバイスは、ファイルシステムに対する変更の要求をサービスコンピューティングデバイスに送信してもよい。クライアントデバイスによって送信される要求は、ファイルシステム識別子と、クライアントデバイスデータが最も最近更新されたトランザクションのトランザクション識別子とを有するトークンを含んでもよい。さらに、本明細書のいくつかの例では、トークンは、たとえば、クライアントのデータのうちのどれがプライベートデータであり、どれが共有データであるかを示すマウントポイント情報を含んでもよい。
506において、クライアントデバイスからの要求の受信に応答して、サービスコンピューティングデバイス上のトランザクションクエリエンジンは、クライアントデバイスから受信されたトークンに含まれるトランザクション識別子によって指定されたトランザクションの後に発生した、指定されたファイルシステムに対する更新のリストを決定してもよい。
508において、サービスコンピューティングデバイス上のトランザクションクエリエンジンは、ファイルシステムに対する変更のリストおよび/または対応するトランザクションIDを有する更新されたトークンをクライアントデバイスに送信してもよい。例えば、ファイルシステムに対する全ての変更が既にクライアントデバイスに送信されている場合、トランザクションクエリエンジンは最新のトランザクション識別子を含み、追加の変更のリストを含まないトークンを返すだけでよい。
510において、クライアントデバイスは、変更のリストに基づいてクライアントデバイス上のデータを同期させてもよい。同期化の詳細は、図4に関して上述されている。
512で、クライアントデバイスは、トランザクションIDを追跡して、別の要求を送信するかどうかを決定してもよい。例えば、トランザクションクエリエンジンから受信された最新のトークン内のトランザクション識別子が以前に受信されたトークンのトランザクション識別子と一致し、変更のリストが同じであるか、または変更のリストが含まれていない場合、クライアントデバイスは最新である。
514で、クライアントデバイスは、現在のトークン内のトランザクションIDを直前に受信したトークン内のトランザクションIDと比較することに基づいて、トランザクションクエリエンジンに別の要求を送信するかどうかを決定してもよい。トランザクションIDが同じである場合、プロセスはブロック516に進んでもよい。一方、トランザクションIDが異なる場合、プロセスはブロック504に進み、別の要求をトランザクションクエリエンジンに送信してもよい。
516で、クライアントデバイスデータは最新であり、プロセスは図4のブロック404に戻り、ファイルシステムへの追加の変更を待つてもよい。上述したように、トランザクションクエリエンジンから新しいトークンとともに変更のバッチを送信し、クライアントデバイスによって新しいトークンをトランザクションクエリエンジンに戻し、トランザクションクエリエンジンから、次の新しいトークンと増分されたトランザクション識別子とともに、変更の次のバッチを受信する処理は、それ以上更新がなくなるまで繰り返してもよい。その時点で、トランザクションクエリエンジンは最新のトランザクションのトランザクションIDを有するトークンを送信してもよく、クライアントデバイスは、次のファイルシステム変更通知が通知サービスから受信されるまで、このトークンを保持してもよい。トランザクションクエリエンジン、トークン、およびクライアントデバイスの更新に関する追加の情報は2013年12月17日に出願された国際出願PCT/US2013/075855、および2016年2月29日に出願されたその米国国内段階出願第14/915,423号に含まれており、それらの全体が参照により本明細書に組み込まれる。
図6は、いくつかの実施形態に係る、スタブファイルまたは他のスタブデータオブジェクトのメタデータを作成および/または更新するための例示的なプロセス600を示す流れ図である。場合によっては、プロセス600は、クライアントデバイスまたは他の適切なコンピューティングデバイスによって実行されてもよい。
602において、図4のブロック418および422に関して上述したように、クライアントデバイスは、クライアントデバイスのデータ記憶ポリシーがデータオブジェクトがスタブファイルとして維持されるべきであること、およびスタブファイルのメタデータ情報がファイルシステムに対する変更に基づいて作成または更新されるべきであることを示すことを決定してもよい。一例として、データオブジェクトは、別のクライアントデバイス上で更新されたファイルであってもよい。
604において、クライアントデバイスは、ローカルスタブファイルがデータについて既に存在するかどうかを判定してもよい。そうであれば、プロセスはブロック608に進み、そうでなければ、プロセスはブロック606に進む。
606で、クライアントデバイスはデータのためのスタブデータ構造を作成し、データのためのスタブメタデータを作成してもよい。例えば、データオブジェクトが、新たに作成されたファイルなどのファイルシステムに新たに追加される場合、クライアントデバイスは新たなスタブファイルのための新たなスタブデータ構造を作成し、トランザクションクエリエンジンによって提供される情報から新たなスタブファイルのための新たなスタブファイルメタデータを決定してもよい。したがって、トランザクションクエリエンジンから受信された情報は、ファイルコンテンツのハッシュと、ファイル作成時間、ファイルサイズ、および/または他のファイルプロパティなど、新しく作成されたスタブファイルの他のメタデータ値とを含んでもよい。ファイルコンテンツのハッシュはスタブデータ構造に格納してもよく、一方、他のファイルメタデータはクライアントデバイス上のファイルシステムに、またはクライアントデバイス上のローカルストレージに維持される別個のメタデータデータベースに格納してもよい。
一方、608において、データオブジェクトがファイルシステム内に既に存在する場合、クライアントデバイスは、サービスコンピューティングデバイスとまだ同期されていないデータオブジェクトのローカルに格納されたデータがあるかどうかを判定してもよい。例えば、クライアントデバイスのユーザがデータオブジェクトに何らかの変更を行った場合、データオブジェクトがスタブ表現に変更される前に、変更がサービスコンピューティングデバイスと同期されない場合、これらの変更は失われる可能性がある。一例として、クライアントデバイス上のデータ同期サービスは、クライアントデバイスによって維持されるファイル同期情報を参照して、まだ同期されていないファイルコンテンツまたは他のデータコンテンツに対して何らかのデータ変更が行われたかどうかを判定してもよい。例えば、データ同期サービスは、どのデータがクライアントデバイスからサービスコンピューティングデバイスに同期されたかを示すファイル同期情報のデータベースまたは他のデータ構造を維持してもよい。ローカルデータがない場合、または、いずれかのローカルデータが既にサービスコンピューティングデバイスに同期されている場合、プロセスはブロック610に進む。一方、ローカルデータが存在し、サービスコンピューティングデバイスにまだ同期されていない場合、プロセスはブロック612に進む。
610において、ローカルデータが存在しないか、または任意のローカルデータがサービスコンピューティングデバイスにすでに同期されている場合、クライアントデバイスは、ファイルシステム内およびスタブファイルのスタブデータ構造内のスタブファイルメタデータを更新してもよい。データオブジェクトが完全に維持されたファイルからスタブファイルに変換されている場合、スタブデータ構造を作成してもよい。上述のように、クライアントデバイスはトランザクションクエリエンジンから受信した情報からコンテンツのハッシュおよび他の更新されたメタデータを決定してもよく、または最新のコンテンツがクライアントデバイス上に存在する場合、クライアントデバイスは、コンテンツを削除する前にコンテンツからハッシュを計算してもよい。
612において、サービスコンピューティングデバイスに同期されていないローカルデータがある場合、クライアントデバイスはスタブ処理を中止し、同期のためにローカル変更をサービスコンピューティングデバイスに送信してもよい。一例として、クライアントデバイスは図4および図5に関して上述したように、ファイルシステムに対する変更の次の更新中に、データオブジェクトのスタブ処理を再開してもよい。
図7は、いくつかの実施形態に係る、ファイルのためのスタブファイルを作成するための例示的なプロセス700を示す流れ図である。この例では、ファイルが例えば、クライアントデバイス上のプライベートファイルシステム内で作成され、サービスコンピューティングデバイスに同期されてもよい。上述のように、プライベートファイルシステムは、ユーザアカウントまたはユーザ識別子およびユーザログイン証明書に基づいて、クライアントデバイスに関連付けることができる。一例として、クライアントデバイスは、クライアントデバイスのストレージ管理ポリシーに基づいて、ローカルファイルをスタブファイルに変換することを決定してもよい。
702において、クライアントデバイスは、クライアントデバイスにおいて第1ファイルを作成してもよい。例えば、ユーザは、アプリケーションまたは他のプロセスを使用して、クライアントデバイスでファイルを作成してもよい。
704において、クライアントデバイスは第1ファイルがスタブファイルとして維持されるべきか、または完全に維持されたファイルとして維持されるべきかを決定するために、ストレージ管理ポリシーをチェックしてもよい。例えば、ストレージ管理ポリシーは、ファイルタイプ、ストレージ使用限度、ファイルストレージ位置、デフォルトポリシー、または上述の様々な他の考慮事項のいずれかに基づいて、どのファイルがスタブファイルであるかを示すようにしてもよい。
706で、クライアントデバイスは、ストレージ管理ポリシーの1つまたは複数の基準に基づいて、第1ファイルをスタブファイル候補として選択してもよい。
708において、クライアントデバイスは、第1のファイルのファイルコンテンツをサービスコンピューティングデバイスに同期させてもよい。例えば、クライアントデバイス上のデータ同期サービスはどのファイルがサービスコンピューティングデバイスに完全に同期されているか、およびどのファイルが同期されていないかを追跡するために、ファイル同期情報を維持してもよい。したがって、ファイル同期情報に基づいて、データ同期サービスはファイルをスタブファイルに変換する前に、最新のファイルコンテンツがサービスコンピューティングデバイスに同期されていることを保証することができ、その結果、ファイルコンテンツがファイルシステムから削除されたときに、ファイルコンテンツに対する任意の変更が失われない。
710で、クライアントデバイスは第1ファイルのメタデータを記録し、削除のために第1ファイルコンテンツにマークを付け、スタブデータ構造を作成してもよい。例えば、スタブデータ構造を作成するとき、クライアントデバイスは第1ファイルコンテンツを削除する前に第1ファイルコンテンツのハッシュを計算してもよく、ファイルサイズ、修正時間、パス、バージョン番号などの他のスタブファイルメタデータ値を決定してもよい。
712で、クライアントデバイスは、スタブファイルメタデータを使用して、第1ファイルのローカルオペレーティングシステムビューを提示して、第1ファイルの実際のファイルコンテンツの最新の表現を反映してもよい。例えば、ユーザがオペレーティングシステムウィンドウを開いてファイルシステム構造を見る場合、第1ファイルは第1ファイルがクライアントデバイス上に完全に維持されているのと同様な方法により、ファイルシステム構造内に表してもよい。
714で、クライアントデバイスは、第1ファイルのファイルコンテンツにアクセスするためのユーザ要求またはアプリケーション要求を受信してもよい。例えば、要求は、オペレーティングシステムを介して、またはクライアントデバイス上で実行されるアプリケーションを介して受信してもよい。
716において、クライアントデバイス上のクライアントアプリケーションは要求を傍受し、サービスコンピューティングデバイスからファイルコンテンツを取得してもよい。一例として、クライアントアプリケーションに関連するファイルシステムフィルタドライバまたは他のオペレーティングシステムレベルコンポーネントは、スタブファイルであるファイルに向けられたファイルアクセス要求を傍受するように構成してもよい。スタブファイルのコンテンツにアクセスする要求が傍受されると、クライアントアプリケーションコンポーネントは、要求をサービスコンピューティングデバイスにリダイレクトしてもよい。サービスコンピューティングデバイス上のサーバプログラムはネットワークストレージからファイルコンテンツを取り出し、そのファイルコンテンツを要求側クライアントデバイスに送信してもよい。場合によっては、クライアントアプリケーションがREST APIなどのデータAPIを使用して、サービスコンピューティングデバイスと通信してもよい。
718で、クライアントデバイスは、要求に応答してファイルコンテンツを提供してもよい。例えば、ファイルコンテンツがサービスコンピューティングデバイスから受信された場合、ファイルシステムフィルタドライバは、あたかもファイルコンテンツがクライアントデバイス上のローカルストレージに既に格納されているのと同様な方法により、クライアントデバイス上の要求アプリケーションおよび/またはユーザに応答してもよい。
図8は、いくつかの実施形態による、リモート更新に基づいてスタブファイル情報を更新するための例示的なプロセス800を示す流れ図である。場合によっては、プロセス800は、複数のクライアントデバイスにわたって共有ファイルシステムまたはプライベートファイルシステムが実装されている場合など、複数のクライアントデバイスが同じファイルにアクセスすることができる環境で実行してもよい。
802において、第1クライアントデバイスは、第1クライアントデバイスにおいて第1ファイルのためのスタブファイルを作成してもよく、第1ファイルの第1ファイルコンテンツは、その後、第2クライアントデバイスによってアクセスされてもよい。例えば、上述のように、第1クライアントデバイスはスタブデータ構造を生成し、第1ファイルのための他のスタブメタデータを取得または生成し、第1のクライアントデバイスから第1ファイルのファイルコンテンツを削除することによって、第1ファイルのためのスタブファイルを作成してもよい。
804において、第2クライアントデバイスは、第1ファイルを修正してもよい。例えば、第2クライアントデバイスは、第1ファイルのスタブファイルが第1クライアントデバイス上で作成されたか、または最後に更新されたときに、ファイルコンテンツの状態と比較して、第1ファイルのファイルコンテンツを変更してもよい。
806において、第2クライアントデバイスは、第2クライアントデバイスからサービスコンピューティングデバイスに、第1ファイルの修正を送信してもよい。例えば、第2クライアントデバイスはネットワークストレージに記憶するために、サービスコンピューティングデバイスに対して修正を同期させてもよい。
808において、サービスコンピューティングデバイス上の通知サービスは、第1ファイルが格納されているファイルシステムにファイルシステム変更を通知するクライアントデバイスを決定してもよい。例えば、通知サービスは、様々な異なるクライアントデバイスと様々な異なるファイルシステムとの間の関連付けをリストする、サービスコンピューティングデバイスに維持されるファイルシステムデータベースにアクセスしてもよい。
810において、第1クライアントデバイスは、第1ファイルを含むファイルシステムに対する変更があることを示すファイルシステム変更通知を通知サービスから受信してもよい。あるいは他の例では通知サービスを省いてもよく、クライアントデバイスはトランザクションクエリエンジンに変更要求を定期的に送信してもよい。
812で、通知の受信に応答して、第1クライアントデバイスは、ファイルシステム変更に関する情報の要求およびトークンをトランザクションクエリエンジンに送信してもよい。プロセスのさらなる詳細は例えば、図4および図5に関して上述されている。
814で、第1クライアントデバイスは、トランザクションクエリエンジンからの変更情報および新しいトークンを受信してもよい。例えば、変更情報は、第1ファイルのパス、操作種別、ファイルサイズ、ファイル修正時間などを含んでもよい。新しいトークンは、ファイルシステムのためのより最近のトランザクション識別子を含んでもよい。
816で、第1クライアントデバイスは、ファイルシステム変更情報を処理し、ローカルな第1ファイルの状態をチェックし、変更情報に基づいてスタブファイルメタデータを更新してもよい。例えば、スタブファイルメタデータを更新するとき、第1クライアントは、トランザクションクエリエンジンによって提供された情報から更新されたファイルコンテンツのハッシュを決定し、受信したハッシュをスタブデータ構造に格納してもよい。したがって、第1クライアントは、更新されたファイルコンテンツをダウンロードする必要なしに、パス、イベントのタイプ、修正時間、ファイルの新しいサイズ、実際の更新されたファイルコンテンツのハッシュ、ファイルのバージョン番号などを含むスタブファイルのメタデータを更新してもよい。
818において、第1クライアントデバイスは、第1ファイルに関連するユーザ要求を受信してもよい。例えば、ユーザは、ウィンドウを開いて、第1ファイルを含むファイルシステムを見てもよい。
820で、第1クライアントデバイス上のローカルオペレーティングシステムは、第1ファイルの更新されたスタブメタデータに基づいて、最新の表現を有する第1ファイルのビューを提示してもよい。
図9は、いくつかの実施形態に係る、リモートで作成されたファイルをスタブするための例示的なプロセス900を示す流れ図である。場合によっては、プロセス900は、複数のクライアントデバイス上で実施される共有ファイルシステムまたはプライベートファイルシステムの場合など、複数のクライアントデバイスが同じファイルにアクセスすることができる環境で実行してもよい。したがって、いくつかの例では、プロセス900は、第1クライアントデバイスおよび第2クライアントデバイスによって実行されてもよい。
902において、第2クライアントデバイスは、第2クライアントデバイスにおいて第1ファイルを生成してもよい。この例では、第1クライアントデバイスは、現在、第1ファイルのローカル表現を有していない。
904において、第2クライアントデバイスは、同期のために、第1ファイルメタデータおよび第1ファイルコンテンツをサービスコンピューティングデバイスに送信してもよい。
906において、第1クライアントデバイスは、サービスコンピューティングデバイス上の通知サービスからファイルシステム変更通知を受信してもよい。
908で、第1クライアントデバイスは、ファイルシステム変更に関する情報及びトークンの要求をトランザクションクエリエンジンに送信してもよい。
910で、第1クライアントデバイスは、トランザクションクエリエンジンからのファイルシステム変更情報のリストおよび新しいトークンを受信してもよい。
912において、第1クライアントデバイスはファイルシステム変更情報を処理し、ローカルな第1ファイルの状態をチェックし、第1ファイルのローカル表現が存在しないことを決定してもよい。
914において、第1クライアントデバイスは、第1クライアントデバイスのストレージ管理ポリシーに基づいて、第1ファイルがスタブファイルとして維持されるべきであると決定してもよい。
916において、第1クライアントデバイスは、スタブデータ構造と、スタブファイルを作成するための他のファイルシステムメタデータとを含む、第1ファイルのスタブファイルメタデータを決定してもよい。例えば、第1クライアントデバイスは、トランザクションクエリエンジンから受信されたファイルシステム変更情報のリストからスタブファイルメタデータ情報を取得してもよく、このスタブファイルメタデータ情報は、ファイルコンテンツのハッシュ、ファイルサイズ、ファイルパス、ファイル修正時間などを含んでもよい。
918において、第1クライアントデバイスは、第1ファイルに関連するユーザ要求を受信してもよい。例えば、第1クライアントデバイスのユーザは、ウィンドウを開いて、第1ファイルを含むファイルシステムを見てもよい。
920で、第1クライアントデバイス上のローカルオペレーティングシステムは、第1ファイルの更新されたスタブファイルメタデータに基づいて、最新の表現(例えば、ファイルサイズ、最新の修正時間、現在のパスなどの最新のファイルメタデータ値)を有する第1ファイルのビューを提示してもよい。
図10は、いくつかの実施形態に係る、スタブファイルがリモートで削除される例示的なプロセス1000を示す流れ図である。場合によっては、プロセス1000は、複数のクライアントデバイス上で実装される共有ファイルシステムまたはプライベートファイルシステムの場合など、複数のクライアントデバイスが同じファイルにアクセスすることができる環境で実行されてもよい。したがって、いくつかの例では、プロセス1000は、第1クライアントデバイスおよび第2クライアントデバイスによって実行されてもよい。
1002で、第1クライアントデバイスは、第1クライアントデバイスのファイルシステム内に第1ファイルのスタブを作成してもよい。
1004において、第2クライアントデバイスは、ファイルシステムから第1ファイルを削除するユーザ命令を受信してもよい。
1006で、第2クライアントデバイスはファイルシステムから第1ファイルを削除し、ファイル情報の削除をサービスコンピューティングデバイスに送信してもよく、ファイル情報の削除は、第1ファイルに、ネットワークストレージから削除するためのフラグを立てる。
1008において、第1クライアントデバイスは、サービスコンピューティングデバイス上の通知サービスからファイルシステム変更通知を受信してもよい。
1010で、第1クライアントデバイスはトランザクションクエリエンジンからファイルシステムへの変更に関する情報を要求してもよく、要求とともにトークンを含んでもよい。
1012で、第1クライアントデバイスは、トランザクションクエリエンジンからの変更情報および新しいトークンを受信してもよい。この例では、変更情報は、イベントがファイルの削除であることを示してもよい。
1014で、第1クライアントデバイスは変更情報を処理し、第1ファイルのローカル表現をファイルシステムから除去してもよい。例えば、第1クライアントデバイスは、第1クライアントデバイス上のファイルシステムからスタブデータ構造および他のスタブファイルメタデータを削除してもよい。
1016で、第1クライアントデバイスのユーザがファイルシステムにアクセスすると、ファイルシステムのローカルオペレーティングシステムビューは、第1ファイルが削除されたファイルシステムの最新の表現を反映してもよい。さらに、本明細書のいくつかの例では、スタブファイルへの名前変更が上述したように、ファイル削除操作とファイル作成操作との組合せとして扱われてもよい。
図11は、いくつかの実施形態に係る、データをミラーリングするための例示的なプロセス1100を示す流れ図である。プロセス1100は、クライアントデバイスが、任意の可能なパスのためなどに、ミラーリング処理とスタブ処理との両方を同時に実行することができることを示す。場合によっては、プロセス1100は、複数のクライアントデバイスにわたって実装される共有ファイルシステムまたはプライベートファイルシステムの場合など、複数のクライアントデバイスが同じファイルにアクセスすることができる環境で実行されてもよい。したがって、いくつかの例では、プロセス1100は、第1クライアントデバイスおよび第2クライアントデバイスによって実行されてもよい。
1102において、第2クライアントデバイスは、第2クライアントデバイスにおいて第1ファイルを生成してもよい。この例では、第1クライアントデバイスは、現在、第1ファイルのローカル表現を有していない。
1104において、第2クライアントデバイスは、同期のために、第1ファイルメタデータおよび第1ファイルコンテンツをサービスコンピューティングデバイスに送信してもよい。
1106において、第1クライアントデバイスは、サービスコンピューティングデバイス上の通知サービスからファイルシステム変更通知を受信してもよい。
1108で、第1クライアントデバイスは、ファイルシステム変更に関する情報の要求およびトークンをトランザクションクエリエンジンに送信してもよい。
1110で、第1クライアントデバイスは、トランザクションクエリエンジンからの変更情報のリストおよび新しいトークンを受信してもよい。
1112において、第1クライアントデバイスはファイルシステム変更情報を処理し、ローカルな第1ファイルの状態をチェックし、第1ファイルのローカル表現が存在しないと判定してもよい。
1114において、第1クライアントデバイスは、第1ファイル内容への更新が第1クライアントデバイスに記憶されるように、第1ファイルが第1クライアントデバイス上のミラー構成に維持されるべきであると、ストレージ管理ポリシーから判断してもよい。
1116で、第1クライアントデバイスは、第1ファイルのファイルコンテンツをダウンロードし、トランザクションクエリエンジンから受信した変更情報に含まれるメタデータに追加のメタデータを適用してもよい。例えば、追加のメタデータは、第1クライアントデバイス上で維持される第1ファイルコンテンツのミラーリング関係などに関連していてもよい。
1118において、第1クライアントデバイスのユーザが、ファイルシステムにアクセスすると、ファイルシステムのローカルオペレーティングシステムビューは、ファイルシステムにおける最新のミラー状態を有することを示す第1ファイルコンテンツを有するファイルシステムの最新の表現を反映してもよい。
本明細書に記載される例示的なプロセスは、議論の目的のために提供されるプロセスの例に過ぎない。本明細書の開示に照らして、多数の他の変形が当業者には明らかであろう。さらに、本明細書の開示はプロセスを実行するための適切なフレームワーク、アーキテクチャ、および環境のいくつかの例を示しているが、本明細書の実装は、示され且つ論じられた特定の例に限定されない。さらに、本開示は記載され、図面に図示されるように、様々な例示的な実施形態を提供する。しかし、本開示は本明細書に記載され、図示された実施形態に限定されず、当業者に知られているように、または知られるように、他の実施形態に拡張することができる。
図12は、いくつかの実施形態に係る、サービスコンピューティングデバイス102およびストレージ104の選択コンポーネントの構成例を示す。いくつかの例では、サービスコンピューティングデバイス102は、任意のさまざまな方法で実施することができる1つまたは複数のサーバまたは他のタイプのコンピューティングデバイスを含んでもよい。例えば、サーバの場合、モジュール、他の機能コンポーネント、およびデータストレージの少なくとも一部は、少なくとも1つのサーバ、例えば、サーバファームまたはデータセンター、クラウドホストコンピューティングサービスなどに実装されてもよいが、他のコンピュータ構造を追加または代替として使用してもよい。
図示の例では、各サービスコンピューティングデバイス102は、1つまたは複数のプロセッサ1202、1つまたは複数のコンピュータ可読媒体1204、および1つまたは複数の通信インターフェース1206を含むか、またはそれに関連付けてもよい。各プロセッサ1202は単一の処理ユニットまたは複数の処理ユニットとしてもよく、単一または複数の計算ユニット、または複数の処理コアを含んでもよい。プロセッサ1202は、1つまたは複数の中央処理装置、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、ステートマシーン、論理回路、および/または動作命令に基づいて信号を操作する任意のデバイスとして実装することができる。例えば、プロセッサ1202は、本明細書で説明されるアルゴリズムおよびプロセスを実行するように特にプログラムまたは構成された任意の適切なタイプの1つまたは複数のハードウェアプロセッサおよび/または論理回路としてもよい。プロセッサ1202は本明細書で説明する機能を実行するようにプロセッサ1202をプログラムすることができる、コンピュータ可読媒体1204に格納されたコンピュータ可読命令をフェッチし、実行するように構成することができる。
コンピュータ可読媒体1204は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなど、デジタル情報を記憶するための任意のタイプの技術で実装された揮発性および不揮発性メモリ、ならびに/またはリムーバブルおよび非リムーバブル媒体を含んでもよい。例えば、コンピュータ可読媒体1204はRAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、光ストレージ、ソリッドステートストレージ、磁気ディスクストレージ、RAIDストレージシステム、ストレージアレイ、ネットワーク接続ストレージ、ストレージエリアネットワーク、クラウドストレージ、または所望の情報を格納するために使用することができ、コンピューティングデバイスによってアクセスすることができる任意の他の媒体を含んでもよいが、これらに限定されない。サービスコンピューティングデバイス102の構成に応じて、コンピュータ可読媒体1204は、言及された場合、非一時的なコンピュータ可読媒体がエネルギー、搬送波信号、電磁波、および/または信号自体などの媒体を除外する限り、有形の非一時的媒体であってよい。場合によってはコンピュータ可読媒体1204は、サービスコンピューティングデバイス102と同じ場所にあってもよく、他の例ではコンピュータ可読媒体1204がサービスコンピューティングデバイス102から部分的に離れていてもよい。例えば、場合によっては、コンピュータ可読媒体1204がストレージ104内のストレージの一部を含んでもよい。
コンピュータ可読媒体1204は、プロセッサ1202によって実行可能な任意の数の機能コンポーネントを格納するために使用されてもよい。多くの実施形態ではこれらの機能コンポーネントがプロセッサ1202によって実行可能であり、実行されると、具体的にはサービスコンピューティングデバイス102に帰属するアクションを実行するようにプロセッサ1202をプログラムする命令またはプログラムを含む。コンピュータ可読媒体1204に格納された機能コンポーネントは、トランザクションクエリエンジン112、通知サービス114、およびサーバプログラム118を含んでもよく、これらの各々は、1つまたは複数のコンピュータプログラム、アプリケーション、実行可能コード、またはそれらの一部を含んでもよい。例えば、サーバプログラム118は、クライアントコンピューティングデバイス108およびストレージシステム104との通信機能を提供してもよい。コンピュータ可読媒体1204に格納された追加の機能コンポーネントは、サービスコンピューティングデバイス102の様々な機能を制御および管理するためのオペレーティングシステム1208を含んでもよい。場合によっては、機能コンポーネントは、コンピュータ可読媒体1204の記憶部分に格納され、コンピュータ可読媒体1204のローカルメモリ部分にロードされ、1つまたは複数のプロセッサ1202によって実行されてもよい。
さらに、コンピュータ可読媒体1204は、本明細書で説明される機能およびサービスを実行するために使用されるデータおよびデータ構造を格納してもよい。例えば、コンピュータ可読媒体1204は、トランザクションログ130、ファイルシステムデータベース116、およびデータAPI154を格納してもよい。サービスコンピューティングデバイス102は、プログラム、ドライバなどを含むことができる他のモジュールおよびデータ1210、ならびに機能コンポーネントによって使用または生成されるデータなど、他の機能コンポーネントおよびデータを含むか、または維持してもよい。さらに、サービスコンピューティングデバイス102は多くの他の論理的、プログラム的、および物理的構成要素を含むことができ、それらの上で説明したものは、本明細書の議論に関連する例にすぎない。
通信インターフェース1206は、ネットワーク105および106を介するなど、様々な他のデバイスとの通信を可能にするための1つまたは複数のインターフェースおよびハードウェア構成要素を含んでもよい。したがって、通信インターフェース1206はストレージシステム104と通信するためのネットワーク105への接続を提供する1つまたは複数のポートと、クライアントコンピューティングデバイス108または他のコンピューティングデバイスと通信するためのネットワーク106への接続を提供する1つまたは複数のポートとを含んでもよく、またはそれらに結合してもよい。例えば、通信インターフェース1206は、本明細書の他の場所にさらに列挙されている通り、LAN、インターネット、ケーブルネットワーク、セルラーネットワーク、無線ネットワーク(例えば、Wi−Fi)および有線ネットワーク(例えば、ファイバチャネル、光ファイバ、イーサネット)、直接接続、ならびにBLUETOOTH(登録商標)の1または複数を介して通信可能であってもよい。
図12の例は、いくつかの実施形態に係る1つまたは複数のサービスコンピューティングデバイス102の1つの可能な構成例を示す。この例では、第1サービスコンピューティングデバイス102(1)は、第2サービスコンピューティングデバイス102(2)に接続されてもよい。例えば、第1サービスコンピューティングデバイス102(1)および第2サービスコンピューティングデバイス102(2)は、複数のクライアントコンピューティングデバイス108(図12には図示せず)に記憶およびデータ管理サービスを提供するためのコンピューティングデバイスを一緒に構成してもよい。いくつかの例では第1サービスコンピューティングデバイス102(1)は、少なくともトランザクションログ130およびファイルシステムデータベース116を維持することに関して、マスタまたは1次コンピューティングデバイスとして働いてもよく、第2サービスコンピューティングデバイス102(2)はスレーブまたは2次コンピューティングデバイスとして働いてもよい。例えば、第1サービスコンピューティングデバイス102(1)上のサーバプログラム118、通知サービス114、および/またはトランザクションクエリエンジン112は、第1サービスコンピューティングデバイス102(1)上のトランザクションログ130およびファイルシステムデータベース116を更新し、維持してもよい。1211に示すように、第1サービスコンピューティングデバイス102(1)上のサーバプログラム118または他のプログラムは、トランザクションログ130およびファイルシステムデータベース122を第2サービスコンピューティングデバイス102(2)に複製してもよい。したがって、第1サービスコンピューティングデバイス102(1)が故障した場合、第2サービスコンピューティングデバイス102(2)は、第1サービスコンピューティングデバイス102(1)が異なるサービスコンピューティングデバイス(図2には図示せず)に置き換えられ、または修理されるまで、一次コンピューティングデバイスの役割を担ってもよい。この時間の間、第2サービスコンピューティングデバイス102(2)は、上述したファイルスタブのためのデータ管理サービスを実行してもよい。
図示の例ではストレージ104がストレージシステム1212内に維持されるが、本明細書の実施形態は本明細書に示され、かつ/または説明されるストレージ例に限定されない。ストレージシステム1212は1つまたは複数のストレージコンピューティングデバイス1214を含むことができ、ストレージコンピューティングデバイス1214は、サービスコンピューティングデバイス102に関して上述した例のいずれかなど、1つまたは複数のサーバまたは任意の他の適切なコンピューティングデバイスを含んでもよい。ストレージコンピューティングデバイス140は、それぞれ、1つまたは複数のプロセッサ1216、1つまたは複数のコンピュータ可読媒体(CRM)1218、および1つまたは複数の通信インターフェース(I/F)1220を含んでもよい。例えば、プロセッサ1216はプロセッサ1202に関して上述した例のいずれかに対応してもよく、コンピュータ可読媒体1218はコンピュータ可読媒体1204に関して上述した例のいずれかに対応してもよく、通信インターフェース1220は、通信インターフェース1206に関して上述した例のいずれかに対応してもよい。
さらに、コンピュータ可読媒体1218はストレージシステム1212に含まれるストレージ104上のデータの記憶を管理するために、1つまたは複数のプロセッサ1202によって実行される機能コンポーネントとしてストレージプログラム1222を含んでもよい。ストレージ104は、ストレージデバイス1228の1つまたは複数のアレイ1226上にデータを格納するための、ストレージ104に関連付けられた1つまたは複数のコントローラ1224を含んでもよい。例えば、コントローラ1224は、RAID構成などでアレイ1226を構成するため、および/またはストレージデバイス1228に基づいて論理ユニットを記憶プログラム1222に提示するため、および基礎となる物理ストレージデバイス1228上に記憶されたデータオブジェクト1230などのデータを管理するためなど、アレイ1226を制御してもよい。データオブジェクト1230は、ファイルコンテンツ、ファイルメタデータ、および本明細書で議論する他のデータに対応してもよい。ストレージデバイス1228は、ハードディスクドライブ、ソリッドステートドライブ、光ドライブ、磁気テープ、それらの組み合わせなどの任意のタイプのストレージデバイスであってもよい。いくつかの例では、1つまたは複数のアレイ1226がオンデマンド記憶容量を提供するように構成されたシンプロビジョニングアレイを含んでもよい。さらに、図12の例は、1つまたは複数のサービスコンピューティングデバイス102およびストレージ104の可能な構成の一例にすぎない。本明細書の開示の恩恵を受ける当業者には、多くの他の構成が明らかであろう。
図13は、いくつかの実施形態に係る例示的なクライアントデバイス108の例示的なコンポーネントの選択を示す。各クライアント・コンピューティング・デバイス108は、ワークステーション、デスクトップ、ラップトップ、タブレットコンピューティングデバイス、モバイルデバイス、スマートフォン、ウェアラブルコンピューティングデバイス、またはネットワークを介してデータを送受信することができる任意の他のタイプのコンピューティング等の任意の適切な種類のコンピューティングデバイスであってよい。さらに、クライアントコンピューティングデバイス108は、1つまたは複数のネットワーク106を介して、別個のネットワークを介して、または任意の他の適切なタイプの通信接続を介して、1つまたは複数のサービスコンピューティングデバイス102と通信することができてもよい。本明細書の開示の恩恵を受ける当業者には、多くの他の変形例が明らかであろう。
基本的な構成では、クライアントデバイス108が少なくとも1つのプロセッサ1302、1つまたは複数のコンピュータ可読媒体1304、1つまたは複数の通信インターフェース1306、および1つまたは複数の入出力(I/O)コンポーネント1308などのコンポーネントを含む。各プロセッサ1302は、それ自体、1つまたは複数のプロセッサまたは処理コアを備えてもよい。例えば、各プロセッサ1302は、1つまたは複数のマイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、中央処理装置、ステートマシーン、論理回路、および/または動作命令に基づいて信号を操作する任意のデバイスとして実装されてもよい。場合によっては、プロセッサ1302が本明細書で説明するプロセスおよび他のアルゴリズムを実行するように特にプログラムまたは構成された任意の適切なタイプの1つまたは複数のハードウェアプロセッサおよび/または論理回路を含んでもよい。プロセッサ1302はコンピュータ可読媒体1304に格納されたコンピュータ可読プロセッサ実行可能命令をフェッチし、実行するように構成されてもよい。
クライアントデバイス108の構成に応じて、コンピュータ可読媒体1304は、有形の非一時的コンピュータ可読媒体の一例であってもよく、コンピュータ可読プロセッサ実行可能命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意のタイプの技術で実装された揮発性および不揮発性メモリ、および/またはリムーバブルおよび非リムーバブル媒体を含んでもよい。コンピュータ可読媒体1304はRAM、ROM、EEPROM、フラッシュメモリ、ソリッドステートストレージ、光ストレージ、磁気ディスクストレージ、磁気テープ、および/または他のタイプのストレージ技術を含んでもよいが、これらに限定されない。さらに、場合によっては、クライアントデバイス108が直接、別のコンピューティングデバイスを介して、またはネットワークを介してなど、外部ストレージにアクセスしてもよい。したがって、コンピュータ可読媒体1304は、プロセッサ1302によって実行され得る命令、プログラム、またはソフトウェアコードを格納することが可能なコンピュータ記憶媒体であってもよい。
コンピュータ可読媒体1304は、プロセッサ1302によって実行可能な任意の数の機能コンポーネントを格納し、維持するために使用されてもよい。いくつかの実装形態では、これらの機能コンポーネントは、プロセッサ1302によって実行可能であり、実行されると、クライアントデバイス108に帰属するアクションおよびサービスを実行するための動作ロジックを実装する命令またはプログラムを備える。コンピュータ可読媒体1304に格納されたクライアントデバイス108の機能コンポーネントは、上述のように、クライアントアプリケーション120およびデータ同期サービス122を含んでもよい。追加の機能コンポーネントは、クライアントデバイス108の様々な機能を制御および管理し、クライアントデバイス108との基本的なユーザ対話を可能にするためのオペレーティングシステム1310を含んでもよい。いくつかの例では、クライアントアプリケーション120は、ファイルシステムフィルタドライバ1312、または上述のようにスタブファイルに向けられたファイルアクセス要求を傍受するためにオペレーティングシステムと対話することができる同様のコンポーネントを含んでもよく、またはそれにアクセスできてもよい。コンピュータ可読媒体1304は、様々な機能およびタスクを実行するためにクライアントデバイス108上で実行することができる1つまたは複数のアプリケーション1314をさらに含んでもよい。
さらに、コンピュータ可読媒体1304は、機能コンポーネントによって使用されるデータ、データ構造などを格納してもよい。例えば、コンピュータ可読媒体1304によって格納されるデータおよびデータ構造は、1つまたは複数のトークン128、1つまたは複数のファイルシステム124、ストレージ管理ポリシー1316、ファイル同期情報1318、データAPI154、スタブデータ構造200、およびユーザのプロファイル情報402を含んでもよい。クライアントデバイス108のタイプに応じて、コンピュータ可読媒体1304は、プログラム、ドライバなどを含むことができる他のモジュールおよびデータ1322、ならびに機能コンポーネントによって使用または生成されるデータなど、他の機能コンポーネントおよびデータも任意選択で含んでもよい。さらに、クライアントデバイス108は、多くの他の論理的、プログラム的、および物理的コンポーネントを含んでもよく、それらの説明は、本明細書の説明に関連する例にすぎない。
クライアントデバイス108は、1つまたは複数の通信インターフェース1306をさらに含むことができる。通信インターフェース1306は、ネットワーク105および106を介するなど、様々な他のデバイスとの通信を可能にするための1つまたは複数のインターフェースおよびハードウェアコンポーネントを含んでもよい。したがって、通信インターフェース1306は、ストレージシステム104と通信するためのネットワーク105への接続を提供する1つまたは複数のポートと、サービスコンピューティングデバイス102または他のコンピューティングデバイスと通信するためのネットワーク106への接続を提供する1つまたは複数のポートとを含んでもよく、またはそれらに接続してもよい。例えば、通信インターフェース1306は、本明細書の他の場所にさらに列挙されている通り、LAN(ローカルエリアネットワーク)、WAN(ワイドエリアネットワーク)、インターネット、ケーブルネットワーク、セルラーネットワーク、無線ネットワーク(例えば、Wi−Fi)および有線ネットワーク(例えば、ファイバチャネル、光ファイバ、イーサネット)、直接接続、ならびにBLUETOOTH(登録商標)などの短距離通信などの少なくとも一つまたは複数を介して通信ができればよい。
クライアントデバイス108はスピーカ、マイクロフォン、カメラ、および様々なユーザコントロール(例えば、ボタン、ジョイスティック、キーボード、キーパッド、タッチスクリーンなど)、触覚出力デバイスなどのI/Oコンポーネント1308をさらに含んでもよい。例えば、クライアントデバイス108のオペレーティングシステム1310は、キーパッド、キーボード、またはI/Oコンポーネント1308に含まれる他のユーザコントロールおよびデバイスからの入力を受け入れるように構成された適切なドライバを含んでもよい。加えて、クライアントデバイス108は、受動的、放射的、または任意の他の形態のディスプレイであってもよいディスプレイ1324を含んでもよい。さらに、クライアントデバイス108は図示されていない様々な他のコンポーネントを含むことができ、その例は、様々なタイプのセンサ、全地球測位システムデバイス、バッテリおよび電力制御ユニットなどの電源などを含む。
本明細書で説明される様々な命令、プロセス、および技法は、コンピュータ可読媒体上に格納され、本明細書のプロセッサによって実行されるプログラムモジュールなど、コンピュータ実行可能命令の一般的な文脈で考慮されてよい。一般に、プログラムモジュールは、特定のタスクを実行するため、または特定の抽象データ型を実装するためのルーチン、プログラム、オブジェクト、コンポーネント、データ構造、実行可能コードなどを含んでもよい。これらのプログラムモジュールなどは、ネイティブコードとして実行されてもよく、または仮想マシンまたは他のジャストインタイムコンパイル実行環境などでダウンロードされ実行されてもよい。典型的には、プログラムモジュールの機能が様々な実装において所望に応じて組み合わせるか、または分散させることができる。これらのモジュールおよび技法の実装は、コンピュータ記憶媒体上に格納されるか、または何らかの形態の通信媒体を介して送信されてもよい。
主題は、構造的特徴および/または方法論的動作に特有の言葉で説明されてきたが、添付の特許請求の範囲で定義される主題は説明される特定の特徴または動作に必ずしも限定されないことを理解されたい。むしろ、特定の特徴および動作は、特許請求の範囲を実施する例示的な形態として開示される。