JP2020091902A - 分散型データストアのバージョン化された階層型データ構造 - Google Patents

分散型データストアのバージョン化された階層型データ構造 Download PDF

Info

Publication number
JP2020091902A
JP2020091902A JP2020031312A JP2020031312A JP2020091902A JP 2020091902 A JP2020091902 A JP 2020091902A JP 2020031312 A JP2020031312 A JP 2020031312A JP 2020031312 A JP2020031312 A JP 2020031312A JP 2020091902 A JP2020091902 A JP 2020091902A
Authority
JP
Japan
Prior art keywords
data structure
hierarchical data
transaction
access request
version
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2020031312A
Other languages
English (en)
Other versions
JP7113040B2 (ja
Inventor
マンダディ,スリカンス
Mandadi Srikanth
ベリー,マシュー
Berry Matthew
プラウス,スラフカ
Praus Slavka
ベイカー,クリス
Baker Chris
テイマー,マーヴィン・マイケル
Michael Theimer Marvin
サミュエルソン,アンダース
Samuelsson Anders
セドキー,キャレド・サラ
Salah Sedky Khaled
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of JP2020091902A publication Critical patent/JP2020091902A/ja
Application granted granted Critical
Publication of JP7113040B2 publication Critical patent/JP7113040B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/282Hierarchical databases, e.g. IMS, LDAP data stores or Lotus Notes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/1824Distributed file systems implemented using Network-attached Storage [NAS] architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1805Append-only file systems, e.g. using logs or journals to store data
    • G06F16/1815Journaling file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1873Versioning file systems, temporal file systems, e.g. file system supporting different historic versions of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/273Asynchronous replication or reconciliation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists

Abstract

【課題】バージョン化された階層型データ構造を維持し得る分散型データストアのシステム、方法及びコンピュータ可読記憶媒体を提供する。【解決手段】システムにおいて、階層型データ構造の異なるバージョン130は、階層型データ構造132a〜cのトランザクションログと一貫して維持される。階層型データストアによりアクセス要求112が受信されると、アクセス要求を処理するために階層型データ構造のバージョン130が識別される。スナップショット分離を伴うアクセス要求では、識別されたバージョン単体がアクセス要求を一貫して処理するのに十分な場合がある。直列化可能分離など、より高い分離要件を伴うアクセス要求では、アクセス要求に基づくトランザクションはトランザクションログに送信されてよく、これによって、結果的にコミットされたトランザクションになるアクセス要求が許可され、競合トランザクションになるアクセス要求は拒否される。【選択図】図1

Description

階層型ストレージシステムは、効率的に及び信頼性永続データのために、多数の異なるストレージスキームを実装している。分散型システムアーキテクチャ上に実装されるストレージスキームは、ストレージシステムクライアントアプリケーションがデータストレージシステムに存続するデータの可用性を高める必要がある場合に配備されることが多い。データを利用可能にする一般的な解決策には、データの1つ以上のバージョンまたは複製を複数のストレージノード上に記憶することが含まれる。しかしながら、バージョンまたは複製の数が増えると、複雑性及び階層型データの一貫した表示を生成するための運用コストが増加する。例えば、同期プロトコルは、単一の構成要素が、書き込みまたは階層型データに対する他の変更などの動作を処理できるようになることを必要とし得る。そのような同期プロトコルは、単一の構成要素に負荷をかけ過ぎる可能性があるため、クライアント要求に応答する分散型システムの可用性を低下させる。ゆえに、可用性を犠牲にすることなく階層型データの一貫性のあるバージョンを提供する整合性メカニズムが非常に望ましい。
いくつかの実施形態による、バージョン化された階層型データ構造を提供する階層型データストアを例示する論理ブロック図である。 いくつかの実施形態による、バージョン化された階層型データ構造を提供する階層型データストアを含むディレクトリストレージサービスを実装するプロバイダネットワークを例示するブロック図である。 いくつかの実施形態による、階層型ストレージノードを例示するブロック図である。 いくつかの実施形態による、バージョン化された階層型データ構造を提供する階層型データストアのデータモデルを例示するブロック図である。 いくつかの実施形態による、階層型データ構造のデータモデルの記憶形式を例示するテーブル例である。 いくつかの実施形態による、階層型データ構造のデータモデルの記憶形式を例示するテーブル例である。 いくつかの実施形態による、バージョン化された階層型データ構造に一貫性のあるストレージを提供するための個別のトランザクションログストアの使用を例示するブロック図である。 いくつかの実施形態による、トランザクションログストレージを利用した直列化可能分離によるアクセス要求の処理を例示するシーケンス図である。 いくつかの実施形態による、ストレージノードに維持された階層型データ構造のバージョンを利用したスナップショット分離によるアクセス要求の処理を例示するシーケンス図である。 いくつかの実施形態による、トランザクションログストレージを利用した直列化可能分離による条件付きのアクセス要求の処理を例示するシーケンス図である。 いくつかの実施形態による、トランザクションログストレージを利用した直列化可能分離によるバッチアクセス要求の処理を例示するシーケンス図である。 いくつかの実施形態による、トランザクションログストレージ及びトランザクション状態トークンを利用した直列化可能分離によるクライアント固有のトランザクション要求の処理を例示するシーケンス図である。 いくつかの実施形態による、ページネーショントークンを利用してページネーションされた結果配信によるアクセス要求の処理を例示するシーケンス図である。 いくつかの実施形態による、サービスアクセス要求に対してバージョン化された階層型データ構造を実装する方法及び技法を例示する高レベルフローチャートである。 いくつかの実施形態による、階層型データ構造のトランザクションログと一貫性のあるストレージノードにおいて階層型データ構造の維持バージョンを実装する方法及び技法を例示する高レベルフローチャートである。 様々な実施形態による、コンピュータシステム例である。
実施形態は、いくつかの実施形態及び例示的な図面について一例として本明細書に説明されているが、当業者は実施形態が説明されている実施形態または図面に制限されないことを認識する。図面及び図面に対する詳細な説明は、開示されている特定の形式に実施形態を制限することを目的とするのではなく、逆に、添付の特許請求の範囲によって定められる趣旨及び範囲内のすべての修正形態、同等物及び変更形態を対象とすることを目的とすることが理解されるべきである。本明細書に使用される見出しは編成のみを目的とし、明細書または特許請求の範囲を制限するために使用されることを意図していない。本出願を通して使用されるように、単語「してよい」は、強制の意味(つまり、しなければならないを意味する)よりむしろ、許可の意味(つまり、する可能性を有することを意味する)で使用される。単語「含む(include)」、「含んだ(including)」及び「含む(includes)」はオープンエンド関係を示し、したがって、含むことを意味するが、これに限定されるものではない。同様に、単語「有する(have)」、「有している(having)」及び「有する(has)」もオープンエンド関係を示し、したがって、有することを意味するが、これに限定されるものではない。本明細書で使用される用語「第1の」、「第2の」、「第3の」等は、それらの後に来る名詞に対するラベルとして使用され、係る順序付けが明示的に示されない限り、いかなるタイプの順序付け(例えば、空間的、時間的、論理的等)も暗示しない。
様々な構成要素は、1つまたは複数のタスクを実行する「ように構成される」として記述されてよい。係る文脈では、「ように構成される」は、動作中に1つまたは複数のタスクを実行する「構造を有する」を概して意味する大まかな記述である。したがって、構成要素は、構成要素が現在そのタスクを実行していなくてもタスクを実行するように構成できる(例えば、コンピュータシステムは、動作が現在実行されていなくても動作を実行するように構成されてよい)。いくつかの文脈では、「ように構成される」は、動作中に1つまたは複数のタスクを実行する「回路を有する」を概して意味する構造の大まかな記述であってよい。したがって、構成要素は、構成要素が現在起動していなくてタスクを実行するように構成できる。一般的に、「ように構成される」に対応する構造を形成する回路はハードウェア回路を含んでよい。
様々な構成要素は、説明での便宜上、1つまたは複数のタスクを実行するとして記述されてよい。係る説明は、フレーズ「ように構成される」を含んでいるとして解釈されるべきである。1つまたは複数のタスクを実行するように構成される構成要素を記述することは、その構成要素に対して米国特許法第112条(f)の解釈を行使することを明白に目的としていない。
「に基づいて」。本明細書に使用されるように、この用語は、決定に影響を及ぼす1つまたは複数の要因を説明するために使用される。この用語は、決定に影響を及ぼすことがある追加の要因を除外しない。すなわち、決定は、それらの要因のみに基づいてよい、または少なくとも部分的にそれらの要因に基づいてよい。フレーズ「Bに基づいてAを決定する」を考える。BがAの決定に影響を及ぼす要因であり得る一方、係るフレーズは、Aの決定がCにも基づいていることを除外しない。他の例では、AはBだけに基づいて決定されてよい。
本開示の範囲は、本明細書に(明示的または暗示的のどちらかで)開示される任意の特徴または特徴の組み合わせまたはその任意の一般化を、それが本明細書で扱われる課題のいずれかまたはすべてを軽減するか否かに関わらず含む。したがって、特徴の係る任意の組み合わせに対して、本出願(または本出願に対する優先権を主張する出願)の手続き処理中に新しい特許請求の範囲が策定されることがある。特に、添付の特許請求の範囲に関して、従属請求項からの特徴は独立請求項の特徴と組み合わされてよく、それぞれの独立請求項からの特徴は任意の適切な方法で、及び単に添付の特許請求の範囲に列挙される特定の組み合わせとは異なるように組み合されてよい。
分散型データストアのバージョン化された階層型データ構造の様々な実施形態を本明細書において説明する。通常、ディレクトリデータストアなどの階層型データストアは、階層型データ構造(例えば、ツリー、グラフまたは他の階層ベースのデータ構造)の一貫性のある現在のバージョンへのアクセスを制限する。これにより、階層型データストアは、同時アクセス要求であっても一貫性を提供することができる。係る実装は、類似の一貫性及び分離レベルを提供しつつ、すべてのアクセス要求が類似の処理パスを利用して実行されることを強制し、これによって、階層型データ構造にアクセスするときに必ずしも速度または他の性能への配慮を犠牲にしてまで一貫性または分離を望むわけではないクライアントへの柔軟性が低下する。バージョン化された階層型データ構造を提供することにより、複数のタイプの整合性モデルを実装することができ、これによって、様々な要求は所望の分離及び/または一貫性レベルを指定することができ、ゆえに、階層型データ構造へのアクセスに関して要求の実行を制御することができる。
図1は、いくつかの実施形態による、バージョン化された階層型データ構造を提供する階層型データストアを例示する論理ブロック図である。階層型データストア120は、階層型データ構造132の複数のバージョンを経時的に提供してよく、これによって、アクセス要求112を処理するときに様々な種類の一貫性及び分離レベルが実装されてよい。例えば、階層型データ構造のバージョン132a、132b及び132cなどの各バージョンを維持してよく、これによって、過去のクエリ(またはデータが古くなっている可能性が高いかどうかを考慮しないクエリ)が、(例えば、メモリの階層型データ構造を維持するストレージノードにおいて)迅速に利用可能な階層型データ構造のバージョンを利用することができる。階層型データ構造の厳格に一貫したバージョンを望むかまたは必要とする他のアクセス要求112は、後述する楽観的並行性を利用してトランザクションログに関する要求を審査するなど、アクセス要求のために直列化可能分離を提供する動作を呼び出すことができる。アクセス要求112はまた、パスベースの走査を呼び出して、階層データ構造132の一部として記憶された様々な情報を決定してよい。
図1は、バージョン化された階層型データ構造を提供する階層型データストアの論理図として提供され、分散型データストアを実装する構成要素、モジュールまたはデバイスの物理的構成、サイズまたは数に関して限定することを意図するものではないことに留意されたい。
本明細書では、様々な実施形態による、ディレクトリストレージサービスとしての分散型データストアの例を最初に説明する。ディレクトリストレージサービスの例は、様々な実施形態において、多数の異なるクライアントのために階層型データ構造を記憶してよい。ネットワークベースデータベースサービスの例の説明には、ネットワークベースディレクトリストレージサービスの例の様々な態様が、ディレクトリストレージサービスとクライアントとの間の様々な相互作用と共に含まれる。次に、本明細書は、分散型データストアのバージョン化された階層型データ構造のための方法の様々な実施形態のフローチャートを説明する。次に、本明細書は、開示された技法を実施し得るシステムの例を説明する
。本明細書を通じて様々な例を提供する。
図2は、いくつかの実施形態による、バージョン化された階層型データ構造を提供する階層型データストアを実装するディレクトリストレージサービスを実装するプロバイダネットワークを例示するブロック図である。プロバイダネットワーク200は企業または公的組織などのエンティティによって設定され、インターネット及び/または他のネットワークを介してクライアント210にアクセス可能な1つ以上のサービス(様々なタイプのクラウドベースのコンピューティングまたはストレージなど)を提供してよい。プロバイダネットワーク200は、物理的な及び/または仮想化されたコンピュータサーバ、ストレージデバイス、ネットワーク機器等の集合(例えば、図14に関して後述するコンピューティングシステム2000)など、プロバイダネットワーク200によって提供されるインフラストラクチャ及びサービスを実装及び配信するために必要な様々なリソースプールをホストする多数のデータセンタを含んでよい。いくつかの実施形態では、プロバイダネットワーク200は、記述されたディレクトリストレージサービス220を実装してよく、オブジェクトストレージサービス、ブロックベースストレージサービス、データウェアハウスストレージサービス、アーカイブストレージサービス270などの仮想計算サービス及びストレージサービス及び/または(様々な他のタイプの記憶、処理、分析、通信、イベント処理、視覚化及びセキュリティサービスを含み得る)任意の他のタイプのネットワークベースサービス280など、他のコンピューティングリソースまたはサービスを提供してよい。クライアント210は、プロバイダネットワーク200によって提供されるこれらの様々なサービスにネットワーク260を介してアクセスしてよい。同様に、ネットワークベースサービスは、それ自体が互いとの通信及び/または互いを利用して、異なるサービスを提供してよい。例えば、他のサービス280(複数可)のうちの様々なサービスは、ディレクトリストレージサービス220に記憶された階層型データ構造を記憶し、アクセスし、及び/または階層型データ構造に依存してよい。
様々な実施形態において、図2に例示される構成要素は、コンピュータハードウェア(例えば、マイクロプロセッサまたはコンピュータシステム)によって直接的または間接的に実行可能な命令として、あるいはこれらの技法の組み合わせを使用して、コンピュータハードウェア内に直接的に実装されてよい。例えば、図2の構成要素は、多数のコンピューティングノード(または単にノード)を含むシステムによって実装されてよく、その各々は、図14に例示して後述するコンピュータシステムの実施形態に類似してよい。様々な実施形態では、所与のサービスシステム構成要素(例えば、データベースサービスの構成要素またはストレージサービスの構成要素)の機能性は、特定のノードによって実装されてもよく、またはいくつかのノードにわたって分散されてもよい。いくつかの実施形態では、所与のノードは、2つ以上のサービスシステム構成要素(例えば、2つ以上のデータベースサービスシステム構成要素)の機能性を実装してよい。
ディレクトリストレージサービス220は、階層型ストレージノード240(複数可)のうちの様々なノードに(シングルテナントまたはマルチテナント方式で)記憶された、図4Aに関して後述するディレクトリ構造などの階層型データ構造を記憶、管理及び維持してよい。ディレクトリストレージサービス220のクライアントは、トランザクションのセマンティクスを有する階層型データ構造の任意のサブセットまたは部分に作動してもよく、及び/または階層型データ構造のパスベース走査を実行してもよい。係る機能によって、クライアントは多数の方法で階層型データ構造にアクセスすることができる。例えば、クライアントは、トランザクションのアクセス要求を利用して、階層型ディレクトリ構造の異なる部分(例えば、ノード)に影響を及ぼす複数の動作(例えば、トランザクション内の動作の更新結果が分離しており、一貫性があり、アトミックであり、永続的に記憶されているという要件を課しながら、階層型ディレクトリ構造の部分を読み取り、ノードを追加し、ノードの属性の一部をインデックス化する)を実行してよい。
様々な実施形態では、ディレクトリストレージサービス220は、内部または外部クライアントから適切な階層型ストレージノード240(複数可)にアクセス要求を送るルーティング層232を実装してよい。例えば、ルーティング層232は、階層型ストレージホスト240(複数可)上で階層型データ構造の位置を識別するマッピング情報を維持する多くのルーティングノードを実装してよい。アクセス要求が受信されると、ルーティング層ノードは、次に、アクセス要求で識別された階層型データ構造をホストする階層型ストレージノード(複数可)のうちのどれにアクセス要求を送信するかを決定してよい。後述の図5に例示するように、複製グループの一部として複数の異なる階層型ストレージノード240にわたって階層型データ構造を複製し得るシナリオを考察する。ルーティング232は、様々なクライアントからの要求を複製グループ内の様々な階層型ストレージノードに送るために、様々なロードバランシングスキームを実装してよく、これによって、単一の階層型ストレージノードに負荷がかかり過ぎないようにする。さらに、階層型ストレージノード240は、クライアントによって送信された様々なアクセス要求全体の状態を維持するためにトークンを利用してよく、これによって、様々な階層型ストレージノード240(複数可)はクライアントからの各要求を処理してよく、(スティッキーセッションは、図10及び図11に関して後述するトークン状態管理技法によって防止され得るため)ルーティング232はどの階層型ストレージノードがどのクライアントと通信しているか追跡する必要はない。
制御プレーン234は、階層型ストレージノード240(複数可)上での新しい階層型データ構造の作成及び配置の指示、ストレージスケーリング、熱管理、ノード修復及び/または置換など、階層型ストレージノード240(複数可)及び階層型データ構造のストレージを提供するディレクトリストレージサービス220の他の構成要素を管理するための様々な制御機能を実装してよい。例えば、様々な配置スキームは、階層型ストレージノード(複数可)を識別して階層型データ構造のバージョンを記憶するための一貫性のあるハッシング(例えば、個々の階層型データ構造の識別子のハッシングに基づく)または複製セットを形成する多数の階層型ストレージノード240(複数可)に階層型データ構造をランダムにマッピングするなどの技法を利用してよい。熱管理を提供するために、例えば、制御プレーン234は、各ホストによって発行された階層型ストレージホスト240(複数可)の基準を収集してよい。各ホストは、メモリ使用率、CPU使用率、ディスク使用率及び要求率容量など、性能特性の様々な閾値を有することがある。階層型ストレージノードが閾値(または複数の閾値)を超える基準を報告する場合、制御プレーン234は、1つ以上の階層型データ構造を異なる階層型ストレージノードに移行するよう指示してよい。同様に、制御プレーン234は、特定の階層型ストレージノードが階層型データ構造の特定の複製グループに送られたアクセス要求に対応できないことを検出してよく、追加の階層型ストレージノード(複数可)を提供して複製グループを水平にスケーリングし、アクセス要求を良好に満たしてよい。
階層型ストレージノード240(複数可)は、ディレクトリストレージサービス220の階層型ストレージノードへのアクセスを維持し、処理してよい。図3は、いくつかの実施形態による、階層型ストレージノードを例示するブロック図である。階層型ストレージノード300は、アクセス要求を処理し適切な命令または要求を、ストレージエンジン340、トランザクションログインタフェース350またはアーカイブインタフェース360などの他の構成要素に伝えるために、要求ハンドラ310を実装してよい。例えば、アクセス要求ハンドラ310は、図6〜図11に関して後述するインタフェース600のようなアプリケーションプログラミングインターフェース(API)など、プログラムインターフェースに従ってフォーマットされた様々な要求を解読してよい。アクセス要求には、前述の図に記載された要求のうちの様々な要求ならびに他のタイプの要求(以下の図6〜図11に記載された要求または動作を含むまたは組み込み得る)を含んでよく、これに
は、例えば、階層型データ構造のノードの作成、更新、接続、切り離し、削除及び照会などの様々なアクセス要求、階層型データ構造ノード属性に対するローカルインデックスの定義、作成、発見及び照会のアクセス要求(厳密な一貫性があり、階層型データ構造の一部、または階層型データ構造とは別のものとして維持される)が含まれる。
様々な実施形態では、ストレージエンジン340は、現在の階層型データ構造ストア320及び過去の階層型データ構造ストア330に記憶されているため、データの構造または形式と対話するように構成されたストレージエンジン(たとえば、キーバリュー型ストレージ形式で維持されたデータのキーバリューストレージエンジン、リレーショナルストレージ形式で維持されたデータのリレーショナルデータストレージエンジンなど)であってよく、これらは、図4Aに関して後述するモデルに従って維持されてよい。いくつかの実施形態では、現在の階層型データ構造ストア320は、磁気ディスクまたはソリッドステートドライブを含む過去の階層型データ構造ストア330を記憶するために永続的なブロックベースのストレージデバイスを利用するだけでなく、ランダムアクセスメモリデバイス(RAM)などのメモリまたは他の高速アクセスストレージデバイスに部分的にまたは完全に実装されてよい。いくつかの実施形態では、キャッシング技法を実装してよく、これによって、現在の階層型データ構造の頻繁にアクセスされる部分などの頻繁にアクセスされるデータ部分がメモリ構成要素に維持され、他の部分が永続的なブロックベースのストレージ構成要素で維持される。階層型ストレージノード300は、階層型データ構造のマルチテナントストレージを作動してよく、これによって、様々なクライアント、アカウント、カスタマ等の代わりに維持される様々な階層型データ構造が現在の階層型データ構造ストア320及び現在の階層型データ構造ストア330に維持されてよい。例えば、階層型ストレージノード300は、階層型ストレージノード300に記憶された異なる階層型データ構造に対して異なる階層型ストレージノードを有する異なる複製グループに参加してよい。
トランザクションログインタフェース350は、図5〜図11に関して後述する様々な技法に従って、階層型データ構造のトランザクションログストレージ250に記憶された階層型データ構造に対応するログに関して対話する(例えば、トランザクションを検証する)機能を提供してよい。同様に、アーカイブインタフェース360は、アーカイブされたトランザクションまたはスナップショットを検索して、階層型データ構造への履歴変更のアクセス要求、履歴照会または過去の階層型データ構造ストアに維持されているものより古い階層型データ構造のバージョンを必要とする他のアクセス要求を処理するように実装されてよい。
図2に戻ると、トランザクションログストレージ250は、フォールトトレラントで高性能な耐久性のあるログ発行サービスを提供してよい。トランザクションログストレージ250は、データベース、キーバリューストア及びロックマネージャなどの厳密に一貫性のある分散型アプリケーションを基盤とするコミットログとして、及び図2に例示する階層型データストレージを提供するディレクトリストレージサービス220として使用されてよい。トランザクションログストレージ250は、重複排除、シーケンシング及び読み取り書き込み競合検出などの機能を可能にするために、コミットされた記録間の厳密な一貫性保証及びサポート制約を提供してよい。例えば、以下の図5、図6、図8、図9及び図11に例示される様々な要求において、トランザクションログストレージ250は、提案されたトランザクションが他のコミットされたトランザクションと競合するかどうかを調べることによって、階層型データ構造への変更(例えば、書き込み要求及び他の変更)をコミットするかどうかを決定してよい。係る機能は、階層型データ構造に対して、きめ細かいロックモデルを提供してよい(例えば、トランザクション間の競合によって影響を受ける階層型データ構造の部分のみがロックされ得る)。トランザクションログストレージは、各階層型データ構造の個別のログまたは一連のログ記録を維持し、状態階層型デー
タ構造への変更の経時的に信頼できる定義として機能する。トランザクションは、個々の時点における階層型データ構造の状態を参照するために単調に増加し得るトランザクションシーケンス番号に従って順序付けられてよい。いくつかの実施形態では、トランザクションログストレージ250は、ディレクトリストレージサービス220の外部のプロバイダネットワーク250の一部として実装される別個のネットワークベースストレージサービスであってもよいことに留意されたい。
アーカイブ管理236は、トランザクションログストレージ250のそれぞれのトランザクションログに記憶された様々な階層型データ構造のために記憶されたトランザクションを利用して、アーカイブストレージサービス270の異なる時点で階層型データ構造のスナップショットを生成して記憶してよい。例えば、アーカイブ管理は、階層型データ構造のスナップショットをキャプチャする必要がある時期を決定し、アーカイブストレージサービス270の適切なストレージ位置を提供し、アーカイブワーカノード(図示せず)に、読み取り、書き込み及び他の動作を実行してアーカイブストレージサービス270にスナップショットを生成して配置するように指示してよい。同様に、アーカイブ管理236は、個々のログ記録/トランザクション及び/またはログ記録及びトランザクションのグループのコピー及び記憶を、アーカイブストレージサービス270の階層型データ構造のためのアーカイブされたトランザクションログの一部として記憶するよう指示してよい。
一般的に、クライアント210は、ディレクトリサービスに対する要求(例えば、ディレクトリストレージサービス220に記憶される階層型データ構造を作成または変更する要求など)を含むネットワークベースサービス要求を、ネットワーク260を介してプロバイダネットワーク200に送信するように構成可能な任意のタイプのクライアントを含んでよい。例えば、所与のクライアント210は、ウェブブラウザの適切なバージョンを含んでよく、またはウェブブラウザによって提供される実行環境への拡張として、もしくは実行環境内で実行するように構成されたプラグインモジュールもしくは他のタイプのコードモジュールを含んでよい。代替的には、クライアント210は、データベースアプリケーション(またはそのユーザインターフェース)、メディアアプリケーション、オフィスアプリケーションまたは永続的なストレージリソースを利用して1つ以上の階層型データ構造の記憶及び/またはアクセスを行い、組織管理、ID管理または権限/認証管理などの技法を行い得る任意の他のアプリケーションなどのアプリケーションを含んでよい。いくつかの実施形態では、係るアプリケーションは、すべてのタイプのネットワークベースデータの完全なブラウザサポートを実装する必要なく、ネットワークベースサービス要求を生成及び処理するための十分なプロトコルサポート(例えば、ハイパーテキストトランスファプロトコル(HTTP)の適切なバージョン用)を含んでよい。すなわち、クライアント210は、ネットワークベースサービスプラットフォーム200と直接的に相互作用するように構成されるアプリケーションであってよい。いくつかの実施形態では、クライアント210は、リプリゼンテーショナル・ステート・トランスファ(REST)形式のネットワークベースサービスアーキテクチャ、ドキュメントベースもしくはメッセージベースのネットワークベースサービスアーキテクチャまたは別の適切なネットワークベースサービスアーキテクチャに従って、ネットワークベースサービス要求を生成するように構成されてよい。
いくつかの実施形態では、クライアント210は、ネットワークベースサービスへのアクセスを、それらのアプリケーションに対して透過的な方法で他のアプリケーションに提供するように構成されてよい。例えば、クライアント210は、オペレーティングシステムまたはファイルシステムと統合して、本明細書で説明するストレージモデルの適切な変形に従ってストレージを提供するように構成されてよい。しかしながら、オペレーティングシステムまたはファイルシステムは、ファイル、ディレクトリ及び/またはフォルダの
従来のファイルシステム階層など、異なるストレージインターフェースをアプリケーションに提示してよい。係る実施形態では、ストレージシステムサービスモデルを利用するためにアプリケーションを変更する必要はない。代わりに、プロバイダネットワーク200へのインタフェースの詳細は、オペレーティングシステム環境内で実行するアプリケーションに代わって、クライアント210及びオペレーティングシステムまたはファイルシステムによって調整されてよい。
クライアント210は、ネットワークベースサービス要求(例えば、ディレクトリストレージサービス220の階層型データ構造に送られるアクセス要求)を、ネットワーク260を介してネットワークベースサービスプラットフォーム200に伝達し、ネットワーク260を介してネットワークベースサービスプラットフォーム200から応答を受信してよい。様々な実施形態では、クライアント210とプラットフォーム200との間にネットワークベースの通信を確立するために必要なネットワーキングハードウェアとプロトコルとの任意の適切な組み合わせを含んでよい。例えば、ネットワーク260は、一般的に、インターネットを集合的に実装する様々な電気通信ネットワーク及びサービスプロバイダを含んでよい。ネットワーク260はさらに、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)などの私設ネットワークならびに公衆または私設の無線ネットワークを含んでよい。例えば、所与のクライアント210とネットワークベースサービスプラットフォーム200の両方を、それ自体の内部ネットワークを有する企業内でそれぞれプロビジョニングしてよい。係る実施形態では、ネットワーク260は、所与のクライアント210とインターネットの間、ならびにインターネットとネットワークベースサービスプラットフォーム200との間のネットワークリンクを確立するのに必要なハードウェア(例えば、モデム、ルータ、スイッチ、ロードバランサ、プロキシサーバなど)及びソフトウェア(例えば、プロトコルスタック、会計ソフトウェア、ファイアウォール/セキュリティソフトウェアなど)を含み得る。なお、いくつかの実施形態では、クライアント210は、公衆のインターネットではなく私設のネットワークを使用して、ネットワークベースサービスプラットフォーム200と通信してよい。
様々なタイプの階層型データ構造が記憶され、管理され及びまたは様々な方法で表されてよい。図4Aは、いくつかの実施形態による、バージョン化された階層型データ構造を提供する階層型データストアのデータモデルの一例を例示するブロック図である。ノードは、ディレクトリ構造410aまたは410nなどの階層型データ構造の基本要素であってよく、図4Aに図示されるグラフにおいて円または四角形で表されてよい(例えば、ノード400、401、402、403、404、405、406、407及び421)。ノードには、グローバル一意識別子(GUID)、0以上の属性(キー、値のペア)及び0以上の他のノードへのリンクがあり得る。いくつかの実施形態では、ディレクトリは、ディレクトリまたはリソースのいずれかの他のノードへの0以上の子リンクを有する1つのタイプのノードであってよい。ディレクトリノードは、0または1つの親ディレクトリノードを有してよく、これは、いくつかの実施形態では、ディレクトリノード及びインクがツリー構造を定義することを意味する。図4Aでは、ノード401はディレクトリノードの例である。ノード400は、論理ルートの複数のディレクトリ構造410であり、ディレクトリストレージサービス220のクライアントには不可視となり得るノードであってよい。リソースノード(リソースノード404、405、406及び407などの四角形で表される)は、ディレクトリ構造410のリーフノードであってよい。リソースノードは、一意の外部ID(例えば、クライアント固有)及びクライアント定義済み属性を有してよい。リソースノードは2つ以上の親ノードを有することができる(有向非巡回グラフ(DAG)として構成されるいくつかの階層型データ構造が可能となる)。図4のノード405は、リソースノードの一例であり、2つの親(ノード402及び403)を有する。
いくつかの実施形態では、複数のタイプのリソースノードを実装してよい。例えば、いくつかの実施形態では、ポリシーノードは、ポリシータイプ及びポリシードキュメント(例えば、適用可能なノードに適用されるポリシーを記述する)の2つのユーザ定義属性を有するリソースノードのタイプであってよい。例えば、図4Aのリソースノード406は、ポリシーリソースノードの一例であってよい。別のタイプのリソースノードは、インデックスリソースノードであってよい。例えば、インデックスリソースノードは、インデックスノードが接続されているディレクトリノードの子ノード及び他の子孫ノード内のノードの様々な属性値に対するインデックスである。例えば、リソースノード407がインデックスノードである場合、インデックスノード407は、子ノード402及び403ならびに子孫ノード404、405及び406の属性のインデックスノードを提供してよい。
いくつかの実施形態では、リンクは、2つのノード間の関係を定義する2つのノード間の有向エッジであってよい。クライアントに可視化されたリンクタイプ及び内部動作の実装のための別のリンクタイプなど、多数のタイプのリンクが存在してよい。いくつかの実施形態では、子リンクタイプは、それが接続するノード間に親子関係を作成してよい。例えば、子リンク「bb」は、ノード401とノード403を接続する。子リンクは、ディレクトリ構造410の階層を定義してよい。子リンクは、リンクが指すノードのパスを定義するために命名されてよい。別のタイプのクライアントに可視化されたリンクは、アタッチメントリンクであってよい。アタッチメントリンクは、ポリシーリソースノードまたはインデックスリソースノードなどのリソースノードを、別のリソースノードまたはディレクトリノードに適用してよい。アタッチメントリンクは、ディレクトリ構造410の階層型構造を定義することはできない。例えば、アタッチメントリンク「xx」は、ポリシーリソースノード406に記憶されたポリシー属性をディレクトリノード402に適用する。ノードは、複数のアタッチメントを有することができる。いくつかの実施形態では、任意の所与のポリシータイプの1つのポリシーリソースノードしか同じノードに接続することができないという制約など、いくつかのアタッチメント制約が課されてよい。クライアントに可視化されていないタイプのリンクまたはインプライドリンクタイプも、いくつかの実施形態では、リバースリンクに実装されてよい。リバースリンクは、リソースノード検索(例えば、ポリシー検索)のような一般的な動作にディレクトリ構造410の走査を最適化するために使用されてよい。ディレクトリストレージサービス220は、子リンク及びアタッチメントリンクの反対方向のリバースリンクを維持してよい。
様々な実施形態では、ディレクトリ構造410のノードは、「/」でラベル付けされたリンクで始まり、パス区切り「/」で区切られた子リンクが後続し、目的のノードに到達するまで続く、論理ルートノード400から始まるノードへの到達方法を記述するパス名によって識別され、発見することができる。例えば、ノード405は、パス「/directoryA/aa/dd」を使用して識別することができる。いくつかのノードが複数のディレクトリノードの子である場合もあるため、複数のパスを識別してよい。例えば、次のパス「/directoryA/bb/ee」を使用してノード405を識別することもできる。ディレクトリ構造410はノードの集合であってよく、ノードの境界は集合内のそれらのノードの階層(例えば、ノード間のリンクによって作成されるツリーまたはDAGなど、結果として得られる階層型データ構造)によって定義される。このように、ディレクトリ構造410は、個別の、独立した、または部分的に独立した組織を表してよい。
例示されたディレクトリ構造を現在の階層型データ構造ストア320及び過去の階層型データ構造ストア330に記憶するために、記述されたノード、リンク属性などは、いくつかの実施形態では、リソース・ディスクリプション・フレームワーク(RDF)データの後にモデル化されてよい。階層型データ構造の複数のバージョンを維持するために、バージョニング情報をさらに含めて、データの経時的な変化を表現してよい。RDFデータ
は(主語、述語、目的語)タプルとして構造化してよい。追加のバージョニング情報を含めると、この構造は(主語、述語、目的語、バージョン、以前のバージョン)になってよい。RDFに基づいた階層型データ構造を表現するために、複数のタイプのRDF述語が存在してよい。いくつかの実施形態では、RDF述語の1つのタイプは、階層型データ構造のリンクを表してよく、別のタイプのRDF述語は、階層型データ構造の属性を表してよい。異なるタイプの予測は、階層型データ構造を異なる方法で表してよい。リンク述語は2つのノードの間にあってよく、属性述語はノードと値との間にあってよい。単一ノードは同じタイプの複数の述語に関係する可能性があるが、値が異なるため、述語は共通の接頭語で始まり、いくつかの追加のタイプまたは検索に役立つ命名情報で終了し得る。例えば、階層型データ構造に対するすべての変更はトランザクションログストレージ250によって提供されるトランザクション解決プロセスを利用してよく、トランザクションログストレージ250によって順序付けられた論理タイムスタンプが割り当てられてよいため、述語のタプルのバージョンエントリは、リンクまたは属性が作成された時点の論理タイムスタンプ(例えば、トランザクションシーケンス番号)であってよい。
図3に示す通り、階層型ストレージノードは、階層型データ構造の現在のバージョン及び階層型データ構造の過去のバージョンを維持してよい。少なくともいくつかの実施形態では、例えば、図4Bの現在のバージョンのテーブル450など、現在のバージョンのデータを記憶するテーブル、及び図4Cの以前のバージョンのテーブル460など、以前のバージョンの変更不可能な記録を記憶する別のテーブルなど、各階層型データ構造に対してそれぞれ異なるテーブルが維持されてよい。図4Aのディレクトリ構造410aの例を使用すると、テーブル450及びテーブル460は、現在及び以前のバージョンのテーブルの内容を表示してよい。GUID値の代わりに、テーブルは可読性のためにGUID_401、GUID_402などを表示する。述語名は文字列として表示されるが、ストア内の実際の表現は文字列表現よりもコンパクトなバイナリ表現を使用してよい。現在のバージョンのテーブル450は、テーブル内の各行の最新バージョンのデータを記憶してよく、以前のバージョンの列の値は、この行の以前の値を見つけるために、以前のバージョンのテーブル460へのインデックスを提供してよい。以前のバージョンのテーブル460では現在のバージョンを述語に付け加えてよく、これを基にフィルタリングすることができる。以前のバージョンのテーブル460の以前のバージョンの列は、ストレージエンジンが古いバージョンを見つけ、さらに論理時間に戻り、特定の時点で階層型データ構造を作動させるアクセス要求などの様々なアクセス要求を行うことを可能にしてよい。テーブル450及び460の構造はリレーショナルテーブルとして示されているが、係る図示は限定的ではないことに留意されたい。例えば、上述の通り、現在のバージョンの階層型データ構造ストア320及び過去の階層型データ構造ストア330は、非リレーショナルであるキーバリューストアであってよく、キーは主語及び述語の値の連結によって形成され、値は例示された残りの列の値の連結によって形成されてよい。例えば、テーブル450の第1行は、以下の<GUID_401+link.child.aa、GUID_402+Ver_1+Null>のように、<キー、値>のペアとして論理的に表されてよい。
様々な実施形態では、テーブル450及び460の一方または両方にアクセスして、様々な動作を実行してよい。例えば、アクセス要求は、クエリ「IDがGUID_401であるノードの全ての子ノードを検索する(select GUID_401.child.*from CurrentVersion)」またはクエリ「IDがGUID_40
5であるリソースノードのすべてのポリシーをルートまですべてのパスに沿って検索する」などのクエリを指定してよい。係るクエリを処理するために、親リンクに沿って最初の深さ走査を実行してよい。ルートまでパスに沿った各ノードにおいて、以下の内部クエリを実行してよい。内部クエリ1:「ノードにポリシーがあるかどうかを検索する:select GUID_405.link.HasPolicy.*from Curren
tVersion」、内部クエリ2:「ノードに内部クエリ1で返されたポリシーがある場合、リンクからの値を使用して、ポリシーノードからポリシードキュメントの値を取得する:select GUID_406.link.PolicyDoc from CurrentVersion」、内部クエリ3:「現在のノードのすべての親を検索し、ディレクトリ構造のルートに到達するまで、親ノードごとに内部クエリ1〜3を実行する」。これまでの例は、形式、構造、構文またはテーブル450及びテーブル460に関してクエリが表現または処理され得る他の方法に限定される意図はないことに留意されたい。
図5は、いくつかの実施形態による、バージョン化された階層型データ構造に一貫性のあるストレージを提供するための個別のトランザクションログストアの使用を例示するブロック図である。クライアント510a、510b及び510cなどの複数のクライアントは、様々な書き込み要求512a、512b、512cなど、階層型データ構造への様々なアクセス要求を同時に実行してよい。少なくともいくつかの実施形態では、複製グループ520は、クライアント510からの様々なアクセス要求を処理するために利用可能な階層型データ構造のバージョンを維持する階層型ストレージノード522a、522b、522cなど、複数のストレージノードを含んでよい。例えば、クライアント510は、ルーティングスキーマに従って、異なる書き込み要求512を階層型ストレージノード522に送信してよく、ルーティングスキーマは、ロードバランシングスキームに従って、各クライアントからのアクセス要求を複製グループ520の異なるストレージノードに送ってよい。要求を受信すると、各階層型ストレージノード522はストレージノードにおいて階層型データ構造の現在のバージョンに様々な動作を実行してよく、その後、ディレクトリ構造ログ530にコミットメントするためにトランザクションログストレージ210への書き込み524を行い、これには、書き込み要求の実行によって影響されるか、またはアクセスされるデータ、書き込み要求自体及びストレージノード522での階層型データ構造の現在のバージョンの時点を識別する他の指標のトランザクションシーケンス番号など、様々な情報が含まれる。コミットメント526または競合の指示は、それぞれのストレージノード522に提供されてよい。コミットされる書き込みでは、(図13に関して後述の通り)ディレクトリ構造ログが読み取られ、コミットされた書き込みがストレージノード522に維持されている階層型データ構造のそれぞれのバージョンに適用532されてよい。
いくつかの実施形態では、アーカイブ管理236は、ディレクトリ構造ログ530をさらに読み取って、アーカイブトランザクションまたはスナップショットとしての送信用に書き込み534を取得してよい。アーカイブ管理236は、その後、アーカイブストレージサービス270のアーカイブログ540を周期的または非周期的に更新し542、アーカイブスナップショット550の一部として維持される新しいスナップショット552を生成し送信してよい。このように、階層型データ構造は、例えば、スナップショットをストレージノードにロードし、アーカイブログ540からトランザクションを適用して特定のトランザクションシーケンス番号に到達することによって、任意の時点で再作成することができ、これによって、ストレージ番号での階層型データ構造のバージョンは特定の時点と一貫性を有する。
図6は、いくつかの実施形態による、トランザクションログストレージを利用した直列化可能分離によるアクセス要求の処理を例示するシーケンス図である。図7〜図11で説明する階層型ストレージノード620及び他のストレージノードは、インタフェース600を実装してクライアントからの要求を処理してよい。様々な実施形態では、インタフェース600は、コマンドライン、グラフィカルユーザインタフェースまたはクライアント610における他のインタフェース制御/生成構成要素によって呼び出され得るプログラムインタフェース(API)であってよい。直列化可能アクセス要求630は、階層型デ
ータストアのデータを変更するアクセス要求などの要求であってよく、または階層型データ構造のために分散データストア全体にわたって一貫したバージョンからデータを読み取る要求が実行される。要求630は、実行する特定の動作(例えば、読み取りまたは書き込み動作)を含んでよい。一旦受信すると、階層型ストレージノード620は階層型データ構造の識別されたバージョン(例えば、現在のバージョン)にアクセスし、動作を実行するために階層型データ構造に行う正確な変更を決定してよく、これには、読み取られたか、または変更されたノード、リンク、属性など、アクセス(読み取り)及び/または影響を受けた(書き込み)データが含まれる。階層型ストレージノード620はその後、競合検証要求640を作成して審査のためにトランザクションログストレージ250に送信し、競合検証要求640には、アクセスされた/影響を受けたデータ、指定の動作及び階層型ストレージノード620において最後に適用された階層型データ構造のトランザクション番号が含まれる。
トランザクションログストレージ250は、競合分析を実行して、競合検証要求640の予定トランザクションが、トランザクションログのコミットされたトランザクションと競合することなく実行され得るかどうかを判定してよい。競合トランザクションは、トランザクションの完了及びコミットメント(例えば、楽観的並行性)の前に、トランザクションの推定状態(例えば、トランザクションを実行するために読み取られ、使用されるデータ)が別のトランザクションによって変更されるときに起こり得る。競合検証指示650は、トランザクションがコミットされた(または競合していたため拒否された)かどうかを示すために、トランザクションログストレージ210によって階層型ストレージノード620に提供されてよい。階層型ストレージノード620は、コミットの肯定応答(及びトランザクションのトランザクションシーケンス番号を示すトランザクション番号トークン)または要求660の例外もしくは拒否を渡してよい。
図7は、いくつかの実施形態による、ストレージノードに維持された階層型データ構造のバージョンを利用したスナップショット分離によるアクセス要求の処理を例示するシーケンス図である。スナップショット読み取り要求では、トランザクションログストレージへのアクセスは実行されない。代わりに、階層型データ構造の最新または現在のバージョンにアクセスし、読み取り要求を処理する。クライアント710は、スナップショット読み取り要求730を階層型ストレージノード720に送信してよい。階層型ストレージノード720は、要求がスナップショット読み取りであることを識別し、階層型データ構造の現在のバージョンを利用して、要求の処理を行ってよい。その後、階層型ストレージノード720は、読み取り要求の結果を示す読み取り応答740を送信してよい。
図8は、いくつかの実施形態による、トランザクションログストレージを利用した直列化可能分離による条件付きのアクセス要求の処理を例示するシーケンス図である。いくつかの例では、アクセス要求は、階層型データストアの条件が満たされたことを前提としてよい。例えば、予期される条件は、ストレージノード上の階層型データ構造が進んだ特定の時点(論理時間)またはポイント(例えば、最後に適用されたシーケンス番号がXより大きい場合)を識別してよい。別の例では、予期される条件は、階層型データ構造のノード、属性などの予期されるデータ値(複数可)に基づいてよい。予期される条件は、階層ストレージノード820に送信された条件付きアクセス要求830の一部として、指定された動作(例えば、読み取りまたは書き込み)と共に含まれてよい。階層型ストレージノード820は、その条件を審査してよく、条件を満たす場合、アクセスデータ、指定の動作及び階層型ストレージノード820において階層型データ構造の最後に適用されたトランザクション番号を含む競合検証要求840をトランザクションログストレージ250に送信することによって、図6で上述した直列化可能なアクセス要求に類似するアクセス要求の処理に進む。トランザクションログストレージ250はその後、コミットするか、または競合検証指示850のトランザクションと競合したため拒否してよい。階層型ストレ
ージノード820は、その後、要求の肯定応答または拒否及びトランザクション番号トークンを示すアクセス要求応答860を送信してよい。応答860はまた、条件の失敗を示す(例えば、階層型データ構造が条件を満たさなかったこと)を示すように送信されてよい。
図9は、いくつかの実施形態による、トランザクションログストレージを利用した直列化可能分離によるバッチアクセス要求の処理を例示するシーケンス図である。いくつかのシナリオでは、階層型データ構造に対して大規模な変更を行うために(例えば、移動して階層型データ構造内のサブツリーを再調整または再構成する)、同じタイプまたは異なるタイプの複数の動作(例えば、読み取り動作、書き込み動作または読み取り動作及び書き込み動作)を実行してよい。図9に示す通り、クライアント910は、指定された動作を伴うバッチアクセス要求930を送信して、コミットまたは失敗を一緒に行ってよい。例えば、バッチアクセス要求930は、階層型データ構造内に異なるノードを作成するための複数の要求を含んでよい。少なくともいくつかの実施形態では、バッチアクセス要求930の動作の実行は、バッチアクセス要求の別の動作の実行が実行順に成功することに依存してよい。例えば、バッチアクセス要求930は、3つのノードを作成する動作及び3つのノードをまとめて接続またはリンクする他の動作を含んでよい。接続動作は、作成動作の成功に依存し得る(失敗すると、接続動作も失敗する)。別の例では、1つ以上の動作の結果として生成されたデータ(例えば、ノードの作成に関する識別子または他のメタデータ)を他の動作(複数可)への入力として使用してよい。バッチ要求における他の動作の結果に依存する様々な他の動作が含まれてよく、したがって、前述の例は限定を意図するものではない。階層ストレージノード920は、複数の動作、影響を受けた/アクセスされたデータ(例えば、リソースノード、ディレクトリノード、リンクなど)及び階層型ストレージノード920において階層型データ構造の現在のバージョンの最後に適用されたトランザクション番号を含む競合検証要求940を送信してよい。トランザクションログストレージ250は、動作のセット全体に競合検証を実行し、競合検証指示950の動作セット全体をコミットするか、または拒否してよい。階層型ストレージノード920は、その後、バッチ動作がコミットされて肯定応答された(トランザクション番号トークンを含む)か、または拒否されたかどうかを示すために、バッチ応答960をクライアント910に提供してよい。
図10は、いくつかの実施形態による、トランザクションログストレージ及びトランザクション状態トークンを利用した直列化可能分離によるクライアント固有のトランザクション要求の処理を例示するシーケンス図である。単一のバッチに類似する動作をグループ化する代わりに、クライアント指定のトランザクションを実行し、要求を終わりまでコミットする必要なく、クライアントが同じトランザクションの一部として複数のアクセス要求を実行できるようにしてよい。このようにして、アクセス要求のすべてが所望どおりに実行されない場合にはトランザクションが中止できるよう(図示せず)、様々な偶発的シナリオまたは条件的シナリオが考慮され得る。さらに、(例えば、スティッキーセッションなしで)いずれのストレージノードもクライアント指定のトランザクションを処理する必要がないように、トランザクション状態をクライアントから階層型ストレージノードに渡してよいが、その作業は複数の階層型ストレージノードに分散することができる。例えば、クライアント1010は、複数の初期動作を含むトランザクションを開始する要求1040を、階層型ストレージノード1020に送信してよい。階層型ストレージノード1020は、初期動作を実行し、結果をトランザクションステージ1050の形態で返してよい。
クライアント1010は、その後、トランザクション状態1050を審査して、次のステップを決定してよい。例えば、トランザクション状態1050は、階層型データ構造から読み取られたデータを含んでよく、これはクライアント1010が予期する状態または
所望する状態であってもなくてもよい。当該状態である場合、クライアント1060はトランザクションをコミットして進み、(トランザクション状態情報1050から生成された)トランザクション状態トークン及び(必要に応じて)追加の動作を含むコミットトランザクション要求1060を含んでよい。トランザクション状態トークンは、トランザクションを実行するための別のストレージノードからの必要な情報をすべて含んでいるため、均等に分散された要求に対するロードバランシング技法を実装してよく、コミットトランザクション要求1060を階層型ストレージノード1030に送ってよい。階層型ストレージノード1030は、その後、競合検証要求1070を生成し、競合審査のためにトランザクションログストレージ250に送信する。トランザクション状態トークンは、トランザクションが階層型ストレージノード1020で開始した時点の階層型データ構造のトランザクションシーケンス番号を含んでよく、競合検証要求のトランザクション開始番号(例えば、トランザクションシーケンス番号)を含んでよい。トランザクションストレージログ210は、その後、競合検証指示1080を階層型ストレージノード1030に送信してよく、これは、次に、応答1090においてトランザクションがコミットされたか、例外が発生したかを認識してよい。いくつかの実施形態では、コミットされたトランザクションのシーケンス番号を示すよう、トランザクション番号トークンを含めてよい。
図11は、いくつかの実施形態による、ページネーショントークンを利用してページネーションされた結果配信によるアクセス要求の処理を例示するシーケンス図である。いくつかのシナリオでは、クエリまたはその他のアクセス要求によって生成された結果が大きすぎて単一の応答メッセージで送信することができない。個々の階層型ストレージノードを特定のクライアントと結びつけることによって、クライアントがデータを検索している間にストレージノートで状態を維持できるようにするのではなく、クライアントが単一のストレージノードでスティッキーセッションを必要することなく、任意のストレージノードから結果を検索できるようにするために、ページネーション技法を利用してよい。例えば、図11に示す通り、クライアント110は、結果的に大量のデータセット(例えば、男性であるすべてのユーザノードを検索するクエリ)となる読み取り要求1130を、インタフェース600を介して送信する。階層型ストレージノード1120がアイドル状態または結果処理状態を維持することを要求する読み取り応答のストリームを提供する代わりに、読み取り応答1140は、初期結果及び結果ページネーショントークンを含んでよい。結果ページネーショントークンは、検索される残りの結果及びそれらの検索方法を示してよい。いくつかの実施形態では、結果ページネーショントークンは、クライアントによって変更されて、読み取り動作を実行するために使用される整合性レベル及び/または分離レベルを変更してよく、これによって、残りの結果は整合性レベル及び/または分離レベルへの変更結果としてアクセスされた変更バージョンに従って変更されてよい。クライアント1110は、その後、結果ページネーショントークンを有する別の読み取り要求1150を、階層型ストレージノード1120または別の階層型ストレージノードに送信してよい。階層型ストレージノード1120は、その後、追加の結果を識別し、結果ページネーショントークンに提供された情報に基づいて、追加の結果を提供し、後続の応答1160に含めてよい。係る技法は、全体の結果セットがクライアント110に提供されるまで、数多く繰り返して実行する可能性がある。
ディレクトリストレージサービス、アクセス要求及び図2〜図11で説明した他の技法は、クライアントの階層型データ構造を記憶し、異なるシナリオにおいて階層型データ構造の複数のバージョンへのアクセスを提供する分散型データストアの例を提供する。しかしながら、他の様々なタイプの分散型ストレージシステムは複数のバージョンの階層型データ構造を実装してよく、これは、他の数のタイプの構成要素を利用してよく、分散型データストレージを提供してよい。図12は、いくつかの実施形態による、サービスアクセス要求に対してバージョン化された階層型データ構造を実装する方法及び技法を例示する高レベルフローチャートである。上記の実施形態を含む様々な異なる分散データストアは
、後述する技法を実装してよい。
1210に示す通り、階層型データ構造のバージョンは、分散型データストアの階層型データ構造のトランザクションログに一貫した状態で維持されてよい。例えば、異なる数のストレージノードは、階層型データ構造のローカルコピーまたは複製を、複製グループまたは保護グループの一部として単独で維持してよい。各ストレージノードは、同じまたは異なるバージョンの階層型データ構造を維持してよい。いくつかの実施形態では、ストレージノードは、各ストレージノードが任意の他のストレージノードで実行された階層型データ構造への更新と最終的に一貫性を有し得ることを保証する、最終的に一貫性を有する整合性モデルを実装してよい。例えば、階層型データ構造のトランザクションログは、一貫性メカニズム、順序付けトランザクション及び分離トランザクションとして機能してよく、これによって、競合トランザクションが禁止される(例えば、楽観的並行性を利用する)。いくつかの実施形態では、競合していないと示されたトランザクションはトランザクションログにコミットされ、送信側のストレージノードにコミットされた点として報告される。いくつかの実施形態では、ストレージノードは、その後、トランザクションを適用してよく、他の実施形態では、図13に関して後述の通り、ストレージノードはトランザクションを後で適用してよい。
経時的に、ストレージノードは、トランザクションログに関して異なる時点(例えば、論理時間)に対応する多数の異なるバージョンを取得してよい。したがって、1220に示す通り、階層型データ構造に送られるアクセス要求が受信される場合、アクセス要求を処理するために、バージョンの1つを選択する必要があり得る。多数の異なるタイプのアクセス要求が受信されてよい。例えば、いくつかのアクセス要求は、特定のデータ、属性、値または階層型データ構造によって記憶もしくは表現される他の情報(例えば、インデックス属性を利用することによって実行され得るクエリ、またはリソースなどの特定のノードへのディレクトリパスを決定するためのクエリ)を取得するクエリまたは他の読み取り要求であってよい。図6〜図11に関して上述した通り、アクセス要求は、条件付きのトランザクションまたはバッチであってよく、アクセス要求を処理するときに実行する特定の分離レベル(例えば、直列化可能またはスナップショット)を指定してよい。アクセス要求は、明示的に(例えば、トランザクションシーケンス番号またはトークンを含むことによって)またはアクセス要求のタイプを基に暗示的に(例えば、スナップショット読み取りはストレージノードにおける現在のバージョンを利用する)、利用する階層型データ構造のバージョンを識別してよい。ゆえに、1230に示す通り、要求を処理する階層型データ構造のバージョンのうちの1つが識別されてよい。
要求は、1240に示す通り、要求を処理するときに実行する分離レベル及び/または整合性レベルを示してよい。例えば、要求のタイプは、(例えば、特定の種類のクエリまたは検索動作を要求することによる)スナップショット分離を示してよい。スナップショット分離が示される場合、1270から肯定終了することによって示される通り、アクセス要求は、トランザクションログを呼び出すことなく、階層型データ構造の識別されたバージョンを利用して処理してよい。このように、古くなった可能性がわずかにある(ただし、依然として一貫性のある)データが許容可能である一部のアクセス要求では、さらなるネットワーク通信を行うことなく、高速に実行するローカル動作を利用可能であってよい。少なくともいくつかの実施形態では、スナップショット分離要求の識別されたバージョンは、要求の高速処理を実行するためにメモリに維持されてよい。いくつかの実施形態では、要求は、階層型データ構造の個々の部分のダーティーリードまたは一貫性のない読み取りが許容可能であることを示してよく、これは、スナップショット分離よりも低い分離レベルを示す。いくつかの実施形態では、要求は(例えば、トランザクションシーケンス番号を含むことによる)スナップショット分離とは異なる分離レベルを提供する特定の時点を示してよい。分離及び一貫性ならびに整合性レベルの様々な組み合わせは、クライ
アントによって指定されてよく、したがって、前述の例は限定を意図するものではない。
1240から否定終了することによって示される通り、スナップショット分離が示されていない場合、トランザクションログを利用して直列化可能分離を実施してよい。いくつかの実施形態では、要求が明示的に(または暗示的に)適切な分離レベルを呼び出す必要があり得、ゆえに、(図13に示す通り)示されたスナップショット分離を伴わないアクセス要求が常に直列化可能分離で処理されないことがあることに留意されたい。1210に示す通り、アクセス要求に基づく新しいトランザクションをトランザクションログに送信してよい。例えば、影響を受けるノード、オブジェクト及び/またはトランザクションの変化を説明する他の情報を提供してよく、これによって、競合検出を実行してよい。トランザクションログは、競合検出分析を実行して、トランザクションが既にコミットされたトランザクションと競合するかどうかを判定してよい。競合する場合、1260から肯定終了することによって示され、1280で示される通り、アクセス要求を送信したクライアントに例外、拒否または他のエラー指示が返されてよい。いくつかの実施形態では、例外は、競合(特定のリソースノードに対する変更など、特に競合する動作を含む)を示してよい。しかしながら、1260から否定終了することによって示される通り、トランザクションが競合しない場合、コミットされた指示が新しいトランザクションに対して提供されている。コミットメント確認応答は、トランザクションログ内のトランザクションの位置を示すシーケンス番号を含んでよい。要求の処理の一部として、アクセス要求は、1270に示す通り、識別されたバージョンを利用してよい。読み取り動作では、これは、識別されたバージョンに見つかったデータを送信することを含んでよい。書き込み動作では、アクセス要求を処理することは、書き込み動作がコミットされたという確認応答を提供することを含んでよい。
図13は、いくつかの実施形態による、階層型データ構造のトランザクションログと一貫性のあるストレージノードにおいて階層型データ構造の維持バージョンを実装する方法及び技法を例示する高レベルフローチャートである。1310に示す通り、様々な実施形態では、階層型データ構造のトランザクションログを読み取ってよい。例えば、トランザクションログへのアクセス要求は、ストレージノードにおける階層型データ構造の現在のバージョンに適用された最新のトランザクションを識別するトランザクションシーケンス番号で開始して実行されてよい。1320に示す通り、階層型データ構造の適用されていないトランザクション(複数可)を識別してよい。例えば、(例えば、より大きいトランザクションシーケンス番号を有するトランザクション)よりも最近コミットされたトランザクションは、トランザクションログから識別され取得されてよい。
1330に示す通り、識別されたトランザクションは、その後、ストレージノードにおける階層型データ構造の現在のバージョンに適用されてよい。例えば、トランザクションは、トランザクションの一部として実行された変更(リソース、ディレクトリ、属性、リンク、または階層型データ構造の他の部分を追加、削除、移動または変更する動作など)を記述してよい。変更されたオブジェクトを維持する/記述するキーバリューまたは他のストアの対応するエントリは、変更を反映するように(例えば、オブジェクトに追加の属性を追加すること、属性値を変更すること、新しい属性を追加することなどによって)更新されてよい。識別された変更が完了すると、その後、いくつかの実施形態では、適用されたトランザクションに対応するトランザクションシーケンス番号を、メタデータまたは階層型データ構造のバージョンを示す他の情報に記録してよい(例えば、記憶されたシーケンス番号をより大きいトランザクションシーケンス番号まで増加する)。
1340に示す通り、いくつかの実施形態では、階層型データ構造の過去のバージョン情報を更新して、階層型トランザクションの結果として適用される変更を記述してよい。このようにして、(トランザクションの適用前に)階層型データ構造の以前のバージョン
の生成、アクセス、推定、再構成などを行うことができる。例えば、図3及び図4に関して上述の通り、階層型データ構造の過去のデータストアは、階層型データ構造の現在のバージョンに記憶されているオブジェクトの以前のバージョンを記憶するキーバリューストアとして表現されてよい。以前のバージョンオブジェクトは、現在のオブジェクトバージョンに対する以前のオブジェクトバージョンを識別するための、バージョン番号とともにトランザクションによって変更されたオブジェクトのコピーであってよい。以前のオブジェクトバージョンへのポインタ、リンクまたはインデックス値が、現在のオブジェクトバージョンに含まれてよい。同様に、直近のオブジェクトバージョンよりも古いオブジェクトバージョンへのポインタ、リンクまたはインデックス、元のバージョンに到達し得るまで追跡され得る一連のオブジェクトバージョンの作成。
1340からのループバック矢印(及び1320からの否定終了)によって示される通り、トランザクションログは、記憶ノード上で維持される階層型データ構造のバージョンが最終的にトランザクションログに一貫していることを確実にするために、複数回にわたり審査されてよい。例えば、トランザクションログの読み取りは周期的に実行されてよいか、またはイベントが発生した場合(例えば、ストレージノードでの番号アクセス要求の処理)に実行されてよい。
本明細書で説明される方法は、様々な実施形態において、ハードウェアとソフトウェアの任意の組み合わせによって実施されてよい。例えば、一実施形態では、方法は、プロセッサに結合されたコンピュータ可読記憶媒体に記憶されたプログラム命令を実行する1つ以上のプロセッサを含むコンピュータシステム(例えば、図14のコンピュータシステム)によって実装されてよい。プログラム命令は、本明細書で記載される機能性(例えば、本明細書に記載されるディレクトリストレージサービス及び/またはストレージサービス/システムを実装する様々なサーバ及び他の構成要素の機能性)を実装するように構成されてよい。図面に図示され、本明細書に記載される様々な方法は、方法の実施形態例を表す。任意の方法の順序は変更されてもよく、様々な要素が追加され、並べ替えられ、組み合わされ、省略され、変更されてもよい。
さらに、本開示の実施形態は、以下の条項を考慮して説明することができる。
1.プロセッサ及びメモリを備える複数のストレージノードであって、階層型データ構造のそれぞれのバージョンを前記階層型データ構造のトランザクションログに一貫した状態で記憶する、複数のストレージノードと、
前記階層型データ構造のトランザクションログを維持するトランザクションログストアとを備えるシステムであって、前記ストレージノードのそれぞれは、
前記階層型データ構造の一部として記憶される指定データの読み取り要求をクライアントから受信し、
前記ストレージノードに維持される前記階層型データ構造のそれぞれのバージョンのうちの1つを前記読み取り要求の処理のために識別し、
前記識別されたバージョンに含まれる前記指定データを記憶する前記ストレージノードにおける1つ以上の位置にアクセスして、前記指定データを取得し、
前記識別されたバージョンに含まれる前記指定データを前記クライアントに戻す
ように構成される、システム。
2.前記ストレージノードのそれぞれはさらに、
前記階層型データ構造に送られる書き込み要求を別のクライアントから受信し、
前記ストレージノードに維持される前記階層型データ構造の前記それぞれのバージョンのうちの1つを前記読み取り要求の処理のために識別し、
前記ストレージノードにおける前記階層型データ構造の前記識別されたバージョンに関
する前記書き込み要求を実行し、
前記書き込み要求を基に、前記階層型データ構造の前記トランザクションログストアにトランザクションを送信し、前記トランザクションは前記階層型データ構造の前記識別されたバージョンを示し、
前記トランザクションが前記階層型データ構造の前記トランザクションログにコミットされているという指示を前記トランザクションログストアから受信することに応じて、前記書き込み要求の確認応答を他のクライアントに送信するように構成される、条項1に記載のシステム。
3.前記ストレージノードのそれぞれはさらに、
前記トランザクションログストアから前記トランザクションを取得し、
前記ストレージノードに維持される前記階層型データ構造の現在のバージョンに前記トランザクションを適用し、
前記ストレージノードに維持される前記階層型データ構造の過去のバージョンデータを更新し、前記トランザクションの結果として前記階層型データ構造に適用された変更を表すように構成される、条項2に記載のシステム。
4.前記システムはネットワークベースディレクトリサービスであって、前記クライアントは前記ネットワークベースディレクトリサービスのクライアントであり、前記ストレージノードは前記ネットワークベースディレクトリサービスの1つ以上の他のクライアントの代わりに1つ以上の他の階層型データ構造を記憶するマルチテナントであり、前記階層型データ構造の前記識別されたバージョンは前記ストレージノードのメモリに維持される、条項1に記載のシステム。
5.1つ以上のコンピューティングデバイスによって、
分散型データストアの一部として維持される階層型データ構造に送られるアクセス要求をクライアントから受信することと、
前記アクセス要求を処理するために前記階層型データ構造の複数のバージョンのうちの1つを識別することであって、前記階層型データ構造の複数のバージョンは、前記階層型データ構造にコミットされた変更を表す前記階層型データ構造のトランザクションログと一貫性した状態で前記分散型データストアに維持される、識別することと、
前記階層型データ構造の前記識別されたバージョンを利用する前記アクセス要求を処理することと
を実行することを備える、方法。
6.前記受信、前記識別及び前記アクセス要求の処理は前記分散型データストアの前記階層型データ構造のバージョンを記憶する複数のストレージノードのうちの1つによって実行され、
前記方法はさらに、
前記アクセス要求を受信する前に、
前記1つのストレージノードによって、前記トランザクションログから1つ以上のトランザクションを読み取ることであって、前記トランザクションログへの1つ以上の前記トランザクションは前記複数のストレージノードのうちの異なる1つによって前記トランザクションログに送信される、前記読み取ることと、
前記1つのストレージノードによって、前記1つのストレージノードに維持される前記階層型データ構造の現在のバージョンに前記1つ以上のトランザクションを適用することとを備え、
前記階層型データ構造の前記識別されたバージョンは前記1つ以上のトランザクションを含む、条項5に記載の方法。
7.前記方法はさらに、前記アクセス要求を基に、前記階層型データ構造の前記トランザクションログにトランザクションを送信することであって、前記トランザクションは前記階層型データ構造の前記識別されたバージョンを示し、
前記アクセス要求の処理は、前記トランザクションが前記階層型データ構造に対して前記トランザクションログからコミットされるという指示を受信することに応じて実行され、
前記アクセス要求の処理は、前記アクセス要求の確認応答を前記クライアントに送信することを備える、条項5に記載の方法。
8.前記アクセス要求は前記階層型データ構造の異なるそれぞれのノードに関して実行される複数の動作の実行を指示し、前記トランザクションログに送信される前記トランザクションは前記複数の動作を含み、前記トランザクションがコミットされるという前記指示は、前記複数の動作がコミットされることを示す、条項7に記載の方法。
9.前記複数の動作の少なくとも1つは、実行される前記アクセス要求の前記複数の動作のうちの別の1つの成功に依存する、条項8に記載の方法。
10.前記アクセス要求は、前記アクセス要求を処理するために指定された分離レベルまたは指定された整合性レベルのうちの少なくとも1つを含み、前記アクセス要求の処理は少なくとも1つの指定された分離レベルまたは指定された整合性レベルに従って実行される、条項5に記載の方法。
11.前記受信、前記識別及び前記アクセス要求の前記処理は前記分散型データストアの前記階層型データ構造のバージョンを記憶する複数のストレージノードのうちの1つによって実行され、
前記アクセス要求は読み取り要求であって、
前記アクセス要求の処理は、前記1つのストレージノードから、前記読み取り要求及びページネーショントークンを提供するために生成された結果の一部を前記クライアントに送信することを備え、前記ページネーショントークンは前記クライアントに送信される残りの前記結果を示し、
前記方法はさらに、
前記ストレージノードのうちの異なる1つにおいて、別の読み取り要求を前記クライアントから受信することであって、他の読み取り要求は前記ページネーショントークンを含む、前記受信することと、
異なるストレージノードにおいて他の読み取り要求を受信することに応じて、前記ページネーショントークンに示される通り、他の読み取り要求の残りの結果のうちの追加の結果を前記クライアントに送信することとを備える、条項5に記載の方法。
12.前記アクセス要求は前記アクセス要求を処理するためのスナップショット分離を指定し、前記方法はさらに、
前記アクセス要求がスナップショット分離に従って処理されることを決定することを備え、
前記アクセス要求の処理は、アクセス要求がスナップショット分離に従って処理されることを決定することに応じて実行される、
条項5に記載の方法。
13.前記受信、前記識別及び前記アクセス要求の前記処理は前記分散型データストアの前記階層型データ構造のバージョンを記憶する複数のストレージノードのうちの1つによって実行され、
前記アクセス要求はトランザクション及び1つ以上の動作の開始を示し、
前記アクセス要求の処理は、前記1つのストレージノードから、前記1つ以上の動作の実行及びトランザクション状態トークンを前記クライアントに送信することを備え、前記トランザクション状態トークンは前記1つ以上の動作の結果として前記階層型データ構造の前記識別されたバージョンに適応される変更を示し、
前記方法はさらに、
前記ストレージノードのうちの異なる1つにおいて、前記トランザクションの一部として前記クライアントから実行される1つ以上の追加の動作を含む別のアクセス要求を受信することであって、他のアクセス要求は前記トランザクション状態トークンを含み、他のアクセス要求は前記トランザクションがコミットされることを示す、前記受信することと、
異なるストレージノードにおいて、他のアクセス要求を受信することに応じて、
前記トランザクション状態トークンで示される前記変更に従って、異なるストレージノードにおいて、前記階層型データ構造の識別されたバージョンを前記変更することと、
前記階層型データ構造の前記変更されたバージョンに関する前記1つ以上の追加の動作を実行することと、
前記トランザクションを前記階層型データ構造の前記トランザクションログに送信することと、
前記トランザクションが前記階層型データ構造に対して前記トランザクションログからコミットされるという指示を受信することと、
前記トランザクションが前記トランザクションログからコミットされるという前記指示を受信することに応じて、前記アクセス要求の確認応答を前記クライアントに送信することとを備える、条項5に記載の方法。
14.1つ以上のコンピューティングデバイスによって実行されると、前記1つ以上のコンピューティングデバイスに、
前記階層型データ構造にコミットされた変更を表す前記階層型データ構造のトランザクションログと一貫性した状態で、分散型データストアの複数のストレージノードにおいて、階層型データ構造のそれぞれのバージョンを維持することと、
前記ストレージノードのうちの1つにおいて、前記階層型データ構造に送られるアクセス要求を受信することと、
前記1つのストレージノードに維持される前記階層型データ構造のそれぞれのバージョンのうちの1つを前記アクセス要求の処理のために識別することと、
前記階層型データ構造の前記識別されたバージョンを利用する前記アクセス要求を処理することと
を実施させるプログラム命令を記憶する、非一時的なコンピュータ可読記憶媒体。
15.前記プログラム命令は、前記1つ以上のコンピューティングデバイスに、さらに、
前記アクセス要求を基に、前記ストレージノードから、前記階層型データ構造の前記トランザクションログにトランザクションを送信することを実施させ、前記トランザクションは前記階層型データ構造の前記識別されたバージョンを示す、前記送信することと、
前記アクセス要求の処理は、前記トランザクションが前記階層型データ構造に対して前記トランザクションログからコミットされるという指示を受信することに応じて実行され、
前記アクセス要求の処理では、前記プログラム命令は前記1つ以上のコンピューティングデバイスに前記アクセス要求の確認応答を送信させる、条項14に記載の非一時的なコンピュータ可読記憶媒体。
16.前記プログラム命令は前記1つ以上のコンピューティングデバイスに、さらに、
前記複数のストレージノードにおいて前記トランザクションをそれぞれ取得することと

