本技術は、コンテンツ管理システムの同期ディレクトリの外部に位置するオブジェクトを同期させることができる。クラウドストレージとクライアントデバイスとの間の同期を提供するコンテンツ管理システムは、コンテンツをクライアントデバイス上の特定のディレクトリに同期させる。同期ディレクトリの外部に位置するオブジェクトは、通常、コンテンツ管理システムの同期サービスにアクセス可能ではない。しかしながら、ユーザの最も重要なオブジェクトのうちのいくつかは、同期ディレクトリの外部に位置する可能性があり、したがって、そのようなコンテンツアイテムを同期させることができる必要がある。
外部ハードドライブ上の外部ディレクトリに格納されたオブジェクトは、更に大きな課題を提示するが、外部ハードドライブ上のオブジェクトは、同期型コンテンツ管理システムを通じてバックアップするためのユーザの最も重要なものの一部でありうる。例えば、ユーザは、通常、日常的には必要とされない重要なオブジェクトをアーカイブするために外部ハードドライブを利用するが、それほど重要ではない。外部ハードドライブは、同期クライアントアプリケーションを実行しているコンピュータがそのようなハードドライブに常にアクセス可能であるとは限らず、クライアントデバイスのハードドライブとは異なるフォーマットになっている可能性があり、また、それらは読み出し専用である可能性があるという点で、複雑な問題を提供する。
外部ハードドライブが、クライアントコンピュータのハードドライブ上の利用可能なストレージ空間よりも大量のバイトを格納する場合、更なる問題が生じる可能性がある。そのような場合、オブジェクトは、同期型コンテンツ管理システムにアップロードされる前に、クライアントのハードドライブに最初に格納されることができない。
本技術は、これらの問題の多くを克服し、外部ハードドライブ上であっても、クライアントデバイスのハードドライブ上のロケーションに、同期対象のオブジェクトを最初にコピーすることなく、外部ディレクトリをコンテンツ管理システムに同期させることを可能にする。
いくつかの実施形態では、開示される技術は、とりわけ、オブジェクト同期能力及び協調機能(collaboration features)を有するコンテンツ管理システムとの関連で展開される。図1には、例示的なシステム構成100が示されており、クライアントデバイス150とインタラクションを行うコンテンツ管理システム110を示している。
アカウント
コンテンツ管理システム110は、オブジェクトをアカウントと関連付けて格納しうるとともに、(1つ以上の)オブジェクトを取り出す、修正する、ブラウジングする、及び/又は共有する等の、種々のオブジェクト管理タスクを実行しうる。更に、コンテンツ管理システム110は、アカウントが複数のクライアントデバイスから(1つ以上の)オブジェクトにアクセスすることを可能にしうる。
コンテンツ管理システム110は、複数のアカウントをサポートする。サブジェクト(ユーザ、グループ、チーム、会社等)は、コンテンツ管理システム110でアカウントを作成しうるとともに、アカウント詳細は、サブジェクトデータベース140に格納されうる。サブジェクトデータベース140は、サブジェクトIDによって登録済みサブジェクトを識別しうるとともに、登録済みサブジェクトのプロファイル情報を、サブジェクトIDと関連付けて格納しうる。場合によっては、登録済みサブジェクトのプロファイル情報は、サブジェクト名及び/又は電子メールアドレスを含む。サブジェクトデータベース140は、アカウントタイプ(例えば、無料又は有料アカウントの種々の段階)、割り当てられたストレージ空間、使用されるストレージ空間、当該デバイス上に常駐する登録されたコンテンツ管理クライアントアプリケーション152を有するクライアントデバイス150、セキュリティ設定、パーソナル構成設定等の、アカウント管理情報を含みうる。いくつかの実施形態では、アカウントと関連付けられたいくつかの情報は、直接格納されなくてもよく、むしろ、この情報は導出されてもよい。例えば、使用されるストレージ空間は、明示的に格納されてもよいし、必要な場合に計算されてもよい。
いくつかの実施形態では、サブジェクトデータベース140は、サブジェクトのアカウントと関連付けられた完全な情報を格納している必要はない。サブジェクトのアカウントと関連付けられた情報の一部は、メタデータデータベース146等の、コンテンツ管理システム110の他のデータベースに格納されてもよいし、又はコンテンツ管理システム110の外部のデータベースに格納されてもよい。
サブジェクトデータベース140は、サブジェクトと関連付けられたアカウントのグループを格納してもよい。グループは、グループパーミッションステートメント及び/又はアクセス制御リストに基づくパーミッションを有しうるとともに、当該グループのメンバーは、パーミッションを継承しうる。例えば、マーケティンググループは、オブジェクトの1つのセットへのアクセスを有しうる一方で、エンジニアリンググループは、オブジェクトの別のセットへのアクセスを有しうる。管理者グループは、グループの変更、サブジェクトアカウントの変更等を行いうる。グループは、サブジェクトIDによって識別されるサブジェクトでもある。
いくつかの実施形態では、サブジェクトデータベース140は、複数のテーブル、インデックス、及び他のデータ構造に分けられうる。
オブジェクトストレージ(Object Storage)
コンテンツ管理システム110の機能は、オブジェクトの格納であり、当該オブジェクトはオブジェクトストレージ142に格納されうる。オブジェクトは、一般に、ファイルシステムに記録されうる任意のエンティティである。オブジェクトは、ドキュメント、協調オブジェクト、テキストファイル、オーディオファイル、画像ファイル、ビデオファイル、ウェブページ、実行可能ファイル、バイナリファイル、ディレクトリ、フォルダ、zipファイル、プレイリスト、アルバム等のデジタルデータを含む、任意のオブジェクトでありうる。
いくつかの実施形態では、オブジェクトは、コレクションにグループ化されてもよく、当該コレクションは、複数のオブジェクトを含むフォルダ、又は、共通の属性によって関連付け若しくはグループ化される複数のオブジェクトを指しうる。
いくつかの実施形態では、オブジェクトストレージ142は、特定の機能を処理するために、他のタイプのストレージ又はデータベースと組み合わされる。オブジェクトストレージ142がオブジェクトを格納しうる一方、オブジェクトに関するメタデータは、メタデータデータベース146に格納されうる。同様に、オブジェクトがオブジェクトストレージ142に格納される場所に関するデータは、コンテンツディレクトリ144に格納されうる。更に、変更、アクセス等に関するデータは、オブジェクトデータベース148に格納されうる。オブジェクトデータベース148は、オブジェクトへのアクセスを有するサブジェクトIDを識別するサブジェクトアカウント識別子も含みうる。
いくつかの実施形態では、オブジェクトデータベース148は、複数のテーブル、インデックス及び他のデータ構造に分けられうる。
オブジェクトストレージ142、コンテンツディレクトリ144、オブジェクトデータベース148、及びメタデータデータベース146等の、種々のストレージ/データベースの各々は、2つ以上のそのようなストレージ又はデータベースで構成可能であり、多くのデバイス及びロケーションに分散可能である。その他の構成も可能である。例えば、オブジェクトストレージ142、コンテンツディレクトリ144、オブジェクトデータベース148、及び/又はメタデータデータベース146からのデータは、1つ以上のオブジェクトストレージ又はデータベースに組み合わせられうる、又は、追加のオブジェクトストレージ又はデータベースに更にセグメント化されうる。このため、コンテンツ管理システム110は、図1に示されるよりも多い又は少ないストレージ及び/又はデータベースを含んでもよい。
いくつかの実施形態では、オブジェクトストレージ142は、少なくとも1つのオブジェクトストレージサービス116と関連付けられ、当該サービスは、オブジェクトのストレージを管理するためのソフトウェア又は他のプロセッサ実行可能命令を含み、オブジェクトのストレージを管理することは、オブジェクトを格納のために受信すること、オブジェクトを格納のために準備すること、オブジェクトのためのストレージロケーションを選択すること、オブジェクトをストレージから取り出すこと等を含むが、これらに限定されない。いくつかの実施形態では、オブジェクトストレージサービス116は、オブジェクトストレージ142に格納するために、オブジェクトをより小さいチャンクに分割しうる。オブジェクトを構成する各チャンクのロケーションは、コンテンツディレクトリ144に記録されうる。コンテンツディレクトリ144は、オブジェクトストレージ142に格納された各オブジェクトのコンテンツエントリを含みうる。コンテンツエントリは、オブジェクトを識別するオブジェクトIDと関連付けられうる。
いくつかの実施形態では、オブジェクトの各オブジェクト及び各チャンクは更に、決定論的ハッシュ関数から識別されてもよい。オブジェクト及びオブジェクトのチャンクを識別するこの方法は、オブジェクトの重複がそのように認識されることを保証してもよく、これは、決定論的ハッシュ関数が同じオブジェクトの全てのコピーに対して同じハッシュを出力するが、異なるオブジェクトに対して異なるハッシュを出力するためである。この方法を使用して、オブジェクトストレージサービス116は、オブジェクトの異なるバージョンごとに固有のハッシュを出力しうる。
オブジェクトストレージサービス116は更に、オブジェクトデータベース148内のオブジェクトのコンテンツパスを指定又は記録しうる。コンテンツパスは、オブジェクトの名前及び/又はオブジェクトと関連付けられたフォルダ階層を含みうる。例えば、コンテンツパスは、オブジェクトがクライアントデバイス上のローカルファイルシステムに格納される、フォルダ又はフォルダのパスを含みうる。いくつかの実施形態では、オブジェクトデータベースは、オブジェクトが導出されるフルパスを可能にする、任意のオブジェクトの直接の祖先又は直接の子のみを格納しうる。
オブジェクトがブロックでオブジェクトストレージ142に格納されて、ディレクトリ構造のようなツリーの下に格納されなくてもよい一方、そのようなディレクトリ構造はサブジェクトにとって快適なナビゲーション構造である。オブジェクトストレージサービス116は、オブジェクトのコンテンツパスを定義又は記録しうる。ここで、ディレクトリ構造の「ルート(root)」ノードは、別のディレクトリからアクセス特権を継承するディレクトリとは対照的に、それに割り当てられた特定のアクセス特権を有する任意のディレクトリでありうる。
いくつかの実施形態では、ルートディレクトリは、単一ディレクトリ構造の外観を与えるように、別のルートディレクトリの下にマウントされてもよい。これは、アカウントが複数のルートディレクトリへのアクセスを有する場合に生じうる。上述のように、ディレクトリ構造は、サブジェクトにとって快適なナビゲーション構造にすぎないが、オブジェクトストレージ142内のオブジェクトのストレージロケーションとは相関しない。
アカウントがオブジェクトを閲覧するディレクトリ構造は、コンテンツ管理システム110におけるストレージロケーションに相関しないが、当該ディレクトリ構造は、クライアントデバイス150によって使用されるファイルシステムに依存して、クライアントデバイス150上のストレージロケーションに相関しうる。
上述のように、コンテンツディレクトリ144内のコンテンツエントリは、オブジェクトを構成する各チャンクのロケーションを更に含みうる。より具体的には、コンテンツエントリは、オブジェクトを構成するチャンクのオブジェクトストレージ142内のロケーションを識別するコンテンツポインタを含みうる。
オブジェクトストレージサービス116は、オブジェクト又はオブジェクトの複数のバージョンを構成する、複製オブジェクト又は複製ブロックを識別することによって、必要とされるストレージ空間の量を減らすことができる。複数のコピーを格納する代わりに、オブジェクトストレージ142は、オブジェクト又はオブジェクトのブロックの、単一のコピーを格納しうるとともに、コンテンツディレクトリ144は、複製を単一のコピーにリンクするためのポインタ又は他のメカニズムを含みうる。
オブジェクトストレージサービス116は更に、オブジェクト、オブジェクトタイプ、フォルダ、ファイルパス、及び/又は種々のアカウント、コレクション、又はグループに対する関係を記述するメタデータを、オブジェクトのオブジェクトIDと関連付けて、
メタデータ・データベース146に格納しうる。
オブジェクトストレージサービス116は更に、変更、アクセス等に関するデータのログをオブジェクトデータベース148に格納しうる。オブジェクトデータベース148は、オブジェクトのオブジェクトIDを含みうるとともに、オプションとして、タイムスタンプ又はバージョン番号及び任意の他の関連データとともに、変更又はアクセスアクションの記述を含みうる。オブジェクトデータベース148は更に、変更又はオブジェクトアクセスによって影響を受けるブロックへのポインタを含みうる。オブジェクトストレージサービスは、オブジェクトに対する変更、オブジェクトの異なる複数のバージョン(分岐するバージョンツリーを含む)、及びオブジェクトデータベース148から取得されうる変更履歴、を追跡するオブジェクトバージョンコントロールを使用することによって、操作を取り消す能力を提供しうる。
オブジェクトの同期(Object Synchronization)
コンテンツ管理システム110の別の機能は、少なくとも1つのクライアントデバイス150とのオブジェクトの同期である。(1つ以上の)クライアントデバイスは、異なる形態を取りうるとともに、異なる能力を有しうる。例えば、クライアントデバイス150-1は、その上に常駐する複数のアプリケーションによってアクセス可能なローカルファイルシステムを有するコンピューティングデバイスである。クライアントデバイス150-2は、オブジェクトが特定のアプリケーションにのみアクセス可能であるか又は特定のアプリケーションによって与えられるパーミッションによってアクセス可能であり、オブジェクトが典型的にはアプリケーション固有空間又はクラウドのいずれかに格納される、コンピューティングデバイスである。クライアントデバイス150-3は、ウェブブラウザを介してコンテンツ管理システム110にアクセスし、ウェブインタフェースを介してオブジェクトにアクセスする、任意のクライアントデバイスである。例示的なクライアントデバイス150-1、150-2、及び150-3は、ラップトップ、モバイル端末、又はウェブブラウザ等のフォームファクタで描かれているが、それらの説明はこれらの例示的なフォームファクタのデバイスに限定されないことを理解されたい。例えば、クライアント150-2等のモバイル端末は、その上に常駐する複数のアプリケーションによってアクセス可能なローカルファイルシステムを有しうるか、又はクライアント150-2は、ウェブブラウザを介してコンテンツ管理システム110にアクセスしうる。したがって、フォームファクタは、クライアント150の能力を考慮する際に限定するものと考えられるべきではない。クライアントデバイス150に関して本明細書で説明される1つ以上の機能は、デバイスの特定の能力に応じて、全てのクライアントデバイス上で利用可能であってもよい又は利用可能でなくてもよい-ファイルアクセスモデルはそのような能力の1つである。
いくつかの実施形態では、クライアントデバイス150は、外部ハードドライブ151に通信可能に接続されうる。
多くの実施形態では、クライアントデバイスは、コンテンツ管理システム110のアカウントと関連付けられるが、いくつかの実施形態では、クライアントデバイスは、共有リンクを使用してコンテンツにアクセスでき、アカウントを必要としない。
上述のように、いくつかのクライアントデバイスは、ウェブブラウザを使用してコンテンツ管理システム110にアクセスしうる。しかしながら、クライアントデバイスは、クライアントデバイス150に格納されて実行されるクライアントアプリケーション152を使用して、コンテンツ管理システム110にアクセスすることもできる。クライアントアプリケーション152は、クライアント同期サービス156を含みうる。
クライアント同期サービス156は、クライアントデバイス150とコンテンツ管理システム110との間で、オブジェクトに対する変更を同期させるために、サーバ同期サービス112と通信しうる。
クライアントデバイス150は、クライアント同期サービス156を介してコンテンツをコンテンツ管理システム110と同期させうる。同期は、プラットフォームに依存しないものでありうる。即ち、コンテンツは、種々のタイプ、能力、オペレーティングシステム等の複数のクライアントデバイスにわたって同期されうる。クライアント同期サービス156は、同期サービス156によって監視されるクライアントデバイス150のファイルシステムの指定されたディレクトリ内のオブジェクトに対する任意の変更(新しい、削除された、修正された、コピーされた、又は移動されたオブジェクト)を同期させうる。
オブジェクトは、クライアントデバイス150からコンテンツ管理システム110に同期可能であり、逆もまた同様である。同期がクライアントデバイス150からコンテンツ管理システム110へのものである実施形態では、サブジェクトが、クライアントデバイス150のファイルシステムからオブジェクトを直接操作しうる一方、クライアント同期サービス156は、監視されるフォルダ内のファイルに対する変更についてクライアントデバイス150上の指定されたディレクトリを監視しうる。
クライアント同期サービス156が、監視しているディレクトリ内のコンテンツの書き込み、移動、コピー、又は削除を検出すると、クライアント同期サービス156は、当該変更をオブジェクトストレージサービス116に同期させうる。いくつかの実施形態では、クライアント同期サービス156は、オブジェクトをブロックに分割すること、固有の識別子を生成するためにオブジェクトをハッシングすること等の、上述の機能を含む、オブジェクトストレージサービス116のいくつかの機能を実行しうる。クライアント同期サービス156は、クライアントストレージインデックス164内のコンテンツにインデックスを付け、その結果をストレージインデックス164に保存しうる。インデックス付けは、オブジェクト識別子を加えたパスを格納することと、オブジェクトごとに固有のクライアント識別子を格納することとを含みうる。いくつかの実施形態では、クライアント同期サービス156は、サーバ同期サービス112からオブジェクト識別子を学習し、クライアントデバイス150のオペレーティングシステムから固有のクライアント識別子を学習する。
クライアント同期サービス156は、ストレージインデックス164を使用して、クライアントストレージ内のオブジェクトの少なくとも一部と、コンテンツ管理システム110上のサブジェクトアカウントと関連付けられたオブジェクトとの同期を容易にしうる。例えば、クライアント同期サービス156は、ストレージインデックス164をコンテンツ管理システム110と比較し、クライアントストレージ上のコンテンツと、コンテンツ管理システム110上のサブジェクトアカウントと関連付けられたコンテンツとの間の差分を検出しうる。その後、クライアント同期サービス156は、必要に応じて、クライアントストレージ上のコンテンツをアップロード、ダウンロード、修正、及び削除することによって、差分を調整することを試みうる。オブジェクトストレージサービス116は、オブジェクトについての変更された又は新しいブロックを格納し、オブジェクトデータベース148、メタデータデータベース146、コンテンツディレクトリ144、オブジェクトストレージ142、サブジェクトデータベース140等を必要に応じて更新しうる。
コンテンツ管理システム110からクライアントデバイス150に同期させる場合、オブジェクトデータベース148に記録されているオブジェクトのマウント、修正、追加、削除、移動に関するデータが、通知サービス117を使用してクライアントデバイス150に送信される通知をトリガしうる。クライアントデバイス150が変更を通知されると、クライアントデバイス150は、クライアントデバイスに知られている最後の同期ポイント以降の、オブジェクトデータベース148においてリストされた変更を求める要求を行いうる。クライアントデバイス150が、コンテンツ管理システム110との同期が外れていると判定すると、クライアント同期サービス156は、変更を含むオブジェクトブロックを要求し、変更されたオブジェクトのそのローカルコピーを更新する。
いくつかの実施形態では、ストレージインデックス164は、ツリーデータ構造を格納しており、当該ツリーデータ構造では、1つのツリーが、サーバ同期サービス112によるディレクトリの最新の表現を反映している一方、別のツリーが、クライアント同期サービス156によるディレクトリの最新の表現を反映している。クライアント同期サービスは、サーバ同期サービス112にデータを要求することによって、又はクライアントデバイス150上の変更をコンテンツ管理システム110にコミットすることによって、ツリー構造が一致することを保証するように機能しうる。
場合によっては、クライアントデバイス150は、利用可能なネットワーク接続を有さないことがある。このシナリオでは、クライアント同期サービス156は、オブジェクト変更についてリンクされたコレクションを監視し、ネットワーク接続が利用可能であるタイミングにおけるコンテンツ管理システム110への後の同期のために、それらの変更をキューに入れうる。同様に、サブジェクトは、コンテンツ管理システム110との同期を手動で開始、停止、一時停止、又は再開しうる。
クライアント同期サービス156は、コンテンツ管理システム110上の特定のサブジェクトアカウントと関連付けられた全てのコンテンツを同期させてもよい。あるいは、クライアント同期サービス156は、コンテンツ管理システム110上の特定のサブジェクトアカウントと関連付けられたオブジェクトのうちの一部を選択的に同期させてもよい。オブジェクトのうちの一部のみを選択的に同期させることは、クライアントデバイス150上の空間を維持し、帯域幅を節約しうる。
いくつかの実施形態では、クライアント同期サービス156は、特定のサブジェクトアカウントと関連付けられたオブジェクトの一部を選択的に格納し、オブジェクトの残りの部分のためにプレースホルダオブジェクトをクライアントストレージに格納する。例えば、クライアント同期サービス156は、コンテンツ管理システム110上の対応する完全なオブジェクトの、同一のファイル名、パス、拡張子、メタデータを有するが、当該完全なオブジェクトのデータを欠いている、プレースホルダオブジェクトを格納しうる。プレースホルダオブジェクトは、数バイト以下のサイズでありうる一方、対応する完全なオブジェクトはそれより大幅に大きいことがある。クライアントデバイス150がオブジェクトへのアクセスを試みた後に、クライアント同期サービス156は、コンテンツ管理システム110からオブジェクトのデータを取り出し、完全なオブジェクトをクライアントデバイス150に提供しうる。このアプローチは、コンテンツ管理システム110上の、サブジェクトのオブジェクトへの完全なアクセスを依然として提供しながら、空間及び帯域幅の大幅な節約を提供できる。
協調機能(Collaboration features)
コンテンツ管理システム110の別の機能は、サブジェクト間の協調を容易にすることである。協調機能には、オブジェクト共有、オブジェクトにコメントすること、オブジェクトに対する共同作業、インスタントメッセージング、プレゼンスの提供、及びオブジェクトに関するシーン状態情報等が含まれる。
共有(Sharing)
コンテンツ管理システム110は、共有サービス128を介して共有オブジェクトを管理しうる。オブジェクトへのリンクを提供することによってオブジェクトを共有することは、コンテンツ管理システム110とネットワーク通信を行う任意のコンピューティングデバイスからオブジェクトへアクセス可能にすることを含みうる。しかしながら、いくつかの実施形態では、リンクは、コンテンツ管理システム110と、アイデンティティ及びアクセス管理(IAM:Identity and Access Management)サービス132によって実施されるアクセス制限と関連付けられうる。コンテンツを共有することは更に、各サブジェクトアカウントがオブジェクトへのアクセスを有するように、コンテンツ管理システム110内のコンテンツを(オブジェクトと関連付けられた元のサブジェクトアカウントに加えて)少なくとも1つの追加のサブジェクトアカウントと共有するために、共有サービス128を使用して、コンテンツをリンクすることを含みうる。追加のサブジェクトアカウントは、コンテンツを受け入れることによってコンテンツへのアクセスを得ることができ、当該コンテンツは、次いで、ウェブインタフェースサービス124を介してアクセス可能であるか、又はクライアントデバイス150上のそれらのアカウントと関連付けられたディレクトリ構造内から直接アクセス可能である。共有は、プラットフォームに依存しない方法で実行されうる。即ち、コンテンツは、種々のタイプ、能力、オペレーティングシステム等の複数のクライアントデバイス150にわたって共有されうる。コンテンツは更に、種々のタイプのサブジェクトアカウントにわたって共有されうる。
コンテンツ管理システム110内でオブジェクトを共有するために、共有サービス128は、オブジェクトと関連付けられたオブジェクトデータベース148内のコンテンツアイテムとともに、チームのサブジェクトID又は1つ以上のサブジェクトアカウントのサブジェクトIDを追加してもよく、それにより、追加された(1つ以上の)サブジェクトアカウントにオブジェクトへのアクセスを許可する。共有サービス128は更に、オブジェクトへのサブジェクトアカウントのアクセスを制限するために、オブジェクトデータベース148内のコンテンツアイテムにサブジェクトIDがアクセスすることを許可されないようにしうる。共有サービス128は、オブジェクト識別子、オブジェクトへのアクセスが与えられたサブジェクト識別子、及びアクセスレベルをオブジェクトデータベース148内に記録しうる。例えば、いくつかの実施形態では、単一のコンテンツアイテムに関連付けられたサブジェクト識別子が、関連付けられたオブジェクトに関するそれぞれのサブジェクト識別子に対して異なるパーミッションを特定しうる。
いくつかの実施形態では、コンテンツ管理システム110は、個別のオブジェクトに関する完全なアクセス権の記述を含むアクセス制御リスト145を含みうる。コンテンツ管理システム内の任意の個別のオブジェクトのためのアクセス制御リストは、オブジェクトデータベース148から導出されうる。いくつかの実施形態では、個別のオブジェクトのための永続的なアクセス制御リスト145を維持することは望ましくなく、個別のオブジェクトのためのアクセス制御リスト145は必要な場合に導出されうるためである。
コンテンツ管理システム110の外部でオブジェクトを共有するために、共有サービス128は、ユニフォームリソースロケータ(URL)等のカスタムネットワークアドレスを生成してもよく、これにより、任意のウェブブラウザが、認証無しでコンテンツ管理システム110内のオブジェクト又はコレクションにアクセスすることが可能になる。これを達成するために、共有サービス128は、生成されたURLにコンテンツ識別データを含めてもよく、これは、後で、要求されたオブジェクトを適切に識別して返送するために使用されうる。例えば、共有サービス128は、生成されたURL内に、アカウント識別子とコンテンツパス又はオブジェクト識別コードとを含めうる。URLの選択に応じて、当該URLに含まれるコンテンツ識別データがコンテンツ管理システム110へ送信されてよく、当該コンテンツ管理システムは、受信されたコンテンツ識別データを使用して、適切なオブジェクトを識別して当該オブジェクトを返送しうる。
URLを生成することに加えて、共有サービス128は、オブジェクトへのURLが作成されたことをオブジェクトデータベース148に記録するように構成されてもよい。いくつかの実施形態では、オブジェクトに関連付けられたオブジェクトデータベース148へのエントリが、オブジェクトへのURLが作成されたかどうかを示すURLフラグを含みうる。例えば、URLフラグは、オブジェクトへのURLが作成されていないことを示すために、0又は偽(false)に初期設定されたブール値でありうる。共有サービス128は、オブジェクトへのURLを生成した後、フラグの値を1又は真(true)に変更しうる。
いくつかの実施形態では、共有サービス128は、パーミッションのセットを、オブジェクトに対するURLに関連付けうる。例えば、サブジェクトがURLを介してオブジェクトへのアクセスを試みる場合に、共有サービス128は、制限されたパーミッションのセットを当該オブジェクトに対して提供しうる。制限されたパーミッションの例には、サブジェクトがオブジェクトをダウンロードできない、オブジェクトを保存できない、オブジェクトをコピーできない、オブジェクトを修正できない等の制限が含まれる。いくつかの実施形態では、制限されたパーミッションは、指定されたドメインからのみ、即ち、企業ネットワークドメイン内からのみ、又は指定されたドメインに関連付けられたアカウント、例えば、企業アカウント(例えば、@acme.com)に関連付けられたアカウントによってのみ、オブジェクトへのアクセスを許可する制限を含む。
いくつかの実施形態では、共有サービス128は更に、生成されたURLを非アクティブ化するように構成されてもよい。例えば、オブジェクトデータベース148への各エントリは、生成されたURLからの要求に応答してコンテンツを返すべきかどうかを示すURLアクティブフラグを含んでもよい。例えば、共有サービス128は、URLアクティブフラグが1又は真に設定されている場合にのみ、生成されたリンクによって要求されたオブジェクトを返しうる。このように、URLアクティブフラグの値を変更することで、URLが生成されたオブジェクトへのアクセスを容易に制限することができる。これにより、オブジェクトを移動させたり、生成されたURLを削除したりすることなく、共有オブジェクトにサブジェクトがアクセスすることを制限できる。同様に、共有サービス128は、URLアクティブフラグの値を1又は真に再び変更することによって、URLを再アクティブ化しうる。これにより、新たなURLを生成する必要なく、サブジェクトがオブジェクトへのアクセスを容易に復元できる。
いくつかの実施形態では、コンテンツ管理システム110は、オブジェクトをアップロードするためのURLを指定してもよい。例えば、サブジェクトアカウントを有する第1のサブジェクトがそのようなURLを要求し、URLを投稿サブジェクトに提供することができ、投稿サブジェクトは、当該URLを使用してオブジェクトを第1のサブジェクトのサブジェクトアカウントにアップロードできる。
チームサービス(Team Service)
いくつかの実施形態では、コンテンツ管理システム110はチームサービス130を含む。チームサービス130は、サブジェクトアカウントの定義されたチームを作成及び管理するための機能を提供しうる。チームは、サブチーム(例えば、ビジネスユニット、又はプロジェクトチーム等)を有する会社のために作成されうるとともに、チーム及びサブチームに割り当てられたサブジェクトアカウント、又はチームは、サブジェクトアカウントの任意の定義されたグループのために作成されうる。チームサービス130は、チーム、プライベートサブジェクトアカウントフォルダ、及びアクセス制限された共有フォルダに対して、共通の共有空間を提供しうる。チームサービスは更に、管理者がチーム内のコレクション及びオブジェクトを管理するための管理インタフェースを提供しうるとともに、チームに関連付けられたサブジェクトアカウントを管理しうる。チーム、サブチーム、サブジェクトアカウントは全て、サブジェクトデータベース140内のサブジェクト識別子を与えられ、サブジェクトアカウントによるチームへのメンバーシップもサブジェクトデータベース140に記録される。
IAM(アイデンティティ及びアクセス管理)サービス
いくつかの実施形態では、コンテンツ管理システム110はIAMサービス132を含む。IAMサービス132は、オブジェクトにアクセスしようとするサブジェクトアカウントがオブジェクトにアクセスするための適切な権限を有することを保証する。IAMサービス132は、名前空間にアクセスするための要求に従い、サブジェクトアカウントに許可された能力を返しうる、クライアントアプリケーション152からトークンを受信しうる。複数のレベルのアクセスを有するサブジェクトアカウント(例えば、サブジェクト権限及び管理者権限を有するサブジェクトアカウント)の場合、IAMサービス132は更に、管理者による意図しないアクションを回避するために明示的な特権エスカレーション(privilege escalation)を必要としうる。
存在及びシーン状態(Presence and Seen State)
いくつかの実施形態では、コンテンツ管理システムは、オブジェクトが共有されているサブジェクトが、どのように当該オブジェクトとインタラクションを行っているか、又は当該オブジェクトとインタラクションを行ったかについての情報を提供しうる。いくつかの実施形態では、コンテンツ管理システム110は、オブジェクトが共有されているサブジェクトが、現在オブジェクトを閲覧していることを報告しうる。例えば、クライアント協調サービス160は、クライアントデバイス150がオブジェクトにアクセスしている場合に通知サービス117に通知しうる。通知サービス117は、その後、同じオブジェクトへのアクセスを有する他のサブジェクトの全てのクライアントデバイスに、そのオブジェクトに対するクライアントデバイス150のサブジェクトの存在を通知しうる。
いくつかの実施形態では、コンテンツ管理システム110は、共有オブジェクトとのサブジェクトのインタラクションの履歴を報告しうる。協調サービス126は、メタデータデータベース146及びオブジェクトデータベース148等のデータソースに問い合わせて、サブジェクトがオブジェクトを保存したこと、サブジェクトがオブジェクトを未だ閲覧していないこと等を判定するとともに、通知サービス117を使用して、このステータス情報を他のサブジェクトに配布することで、誰がオブジェクトを現在閲覧中であるか又は閲覧していたか、又は誰がオブジェクトを修正したかを知ることができるようにしうる。
協調サービス126は、オブジェクトが元々、コメント機能をサポートしていなくても、コンテンツに関連付けられたコメントを容易にしうる。そのようなコメントは、メタデータデータベース146に格納されうる。
協調サービス126は、サブジェクトについての通知を発信及び送信しうる。例えば、サブジェクトは、コメント内に別のサブジェクトをメンションでき、協調サービス126は、コメント内でメンションされたことのそのサブジェクトに対する通知を送信しうる。種々の他のオブジェクトイベントが、オブジェクトの削除、オブジェクトの共有等を含む通知をトリガしうる。
協調サービス126は、サブジェクトがインスタントメッセージ、音声通話、電子メール等を送受信しうるメッセージングプラットフォームを提供しうる。
協調オブジェクト(Collaboration Objects)
いくつかの実施形態では、コンテンツ管理サービスは更に、インタラクション型オブジェクト協調プラットフォームを提供しうる協調ドキュメントサービス134を含んでよく、それによって、サブジェクトは協調オブジェクトを同時に作成し、協調オブジェクト内にコメントを行い、協調オブジェクト内のタスクを管理しうる。協調オブジェクトは、サブジェクトが協調オブジェクトエディタを使用して作成及び編集することが可能なファイルでありうるとともに、協調オブジェクト要素を含みうる。協調オブジェクト要素は、協調オブジェクト識別子、1つ以上の作成者識別子、協調オブジェクトテキスト、協調オブジェクト属性、インタラクション情報、コメント、共有しているサブジェクト等を含みうる。協調オブジェクト要素は、データベースエンティティとして格納されてよく、これにより、協調オブジェクトの検索及び取り出しが可能になる。複数のサブジェクトが、同時に又は異なる時間に、協調オブジェクトにアクセスし、閲覧し、編集し、協働(collaboate)しうる。いくつかの実施形態では、これは、ウェブインタフェースを介してオブジェクトにアクセスすることを2つのサブジェクトに要求することによって管理されてよく、そこでオブジェクトの同じコピー上で同時に作業できる。
協調コンパニオンインタフェース(Collaboration Companion Interface)
いくつかの実施形態では、クライアント協調サービス160は、クライアントデバイス150上に提示されているオブジェクトに関連する情報を表示する目的で、ネイティブアプリケーションコンパニオンインタフェースを提供しうる。クライアントデバイス150に格納されて実行されるネイティブアプリケーションによってオブジェクトがアクセスされる実施形態では、オブジェクトは、コンテンツアプリケーション152によって管理されるように、クライアントデバイス150のファイルシステムの指定されたロケーションあり、ネイティブアプリケーションは、上述の協調データを表示するためにネイティブな方法を提供しなくてもよい。そのような実施形態では、クライアント協調サービス160は、サブジェクトがオブジェクトを開いたことを検出してもよく、協調データ等の、オブジェクトのための追加情報を有するオーバーレイを提供しうる。例えば、追加情報は、オブジェクトに対するコメント、オブジェクトの状態、オブジェクトを以前に又は現在閲覧している他のサブジェクトのアクティビティを含みうる。このようなオーバーレイは、他のサブジェクトが現在オブジェクトを編集中であることに起因して変更が失われる可能性があることを、サブジェクトに警告しうる。
いくつかの実施形態では、上述のサービス又はストレージ/データベースのうちの1つ以上は、公開又はプライベートアプリケーションプログラミングインタフェースを使用してアクセスされうる。
特定のソフトウェアアプリケーションは、サブジェクトの代わりに、APIを介してオブジェクトストレージ142にアクセスしうる。例えば、クライアントデバイス150上で実行されるアプリケーション等のソフトウェアパッケージは、コンテンツを読み出す、書き込む、作成する、削除する、共有する、又は他の方法で操作するために、サブジェクトが認証クレデンシャル(credential)を提供する場合に、コンテンツ管理システム110に対して直接、APIコールをプログラムで行いうる。
サブジェクトは、ウェブインタフェースサービス124によって生成されて供給されるウェブインタフェースを介して、サブジェクトアカウントに格納されたコンテンツを閲覧又は操作しうる。例えば、サブジェクトは、ウェブブラウザ内で、コンテンツ管理システム110によって提供されるウェブアドレスにナビゲートしうる。オブジェクトの新バージョンをアップロードする等、ウェブインタフェースを介して行われるオブジェクトストレージ142内のコンテンツに対する変更又は更新が、サブジェクトのアカウントに関連付けられた他のクライアントデバイスに伝え戻されてもよい。例えば、それぞれが独自のクライアントソフトウェアを有する複数のクライアントデバイスが、単一のアカウントと関連付けられてもよく、アカウント内のオブジェクトが、複数のクライアントデバイスのそれぞれ間で同期されてもよい。
クライアントデバイス150は、サブジェクトの代わりにコンテンツ管理システム110に接続しうる。サブジェクトは、例えばクライアントデバイス150がデスクトップ又はラップトップコンピュータ、電話機、テレビ、インターネット・オブ・シングス(internet-of-things)デバイス等である場合、クライアントデバイス150と直接インタラクションを行いうる。代替的に又は追加的に、クライアントデバイス150は、例えばクライアントデバイス150がサーバである場合、サブジェクトがクライアントデバイス150に対する物理的なアクセスを有することなく、サブジェクトの代わりに動作しうる。
クライアントデバイス150のいくつかの機能は、クライアントデバイス150上にインストールされたアプリケーションによって有効化される。いくつかの実施形態では、アプリケーションは、コンテンツ管理システム固有のコンポーネントを含みうる。例えば、コンテンツ管理システム固有のコンポーネントは、スタンドアロンのアプリケーション152、1つ以上のアプリケーションプラグイン、及び/又はブラウザ拡張でありうる。しかしながら、サブジェクトは、クライアントデバイス150上に常駐し、かつ、コンテンツ管理システム110と通信するように構成された、ウェブブラウザ等のサードパーティアプリケーションを介して、コンテンツ管理システム110とインタラクションを行ってもよい。種々の実装形態では、クライアント側のアプリケーション152は、サブジェクトがコンテンツ管理システム110とインタラクションを行うためのサブジェクトインタフェース(UI)を提示しうる。例えば、サブジェクトは、ファイルシステムと統合されたファイルシステムエクスプローラを介して、又はウェブブラウザアプリケーションを使用して表示されるウェブページを介して、コンテンツ管理システム110とインタラクションを行いうる。
いくつかの実施形態では、クライアントアプリケーション152は、コンテンツ管理システム110の2つ以上のアカウントのコンテンツを管理し、かつ、同期させるように構成されうる。そのような実施形態では、クライアントアプリケーション152は、複数のアカウントにログインしたままで、当該複数のアカウントに通常のサービスを提供しうる。いくつかの実施形態では、各アカウントは、ファイルシステム内のフォルダとして見えてもよく、そのフォルダ内の全てのオブジェクトがコンテンツ管理システム110と同期されてもよい。いくつかの実施形態では、クライアントアプリケーション152は、複数のアカウントのうちの1つを選択してプライマリアカウント又はデフォルトアカウントとするセレクタを含んでもよい。
サードパーティサービス(Third Party Services)
いくつかの実施形態では、コンテンツ管理システム110は、ワークスペースサービス、電子メールサービス、タスクサービス等の、1つ以上のサードパーティサービスとのインタフェースを行うための機能を含みうる。そのような実施形態では、コンテンツ管理システム110は、サードパーティサービスとのインタラクションを行うことで、それらのサードパーティサービスからの機能又はデータを、コンテンツ管理システム110によって提供される種々のサブジェクトインタフェースにもたらすために、サードパーティサービスにおけるサブジェクトアカウントのためのログイン・クレデンシャルの提供を受けうる。
コンテンツ管理システム110には特定のコンポーネントが提示されるが、システム100のアーキテクチャ構成が単に1つの可能性のある構成であり、より多くの又はより少ないコンポーネントを有する他の構成が可能であることを、当業者であれば理解されたい。更に、サービスは、多かれ少なかれ機能性を有してよく、別のサービスを伴うものとして説明された機能性を含むことさえある。更に、一実施形態に関して本明細書に記載の機能は、別の実施形態に関して記載の機能と組み合わされてもよい。
システム100には特定のコンポーネントが提示されるが、システム100のアーキテクチャ構成が単に1つの可能性のある構成であり、より多くの又はより少ないコンポーネントを有する他の構成が可能であることを、当業者であれば理解されたい。
図2は、いくつかの実施形態によるクライアント同期サービスの例を示す。クライアント同期サービス156は、図1のクライアントデバイス150に実装されうる。しかしながら、いくつかの実施形態では、クライアント同期サービス156は別のコンピューティングデバイス上で実装されうる。クライアント同期サービス156は、コンテンツ管理システム110と、クライアント同期サービス156が実行されるクライアントデバイス150との間で、オブジェクトに対する変更を同期させるように構成される。
クライアント同期サービス156は、ファイルシステムインタフェース205と、サーバインタフェース210と、ツリーストレージ220と、プランナ225と、スケジューラ230とを含みうる。追加の又は代替のコンポーネントも含まれうる。
ファイルシステムインタフェース205は、クライアントデバイス150のローカルファイルシステム270上のオブジェクトに対する変更を処理し、ローカルツリー250を更新するように、又はローカルファイルシステム270に変更を加えるように構成される。例えば、ファイルシステムインタフェース205は、クライアントデバイス150のローカルファイルシステム270上の監視されるディレクトリ内のオブジェクトに対する変更を検出しうる。変更は更に、図1のクライアントアプリケーション152を介して行われて検出されてもよい。ファイルシステムインタフェース205は、ローカルツリー250を更新しうる。ローカルツリー250に対する更新は、クライアントデバイス上のオブジェクトに対する変更(新しい、削除された、修正された、コピーされた、名前変更された、又は移動されたオブジェクト)に基づいて行われうる。
サーバインタフェース210は、コンテンツ管理システム110におけるオブジェクトに対するリモート変更の処理及びリモートツリー210の更新を支援するように構成される。例えば、サーバインタフェース210は、クライアントデバイス150とコンテンツ管理システム110との間で、オブジェクトに対する変更を同期させるために、サーバ同期サービス112と通信しうる。コンテンツ管理システム110におけるオブジェクトに対する変更(新しい、削除された、修正された、コピーされた、名前変更された、又は移動されたオブジェクト)が検出されうるとともに、コンテンツ管理システム110における変更を反映するために、リモートツリー210に対して更新が行われうる。サーバインタフェース210は更に、オブジェクトデータベース148を更新するために、ローカルファイルシステム270におけるオブジェクトに対するローカル変更のサーバ同期サービス112への通信を支援するように構成される。
ツリーストレージ220は、クライアント同期サービス156によって使用されるツリーデータ構造を格納し、維持するように構成される。例えば、ツリーストレージ220は、ローカルツリー250、同期ツリー235、及びリモートツリー210を格納しうる。いくつかの実施形態では、ツリーストレージ220は、レイテンシ及び応答時間を低減するために、ツリーデータ構造を永続的メモリ(例えば、ハードディスク又は他の二次記憶装置)並びにメインメモリ(例えば、RAM又は他の一次記憶装置)に格納しうる。例えば、クライアントデバイス又はクライアント同期サービス156の起動時に、ツリーデータ構造が永続的メモリから取り出され、メインメモリにロードされうる。ツリーストレージ220は、メインメモリ上のツリーデータ構造にアクセスして更新するしうるとともに、クライアントデバイス又はクライアント同期サービス156がシャットダウンされる前に、ツリーストレージ220は、更新されたツリーデータ構造を永続的メモリに格納されうる。
リモートツリー210は、サーバ状態又はクライアントデバイスからリモートに(例えば、コンテンツ管理システムのサーバ上に)格納されたオブジェクトの状態を表す。ローカルツリー250は、ファイルシステム状態、又はクライアントデバイス上にローカルに格納された対応するオブジェクトの状態を表す。同期ツリー235は、ローカルツリー及びリモートツリーのためのマージベースを表す。マージベースは、ローカルツリーとリモートツリーとの共通の祖先、又はローカルツリーとリモートツリーとの間の最後の既知の同期状態と考えられうる。
各ツリーデータ構造(例えば、リモートツリー210、同期ツリー235、又はローカルツリー250)は、1つ以上のノードを含みうる。ツリーデータ構造内の各ノードは、オブジェクト(例えば、ファイル、ドキュメント、フォルダ等)を表しうる。ツリーデータ構造内の各ノードは、例えば、オブジェクトの親ノードのオブジェクト識別子を指定するディレクトリオブジェクト識別子、オブジェクトのオブジェクト名、オブジェクトのオブジェクト識別子、及びオブジェクトのメタデータ等のデータを含みうる。
プランナ225は、ツリーデータ構造の状態に基づいて、コンテンツ管理システム110に関連付けられたサーバ状態と、クライアントデバイス150に関連付けられたファイルシステム状態との間の差を検出するように構成される。例えば、プランナ225は、リモートツリー210と同期ツリー235との間に差があるかどうかを判定しうる。リモートツリー210と同期ツリー235との間の差は、コンテンツ管理システム110に格納された1つ以上のオブジェクトに対してリモートで実行されたアクションが、サーバ状態とファイルシステム状態とを非同期にしたことを示す。同様に、プランナ225は更に、ローカルツリー250と同期ツリー235との間に差があるかどうかを判定しうる。ローカルツリー250と同期ツリー235との間の差は、クライアントデバイス150上のローカルファイルシステム270に格納された1つ以上のオブジェクトに対してローカルで実行されたアクションが、サーバ状態とファイルシステム状態とを非同期にしたことを示す。差が検出された場合、プランナ225は、ツリーデータ構造を同期させる動作のセットを生成する。
いくつかのシナリオでは、リモートツリーと同期ツリーとの間の差に基づいて生成される動作のセットと、ローカルツリーと同期ツリーとの間の差に基づいて生成される動作のセットとが競合しうる。プランナ225は更に、2セットの動作を単一の統合された動作プランに統合するように構成されうる。
スケジューラ230は、生成された動作プランを取得し、それらの動作の実行を管理するように構成される。いくつかの実施形態によれば、スケジューラ230は、動作プランにおける各動作を、動作を実行するために実行される必要がある1つ以上のタスクの系列に変換する。いくつかのシナリオでは、いくつかのタスクが古くなるか、又はもはや関連性が無くなりうる。スケジューラ230は、それらのタスクを識別し、それらのタスクをキャンセルするように構成される。
ローカルツリー250と同期ツリー235との間に差が存在する場合、変更をコンテンツ管理システム110に同期させる必要がある。 ローカルファイルシステム270の変更をコンテンツ管理システム110に同期させるために、クライアント同期サービスは、特定の同期動作に関連するサーバ同期サービス112にインテントをコミットしうる。意図をコミットするために、クライアントデバイス150上のクライアント同期サービス156は、クライアントデバイス150における動作をコミットする意図を記録する。クライアント同期サービス156は、保留中のコミットをトラッキングするために、クライアントデバイス150のディスク又はメモリ上で動作を永続的にコミットする意図を記録しうる。クライアントデバイス150は、イベントが、失敗又は成功等の保留中のコミットの除去をトリガするまで、ダーティコミットレコード及び追跡修正を格納しうる。クライアント同期サービス156は更に、動作をコミットすることを要求するメッセージをサーバ同期サービス112に送信することによって、動作をサーバ同期サービス112にコミットする。
サーバ同期サービス112は、コンテンツ管理システム110へのコミットが成功したか、又は誤差を示す返信メッセージを送信しうる。コミットが成功したことをクライアント同期サービス156が知ると、クライアント同期サービス156は、同期された動作を含めるためにリモートツリー610及び同期ツリー620を更新し、かつ、クライアントデバイス150から動作をコミットする意図をクリアする。
クライアントアプリケーション152は、クライアントデバイスに知られている最後の同期時刻以降にオブジェクトデータベース148に記録されたオブジェクト上で発生するイベントに関する情報を要求することによって、サーバに存在する変更を学習しうる。いくつかの実施形態では、クライアント同期サービス156は、定期的に、又は可能性ある変更についての通知の受信に応答して、更新された情報を求める要求を行う。コンテンツ管理システムにおけるアカウントに変更が生じた場合、サーバ同期サービス112は、実行された動作に関する情報を、リモートツリー215を更新しうるクライアント同期サービス156に送信しうる。その後、クライアント同期サービス156は、ローカルファイルシステム270が更新される必要があることを示す、リモートツリー215と同期ツリー235との間の差を検出しうる。プランナ225は、ローカルファイルシステム270を更新するために必要とされる動作を識別しうるとともに、サーバインタフェース210は、コンテンツ管理システム110からの、オブジェクト等を構成するブロック等の任意のデータを要求しうる。
クライアント同期サービス156は、ローカルファイルシステム270、ローカルツリー250、及び同期ツリー235を更新することで、システムを同期状態にしうる。更に、クライアント同期サービス156は、オブジェクトデータベース148から受信された情報に関連する同期時刻を識別する情報を格納することで、クライアントアプリケーションが少なくとも最後の同期時刻までは最新であることを示しうる。いくつかの実施形態では、最後の同期時刻は、オブジェクトデータベース148内の行に関連し、コンテンツ管理システム110から受信される暗号署名されたカーソルの一部として格納されうる。クライアント同期サービスは、次回、更新された情報を要求すると、読み出しを開始するオブジェクトデータベース148内のポイントを識別するためのカーソルを供給する。
アンカーオブジェクト(Anchor Object)
いくつかの実施形態では、コンテンツ管理システム110は、クライアントデバイス150上の監視されるディレクトリの外部にある外部ディレクトリのためのアンカーオブジェクトを生成する機能を含みうる。アンカーオブジェクトは、専用の属性を有するオブジェクトである。クライアントアプリケーション152は、アンカーオブジェクトを、クライアント同期サービス156によって監視されるディレクトリの外部にあるディレクトリを指すオブジェクトとして認識しうる。例えば、図2は、クライアント同期サービス156によって監視されるディレクトリ内のアンカーオブジェクト271を示しており、アンカーオブジェクト271は、外部ディレクトリ外部ハードドライブ151を指す。アンカーオブジェクト271は、図2の外部ハードドライブ151を指すものとして示されているが、アンカーオブジェクト271は、同期サービス156によって監視されるディレクトリの外側にある、クライアントデバイス150上の他のディレクトリを指す場合もあることを理解されたい。
アンカーオブジェクトを利用することにより、アンカーオブジェクトによって表される外部ディレクトリのコンテンツをコンテンツ管理システム110に同期させることができる。いくつかの実施形態では、アンカーオブジェクトは、クライアントデバイス150に最初に格納されることなく、外部ディレクトリ内のオブジェクトを直接同期させるようにクライアント同期サービスに指示するプロパティと関連付けられうる。
コンテンツ管理システム110の観点から、アンカーオブジェクトによって表される外部ディレクトリは、当該アンカーオブジェクトを含むディレクトリ内に当該外部ディレクトリが位置するかのように扱われうる。アンカーオブジェクトは、監視されるディレクトリ内のディレクトリとして格納されうるとともに、リモートツリー215に示されるように、その下に位置するオブジェクトと共に現れうる。
しかしながら、クライアント同期サービス156の観点から、アンカーオブジェクトは、それがローカルツリー250及び同期ツリー235においてどのように表されるかについてのいくつかの特性を変更する専用の属性を有し、外部ディレクトリに格納されたオブジェクトの同期のいくつかの態様を変更しうる。監視されるディレクトリの表現は、アンカーオブジェクト271を含む、監視されるディレクトリ内のオブジェクトのファイルシステム構造を表すローカルツリー構造250に格納されうる。アンカーオブジェクト271は、ローカルツリー構造において、それがアンカーオブジェクトであることを示すために、専用の属性の一部としてフラグを有するファイル又は専用のオブジェクトとして表される。同様に、アンカーオブジェクトの下位の任意のオブジェクトは、それらが外部ディレクトリの一部であることを示すためのフラグ又は専用の属性を有するローカルツリー250又は同期ツリー235にも現れうる。
いくつかの実施形態では、アンカーオブジェクトの専用の属性は、関連する外部ディレクトリの属性を記述する拡張属性又は最終データストリームである。例えば、専用の属性は、関連する外部ディレクトリのロケーション情報をバイナリ・ラージ・オブジェクト(BLOB:Binary Large Object)として格納するXattrであってもよい。ロケーション情報は、ディレクトリID、iノード・リファレンス、デバイスID、オブジェクトID、ユニークID(UUID)、ターゲットロケーション、パス等を含むが、これらに限定されない。専用の属性は、外部ディレクトリ及びその対応するコンテンツの識別情報及びロケーションについてのソース・オブ・トゥルース(source of truth)として機能しうる。
いくつかの実施形態では、クライアント同期サービス156は、専用の属性の存在を検出することによってアンカーオブジェクトを認識しうる。オブジェクトが有効なアンカーオブジェクトであると判定した後、クライアント同期サービス156は、専用の属性によって示される、関連する外部ディレクトリのコンテンツを読み出しうる。その後、クライアント同期サービス156は、外部ディレクトリ上に格納されたコンテンツアイテムをコンテンツ管理システム110に同期させるためにサーバ同期サービス112と通信しうる。外部ディレクトリのそのような同期は、定期的に、又は特定のファイルイベントが発生した際に行われうる。図3A及び図3Bに関して、そのようなプロセスがより詳細に説明される。
いくつかの実施形態では、Xattr等の専用の属性は、コンテンツ管理システムがアンカーオブジェクトに対する特定のユーザ操作をインターセプト(intercept)し、それに応答して所定のアクションを実行することを可能にしうる。図3A及び図3Bに関して、このプロセスがより詳細に説明される。例えば、ユーザが外部ドライブのUUIDを含むXattrを有するアンカーをダブルクリックすると、外部ドライブがアクセス可能である場合、コンテンツ管理システムは、ユーザインタフェースを介して当該外部ドライブのコンテンツを提示しうる。Xattr内の外部ドライブにアクセスできない場合、コンテンツ管理システムは、コンテンツ管理システム上に格納された、外部ドライブの対応する同期済みコンテンツを提示しうる。
いくつかの実施形態では、オブジェクトが有効なアンカーオブジェクトであると判定した後、サーバ同期サービス112は、アンカーオブジェクトの専用の属性を読み出して、当該専用の属性に基づいてインメモリ(in-memory)マップを作成しうる。インメモリマップは、クライアントデバイス150のローカルメモリ等、メモリ内のソース・オブ・トゥルースでありうる。そのような実施形態では、クライアント同期サービス156は、インメモリマップを使用して、外部ディレクトリのUUIDを、ローカルツリー構造内のコンテンツ管理システムパスに変換し、これにより、外部ディレクトリのコンテンツを追跡しうる。そのようなインメモリマップは、定期的に、又は特定のファイルイベントで更新される。図4に関して、そのようなプロセスがより詳細に説明される。
クライアントデバイス150のユーザの観点から、アンカーオブジェクトは、クライアントデバイス150のユーザインタフェースを介してフォルダとして表されうる。ユーザがクライアントデバイス150上のユーザインタフェースを介してアンカーオブジェクトに対する操作を実行する場合、ユーザエクスペリエンスは、ユーザインタフェース上の任意の他のフォルダとのインタラクションと同じである。例えば、ユーザは、アンカーオブジェクトを開いて、その対応するコンテンツを見ること、アンカーオブジェクトを削除すること、アンカーオブジェクトを移動させること、又はアンカーオブジェクトの名前を変更することを行いうる。図5に関して、そのようなプロセスがより詳細に説明される。
アンカーオブジェクトの導入により、クライアントデバイスの外部に格納されたコンテンツアイテムをコンテンツ管理システムに同期させるための既存の技術に対するいくつかの改善が提供される。第1に、外部コンテンツは、最初にクライアントデバイス上にローカルに格納される必要なく、外部ロケーションからコンテンツ管理システムに直接同期されうる。第2に、アンカーオブジェクトは、外部ディレクトリがクライアントデバイスにアクセス可能であるか否かにかかわらず、外部ディレクトリとのインタラクションを行う一貫性のあるユーザエクスペリエンスを提供する。
図3Aは、クライアントデバイスの外部ロケーションを同期させるための例示的な方法300を示す。例示的な方法300は特定のシーケンスの動作を示しているが、当該シーケンスは、本開示の範囲から逸脱することなく変更されうる。例えば、示される動作のいくつかは、並列に実行されてもよいし、又は方法300の機能に実質的に影響を与えない、異なるシーケンスで実行されてもよい。他の例では、方法300を実装する例示的なデバイス又はシステムの異なるコンポーネントが、実質的に同時に、又は特定のシーケンスで、機能を実行しうる。
動作302において、クライアントデバイス上で実行されるコンテンツ管理システムのクライアントアプリケーション152は、同期ディレクトリの外部にある外部ディレクトリを検出しうる。例えば、図1に示すクライアントアプリケーション152は、クライアントデバイス150上のクライアント同期サービス156によって監視されるディレクトリ等の、同期ディレクトリの外部にある外部ディレクトリを検出しうる。外部ディレクトリは、クライアントデバイスに接続された外部ハードドライブ、クライアントデバイスがアクセス可能なネットワークドライブ、クライアントデバイス上のフォルダ、クライアントデバイス上のファイルオブジェクト、クライアントデバイスに接続されたカメラ等でありうる。
動作304において、コンテンツ管理システムのクライアントアプリケーション152は、グラフィカルユーザインタフェース内に外部ディレクトリを表現しうる。第1の例では、クライアントアプリケーション152は、外部ディレクトリが同期のために利用可能であることをユーザに知らせるメッセージを提示するプロンプトを表示しうる。第2の例では、グラフィカルユーザインタフェース内の外部ディレクトリの表現は、クライアントデバイス150上でアクセス可能なフォルダ又は外部ドライブのリスト内の外部ディレクトリを表すアイコンでありうる。図6A及び図6Bに関して、この動作がより詳細に説明される。
動作306において、コンテンツ管理システムのクライアントアプリケーション152は、クライアントデバイス150のユーザから外部ディレクトリの表現の選択を受け付けうる。図6A及び図6Bに関して、この動作がより詳細に説明される。
動作308において、コンテンツ管理システムのクライアントアプリケーション152は、外部ディレクトリの表現の選択を受け付けたことに応答して、同期のために外部ディレクトリを登録するオプションを提示しうる。図6A及び図6Bに関して、この動作がより詳細に説明される。
動作309において、コンテンツ管理システムのクライアントアプリケーション152は、動作306において外部ディレクトリの表現の選択を受け付けたことに応答して、又は動作308において同期のために外部ディレクトリを登録するためのオプションを提示することと共に、同期から外部ディレクトリ上のオブジェクトを除外するためのオプションを提示しうる。
動作310において、コンテンツ管理システムのクライアントアプリケーション152は、外部ディレクトリへのリンクを作成しうる。第1の例では、外部ディレクトリへのリンクは、同期対象の外部ディレクトリを指すものとしてリンクを識別する専用の属性を含む。ディレクトリの属性は、ディレクトリID、iノード・リファレンス、デバイスID、オブジェクトID、UUID、ターゲットロケーション、パス等を含むが、これらに限定されない。第2の例では、リンクは、アンカーオブジェクトと呼ばれるカスタムオブジェクトタイプである。図1に関して上述したように、アンカーオブジェクトは、専用の属性を有するオブジェクトである。アンカーオブジェクトは、同期対象の外部ディレクトリを指すものとしてアンカーオブジェクトを識別し、かつ、ディレクトリの属性を記述するオブジェクトとして、クライアントアプリケーションによって認識される。第3の例では、リンクは、シンボリックリンク又はショートカットである。
いくつかの実施形態では、動作310においてリンクが作成されると、コンテンツ管理システムのクライアントアプリケーションは、アンカーオブジェクトによって表される外部ディレクトリのファイルイベントに再帰的にサブスクライブしうる。例えば、クライアントアプリケーション152は、毎時、毎日、又は毎月等の、ある期間の満了後に、アンカーオブジェクトによって表される外部ディレクトリのファイルイベントを検出しうる。クライアントアプリケーション152は、クライアントデバイスの外部ロケーションの同期を更に達成する際に、外部ディレクトリの検出されたファイルイベントを使用しうる。
動作312において、クライアントアプリケーション152は、動作310において作成されたリンク271を、クライアントデバイス150上の同期ディレクトリに格納しうる。
動作314において、クライアントアプリケーション152は、同期ディレクトリ内の格納されたリンク271を、選択可能なアイコンとして表現しうる。例えば、リンクは、フォルダ、外部ドライブ、カメラ、ファイルオブジェクト、又はカスタムアイコンとして、ユーザインタフェース上で表現されうる。
動作316において、クライアントアプリケーション152は、外部ディレクトリを表すリンクを介して外部ディレクトリにアクセスしうる。
動作318において、図1に示すクライアントアプリケーション152は、外部ディレクトリにアクセスした後に、当該外部ディレクトリが有効なロケーションであるかどうかを判定しうる。第1の例では、外部ディレクトリが有効なロケーションであると判定することは、外部ディレクトリが存在し、かつ、アクセス可能であると判定することを含む。第2の例では、外部ディレクトリが有効なロケーションであると判定することは、外部ディレクトリが、サポートされているフォーマットであると判定することを含む。サポートされているフォーマットは、クライアントアプリケーションによる読み出しが可能なディスクフォーマットでありうる。サポートされているフォーマットは、拡張属性をサポートするディスクフォーマットでありうる。外部ドライブのフォーマットの例には、FAT32及びexFATが含まれる。いくつかの実施形態では、フォーマットが、必要なメタデータを格納するための拡張属性又は他のメカニズムをサポートしていない場合に、フォーマットは完全にはサポートされないことがある。いくつかの実施形態では、本技術は依然として、限られた方法で機能することが可能でありうる。サポートされていない形式では、単方向同期又は外部ディレクトリのバッチバックアップ等の、機能低下がありうる。
動作318において、クライアントアプリケーション152が、外部ディレクトリが有効なロケーションであると判定した場合、プロセスは動作320に進みうる。動作318において、クライアントアプリケーション152が、外部ディレクトリが有効なロケーションではないと判定した場合、プロセスは終了しうる。
動作320において、コンテンツ管理システムのクライアントアプリケーションは、外部ディレクトリ上の少なくとも1つのオブジェクトを検出しうる。例えば、図1に示すクライアントアプリケーション152は、外部ディレクトリ上の少なくとも1つのオブジェクトを検出しうる。図1に示すクライアントアプリケーション152は、外部ディレクトリのコンテンツに関するメタデータを読み出しうるとともに、外部ディレクトリ内の各オブジェクトを処理して、各オブジェクトのコンテンツを、ハッシュ化されたブロックに変換しうる。一例では、ハッシュ化されたブロックは、クライアントデバイス150のメモリに一時的に格納される。
いくつかの実施形態では、クライアントアプリケーションは、外部ドライブのコンテンツに関連するメタデータを読み出しうるとともに、ある期間の満了後に、各オブジェクトのコンテンツをハッシュ化されたブロックに変換するために、外部ディレクトリ内の各オブジェクトを処理しうる。
動作322において、図1に示すクライアント同期サービス156は、クライアントデバイスの内部ハードドライブ上に少なくとも1つのオブジェクトを最初に格納することなく、外部ディレクトリ上の少なくとも1つのオブジェクトをコンテンツ管理システムに同期させるためにサーバ同期サービス112と通信しうる。一例では、コンテンツ管理システムは、同期ディレクトリのコンテンツを双方向に同期させるように構成されるが、外部ディレクトリの同期は、外部ディレクトリ内のオブジェクトに加えられた変更がコンテンツ管理システムには同期されるが、コンテンツ管理システムのクラウドストレージ上に表現されるオブジェクトに加えられた変更は外部ディレクトリに同期されないように、単方向の同期である。
動作322のいくつかの実施形態では、一部の外部ディレクトリ上のファイルイベントの検出が信頼できない可能性があるため、外部ディレクトリ内で検出されたファイルイベントに基づくものとは対照的に、クライアントアプリケーションは、ある期間の満了後に同期をトリガしてもよい。例えば、図1に示すクライアント同期サービス156は、ある期間の満了後に同期をトリガしうる。一部の状況では信頼できない場合があるが、外部ディレクトリでファイルイベントが検出された後に同期をトリガすることも可能である。例えば、図1に示すクライアント同期サービス156は、外部ディレクトリにおいてファイルイベントが検出された後に同期をトリガしうる。更に、同期を要求するユーザ入力の受け付けに応じて、同期がトリガされてもよい。例えば、図1に示すクライアント同期サービス156は、同期を要求するユーザ入力の受け付けに応じて、同期をトリガしうる。
図1に関して説明したように、オブジェクトの同期は、オブジェクトをブロックに分割することを含みうるとともに、ブロックをコンテンツ管理システム110に送信する前に、ブロック識別子を取得するために当該ブロックはハッシュ関数に挿入されうる。ブロック識別子は、コンテンツ管理システム110がこのブロックをすでに格納しているかどうかを判定するために使用されうる。コンテンツ管理システムがブロックをまだ所有していない場合、当該ブロックは、格納のためにコンテンツ管理システムに送信される。動作322の一例では、同期は更に、メモリに一時的に格納された、ハッシュ化されたブロックを、コンテンツ管理システム110に送信することを含む。
動作324において、クライアントアプリケーション152は、同期から除外されるべき外部ディレクトリ内のオブジェクトを選択するためのユーザ入力を受け付けるのに有効なユーザインタフェースを提供しうる。
いくつかの実施形態では、動作324は、動作322の前に、又はそれと同時に実行されてもよい。
動作326において、クライアントデバイス150は、同期から除外されるべき選択されたオブジェクトを、隠しオブジェクトに格納しうる。
動作328において、図1に示されるクライアントアプリケーション152は、選択されたオブジェクトが隠しオブジェクト内で参照された場合に、クライアントアプリケーション152のクライアント同期サービス156による同期から、選択されたオブジェクトを除外しうる。
いくつかの実施形態では、動作324、326、及び328を実行する代わりに、クライアントアプリケーション152は、同期対象の外部ディレクトリ内のオブジェクトを選択するためのユーザ入力を受け付けるのに有効なユーザインタフェースを提供しうる。例えば、ユーザは、外部ドライブからの全てのフォルダの代わりに、同期対象の外部ドライブからサブフォルダのセットを選択しうる。別の例では、ユーザは、クライアントデバイス150に関連付けられた他のドライブ又はボリュームから、同期対象のサブフォルダのセットを選択しうる。
図3Bは、アンカーオブジェクトの選択を通じてクライアントデバイスの外部ロケーションにアクセスするための例示的な方法350を示す。例示的な方法350は特定のシーケンスの動作を示しているが、当該シーケンスは、本開示の範囲から逸脱することなく変更されうる。例えば、示される動作のいくつかは、並列に実行されてもよいし、又は方法350の機能に実質的に影響を与えない、異なるシーケンスで実行されてもよい。他の例では、方法350を実装する例示的なデバイス又はシステムの異なるコンポーネントが、実質的に同時に、又は特定のシーケンスで、機能を実行しうる。
動作330において、クライアントアプリケーション152は、ユーザインタフェースを通じて、外部ディレクトリを表す格納されたリンクの選択を受け付けうる。
動作332において、図1に示すクライアントアプリケーション152は、外部ディレクトリがアクセス可能であるかどうかを判定しうる。
動作332において、クライアントアプリケーション152が、外部ディレクトリがアクセス可能であると判定した場合、プロセスは動作334に進みうる。
動作334において、クライアントデバイス150は、外部ディレクトリへのアクセスを提供しうる。
動作332において、クライアントアプリケーション152が、外部ディレクトリにアクセス可能ではない判定した場合、プロセスは動作336に進みうる。
動作336において、コンテンツ管理システムのクライアントアプリケーションは、ステップ334におけるコンテンツ管理システムのウェブインタフェース内で、外部ディレクトリの同期済みコンテンツへのアクセスを提供しうる。例えば、図1に示されるクライアントアプリケーション152は、外部ディレクトリがアクセス可能でない場合に、コンテンツ管理システムのウェブインタフェース内で、外部ディレクトリの同期済みコンテンツへのアクセスを提供しうる。この例では、クライアントアプリケーション152は、外部ディレクトリに格納されたコンテンツではなく、コンテンツ管理システム110に格納された、外部ディレクトリの同期済みコンテンツへのアクセスを提供している。
いくつかの実施形態では、Xattr等のアンカーオブジェクトの専用属性は、コンテンツ管理システムが、動作330における選択等の、アンカーオブジェクトに対する特定のユーザ動作をインターセプトし、それに応答して所定の動作を実行することを可能にしうる。例えば、ユーザが外部ドライブのUUIDを含むXattrを有するアンカーをダブルクリックすると、外部ドライブがアクセス可能である場合、クライアントアプリケーション152は、動作334において、ユーザインタフェースを通じて外部ドライブのコンテンツを提示しうる。Xattr内の外部ドライブがアクセス可能でない場合、クライアントアプリケーション152は、動作336において、コンテンツ管理システム上に格納された、外部ドライブの対応する同期済みコンテンツを提示しうる。
いくつかの実施形態では、コンテンツ管理システムのサーバ同期サービスは、外部ディレクトリの同期済みコピーをリンクコンテナに変換しうる。例えば、外部ディレクトリの同期に失敗した場合、サーバ同期サービス112は、コンテンツ管理システム110に格納されている外部ディレクトリの同期済みコピーをリンクコンテナに変換しうる。そのような変換が行われると、ローカルツリー上の外部ディレクトリを表すノードは、無視状態に設定され、これにより、コンテンツ管理システム110及びクライアントアプリケーション152が、そのようなノード上の更なる変更を無視することになる。リモートツリー上の外部ディレクトリを表すノードは、隠し状態(hidden state)に設定され、これにより、外部ディレクトリの同期済みコピーがコンテンツ管理システム110のユーザインタフェース上に示されないようにリモートツリー上のそのようなノードが隠されることになる。この変換プロセスをトリガする可能性がある他の例示的な状況としては、外部ディレクトリのコンテンツの読み出しに時間がかかりすぎること、クライアントデバイス150上のシステム障害、コンテンツ管理システム110上の外部ディレクトリの同期済みコピーが削除されること、又は同期が行われている間に外部ディレクトリがクライアントデバイス150にアクセスできなくなることが挙げられるが、これらに限定されない。
図4は、アンカーオブジェクトを生成するための例示的な方法400を示す。例示的な方法400は特定のシーケンスの動作を示しているが、当該シーケンスは、本開示の範囲から逸脱することなく変更されうる。例えば、示される動作のいくつかは、並列に実行されてもよいし、又は方法400の機能に実質的に影響を与えない、異なるシーケンスで実行されてもよい。他の例では、方法400を実装する例示的なデバイス又はシステムの異なるコンポーネントが、実質的に同時に、又は特定のシーケンスで、機能を実行しうる。
動作410において、クライアントアプリケーション152は、外部ディレクトリについてのアンカーオブジェクトを生成しうる。図1及び図3Aに関して上述したように、アンカーオブジェクトは、専用な属性を有するオブジェクトであり、クライアントアプリケーションは、アンカーオブジェクトを含むディレクトリの外部にある外部ディレクトリを指すオブジェクトとして、アンカーオブジェクトを認識しうる。この例では、クライアントアプリケーションは、外部ディレクトリがアンカーを含むディレクトリ内に位置しているかのように、当該外部ディレクトリを扱う。専用の属性は、ディレクトリの属性を記述する拡張属性又は最終データストリームである。ディレクトリの属性は、ディレクトリID、iノード・リファレンス、デバイスID、オブジェクトID、UUID、ターゲットロケーション、パス等を含むが、これらに限定されない。
いくつかの実施形態では、アンカーを格納するディレクトリは、クライアント同期サービス156によって監視されるディレクトリであり、そのコンテンツはコンテンツ管理システムに対して同期される。
動作420において、クライアント同期サービス156は、アンカーオブジェクトを認識しうる。この例では、アンカーオブジェクトは、専用の属性の存在によって認識される。
動作430において、クライアント同期サービス156は、アンカーオブジェクトの専用の属性を読み出しうる。この例では、クライアント同期サービス156は、外部ディレクトリのコンテンツに関するメタデータを読み出しうるとともに、外部ディレクトリ内の各オブジェクトを処理して、各オブジェクトのコンテンツをハッシュ化されたブロックに変換しうる。
動作440において、クライアントアプリケーションの同期サービス156は、アンカーオブジェクトの専用の属性を使用して、外部フォルダの情報を判定しうる。例えば、クライアント同期サービス156は、アンカーオブジェクトの専用の属性を使用して、外部ディレクトリに関連付けられた外部フォルダのコンテンツ、ロケーション情報、又は他の情報を判定しうる。
動作450において、クライアント同期サービス156は、外部ディレクトリのデバイスUUIDを、ローカルツリー内のコンテンツ管理システムパスに変換するために、専用の属性に基づいて外部ディレクトリのインメモリマップを作成しうる。専用の属性は、識別情報及びロケーションについてのソース・オブ・トゥルースとして機能する。
動作460において、クライアント同期サービス156は、外部ディレクトリのコンテンツを読み出しうる。
動作460において、クライアント同期サービス156は、外部ディレクトリ上の少なくとも1つのオブジェクトをコンテンツ管理システムに同期させうる。この例では、ユーザは、どのオブジェクトが同期されるべきであるか、及び、どのオブジェクトが同期されるべきではないかに関するオプションを有しうる。いくつかの実施形態では、動作460の同期は、外部ディレクトリからコンテンツ管理システム110への単方向である。いくつかの実施形態では、同期動作は、外部ディレクトリとコンテンツ管理システム110との間で双方向である。
図5は、コンテンツ管理システムサーバによって外部ディレクトリを処理及び同期させるための例示的な方法500を示す。例示的な方法500は特定のシーケンスの動作を示しているが、当該シーケンスは、本開示の範囲から逸脱することなく変更されうる。例えば、示される動作のいくつかは、並列に実行されてもよいし、又は方法500の機能に実質的に影響を与えない、異なるシーケンスで実行されてもよい。他の例では、方法500を実装する例示的なデバイス又はシステムの異なるコンポーネントが、実質的に同時に、又は特定のシーケンスで、機能を実行しうる。
動作505において、サーバ同期サービス112は、第1のクライアントデバイスから、コンテンツ管理システムによるアンカーオブジェクトの同期を受信しうる。一例では図1、図3A、及び図4に関して上述したように、アンカーオブジェクトは、専用の属性を有するオブジェクトであり、アンカーオブジェクトは、コンテンツ管理システムによって、第1のクライアントデバイスによって到達可能な外部ディレクトリを指すオブジェクトとして認識される。この例では、外部ディレクトリは、アンカーオブジェクトを含む、第1のクライアントデバイス上のディレクトリの外部にある。
動作510において、図1に示すウェブインタフェースサービス124は、アンカーオブジェクトを含むディレクトリ内のフォルダとして、アンカーオブジェクトを表現しうる。例えば、アンカーオブジェクトの子オブジェクトは、アンカーオブジェクトを含むディレクトリから成るパス内にあるものとしても表現される。アンカーオブジェクト及び子オブジェクトはコンテンツ管理システムのウェブサーバ上で、ブラウジング可能及び閲覧可能である。別の例では、アンカーオブジェクト及び子オブジェクトは、スマートフォン又はパーソナルコンピュータ等のクライアントデバイスのファイルブラウザ上で、ブラウジング可能及び閲覧可能である。
いくつかの実施形態では、アンカーオブジェクト及びその子オブジェクトは、単方向同期用に設定されるが、コンテンツ管理システムは、デフォルトでオブジェクトの双方向同期をサポートする。しかしながら、当業者であれば、アンカーオブジェクト及びその子オブジェクトも双方向同期用に設定されうることも理解するであろう。
動作515において、図1に示すウェブインタフェースサービス124は、コンテンツ管理システムのウェブサーバを介して、アンカーオブジェクトのパス内の子オブジェクトの選択を受け付けうる。
動作525において、ウェブインタフェースサービス124は、コンテンツ管理システムのウェブサーバを介して、子オブジェクトの編集を受け付けうる。いくつかの実施形態では、子オブジェクトのそのような編集は、第2のクライアントデバイスのクライアントアプリケーション上で行われうる。
動作530において、図1に示すサーバ同期サービス112は、子オブジェクトが単方向同期用に設定されていると判定しうる。例えば、サーバ同期サービス112は、アンカーオブジェクトをオブジェクトパス内の先祖として有するパス内に子オブジェクトがあると判定することによって、子オブジェクトが単方向同期用に設定されていると判定しうる。別の例では、サーバ同期サービス112は、子オブジェクトが単方向同期用に設定されていることを示す専用の属性に子オブジェクトが関連付けられていると判定することによって、子オブジェクトが単方向同期用に設定されていると判定しうる。
動作535において、ウェブインタフェースサービス124は、子オブジェクトが単方向同期用に設定されているとの警告を提供しうる。
動作540において、ウェブインタフェースサービス124は、ユーザが編集を同期させたいことを確認する入力をユーザから受け付けうる。
動作545において、図1に示すサーバ同期サービス112は、編集を含む子オブジェクトのコピーを作成しうる。この例では、子オブジェクトのコピーは、最初に、外部ディレクトリ以外の、クライアントデバイス150に関連付けられたディレクトリ(例えば、ユーザアカウントディレクトリ、又は他のディレクトリ)の下で、コンテンツ管理システム110上に格納されうる。
動作550において、サーバ同期サービス112は、子オブジェクトのコピーを、双方向同期をサポートしているディレクトリに同期させうる。この例では、サーバ同期サービス112は、コピーを外部ディレクトリに同期させなくてもよい。
動作550において、サーバ同期サービス112は、アンカーオブジェクトを第2のクライアントデバイスに同期させうる。一例では、アンカーオブジェクトは、第2のクライアントデバイスのファイルシステム上のリンクプレースホルダ(link placeholder)として表現される。第2の例では、第2のクライアントデバイスにおいて選択されると、リンクプレースホルダは、第2のクライアントデバイスに、ウェブブラウザをコンテンツ管理システムのウェブサーバに導かせるように構成される。
いくつかの実施形態では、子オブジェクトが単方向同期用に設定されているため、編集は、子オブジェクトの原本に対して同期されない。例えば、子オブジェクトが、アンカーオブジェクトによって表される、外部ドライブの子オブジェクトである場合、コンテンツ管理システムから受信された子オブジェクトの編集は、外部ドライブに格納された子オブジェクトの原本には同期されない。その代わりに、例示的な方法500は、編集を用いて子オブジェクトの別のコピーを作成及び格納することによって、コンテンツ管理システム内の編集を保存するのに役立つ。
図6Aは、いくつかの実施形態による、例示的なグラフィカルユーザインタフェースを示す。グラフィカルユーザインタフェースは、ウィンドウ602、ローカル同期フォルダ610、及びウェブインタフェース620を含む。ウィンドウ602は、クライアントデバイス150に接続されている外部ドライブに応答して表示される。ウィンドウ602は、選択可能なインタフェース要素604及び606を含む。ローカル同期フォルダ610は、コンテンツ管理システム110に関連付けられたクライアントアプリケーション152によって監視される、クライアントデバイス150上のディレクトリである。ローカル同期フォルダ610のコンテンツを、コンテンツ管理システム110と同期させることができる。この例では、ローカル同期フォルダ610は空である。
ウェブインタフェース620は、コンテンツ管理システム110のウェブビューを提示する。この例では、ウェブインタフェース620は、コンテンツ管理システム110上に格納されたファイルを示すファイル選択インタフェース622を含む。
図3Aに関して説明したように、コンテンツ管理システム110のクライアントアプリケーション152は、外部ドライブを表す選択可能なインタフェース要素604として、外部ドライブを提示しうる。クライアントアプリケーション152は、選択可能なインタフェース要素604の選択をユーザから受け付けうる。クライアントアプリケーション152は更に、コンテンツ管理システム110との同期のために外部ドライブを登録するためのオプション(選択可能なインタフェース要素606)を提示しうる。
図6Bは、いくつかの実施形態による、別の例示的なグラフィカルユーザインタフェースを示す。図3Aに関して説明したように、ユーザが選択可能なインタフェース要素604及び606の両方を選択すると、クライアント同期サービス156は、最初にクライアントデバイス150の内部ハードドライブ上にコンテンツを格納することなく、外部ディレクトリ上のコンテンツをコンテンツ管理システム110に同期させるために、サーバ同期サービス112との通信を開始しうる。同期の詳細については図3Aで説明されている。
同期が完了した後に、インタフェース要素が、図6Bに示されるグラフィカルユーザインタフェースに現れる。例えば、インタフェース要素632が、ローカル同期フォルダ610に現れ、インタフェース要素634が、ウェブインタフェース620のファイル選択インタフェース622に現れる。インタフェース要素630、632、及び634は全て、これらの異なるロケーションにおける外部ドライブを表す。この例では、インタフェース要素632は、図2に関して説明したようなアンカーオブジェクトである。ユーザは、インタフェース要素630、632、及び634のうちのいずれか1つを選択することによって、外部ドライブにアクセスしうる。このユーザインタフェース設計は、外部ドライブのコンテンツがクライアントデバイス150の内部ハードドライブに格納されていなくても、外部ドライブとのインタラクションを行う際に一貫性のあるユーザエクスペリエンスを提供する。
図6Cは、いくつかの実施形態による、別の例示的なグラフィカルユーザインタフェースを示す。グラフィカルユーザインタフェースは、ウィンドウ640を含む。ウィンドウ640は、インタフェース要素642を含む。この例では、ユーザは、インタフェース要素642を選択し、その後、コンテンツ管理システム110にバックアップされるべき、ローカルフォルダ644等の任意のローカルフォルダを選択しうる。ローカルフォルダの選択を受け付けるために、クライアントアプリケーション152は、ユーザがインタフェース要素642を選択した後に、全てのローカルフォルダを含む別のウィンドウを提示しうる。
図6Dは、いくつかの実施形態による、別の例示的なグラフィカルユーザインタフェースを示す。ローカルフォルダ644等のローカルフォルダの選択が受け付けられた後に、クライアント同期サービス156は、選択されたローカルフォルダ上のコンテンツをコンテンツ管理システム110に同期させるために、サーバ同期サービス112との通信を開始しうる。同期の詳細については図3Aに関して詳細に説明されている。
同期が完了した後に、ローカルフォルダ644を表すインタフェース要素646が、ローカル同期フォルダ610に現れる。また、インタフェース要素648が、ウェブインタフェース620のファイル選択インタフェース622に現れる。ユーザは、インタフェース要素644、646、及び648のいずれか1つを選択することによって、ローカルフォルダ644のコンテンツにアクセスしうる。
図7は、本開示の一部を実装するための例示的なコンピュータシステム700を示す。例えば、例示的なコンピュータシステム700は、本開示を実行するためのクライアントアプリケーションを実行しうる。
例示的なコンピュータシステム700は、バス735を介して動作するように接続された、プロセッサ705、メモリ710、グラフィカルデバイス715、ネットワークデバイス720、インタフェース725、及びストレージデバイス730を含む。プロセッサ705は、ブートストラッピング処理を介してメモリ710にロードされるマシン命令(例えば、縮小命令セット(RISC)、複合命令セット(CISC)等)を読み出し、OSによって提供されるフレームワーク内でアプリケーションを実行するためのオペレーティングシステム(OS)を実行する。例えば、プロセッサ705は、Windows、Windows Presentation Foundation(WPF)、Windows User Interface(WinUI)等のグラフィカルフレームワーク、又はXamarin若しくはQT等のクロスプラットフォームユーザインタフェースによって提供されるアプリケーションを実行するアプリケーションを実行しうる。他の例では、プロセッサ705は、ウェブブラウザ等のサンドボックス環境のために書かれたアプリケーションを実行しうる。
プロセッサ705は、命令、ユーザデータ、OSコンテンツ、及びプロセッサ705内に(例えば種々のキャッシュ内に)格納することができない他のコンテンツ、を格納するようにメモリ710を制御する。プロセッサ705は更に、グラフィカルコンテンツをディスプレイ740に出力するグラフィカルデバイス715(例えば、グラフィカルプロセッサ)を制御しうる。いくつかの例では、グラフィカルデバイス715はプロセッサ705内に一体化されうる。更に別の例では、ディスプレイ740は、コンピュータシステム700(例えば、ラップトップ、タブレット、電話機等)と一体でありうる。
グラフィカルデバイス715は、グラフィカル計算等の浮動小数点演算を実行するように最適化されてよく、プロセッサ705の代わりに他の演算を実行するように構成されてよい。例えば、浮動小数点数のために最適化された数学演算を実行する命令によって制御される。例えば、プロセッサ705は、グラフィカルデバイス715のために最適化された動作のために、グラフィカルデバイス715に命令を割り当てうる。例えば、グラフィカルデバイス715は、人工知能(AI)、自然言語処理(NLP)、ベクトル演算に関連する動作を実行しうる。その結果はプロセッサ705に戻されうる。別の例では、プロセッサ705において実行されるアプリケーションは、命令を提供することで、プロセッサ705に、動作を実行するようにグラフィカルデバイス715に要求させうる。他の例では、グラフィカルデバイス715は、処理結果を別のコンピュータシステムに戻しうる(即ち、分散コンピューティング)。
プロセッサ705は更に、複数の無線チャネル745及び少なくとも1つの通信規格(例えば、Wi-Fi(即ち、802.11ax、802.11e等)、Bluetooth(登録商標)、第3世代パートナーシッププロジェクトによって提供される種々の規格(例えば、3G、4G、5G)、又は衛星通信ネットワーク(例えば、Starlink))を使用して、データを送信及び受信するためのネットワークデバイス720を制御しうる。ネットワークデバイス720は、サーバ755又は他のサービスプロバイダに接続するために、ネットワーク750に無線接続しうる。ネットワークデバイス720は更に、物理的(即ち、回路)接続を介してネットワーク750に接続されうる。ネットワークデバイス720は更に、ポイント・ツー・ポイント(P2P)又は短距離無線接続を使用して、ローカル電子デバイス760に直接接続しうる。
プロセッサ705は更に、双方向又は単方向通信のために外部デバイス770と接続するインタフェース725を制御しうる。インタフェース725は、回路接続を形成する任意の適切なインタフェースであり、任意の適切なインタフェース(例えば、ユニバーサルシリアルバス(USB)、Thunderbolt等)によって実装されうる。外部デバイス765は、データを処理するために、又はプロセッサ705において実行される異なるアプリケーションのための機能を実行するために、インタフェース725からデータを受信することが可能である。例えば、外部デバイス765は、別の表示装置、楽器、コンピュータインタフェースデバイス(例えば、キーボード、マウス等)、オーディオデバイス(例えば、アナログデジタル変換器(ADC)、デジタルアナログ変換器(DAC))、コンテンツを格納するためのストレージデバイス、認証デバイス、外部ネットワークインタフェース(例えば、5Gホットスポット)、プリンタ等でありうる。