(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-15
(45)【発行日】2023-12-25
(54)【発明の名称】ステートレスアプリケーションにおいてほぼ一定時間に大きな階層のブラウズおよびランダムアクセスを行うこと
(51)【国際特許分類】
G06F 16/28 20190101AFI20231218BHJP
【FI】
G06F16/28
(21)【出願番号】P 2021506311
(86)(22)【出願日】2019-05-13
(86)【国際出願番号】 US2019031939
(87)【国際公開番号】W WO2020033023
(87)【国際公開日】2020-02-13
【審査請求日】2022-04-12
(32)【優先日】2018-08-07
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-03-27
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ガーグ,アヌラグ
(72)【発明者】
【氏名】ウッダード,ジェフリー・レオン
【審査官】三橋 竜太郎
(56)【参考文献】
【文献】米国特許出願公開第2016/0321287(US,A1)
【文献】特開2012-133772(JP,A)
【文献】米国特許出願公開第2018/0059990(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
命令を有したプログラムであって、前記命令は、1つ以上のハードウェアプロセッサによって実行されると、前記1つ以上のハードウェアプロセッサに方法を実行させ、前記方法は、
リモートマシン上にあるノードの階層ツリーの第1のセクション内のノードの第1のサブセットを、表示ウインドウに表示することと、
前記ノードの階層ツリー内の目標ノードを表示するためのリクエストを受信することとを含み、前記目標ノードは、前記リクエストが受信されるときに表示されず、前記方法はさらに、
前記ノードの階層ツリーを分析して、前記ノードの階層ツリー内の前記目標ノードと1つ以上の他のノードとの間の関係を求めることと、
前記関係および前記表示ウインドウに対応する構成とに基づいて、(a)前記目標ノードを表示しているときに、前記ノードの階層ツリー内の前記目標ノードとノードの第2のサブセットとを含む、前記階層ツリーの第2のセクションが前記表示ウインドウに表示され、かつ、(b)前記目標ノードを表示しているときに、前記ノードの階層ツリー内のノードの第3のサブセットを含む、前記階層ツリーの第3のセクションが前記表示ウインドウに表示されない、と判断することと、
前記目標ノードを表示しているときに前記第2のセクションが前記表示ウインドウに表示され、かつ、前記目標ノードを表示しているときに前記第3のセクションが表示されないという判断に応答して、
前記ノードの階層ツリーの前記第3のセクションに含まれる前記ノードの第3のサブセットをフェッチすることなく、前記リモートマシンから、前記ノードの階層ツリーの前記第2のセクションに含まれる前記目標ノードおよび前記ノードの第2のサブセットをフェッチすることと、
前記ノードの階層ツリーの前記第3のセクション内の前記ノードの第3のサブセットを表示することなく、前記ノードの階層ツリーの前記第2のセクション内の前記目標ノードおよび前記ノードの第2のサブセットを同時に表示することとを含む、プログラム。
【請求項2】
前記方法はさらに、前記目標ノードの1つ以上の先祖ノードをフェッチすることを含み、前記1つ以上の先祖ノードは、前記リモートマシンからフェッチされておらず、前記ノードの階層ツリーの前記第2のセクション内の前記目標ノードと共に表示されない、請求項1に記載のプログラム。
【請求項3】
前記方法はさらに、キャッシュされたノードの第2の階層を保持することを含み、キャッシュされた前記ノードの第2の階層内のキャッシュされた各ノードは、前記リモートマシン上の前記ノードの階層ツリー内のノードに対応し、前記リモートマシン上の前記ノードの階層ツリーは、キャッシュされた前記ノードの第2の階層に示されていないノードを含み、前記方法はさらに、
前記リモートマシンからフェッチされ
た1つ以上のノードのうちの特定のノードを、キャッシュされた前記ノードの第2の階層においてキャッシュすることと、
前記特定のノードがキャッシュされた前記ノードの第2の階層においてキャッシュされていない子ノードを有する内部ノードであるという判断に応答して、前記特定のノードと関連付けてプレースホルダを作成することとをを含み、前記プレースホルダは、前記子ノードがキャッシュされた前記ノードの第2の階層から欠損していることを示す、請求項1または2に記載のプログラム。
【請求項4】
前記特定のノードは子ノードの順序付けされたシーケンスを有し、前記子ノードの順序付けされたシーケンスで連続する複数の子ノードはキャッシュされず、
前記特定のノードと関連付けて作成された前記プレースホルダは、前記子ノードの順序付けされたシーケンス内の前記連続する複数の子ノードが、キャッシュされた前記ノードの第2の階層から欠損していると示す、請求項3に記載のプログラム。
【請求項5】
前記リモートマシンからフェッチされた前記1つ以上のノードのうちの前記特定のノードをキャッシュすることはさらに、前記特定のノードについての展開状態標識の値をデフォルト値に設定することを含み、
前記特定のノードの状態が展開であると示す値によって、前記特定のノードの子ノードが前記特定のノードに隣接して表示され、
前記特定のノードの状態が折畳みであると示す値によって、前記特定のノードは、前記特定のノードの子ノードを表示することなく表示される、請求項3に記載のプログラム。
【請求項6】
前記方法はさらに、
前記ノードの階層ツリー内のすべてのノードを展開するリクエストを受信することと、
前記ノードの階層ツリー内のすべてのノードを展開するリクエストの受信に応答して、グローバル展開状態標識の値を、前記ノードの階層ツリー内のノードを表すすべてのノードが展開と表示されると示すように設定することと、
前記リクエストが受信されると、表示されたノードが表示されており、表示された前記ノードの子ノードが表示されていないと判断することと、
表示されていない他のノードの子ノードをフェッチすることなく、前記キャッシュから欠損している表示された前記ノードの1つ以上の子ノードをフェッチすることと、
表示された前記ノードのリストを、前記特定のノードの前記子ノードの一部を含むように変更することと、
フェッチされた前記1つ以上の子ノードを、キャッシュされた前記ノードの第2の階層に追加することとを含む、請求項3に記載のプログラム。
【請求項7】
前記方法はさらに、フェッチに先立って、
(a)キャッシュされた前記ノードの第2の階層内のキャッシュされたノード、
(b)プリフェッチされると判断された前記ノードの階層ツリー内のノードの数、および
(c)前記目標ノードと共に表示されるべきノードについての展開状態標識、
に基づいて、フェッチする前記1つ以上のノードを判断することを含む、請求項3に記載のプログラム。
【請求項8】
前記リモートマシンは、
(a)どのノードがリクエスタに送信されたか、または
(b)前記リクエスタによって保持される、キャッシュされた前記ノードの第2の階層の状態、をトラッキングすることなく、前記ノードの階層ツリー内のノードに対するリクエストに応答する、請求項3に記載のプログラム。
【請求項9】
前記ノードの階層ツリー内の各ノードは、ゼロ個以上の子ノードの順序付けされたシーケンスを有し、
前記子ノードの順序付けされたシーケンスの1つ以上の子ノードが、それらのシーケンス順で表示され、
前記ノードの第1のサブセットの1つ以上のノードが前記目標ノードと共に表示されると判断することはさらに、
前記目標ノードを含むノードの順序付きリストを生成することを含み、展開されていないノードの子ノードは、前記ノードの順序付きリストから省略され、さらに、
前記ノード内の順序付きリスト内の隣接するノードを選択することを含み、
選択された前記隣接するノードは、前記目標ノードを含み、
前記隣接するノードの数は、一緒に表示可能なノードの数に基づく、請求項1に記載のプログラム。
【請求項10】
前記フェッチすることはさらに、前記ノードの階層ツリー内の前記ノードの第2のサブセットに隣接するノードの第4のサブセットをフェッチすることを含み、前記ノードの第4のサブセットは、前記目標ノードと一緒に表示されない、請求項1に記載のプログラム。
【請求項11】
前記方法はさらに、
キャッシュされたノードの第2の階層を保持することを含み、キャッシュされた前記ノードの第2の階層内のキャッシュされた各ノードは、前記リモートマシン上の前記ノードの階層ツリー内のノードに対応し、前記リモートマシン上の前記ノードの階層ツリーは、キャッシュされた前記ノードの第2の階層に示されないノードを含み、
前記リモートマシンは、
(a)どのノードがリクエスタに送信されたか、または、
(b)前記リクエスタによって保持される、キャッシュされた前記ノードの第2の階層の状態、をトラッキングすることなく、前記ノードの階層ツリー内のノードをフェッチするリクエストに応答し、前記方法はさらに、
キャッシュされた前記ノードの第2の階層内の前記目標ノードをキャッシュすることと、
前記目標ノードが子ノードの順序付けされたシーケンスを有する内部ノードであり、前記子ノードの順序付けされたシーケンスにおいて連続している複数の子ノードがキャッシュされた前記ノードの第2の階層においてキャッシュされていないという判断に応答して、前記目標ノードと関連付けてプレースホルダを作成することを含み、前記プレースホルダは、前記複数の子ノードがキャッシュされた前記ノードの第2の階層から欠損していると示し、前記方法はさらに、
前記目標ノードがキャッシュされると、前記目標ノードについて、前記目標ノードについての展開状態標識の値を、展開または折畳みのデフォルト値に設定することを含み、前記展開状態標識が展開の値を有する場合、前記目標ノードの少なくとも1つの子ノードが、前記目標ノードと共に前記表示ウインドウに表示され、前記展開状態標識が折畳みの値を有する場合、子ノードは前記目標ノードと共に前記表示ウインドウに表示されず、
前記ノードの第2のサブセット内の前記ノードは、
(a)キャッシュされた前記ノードの第2の階層内のキャッシュされたノード、
(b)プリフェッチすると判断された前記ノードの階層ツリー内のノードの数、および
(c)前記目標ノードについての前記展開状態標識、
に基づいて判断され、
前記ノードの階層ツリー内の各ノードは、ゼロ個以上の子ノードの順序付けされたシーケンスを有し、前記方法はさらに、
前記目標ノードについての前記展開状態標識が展開の値を有する場合、前記ゼロ個以上の子ノードの順序付けされたシーケンスが続く前記目標ノードを含むノードの順序付きリストを作成することを含み、前記目標ノードについての前記展開状態標識が折畳みの値を有する場合、前記ゼロ個以上の子ノードのシーケンスは、前記ノードの順序付きリストから省略され、前記方法はさらに、
前記ノードの順序付きリストにおいて連続したノードのセットを表示するために選択することを含み、
選択された前記連続したノードは、前記目標ノードを含み、
前記連続したノードの数は、一緒に表示可能なノードの数に基づき、前記方法はさらに、
選択された前記連続したノードのセットを表示することと、
前記ノードの階層ツリー内のすべてのノードを展開するリクエストを受信することと、
前記ノードの階層ツリー内のすべてのノードを展開するリクエストの受信に応答して、
キャッシュされた前記ノードの第2の階層と関連付けられたグローバル展開状態標識の値を、前記ノードの階層ツリー内のすべてのノードが展開と表示されることを示すように設定することと、
折畳みの値を有する、表示された前記ノードの前記展開状態標識に基づいて、前記ノードの順序付きリストが、前記ノードの順序付きリストから省略された子ノードを有する、表示されたノードを含むと判断することと、
表示されていない他のノードの子ノードをフェッチすることなく、前記キャッシュから欠損している表示された前記ノードの1つ以上の子ノードをフェッチすることと、
フェッチされた前記1つ以上の子ノードを、キャッシュされた前記ノードの第2の階層に追加することと、
前記表示ウインドウ内の表示を、表示された前記ノードのフェッチされた前記1つ以上の子ノードの一部を含むように変更することとを含む、請求項1に記載のプログラム。
【請求項12】
方法であって
、請求項1~
11のいずれか1項に記載の方法。
【請求項13】
システムであって、
プロセッサを含む少なくとも1つのハードウェアデバイスとを備え、
前記システムは、請求項1~
11のいずれか1項に記載の方法を行うように構成され
る、システム。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本開示は、階層データをブラウズするためのさまざまな技術に関する。本開示は具体的に、きわめて大きなノードの階層からランダムに選択されたノードの小さなサブネットを表示するための応答時間を効率的に改善することに向けられる。
【背景技術】
【0002】
背景
リモートマシンによって保持されるデータをブラウズするためのいくつかのアプローチがある。リモートデータの小さなセットをブラウズする場合、ブラウザは、ブラウジングセッション中にさらに他のデータの検索が必要にならないように、ブラウジングの始めに全データセットのダウンロードおよびキャッシュが可能である。しかしながら、データセットは約百万のエントリを有しているので、全データセットは大きすぎてローカルキャッシュに収まらない場合がある。たとえデータセットがローカルキャッシュに収まっても、データセットのわずかな部分にしかアクセスしない場合に全データセットを検索するのは非効率な場合がある。ユーザがスクロールダウンする際にのみデータをロードする一般的なアプローチでは、最初に先行するノードをすべてロードすることなしに階層のいかなる領域も表示することはできない。
【発明の概要】
【課題を解決するための手段】
【0003】
フェッチおよびキャッシュ管理ストラテジは、リモートに格納されたデータセットから検索された、ローカルに格納されたデータにアクセスするために用いることが可能である。一例では、ブラウザが、「線形」データをブラウズするためにスクロールインターフェースを提供する。本明細書で用いられる「線形データ」は、相対的順序を有する(たとえば、入力順の、アルファベット順の、または番号順の)データアイテムのことを言う。相対的順序は、どのデータアイテムが他のデータアイテムのすぐ隣にあるかを示す。データのリストが、相対的順序に従って表示される。
【0004】
このセクションで説明するアプローチは追求可能なアプローチだが、必ずしも、既に考えられている、または追求されているアプローチではない。そのため、別段の指示がない限り、このセクションで説明されるアプローチはいずれも、単にこのセクションに含まれているというだけで、従来技術に適していると仮定されるべきではない。
【0005】
添付図面の図において、実施形態が、限定のためではなく例示のために図示される。なお、この開示における「ある」または「1つの」実施形態への言及は、必ずしも同じ実施形態への言及ではなく、少なくとも1つという意味である。
【図面の簡単な説明】
【0006】
【
図1A】1つまたは複数の実施形態に係る、システムの構成要素を示すブロック図である。
【
図1B】1つまたは複数の実施形態に係る、ノードの階層122をより詳細に示す図である。
【
図1C】1つまたは複数の実施形態に係る、
図1Bに示すデータの階層ツリー内のノードに対応するノードのローカルキャッシュを示す図である。
【
図2】1つまたは複数の実施形態に係る、目標ノードの検索および表示を示すフローチャートである。
【
図3】1つまたは複数の実施形態に係るコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【0007】
ブロック図の構成要素およびフローチャートの動作は、追加、削除、修正、または組合わせが可能である。1つの構成要素/動作に関して説明する機能は代わりに、他の構成要素/動作によって実現可能である。したがって、本明細書で図示および/または説明される具体的な構成要素/動作は、請求項のいずれかの範囲を制限すると解釈されるべきではない。
【0008】
詳細な説明
以下の記載では、説明の目的で、十分な理解を提供するために多数の具体的詳細が述べられる。これらの具体的詳細がなくても、1つまたは複数の実施形態が実践され得る。一実施形態で説明される特徴は、異なる実施形態で説明される特徴と組合されてもよい。いくつかの例では、周知の構造および装置は、本発明を不必要に不明瞭にしないように、ブロック図の形態を参照して説明される。
【0009】
1.全体的概要
大きな階層データセットを、数千またはさらには数百万個のノードによって視覚的に表すことが可能である。階層データに対応する視覚表示(たとえばノード)を表示するシステムは、階層データを含むデータストアからリモートに実現可能である。1つ以上の実施形態は、階層データがリモートに格納されているにもかかわらずまるでローカルに格納されているかのように、階層データのサブセットに対応する要求されたノードを、大幅な遅延時間を生じることなく呈示することを目的とする。
【0010】
システムは、階層データの全体を表すすべてのノードをフェッチするのではなく、表示されるべきノードをフェッチする。一例として、インターフェースは、視覚表現のセクションを表示し、ユーザが視覚表現の特定の非表示セクションに向かってスクロールできるようにする。スクロールに基づいて、特定の非表示セクションは、ここで表示されるべきノードに対応する。他の例として、インターフェースによって、ユーザは、ディスプレイに表示されておらず、かつ、現在表示されているデータの適切なスクロール距離内に存在しない階層内の個別のノードを(すなわち、ランダムアクセスによって)識別できる。ユーザが指定したノードを受信すると、指定されたノードおよび指定されたノードに関連するノードが表示される。
【0011】
現在表示されていないノードを表示させるユーザ入力の検出に続いて、およびこれに応答して、システムは、階層データの全体に対応するノードをフェッチすることなく、特定の非表示セクションに対応するノードをフェッチする。表示されるべきノードのサブセットの識別およびフェッチは、階層データの全体に対応する視覚表示のすべてのノードのフェッチと比べると早い。ノードのサブセットをフェッチおよび表示する速度は、ユーザの視点では、ローカルに格納されたノードがユーザのリクエストに応答して表示される速度に十分類似し得る。
【0012】
表示されるべきノードのフェッチに加えて、1つ以上の実施形態では、表示されるべきノードのセットに関連するおよび/または隣接するさらに他のノードがプリフェッチされる。
【0013】
初期のユーザ入力ではさらに他のノードが表示されない一方で、さらに他のユーザ入力(たとえば、特定のノードおよび特定のノードと共に表示されるノードのセットの初期表示からのスクロール)によって、さらに他の隣接するノードが表示され得る。リクエストされる場合、さらに他の隣接するノードを素早く表示しつつ、ノードのセット全体をフェッチせずにさらに他の隣接するノードをフェッチすることが効率的である。
【0014】
本明細書で説明される、および/または請求項に記載される複数の実施形態が、この全体的概要のセクションに含まれない場合もある。
【0015】
2.階層データをブラウズするためのアーキテクチャ
ツリーブラウザによって、ユーザは階層データをブラウズ可能である。階層からのノードが表示ウインドウに順序付けされたシーケンスで表示される実施形態では、順序付けされたシーケンスは、特定の検索順序で階層をトラバース(走査)することによって求められる。たとえば、ある実施形態では、順序付けされたシーケンスは、階層内の特定のノードAから始まる以下のルールに従うことによって生成可能である。
【0016】
(a)空のシーケンスから始まり、かつ、ノードAなど、階層内の特定のノードにおいて始まる。
【0017】
(b)特定のノードをシーケンスに追加する。
(c)特定のノードが1つ以上の子ノードを有し、かつ、特定のノードが展開された状態の場合、
(d)子ノードの順序で、特定のノードの子ノードの各々についてステップ(b)および(c)を行う。(これは、ステップbおよびステップcを行うと、子ノードが特定のノードになる再帰的アルゴリズムである。)
これらのルールによって生じる順序によって、多数のファイルシステムコンテンツがユーザに表示される態様と同様に、階層が線形になり、まずフォルダまたはディレクトリ、次にファイルおよび他のディレクトリを含むディレクトリ内のコンテンツのリストが含まれる。
【0018】
順序付けされたシーケンスのノードは、ノードの展開状態の影響を受ける場合がある。親ノードが展開されると、当該親ノードの子ノードがノードの順序付けされたシーケンスで現れ、親ノードが折畳まれると、子ノードは現れない。
【0019】
ノードの階層(ツリー)を表すデータの順序付きリストのスクロールに加えて、ツリーブラウザによって、ユーザはツリーのノードの展開または折畳みが可能になる。ユーザがディスプレイのノードを展開すると、ディスプレイは、子ノードをディスプレイに示された順序付きリストに挿入することによって変更する。表示されたリストの中間にノードを挿入することによって、リストの下に向かって現れるノードを、ディスプレイの下端から離れるようにプッシュできる。画面上で他のノードに対してユーザに表示されるノードの位置は、階層内のノードの展開に基づいて変更可能である。したがって、表示されるべきノードのセットは、特定のノードに関連するノードの展開状態に応じて決まる。
【0020】
階層データブラウザは、階層のサブツリー内のすべてのノードを含むリモートマシンからデータをフェッチし、次に、ユーザがリクエストするノードのみを表示し得る。すなわち、完全に展開されたサブツリーをフェッチ可能である。
【0021】
図1Aは、1つまたは複数の実施形態に係るシステムの構成要素を示すブロック図である。構成要素は、省略、修正、並べ替え、組合わせ、または他の態様では修正が可能である。
【0022】
ノードの階層122は、ブラウズされる階層データのきわめて大きなデータセットを表す。この階層内のノードは、リクエストに応じて、データをブラウズしているユーザをホストするローカルマシン142に送信される。階層はノードを含むが、場合によっては複数のブラウジングマシンによってどのデータがブラウズまたはキャッシュされているかをトラックするために追加の状態情報を、必ずしも必要としない。
【0023】
リモートマシン112は、ノードの階層122を管理する。ノードのリクエストは、ノードの階層122からデータをフェッチし、ローカルマシン142などのリクエストを行っているマシンにデータを送信するために、リモートマシン112によって受信される。リモートマシン112は、リクエストされているデータに対してステートレスであり得る。すなわち、リモートマシン112は、過去のリクエストの記録を保持しない。リモートマシン112に対するデータのリクエストは、冪等(べきとう)である。
【0024】
表示画面130は、ローカルマシン142に通信可能に連結された表示デバイスの画面である。表示領域132は、階層ツリーノードのデータ項目の順序付きリストが表示およびブラウズされる表示画面130の領域内の表示ウインドウである。データ項目の順序付きリストは、表示ウインドウに同時に表示可能なデータのラインの数に従って、多数のデータ項目を含む。
【0025】
表示領域134は、表示領域132に表示されたノードについてメタデータを表示し得る画面の別の部分である。表示領域Bに表示可能なメタデータの例は、選択されたノードについての階層内の先祖ノードの順序付きリストを含む。表示領域Bに表示可能な他の情報は、値およびタイプ、作成時間、所有者といった、選択されたノードの属性を含む。検索インターフェースを表示領域134に表示し得る。
【0026】
ローカルマシン142は、ノードの階層122内のデータをブラウズするために、ユーザによって使用されるブラウザをホストする。ユーザは、表示領域132内のノードを閲覧し、ノードの順序付きリスト内の他のノードまでスクロールすることによってナビゲートしてもよい。新しいノードが表示ウインドウにおいてスクロールされると、ローカルマシンは、ノードが表示領域132に表示可能になるように、表示されるべきノードをリモートマシン112がローカルマシン142に送信するようにリクエストし得る。ユーザは、表示領域134とインタラクトして、表示領域132に示されるノードからの適当なスクロール距離内にノードがない場合に、閲覧のために目標ノードを指定し得る。たとえば、表示領域134は、ブックマークされたノードのリスト、最近閲覧されたノード、または目標ノードの名前を指定可能な検索バーを含み得る。特定の目標ノードを閲覧するというユーザのリクエストに応答して、ローカルマシン142は、どのノードを目標ノードの隣に表示するべきかを判断し、それらのさらに他のノードを、必要に応じてリモートマシン112からフェッチし得る。
【0027】
部分階層データのキャッシュ144は、ローカルマシン142に対してローカルであり、かつ、ローカルマシン142によって管理されるキャッシュである。ローカルマシン142は、ノードがリモートマシンからフェッチされると、ノードの階層122内のノードのサブセットのコピーを格納する。ローカルキャッシュ内のリクエストされたノードごとに、キャッシュは、先祖、兄弟、子孫のコピー、または、ポリシーで指定されるような他の種類の関連ノードを含み得る。一例として、キャッシュは、ローカルキャッシュ内のリクエストされたノードごとに、リクエストされたノードのすべての先祖を含み得るが、キャッシュは、必ずしもリクエストされたノードのすべての兄弟ノードを含まなくてもよい。他の例では、ローカルキャッシュ内のリクエストされたノードごとに、キャッシュは、nレベルまでの先祖ノードおよびリクエストされたノードのすべての兄弟ノードを含み得る。キャッシュにコピーされたノード内のデータに加えて、キャッシュされたノードは、ブラウザ内のデータのブラウザ状態をトラックするさらに他のメタデータも含み得る。このメタデータは、マスタ階層データセットを格納しているリモートマシンに知られていなくてもよい。たとえば、各内部ノード(すなわち、少なくとも1個の子ノードを有するノード)は、関連する展開状態標識を有し得る。展開状態は、内部ノードの子ノードを表示するかどうかを示す。ある実施形態では、部分階層データのキャッシュ144は、展開状態が展開であるノードのリストも格納し得る。展開されたノードのリストは、キャッシュされたノードから分離されてもよく、リストは、リスト内のノードがキャッシュから退去する場合であっても持続し得る。ある実施形態では、展開されたノードのリストは、ブラウジングセッション中に少なくとも一度キャッシュされ、かつ、展開状態が展開であるノードのみを含み得る。ブラウジングセッション中にキャッシュされていないノードおよび折畳み状態のノードは、リストになくてもよい。代替的に、展開されたノードのリストはさらに、展開状態のキャッシュが退去させたノードのみを含むように制限されてもよい。そのような実施形態では、展開されたノードがキャッシュから退去させられると、展開されたノードのリストにノードが加えられてもよい。キャッシュから以前に退去させられたノードがリフェッチされキャッシュに入力されると、ノードが展開状態のノードのリストに現れる場合、その展開状態が展開に設定され得る。ある実施形態では、ノードの展開状態がキャッシュされたノード自体内に格納されるため、ノードはキャッシュに格納されると、展開されたノードのリストから削除されてもよい。
【0028】
階層のノードが上述の線形化ルールに従って順序付けられる実施形態では、特定の展開された内部ノードの子ノードは、ノードの順序付きリストにおいて特定の内部ノードの兄弟ノードの前に現れ得る。しかしながら、特定のノードが「折畳まれた」という展開状態である場合、兄弟ノードは、子ノードの間に入ることなく、特定のノードのすぐ後に現れ得る。
【0029】
ノードの階層122内のノードの一部は、キャッシュ内の対応するコピーを有していなくてもよい。プレースホルダを、マスタ階層がキャッシュ内に示されていないノードを含むと示すために、連続する順序付けされたノードのセットを表すために用いてもよい。ノードを順序付けされたシーケンスで表示するためにキャッシュされたノードの階層をトラバースすると、プレースホルダに出会うことによって、ローカルマシンは、欠損ノードのコピーをリクエストし、フェッチされたノードをキャッシュに入力し得る。
【0030】
図1Bは、1つまたは複数の実施形態に係る、ノードの階層122をより詳細に示す図である。階層内のノードのラベルは、図示された例ではノードの識別を容易にするために選択される。図示された例は、請求項のうちのいずれかの範囲を制限すると解釈されるべきではない。各ノードは、その先祖のラベルをプレフィックスとして用いる場合、個別の識別を有する。たとえば、ノード内の数字は、兄弟ノードの順序を示す。したがって、「1」を有するノードが第1の兄弟ノードであり、「2」を有するノードが第2の兄弟ノードである。ノード内の文字は、階層におけるレベルを示す。したがって、ノード1Bはノード1Aの子孫である。ノード1Aは階層のルートであり、{1B、2B・・・9999B}という順序で9999個の子ノードを有する。図の円は、階層内に存在するノードを示すが、スペースが足りないためその表示は図から省略する。たとえば、ノード1Bは子ノード4C、5C、6Cなどを有するが、子ノード4C、5C、6Cなどは図では書かれていない。ノード1B、2Bおよび9999Bも各々、9999個の子ノードを有する。この階層は、きわめて多数のノードを有する。
【0031】
図1Cは、1つまたは複数の実施形態に係る、
図1Bに示すデータの階層ツリー内のノードのサブセットに対応するノードのローカルキャッシュを示す図である。ラベル付けされたノードは、
図1Bの階層内の対応するノードのコピーを示し、太く縁取られた四角形はプレースホルダを表す。プレースホルダは、兄弟ノードの順序付きリスト内で連続し、かつ、キャッシュされていない1つ以上の兄弟ノードのセットを識別する。たとえば、2Bのサブツリー全体はキャッシュに格納されていない。また、キャッシュから欠損しているのは、
・ノード1Bの子ノード:{81C~898C}および{1000C~9999C}、ならびに
・10Bの子ノード:{1C~19C}および{31C~9999C}
である。
【0032】
図2は、1つまたは複数の実施形態に係る、目標ノードのデータ項目の検索および表示を示すフローチャートである。動作210で、ノードの階層122の一部であるノードの順序付けされたシーケンスが、表示領域132に表示される。表示ウインドウは、特定数のデータ項目のラインを呈示可能である。ある実施形態では、ローカルマシンは、動作210が行われる前に、起動時間に表示領域132に表示するために、階層のある部分をプリフェッチし得る。
【0033】
動作220で、ユーザは、表示ウインドウに表示されておらず、そのため、表示領域132から選択できない、階層内の特定のノードを閲覧するようにリクエストしてもよい。ユーザは、関心ノードが表示ウインドウに示されているノードの妥当なスクロール距離内になると、表示領域132で表示するためのノードを選択するように、表示領域134を用いるオプションを選択し得る。すなわち、関心目標ノードは、表示されているノードから階層において離れたサブツリーに位置し得る。ブックマークされたノード、最近閲覧されたノードを選択するように表示領域134とインタラクトすることによって、または、スクロールする必要なく目標ノードまで直接ナビゲートするように検索バーにノード名を入力することによって、目標ノードを指定し得る。
【0034】
動作230で、ローカルマシンは、ローカルキャッシュ内の目標ノードを検索し得る。目標ノードがローカルキャッシュに格納されていない場合、動作240で、ローカルマシンは、リモートマシン112に目標ノードのコピーをリクエストし、目標ノードのコピーをキャッシュに格納し得る。さらに、キャッシュ内にまだない目標ノードの先祖を、フェッチしキャッシュに配置し得る。
【0035】
キャッシュされたノードの階層は、ユーザリクエストに応答して動作250で表示領域132に表示するデータ項目を判断するために用いられる。表示されるべきデータ項目は、ノードの順序付けされたシーケンスを含み得る。ある実施形態では、目標ノードについてのデータ項目は、表示ウインドウの中心付近に置かれてもよい。目標ノードと共に表示されるべきノードについてのデータ項目の数は、表示構成に基づき得る。表示構成はたとえば、表示ウインドウのサイズ、表示ウインドウの解像度、ノードの各イラストのサイズ、ノード間のスペースの量を含み得る。表示されるべきノードの一部はキャッシュ内になく欠損しており、代わりに、キャッシュ内のプレースホルダによって示される場合がある。表示されるべきデータ項目の識別は、「表示されるべきノードの識別」というタイトルの以下のセクションで、さらに詳細に説明する。
【0036】
動作260で、表示に必要と判断されるがキャッシュから欠損しているノードを、リモートマシン112からフェッチ可能である。ノードがリモートマシンから受信されると、ノードは、欠損しているノードのより小さなセットを示すように削除または改訂されたキャッシュおよびプレースホルダに加えられてもよい。
【0037】
動作270で、目標ノードを含む表示されるべきノードが、表示領域132に表示される。たとえば、
図1Cを参照すると、ノード899Cが表示のために選択される場合、プレースホルダによって示される情報であってノードについての情報が必要とされ得る。たとえば、ノード898Cがキャッシュから欠損している。ノード898Cを、リモートマシンからフェッチする必要があるだろう。そのため、表示するノードの順序付けされたシーケンスからのノードがキャッシュから欠損している場合、動作230~260を、順序付けされたシーケンスのノードの数が表示ウインドウを満たすまで繰り返さなければならない場合がある。
【0038】
3.ユーザインターフェースの注意事項
ブラウザは、ユーザが(a)個別のノードもしくは(b)すべてのノードを展開または折畳むただ1つの動作をリクエストすることをサポート可能である。
【0039】
キャッシュ内に入れるノードの展開状態は、デフォルト値に設定されてもよい。ある実施形態では、デフォルト展開状態は非展開である(本明細書では折畳みとも呼ばれる)。ユーザは、表示ウインドウ内のノードを選択(たとえばクリック)することによって、ノードの展開をリクエストし得る。ユーザが展開されるべき個別のノードを選択すると、ノードの展開状態標識値は展開に設定され、選択されたノードの子ノードが、ノードの表示されたリスト内に追加され得る。展開状態識別は、ユーザがノードを折畳むようにリクエストするまで展開されたままでもよい。
【0040】
検索インターフェースを介してランダムにアクセスされたノードの選択、または表示ウインドウ内からの選択を含まない他の手段によって、選択されたノードのすべての先祖についての展開状態標識の値が、展開された状態に設定され得る。表示されたノードのリストは、ユーザにとっては、ユーザが先祖ノードのすべてを手動で展開し、選択されたノードまでスクロールしたかのように見える。
【0041】
ある実施形態では、ユーザはすべてを展開するようにリクエストし、これによって、階層内のすべてのノードの展開状態が展開に変わる。階層内のすべてのノードを展開すると、ブラウジング状態は、リクエストされたときに表示またはキャッシュされているノードだけでなく、すべてのノードについて変更され得る。ある実施形態では、グローバル展開状態標識が、すべてのノードを展開と表示するかどうかを示し得る。グローバル展開状態標識が展開モードを示す場合、すべてのノードは、ノードの個別の展開状態識別子の値にかかわらず、その状態が展開されているかのように表示される。
【0042】
ある実施形態では、ユーザは下方に展開するようにリクエストしてもよく、これによって、選択されたノードにルートがあるサブツリー内のすべてのノードの展開状態が、展開されるように変わり得る。ある実施形態では、サブツリー展開識別を、展開されるべきサブツリーのルートであるノードを識別するキャッシュ内に格納可能である。表示されるべきノードを展開するべきかどうかを判断するために、システムは、ノードがサブツリー展開標識によって識別されたノードのいずれのサブツリーにあるかを判断するために、サブツリー展開識別を調べ得る。
【0043】
同様に、ユーザはすべてを折畳むようにリクエストしてもよく、これによって、すべてのノードが折畳まれ始め得る。展開状態標識は、折畳みに設定されてもよく、個別の展開されたノードのリストが空になってもよい。ある実施形態では、サブツリー展開標識は削除されてもよい。
【0044】
4.表示されるべきノードの識別
ある実施形態では、システムは、リクエストされたノードに基づいて表示されるべきノードを識別する。表示されるべきノードは、表示されるべきノードの階層ツリーの特定のセクションを表す。本明細書で言及されるノードの階層ツリーのセクションは、ノードの階層ツリー内の連続または非連続のセットを含み得る。
【0045】
リクエストされたノードは通常、リクエストされたノードに直接または間接的に関連するノードと共に表示される。一例として、特定のノードのリクエストに応じて、特定のノードはディスプレイの中心に示されてもよい。システムはデフォルト設定で、リクエストされたノードの最大で5個の先祖、リクエストされたノードの2個の兄弟、およびゼロ個の子孫を表示するように構成され得る。5個の先祖ノードは、ノードの階層ツリー内のリクエストされたノードから最大で5つのレベルをトラバースすることによって求められてもよい。2個の兄弟は、兄弟の順序付けされたシーケンスにおけるリクエストされたノードの位置に基づいて求められてもよい。兄弟の順序付けされたシーケンスにおいてリクエストされたノードに続く2個のノードは、表示されるべき兄弟と識別されてもよい。最初に子孫を表示しないことは、折畳まれた状態のリクエストされたノードを最初に表示するようにシステムが構成されることを意味する。代替的な構成が、展開された状態でリクエストされたノードを表示可能である。一例として、リクエストされたノードの子孫の順序付けされたシーケンスの最初のx個の子孫が、リクエストされたノードの最初の表示と共に含まれてもよい。
【0046】
ある実施形態では、システムは、特定の表示されたノードが展開されると、表示されるべきノードを識別する。特定のノードを展開するリクエストに応答して、システムは、表示されるべき子孫ノードの数を求める。一例として、システムは、展開されたノードの他の子孫ノードを表示することなく、最初の4個の子孫ノードを最初に表示するように構成され得る。他の子孫ノードの表示は、ユーザが子孫ノードのリストをスクロールダウンすることによってトリガされ得る。
【0047】
ある実施形態では、ノードの階層ツリーの各ノードは、ディスプレイの別々の水平ライン上に表示され得る。ユーザは、以前に表示されていないノードの順序付きリスト内のより前のノードまでスクロールダウンしてもよい、または、以前に表示されていない順序付きリスト内でより後ろのノードを見るためにスクロールアップしてもよい。スクローリングの検出に応答して、システムは、ディスプレイに追加されるべき1つ以上のノード、および、ディスプレイに収まらなくなったためディスプレイから削除するべき1つ以上のノードを識別してもよい。
【0048】
上述のように、表示されるべきノードは、表示ウインドウと関連付けられた構成に基づく特定の数のノードに制限される。一例として、ウインドウに表示可能なノードの数は、ウインドウのサイズおよび/または解像度、ウインドウ内の各ノードを表すアイコンのサイズ、ノード識別子のフォントサイズ、およびノード間の間隔の関数であり得る。システムはたとえば、リクエストされたノードと共に10個のノードを表示可能であると判断し得る。優先順位および/またはポリシーに基づいて、システムは、表示されるべきノードとして、リクエストされたノードに関連するノードのうちの10個のノードを選択し得る。
【0049】
ある実施形態では、本明細書で説明したアプローチは、階層内の内部ノードの展開状態を考慮して、順序付きリスト内の特定のノードを有する表示ウインドウを埋めるためにノードの順序付きリストを効率的に作成する。表示ウインドウ内のいずれの場所も選択可能だが、特定のノードは、表示ウインドウの中心に置かれてもよい。表示されるノードの順序付きリストを作成する基本的なアプローチは、各ノードの展開状態に基づいて順序付きリストとして全階層を表現することでもよい。全階層は、事前に定義された順序で検索されてもよく、展開されていない内部ノードをリーフノードであるかのように扱う。すなわち、サブツリーのルートであるノードが展開されない場合、サブツリーは検索されない(かつ、サブツリールートの子ノードは、リストに含まれない)。特定のノードは、順序付きリストに位置してもよく、リスト内の特定のノードの前のノードの数、およびリスト内の特定のノードの後のノードの数が、表示のために選択されてもよい。特定のノードが表示ウインドウの中心に現れる場合、特定のノードの前後のノードの数は、表示ウインドウ内のラインの最大数のほぼ半分でもよい。しかしながら、数百万個のノードの階層では、特にユーザが「すべてのノードを展開」を選択している場合、全階層について順序付きリストを作成するのにあまりに時間がかかることがある。
【0050】
順序付きリストを作成するより効率的なアプローチは、まず、階層内の特定のノードに最も近いサブツリーを検索し、表示リストを埋めるために必要とされるだけのさらに他の親戚まで検索を拡げることである。ある実施形態では、階層は、特定のノードの親ノードから表示するために、データ項目の所望の順序に対応する順序で検索されてもよい。前述のように、特定のノードが表示されるため、親ノードは展開されてもよい。順序付きリストを埋めるのに十分な特定のノードの兄弟ノードがある場合、さらなる検索は必要ではない。親ノードを探索することによって作成される順序付きリスト内のノードの数が表示リストを満たさない場合、順序付きリストが表示ウインドウを埋めるのに十分な数のノードを含むまで、祖父母ノードなどに対して検索が行われてもよい。
【0051】
ある実施形態では、特定のノードの前に表示する1つのリスト、および特定のノードの後に表示する1つのリストの、2個の別の順序付きリストが作成され得る。各リストは、異なるサブツリーを検索することによって形成され得る。たとえば、特定のノードが順序付けられた兄弟ノードのセットの最後である場合、特定のノードの後に表示するノードのリストは、特定のノードの親ノードを探索するのではなく、異なる(叔母/叔父)サブツリーを検索することによって生じ得る。
【0052】
5.プレースホルダを用いた作業
上述のような順序付きリストの作成は、ローカルキャッシュ内の階層の部分を用いて行い得る。サブツリーのノードの検索および順序付けの間に、存在するがキャッシュ内にない子ノードの連続したセットを示すプレースホルダに出会うことがある。検索を完了するために、プレースホルダによって示される複数のノードの少なくとも一部が、リモートマシンからフェッチされキャッシュに追加されてもよく、プレースホルダは、検索が継続する前に削除または変更されてもよい。ある実施形態では、プレースホルダによって示されるすべてのノードはフェッチされてもよく、プレースホルダは完全に除去されてもよい。ある実施形態では、プレースホルダによって示されるノードの一部がフェッチされてもよく、フェッチされるノードの数は、(a)プリフェッチ制限または(b)表示可能な順序付きリスト内のノードの数を超えない。プレースホルダは、まだフェッチされていないノードを示すようにアップデート可能である。
【0053】
ある実施形態では、ユーザが検索インターフェース内の選択されたノードの識別子を入力することによって表示するノードを選択する場合、選択されたノードは、まだキャッシュおよび/または展開されていないサブツリーに存在し得る。そのため、選択されたノードがランダムにアクセスされる場合、先祖ノードの展開状態の各々が展開に設定され得る。最近展開されたがキャッシュ内に示されていない子ノードは、フェッチおよびキャッシュされてもよい、または、子ノードが表示に必要と判断されるまでプレースホルダによって示されてもよい。
【0054】
キャッシュのスペースがなくなると、キャッシュ内のノードは、キャッシュ管理ポリシーに従って退去するように選択されてもよく、退去するように選択されたノードは、キャッシュされた階層内のプレースホルダによって置換されてもよい。
【0055】
6.リモートマシンからのノードのフェッチ
少なくとも1つのノードをリモートマシンから検索しなければならない場合、フェッチするノードの数は、複数の要素に応じて決まり得る。検索するノードの最低数は、表示リストを埋めるのに必要なノードの数である。この最低数のノードが、「表示されるべきノードの識別」というタイトルのセクション4で説明したような、表示されるべきノードである。連続したノードのグループが欠損している場合、連続したノードのグループ内のノードのすべてが同じリクエストでフェッチされてもよい。しかしながら、ノードのグループが表示リストを埋めるために必要で、かつ、ノードが順序付きリスト内で連続していない場合、ローカルマシンは、フェッチされる必要がある少なくとも1つのノードを含む複数の連続したノードをリクエストし得る。複数の連続したノードは、表示ウインドウに同時に表示可能なノードの数の関数として求めることができる。表示の目的で、順序付けされたシーケンスで必要なノードの数は、表示ウインドウに同時に表示可能なノードの数を超えない。そのうちの一部がすでにキャッシュされている連続したノードをフェッチすることは、共通のサブツリー内の非連続のプレースホルダについての個別のリクエストを送信するよりも効率的であり得る。
【0056】
さらに、フェッチされるべきノードの数は、性能を考慮して求められ得る。リモートマシンに対するフェッチリクエストの数を減らすために、必要以上のノードを各フェッチリクエストに応答して送信し得る。表示されるべきノードは階層のノードの順序付きリスト内のノードの連続したセットでもよいが、表示されるノードの連続したセットの隣のさらに他のノードをプリフェッチしてもよい。結果として生じる表示ウインドウ内のノードのリストがスクロールされる場合、プリフェッチされたノードがすでにキャッシュ内にあってもよい。プリフェッチは、さらに他のノードの検索が性能に悪影響をもたらさないであろう場合に行われてもよい。その数は、実験によって求められ、システム内に構成されてもよい。代替的に、その数は現在の負荷に基づいてもよく、時間と共にダイナミックに変化してもよい。
【0057】
7.コンピュータネットワークおよびクラウドネットワーク
1つまたは複数の実施形態では、コンピュータネットワークは、ノードのセットの間に接続性をもたらす。ノードは、互いに対してローカルおよび/またはリモートでもよい。ノードは、リンクのセットによって接続される。リンクの例は、同軸ケーブル、非シールドツイストケーブル、銅ケーブル、光ファイバ、および仮想リンクを含む。
【0058】
ノードのサブセットは、コンピュータネットワークを実現する。そのようなノードの例は、スイッチ、ルータ、ファイアウォール、およびネットワークアドレス変換(NAT)を含む。ノードの他のサブセットは、コンピュータネットワークを用いる。そのようなノード(「ホスト」とも呼ばれる)は、クライアント処理および/またはサーバ処理を実行し得る。クライアント処理は、コンピューティングサービス(特定のアプリケーションの実行、および/または特定の量のデータの格納など)をリクエストする。サーバ処理は、リクエストされたサービスを実行する、および/または対応するデータを戻すことによって応答する。
【0059】
コンピュータネットワークは、物理リンクによって接続された物理ノードを含む物理ネットワークでもよい。物理ノードは、任意のデジタルデバイスである。物理ノードは、ハードウェアスイッチ、ハードウェアルータ、ハードウェアファイアウォール、およびハードウェアNATなど、機能特有のハードウェアデバイスでもよい。さらにまたは代替的に、物理ノードは、それぞれの機能を行うさまざまな仮想マシンおよび/またはアプリケーションを実行するように構成された汎用マシンでもよい。物理リンクは、2個以上の物理ノードを接続する物理媒体である。リンクの例は、同軸ケーブル、非シールドツイストケーブル、銅ケーブルおよび光ファイバを含む。
【0060】
コンピュータネットワークは、オーバレイネットワークでもよい。オーバレイネットワークは、他のネットワーク(物理ネットワークなど)上で実現される論理ネットワークである。オーバレイネットワーク内の各ノードは、下位のネットワーク内のそれぞれのノードに対応する。したがって、オーバレイネットワーク内の各ノードは、(オーバレイノード宛ての)オーバレイアドレスと、(オーバレイノードを実現するアンダーレイノード宛ての)アンダーレイアドレスとの両方に関連付けられる。オーバレイノードは、デジタルデバイスおよび/またはソフトウェア処理(仮想マシン、アプリケーションインスタンス、またはスレッドなど)でもよい。オーバレイノードを接続するリンクは、アンダーレイネットワークを介してトンネルとして実現される。トンネルの両側のオーバレイノードは、それらの間の下位のマルチホップ経路を1つの論理リンクとして扱う。トンネリングは、カプセル化および非カプセル化によって行われる。
【0061】
ある実施形態では、クライアントは、コンピュータネットワークに対してローカルおよび/またはリモートであり得る。クライアントは、プライベートネットワークまたはインターネットなどの他のコンピュータネットワークで、コンピュータネットワークにアクセスし得る。クライアントは、ハイパーテキスト転送プロトコル(HTTP)などの通信プロトコルを用いて、コンピュータネットワークにリクエストを伝達し得る。リクエストは、クライアントインターフェース(ウェブブラウザなど)、プログラムインターフェース、またはアプリケーションプログラミングインターフェース(API)などのインターフェースを介して伝達される。
【0062】
ある実施形態では、コンピュータネットワークは、クライアントとネットワークリソースとの間に接続性をもたらす。ネットワークリソースは、サーバ処理を実行するように構成されたハードウェアおよび/またはソフトウェアを含む。ネットワークリソースの例は、プロセッサ、データ記憶装置、仮想マシン、コンテナ、および/またはソフトウェアアプリケーションを含む。ネットワークリソースは、複数のクライアントの間で共有される。クライアントは、互いに独立してコンピュータネットワークにコンピューティングサービスをリクエストする。ネットワークリソースは、オンデマンドでリクエストおよび/またはクライアントにダイナミックに割当てられる。各リクエストおよび/またはクライアントに割当てられたネットワークリソースは、たとえば、(a)特定のクライアントがリクエストするコンピューティングサービス、(b)特定のテナントがリクエストする集合コンピューティングサービス、および/または(c)コンピュータネットワークがリクエストする集合コンピューティングサービスに基づいて、スケールアップまたはダウンされてもよい。そのようなコンピュータネットワークは、「クラウドネットワーク」と呼ばれることもある。
【0063】
ある実施形態では、サービスプロバイダは、1つ以上のエンドユーザにクラウドネットワークを提供する。サービスとしてのソフトウェア(SaaS)、サービスとしてのプラットフォーム(PaaS)、およびサービスとしてのインフラストラクチャ(IaaS)を含むがこれらに限定されないさまざまなサービスモデルが、クラウドネットワークによって実現可能である。SaaSでは、サービスプロバイダは、エンドユーザに、ネットワークリソースで実行しているサービスプロバイダのアプリケーションを用いる能力を与える。PaaSでは、サービスプロバイダは、カスタムアプリケーションをネットワークリソースに展開する能力を与える。カスタムアプリケーションは、プログラミング言語、ライブラリ、サービス、およびサービスプロバイダがサポートするツールを用いて作成可能である。IaaSでは、サービスプロバイダは、エンドユーザに、プロセシング、記憶装置、ネットワーク、およびネットワークリソースが提供する他の基本的なコンピューティングリソースを供給する能力を与える。オペレーティングシステムを含む任意のアプリケーションが、ネットワークリソースで展開されてもよい。
【0064】
ある実施形態では、プライベートクラウド、パブリッククラウド、およびハイブリッドクラウドを含むがこれらに限定されないさまざまな展開モデルが、コンピュータネットワークによって実現可能である。プライベートクラウドでは、ネットワークリソースは、1つ以上のエンティティ(本明細書で用いられる「エンティティ」という用語は、企業、組織、人、または他のエンティティのことを言う)の特定のグループによる排他的使用のために提供される。ネットワークリソースは、エンティティの特定のグループの敷地に対してローカルおよび/またはリモートでもよい。パブリッククラウドでは、クラウドリソースは、互いに独立した複数のエンティティ(「テナント」または「顧客」とも言う)のために供給される。コンピュータネットワークおよびそのネットワークリソースは、異なるテナントに対応するクライアントによってアクセスされる。そのようなコンピュータネットワークは、「マルチテナントコンピュータネットワーク」と呼ばれることもある。複数のテナントは、異なる時間および/または同じ時間に同じ特定のネットワークリソースを用い得る。ネットワークリソースは、テナントの敷地に対してローカルおよび/またはリモートでもよい。ハイブリッドクラウドでは、コンピュータネットワークは、プライベートクラウドおよびパブリッククラウドを含む。プライベートクラウドとパブリッククラウドとの間のインターフェースによって、データおよびアプリケーション可搬性がもたらされる。プライベートクラウドに格納されたデータおよびパブリッククラウドに格納されたデータは、インターフェースを介して交換可能である。プライベートクラウドで実現されるアプリケーションおよびパブリッククラウドで実現されるアプリケーションは、互いに依存し得る。プライベートクラウドにおけるアプリケーションからパブリッククラウドにおけるアプリケーションへの呼出しは(逆の場合も同じ)、インターフェースを介して実行可能である。
【0065】
ある実施形態では、マルチテナントコンピュータネットワークのテナントは、互いに独立している。たとえば、1つのテナントのビジネスまたはオペレーションは、他のテナントのビジネスまたはオペレーションとは別でもよい。異なるテナントは、コンピュータネットワークについて異なるネットワーク要件を要求してもよい。ネットワーク要件の例は、処理速度、データ格納量、セキュリティ要件、性能要件、スループット要件、レイテンシ要件、回復力要件、サービス品質(QoS)要件、テナント分離、および/または一貫性を含む。同じコンピュータネットワークは、異なるテナントが要求する異なるネットワーク要件を実現しなければならない場合がある。
【0066】
1つまたは複数の実施形態では、マルチテナントコンピュータネットワークにおいて、テナントの分離は、異なるテナントのアプリケーションおよび/またはデータが互いに共有されないことを保証するために実現される。さまざまなテナント分離アプローチを使用可能である。
【0067】
ある実施形態では、各テナントは、テナントIDと関連付けられる。マルチテナントコンピュータネットワークの各ネットワークリソースには、テナントIDのタグが付けられる。テナントは、テナントおよび特定のネットワークリソースが同じテナントIDと関連付けられている場合に限り、特定のネットワークリソースへのアクセスが許可される。
【0068】
ある実施形態では、各テナントはテナントIDと関連付けられる。コンピュータネットワークによって実現される各アプリケーションには、テナントIDのタグが付けられる。さらにまたは代替的に、コンピュータネットワークによって格納される各データ構造および/またはデータセットには、テナントIDのタグが付けられる。テナントは、テナントと特定のアプリケーション、データ構造、および/またはデータセットが同じテナントIDと関連付けられている場合に限り、特定のアプリケーション、データ構造、および/またはデータセットへのアクセスが許可される。
【0069】
一例として、マルチテナントコンピュータネットワークによって実現される各データベースには、テナントIDのタグが付けられてもよい。対応するテナントIDと関連付けられたテナントのみが、特定のデータベースのデータにアクセス可能である。他の例として、マルチテナントコンピュータネットワークによって実現されるデータベース内の各エントリには、テナントIDのタグが付けられてもよい。対応するテナントIDと関連付けられたテナントのみが、特定のエントリのデータにアクセス可能である。しかしながら、データベースは複数のテナントによって共有されてもよい。
【0070】
ある実施形態では、サブスクリプションリストは、どのテナントがどのアプリケーションにアクセスする権限を有するかを示す。アプリケーションごとに、アプリケーションへのアクセスが許可されたテナントのテナントIDのリストが格納される。テナントは、テナントのテナントIDが特定のアプリケーションに対応するサブスクリプションリストに含まれている場合に限り、特定のアプリケーションへのアクセスが許可される。
【0071】
ある実施形態では、異なるテナントに対応するネットワークリソース(デジタルデバイス、仮想マシン、アプリケーションインスタンス、およびスレッドなど)は、マルチテナントコンピュータネットワークによって保持されるテナント特有のオーバレイネットワークに対して隔離される。一例として、テナントオーバレイネットワーク内の任意のソースデバイスからのパケットは、同じテナントオーバレイネットワーク内の他のデバイスに送信されるだけでもよい。カプセル化トンネルが、テナントオーバレイネットワーク上のソースデバイスから他のテナントオーバレイネットワーク内のデバイスへのいかなる送信も禁止するように使用される。具体的に、ソースデバイスから受信されたパケットは、外部パケット内でカプセル化される。外部パケットは、(テナントオーバレイネットワーク内のソースデバイスと通信している)第1のカプセル化トンネルエンドポイントから(テナントオーバレイネットワーク内の宛先デバイスと通信している)第2のカプセル化トンネルエンドポイントへと送信される。第2のカプセル化トンネルエンドポイントは、ソースデバイスが送信するオリジナルパケットを取得するために、外部パケットの非カプセル化を行う。オリジナルパケットは、同じ特定のオーバレイネットワーク内の第2のカプセル化トンネルエンドポイントから宛先デバイスに送信される。
【0072】
8.ハードウェアの概要
ある実施形態によると、本明細書で説明される技術は、1つ以上の専用コンピューティングデバイスによって実現される。専用コンピューティングデバイスは、これらの技術を行うためにハードワイヤードされてもよい、または、1つ以上の特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、もしくはこれらの技術を行うように永続的にプログラムされたネットワーク処理ユニット(NPU)などのデジタル電子デバイスを含んでもよい、または、ファームウェア、メモリ、他の記憶装置、もしくは組合わせにおいてプログラム命令に従ってこれらの技術を行うようにプログラムされた1つ以上の汎用ハードウェアプロセッサを含んでもよい。そのような専用コンピューティングデバイスはまた、これらの技術を達成するために、カスタムハードワイヤードロジック、ASIC、FPGA、またはNPUをカスタムプログラミングと組合わせてもよい。専用コンピューティングデバイスは、デスクトップコンピュータシステム、携帯コンピュータシステム、ハンドヘルドデバイス、ネットワーキングデバイス、またはこれらの技術を実現するためにハードワイヤードおよび/もしくはプログラムロジックを組込む他のデバイスでもよい。
【0073】
たとえば、
図3は、本発明の実施形態を実現可能なコンピュータシステム300を示すブロック図である。コンピュータシステム300は、情報を伝達するためのバス302または他の通信メカニズム、および情報を処理するためにバス302と連結されたハードウェアプロセッサ304を備える。ハードウェアプロセッサ304は、たとえば汎用マイクロプロセッサでもよい。
【0074】
コンピュータシステム300はまた、情報およびプロセッサ304によって実行されるべき命令を格納するためにバス302に連結された、ランダムアクセスメモリ(RAM)または他の動的記憶装置などの、メインメモリ306を備える。メインメモリ306は、プロセッサ304によって実行されるべき命令の実行中に一時的な変数または他の中間情報を格納するために用いることもできる。そのような命令は、プロセッサ304がアクセス可能な非一時的記憶媒体に格納されると、コンピュータシステム300を、命令で指定される動作を行うようにカスタマイズされた専用マシンにする。
【0075】
コンピュータシステム300はさらに、読出し専用メモリ(ROM)308またはプロセッサ304のための静的情報および命令を格納するためにバス302に連結された他の静的記憶装置を備える。磁気ディスクまたは光学ディスクなどのストレージデバイス310は、情報および命令を格納するためにバス302に設けられ連結される。
【0076】
コンピュータシステム300は、ブラウン管(CRT)など、情報をコンピュータユーザに表示するためのディスプレイ312にバス302を介して連結されてもよい。英数字キーおよび他のキーを含む入力デバイス314が、情報および指令選択をプロセッサ304に伝達するためにバス302に連結される。他の種類のユーザ入力デバイスは、方向情報および指令選択をプロセッサ304に伝達し、かつ、ディスプレイ312上でのカーソルの移動を制御するためのマウス、トラックボール、またはカーソル方向キーなどの、カーソルコントロール316である。この入力デバイスは典型的に、デバイスが平面における位置を指定可能な第1の軸(たとえばx)および第2の軸(たとえばy)の2つの軸において2自由度を有する。
【0077】
コンピュータシステム300は、カスタマイズされたハードワイヤードロジック、1つ以上のASICもしくはFPGA、ファームウェア、および/または、コンピュータシステムと組合わせてコンピュータシステム300を専用マシンにするまたはプログラムするプログラムロジックを用いて、本明細書で説明された技術を実現可能である。一実施形態によると、本明細書の技術は、プロセッサ304がメインメモリ306に含まれる1つ以上の命令の1つ以上のシーケンスを実行することに応答して行われる。そのような命令は、ストレージデバイス310など、他の記憶媒体からメインメモリ306に読込まれ得る。メインメモリ306に含まれる命令のシーケンスの実行によって、プロセッサ304は、本明細書で説明されるプロセスステップを行う。代替的な実施形態では、ハードワイヤード回路がソフトウェア命令の代わりに、またはこれと組合わせて用いられてもよい。
【0078】
本明細書で用いられる「記憶媒体」という用語は、データおよび/またはマシンを特有の態様で動作させる命令を格納する任意の非一時的媒体のことを言う。そのような記憶媒体は、不揮発性媒体および/または揮発性媒体を含み得る。不揮発性媒体はたとえば、ストレージデバイス310などの、光学ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ306などのダイナミックメモリを含む。通常の形態の記憶媒体はたとえば、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープ、または任意の他の磁気データ記憶媒体、CD-ROM、任意の他の光学データ記憶媒体、穴のパターンを有する任意の物理的な媒体、RAM、PROM、およびEPROM、FLASH-EPROM、NVRAM、任意の他のメモリチップもしくはカートリッジ、連想メモリ(CAM)、および3値連想メモリ(TCAM)を含む。
【0079】
記憶媒体は、伝送媒体とは別個だが一緒に用いることが可能である。伝送媒体は、記憶媒体間の情報の転送に関係する。たとえば、伝送媒体は、バス302を含むワイヤを含む、同軸ケーブル、銅線および光ファイバを含む。送信媒体はまた、電波および赤外線データ通信中に生成されるもののような、音波または光波の形態をとり得る。
【0080】
さまざまな形態の媒体が、1つ以上の命令の1つ以上のシーケンスをプロセッサ304に運んで実行することに関与し得る。たとえば、命令は最初は、リモートコンピュータの磁気ディスクまたはソリッドステートドライブ上に運ばれ得る。リモートコンピュータは、そのダイナミックメモリに命令をロードし、モデムを用いて電話線で命令を送信可能である。コンピュータシステム300にローカルなモデムは、電話線でデータを受信し、赤外線送信機を用いてデータを赤外線信号に変換可能である。赤外線検出器は、赤外線信号で運ばれるデータを受信可能であり、好適な回路は、データをバス302上に置くことが可能である。バス302は、プロセッサ304が命令を検索し実行するメインメモリ306にデータを運ぶ。メインメモリ306が受信する命令を、プロセッサ304による実行の前または後のどちらかにストレージデバイス310に任意に格納してもよい。
【0081】
コンピュータシステム300はまた、バス302に連結された通信インターフェース318を備える。通信インターフェース318は、ローカルネットワーク322に接続されたネットワークリンク320に、2方向データ通信結合を提供する。たとえば、通信インターフェース318は、サービス総合デジタル網(ISDN)カード、ケーブルモデム、衛星モデム、またはデータ通信接続を対応する種類の電話線に提供するためのモデムでもよい。他の例として、通信インターフェース318は、データ通信接続を互換性のあるLANに提供するためのローカルエリアネットワーク(LAN)でもよい。無線リンクも実現可能である。そのような実現例において、通信インターフェース318は、さまざまな種類の情報を示すデジタルデータストリームを運ぶ電気信号、電磁信号または光学信号を送受信する。
【0082】
ネットワークリンク320は典型的に、1つ以上のネットワークを介して他のデータデバイスにデータ通信を提供する。たとえば、ネットワークリンク320は、ローカルネットワーク322を介してホストコンピュータ324に、またはインターネットサービスプロバイダー(ISP)326によって作動されるデータ機器に、接続を提供し得る。これを受けてISP326は、現在一般に「インターネット」328と呼ばれるワールドワイドパケットデータ通信ネットワークを介して、データ通信サービスを提供する。ローカルネットワーク322およびインターネット328は両方とも、デジタルデータストリームを運ぶ電気信号、電磁信号または光学信号を用いる。コンピュータシステム300に対して、およびこれからデジタルデータを運ぶ、さまざまなネットワークを介する信号およびネットワークリンク320上で通信インターフェース318を介する信号は、伝送媒体の形態の例である。
【0083】
コンピュータシステム300は、ネットワーク(複数可)、ネットワークリンク320および通信インターフェース318を介して、メッセージの送信およびプログラムコードを含むデータの受信が可能である。インターネットの例では、サーバ330は、インターネット328、ISP326、ローカルネットワーク322および通信インターフェース318を介して、アプリケーションプログラムについてリクエストされるコードを送信してもよい。
【0084】
受信されたコードは、受信されるとプロセッサ304によって実行されてもよい、および/または、ストレージデバイス310、もしくは後で実行するために他の不揮発性記憶装置に格納されてもよい。
【0085】
実施形態は、ハードウェアプロセッサを含み、本明細書で説明されたおよび/または以下の請求項のいずれかに記載された動作のいずれかを行うように構成された1つ以上のデバイスを有するシステムに向けられる。
【0086】
ある実施形態では、非一時的コンピュータ可読記憶媒体は、1つ以上のハードウェアプロセッサによって実行されると、本明細書で説明された、および/または請求項のいずれかに記載された動作のいずれかを実施させる命令を含む。
【0087】
本明細書で説明された特徴と機能性との任意の組合せが、1つ以上の実施形態に従って用いられてもよい。前述の明細書では、実施形態は、実現例によって変わり得る多くの具体的詳細を参照して説明されてきた。したがって、明細書および図面は、限定的な意味ではなく例示的な意味で考慮されるべきである。この発明の範囲の唯一かつ排他的な指標、および、出願人が意図するこの発明の範囲は、本願から生じる1組の請求項の、そのような請求項が生じる特定形態での、その後のあらゆる補正を含む、文言上のかつ同等の範囲である。