前記ストレージノードに維持される前記階層型データ構造のそれぞれの現在のバージョンに前記トランザクションを適用することと、
前記ストレージノードに維持される前記階層型データ構造のそれぞれの過去のバージョンデータを更新し、前記トランザクションの結果として前記階層型データ構造に適用された変更を表すことと
を実施させる、条項15に記載の非一時的なコンピュータ可読記憶媒体。
17.プログラム命令は1つ以上のコンピューティングデバイスに、さらに、
リモートデータストアに記憶された前記トランザクションログのアーカイブバージョンに前記トランザクションログをコピーすることと、
前記リモートトランザクションログからの1つ以上のトランザクションを、前記複数のストレージノードのうちの1つにある前記階層型データ構造のバージョンに適用し、指定の時点における前記階層型データ構造のバージョンを生成することと
を実施させる、条項14に記載の非一時的なコンピュータ可読記憶媒体。
18.前記アクセス要求は、前記階層型データ構造の予期される条件を備え、
前記プログラム命令は、前記1つ以上のコンピューティングデバイスに、さらに、前記階層型データ構造の前記識別されたバージョンに関して予期される条件を査定し、前記予期された条件が満たされていることを判定することを実施させ、
前記トランザクションを前記トランザクションログに送信することは、前記予期された条件が満たされていると判定することに応じて実行され、満たされていないと判定される予期される条件を含むアクセス要求は拒否される、条項15に記載の非一時的なコンピュータ可読記憶媒体。
19.前記アクセス要求は読み取り要求を備え、前記識別されたバージョンは前記階層型データ構造の現在のバージョンではなく、前記アクセス要求を処理する場合に、前記プログラム命令は前記1つ以上のコンピューティングデバイスに、前記階層型データ構造の過去のバージョンデータにアクセスして前記階層型データ構造の1つ以上のノードの以前のバージョンを読み取ることを実施させる、条項14に記載の非一時的なコンピュータ可読記憶媒体。
20.前記分散型データストアは、前記ネットワークベースストレージサービスに異なるアクセス要求に対する複数の異なるサービスレベル規定を提供するネットワークベースストレージサービスであって、前記プログラム命令は前記1つ以上のコンピューティングデバイスに、さらに、前記アクセス要求を処理するために識別された異なるサービスレベル規定のうちの1つに従って、前記ストレージノードへの前記アクセス要求のル―ティングを実施させ、前記ストレージノードは、識別されたサービスレベル規定に従って前記アクセス要求を処理するように構成される、条項14に記載の非一時的なコンピュータ可読記憶媒体。
図14は、様々な実施形態に係る、バージョン化された階層型データ構造を提供する分散型データストアを実装するように構成されるコンピュータシステムならびに上記の様々な他のシステム、構成要素、サービスまたはデバイスを例示するブロック図である。例えば、コンピュータシステム2000は、異なる実施形態では、階層型データ構造のバージョンを維持する階層型ストレージノードまたは階層型データ構造のトランザクションログを維持するトランザクションログストアの構成要素を実装するように構成され得る。コンピュータシステム2000は、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップコンピュータもしくはノートブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコ
ンピュータ、コンシューマデバイス、アプリケーションサーバ、ストレージデバイス、電話、携帯電話、または一般的な任意のタイプのコンピューティングデバイスを含む様々なタイプのデバイスのいずれでもあってよいが、これらに限定されない。
コンピュータシステム2000は、入出力(I/O)インタフェース2030を介してシステムメモリ2020に連結された1つ以上のプロセッサ2010を含む(これらのプロセッサはいずれも複数のコアを含んでよく、それらのコアはシングルスレッド方式でもマルチスレッド方式でもよい)。コンピュータシステム2000は、I/Oインタフェース2030に連結されたネットワークインターフェース2040をさらに含む。様々な実施形態では、コンピュータシステム2000は、1つのプロセッサ2010を含むユニプロセッサシステム、またはいくつかのプロセッサ2010(例えば、2個、4個、8個もしくは他の好適な数)を含むマルチプロセッサシステムであってよい。プロセッサ2010は、命令を実行可能な任意の好適なプロセッサであってよい。例えば、様々な実施形態では、プロセッサ2010は、x86、PowerPC、SPARCもしくはMIPSのISAまたはその他の好適なISAなどの種々の命令セットアーキテクチャ(ISA)のいずれかを実装する汎用プロセッサまたは組み込みプロセッサであってよい。マルチプロセッサシステムでは、プロセッサ2010のそれぞれは、通常は同じISAを実装し得るが、必ずしもそのように実装されるとは限らない。コンピュータシステム2000は、1つ以上のネットワーク通信デバイス(例えば、ネットワークインターフェース2040)をさらに含み、通信ネットワーク(例えば、インターネット、LANなど)を介して他のシステム及び/または構成要素と通信する。例えば、システム2000上で実行されるクライアントアプリケーションは、ネットワークインターフェース2040を使用して、本明細書に記載したディレクトリストレージシステムの構成要素の1つ以上を実装する単一のサーバまたはサーバのクラスタ上で実行するサーバアプリケーションと通信してよい。別の例では、コンピュータシステム2000上で実行するサーバアプリケーションのインスタンスは、ネットワークインターフェース2040を使用して、他のコンピュータシステム(例えば、コンピュータシステム2090)上に実装され得るサーバアプリケーション(または別のサーバアプリケーション)の他のインスタンスと通信してよい。
例示した実施形態では、コンピュータシステム2000は、1つ以上の永続ストレージデバイス2060及び/または1つ以上のI/Oデバイス2080をさらに含む。様々な実施形態では、永続ストレージデバイス2060は、ディスクドライブ、テープドライブ、ソリッドステートメモリ、他の大容量ストレージデバイスまたはその他の永続ストレージデバイスに対応し得る。コンピュータシステム2000(または分散アプリケーションもしくはそのシステム上で動作するオペレーティングシステム)は、所望により、命令及び/またはデータを永続ストレージデバイス2060に記憶してよく、記憶された命令及び/またはデータを必要に応じて検索してよい。例えば、いくつかの実施形態では、コンピュータシステム2000は、ストレージシステムサーバノードをホストしてよく、永続ストレージ2060は、そのサーバノードに取り付けられたSSDを含んでよい。
コンピュータシステム2000は、1つ以上のシステムメモリ2020を含み、これらのメモリは、プロセッサ2010(複数可)によりアクセス可能な命令及びデータを記憶するように構成される。様々な実施形態では、システムメモリ2020は、任意の好適なメモリ技術(例えば、1つ以上のキャッシュ、スタティックランダムアクセスメモリ(SRAM)、DRAM、RDRAM、EDO RAM、DDR 10 RAM、同期式ダイナミックRAM(SDRAM)、Rambus RAM、EEPROM、不揮発性/フラッシュ型メモリまたはその他のタイプのメモリ)を使用して実装され得る。システムメモリ2020は、本明細書に記載された方法及び技法を実装するために、プロセッサ2010(複数可)により実行可能なプログラム命令2025を含み得る。様々な実施形態では、プログラム命令2025は、プラットフォームのネイティブバイナリ、Java(登録
商標)バイトコードなどの任意のインタープリタ型言語、もしくはC/C++、Java(登録商標)などの任意の他の言語、またはそれらの任意の組み合わせにコード化され得る。例えば、例示した実施形態では、プログラム命令2025は、異なる実施形態では、階層型データ構造のバージョンを維持する階層型ストレージノードまたは階層型データ構造のトランザクションログを維持するトランザクションログストアの構成要素の機能性を実装するために実行可能なプログラム命令を含む。いくつかの実施形態では、プログラム命令2025は、複数の個別のクライアント、サーバノード及び/または他の構成要素を実装してよい。
いくつかの実施形態では、プログラム命令2025は、オペレーティングシステム(図示せず)を実装するために実行可能な命令を含んでよく、このオペレーティングシステムは、UNIX(登録商標)、LINUX、Solaris(登録商標)、MacOS(登録商標)、Windows(登録商標)などの様々なオペレーティングシステムのいずれでもよい。プログラム命令2025のいずれかまたはすべては、コンピュータプログラム製品またはソフトウェアとして提供され得る。このコンピュータプログラム製品またはソフトウェアは、命令が記憶された非一時的なコンピュータ可読記憶媒体を含んでもよく、この媒体を使用してコンピュータシステム(または他の電子デバイス)をプログラムすることにより、様々な実施形態に応じたプロセスを実行してよい。非一時的なコンピュータ可読記憶媒体は、マシン(例えば、コンピュータ)により読み取り可能な形態(例えば、ソフトウェア、処理アプリケーション)で情報を記憶するための任意のメカニズムを含んでもよい。一般的に、非一時的なコンピュータアクセス可能媒体は、コンピュータ可読記憶媒体またはメモリ媒体を含み得る。このような媒体としては、磁気媒体または光学媒体、例えば、I/Oインタフェース2030を介してコンピュータシステム2000に連結されたディスクまたはDVD/ディレクトリストレージサービス220−ROMなどがある。非一時的なコンピュータ可読記憶媒体は、RAM(例えば、SDRAM、DDR SDRAM、RDRAM、SRAMなど)、ROMなどの任意の揮発性または不揮発性媒体も含み得る。これらの媒体は、コンピュータシステム2000のいくつかの実施形態では、システムメモリ2020または別のタイプのメモリとして含まれ得る。他の実施形態では、プログラム命令は、ネットワークインターフェース2040を介して実装され得るようなネットワーク及び/または無線リンクなどの通信媒体を介して伝わる光学的、音響的または他の形態の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号など)を使用して伝送され得る。
いくつかの実施形態では、システムメモリ2020は、データストア2045を含んでよく、このデータストアは、本明細書に記載されたように構成され得る。例えば、本明細書に記載される階層型ストレージノードまたはトランザクションログストアによって記憶される本明細書に記載される情報は、データストア2045または1つ以上のノード上のシステムメモリ2020の別の部分、永続ストレージ2060及び/または1つ以上のリモートストレージデバイス2070に異なる時期及び様々な実施形態で記憶されてよい。概して、システムメモリ2020(例えば、システムメモリ2020内のデータストア2045)、永続ストレージ2060及び/またはリモートストレージ2070は、データブロック、データブロックの複製、データブロック及び/またはそれらの状態に関連付けられたメタデータ、データベース構成情報、及び/または本明細書に記載された方法及び技法を実装するのに使用可能な任意の他の情報を記憶し得る。
一実施形態では、I/Oインタフェース2030は、ネットワークインターフェース2040または他の周辺インタフェースを通るものを含む、プロセッサ2010、システムメモリ2020及びシステム内の任意の周辺デバイスの間のI/Oトラフィックを調整するように構成され得る。いくつかの実施形態では、I/Oインタフェース2030は、任意の必要なプロトコル変換、タイミング変換または他のデータ変換を実行し、ある構成要
素(例えば、システムメモリ2020)からのデータ信号を別の構成要素(例えば、プロセッサ2010)による使用に好適な形式に変換し得る。いくつかの実施形態では、I/Oインタフェース2030は、例えば、ペリフェラル・コンポーネント・インターコネクト(PCI)バス規格またはユニバーサル・シリアル・バス(USB)規格の変型などの様々なタイプの周辺バスを通じて取り付けられたデバイスのサポートを含み得る。いくつかの実施形態では、I/Oインタフェース2030の機能は、例えば、ノースブリッジ及びサウスブリッジなどの、2つ以上の個別の構成要素に分割され得る。さらに、いくつかの実施形態では、システムメモリ2020とのインタフェースなどの、I/Oインタフェース2030の機能性の一部またはすべてをプロセッサ2010に直接組み込んでよい。
ネットワークインターフェース2040は、例えば、コンピュータシステム2000と、他のコンピュータシステム2090(このシステムは、本明細書に記載された実施形態を実装し得る)などの、ネットワークに取り付けられた他のデバイスとの間でデータを交換できるように構成され得る。加えて、ネットワークインターフェース2040は、コンピュータシステム2000と、様々なI/Oデバイス2050及び/またはリモートストレージ2070との間の通信を行うことができるように構成され得る。I/Oデバイス2050は、いくつかの実施形態では、1つ以上の表示端末、キーボード、キーパッド、タッチパッド、スキャニングデバイス、音声認識デバイスもしくは光学認識デバイスまたは1つ以上のコンピュータシステム2000によるデータの入力もしくは検索に好適なその他のデバイスを含んでよい。複数のI/Oデバイス2050は、コンピュータシステム2000内に存在してよく、またはコンピュータシステム2000を含む分散型システムの様々なノードに分散されてよい。いくつかの実施形態では、同様の入出力デバイスは、コンピュータシステム2000から分離されてもよく、コンピュータシステム2000を含む分散型システムの1つ以上のノードと、ネットワークインターフェース2040を介するような有線または無線接続を通じて相互作用してもよい。ネットワークインターフェース2040は、通常1つ以上の無線ネットワーキングプロトコル(例えば、Wi−Fi/IEEE802.11または別の無線ネットワーキング規格)をサポートし得る。しかしながら、様々な実施形態では、ネットワークインターフェース2040は、例えば、他のタイプのイーサネット(登録商標)ネットワークなどの、任意の好適な有線または無線の一般的なデータネットワークを介した通信をサポートし得る。加えて、ネットワークインターフェース2040は、アナログ音声ネットワークもしくはデジタルファイバ通信ネットワークなどの電気通信ネットワーク/電話網、ファイバチャネルSANなどのストレージエリアネットワーク、またはその他の好適なタイプのネットワーク及び/またはプロトコルを介した通信をサポートし得る。様々な実施形態では、コンピュータシステム2000は、図14に例示した構成要素よりも多い構成要素、これよりも少ない構成要素、またはこれとは異なる構成要素(例えば、ディスプレイ、ビデオカード、オーディオカード、周辺デバイス、ATMインタフェース、イーサネットインターフェース、フレームリレーインターフェースなどの他のネットワークインターフェースなど)を含んでよい。
本明細書に記載された分散型システムの任意の実施形態、またはそれらの任意の構成要素は、1つ以上のネットワークベースサービスとして実装され得ることを留意されたい。例えば、データベースシステムのデータベース階層内のデータベースエンジンヘッドノードは、データベースサービス及び/または本明細書に記載した分散型ストレージシステムを利用する他のタイプのデータストレージサービスを、ネットワークベースサービスとしてクライアントに与え得る。いくつかの実施形態では、ネットワークベースサービスは、ネットワークを介して相互運用可能なマシン対マシン相互作用をサポートするように設計されたソフトウェア及び/またはハードウェアシステムにより実装され得る。ネットワークベースサービスは、Webサービス記述言語(WSDL)などの、マシンが処理可能な形式で記述されたインタフェースを有してよい。他のシステムは、ネットワークベースサービスのインタフェースを記述することにより定められる方法でネットワークベースサー
ビスと相互作用してよい。例えば、ネットワークベースサービスは、他のシステムが呼び出すことができる様々な動作を定義してよく、様々な動作を要求する際に他のシステムが適合していると見込むことができる特定のアプリケーションプログラミングインターフェース(API)を定義してよい。
様々な実施形態において、ネットワークベースサービスは、ネットワークベースサービス要求に関連するパラメータ及び/またはデータを含むメッセージの使用を通して、要求、または呼び出され得る。係るメッセージは、拡張マークアップ言語(XML)等の特定のマークアップ言語に従って形式化され、及び/または簡易オブジェクトアクセスプロトコル(SOAP)などのプロトコルを使用してカプセル化され得る。ネットワークベースサービス要求を行うために、ネットワークベースサービスのクライアントは、要求を含むメッセージをアセンブルし、メッセージをネットワークベースサービスに対応するアドレス指定可能なエンドポイント(例えば、ユニフォームリソースロケータ(URL))へ、ハイパーテキストトランスファプロトコル(HTTP)等のインターネットベースのアプリケーション層転送プロトコルを使用して伝送し得る。
いくつかの実施形態において、ネットワークベースサービスは、メッセージベースの技法ではなく、リプリゼンテーショナル・ステート・トランスファ(「RESTful」)技法を使用して実施され得る。例えば、RESTful技法に従って実施されるネットワークベースサービスは、SOAPメッセージ内にカプセル化されたパラメータではなく、PUT、GETまたはDELETEなどのHTTPメソッド内に含まれるパラメータを通して呼び出され得る。
図面に例示され本明細書に説明される様々な方法は、方法の実施形態例を表す。方法はソフトウェア、ハードウェアまたはそれらの組み合わせで手動で実装されてよい。任意の方法の順序は変更されてよく、様々な要素が追加され、並べ替えられ、組み合わされ、省略され、変更されてもよい。
上記の実施形態はかなり詳細に説明されているが、いったん上記開示が完全に理解されると当業者に明らかになるように、多数の変形形態及び修正形態が行われてよい。以下の請求項はすべての係る修正形態及び変更を包含し、したがって、上記の記載は制限的な意味ではなく例示的な意味としてみなされることを意図する。

