(57)【要約】  数百万個のノードを含むこともある階層データセットのブラウジングを提供するブラウザが開示される。階層データセットは、ブラウザをホストするマシンに対してリモートなマシン上に位置し得る。階層データセットのまばらな部分の選択的かつインテリジェントなフェッチングおよびローカルキャッシュ管理によって、ブラウザは、階層内の近接ノードの観点でランダムに選択されたノードを表示するための、一貫性があり予測可能な応答時間を提供する。
2021535462.tif 000002
【特許請求の範囲】
【請求項１】
命令を格納した１つ以上の非一時的コンピュータ可読媒体であって、前記命令は、１つ以上のハードウェアプロセッサによって実行されると、
リモートマシン上にあるノードの階層ツリーの第１のセクション内のノードの第１のサブセットを、表示ウインドウに表示することと、
前記ノードの階層ツリー内の目標ノードを表示するためのリクエストを受信することとを行わせ、前記目標ノードは、前記リクエストが受信されるときに表示されず、前記命令はさらに、
前記ノードの階層ツリーを分析して、前記ノードの階層ツリー内の前記目標ノードと１つ以上の他のノードとの間の関係を求めることと、
前記関係および前記表示ウインドウに対応する構成とに基づいて、（ａ）前記目標ノードを表示しているときに、前記ノードの階層ツリー内の前記目標ノードとノードの第２のサブセットとを含む、前記階層ツリーの第２のセクションが前記表示ウインドウに表示され、かつ、（ｂ）前記目標ノードを表示しているときに、前記ノードの階層ツリー内のノードの第３のサブセットを含む、前記階層ツリーの第３のセクションが前記表示ウインドウに表示されない、と判断することと、
前記目標ノードを表示しているときに前記第２のセクションが前記表示ウインドウに表示され、かつ、前記目標ノードを表示しているときに前記第３のセクションが表示されないという判断に応答して、
前記ノードの階層ツリーの前記第３のセクションに含まれる前記ノードの第３のサブセットをフェッチすることなく、前記リモートマシンから、前記ノードの階層ツリーの前記第２のセクションに含まれる前記目標ノードおよび前記ノードの第２のサブセットをフェッチすることと、
前記ノードの階層ツリーの前記第３のセクション内の前記ノードの第３のサブセットを表示することなく、前記ノードの階層ツリーの前記第２のセクション内の前記目標ノードおよび前記ノードの第２のサブセットを同時に表示することとを行わせる、１つ以上の非一時的コンピュータ可読媒体。
【請求項２】
前記命令はさらに、前記目標ノードの１つ以上の先祖ノードをフェッチすることを行わせ、前記１つ以上の先祖ノードは、前記リモートマシンからフェッチされておらず、前記ノードの階層ツリーの前記第２のセクション内の前記目標ノードと共に表示されない、請求項１に記載の媒体。
【請求項３】
前記命令はさらに、キャッシュされたノードの第２の階層を保持することを行わせ、キャッシュされた前記ノードの第２の階層内のキャッシュされた各ノードは、前記リモートマシン上の前記ノードの階層ツリー内のノードに対応し、前記リモートマシン上の前記ノードの階層ツリーは、キャッシュされた前記ノードの第２の階層に示されていないノードを含み、前記命令はさらに、
前記リモートマシンからフェッチされた前記１つ以上のノードのうちの特定のノードを、キャッシュされた前記ノードの第２の階層においてキャッシュさせることと、
前記特定のノードがキャッシュされた前記ノードの第２の階層においてキャッシュされていない子ノードを有する内部ノードであるという判断に応答して、前記特定のノードと関連付けてプレースホルダを作成することとを行わせ、前記プレースホルダは、前記子ノードがキャッシュされた前記ノードの第２の階層から欠損していることを示す、請求項１に記載の媒体。
【請求項４】
前記特定のノードは子ノードの順序付けされたシーケンスを有し、前記子ノードの順序付けされたシーケンスで連続する複数の子ノードはキャッシュされず、
前記特定のノードと関連付けて作成された前記プレースホルダは、前記子ノードの順序付けされたシーケンス内の前記連続する複数の子ノードが、キャッシュされた前記ノードの第２の階層から欠損していると示す、請求項３に記載の媒体。
【請求項５】
前記リモートマシンからフェッチされた前記１つ以上のノードのうちの前記特定のノードをキャッシュすることはさらに、前記特定のノードについての展開状態標識の値をデフォルト値に設定することを含み、
前記特定のノードの状態が展開であると示す値によって、前記特定のノードの子ノードが前記特定のノードに隣接して表示され、
前記特定のノードの状態が折畳みであると示す値によって、前記特定のノードは、前記特定のノードの子ノードを表示することなく表示される、請求項３に記載の媒体。
【請求項６】
前記命令はさらに、
前記ノードの階層ツリー内のすべてのノードを展開するリクエストを受信することと、
前記ノードの階層ツリー内のすべてのノードを展開するリクエストの受信に応答して、グローバル展開状態標識の値を、前記ノードの階層ツリー内のノードを表すすべてのノードが展開と表示されると示すように設定することと、
前記リクエストが受信されると、表示されたノードが表示されており、表示された前記ノードの子ノードが表示されていないと判断することと、
表示されていない他のノードの子ノードをフェッチすることなく、前記キャッシュから欠損している表示された前記ノードの１つ以上の子ノードをフェッチすることと、
表示された前記ノードのリストを、前記特定のノードの前記子ノードの一部を含むように変更することと、
フェッチされた前記１つ以上の子ノードを、キャッシュされた前記ノードの第２の階層に追加することとを行わせる、請求項３に記載の媒体。
【請求項７】
前記命令はさらに、フェッチに先立って、
（ａ）キャッシュされた前記ノードの第２の階層内のキャッシュされたノード、
（ｂ）プリフェッチされると判断された前記ノードの階層ツリー内のノードの数、および
（ｃ）前記目標ノードと共に表示されるべきノードについての展開状態標識、
に基づいて、フェッチする前記１つ以上のノードを判断することを行わせる、請求項３に記載の媒体。
【請求項８】
前記リモートマシンは、
（ａ）どのノードがリクエスタに送信されたか、または
（ｂ）前記リクエスタによって保持される、キャッシュされた前記ノードの第２の階層の状態、
をトラッキングすることなく、前記ノードの階層ツリー内のノードに対するリクエストに応答する、請求項３に記載の媒体。
【請求項９】
前記ノードの階層ツリー内の各ノードは、ゼロ個以上の子ノードの順序付けされたシーケンスを有し、
前記子ノードの順序付けされたシーケンスの１つ以上の子ノードが、それらのシーケンス順で表示され、
前記ノードの第１のサブセットの１つ以上のノードが前記目標ノードと共に表示されると判断することはさらに、
前記目標ノードを含むノードの順序付きリストを生成することを含み、展開されていないノードの子ノードは、前記ノードの順序付きリストから省略され、さらに、
前記ノード内の順序付きリスト内の隣接するノードを選択することを含み、
選択された前記隣接するノードは、前記目標ノードを含み、
前記隣接するノードの数は、一緒に表示可能なノードの数に基づく、請求項１に記載の媒体。
【請求項１０】
前記フェッチすることはさらに、前記ノードの階層ツリー内の前記ノードの第２のサブセットに隣接するノードの第４のサブセットをフェッチすることを含み、前記ノードの第４のサブセットは、前記目標ノードと一緒に表示されない、請求項１に記載の媒体。
【請求項１１】
前記命令はさらに、
キャッシュされたノードの第２の階層を保持することを行わせ、キャッシュされた前記ノードの第２の階層内のキャッシュされた各ノードは、前記リモートマシン上の前記ノードの階層ツリー内のノードに対応し、前記リモートマシン上の前記ノードの階層ツリーは、キャッシュされた前記ノードの第２の階層に示されないノードを含み、
前記リモートマシンは、
（ａ）どのノードがリクエスタに送信されたか、または、
（ｂ）前記リクエスタによって保持される、キャッシュされた前記ノードの第２の階層の状態、
をトラッキングすることなく、前記ノードの階層ツリー内のノードをフェッチするリクエストに応答し、前記命令はさらに、
キャッシュされた前記ノードの第２の階層内の前記目標ノードをキャッシュすることと、
前記目標ノードが子ノードの順序付けされたシーケンスを有する内部ノードであり、前記子ノードの順序付けされたシーケンスにおいて連続している複数の子ノードがキャッシュされた前記ノードの第２の階層においてキャッシュされていないという判断に応答して、前記目標ノードと関連付けてプレースホルダを作成することを行わせ、前記プレースホルダは、前記複数の子ノードがキャッシュされた前記ノードの第２の階層から欠損していると示し、前記命令はさらに、
前記目標ノードがキャッシュされると、前記目標ノードについて、前記目標ノードについての展開状態標識の値を、展開または折畳みのデフォルト値に設定することを行わせ、前記展開状態標識が展開の値を有する場合、前記目標ノードの少なくとも１つの子ノードが、前記目標ノードと共に前記表示ウインドウに表示され、前記展開状態標識が折畳みの値を有する場合、子ノードは前記目標ノードと共に前記表示ウインドウに表示されず、
前記ノードの第２のサブセット内の前記ノードは、
（ａ）キャッシュされた前記ノードの第２の階層内のキャッシュされたノード、
（ｂ）プリフェッチすると判断された前記ノードの階層ツリー内のノードの数、および
（ｃ）前記目標ノードについての前記展開状態標識、
に基づいて判断され、
前記ノードの階層ツリー内の各ノードは、ゼロ個以上の子ノードの順序付けされたシーケンスを有し、前記命令はさらに、
前記目標ノードについての前記展開状態標識が展開の値を有する場合、前記ゼロ個以上の子ノードの順序付けされたシーケンスが続く前記目標ノードを含むノードの順序付きリストを作成することを行わせ、前記目標ノードについての前記展開状態標識が折畳みの値を有する場合、前記ゼロ個以上の子ノードのシーケンスは、前記ノードの順序付きリストから省略され、前記命令はさらに、
前記ノードの順序付きリストにおいて連続したノードのセットを表示するために選択することを行わせ、
選択された前記連続したノードは、前記目標ノードを含み、
前記連続したノードの数は、一緒に表示可能なノードの数に基づき、前記命令はさらに、
選択された前記連続したノードのセットを表示することと、
前記ノードの階層ツリー内のすべてのノードを展開するリクエストを受信することと、
前記ノードの階層ツリー内のすべてのノードを展開するリクエストの受信に応答して、
キャッシュされた前記ノードの第２の階層と関連付けられたグローバル展開状態標識の値を、前記ノードの階層ツリー内のすべてのノードが展開と表示されることを示すように設定することと、
折畳みの値を有する、表示された前記ノードの前記展開状態標識に基づいて、前記ノードの順序付きリストが、前記ノードの順序付きリストから省略された子ノードを有する、表示されたノードを含むと判断することと、
表示されていない他のノードの子ノードをフェッチすることなく、前記キャッシュから欠損している表示された前記ノードの１つ以上の子ノードをフェッチすることと、
フェッチされた前記１つ以上の子ノードを、キャッシュされた前記ノードの第２の階層に追加することと、
前記表示ウインドウ内の表示を、表示された前記ノードのフェッチされた前記１つ以上の子ノードの一部を含むように変更することとを行わせる、請求項１に記載の媒体。
【請求項１２】
命令を格納する１つ以上の非一時的コンピュータ可読媒体であって、前記命令は、１つ以上のハードウェアプロセッサによって実行されると、
ノードの第３のサブセットに対応する情報をフェッチすることなく、（ａ）ノードの階層ツリー内のノードの第１のサブセットと、（ｂ）前記ノードの階層ツリー内のノードの第２のサブセットとの両方に対応する情報をフェッチすることと、
前記ノードの第２のサブセットを表示することなく、前記ノードの第１のサブセットについて情報を表示することと、
前記ノードの階層ツリーと関連付けられたビューを修正するユーザ入力の受信に応答して、
前記ノードの第２のサブセットを表示することと、
前記ノードの第３のサブセットが、前記ノードの第２のサブセットのビュー内の前記ノードの第２のサブセットに隣接していると判断することとを行わせる、１つ以上の非一時的コンピュータ可読媒体。
【請求項１３】
請求項１〜１２のいずれか１項に記載の動作を備える方法。
【請求項１４】
プロセッサを含む少なくとも１つのハードウェアデバイスと、
請求項１〜１２のいずれか１項に記載の動作を行うように構成された前記システムとを備える、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本開示は、階層データをブラウズするためのさまざまな技術に関する。本開示は具体的に、きわめて大きなノードの階層からランダムに選択されたノードの小さなサブネットを表示するための応答時間を効率的に改善することに向けられる。
【背景技術】
【０００２】
背景
リモートマシンによって保持されるデータをブラウズするためのいくつかのアプローチがある。リモートデータの小さなセットをブラウズする場合、ブラウザは、ブラウジングセッション中にさらに他のデータの検索が必要にならないように、ブラウジングの始めに全データセットのダウンロードおよびキャッシュが可能である。しかしながら、データセットは約百万のエントリを有しているので、全データセットは大きすぎてローカルキャッシュに収まらない場合がある。たとえデータセットがローカルキャッシュに収まっても、データセットのわずかな部分にしかアクセスしない場合に全データセットを検索するのは非効率な場合がある。ユーザがスクロールダウンする際にのみデータをロードする一般的なアプローチでは、最初に先行するノードをすべてロードすることなしに階層のいかなる領域も表示することはできない。
【発明の概要】
【課題を解決するための手段】
【０００３】
フェッチおよびキャッシュ管理ストラテジは、リモートに格納されたデータセットから検索された、ローカルに格納されたデータにアクセスするために用いることが可能である。一例では、ブラウザが、「線形」データをブラウズするためにスクロールインターフェースを提供する。本明細書で用いられる「線形データ」は、相対的順序を有する（たとえば、入力順の、アルファベット順の、または番号順の）データアイテムのことを言う。相対的順序は、どのデータアイテムが他のデータアイテムのすぐ隣にあるかを示す。データのリストが、相対的順序に従って表示される。
【０００４】
このセクションで説明するアプローチは追求可能なアプローチだが、必ずしも、既に考えられている、または追求されているアプローチではない。そのため、別段の指示がない限り、このセクションで説明されるアプローチはいずれも、単にこのセクションに含まれているというだけで、従来技術に適していると仮定されるべきではない。
【０００５】
添付図面の図において、実施形態が、限定のためではなく例示のために図示される。なお、この開示における「ある」または「１つの」実施形態への言及は、必ずしも同じ実施形態への言及ではなく、少なくとも１つという意味である。
【図面の簡単な説明】
【０００６】
【図１Ａ】１つまたは複数の実施形態に係る、システムの構成要素を示すブロック図である。
【図１Ｂ】１つまたは複数の実施形態に係る、ノードの階層１２２をより詳細に示す図である。
【図１Ｃ】１つまたは複数の実施形態に係る、図１Ｂに示すデータの階層ツリー内のノードに対応するノードのローカルキャッシュを示す図である。
【図２】１つまたは複数の実施形態に係る、目標ノードの検索および表示を示すフローチャートである。
【図３】１つまたは複数の実施形態に係るコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【０００７】
ブロック図の構成要素およびフローチャートの動作は、追加、削除、修正、または組合わせが可能である。１つの構成要素／動作に関して説明する機能は代わりに、他の構成要素／動作によって実現可能である。したがって、本明細書で図示および／または説明される具体的な構成要素／動作は、請求項のいずれかの範囲を制限すると解釈されるべきではない。
【０００８】
詳細な説明
以下の記載では、説明の目的で、十分な理解を提供するために多数の具体的詳細が述べられる。これらの具体的詳細がなくても、１つまたは複数の実施形態が実践され得る。一実施形態で説明される特徴は、異なる実施形態で説明される特徴と組合されてもよい。いくつかの例では、周知の構造および装置は、本発明を不必要に不明瞭にしないように、ブロック図の形態を参照して説明される。
【０００９】
１．全体的概要
大きな階層データセットを、数千またはさらには数百万個のノードによって視覚的に表すことが可能である。階層データに対応する視覚表示（たとえばノード）を表示するシステムは、階層データを含むデータストアからリモートに実現可能である。１つ以上の実施形態は、階層データがリモートに格納されているにもかかわらずまるでローカルに格納されているかのように、階層データのサブセットに対応する要求されたノードを、大幅な遅延時間を生じることなく呈示することを目的とする。
【００１０】
システムは、階層データの全体を表すすべてのノードをフェッチするのではなく、表示されるべきノードをフェッチする。一例として、インターフェースは、視覚表現のセクションを表示し、ユーザが視覚表現の特定の非表示セクションに向かってスクロールできるようにする。スクロールに基づいて、特定の非表示セクションは、ここで表示されるべきノードに対応する。他の例として、インターフェースによって、ユーザは、ディスプレイに表示されておらず、かつ、現在表示されているデータの適切なスクロール距離内に存在しない階層内の個別のノードを（すなわち、ランダムアクセスによって）識別できる。ユーザが指定したノードを受信すると、指定されたノードおよび指定されたノードに関連するノードが表示される。
【００１１】
現在表示されていないノードを表示させるユーザ入力の検出に続いて、およびこれに応答して、システムは、階層データの全体に対応するノードをフェッチすることなく、特定の非表示セクションに対応するノードをフェッチする。表示されるべきノードのサブセットの識別およびフェッチは、階層データの全体に対応する視覚表示のすべてのノードのフェッチと比べると早い。ノードのサブセットをフェッチおよび表示する速度は、ユーザの視点では、ローカルに格納されたノードがユーザのリクエストに応答して表示される速度に十分類似し得る。
【００１２】
表示されるべきノードのフェッチに加えて、１つ以上の実施形態では、表示されるべきノードのセットに関連するおよび／または隣接するさらに他のノードがプリフェッチされる。
【００１３】
初期のユーザ入力ではさらに他のノードが表示されない一方で、さらに他のユーザ入力（たとえば、特定のノードおよび特定のノードと共に表示されるノードのセットの初期表示からのスクロール）によって、さらに他の隣接するノードが表示され得る。リクエストされる場合、さらに他の隣接するノードを素早く表示しつつ、ノードのセット全体をフェッチせずにさらに他の隣接するノードをフェッチすることが効率的である。
【００１４】
本明細書で説明される、および／または請求項に記載される複数の実施形態が、この全体的概要のセクションに含まれない場合もある。
【００１５】
２．階層データをブラウズするためのアーキテクチャ
ツリーブラウザによって、ユーザは階層データをブラウズ可能である。階層からのノードが表示ウインドウに順序付けされたシーケンスで表示される実施形態では、順序付けされたシーケンスは、特定の検索順序で階層をトラバース（走査）することによって求められる。たとえば、ある実施形態では、順序付けされたシーケンスは、階層内の特定のノードＡから始まる以下のルールに従うことによって生成可能である。
【００１６】
（ａ）空のシーケンスから始まり、かつ、ノードＡなど、階層内の特定のノードにおいて始まる。
【００１７】
（ｂ）特定のノードをシーケンスに追加する。
（ｃ）特定のノードが１つ以上の子ノードを有し、かつ、特定のノードが展開された状態の場合、
（ｄ）子ノードの順序で、特定のノードの子ノードの各々についてステップ（ｂ）および（ｃ）を行う。（これは、ステップｂおよびステップｃを行うと、子ノードが特定のノードになる再帰的アルゴリズムである。）
これらのルールによって生じる順序によって、多数のファイルシステムコンテンツがユーザに表示される態様と同様に、階層が線形になり、まずフォルダまたはディレクトリ、次にファイルおよび他のディレクトリを含むディレクトリ内のコンテンツのリストが含まれる。
【００１８】
順序付けされたシーケンスのノードは、ノードの展開状態の影響を受ける場合がある。親ノードが展開されると、当該親ノードの子ノードがノードの順序付けされたシーケンスで現れ、親ノードが折畳まれると、子ノードは現れない。
【００１９】
ノードの階層（ツリー）を表すデータの順序付きリストのスクロールに加えて、ツリーブラウザによって、ユーザはツリーのノードの展開または折畳みが可能になる。ユーザがディスプレイのノードを展開すると、ディスプレイは、子ノードをディスプレイに示された順序付きリストに挿入することによって変更する。表示されたリストの中間にノードを挿入することによって、リストの下に向かって現れるノードを、ディスプレイの下端から離れるようにプッシュできる。画面上で他のノードに対してユーザに表示されるノードの位置は、階層内のノードの展開に基づいて変更可能である。したがって、表示されるべきノードのセットは、特定のノードに関連するノードの展開状態に応じて決まる。
【００２０】
階層データブラウザは、階層のサブツリー内のすべてのノードを含むリモートマシンからデータをフェッチし、次に、ユーザがリクエストするノードのみを表示し得る。すなわち、完全に展開されたサブツリーをフェッチ可能である。
【００２１】
図１Ａは、１つまたは複数の実施形態に係るシステムの構成要素を示すブロック図である。構成要素は、省略、修正、並べ替え、組合わせ、または他の態様では修正が可能である。
【００２２】
ノードの階層１２２は、ブラウズされる階層データのきわめて大きなデータセットを表す。この階層内のノードは、リクエストに応じて、データをブラウズしているユーザをホストするローカルマシン１４２に送信される。階層はノードを含むが、場合によっては複数のブラウジングマシンによってどのデータがブラウズまたはキャッシュされているかをトラックするために追加の状態情報を、必ずしも必要としない。
【００２３】
リモートマシン１１２は、ノードの階層１２２を管理する。ノードのリクエストは、ノードの階層１２２からデータをフェッチし、ローカルマシン１４２などのリクエストを行っているマシンにデータを送信するために、リモートマシン１１２によって受信される。リモートマシン１１２は、リクエストされているデータに対してステートレスであり得る。すなわち、リモートマシン１１２は、過去のリクエストの記録を保持しない。リモートマシン１１２に対するデータのリクエストは、冪等（べきとう）である。
【００２４】
表示画面１３０は、ローカルマシン１４２に通信可能に連結された表示デバイスの画面である。表示領域１３２は、階層ツリーノードのデータ項目の順序付きリストが表示およびブラウズされる表示画面１３０の領域内の表示ウインドウである。データ項目の順序付きリストは、表示ウインドウに同時に表示可能なデータのラインの数に従って、多数のデータ項目を含む。
【００２５】
表示領域１３４は、表示領域１３２に表示されたノードについてメタデータを表示し得る画面の別の部分である。表示領域Ｂに表示可能なメタデータの例は、選択されたノードについての階層内の先祖ノードの順序付きリストを含む。表示領域Ｂに表示可能な他の情報は、値およびタイプ、作成時間、所有者といった、選択されたノードの属性を含む。検索インターフェースを表示領域１３４に表示し得る。
【００２６】
ローカルマシン１４２は、ノードの階層１２２内のデータをブラウズするために、ユーザによって使用されるブラウザをホストする。ユーザは、表示領域１３２内のノードを閲覧し、ノードの順序付きリスト内の他のノードまでスクロールすることによってナビゲートしてもよい。新しいノードが表示ウインドウにおいてスクロールされると、ローカルマシンは、ノードが表示領域１３２に表示可能になるように、表示されるべきノードをリモートマシン１１２がローカルマシン１４２に送信するようにリクエストし得る。ユーザは、表示領域１３４とインタラクトして、表示領域１３２に示されるノードからの適当なスクロール距離内にノードがない場合に、閲覧のために目標ノードを指定し得る。たとえば、表示領域１３４は、ブックマークされたノードのリスト、最近閲覧されたノード、または目標ノードの名前を指定可能な検索バーを含み得る。特定の目標ノードを閲覧するというユーザのリクエストに応答して、ローカルマシン１４２は、どのノードを目標ノードの隣に表示するべきかを判断し、それらのさらに他のノードを、必要に応じてリモートマシン１１２からフェッチし得る。
【００２７】
部分階層データのキャッシュ１４４は、ローカルマシン１４２に対してローカルであり、かつ、ローカルマシン１４２によって管理されるキャッシュである。ローカルマシン１４２は、ノードがリモートマシンからフェッチされると、ノードの階層１２２内のノードのサブセットのコピーを格納する。ローカルキャッシュ内のリクエストされたノードごとに、キャッシュは、先祖、兄弟、子孫のコピー、または、ポリシーで指定されるような他の種類の関連ノードを含み得る。一例として、キャッシュは、ローカルキャッシュ内のリクエストされたノードごとに、リクエストされたノードのすべての先祖を含み得るが、キャッシュは、必ずしもリクエストされたノードのすべての兄弟ノードを含まなくてもよい。他の例では、ローカルキャッシュ内のリクエストされたノードごとに、キャッシュは、ｎレベルまでの先祖ノードおよびリクエストされたノードのすべての兄弟ノードを含み得る。キャッシュにコピーされたノード内のデータに加えて、キャッシュされたノードは、ブラウザ内のデータのブラウザ状態をトラックするさらに他のメタデータも含み得る。このメタデータは、マスタ階層データセットを格納しているリモートマシンに知られていなくてもよい。たとえば、各内部ノード（すなわち、少なくとも１個の子ノードを有するノード）は、関連する展開状態標識を有し得る。展開状態は、内部ノードの子ノードを表示するかどうかを示す。ある実施形態では、部分階層データのキャッシュ１４４は、展開状態が展開であるノードのリストも格納し得る。展開されたノードのリストは、キャッシュされたノードから分離されてもよく、リストは、リスト内のノードがキャッシュから退去する場合であっても持続し得る。ある実施形態では、展開されたノードのリストは、ブラウジングセッション中に少なくとも一度キャッシュされ、かつ、展開状態が展開であるノードのみを含み得る。ブラウジングセッション中にキャッシュされていないノードおよび折畳み状態のノードは、リストになくてもよい。代替的に、展開されたノードのリストはさらに、展開状態のキャッシュが退去させたノードのみを含むように制限されてもよい。そのような実施形態では、展開されたノードがキャッシュから退去させられると、展開されたノードのリストにノードが加えられてもよい。キャッシュから以前に退去させられたノードがリフェッチされキャッシュに入力されると、ノードが展開状態のノードのリストに現れる場合、その展開状態が展開に設定され得る。ある実施形態では、ノードの展開状態がキャッシュされたノード自体内に格納されるため、ノードはキャッシュに格納されると、展開されたノードのリストから削除されてもよい。
【００２８】
階層のノードが上述の線形化ルールに従って順序付けられる実施形態では、特定の展開された内部ノードの子ノードは、ノードの順序付きリストにおいて特定の内部ノードの兄弟ノードの前に現れ得る。しかしながら、特定のノードが「折畳まれた」という展開状態である場合、兄弟ノードは、子ノードの間に入ることなく、特定のノードのすぐ後に現れ得る。
【００２９】
ノードの階層１２２内のノードの一部は、キャッシュ内の対応するコピーを有していなくてもよい。プレースホルダを、マスタ階層がキャッシュ内に示されていないノードを含むと示すために、連続する順序付けされたノードのセットを表すために用いてもよい。ノードを順序付けされたシーケンスで表示するためにキャッシュされたノードの階層をトラバースすると、プレースホルダに出会うことによって、ローカルマシンは、欠損ノードのコピーをリクエストし、フェッチされたノードをキャッシュに入力し得る。
【００３０】
図１Ｂは、１つまたは複数の実施形態に係る、ノードの階層１２２をより詳細に示す図である。階層内のノードのラベルは、図示された例ではノードの識別を容易にするために選択される。図示された例は、請求項のうちのいずれかの範囲を制限すると解釈されるべきではない。各ノードは、その先祖のラベルをプレフィックスとして用いる場合、個別の識別を有する。たとえば、ノード内の数字は、兄弟ノードの順序を示す。したがって、「１」を有するノードが第１の兄弟ノードであり、「２」を有するノードが第２の兄弟ノードである。ノード内の文字は、階層におけるレベルを示す。したがって、ノード１Ｂはノード１Ａの子孫である。ノード１Ａは階層のルートであり、{１Ｂ、２Ｂ・・・９９９９Ｂ}という順序で９９９９個の子ノードを有する。図の円は、階層内に存在するノードを示すが、スペースが足りないためその表示は図から省略する。たとえば、ノード１Ｂは子ノード４Ｃ、５Ｃ、６Ｃなどを有するが、子ノード４Ｃ、５Ｃ、６Ｃなどは図では書かれていない。ノード１Ｂ、２Ｂおよび９９９９Ｂも各々、９９９９個の子ノードを有する。この階層は、きわめて多数のノードを有する。
【００３１】
図１Ｃは、１つまたは複数の実施形態に係る、図１Ｂに示すデータの階層ツリー内のノードのサブセットに対応するノードのローカルキャッシュを示す図である。ラベル付けされたノードは、図１Ｂの階層内の対応するノードのコピーを示し、太く縁取られた四角形はプレースホルダを表す。プレースホルダは、兄弟ノードの順序付きリスト内で連続し、かつ、キャッシュされていない１つ以上の兄弟ノードのセットを識別する。たとえば、２Ｂのサブツリー全体はキャッシュに格納されていない。また、キャッシュから欠損しているのは、
・ノード１Ｂの子ノード：{８１Ｃ〜８９８Ｃ}および{１０００Ｃ〜９９９９Ｃ}、ならびに
・１０Ｂの子ノード：{１Ｃ〜１９Ｃ}および{３１Ｃ〜９９９９Ｃ}
である。
【００３２】
図２は、１つまたは複数の実施形態に係る、目標ノードのデータ項目の検索および表示を示すフローチャートである。動作２１０で、ノードの階層１２２の一部であるノードの順序付けされたシーケンスが、表示領域１３２に表示される。表示ウインドウは、特定数のデータ項目のラインを呈示可能である。ある実施形態では、ローカルマシンは、動作２１０が行われる前に、起動時間に表示領域１３２に表示するために、階層のある部分をプリフェッチし得る。
【００３３】
動作２２０で、ユーザは、表示ウインドウに表示されておらず、そのため、表示領域１３２から選択できない、階層内の特定のノードを閲覧するようにリクエストしてもよい。ユーザは、関心ノードが表示ウインドウに示されているノードの妥当なスクロール距離内になると、表示領域１３２で表示するためのノードを選択するように、表示領域１３４を用いるオプションを選択し得る。すなわち、関心目標ノードは、表示されているノードから階層において離れたサブツリーに位置し得る。ブックマークされたノード、最近閲覧されたノードを選択するように表示領域１３４とインタラクトすることによって、または、スクロールする必要なく目標ノードまで直接ナビゲートするように検索バーにノード名を入力することによって、目標ノードを指定し得る。
【００３４】
動作２３０で、ローカルマシンは、ローカルキャッシュ内の目標ノードを検索し得る。目標ノードがローカルキャッシュに格納されていない場合、動作２４０で、ローカルマシンは、リモートマシン１１２に目標ノードのコピーをリクエストし、目標ノードのコピーをキャッシュに格納し得る。さらに、キャッシュ内にまだない目標ノードの先祖を、フェッチしキャッシュに配置し得る。
【００３５】
キャッシュされたノードの階層は、ユーザリクエストに応答して動作２５０で表示領域１３２に表示するデータ項目を判断するために用いられる。表示されるべきデータ項目は、ノードの順序付けされたシーケンスを含み得る。ある実施形態では、目標ノードについてのデータ項目は、表示ウインドウの中心付近に置かれてもよい。目標ノードと共に表示されるべきノードについてのデータ項目の数は、表示構成に基づき得る。表示構成はたとえば、表示ウインドウのサイズ、表示ウインドウの解像度、ノードの各イラストのサイズ、ノード間のスペースの量を含み得る。表示されるべきノードの一部はキャッシュ内になく欠損しており、代わりに、キャッシュ内のプレースホルダによって示される場合がある。表示されるべきデータ項目の識別は、「表示されるべきノードの識別」というタイトルの以下のセクションで、さらに詳細に説明する。
【００３６】
動作２６０で、表示に必要と判断されるがキャッシュから欠損しているノードを、リモートマシン１１２からフェッチ可能である。ノードがリモートマシンから受信されると、ノードは、欠損しているノードのより小さなセットを示すように削除または改訂されたキャッシュおよびプレースホルダに加えられてもよい。
【００３７】
動作２７０で、目標ノードを含む表示されるべきノードが、表示領域１３２に表示される。たとえば、図１Ｃを参照すると、ノード８９９Ｃが表示のために選択される場合、プレースホルダによって示される情報であってノードについての情報が必要とされ得る。たとえば、ノード８９８Ｃがキャッシュから欠損している。ノード８９８Ｃを、リモートマシンからフェッチする必要があるだろう。そのため、表示するノードの順序付けされたシーケンスからのノードがキャッシュから欠損している場合、動作２３０〜２６０を、順序付けされたシーケンスのノードの数が表示ウインドウを満たすまで繰り返さなければならない場合がある。
【００３８】
３．ユーザインターフェースの注意事項
ブラウザは、ユーザが（ａ）個別のノードもしくは（ｂ）すべてのノードを展開または折畳むただ１つの動作をリクエストすることをサポート可能である。
【００３９】
キャッシュ内に入れるノードの展開状態は、デフォルト値に設定されてもよい。ある実施形態では、デフォルト展開状態は非展開である（本明細書では折畳みとも呼ばれる）。ユーザは、表示ウインドウ内のノードを選択（たとえばクリック）することによって、ノードの展開をリクエストし得る。ユーザが展開されるべき個別のノードを選択すると、ノードの展開状態標識値は展開に設定され、選択されたノードの子ノードが、ノードの表示されたリスト内に追加され得る。展開状態識別は、ユーザがノードを折畳むようにリクエストするまで展開されたままでもよい。
【００４０】
検索インターフェースを介してランダムにアクセスされたノードの選択、または表示ウインドウ内からの選択を含まない他の手段によって、選択されたノードのすべての先祖についての展開状態標識の値が、展開された状態に設定され得る。表示されたノードのリストは、ユーザにとっては、ユーザが先祖ノードのすべてを手動で展開し、選択されたノードまでスクロールしたかのように見える。
【００４１】
ある実施形態では、ユーザはすべてを展開するようにリクエストし、これによって、階層内のすべてのノードの展開状態が展開に変わる。階層内のすべてのノードを展開すると、ブラウジング状態は、リクエストされたときに表示またはキャッシュされているノードだけでなく、すべてのノードについて変更され得る。ある実施形態では、グローバル展開状態標識が、すべてのノードを展開と表示するかどうかを示し得る。グローバル展開状態標識が展開モードを示す場合、すべてのノードは、ノードの個別の展開状態識別子の値にかかわらず、その状態が展開されているかのように表示される。
【００４２】
ある実施形態では、ユーザは下方に展開するようにリクエストしてもよく、これによって、選択されたノードにルートがあるサブツリー内のすべてのノードの展開状態が、展開されるように変わり得る。ある実施形態では、サブツリー展開識別を、展開されるべきサブツリーのルートであるノードを識別するキャッシュ内に格納可能である。表示されるべきノードを展開するべきかどうかを判断するために、システムは、ノードがサブツリー展開標識によって識別されたノードのいずれのサブツリーにあるかを判断するために、サブツリー展開識別を調べ得る。
【００４３】
同様に、ユーザはすべてを折畳むようにリクエストしてもよく、これによって、すべてのノードが折畳まれ始め得る。展開状態標識は、折畳みに設定されてもよく、個別の展開されたノードのリストが空になってもよい。ある実施形態では、サブツリー展開標識は削除されてもよい。
【００４４】
４．表示されるべきノードの識別
ある実施形態では、システムは、リクエストされたノードに基づいて表示されるべきノードを識別する。表示されるべきノードは、表示されるべきノードの階層ツリーの特定のセクションを表す。本明細書で言及されるノードの階層ツリーのセクションは、ノードの階層ツリー内の連続または非連続のセットを含み得る。
【００４５】
リクエストされたノードは通常、リクエストされたノードに直接または間接的に関連するノードと共に表示される。一例として、特定のノードのリクエストに応じて、特定のノードはディスプレイの中心に示されてもよい。システムはデフォルト設定で、リクエストされたノードの最大で５個の先祖、リクエストされたノードの２個の兄弟、およびゼロ個の子孫を表示するように構成され得る。５個の先祖ノードは、ノードの階層ツリー内のリクエストされたノードから最大で５つのレベルをトラバースすることによって求められてもよい。２個の兄弟は、兄弟の順序付けされたシーケンスにおけるリクエストされたノードの位置に基づいて求められてもよい。兄弟の順序付けされたシーケンスにおいてリクエストされたノードに続く２個のノードは、表示されるべき兄弟と識別されてもよい。最初に子孫を表示しないことは、折畳まれた状態のリクエストされたノードを最初に表示するようにシステムが構成されることを意味する。代替的な構成が、展開された状態でリクエストされたノードを表示可能である。一例として、リクエストされたノードの子孫の順序付けされたシーケンスの最初のｘ個の子孫が、リクエストされたノードの最初の表示と共に含まれてもよい。
【００４６】
ある実施形態では、システムは、特定の表示されたノードが展開されると、表示されるべきノードを識別する。特定のノードを展開するリクエストに応答して、システムは、表示されるべき子孫ノードの数を求める。一例として、システムは、展開されたノードの他の子孫ノードを表示することなく、最初の４個の子孫ノードを最初に表示するように構成され得る。他の子孫ノードの表示は、ユーザが子孫ノードのリストをスクロールダウンすることによってトリガされ得る。
【００４７】
ある実施形態では、ノードの階層ツリーの各ノードは、ディスプレイの別々の水平ライン上に表示され得る。ユーザは、以前に表示されていないノードの順序付きリスト内のより前のノードまでスクロールダウンしてもよい、または、以前に表示されていない順序付きリスト内でより後ろのノードを見るためにスクロールアップしてもよい。スクローリングの検出に応答して、システムは、ディスプレイに追加されるべき１つ以上のノード、および、ディスプレイに収まらなくなったためディスプレイから削除するべき１つ以上のノードを識別してもよい。
【００４８】
上述のように、表示されるべきノードは、表示ウインドウと関連付けられた構成に基づく特定の数のノードに制限される。一例として、ウインドウに表示可能なノードの数は、ウインドウのサイズおよび／または解像度、ウインドウ内の各ノードを表すアイコンのサイズ、ノード識別子のフォントサイズ、およびノード間の間隔の関数であり得る。システムはたとえば、リクエストされたノードと共に１０個のノードを表示可能であると判断し得る。優先順位および／またはポリシーに基づいて、システムは、表示されるべきノードとして、リクエストされたノードに関連するノードのうちの１０個のノードを選択し得る。
【００４９】
ある実施形態では、本明細書で説明したアプローチは、階層内の内部ノードの展開状態を考慮して、順序付きリスト内の特定のノードを有する表示ウインドウを埋めるためにノードの順序付きリストを効率的に作成する。表示ウインドウ内のいずれの場所も選択可能だが、特定のノードは、表示ウインドウの中心に置かれてもよい。表示されるノードの順序付きリストを作成する基本的なアプローチは、各ノードの展開状態に基づいて順序付きリストとして全階層を表現することでもよい。全階層は、事前に定義された順序で検索されてもよく、展開されていない内部ノードをリーフノードであるかのように扱う。すなわち、サブツリーのルートであるノードが展開されない場合、サブツリーは検索されない（かつ、サブツリールートの子ノードは、リストに含まれない）。特定のノードは、順序付きリストに位置してもよく、リスト内の特定のノードの前のノードの数、およびリスト内の特定のノードの後のノードの数が、表示のために選択されてもよい。特定のノードが表示ウインドウの中心に現れる場合、特定のノードの前後のノードの数は、表示ウインドウ内のラインの最大数のほぼ半分でもよい。しかしながら、数百万個のノードの階層では、特にユーザが「すべてのノードを展開」を選択している場合、全階層について順序付きリストを作成するのにあまりに時間がかかることがある。
【００５０】
順序付きリストを作成するより効率的なアプローチは、まず、階層内の特定のノードに最も近いサブツリーを検索し、表示リストを埋めるために必要とされるだけのさらに他の親戚まで検索を拡げることである。ある実施形態では、階層は、特定のノードの親ノードから表示するために、データ項目の所望の順序に対応する順序で検索されてもよい。前述のように、特定のノードが表示されるため、親ノードは展開されてもよい。順序付きリストを埋めるのに十分な特定のノードの兄弟ノードがある場合、さらなる検索は必要ではない。親ノードを探索することによって作成される順序付きリスト内のノードの数が表示リストを満たさない場合、順序付きリストが表示ウインドウを埋めるのに十分な数のノードを含むまで、祖父母ノードなどに対して検索が行われてもよい。
【００５１】
ある実施形態では、特定のノードの前に表示する１つのリスト、および特定のノードの後に表示する１つのリストの、２個の別の順序付きリストが作成され得る。各リストは、異なるサブツリーを検索することによって形成され得る。たとえば、特定のノードが順序付けられた兄弟ノードのセットの最後である場合、特定のノードの後に表示するノードのリストは、特定のノードの親ノードを探索するのではなく、異なる（叔母／叔父）サブツリーを検索することによって生じ得る。
【００５２】
５．プレースホルダを用いた作業
上述のような順序付きリストの作成は、ローカルキャッシュ内の階層の部分を用いて行い得る。サブツリーのノードの検索および順序付けの間に、存在するがキャッシュ内にない子ノードの連続したセットを示すプレースホルダに出会うことがある。検索を完了するために、プレースホルダによって示される複数のノードの少なくとも一部が、リモートマシンからフェッチされキャッシュに追加されてもよく、プレースホルダは、検索が継続する前に削除または変更されてもよい。ある実施形態では、プレースホルダによって示されるすべてのノードはフェッチされてもよく、プレースホルダは完全に除去されてもよい。ある実施形態では、プレースホルダによって示されるノードの一部がフェッチされてもよく、フェッチされるノードの数は、（ａ）プリフェッチ制限または（ｂ）表示可能な順序付きリスト内のノードの数を超えない。プレースホルダは、まだフェッチされていないノードを示すようにアップデート可能である。
【００５３】
ある実施形態では、ユーザが検索インターフェース内の選択されたノードの識別子を入力することによって表示するノードを選択する場合、選択されたノードは、まだキャッシュおよび／または展開されていないサブツリーに存在し得る。そのため、選択されたノードがランダムにアクセスされる場合、先祖ノードの展開状態の各々が展開に設定され得る。最近展開されたがキャッシュ内に示されていない子ノードは、フェッチおよびキャッシュされてもよい、または、子ノードが表示に必要と判断されるまでプレースホルダによって示されてもよい。
【００５４】
キャッシュのスペースがなくなると、キャッシュ内のノードは、キャッシュ管理ポリシーに従って退去するように選択されてもよく、退去するように選択されたノードは、キャッシュされた階層内のプレースホルダによって置換されてもよい。
【００５５】
６．リモートマシンからのノードのフェッチ
少なくとも１つのノードをリモートマシンから検索しなければならない場合、フェッチするノードの数は、複数の要素に応じて決まり得る。検索するノードの最低数は、表示リストを埋めるのに必要なノードの数である。この最低数のノードが、「表示されるべきノードの識別」というタイトルのセクション４で説明したような、表示されるべきノードである。連続したノードのグループが欠損している場合、連続したノードのグループ内のノードのすべてが同じリクエストでフェッチされてもよい。しかしながら、ノードのグループが表示リストを埋めるために必要で、かつ、ノードが順序付きリスト内で連続していない場合、ローカルマシンは、フェッチされる必要がある少なくとも１つのノードを含む複数の連続したノードをリクエストし得る。複数の連続したノードは、表示ウインドウに同時に表示可能なノードの数の関数として求めることができる。表示の目的で、順序付けされたシーケンスで必要なノードの数は、表示ウインドウに同時に表示可能なノードの数を超えない。そのうちの一部がすでにキャッシュされている連続したノードをフェッチすることは、共通のサブツリー内の非連続のプレースホルダについての個別のリクエストを送信するよりも効率的であり得る。
【００５６】
さらに、フェッチされるべきノードの数は、性能を考慮して求められ得る。リモートマシンに対するフェッチリクエストの数を減らすために、必要以上のノードを各フェッチリクエストに応答して送信し得る。表示されるべきノードは階層のノードの順序付きリスト内のノードの連続したセットでもよいが、表示されるノードの連続したセットの隣のさらに他のノードをプリフェッチしてもよい。結果として生じる表示ウインドウ内のノードのリストがスクロールされる場合、プリフェッチされたノードがすでにキャッシュ内にあってもよい。プリフェッチは、さらに他のノードの検索が性能に悪影響をもたらさないであろう場合に行われてもよい。その数は、実験によって求められ、システム内に構成されてもよい。代替的に、その数は現在の負荷に基づいてもよく、時間と共にダイナミックに変化してもよい。
【００５７】
７．コンピュータネットワークおよびクラウドネットワーク
１つまたは複数の実施形態では、コンピュータネットワークは、ノードのセットの間に接続性をもたらす。ノードは、互いに対してローカルおよび／またはリモートでもよい。ノードは、リンクのセットによって接続される。リンクの例は、同軸ケーブル、非シールドツイストケーブル、銅ケーブル、光ファイバ、および仮想リンクを含む。
【００５８】
ノードのサブセットは、コンピュータネットワークを実現する。そのようなノードの例は、スイッチ、ルータ、ファイアウォール、およびネットワークアドレス変換（ＮＡＴ）を含む。ノードの他のサブセットは、コンピュータネットワークを用いる。そのようなノード（「ホスト」とも呼ばれる）は、クライアント処理および／またはサーバ処理を実行し得る。クライアント処理は、コンピューティングサービス（特定のアプリケーションの実行、および／または特定の量のデータの格納など）をリクエストする。サーバ処理は、リクエストされたサービスを実行する、および／または対応するデータを戻すことによって応答する。
【００５９】
コンピュータネットワークは、物理リンクによって接続された物理ノードを含む物理ネットワークでもよい。物理ノードは、任意のデジタルデバイスである。物理ノードは、ハードウェアスイッチ、ハードウェアルータ、ハードウェアファイアウォール、およびハードウェアＮＡＴなど、機能特有のハードウェアデバイスでもよい。さらにまたは代替的に、物理ノードは、それぞれの機能を行うさまざまな仮想マシンおよび／またはアプリケーションを実行するように構成された汎用マシンでもよい。物理リンクは、２個以上の物理ノードを接続する物理媒体である。リンクの例は、同軸ケーブル、非シールドツイストケーブル、銅ケーブルおよび光ファイバを含む。
【００６０】
コンピュータネットワークは、オーバレイネットワークでもよい。オーバレイネットワークは、他のネットワーク（物理ネットワークなど）上で実現される論理ネットワークである。オーバレイネットワーク内の各ノードは、下位のネットワーク内のそれぞれのノードに対応する。したがって、オーバレイネットワーク内の各ノードは、（オーバレイノード宛ての）オーバレイアドレスと、（オーバレイノードを実現するアンダーレイノード宛ての）アンダーレイアドレスとの両方に関連付けられる。オーバレイノードは、デジタルデバイスおよび／またはソフトウェア処理（仮想マシン、アプリケーションインスタンス、またはスレッドなど）でもよい。オーバレイノードを接続するリンクは、アンダーレイネットワークを介してトンネルとして実現される。トンネルの両側のオーバレイノードは、それらの間の下位のマルチホップ経路を１つの論理リンクとして扱う。トンネリングは、カプセル化および非カプセル化によって行われる。
【００６１】
ある実施形態では、クライアントは、コンピュータネットワークに対してローカルおよび／またはリモートであり得る。クライアントは、プライベートネットワークまたはインターネットなどの他のコンピュータネットワークで、コンピュータネットワークにアクセスし得る。クライアントは、ハイパーテキスト転送プロトコル（ＨＴＴＰ）などの通信プロトコルを用いて、コンピュータネットワークにリクエストを伝達し得る。リクエストは、クライアントインターフェース（ウェブブラウザなど）、プログラムインターフェース、またはアプリケーションプログラミングインターフェース（ＡＰＩ）などのインターフェースを介して伝達される。
【００６２】
ある実施形態では、コンピュータネットワークは、クライアントとネットワークリソースとの間に接続性をもたらす。ネットワークリソースは、サーバ処理を実行するように構成されたハードウェアおよび／またはソフトウェアを含む。ネットワークリソースの例は、プロセッサ、データ記憶装置、仮想マシン、コンテナ、および／またはソフトウェアアプリケーションを含む。ネットワークリソースは、複数のクライアントの間で共有される。クライアントは、互いに独立してコンピュータネットワークにコンピューティングサービスをリクエストする。ネットワークリソースは、オンデマンドでリクエストおよび／またはクライアントにダイナミックに割当てられる。各リクエストおよび／またはクライアントに割当てられたネットワークリソースは、たとえば、（ａ）特定のクライアントがリクエストするコンピューティングサービス、（ｂ）特定のテナントがリクエストする集合コンピューティングサービス、および／または（ｃ）コンピュータネットワークがリクエストする集合コンピューティングサービスに基づいて、スケールアップまたはダウンされてもよい。そのようなコンピュータネットワークは、「クラウドネットワーク」と呼ばれることもある。
【００６３】
ある実施形態では、サービスプロバイダは、１つ以上のエンドユーザにクラウドネットワークを提供する。サービスとしてのソフトウェア（ＳａａＳ）、サービスとしてのプラットフォーム（ＰａａＳ）、およびサービスとしてのインフラストラクチャ（ＩａａＳ）を含むがこれらに限定されないさまざまなサービスモデルが、クラウドネットワークによって実現可能である。ＳａａＳでは、サービスプロバイダは、エンドユーザに、ネットワークリソースで実行しているサービスプロバイダのアプリケーションを用いる能力を与える。ＰａａＳでは、サービスプロバイダは、カスタムアプリケーションをネットワークリソースに展開する能力を与える。カスタムアプリケーションは、プログラミング言語、ライブラリ、サービス、およびサービスプロバイダがサポートするツールを用いて作成可能である。ＩａａＳでは、サービスプロバイダは、エンドユーザに、プロセシング、記憶装置、ネットワーク、およびネットワークリソースが提供する他の基本的なコンピューティングリソースを供給する能力を与える。オペレーティングシステムを含む任意のアプリケーションが、ネットワークリソースで展開されてもよい。
【００６４】
ある実施形態では、プライベートクラウド、パブリッククラウド、およびハイブリッドクラウドを含むがこれらに限定されないさまざまな展開モデルが、コンピュータネットワークによって実現可能である。プライベートクラウドでは、ネットワークリソースは、１つ以上のエンティティ（本明細書で用いられる「エンティティ」という用語は、企業、組織、人、または他のエンティティのことを言う）の特定のグループによる排他的使用のために提供される。ネットワークリソースは、エンティティの特定のグループの敷地に対してローカルおよび／またはリモートでもよい。パブリッククラウドでは、クラウドリソースは、互いに独立した複数のエンティティ（「テナント」または「顧客」とも言う）のために供給される。コンピュータネットワークおよびそのネットワークリソースは、異なるテナントに対応するクライアントによってアクセスされる。そのようなコンピュータネットワークは、「マルチテナントコンピュータネットワーク」と呼ばれることもある。複数のテナントは、異なる時間および／または同じ時間に同じ特定のネットワークリソースを用い得る。ネットワークリソースは、テナントの敷地に対してローカルおよび／またはリモートでもよい。ハイブリッドクラウドでは、コンピュータネットワークは、プライベートクラウドおよびパブリッククラウドを含む。プライベートクラウドとパブリッククラウドとの間のインターフェースによって、データおよびアプリケーション可搬性がもたらされる。プライベートクラウドに格納されたデータおよびパブリッククラウドに格納されたデータは、インターフェースを介して交換可能である。プライベートクラウドで実現されるアプリケーションおよびパブリッククラウドで実現されるアプリケーションは、互いに依存し得る。プライベートクラウドにおけるアプリケーションからパブリッククラウドにおけるアプリケーションへの呼出しは（逆の場合も同じ）、インターフェースを介して実行可能である。
【００６５】
ある実施形態では、マルチテナントコンピュータネットワークのテナントは、互いに独立している。たとえば、１つのテナントのビジネスまたはオペレーションは、他のテナントのビジネスまたはオペレーションとは別でもよい。異なるテナントは、コンピュータネットワークについて異なるネットワーク要件を要求してもよい。ネットワーク要件の例は、処理速度、データ格納量、セキュリティ要件、性能要件、スループット要件、レイテンシ要件、回復力要件、サービス品質（ＱｏＳ）要件、テナント分離、および／または一貫性を含む。同じコンピュータネットワークは、異なるテナントが要求する異なるネットワーク要件を実現しなければならない場合がある。
【００６６】
１つまたは複数の実施形態では、マルチテナントコンピュータネットワークにおいて、テナントの分離は、異なるテナントのアプリケーションおよび／またはデータが互いに共有されないことを保証するために実現される。さまざまなテナント分離アプローチを使用可能である。
【００６７】
ある実施形態では、各テナントは、テナントＩＤと関連付けられる。マルチテナントコンピュータネットワークの各ネットワークリソースには、テナントＩＤのタグが付けられる。テナントは、テナントおよび特定のネットワークリソースが同じテナントＩＤと関連付けられている場合に限り、特定のネットワークリソースへのアクセスが許可される。
【００６８】
ある実施形態では、各テナントはテナントＩＤと関連付けられる。コンピュータネットワークによって実現される各アプリケーションには、テナントＩＤのタグが付けられる。さらにまたは代替的に、コンピュータネットワークによって格納される各データ構造および／またはデータセットには、テナントＩＤのタグが付けられる。テナントは、テナントと特定のアプリケーション、データ構造、および／またはデータセットが同じテナントＩＤと関連付けられている場合に限り、特定のアプリケーション、データ構造、および／またはデータセットへのアクセスが許可される。
【００６９】
一例として、マルチテナントコンピュータネットワークによって実現される各データベースには、テナントＩＤのタグが付けられてもよい。対応するテナントＩＤと関連付けられたテナントのみが、特定のデータベースのデータにアクセス可能である。他の例として、マルチテナントコンピュータネットワークによって実現されるデータベース内の各エントリには、テナントＩＤのタグが付けられてもよい。対応するテナントＩＤと関連付けられたテナントのみが、特定のエントリのデータにアクセス可能である。しかしながら、データベースは複数のテナントによって共有されてもよい。
【００７０】
ある実施形態では、サブスクリプションリストは、どのテナントがどのアプリケーションにアクセスする権限を有するかを示す。アプリケーションごとに、アプリケーションへのアクセスが許可されたテナントのテナントＩＤのリストが格納される。テナントは、テナントのテナントＩＤが特定のアプリケーションに対応するサブスクリプションリストに含まれている場合に限り、特定のアプリケーションへのアクセスが許可される。
【００７１】
ある実施形態では、異なるテナントに対応するネットワークリソース（デジタルデバイス、仮想マシン、アプリケーションインスタンス、およびスレッドなど）は、マルチテナントコンピュータネットワークによって保持されるテナント特有のオーバレイネットワークに対して隔離される。一例として、テナントオーバレイネットワーク内の任意のソースデバイスからのパケットは、同じテナントオーバレイネットワーク内の他のデバイスに送信されるだけでもよい。カプセル化トンネルが、テナントオーバレイネットワーク上のソースデバイスから他のテナントオーバレイネットワーク内のデバイスへのいかなる送信も禁止するように使用される。具体的に、ソースデバイスから受信されたパケットは、外部パケット内でカプセル化される。外部パケットは、（テナントオーバレイネットワーク内のソースデバイスと通信している）第１のカプセル化トンネルエンドポイントから（テナントオーバレイネットワーク内の宛先デバイスと通信している）第２のカプセル化トンネルエンドポイントへと送信される。第２のカプセル化トンネルエンドポイントは、ソースデバイスが送信するオリジナルパケットを取得するために、外部パケットの非カプセル化を行う。オリジナルパケットは、同じ特定のオーバレイネットワーク内の第２のカプセル化トンネルエンドポイントから宛先デバイスに送信される。
【００７２】
８．ハードウェアの概要
ある実施形態によると、本明細書で説明される技術は、１つ以上の専用コンピューティングデバイスによって実現される。専用コンピューティングデバイスは、これらの技術を行うためにハードワイヤードされてもよい、または、１つ以上の特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、もしくはこれらの技術を行うように永続的にプログラムされたネットワーク処理ユニット（ＮＰＵ）などのデジタル電子デバイスを含んでもよい、または、ファームウェア、メモリ、他の記憶装置、もしくは組合わせにおいてプログラム命令に従ってこれらの技術を行うようにプログラムされた１つ以上の汎用ハードウェアプロセッサを含んでもよい。そのような専用コンピューティングデバイスはまた、これらの技術を達成するために、カスタムハードワイヤードロジック、ＡＳＩＣ、ＦＰＧＡ、またはＮＰＵをカスタムプログラミングと組合わせてもよい。専用コンピューティングデバイスは、デスクトップコンピュータシステム、携帯コンピュータシステム、ハンドヘルドデバイス、ネットワーキングデバイス、またはこれらの技術を実現するためにハードワイヤードおよび／もしくはプログラムロジックを組込む他のデバイスでもよい。
【００７３】
たとえば、図３は、本発明の実施形態を実現可能なコンピュータシステム３００を示すブロック図である。コンピュータシステム３００は、情報を伝達するためのバス３０２または他の通信メカニズム、および情報を処理するためにバス３０２と連結されたハードウェアプロセッサ３０４を備える。ハードウェアプロセッサ３０４は、たとえば汎用マイクロプロセッサでもよい。
【００７４】
コンピュータシステム３００はまた、情報およびプロセッサ３０４によって実行されるべき命令を格納するためにバス３０２に連結された、ランダムアクセスメモリ（ＲＡＭ）または他の動的記憶装置などの、メインメモリ３０６を備える。メインメモリ３０６は、プロセッサ３０４によって実行されるべき命令の実行中に一時的な変数または他の中間情報を格納するために用いることもできる。そのような命令は、プロセッサ３０４がアクセス可能な非一時的記憶媒体に格納されると、コンピュータシステム３００を、命令で指定される動作を行うようにカスタマイズされた専用マシンにする。
【００７５】
コンピュータシステム３００はさらに、読出し専用メモリ（ＲＯＭ）３０８またはプロセッサ３０４のための静的情報および命令を格納するためにバス３０２に連結された他の静的記憶装置を備える。磁気ディスクまたは光学ディスクなどのストレージデバイス３１０は、情報および命令を格納するためにバス３０２に設けられ連結される。
【００７６】
コンピュータシステム３００は、ブラウン管（ＣＲＴ）など、情報をコンピュータユーザに表示するためのディスプレイ３１２にバス３０２を介して連結されてもよい。英数字キーおよび他のキーを含む入力デバイス３１４が、情報および指令選択をプロセッサ３０４に伝達するためにバス３０２に連結される。他の種類のユーザ入力デバイスは、方向情報および指令選択をプロセッサ３０４に伝達し、かつ、ディスプレイ３１２上でのカーソルの移動を制御するためのマウス、トラックボール、またはカーソル方向キーなどの、カーソルコントロール３１６である。この入力デバイスは典型的に、デバイスが平面における位置を指定可能な第１の軸（たとえばｘ）および第２の軸（たとえばｙ）の２つの軸において２自由度を有する。
【００７７】
コンピュータシステム３００は、カスタマイズされたハードワイヤードロジック、１つ以上のＡＳＩＣもしくはＦＰＧＡ、ファームウェア、および／または、コンピュータシステムと組合わせてコンピュータシステム３００を専用マシンにするまたはプログラムするプログラムロジックを用いて、本明細書で説明された技術を実現可能である。一実施形態によると、本明細書の技術は、プロセッサ３０４がメインメモリ３０６に含まれる１つ以上の命令の１つ以上のシーケンスを実行することに応答して行われる。そのような命令は、ストレージデバイス３１０など、他の記憶媒体からメインメモリ３０６に読込まれ得る。メインメモリ３０６に含まれる命令のシーケンスの実行によって、プロセッサ３０４は、本明細書で説明されるプロセスステップを行う。代替的な実施形態では、ハードワイヤード回路がソフトウェア命令の代わりに、またはこれと組合わせて用いられてもよい。
【００７８】
本明細書で用いられる「記憶媒体」という用語は、データおよび／またはマシンを特有の態様で動作させる命令を格納する任意の非一時的媒体のことを言う。そのような記憶媒体は、不揮発性媒体および／または揮発性媒体を含み得る。不揮発性媒体はたとえば、ストレージデバイス３１０などの、光学ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ３０６などのダイナミックメモリを含む。通常の形態の記憶媒体はたとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープ、または任意の他の磁気データ記憶媒体、ＣＤ−ＲＯＭ、任意の他の光学データ記憶媒体、穴のパターンを有する任意の物理的な媒体、ＲＡＭ、ＰＲＯＭ、およびＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、ＮＶＲＡＭ、任意の他のメモリチップもしくはカートリッジ、連想メモリ（ＣＡＭ）、および３値連想メモリ（ＴＣＡＭ）を含む。
【００７９】
記憶媒体は、伝送媒体とは別個だが一緒に用いることが可能である。伝送媒体は、記憶媒体間の情報の転送に関係する。たとえば、伝送媒体は、バス３０２を含むワイヤを含む、同軸ケーブル、銅線および光ファイバを含む。送信媒体はまた、電波および赤外線データ通信中に生成されるもののような、音波または光波の形態をとり得る。
【００８０】
さまざまな形態の媒体が、１つ以上の命令の１つ以上のシーケンスをプロセッサ３０４に運んで実行することに関与し得る。たとえば、命令は最初は、リモートコンピュータの磁気ディスクまたはソリッドステートドライブ上に運ばれ得る。リモートコンピュータは、そのダイナミックメモリに命令をロードし、モデムを用いて電話線で命令を送信可能である。コンピュータシステム３００にローカルなモデムは、電話線でデータを受信し、赤外線送信機を用いてデータを赤外線信号に変換可能である。赤外線検出器は、赤外線信号で運ばれるデータを受信可能であり、好適な回路は、データをバス３０２上に置くことが可能である。バス３０２は、プロセッサ３０４が命令を検索し実行するメインメモリ３０６にデータを運ぶ。メインメモリ３０６が受信する命令を、プロセッサ３０４による実行の前または後のどちらかにストレージデバイス３１０に任意に格納してもよい。
【００８１】
コンピュータシステム３００はまた、バス３０２に連結された通信インターフェース３１８を備える。通信インターフェース３１８は、ローカルネットワーク３２２に接続されたネットワークリンク３２０に、２方向データ通信結合を提供する。たとえば、通信インターフェース３１８は、サービス総合デジタル網（ＩＳＤＮ）カード、ケーブルモデム、衛星モデム、またはデータ通信接続を対応する種類の電話線に提供するためのモデムでもよい。他の例として、通信インターフェース３１８は、データ通信接続を互換性のあるＬＡＮに提供するためのローカルエリアネットワーク（ＬＡＮ）でもよい。無線リンクも実現可能である。そのような実現例において、通信インターフェース３１８は、さまざまな種類の情報を示すデジタルデータストリームを運ぶ電気信号、電磁信号または光学信号を送受信する。
【００８２】
ネットワークリンク３２０は典型的に、１つ以上のネットワークを介して他のデータデバイスにデータ通信を提供する。たとえば、ネットワークリンク３２０は、ローカルネットワーク３２２を介してホストコンピュータ３２４に、またはインターネットサービスプロバイダー（ＩＳＰ）３２６によって作動されるデータ機器に、接続を提供し得る。これを受けてＩＳＰ３２６は、現在一般に「インターネット」３２８と呼ばれるワールドワイドパケットデータ通信ネットワークを介して、データ通信サービスを提供する。ローカルネットワーク３２２およびインターネット３２８は両方とも、デジタルデータストリームを運ぶ電気信号、電磁信号または光学信号を用いる。コンピュータシステム３００に対して、およびこれからデジタルデータを運ぶ、さまざまなネットワークを介する信号およびネットワークリンク３２０上で通信インターフェース３１８を介する信号は、伝送媒体の形態の例である。
【００８３】
コンピュータシステム３００は、ネットワーク（複数可）、ネットワークリンク３２０および通信インターフェース３１８を介して、メッセージの送信およびプログラムコードを含むデータの受信が可能である。インターネットの例では、サーバ３３０は、インターネット３２８、ＩＳＰ３２６、ローカルネットワーク３２２および通信インターフェース３１８を介して、アプリケーションプログラムについてリクエストされるコードを送信してもよい。
【００８４】
受信されたコードは、受信されるとプロセッサ３０４によって実行されてもよい、および／または、ストレージデバイス３１０、もしくは後で実行するために他の不揮発性記憶装置に格納されてもよい。
【００８５】
実施形態は、ハードウェアプロセッサを含み、本明細書で説明されたおよび／または以下の請求項のいずれかに記載された動作のいずれかを行うように構成された１つ以上のデバイスを有するシステムに向けられる。
【００８６】
ある実施形態では、非一時的コンピュータ可読記憶媒体は、１つ以上のハードウェアプロセッサによって実行されると、本明細書で説明された、および／または請求項のいずれかに記載された動作のいずれかを実施させる命令を含む。
【００８７】
本明細書で説明された特徴と機能性との任意の組合せが、１つ以上の実施形態に従って用いられてもよい。前述の明細書では、実施形態は、実現例によって変わり得る多くの具体的詳細を参照して説明されてきた。したがって、明細書および図面は、限定的な意味ではなく例示的な意味で考慮されるべきである。この発明の範囲の唯一かつ排他的な指標、および、出願人が意図するこの発明の範囲は、本願から生じる１組の請求項の、そのような請求項が生じる特定形態での、その後のあらゆる補正を含む、文言上のかつ同等の範囲である。
【図１Ａ】
2021535462.tif 000003
【図１Ｂ】
2021535462.tif 000004
【図１Ｃ】
2021535462.tif 000005
【図２】
2021535462.tif 000006
【図３】
2021535462.tif 000007
【国際調査報告】
2021535462.tif 000008
2021535462.tif 000009