(57)【要約】      （修正有）【課題】データを編成するシステム及び方法を提供する。【解決手段】コンテンツアドレス可能オブジェクトストアを提供して、データの部分を表すデータオブジェクトを保持し、データオブジェクトに関連付ける。有向グラフの各ノードはイミュータブルであり、データオブジェクト又はメタデータオブジェクトのいずれかに関連付けられ、メタデータオブジェクトは、データオブジェクト又はさらなるメタデータオブジェクトに対する参照のリストを記憶する。データオブジェクトが修正されるとき、さらなる有向グラフがデータオブジェクトに関連付けられる。さらなる有向グラフはノードに対する修正であり、該ノードを有向グラフと共有する。有向グラフのルートがコンセンサスストア内に公開される。有向グラフに関連付けられたルートを管理し、データオブジェクトの修正に関連付けられたスナップショットに対するアクセスを提供する。【選択図】図５
2017045455.tif 000002
【特許請求の範囲】
【請求項１】
データを編成する、コンピュータにより実施される方法であって、
コンテンツアドレス可能オブジェクトストアを提供してデータオブジェクトを保持するステップであって、前記データオブジェクトの各々は前記データの部分を表し、前記データオブジェクトの各々のアドレスは前記データの前記部分の関数である、ステップと、
少なくとも１つの有向グラフを前記データオブジェクトに関連付けるステップであって、前記有向グラフの各ノードは、イミュータブルであり、前記データオブジェクトからのオブジェクトとメタデータオブジェクトとのうち１つに関連付けられ、前記メタデータオブジェクトは、１つ以上、すなわち、前記データオブジェクトからのオブジェクト又はさらなるメタデータオブジェクト、に対する参照の少なくともリストを記憶する、ステップと、
前記データオブジェクトが修正されるとき、
少なくとも１つのさらなる有向グラフを前記データオブジェクトに関連付けるステップであって、前記少なくとも１つのさらなる有向グラフは、少なくとも１つのノードに対する修正であり、該少なくとも１つのノードを前記少なくとも１つの有向グラフと共有する、ステップと、
前記少なくとも１つのさらなる有向グラフのルートをコンセンサスストアに公開して、前記少なくとも１つの有向グラフと前記少なくとも１つのさらなる有向グラフとに関連付けられた公開されたルートを介して、前記データオブジェクトの前記修正に関連付けられたスナップショットに対するアクセスを提供するステップと、
を含む方法。
【請求項２】
前記の公開されたルートからの少なくとも１つのルートをタイムスタンプに関連付けるステップ、をさらに含む請求項１に記載の方法。
【請求項３】
前記の公開されたルートのうち少なくとも１つを、該少なくとも１つのルートが参照する有向グラフのタイプに関連付けるステップ、をさらに含む請求項１に記載の方法。
【請求項４】
前記有向グラフは、ファイルシステムのディレクトリ構造を反映する非巡回グラフを含む、請求項３に記載の方法。
【請求項５】
前記有向グラフはB+木を含む、請求項３に記載の方法。
【請求項６】
前記の公開されたルートのうち少なくとも１つをスナップショット識別子に関連付けるステップ、をさらに含む請求項１に記載の方法。
【請求項７】
前記コンセンサスストアにB+木を提供するステップ、をさらに含み、前記B+木のノードは前記の公開されたルートを記憶するように動作可能である、請求項６に記載の方法。
【請求項８】
前記B+木内の前記ノードを前記スナップショット識別子によって索引付けするステップ、をさらに含む請求項７に記載の方法。
【請求項９】
前記少なくとも１つのさらなる有向グラフの前記ルートを新しい名前の下で前記コンセンサスストアに再公開することによって、前記少なくとも１つのさらなる有向グラフのクローンを作るステップ、をさらに含む請求項１に記載の方法。
【請求項１０】
所定のポイントの後に公開されたルートを除去することによって、前記データオブジェクトの修正を前記所定のポイントにロールバックするステップ、をさらに含む請求項１に記載の方法。
【請求項１１】
データを編成するシステムであって、
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに通信可能に結合されたメモリと、を含み、
前記メモリは命令を記憶し、前記命令は前記少なくとも１つのプロセッサにより実行されるときに、
コンテンツアドレス可能オブジェクトストアを提供してデータオブジェクトを保持するステップであって、前記データオブジェクトの各々は前記データの部分を表し、前記データオブジェクトの各々のアドレスは前記データの前記部分の関数である、ステップと、
少なくとも１つの有向グラフを前記データオブジェクトに関連付けるステップであって、前記有向グラフの各ノードは、イミュータブルであり、前記データオブジェクトからのオブジェクトとメタデータオブジェクトとのうち１つに関連付けられ、前記メタデータオブジェクトは、１つ以上、すなわち、前記データオブジェクトからのオブジェクト又はさらなるメタデータオブジェクト、に対する参照の少なくともリストを記憶する、ステップと、
前記データオブジェクトが修正されるとき、
少なくとも１つのさらなる有向グラフを前記データオブジェクトに関連付けるステップであって、前記少なくとも１つのさらなる有向グラフは、少なくとも１つのノードに対する修正であり、該少なくとも１つのノードを前記少なくとも１つの有向グラフと共有する、ステップと、
前記少なくとも１つのさらなる有向グラフのルートをコンセンサスストアに公開して、前記少なくとも１つの有向グラフと前記少なくとも１つのさらなる有向グラフとに関連付けられた公開されたルートを介して、前記データオブジェクトの前記修正に関連付けられたスナップショットに対するアクセスを提供するステップと、
を含む方法を実行する、システム。
【請求項１２】
前記方法は、前記の公開されたルートからの少なくとも１つのルートをタイムスタンプに関連付けるステップをさらに含む、請求項１１に記載のシステム。
【請求項１３】
前記方法は、前記の公開されたルートのうち少なくとも１つを、該少なくとも１つのルートが参照する有向グラフのタイプに関連付けるステップをさらに含む、請求項１１に記載のシステム。
【請求項１４】
前記有向グラフは、ファイルシステムのディレクトリ構造を反映する非巡回グラフを含む、請求項１３に記載のシステム。
【請求項１５】
前記有向グラフはB+木を含む、請求項１３に記載のシステム。
【請求項１６】
前記方法は、前記の公開されたルートのうち少なくとも１つをスナップショット識別子に関連付けるステップをさらに含む、請求項１１に記載のシステム。
【請求項１７】
前記方法は、前記コンセンサスストアにB+木を提供するステップをさらに含み、前記B+木のノードは前記の公開されたルートを記憶するように動作可能である、請求項１６に記載のシステム。
【請求項１８】
前記方法は、前記B+木内の前記ノードを前記スナップショット識別子によって索引付けするステップをさらに含む、請求項１７に記載のシステム。
【請求項１９】
前記方法は、
前記少なくとも１つのさらなる有向グラフの前記ルートを新しい名前の下で前記コンセンサスストアに再公開することによって、前記少なくとも１つのさらなる有向グラフのクローンを作るステップと、
所定のポイントの後に公開されたルートを除去することによって、前記データオブジェクトの修正を前記所定のポイントにロールバックするステップと、
をさらに含む、請求項１１に記載のシステム。
【請求項２０】
１つ以上のプロセッサにより実行されるときにデータを編成する方法を実行する命令を具現化させた非一時的コンピュータ読取可能記憶媒体であって、前記方法は、
コンテンツアドレス可能オブジェクトストアを提供してデータオブジェクトを保持するステップであって、前記データオブジェクトの各々は前記データの部分を表し、前記データオブジェクトの各々のアドレスは前記データの前記部分の関数である、ステップと、
少なくとも１つの有向グラフを前記データオブジェクトに関連付けるステップであって、前記有向グラフの各ノードは、イミュータブルであり、前記データオブジェクトからのオブジェクトとメタデータオブジェクトとのうち１つに関連付けられ、前記メタデータオブジェクトは、１つ以上、すなわち、前記データオブジェクトからのオブジェクト又はさらなるメタデータオブジェクト、に対する参照の少なくともリストを記憶する、ステップと、
前記データオブジェクトが修正されるとき、
少なくとも１つのさらなる有向グラフを前記データオブジェクトに関連付けるステップであって、前記少なくとも１つのさらなる有向グラフは、少なくとも１つのノードに対する修正であり、該少なくとも１つのノードを前記少なくとも１つの有向グラフと共有する、ステップと、
前記少なくとも１つのさらなる有向グラフのルートをコンセンサスストアに公開して、前記少なくとも１つの有向グラフと前記少なくとも１つのさらなる有向グラフとに関連付けられた公開されたルートを介して、前記データオブジェクトの前記修正に関連付けられたスナップショットに対するアクセスを提供するステップと、
を含む、非一時的コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、2015年8月26日に申請された米国仮出願第62/210,385号の利益を主張する。前述された出願の開示は、すべての目的について本明細書において参照により援用される。
【０００２】
本開示は、概してデータに関し、より具体的にはデータを編成する方法及びシステムに関する。
【背景技術】
【０００３】
本セクションに説明されるアプローチは、追求されたことがある可能性があるが、必ずしもこれまでに着想され、あるいは追求されてきたアプローチではない。それゆえに、他に示されない限り、本セクションに説明されるアプローチのいずれも、単に本セクションに含まれるという理由で従来技術と見なすと仮定されるべきではない。
【０００４】
コンピュータデータ、例えば、ファイルシステムを表現することに使用されるものなどは、オブジェクト及びこれらオブジェクトを指し示す参照として構築されることがある。オブジェクトは、オブジェクトストア内に位置する。オブジェクトは、該オブジェクトを指し示す多くの参照を有し得る。さらに、オブジェクト自体が、他のオブジェクトを指し示す参照を保有することができる。ゆえに、コンピュータデータは、データオブジェクトの有向グラフとして編成されることが可能である。
【０００５】
ファイルシステムのバックアップコピーを提供することは、多大な記憶リソース及び時間を必要とする挑戦的なタスクである場合がある。様々な記憶装置のリソースを効果的に利用するために、ファイルシステムのスナップショットを追跡する効果的な手順をセットアップし、ファイルシステムのコピーに対するアクセスを提供し、もはや必要とされないファイルシステムのコピーを除去することが重要である。
【発明の概要】
【０００６】
本発明の概要は、以下に詳細な説明においてさらに説明される概念のうち選択されたものを簡素化された形式において導入するために提供される。本発明の概要は、請求される対象事項の重要な特徴又は必須の特徴を識別するものではなく、請求される対象事項の範囲を決定することの助けとして用いられるべきものでもない。
【０００７】
本明細書に説明されるテクノロジーは、データを編成する方法を含む。本開示のいくつかの実施形態が、ファイルシステムの異なるバージョン（スナップショット）にアクセスする方法を提供することができる。
【０００８】
例示的な実施形態に従い、データを編成する一方法が開示される。本方法は、コンテンツアドレス可能オブジェクトストアを提供してデータオブジェクトを保持することを含む。データオブジェクトの各々は、データの部分を表現し得る。データオブジェクトのアドレスは、データの部分の関数である。方法は、少なくとも１つの有向グラフをデータオブジェクトに関連付けることを可能にする。有向グラフの各ノードはイミュータブルであり、データオブジェクトからのオブジェクト又はメタデータオブジェクトのうち、１つに関連付けられる。メタデータオブジェクトは、１つ以上、すなわち、データオブジェクトからのオブジェクト又はさらなるメタデータオブジェクト、に対する参照の少なくともリストを記憶することができる。データオブジェクトが修正されるとき、方法は、少なくとも１つのさらなる有向グラフをデータオブジェクトに関連付けることを含む。さらなる有向グラフは、少なくとも１つのノードに対する修正であり、この少なくとも１つのノードを有向グラフと共有する。方法は、さらなる有向グラフのルートをコンセンサスストア内に公開して、有向グラフとさらなる有向グラフとに関連付けられた公開されたルートを介して、データオブジェクトの修正に関連付けられたスナップショットに対するアクセスを提供することを含む。
【０００９】
いくつかの実施形態において、上記方法は、公開されたルートからの少なくとも１つのルートをタイムスタンプに関連付けることをさらに含む。特定の実施形態において、方法は、公開されたルートのうち少なくとも１つを、この公開されたルートが参照している有向グラフのタイプに関連付けることをさらに含む。
【００１０】
特定の実施形態において、有向グラフは、ファイルシステムのディレクトリ構造を反映する非巡回グラフを含む。いくつかの実施形態において、有向グラフはB+木を含む。
【００１１】
いくつかの実施形態において、上記方法は、公開されたルートのうち少なくとも１つをスナップショット識別子に関連付けることをさらに含む。特定の実施形態において、方法は、コンセンサスストア内にB+木を提供することを可能にし、これにおいて、B+木のノードは、公開されたルートを記憶するように動作可能である。B+木内のノードは、スナップショット識別子によって索引付けされ得る。
【００１２】
いくつかの実施形態において、上記方法は、さらなる有向グラフのルートを新しい名前の下でコンセンサスストア内に再公開することによって、さらなる有向グラフのクローンを作ることをさらに含む。
【００１３】
いくつかの実施形態において、上記方法は、所定のポイントの後に公開されたルートを除去することによって、データオブジェクトの修正を所定のポイントにロールバックすることをさらに可能にする。
【００１４】
本開示の別の例示的な実施形態に従い、データを編成する方法のステップが、命令を含むマシン読取可能媒体上に記憶され、上記命令は、１つ以上のプロセッサにより実施されるときに列挙されたステップを実行する。
【図面の簡単な説明】
【００１５】
実施形態は、添付図面の図において限定ではなく例として例示され、同様の参照は類似の要素を示す。
【図１】一例示的なコレクションを示すブロック図である。
【図２】共同オブジェクトを共有する２つのコレクションを示すブロック図である。
【図３】一例示的な実施形態に従う、データを編成する一例示的なシステムを示すブロック図である。
【図４】一例示的な実施形態に従う、コレクションのスナップショットを編成するメカニズムを示すブロック図である。
【図５】一例示的な実施形態に従う、データを編成する方法を示すブロック図である。
【図６】コンピュータシステムの例示的な電子形態におけるマシンのコンピューティング装置の概略表現を示し、これにおいて、本明細書に論じられる方法論のうち任意の１つ以上をマシンに実行させる命令セットが実行されることができる。
【発明を実施するための形態】
【００１６】
下記の詳細な説明は添付図面に対する参照を含み、添付図面は本詳細な説明の一部を形成する。図面は、例示的な実施形態に従い例示を示す。こうした例示的な実施形態は、本明細書において「例」とさらに呼ばれ、十分詳細に説明されて、当業者が本対象事項を実施することを可能にする。実施形態は組み合わせられてもよく、他の実施形態が利用されてもよく、あるいは、構造的、論理的、及び電気的な変更が、請求されるものの範囲から逸脱することなく行われてもよい。ゆえに、下記の詳細な説明は、限定的な意味においてとられるべきではなく、その範囲は、別記の請求項及びその均等物によって定義される。本文献において、特許文献において一般的であるとおり、用語“ａ”及び“ａｎ”は、１つ又は１つより多くを含むように使用される。本文献において、用語「又は」は、非排他的な「又は」を参照するように使用され、したがって、別段指示されない限り、「Ａ又はＢ」は、「ＢでなくＡ」、「ＡでなくＢ」、及び「Ａ及びＢ」を含む。
【００１７】
本明細書に開示される実施形態の手法は、様々なテクノロジーを用いて実施されることができる。例えば、本明細書に説明される方法は、コンピュータシステム上で実行されるソフトウェアにおいて、あるいは、マイクロプロセッサの組み合わせ、又は他の特別に設計された特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジック装置、若しくはこれらの様々な組み合わせのいずれかを利用するハードウェアにおいて実施されることができる。具体的に、本明細書に説明される方法は、ディスクドライブ又はコンピュータ読取可能媒体などの記憶媒体上に存在する一連のコンピュータ実行可能命令によって実施されてもよい。本明細書に開示される方法は、コンピュータ（例えば、デスクトップコンピュータ、タブレットコンピュータ、ラップトップコンピュータ）、ゲームコンソール、ハンドヘルドゲーミング装置、セルラーフォン、スマートフォン、スマートテレビジョンシステムなどによって実施され得ることが留意されるべきである。
【００１８】
本開示の実施形態は、データ記憶、処理、及び視覚化を向上させることができる。具体的に、本開示の実施形態は、時間バージョン又はスナップショットをサポートするファイルシステムの編成を容易にすることができる。
【００１９】
本開示の一例示的な実施形態に従い、データを編成する一方法が、コンテンツアドレス可能オブジェクトストア（content-addressable  object  store）を提供してデータオブジェクトを保持することを含む。データオブジェクトの各々は、データの部分（piece）を表現し得る。データオブジェクトのアドレスは、データの部分の関数（function）である。上記方法は、少なくとも１つの有向グラフをデータオブジェクトに関連付けることを可能にする。有向グラフの各ノードは変えられず（イミュータブル）（immutable）、データオブジェクトからのオブジェクト又はメタデータオブジェクトのうち、１つに関連付けられる。メタデータオブジェクトは、１つ以上、すなわち、データオブジェクトからのオブジェクト又はさらなるメタデータオブジェクト、に対する参照の少なくともリストを記憶することができる。データオブジェクトが修正される（modified）とき、方法は、少なくとも１つのさらなる有向グラフをデータオブジェクトに関連付けることを含む。さらなる有向グラフは、少なくとも１つのノードに対する修正であり、この少なくとも１つのノードを有向グラフと共有する。方法は、さらなる有向グラフのルートをコンセンサスストア（consensus  store）内に公開して、有向グラフとさらなる有向グラフとに関連付けられた公開されたルートを介して、データオブジェクトの修正に関連付けられたスナップショットに対するアクセスを提供することを含む。
【００２０】
コレクション
コレクション（collection）が有向グラフであり、これにおいて、各ノードは、ルートオブジェクト（又は、ノード）として指定された特定のオブジェクトを有するイミュータブルコンテンツアドレス可能オブジェクトである。図１は、一例示的な有向グラフ（コレクション）１００を１つの指定されたルート１１０と共に示している。図１に示される例において、有向グラフ１００は、オブジェクト１２２〜１３２を含む。
【００２１】
様々な実施形態において、オブジェクト１２２〜１３２は、「データ」又は「メタデータ」のいずれかとして指定される。「データ」オブジェクトは、解釈されていないバイトのみ含む。「メタデータ」オブジェクトは内部構造を有し、他のオブジェクトを参照することができ、ゆえに、グラフエッジを形成し、有向グラフが構築されることを可能にする。様々な実施形態において、オブジェクトは、コンテンツアドレス可能である。このことは、オブジェクトのアイデンティティ（identities）がオブジェクト内容の関数であることを意味する。オブジェクトは、直接的又は移行的のいずれかでそれ自体を参照することができない。オブジェクトのアドレスが、オブジェクトのコンテンツが作成された後に計算される必要があるからである。この特性は、コレクション内のノードをトラバースする（traversing）ときに無限の再帰を回避することを可能にする。この特性の実際的な効果は、コレクション１００が循環を有することができないことである。
【００２２】
いくつかの実施形態において、コレクション１００内のオブジェクトのアイデンティティは暗号学的ハッシュ（例えば、ＳＨＡ１）である。ゆえに、グラフ１００はさらにマークル木の一形態であり、これにおいて、あらゆる非リーフノードはその子ノードのラベルのハッシュでラベル付けされる。このことは、グラフ１００を、分散バージョン制御システム、例えばgit及びMercurialなど、アーカイブ記憶システム、例えばVentiなど、ファイルシステム、例えばTahoe-LAFSなど、プロトコル、例えばBitcoin（登録商標）、Bittorrent（登録商標）など、並びに様々なNoSQLデータベースと概念的に同様にする。
【００２３】
図２は、共同（mutual）オブジェクトを有する２つのコレクション１００及び２００を示すブロック図である。コレクション１００はルートオブジェクト１１０を含み、コレクション２００はルートオブジェクト２１０を含む。コレクション２００と１００とは、少なくともオブジェクト１２６、１３０、及び２３０を共有する。図２の例において、コレクション２００は、（図２に示される）グラフ１００の増分である。ルートオブジェクトの各々は、特定の一意のイミュータブルグラフのルートである。修正又は変化（mutation）の効果を得るために、必要とされる変更を含む新しいグラフが構築される。新しいグラフが前のグラフからの増分の変更である場合、この新しいグラフはそのオブジェクトのうち多数を前のグラフと共有する見込みがある。新しいオブジェクトにより必要とされる唯一の変更は、新しいルートである。
【００２４】
図３は、いくつかの例示的な実施形態に従う、データを編成する一例示的システム３００を示すブロック図である。システム３００は、オブジェクトストア３１０、コレクション３２０、及び変えられる（ミュータブル）（mutable）コンセンサスストア３３０を含み得る。ミュータブルコレクションストア３３０は、メタルート（metaroot）３４０を含み得る。システム３００は、１つ以上のモジュール、例えば、変化器（ミューテータ）（mutator）３５０、ガーベッジコレクタ３６０、及びディザスタリカバリ３７０などをさらに含んでもよく、これらは、オブジェクトストア３１０、コレクション３２０、及びコンセンサスストア３３０を修正するように動作可能である。
【００２５】
いくつかの実施形態において、ルートオブジェクトは、ミュータブルコンセンサスストア３３０に対して公開される。ミュータブルコンセンサスストアは、コレクション３２０のルートを保持するように構成される。ミュータブルコンセンサスストア３３０内のルートエントリは名付けられてもよく、このことは「名付けられたコレクション」を結果としてもたらす。２つの区別可能な名付けられたコレクションが同じルートを有してもよく、このことはこれらコレクションが調和することを意味し、しかし、これらの名前はコレクションに別個のアイデンティティを与え、２つの名付けられたコレクションがある時間にわたり分化することを可能にする。
【００２６】
いくつかの実施形態において、コレクション３２０は一緒に組み立てられることが可能である。コレクションを表すグラフ内の任意のオブジェクトがサブコレクションのルートとみなされることが可能であり、このサブコレクションは、ある名付けられたルートをルートにした（rooted  at）、全体コレクションのうちの組み込まれたサブグラフである。
【００２７】
コレクション内のあらゆるメタデータオブジェクトが、その最初の４バイトとして３２ビットのマジックナンバーを有し、このマジックナンバーはオブジェクトの内部構造を識別する。このことは２つの目的を果たす。
【００２８】
１）コンテンツが特別なコード（“objdecode”といわれる）により識別されることを可能にし、この特別なコードは、例えば、特有のオブジェクト（「子オブジェクト」）からのすべての出て行く（outgoing）グラフエッジを列挙すること又はデバッグ出力をダンプすることに使用することが可能である。
【００２９】
２）オブジェクトのあらゆる区別可能なフォーマットが、一意であることを保証する。オブジェクトの２つのフォーマットを区別することを可能にするマジックナンバーなしでは、２つの関連しないメタデータオブジェクトがちょうど同じシリアル化された表現を有することがあり得る。このことは、結果として、単一のオブジェクトが参照するすべてのオブジェクトを見つけるために、この単一のオブジェクトが異なるフォーマットとして２回以上再解釈される必要があることになる。マジックナンバーは、上記が起こり得ないことを確実にする。なぜならば、これらを２つの区別可能なオブジェクトにしているものが他に何もないとしても、マジックナンバーは異なるからである。
【００３０】
ミューテータ
コレクションは、独自に変わりはしない静的なデータ構造である。いくつかの実施形態において、データを編成するシステム３００は、１つ以上のミューテータ３５０を含むことができる。ミューテータ３５０は、コレクション３２０を操作し（解釈し、修正し、読み出し、コピーし、バックアップする等）、更新されたルートを公開するなどするように動作可能な実行可能コードである。いくつかの実施形態において、システム３００は、種々の目的に対して設計された多数の特定ミューテータの実装（ミューテータコード）を含んでもよい。各ミューテータ３５０は、少なくともルートメタデータオブジェクトの構造と、（大抵は）全体グラフを形成する他のメタデータオブジェクトとを特定する。
【００３１】
いくつかの実施形態において、共同コンセンサスストア３３０内に公開される各ルートはさらにそのコレクションタイプと共に記憶され、このことは、正しいミューテータコードが呼び出されることを可能にする。
【００３２】
いくつかの実施形態において、ミューテータ３５０は読み出し動作をさらに実行することができる。特定の実施形態において、いくつかのミューテータ３５０が、コレクションに対する読み出し動作を実行することのみ可能にされてもよい。
【００３３】
Nsmerkle
いくつかの実施形態において、コレクションは、ファイルシステムの表現に使用することができる。Nsmerkleといわれる特定のミューテータが、コレクションのノードの構造が伝統的なUNIX（登録商標）ファイルシステムの構造に類似であるような方法で、コレクションを編成するように動作可能であり得る。ファイルシステム内の各識別ノード（inode）について、オブジェクトが存在する。各ディレクトリは、inodeオブジェクトにマッピングする名前のリストである。各inodeはデータオブジェクトを参照し、このデータオブジェクトは、（バイナリ）データ自体か、又は、inodeに関連するすべてのデータが単一のオブジェクトに合わない場合にはオブジェクトのツリーのルートかのいずれかである。
【００３４】
Nsmerkleディレクトリにより編成されるコレクションの全体構造は、名前空間のディレクトリ構造を直接反映する。すべてのコレクショングラフ構造と同様に、変更されたオブジェクトからルートオブジェクトまでのすべてのオブジェクトが更新されなければならない。ゆえに、ディレクトリ名前空間の深部において変更を行うことは、多くのオブジェクトが更新されることを結果としてもたらす可能性がある。
【００３５】
さらに、あらゆるinodeと小さいデータオブジェクトとリンクとが区別可能なオブジェクトであるため、Nsmerkleにより構築されるコレクションの構造は、ユーザの作業負荷に依存して、非常に多数の小さいオブジェクトを結果としてもたらす可能性があり、このことは、実際的な欠点である場合がある。
【００３６】
Boab
さらなる実施形態において、データを編成するシステム３００は、コレクションのグラフ構造をB+木として編成するように動作可能なミューテータ（Boabといわれる）を含むことができる。B+木は、幅広いファンアウトと浅い深さとを有するという利点を有し、ある修正からのルートに対するいかなる経路も短い（典型的に、５オブジェクトより少ない）ことを意味する。B+木キー構造の設計は、多くの関連オブジェクトがキー空間内に互いに隣接して置かれることを結果としてもたらし、このことは、上記オブジェクトがより少ないオブジェクトへと一緒にパックされる（packed）ことが可能であることを意味する。
【００３７】
結果として、Boabコレクションは、多くのより小さいファイルシステムエンティティ、例えば、inode、リンク、拡張された属性、及び一緒にパックされた少量のデータなどを備えた、より少ない、より大きいオブジェクトを有する傾向があることになる。マイナス面は、増加した概念の複雑さであり、ユーザ可視のファイルシステム名前空間とは違った構造が結果としてもたらされ、いくつかの場合には、このことは、さもなければ変更されないオブジェクト内で更新を再パックするためのより多くの読み出し・修正・書き込み動作に起因して、増加した入力／出力（ＩＯ）を結果としてもたらす。Boabコレクションは、2016年3月29日に申請され“B-tree  based  Data  Model  for  File  Systems”と題された米国特許出願番号第15/084,401号内でより詳細に説明されており、この米国特許出願は、すべての目的について本明細書において参照により援用される。
【００３８】
メタルート
いくつかの実施形態において、メタルート３４０は、ファイルシステムスナップショットをユーザに対して可視にするメカニズムである。通常のミューテータ更新において、ミューテータは新しいグラフを計算し、これを共同コンセンサスストアに公開し、古いルートは廃棄されてもよい（下記のガーベッジコレクションを参照）。
【００３９】
メタルート３４０はサブコレクションのセットを管理することができる。これにおいて、メタルート３４０は、一のコレクションについての複数の古いバージョンに対する参照を、これらバージョンのルートに対する参照を存続させることによって維持する。上記ルートは、時間において順序付けされ、スナップショット識別子（“snapid”といわれる）により索引付けされる。
【００４０】
図４は、一例示的な実施形態に従う、ファイルシステムのスナップショットの編成のためのシステム４００を示すブロック図である。システム４００はメタルート３４０を含む。メタルート３４０は、ファイルシステムのスナップショットを表すコレクション４４０〜４５４のルートに対する参照４２０を含む。図４の例において、コレクション４４０〜４５４はNsmerkleフォーマットにある。
【００４１】
いくつかの実施形態において、各メタルート３４０は、ユーザに対して可視である下位の（subordinate）ミューテータを有する。下位ミューテータは典型的にはBoab又はNsmerkleのいずれかであり、しかし、メカニズムはすべてのミューテータに対して汎用的である。
【００４２】
いくつかの実施形態において、メタルートの構造は、snapidにより索引付けされたB+木に記憶され、各エントリについて、上記構造はタイムスタンプ及びコレクションタイプを記憶する。メタルート３４０が毎回、新しい持続的なグラフを生成し、そのルートを共同コンセンサスストア３３０内に公開するように要求されるたび、メタルート３４０はその下位ミューテータ（「ライブファイルシステム（live  filesystem）」）を呼び出して、ルートを取得し、持続させる。それから、下位ミューテータは、新しいルートを新しいスナップショットとして追加し、更新されたスナップショットを表現する新しいB+木を生成し、それから新しいルートを公開のために返す。
【００４３】
メタルート３４０は満期ポリシーをさらに適用してもよく、ゆえに、メタルート３４０がB+木を更新するとき、満期になることに起因したいかなるスナップショットも除去され、そのルートを参照されなくする。
【００４４】
いくつかの実施形態において、各スナップショットは、独立したルートだけでなく、コレクションタイプをさらに有する。このことは、「適所における（in  place）」データフォーマットコンバージョン、例えば、ユーザファイルシステムをNsmerkleからBoabタイプにコンバートすることなどを可能にする。例えば、古いスナップショットがNsmerkleフォーマットの場合、この古いスナップショットのコンバージョンがNsmerkleフォーマットからBoabフォーマットへと実行されて、次のスナップショットが生成される。次のスナップショットは、このスナップショットがBoabフォーマットであることを除き、ファイルシステムの古いスナップショットと意味的に同一である。このことは、より速いコンバージョン（すべての履歴をコンバートする必要がない）を可能にし、さらに、問題がある場合にロールバックを可能にする。
【００４５】
メタルートがコレクションの組み立て（composition）であるため、このことは、サブコレクションがそれ自体独立したコレクションとして扱われることが可能であることを意味する。例えば、スナップショットが履歴内の任意のポイントにおいて抽出され、それを読み出し専用か又は読み出し書き込みかのいずれかの、その独自の自立型の（free-standing）名付けられたコレクションにすることが可能である。
【００４６】
反対に、スナップショットのないコレクションが、該コレクションを参照するメタルートを構築することによって、スナップショットを有するコレクションへコンバートされてもよい。スナップショットが互いに関係を有さない任意的なコレクションである場合、メタルートが構築されることが可能である。
【００４７】
スナップショットが、名前空間（下記を参照）を有するファイルシステム又は何らかの他のコレクションと共に使用されるとき、このことは典型的であり、それから、スナップショットは、コレクションのルートディレクトリ上に「スナップショット」オーバーレイを作成する。このディレクトリは、合成的な名前空間のルートであり、この合成的な名前空間のルートは、日付及び時間により索引付けされたスナップショットに対するアクセスを可能にする。上記名前空間をトラバースすることで、何らかのスナップショットの読み出し専用ルートに到着し、このことは、典型的には、ライブファイルシステムの履歴ビューである。
【００４８】
ディザスタリカバリ
図３に戻ると、データを編成するシステム３００は、いくつかの実施形態に従い、ディザスタリカバリ（“ＤＲ”）機能３７０を含むことができる。ＤＲ機能３７０は、別のサイトに対するネットワーク接続、一般的にワイドエリアネットワーク（ＷＡＮ）を通じて、コレクションを複製することに基づく。この転送は、全体的に、“objdecode”（上記を参照）を用いてグラフをトラバースしてオブジェクトグラフ内のエッジを見つける観点から行われることが可能であり、このことは、上記転送が任意のコレクション構造に対して汎用的に適用されることが可能であることを意味する。
【００４９】
転送の２つのエンドポイントは、“drsource”（ソース）及び“drtarget”（ターゲット）と呼ばれる。転送処理はターゲットによって駆動される。ターゲットは、ソースからスナップショットとしてコレクションのセットを周期的に転送し、最後の転送されたスナップショットについての、ローカルに可視の読み出し専用のビューを維持するように動作可能であり得る。
【００５０】
いくつかの実施形態において、ターゲットが空きであり、存在するスナップショットがないことが仮定される。ターゲットは、各コレクションのルートが転送されることを要求し、それから、上記ルートを使用して子エッジを列挙し、ターゲットがローカルに有さないすべてのオブジェクトの内容を要求する。このことは、子参照を有さないリーフオブジェクトに到達するまで、ツリーウォーク（tree  walk）として進む。グラフがサイズにおいて制限され、循環を有さない必要があるため、参照を有さないリーフオブジェクト又はメタデータオブジェクトの存在が必要とされる。
【００５１】
ターゲットがコレクションのルートを要求するとき、ソースはコレクションのクローンを作成し、このクローンのルートを返す。このことは、コレクションが転送されている間、そのオリジナルが依然として修正されているとしても、コレクションが保全されることを可能にする。
【００５２】
最初の転送がいったん完了すると、この転送はいくらかの遅延を待って、それから現在のルートを要求する。現在のルートが前のスナップショットと同じである場合、転送処理は、コレクションが変更されておらず、さらなる作業がないことが分かる。
【００５３】
現在のルートが変わっていた場合、転送処理は新しいルートを取り出し、その子を調べることができる。仮定として、転送は規則的であり、差は（グラフの全体サイズと比較して）比較的小さい増分の更新である。各メタデータノードはそれ自体がコレクショングラフのルートであるため、ルートに対して適用される同じロジックが各ノードに対してさらに適用される。すなわち、新しいスナップショットが、すでにローカルに見つけられたルートを参照する場合、このことは、サブグラフ全体がローカルに見つけられ、さらなる作業が実行される必要がないことを示す。
【００５４】
上記のことは、単一のコレクションの転送内にさえも適用される。コレクショングラフが純粋な木でない場合、このコレクショングラフは、共有されたサブグラフのルートである共有されたノードを有することになる。サブグラフは、一度転送された後、再度転送される必要がない。
【００５５】
“drtarget”サブシステムはそれ自体がミューテータであり、その独自のコレクションデータ構造を維持して、部分的なグラフ部分がソースから到着したときにこれらを一緒にまとめるのに必要とされるすべての情報を含め、進行中の転送のステートを追跡する。上記構造は転送が中断される場合、スクラッチから開始するのでなく該転送が迅速に再開されることを可能にするため、この構造は持続的である。転送されているグラフがより完全になるとき、“drtarget”コレクションは、転送全体が完了するまでは、より小さくなる。完了するとすぐ、“drtarget”は、コンセンサスルートを更新して新しいスナップショットを公開する。
【００５６】
リカバリが必要とされる場合、ソース及びターゲットの役割が反転されることが可能であり、ゆえに、最後のスナップショットが逆向きに、オリジナルのソースに対して転送されて、そのステートが回復される。
【００５７】
上述されたコレクションと違って、“drtarget”は純粋にオブジェクトグラフであり、いかなる形式のファイルシステム名前空間も提示しない。
【００５８】
ネットワークを通じてコレクションを転送する例示的な方法が、2016年3月29日に申請され“Structural  Data  Transfer  over  a  Network”と題された米国特許出願番号第15/084,399号内でより詳細に説明されており、この米国特許出願は、すべての目的について本明細書において参照により援用される。
【００５９】
コレクション動作
名前空間
コレクションはPosixスタイルの階層的な名前空間を提示することができ、この名前空間はヒューズ（fuse）を介して取り付けられ、あるいはいくつかの他のプロトコルによりアクセスされることが可能である。ミューテータ３５０、例えばBoab及びNsmerkleは、ファイルシステム意味論を明示的に実装しており、ゆえに名前空間を提示する。しかしながら、ミューテータ“drtarget”は名前空間を有さない。
【００６０】
メタルートもまた小さい名前空間を提示して、スナップショットに対するアクセスを可能にする。メタルートが一般に、名前空間を有さないコレクションをスナップショットすることに使用することができるとしても、メタルートは名前空間を提示しなくてもよく、何らかの他の方法でスナップショットにアクセスしなくてもよい。
【００６１】
読み出し専用
コレクションは、「読み出し専用」としてマーク付けされることができる。このことは、ミューテータコードが、コレクションを修正するいかなる試行も拒絶し又は無視し、コレクションのためのいかなる更新されたルートも決して公開しないべきであることを単に意味する。
【００６２】
クローン作成
コレクションは、同じルートを新しい名前の下で単に再公開することによってクローンを作られてもよい。その結果は、オリジナルに対して同一の、新たに名付けられたコレクションである。オリジナル又は新しいコレクションのうち一方又は双方が、読み出し書き込み、又は読み出し専用であり得る。コレクションの読み出し専用クローンが作られる場合、このクローンは、メタルート３４０により実施される自動的な作成及び満期ではなく、明示的な手動のスナップショットの一形態を提供する。
【００６３】
読み出し書き込みクローンはコレクショングラフの履歴内にフォークを作成する。オリジナルもまた読み出し書き込みである場合、オリジナルと新しいコレクションとが双方、ある時間にわたり共通の開始ポイントから分化すると同時に、これらの間で依然として共通であるグラフのうちのすべての部位を依然として共有することができる。
【００６４】
検証／立証
ルートオブジェクト識別子が特定のグラフ構成に対して一意であるため、この識別子を使用して、ファイルシステムの特定のステートを立証することができる。ルートのＳＨＡ１ハッシュがデジタル署名され、タイムスタンプを付けられる場合、このハッシュは、特定のファイルシステムステートがその時間に存在したことの証明として使用することができる。このことは、科学捜査又はコンプライアンスの使用事例に対して有用であり得る。
【００６５】
スナップショット抽出
「メタルート」に関連して上述されたとおり、特定のスナップショットがメタルート３４０から抽出され、新しいトップレベルの名付けられたコレクションへとクローンを作られることが可能である。このことは、クローン作成の特別な場合である。抽出されたスナップショットは、読み出し専用か又は読み出し書き込みかのいずれかであり得る。抽出されたスナップショットが読み出し書き込みである場合、このスナップショットは、（典型的には）問題となっているファイルシステムが何らかの過去のステートに巻き戻され、それから、その過去のステートから修正されることを効果的に可能にする。
【００６６】
スナップショットロールバック
関連動作として、スナップショットを有するコレクションが何らかの過去のポイントに全体的にロールバックされ、そのポイントの後のすべてのスナップショットが除去されることが可能である。この動作は、何らかの大規模な問題、例えば、不慮の大量削除、失敗したソフトウェア更新、又はクリプトロッカー（cryptolocker）マルウェアなどから回復することに使用することができる。
【００６７】
周期的なスナップショットの追加
同様に、メタルートスナップショットなしのコレクションが、適所においてスナップショットを与えられることが可能である。単一の初期スナップショットを有する新しいメタルートを構築することができ、このスナップショットのルートはターゲットコレクションである。いったん構築されると、上記メタルートのルート及びタイプがオリジナルのコレクションを置換することができる。場合により、このことは、コレクションがそのポイント以降、周期的なスナップショットを獲得することを意味する。
【００６８】
ガーベッジコレクション
コレクションルートが共同コンセンサスストア内で更新されるとき、前のルートはもはや参照されない。公開されたコンセンサスルートから移行的に到達可能でないいかなるオブジェクトも、もはやアクセス可能でなく、空間をただ無用にとっている。
【００６９】
上記空間を回収するために、システム３００は、（概して）マークアンドスィープガーベッジコレクタ（mark  and  sweep  garbage  collector）３５０を実装してもよい。マーキング段階は、すべての存在するコレクションについての現在のグラフルートを取ること（taking）によって駆動されることが可能であり、これらルートから到達可能なすべてのオブジェクトをトラバースして、これらをライブでマーク付けする。マーク付けされないいかなるオブジェクトもごみ（ガーベッジ）と考えられ、回収されることが可能である。
【００７０】
マーク付け器（マーカ）は、それ自体が簡素なグラフウォーカー（graph  walker）であり、“drtarget”により使用される同じ“objdecode”インフラストラクチャを使用して、所与のグラフノードからのすべての出て行くエッジを見つける。
【００７１】
修正との多くの微細な相互作用が存在する間、マーカは、該マーカがマーク付けするための特定のコレクションルートをいったん選ぶとそれがイミュータブルグラフであることにマーカが依存することができるという事実の利点を生かさず、ゆえにマーカは、グラフを変更するミューテータと決して競争しない。
【００７２】
図５は、一例示的な実施形態に従う、データを編成する方法５００を示すフローチャートである。方法５００は、コンピューティング装置内に実装されることが可能である。方法５００は、ブロック５０２において、コンテンツアドレス可能オブジェクトストアを提供してデータオブジェクトを保持することから始まり得る。データオブジェクトは、データの部分を表現し得る。データオブジェクトのアドレスは、データの部分のコンテンツに基づいて計算される。
【００７３】
ブロック５０４において、方法５００は、少なくとも１つの有向グラフをデータオブジェクトに関連付けることを含み得る。有向グラフの各ノードはイミュータブルであり、データオブジェクトからのオブジェクト又はメタデータオブジェクトのうち、１つに関連付けられる。メタデータオブジェクトは、１つ以上、すなわち、データオブジェクトからのオブジェクト又はさらなるメタデータオブジェクト、に対する参照の少なくともリストを記憶し得る。
【００７４】
データオブジェクトが修正されるとき、方法５００は、ブロック５０６において、少なくとも１つのさらなる有向グラフをデータオブジェクトに関連付けることを含み得る。さらなる有向グラフは少なくとも１つのノードに対する修正であり、該少なくとも１つのノードを、修正の前のデータオブジェクトに関連付けられた有向グラフと共有する。
【００７５】
ブロック５０８において、方法５００は、さらなる有向グラフのルートをコンセンサスストア内に公開して、有向グラフとさらなる有向グラフとに関連付けられた公開されたルートを介して、データオブジェクトの修正に関連付けられたスナップショットに対するアクセスを提供することを含む。
【００７６】
図６は、コンピュータシステム６００の例示的な電子形態におけるマシンのコンピューティング装置の概略表現を示し、これにおいて、本明細書に論じられる方法論のうち任意の１つ以上をマシンに実行させる命令セットが実行されることができる。様々な例示的な実施形態において、マシンはスタンドアロン装置として動作し、あるいは他のマシンに接続され（例えば、ネットワーク化され）てもよい。ネットワーク化された展開において、マシンは、サーバクライアントネットワーク環境の中でサーバ又はクライアントマシンの能力において、又は、ピアツーピア（又は、分散型）ネットワーク環境においてピアマシンとして動作し得る。マシンは、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、セットトップボックス（ＳＴＢ）、パーソナルデジタルアシスタント、セルラー電話、ポータブル音楽プレーヤ（例えば、ＭＰ３（Moving  Picture  Experts  Group  Audio  Layer  3）プレーヤなどのポータブルハードドライブオーディオ装置）、ゲーミングパッド、ポータブルゲーミングコンソール、車載（in-vehicle）コンピュータ、スマートホームコンピュータ、又は、マシンにより行われるべきアクションを指定する命令セット（順次の、又はその他の）を実行することができる任意のマシンであり得る。さらに、単一のマシンだけが例示されているが、用語「マシン」は、さらに、命令の一セット（又は、複数のセット）を個々に又は共同で実行して本明細書に論じられる方法論のうち任意の１つ以上を遂行するマシンの任意の集合を含むものとみなされるべきである。
【００７７】
例示的なコンピュータシステム６００は、一のプロセッサ又は複数のプロセッサ６０５（例えば、中央処理ユニット（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、又は双方）と、メインメモリ６１０及びスタティックメモリ６１５とを含み、これらは、バス６２０を介して互いに通信する。コンピュータシステム６００は、ビデオディスプレイユニット６２５（例えば、液晶ディスプレイ（ＬＣＤ））をさらに含み得る。コンピュータシステム６００は、少なくとも１つの入力装置６３０、例えば、英数字入力装置（例えば、キーボード）、カーソル制御装置（例えば、マウス）、マイクロフォン、デジタルカメラ、ビデオカメラなどをさらに含み得る。コンピュータシステム６００は、ディスクドライブユニット６３５、信号生成装置６４０（例えば、スピーカー）、及びネットワークインターフェース装置６４５をさらに含む。
【００７８】
ディスクドライブユニット６３５はコンピュータ読取可能媒体６５０を含み、コンピュータ読取可能媒体６５０は、本明細書に説明される方法論又は機能のうち任意の１つ以上を具現化し又はこれらにより利用される１つ以上の命令セット及びデータ構造（例えば、命令６５５）を記憶する。命令６５５は、さらに、コンピュータシステム６００による命令６５５の実行の間、メインメモリ６１０内及び／又はプロセッサ６０５内に、完全に又は少なくとも部分的に存在し得る。メインメモリ６１０及びプロセッサ６０５もまた、マシン読取可能媒体を構成する。
【００７９】
命令６５５は、さらに、複数の周知のトランスファープロトコルのうち任意のもの（例えば、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）、ＣＡＮ、シリアル、及びモドバス（Modbus））を利用するネットワークインターフェース装置６４５を介して、ネットワーク６６０を通じて送信され又は受信されることができる。例えば、ネットワーク６６０には、インターネット、ローカルイントラネット、ＰＡＮ（パーソナルエリアネットワーク）、ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（ワイドエリアネットワーク）、ＭＡＮ（メトロポリタンエリアネットワーク）、仮想プライベートネットワーク（ＶＰＮ）、ストレージエリアネットワーク（ＳＡＮ）、フレームリレー接続、高度インテリジェントネットワーク（ＡＩＮ）接続、同期型光ネットワーク（ＳＯＮＥＴ）接続、デジタルＴ１、Ｔ３、Ｅ１、若しくはＥ３回線、デジタルデータサービス（ＤＤＳ）接続、ＤＳＬ（デジタル加入者回線）接続、イーサネット（登録商標）接続、ＩＳＤＮ（統合サービスデジタルネットワーク）回線、ケーブルモデム、ＡＴＭ（非同期転送モード）接続、又はＦＤＤＩ（ファイバ分散データインターフェース）若しくはＣＤＤＩ（銅線分散データインターフェース）接続のうち、１つ以上が含まれ得る。さらに、通信が、ＧＰＲＳ（General  Packet  Radio  Service）、ＧＳＭ（登録商標）（Global  System  for  Mobile  Communication）、ＣＤＭＡ（符号分割多元接続）若しくはＴＤＭＡ（時分割多元接続）、セルラーフォンネットワーク、ＧＰＳ（グローバルポジショニングシステム）、ＣＤＰＤ（セルラーデジタルパケットデータ）、ＲＩＭ（リサーチインモーション社）デュプレックスページングネットワーク、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線、又はＩＥＥＥ８０２．１１ベースの無線周波数ネットワークを含む、様々なワイヤレスネットワークのうち任意のものに対するリンクをさらに含み得る。
【００８０】
コンピュータ読取可能媒体６５０が、一例示的な実施形態において単一の媒体であるように図示されているが、用語「コンピュータ読取可能媒体」は、１つ以上の命令セットを記憶する単一の媒体又は複数の媒体（例えば、集中型又は分散型のデータベース及び／又は関連付けられたキャッシュ及びサーバ）を含むようにみなされるべきである。用語「コンピュータ読取可能媒体」は、さらに、マシンによる実行のための命令セットを記憶し、エンコードし、又は運ぶことができて、本出願の方法論のうち任意の１つ以上をマシンに実行させ、あるいは上記の命令セットにより利用され又はこれに関連付けられたデータ構造を記憶し、エンコードし、又は運ぶことができる任意の媒体を含むようにみなされるべきである。用語「コンピュータ読取可能媒体」は、したがって、これらに限られないが、ソリッドステートメモリ、光及び磁気媒体を含むようにみなされるべきである。こうした媒体には、さらに、限定でなく、ハードディスク、フロッピーディスク、フラッシュメモリカード、デジタルビデオディスク（ＤＶＤ）、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）などが含まれ得る。
【００８１】
本明細書に説明される例示的な実施形態は、コンピュータ上にインストールされるコンピュータ実行可能命令（例えば、ソフトウェア）を含む動作環境において、ハードウェアにおいて、又はソフトウェアとハードウェアとの組み合わせにおいて実装され得る。コンピュータ実行可能命令は、コンピュータプログラミング言語において書かれてもよく、あるいはファームウェアロジックにおいて具現化されてもよい。認識されている標準に合うプログラミング言語において書かれる場合、上記の命令は、様々なハードウェアプラットフォーム上で、及び、様々なオペレーティングシステムに対するインターフェースのために実行されることができる。これらに限定されないが、本願方法を実施するコンピュータソフトウェアプログラムは、任意数の適切なプログラミング言語、例えば、ハイパーテキストマークアップ言語（ＨＴＭＬ）、ダイナミックＨＴＭＬ、拡張可能マークアップ言語（Extensible  Markup  Language）（ＸＭＬ）、拡張可能スタイルシート言語（Extensible  Stylesheet  Language）（ＸＳＬ）、文書スタイル意味指定言語（Document  Style  Semantics  and  Specification  Language）（ＤＳＳＳＬ）、カスケーティングスタイルシート（ＣＳＳ）、同期型マルチメディア統合言語（Synchronized  Multimedia  Integration  Language）（ＳＭＩＬ）、ワイヤレスマークアップ言語（ＷＭＬ）、Ｊａｖａ（登録商標）ＴＭ、Ｊｉｎｉ（登録商標）ＴＭ、Ｃ、Ｃ＋＋、Ｐｅｒｌ、ＵＮＩＸシェル、ビジュアルベーシック若しくはビジュアルベーシックスクリプト、仮想現実マークアップ言語（Virtual  Reality  Markup  Language）（ＶＲＭＬ）、ＣｏｌｄＦｕｓｉｏｎ（登録商標）ＴＭ、又は、他のコンパイラ、アセンブラ、インタプリタ、若しくは他のコンピュータの言語若しくはプラットフォームにおいて書かれることができる。
【００８２】
こうして、データを編成する手法が開示された。実施形態が、特定の例示的な実施形態を参照して説明されたが、本出願のより広い主旨及び範囲から逸脱することなく、上記の例示的な実施形態に対して様々な修正及び変更がなされ得ることが明らかであろう。したがって、明細書及び図面は、限定的ではなく例示的な意味において考慮されるべきである。
【図１】
2017045455.tif 000003
【図２】
2017045455.tif 000004
【図３】
2017045455.tif 000005
【図４】
2017045455.tif 000006
【図５】
2017045455.tif 000007
【図６】
2017045455.tif 000008
【外国語明細書】
2017045455000001.pdf