Claims (15)

  1. プロセッサ及びメモリを備える複数のストレージノードであって、階層型データ構造のそれぞれのバージョンを前記階層型データ構造のトランザクションログに一貫した状態で記憶する、前記複数のストレージノードと、
    前記階層型データ構造のトランザクションログを維持するトランザクションログストアとを備えるシステムであって、前記ストレージノードのそれぞれは、
    前記階層型データ構造の一部として記憶される指定データの読み取り要求をクライアントから受信し、前記読み取り要求は、前記階層型データ構造の前記それぞれのバージョンの異なるバージョンに相当する複数の分離または一貫性レベルの一つを特定し、
    前記ストレージノードに維持される前記階層型データ構造の前記それぞれのバージョンのうちの1つを前記読み取り要求の処理のために識別し、
    前記特定された複数の分離または一貫性レベルの一つは、直列化された分離を指定することを決定し、
    前記特定された複数の分離または一貫性レベルの一つが、直列化された分離を指定することの決定に応答して、前記トランザクションログから受信した競合検証指示に基づいて、前記識別されたバージョンに含まれる前記指定データを記憶する前記ストレージノードにおける1つ以上の位置にアクセスして、前記指定データを取得し、
    前記識別されたバージョンに含まれる前記指定データを前記クライアントに戻す
    ように構成される、システム。
  2. 前記ストレージノードのそれぞれはさらに、
    前記階層型データ構造に送られる書き込み要求を他のクライアントから受信し、
    前記ストレージノードに維持される前記階層型データ構造の前記それぞれのバージョンのうちの1つを前記書き込み要求の処理のために識別し、
    前記ストレージノードにおける前記階層型データ構造の前記識別されたバージョンに関する前記書き込み要求を実行し、
    前記書き込み要求を基に、前記階層型データ構造の前記トランザクションログストアにトランザクションを送信し、前記トランザクションは前記階層型データ構造の前記識別されたバージョンを示し、
    前記トランザクションが前記階層型データ構造の前記トランザクションログにコミットされているという指示を前記トランザクションログストアから受信することに応じて、前記書き込み要求の確認応答を前記他のクライアントに送信するように構成される、請求項1に記載のシステム。
  3. 前記ストレージノードの前記それぞれはさらに、
    前記トランザクションログストアから前記トランザクションを取得し、
    前記ストレージノードに維持される前記階層型データ構造の現在のバージョンに前記トランザクションを適用し、
    前記ストレージノードに維持される前記階層型データ構造の過去のバージョンデータを更新し、前記トランザクションの結果として前記階層型データ構造に適用された変更を表すように構成される、請求項2に記載のシステム。
  4. 前記システムはネットワークベースディレクトリサービスであって、前記クライアントは前記ネットワークベースディレクトリサービスのクライアントであり、前記ストレージノードは前記ネットワークベースディレクトリサービスの1つ以上の他のクライアントの代わりに1つ以上の他の階層型データ構造を記憶するマルチテナントであり、前記階層型データ構造の前記識別されたバージョンは前記ストレージノードの前記メモリに維持される、請求項1に記載のシステム。
  5. 1つ以上のコンピューティングデバイスによって、
    分散型データストアの一部として維持される階層型データ構造に送られるアクセス要求をクライアントから受信することと、
    前記アクセス要求は、前記階層型データ構造の複数のバージョンの異なるバージョンに相当する複数の分離または一貫性レベルの一つを特定し、
    前記アクセス要求を処理するために前記階層型データ構造の前記複数のバージョンのうちの1つを識別することであって、前記階層型データ構造の前記複数のバージョンは、前記階層型データ構造にコミットされた変更を表す前記階層型データ構造のトランザクションログと一貫性した状態で前記分散型データストアに維持される、前記識別することと、
    前記特定された複数の分離または一貫性レベルの一つは、直列化された分離を指定することを決定し、
    前記特定された複数の分離または一貫性レベルの一つが、直列化された分離を指定することの決定に応答して、前記トランザクションログから受信した競合検証指示に基づいて、前記階層型データ構造の前記識別されたバージョンを利用する前記アクセス要求を処理することと
    を実行することを備える、方法。
  6. 前記受信、前記識別及び前記アクセス要求の前記処理は前記分散型データストアの前記階層型データ構造のバージョンを記憶する複数のストレージノードのうちの1つによって実行され、
    前記方法はさらに、
    前記アクセス要求を受信する前に、
    前記複数のストレージノードの1つのストレージノードによって、前記トランザクションログから1つ以上のトランザクションを読み取ることであって、前記トランザクションログへの前記1つ以上のトランザクションは前記複数のストレージノードのうちの異なる1つによって前記トランザクションログに送信される、前記読み取ることと、
    前記複数のストレージノードの1つのストレージノードによって、前記1つのストレージノードに維持される前記階層型データ構造の現在のバージョンに前記1つ以上のトランザクションを適用することとを備え、
    前記階層型データ構造の前記識別されたバージョンは前記1つ以上のトランザクションを含む、請求項5に記載の方法。
  7. 前記方法はさらに、前記アクセス要求を基に、前記階層型データ構造の前記トランザクションログにトランザクションを送信することであって、前記トランザクションは前記階層型データ構造の前記識別されたバージョンを示し、
    前記アクセス要求の処理は、前記トランザクションが前記階層型データ構造に対して前記トランザクションログからコミットされるという指示を受信することに応じて実行され、
    前記アクセス要求の処理は、前記アクセス要求の確認応答を前記クライアントに送信することを備える、請求項5に記載の方法。
  8. 前記アクセス要求は前記階層型データ構造の異なるそれぞれのノードに関して実行される複数の動作の実行を指示し、前記トランザクションログに送信される前記トランザクションは前記複数の動作を含み、前記トランザクションがコミットされるという前記指示は、前記複数の動作がコミットされることを示す、請求項7に記載の方法。
  9. 前記受信、前記識別及び前記アクセス要求の前記処理は前記分散型データストアの前記階層型データ構造のバージョンを記憶する複数のストレージノードのうちの1つのストレージノードによって実行され、
    前記アクセス要求は、読み取り要求であって、
    前記アクセス要求の処理は、前記1つのストレージノードから、前記読み取り要求の処理及びページネーショントークンのために生成された結果の一部を前記クライアントに送信することを備え、前記ページネーショントークンは、前記クライアントに送信される残りの結果を示し、
    前記方法はさらに、
    前記ストレージノードのうちの異なる1つにおいて、他の読み取り要求を前記クライアントから受信することであって、前記他の読み取り要求は、前記ページネーショントークンを含む、前記受信することと、
    前記異なるストレージノードにおいて前記他の読み取り要求を受信することに応じて、前記ページネーショントークンに示される通り、前記他の読み取り要求の残りの結果のうちの追加の結果を前記クライアントに送信することとを備える、請求項5に記載の方法。
  10. 前記方法はさらに、
    前記分散型データストアの一部として維持される階層型データ構造に送られる第2のアクセス要求をクライアントから受信することを備え、
    前記第2のアクセス要求は、前記階層型データ構造の複数のバージョンの異なるバージョンに相当する前記複数の分離または一貫性レベルの一つを特定し、
    前記特定された複数の分離または一貫性レベルの一つが、スナップショット分離を指定することの決定に応答して、前記第2のアクセス要求がスナップショット分離に従って処理されることを決定することを備え、
    前記第2のアクセス要求は、前記第2のアクセス要求がスナップショット分離に従って処理されることを決定することに応じて処理される、
    請求項5に記載の方法。
  11. 前記受信、前記識別及び前記アクセス要求の前記処理は前記分散型データストアの前記階層型データ構造のバージョンを記憶する複数のストレージノードのうちの1つのストレージノードによって実行され、
    前記アクセス要求はトランザクション及び1つ以上の動作の開始を示し、
    前記アクセス要求の処理は、前記1つのストレージノードから、前記1つ以上の動作の実行及びトランザクション状態トークンを前記クライアントに送信することを備え、前記トランザクション状態トークンは前記1つ以上の動作の結果として前記階層型データ構造の前記識別されたバージョンに適応される変更を示し、
    前記方法はさらに、
    前記ストレージノードのうちの異なる1つにおいて、前記トランザクションの一部として前記クライアントから実行される1つ以上の追加の動作を含む他のアクセス要求を受信することであって、前記他のアクセス要求は前記トランザクション状態トークンを含み、前記他のアクセス要求は前記トランザクションがコミットされることを示す、前記受信することと、
    前記異なるストレージノードにおいて、前記他のアクセス要求を受信することに応じて、
    前記トランザクション状態トークンで示される前記変更に従って、前記異なるストレージノードにおいて、前記階層型データ構造の前記識別されたバージョンを変更することと、
    前記階層型データ構造の前記変更されたバージョンに関する前記1つ以上の追加の動作を実行することと、
    前記トランザクションを前記階層型データ構造の前記トランザクションログに送信することと、
    前記トランザクションが前記階層型データ構造に対して前記トランザクションログからコミットされるという指示を受信することと、
    前記トランザクションが前記トランザクションログからコミットされるという前記指示を受信することに応じて、前記アクセス要求の確認応答を前記クライアントに送信することとを備える、請求項5に記載の方法。
  12. 1つ以上のコンピューティングデバイスによって実行されると、前記1つ以上のコンピューティングデバイスに、
    階層型データ構造にコミットされた変更を表す前記階層型データ構造のトランザクションログと一貫性した状態で、分散型データストアの複数のストレージノードにおいて、前記階層型データ構造のそれぞれのバージョンを維持することと、
    前記ストレージノードのうちの1つのストレージノードにおいて、前記階層型データ構造に送られるアクセス要求を受信することと、
    前記アクセス要求は、前記階層型データ構造の複数のバージョンの異なるバージョンに相当する複数の分離または一貫性レベルの一つを特定し、
    前記1つのストレージノードに維持される前記階層型データ構造の前記それぞれのバージョンのうちの1つを前記アクセス要求の処理のために識別することと、
    前記特定された複数の分離または一貫性レベルの一つは、直列化された分離を指定することを決定し、
    前記特定された複数の分離または一貫性レベルの一つが、直列化された分離を指定することの決定に応答して、前記トランザクションログから受信した競合検証指示に基づいて、前記階層型データ構造の前記識別されたバージョンを利用する前記アクセス要求を処理することと
    を実施させるプログラム命令を記憶する、非一時的なコンピュータ可読記憶媒体。
  13. 前記プログラム命令は、前記1つ以上のコンピューティングデバイスに、さらに、
    前記アクセス要求を基に、前記ストレージノードから、前記階層型データ構造の前記トランザクションログにトランザクションを送信することを実施させ、前記トランザクションは前記階層型データ構造の前記識別されたバージョンを示す、前記送信することと、
    前記アクセス要求の処理は、前記トランザクションが前記階層型データ構造に対して前記トランザクションログからコミットされるという指示を受信することに応じて実行され、
    前記アクセス要求の処理では、前記プログラム命令は前記1つ以上のコンピューティングデバイスに前記アクセス要求の確認応答を送信させる、請求項12に記載の非一時的なコンピュータ可読記憶媒体。
  14. 前記プログラム命令は前記1つ以上のコンピューティングデバイスに、さらに、
    前記複数のストレージノードにおいてトランザクションをそれぞれ取得することと、
    前記ストレージノードに維持される前記階層型データ構造のそれぞれの現在のバージョンに前記トランザクションを適用することと、
    前記ストレージノードに維持される前記階層型データ構造のそれぞれの過去のバージョンデータを更新し、前記トランザクションの結果として前記階層型データ構造に適用された変更を表すことと
    を実施させる、請求項12に記載の非一時的なコンピュータ可読記憶媒体。
  15. 前記アクセス要求は、前記階層型データ構造の予期される条件を備え、
    前記プログラム命令は、前記1つ以上のコンピューティングデバイスに、さらに、前記階層型データ構造の前記識別されたバージョンに関して前記予期される条件を査定し、前記予期された条件が満たされていることを判定することを実施させ、
    トランザクションを前記トランザクションログに送信することは、前記予期された条件が満たされていると判定することに応じて実行され、満たされていないと判定される予期される条件を含むアクセス要求は拒否される、請求項12に記載の非一時的なコンピュータ可読記憶媒体。
