(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-02-04
(45)【発行日】2025-02-13
(54)【発明の名称】コンテンツアイテムを編成及び提示するためのコレクションコンテンツアイテムの生成及び修正
(51)【国際特許分類】
G06F 21/62 20130101AFI20250205BHJP
G06F 16/14 20190101ALI20250205BHJP
【FI】
G06F21/62 309
G06F16/14
(21)【出願番号】P 2023515201
(86)(22)【出願日】2021-07-08
(86)【国際出願番号】 US2021040914
(87)【国際公開番号】W WO2022139880
(87)【国際公開日】2022-06-30
【審査請求日】2023-06-20
(32)【優先日】2020-12-21
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-12-21
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-12-21
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-12-21
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-12-21
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-12-21
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】509117964
【氏名又は名称】ドロップボックス, インコーポレイテッド
(74)【代理人】
【識別番号】110003281
【氏名又は名称】弁理士法人大塚国際特許事務所
(72)【発明者】
【氏名】パッシー, アーロン
(72)【発明者】
【氏名】ウォーカー, ブレイデン
(72)【発明者】
【氏名】アルベルト, アコス
【審査官】早川 学
(56)【参考文献】
【文献】特開2007-328400(JP,A)
【文献】特開2007-172021(JP,A)
【文献】特表2020-524321(JP,A)
【文献】米国特許出願公開第2020/0125543(US,A1)
【文献】米国特許出願公開第2018/0157860(US,A1)
【文献】米国特許出願公開第2016/0259783(US,A1)
【文献】国際公開第2019/026222(WO,A1)
【文献】米国特許出願公開第2017/0220814(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/00-21/88
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
コンピュータによって実行される方法であって、
少なくとも1つのテーブルと、前記少なくとも1つのテーブルに加えて少なくとも1つのインデックスとを含むデータベースを維持することであって、前記データベースは、コンテンツ管理システムに記憶されたオブジェクトに対して発生する変更されたデータを記述するデータのためのフィールドを有する不変の行と、前記変更されたデータが前記少なくとも1つのインデックスに含まれる条件を満足する場合の前記少なくとも1つのインデックスのデータとを含み、各フィールドは、
前記少なくとも1つのテーブルのそれぞれの行内のデータが関係する特定のオブジェクトを参照するオブジェクトID(識別子)
、及び、前記オブジェクトIDによって表される前記特定のオブジェクトへのアクセス能力データと、
前記オブジェクトIDによって表される前記特定のオブジェクトに対する前記変更されたデータが発生したシステム時刻を記録するクロック
値、前記オブジェクトIDによって表される前記特定のオブジェクトのオブジェクトタイプのデー
タ、及び、前記オブジェクトIDによって表される前記特定のオブジェクトの直接の上位である第2の特定のオブジェクトを参照する上位オブジェクトI
Dの何れか1つ
と、を含む、ことと、
前記少なくとも1つのテーブルに、前記コンテンツ管理システムに記憶された前記オブジェクトのうちの少なくとも1つに対して前記変更されたデータが発生するたびに、新たな不変の行を記録することであって、前記新たな不変の行は前記変更されたデータが発生した前記コンテンツ管理システムに記憶された前記オブジェクトのうちの少なくとも1つに対する前記オブジェクトIDと、前記変更されたデータに対応するデータとを含む、記録することと、を含む、方法。
【請求項2】
請求項1に記載の方法であって、前記少なくとも1つのテーブルは、
前記アクセス能力データを含む第1のオブジェクトテーブルと、
前記オブジェクトタイプを含むオブジェクトアクティビティデータを含む第2のオブジェクトテーブルと、
前記オブジェクトIDによって表される前記特定のオブジェクトの直接の上位である前記第2の特定のオブジェクトを参照する上位オブジェクトID(識別子)を含む上位データを含む第3のテーブルと、を含む少なくとも3つのテーブルを備え、
前記少なくとも3つのテーブルのそれぞれは、前記オブジェクトIDと前記クロック値のフィールドによってインデックス化される、方法。
【請求項3】
請求項1に記載の方法であって、
特定の時刻にディレクトリツリーを表す要求を受信することと、
最初に前記特定のオブジェクトの前記直接の上位を識別することによって前記特定のオブジェクトの上位を識別する前記データベースにアクセスし、その後に直接の上位が利用できなくなるまで前記直接の上位のさらに直接の上位を再起的に識別することと、を含む、方法。
【請求項4】
請求項2に記載の方法であって、
上位データを含む前記第3のテーブルに加えてディレクトリインデックスを維持することを含み、前記ディレクトリインデックスは前記特定のオブジェクトの直接の下位を参照する第2のオブジェクトID(識別子)を識別することによって前記特定のオブジェクトの下位を含む、方法。
【請求項5】
請求項1に記載の方法であって、
前記少なくとも1つのテーブルは、
該少なくとも1つのテーブルにおいて意図された機能を実行するのに有効な記述データを含
み、該少なくとも1つのテーブルに含まれる他のデータから導出可能なデータを含まない、方法。
【請求項6】
請求項1に記載の方法であって、
前記少なくとも1つのインデックスは、改善されたデータを含み、前記改善されたデータは、
記述データから引き出すことができる結論を表す、方法。
【請求項7】
請求項5に記載の方法であって、
前記
記述データは、前記特定のオブジェクトについての前記変更されたデータをもたらすアクションの説明を含まない、方法。
【請求項8】
請求項1に記載の方法であって、
少なくとも1つのテーブルを含む前記データベースは、第1のデータベースのシャードを含む複数のデータベースのシャードに分散され、前記コンテンツ管理システムは、前記第1のデータベースのシャードで前記コンテンツ管理システムに記憶された前記オブジェクトのサブセットを記憶し、前記第1のデータベースのシャードに記憶された前記オブジェクトの前記サブセットについて前記変更されたデータは、前記第1のデータベースのシャードにも記憶された前記少なくとも1つのテーブルの第1部分に記憶される、方法。
【請求項9】
命令を含むコンピュータプログラムであって、前記命令は、コンピューティングシステムによって実行されると、前記コンピューティングシステムに、
少なくとも1つのテーブルと、前記少なくとも1つのテーブルに加えて少なくとも1つのインデックスとを含むデータベースを維持させ、前記データベースは、コンテンツ管理システムに記憶されたオブジェクトに対して発生する変更されたデータを記述するデータのためのフィールドを有する不変の行と、前記変更されたデータが前記少なくとも1つのインデックスに含まれる条件を満足する場合の前記少なくとも1つのインデックスのデータとを含み、各フィールドは、
前記少なくとも1つのテーブルのそれぞれの行内のデータが関係する特定のオブジェクトを参照するオブジェクトID(識別子)
、及び、前記オブジェクトIDによって表される前記特定のオブジェクトへのアクセス能力データと、
前記オブジェクトIDによって表される前記特定のオブジェクトに対する前記変更されたデータが発生したシステム時刻を記録するクロック
値、前記オブジェクトIDによって表される前記特定のオブジェクトのオブジェクトタイプのデータ
、及び、前記オブジェクトIDによって表される前記特定のオブジェクトの直接の上位である第2の特定のオブジェクトを参照する上位オブジェクトI
Dの何れか1つ
と、を含み、
前記少なくとも1つのテーブルに、前記コンテンツ管理システムに記憶された前記オブジェクトのうちの少なくとも1つに対して前記変更されたデータが発生するたびに、新たな不変の行を記録させ、前記新たな不変の行は前記変更されたデータが発生した前記コンテンツ管理システムに記憶された前記オブジェクトのうちの少なくとも1つに対する前記オブジェクトIDと、前記変更されたデータに対応するデータとを含む、コンピュータプログラム。
【請求項10】
請求項9に記載のコンピュータプログラムであって、前記少なくとも1つのテーブルは、
前記アクセス能力データを含む第1のオブジェクトテーブルと、
オブジェクトタイプを含むオブジェクトアクティビティデータを含む第2のオブジェクトテーブルと、
前記オブジェクトIDによって表される前記特定のオブジェクトの直接の上位である第2の特定のオブジェクトを参照する上位オブジェクトIDを含む上位データを含む第3のテーブルと、を含む少なくとも3つのテーブルを備え、
前記少なくとも3つのテーブルのそれぞれは、前記オブジェクトIDと前記クロック値のフィールドによってインデックス化される、コンピュータプログラム。
【請求項11】
請求項10に記載のコンピュータプログラムであって、前記コンピュータプログラムは、前記コンピューティングシステムによって実行されると、前記コンピューティングシステムに、
上位データを含む前記第3のテーブルに加えてディレクトリインデックスを維持させる、命令をさらに含み、前記ディレクトリインデックスは前記特定のオブジェクトの直接の下位を参照する第2のオブジェクトIDを識別することによって前記特定のオブジェクトの下位を含む、コンピュータプログラム。
【請求項12】
請求項9に記載のコンピュータプログラムであって、
前記少なくとも1つのテーブルは、
該少なくとも1つのテーブルにおいて意図された機能を実行するのに有効な記述データを含
み、該少なくとも1つのテーブルに含まれる他のデータから導出可能なデータを含まない、コンピュータプログラム。
【請求項13】
請求項9に記載のコンピュータプログラムであって、
少なくとも1つのテーブルを含む前記データベースは、第1のデータベースのシャードを含む複数のデータベースのシャードに分散され、前記コンテンツ管理システムは、前記第1のデータベースのシャードで前記コンテンツ管理システムに記憶された前記オブジェクトのサブセットを記憶し、前記第1のデータベースのシャードに記憶された前記オブジェクトの前記サブセットについて前記変更されたデータは、前記第1のデータベースのシャードにも記憶された前記少なくとも1つのテーブルの第1部分に記憶される、コンピュータプログラム。
【請求項14】
システムであって、
少なくとも1つのプロセッサと、
命令を記憶する少なくとも1つの非一時的なコンピュータ可読媒体であって、前記命令は前記少なくとも1つのプロセッサに、
少なくとも1つのテーブルと、前記少なくとも1つのテーブルに加えて少なくとも1つのインデックスとを含むデータベースを維持させ、前記データベースは、コンテンツ管理システムに記憶されたオブジェクトに対して発生する変更されたデータを記述するデータのためのフィールドを有する不変の行と、前記変更されたデータが前記少なくとも1つのインデックスに含まれる条件を満足する場合の前記少なくとも1つのインデックスのデータとを含み、各フィールドは、
前記少なくとも1つのテーブルのそれぞれの行内のデータが関係する特定のオブジェクトを参照するオブジェクトID(識別子)
、及び、前記オブジェクトIDによって表される前記特定のオブジェクトへのアクセス能力データと、
前記オブジェクトIDによって表される前記特定のオブジェクトに対する前記変更されたデータが発生したシステム時刻を記録するクロック
値、前記オブジェクトIDによって表される前記特定のオブジェクトのオブジェクトタイプのデータ
、及び、前記オブジェクトIDによって表される前記特定のオブジェクトの直接の上位である第2の特定のオブジェクトを参照する上位オブジェクトI
Dの何れか1つ
と、を含み、
前記少なくとも1つのテーブルに、前記コンテンツ管理システムに記憶された前記オブジェクトのうちの少なくとも1つに対して前記変更されたデータが発生するたびに、新たな不変の行を記録させ、前記新たな不変の行は前記変更されたデータが発生した前記コンテンツ管理システムに記憶された前記オブジェクトのうちの少なくとも1つに対する前記オブジェクトIDと、前記変更されたデータに対応するデータとを含む、システム。
【請求項15】
請求項14に記載のシステムであって、前記少なくとも1つのテーブルは、
アクセス能力データを含む第1のオブジェクトテーブルと、
オブジェクトタイプを含むオブジェクトアクティビティデータを含む第2のオブジェクトテーブルと、
前記オブジェクトIDによって表される前記特定のオブジェクトの直接の上位である第2の特定のオブジェクトを参照する上位オブジェクトIDを含む上位データを含む第3のテーブルと、を含む少なくとも3つのテーブルを備え、
前記少なくとも3つのテーブルのそれぞれは、前記オブジェクトIDと前記クロック値のフィールドによってインデックス化される、システム。
【請求項16】
請求項14に記載のシステムであって、
前記少なくとも1つのテーブルは、
該少なくとも1つのテーブルにおいて意図された機能を実行するのに有効な記述データを含
み、該少なくとも1つのテーブルに含まれる他のデータから導出可能なデータを含まない、システム。
【請求項17】
請求項14に記載のシステムであって、
少なくとも1つのテーブルを含む前記データベースは、第1のデータベースのシャードを含む複数のデータベースのシャードに分散され、前記コンテンツ管理システムは、前記第1のデータベースのシャードで前記コンテンツ管理システムに記憶された前記オブジェクトのサブセットを記憶し、前記第1のデータベースのシャードに記憶された前記オブジェクトの前記サブセットについて前記変更されたデータは、前記第1のデータベースのシャードにも記憶された前記少なくとも1つのテーブルの第1部分に記憶される、システム。
【発明の詳細な説明】
【関連出願の相互参照】
【0001】
[0001]本出願は「DATA MODEL and DATA SERVICE FOR CONTENT MANAGEMENT SYSTEM」と題され2020年12月21日に出願された米国仮特許出願第17/129,120号、代理人整理番号085118-651718_P1580US1、「DATA MODEL and DATA SERVICE FOR CONTENT MANAGEMENT SYSTEM」と題され2020年12月21日に出願された米国仮特許出願第17/129,233号、代理人整理番号085118-676453_P1580US2、「AGGREGATES INDEX」と題され2020年12月21日に出願された米国仮特許出願第17/129,292号、代理人整理番号085118-676452_P1580US3、「EVALUATING AN ACCESS CONTROL LIST FROM PERMISSION STATEMENTS」と題され2020年12月21日に出願された米国仮特許出願第17/129,337号、代理人整理番号085118-676451_P1580US4、「DETERMINING ACCESS CHANGES」と題され2020年12月21日に出願された米国仮特許出願第17/129,386号、代理人整理番号085118-676450_P1580US5、及び、「EVALUATING ACCESS BASED ON GROUP MEMBERSHIP」と題され2020年12月21日に出願された米国仮特許出願第17/129,446号、代理人整理番号085118-676449_P1580US6の優先権を主張し、それらの内容はそれらの全てが参照により本明細書に組み込まれる。
【技術分野】
【0002】
[0002]本技術はコンテンツ管理システムにおけるオブジェクト及びサブジェクトへの変更に関する情報を記録するためのデータサービスに関し、より詳細には、コンテンツ管理システムにおけるオブジェクト及びサブジェクトへの変更に関する情報を記録するための、効率的で柔軟性があり、ロバストなデータモデルと統合されたデータサービスに関する。
【背景技術】
【0003】
[0003]ほとんどのコンテンツ管理システムは、特定の使用モデルについて最適化され、任意の他の使用メカニズムにはあまり適していない。これは企業レベルでの特定のインスタンスに展開されたコンテンツ管理システムでは上手く機能したが、現行のクラウドベースのコンテンツ管理システムには適していない。
【発明の概要】
【0004】
[0004]本技術の上記及び他の利点及び特徴は、添付の図面に示される特定の実装形態を参照することによって明らかになるのであろう。当業者は、これらの図面が本技術のいくつかの例を示すに過ぎず、本技術の範囲をこれらの例に限定しないことを理解するのであろう。さらに、当業者は、添付の図面の使用を介して追加の特異性及び詳細を伴って記述され、説明される本技術の原理を理解するのであろう。
【図面の簡単な説明】
【0005】
【
図1】[0005]
図1は、本技術のいくつかの態様による、コンテンツ管理システム及びクライアントデバイスの一例を図示する。
【
図2】[0006]
図2は、本技術のいくつかの態様による、オブジェクトストレージサービスを含むコンテンツ管理システムの追加の詳細を図示する。
【
図3】[0007]
図3は、本技術のいくつかの態様によるオブジェクトデータベースの一例を示す。
【
図4】[0008]
図4は、本技術のいくつかの態様による例示的な集約インデックスを示す。
【
図5】[0009]
図5は本技術のいくつかの態様による、集約インデックスに書き込み、それを維持する例示的な方法を示す。
【
図6】[0010]
図6は本技術のいくつかの態様による、集約インデックスのクエリを受信し、クエリに応答するための例示的な方法を示す。
【
図7】[0011]
図7は、本技術のいくつかの態様によるディレクトリインデックスを示す。
【
図8】[0012]
図8は、本技術のいくつかの態様によるシンプルなオブジェクトインデックスの一例を示す。
【
図9】[0013]
図9は、本技術のいくつかの態様による、オブジェクトデータベースのテーブル及びインデックスを維持するための例示的な方法を示す。
【
図10A】[0014]
図10Aは、本技術のいくつかの態様による、第1のオブジェクトIDに関連付けられたアクティビティが発生したことを判定する例示的な方法を示す。
【
図10B】[0015]
図10Bは、本技術のいくつかの態様による、指定された時刻におけるサブジェクトアカウントについてディレクトリツリーの表現を構成するための例示的な方法を示す。
【
図11】[0016]
図11は、本技術のいくつかの態様によるサブジェクトデータベースを示す。
【
図12】[0017]
図12は、本技術のいくつかの態様によるクレデンシャルインデックスを示す。
【
図13】[0018]
図13は、本技術のいくつかの態様による、ディレクトリツリー内のオブジェクトに対する個々の権限ステートメントから構成されるアクセス制御リストを評価するための例示的な方法を示す。
【
図14】[0019]
図14は、本技術のいくつかの態様による、サブジェクトアカウントに関してアクセスの変更が発生したことを判定し、アクセスの変更に関する通知を送信するための例示的な方法を示す。
【
図15】[0020]
図15は、本技術のいくつかの態様による、それらの個別のルートまでのオブジェクトの編成を示し、どのようにルート下のオブジェクトが共有され、いくつかのサブジェクトが異なるルート下にマウントされているように見えるかを示す。
【
図16】[0021]
図16は、本技術のいくつかの態様による、オブジェクトに関係する通知の機能のグラフィカルな例を図示する。
【
図17】[0022]
図17は、本技術のいくつかの態様による、特定の時刻にディレクトリのスナップショットをとる方法を示す。
【
図18】[0023]
図18は、本技術のいくつかの態様による、過去の時点におけるスナップショットをとる例を図示する。
【
図19】[0024]
図19は、本技術のいくつかの態様による、オブジェクト変更テーブル内の行が関係するアクションのタイプを判定する例を図示する。
【
図20】[0025]
図20は、本技術のいくつかの態様を実装するためのシステムの一例を示す。
【発明を実施するための形態】
【0006】
[0026]本技術の様々な実施例を以下に詳細に説明する。特定の実施形態について説明するが、これは例示のみを目的として行われることを理解されたい。当業者は、本技術の精神及び範囲から逸脱することなく、他の構成要素及び構成が使用され得ることを認識するであろう。
【0007】
[0027]多くのコンテンツ管理システムは、特定の使用モデルについて最適化され、任意の他の使用メカニズムにはあまり適していない。これは企業レベルの特定のインスタンスに展開されたコンテンツ管理システムにはうまく機能したが、現行のクラウドベースのコンテンツ管理システムには適していない。
【0008】
[0028]本開示の技術は、その主題のニーズに非常に柔軟に対応できるコンテンツ管理システムにおける当技術分野のニーズを解決する。例えば、任意のオブジェクトが共有されることを可能にするコンテンツ管理システムを提供することが、当技術分野において必要とされている。そのような機能を可能にするために、本明細書で説明するように、ロバストで柔軟なアクセス制御リストの仕組みが必要とされる。しかしながら、そのようなロバストで柔軟なアクセス制御の仕組みは、アクセス変更、特にサブジェクトアカウントからアクセスを除去するものがどの程度早く現れるかに関する懸念を生じる複雑さをもたらす。これは、本技術と同様に、同期サービスを提供するコンテンツ管理システムによってさらに増幅される。
【0009】
[0029]本技術は、読み出し時のアクセスを効率的にチェックすることによって、そのような問題に対する解決策を提供する。コンテンツ管理システムの任意のクライアントによってオブジェクトが要求されると、コンテンツ管理システムは、アクセスに何らかの変更があったかどうかを効率的に判断することができる。そして、コンテンツ管理システムはアクセスの変更があったと判断した場合に、新たなアクセス権(又はその失効)を決定することができる。
【0010】
[0030]本技術はまた、より柔軟なアクセス許可モデルを提供する。オブジェクトのアクセス権限はディレクトリ全体に適用でき、特定のオブジェクトにのみ適用でき、グローバルポリシーから継承でき、直接の上位から継承でき、継承される権限を抑制でき、抑制できないポリシーを提供できる。上記のポリシーの任意の組合せを集約して、所与のディレクトリツリー内の特定のオブジェクトのアクセス制御リストを作成することができる。したがって、本技術は、ほぼ全てのカスタマイズされたアクセスポリシーの集合に対応することができる。
【0011】
[0031]本技術は、システム上で発生する全てのイベントがシステム上で発生する他のイベントと比較して正しく順序付けされることを保証するなど、他の利点を提供する。本システム全体の順序付けはコンテンツ管理システムにおけるデータの履歴状態をいつでも判断することを可能にする一方で、他のシステムは個別の時間隔に制限される。
【0012】
[0032]本技術はまた、高い拡張性と効率性にも優れている。広く使用されているコンテンツ管理システムでは、コンテンツ管理システム内のオブジェクトに対する何百万ものアクションが短期間に発生し得る。このように、本技術は、任意のデータベースに書き込まれる必要がある情報量を最小限に抑えるだけでなく、より改善されたデータを含むインデックスの更新を可能にする一方で、コンテンツ管理システムの信頼できるソースであるテーブルから情報の非常に高速な読み取り及び書き込みを可能にする、非常に効率的なデータ構造を利用する。
【0013】
[0033]本技術は、所定のデータが要求に応じて算出されるのではなく、インデックスから迅速に読み取られることを可能にするいくつかの固有のインデックスを含む。これらのインデックスはまた、ユニークで非常に効率的なルックアップ操作を提供する。例えば、本技術は、変更の対象となるオブジェクトの上位のオブジェクトごとに集計値を更新する集計インデックスを含む。このインデックスは、任意のディレクトリオブジェクト下の集計値(バイト数、オブジェクト数など)にいつでもすばやくアクセスできるだけでなく、任意のディレクトリオブジェクト下でいつでも任意のオブジェクトが変更されたかどうかを判断するためにも使用することができる。別の固有のインデックスは単一のオブジェクトインデックスを含み、条件を満たすイベントが発生するたびにデータがインデックスに書き込まれる。インデックスはイベントが発生したことを報告するが、イベントに関する追加の詳細は報告しない。同様のインデックスはアクセス権限の変更によってもたらされる任意の動作主体(サブジェクト)を含むクレデンシャルインデックスである(例えば、グループに対するアクセス権限が変更されると、グループの全てのメンバーにもたらされる)。上記で具体的に述べたインデックスは一例であり、他の固有のインデックス及びルックアップが、本明細書でより完全に開示される。
【0014】
[0034]さらに、本技術は、必要とされるときに通常は計算される必要がある所定の情報を効率的に取得可能とする所定のデータ構造も含む。
【0015】
[0035]従来技術に対するこれら及び他の利点が、本明細書で説明される。
【0016】
[0036]いくつかの実施形態では、本開示の技術がとりわけ、オブジェクト同期能力及びコラボレーション機能を有するコンテンツ管理システムのコンテキストにおいて展開される。例示のシステム構成100が
図1に示され、クライアントデバイス150と対話するコンテンツ管理システム110を示す。
【0017】
[0037]<アカウント>
[0038]コンテンツ管理システム110はオブジェクトをアカウントに関連付けて記憶することができ、オブジェクトを取り出す、修正する、閲覧する、及び/又は共有するなどの様々なオブジェクト管理タスクを実行することができる。さらに、コンテンツ管理システム110は、アカウントが複数のクライアントデバイスからオブジェクトにアクセスすることを可能にすることができる。
【0018】
[0039]コンテンツ管理システム110は、複数のアカウントをサポートする。サブジェクト(動作主体としてユーザ、グループ、チーム、会社など)はコンテンツ管理システムを用いてアカウントを作成することができ、アカウント詳細は、サブジェクトデータベース140に記憶することができる。サブジェクトデータベース140はサブジェクトIDによって登録サブジェクトを識別し、登録サブジェクトのプロファイル情報をサブジェクトIDに関連付けて記憶することができる。いくつかのケースでは、登録されたサブジェクトのプロファイル情報がサブジェクト名及び/又は電子メールアドレスを含む。サブジェクトデータベース140はアカウントタイプ(例えば、無料又は有料アカウントの様々な層)、割り当てられた記憶スペース、使用された記憶スペース、登録されたコンテンツ管理クライアントアプリケーション152が常駐するクライアントデバイス150、セキュリティ設定、個人用構成設定などのアカウント管理情報を含むことができる。いくつかの実施形態では、アカウントに関連するいくつかの情報が直接記憶されなくてもよく、むしろ、当該情報を導出するようにしてもよい。例えば、使用される記憶スペースは明示的に記憶されてもよいし、必要なときに計算されてもよい。
【0019】
[0040]いくつかの実施形態では、サブジェクトデータベース140がサブジェクトについてのアカウントに関連付けられた完全な情報を記憶する必要はない。サブジェクトについてのアカウントに関連付けられた情報の一部はメタデータデータベース146などのコンテンツ管理システム110の別のデータベースに、又はコンテンツ管理システム110の外部のデータベースに記憶することもできる。
【0020】
[0041]サブジェクトデータベース140は、サブジェクトに関連付けられたアカウントのグループを記憶することができる。グループはグループ権限ステートメント及び/又はアクセス制御リストに基づく権限を有することができ、グループのメンバーは、権限を継承することができる。例えば、マーケティンググループはオブジェクトの1つのセットにアクセスすることができ、エンジニアリンググループは、オブジェクトの別のセットにアクセスすることができる。管理者グループは、グループの変更、サブジェクトアカウントの変更などを行うことができる。グループはまた、サブジェクトIDによって識別されるサブジェクトでもある。
【0021】
[0042]いくつかの実施形態では、サブジェクトデータベース140は複数のテーブル、インデックス、及び他のデータ構造に分割することができる。
【0022】
[0043]<オブジェクトストレージ>
[0044]コンテンツ管理システム110の機能はオブジェクトのストレージであり、オブジェクトストレージ142に記憶することができる。オブジェクトは一般に、ファイルシステムに記録され得る任意のエンティティである。オブジェクトは、ドキュメント、コラボレーションオブジェクト、テキストファイル、オーディオファイル、画像ファイル、ビデオファイル、ウェブページ、実行可能ファイル、バイナリファイル、オブジェクトディレクトリ、フォルダ、zipファイル、プレイリスト、アルバム、シンボリックリンク、クラウドドキュメント、マウント、コンテンツ管理システム110又は他のコンテンツ管理システム内の他のオブジェクトを参照するプレースホルダオブジェクトなどのデジタルデータを含む任意のオブジェクトとすることができる。
【0023】
[0045]いくつかの実施形態では、オブジェクトが複数のオブジェクトを含むフォルダを指すことができるコレクション、又は共通の属性によって関連付けられるか又はグループ化される複数のオブジェクトにグループ化することができる。
【0024】
[0046]いくつかの実施形態では、オブジェクトストレージ142が特定の機能を処理するために、他のタイプのストレージ又はデータベースと組み合わされる。オブジェクトストレージ142はオブジェクトを記憶することができ、オブジェクトに関するメタデータは、メタデータデータベース146に記憶することができる。同様に、オブジェクトがオブジェクトストレージ142に記憶される場所に関するデータは、オブジェクトディレクトリ144に記憶することができる。さらに、変更、アクセスなどに関するデータをオブジェクトデータベース148に記憶することができる。オブジェクトデータベース148はまた、オブジェクトへのアクセスを有するサブジェクトIDを識別するサブジェクトアカウント識別子を含むことができる。
【0025】
[0047]いくつかの実施形態では、オブジェクトデータベース148は複数のテーブル、インデックス、及び他のデータ構造に分割することができる。
【0026】
[0048]オブジェクトストレージ142、オブジェクトディレクトリ144、オブジェクトデータベース148、及びメタデータデータベース146などの様々なストレージ/データベースの各々は、2つ以上のそのようなストレージ又はデータベースから構成することができ、多くのデバイス及び位置にわたって分散させることができる。その他の構成も可能である。例えば、オブジェクトストレージ142、オブジェクトディレクトリ144、オブジェクトデータベース148、及び/又はメタデータデータベース146からのデータは、1つ又は複数のオブジェクトストレージ又はデータベースに組み合わされるか、又は追加のオブジェクトストレージ又はデータベースにさらにセグメント化され得る。したがって、コンテンツ管理システム110は、
図1に示されるよりも多い又は少ないストレージ及び/又はデータベースを含むことができる。
【0027】
[0049]いくつかの実施形態では、オブジェクトストレージ142が少なくとも1つのオブジェクトストレージサービス116に関連付けられており、これは記憶のためのオブジェクトの受信、記憶のためのオブジェクトの準備、オブジェクトの記憶場所の選択、ストレージからのオブジェクトの取り出しなどを含むが、これらに限定されない、オブジェクトのストレージを管理するためのソフトウェア又は他のプロセッサで実行可能な命令を含む。いくつかの実施形態では、オブジェクト管理サービス116はオブジェクトを、オブジェクトストレージ142に記憶するために、より小さなチャンクに分割することができる。オブジェクトを構成する各チャンクの位置は、オブジェクトディレクトリ144に記録することができる。オブジェクトディレクトリ144は、オブジェクトストレージ142に記憶された各オブジェクトのコンテンツエントリを含むことができる。コンテンツエントリは、オブジェクトを一意に識別するオブジェクトIDに関連付けることができる。
【0028】
[0050]いくつかの実施形態では、オブジェクトの各オブジェクト及び各チャンクが決定論的ハッシュ関数から識別することもできる。オブジェクト及びオブジェクトのチャンクを識別するこの方法は、決定論的ハッシュ関数が同じオブジェクトの全てのコピーに対して同じハッシュを出力するが、異なるオブジェクトに対して異なるハッシュを出力するので、オブジェクトの重複がそのように認識されることを保証することができる。この方法を使用して、オブジェクトストレージサービス116は、オブジェクトの異なるバージョンごとに固有のハッシュを出力することができる。
【0029】
[0051]オブジェクトストレージサービス116は、オブジェクトの親又はオブジェクトデータベース148内のオブジェクトのコンテンツパスを指定又は記録することもできる。コンテンツパスは、オブジェクトの名前及び/又はオブジェクトに関連付けられたフォルダ階層を含むことができる。例えば、コンテンツパスは、オブジェクトがクライアントデバイス上のローカルファイルシステムに記憶されるフォルダ又はフォルダのパスを含むことができる。いくつかの実施形態では、オブジェクトデータベースは、任意のオブジェクトの直接の上位(以下では「親」とも称する)又は直接の下位(以下では「子」とも称する。)のみを記憶することができ、これにより、オブジェクトのフルパスを導出することができ、オブジェクトのパス全体を記憶するよりも効率的となり得る。
【0030】
[0052]オブジェクトはブロックでオブジェクトストレージ142に記憶され、ディレクトリ構造のようなツリーの下に記憶されなくてもよいが、そのようなディレクトリ構造はオブジェクトを見るサブジェクトにとって快適なナビゲーション構造となる。オブジェクトストレージサービス116はオブジェクトへのコンテンツパスを定義又は記録することができ、ディレクトリ構造の”ルート”ノードは別のディレクトリからアクセス権限を継承するディレクトリとは対照的に、それに割り当てられた特定のアクセス権限を有する任意のディレクトリとすることができる。
【0031】
[0053]いくつかの実施形態では、ルートディレクトリを別のルートディレクトリの下にマウントして、単一のディレクトリ構造のように見せることができる。これは、アカウントが複数のルートディレクトリにアクセスできる場合に発生し得る。上述したように、ディレクトリ構造は、オブジェクトを見るためのサブジェクトへの快適なナビゲーション構造に過ぎないが、オブジェクトストレージ142内のオブジェクトの記憶位置とは相関しない。
【0032】
[0054]アカウントがオブジェクトを閲覧するディレクトリ構造はコンテンツ管理システム110におけるオブジェクトの記憶位置と相関しないが、ディレクトリ構造はクライアントデバイス150によって使用されるファイルシステムに応じて、クライアントデバイス150上のオブジェクトの記憶位置と相関することができる。
【0033】
[0055]上述したように、オブジェクトディレクトリ144内のコンテンツエントリは、オブジェクトを構成する各チャンクの位置を含むこともできる。より具体的には、コンテンツエントリがオブジェクトを構成するチャンクのオブジェクトストレージ142内の位置を識別するコンテンツポインタを含むことができる。
【0034】
[0056]オブジェクトストレージサービス116は、オブジェクト又はオブジェクトのバージョンを構成する複製オブジェクト又は複製ブロックを識別することによって必要とされるストレージスペースの量を減らすことができる。複数のコピーを記憶する代わりに、オブジェクトストレージ142はオブジェクト又はオブジェクトのブロックの単一のコピーを記憶することができ、オブジェクトディレクトリ144は、複製を単一のコピーにリンクするためのポインタ又は他の仕組みを含むことができる。
【0035】
[0057]オブジェクトストレージサービス116はまた、オブジェクトのオブジェクトIDに関連して、オブジェクト、オブジェクトタイプ、フォルダ、ファイルパス、及び/又はオブジェクトと様々なアカウント、コレクション、又はグループとの関係を記述するメタデータをメタデータデータベース146に記憶することができる。
【0036】
[0058]オブジェクトストレージサービス116はまた、変更、アクセスなどに関するデータのログをオブジェクトデータベース148に記憶することができる。オブジェクトデータベース148はオブジェクトのオブジェクトIDを含むことができ、オプションとして、タイムスタンプ又はバージョン番号及び任意の他の関連データとともに、変更又はアクセス動作の説明を含むことができる。オブジェクトデータベース148はまた、変更又はオブジェクトアクセスによって影響を受けるブロックへのポインタを含むことができる。オブジェクトストレージサービス116はまた、オブジェクトに対する変更、オブジェクトの異なるバージョン(分岐するバージョンツリーを含む)、及びオブジェクトデータベース148から取得することができる変更履歴を追跡するオブジェクトバージョン制御機構を使用することによって、動作を取り消す能力を提供することができる。
【0037】
[0059]<オブジェクトの同期>
[0060]コンテンツ管理システム110の他の特徴は、少なくとも1つのクライアントデバイス150とのオブジェクトの同期である。クライアントデバイス150は異なる形態をとることができ、異なる能力を有することができる。例えば、クライアントデバイス1501は、そこに常駐する複数のアプリケーションによってアクセス可能なローカルファイルシステムを有するコンピューティングデバイスである。クライアントデバイス1502は、オブジェクトが特定のアプリケーションにのみ又は特定のアプリケーションによって与えられた権限によってのみアクセス可能であり、オブジェクトがアプリケーション固有のスペース又はクラウドのいずれかに記憶されるコンピューティングデバイスである。クライアントデバイス1503はウェブブラウザを介してコンテンツ管理システム110にアクセスし、ウェブインタフェースを介してオブジェクトにアクセスする任意のクライアントデバイスである。例示のクライアントデバイス1501、1502、及び1503はラップトップ、モバイルデバイス、又はウェブブラウザなどのフォームファクタで示されているが、それらの説明はこれらの例示のフォームファクタのデバイスに限定されないことを理解されたい。例えば、クライアント1502のようなモバイルデバイスはそこに常駐する複数のアプリケーションによってアクセス可能なローカルファイルシステムを有してもよく、或いは、クライアント1502はウェブブラウザを介してコンテンツ管理システム110にアクセスしてもよい。したがって、フォームファクタは、クライアント150の能力を考慮する際に限定的に考えられるべきではない。クライアントデバイス150に関して本明細書で説明する1つ又は複数の機能はデバイスの特定の能力に応じて、全てのクライアントデバイス上で利用可能であってもよく、又は利用可能でなくてもよく、ファイルアクセスモデルはそのような能力の1つである。
【0038】
[0061]多くの実施形態ではクライアントデバイス150がコンテンツ管理システム110のアカウントに関連付けられるが、いくつかの実施形態ではクライアントデバイス150が共有リンクを使用してコンテンツにアクセスすることができ、アカウントを必要としない。
【0039】
[0062]上述のように、いくつかのクライアントデバイスは、ウェブブラウザを使用してコンテンツ管理システム110にアクセスすることができる。しかしながら、クライアントデバイスは、クライアントデバイス150上に記憶され、実行されるクライアントアプリケーション152を使用して、コンテンツ管理システム110にアクセスすることもできる。クライアントアプリケーション152は、クライアント同期サービス156を含むことができる。
【0040】
[0063]クライアント同期サービス156はクライアントデバイス150とコンテンツ管理システム110との間のオブジェクトに対する変更を同期させるために、サーバ同期サービス112と通信することができる。
【0041】
[0064]クライアントデバイス150は、クライアント同期サービス156を介してコンテンツをコンテンツ管理システム110と同期させることができる。同期はプラットフォームに依存しないものとすることができる。つまり、コンテンツは種々のタイプ、性能、オペレーティングシステム等の複数のクライアントデバイスに渡って同期させることができる。クライアント同期サービス156は、任意の変更(例えば、オブジェクトを新規作成、削除、修正、コピー、又は移動)を、クライアントデバイス150のファイルシステムの指定された位置にあるオブジェクトに同期することができる。
【0042】
[0065]オブジェクトはクライアントデバイス150からコンテンツ管理システム110に同期させることができ、逆もまた同様である。同期がクライアントデバイス150からコンテンツ管理システム110へ行われる実施形態では、サブジェクトがクライアントデバイス150のファイルシステムからオブジェクトを直接操作することができ、一方、クライアント同期サービス156は監視フォルダ内のファイルへの変更についてクライアントデバイス150上のディレクトリを監視することができる。
【0043】
[0066]クライアント同期サービス156が監視するディレクトリ内のコンテンツの書き込み、移動、コピー、又は削除を検出すると、クライアント同期サービス156は、当該変更をコンテンツ管理ストレージサービス116に同期させることができる。いくつかの実施形態では、クライアント同期サービス156がオブジェクトをブロックに分割し、オブジェクトのハッシュ値を計算して固有の識別子を生成するなど、上述した機能を含むコンテンツ管理ストレージサービス116のいくつかの機能を実行することができる。クライアント同期サービス156はクライアントストレージインデックス164内でコンテンツをインデックス化し、クライアントストレージインデックス164に結果を保存することができる。インデックス化は、各オブジェクトについて、パスと、オブジェクト識別子と、固有の識別子とを記憶することを含み得る。いくつかの実施形態では、クライアント同期サービス156がサーバ同期サービス112からオブジェクト識別子を学習し、クライアントデバイス150のオペレーティングシステムから固有のクライアント識別子を学習する。
【0044】
[0067]クライアント同期サービス156は、ストレージインデックス164を使用して、クライアントストレージ内のオブジェクトの少なくとも一部分と、コンテンツ管理システム110上のサブジェクトアカウントに関連付けられたオブジェクトとの同期を容易にすることができる。例えば、クライアント同期サービス156はストレージインデックス164をコンテンツ管理システム110と比較し、クライアントストレージ上のコンテンツと、コンテンツ管理システム110上のサブジェクトアカウントに関連付けられたコンテンツとの間の差異を検出することができる。次いで、クライアント同期サービス156は必要に応じて、クライアントストレージ上のコンテンツをアップロードし、ダウンロードし、修正し、削除することによって、差異を調整することを試みることができる。オブジェクトストレージサービス116は、オブジェクトの変更されたブロック又は新しいブロックを記憶し、オブジェクトデータベース148、メタデータデータベース146、オブジェクトディレクトリ144、オブジェクトストレージ142、サブジェクトデータベース140などを必要に応じて更新することができる。
【0045】
[0068]コンテンツ管理システム110からクライアントデバイス150に同期する場合、オブジェクトデータベース148に記録されたオブジェクトのマウント、修正、追加、削除、移動に関するデータは、通知サービス117を使用してクライアントデバイス150に送信される通知をトリガすることができる。クライアントデバイス150が変更を通知されると、クライアントデバイス150は、クライアントデバイスで既知の最後の同期点以降で、オブジェクトデータベース148にリストされた変更を要求することができる。クライアントデバイス150がコンテンツ管理システム110との同期から外れていると判定すると、クライアント同期サービス156は変更を含むオブジェクトブロックを要求し、変更されたオブジェクトのそのローカルコピーを更新する。
【0046】
[0069]いくつかの実施形態では、ストレージインデックス164は、1つのツリーがサーバ同期サービス112に従ってディレクトリの最新の表現を反映し、別のツリーがクライアント同期サービス156に従ってディレクトリの最新の表現を反映するツリーデータ構造を記憶する。クライアント同期サービスは、サーバ同期サービス112からのデータを要求することによって、又はクライアントデバイス150上でコンテンツ管理システム110に変更をコミットすることによって、ツリー構造が一致することを保証するように機能することができる。
【0047】
[0070]場合によっては、クライアントデバイス150が利用可能なネットワーク接続を有していないことがある。このシナリオでは、クライアント同期サービス156がオブジェクト変更についてリンクされたコレクションを監視し、ネットワーク接続が利用可能である場合に、コンテンツ管理システム110への後の同期のために、それらの変更をキューに入れることができる。同様に、サブジェクトは、コンテンツ管理システム110との同期を手動で開始、停止、一時停止、又は再開することができる。
【0048】
[0071]クライアント同期サービス156は、コンテンツ管理システム110上の特定のサブジェクトアカウントに関連付けられた全てのコンテンツを同期させることができる。或いは、クライアント同期サービス156は、コンテンツ管理システム110上の特定のサブジェクトアカウントに関連付けられたオブジェクトのいくつかを選択的に同期させることができる。オブジェクトのうちのいくつかのみを選択的に同期させることは、クライアントデバイス150上のスペースを確保し、帯域幅を節約することができる。
【0049】
[0072]いくつかの実施形態では、クライアント同期サービス156が特定のサブジェクトアカウントに関連付けられたオブジェクトの一部を選択的に記憶し、オブジェクトの残りの部分のためにプレースホルダオブジェクトをクライアントストレージに記憶する。例えば、クライアント同期サービス156はコンテンツ管理システム110上のそれぞれの完全なオブジェクトの同じファイル名、パス、拡張子、メタデータを有するが、完全なオブジェクトのデータを欠いているプレースホルダオブジェクトを記憶することができる。プレースホルダオブジェクトは数バイト以下のサイズとすることができ、一方、それぞれの完全なオブジェクトは、著しく大きくすることができる。クライアントデバイス150がオブジェクトにアクセスしようと試みた後、クライアント同期サービス156はコンテンツ管理システム110からオブジェクトのデータを取り出し、完全なオブジェクトをクライアントデバイス150に提供することができる。このアプローチはコンテンツ管理システム110上のサブジェクトのオブジェクトへの完全なアクセスを依然として提供しながら、大幅なスペースと帯域幅の節約を提供することができる。
【0050】
[0073]上記の同期の実施形態は、クライアントデバイス150及びコンテンツ管理システム110のサーバに言及しているが、ユーザアカウントが任意の1つのクライアントデバイス150上のオブジェクトへの変更がコンテンツ管理システム110とのそれぞれの同期を通じて他のクライアントデバイス150に伝播することができるように、全てのオブジェクトをコンテンツ管理システム110と同期させる任意の数のクライアントデバイス150を有することができることを、当業者であれば理解するであろう。
【0051】
[0074]<コラボレーション機能>
[0075]コンテンツ管理システム110の別の特徴は、動作主体(サブジェクト)間のコラボレーションを容易にすることである。コラボレーション機能には、オブジェクトの共有、オブジェクト上でのコメント付け、リアルタイムでのオブジェクトへのコラボレーション、インスタントメッセージング、オブジェクトに関するプレゼンスや「表示」状態の情報の提供などがある。
【0052】
[0076]<共有>
[0077]コンテンツ管理システム110は、共有サービス128を介して共有オブジェクトを管理することができる。オブジェクトへのリンクを提供することによってオブジェクトを共有することは、コンテンツ管理システム110とネットワーク通信する任意のコンピューティングデバイスからオブジェクトにアクセス可能にすることを含むことができる。しかしながら、いくつかの実施形態では、リンクは、コンテンツ管理システム110及びIAM(Identity and Access Management)サービス132によって強制されるアクセス制限に関連付けられ得る。コンテンツを共有することはまた、共有サービス128を使用してコンテンツをリンク付けして、コンテンツ管理システム110内のコンテンツを少なくとも1つの追加のサブジェクトアカウント(オブジェクトに関連付けられたオリジナルのサブジェクトアカウントに加えて)と共有し、各サブジェクトアカウントがオブジェクトにアクセスできるようにすることを含むことができる。追加のサブジェクトアカウントはコンテンツを受け入れることによってコンテンツへのアクセスを得ることができ、コンテンツは、その後、ウェブインタフェースサービス124を介して、又はクライアントデバイス150上のそれらのアカウントに関連付けられたディレクトリ構造内から直接アクセス可能である。共有は、プラットフォームに依存しない方法で実行することができる。つまり、コンテンツは種々のタイプ、性能、オペレーティングシステムなどの複数のクライアントデバイス150に渡って共有されてもよい。当該コンテンツはまた、サブジェクトアカウントの種々のタイプに渡って共有されてもよい。
【0053】
[0078]コンテンツ管理システム110内でオブジェクトを共有するために、共有サービス128はチーム又は1以上のサブジェクトアカウントのサブジェクトIDを、オブジェクトに関連付けられたオブジェクトデータベース148内のコンテンツアイテムに関連付けることができ、したがって、追加されたサブジェクトアカウントにオブジェクトへのアクセスを許可する。共有サービス128はまた、サブジェクトアカウントのオブジェクトへのアクセスを制限するために、オブジェクトデータベース148内のコンテンツアイテムへのアクセス許可から当該サブジェクトIDを削除することができる。共有サービス128は、オブジェクト識別子、オブジェクトへのアクセスが与えられたサブジェクト識別子、及びオブジェクトデータベース148内のアクセスレベルを記録することができる。例えば、いくつかの実施形態では、単一のコンテンツアイテムに関連付けられたサブジェクト識別子は、関連付けられたオブジェクトに関するそれぞれのサブジェクト識別子に対して異なる権限を指定することができる。
【0054】
[0079]いくつかの実施形態では、コンテンツ管理システム110がそれぞれのオブジェクトに関する完全なアクセス権の記述を含むアクセス制御リスト145を含むことができる。コンテンツ管理システム内の任意のそれぞれのオブジェクトに対するアクセス制御リストは、オブジェクトデータベース148から導出することができる。いくつかの実施形態では、それぞれのオブジェクトのためのアクセス制御リスト145が必要なときに導出できるため、それぞれのオブジェクトのための永続的なアクセス制御リスト145を維持することは望ましくない。いくつかの実施形態では、オブジェクトが上位オブジェクトなどの別のオブジェクトからアクセス権を継承することができる。
【0055】
[0080]コンテンツ管理システム110の外部でオブジェクトを共有するために、共有サービス128はユニフォームリソースロケータ(URL)などのカスタムネットワークアドレスを生成することができ、これにより、任意のウェブブラウザが認証なしに、コンテンツ管理システム110内のオブジェクト又はコレクションにアクセスすることが可能になる。これを達成するために、共有サービス128は生成されたURLにコンテンツ識別データを含むことができ、これは、後に、要求されたオブジェクトを適切に識別し、返すために使用され得る。例えば、共有サービス128は、オブジェクトIDを識別するトークンと、オプションとして、生成されたURL内のサブジェクトIDとを含むことができる。URLが選択されると、URLに含まれるコンテンツ識別データをコンテンツ管理システム110に送信することができ、コンテンツ管理システムは受信されたコンテンツ識別データを使用して、適切なオブジェクトを識別し、当該オブジェクトを返送することができる。
【0056】
[0081]URLを生成することに加えて、共有サービス128は、オブジェクトへのURLが作成されたことをオブジェクトデータベース148に記録するように構成することもできる。いくつかの実施形態では、オブジェクトに関連付けられたオブジェクトデータベース148へのエントリがオブジェクトへのURLが作成されたかどうかを示すURLフラグを含むことができる。例えば、URLフラグはオブジェクトへのURLが作成されていないことを示すために、最初に0又はfalseに設定されたブール値にすることができる。共有サービス128は、オブジェクトへのURLを生成した後、フラグの値を1又はtrueに変更することができる。
【0057】
[0082]いくつかの実施形態では、共有サービス128は、一組の権限をオブジェクトのURLに関連付けることができる。例えば、サブジェクトがURLを介してオブジェクトにアクセスしようと試みる場合、共有サービス128は、オブジェクトに制限された一組の権限を提供することができる。制限された権限の例としては、サブジェクトがオブジェクトをダウンロードできない制限、オブジェクトを保存できない制限、オブジェクトをコピーできない制限、オブジェクトを変更できない制限などを含む。いくつかの実施形態では制限された権限は、特定のドメイン、即ち企業ネットワークドメイン内から、又は特定のドメインに関連付けられたアカウント、例えば、企業アカウント(例えば、@acme.com)に関連付けられたアカウントによってのみ、オブジェクトがアクセスされることを許可する制限を含む。
【0058】
[0083]いくつかの実施形態では、共有サービス128はまた、生成されたURLを非活性化するように設定することもできる。例えば、オブジェクトデータベース148への各エントリは、生成されたURLからの要求に応答してコンテンツを返すべきかどうかを示すURLアクティブフラグを含むこともできる。例えば、共有サービス128はURLアクティブフラグが1又はtrueに設定されている場合にのみ、生成されたリンクによって要求されたオブジェクトを返すことができる。このように、URLアクティブフラグの値を変更することによって、URLが生成されたオブジェクトへのアクセスを容易に制限することができる。これにより、サブジェクトはオブジェクトを移動したり、生成したURLを削除したりすることなく、共有オブジェクトへのアクセスを制限することができる。同様に、共有サービス128は、URLアクティブフラグの値を1又はtrueに再び変更することによって、URLを再アクティブ化することができる。したがって、サブジェクトは、新しいURLを生成する必要なく、オブジェクトへのアクセスを容易に復元することができる。
【0059】
[0084]いくつかの実施形態では、コンテンツ管理システム110は、オブジェクトをアップロードするためのURLを指定することができる。例えば、サブジェクトアカウントを有する第1のサブジェクトはそのようなURLを要求して、そのURLを寄与サブジェクトに提供することができ、寄与サブジェクトはそのURLを使用して第1のサブジェクトのサブジェクトアカウントへオブジェクトをアップロードできる。
【0060】
[0085]<チームサービス>
[0086]いくつかの実施形態では、コンテンツ管理システム110がチームサービス130を含む。チームサービス130は、サブジェクトアカウントの定義されたチームを作成及び管理するための機能を提供することができる。チームはサブチーム(例えば、ビジネスユニット、又はプロジェクトチームなど)を有する会社用に作成することができ、チーム及びサブチームに又はチームに割り当てられたサブジェクトアカウントは、サブジェクトアカウントの任意の定義されたグループについて作成することができる。チームサービス130は、チーム、プライベートサブジェクトアカウントフォルダ、及びアクセス制限された共有フォルダに共通の共有スペースを提供することができる。チームサービス130はまた、管理者がチーム内のコレクション及びオブジェクトを管理するための管理インタフェースを提供することができ、チームに関連付けられたサブジェクトアカウントを管理することができる。チーム、サブチーム、サブジェクトアカウントは全て、サブジェクトデータベース140内のサブジェクト識別子を与えられ、サブジェクトアカウントによるチームへのメンバーシップもサブジェクトデータベース140に記録される。
【0061】
[0087]<IAM(アイデンティティ及びアクセス管理)サービス>
[0088]いくつかの実施形態では、コンテンツ管理システム110はIAMサービス132を含む。IAMサービス132は、サブジェクトアカウントを認証することができる。複数のレベルの権限を有するサブジェクトアカウント(例えば、サブジェクト権限及び管理者権限を有するサブジェクトアカウント)について、IAMサービス132はまた、明示的な権限の拡大を容易にして、管理者による意図しないアクションを回避することができる。
【0062】
[0089]<オブジェクトアクセス>
[0090]オブジェクトストレージサービス116はクライアントアプリケーション152からトークンを受信することができ、このトークンはオブジェクトにアクセスするための要求に従い、サブジェクトアカウントに許可された能力を返すことができる。
【0063】
[0091]<プレゼンス及び表示状態>
[0092]いくつかの実施形態では、コンテンツ管理システムは、オブジェクトが共有されるサブジェクト(サブジェクト)がどのようにオブジェクトと対話しているか、又はオブジェクトと対話していたかについての情報を提供することができる。いくつかの実施形態では、コンテンツ管理システム110は、オブジェクトが共有されるサブジェクトが現在オブジェクトを閲覧していることを報告することができる。例えば、クライアントコラボレーションサービス160は、クライアントデバイス150がオブジェクトにアクセスしているときに通知サービス117に通知することができる。その後、通知サービス117は、同じオブジェクトへのアクセスを有する他のサブジェクトの全てのクライアントデバイスに、当該オブジェクトに対するクライアントデバイス150のサブジェクトの存在(プレゼンス)を通知することができる。
【0064】
[0093]いくつかの実施形態では、コンテンツ管理システム110は、共有オブジェクトとのサブジェクトの対話の履歴を報告することができる。コラボレーションサービス126はメタデータデータベース146及びオブジェクトデータベース148などのデータソースに問い合わせて、サブジェクトがオブジェクトを保存していること、サブジェクトがオブジェクトをまだ閲覧していないことなどを判定し、通知サービス117を使用してこのステータス情報を他のサブジェクトに配布して、現在オブジェクトを閲覧しているか、又は閲覧したか、又はオブジェクトを修正したかを知ることができるようにすることができる。
【0065】
[0094]コラボレーションサービス126は、オブジェクトがコメント機能をもともとサポートしていなくても、コンテンツに関連するコメントを容易にすることができる。そのようなコメントは、メタデータデータベース146に記憶することができる。
【0066】
[0095]コラボレーションサービス126はサブジェクトに関する通知を発信し、送信することができる。例えば、サブジェクトはコメント内の別のサブジェクトを言及することができ、コラボレーションサービス126は当該サブジェクトに、コメント内に言及されたことを知らせる通知を送信することができる。様々な他のオブジェクトイベントは、オブジェクトの削除、オブジェクトの共有などを含む通知をトリガすることができる。
【0067】
[0096]コラボレーションサービス126はまた、サブジェクト(サブジェクト)がインスタントメッセージ、音声通話、電子メールなどを送受信することができるメッセージングプラットフォームを提供することができる。
【0068】
[0097]<コラボレーションオブジェクト>
[0098]いくつかの実施形態では、コンテンツ管理サービスはまた、対話型オブジェクトコラボレーションプラットフォームを提供することができるコラボレーションドキュメントサービス134を含むことができ、これにより、サブジェクトは、コラボレーションオブジェクトを同時に作成し、コラボレーションオブジェクト内のコメントを作成し、コラボレーションオブジェクト内のタスクを管理することができる。コラボレーションオブジェクトは、サブジェクトがコラボレーションオブジェクトエディタを使用して作成及び編集できるファイルとすることができ、コラボレーションオブジェクト要素を含むことができる。コラボレーションオブジェクト要素は、コラボレーションオブジェクト識別子、1以上の作成者識別子、コラボレーションオブジェクトテキスト、コラボレーションオブジェクト属性、対話情報、コメント、及び共有サブジェクトなどを含むことができる。コラボレーションオブジェクト要素は、コラボレーションオブジェクトの検索及び取り出しを可能にするデータベースエンティティとして記憶されうる。複数のサブジェクトはコラボレーションオブジェクトに同時に又は異なる時間に、アクセスし、閲覧し、編集し、コラボレーションすることができる。いくつかの実施形態では、これはウェブインタフェースを介してオブジェクトにアクセスする2つのサブジェクトを要求することによって管理することができ、そこで、それら(複数のサブジェクト)はオブジェクトの同じコピー上で同時に作業することができる。
【0069】
[0099]<コラボレーションコンパニオンインタフェース>
[00100]いくつかの実施形態では、クライアントコラボレーションサービス160は、クライアントデバイス150上に提示されているオブジェクトに関連する情報を表示する目的で、ネイティブアプリケーションコンパニオンインタフェースを提供することができる。クライアントデバイス150に記憶され実行されるネイティブアプリケーションによってオブジェクトがアクセスされ、オブジェクトがコンテンツアプリケーション152によって管理されるように、当該オブジェクトがクライアントデバイス150のファイルシステムの指定された位置にある実施形態では、ネイティブアプリケーションは、上記のアドレス指定されたコラボレーションデータを表示するためのネイティブな方法を提供しなくてもよい。そのような実施形態では、クライアントコラボレーションサービス160は、サブジェクトがオブジェクトを開いたことを検出することができ、コラボレーションデータなど、オブジェクトのための追加情報をオーバーレイに提供することができる。例えば、追加情報は、オブジェクトに対するコメント、オブジェクトの状態、オブジェクトを以前に又は現在閲覧している他のサブジェクトの動作を含むことができる。このようなオーバーレイは、別のサブジェクトが現在オブジェクトを編集しているので、変更が失われる可能性があることをサブジェクトに警告することができる。
【0070】
[00101]いくつかの実施形態では、上述のサービス又はストレージ/データベースのうちの1つ以上は、パブリック又はプライベートアプリケーションプログラミングインタフェースを使用してアクセスされ得る。
【0071】
[00102]特定のソフトウェアアプリケーションは、サブジェクト(サブジェクト)に代わり、APIを介してオブジェクトストレージ142にアクセスすることができる。例えば、クライアントデバイス150上で実行されるアプリケーションなどのソフトウェアパッケージは、サブジェクトがコンテンツを読み取る、書き込む、作成する、削除する、共有する、又は他の方法で操作するために認証クレデンシャルを提供するときに、プログラムによってコンテンツ管理システム110に直接的にAPIコールを行うことができる。
【0072】
[00103]サブジェクトは、ウェブインタフェースサービス124によって生成され、供給されるウェブインタフェースを介して、サブジェクトアカウントに記憶されたコンテンツを閲覧又は操作することができる。例えば、サブジェクトは、ウェブブラウザ内で、コンテンツ管理システム110によって提供されるウェブアドレスにナビゲートすることができる。オブジェクトの新たなバージョンのアップロードのように、ウェブインタフェースを通じてなされたオブジェクトストレージ142のコンテンツへの変更や更新は、サブジェクトアカウントに関連する他のクライアントデバイスへと伝搬することができる。例えば、各々が独自のクライアントソフトウェアを有する複数のクライアントデバイスを単一のアカウントに関連付けることができ、アカウント内のオブジェクトを複数のクライアントデバイスの各々の間で同期させることができる。
【0073】
[00104]クライアントデバイス150は、サブジェクトに代わってコンテンツ管理システム110に接続することができる。サブジェクトは、例えばクライアントデバイス150がデスクトップ又はラップトップコンピュータ、電話機、テレビ、インターネットオブシングスデバイスなどである場合に、クライアントデバイス150と直接対話することができる。代替的又は追加的に、クライアントデバイス150は、例えばクライアントデバイス150がサーバである場合、サブジェクトがクライアントデバイス150への物理的アクセスを行うことなく、サブジェクトの代わりに動作することができる。
【0074】
[00105]クライアントデバイス150のいくつかの機能は、クライアントデバイス150にインストールされたアプリケーションによって有効にされる。いくつかの実施形態では、アプリケーションはコンテンツ管理システムの特定のコンポーネントを含むことができる。例えば、コンテンツ管理システムの特定のコンポーネントは、スタンドアロンアプリケーション152、1つ以上のアプリケーションプラグイン、及び/又はブラウザ拡張であり得る。しかしながら、サブジェクトはまた、クライアントデバイス150上に常駐し、コンテンツ管理システム110と通信するように構成される、ウェブブラウザなどのサードパーティアプリケーションを介して、コンテンツ管理システム110と対話することができる。種々の実装形態では、クライアント側アプリケーション152がサブジェクトがコンテンツ管理システム110と対話するためのサブジェクトインタフェース(UI)を提示することができる。例えば、サブジェクトは、ファイルシステムと統合されたファイルシステムエクスプローラを介して、又はウェブブラウザアプリケーションを使用して表示されるウェブページを介して、コンテンツ管理システム110と対話することができる。
【0075】
[00106]いくつかの実施形態では、クライアントアプリケーション152は、コンテンツ管理システム110の2つ以上のアカウントのコンテンツを管理し、同期させるように構成することができる。そのような実施形態では、クライアントアプリケーション152は、複数のアカウントにログインした状態を維持し、複数のアカウントに通常のサービスを提供することができる。いくつかの実施形態では、各アカウントがファイルシステム内のフォルダとして現れることができ、そのフォルダ内の全てのオブジェクトはコンテンツ管理システム110と同期させることができる。いくつかの実施形態では、クライアントアプリケーション152は、複数のアカウントのうちの1つをプライマリアカウント又はデフォルトアカウントとして選択するセレクタを含むことができる。
【0076】
[00107]<サードパーティサービス>
[00108]いくつかの実施形態では、コンテンツ管理システム110がワークスペースサービス、電子メールサービス、タスクサービスなどの1つ以上のサードパーティサービスとインタフェースするための機能を含むことができる。そのような実施形態では、コンテンツ管理システム110には、サードパーティサービスと対話して、それらのサードパーティサービスからの機能またはデータを、コンテンツ管理システム110によって提供される様々なサブジェクトインタフェースに取り込むために、サードパーティサービスにおけるサブジェクトアカウントのためのログインクレデンシャルが提供され得る。
【0077】
[00109]コンテンツ管理システム110には特定のコンポーネントが提示されているが、当業者であれば、システム100のアーキテクチャ構成が単に1つの可能な構成であり、より多くの又はより少ないコンポーネントを有する他の構成も可能であることを理解するであろう。さらに、サービスは、多かれ少なかれ機能を有することができ、他のサービスとして説明される機能を含んでもよい。さらに、一実施形態に関して本明細書に記載される特徴は、別の実施形態に関して記載される特徴と組み合わせることができる。
【0078】
[00110]システム100には特定のコンポーネントが提示されているが、当業者であれば、システム100のアーキテクチャ構成は単に1つの可能な構成であり、より多くの又はより少ないコンポーネントを有する他の構成が可能であることを理解するであろう。
【0079】
[00111]
図2は、いくつかの実施形態に係る、コンテンツ管理システム110の追加の詳細を示す。例えば、
図2は上述のように、他の機能の中でも、オブジェクトがオブジェクトストレージ142のどこに記憶されるかを決定するように構成されたオブジェクトストレージサービス116を示す。
【0080】
[00112]オブジェクトストレージ142は複数のオブジェクトストレージシャード142nに分割され、各シャードにオブジェクトデータベース148の一部が関連付けられているように示されている。オブジェクトは様々なオブジェクトストレージシャード142nにわたって分散され、特定のオブジェクトストレージシャード142n上のオブジェクトに関連するデータは同じシャード上にも記憶されるオブジェクトデータベース148の部分に記憶される。複数のシャードにわたるオブジェクトストレージデータベース142のこの分散を容易にするために、オブジェクトストレージサービス116は、オブジェクトデータベース148に書き込まれるデータを、適切なシャード上のオブジェクトデータベースの適切な部分に向けることができる。さらに、オブジェクトが1つのオブジェクトストレージシャード142nから別のオブジェクトストレージシャード142nに移動される場合に、オブジェクトストレージサービス116は、オブジェクトをシャード間で移行することと、当該オブジェクトに関連するオブジェクトデータベース148内のデータを新しいオブジェクトストレージシャード142nに移行することとの両方を担当する。
【0081】
[00113]
図2はまた、オブジェクトストレージサービス116及びサブジェクトデータベース140と通信するIAMサービス132を示す。本明細書でさらに説明するように、IAMサービス132は、オブジェクトストレージサービス116及びオブジェクトデータベース148と対話して、オブジェクトに関するアクセス情報を決定することができる。IAMサービス132はまた、アイデンティティ及びアクセスサービスを実行するために、サブジェクトデータベース140と対話することができる。
【0082】
[00114]
図2はまた、
図1に関して説明したサービスのいずれか1つ、又は、オブジェクトストレージサービス116、オブジェクトデータベース148、若しくはメタデータデータベース146のクライアントと対話するか若しくはそれらのクライアントである必要がある他のサービスを示し、本明細書でさらに説明される1つ以上の機能を実行するサービスを一般的に図示する。
【0083】
[00115]
図3は、いくつかの実施形態に係る、オブジェクトデータベース148の一例を示す。オブジェクトデータベース148は、テーブル及びインデックスの集合で構成することができる。例えば、
図3は、アクセス制御リスト(ACL)テーブル202、オブジェクトテーブル212、階層テーブル222、及びオブジェクトデータテーブル232を含むいくつかのテーブルを示す。本明細書で使用される場合、用語「テーブル」は、用語「インデックス」と区別され、テーブルはデータの信頼できるソースを指し、一方で、インデックスは1つ以上のテーブルに記憶された信頼できるソースのデータを表し、それらから導出される、処理され(再)編成されたデータを含むことができる。いくつかの実施形態では、テーブルは効率を最大化し、その意図された機能を実行するのに有効な最小限の記述データのみを記憶するように構成される。最小限の記述データには、テーブル内の他のデータから導出することができるデータが含まれなくてもよい。
【0084】
[00116]本開示はテーブル及びインデックスの特定の編成を説明するが、本技術はそのような編成によって限定されるべきではない。本技術は、特定の機能のためのテーブルを利用して、種々のテーブルへの書き込みをより効率的に行う。
図3のテーブルによってサポートされている特定の機能はアクセス、同期、及びバージョニングタスクを実行することができるが、他のタスクもサポートするために使用することができる。
【0085】
[00117]
図3の個々のテーブルに示されているデータは全て、1つのより大きなテーブルにまとめることができる。しかし、全てのデータがただ1つのテーブルにある場合、テーブルへの書き込み動作の数が増加するため、テーブルに発生する全ての書き込み動作を処理するためにはテーブルへのいくつかの書き込み動作を遅延させなければならない可能性が高くなる。しかし、データをいくつかの異なるテーブルに分割することによって、任意のテーブルに必要とされる書込み動作の数が低減され、スペースを節約することができる。例えば、アクセスの変更が発生した場合、ACLテーブル202にデータを書き込むだけでよく、オブジェクトの変更が発生した場合、オブジェクトテーブル212にデータを書き込むだけでよい。
【0086】
[00118]同様に、本開示はテーブルに提示されるデータを超える追加のデータを含む種々のインデックスに対処するが、当業者はそのような追加のデータもテーブルに含まれ得ることを理解するであろう。さらに、いくつかの実施形態では、本技術がテーブル又はインデックス内の所定のデータを追跡するのではなく、必要なときにオンザフライで所定のデータを計算するように構成される。当業者は、計算されるそのようなデータをテーブル又はインデックスに記憶することもできることを理解するであろう。
【0087】
[00119]オブジェクトデータベース148内のテーブル及びインデックスは全てのキー値ストアであるが、本技術はそのようなデータ構造に限定されるべきではない。オブジェクトデータベース148内の全てのテーブルは、オブジェクトID(oID)及びハイブリッド論理クロック(HLC)を参照する。オブジェクトデータベース148のテーブル及びインデックスの多くにおいて、oID及びHLCは、オブジェクトデータベース148の種々のテーブル及びインデックスにおいてルックアップ(検索)を実行するためのキーを構成する。しかしながら、いくつかのテーブル及びインデックスは、それらのキーとして追加の又は異なるデータを含み得る。
【0088】
[00120]oIDはオブジェクトのIDである。オブジェクトは一般に、ファイルシステムに記録され得る任意のエンティティである。ハイブリッド論理クロック(HLC)は、時刻クロックと論理クロックの態様を組み合わせたクロック値である。HLCは、特定のマシン上の全てのイベントが発生する順序で記録され、受信側マシンでの送信後の全てのイベントが送信側マシンでの送信前のイベントの後に順序付けられることを保証する。このようにして、多くの異なるデバイスのクロックが非常によく同期されているが、それぞれのクロック間に小さいが潜在的に重大な差分が存在するため、システムの多くのデバイスにわたって発生するイベントが絶対的な相対順序付けを全て有することを保証することができる。言い換えれば、ハイブリッド論理クロックは、システムの多くのデバイスにわたって起こるイベントの相対的順序付けのためのシステム全体の仕組みを提供する。例えば、マシンは、当該マシンで発生する全てのアクションにタイムスタンプを使用できるが、別のマシンへ通知を送信すると、システム全体の論理カウンタがインクリメントされ、受信側マシンで発生する全ての新たなアクションが、そのクロックが何であるか又は受信した送信のクロック値が何であるかに関係なく、論理カウンタの時刻後に順序付けられる。
【0089】
[00121]オブジェクトデータベース148の全てのテーブル及びインデックス内の全ての行は不変である。テーブル及びインデックスは新たな行を追加できるが、不要な行(保持期間外の行、又はアカウントを持たなくなったサブジェクトの行)をクリーンアップする場合を除き、データが削除されたり又は上書きされたりすることはない。この特性に加えて、各行にハイブリッド論理クロックを含めることにより、システム内の任意のオブジェクト又はオブジェクトのコレクションの現時点及び任意の履歴の時点における、状態のスナップショットを提供することができる機能がシステムに提供される。これは、
図17及び
図18に関して以下でより詳細に説明される。
【0090】
[00122]前述したように、オブジェクトデータベース148は、いくつかのテーブル及びインデックスから構成され得る。ACLテーブル202は、オブジェクトに関連する権限(アクセスを含む)の全ての変更を記録するように最適化される。いくつかの実施形態では、権限はサブジェクト、アクション、能力、及び継承のタプルに関して表され、これらは全てACLテーブル202に記録される。タプルへの参照がここでの説明全体にわたって使用されるが、値の集合を表すための任意の仕組みが使用され得ることを当業者は理解するであろう。
【0091】
[00123]サブジェクト(サブジェクトID(sID)によって識別される)は、コンテンツ管理システム内の任意の動作主体(サブジェクト)に関連する。動作主体は、個人のサブジェクトアカウント、個人のアカウントにマッピングするチーム又はグループ、チームにマッピングする組織、複数のグループからなるグループなどであり得る。いくつかの実施形態では、複数のサブジェクトIDを権限ステートメントにリストすることができる。
【0092】
[00124]アクションはサブジェクトが能力を実行することを許可するか、又は許可しないかを定義し、他の要因を条件とすることができる。以下の表に、いくつかのアクションの例を示す。
【0093】
【0094】
これらのアクションをまとめると、高度にカスタマイズされた権限ステートメントを作成できる。上述のように、本技術は、広範な潜在的権限をサポートすることによって、及び非常に効率的なシステムにおける広範な権限組織スキームを考慮することによって、最新技術に対する改善を提供する。一部のエンティティアカウントは汎用トップレベルルールによって管理される場合があるが、例外が必要になる場合がある。例えば、組織アカウントは共有が組織内にある限り、チームメンバーによるオブジェクトの共有を可能にすることができる。このポリシーは、組織のアカウント内の全てのオブジェクトに適用されるトップレベルポリシーとなる。しかし、例外が必要となる場合もあり、上記のアクションはそのような例外を許容することになる。
【0095】
[00125]一部のアクションは継承も参照する。ACLテーブル202は、オブジェクトが別のオブジェクトから権限を継承すべきかどうかを参照する継承順序に関する列も含む。多くのコンテンツ管理システムは、ツリーディレクトリ構造において、全てのノードがその直接の上位から権限を継承劣後のスキームに従う。しかし、本技術は、ディレクトリ構造の最上位からの若しくは直接の上位からの(継承劣後の)の継承をサポートするか、又は権限を全く継承しないことをサポートすることができる。これらの継承スキームの組合せは、任意のオブジェクトに対して可能な高度にカスタマイズされた権限にも貢献する。全てのオブジェクトが継承優先権限ステートメントに準拠することができ、これは、ディレクトリツリー内のその下にある全てのオブジェクトに適用される最上位のポリシーと考えられる一方で、その直近の上位からの一部のプロパティを継承することもできる。また、特定のオブジェクトが、継承優先の権限ステートメント又は継承劣後の権限ステートメントのいずれも継承しないことも可能である。場合によっては、サブジェクトがディレクトリ構造内の任意の上位又は子オブジェクトにアクセスすることなく、オブジェクトにアクセスすることができる可能性がある。
【0096】
[00126]ACLテーブル202の能力値は、どの権限が影響を受けているかを定義する。能力列の権限は、アクション列及び継承列と組み合わせて定義される。以下の表は、いくつかの例示の能力(「許可」アクションと組み合わせた場合)を特定し説明する。
【0097】
【0098】
[00127]sID、アクション、能力、及び継承の列はまとめて、オブジェクトに関連する特定の権限ステートメントを構成するタプルを表す。各行は、指定されたハイブリッド論理クロック値で影響を受けたオブジェクトIDに関するこれらのタプルのうちの複数を含むことができる。
【0099】
[00128]権限は後でオブジェクトID(後のハイブリッド論理クロック値)に対して追加又は変更することができ、これらの権限ステートメントは、オブジェクトIDと後のハイブリッド論理クロック値に関連する新たな行にリストすることができる。
【0100】
[00129]コンテンツ管理システムの文脈において所与のオブジェクトの能力を参照する際に、オブジェクトに提供される全ての権限の定義であるアクセス制御リスト(ACL)を参照することが一般的である。本技術のいくつかの実施形態では、ACLは記憶されないが、以下の
図13に関して説明するように導出することができる。
【0101】
[00130]
図3はまた、オブジェクトに加えられた変更に関する情報を記録するオブジェクトテーブル212を示す。オブジェクトテーブル212はまた、オブジェクトID及びハイブリッド論理クロックのための列を含み、修正が行われたオブジェクト及びシステム時刻を識別する。オブジェクトに対して行われた変更を記録することに加えて、オブジェクトテーブル212は、特定の時刻におけるオブジェクトのバージョンを識別するために使用され得る。
【0102】
[00131]オブジェクトテーブル212はまた、修正時刻と呼ばれる、ハイブリッド論理クロック値が対応し得るおおよその日時を識別するために使用することもできる。修正時刻は、変更が行われたクロックタイム(日付と時刻)の表現である。
【0103】
[00132]オブジェクトテーブル212はまた、オブジェクトのタイプを識別する列を含む。例えば、列は、オブジェクトがファイル又はディレクトリかを示すことができる。いくつかの実施形態では、オブジェクトに対する修正がオブジェクト自体を変更することではなく、別のディレクトリ下にディレクトリをマウントすることであってもよい。マウントの例では、オブジェクトのタイプがオブジェクトがマウントされるディレクトリのターゲットオブジェクトIDをリストすることができる。
【0104】
[00133]
図3はまた、階層テーブル222を示す。階層テーブル222は、上位のoIDについての列の各オブジェクトの直接の親(即ち、直接の上位)を記憶する。階層テーブル222はまた、オブジェクト名と当該オブジェクト名のハッシュ値を記憶する。オブジェクトの直接の親を記憶することに加えて、階層テーブル222は、以下で詳細に説明するように、オブジェクトの上のディレクトリツリーをそのルートに至るまで決定することに使用され得る。
【0105】
[00134]
図3はまた、オブジェクトデータテーブル232を含む。オブジェクトデータテーブル232は、オブジェクトに関連するデータを記録する。オブジェクトデータテーブル232は広範囲の異なる可能なデータを考慮し、識別するように構成される。アイテムデータスペース及びアイテムデータキーは特定のカテゴリ及び値に関連するオブジェクトを識別し、バイト文字列は、オブジェクトに関連して記憶される任意の値であり得る。
【0106】
[00135]例えば、アイテムデータスペースはコンテンツ管理システム110に特定の機能を提供する責任を負う製品機能又はエンジニアリングチームを識別することができ、アイテムデータキーは、チームに関連付けられるか、又はチームによって割り当てられる値である。言い換えると、アイテムデータスペースとアイテムデータキーとの組合せは、エンジニアリングチームが決定した何らかのフォーマットを使用することによって、エンジニアリングチームが必要とする任意のタイプの情報を符号化することができるフリーフォーマットとして機能することができる。例えば、バイト文字列は、以下の情報を表すことができる。ポリシーID=123;オブジェクトタイプ=7これにより、システムを使用する任意のエンジニアリングチームは、任意の数及び任意のタイプのデータフィールドを任意のオブジェクトに容易に追加することができる。これにより、アイテムデータスペースにアイテムデータキー列を加えたものを使用して、当該エンジニアリングチーム又は製品機能に関連するデータを有する全てのオブジェクトを識別することができる。バイト文字列は、製品機能又はエンジニアリングチームが記憶及び取得することを望む特定のデータを含むことができる。このようにして、オブジェクトデータテーブル232は、新しいアイテムデータスペース及び/又はアイテムデータキーを定義することによって、オブジェクトに関する任意の新たなデータを記憶することができるように拡張可能であり得る。
【0107】
[00136]別の例では、オブジェクトデータテーブル232はまた、ブロックリストを含む。上述のように、オブジェクトはブロックに分割することができ、ブロックリストの列のデータは、その時点で(変更がオブジェクトテーブル212に記録された後に)オブジェクトを構成するブロックを識別する。コンテンツアイテムに関連付けられたブロックに関連するテーブルへのエントリは、アイテムデータスペース列によって識別することができ、したがって、当該テーブルでは、特定のHLC範囲内のブロックリスト情報を含むオブジェクトIDについてのエントリを検索することができる。値はオブジェクトを構成する完全な文字列のブロックを含むことができ、或いは、修正されたブロック又は複数ブロックのみを含むことができる。
【0108】
[00137]上で述べたように、
図3のテーブルは、アクセス、同期、及びタスクのバージョニングを実行するための必須情報をまとめて記録する。
図3のテーブルは非常に効率的に構成されており、コンテンツ管理システムの重要なタスクを効率的に実行するために不必要なデータはこれらのテーブルから除外されている。さらに、これらのテーブルに書き込む必要がある頻度や状況を最適化するために、これらのテーブルは個別に維持される。
【0109】
[00138]
図4は、例示的な集約インデックス305を示す。集約インデックス305はオブジェクトデータベース148の一部であり、
図3に示すテーブルと同様に、集約インデックス305は、オブジェクトストレージ142内のシャード上に記憶され得る。上述したように、集約インデックス305内のデータは、
図3に示すテーブルから導出することができる。
【0110】
[00139]いくつかの実施形態では、コンテンツ管理システム110が集約されたデータを提供する必要があり得る。例えば、コンテンツ管理システム110は、ディレクトリツリー内のオブジェクトの集約値(合計値とも称する。)を提供することができる必要があり得る。例えば、
図3の集約インデックス305は、特定のディレクトリ下のバイト数の集約を記録する。しかしながら、他のタイプの集約データが重要である可能性があり、そのようなデータは、集約インデックス305の追加の列に記録され得るか、或いは他のタイプの集約データを集約するための他の集約インデックスが存在し得ることが理解されるであろう。
【0111】
[00140]集約インデックス305には、オブジェクトデータベース148内の他の全てのテーブル及びインデックスと同様に不変の行が含まれるため、ディレクトリツリーの最下位で変更が行われるたびに、ディレクトリツリーの下部で行われた変更によって影響を受けるディレクトリツリーの途中にある全てのオブジェクトに対して新しい行を集約インデックス305に書き込む必要がある。
図4は新たなオブジェクトがディレクトリツリー303に追加される際に、集約インデックス305がどのように追加され得るかの単純な例を示す。
【0112】
[00141]例えば、
図4はoID=134を有し、HLC=2で発生する新たなディレクトリ「/bar」がルート下に追加されたことを示す。ディレクトリツリー303へのoID=134の追加を考慮するために、複数の行306が集約インデックス305に書き込まれる必要がある。行の先頭306はディレクトリツリー303へのoID=134の追加を表し、一方、次の行は、ディレクトリoID=78のルートに起こる任意の変更を表す。
【0113】
[00142]その後、HLC=3で、oID=345を有するオブジェクト「hi.DOC」がディレクトリツリー303に追加されます。OID=309は、2000バイトのサイズを有するファイルオブジェクトである。集約インデックス305内の行308は、oID=345の追加を考慮するための集約インデックス305への変更を示す。図示されるように、最初に、行がoID=345の集約インデックス305に含まれ、その行のサイズが2000バイトであることが示されている。次に、その最も直接的な上位oID=134について行が書き込まれ、そのディレクトリ下に2000バイトの集合があることを示す。最後に、ルートoID=78に対して行が書き込まれ、ルート下に、ディレクトリツリー30合計2000バイトがあることを示す。
【0114】
[00143]その後、HLC=4で、oID=98を有する1000バイトのオブジェクト「Foo.txt」がディレクトリツリー303に追加される。集約インデックス305内の行310は、ディレクトリツリーへのoID=98の追加を考慮するための、集約インデックス305への変更を示す。図示されているように、最初の行は、oID=98の集約インデックス305に含まれており、1000バイトであることを示す。次に、その直接の上位oID=78について行が追加され、oID=78より下に3000バイトが存在することを示す。3000バイトは、oID=98のバイト数とoID=345のバイト数の合計である。
【0115】
[00144]さらに後に、HLC=5でディレクトリ「/baz」が、oID=56を有するディレクトリツリー303に追加されている。oID=56は0バイトであるが、その下に2つの追加オブジェクトoID=655及びoID=765を含み、それぞれ2000バイトのサイズを有する。oID=56、655、及び765のそれぞれがHLC=5でディレクトリ構造に追加されたので、3つのオブジェクトは全て同じ操作の一部として追加されたことがわかる(例えば、ディレクトリオブジェクトoID=56は、
図4に示されるディレクトリツリー303にコピー又は移動されている)。集約インデックス305内の行312は、oID=56、655、及び765の追加を考慮するための、集約インデックス305への変更を示す。行312の集合の最初の3つの行は、集合インデックス305への3つの新たなオブジェクトの追加を表す。最後から2番目の行は、oID=56への直接の上位の行を表す。これはoID=134の下の更新された合計バイトの行で、現在6000バイトが存在する。6000バイトはoID=655から2000バイト、oID=765から2000バイト、oID=345から2000バイトである。最後の行はツリー303の次のディレクトリのためのものであり、ディレクトリの最上位であるoID=78であり、現在、その下に合計7000バイトを有する。7000バイトはoID=655から2000バイト、oID=765から2000バイト、oID=345から2000バイト、oID=98から1000バイトである。
【0116】
[00145]いくつかの実施形態では、集約インデックスは、有用な任意の集約値を含む必要はない。集約インデックスはその行の検索オブジェクトIDであるディレクトリオブジェクト下にあるオブジェクトに変更が加えられるたびに新たな行を受け取るので、集約インデックスにリストされているディレクトリオブジェクト下で変更が発生したことを判断するために、集約インデックスは少なくとも簡易なソースとなり得る。
【0117】
[00146]
図5は、集約インデックス305などの集約インデックスへの書き込み及び維持(505)の例示的な方法を示す。例えば、オブジェクトストレージサービス116は、集約インデックスへの書き込み及び読み取りを調整することによって集約インデックスを維持してもよい。
図5に示される例示的な方法は特定の動作シーケンスを示すが、シーケンスは本開示の範囲から逸脱することなく変更されてもよい。例えば、示される動作のいくつかは、並列に、又は方法の機能に実質的に影響を与えない異なるシーケンスで実行されてもよい。他の例では、方法を実装する例示的なデバイス又はシステムの異なるコンポーネントが実質的に同時に又は特定のシーケンスで機能を実行してもよい。
【0118】
[00147]いくつかの実施形態では、集約インデックス(例えば、集約インデックス305)はディレクトリ構造に含まれるオブジェクトに関連付けられたオブジェクトID(oID)のためのフィールドを含む。ディレクトリ構造はディレクトリ及びファイルに配置されたオブジェクトの集合でありえ、ここで、別のディレクトリ内に位置する少なくとも1つのディレクトリがあり、少なくとも2つのレベル(第1レベルルート及び第2レベル子ディレクトリ)の構造が存在する。
【0119】
[00148]
図4に示すように、集約インデックス305は行のサブジェクトである検索オブジェクトID、行が書き込まれる要因となるオブジェクトIDであるアクションオブジェクトID(アクションオブジェクトIDに生じた変更)、及びタイムスタンプ(例えば、HLC値)を含む行を含むことができる。集約データはまた、集約インデックス305に含まれることができ、集約インデックスの特定の行において識別された検索オブジェクトID(oID)の全ての下位についてのデータの集約を記述する。
【0120】
[00149]いくつかの実施形態では、集約インデックスは複数の不変行を含み、集約インデックス内の任意の行は当該行に表されるタイムスタンプから開始し、オブジェクトIDについての別の後に書き込まれる行に表される後のタイムスタンプで終了する期間中に、当該行に表されるオブジェクトIDについての集約データを表す。例えば、HLC=3におけるoID=134の集約バイト値は、HLC=5における集約インデックス305にoID=134が再び現れ、その集約バイト値が更新されるまで有効である。これは、HLC=3から始まる期間からHLC=5の直前まで、oID=134は、ディレクトリツリー下に2000の集約バイトを有する。集約インデックス305が、oID=134の集約バイトについてHLC=4で問い合わされた場合、2000バイトの値が返される。
【0121】
[00150]集約インデックス205は集約バイトの集約データを含むが、集約データはオブジェクト下のバイト数、オブジェクト下のオブジェクト数、又は特定のタイプのオブジェクト数などを含む、少なくとも1つのカテゴリのための任意の集約値であり得る。いくつかの実施形態では、集約データがオブジェクト下のオブジェクト数だけでなく、バイト数など、2つ以上の集約値を含むことができる。
【0122】
[00151]いくつかの実施形態では、
図5に記載される方法がディレクトリ構造内の第1のオブジェクトに対するアクションを検出すること(510)を含む。例えば、サーバ同期サービス112又はクライアント同期サービス156はオブジェクトに対するアクションを検出することができ(510)、オブジェクトストレージサービス116を呼び出してオブジェクトデータベース148を更新することができる。
【0123】
[00152]いくつかの実施形態では、本方法がイベントストリーム中のイベント通知を検出すること(515)をさらに含む。例えば、オブジェクトストレージサービスはイベント通知を検出することができ(515)、オブジェクトストレージサービス116がオブジェクトへの変更を示す通信を受信したことに応答して、オブジェクトテーブル212又は階層テーブル222などの更新された1つ以上のテーブルと集約インデックス305とを含むオブジェクトデータベース148に関連する変更を行うことを調整することができる。
【0124】
[00153]オブジェクトデータベース148の1つ以上のテーブルに対する変更を行うことに加えて、いくつかの実施形態では、本方法は、新たな行が作成され、集約インデックス305に追加されるまで、イベント通知を待ち行列に入れること(520)を含む。オブジェクトデータベース148はテーブルへのほぼリアルタイムの書き込みを容易にするように構成されるが、いくつかの実施形態では、集約インデックス305などのインデックスの処理が、データの処理及びインデックス内の新たな行の書き込みが実行され得るまで、オブジェクトストレージサービス116によってキューに入れられ得る(520)。いくつかの実施形態では、集約インデックス305内に新たな行を作成することは、少なくとも1つの信頼できるテーブル(例えば、ACLテーブル2020、オブジェクトテーブル212、階層テーブル222、及びオブジェクトデータテーブル232などのオブジェクトデータベース148のテーブル)内のオブジェクトに対するアクションを追跡するためのプロセスと比較して、非同期プロセスであり得る。
【0125】
[00154]いくつかの実施形態では、イベント通知のキューイング(520)を実行する必要はない。多くの場合、集約インデックス305に対する変更は、これらの変更をほぼリアルタイムで、かつオブジェクトテーブル212又は階層テーブル222などの対応するテーブルへの書き込みと連携して行うことができるように十分に制限することができる。ディレクトリ下のディレクトリツリーが比較的浅い場合、例えば、約10レベル以下の書き込み数及び処理は、テーブルの更新と連携して集約インデックス305の更新を同期して実行することができ、したがって、キューイング(520)が必要とされない場合があるほど十分に迅速に実行され得る。
【0126】
[00155]加えて、ほとんどの場合、集約インデックス305内のディレクトリオブジェクトの集合のためのデータを更新することは、互いに干渉せず、多くの動作をインデックスに対して同時に実行することができる。
【0127】
[00156]イベント通知がキューの先頭に達し、集約インデックスが更新されたデータを受信する準備ができると、本方法は、集約インデックス内に新たな行を作成すること(525)を含む。新たな行は、変更が発生した第1のオブジェクトのオブジェクトID(oID)のためのデータ、第1のオブジェクトに対するアクションの時刻を示すタイムスタンプ、及び第1のオブジェクトの全ての下位のための集計データについての第1の集計値を含む。
【0128】
[00157]いくつかの実施形態では、集約インデックスの更新は、変更が発生するオブジェクトについて新たな行が書き込まれる場合には完了しない。集約インデックスには、変更が発生したオブジェクトの上位ごとに新たな行も含める必要がある。そのような方法はディレクトリ構造の最上部(先頭)について行が書き込まれるまで、ディレクトリ構造を上に移動することによって変化が生じた第1のオブジェクトの次の上位オブジェクトを決定すること(530)、及び各上位オブジェクトについて、集合インデックス内の新たな行を作成すること(535)を再帰的に実行することを含む。当該行は上位オブジェクトの上位オブジェクトIDのためのデータ、第1のオブジェクトに対するアクションの時刻を示すタイムスタンプ、及び上位オブジェクトの全ての下位のための集約データにおける上位集約値を含む。
【0129】
[00158]集約インデックス305は、複数タイプのクエリに効率的に結果を返すのに有用であり得る。一例では、クエリがHLC値によって示される時間範囲の間にオブジェクトIDによって示されるディレクトリの下に集約されたデータを判定するために、オブジェクトストレージサービス116によって受信され得る。オブジェクトストレージサービス116はクエリを集約インデックス305のルックアップに変換することができ、要求された集約値を返すことができる。検索オブジェクトIDは、クエリ内に示される時間範囲の間、集約インデックス305内に存在しない可能性があるため、オブジェクトストレージサービスはHLC範囲の直前の検索オブジェクトIDの発生を識別するために、HLC範囲の終わりの前に検索オブジェクトIDの全ての発生を検索する必要がある可能性がある。これは新たな値が変更があるときにのみ書き込まれるので、上記範囲の開始時にクエリによって要求される値をもたらし、変更されていない以前の値は新たな値が記録されるまで有効なままである。
【0130】
[00159]別の例示的なクエリでは、オブジェクトストレージサービス116がオブジェクトIDによって識別されるディレクトリがある期間中にコンテンツアイテムに対する任意の変更を含んでいるかどうかを判定するクエリを受信することができる。集約インデックス305は、オブジェクトに対する変更が発生するたびに更新を受信するので、オブジェクトIDが時間範囲(HLC範囲)の間に集約インデックス305内に存在する場合、検索オブジェクトIDの下で何らかの変更が発生したことになる。当該変更は、集約インデックス305内にリストされたアクションオブジェクトIDフィールド内にリストされたオブジェクトID上で発生している。したがって、オブジェクトストレージサービス116はHLC範囲の間にオブジェクトIDを識別するために、ディレクトリがその下で何らかの変更が生じたかどうかを判定するためにクエリを変換することができる。当該範囲内にオブジェクトIDが存在する場合、当該オブジェクトIDの下で変更が発生したことになる。オブジェクトIDが集約インデックスのルックアップ305から返されない場合、変更は発生していない。
【0131】
[00160]同様に、別の例では、オブジェクトストレージサービス116がHLC範囲中にディレクトリ下で変更されたものを識別するためのクエリを受信することができる。集約インデックス305のルックアップがインデックスから任意の行を返す場合、返されたデータ内のアクションオブジェクトID値は、その期間中に変更されたオブジェクトを示す。
【0132】
[00161]
図6は集約インデックスのクエリを受信し、当該クエリに応答するための例示的な方法を示す。
図6に示される例示的な方法は特定の動作シーケンスを示すが、シーケンスは本開示の範囲から逸脱することなく変更されてもよい。例えば、示される動作のいくつかは、並列に又は方法の機能に実質的に影響を与えない異なるシーケンスで実行されてもよい。他の例では、方法を実装する例示的なデバイス又はシステムの異なるコンポーネントは、実質的に同時に又は特定のシーケンスで機能を実行してもよい。
【0133】
[00162]いくつかの実施形態では、
図6に示す方法は、集約インデックスからデータを提供する要求を受信すること(550)を含む。例えば、オブジェクトストレージサービス116は、集約インデックスからデータを提供する要求を受信してもよい。当該要求は検索オブジェクトID、及びタイムスタンプ値又はタイムスタンプ範囲(例えば、HLC値又は値の範囲)を指定することができる。
【0134】
[00163]いくつかの実施形態では、本方法がステップ555において、要求に応答して集約値を返すことを含む。例えば、オブジェクトストレージサービス116は、要求に応答して集約値を返してもよい。例えば、クエリはHLC=5でoID=134の集約バイト値の要求を識別することができ、集約インデックスは6000バイトの値を返すことができる。
【0135】
[00164]
図7は、オブジェクトデータベース148の一部であるディレクトリインデックス315を示す。いくつかの方法では、ディレクトリインデックス315は階層テーブル222とは逆となる。階層テーブル222がオブジェクトの直接の上位を記録した場合、ディレクトリインデックス315は、オブジェクトの直接の子を記録する。ディレクトリインデックス315は、コンテンツ管理システム110内のサービスがハイブリッド論理クロック値によって示されるタイム範囲の間に親オブジェクトIDによる検索を実行して、親オブジェクトIDの全ての直接の子を見つけ、ハイブリッド論理クロック値によって示されるタイム範囲の間に特定のオブジェクトの親オブジェクトID及び名前ハッシュを検索することによって、特定のオブジェクトについてオブジェクトIDを検索することによって検索を実行することを可能にする。
【0136】
[00165]集約インデックス305と同様に、ディレクトリインデックス315内の全ての行は不変である。したがって、オブジェクトがディレクトリに追加されるか、又はディレクトリから除去されるときはいつでも、少なくとも1つの新たな行をディレクトリインデックス315に書き込むことができる。
図6は、オブジェクトが追加されるのみの単純化された例を示す。そのため、右端の列に見られるように、オブジェクトが追加されるたびにディレクトリインデックス315に新たな行が作成され、ルート以下の全てのオブジェクトのオブジェクトIDがディレクトリインデックス315に追加される。
【0137】
[00166]
図8は、オブジェクトデータベース148の一部であるシンプルオブジェクトインデックス320の例を示す。シンプルオブジェクトインデックス320は、特定の条件が満たされるときはいつでも行がインデックスに書き込まれるインデックスである。このように、シンプルオブジェクトインデックス320の検索は、検索されたオブジェクトIDについて特定の条件が満たされたこと、又は検索されたオブジェクトIDについて特定の条件が満たされなかったことを示す結果又はヌルをもたらす。
【0138】
[00167]いくつかのシンプルオブジェクトインデックス320があり得る。例えば、
図8は、マウントシンプルオブジェクトインデックス321及びACLシンプルオブジェクトインデックス323を示す。マウントシンプルオブジェクトインデックス321のクエリ結果に含めるためには、所与のオブジェクトID(検索oID)がターゲットoIDにマウントされている必要がある。ACLシンプルオブジェクトインデックス323に含めるためには、検索oID又は検索oIDの子に対して権限の変更が発生している必要がある。権限の変更が発生したoIDがターゲットoIDである。
【0139】
[00168]マウントシンプルオブジェクトインデックス321は、全てのマウント、マウント位置(ターゲットoID)、及びマウントが行われたHLCを返す検索oIDの全てのマウントを問い合わせることによって検索され得る。マウントシンプルオブジェクトインデックス321は、指定されたHLC範囲内の検索oIDの全てのマウントを検索することもできる。
【0140】
[00169]ACLシンプルオブジェクトインデックス323は、検索oID上又はその下の全ての権限変更をクエリすることによって検索され得る。ここでは、そのオブジェクト上またはその下で権限変更が発生したオブジェクトの全てのオブジェクトID、変更が具体的に適用されたオブジェクトID(ターゲットoID)、及び権限変更が行われたHLCが返されます。ACLシンプルオブジェクトインデックス323はまた、指定されたHLC範囲内の検索oID上又はその下で、全ての権限変更を検索することができる。
【0141】
[00170]そのようなシンプルオブジェクトインデックス320の1つの使用は、特定のHLC範囲の間に特定のイベントが発生したかどうかを判定することであり、当該イベントが発生したと判定された場合、当該イベントについてのより多くの情報が、オブジェクトデータベース148、サブジェクトデータベース140の他のデータ構造において検索されるか、或いはさらなる処理が実行され得る。例えば、権限変更シンプルオブジェクトインデックス323の検索の目的が、オブジェクトがサブジェクトによって(HLC値によって表されるように)最後にアクセスされてから、権限変更がオブジェクト上又はオブジェクト下で発生したかどうかを判定することである場合、権限変更が発生したと判定されると、特定の権限変更に関する情報が取得され、分析されて、
図13及び
図14に関してさらに説明するように、権限変更が要求サブジェクトによるアクセスに影響を及ぼすかどうかを判定することができる。
【0142】
[00171]シンプルオブジェクトインデックス320のクエリはまた、より具体的であってもよく、インデックス内に存在する場合、特定のHLCにおいて特定のオブジェクトIDを見つけることができる。例えば、クエリは検索oID=<ディレクトリoID>AND、hlc<=<クエリhlc>を要求し、結果を(検索oID、ターゲットoID)によってグループ化することができる。これにより、基準に一致するディレクトリ下にあるオブジェクトごとに正確に1つの行が検出される。
【0143】
[00172]
図9は、オブジェクトデータベース148のテーブル及びインデックスを維持するため例示的な方法を示す。
図9に示される例示的な方法は特定の動作シーケンスを示すが、当該シーケンスは本開示の範囲から逸脱することなく変更されてもよい。例えば、示される動作のいくつかは、並列に又は方法の機能に実質的に影響を与えない異なるシーケンスで実行されてもよい。他の例では、方法を実装する例示的なデバイス又はシステムの異なるコンポーネントは、実質的に同時に又は特定のシーケンスで機能を実行してもよい。
【0144】
[00173]いくつかの実施形態において、本方法はステップ605において、第1のオブジェクトIDに関連付けられたアクティビティが発生したことを判定することを含む。例えば、オブジェクトストレージサービス116は、第1のオブジェクトIDに関連付けられたアクティビティが発生したことを判定することができる。当該アクティビティは、オブジェクトのサブジェクトID又は継承プロパティに関連する権限の変更、オブジェクトの追加、削除、移動、又は修正を含むオブジェクトの修正、及び/又はオブジェクトに関連付けられたメタデータの変更を含む、何らかの方法でオブジェクトを修正する任意のものとすることができる。
【0145】
[00174]いくつかの実施形態ではアクティビティが発生したことを判定した後、本方法はステップ610において、少なくとも1つのテーブルを実質的に同期して更新することができる。例えば、オブジェクトストレージサービス116は、少なくとも1つのテーブルを実質的に同期的に更新し、その後、オブジェクトデータベース148の少なくとも1つのインデックスを非同期的に更新することができる。オブジェクトデータベース148はテーブルが非常に効率的であり、そのような書き込み及び読み取りが要求されるのとほぼ同じ速さで書き込み操作及び読み取り操作を受け付けることができるように構成される。ACLテーブル202、オブジェクトテーブル212、階層テーブル222、及びオブジェクトデータテーブル232などのテーブルは全て、それらの機能を実行するために最小限のデータのみを含むように構成され、データは、テーブルに書き込まれる前に最小限の処理を必要とする。1つの変更されたオブジェクトは1つの行への書き込みのみを必要とし、新たなデータは新たな行の形式でのみ受信でき、これにより、これらのテーブルを迅速に更新できる。一方、集約インデックス305、ディレクトリインデックス315、シンプルオブジェクトインデックス320などのインデックスは、これらのインデックスに書き込まれるのを待っているデータのための関連するキューを有することができる。したがって、これらのインデックスは、非同期に更新することができる。インデックスへの書き込みは追加のデータ処理を伴うことがあり、単一のオブジェクトのみが関連付けられたアクティビティを有する場合には、多くの新たな行を書き込むことを伴うことがあり、これは追加の時間を要することがある。
【0146】
[00175]いくつかの実施形態では、テーブルを更新すること(610)は、ステップ615において、コンテンツ管理システムに記憶されたオブジェクトの少なくとも1つに対して変更されたデータが発生するたびに、少なくとも1つのテーブルに新たな不変行を記録することを含む。新たな行は、変更されたデータが発生したコンテンツ管理システムに記憶されたオブジェクトの少なくとも1つのオブジェクトIDと、変更されたデータに関するデータとを含むことができる。
【0147】
[00176]いくつかの実施形態では、少なくとも1つのテーブルは、少なくとも1つのテーブル内のそれぞれの行内のデータが関係する特定のオブジェクトを参照するオブジェクトIDを少なくとも含むことができる。いくつかの実施形態では、少なくとも1つのテーブルは、IDによって表される特定のオブジェクトに対する変更されたデータが発生したシステム時刻を記録するクロック値(例えば、ハイブリッド論理クロック値又は日時、又は他のクロック値など)を含むことができる。いくつかの実施形態では、少なくとも1つのテーブルは、IDによって表される特定のオブジェクトのオブジェクトタイプデータを含むことができる。いくつかの実施形態では、少なくとも1つのテーブルは、IDによって表される特定のオブジェクトのアクセス能力及び権限データを含むことができる。いくつかの実施形態では、少なくとも1つのテーブルは、IDによって表される特定のオブジェクトの直接の上位である第2の特定のオブジェクトを参照する上位オブジェクトIDを含むことができる。
【0148】
[00177]いくつかの実施形態では、少なくとも1つのテーブルは、アクセス能力データを含む第1のオブジェクトテーブルを含むことができる。いくつかの実施形態では、少なくとも1つのテーブルは、オブジェクトタイプデータを含むオブジェクトアクティビティデータを含む第2のオブジェクトテーブルを含むことができる。いくつかの実施形態では、少なくとも1つのテーブルは、IDによって表される特定のオブジェクトの直接の上位である第2の特定のオブジェクトを参照する第2のオブジェクトIDを含む上位データを含む第3のテーブルを含むことができる。いくつかの実施形態では、各テーブルは、少なくともオブジェクトID及びクロック値フィールドによってインデックス付けされ得る。
【0149】
[00178]上述のように、オブジェクトデータベース148内のテーブルは高効率であり、その意図された機能を実行するのに有効な最小限の記述データのみを記憶するように構成される。最小限の記述データには、テーブル内の他のデータから導出することができるデータは含まれない。例えば、最小限の記述データは、特定のオブジェクトのための変更されたデータをもたらすアクションの記述を含まない。
図19等を用いて後述するように、オブジェクトに対するアクションが編集、移動、新たなオブジェクト作成、アクセス変更などであったかどうかを判定することが可能である。少なくとも1つのテーブルは、コンテンツ管理システムに信頼のあるソースを提供するのに十分な最小限の記述データを含む。
【0150】
[00179]いくつかの実施形態では少なくとも1つのテーブルを含むデータベース(オブジェクトデータベース148)は第1のデータベースのシャードを含む複数のデータベースのシャードにわたって分散され、コンテンツ管理システムは第1のデータベースのシャード上のコンテンツ管理システムに記憶されたオブジェクトのサブセットを記憶し、第1のデータベースのシャード上に記憶されたオブジェクトのサブセットのための変更されたデータはシャード上にも記憶された少なくとも1つのテーブルの第1の部分に記憶される。例えば、(
図3に示すようなファイルオブジェクトである)oID=345などのオブジェクトが第1のシャードに記憶されている場合、オブジェクト345に関連する全てのエントリは、同じシャードにも保存されているオブジェクトデータベース148の一部に生じる。いくつかの実施形態では、オブジェクトストレージサービス116は同じシャード上のルートディレクトリの下に全てのオブジェクトを記憶するように構成することができ、したがって、当該ルートディレクトリのオブジェクトデータベースへの全てのエントリと、その子ディレクトリ及びファイルとは同じシャード上にも記憶されるオブジェクトデータベースの一部に記憶される。
【0151】
[00180]上述したように、オブジェクトデータベース148はインデックスも含む。いくつかの実施形態では、本方法はステップ620において、少なくとも1つのテーブルに加えて少なくとも1つのインデックスを維持することを含む。いくつかの実施形態では、変更されたデータが少なくとも1つのインデックスに含めるための条件を満たす場合、データは少なくとも1つのインデックスにのみ含まれる。これは、テーブルの更新とは対照的であり、特定のオブジェクトに対して任意の変更されたデータが発生するたびに、少なくとも1つのテーブルにデータが含まれる。少なくとも1つのテーブルは特定の目的を有するテーブルに分割することができるが、これらのテーブルの少なくとも1つはオブジェクトに関する任意の変更データについて更新される。これはインデックスの場合には必ずしも当てはまらない。変更は、任意のインデックスに反映されていないオブジェクト上で発生する可能性がある。インデックスに含める条件が満たされると、新たな行がインデックスに書き込まれる。
【0152】
[00181]例えば、データは、上位データを含むテーブル(例えば、階層テーブル222)にデータを書き込むことに加えて、ディレクトリインデックスに書き込まれることができる。ディレクトリインデックスは、ステップ625において、オブジェクトの直接の下位についてのオブジェクトIDを識別することによって、特定のオブジェクトの下位を含む。ディレクトリインデックスに含めるためには、オブジェクトの下位を追加又は削除させる変更を行う必要がある。オブジェクトへのその他の変更は、ディレクトリインデックスに含まれない。
【0153】
[00182]
図10Aは、第1のオブジェクトIDに関連付けられたアクティビティが発生したことを判定する例示的な方法を示す。
図10Aに示される例示的な方法は特定の動作シーケンスを示すが、シーケンスは本開示の範囲から逸脱することなく変更され得る。例えば、示される動作のいくつかは、並列に又は方法の機能に実質的に影響を与えない異なるシーケンスで実行されてもよい。他の例では、方法を実装する例示的なデバイス又はシステムの異なるコンポーネントは、実質的に同時に又は特定のシーケンスで機能を実行してもよい。
【0154】
[00183]いくつかの実施形態では、本方法はステップ640において、少なくとも1つのインデックス内の第1のオブジェクトIDを識別することを含む。例えば、オブジェクトストレージサービス116は、シンプルオブジェクトインデックス320を問い合わせて、少なくとも1つのインデックス内の第1のオブジェクトIDを識別することを試みることができる。シンプルオブジェクトインデックス320にオブジェクトIDを含める条件は、アクティビティが発生したことである。したがって、シンプルオブジェクトインデックス320のクエリが指定されたタイム範囲(HLC値又は範囲)中に第1のオブジェクトIDの識別をもたらすと、アクティビティが発生したと結論付けることができる。
【0155】
[00184]いくつかの実施形態では、本方法は少なくとも1つのインデックスから、ステップ645で当該タイプのアクティビティが発生した第1のシステム時刻を取得することを含む。例えば、オブジェクトストレージサービス116は、シンプルオブジェクトインデックス320から、当該タイプのアクティビティが発生した第1のシステム時刻(HLC値)を取得することができる。当該クエリはHLC値によって表される範囲を識別することができるが、アクティビティが発生した実際のHLC値は知られていない。したがって、シンプルオブジェクトインデックス320のクエリの1つの目的は、アクティビティがいつ発生したか、アクティビティが発生したかどうかを学習することである。
【0156】
[00185]本方法は、ステップ650において、第1のオブジェクトID及び第1のシステム時刻を使用して少なくとも1つのテーブルに問い合わせることを含み、これにより、第1のシステム時刻において第1のオブジェクトIDに関連する追加のデータを取得する。例えば、オブジェクトストレージサービス116は、ステップ645で取得されたHLC値を使用して、オブジェクトデータベース148内の少なくとも1つのテーブルに問い合わせて、第1のシステム時刻における第1のオブジェクトIDに関する追加データを取得することができる。
【0157】
[00186]例えば、
図10Aに示される本方法は、HLC1~100からのHLC値の範囲についてオブジェクト556のACLシンプルオブジェクトインデックス323を問い合わせるために使用され、これはHLC=5及びHLC=99において当該オブジェクトについて発生したACL変更を返す。次いで、オブジェクトストレージサービス116は、ACLテーブル202にオブジェクトID及びHLC値を問い合わせて、ACL変更に関する特定の詳細を学習することができる。
【0158】
[00187]
図10Bは、指定された時刻におけるサブジェクトアカウントについてディレクトリツリーの表現を構成するための例示的な方法を示す。
図10Bに示される例示的な方法は特定の動作シーケンスを示すが、シーケンスは本開示の範囲から逸脱することなく変更され得る。例えば、示される動作のいくつかは、並列に又は方法の機能に実質的に影響を与えない異なるシーケンスで実行されてもよい。他の例では、方法を実装する例示的なデバイス又はシステムの異なるコンポーネントは、実質的に同時に又は特定のシーケンスで機能を実行してもよい。
【0159】
[00188]いくつかの実施形態では、指定された時刻はディレクトリツリーの最新バージョンであり得る。いくつかの実施形態では、指定された時刻は以前の時点におけるディレクトリツリーを参照することができる。
【0160】
[00189]いくつかの実施形態では、本方法はステップ660において、指定された時刻にディレクトリツリーを表す要求を受信することを含む。例えば、オブジェクトストレージサービス116は、指定された時刻にディレクトリツリーを表す要求を受信することができる。
【0161】
[00190]いくつかの実施形態では、本方法は、ステップ665において、指定された時間中に特定のオブジェクトの直接の上位を最初に識別することによって、オブジェクトの上位を識別するために、オブジェクトデータベース148のディレクトリインデックス315にアクセスすることを含む。
【0162】
[00191]その後、オブジェクトストレージサービス116は、特定のオブジェクトのさらに次の上位を検索するために直接の上位をクエリオブジェクトIDにする(675)ことによって、利用可能なさらなる直接の上位がなくなるまで、直接の上位のさらに次の上位を再帰的に識別する(670)ことができる。次いで、識別された各上位は、利用可能なさらなる直接の上位がなくなる(全てのリーフノードに到達する)まで、さらなる上位の再帰的な識別(670)から構築された上位のツリーに含まれ得る(680)。
【0163】
[00192]
図11は、サブジェクトデータベース140を示す。
図2ではサブジェクトデータベース140がオブジェクトストレージ142の外部に記憶されているように示されているが、いくつかの実施形態では、サブジェクトデータベース140は、オブジェクトデータベース148と同様に、オブジェクトストレージ142のシャード142nにわたって記憶され得ることが理解されるであろう。
【0164】
[00193]サブジェクトデータベース140は、サブジェクトに関する重要な情報を追跡するように構成される。サブジェクトは、コンテンツ管理システム110とのアカウントを有する、及び/又は、オブジェクトへのアクセスを有する若しくはオブジェクトに対してアクションを行うことができる、任意のエンティティとすることができる。サブジェクトデータベース140は、サブジェクトテーブル250、サブジェクト管理テーブル255、グループメンバーシップテーブル260、メンバーアフィニティテーブル265、及びサブジェクトマッピングテーブル270を含むいくつかの異なるテーブルに分けることができる。
【0165】
[00194]サブジェクトテーブル250は、サブジェクトテーブル250にサブジェクトID(sID)として表されるサブジェクトに関する情報を記録するように構成される。sIDが存在するとき、sIDが削除されるとき、又はサブジェクトテーブル250に記録されたデータの他の何らかの態様が変更されるときはいつでも、サブジェクトテーブルに新たな行を書き込むことができる。
【0166】
[00195]sIDを含むサブジェクトテーブル250の列に加えて、サブジェクトテーブル250はまた、行に影響を及ぼした変更のシステム時刻を記録することができるハイブリッド論理クロック(HLC)のための列を含む。サブジェクトテーブル250はまた、そのsIDによって表されるサブジェクトアカウントに関する情報を記録する様々なサブジェクトフィールドを含む。例えば、サブジェクトテーブル250は、サブジェクトアカウントに関連付けられたサブジェクト名のサブジェクトフィールド、又はアカウントに関連付けられた電子メールアドレスを含むこともできる。いくつかの実施形態では、サブジェクトテーブル250はまた、サブジェクトアカウントが特定のドメインに属するかどうかを記録することもできる。例えば、サブジェクトアカウントがコンテンツ管理システムのサブジェクトアカウントも有する組織に関連付けられる場合、サブジェクトテーブル250は、サブジェクトアカウントとその領域との間のマッピングを記録することができる。
【0167】
[00196]また、サブジェクトテーブル250は、サブジェクトIDが親サブジェクトIDによって管理されるか、又は制御されるかを示す列を含む。オブジェクトが特定のプロパティを継承できる上位を持つことができるのと同様に、サブジェクトも親を持つことができる。サブジェクトの親は、サブジェクトに制限又は権限を与えることなどによってサブジェクトを管理する権限を有するサブジェクトアカウントとすることができる。いくつかの実施形態では、サブジェクトはまた、親サブジェクトから特定のプロパティを継承することができる。
【0168】
[00197]サブジェクトテーブル250はまた、ルートオブジェクトIDを示す列を含む。いくつかの実施形態では、sIDによって表される全てのサブジェクトアカウントは、そのアカウントのルートとして現れうる独自のプライベートディレクトリに関連付けることができる。同時に、他のルートオブジェクトは、当該サブジェクトのルートオブジェクト下のサブジェクトアカウントのディレクトリ構造にマウントされ得る。例えば、サブジェクトアカウントには「ルートサブジェクト」と呼ばれるルートディレクトリがあり、同時にそのサブジェクトアカウントがグループの一部を有してもよい。グループ自体には、「グループ」と呼ばれる独自のルートディレクトリを有してもよい。グループルートディレクトリは、ディレクトリ構造が「/root subject/group」となるように、サブジェクトについてのルートディレクトリ下にマウントされうる。他の場合において、サブジェクトアカウントが組織のサブジェクトアカウントに厳密に関連付けられている場合、サブジェクトアカウントのルートは、組織のルートの下に表示されてもよい。例えば、組織が「organization」というルートディレクトリを有する場合、サブジェクトのディレクトリ構造は「/organization/root subject」のようになる。あるルートディレクトリと別のルートディレクトリとの間の特定の関係は、実装の単なる一例である。しかし、これらの例は各サブジェクトアカウントが独自のルートディレクトリを有し、任意のルートディレクトリが別のルートディレクトリ内にマウントされ、これにより、サブジェクトアカウントのルートであるにもかかわらず、別のディレクトリに従属するかのように見えることを示す。
【0169】
[00198]サブジェクトテーブル250は、sIDの識別及びHLC値の範囲を受信することによって問い合わせされ、そのようなクエリはサブジェクトテーブル250の別の列に示される任意の情報を返すことができる。制限されたフィールドが、サブジェクトテーブル250内の列として示されているが、追加のフィールドも含まれ得ることが当業者によって理解されるであろう。
【0170】
[00199]サブジェクトデータベース140はまた、親アカウント(sID)と子アカウント(sID)との関係を記録するサブジェクト管理テーブル255を含む。上述のように、サブジェクトアカウントは1つのサブジェクトアカウントが1つ以上の子アカウントに対する管理権限を有することができるように、互いに階層関係を有することができる。親アカウントと子のアカウントと間の関係が作成又は削除されるたびに、テーブルに新たなエントリを追加することができる。サブジェクトデータベース140は、全ての子sIDと、子と親との間の関係の変更が行われたHLC値とを返す親sID値を受信することによって問い合わせることができる。
【0171】
[00200]サブジェクトデータベース140はまた、グループメンバシップテーブル260を含み、それについては、メンバーがグループに追加されるか、又はグループから削除されるたびに、テーブルにエントリを作成することができる。例えば、グループメンバシップテーブル260に示される上位2行では、グループEのメンバーシップの変化が記録される。HLC=67では、メンバGRがグループEに追加され、HLC=89では、メンバsID=GRがグループEから削除される。グループメンバシップテーブル260は、グループアカウントのsIDを提供することによって問い合わせすることができ、クエリは、メンバsIDとグループの間の関係に変更が発生すると、全てのメンバsIDS及びハイブリッド論理クロック値を返す。
【0172】
[00201]サブジェクトデータベース140は、サブジェクトとそれが属するグループとの間の関係を記録するメンバアフィニティテーブル265も含む。いくつかの実施形態では、メンバーアフィニティテーブル265は、グループメンバーシップテーブル260の逆であり、行がグループメンバーシップテーブルに書き込まれるたびに、対応する行もメンバーアフィニティテーブル265に書き込まれる。メンバアフィニティテーブル265は、メンバアカウントsIDを提供することによって問い合わせることができ、当該クエリは、メンバが追加又は削除された、或いはメンバとグループとの間の関係が当該変更のHLC値において変更された全てのグループを返す。
【0173】
[00202]サブジェクトデータベース140はまた、サブジェクトテーブル250の種々のサブジェクトフィールドにある情報をsIDにマッピングするサブジェクトマッピングテーブル270を含む。サブジェクトマッピングテーブル270は、サブジェクトのアカウント名およびHLC値の範囲などのサブジェクトに関する何らかの情報を提供することによって問い合わせることができ、サブジェクトのIDを返す。これは、サブジェクトテーブル250内で実行できるルックアップの逆であり、サブジェクトのIDが提供され、サブジェクトのアカウント名若しくはドメインに関する情報、又はその他の情報を取得することができる。サブジェクトのIDはsIDと同じではないことに注意されたい。サブジェクトのIDは、コンテンツ管理システム110にログインするために使用されるユーザ名又はアカウント名であり、一方、Sidは、サブジェクトアカウントを参照するためにコンテンツ管理システム110によって使用される値である。
【0174】
[00203]
図12は、いくつかの実施形態に従って、クレデンシャルインデックス350を示す。クレデンシャルインデックス350は、別のサブジェクトに対するサブジェクトのメンバーシップが変更されたときにカタログを作成するために使用されます。例えば、クレデンシャルインデックス350はsID=AがHLC=5における変更のサブジェクトであったことを示し、これはその時点でサブジェクトAが作成され、サブジェクトテーブル250に追加された結果である。サブジェクトW、X、及びYは、同じ理由で、クレデンシャルインデックス350に全てリストされる。クレデンシャルインデックスはまた、グループを表すsID=Eが、HLC=67でアクセス変更を受信したことを示す。当該アクセス変更はサブジェクトsID=GRがグループに追加されたときであり、sID=GRもまた、HLC=67でクレデンシャルインデックス350に示される。同様に、HLC=89でsID=GRがグループsID=Eから削除されると、グループsID=B及びsID=GRへの変更がクレデンシャルインデックス350に反映される。クレデンシャルインデックス350の下部ではHLC=507において、sID=E、EA、EB、ECについてのエントリがリストされ、これらはまとめてsID=Eが新たなオブジェクトへのアクセスを与えられたことを反映し、それによって、グループsID=E(EA、EB、EC)のメンバも、それらが属するグループが変更されたため、クレデンシャルインデックス350にリストされる。(ACLテーブル202では、oID=899におけるsID=E2の追加も反映されることに留意されたい)。
【0175】
[00204]
図13は、ディレクトリツリー内のオブジェクトに対する個々の権限ステートメントから構成されるアクセス制御リストを評価するための例示的な方法を示す。
図13に示される例示的な方法は特定の動作シーケンスを示すが、当該シーケンスは本開示の範囲から逸脱することなく変更されてもよい。例えば、示される動作のいくつかは、並列に又は方法の機能に実質的に影響を与えない異なるシーケンスで実行されてもよい。他の例では、方法を実装する例示的なデバイス又はシステムの異なるコンポーネントは、実質的に同時に又は特定のシーケンスで機能を実行してもよい。
【0176】
[00205]上述したように、任意のオブジェクトの完全なアクセス制御リストは、コンテンツ管理システム110内には存在しない。代わりに、特定のオブジェクトのACLリストは、特定のオブジェクト上のディレクトリツリー内の全てのオブジェクトについてACLテーブル202に記録された全ての権限ステートメントのベクトルである。
図13に示す方法はまず、特定のオブジェクト上の上位のリストを判定し、次いで、ACLを構成して評価する。
【0177】
[00206]サブジェクトアカウントに代わって動作するクライアントがオブジェクトへのアクセスを要求する場合に、或いはオブジェクトデータベース148及びオブジェクトストレージ142への書き込みを要求する場合、オブジェクトに対するACLによって定義されるサブジェクトの権限を判定することが必要になる可能性がある。
【0178】
[00207]いくつかの実施形態では、本方法はステップ705において、指定されたオブジェクトIDの上位のリストを決定することを含む。例えば、オブジェトストレージサービス116はオブジェクトIDの上位のリストを判定してもよい。一例では、上位のリストを判定することは、上位データを含むテーブル内のクエリオブジェクトID(指定されたオブジェクトIDで始まる)を検索することによって、次の上位オブジェクトIDを検索すること、次の上位オブジェクトIDをクエリオブジェクトIDに上位として追加することによって、上位のリストを構築すること、及び次の上位IDをクエリオブジェクトIDとすることを含む、いくつかのステップを再帰的に実行することを含んでもよい。リストを構築するこの再帰的プロセスは、ツリーのルートに到達すると完了することができる。
【0179】
[00208]いくつかの実施形態ではオブジェクトのアクセス制御リストを判定する目的で、ツリーはサブジェクトアカウントによってアクセス可能でないルートを含むことができる。ディレクトリツリーを構築する再帰的プロセスは、複数のルート、又は交差しない複数のツリーを有するディレクトリツリーを構築することができる。これは、サブジェクトがアクセス権を有していないルートオブジェクト下に記憶されたオブジェクトを共有するコンテンツ管理システム110の能力の結果である。これについては、
図15を参照して説明する。
【0180】
[00209]いくつかの実施形態ではオブジェクトがサブジェクトアカウントにアクセスできないルートを有する場合、アクセスはサブジェクトアカウントに現れるディレクトリツリーのルートまで上がることによってのみ判定される。
【0181】
[00210]いくつかの実施形態では、本方法はステップ710において、上位のツリー内の各オブジェクトIDに対するアクセス権限を取得することを含む。例えば、オブジェクトストレージサービス116は、上位のツリー内の各オブジェクトIDについての権限ステートメントをACLテーブル202から取得することができる。上述のように、オブジェクトに対するアクセス権限は、少なくとも、アクセス権限が適用されるサブジェクト、サブジェクトに付与される能力、オブジェクトに対してサブジェクトに付与される許可(許可、拒否など)、及びアクセス権限に対する継承プロパティを定義する。
【0182】
[00211]いくつかの実施形態では、本方法は、それぞれの権限ステートメントの継承プロパティに従って、権限ステートメントを順序付けられたリストに順序付けることを含む。特定の権限ステートメントは、「優先」の継承プロパティを有することができ、抑制不可能にすることができ、これにより、権限ステートメントの順序付けられたリスト内の後続の権限ステートメントは特定の権限ステートメントを上書きできない。特定の権限ステートメントは、「優先」の継承プロパティを有することができ、抑制可能にすることができ、これにより、権限ステートメントの順序付けられたリスト内の後続の権限ステートメントは特定の権限ステートメントを上書きすることができる。第1のプロパティを継承する権限ステートメントは、後続の権限ステートメントが削除する必要がない限り、順序付けられたリストの先頭にソートされる。特定の権限ステートメントは、「劣後」の継承プロパティを有することができ、それらの権限ステートメントは、順序付けられたリストの最後にソートされる。特定の権限ステートメントは、「継承なし」の継承プロパティを有することができ、権限ステートメントは、順序付けられたリストには現れない。特定の権限ステートメントは、「継承拒否」の継承プロパティを有することができ、当該プロパティでは、上位の権限ステートメントが「優先」で「抑制不可能」でない限り、オブジェクトIDはその上位から権限ステートメントを継承しない。
【0183】
[00212]オブジェクトストレージサービス116は、ディレクトリツリー内の任意のオブジェクトについて取得した権限が「継承なし」の継承プロパティを含むかどうかを判定し(713)、そうであれば、オブジェクトストレージサービス116は、当該オブジェクトに対する権限ステートメントを破棄することができる(714)。「継承なし」のプロパティは、関連付けられている特定のオブジェクトIDにのみ適用され、上位ポリシー又は下位ポリシーがマージされ、リスト内でソートされるかどうかには影響しない。
【0184】
[00213]オブジェクトストレージサービス116は、ディレクトリツリー内の任意のオブジェクトについて取得した権限が「継承拒否」の継承プロパティを含むかどうかを判定し(715)、そうである場合、オブジェクトストレージサービス116は、継承ポリシーが抑制不可能な継承優先ポリシーである場合を除き、全ての上位(ディレクトリツリーで継承拒否のプロパティを有するオブジェクトIDの上のオブジェクト)からの権限ステートメントを破棄することができる(720)。破棄された権限ステートメントはマージされず、リストにソートされない。
【0185】
[00214]残りの権限ステートメントを用いて、オブジェクトストレージサービス116は、これらの権限ステートメントのマージ及びソートを実行して、それらを評価のために適切に順序付けることができる。権限ステートメントの順序付けは、取得された権限ステートメントのオブジェクトIDの権限ステートメントが「優先」の継承プロパティを有するかどうかを判定する(725)ことを含むことができる。オブジェクトストレージサービス116は、これらの権限をマージし、リストの先頭から下にソートすることによって、権限ステートメントの順序付けられたリストにおいて、「優先」の継承プロパティを有する権限ステートメントを、「劣後」の継承プロパティを有する権限ステートメントの上に配置することができ、ここで、各権限は、ディレクトリツリーの上から下に表示される順序でリストに含まれる。
【0186】
[00215]権限ステートメントの順序付けは、取得された権限ステートメントのオブジェクトIDの権限ステートメントが「劣後」の継承プロパティを有することを判定することをさらに含むことができる。オブジェクトストレージサービス116は、これらの権限をマージし、逆の相対的な順序でソートすることによって、それぞれの上位が上位のツリーに配置されているため、権限ステートメントの順序付けられたリストにおいて「劣後」の継承プロパティの権限ステートメントを有するオブジェクトIDの上位に関する権限ステートメントを配置することができる(730)。言い換えると、ディレクトリツリーの最下部にあるオブジェクトに対するアクセス権限は、ディレクトリツリーの上位に位置するオブジェクトについての権限ステートメントの上位にある権限ステートメントの順序付けられたリストに配置される。しかし、継承された全ての承継「劣後」のアクセス権限は、継承「優先」の権限ステートメントを用いて、アクセス権限下の順序付けられたリストに配置される。オブジェクトの全てのアクセス権限の順序付けられたリストは、そのオブジェクトのアクセス制御リスト(ACL)と見なすことができる。
【0187】
[00216]いくつかの実施形態では、本方法はステップ735において、権限ステートメントがオブジェクトへのアクセスを許可又は拒否するまで、権限ステートメントの順序付けられたリストを繰り返し処理することを含む。例えば、オブジェクトストレージサービス116は、アクセスが許可又は拒否されるべきかを判定するために、権限ステートメントの順序付けられたリストを繰り返し処理してもよい。
【0188】
[00217]いくつかの実施形態では、権限ステートメントがアクセスを許可又は拒否すると、リストを通じた繰り返しを終了することができる。第1の継承権限を抑制できる場合は、少なくとも継承「劣後」の権限ステートメントの1つがアクセスを提供又は拒否するまでツリーを繰り返し処理する必要がありうる。したがって、アクセスが許可又は拒否されるべきかどうかを判定することは、抑制不可能な第1の継承権限によってアクセスが許可又は拒否されるかどうかを判定すること(740)を含む。抑制不可能な権限ステートメントがアクセス判定を解決しない場合、オブジェクトストレージサービス116は、継承劣後の権限ステートメントがアクセスを許可又は拒否するまで、権限ステートメントの順序付けられたリストの残りを評価することができ(745)、ACL評価の結果に基づいてアクセスを許可又は拒否することができる(750)。
【0189】
[00218]いくつかの実施形態では、抑制可能な継承優先のアクセスポリシーがそれらのポリシーがツリー内の他のオブジェクトに関連付けられた継承劣後のポリシーによって抑制されるかどうかに注意することによって処理することもできる。そのような場合、抑制された継承優先のアクセスポリシーはマージ及びソートから除外することができ(725)、権限ステートメントのリストはステップ740、745、及び750から構成されるサブメソッドに関係なく、権限ステートメントのリストの単純な反復処理(735)を用いて評価することができる。
【0190】
[00219]いくつかの実施形態では、
図13の出力は任意の評価されたオブジェクトに対する能力のリストであり得る。
【0191】
[00220]
図14は、クエリの一部であるオブジェクトIDについてのサブジェクトアカウントに関してアクセスの変更が発生したことを判定するための例示的な方法を示す。
図14に示される例示的な方法は特定の動作シーケンスを示すが、当該シーケンスは本開示の範囲から逸脱することなく変更されてもよい。例えば、示される動作のいくつかは、並列に又は方法の機能に実質的に影響を与えない異なるシーケンスで実行されてもよい。他の例では、方法を実装する例示的なデバイス又はシステムの異なるコンポーネントは、実質的に同時に又は特定のシーケンスで機能を実行してもよい。
【0192】
[00221]本技術の1つの利点はクライアントがオブジェクトへのアクセスを要求する場合に、アクセスの変化がチェックされることである。このように、アクセス変更が発生するとすぐにクライアントのアクセスに影響を与え、これは次回クライアントがアクセスを要求したときに、権限がチェックされるためである。したがって、クライアントは、前回のアクセス要求以降に発生した可能性があるアクセス変更を学習する能力を必要とする。
図14は、オブジェクトID又はその下位について、ある期間におけるアクセスの変更を判定するための例示的な方法を示す。多くの場合、オブジェクトストレージサービス116はクライアントがオブジェクトIDへのアクセスを要求する場合に、
図14に示される方法を実行することができる。
図14の方法の1つの使用は以前のアクセス要求以降の任意のアクセス変更を判定することであるが、
図14は任意の期間中の任意のアクセス変更を判定するために使用することができる。
【0193】
[00222]
図14は、ある期間中のアクセス変更を判定するための例示的な方法を示す。
図14に示す方法は、オブジェクトストレージサービス116がクライアントから要求を受信する(755)際に開始する。当該要求は、着目するディレクトリオブジェクトのオブジェクトID及びHLC範囲を識別する。いくつかの実施形態では、HLC範囲は、現在時刻より前にクライアントがオブジェクトIDに最後にアクセスした時刻に対応するが、履歴アクセス変更を識別するために任意のHLC範囲を要求することが可能である。
図14に示される方法は、HLC範囲の間、着目オブジェクト及び任意の下位オブジェクトに対するアクセスにおける任意の変更を返す。
【0194】
[00223]アクセス変更は、コンテンツ管理システム内で発生する様々なイベントによって作成することができる。例えば、アクセス変更は、着目ディレクトリのオブジェクトIDの下位のACL変更、着目ディレクトリのオブジェクトIDの上位のACL変更、権限を変更する着目ディレクトリのオブジェクトIDの上位の移動、又は、グループ変更(要求しているクライアントに関連するサブジェクトIDがグループに追加又は削除された場合、或いはグループがアクセスを獲得または喪失した場合)などに起因し得る。このため、3つの異なるデータストリームにアクセスし、評価する必要がある。
【0195】
[00224]第1のストリームは、問い合わされたオブジェクトIDの下位オブジェクトのためのものである。したがって、オブジェクトストレージサービス116は指定された時間範囲の間に変更された全てのオブジェクトIDを学習するために、問い合わされたオブジェクトID下で行われた全ての変更について集約インデックス305を問い合わせる(760)ことができる。このクエリから返される全てのオブジェクトIDは、何らかの変更に関連付けられている必要がある。
【0196】
[00225]第2のストリームは、問い合わされたオブジェクトIDの上位オブジェクトのためのものである。したがって、オブジェクトストレージサービス116は階層テーブル222を問い合わせることによって、問い合わされたオブジェクトIDについての上位のリストを判定して(765)、上位のリストを取り出すことができ、それらの上位に関して発生した任意のイベントを識別することができる。例えば、10個の上位がある場合、オブジェクトストレージサービス116は、オブジェクトテーブル212に問い合わせて、関連する期間中に上位に起こったイベントを識別することができる。これらのオブジェクトの1つに対するアクセスの変更は、継承劣後のポリシー又は継承優先のポリシーからの継承によって、問い合わされたオブジェクトの変更を引き起こす可能性があるため、上位は重要となる。
【0197】
[00226]第3のストリームはサブジェクトレベルでどのようなアクセス変更が発生したか、即ち、ユーザアカウントが関連付けられている任意のサブジェクトIDに対してどのようなアクセス変更が発生したかを判定することである。例えば、アクセスの変更がユーザアカウントに関して直接、又はそれが関連付けられている任意のチームに関して発生した場合、これはまた、問い合わされたオブジェクトID及びその下位へのアクセスにも影響を及ぼし得る。したがって、オブジェクトストレージサービス116は、ユーザアカウントが関連付けられているサブジェクトIDに影響を及ぼす任意の変更について、HLC範囲のクレデンシャルインデックス350を問い合わせる(770)ことができる。
【0198】
[00227]次いで、オブジェクトストレージサービス116は3つのストリーム全てからのデータを、HLCの順序で配列されたリストにマージしてソートする(775)ことができる。したがって、潜在的なアクセス変更の最初の2つのストリームがオブジェクトを返し、第3のストリームがサブジェクトを返すので、マージ及びソートされた(775)リストは、オブジェクトID及びサブジェクトIDの両方を含む。
【0199】
[00228]オブジェクトストレージサービス116は、HLCの順序でリストを反復することによって、マージされソートされたリストを評価する。マージされソートされたリスト内の任意のエンティティについて、オブジェクトストレージサービス116は、リスト内のエンティティに対する変更の特徴をさらに評価しなければならない。さらなる評価を行う必要がある方法は、発生した変化のタイプに依存する。ノード778において、オブジェクトストレージサービス116は、アクセスの変更が下位オブジェクトへの変更、ディレクトリツリー内のオブジェクトの上位への変更、又はクレデンシャル変更によって引き起こされたかどうかを判定する。いくつかの実施形態では、オブジェクトストレージサービス116がマージされソートされたリストにエンティティのソースを記録することによって、マージされソートされたリストにおける変更のソース判定することができる(778)。
【0200】
[00229]アクセス変更がマージされソートされたリスト内のオブジェクト又はその下位のうちの1つに対する変更によって引き起こされた場合、オブジェクトストレージサービス116は、変更されたオブジェクトのoIDを選択し(762)、次のステップにoIDを渡すことができ、これは、以下でより詳細に説明するように、関連する時間範囲内のoIDに対して権限が変更されたかどうかを判定する(777)ためである。
【0201】
[00230]アクセス変更がマージ及びソートされたリスト内の上位への変更によって引き起こされた場合、オブジェクトストレージサービス116は、要求(755)からオブジェクトIDを取得することができ(766)、これを使用して、以下でより詳細に説明するように、ブロック755において受信された要求内で識別されたオブジェクトIDに対して、関連する時間範囲内で権限が変更されたかどうかを判定する(777)。
【0202】
[00231]アクセス変更がサブジェクトIDに対するクレデンシャルの変更(サブジェクトIDがメンバーであるグループの変更)によって引き起こされた場合、オブジェクトストレージサービス116は、階層テーブル222(上位を識別するため)及びACLテーブル202(権限ステートメントに関連付けられた上位を識別するため)を問い合わせることによって、権限ステートメントに関連付けられたディレクトリツリー内の全てのオブジェクトを検索する(767)ことができる。関連するディレクトリツリーは、受信された要求において識別されたoIDに基づく(755)。これは、
図13のステップ705と同様である。
【0203】
[00232]ステップ762、766、及び767の各々は、ブロック755において受信された要求において識別されたオブジェクトID、又はそのオブジェクトIDの下位へのアクセスの変更を引き起こす可能性があるオブジェクトを識別することをもたらす。ステップ762はアクセス変更を有した可能性がある下位を個々に識別し、ステップ766はオブジェクトIDへのアクセスの可能な変更が上位によって引き起こされた場合、ステップ755において受信された要求において識別されたオブジェクトIDを出力し、一方、ステップ767は、オブジェクトIDのリストを生成して、これらのオブジェクトIDが要求内のオブジェクトID又はその下位の1つへのアクセス変更に影響を及ぼす可能性があるかどうかを評価する。これらのオブジェクトの各々について、オブジェクトストレージサービス116は、アクセスに変更があったかどうかを判定しなければならない。オブジェクトストレージサービス116は各オブジェクトについてACLテーブル202を問い合わせ、関連する時間範囲(HLC-1)の直前と比較して、問い合わされた時間範囲(HLC)中に、いずれかのオブジェクトIDが異なるアクセスを有するかどうかを判定することができる(777)。ステップ777は
図13に示された方法と同様であるが、
図13のステップ777において、HLC及びHLC-1の両方において、ステップ762、766、及び767から出力される全てのオブジェクトについて繰り返し処理される点が異なる。
【0204】
[00233]いくつかの実施形態では、ステップ777の一部である評価の一部として決定されたいくつかのデータをキャッシュして、さらなる計算に利用することができる。
【0205】
[00234]ステップ777の結果が、アクセス制御リストがオブジェクトについて変更されたことである場合、オブジェクトストレージサービス116は、アクセスの変更をもたらした変更を識別する変更を発行し、オブジェクトについてのアクセス制御リストによって定義された新しい機能を発することができる(780)。
【0206】
[00235]
図15はそれぞれのルートまでのオブジェクトの編成を示し、ルート下にあるオブジェクトを共有し、異なるルート下にマウントされている一部のサブジェクトに表示する方法を示す。本技術の1つの利点は、任意のオブジェクトを任意の他のオブジェクト下にマウントすることができることである。しかし、これは
図15に示されるような複雑なツリー構造やコンテンツ管理システム110をもたらす可能性がある。例えば、ディレクトリ構造800は3つのルートディレクトリオブジェクト(A、P、及びX)を有する例を示す。ディレクトリ構造800はコンテンツ管理システム110におけるディレクトリ構造を表すが、異なるサブジェクトアカウントは、サブジェクトAからのビュー805、サブジェクトPからのビュー810、及びサブジェクトXからのビュー815に示されるように、ディレクトリ構造を異なるように認識することができる。
【0207】
[00236]オブジェクトFはルートディレクトリオブジェクトA及びサブディレクトリオブジェクトCの下位であり、オブジェクトFはルートディレクトリオブジェクトX下のサブジェクトリXと共有されている。オブジェクトCはルートディレクトリオブジェクトAの下位であり、オブジェクトXはルートディレクトリオブジェクトP下のサブジェクトリPと共有されている。オブジェクトQ及びYは、オブジェクトQがオブジェクトCを参照し、オブジェクトYがオブジェクトFを参照する参照オブジェクトである。これらの参照オブジェクトは、1つのディレクトリの下にマウントされたオブジェクトが第2のディレクトリ下にマウントされているように見える機構である。例えば、オブジェクトQがオブジェクトP下に実際にカウントされている間、オブジェクトCはオブジェクトP下にマウントされているようにサブジェクトPには見える。
【0208】
[00237]サブジェクトAはディレクトリオブジェクトA下にディレクトリ構造を表示でき、このディレクトリ構造は、オブジェクトAが記憶されている場合と同じ方法で表示される。しかし、サブジェクトPはディレクトリオブジェクトP下のディレクトリ構造を見ることができるが、サブジェクトPはそれが記憶される方法による歪みを見る。サブジェクトPはオブジェクトC、E、及びFが実際にはルートディレクトリオブジェクトA下に記憶されているにもかかわらず、全てルートディレクトリオブジェクトP下に記憶されているように見える。これは、オブジェクトCを参照するオブジェクトQには、オブジェクトCがオブジェクトQの代わりにあるように見せかける効果があり、オブジェクトC下のディレクトリ構造内の全てのオブジェクトが含まれるためである。同様に、サブジェクトXはディレクトリオブジェクトXの下にあるディレクトリ構造を表示できるが、ディレクトリ構造X下のオブジェクトが記憶されている方法に歪みがあることを見てとれる。サブジェクトXは、オブジェクトFが実際にはルートディレクトリオブジェクトA下に記憶されているにもかかわらず、当該オブジェクトFがルートディレクトリオブジェクトX下に記憶されていると認識する。これは、オブジェクトFを参照するオブジェクトYには、オブジェクトFがオブジェクトYの代わりにあるように見せる効果があるためである。
【0209】
[00238]オブジェクトC又はオブジェクトFのアクセス権を判定する場合、オブジェクトストレージサービス116は、オブジェクトC及びオブジェクトFのそれぞれの上位を示すディレクトリツリーを構築する必要がある。アクセス権限を判定するためのディレクトリツリーはルートディレクトリオブジェクトAまでのオブジェクトの実ディレクトリツリーである。このようにして、特定のサブジェクトにアクセスできない上位オブジェクトに対するアクセス権限はルートディレクトリ下にマウントされているオブジェクトへのアクセスに影響を与えることができる。
【0210】
[00239]グループへのサブジェクトの追加に基づいて変更情報が判定されると(764)、オブジェクトストレージサービス116は、まず、グループがどのオブジェクトにアクセス権を有するかを判定する必要がある(780)。オブジェクトストレージサービス116は、サブジェクトテーブル250内のサブジェクトのルートのオブジェクトIDを検索することによって、グループがどのオブジェクトにアクセスできるかを判定することができる。その後、オブジェクトストレージサービスは、オブジェクトのアクセス制御リスト(ACL)を評価することができる(770)。オブジェクトのためのアクセス制御リストの評価は、
図13のステップ705、710、715、720、725、及び730に関して説明したようにアクセス制御リストを構成することを含むことができる。任意のオブジェクトへのアクセスはその上位オブジェクトにアタッチされた権限に基づくことができ、また、任意のオブジェクトは他のオブジェクト下にマウントできるため、すでに別のディレクトリツリーのサブディレクトリである場合であっても、修正された又は新たにマウントされたディレクトリオブジェクトの上にツリー(705)を構築し、次いで、各オブジェクトのための全ての権限を取得し(710)、
図13のステップ715、720、725、及び730のように権限をマージ及びソートすることによって、アクセス制御リストを構成する必要があり得る。構成されたアクセス制御リスト(ACL)が作成されると、オブジェクトストレージサービス116は、構成されたアクセス制御リストを評価して(770)、オブジェクトへのアクセスに対する制限を判定し、その後、オブジェクトへの権限を反映する更新されたアクセストークンをクライアントに送信し(775)、オブジェクト上の今後のイベントに関する通知を受信するようにクライアントを予約することができる。
【0211】
[00240]変更情報が、サブジェクトアカウントが既にアクセス権を有するディレクトリオブジェクトからオブジェクトへのアクセスをアンマウント又は削除するものであると判定されると(766)、オブジェクトストレージサービス116は、削除するか又はオブジェクトへの権限が含まれていない更新されたアクセストークンをクライアントに送信する(785)ことができ、クライアントがオブジェクト上の今後のイベントに関する通知を受信する予約を解除できる。
【0212】
[00241]グループからのサブジェクトの削除に基づいて変更情報が判定されると(768)、オブジェクトストレージサービス116は、まず、グループがどのオブジェクトにアクセス権を有するかを判定する必要がある(790)。オブジェクトストレージサービス116は、サブジェクトテーブル250内のサブジェクトのルートのオブジェクトIDを検索することによって、グループがアクセスするオブジェクトを判定することができる。その後、オブジェクトストレージサービス116は、ルートオブジェクト及びその子に対する権限を削除する又は含まない、更新されたアクセストークンをクライアントに送信し(785)、オブジェクト及びその子に関する将来のイベントについての通知を受信する予約をクライアントから解除することができる。
【0213】
[00242]
図16は、オブジェクトに関する通知の機能の図例を示す。
図16はディレクトリオブジェクトA、ディレクトリオブジェクトB、及びコンテンツオブジェクト830を有するディレクトリの一部を示し、これらは全て、時間HLC=1において存在する。このとき、サブジェクトは、ディレクトリオブジェクトA、ディレクトリオブジェクトB、及びコンテンツオブジェクト830の上又は下で発生する変更を知るために登録される。時刻HLC=2でコンテンツオブジェクト832がディレクトリオブジェクトBの下に追加され、従って、サブジェクトがディレクトリオブジェクトA及びディレクトリオブジェクトBの下で起こっている全ての変更を受信するように登録されているので、この変更をサブジェクトに通知することができる。同時に、サブジェクトは、コンテンツオブジェクト832上の全てのアクティビティについての通知を受信するように登録される。HLC=3において、コンテンツオブジェクト830が削除され、従って、サブジェクトはコンテンツオブジェクト830の削除に関する通知を受信し、コンテンツオブジェクト830へのさらなる変更に関する通知を受信して、予約が解除される。
【0214】
[00243]
図17は、特定の時間にディレクトリのスナップショットを取得する方法を示す。
図17に示される例示の方法は特定の動作シーケンスを示すが、当該シーケンスは本開示の範囲から逸脱することなく変更されてもよい。例えば、示される動作のいくつかは、並列に又は方法の機能に実質的に影響を与えない異なるシーケンスで実行されてもよい。他の例では、方法を実装する例示的なデバイス又はシステムの異なるコンポーネントは、実質的に同時に又は特定のシーケンスで機能を実行してもよい。
【0215】
[00244]
図17に示される方法は、サブジェクトがディレクトリに直接追加されるか、又はサブジェクトがディレクトリにアクセスできるグループに追加されるかにかかわらず、サブジェクトがディレクトリに追加されるときに特に有用であり得る。スナップショットは、サブジェクトがディレクトリを以前の状態にロールバックすることを望む場合など、過去の時点で存在していたディレクトリを表示するのにも役立つ。本技術の1つの利点は、任意の時点でスナップショットを生成することができることである。多くの従来技術のシステムは、以前の時点からの差分、又はある時点でのディレクトリのイメージング又はバックアップからの差分に基づいて、個別の時点で履歴スナップショットを提供することができる。しかしながら、本技術では、オブジェクトが変更される度にオブジェクトを構成する全てのブロックを記録するため、任意の過去の期間にディレクトリに含まれていたブロックを検索し、それらのブロックを検索することができる。
【0216】
[00245]スナップショットを実行するために、オブジェクトストレージサービス116は、特定の時点でスナップショットとなるディレクトリオブジェクトのoIDを取得することができる(850)。サブジェクトが特定の時点でグループディレクトリに追加されたばかりの場合は、その時点が最新の時点となり、或いはスナップショットの目的が過去の時点でのディレクトリを表示する場合は、その時点は過去の時点となる。
【0217】
[00246]オブジェクトストレージサービス116は、スナップショットとなるディレクトリ下にディレクトリ構造を確立することができる(855)。ディレクトリがディレクトリ下の他のオブジェクトを含む場合、オブジェクトストレージサービス116は、ディレクトリインデックス315を再帰的に問い合わせることによって、又は階層テーブル222の深さ優先検索を実行することによって、ディレクトリ下のオブジェクトのツリーをコンパイルすることもできる。
【0218】
[00247]オブジェクトのツリーがコンパイルされると、オブジェクトストレージサービス116は、オブジェクトテーブル212内の各オブジェクトの最新のエントリを検索し(860)、特定の時刻にオブジェクトを構成するブロックを識別することができる。各オブジェクトを構成するディレクトリ構造及びデータブロックは集合的に、特定の時刻におけるディレクトリのスナップショットである。
【0219】
[00248]次に、オブジェクトストレージサービス116は、各オブジェクトを構成するブロックを取得し(865)、スナップショットをサブジェクトに関連付けられたクライアントに送信することができる。
【0220】
[00249]
図18は、過去の時点でスナップショットを作成する例を示す。
図18に示すように、以前の時刻は、HLC値(HLC=100)によって示すことができる。しかしながら、
図18ではその指定されたHLC値において正確に変化は生じておらず、したがって、オブジェクトテーブル212の検索は指定されたオブジェクトごとにオブジェクトテーブル212内の指定された時刻の前の最新のエントリを識別する。これにより、最新のエントリーと指定された時刻との間に変更が発生していないことが分かるため、指定された時刻で当該オブジェクトのスナップショットが作成される。
【0221】
[00250]
図19は、オブジェクトデータベース148内の行が関係するアクションのタイプを判定する例を示す。
図19に示される例示の方法は特定の動作シーケンスを示すが、当該シーケンスは本開示の範囲から逸脱することなく変更されてもよい。例えば、示される動作のいくつかは、並列に又は方法の機能に実質的に影響を与えない異なるシーケンスで実行されてもよい。他の例では、方法を実装する例示的なデバイス又はシステムの異なるコンポーネントは、実質的に同時に又は特定のシーケンスで機能を実行してもよい。
【0222】
[00251]上述のように、オブジェクトデータベース148は、非常に効率的であるように構成され、不必要なデータを含まない。オブジェクトデータベース148はコンテンツ管理システムに信頼のあるソースを提供するのに十分な最小限の記述データを含むが、他の方法で導出することができる場合、いくつかの有用なデータを除外する。
図19は本原理の例を提供するが、これはオブジェクトデータベース148に含まれない唯一の有用なデータではなくともよい。
【0223】
[00252]オブジェクト変更データがクライアントから受信される(900)か、オブジェクトテーブル212から取得される(900)と、オブジェクトストレージサービス116は、現在のアクションの時点より前の任意のHLCでそのオブジェクトIDを使用してオブジェクトを検索する(905)ことができ、オブジェクトIDが以前にオブジェクトテーブル212に存在したかどうかを判定する(910)。オブジェクトIDがオブジェクトテーブル212内に以前存在しなかった場合、オブジェクトストレージサービス116は、現在のアクションがコンテンツ管理システム110にオブジェクトを追加すること(915)であると結論付けることができる。
【0224】
[00253]オブジェクトIDがオブジェクトテーブル212内にオブジェクトストレージサービス116よりも前に存在していた場合(910)、オブジェクトIDがトゥームストーン(tombstone)に関連付けられているかどうかを判定することができる(925)。トゥームストーンは、削除されたファイルを明示的に識別する注記である。オブジェクトIDがトゥームストーンに関連付けられている場合、オブジェクトストレージサービス116は、アクションが削除アクションであったと結論付けることができる(930)。
【0225】
[00254]オブジェクトIDがトゥームストーンに関連付けられていない場合、オブジェクトストレージサービス116は、アクションがオブジェクトテーブル212に以前に記録されたものとは異なるブロックリストに関連付けられたかどうかを判定することができる(920)。
【0226】
[00255]アクションがオブジェクトテーブル212に以前に記録されたものとは異なるブロックリストに関連付けられている場合、オブジェクトストレージサービス116は、アクションがオブジェクトの修正であったと結論付けることができる(935)。
【0227】
[00256]アクションが、オブジェクトテーブル212に以前に記録されたものと同じブロックリストに関連付けられている場合、オブジェクトストレージサービス116はアクションの時点で、かつ、アクションよりも早い時間に、階層テーブル222内のオブジェクトIDを検索すること(940)によって、オブジェクトが移動されたかどうかを判定することができる。オブジェクトIDが新たな親を有する場合(945)、オブジェクトストレージサービス116は、アクションがオブジェクトの移動(950)であったと結論付けることができる。また、オブジェクトIDが新たな名前に関連付けられている場合(947)、オブジェクトストレージサービス116は、これを移動として解釈することもできる(950)。
【0228】
[00257]マージ及びソートのアクションが参照されているが、これらのアクションはマージソート動作に組み合わせうること理解されたい。
【0229】
[00258]
図20はコンピューティングシステム1000の例を示し、例えば、クライアントデバイス150、コンテンツ管理システム110、又は、システムのコンポーネントが接続1005を使用して互いに通信するその任意のコンポーネントを構成する任意のコンピューティングデバイスとすることができる。接続1005は、バスを介した物理的接続、又はチップセットアーキテクチャなどのプロセッサ1010への直接接続とすることができる。接続1005は、仮想接続、ネットワーク接続、又は論理接続であってもよい。
【0230】
[00259]いくつかの実施形態では、コンピューティングシステム1000は、本開示で説明した機能がデータセンタ、複数のデータセンタ、ピアネットワークなどの中で分散可能な分散システムである。いくつかの実施形態では記載されたシステムコンポーネントの1つ以上は、当該コンポーネントについて説明した機能の一部又は全てを実行する、多くのそのようなコンポーネントを表す。いくつかの実施形態では、当該コンポーネントは物理デバイス又は仮想デバイスであってもよい。
【0231】
[00260]例示的なシステム1000は、少なくとも1つの中央演算処理装置(CPU又はプロセッサ)1010と、読み出し専用メモリ(ROM)1020及びランダムアクセスメモリ(RAM)1025などのシステムメモリ1015を含む様々なシステムコンポーネントをプロセッサ1010に結合する接続1005とを含む。コンピューティングシステム1000は、プロセッサ1010と直接接続されるか、それに近接して接続されるか、又はその一部として統合される高速メモリ1012のキャッシュを含むことができる。
【0232】
[00261]プロセッサ1010は、プロセッサ1010を制御するように構成された、ストレージ1030内に記憶されたサービス1032、1034、1036のような任意の汎用プロセッサ及びハードウェアサービス又はソフトウェアサービス、並びにソフトウェア命令が実際のプロセッサ設計に組み込まれる専用プロセッサを含むことができる。プロセッサ1010は本質的に、複数のコア又はプロセッサ、バス、メモリコントローラ、キャッシュ等を含む、完全に自己完結型のコンピューティングシステムであってもよい。複数のコアプロセッサは対称型又は非対称型であってもよい。
【0233】
[00262]ユーザインタラクションを可能にするために、コンピューティングシステム1000は、音声用のマイクロフォン、ジェスチャ又はグラフィック入力用のタッチ式スクリーン、キーボード、マウス、モーション入力、音声などの任意の数の入力機構を表すことができる入力デバイス1045を含む。コンピューティングシステム1000はまた、当業者に知られているいくつかの出力機構のうちの1つ又は複数の出力デバイス1035も含むことができる。いくつかの例では、マルチモーダルシステムによって、サブジェクトがコンピューティングシステム1000と通信するために複数のタイプの入力/出力を提供することを可能にすることができる。コンピューティングシステム1000は、サブジェクトの入力及びシステム出力を一般に制御及び管理することができる通信インタフェース1040を含むことができる。任意の特定のハードウェア構成上で動作することに制限はなく、したがって、本明細書の基本的な機能は、それらが開発されるように、改良されたハードウェア又はファームウェア構成に容易に代わることができる。
【0234】
[00263]ストレージデバイス1030は、不揮発性メモリデバイスでありえ、磁気カセット、フラッシュメモリカード、ソリッドステートメモリデバイス、デジタル多用途ディスク、カートリッジ、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、及び/又はこれらのデバイスのいくつかの組合せのような、コンピュータによってアクセス可能なデータを記憶することができるハードディスク又は他のタイプのコンピュータ可読記憶媒体でありうる。
【0235】
[00264]ストレージ1030はソフトウェアサービス、サーバ、サービスなどを含むことができ、このようなソフトウェアを定義するコードがプロセッサ1010によって実行されると、システムに機能を実行させる。いくつかの実施形態では、特定の機能を実行するハードウェアサービスは、その機能を実行するために、プロセッサ1010、接続1005、出力デバイス1035などの必要なハードウェアコンポーネントに関連してコンピュータ可読媒体に記憶されたソフトウェアコンポーネントを含むことができる。
【0236】
[00265]説明を明確にするために、いくつかの例では、本技術はデバイスやデバイスコンポーネントやソフトウエアで実施される方法のステップ又はルーチンやハードウエアとソフトウエアとの組み合わせを含む機能ブロックを含む個々の機能ブロックを含むものとして提示されてもよい。
【0237】
[00266]本明細書で説明されるステップ、動作、機能、又は処理のいずれも、ハードウェア及びソフトウェアサービス又はサービスの組合せによって、単独で、又は他のデバイスと組合せて、実行又は実装されうる。いくつかの実施形態では、サービスは、クライアントデバイス及び/又はコンテンツ管理システムの1つ又は複数のサーバのメモリ内に存在し、プロセッサがサービスに関連するソフトウェアを実行するときに1つ又は複数の機能を実行するソフトウェアであってもよい。いくつかの実施形態では、サービスは特定の機能を実行するプログラム又はプログラムの集合である。いくつかの実施形態では、サービスはサーバと見なすことができる。メモリは、非一時的コンピュータ可読媒体であり得る。
【0238】
[00267]いくつかの実施形態ではコンピュータ可読ストレージデバイス、媒体、及びメモリはビットストリームなどを含むケーブル又はワイヤレス信号を含むことができる。しかしながら、言及される場合、非一時的コンピュータ可読記憶媒体は、エネルギー、搬送波信号、電磁波、及び信号自体などの媒体を明示的に除外する。
【0239】
[00268]上述の例に従った方法は、コンピュータ可読媒体に記憶された、或いはコンピュータ可読媒体から利用可能な、コンピュータで実行可能な命令を使用して実施されうる。そのような命令は例えば、汎用コンピュータ、専用コンピュータ、又は専用処理デバイスに、特定の機能又は機能のグループを実行させる、そうでなければ設定する命令及びデータを含むことができる。使用されるコンピュータリソースの一部は、ネットワークを介してアクセス可能である。コンピュータ実行可能命令は、例えば、バイナリや、アセンブリ言語などの中間フォーマット命令や、ファームウェアや、ソースコードであってもよい。記述された例に従った方法の中での命令、使用された情報、及び/又は作成された情報を記憶するために使用され得るコンピュータ可読記憶媒体の例は、磁気又は光ディスク、ソリッドステートメモリデバイス、フラッシュメモリ、不揮発性メモリを備えたUSBデバイス、ネットワークストレージデバイスなどを含む。
【0240】
[00269]これらの開示による方法を実装するデバイスはハードウェア、ファームウェア、及び/又はソフトウェアを備えることができ、様々なフォームファクタのいずれかを取り得る。そのようなフォームファクタの典型的な例は、サーバ、ラップトップ、スマートフォン、スモールフォームファクタパーソナルコンピュータ、パーソナルデジタルアシスタントなどを含む。本明細書で説明される機能はまた、周辺機器又はアドインカードにおいて実施され得る。そのような機能性はまた、さらなる例として、単一のデバイスにおいて実行される異なるチップ又は異なるプロセスの間で回路基板上に実装され得る。
【0241】
[00270]命令、そのような命令を伝達するための媒体、それらを実行するためのコンピューティングリソース、及びそのようなコンピューティングリソースをサポートするための他の構成は、本開示で説明される機能を提供するための手段である。
【0242】
[00271]本明細書に示される例示的な方法は特定の動作シーケンスを示すが、シーケンスは本開示の範囲から逸脱することなく変更され得る。例えば、示された動作のいくつかは、並列に、又は異なる形で実行され得る。他の例では、本明細書に示される方法を実装する例示的なデバイス又はシステムの異なるコンポーネントが実質的に同時に又は特定のシーケンスで機能を実行し得る。
【0243】
[00272]添付の特許請求の範囲内の態様を説明するために、様々な例および他の情報が使用されたが、当業者は、これらの例を使用して、多種多様な実装を導出することができるので、そのような例における特定の特徴または構成に基づいて、特許請求の範囲の限定を暗示するべきではない。さらに、いくつかの主題が構造的特徴及び/又は方法ステップの例に特有の言語で記述されたかもしれないが、添付の請求項で規定される主題はこれらの記述された特徴や行為に限定される必要はないことは理解されるべきである。例えば、そのような機能は、本明細書で識別されるもの以外のコンポーネントにおいて、異なるように分散されるか、又は実行され得る。むしろ、上述の特徴及びステップは、添付の請求項の範囲内のシステム及び方法のコンポーネントの例として説明されている。