JP2020031312A 2016-04-18 2020-02-27 分散型データストアのバージョン化された階層型データ構造 Active JP7113040B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/132,098 US11157517B2 (en) 2016-04-18 2016-04-18 Versioned hierarchical data structures in a distributed data store
US15/132,098 2016-04-18

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2018554725A Division JP6669892B2 (ja) 2016-04-18 2017-04-18 分散型データストアのバージョン化された階層型データ構造

Publications (2)

Publication Number Publication Date
JP2020091902A true JP2020091902A (ja) 2020-06-11
JP7113040B2 JP7113040B2 (ja) 2022-08-04

Family

ID=59215925

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2018554725A Active JP6669892B2 (ja) 2016-04-18 2017-04-18 分散型データストアのバージョン化された階層型データ構造
JP2020031312A Active JP7113040B2 (ja) 2016-04-18 2020-02-27 分散型データストアのバージョン化された階層型データ構造

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2018554725A Active JP6669892B2 (ja) 2016-04-18 2017-04-18 分散型データストアのバージョン化された階層型データ構造

Country Status (6)

Country Link
US (2) US11157517B2 (ja)
EP (2) EP3885928A1 (ja)
JP (2) JP6669892B2 (ja)
KR (2) KR102141234B1 (ja)
CN (2) CN114780509A (ja)
WO (1) WO2017184593A1 (ja)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11188551B2 (en) * 2016-11-04 2021-11-30 Microsoft Technology Licensing, Llc Multi-level data pagination
US10474563B1 (en) 2016-12-28 2019-11-12 Wells Fargo Bank, N.A. System testing from production transactions
US10671639B1 (en) 2017-03-30 2020-06-02 Amazon Technologies, Inc. Selectively replicating changes to hierarchial data structures
US11036797B2 (en) * 2017-10-12 2021-06-15 Adtran, Inc. Efficient storage and utilization of a hierarchical data set
US11645288B2 (en) * 2017-11-03 2023-05-09 International Business Machines Corporation Reassigning gamer clusters based on engagement
US10897453B2 (en) * 2018-01-26 2021-01-19 Nicira, Inc. Providing networking and security to workloads via a control virtual private cloud shared across multiple virtual private clouds
US10430100B2 (en) * 2018-02-28 2019-10-01 International Business Machines Corporation Transactional operations in multi-master distributed data management systems
CN111226200B (zh) * 2018-03-23 2023-06-27 华为云计算技术有限公司 为分布式应用创建一致性快照的方法、装置和分布式系统
CN111147226B (zh) * 2018-11-02 2023-07-18 杭州海康威视系统技术有限公司 数据存储方法、装置及存储介质
CN111680108B (zh) * 2019-03-11 2023-11-03 杭州海康威视数字技术股份有限公司 一种数据存储方法、装置及一种数据获取方法、装置
CN110059074A (zh) * 2019-03-18 2019-07-26 华迪计算机集团有限公司 一种用于内存数据库的数据处理方法及系统
US10972296B2 (en) * 2019-05-03 2021-04-06 Microsoft Technology Licensing, Llc Messaging to enforce operation serialization for consistency of a distributed data structure
US11442920B2 (en) * 2019-06-28 2022-09-13 Paypal, Inc. Graph database system
US11397750B1 (en) * 2019-11-27 2022-07-26 Amazon Technologies, Inc. Automated conflict resolution and synchronization of objects
US11544232B2 (en) * 2019-12-11 2023-01-03 Western Digital Technologies, Inc. Efficient transaction log and database processing
US11580128B2 (en) * 2020-05-18 2023-02-14 International Business Machines Corporation Preventing DBMS deadlock by eliminating shared locking
US11321342B2 (en) * 2020-07-31 2022-05-03 Veeva Systems Inc. Structured-data analysis and visualization
CN112559558B (zh) * 2020-12-07 2024-04-09 北京理房通支付科技有限公司 一种流水号生成方法和装置、计算设备和存储介质
KR102631020B1 (ko) * 2020-12-15 2024-01-31 한국전력공사 배전 계통 관계 집합 기반 데이터 매칭 방법 및 배전 계통 통합 db 시스템
US11714573B1 (en) 2021-03-29 2023-08-01 Amazon Technologies, Inc. Storage optimization in a distributed object store
US11709809B1 (en) * 2021-03-29 2023-07-25 Amazon Technologies, Inc. Tree-based approach for transactionally consistent version sets
US11886422B1 (en) 2021-03-29 2024-01-30 Amazon Technologies, Inc. Transactional protocol for snapshot isolation without synchronized clocks
US11599514B1 (en) 2021-03-29 2023-03-07 Amazon Technologies, Inc. Transactional version sets
US11853324B2 (en) * 2021-05-10 2023-12-26 Argo AI, LLC Systems and methods for atomic publication of distributed writes to a distributed data warehouse
US11755621B2 (en) 2021-05-10 2023-09-12 Argo AI, LLC Systems and methods for atomic publication of distributed writes to a distributed data warehouse
CN113377502A (zh) * 2021-06-10 2021-09-10 上海达梦数据库有限公司 事务处理方法、装置、服务器、数据库管理系统及介质
US11888956B2 (en) * 2021-06-11 2024-01-30 Microsoft Technology Licensing, Llc Paginated data transfer techniques
CN113657465B (zh) * 2021-07-29 2024-04-09 北京百度网讯科技有限公司 预训练模型的生成方法、装置、电子设备和存储介质
CN115114260B (zh) * 2021-08-24 2023-06-23 腾讯科技(深圳)有限公司 数据处理方法、装置、电子设备及存储介质
KR102392880B1 (ko) * 2021-09-06 2022-05-02 (주) 바우디움 계층화 문서를 관리하는 방법 및 이를 이용한 장치
CN113868273B (zh) * 2021-09-23 2022-10-04 北京百度网讯科技有限公司 元数据的快照方法及其装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110153566A1 (en) * 2009-12-18 2011-06-23 Microsoft Corporation Optimistic serializable snapshot isolation
JP2013543601A (ja) * 2011-09-07 2013-12-05 日本電気株式会社 ストレージ装置
WO2015200686A1 (en) * 2014-06-26 2015-12-30 Amazon Technologies, Inc. Multi-database log with multi-item transaction support
JP2016511486A (ja) * 2013-03-15 2016-04-14 アマゾン・テクノロジーズ・インコーポレーテッド データベースエンジンを備えたデータベースシステム及び別個の分散型ストレージサービス

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8423648B2 (en) * 1999-06-01 2013-04-16 Yodlee.Com, Inc. Method and system for verifying state of a transaction between a client and a service over a data-packet-network
US6968364B1 (en) * 2000-03-30 2005-11-22 Microsoft Corporation System and method to facilitate selection and programming of an associated audio/visual system
JP3776706B2 (ja) * 2000-10-04 2006-05-17 富士通株式会社 データ通信装置、データ通信方法およびデータ通信プログラムを記録したコンピュータ読み取り可能な記録媒体
US6877107B2 (en) * 2001-07-05 2005-04-05 Softwired Ag Method for ensuring operation during node failures and network partitions in a clustered message passing server
US7287249B2 (en) 2001-09-28 2007-10-23 Siebel Systems, Inc. Method and system for tracking and exchanging incremental changes to hierarchical objects
US20040230893A1 (en) 2003-05-16 2004-11-18 Dethe Elza Method and system for enabling collaborative authoring of hierarchical documents with node privileges
US7185096B2 (en) * 2003-05-27 2007-02-27 Sun Microsystems, Inc. System and method for cluster-sensitive sticky load balancing
US7352762B2 (en) * 2003-05-27 2008-04-01 Sun Microsystems, Inc. Method and system for messaging to a cluster
US7483923B2 (en) 2003-08-21 2009-01-27 Microsoft Corporation Systems and methods for providing relational and hierarchical synchronization services for units of information manageable by a hardware/software interface system
US20050086384A1 (en) 2003-09-04 2005-04-21 Johannes Ernst System and method for replicating, integrating and synchronizing distributed information
GB2423850B (en) 2003-11-13 2009-05-20 Commvault Systems Inc System and method for performing integrated storage operations
US7822711B1 (en) 2003-12-31 2010-10-26 Symantec Operating Corporation Conflict resolution for a distributed file sharing system
US7318075B2 (en) * 2004-02-06 2008-01-08 Microsoft Corporation Enhanced tabular data stream protocol
US20060010130A1 (en) * 2004-07-09 2006-01-12 Avraham Leff Method and apparatus for synchronizing client transactions executed by an autonomous client
US7676692B2 (en) * 2005-04-18 2010-03-09 Bank Of America Corporation Database automated disaster recovery
US20060242104A1 (en) 2005-04-21 2006-10-26 Microsoft Corporation Systems and methods for manipulating data in a data storage system
US7549028B2 (en) 2005-06-29 2009-06-16 Emc Corporation Backup and restore operations using a single snapshot driven by a server job request
US7689602B1 (en) 2005-07-20 2010-03-30 Bakbone Software, Inc. Method of creating hierarchical indices for a distributed object system
US7853667B1 (en) * 2005-08-05 2010-12-14 Network Appliance, Inc. Emulation of transparent recall in a hierarchical storage management system
US7617262B2 (en) 2005-12-19 2009-11-10 Commvault Systems, Inc. Systems and methods for monitoring application data in a data replication system
US7606844B2 (en) 2005-12-19 2009-10-20 Commvault Systems, Inc. System and method for performing replication copy storage operations
US20070150341A1 (en) * 2005-12-22 2007-06-28 Aftab Zia Advertising content timeout methods in multiple-source advertising systems
US7562203B2 (en) * 2006-09-27 2009-07-14 Network Appliance, Inc. Storage defragmentation based on modified physical address and unmodified logical address
US20100174692A1 (en) 2007-03-15 2010-07-08 Scott Meyer Graph store
US7603393B1 (en) 2007-04-02 2009-10-13 Juniper Networks, Inc. Software merging utility
US20090006489A1 (en) 2007-06-29 2009-01-01 Microsoft Corporation Hierarchical synchronization of replicas
US8554800B2 (en) 2008-07-30 2013-10-08 Portool Ltd. System, methods and applications for structured document indexing
US8566362B2 (en) 2009-01-23 2013-10-22 Nasuni Corporation Method and system for versioned file system using structured data representations
US8121980B2 (en) * 2009-02-13 2012-02-21 Microsoft Corporation Transactional record manager
US20100333116A1 (en) 2009-06-30 2010-12-30 Anand Prahlad Cloud gateway system for managing data storage to cloud storage sites
US8589347B2 (en) 2010-05-28 2013-11-19 Commvault Systems, Inc. Systems and methods for performing data replication
US9063969B2 (en) * 2010-12-28 2015-06-23 Sap Se Distributed transaction management using optimization of local transactions
US9241031B2 (en) * 2011-08-02 2016-01-19 Verizon Patent And Licensing Inc. Selecting an auxiliary event-package server
CN102831156B (zh) 2012-06-29 2014-12-31 浙江大学 一种云计算平台上的分布式事务处理方法
CN102855271B (zh) 2012-07-05 2016-09-21 中国电力科学研究院 一种多版本电网模型的存储与可追溯管理方法
US9632828B1 (en) * 2012-09-24 2017-04-25 Amazon Technologies, Inc. Computing and tracking client staleness using transaction responses
US9268651B1 (en) * 2012-10-31 2016-02-23 Amazon Technologies, Inc. Efficient recovery of storage gateway cached volumes
CN103164219B (zh) 2013-01-08 2015-09-23 华中科技大学 去中心化架构中使用多类型副本的分布式事务处理系统
US20140324690A1 (en) * 2013-01-11 2014-10-30 American Express Travel Related Services Company, Inc. System and method for a single digital wallet dynamic checkout tool
US20140214886A1 (en) * 2013-01-29 2014-07-31 ParElastic Corporation Adaptive multi-client saas database
US9396012B2 (en) 2013-03-14 2016-07-19 Qualcomm Incorporated Systems and methods of using a hypervisor with guest operating systems and virtual processors
EP2973044A2 (en) 2013-03-15 2016-01-20 James Webber Graph database devices and methods for partitioning graphs
US9836516B2 (en) 2013-10-18 2017-12-05 Sap Se Parallel scanners for log based replication
IN2013CH05115A (ja) 2013-11-12 2015-05-29 Inmobi Pte Ltd
US9389976B2 (en) 2014-04-09 2016-07-12 Intel Corporation Distributed persistent memory using asynchronous streaming of log records
GB2526849B (en) 2014-06-05 2021-04-14 Advanced Risc Mach Ltd Dynamic cache allocation policy adaptation in a data processing apparatus
US9910876B2 (en) * 2014-06-11 2018-03-06 International Business Machines Corporation Query handling in a columnar database
CN104281506B (zh) 2014-07-10 2017-02-15 中国科学院计算技术研究所 一种文件系统的数据维护方法及系统
CN104216955B (zh) 2014-08-20 2017-12-26 百度在线网络技术(北京)有限公司 一种操作数据及管理事务的方法、装置及分布式系统
US9053124B1 (en) * 2014-09-30 2015-06-09 Code 42 Software, Inc. System for a distributed file system element collection
US20160147458A1 (en) * 2014-11-25 2016-05-26 Samsung Electronics Co., Ltd. Computing system with heterogeneous storage and method of operation thereof
CN104636084B (zh) 2015-01-21 2016-04-27 广东电网有限责任公司电力科学研究院 一种对电力大数据进行分布存储的装置和方法
US20170109214A1 (en) * 2015-10-16 2017-04-20 Qualcomm Incorporated Accelerating Task Subgraphs By Remapping Synchronization
US11157493B2 (en) * 2015-12-30 2021-10-26 Facebook, Inc. Optimistic data fetching and rendering
US10289693B2 (en) * 2015-12-30 2019-05-14 Dropbox, Inc. Techniques for providing user interface enhancements for online content management system version histories
US11386078B2 (en) * 2018-12-17 2022-07-12 Sap Se Distributed trust data storage system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110153566A1 (en) * 2009-12-18 2011-06-23 Microsoft Corporation Optimistic serializable snapshot isolation
JP2013543601A (ja) * 2011-09-07 2013-12-05 日本電気株式会社 ストレージ装置
JP2016511486A (ja) * 2013-03-15 2016-04-14 アマゾン・テクノロジーズ・インコーポレーテッド データベースエンジンを備えたデータベースシステム及び別個の分散型ストレージサービス
WO2015200686A1 (en) * 2014-06-26 2015-12-30 Amazon Technologies, Inc. Multi-database log with multi-item transaction support

Also Published As

Publication number Publication date
CN109074387B (zh) 2022-05-13
JP7113040B2 (ja) 2022-08-04
KR20180132874A (ko) 2018-12-12
EP3446239B1 (en) 2021-11-17
CN114780509A (zh) 2022-07-22
US20170300552A1 (en) 2017-10-19
US11157517B2 (en) 2021-10-26
KR102293093B1 (ko) 2021-08-25
WO2017184593A1 (en) 2017-10-26
KR20200096309A (ko) 2020-08-11
KR102141234B1 (ko) 2020-08-04
EP3446239A1 (en) 2019-02-27
EP3885928A1 (en) 2021-09-29
CN109074387A (zh) 2018-12-21
JP6669892B2 (ja) 2020-03-18
JP2019515377A (ja) 2019-06-06
US20220043830A1 (en) 2022-02-10

Similar Documents

Publication Publication Date Title
JP7113040B2 (ja) 分散型データストアのバージョン化された階層型データ構造
US11860895B2 (en) Selectively replicating changes to hierarchial data structures
US11086531B2 (en) Scaling events for hosting hierarchical data structures
US11550763B2 (en) Versioning schemas for hierarchical data structures
US11574070B2 (en) Application specific schema extensions for a hierarchical data structure
US9305056B1 (en) Results cache invalidation
US11461347B1 (en) Adaptive querying of time-series data over tiered storage
US10838934B2 (en) Modifying archive data without table changes
US10585720B1 (en) Method and system for executing application programming interface (API) requests based on union relationships between objects
US11100129B1 (en) Providing a consistent view of associations between independently replicated data objects
US11636124B1 (en) Integrating query optimization with machine learning model prediction
US11657088B1 (en) Accessible index objects for graph data structures
US11455305B1 (en) Selecting alternate portions of a query plan for processing partial results generated separate from a query engine
US20230196199A1 (en) Querying databases with machine learning model references
US10452637B1 (en) Migration of mutable data sets between data stores
US11657069B1 (en) Dynamic compilation of machine learning models based on hardware configurations
US11500837B1 (en) Automating optimizations for items in a hierarchical data store
US11886439B1 (en) Asynchronous change data capture for direct external transmission
US11010361B1 (en) Executing code associated with objects in a hierarchial data structure
US11941014B1 (en) Versioned metadata management for a time-series database
US20240111751A1 (en) Record-level locks with constant space complexity
US11914571B1 (en) Optimistic concurrency for a multi-writer database

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200310

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200310

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210330

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20210630

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210830

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220111

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220302

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220705

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220725

R150 Certificate of patent or registration of utility model

Ref document number: 7113040

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150