JP4489292B2 - 高性能オブジェクト・キャッシュ - Google Patents
高性能オブジェクト・キャッシュ Download PDFInfo
- Publication number
- JP4489292B2 JP4489292B2 JP2000543914A JP2000543914A JP4489292B2 JP 4489292 B2 JP4489292 B2 JP 4489292B2 JP 2000543914 A JP2000543914 A JP 2000543914A JP 2000543914 A JP2000543914 A JP 2000543914A JP 4489292 B2 JP4489292 B2 JP 4489292B2
- Authority
- JP
- Japan
- Prior art keywords
- cache
- information object
- key
- block
- subkey
- 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.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/953—Organization of data
- Y10S707/955—Object-oriented
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99944—Object-oriented database structure
Description
【発明の属する技術分野】
本発明は情報配信に関し、より詳しく述べれば、ネットワークを介して効率的かつ高速にクライアントに配信される情報オブジェクト用のキャッシュに関する。
【0002】
【発明の背景】
いくつもの重要なコンピュータ・テクノロジが、かなりの範囲にわたって中央格納場所からリモート・デバイスへの迅速な情報の配信に頼っている。たとえば、クライアント/サーバ・モデルのコンピューティングにおいては、1ないしは複数のサーバが情報のストアに使用される。クライアント・コンピュータまたはプロセスは、サーバから分離されて、ネットワークを使用してこれらのサーバに接続される。クライアントは、必要な情報のネットワーク・アドレスを指定することによって、これらのサーバの1つにその情報を要求する。サーバは、指定されたネットワーク・アドレスに基づいて情報を見つけ出し、ネットワークを介してそれをクライアントに送信し、トランザクションを完了する。
【0003】
ワールド・ワイド・ウェブは、広く使用されているクライアント/サーバ・コンピューティング・モデルの応用である。図1は、ウェブ・システムにおいて使用されるエレメント間の関係を簡潔に示したブロック図である。それぞれをコンピュータもしくはブラウザ等のソフトウエア・プロセスとする1ないしは複数のウェブ・クライアント10a、10bが、直接もしくはインターネット・サービス・プロバイダ等の仲介者を介して、あるいはオンライン情報サービスを介してインターネットと呼ばれるグローバル情報ネットワーク20に接続されている。
【0004】
ウェブ・サーバ40は、ネットワーク・リンク42によって同様にインターネット20に接続されている。ウェブ・サーバ40は、中央のドメイン・ネーム・サーバ(DNS)においてインデクス付けされた合意に基づくフォーマットを用いて関連付けされている1ないしは複数のインターネット・ネットワーク・アドレスならびに逐語的なホスト名を有する。サーバは、ドキュメントおよびイメージ等の、要求に応じてクライアントに提供するためのマルチメディア情報リソースを擁している。ウェブ・サーバ40が、それに加えて、もしくはそれに代えて、要求に応答してこの種のリソースを動的に生成するためのソフトウエアを有していることもある。
【0005】
クライアント10a、10bおよびウェブ・サーバ40は、伝達する情報のフォーマットを指定する、1ないしは複数の合意に基づくプロトコルを使用して通信する。クライアント10aは、DNSを使用して特定のサーバのネットワーク・アドレスをルックアップし、ハイパーテキスト・トランスファ・プロトコル(HTTP)と呼ばれる通信プロトコルを使用して当該サーバとの接続を確立する。ユニフォーム・リソース・ロケータ(URL)は、ウェブ・サーバ40にストアされた、あるいはそれによって動的に生成されたそれぞれの情報オブジェクトを固有識別する。URLは、ネットワーク・アドレスの一形式であり、ネットワーク内にストアされた情報の場所を識別する。
【0006】
ワールド・ワイド・ウェブのパフォーマンスを制限する主要な要因は、インターネット20を介してウェブ・サーバ40からクライアントに情報を供給し得る速度である。パフォーマンスは、インターネットを通るネットワーク・ルートの速度、信頼性、および輻輳のレベルによって、地理的な距離がもたらす遅延によって、さらにはサーバの負荷レベルによって制限を受ける。したがって、サーバから地理的に離れたリポジトリ内に一般的な情報オブジェクトのレプリカをストアしておくことにより、クライアントのトランザクション時間を節約することができる。オブジェクトのレプリカのための各ローカル・リポジトリは、一般にキャッシュと呼ばれている。クライアントがオリジナルのウェブ・サーバにアクセスするより、位相的にもっとも近いキャッシュにあるレプリカにアクセスする方が高速になるだけでなく、インターネット・サーバのトラフィックを低減することができる。
【0007】
一構成におけるキャッシュは、図1に示されるように、論理的にウェブ・クライアント10a、10bと、ウェブ・サーバ40の間に介挿されるプロキシ・サーバ30内に置かれる。プロキシ・サーバは、クライアントに対してはサーバとして、サーバに対してはクライアントとして作用する「仲介人」のゲートウエイ・サービスを提供する。キャッシュを備えたプロキシ・サーバは、キャッシング・プロキシ・サーバもしくは、一般的に「プロキシ・キャッシュ」と呼ばれている。
【0008】
プロキシ・キャッシュ30は、ウェブ・クライアント10a、10bからウェブ・サーバ40に向けられたリソースの要求をインターセプトする。プロキシ30内のキャッシュが、要求されたリソースのレプリカを有し、それが特定の新しさに関する制約に適合するとき、プロキシがウェブ・クライアント10a、10bに応答してそのリソースを直接提供する。この構成においては、リンク42を介して行われるデータ転送の数ならびに量が大きく抑えられる。この結果、ネットワーク・リソースまたはオブジェクトが、より迅速にウェブ・クライアント10a、10bに提供されることになる。
【0009】
この種のキャッシングにおける主要な問題は、キャッシュ内のオブジェクトに関する効率的なストア、配置、および取り出しである。この明細書は、キャッシュ内におけるマルチメディア・オブジェクトのストア、配置、および取り出しに関連するテクノロジに関連する。キャッシュ内のオブジェクト用ストレージ装備は、「キャッシュ・オブジェクト・ストア」もしくは「オブジェクト・ストア」と呼ばれている。
【0010】
ワールド・ワイド・ウェブ等の重いトラフィック環境を効果的に取り扱うために、キャッシュ・オブジェクト・ストアには、数千万ないしは数億の異なるオブジェクトを取り扱えるだけでなく、同時にオブジェクトのストア、削除、およびフェッチが可能であることが要求される。このため、キャッシュのパフォーマンスは、オブジェクトの数により大きく低下するようであってはならない。パフォーマンスは、キャッシュ・オブジェクト・ストアが目指す目標である。
【0011】
キャッシュ内のオブジェクトを見つけ出すことは、もっとも一般的なオペレーションであり、したがってキャッシュは、サーチの実行において極めて高速でなければならない。キャッシュのパフォーマンスを制限する主要因は、ルックアップ時間である。オブジェクトがキャッシュ内に存在するか(「ヒット」)あるいは存在しないか(「ミス」)を可能な限り高速に決定し得るキャッシュがあると望ましい。過去のアプローチにおいては、数百万のオブジェクトをストアし得るキャッシュが、伝統的なファイル・システム・ストレージ構造に使用されている。伝統的なファイル・システムは、マルチメディア・オブジェクトのキャッシュに対する適合性が低いが、これはファイル・システムが特定のオブジェクト・サイズに調整されていること、およびファイル・システムのメタデータを調べるためには複数のディスク・ヘッドを動作させる必要があることを理由とする。オブジェクト・ストアは、オブジェクトのルックアップ・タスクに専用DRAMメモリを使用することにより、より高いルックアップ・パフォーマンスを得ることができるが、数千万ないしは数百万のオブジェクトが存在することから、メモリ・ルックアップ・テーブルを非常にコンパクトにしなければならない。
【0012】
オブジェクトを見つけた後は、クライアントにそれを効率的に転送する必要がある。最近のディスク・ドライブは、連続データの読み出しおよび書き込みにおいて高いパフォーマンスを提供するが、ディスク・ヘッドがディスク上の各部に移動しなければならないとき、大きなパフォーマンスの遅れを招く。これらのディスク・ヘッドの動きを「シーク」と呼んでいる。ディスクのパフォーマンスは、一般にドライブの1秒当たりの定格シーク数に拘束される。キャッシュのパフォーマンスを最適化するためには、連続したデータのブロックの読み出しおよび書き込みを行うことによって、ディスクのシーク数を最小化することが望ましい。
【0013】
いずれにしても最終的にはオブジェクト・ストアが満杯になり、特定のオブジェクトを消去して新しいコンテンツのためにスペースを開ける必要が生じる。これが「ガーベジ・コレクション」と呼ばれるプロセスである。ガーベジ・コレクションは、充分に効率的であり、システムのパフォーマンスを大きく低下させることなく連続的に動作し、その一方で将来的なキャッシュのパフォーマンスにおいてもっとも影響の少ないオブジェクトを削除し得るものでなければならない。
【0014】
【過去のアプローチ】
過去においてはキャッシュ・オブジェクト・ストアの構成に4つのアプローチが使用されている:すなわち、ネイティブ・ファイル・システムの使用、メモリ‐ブロック「ページ」キャッシュの使用、データベースの使用、および「サイクロン」の使用である。これらの従来的なアプローチのそれぞれには、無視できない欠点が存在する。
【0015】
ネイティブ・ファイル・システムを用いるアプローチは、サーバ上で走るオペレーティング・システムのファイル・システムを使用してキャッシュを作成し、管理する。ファイル・システムは、そこで考慮されている特定のアプリケーション用に、つまり、ユーザ・データ・ファイルおよびシステム・データ・ファイルのストアおよび取り出し用に設計されている。ファイル・システムは、ファイル・マネジメント・アプリケーション用の設計および最適化がなされる。これらは、代表的なデータ・ファイル・サイズ用に、かつ比較的少ないファイル数(合計および1フォルダ/ディレクトリ内の両方における数)用に最適化される。伝統的なファイル・システムは、ファイルを開き、読み出し/書き込みを行い、それを閉じるためのシーク数を最小化すべく最適化されてはいない。多くのファイル・システムは、大量のファイルが存在するとき、ファイルを見つけ出し、それを開く上で著しいパフォーマンスの低下を招く。代表的なファイル・システムは、ドライブの表面に小さなディスク・ブロックが散在してしまうフラグメンテーションを生じ、データのアクセスに必要なディスク・シーク数の増加をもたらしているだけでなく、ストレージ空間の無駄を招いている。
【0016】
またファイル・システムは、ユーザのデータ・ファイル・マネジメント用に設計されていることから、キャッシュ・オブジェクト・ストアに無関係な装備を含み、この応用にとって反生産的であることは疑いようがない。例を挙げると次のようなものがある:すなわち、ランダム・アクセスおよび選択的修正のサポート、ファイル許可、ファイルの名称変更のサポート、および時間を隔てたファイルに対する追加のサポートである。さらにファイル・システムは、データの喪失を最小化するために、書き込み時および、障害後のファイル・システムの再構築時に、パフォーマンスの犠牲の上に多大なエネルギを投資する。結局ファイル・システムは、ウェブ・オブジェクトのキャッシュに存在し得る数百万のファイルの取り扱いにあまり適していない。ファイル・システムは、サイズが大きく変動するインターネット・マルチメディア・オブジェクトを効率的にサポートしない ―― 特に、非常に小さいオブジェクトもしくは非常に大きいオブジェクトのサポートが一般に効率的でない。ファイル・システムは、メタデータの検索およびブロックのチェーニングに非常に多くのディスク・シークを必要とし、ガーベジ・コレクションのサポートが貧弱であり、データ保全およびリスタートに際してのファイル・システムのリペアに多くの時間を必要とする。
【0017】
ページ・キャッシュは、固定サイズのメモリ・バッファのセットを用いてファイル・システムを拡張する。データは、ネットワークを介した送信の前にこれらのバッファの内外に置かれる。このアプローチは、遅い接続を介して大きなオブジェクトを送るとき、大量のメモリを無駄にする。
【0018】
データベース・システム・アプローチは、データベース・システムをキャッシュとして使用する。一般に、データベースの構築により達成される目標は、オブジェクト・キャッシュとしての使用に適していない。たとえばデータベースは、トランザクション処理を最適化するために構築される。各トランザクションの保全性を確保するために、そこでは大規模なロックが使用される。その結果、設計目標として、速度等のパフォーマンス要因よりデータ保全が優先されることになる。これとは対照的に、オブジェクト・キャッシュにとっては、データのオリジナルのソースであるサーバからデータを随時取り出すことができるため、キャッシュがオブジェクトを改ざんしない限り、まれに発生するデータの喪失は許容される。データベースは、書き込み速度がトランザクションの処理速度を制限することから、高速書き込みパフォーマンス用に最適化されることが少なくない。しかしながら、オブジェクト・キャッシュにおいては、読み出し速度も同程度に重要である。さらに、データベースは、仮想メモリ内におけるストリーミング、パイプラインI/Oをサポートしつつ、広い範囲にわたって各種のサイズを有するオブジェクトをストアすることを本質的に不得手としている。一般に固定レコード・サイズに最適化されたデータベースは、一定の大きさのレコードを作る。データベースが各種のレコード・サイズをサポートしている場合、冗長なオブジェクト関係のサポートが含まれ、通常は遅い、仮想メモリ・ページング技法を使用してストリーミング、パイプラインI/Oをサポートする。
【0019】
サイクロン・ファイル・システムにおいては、データが環状ストレージ構造に割り当てられる。スペースがいっぱいになると、単純にもっとも古いデータが削除される。このアプローチは迅速なオブジェクトの割り当てを考慮しているが、大きなオブジェクトを最初にメモリ内に置くことなくこれらをサポートすることが困難であり、データのフラグメンテーションを伴う問題を招き、通常は、もっとも古いオブジェクトをその「人気」と無関係に削除するという単純素朴なガーベジ・コレクションを伴う。多様なワーキング・セットを伴う中程度のアクティブ・キャッシュの場合、この種のファースト‐イン‐ファースト‐アウトのガーベジ・コレクションは、オブジェクトが再利用される前にそれを破棄してしまう可能性がある。
【0020】
キャッシュ・オブジェクト・ストアの設計における上記のアプローチに付随する基本的な問題は、問題の制約に関して解決策が最適化されないことである。これらのアプローチは、すべて、新しい応用に向けた、現存するテクノロジの再応用に過ぎない。上記の応用の中に、マルチメディア、ストリーミング、オブジェクト・キャッシュに固有の制約に対して理想的に適合しているものはない。上記の解決策は、不完全な再応用に起因して本質的にオブジェクト・キャッシュを妨げるだけでなく、マルチメディア・オブジェクト・キャッシュにおける、より固有の要件の効率的なサポートを不可能にする。これらの固有の要件には、同一であるが異なる名前を有する冗長なコンテンツを明確化し、かつ共有する能力、またそれとは逆の、特定のクライアント、言語、データ型等に向けられた、同一の名前を有するコンテンツの複数の変化型(variants)をストアする能力が含まれる。
EP-A-0811939から、分散型ネットワークにおいて、ドキュメントをプロキシし、転送変換(transcoding)することが知られており、ここでは、クライアントの要求に応じて、遠隔サーバから取得されたウェブ・ドキュメントは、この要求ドキュメントに関連した格納情報を用いて転送変換される。ドキュメントは、種々の目的、すなわちドキュメント内で見つかるバグや不適当な記述(quirks)を回避する、テレビの画面にドキュメントを合わせる、転送効率を改善する、待ち時間を削減する等のために転送変換される。
【0021】
以上に基づくと、これらの従来アプローチの欠点を克服し、かつマルチメディア・オブジェクト・キャッシュの固有の要件により理想的に適合するオブジェクト・キャッシュを提供する必要があることは明らかである。
特に:
1. 多様なサイズを有する数億のオブジェクト、およびテラバイトのコンテンツ・サイズを効率的な態様でメモリ内にストアし得るオブジェクト・キャッシュが必要とされている。
2. 時間を要するファイル・ディレクトリ・ルックアップを必要とせずに、迅速にドキュメントが「ヒット」であるか「ミス」であるかを決定できるオブジェクト・キャッシュが求められている。
3. オブジェクトの読み出しおよび書き込みのためのディスク・シーク数を最小化するキャッシュが必要とされている。
4. キャッシュからの、およびキャッシュへのデータの効率的なストリーミングを可能にするオブジェクト・ストアが必要とされている。
5. 同一の名前で指定された複数の異なるバージョンの選択肢をサポートするオブジェクト・ストアが必要とされている。
6. コンテンツの重複を招くことなく大量のオブジェクトを効率的にストアするオブジェクト・ストアが必要とされている。
7. 影響を考慮して置換するドキュメントを選択しつつリアルタイムで迅速かつ効率的なガーベジ・コレクションを行い、ユーザの応答速度を向上し、トラフィックを軽くすることができるオブジェクト・ストアが必要とされている。
8. ソフトウエアもしくはハードウエアの障害後にリスタートしたとき、データの改ざんを招くことなく、かつデータの喪失を最小限にして数秒内に完全な動作能力に復帰できるオブジェクト・ストアが必要とされている。
【0022】
本明細書は、前述の目的の達成に向けられたテクノロジに関連する。特に本明細書では、大きなオブジェクト・ストアにおいて時間効率が高くかつ空間効率の高い、オブジェクトの格納、取り出しおよびメンテナンスに関連する方法および装置について説明されている。ここで説明するテクノロジは、高性能、高負荷の応用のためのキャッシュ・オブジェクト・ストアを提供し、これは次に示す一般的な特性を有している。
1.高性能:オブジェクトのストア操作に関して待ち時間が小さく、高いスループットが得られ、かつ多数の同時操作が得られる。
2.大型キャッシュのサポート:テラバイト台のキャッシュおよび数十億のオブジェクトをサポートし、インターネットの指数関数的なコンテンツの増加レートを扱うことができる。
3.メモリのストレージ空間の効率化:高価な半導体メモリを節約し、効果的に使用する。
4.ディスクのストレージ空間の効率化:オブジェクト・ストアの有限なディスク容量内に大量のインターネット・オブジェクトのレプリカをストアすることができる。
5.エイリアスの自由度:名前は異なるが、コンテンツが等しい同一オブジェクト・コンテンツを有する複数のオブジェクトまたはオブジェクトの変化型は、オブジェクト・コンテンツが1回だけキャッシュされ、異なる名前の間で共有される。
6.マルチメディアの多様性をサポート:数百バイトからメガバイトに至る6桁にわたるサイズ範囲で多数のタイプの多様なマルチメディア・オブジェクトを効率的にサポートする。
7.高速かつ用法を意識したガーベジ・コレクション:有用性の低いオブジェクトをオブジェクト・ストアから効率的に削除し、新しいオブジェクトのためのスペースを確保する。
8.データの一貫性:プログラム上のエラーおよびハードウエアの障害によりデータの信頼性を失うことがない。
9.高速リスタートが可能:時間を要するデータベースまたはファイル・システムのチェック・オペレーションを必要とすることなく、リスタート後数秒内にオブジェクト・キャッシュが要求に対するサービスを開始することができる。
10.ストリーミング:大きなオブジェクト全体をメモリ内に置くことなく、オブジェクト・ストアから遅いクライアントに、効率的にパイプラインさせることができる。
11.コンテンツ・ネゴシエーションのサポート:プロキシ・キャッシュは、クライアントのブラウザ、言語、またはその他のクライアントの要求の属性に向けられた、同一URLのオブジェクトの変化型を効率的かつ柔軟にストアすることができる。
12.汎用適用可能性:オブジェクト・ストアのインターフェースは、充分に柔軟であり、将来的なメディア・タイプおよびプロトコルに適合することができる。
【0023】
【発明の要約】
以上のニーズおよびそこに示さなかった他のニーズは、本発明によって解決され、それにおいては、1側面として、情報オブジェクトの名前に基づくキー値によって識別される情報オブジェクト用のキャッシュ内に、当該キー値に基づくセット・サブキー値を用いて情報オブジェクトをインデクス付けするタグ・テーブル、前述のキー値に基づく第2のサブキー値によって当該タグ・テーブル内のセットにインデクス付けされた複数のブロックを有するディレクトリ・テーブル、および、当該ディレクトリ・テーブル内のブロックによって参照されるデータ・ストレージ・エリアを備え、要求のあった情報オブジェクトをサーバのキャッシュからクライアントに配信する方法において:要求された情報オブジェクトを識別する名前を受け取るステップ;前記名前に基づき、複数のサブキーからなる固定サイズのキー値を演算するステップ;ディレクトリ・テーブル内において、前記サブキーをルックアップ・キーとして使用し、前記要求された情報オブジェクトをルックアップするステップ;および、前記ディレクトリ・テーブルの一致ブロック内に包含されている参照を使用して前記要求された情報オブジェクトのコピーをデータ・ストレージ・エリアから取り出すステップ;を包含することを特徴とする。
【0024】
本発明のこの側面の特徴は、前記キャッシュ内の、前記要求された情報オブジェクトの複数のバージョンのリストから、要求された情報オブジェクトのバージョンを選択するステップ;前記キャッシュ内の、前記要求された情報オブジェクトの格納場所を、最初のバージョンに関連して前記リスト内にストアされたオブジェクト・キーに基づいて識別するステップ;前記格納場所から前記要求された情報オブジェクトを取り出すステップ;および、取り出した情報オブジェクトをクライアントに配信するステップ;を含む。
【0025】
別の特徴は、情報オブジェクトを連続させて大容量ストレージ・デバイスにストアするステップを含む。さらに別の特徴は、それぞれの情報オブジェクトを大容量ストレージ・デバイスの連続するプールにストアするステップを含む。さらにまた別の特徴は、それぞれの情報オブジェクトを、前記プール内のアリーナの1つにストアするステップを含む。さらに別の特徴は、それぞれの情報オブジェクトを、前記アリーナから割り当てられた1ないしは複数のフラグメントにストアするステップを含む。
【0026】
本発明の別の特徴によれば、情報オブジェクトを含むフラグメントは、それより前のフラグメント・キーからリンクされる。別の特徴は、要求された情報オブジェクトの、複数のバージョンのそれぞれとともにリストを連続させてストアするステップ;ブロックのそれぞれに、当該ブロックに関連して要求された情報オブジェクトのサイズ値であって、リストのストレージ・サイズを示すサイズ値および情報オブジェクトの複数のバージョンをストアするステップ;を含み、それにおいてステップ(D)は、リストおよび複数のバージョンを同時に読み出すステップを含む。さらに別の特徴は、異なる速度のストリーミング・データ転送を書き込み集成バッファ内に統合する。
【0027】
本発明のさらに別の特徴によれば、前記情報オブジェクトをストアするステップは、別の情報オブジェクトに関してステップ(A)〜(D)を実行しつつ同時に、情報オブジェクトを、前記大容量ストレージ・デバイスの連続した使用可能なストレージ空間内に書き込むステップを含む。
【0028】
また本発明は、前述の側面ならびにその他の側面に従って構成された装置、コンピュータ・システム、コンピュータ・プログラム・プロダクト、および搬送波に埋め込まれたコンピュータ・データ信号を包含している。
【0029】
【好ましい実施例の詳細な説明】
次に、情報オブジェクトをキャッシュするための方法および装置について説明する。以下の説明においては、本発明の完全な理解を提供するため、説明を目的として、各種の具体的な詳細が説明されている。しかしながら、当業者においては明らかになろうが、これらの特定の詳細を用いなくとも本発明を実施することは可能である。一方、周知の構造およびデバイスについては、ブロック図形式により示し、本発明が不必要に不明瞭になることを防止している。
【0030】
(トラフィック・サーバ)
図2に、プロキシ30の特定エレメントの一般的な構造をブロック図の形で示す。一実施例においてプロキシ30は、トラフィック・サーバと呼ばれ、詳細を後述するタイプのコンピュータ・ワークステーション上で動作する1ないしは複数のコンピュータ・プログラムまたはプロセスを含む。クライアント10aは、インターネット20を介してオブジェクトを求める要求50をプロキシ30に送る。この関係において用語「オブジェクト」は、ネットワーク・リソースもしくはサーバから配信される情報の任意の離散的エレメントを意味する。オブジェクトの例としては、ウェブ・ページまたはドキュメント、グラフィック・イメージ、ファイル、テキスト・ドキュメント、およびウェブ・アプリケーション・プログラムによってプログラム実行間に作成されたオブジェクト、あるいはインターネット20を介してアクセス可能なサーバ上にストアされたその他の要素が挙げられる。これとは別に、インターネット以外のネットワークを介してクライアント10aがプロキシ30に接続されることもある。
【0031】
到来した要求50は、プロキシ30の入力/出力(I/O)コア60に到達する。I/Oコア60は、プロキシにより受け取られるデータまたは配信されるデータのレートを調整し、クライアント10aとインターネット20の間におけるリンクのデータ転送速度に整合させる。好ましい実施例においては、I/Oコア60が、プロキシ30およびインターネット20に接続される、入力バッファと出力バッファの間に配置された、循環式に配列されるバケットのセットとして実装される。プロキシ30と1ないしは複数のクライアント10aの間の接続は、これらのバケット内にストアされる。セット内の各バケットは、連続して調べられ、バケット内の各接続がポーリングされる。ポーリングの間、最後のポーリング以降に当該接続に関連付けされているバッファ内に蓄積された情報の量が判断される。この量に基づいて、その接続に関連付けされた周期の値が調整される。その後、概して現在のバケット数の合計および周期値によって識別される別のバケット内に接続がストアされる。ポーリングは、次の接続および次のバケットに続く。このようにして、連続する接続のポーリングの経過時間によって、実際の動作帯域幅、つまりその接続のデータ通信速度に自動的に調整される。
【0032】
I/Oコア60は、この要求50を、I/Oコア60およびキャッシュ80に接続されたプロトコル・エンジン70に渡す。プロトコル・エンジン70は、要求50を構文解釈し、要求50内に埋め込まれている明文化されたアクションのタイプを決定する。プロトコル・エンジン70は、要求50内の情報に基づいて特定のオペレーションを実行するコマンドをキャッシュ80に提供する。一実施例においては、キャッシュ80が、アプリケーション・プログラミング・インターフェース(API)を使用し、プロトコル・エンジン70にアクセス可能な1ないしは複数のコンピュータ・プログラム内に実装される。この実施例の場合は、プロトコル・エンジンが要求50をデコードし、キャッシュ80のAPIに対してファンクション呼び出しを行う。このファンクション呼び出しには、パラメータ値、要求50から導き出した情報が含まれる。
【0033】
キャッシュ80は、プロトコル・エンジン70に接続されてそれとの間において情報の送受を行い、また不揮発性大容量ストレージ・デバイス90a〜90nに接続されてそれと双方向通信する。一実施例においては、大容量ストレージ・デバイス90a〜90nが大容量高速ディスク・ドライブである。キャッシュ80は、データ・テーブル82とも双方向通信するが、それについての詳細は後述する。
【0034】
(オブジェクト・キャッシュのインデクス化)
(コンテンツのインデクス化)
好ましい実施例においては、キャッシュ80がオブジェクトをストレージ・デバイス90a〜90nにストアする。「人気のある」オブジェクトについては、キャッシュ内にもレプリカが作られる。この好ましい実施例の場合、キャッシュのサイズは有限であり、主としてプロキシ30のメモリまたはRAMにストアされる。
【0035】
ディスク上のオブジェクトは、キーと呼ばれる固定サイズのロケータによってインデクス付けされる。キーは、ディレクトリ内にインデクス付けするために使用され、ディスク上のオブジェクトの位置および当該オブジェクトに関するメタデータをポイントする。キーには、それぞれ「名前キー」および「オブジェクト・キー」と呼ばれる2つのタイプがある。名前キーは、名前付きオブジェクトに関するメタデータをインデクス付けするために使用され、オブジェクト・キーは、真のオブジェクトのコンテンツをインデクス付けするために使用される。名前キーは、URLならびにその他の情報リソースの名前を、そのオブジェクト・データ用のオブジェクト・キーを含むメタデータ構造に変換するために使用される。次に説明するように、この2レベルのインデクス構造は、複数の代替オブジェクトを単一の名前に関連付けする機能を容易にする一方、同時に、あらゆるオブジェクトのコンテンツのコピーを重複させることなくディスク上で維持し、複数の異なる名前または選択肢の間でそれを共有する。
【0036】
名前またはURLをキーとして使用し、それによりオブジェクトを参照するほかのキャッシュ・システムとは異なり、本発明の実施例は、オブジェクト自体を構成する「指紋」を使用してオブジェクトを見出す。インデクス済みのオブジェクトのコンテンツから生成されたキーを、ここではオブジェクト・キーと呼んでいる。厳密に述べれば、オブジェクト・キー56は、固有の指紋、つまりオブジェクト52のコンテンツの圧縮された表現である。好ましくは、オブジェクト52のコピーを入力としてハッシュ関数54に与え、その出力をオブジェクト・キー56とする。たとえば、オブジェクト52のファイルもしくはその他の表現をハッシュ関数の入力として与えると、それが当該ファイルの各バイトを読み込み、ファイル全体の読み込みを完了するまで、オブジェクト・キー56の一部の生成を繰り返す。このようにしてオブジェクト・キー56は、その名前ではなく、オブジェクト52のコンテンツ全体に基づいて生成される。キーがコンテンツ・ベースであり、キャッシュ80のテーブルに対するインデクスとして機能することから、このキャッシュは、コンテンツ・インデクス付きキャッシュと呼ばれる。コンテンツの指紋キーが与えられれば、コンテンツを容易に見つけることができる。
【0037】
この実施例においては、コンテンツのインデクス化が、キャッシュ80による、名前は異なるが同一のコンテンツを有する複製オブジェクトの検出を可能にする。まったく同じコンテンツを有するオブジェクトが、異なる名前を有している場合であっても、ハッシュによりそれらが同一のキー値をもたらすことから、この種の複製が検出される。
【0038】
たとえばサーバ40が、あるサブディレクトリ内に、「IE4.exe」という名前を付けたサイズが10メガバイトの実行可能ファイルからなるソフトウエア・プログラムをストアしている場合を考える。それにおいて、さらにサーバ40が、同一ファイルのコピーに「Internet Explorer.exe」という名前を付けて別のサブディレクトリ内にストアしているとする。サーバ40は、匿名FTPサーバであり、FTPプロトコルを使用し、HTTP接続を介してファイルのコピーを配信することができる。過去のアプローチにおいては、1ないしは複数のクライアントがこれら2つのファイルを要求すると、キャッシュがそれぞれのファイルのコピーをキャッシュ・ストレージにストアし、キャッシュ内の各ファイルをそれぞれの名前を使用してインデクス付けするということが行われている。この結果、キャッシュは、名前を除けばすべてが等しい2つのオブジェクトのために、20メガバイトを使用しなければならない。
【0039】
本発明の実施例においては、さらに詳細に述べるが、これらのオブジェクトのそれぞれについて、キャッシュが名前キーおよびオブジェクト・キーを作成する。名前キーは、オブジェクトの名前にハッシュ関数を適用することによって作成される。オブジェクト・キーは、オブジェクトのコンテンツにハッシュ関数を適用することによって作成される。この結果、上記の例に示した2つのオブジェクトの場合であれば、作成された2つの名前キーは異なるが、オブジェクト・キーは同一になる。最初のオブジェクトをキャッシュ内にストアするとき、その名前キーおよびオブジェクト・キーをキャッシュ内にストアする。その後2番目のオブジェクトをキャッシュ内にストアするとき、その名前キーをキャッシュ内にストアする。しかしながらキャッシュは、以前のまったく等しいオブジェクト・キーのエントリを検出し、重複するオブジェクト・キーのエントリをストアしない;それに代えてキャッシュは、同一のオブジェクト・キーのエントリに対する参照を、名前キーに関連させてストアし、新しい冗長なオブジェクトを削除する。結果的に、オブジェクトのストアに必要となるストレージは10メガバイトだけになる。このようにキャッシュは、異なる名前を有するオブジェクトの複製を検出し、その種のオブジェクトに対して永続させるコピーを1つだけストアする。
【0040】
図3Aは、オブジェクト52用のオブジェクト・キー56を生成するために使用されるメカニズムのブロック図を示している。クライアント10aからオブジェクト52の要求があったが、ここに述べるプロセスを使用してキャッシュ80内にそのオブジェクトが見つからないとき、キャッシュはサーバからそのオブジェクトを取り出し、キャッシュ内にそのオブジェクトをストアするためのオブジェクト・キー56を生成する。
【0041】
ディレクトリは、ディスク上の位置にキーをマップするデータ構造である。高速ルックアップに備えるためには、ディレクトリのコンテンツのすべて、もしくはそのほとんどをメモリ内に維持しておくことが望ましい。これには、大量のエントリが適当な量のメモリに収まるようにディレクトリのエントリを小さくする必要がある。また、アクセスの50%がキャッシュにストアされないと予測されることから、貴重なディスク・シーク時間を費やすことなくキャッシュのミスを迅速に判断したい。この種の迅速なキャッシュミスの最適化は、実際のデータ転送に少ないディスク・ヘッドの動きをもたらし、成功を導かない不確かなルックアップを抑える。最後に、ハッシュ・サーチ技法を介してルックアップを高速にするため、ディレクトリのエントリを固定サイズにする。
【0042】
キーは、前述の理由から小さく、固定されたサイズとなるように慎重に構成される。さらにキーは、ストレージ効率および迅速なルックアップを目的としてサブキーに分割される。キーの小さな一部において相違を検出することにより、迅速にキャッシュミスを識別することができる。この理由から、完全なキーを収めた完全なディレクトリ・テーブルをサーチする代わりに、「タグ・テーブル」と呼ばれる小さなサブキーのテーブルを使用して迅速にキャッシュミスのフィルタリングを行う。さらに、大きなビット・ベクトルの統計プロパティを利用して空間効率の高いキーを作成することが可能であり、それにより小さい必要空間を用いて大量のキャッシュ・オブジェクトをサポートすることができる。
【0043】
一実施例によれば、オブジェクト・キー56はセット・サブキー58およびタグ・サブキー59からなる。セット・サブキー58およびタグ・サブキー59は、完全なオブジェクト・キー56を構成するビットのサブセットを構成する。たとえば、完全なオブジェクト・キー56が128ビットの長さを有するとき、サブキー58、59をそれぞれ16ビット、27ビットとし、あるいは完全なキーの別の任意部分とすることができる。サブキー58、59は、後述する特定の操作に使用され、それにおいてこれらのサブキーは、完全なキーを使用した場合に近い正確な結果をもたらす。ただしこれにおいて「正確な」とは、サブキーの使用が、完全なキーの使用時と同程度の頻度でキャッシュ内におけるヒットを導くことを意味している。
【0044】
この精度プロパティは、「滑らかさ(smoothness)」として知られ、ハッシュ関数の特定の好ましいサブセットにおける特性となる。実施例における使用に適したハッシュ関数の例としてMD5があり、これについてはB. Schneier(B.シュナイザー)著「Applied Cryptography(応用暗号学)」(ニューヨーク:John Wiley & Sons, Inc.(ジョン・ウィリー・アンド・サンズ・インク)第2版,1996年)の429〜431ページおよび436〜441ページに解説されている。MD5ハッシュ関数は、任意長を有する入力データ・ストリームから128ビットのキーを生成する。概してMD5ハッシュ関数およびそのほかの一方向ハッシュ関数は、暗号分野において、安全なチャンネルを介して送信する必要のあるメッセージまたはドキュメントのための安全キーを生成するために使用される。一般的なハッシュ・テーブルの構成およびサーチ技法については、D. Knuth(D.クナス)著「The Art of Computer Programming(コンピュータ・プログラミングの技法)第3巻,Sorting and Searching(ソーティングおよびサーチ)」(マサチューセッツ州レディング:Addison-Wesley(アディソン‐ウェズレー)1973年)の506〜549ページに詳しい解説がある。
【0045】
(名前のインデクス化)
残念ながら、一般にはオブジェクトの要求において、要求オブジェクトの識別に、そのオブジェクト用のオブジェクト・キーが使用されることがない。むしろ要求は、通常、名前によって要求オブジェクトを識別する。名前のフォーマットは、キャッシュが使用される環境に応じて実装ごとに異なることがある。たとえば、オブジェクト名にファイル・システムの名前、ネットワーク・アドレス、あるいはURLが使用されることもある。
【0046】
本発明の一側面によれば、要求オブジェクト用のオブジェクト・キーが、オブジェクト名に基づいて生成された「名前キー」の下にインデクス付けされる。つまり、要求に応答したオブジェクトの取り出しは、2段階プロセスとなり、それにおいては名前キーがオブジェクト・キーの発見に使用され、オブジェクト・キーがオブジェクトそのものの発見に使用される。
【0047】
図3Bは、オブジェクト名53に基づいて名前キー62を生成するとき使用されるメカニズムを示したブロック図である。一実施例によれば、オブジェクト・キーに使用したものと同じハッシュ関数54が名前キーの生成に使用される。したがって、名前キーは、オブジェクト・キーと同じ長さおよび滑らかさ特性を有することになる。
【0048】
オブジェクト・キー56と同様に、名前キー62もセット・サブキー64およびタグ・サブキー66からなる。サブキー64、66は、完全な名前キー62を構成するビットのサブセットを構成する。たとえば、完全な名前キー62が128ビットの長さを有するとき、第1および第2のサブキー64、66をそれぞれ16ビット、27ビットとし、あるいは完全なキーの別の任意部分とすることができる。
【0049】
(オブジェクト・キーまたは名前キーによるサーチ)
好ましくはキャッシュ80が、コンピュータ・システムのメモリまたはその不揮発性ストレージ、たとえばディスク等にストアされる特定のデータ構造からなるものとする。図4は、キャッシュ80の概略の構成を示すブロック図である。キャッシュ80は、概してタグ・テーブル102、ディレクトリ・テーブル110、オープン・ディレクトリ・テーブル130、および一連のプール200a〜200nを含み、次に詳細を述べるように論理参照を使用して互いに連結されている。
【0050】
タグ・テーブル102およびディレクトリ・テーブル110は、セット連想ハッシュ・テーブル(set associative hash tables)として組織化されている。タグ・テーブル102、ディレクトリ・テーブル110、およびオープン・ディレクトリ・テーブル130は、図2に示したテーブル82に対応している。ここでは説明の便宜から、インデクス・サーチがオブジェクト・キー56に基づいて実行されるものとする。しかしながらタグ・テーブル102およびディレクトリ・テーブル110は、名前キー62に基づいて検索を行った場合にも同じ態様において動作する。
【0051】
タグ・テーブル102は、セット104a、104b、...104nのセット連想配列である。タグ・テーブルは、メイン・メモリに収まる程度に充分小ささく設計されている。この目的は迅速にキャッシュミスを検出することであり、キーを構成するビットの小さなサブセットのみを用いて、キーがキャッシュ内にストアされていないことを判断できるようにする。なお、104nという表示は、タグ・テーブル102内に必要なセット数が特定されていないことを示している。セット104nの例に示されているように、各セット104a〜104nは、複数のブロック106からなる。
【0052】
好ましい実施例においては、オブジェクト・キー56が128ビットの長さを有する。セット・サブキー58は、セット104a〜104nの1つを識別して選択するために使用される。好ましくは、セット・サブキー58の長さを概略で18ビットとする。タグ・サブキー59は、選択したセット内のエントリ106の1つを参照するために使用される。好ましくは、タグ・サブキー59の長さを概略で16ビットとするが、多くのセットが存在する場合には、ゼロ・ビットまで小さくすることができる。その場合、タグ・テーブルがビット・ベクトルになる。
【0053】
エレメントの識別もしくは参照に使用されるメカニズムは、実装ごとに異なることがあり、連想参照、ポインタ、またはこれらの組み合わせを含んでいることもある。このため「参照」という用語は、あるエレメントが別のエレメントを識別もしくは参照することを示す。残余サブキー56'は、キー56の残りのビットからなる。これらのセット・サブキー、タグ・サブキー、および残余サブキーを、それぞれs、t、およびrを用いて表すこともある。
【0054】
各エントリが比較的小さい情報量を含むタグ・テーブル102の好ましい構造においては、RAM等の揮発性メイン・メモリにタグ・テーブルを高速にストアすることが可能になる。したがってこのタグ・テーブル102の構造は、キャッシュの迅速な動作を促進する。一方、ディレクトリ・テーブル110内のブロックは、以下述べるようにはるかに多くの情報を含んでおり、結局ディレクトリ・テーブルの一部は、高速なDRAMメモリとは対照的となる磁気ディスク・媒体上に常駐することになる。
【0055】
ディレクトリ・テーブル110は、複数のセット110a〜110nを包含している。各セット110a〜110nは固定されたサイズを有し、それぞれは複数のブロック112a〜112nからなる。好ましい実施例においては、あらかじめ決定済みの一定数のセットが存在し、各セット内にはあらかじめ決定済みの一定数のブロックが存在する。ブロック112nの例に示されるように、ブロック112a〜112nのそれぞれは、第3の、残余サブキー値116、ディスク・ロケーション値118、およびサイズ値120をストアしている。この好ましい実施例においては、残余サブキー値116が、128ビットの完全なオブジェクト・キー56の27ビット部分であり、セット・サブキー58またはタグ・サブキー59を構成するビットと互いに素となって、完全なオブジェクト・キー56のビットを構成する。
【0056】
サーチにおいては、図4においてエントリ106をセット110dに接続する矢印により示されるように、タグ・テーブル102のエントリ内にストアされているサブキー値がセット110a〜110nの1つに一致するか、それを参照する。一例として、前述したような12ビットのキーおよび4ビットの第1および第2のサブキーを考える。ここで、セット・サブキー値「1111」がタグ・テーブル102のセット104nに一致し、タグ・サブキー値「0000」がセット104nのエントリ106に一致したとする。タグ・サブキー値「0000」の一致は、キー・プレフィクス「11110000」に関連付けされたディレクトリ・テーブル110のセット110d内に、対応するエントリが存在することを示す。このようにしてセット110a〜110nの1つを選択すると、選択したセット内のブロックの線形サーチを行って、ブロック112a等の、オブジェクト・キー56の対応する部分に一致する残余サブキー値116を含むブロックを見つけ出す。一致が見つかると、ほとんど必ずキャッシュ内にヒットが存在すると言える。ただし第1、第2および第3のサブキーが完全なキーを構成しないときは、わずかではあるがミスの可能性がある。ヒットがあると、ブロックに含まれている情報に基づいて参照オブジェクトを見つけ出し、ストレージ・デバイス90a〜90nの1つからそれを取り出し、クライアント10aに提供するが、それについては後述する。
【0057】
RAMメモリの使用を最小に抑えて迅速にミスを除外することを役割とするタグ・テーブルと異なり、ディレクトリ・テーブル110内の各ブロックは、ディスク・ロケーションに対する完全なポインタを包含している。ディスク・ロケーション値118によって参照されるアイテムは、キーが生成されたソースによって異なる。前述のようにオブジェクトのコンテンツに基づいて生成されたキーの場合には、ディスク・ロケーション値118が、図4においてブロック112bのキャッシュ内のストア済みオブジェクト124として示されてように、その(もしくはその最初のフラグメントの)位置を表す。キーが名前キーの場合には、ブロック112nとして示されるように、ディスク・ロケーション値118は、1ないしは複数の選択肢のベクトル122の位置を示し、そのそれぞれは、名前キーの生成に使用した名前を持ったオブジェクトに対応する1ないしは複数のオブジェクト・キーをストアしている。図4には、例として単一のタグ・テーブル102および単一のディレクトリ・テーブル110を示した。しかしながら、追加のストレージならびにインデクスのレベルを提供する追加のテーブルを使用する別の実施例も考えられる。
【0058】
好ましい構成においては、キャッシュのサーチを行うとき、タグ・テーブル102内で非常に迅速にヒットもしくはミスが得られる。タグ・テーブル102内にヒットが存在するときは、非常に高い確率で対応するエントリがディレクトリ・テーブル110内に存在する。この高い確率は、タグ・テーブル102内のヒットが、キャッシュがオブジェクト、つまりその完全なキーが、受け取ったキーとまったく等しいXビットを共有しているオブジェクトを保持していることを意味するという事実からもたらされ、それにおいてXは、セット・サブキー58とタグ・サブキー59を連結したビット数である。ミスが迅速に識別され得ることから、またディレクトリ・テーブル110全体をメイン・メモリ内に常駐させることを必要とせずにヒットおよびミスがメモリ内のタグ・テーブル102を使用して迅速に検出されることから、キャッシュ80が高速かつ効率的に動作する。
【0059】
キャッシュをオブジェクト・キー56に基づいてサーチする場合、セット・サブキー58を使用してタグ・テーブル102内のセット104a〜104nの1つをインデクス付けする。セット・サブキー58に関連付けされたセットを識別した後は、セット内のエレメントに対する線形サーチを行って、タグがタグ・サブキー59に一致するエントリを識別する。
【0060】
キャッシュ80からクライアント10aによって要求されたオブジェクト52を求めるサーチにおいては、セット・サブキー58を用いてセット104a〜104nの1つを選択すると、そのセット内の全エレメント106に対する線形サーチを実行する。このサーチは、タグ・サブキー59とエントリの1つとの一致を求める。一致が見つかると、要求オブジェクトに関してタグ・テーブル102内にヒットが存在することになり、キャッシュ80は、先に進んでディレクトリ・テーブル110内のヒットを求める。
【0061】
ここで説明のために、オブジェクト・キーを、値「111100001010」を有する12ビットのキーとし、セット・サブキーをオブジェクト・キーの最初の4ビット、つまり値「1111」からなるものとし、タグ・サブキーをオブジェクト・キーの次の4ビット、つまり値「0000」からなるものとする。実際の使用においては、残余ビットがセット・ビットおよびタグ・ビットよりはるかに大きくなり、メモリの節約に影響を及ぼす。キャッシュは、セット「15(1111)」を、タグ・テーブル102を調べるためのセットとして識別する。キャッシュは、そのセット内の、タグ「0000」を含むエントリをサーチする。その種のエントリが存在しなければ、タグ・テーブル102内においてミスが発生する。その種のエントリが存在すれば、キャッシュは、ディレクトリ・テーブル110内の残りのビットの一致についてチェックする。
【0062】
(マルチレベル・ディレクトリ・テーブル)
一実施例においては、ディレクトリ・テーブル110が、それぞれが固定数のエレメントからなる複数のセットを含んでいる。各エレメントは、残余タグおよびディスク・ポインタを含む。大きなキャッシュは大量のオブジェクトを含み、それによりディレクトリ・テーブル内に多数のエレメントが必要になる。これによってテーブルが非常に大きくなり、メイン・メモリ内においてコスト効果に関して有利なストアが得られなくなる。
【0063】
たとえば、キャッシュが1億2800万のディレクトリ・テーブル・エントリからなり、それぞれのエレメントが控えめ値として8バイトのストレージによって表されるとき、ディレクトリ・テーブルのストアに1ギガバイトのメモリが必要になるが、これは現在のワークステーション・コンピュータに一般的なメモリ容量を超えている。これらのオブジェクトのうち、実際に常時アクセスされるものがほとんどないことから、頻繁に使用されるエントリをメイン・メモリ上に残し、使用頻度の低いエントリをディスクに移動することが望ましい。
【0064】
図4Cに、マルチレベル・ディレクトリ・メカニズムのブロック図を示す。ディレクトリ・テーブル110は、セグメント111a、111b、111cに分割されている。好ましい実施例においては、2ないしは3のセグメント111a〜111cが存在するが、それより多くのセグメントを使用してもよい。最初のセグメント111aはもっとも小さく、図11に示した、詳細を後述するコンピュータ・システムのメイン・メモリ1106等のメイン・メモリに適合する。第2および第3のセグメント111b、111cは、順次大きくなる。第2および第3のセグメント111b、111cは、ページング・メカニズムを介してディスク等の大容量ストレージ・デバイス1110に結合される。第2および第3のセグメント111b、111cは、要求データがメイン・メモリ1106内に存在しないとき、ディスクとの間で動的にデータのページングを行う。
【0065】
より頻繁にディレクトリ・エレメントがアクセスされるときは、ディレクトリ・エレメントが、マルチレベル・ディレクトリのセグメント111a〜111cの中を逐次より高いセグメントへと移動する。つまり、頻繁にアクセスされたディレクトリ・エレメントは、メイン・メモリ1106内にストアされる可能性がより高くなる。もっとも「人気のある」エレメントは、ディレクトリ内のもっとも高く、もっとも小さいセグメント111aに現れ、常時メイン・メモリ1106内に存在することになる。エントリの「人気」は、長さが数ビットの小さいカウンタによって追跡される。このカウンタは、「スケーリング付きカウンタの更新」セクションににおいて説明しているように更新される。このマルチレベル・ディレクトリは、メモリ内ハッシュ・テーブルのパフォーマンスに近く、その一方でアクティブでないエレメントをディスク上に置くことによって、テラバイト・サイズのキャッシュに代わるコスト効果の高い総合ストレージ容量を提供する。
【0066】
(ディレクトリのページング)
すでに述べたように、好ましい実施例においては、ディレクトリ・テーブル110がマルチレベルのハッシュ・テーブルとして実装される。ディレクトリ・テーブルの一部はメイン・メモリの外、つまりディスク上に常駐することもある。ディレクトリ・テーブル用のデータは、要求に応じてディスクに、またディスクからページングされる。このメカニズムの好ましい実施例は、ダイレクト・ディスクI/Oを使用してディスクへのページングならびにディスクからのページングを行うタイミング、およびページングする情報量を慎重にコントロールしている。
【0067】
このアプローチの別の実施例においては、UNIXタイプのオペレーティング・システムの機能を利用して、ファイルを直接仮想メモリ・セグメントにマップする。このアプローチの場合、キャッシュがUNIXのmmap()機能を使用してディレクトリ・テーブルを仮想メモリ内にマップする。たとえば、ファイルもしくはディスクの位置に対するポインタをパラメータとして伴うmmap要求がオペレーティング・システムに与えられる。mmap要求は、参照されたファイルもしくはディスクの位置をメモリ位置にマップする要求として機能する。その後オペレーティング・システムは、必要に応じて、参照されたファイルもしくはディスクの位置の部分をディスクからメモリに自動的にロードする。
【0068】
さらに、メモリ位置が更新され、もしくはアクセスされると、そのオブジェクトのメモリ・バージョンが必要に応じてディスクに書き戻される。このようにして、ネイティブ・オペレーティング・システム・メカニズムを使用し、不揮発性デバイス内においてテーブルのバックアップ・ストレージを管理する。しかしながら、メイン・メモリ内に常時存在するのは、通常、ディレクトリ・テーブル110の一部だけとなる。
【0069】
典型的な実施例においては、ディレクトリ・テーブルおよびオープン・ディレクトリは、「ストライピング」技法を使用してストアされる。テーブルの各セットは、異なる物理的ディスク・ドライブ上にストアされる。たとえば、ディレクトリ・テーブル110のセット110aがストレージ・デバイス90aにストアされ、セット110bがストレージ・デバイス110bにストアされるといった形になる。この構成においては、セットに到達するまでのディスク・ドライブ・ヘッドに必要なシーク・オペレーションの数が抑えられ、その結果、キャッシュの速度ならびに効率が向上する。
【0070】
ここで、ディスクとメモリの間においてデータのページングを行う場合、ある種の保護が行われ、メモリ内にストアされている情報と不揮発性ストレージ・デバイス内にストアされている対応する情報が矛盾しないことが保証される点に注意されたい。オブジェクト・キャッシュ内に効率のよい一貫性をもたらすために使用される技法ついては、「同期および一貫性の強化」セクションにおいて、ガーベジ・コレクションに関する説明に要約されている。
【0071】
(選択肢のベクトル)
前述したように、単一のURLが多数のバージョンを有する1つのオブジェクトをマップすることが可能である。これらのバージョンは、「選択肢(alternates)」と呼ばれる。オブジェクト・キャッシュを使用しないシステムにおいては、バージョンが次のようにして選択される。クライアント10aがインターネット20を介してサーバ40に対するHTTP接続を確立する。クライアントは、サーバからオブジェクトを要求するHTTPメッセージ内において、それ自体に関する情報を提供する。たとえば、オブジェクトを求めるHTTP要求は、クライアントによって使用されているウェブ・ブラウザを識別する情報、当該ブラウザのバージョン、クライアントによって好ましいとされる言語、およびクライアントによって好ましいとされるメディア内容のタイプを識別するヘッダを含んでいる。サーバ40は、このHTTP要求を受け取ると、ヘッダ情報を抽出し、ヘッダ情報の値に基づいてオブジェクト52の変化型を選択する。選択された選択肢は、応答メッセージ内においてクライアント10aに返される。このタイプの変化型選択は、新生のHTTP/1.1ハイパーテキスト・トランスファ・プロトコルによって奨励されている。
【0072】
効率的にURLに関する選択肢のコピーを維持することは、キャッシュ・オブジェクト・ストアにとって重要である。すべてのURL要求に応答してキャッシュから単一のオブジェクトが常に提供されるとすれば、ブラウザは、サーバから直接獲得したものと異なるコンテンツを受け取る可能性がある。この理由から、ディレクトリ・テーブル110内のそれぞれの名前キーが選択肢のベクトル122a〜122nの1つをマップし、それによってキャッシュ80が複数の関連バージョンの中からオブジェクトの特定のバージョンを選択できるようにしている。たとえば、オブジェクト52をウェブ・ページとすれば、サーバ40は、英語、フランス語および日本語のバージョンのそのオブジェクトをストアすることができる。
【0073】
選択肢のベクトル122a〜122nのそれぞれは、複数の選択肢レコード123a〜123nをストアする構造である。選択肢レコード123a〜123nのそれぞれは、要求オブジェクト52の選択肢バージョンを記述する情報をストアしているデータ構造である。たとえば、この情報は、特定のブラウザのバージョン、オブジェクトに用いられている人間の言語等を記述する。選択肢レコードもまた、それぞれ選択肢バージョンを含むオブジェクトを識別する完全なオブジェクト・キーをストアしている。好ましい実施例においては、選択肢レコード123a〜123nのそれぞれが要求情報、応答情報、およびオブジェクト・キー56をストアしている。
【0074】
「人気のある」単一のオブジェクト名が多くの選択肢をマップしていることがあるため、一実施例においては、キャッシュがオブジェクト名を用いて明示的もしくは暗示的な要求のコンテキストを組み立て、ベクトルのエレメント数を低減している。たとえば、ウェブ・クライアント要求のユーザ‐エージェント・ヘッダ(特定のブラウザ・アプリケーションを示す)をウェブURLと結合して名前キーを形成すればよい。コンテキスト情報をキー内に直接包含させることによって、ディレクトリ・テーブル内のエントリ数が増加するが、各ベクトル内の選択肢の数は減少する。実際問題として、特定のヘッダおよび情報オブジェクト名を結合させた暗示的なコンテキストは構成可能である。
【0075】
これらの選択肢のベクトル122a〜122nは、HTTP/1.1によってネゴシエーションが行われるコンテンツの適正な処理をサポートする。HTTP/1.1メッセージのヘッダに含まれる要求情報および応答情報は、特定の要求を満たすために使用する選択肢レコード123a〜123nのうちの1つを決定する上で使用される。キャッシュ80がオブジェクトを求める要求を受け取ったとき、その要求には通常、希望のオブジェクトの名前(またはURL)に加えてヘッダ情報が含まれている。すでに説明したように、名前は適切な選択肢のベクトルを見つけ出すために使用される。適切な選択肢のベクトルが見つかった後は、ヘッダ情報を使用し、その要求に適切な選択肢レコードを選択する。
【0076】
より具体的に述べれば、キャッシュ80内において、ヘッダ情報が受け取られて解析される。キャッシュ80は、ヘッダ情報内に見つかった値と、選択肢レコード123a〜123nの1つの要求情報の一致を求める。たとえば、キャッシュ80がワールド・ワイド・ウェブとの関連において使用されているとき、オブジェクトを求める要求がHTTP要求の形式のキャッシュを含むサーバに対して提供される。
【0077】
キャッシュ80は、HTTP要求内の情報を調べ、選択肢レコード123a〜123nのいずれを使用するかを決定する。たとえば、要求しているクライアント10aがバージョン3.0のNetscape Navigator(ネットスケープ・ナビゲータ)ブラウザ・プログラムを走らせており、ドイツ語のテキストの選択を要求していることを示す要求情報がHTTP要求に含まれていることが考えられる。キャッシュ80は、この情報を使用して選択肢レコード123a〜123nをサーチし、要求情報から得たブラウザのバージョンおよびクライアントの場所に適合する応答情報を探す。一致が見つかると、一致した選択肢からオブジェクト・キーを取り出し、そのオブジェクト・キーを使用して対応するオブジェクトをキャッシュから取り出す。
【0078】
キャッシュは、クライアントの要求の中で指定されている基準との一致によって選択されるオブジェクトを最適化する。クライアントの要求においては、最小受理基準(たとえば、ドキュメントはJPEGイメージでなければならない、あるいはドキュメントはラテン語でなければならない等)が指定されることもある。また、クライアントの要求が、一致に関する比較用重み付け基準(たとえば、GIFイメージを受け入れる重み付けを0.5、それより好ましいJPEGイメージを受け入れる重み付けを0.75とする)を指定することもある。数字による重み付けは、すべての制限軸にわたって累算され、最適化された最終的な重み付けが作り出される。
【0079】
オブジェクト・キーは、上記の態様においてオブジェクトを取り出すために使用される。具体的には、オブジェクト・キーのサブキー部分を使用してタグ・テーブル102およびディレクトリ・テーブル110の別のサーチを開始し、そのサブキー値に関するヒットを求める。タグ・テーブルおよびディレクトリ・テーブルのいずれにもヒットが存在するときは、サブキー値を使用して到達したディレクトリ・テーブル内のブロックは、常にストア済みのオブジェクト(たとえばストア済みのオブジェクト124)を参照する。つまりキャッシュ80は、選択肢のベクトル122を使用し、複数のバージョンを有するオブジェクトに関する要求を処理することにより、要求しているクライアント10aに対して適切なバージョンを配信することができる。
【0080】
図4には、一例の選択肢のベクトル122が1つ、一例のストア済みオブジェクト124が1つだけ示されている。しかしながら実際には、インデクス付けされているオブジェクトの数およびオブジェクトに関連付けされた選択肢バージョンの数に応じて、キャッシュ80が任意数のベクトルおよびディスク・ブロックを含むことになる。
【0081】
(先読み)
図4Bは、一例の選択肢のベクトル122a〜122nに関するストレージ構成を示したブロック図である。システムは、メタデータの後に続けてデータ・オブジェクトを統合しようと試みる。シークは時間を要するが、連続した読み出しが読み出しを高速化することから、データとメタデータを整理統合し、メタデータに続いてデータの先読みを行うことによってパフォーマンスを向上することができる。
【0082】
ストレージ・デバイス90a〜90nの1つにおいては、選択肢のベクトル122a〜122nのそれぞれが、ベクトル内に表された選択肢レコード123a〜123nに関連付けされているストア済みオブジェクト124a〜124bに隣接する位置にストアされる。たとえば、選択肢のベクトル122aは、選択肢レコード123a〜123cをストアしている。選択肢レコード123aは、選択肢レコードに関連付けされたストア済みオブジェクト124aが英語用に準備されていることを示す要求情報および応答情報をストアしている。別の選択肢レコード123bは、関連するストア済みオブジェクト124bがMicrosoft Internet Explorer(マイクロソフト・インターネット・エクスプローラ)ブラウザとともに使用すべく意図されていることを示す情報をストアしている。選択肢レコード123a、123bによって参照されるストア済みオブジェクト124a、124bは、選択肢のベクトル122a〜122nと隣接してストアされる。
【0083】
各選択肢レコード内のサイズ値120は、関連する選択肢のベクトル122a〜122nの1つとストア済みオブジェクト124の合計サイズをバイト数で表す。キャッシュ80がディスク・ロケーション値118に基づいて選択肢のベクトル122aを参照するとき、キャッシュはサイズ値によって示されるバイト数を読み出す。たとえば、図4Bに示した選択肢のベクトルのキャッシュにおいて、サイズ値は、選択肢のベクトル122aの長さに、関連するストア済みオブジェクト124aの長さを加えた長さを表す。つまりキャッシュ80は、サイズ値を参照することによって、ベクトルだけでなくストア済みオブジェクトを読み出す。この方法によりキャッシュ80は、選択肢のベクトル122の「先読み」を行い、ストレージ・デバイス90a〜90nからオブジェクト52をすべて取り出す。この結果、ストレージ・デバイスによる単一のシーク・オペレーションを使用して、ストレージ・デバイスから選択肢のベクトルおよびオブジェクト52がともに読み出される。したがって、キャッシュ80内にヒットが存在するとき、大抵の場合(単一の選択肢が存在する場合)は、要求されたオブジェクト52が単一のシークを使用してストレージ・デバイスから取り出される。
【0084】
ディスク・ロケーション値118が、選択肢のベクトル122ではなく直接ストア済みオブジェクト124を参照しているときは、サイズ値120がディスク・ブロック内にストアされたオブジェクトのサイズを示す。この値は、ここで詳細を述べているように、単一シークによるオブジェクトの取り出しを容易にするために使用される。
【0085】
(オープン・ディレクトリ)
一実施例においては、キャッシュ80がさらにオープン・ディレクトリ130を備えている。このオープン・ディレクトリ130は、それぞれが複数のリスト・エントリ131a〜131nからなる複数のリンクされたリスト132a〜132nをストアしている。リンクされたリスト132a〜132nのそれぞれは、ディレクトリ・テーブル110内のセット110a〜110nのいずれか1つに関連付けされている。オープン・ディレクトリ130は、揮発性のメイン・メモリにストアされる。好ましくは、オープン・ディレクトリ130のそれぞれのリスト・エントリ131a〜131nが、情報オブジェクトの連想ルックアップを容易にするオブジェクト・キーをストアする。たとえば、リンクされたリスト132a〜132nのそれぞれの中の各アイテムが、オブジェクト52に関する完全なオブジェクト・キー56をストアする。
【0086】
オープン・ディレクトリは、現在トランザクションを受けているオブジェクトを捕まえて、衝突をもたらすオペレーションに抗する相互除外を提供する。たとえば、現在読み出しが行われているオブジェクトに対する上書きまたは削除に対する保護にオープン・ディレクトリが有用となる。またオープン・ディレクトリは、ディレクトリ・テーブル110に対する変更がディレクトリ・テーブル110内において固定される前に、それをバッファする。後述するように、適切なポイントにおいて同期オペレーションが実行され、オープン・ディレクトリ130内に反映されたこの変更がディレクトリ・テーブル110に移動される。これにより、予期しないシステムの異常またはクラッシュが生じた場合にディレクトリ・テーブル110の改ざんを防ぐことができる。
【0087】
さらに一実施例においては、キャッシュ80からオブジェクトが要求されたとき、最初にオープン・ディレクトリ130が調べられる;オープン・ディレクトリには、もっとも最近に使用された情報オブジェクトに対する参照が含まれていることから、それがヒットをもたらす可能性がもっとも高いと考えられる。この形式のオープン・ディレクトリは、「人気のある」データに関するメイン・メモリ内のキャッシュとして機能する。
【0088】
(ディスク・データのレイアウトおよび集成)
オープン・ディレクトリ130、タグ・テーブル102およびディレクトリ・テーブル110がアクセスされてストア済みオブジェクト124の位置を決定した後は、ストレージからそのオブジェクトを読み出し、そのオブジェクトを要求したユーザにそれを送信しなければならない。キャッシュ80からオブジェクト52を取り出すために使用される読み出しオペレーションの効率を向上させるために、最初にデータをストアするとき、一定のデータ集成技法が使用される。ディスク上にデータを最初にストアするとき、ここに示すデータ集成技法に従っていれば、その後の読み出しの効率が大きく改善される。図6は、キャッシュ80およびストレージ・デバイス90a〜90nとともに使用するためのデータ・ストレージ構成を示すブロック図である。ストレージ・デバイス90aは、ディスク・ドライブ等であり、複数のプール200a〜200nにデータをストアする。プールは、連続するディスク空間のセグメントまたはチャンクであり、好ましくは最大で4ギガバイトのサイズを有する。プールは、複数のファイルの断片から、あるいは生のディスク・パーティションのセグメントから割り当てることができる。
【0089】
プール200n等の各プールは、ヘッダ202および、ここで「アリーナ」と呼んでいる複数の固定サイズのストレージ空間204a〜204nを含んでいる。アリーナのサイズは、好ましくは構成可能もしくは変更可能とし、キャッシュ80のパフォーマンスの最適化を可能にする。好ましい実施例においては、アリーナ204a〜204nのそれぞれを概略で512キロバイトから2メガバイトまでのサイズを有するブロックとしている。
【0090】
アリーナに書き込むデータは、メモリ内の「書き込み集成バッファ」に置かれ、あるいは一時的にストアもしくは一時的に置かれる。このバッファは、データを蓄積し、いっぱいになると、1回のシークにおいてディスク上の1つのアリーナに連続的に書き込む。書き込み集成バッファは、書き込みのパフォーマンスを向上させ、データ・アイテムを生のディスク・ドライブから直接読み出すことができるデータのセクタ配列を可能にする。
【0091】
書き込み集成バッファは、アリーナの全コンテンツを保持する充分な大きさを有する。データは、ディスク上の(空の)アリーナに落とされる前に、まず書き込み集成バッファに置かれて整理統合される。また書き込み集成バッファは、集成バッファを満たすとき、それ以外のストレージを割り当てるために使用されるフリー・トップ・ポインタ、それがカバーしているアリーナに名前を設定する識別名、およびそのアリーナのアクティブ・ユーザ数に関する参照カウントを含んでいる。
【0092】
各プール・ヘッダ202は、マジック・ナンバ、バージョン番号値、アリーナ数の値、および1ないしは複数のアリーナ・ヘッダ206a〜206nをストアしている。マジック・ナンバは、単独で内部の一貫性チェックに使用される。バージョン番号値は、プール内にアリーナ206a〜206nを生成したプログラムまたはプロセスのバージョン番号をストアする。これは、現在実行中のキャッシュ80のバージョンが適切にアリーナを読み書きできることを保証するための一貫性チェックに使用される。アリーナ数の値は、プール内に含まれているアリーナの数のカウント値をストアする。
【0093】
プール・ヘッダ202には、アリーナ・ヘッダ206a〜206nのそれぞれに、プール内のそれぞれのアリーナに関する情報がストアされる。各アリーナ・ヘッダは、対応するアリーナが空であるか否か、およびそのアリーナの信頼性が失われているか否か(たとえば、物理的なディスク表面のダメージ、あるいはアプリケーションのエラーによって)を示す2つの1ビット値をストアしている。
【0094】
図6にアリーナ204aの場合を例に示したように、各アリーナは、1ないしは複数のデータのフラグメント208a〜208nを含む。それぞれのフラグメント208a〜208nは、フラグメント・ヘッダ208dおよびフラグメント・データ208eを含んでいる。フラグメント・データ208eは、キャッシュ80にストアされるオブジェクトに関する実際のデータである。ストア済みオブジェクト全体に対応するデータは、単一のフラグメント内に存在することもあれば、複数のフラグメントの中にストアされることもあり、またそれが複数のアリーナにわたって存在することもある。フラグメント・ヘッダ208dは、マジック・ナンバ値206c、キー値206aおよび長さ値206bをストアしている。
【0095】
長さ値206bは、フラグメント・ヘッダ208dおよびフラグメント・データ208eを含めたフラグメントの長さをバイト数で表す。キー値206aは、このフラグメント内にデータが含まれているオブジェクトのオブジェクト・キーのコピーであり、その全体がストアされている。したがって、キー値206aを使用して、このフラグメント内にデータが含まれているオブジェクトのデータを保持している最初のフラグメントをポイントするディレクトリ・ブロックをルックアップすることができる。
【0096】
一実施例によれば、特定のオブジェクトに関連付けされた最後のフラグメントに関連して、完全なオブジェクト・キー56がストアされる。オブジェクト52を最初にキャッシュ80にストアするとき、発信サーバ40からのオブジェクト・データの読み取りに従って漸増的にオブジェクト・キー56を演算する。つまり、オブジェクト・キー56の最終値は、オブジェクト52全体の読み取りが完了するまで明らかにならない。オブジェクト・キー56は、最後のフラグメントの書き込みまでキーの値が明らかにならないことから、またディスク上の既存のデータに対する修正が時間を要することから、そのオブジェクトのストアに使用されるフラグメントのチェーンの最後に書き込まれる。これとは異なる実施例においては、フラグメント・ヘッダがフラグメントもしくはオブジェクトを記述する別のメタデータをストアすることができる。
【0097】
書き込み集成バッファは、バッファ204aのもっとも上の空きエリアを示す「フリー・トップ・ポインタ」210を含んでいる。トップ・ポインタ210は、バッファ204a内における使用済み空間と使用可能空間の現在の境界を示す。トップ・ポインタ210は、キャッシュ80がバッファ内に追加のフラグメントを書き込む位置を決定できるようにストアされている。トップ・ポインタ210より下(図6においては、その左)は、すべて有効なデータを含んでいるか、あるいはそれを受け取るためにすでに割り当てられている。トップ・ポインタ210より上の(図6においてはその右の)アリーナ204aのエリアは、他の情報オブジェクトを割り当てるために使用することができる。好ましくは、各フラグメントが最大32キロバイトのデータを含む。フラグメントの開始および終了は、ストレージ・デバイス90aの標準的な512バイト境界上となる。ワールド・ワイド・ウェブの関係においては、ほとんどのオブジェクトが比較的小さく、概してそのサイズは32キロバイトに満たない。
【0098】
各アリーナは、必ず2つの状態のうちのいずれかになる:つまり空状態または占有状態である。アリーナの現在の状態は、アリーナ・ヘッダ206a〜206nにストアされるエンプティ値に反映される。占有状態は、そのアリーナのいずれかの部分に有効なデータがストアされている状態である。現在エンプティであるアリーナ、つまり空いているすべてのアリーナのリストは、メモリ内にストアされている。たとえば、キャッシュ80を走らせているワークステーションのメイン・メモリが、空のアリーナに対するポインタの配列をストアしている。別の実施例においては、各アリーナのヘッダ206a〜nに追加の情報をストアすることができる。たとえばこれらのヘッダに、そのアリーナに包含されていた削除済み情報オブジェクトの数、およびそのアリーナに対して最後にガーベジ・コレクションが実行された時を示すタイムスタンプを含めることが考えられる。
【0099】
図6には、例として3つのフラグメントを示したが、実際にはアリーナの容量に達するまで任意数のフラグメントを1つのアリーナにストアすることが許される。それに加えて、図6に示したプールの数およびアリーナの数は、例示のみを目的としたものであり、これらには任意の数を使用することができる。
【0100】
上記のアリーナの構造は、アリーナのフラグメントにストアされるオブジェクトに関するデータ更新の特定の一貫性メカニズムおよび安全メカニズムを容易にする。図7に、図6に示したアリーナ204a〜204nの1つの更新に関係するブロック図を示す。図7は、ヘッダ206およびデータ・フラグメント208a〜208cを有する第1の情報オブジェクト208bを包含するアリーナ204aを示している。トップ・ポインタ210は、アリーナ204aのもっとも上のアクティブ部分、つまりデータ・セグメント208cの末尾をポイントする。好ましくは、1つのアリーナに対する完全な情報オブジェクトの書き込みが完了した後に限り、かつアリーナのトップ・ポインタを異常なく移動させた後に限ってディレクトリ・テーブルを更新する。たとえば、アリーナ204aのトップ・ポインタ210より上に完全な情報オブジェクトを書き込み、トップ・ポインタを移動してアリーナの空き位置の新しいトップを表示させる。その後初めてディレクトリ・テーブルを更新する。
【0101】
ディレクトリ・テーブルの更新を遅らせることにより、それ以外のステップのいずれかを行う間に、破局的なシステムの障害が生じた場合においてもディレクトリ・テーブルの正確性が保証される。たとえば、いずれかのステップを完了する前に、ディスク・ドライブまたはその他のシステムのエレメントがクラッシュしたとしても悪影響は生じない。その場合、アリーナ204aは、信頼性のない、もしくは不完全なデータを含むことになるが、ディレクトリ・テーブル110、インデクス、またはハッシュ・テーブル内に信頼性を失ったデータに対する参照がまったく存在しないことから、キャッシュ80は実質的にそれを無視する。それに加えて、信頼性のない、もしくは不完全なデータは、ここに述べるガーベジ・コレクション・プロセスを使用して最終的に再利用される。
【0102】
(マルチフラグメント・オブジェクト)
図3において、オブジェクト52のオブジェクト・キーに基づいて到達したディレクトリ・テーブル・ブロック112bは、オブジェクト52がストアされているフラグメントに対するポインタ・ディレクトリを含んでいる。これには、オブジェクト52が単一のフラグメントにストアされていることが前提となる。しかしながら大きなオブジェクトは、必ずしも単一のフラグメントに収まるわけではなく、その理由は2つある。第1は、フラグメントは最大サイズが固定されている(好ましい値を32KBとする)ことである。したがって、32KBを超えるオブジェクトは分断される。第2は、システムが、新しいオブジェクトのために、書き込み集成バッファ内に空間をあらかじめ予約しなければならないことである。到来するオブジェクトのサイズがオブジェクト・ストアにとって未知であれば、推定を誤る可能性がある。サーバがオブジェクトの真の(実際には大きい)サイズを誤って表すこともある。いずれの場合においてもオブジェクト・ストアは、フラグメントのチェーンを構成してオーバーフローを処理する。
【0103】
したがって、フラグメント間において分断されたオブジェクトからのデータを含むフラグメントを追跡するためのメカニズムが提供されている。図5は、関連するフラグメントを追跡するための好ましい構造を示したブロック図である。
【0104】
説明のため、ここではオブジェクトXがストレージ・デバイス90a〜90n上の3つのフラグメント208a、208b、および208cにストアされているものと仮定する。キャッシュは、オブジェクトX用のオブジェクト・キーを使用してタグ・テーブルを調べ、ディレクトリ・テーブル110内の特定のブロック141aに到達する。ブロック141aは、オブジェクトXを包含している連続するフラグメントを識別するブロックのヘッドである。ここに示した例においては、このチェーンに、ブロック141a、141b、141c、141dおよび141eが含まれ、ポインタ128a〜128dによってそのチェーンが形成されている。
【0105】
一実施例によれば、ヘッド・ブロック141aは、サブキー値126およびブロック・ポインタ128aを備える。好ましくは、サブキー値126の長さを96ビットとし、オブジェクトX用のオブジェクト・キー56の値のサブセットから構成する。ブロック・ポインタ128aの値は、チェーン内の次のブロック141bを参照する。
【0106】
ディレクトリ・テーブルのブロック141bは、フラグメント・ポインタ130aおよびブロック・ポインタ128bを含む。フラグメント・ポインタ130aは、フラグメント208aを参照し、そこにはオブジェクトXに関するデータの最初の部分がストアされている。ポインタ・ブロック141bのブロック・ポインタ128bは、このチェーン内の次のポインタ・ブロック141cを参照する。ポインタ・ブロック141bと同様に、ポインタ・ブロック141cも、フラグメント208bを参照するフラグメント・ポインタ130bを含む。ポインタ・ブロック141cのブロック・ポインタ128cは、このチェーン内の次のポインタ・ブロック141dを参照する。ポインタ・ブロック141cと同様に、ポインタ・ブロック141dも、フラグメント208cを参照するフラグメント・ポインタ130bを含む。
【0107】
オブジェクト・ストアは、フラグメントを互いにつなぐためのメカニズムを必要とする。従来のディスク・ブロックのチェーニング・スキームは、ディスク上にすでに存在しているデータを修正し、直前のチェーン・リンク・ポインタがその次の新しいブロック値をポイントするように変更する必要がある。すでに存在してディスク・データの修正は時間を要し、前もって終了が知らされないプロセスに抗して一貫性を確保することに関連する複雑性がもたらされる。
【0108】
本発明の一実施例に従えば、「反復関数ポインタ」を使用することによって新しいフラグメント・ポインタを現存するフラグメントにパッチする必要がなくなる。各フラグメントにはキーが割り当てられ、次のフラグメントのキーが、直前のフラグメントのキーの単純な反復関数として割り当てられる。この方法によれば、直前のフラグメントのポインタを修正するのではなく、次のフラグメントのキーを定義するだけで単純にフラグメントをつなぐことができる。
【0109】
たとえばここで、サブキー126の値に関数を適用することによってブロック・ポインタ128aを演算する。ブロック・ポインタ値128bは、ブロック・ポインタ128aの値に関数を適用することによって演算される。ポインタ値の演算に使用されるこの関数は、重大なものではなく、多くの各種関数を使用し得る。この関数は、次のような単純な累加関数とすることができる。
【0110】
keyn = keyn-1 + 1
あるいは、この関数をMD5ハッシュ関数等の複雑な関数とすることもできる。
【0111】
keyn = MD5(keyn-1)
唯一求められる要件は、可能性のあるキーの値の範囲が充分に大きく、その反復に充分な選択があり、範囲の衝突または周期的なルーピングの可能性が小さいことである。可能性は非常に低いがキーの衝突を生じた場合には、オブジェクトがキャッシュから削除される。
【0112】
このチェーン内の最後のポインタ・ブロック141dは、テール・ブロック141eをポイントするブロック・ポインタ128dを有している。テール・ブロック141eは、このチェーン内の最初のブロック141aに対する参照を含む。一実施例によれば、テール・ブロック141eに包含されている参照は、オブジェクトXのオブジェクト・キーの、96ビットのサブキー132である。キャッシュは、この96ビットのサブキー132を使用してヘッド・ブロック128aを見つけ出すことができる。テール・ブロック141eおよびそれによって提供されるポインタのループ構成により、キャッシュ80は、チェーン内の任意のブロックから開始してすべてのブロックを見つけ出すことができる。
【0113】
図5に示した3つのフラグメント208a、208b、および208cは、単に例示のみを目的とする。実際には、情報オブジェクトが任意数のフラグメントを占有し、あるいは参照し、そのそれぞれが、ディレクトリ・テーブル110内のそれ独自のポインタ・ブロックによって識別されることになる。
【0114】
オブジェクト52をストレージ・デバイスから読み出すとき、最後のフラグメントにストアされているコンテンツのMD5キーがディレクトリ・キー値に一致することを保証するために、それが最初に読み出される。このテストは、適正なオブジェクトが見つけ出されたことを保証するための「健全性」チェックとして行われる。一致がなければ、衝突が生じ、異常が発生していることになる。
【0115】
(空間割り当て)
図10Aは、新しくキャッシュに入れられたオブジェクトに空間を割り当て、そのオブジェクトを割り当てた空間に書き込むための方法を示したフローチャートである。割り当ておよび書き込みの方法は、参照番号640によって包括的に示されている。概して、図10Aに示したステップは、たとえば図8Fのステップ898における場合のように、ディレクトリ・テーブルおよびタグ・テーブル内においてミスが生じたときに実行される。
【0116】
つまり、情報オブジェクトがクライアントから要求されたがキャッシュ内に見つからなかったとき、ステップ642においてその情報オブジェクトをルックアップし、その発信ロケーションからそれを取り出す。ネットワーク環境においては、発信ロケーションがサーバ40、クラスタ、またはディスクになる。オブジェクトを取り出すと、ステップ644において、そのオブジェクトのタイプおよびサイズがキャッシュ内にストア可能か否か、つまり「キャッシュ可能であるか」について評価する。
【0117】
キャッシュ可能でないオブジェクトの例としては、サーバ・アプリケーションによって動的に生成されるウェブ・ページ、クライアント側アプレットによって生成されるウェブ・ページのペインまたは部分、データベースからの動的データに基づいて構築されるオブジェクト、およびその他の非静的オブジェクトが挙げられる。そういったオブジェクトは、それらが生成されるごとにそのフォームとコンテンツが変化することからキャッシュ内にストアすることができない。その種のオブジェクトをキャッシュ内にストアした場合には、キャッシュのアクセスとアクセスの間にその基礎をなす動的データが変更されると、オブジェクトの信頼性が失われるか、正しくなくなる。プロセスは、サーバ40またはその他のオブジェクトのソースからのHTTP応答内に含まれている情報を調べて、そのオブジェクトがキャッシュ可能か否か判断する。
【0118】
そのオブジェクトがキャッシュ可能であれば、この方法では、ステップ646においてそのオブジェクトのバイト数で表される長さを獲得する。たとえば、ワールド・ワイド・ウェブに関連して本発明の適用があるときは、HTTPトランザクションにおいて運ばれるメタデータ内に、そのウェブ・ページの長さを含ませることができる。その場合キャッシュは、情報オブジェクトを含むHTTPメッセージ内の応答情報から、その情報オブジェクトの長さを抽出する。長さが含まれていないときには、推定が行われる。この推定が正しくないこともあり、それによってオブジェクトのフラグメント化を招くことになる。
【0119】
ブロック648として示したように、続いてメモリ常駐の書き込み集成バッファ内に空間を割り当て、書き込みをおこなうオブジェクトを、割り当てられたバッファ・ロケーション内に流し込む。好ましい実施例においては、ブロック648が、充分な空間を有し、オブジェクトの保持に使用できる書き込み集成バッファ内の空間割り当てを伴う。ブロック650においてキャッシュは、書き込み集成バッファに空き空間が残っているか否かを評価する。残っていれば、割り当ておよび書き込みプロセスを完了し、キャッシュ80は別のタスクを実行することが可能になる。書き込み集成バッファがいっぱいになると、ブロック650の内容が肯定されてコントロールがブロック656に移される。
【0120】
ブロック656においてキャッシュは、集成バッファを、それがシャドーイング(shadowing)しているアリーナに書き込む。ステップ660においては、ディレクトリが更新されて、新しい情報オブジェクトの位置が反映される。
【0121】
以上の一連のステップは、キャッシュに書き込まれる情報オブジェクトの完全性が保証される形に整理されている。たとえば、ディレクトリは、ヘッダおよびデータを含めて完全な情報オブジェクトがアリーナに書き込まれた後にのみ更新される。またたとえば、ステップ652またはステップ658の完了前に、ディスク・ドライブまたはシステムのその他のエレメントがクラッシュした場合にも悪影響が生じない。その場合アリーナは、信頼性のない、もしくは不完全なデータを含むことになるが、インデクス、またはハッシュ・テーブル内に信頼性を失ったデータに対する参照がまったく存在しないことから、実質的にキャッシュによってそれが無視される。それに加えて、信頼性のない、もしくは不完全なデータは、次に述べるガーベジ・コレクション・プロセスを使用して最終的に再利用される。
【0122】
(ガーベジ・コレクション)
図8Aは、キャッシュ80に使用可能なガーベジ・コレクションの方法を示したフローチャートである。図8Bは、図8Aに示したステップの細部を示したフローチャートであり、図8Aとともに説明する。好ましくは、ガーベジ・コレクション方法を、キャッシュに関連のある別のプロセスと並行に走る独立なプロセスとして実装する。これにより、このガーベジ・コレクション方法は、キャッシュのオペレーションに割り込み、あるいはそれに影響を与えることなく、定期的にキャッシュのストレージ・エリアをクリーン・アップすることができる。
【0123】
(1.全般プロセス)
好ましい実施例においては、「ガーベジ・コレクション」は、ターゲット・アリーナのスキャン、アクティブ・フラグメントの識別またはフラグメントを削除すべきか否かの決定、隣接する新しいアリーナへのアクティブ・フラグメントの書き込み、およびフラグメントの新しいロケーションを参照すべく行うディレクトリ・テーブルの更新からなるプロセスを意味する。つまり、非常に広い意味でこの方法は「退避」タイプであり、それにおいては古いもしくは不必要なフラグメントが削除されてアクティブ・フラグメントが別の場所に書き込まれ、その結果、特定のアリーナに対するガーベジ・コレクション・オペレーションが完了したとき、そのアリーナが空になる。好ましくは、ターゲット・アリーナおよび新しいアリーナがともに、揮発性メモリ内においてストアされ、操作される。ガーベジ・コレクションが完了すると、同期化と呼ばれるプロセスにおいて、ディスク等の不揮発性ストレージにストアされる、対応するアリーナにガーベジ・コレクションにおいて生じた変更が書き込まれる。
【0124】
ステップ802において、プール200a〜200nの1つがガーベジ・コレクション・オペレーション用に選択される。好ましくは、ストレージ・デバイス90aのそれぞれのプール200a〜200nごとに、キャッシュが、現在アクティブ・データをストアしているプール内のディスク空間の量を示す値をストアしているか、あるいはそれにアクセスできるものとする。またキャッシュは、ブロック803に示されるように、一定の「低水位」および「高水位」値をストアしている。特定プールのアクティブ・ストレージの量が「高水位」値を超えると、ガーベジ・コレクションが開始され、そのプール内のアクティブ・ストレージの量が「低水位」を下回るまで繰り返される。「低水位」値は、ゼロより大きくなるように選択され、「高水位」値は、プールの合計容量より約20%少なくなるように選択される。このようにしてプールがオーバーフローする前に、あるいはストレージ・デバイス90aの容量超過を招く前にガーベジ・コレクションが実行される。
【0125】
(2.用法を意識したガーベジ・コレクション)
ステップ804においては、ガーベジ・コレクションを実行するターゲットとしてアリーナの1つが選択される。このアリーナは、各種の要因を考慮した選択アルゴリズムによって選択される。ブロック805として示したように、この要因には、たとえばキャッシュ80によってアクセスされた最後のアリーナであるか否か、およびそのアリーナに対する合計アクセス回数が含まれる。別の実施例においては、この要因として、各アリーナから削除された情報オブジェクトの数、また最後にそのアリーナが使用されたのはいつか、各アリーナに対して最後にガーベジ・コレクションが行われたのはいつか、さらに現在アリーナに読み出しまたは書き込みのロックがセットされているか、といったことを含めてもよい。ガーベジ・コレクション用にアリーナを選択した後は、そのオブジェクト内のすべてのフラグメントをガーベジ・コレクションの対象として個別に考慮する。
【0126】
ステップ806においては、選択したアリーナ内のフラグメントの1つをガーベジ・コレクションの対象として選択する。いずれのフラグメント(1ないしは複数)を選択するかの決定において、キャッシュ80は、ブロック807に示されるようにいくつかの選択要因を考慮する。好ましい実施例においては、この要因に次のものが含まれる:すなわち、そのフラグメントに最後にアクセスした時刻;そのフラグメント内にデータを有するオブジェクトに対して発生したヒットの数;そのフラグメントからクライアントにデータをダウンロードするために必要な時間;および、そのフラグメントを一部として構成されるオブジェクトのサイズである。別の実施例においては別の要因が考慮される。これらの要因に関する値は、そのフラグメントがデータをストアしているオブジェクトに関連付けされたブロック112a〜112nにストアされている。
【0127】
ブロック808においてキャッシュは、そのフラグメントを削除すべきか否かを判断する。好ましい実施例においては、ブロック808が、ある種のパフォーマンス要因および最適化の考慮事項の評価を伴う。
【0128】
キャッシュは、主に2つの理由から使用されるが、これらの理由は衝突の可能性を抱えている。最初の理由は、クライアントのパフォーマンス向上である。クライアントのパフォーマンスを向上させるためには、ガーベジ・コレクタにとって、サーバのダウンロード時間を最小にするオブジェクトを保持しておくことが望ましい。これは、遅い外部サーバから受け取ったドキュメントをキャッシュさせる方向にガーベジ・コレクタを偏らせる傾向がある。第2の理由は、サーバのネットワーク・トラフィックの最小化である。サーバ・トラフィックを最小化するためには、ガーベジ・コレクタにとって、大きなオブジェクトを保持しておくことが望ましい。これらの最適化はしばしば衝突する。
【0129】
オブジェクトをダウンロードするために必要な時間、そのオブジェクトのサイズ、およびキャッシュ内においてそのオブジェクトがヒットした回数を識別する値をストアすることによって、ガーベジ・コレクタは、それぞれのオブジェクトについて、オリジナルのサーバからフェッチする代わりにキャッシュしたコピーを提供した結果、どの程度サーバのダウンロード時間が回避されたか、またどの程度のサーバ・トラフィックが不要になったかを評価することができる。この測定は、キャッシュされたオブジェクトの「固有値」を評価する。
【0130】
キャッシュ・アドミニストレータは、続いて時間のセーブまたはトラフィックのセーブのためにキャッシュを最適化する程度を表す0から1までの範囲のパラメータを設定する。上記の値は、そのアリーナ内の別のオブジェクトとの関連から、そのオブジェクトが消費している空間の量との関連から、および最近ガーベジ・コレクションの対象となったオブジェクトとの関連から評価される。この種の評価に基づいて、キャッシュ80は、ステップ808に示されるようにフラグメントを削除すべきか否かを判断する。
【0131】
そのフラグメントを削除すべきと判断した場合には、ステップ812において削除済みとマークを付け、そのフラグメント内にデータを上書きすることによってそれを削除する。オブジェクト52が複数のフラグメント内にストアされており、ガーベジ・コレクション・プロセスがそのフラグメントの1つを削除すべきであると判断したときは、プロセスは、そのオブジェクトに関連付けされたすべてのフラグメントを削除する。これには、図5に示したタイプの、別のアリーナに、さらには別のプールに続くフラグメントのチェーンが関係することもある。
【0132】
そのフラグメントを削除すべきでないと判断した場合には、ステップ810においてそのフラグメントを新しいアリーナに書き込む。次に説明する図8Bは、ステップ810の実行に関連する好ましいサブステップを示している。
【0133】
フラグメントを削除し、あるいは別のアリーナに移動した後は、ステップ814においてディレクトリ・テーブル110を更新してフラグメントの新しい位置を反映させる。ステップ814は、そのフラグメントに関連付けされているブロック112a〜112nをルックアップするために更新すべきフラグメント208nに関連付けされたフラグメント・ヘッダ208d内のキー値206aの使用を必要とする。適正なディレクトリ・テーブル・ブロック112a〜112nが識別されると、ブロック内のディスク・ロケーション値118を更新してフラグメントの新しい位置を反映させる。フラグメントを削除した場合には、続いて対応するディレクトリ・テーブルのエントリを削除する。
【0134】
ステップ816は、この方法がディレクトリ・テーブル110の更新後に完了することを示している。しかしながらここで、図8Aに示したステップがすべてのプール、各プール内のすべてのアリーナ、さらに各アリーナ内のすべてのフラグメントに対して実行されることを理解されたい。
【0135】
(3.新しいアリーナへのフラグメントの書き込み)
図8Bは、ステップ810の実行に関連するステップ、つまり新しいアリーナへの、保存すべきフラグメントの書き込みに関連するステップを表したフローチャートである。退避するフラグメントを新しいアリーナに書き込むプロセスは、オリジナルのフラグメントに書き込むプロセスと完全に類似している。データは、書き込み集成バッファに書き込まれ、いっぱいになるとディスクのアリーナに落とされる。
【0136】
ステップ590においては、ディレクトリ・テーブルを更新し、そのフラグメントの位置の変更を反映させる。好ましい実施例においては、ステップ590が、ディレクトリ・テーブル110に対する直接的な更新ではなく、オープン・ディレクトリ130への更新情報の書き込みを伴う。その後、プロセスによって、そのフラグメント・データ208eが異常なくストレージ・デバイス90a〜90nの1つに書き込まれたことが確認できたとき、オープン・ディレクトリ130内に反映されている変更をディレクトリ・テーブル110内に書き込み、つまりそれを同期させる。
【0137】
このプロセスは、ディレクトリ・テーブル110の完全性が常に保護されることを保証するために使用される。前述したように、バッファされたストレージは、フラグメントのために使用される;つまり、フラグメントが更新され、あるいは新しいフラグメントが書き込まれたとき、フラグメント・データがバッファに書き込まれ、その後、将来においてディスクまたはその他のストレージ・デバイスに引き渡される。したがって、ガーベジ・コレクション・プロセスがディレクトリ・テーブルの更新の準備が整ったとき、ガーベジ・コレクションの間に新しいアリーナに移動されたフラグメントが、実際にストレージ・デバイスの1つに書き込まれていないということがあり得る。そこで、変更がディスクに引き渡されるまで、変更に関する情報をオープン・ディレクトリ130内にストアしておく。
【0138】
ステップ592においては、オリジナルのアリーナを調べて再利用、もしくは新しいアリーナへの移動を必要とするフラグメントが残っているか否かを評価する。ほかのオブジェクトが存在するときは、コントロールを図8Aのステップ806に戻し、その結果、次のオブジェクトの処理が可能になる。現在のアリーナ内にほかのオブジェクトが存在しない場合には、ステップ594において、現在のアリーナのトップ・ポインタをリセットする。
【0139】
(4.バッファリング)
好ましい実施例においては、読み出しおよび書き込みのオペレーションがキャッシュ80によって実行され、ガーベジ・コレクション・プロセスが2とおりにバッファされる。
【0140】
まず、キャッシュ80と、ブラウザからオブジェクトを要求しているクライアント10aの間の通信が「Vコネクション(VConnection)」と呼ばれるデータ構造のフロー・コントロール、ストリーミング、およびバッファリングを介してバッファされる。好ましい実施例においては、キャッシュ80がオブジェクト指向プログラム言語により準備されたコンピュータ・プログラムのセット内において実装される。この実施例においてVコネクションは、プログラムの1つによって宣言されたオブジェクトであり、Vコネクションは、メモリ内においてバッファをカプセル化する。好ましくはこのバッファはFIFOバッファであり、そのサイズを32キロバイトとする。
【0141】
クライアント10a〜10cがキャッシュ80に接続すると、キャッシュはそのクライアントをVコネクションに割り当てる。クライアント10aから受け取ったデータは、Vコネクションを介してキャッシュ80に渡され、キャッシュが情報をクライアント10aに送る必要があるときには、キャッシュはその情報をVコネクションに書き込む。Vコネクションは、キャッシュ80からのデータのフローを、クライアント10aによってキャッシュとの通信に使用される送信速度と整合させるべく調整する。このようにして、Vコネクションの使用は、メイン・メモリ・ストレージの不必要な無駄を回避する。この種の無駄は、クライアント10aに送信するオブジェクトの全体をメモリにコピーし、その後それをクライアントに送信する場合に生じ、遅いクライアントへの送信の間、メイン・メモリが不必要に拘束される。これらのメカニズムを使用するバッファ付きI/Oは、ディスクに対して実行される連続した読み出しおよび書き込みのオペレーションの回数を低減する傾向にある。
【0142】
(5.同期および一貫性の強化)
ガーベジ・コレクション・プロセスの間およびキャッシュ80のオペレーションの間は、規則的に同期化プロセスが実行される。同期化プロセスは、オープン・ディレクトリ130内に反映されている変更をディレクトリ・テーブル110および、ストレージ・デバイス90a〜90nの1つもしくはいくつかに含まれる不揮発性ストレージ等の安定したストレージに渡す。その目的は、ディスク上のデータの一貫性を常に維持することにある。つまり、任意の瞬間において、ディスク上のデータ構造の状態が100%無矛盾であり、キャッシュが、チェックを必要とすることなくスタート・アップできることである。これは、ディスクに対するデータならびにメタデータの書き込みおよび同期を慎重に定めることによって達成される。
【0143】
説明のため、このセクションにおいては、キャッシュに対してストアが要求された実際のオブジェクトを「データ」とする。たとえば、キャッシュがHTMLドキュメントをストアしているとき、データはそのドキュメントそのものとなる。「メタデータ」は、キャッシュが「データ」をインデクスし、その後のlookup()オペレーション(ルックアップ・オペレーション)の間に見つけられるようにするためにストアを必要とする追加の情報、およびキャッシュが「データ」用の空間を割り当てるために必要とする情報を指す。「メタデータ」は、ディレクトリおよびプール・ヘッダからなる。ディレクトリは、キー(名前)をディスク上の特定の位置(データ)に関連付けするためにキャッシュによって使用されるインデクスである。キャッシュは、プール・ヘッダを使用してキャッシュ内に割り当てられたディスク空間を追跡している。
【0144】
キャッシュは、ディスク上のデータ構造の一貫性を維持するために2つの規則を使用する。最初の規則は、メタデータを、必ずそれがポイントしているデータの後に書き込むというものである。この最初の規則は、メタデータが書き込まれるまで、キャッシュがキャッシュ内のオブジェクトについて「不変の」知識を持つことがないことを理論的根拠とする。キャッシュがデータに先行してメタデータを書き込み、その時点でクラッシュした場合を考えると、そのメタデータは、ディスク上の無効なオブジェクト・データを伴うオブジェクト名に関連付けされることになる。これによりキャッシュが、ヒューリスティック・アプローチを使用して試行を繰り返し、良好なデータをポイントするメタデータおよび不良データをポイントするメタデータを決定しなければならなくなくことから、これは望ましくない。
【0145】
2番目の規則は、アリーナをポイントするすべてのディレクトリ・メタデータが削除され、ディスクに書き込まれるまで、空であるとしてプール・ヘッダ内においてプール・アリーナをマークすることができないというものである。これは、クラッシュによって、ディレクトリ・メタデータがポイントする空のアリーナが存在してしまうことを防止するために必要である。これによってもたらされる可能性のある問題は、その空のアリーナが、それが空であることから新しいデータによって満たすことができるようになり、その結果、それが新しいデータの書き込みに使用できるようになることである。しかしながら「古い」ディレクトリ・メタデータは、この新しいデータと同じ位置をポイントしている。その場合、古いディレクトリ・メタデータへのアクセスが、古いデータもしくはフェイルを返さずに新しいデータを返すことが起こり得る。
【0146】
図8Cは、上記の2つの規則を実装する好ましい同期化方法820を示すフローチャートである。ブロック822において、オブジェクトをキャッシュに書き込む。ブロック822は、ブロック824およびブロック826に示したステップ、つまりオープン・ディレクトリ内にメタデータを作成するステップ、およびそのオブジェクト・データをディスクに書き込み、同期させるステップを伴う。
【0147】
ブロック828〜820'のステップは、周期的に実行される。ブロック828に示されるようにオープン・ディレクトリ・テーブル内のメタデータを個別に注目し、ブロック821に示されるように、それぞれのメタデータごとに、そのメタデータがポイントするデータがすでにディスクと同期されているか否かを判断する。同期されていれば、ブロック823においてキャッシュは、安定したデータをポイントするそのメタデータをオープン・ディレクトリからディレクトリ・テーブルにコピーする。ブロック825においては、ディスクに対してこの変更を同期させる。
【0148】
ブロック827においては、アリーナに対するガーベジ・コレクションを実行する。ブロック827は、図8Aに示したステップを包含するものとすることができる。それに代えて、ガーベジ・コレクションを概してブロック829、ブロック831、およびブロック820'に示したステップを含むものとしてもよい。ブロック829においては、これに示されるようにアリーナ内の各フラグメントについて、キャッシュが、そのセグメントをポイントするディレクトリ・メタデータを削除し、ディレクトリ・メタデータをディスクに書き込む。ブロック831においては、そのアリーナが空であるとマークされるように、メモリ内においてプール・ヘッダを修正する。ブロック820'においては、プール・ヘッダをディスクに書き込み、同期させる。
【0149】
ディスクに対する情報の書き込みに関連するステップは、好ましくは、キャッシュ80を走らせているワークステーションのオペレーティング・システムに提供されている「フラッシュ」オペレーションを使用する。「フラッシュ」オペレーションは、オブジェクト・データをストアするために使用されたバッファ内の任意のデータを不揮発性ストレージ・デバイス90a〜90cに書き込む。
【0150】
上記の方法を用いると、変更を記述したデータがディスクまたはその他の不揮発性ストレージに実際に書き込まれるまで、オープン・ディレクトリ内の変更によってディレクトリ・テーブルが更新されることがない。またキャッシュ80は、ガーベジ・コレクション・プロセスによって行われた変更がディスクに渡されるまで、ディスク上のアリーナの更新を延期する。これは、オープン・ディレクトリからディレクトリ・テーブルを更新する前にシステムのクラッシュを生じた場合にも、アリーナが継続的に有効なデータをストアすることを保証する。
【0151】
(6.再更新)
好ましい実施例においては、キャッシュ内の古い情報オブジェクトを再更新し、ガーベジ・コレクション・プロセスにおいてそれらが破壊されないようにする方法が提供される。
【0152】
図12は、好ましい再更新プロセスを示したフローチャートである。ブロック1202においては、外部プログラムまたはプロセスがキャッシュに要求を渡し、特定の情報オブジェクトが最近クライアントによってロードされたか否かを問い合わせる。キャッシュは、この要求に応答して、ブロック1204に示されるようにキャッシュ内のその情報オブジェクトを見つけ出す。ブロック1206においては、ディレクトリ・テーブル内のその情報に関連付けされた読み出しカウンタ値を読み取る。ブロック1208においては、この読み出しカウンタ値が高いか否かをキャッシュが評価する。
【0153】
読み出しカウンタ値が高いときは、最近その情報オブジェクトのロードがあったことになる。その場合、ブロック1210において、要求を行っているプロセスに対し、問い合わせ内容を肯定する応答メッセージを送る。読み出しカウンタ値が高くないときは、ブロック1212に示されるように、その情報オブジェクトは最近ロードされていない。したがって、ブロック1214に示されるように、呼び出しを行っているプログラムまたはプロセスに対して、キャッシュは問い合わせ内容を否定する応答メッセージを送る。ブロック1216においてキャッシュは、その情報オブジェクトに関連してストアしている期限値を更新し、現在の日付または時刻を反映させる。キャッシュが期限を更新することによって、更新後のそのオブジェクトが古いと見なされなくなることから、ガーベジ・コレクション・プロセスにおいてそのオブジェクトの削除が回避されることが保証される。このようにしてキャッシュ内の古いオブジェクトをリフレッシュし、それによって発信元からそれを取り出し、キャッシュに書き込み、かつ期限切れとなったそのオブジェクトのコピーを削除することを回避している。
【0154】
(スケーリング付きカウンタの更新)
図10Bは、スケーリング付きカウンタを更新する方法を示したフローチャートである。好ましい実施例においては、図3Aに示したディレクトリ・テーブルのセット内の各ブロック112a〜112nにストアされる読み出しカウンタ値を管理するために、図10Bに示した方法が使用される。しかしながら、図10Bに示した方法をその範囲に限定する意図はない。図10Bに示した方法は、それぞれカウンタを有する複数オブジェクトの管理を含み、かつもっとも最近使用されたオブジェクトないしは最近ほとんど使用されないオブジェクトを追跡することが望ましい任意のアプリケーションに適用できる。過去のアプローチと比較した図10Bに示した方法の主な利点は、この方法によって小さなストレージ・エリア内において大きなカウンタ値の追跡が可能になることである。
【0155】
好ましい実施例においては、ブロック112a〜112nにストアされる読み出しカウンタ値が、それぞれ3ビットの量としてストアされる。キャッシュ80のオペレーションの間、ブロックがアクセスされると、そのブロックの読み出しカウンタ値が1つインクリメントされる。3ビットを用いて表すことができる最大の値を10進数で表すと7である。したがって、読み出しカウンタ値は、7回インクリメントされるとオーバーフローする。カウンタのオーバーフローを回避しつつ、カウンタに、それをインクリメントするオペレーションを無制限に追跡させるために、図10Bに示した方法が周期的に実行される。
【0156】
以下に示す図10Bのステップに関する説明は、次の表1を参照することによってより明確に理解されよう。
【0157】
表1 ― 連続的なカウンタ値
イベント カウンタ
A B C
1:スタート 1 1 1
2:インクリメント 2 1 1
3:インクリメント 7 3 1
4:デクリメント 6 2 0
5:再利用 6 2 −
【0158】
表1においてイベント列は、一連のカウンタ値に影響を与える連続的なイベントを識別し、そのイベントの性質を簡単に示している。カウンタの列タイトルは、カウンタ値A、B、およびCが表されている個別の列を示している。各カウンタ値A、B、およびCは、それぞれディレクトリ・テーブル110の異なるブロック112a〜112nにストアされるカウンタ値に対応する。つまり、表1の各行は、時間的に連続するスナップショットにおける3つのカウンタ値の内容を表している。
【0159】
表1のイベント1は、時間的な任意のスタート・ポイントを表し、それにおいてハッシュ・テーブルのカウンタ値A、B、Cを含む各エントリは、1回だけアクセスされている。したがって、各カウンタA、B、Cの値は1である。イベント2においては、キャッシュが、カウンタ値Aをストアしているハッシュ・テーブルのエントリに対してアクセスした。この結果、カウンタAがインクリメントされてその値が2になるが、残りのカウンタBおよびCには変更がない。その後ハッシュ・テーブルのエントリに対するアクセスが何回か行われ、それぞれのアクセスごとにカウンタA、BまたはCのいずれかがインクリメントされたとする。それにより、イベント3においてはカウンタA、B、Cの値が、それぞれ7、3、あるいは1となっている。つまり、カウンタAは、それが表すことができる最大の値、すなわち2進数の111すなわち10進数の7をストアしており、この値をさらにインクリメントしようとするとオーバーフローを生じることになる。
【0160】
この時点において、図10Bに示した方法がカウンタA、B、Cに適用される。ステップ622においては、すべてのカウンタの値を読み取る。ステップ624においては、すべてのカウンタ値の合計を計算する。表1の場合であれば、この合計は7+3+1=11となる。ステップ626においては、すべてのカウンタによって表すことができる最大の合計値を、カウンタ値のビット長に基づいて求める。3ビットの値の場合は、1つのカウンタが表すことができる最大値は7であり、3つの3ビット・カウンタを合計した最大値は7×3=21となる。ステップ626は省略することも可能であり、その場合は上記に代えてスケーリング付きカウンタの方法620が使用できる定数として最大値をストアし、必要に応じてそれを取り出せばよい。
【0161】
ステップ628においては、値(最大値/2)の小数点以下を切り捨てた値を計算し、それと全カウンタの合計を比較する。前述の例であれば、この関係は次のようになる。
【0162】
合計=11
最大値=21
最大値/2=10
(合計>最大値/2)=真
【0163】
結果が真であることから、コントロールがステップ630に進み、すべてのカウンタ値を1つデクリメントする。このステップの後のカウンタA、B、Cの状態をイベント4の「デクリメント」として示す。ここで、最近ほとんど使用されていないハッシュ・テーブルのエントリを表すカウンタCがゼロにデクリメントされていることに注意されたい。この時点において、対応するカウンタ値をスキャンし、ゼロの値をサーチすることによって最近ほとんど使用されていないハッシュ・テーブルのエントリを再利用、あるいは削除することができる。表1においては、このステップの結果をイベント5の「再利用」として示している。カウンタAおよびBの値には変更がないが、カウンタCの値は、それに対応するハッシュ・テーブルのエントリがハッシュ・テーブルから削除されたために未定義となる。
【0164】
図10Bに示した方法を周期的、かつ規則的に繰り返すことにより、「人気のある」カウンタの値がオーバーフローすることがない。また、値がゼロのカウンタ値によって、最近ほとんど使用されていないエントリが迅速に識別され、キャッシュから容易に削除することができる。カウンタ値は、ハッシュ・テーブルのエントリに対するアクセスが100万回に上るときでも数ビット内に維持することができる。つまり、図10Bに示した方法は、最近ほとんど使用されていないエントリをリストから迅速かつ効率的に削除する方法を提供する。
【0165】
(キャッシュのオペレーション)
好ましい実施例においては、読み出しおよび書き込みのオペレーションをサポートするAPIを介して外部のプログラムがアクセス可能な1ないしは複数のコンピュータ・プログラム内においてキャッシュ80が実装される。読み出しおよび書き込みオペレーションは、外部のプログラムもしくはプロセスにとって「見ることができる」キャッシュ80内の唯一の構造であるオープン・ディレクトリ130上で実行される。読み出しオペレーションは、キャッシュ内のオブジェクトの発見を希望する外部プログラムによって起動される。書き込みオペレーションは、キャッシュ内へのオブジェクトのストアを希望する外部プログラムによって起動される。
【0166】
キャッシュ80を構成するプログラム内においては、ルックアップ、削除、チェックアウト(請け出し)、およびチェックイン(戻し)と呼ばれるオペレーションがサポートされている。ルックアップ・オペレーションは、キーに基づいてオープン・ディレクトリ内においてオブジェクトをルックアップする。削除オペレーションは、キーに基づいてオープン・ディレクトリからオブジェクトを削除する。チェックアウト・オペレーションは、データの一貫性を保証するように順序立てた方法を使用してディレクトリ・テーブル110からブロックのコピーを獲得する。チェックイン・オペレーションは、ブロックのコピー(別のオペレーションによってそれが修正されていることもある)をディレクトリ・テーブル110に返す。これとは異なる実施例においては、単一のキャッシュ・ルックアップ・オペレーションが、これらのオペレーションの側面を兼ねる。
【0167】
(1.ルックアップ)
別の実施例においては、ルックアップ・オペレーションを使用して、特定の名前によって識別された特定のオブジェクトが、現在のキャッシュ80内にストアされているか否かを判断する。図9Aに、ルックアップ・オペレーションの一実施例において実行されるステップのフローチャートを示すが、それにおいては番号902を用いてこのオペレーションを包括的に示している。ルックアップ・オペレーションは、クライアント10aからの要求メッセージが、特定のオブジェクトをサーバ40から取り出すことを求めているとき、プロトコル・エンジン70からキャッシュ80にコマンドを与えることによって開始される。クライアント10aからのこの要求メッセージは、要求しているオブジェクトをその名前によって識別する。
【0168】
ワールド・ワイド・ウェブに関してこのプロセスが適用される場合は、その名前がユニフォーム・リソース・ロケータ(URL)になる。ステップ904においては、キャッシュ80がオブジェクトの名前をキー値に変換する。好ましい実施例においては、この変換ステップが図3Bに示した態様で実行される。つまり、MD5一方向ハッシュ関数等のハッシュ関数にオブジェクト名53を渡す。このハッシュ関数の出力がオブジェクトの名前キー62になる。オブジェクトの名前キー62は、1ないしは複数のサブキー64、66に分割することができる。
【0169】
ステップ906においてキャッシュ80は、要求キー値を用いてオープン・ディレクトリ130内をルックアップする。オープン・ディレクトリには、もっとも最近に要求されたオブジェクトがストアされており、したがってクライアントの要求にあったオブジェクトが含まれている可能性がもっとも高いと期待されることから、そこが最初に調べられる。好ましくは、ステップ906に、ルックアップ・キーとしてサブキー値の1つの使用を含める。たとえば、このルックアップに17ビットもしくは18ビットのサブキー値を使用することができる。
【0170】
ステップ908においては、キャッシュ80によって、サブキー値がオープン・ディレクトリ内に見つかったか否かが評価される。サブキー値がオープン・ディレクトリ内に見つかった場合には、ステップ910において、キャッシュ80がストレージ・デバイスの1つからそのオブジェクトを取り出し、そのオブジェクトをクライアントに配信する。この取り出しのサブステップには、ストレージ・デバイス90a〜90n内の不揮発性ストレージのプール、アリーナ、およびフラグメントにあるオブジェクトの位置に関連して前述したサブステップが含まれる。また配信するサブステップには、そのオブジェクトのデータを含む、クライアントに対するHTTP応答の作成、クライアントに対するHTTP接続の開設、およびクライアントに対するHTTP要求の送信が含まれる。
【0171】
サブキー値がオープン・ディレクトリ内に見つからないとき、キャッシュ80は、ステップ912において要求サブキー値を用いてタグ・テーブル102内をルックアップする。ステップ914においてキャッシュ80は、そのサブキー値がタグ・テーブル102内に見つかったか否かを評価する。一致が見つからなければ、ステップ916においてキャッシュ80は、後述する後の使用のために、一致が得られなかった事実についての情報をストアする。この情報は、タグ・テーブル102内にミスが発生したことを示す1ビットとすることができる。
【0172】
ステップ918においてキャッシュ80は、そのサブキー値を用いてディレクトリ・テーブル内をルックアップする。ステップ914の評価が肯定的であった場合にキャッシュ80は、タグ・テーブル102のエントリ106の1つから、要求サブキー値に一致するサブキー値を取り出す。この値は、ディレクトリ・テーブル内において要求キー値をルックアップするためのキーとして使用される。ステップ920においてキャッシュ80は、ディレクトリ・テーブル内に要求キー値が見つかったか否かを評価する。ヒットが生じ、かつステップ916においてストアされた情報によってタグ・テーブル内にミスが生じていることが示されている場合、キャッシュ80は、ステップ922において、ディレクトリ・テーブルのヒットに関連する情報を用いてオープン・ディレクトリを更新する。この後、コントロールがステップ910に渡され、前述した方法に従ってオブジェクトが獲得され、クライアントに配信される。
【0173】
ステップ920の評価が否定的である場合は、要求されたオブジェクトはキャッシュ内になく、ステップ924に示されるように、キャッシュのミス条件が成立する。ミス条件に応答してキャッシュ80は、ステップ926において、要求されたオブジェクトのソースであるサーバからそのコピーを獲得する。たとえば、ウェブ関連においては、キャッシュ80が、クライアントの要求に含まれていたURLに対するHTTP接続を開き、オブジェクトをダウンロードする。このオブジェクトは、続いてクライアントに提供されるとともに、後の参照のためにキャッシュ内にストアされる。
【0174】
好ましい実施例においては、キー値をパラメータとして受け取る、オブジェクト指向プログラミング言語におけるオブジェクトのメソッドとしてルックアップ・オペレーションが実装される。
【0175】
(2.キャッシュのオープン・リード・プロセス)
図9Eは、オブジェクト名(たとえばURL等)によって識別されるオブジェクトをキャッシュから読み出す好ましいプロセスを示したフローチャートである。好ましい実施例においては、図9Eに示したプロセスが「open_read(オープン・リード)」と呼ばれ、キャッシュ80が有する唯一の外部インターフェースを表す。キャッシュ内のデータのコントロールおよび一貫性を保証するために、外部プログラムに対して、オープン・ディレクトリ130を使用ないしは修正するオペレーションへのアクセスだけを許可するほうが有利である。好ましくは、オブジェクト名、およびユーザの特定の要求に関する情報を入力パラメータとして受け取るプログラムもしくはプログラム・オブジェクトとして図9Eに示したプロセスを実装する。この読み出しプロセスは、ルックアップ・プロセスの使用によってキャッシュ内に見つかったキーに関連付けされたオブジェクトのコピーを返す。つまりこの読み出しプロセスおよび、それによって起動されあるいは呼び出されたそのほかのプロセスは、図9Aとの関連から前述したルックアップ・オペレーションに代わるものとなる。
【0176】
ステップ964においてプロセスは、選択肢のベクトルを請け出し、ベクトル内の選択肢が読み出せるようにする。好ましくは、ステップ964に、図8Dとの関連からここに述べる、オブジェクト名から導かれたキーをパラメータとして提供するcheckout_read(チェックアウト_リード)プロセスの起動を包含する。ベクトルの請け出しには、そのベクトルに対するポインタを有するオープン・ディレクトリからブロックを請け出し、またキャッシュからそのブロックへ到達することが含まれる。
【0177】
チェックアウト・オペレーションが成功した場合にプロセスは、ステップ966において要求情報を使用してベクトル内の選択肢の中から1つの選択肢を選択する。この選択は、選択肢のベクトル122に関連して説明した前述の方法に従って行われる。一実施例においては、この選択が別のプログラムまたはプログラム・オブジェクトによって実行され、それによって適切な選択肢が見つけ出されたか否かに応じて成功/失敗の表示が返される。選択が成功すれば、ステップ968においてプロセスは選択肢のベクトルを戻す。ステップ970においてプロセスは、選択した選択肢によってポイントされるオブジェクトを読み出す。
【0178】
ステップ964もしくはステップ966が失敗するときは、要求されたドキュメントがキャッシュ内に存在しない。したがってプロセスは、ステップ972において「ドキュメントなし」エラー・メッセージを、このプロセスの呼び出しを行っているプログラムまたはプロセスに返す。
【0179】
(3.キャッシュのオープン・ライト・プロセス)
図9Fは、キャッシュ内にオブジェクトを書き込むプロセスを示すフローチャートである。図9Eとの関連から説明した前述の読み出しプロセスの場合と同様に、この書き込みプロセスも、好ましくは、キャッシュ内にオブジェクトのストアを必要とする外部プログラムに対してキャッシュ80が有する唯一のインターフェースである「open_write(オープン_ライト)」メソッドとして実装する。好ましくは、オブジェクト名、要求情報、および応答情報を入力パラメータとして受け取るプログラムもしくはメソッドとして図9Fに示したプロセスを実装する。オブジェクト名はキャッシュ内に書き込まれるオブジェクトを識別する;好ましい実施例においては、このオブジェクト名を、図3Bに示したメカニズムを使用してURLから導かれた名前キー62とする。
【0180】
書き込みプロセスは、クライアント10aがオブジェクト52を要求し、それがキャッシュ80内に見つからなかったときに開始される。この結果、キャッシュ80は、そのオブジェクトをストアしているサーバ40とのHTTPトランザクションを開き、そこからそのオブジェクトのコピーを獲得する。キャッシュ書き込みプロセスに提供される要求情報は、クライアントから到来したHTTP要求から導かれる。応答情報は、オブジェクトのコピーを供給するサーバ40からキャッシュ80への応答から導かれる。
【0181】
ステップ974においてこのプロセスは、選択肢のベクトルを請け出す。このステップには、オブジェクト名に基づくキー値の演算、そのキー値をマップしているオープン・ディレクトリ内のセットおよびブロックのルックアップ、および、そのブロックに対応する選択肢のベクトルがある場合にはそのロケートが含まれる。ベクトルが存在しない場合には、ステップ984に示したように、新しいベクトルが作られる。
【0182】
ベクトルの請け出しに成功するか、あるいはそれを作成すると、続いてステップ976においてプロセスは、要求情報を使用して新しい選択肢レコード123a〜123nを現在の選択肢内に定義する。新しい選択肢レコードは、このオブジェクトの位置を参照し、また、要求情報および応答情報のコピーを含んでいる。新しい選択肢は、選択肢のベクトルに追加される。選択肢レコードの複製は許容されている;つまり選択肢のベクトルは、同一の要求情報および応答情報を含む複数の選択肢レコードを包含することができる。現存する選択肢レコードを調べて複製を識別することは、複製の選択肢レコードによって占有されるストレージの増加がほとんどわずかであることから、必要ないと考えられる。
【0183】
ステップ978においては、前述のステップを使用し、修正したベクトルをキャッシュに戻す。ステップ980においては、キー値を使用し、前述した方法に従ってデータ・ストレージ・デバイス90a〜90cの1つにオブジェクトを書き込む。ステップ980の間にそのキーが使用中であることがわかると、書き込みオペレーションが失敗する。これにより、キーによって識別される更新中のオブジェクトの上書きが回避される。
【0184】
(4.キャッシュの更新プロセス)
図9Gは、キャッシュの更新プロセスを示すフローチャートである。この更新プロセスは、選択肢のベクトルを修正し、異なる要求情報または応答情報をストアするために使用される。概して更新プロセスは、キャッシュ80がクライアント10aからの要求に一致するオブジェクト52を現在ストアしているが、プロトコル・エンジンによってそれが期限切れもしくはすでに有効でないと判断されたとき、プロトコル・エンジン70によって起動される。この種の状況においては、プロトコル・エンジン70がオリジナルのオブジェクト52を提供したサーバ40とのHTTPトランザクションを開き、サーバ上でそのオブジェクトの変更がなされているか否かについてサーバに問い合わせるメッセージを送る。このプロセスは、オブジェクト52の「再更新」と呼ばれている。サーバ40がこの問い合わせに対して否定的に応答する場合には、サーバから変更がないことを示すヘッダとともに短いHTTPメッセージが提供され、さらに新しい応答情報が提供される。その場合プロトコル・エンジン70は、オブジェクト52に関する新しい応答情報をキャッシュ80に移すためにキャッシュの更新プロセスを起動する。
【0185】
キャッシュ80内のそのオブジェクト52の期限日または時刻以降にその変更があり、問い合わせに対する肯定的な応答がサーバ40からある場合には、更新プロセスは起動されない。その場合サーバ40は、更新済みのオブジェクト52のコピーを、新しい期限日およびその他の応答情報とともに返す。一方プロトコル・エンジン70は、上記に代えて前述したキャッシュの書き込みプロセスおよび作成プロセスを起動し、新しいオブジェクト52をキャッシュ80に追加する。
【0186】
更新プロセスは、図9Gに示したようにオブジェクト名、「古い」識別名、要求情報および応答情報を含む入力パラメータを受け取る。このオブジェクト名は、URLもしくはURLから導かれたキーである。要求情報は、キャッシュ80からオブジェクト52を求めるクライアントのHTTP要求から、また応答情報はキャッシュから更新済みのコピーをキャッシュが獲得したときの、サーバ40の応答情報からそれぞれ導かれる。
【0187】
「古い」識別名は、要求情報と応答情報のペアを固有識別する値である。好ましい実施例においては、キャッシュにミスが生じた結果としてキャッシュ80が新しいオブジェクトをキャッシュに書き込むとき、クライアントからの要求情報と、そのオブジェクトのコピーを提供したサーバからの応答情報をペアにする。各ペアには、固有の識別値が与えられる。
【0188】
ステップ986においてプロセスは、キャッシュからそのオブジェクト名に対応する選択肢のベクトルを請け出す。好ましくはこれが、ここで説明しているcheckout_write(チェックアウト_ライト)プロセスを起動することによって行われるものとする。これは、オブジェクト名またはURLを使用したオープン・ディレクトリ、タグ・テーブルおよびディレクトリ・インデクスのオブジェクトのルックアップを含み、その結果、対応する選択肢のベクトルが獲得される。チェックアウト・プロセスがフェイルした場合には、ステップ996においてプロセスが適切なエラー・メッセージを返す。
【0189】
チェックアウトが成功すると、ステップ988においてベクトルのコピーまたはクローンがメイン・メモリ内に作成される。要求/応答識別名の値は、このプロセスに対する入力として受け取った古い識別名の値にそれを整合させることによって、このベクトル内に配置される。それにおいては、古い識別名の値が削除され、それに代えて新しい識別名が同じ場所に書き込まれる。この新しい識別名は、入力としてこのプロセスに提供された新しい要求情報と応答情報を固有に識別する。
【0190】
ステップ990においては、新しいベクトルがストレージ・デバイス90a〜90cの1つに書き込まれ、ステップ992においては新しいベクトルがキャッシュに戻される。これらのステップの実行においては、ベクトルのクローンを完全にストレージ・デバイスに書き込んだ後にそのベクトルを戻すことが望ましい。これは、書き込みオペレーションが成功した後にそのクローン・ベクトルを参照すべくディレクトリ・テーブルが修正されることを保証する。またこれは、古いベクトルへのアクセスを必要とするプロセスもしくはプログラムがあるとき、それを使用可能にすることについても保証する。
【0191】
(5.ディレクトリのルックアップ)
図9Cは、好ましい実施例のオープン・ディレクトリ130内において行われる情報のルックアップのプロセスを示したフローチャートである。図9Cのプロセスは、入力パラメータとして名前キー62のサブキー部分を受け取るプログラム・プロセスまたはメソッドとして実装される。ここで、先行する図示していないステップにおいて、プロトコル・エンジン70がURL等のオブジェクト名を受け取っていることを理解されよう。たとえば、クライアントからキャッシュを動作させているサーバに対して発行されたHTTP要求内においてURLが提供される。プロトコル・エンジン70は、このオブジェクト名に対してハッシュ関数を適用する。このハッシュ関数は、その結果として、あるいはその出力としてキャッシュ内のセットを識別する名前キーを生じる。
【0192】
ステップ948においてこのプロセスは、ディレクトリ・インデクスからのサブキーによって識別される1ないしは複数のブロックの請け出しを試みる。ブロックのチェックアウト・ステップは、好ましくはこれにおいて説明しているcheckout_read(チェックアウト_リード)プロセスの起動を含むものとする。すなわち:
【0193】
チェックアウトの試みが失敗状態をもたらしたとき、ステップ950においてプロセスは、それを呼び出したプログラムまたはプロセスに対して、入力サブキーに一致するブロックがキャッシュ内に見つからなかったことを示すエラー・メッセージを返す。その後コントロールがステップ952に渡され、それにおいてこのプロセスが終了する。
【0194】
チェックアウトの試みが成功した場合には、このプロセスを呼び出したプログラムによるブロックのコピーの使用が可能になる。ステップ954においては、請け出したブロックを再び戻す。ステップ956においてプロセスは、それを呼び出したプログラムに対し、要求されたブロックが見つかったことを示すメッセージを返す。その後ステップ952においてこのプロセスが終了する。
【0195】
このように、キャッシュのサーチ・オペレーションは、オープン・ディレクトリからキーによって識別されるブロックの請け出しを求める、より基本的なプロセスの呼び出しを伴う。基本的なプロセスによりオープン・ディレクトリ内においてそのブロックが見つからなかったときは、ディレクトリ・インデクスがサーチされる。
【0196】
ブロックが見つかったときは、それがクライアントに配信される。たとえば、本発明をワールド・ワイド・ウェブ関連に適用する場合、クライアントに対するHTTP接続を開き、HTTPトランザクションを使用してデータ・ブロックをそのクライアントに送信することによって、そのデータ・ブロックが配信される。このステップは、トランザクションを開く前にいくつかのデータ・ブロックのバッファリングを伴うこともある。
【0197】
(6.キャッシュの削除プロセス)
図9Dは、キャッシュからオブジェクトに関連するブロックを削除するプロセスを示したフローチャートである。チェックアウト・オペレーションの場合と同様に、キャッシュの削除プロセスは、入力としてキー値を受け取る。このプロセスは、ステップ958〜962からなる。これらのステップは、図9Cに示したステップ948、954および952のオペレーションと実質的に類似するオペレーションを実行する。しかしながら、キャッシュ内に見つかったブロックの削除を行うためにこのプロセスは、ステップ960において、削除フラグをセットし、削除フラグをセットした状態でそのブロックを戻す。チェックイン・プロセスに関連してここで述べているように(図9Bのステップ938および944)、削除フラグがセットされているときは、そのブロックが削除済みとしてマークされることになる。その後、オープン・ディレクトリ内に反映された変更がディレクトリ・インデクスと同期されたとき、このブロックが最終的にディレクトリ・インデクスから削除される。
【0198】
(7.チェックアウト・リード・オペレーション)
図8Dは、ディレクトリ・テーブル110に関連して使用されるcheckout_read(チェックアウト_リード)オペレーションを示すフローチャートである。このcheckout_read(チェックアウト_リード)オペレーションは、特定のキーに一致するディレクトリ・テーブル110のブロックからコピーを獲得するために使用される。ディレクトリ・テーブル110からそのブロックを請け出した後は、そのブロックを請け出したプロセスに限って、それを読み出して使用することが可能、つまりほかのプロセスにはそれができない。その後、別のプロセスがそのブロックを使用できるようにするためには、そのブロックを戻す必要がある。相補的なチェックアウト‐チェックイン(請け出しおよび戻し)のプロセスは、ディレクトリ・テーブルのブロックを修正できるプロセスを1度に1つに限ることを保証するために使用され、このメカニズムは、ディレクトリ・テーブルが常にキャッシュ内のオブジェクトに関する正確な情報をストアしていることを保証するために欠くことができない。つまり、いずれ明らかになろうが、チェックアウト・プロセスおよびチェックイン・プロセスは、特定のオブジェクトに関するキャッシュのサーチを補助する基本的なプロセスである。
【0199】
図8Dに示されるようにcheckout_read(チェックアウト_リード)オペレーションは、入力としてキー値を受け取る。好ましい実施例においては、この入力キー値が、オブジェクト名に対応する名前キー62のサブキー部分になる。
【0200】
オブジェクト・ストアがメモリおよびディスクのデータ構造の一部を修正しようとしていることから、一貫性のある結果を達成するために、キャッシュ・データ構造のサブセットに対する短期間の相互排他を保証する必要がある。キャッシュ・データ構造は、256の仮想「スライス」に分割されており、8ビットのキーによって選択される。各スライスは、関連するmutexロックを有している。ステップ832においてプロセスは、入力キー用のロックを探してそれを獲得する。ロックが獲得できない場合、プロセスは、それが入手可能になるまで短時間の待機を行う。別のトランザクションが、同一のスライスに至るキーに関連付けされた小部分のメモリの状態を修正しているときは、ロックが入手不可能となり得る。
【0201】
ロックの獲得後は、別のプロセスによるこの入力キーの使用ができなくなる。ステップ834においてプロセスは、ディレクトリ・テーブル110のセット110a〜110nのうち、いずれがこのキーに対応するかを決定する。続いてこのプロセスは、ディレクトリ・テーブル110のセットに対応するオープン・ディレクトリ130のブロック・リスト132a、132bのいずれか1つを、入力キーのサブキーの値をブロック・リストの1つに関連付けすることによって見つける。このプロセスは、ステップ836においてオープン・ディレクトリ130の選択したブロック・リスト内のブロックをスキャンし、入力キーに一致するキーをストアしているブロックを探す。
【0202】
一致が見つかるとこのプロセスは、ステップ838において、一致したブロックが別のプロセスによって現在、作成中であるか、あるいは壊れているか否かについて評価する。一致したブロックが現在、作成中もしくは壊れている場合には、ステップ840において、現在のブロックは使用不可能であることを示すエラー・メッセージをプロトコル・エンジン70に返す。
【0203】
これに対して、一致したブロックが現在、作成中でなく、壊れていなければ、そのブロックを使用することができる。その場合プロセスは、ステップ842において読み出しカウンタをインクリメントする。読み出しカウンタは、そのブロックに関連付けされた内部変数であり、そのブロックを読み出しているプロセスもしくはプログラム・オブジェクトのインスタンスの数を示す。この種のプロセスもしくはオブジェクトは、「リーダー」と呼ばれる。ステップ844においてプロセスは、そのブロックのコピーを獲得し、呼び出しているプログラムまたはプロセスにそれを返す。
【0204】
ステップ836のスキャンにおいて一致が見つからないと、このプロセスは、ステップ846においてディレクトリ・テーブルのサーチを起動し、ここで詳しく説明しているプロセスを使用してこのキーに一致するディレクトリ・テーブルのセットおよびブロックを探す。このサーチにおいてもキーとの一致が見つからなかったときは、ステップ848において、このプロセスから、それを呼び出しているプログラムもしくはプロセスに対し、要求されたオブジェクトがキャッシュ内に存在しない旨を表すエラー・メッセージを返す。このプロセスを呼び出しているプログラムもしくはプロセスは、この種のメッセージに対する具体的な応答を決定するが、ワールド・ワイド・ウェブに関して言えば、一般にプロキシ30がHTTP要求を使用してオブジェクトをストアしているサーバ40にコンタクトし、要求されているオブジェクトのコピーを獲得する。
【0205】
ステップ846においてディレクトリ・インデクスをルックアップする間に一致が見つかると、ステップ850において対応するブロックをオープン・ディレクトリに追加する。これにおいては、メイン・メモリ内に新しいオープン・ディレクトリ・ブロックを作成し;対応するディレクトリ・インデクスのブロックから情報をコピーすることによってそのブロックを初期化し;さらに、新しいブロックに対する参照を対応するブロック132a、132bのリストに追加する。
【0206】
(8.チェックアウト・ライト・オペレーション)
図8Eは、オープン・ディレクトリ130に関連して使用されるcheckout_write(チェックアウト_ライト)プロセスまたはオペレーションを示すフローチャートである。checkout_write(チェックアウト_ライト)オペレーションは、このプロセスに渡されたキーに一致するブロックのコピーをオープン・ディレクトリ130から獲得し、そのブロックのコンテンツ、またはそのブロックに関連付けされたオブジェクトないしはベクトルを修正または更新するために使用される。checkout_write(チェックアウト_ライト)を使用してオープン・ディレクトリ130からブロックを請け出した後は、別のプロセスがそのブロックまたは、その関連オブジェクトないしはベクトルを修正することができる。その後ブロックは、ここに説明のあるチェックイン・プロセスを使用して戻される。これらのオペレーションを使用して、オープン・ディレクトリに変更がストアされ、続いて規則に従ってそれがディレクトリ・テーブルに伝えられる。
【0207】
図8Eに示すようにcheckout_write(チェックアウト_ライト)プロセスは、入力としてキー値を受け取る。好ましい実施例においては、この入力キー値が、オブジェクト名に対応する名前キー62のサブキー部分になる。ステップ854においてこのプロセスは、指定されたキーに係るロックを探して獲得する。ロックが獲得できない場合、プロセスは、それが入手可能になるまで待機する。
【0208】
ロックの獲得後は、別のプロセスによるこのキーの使用ができなくなる。ステップ856においてプロセスは、ディレクトリ・テーブル110のセット110a〜110nのうち、いずれがこのキーに対応するかを決定する。続いてこのプロセスは、ディレクトリ・テーブル110のセットに対応するオープン・ディレクトリ130のブロック・リスト132a、132bのいずれか1つを見つける。ステップ858においてこのプロセスは、オープン・ディレクトリ130の、選択したブロック・リスト内のブロックをスキャンし、入力キーに一致するキーをストアしているブロックを探す。
【0209】
一致が見つかるとこのプロセスは、ステップ864において、一致したブロックが別のプロセスによって現在、作成中であるか、あるいは壊れているか否かについて評価する。それに該当する場合には、ステップ866において、現在のブロックは使用不可能であることを示すエラー・メッセージをプロトコル・エンジン70またはキャッシュ80に返す。一致したブロックが現在、作成中でなく、壊されていなければ、そのブロックを使用することができる。その場合このプロセスは、ステップ868において書き込みカウンタをインクリメントする。この書き込みカウンタは、そのブロックに関連付けてストアされる内部変数であり、そのブロックに書き込みを行っているプロセスもしくはプログラム・オブジェクトの数を示す。ステップ870においてプロセスは、ブロックのコピーを獲得し、呼び出しているプログラムまたはプロセスにそれを返すとともに、そのコピーに修正中である旨のマークを付する。このマーク付けは、オープン・ディレクトリをディレクトリ・インデクスに同期させるとき、そのブロックに加えられた変更がディレクトリ・インデクス内に反映されることを保証する。
【0210】
ステップ858のスキャンにおいて一致が見つからないとき、このプロセスはステップ860において、ここで詳しく説明しているプロセスを使用したディレクトリ・インデクスのサーチを起動する。このサーチにおいても一致が見つからなかったときは、ステップ862において、このプロセスから、それを呼び出しているプログラムもしくはプロセスに対し、要求されたオブジェクトがキャッシュ内に存在しない旨を表すエラー・メッセージを返す。ワールド・ワイド・ウェブに関して言えば、通常、呼び出しているプログラムがHTTP要求を使用してそのオブジェクトをストアしている発信サーバにコンタクトし、要求されたオブジェクトのコピーを獲得する。
【0211】
ステップ860においてディレクトリ・インデクスをルックアップする間に一致が見つかると、ステップ874において対応するブロックをオープン・ディレクトリに追加する。これにおいては、メイン・メモリ内に新しいオープン・ディレクトリ・ブロックを作成し;対応するディレクトリ・インデクスのブロックから情報をコピーすることによってそのブロックを初期化し;さらに、新しいブロックに対する参照を対応するブロック132a、132bのリストに追加する。その後コントロールがステップ868に渡され、それにおいて書き込みカウントがインクリメントされ、ステップ868〜870との関連で説明したようにこのプロセスが継続される。
【0212】
(9.チェックアウト・クリエイト・オペレーション)
図8Fは、オープン・ディレクトリ130に関連して使用するためにサポートされているcheckout_create(チェックアウト_クリエイト)オペレーションを示すフローチャートである。checkout_create(チェックアウト_クリエイト)オペレーションは、キャッシュに追加される新しいオブジェクトに対応する名前キーに関して、オープン・ディレクトリ130内に新しいブロックを作成するために使用される。オープン・ディレクトリ130内にブロックが作成された後は、ユーザがオープン・ディレクトリ130を介してキャッシュからそのオブジェクトを獲得することができる。
【0213】
図8Fに示されるように、checkout_create(チェックアウト_クリエイト)プロセスは、入力としてキー値を受け取る。好ましい実施例においては、この入力キー値が、オブジェクト名に対応する名前キー62のサブキー部分になる。ステップ876においてこのプロセスは、指定されたキーに係るロックを探して獲得する。ロックが獲得できない場合、プロセスは、それが入手可能になるまで待機する。
【0214】
ロックの獲得後は、別のプロセスによるこのキーの使用ができなくなる。ステップ878においてプロセスは、ディレクトリ・テーブル110のセット110a〜110nのうち、いずれがこのキーに対応するかを決定する。続いてこのプロセスは、入力キーのセット・サブキー・ビットを使用して、ディレクトリ・テーブル110のセットに対応するオープン・ディレクトリ130のセットを見つける。ステップ880においてこのプロセスは、オープン・ディレクトリ130の選択したブロック・リスト内のブロックをスキャンし、入力キーに一致するキーをストアしているブロックを探す。
【0215】
一致が見つかった場合には、すでに存在しているブロックの作成を試みていることになる。そこでこのプロセスは、ステップ882において一致したブロックが削除済みとしてマークされているか、また現在、それの読み出しあるいは書き込みを行っているほかのプロセスがないかを評価する。リーダー・カウンタおよびライター・カウンタの値がともにゼロであれば、ほかのプロセスによるそのブロックの読み出しあるいは書き込みはない。リーダー・カウンタおよびライター・カウンタの値のいずれかがゼロでないとき、あるいは一致したブロックが削除済みとマークされていないとき、そのブロックはすでに現存する有効なブロックであり、それを作成することはできない。その場合、ステップ884において、現在のブロックを作成する要求に応じることができない旨を示すエラー・メッセージをプロトコル・エンジン70またはキャッシュ80に返す。
【0216】
一致したブロックが削除されており、それにアクセスしているライターないしはリーダーがまったくない場合、プロセスは、一致している、以前作成されたブロックを作成し、初期化することによって、事実上、新しいブロックを作成することができる。そこでこのプロセスは、ステップ886において一致しているブロックをクリアする。ステップ888においてこのプロセスは、特定のフィールドにゼロを書き込み、ブロックのキー値を現在のキーにセットすることによってクリアしたブロックを初期化する。ブロック890においてプロセスは、そのブロックに関連付けされているライター・カウンタをインクリメントし、そのブロックを作成済みとしてマークする。ステップ892においてプロセスは、それを呼び出しているプロセスまたはプログラム・オブジェクトにそのブロックのコピーを返し、そのブロックを修正中としてマークする。
【0217】
ステップ880のスキャンにおいて一致が見つからなかった場合は、現在、オープン・ディレクトリ130内に一致するブロックが存在していない。その場合このプロセスは、ステップ894において、ここで詳しく説明しているプロセスを使用してディレクトリ・インデクスのサーチを行う。そのサーチにより一致が見つかると、ステップ896においてプロセスは、それを呼び出しているプログラムまたはプロセスに対し、作成しようとしているブロックがキャッシュ内にすでに存在し、削除することができない旨を示すエラー・メッセージを返す。
【0218】
一致が見つからなかったときは、キャッシュ全体にわたり、一致するブロックがまったく存在しないことになる。そこでこのプロセスは、ステップ898において、新しいオープン・ディレクトリのブロックを作成し、そのブロックに対する参照を、ステップ878において演算したセット値に関連付けされたリスト132a、132bに追加する。その後コントロールがステップ890に渡され、ステップ890〜892に関連して前述した説明のとおりにステップが継続される。
【0219】
(10.チェックイン・プロセス)
図9Bにブロックのチェックイン・プロセスのフローチャートを示す。キャッシュ80は、ブロックの読み出し、修正、または削除を行った後、図9Bに示したプロセスを実行してそのブロックをオープン・ディレクトリ130に戻す。一実施例においては図9Bに示したプロセスが、ブロックの識別名をパラメータとして受け取るプログラム・プロセスまたはオブジェクトとして実装される。このキーが、請け出したブロック内に存在することから、引数としてこのキーを渡す必要はない。
【0220】
このプロセスは、ステップ930においてブロックに関連付けされたキーに対応するロックの獲得を試みる。入手可能なロックが存在しないときは、プロセスが待機ループに入り、ロックが入手可能になるまでの待機を設定する。ロックが入手できたとき、ステップ932においてこのプロセスは、そのブロックが修正され、それを戻そうとしているか否かを評価する。それに該当するときは、ステップ934においてそのブロック用のライター・カウントをデクリメントし、プロセスがそのブロックに対する書き込みを完了したことを示す。
【0221】
ステップ936においてプロセスは、チェックイン・プロセスの実行が成功したか否かを評価する。このとき成功であると評価されるときは、続いてステップ942においてプロセスは、現在のブロック内の情報を、オープン・ディレクトリ内の対応するオリジナルのブロックにコピーする。このようにして、チェックアウト・プロセスにおいて獲得したブロックのコピーを修正するプロセスによって実行された変更を用いてオープン・ディレクトリが更新される。その後、あるいはステップ936の評価が否定であった場合に、プロセスは削除チェックイン・フラグがセットされているか否かを評価する。この削除チェックイン・フラグは、チェックインの後にそのブロックを削除することを示す。削除フラグは、チェックイン・オペレーションに対する引数である。このフラグがセットされているとき、ステップ944においてプロセスは、そのブロックを削除済みとしてマークを付ける。このプロセスは、ステップ940において終了する。
【0222】
ステップ932の評価が否定であった場合には、このブロックは修正されていない。その結果、可能性のある唯一の状態は、このブロックが読み出されたこととなる。したがって、ステップ946においてリーダー・カウントをデクリメントする。
【0223】
(方法の実装)
好ましい実施例においては、ここで説明している方法が図11に示すタイプの汎用プログラマブル・ディジタル・コンピュータ・システムを使用して実行される。これらの方法のそれぞれは、いくつかの異なるやり方で実装することができる。たとえば、シングル・プロセス、またはマルチスレッド、マルチプロセッシング・システムにおいて、手続き型コンピュータ・プログラム、オブジェクト指向プログラム、プロセス、アプレット等の形式によりこれらの方法を実装することができる。
【0224】
好ましい実施例においては、プロセスのそれぞれが独立かつ再入可能であり、したがってキャッシュが動作しているときは、各プロセスのインスタンスを複数回にわたって作ることができる。たとえば、ガーベジ・コレクション・プロセスは、割り当ておよび書き込みプロセスと同時に、かつ独立させて実行される。
【0225】
(ハードウエア概要)
図11は、本発明の実施例が実装されると考えられるコンピュータ・システム1100を示したブロック図である。コンピュータ・システム1100は、バス1102もしくはその他の、情報を伝達するためのメカニズム、およびバス1102に接続された、情報を処理するためのプロセッサ1104を備える。またコンピュータ・システム1100においては、ランダム・アクセス・メモリ(RAM)もしくはその他の動的ストレージ・デバイス等とするメイン・メモリ1106がバス1102に接続されており、そこには情報およびプロセッサ1104によって実行されるインストラクションがストアされている。メイン・メモリ1106は、プロセッサ1104によるインストラクションの実行間に、一時変数もしくはその他の中間情報をストアするために使用されることもある。さらにコンピュータ・システム1100には、情報およびプロセッサ1104用の命令をストアするための読み出し専用メモリ(ROM)1108もしくはその他の静的ストレージ・デバイスが備わり、バス1102に接続されている。ストレージ・デバイス1110は、磁気ディスクまたは光ディスク等であり、情報および命令をストアするために備えられ、バス1102に接続されている。
【0226】
コンピュータ・システム1100には、バス1102を介して陰極線管(CRT)等の、コンピュータのユーザに情報を表示するためのディスプレイ1112が接続されることもある。英数字キーおよびその他のキーを含む入力デバイス1114は、バス1102に接続されて、プロセッサ1104に情報およびコマンドの選択を伝える。別のタイプのユーザ入力デバイスとして、マウス、トラックボール、あるいはカーソル移動キーといったカーソル・コントロール1116も備わっており、方向情報およびコマンドの選択をプロセッサ1104に伝え、またディスプレイ1112上のカーソルの動きをコントロールするために使用される。この入力デバイスは、通常、第1の軸(たとえばx軸)および第2の軸(たとえばy軸)を含む2軸に自由度を有し、それによりこのデバイスを用いた平面内のポジションの指定が可能になる。
【0227】
本発明は、情報オブジェクトをキャッシュするためのコンピュータ・システム1100の使用に関する。本発明の一実施例によれば、情報オブジェクトのキャッシが、メイン・メモリ1106内に収められている1ないしは複数の命令からなる1ないしは複数のシーケンスを実行するプロセッサ1104に応答してコンピュータ・システム1100によって提供される。この種の命令は、ストレージ・デバイス1110等の別のコンピュータ読み取り可能な媒体から、メイン・メモリ1106内に読み込むことができる。メイン・メモリ1106内に含まれる命令のシーケンスの実行によってプロセッサ1104は、ここに説明したプロセスのステップを実行する。別の実施例においては、ソフトウエア命令に代えて、あるいはそれとの組み合わせによりハードワイヤード回路が使用され、本発明が実装されることもある。つまり、本発明の実施は、いかなる特定のハードウエア回路およびソフトウエアの組み合わせにも限定されない。
【0228】
「コンピュータ読み取り可能な媒体」という用語は、ここで用いる限り、実行のためのプロセッサ1104へのインストラクションの提供に関与する任意の媒体を指す。この種の媒体は各種の形式をとることがあり、限定する意図ではないが、それには不揮発性媒体、揮発性媒体、伝送媒体が含まれる。不揮発性媒体には、たとえば、ストレージ・デバイス1110等の光または磁気ディスクが含まれる。揮発性媒体には、メイン・メモリ1106等の動的メモリが含まれる。伝送媒体には、同軸ケーブル、銅線ワイヤおよび光ファイバが含まれ、バス1102を構成するワイヤもこれに含まれる。また伝送媒体は、音波または光の形式をとることも可能であり、たとえば電波および赤外線データ通信の間にそれが生成される。
【0229】
コンピュータ読み取り可能な媒体の一般的な形としては、たとえばフロッピーディスク、フレキシブル・ディスク、ハードディスク、磁気テープ、もしくはその他の磁気媒体、CD−ROM、もしくはその他の光媒体、パンチカード、紙テープ、もしくはその他の鑽孔パターンを伴う物理媒体、RAM、PROM、およびEPROM、フラッシュEPROM、その他のメモリ・チップもしくはカートリッジ、後述する搬送波、またはコンピュータが読み取ることができるこのほかのあらゆる媒体が挙げられる。
【0230】
各種形式のコンピュータ読み取り可能な媒体が関連して、実行のための1ないしは複数の命令からなる1ないしは複数のシーケンスをプロセッサ1104に運ぶことができる。たとえば、当初命令がリモート・コンピュータの磁気ディスク上に乗っているとする。リモート・コンピュータは、この命令をその動的メモリにロードし、さらにモデムを使用してその命令を、電話回線を介して送ることができる。コンピュータ・システム1100の近傍にあるモデムは、電話回線上でそのデータを受け取り、赤外線送信機を使用してそのデータを赤外線信号に変換することができる。バス1102に接続された赤外線検出器は、赤外線信号内に含まれて運ばれてきたデータを受信し、データをバス1102に渡すことができる。バス1102は、データをメイン・メモリ1106まで運び、そこからプロセッサ1104が命令を取り出して実行する。メイン・メモリ1106によって受け取られたインストラクションは、選択肢の1つとして、プロセッサ1104による実行の前もしくはその後に、ストレージ・デバイス1110にストアしてもよい。
【0231】
コンピュータ・システム1100は、バス1102に接続された通信インターフェース1118を包含している。通信インターフェース1118は、ローカル・ネットワーク1122に接続された通信リンク1120を結合する双方向データ通信を提供する。たとえば通信インターフェース1118を統合ディジタル通信サービス網(ISDN)カードまたはモデムとし、対応するタイプの電話回線に対するデータ通信接続を提供することが考えられる。別の例において、通信インターフェース1118をローカル・エリア・ネットワーク(LAN)カードとして、互換性のあるLANに対するデータ通信接続を提供してもよい。ワイヤレス・リンクの実装も考えられる。これらの実装のいずれにおいても、通信インターフェース1118は、各種タイプの情報を表すディジタル・データ・ストリームを搬送する電気的、電磁気的あるいは光学的信号を送受する。
【0232】
ネットワーク・リンク1120は、通常、1ないしは複数のネットワークを介してほかのデータ・デバイスに対するデータ通信を提供する。たとえばネットワーク・リンク1120が、ローカル・ネットワーク1122を介してホスト・コンピュータ1124への接続、あるいはインターネット・サービス・プロバイダ(ISP)1126への接続の接続を提供することがある。一方ISP1126は、現在一般的に「インターネット」1128と呼ばれているワールド・ワイドなパケット・データ通信を介したデータ通信サービスを提供する。ローカル・ネットワーク1122およびインターネット1128は、いずれもディジタル・データ・ストリームを搬送する電気的、電磁気的、あるいは光学的信号を使用する。コンピュータ・システム1100へ、またそこからディジタル・データを運ぶ、これらの各種ネットワークを介した信号およびネットワーク・リンク1120上の信号ならびに通信インターフェース1118を介した信号は、情報を伝達する搬送波の形式の例である。
【0233】
コンピュータ・システム1100は、プログラム・コードを含めて、ネットワーク(1ないしは複数)、ネットワーク・リンク1120、および通信インターフェース1118を介してメッセージを送りデータを受け取ることができる。インターネットの例においては、サーバ1130が、要求されたアプリケーション・プログラム用のコードをインターネット1128、ISP 1126、ローカル・ネットワーク1122および通信インターフェース1118を介して送信することが考えられる。本発明によれば、この種のダウンロードされたアプリケーションの1つが、ここで説明している情報オブジェクトのキャッシュを提供する。
【0234】
受信したコードは、プロセッサ1104によってその受信時に実行されることもあれば、それとともに、あるいはそれに代えて、後の実行のためにストレージ・デバイス1110もしくは別の不揮発性ストレージにストアされることもある。このようにして1100は、搬送波の形式においてアプリケーション・コードを獲得することができる。
【0235】
以上のとおり、従来のアプローチに対して明確な利点を有するオブジェクト・キャッシュについて説明してきた。特にここでは、オブジェクトのストア・オペレーションについて遅れ時間が小さく、高いスループットが得られ、かつ多数の同時オペレーションが得られるという意味において高いパフォーマンスを提供するオブジェクト・キャッシュについて説明している。ここに説明されているメカニズムは、テラバイト台の情報、およびその成長レートに比例して増える数十億のオブジェクトをストアする大きなオブジェクト・キャッシュに適用することができる。
【0236】
このオブジェクト・キャッシュは、メモリのストレージ空間を効率的に利用することから、高価な半導体メモリが有効にかつ効果的に使用される。またこのキャッシュは、ディスク・ストレージ空間の効率性をもたらし、その結果、オブジェクト・ストアの有限なディスク容量内に多数のインターネット・オブジェクトのレプリカをストアすることができる。このキャッシュはエイリアス・フリーであり、名前はそれぞれ異なるが同一のオブジェクト・コンテンツを有する複数のオブジェクトもしくはオブジェクトのバリアントは、オブジェクトのコンテンツを1回だけキャッシュし、異なる名前の間においてそれを共有する。
【0237】
ここに説明したキャッシュは、マルチメディアの多様性に関するサポートを有し、数百バイトからメガバイトに至る6桁にわたるサイズ範囲で多数のタイプの多様なマルチメディア・オブジェクトを効率的にサポートする。このキャッシュは、高速かつ用法を意識したガーベジ・コレクションを備え、有用性の低いオブジェクトをオブジェクト・ストアから効率的に削除し、新しいオブジェクトのためのスペースを確保する。またこのキャッシュは、データの一貫性を特徴とし、プログラム上のエラーおよびハードウエアの障害によりデータの信頼性を失うことがない。
【0238】
このキャッシュは、高速リスタートが可能であり、時間を要するデータベースまたはファイル・システムのチェック・オペレーションを必要とすることなく、リスタート後数秒内にオブジェクト・キャッシュが要求に対するサービスを開始することができる。キャッシュは、ストリーミングI/Oを使用しているため、大きなオブジェクト全体をメモリ内にステージすることなく、オブジェクト・ストアから遅いクライアントに、効率的にパイプラインさせることができる。このキャッシュはまた、コンテンツ・ネゴシエーションのサポートを有し、プロキシ・キャッシュは、クライアントのブラウザ、言語、またはその他のクライアントの要求の属性に向けられた、同一URLを有するオブジェクトのバリアントを効率的かつ柔軟にストアすることができる。このキャッシュは汎用であり、オブジェクト・ストアのインターフェースは、将来的なメディア・タイプおよびプロトコルに適合できる充分な柔軟性を有している。
【0239】
これらの利点ならびに特性は、この明細書における技術的説明の特徴として考えるべきである;しかしながら、この種の利点ならびに特性が、本発明の一部を構成する必要はなく、またそれがこの明細書に述べる特許請求の範囲のいずれかによって求められる必要もない。
【0240】
以上、この明細書においては、具体的な実施例を参照し、かつ特定の目的ならびに利点を参照して本発明を説明した。しかしながら、本発明から逸脱することなく、各種の変更がそれに加え得ることは明らかである。したがって、この明細書の説明および図面は、限定を意味するものではなく例示のみを提供するものと考えるべきである。
【図面の簡単な説明】
以下、本発明を添付図面に示した例により説明するが、これに限定する意図はなく、また図面においては、類似の要素に類似の参照番号を使用している。
【図1】図1は、クライアント/サーバ関係を示すブロック図である。
【図2】図2は、トラフィック・サーバのブロック図である。
【図3A】図3Aは、オブジェクトをキーに変換するステップを示すブロック図である。
【図3B】図3Bは、オブジェクト名をキーに変換するステップを示すブロック図である。
【図4A】図4Aは、キャッシュのブロック図である。
【図4B】図4Bは、「選択肢のベクトル」のためのストレージ・メカニズムを示すブロック図である。
【図4C】図4Cは、マルチセグメント・ディレクトリ・テーブルのブロック図である。
【図5】図5は、データ・フラグメントに関連するポインタのブロック図である。
【図6】図6は、ストレージ・デバイスおよびそのコンテンツを示すブロック図である。
【図7】図7は、プールの構成を示すブロック図である。
【図8A】図8Aは、ガーベジ・コレクションのプロセスを示すフローチャートである。
【図8B】図8Bは、ストレージ・デバイスに情報を書き込むプロセスを示すフローチャートである。
【図8C】図8Cは、同期化のプロセスを示すフローチャートである。
【図8D】図8Dは、「checkout_read」プロセスを示すフローチャートである。
【図8E】図8Eは、「checkout_write」プロセスを示すフローチャートである。
【図8F】図8Fは、「checkout_create」プロセスを示すフローチャートである。
【図9A】 図9Aは、キャッシュのルックアップ・プロセスを示すフローチャートである。
【図9B】 図9Bは、「checkin」プロセスを示すフローチャートである。
【図9C】 図9Cは、キャッシュのルックアップ・プロセスを示すフローチャートである。
【図9D】 図9Dは、キャッシュの削除プロセスを示すフローチャートである。
【図9E】 図9Eは、キャッシュの読み出しプロセスを示すフローチャートである。
【図9F】 図9Fは、キャッシュの書き込みプロセスを示すフローチャートである。
【図9G】 図9Gは、キャッシュの更新プロセスを示すフローチャートである。
【図10A】 図10Aは、ストレージ・デバイス内におけるオブジェクトの書き込みおよび割り当てを行うプロセスを示すフローチャートである。
【図10B】 図10Bは、スケーリングされたカウンタ更新のプロセスを示すフローチャートである。
【図11】 図11は、本発明のインプリメンテーションに使用できるコンピュータ・システムのブロック図である。
【図12】 図12は、オブジェクトの再更新のプロセスを示すフローチャートである。
Claims (22)
- 情報オブジェクトに関連付けられたキー値によって識別される情報オブジェクトのためのキャッシュから情報オブジェクトを配信する方法において、前記キャッシュは、第1のサブキー値のセットを用いて前記情報オブジェクトをインデクス付けするタグ・テーブルを備え、ここで、前記第1のサブキー値のセット内の各サブキー値が、対応するキー値の一部であり、ディレクトリ・テーブルが、前記タグ・テーブル内の前記第1のサブキー値のセットへインデクス付けされると共にデータ・ストレージ・エリアへの参照を有する複数のブロックを備え、前記方法が、
(A)要求された情報オブジェクトを識別する名前及びその他の所定情報を含むリクエストを受け取るステップと、
(B)前記要求された情報オブジェクトのために、前記名前に所定のハッシュ関数を適用することにより、複数のサブキーを備えた固定サイズのキー値を計算するステップであって、前記複数のサブキーにおける各サブキーが、前記固定サイズのキー値の一部であるものと、
(C)前記タグ・テーブル及び前記複数のサブキーをルックアップキーとして用いて、ディレクトリ・テーブル内の前記要求された情報オブジェクトの一致ブロックをルックアップするステップと、
(D)前記ディレクトリ・テーブル内の前記一致ブロックに含まれる参照を用いて、前記データ・ストレージ・エリアから前記要求された情報オブジェクトのコピーを取り出すステップと、
を備えた方法。 - 請求項1に記載の方法において、更に、
前記その他の所定情報に基づいて、前記要求された情報オブジェクトの複数のバージョンの前記キャッシュ内のリストから、前記要求された情報オブジェクトのバージョンを選択するステップと、
前記選択されたバージョンに関連付けられて前記リストにストアされた前記サブキーからなるオブジェクトキーに基づいて、前記キャッシュ内の前記要求された情報オブジェクトの格納場所を特定するステップと、
前記格納場所から前記要求された情報オブジェクトを取り出すステップと、
前記要求された情報オブジェクトを前記クライアントへ配信するステップと、
を備えた方法。 - 請求項1に記載の方法において、更に、前記情報オブジェクトを、大容量ストレージ・デバイスに連続的にストアするステップを備えた方法。
- 請求項3に記載の方法において、更に、前記各情報オブジェクトを、前記大容量ストレージ・デバイスの連続したプールにストアするステップを備えた方法。
- 請求項4に記載の方法において、更に、前記各情報オブジェクトを、前記連続したプールにおける複数のアリーナの1つにストアするステップを備えた方法。
- 請求項5に記載の方法において、更に、前記各情報オブジェクトを、前記複数のアリーナから割り当てられた1又は複数のフラグメントにストアするステップを備えた方法。
- 情報オブジェクトを備えた前記フラグメントが、前のフラグメントキーからリンクされている請求項6に記載の方法。
- 請求項2に記載の方法において、更に、
前記要求された情報オブジェクトの前記複数のバージョンのそれぞれに連続して前記リストをストアするステップと、
前記各ブロックにおいて、前記要求された情報オブジェクトのサイズ値をそのブロックに関連付けてストアするステップであって、前記サイズ値が前記リスト及び前記情報オブジェクトの前記複数のバージョンの格納サイズを示すものと、
を備え、ステップ(D)において、前記リスト及び前記複数のバージョンを同時に読み出すステップを備えた方法。 - 請求項5に記載の方法において、更に、書き込み集成バッファに異なる速度のストリーミング・データ転送を統合するステップを備えた方法。
- 請求項3に記載の方法において、前記情報オブジェクトをストアするステップは、別の情報オブジェクトに関してステップ(A)〜(D)を実行するのと並行して、前記情報オブジェクトを、前記大容量ストレージ・デバイスの連続した使用可能なストレージ空間内に書き込むステップを備えた方法。
- 請求項1に記載の方法において、
前記タグ・テーブルは、第2のサブキーのセットにより前記第1のサブキーのセットをインデクス付けし、ここで、前記第2のサブキーのセットの各サブキーが、対応するキー値の一部であり、
前記複数のサブキーが、第1のサブキー及び第2のサブキーを含み、
前記方法が、前記タグ・テーブルが前記第2のサブキーを備えるか否かを判断するための前記タグ・テーブルを調べるステップを実行することにより、キャッシュ・ヒットを判断するステップを含む方法。 - 情報オブジェクトをキャッシングするための1又は複数の命令シーケンスを備えたコンピュータ読み取り可能な記録媒体であって、1又は複数のプロセッサに以下の方法の各手順を実行させるためのプログラムを記録した記録媒体。
情報オブジェクトに関連付けられたキー値によって識別される情報オブジェクトのためのキャッシュから情報オブジェクトを配信する方法であって、前記キャッシュは、第1のサブキー値のセットを用いて前記情報オブジェクトをインデクス付けするタグ・テーブルを備え、ここで、前記第1のサブキー値のセット内の各サブキー値が、対応するキー値の一部であり、ディレクトリ・テーブルが、前記タグ・テーブル内の前記第1のサブキー値のセットへインデクス付けされると共にデータ・ストレージ・エリアへの参照を有する複数のブロックを備え、前記方法が、
(A)要求された情報オブジェクトを識別する名前及びその他の所定情報を含むリクエストを受け取るステップと、
(B)前記要求された情報オブジェクトのために、前記名前に所定のハッシュ関数を適用することにより、複数のサブキーを備えた固定サイズのキー値を計算するステップであって、前記複数のサブキーにおける各サブキーが、前記固定サイズのキー値の一部であるものと、
(C)前記タグ・テーブル及び前記複数のサブキーをルックアップキーとして用いて、ディレクトリ・テーブル内の前記要求された情報オブジェクトの一致ブロックをルックアップするステップと、
(D)前記ディレクトリ・テーブル内の前記一致ブロックに含まれる参照を用いて、前記データ・ストレージ・エリアから前記要求された情報オブジェクトのコピーを取り出すステップと、を備える。 - 請求項12に記載のコンピュータ読み取り可能な記録媒体において、更に、
前記その他の所定情報に基づいて、前記要求された情報オブジェクトの複数のバージョンの前記キャッシュ内のリストから、前記要求された情報オブジェクトのバージョンを選択するステップと、
前記選択されたバージョンに関連付けられて前記リストに格納された前記サブキーからなるオブジェクトキーに基づいて、前記キャッシュ内の前記要求された情報オブジェクトの格納場所を特定するステップと、
前記格納場所から前記要求された情報オブジェクトを取り出すステップと、
前記要求された情報オブジェクトを前記クライアントへ配信するステップと、
を前記1又は複数のプロセッサに実行させるためのプログラムを記録した記録媒体。 - 請求項12に記載のコンピュータ読み取り可能な記録媒体において、更に、前記情報オブジェクトを、大容量ストレージ・デバイスに連続的にストアするステップを前記1又は複数のプロセッサに実行させるためのプログラムを記録した記録媒体。
- 請求項14に記載のコンピュータ読み取り可能な記録媒体において、更に、前記各情報オブジェクトを、前記大容量ストレージ・デバイスの連続したプールにストアするステップを前記1又は複数のプロセッサに実行させるためのプログラムを記録した記録媒体。
- 請求項15に記載のコンピュータ読み取り可能な記録媒体において、更に、前記各情報オブジェクトを、前記連続したプールにおける複数のアリーナの1つにストアするステップを前記1又は複数のプロセッサに実行させるためのプログラムを記録した記録媒体。
- 請求項16に記載のコンピュータ読み取り可能な記録媒体において、更に、前記各情報オブジェクトを、前記複数のアリーナから割り当てられた1又は複数のフラグメントにストアするステップを前記1又は複数のプロセッサに実行させるためのプログラムを記録した記録媒体。
- 情報オブジェクトを備えた前記フラグメントが、前のフラグメントキーからリンクされている請求項17に記載のコンピュータ読み取り可能な記録媒体。
- 請求項13に記載のコンピュータ読み取り可能な記録媒体において、更に、
前記要求された情報オブジェクトの前記複数のバージョンのそれぞれに連続して前記リストをストアするステップと、
前記各ブロックにおいて、前記要求された情報オブジェクトのサイズ値をそのブロックに関連付けてストアするステップであって、前記サイズ値が前記リスト及び前記情報オブジェクトの前記複数のバージョンの格納サイズを示すものと、
を備え、ステップ(D)において、前記リスト及び前記複数のバージョンを同時に読み出すステップを前記1又は複数のプロセッサに実行させるためのプログラムを記録した記録媒体。 - 請求項16に記載のコンピュータ読み取り可能な記録媒体において、更に、書き込み集成バッファに異なる速度のストリーミング・データ転送を統合するステップを前記1又は複数のプロセッサに実行させるためのプログラムを記録した記録媒体。
- 請求項14に記載のコンピュータ読み取り可能な記録媒体において、前記情報オブジェクトをストアするステップは、別の情報オブジェクトに関してステップ(A)〜(D)を実行するのと並行して、前記情報オブジェクトを、前記大容量ストレージ・デバイスの連続した使用可能なストレージ空間内に書き込むステップを前記1又は複数のプロセッサに実行させるためのプログラムを記録した記録媒体。
- 請求項11に記載の方法において、キャッシュ・ヒットを判断する前記ステップが、更に、前記第1のサブキーが前記第2のサブキーにインデックス化されているか否かを判断するステップを含む方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/060,866 | 1998-04-15 | ||
US09/060,866 US6128623A (en) | 1998-04-15 | 1998-04-15 | High performance object cache |
PCT/US1999/008281 WO1999053422A1 (en) | 1998-04-15 | 1999-04-15 | High performance object cache |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002511616A JP2002511616A (ja) | 2002-04-16 |
JP4489292B2 true JP4489292B2 (ja) | 2010-06-23 |
Family
ID=22032231
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000543914A Expired - Lifetime JP4489292B2 (ja) | 1998-04-15 | 1999-04-15 | 高性能オブジェクト・キャッシュ |
Country Status (6)
Country | Link |
---|---|
US (2) | US6128623A (ja) |
EP (1) | EP1072004B1 (ja) |
JP (1) | JP4489292B2 (ja) |
AU (1) | AU754816B2 (ja) |
DE (1) | DE69915462T2 (ja) |
WO (1) | WO1999053422A1 (ja) |
Families Citing this family (366)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6031995A (en) * | 1996-11-06 | 2000-02-29 | George; A. Chacko | Object-oriented sequencing using hierarchical configuration streams |
US6760746B1 (en) | 1999-09-01 | 2004-07-06 | Eric Schneider | Method, product, and apparatus for processing a data request |
US6915307B1 (en) * | 1998-04-15 | 2005-07-05 | Inktomi Corporation | High performance object cache |
US6128623A (en) * | 1998-04-15 | 2000-10-03 | Inktomi Corporation | High performance object cache |
US6289358B1 (en) * | 1998-04-15 | 2001-09-11 | Inktomi Corporation | Delivering alternate versions of objects from an object cache |
US6389460B1 (en) * | 1998-05-13 | 2002-05-14 | Compaq Computer Corporation | Method and apparatus for efficient storage and retrieval of objects in and from an object storage device |
US6591305B2 (en) * | 1998-06-30 | 2003-07-08 | Sun Microsystems, Inc. | Method and system for delivering data from a server object to a client object using a non-proprietary data transfer protocol |
US6308214B1 (en) * | 1998-09-23 | 2001-10-23 | Inktomi Corporation | Self-tuning dataflow I/O core |
US6957436B1 (en) * | 1999-01-29 | 2005-10-18 | Iona Technologies, Plc | Method and system for multi-threaded object loading and unloading |
US6907609B1 (en) * | 1999-02-01 | 2005-06-14 | Iona Technologies Plc. | Object request dispatch using matching of a segmented object key |
US6453321B1 (en) * | 1999-02-11 | 2002-09-17 | Ibm Corporation | Structured cache for persistent objects |
US6338082B1 (en) | 1999-03-22 | 2002-01-08 | Eric Schneider | Method, product, and apparatus for requesting a network resource |
US7188138B1 (en) | 1999-03-22 | 2007-03-06 | Eric Schneider | Method, product, and apparatus for resource identifier registration and aftermarket services |
US8037168B2 (en) | 1999-07-15 | 2011-10-11 | Esdr Network Solutions Llc | Method, product, and apparatus for enhancing resolution services, registration services, and search services |
USRE43690E1 (en) | 1999-03-22 | 2012-09-25 | Esdr Network Solutions Llc | Search engine request method, product, and apparatus |
US9141717B2 (en) | 1999-03-22 | 2015-09-22 | Esdr Network Solutions Llc | Methods, systems, products, and devices for processing DNS friendly identifiers |
US6701415B1 (en) * | 1999-03-31 | 2004-03-02 | America Online, Inc. | Selecting a cache for a request for information |
US6542967B1 (en) * | 1999-04-12 | 2003-04-01 | Novell, Inc. | Cache object store |
US6240313B1 (en) * | 1999-04-19 | 2001-05-29 | Cardiac Pacemakers, Inc. | Cardiac rhythm management system with prevention of double counting of events |
US7313581B1 (en) * | 1999-04-29 | 2007-12-25 | International Business Machines Corporation | Method for deferred deletion of entries for a directory service backing store |
US6745368B1 (en) | 1999-06-11 | 2004-06-01 | Liberate Technologies | Methods, apparatus, and systems for storing, retrieving and playing multimedia data |
US6973505B1 (en) * | 1999-09-01 | 2005-12-06 | Eric Schneider | Network resource access method, product, and apparatus |
USRE44207E1 (en) | 1999-09-01 | 2013-05-07 | Esdr Network Solutions Llc | Network resource access method, product, and apparatus |
US6721780B1 (en) * | 1999-11-09 | 2004-04-13 | Fireclick, Inc. | Predictive pre-download of network objects |
US6553461B1 (en) * | 1999-12-10 | 2003-04-22 | Sun Microsystems, Inc. | Client controlled pre-fetching of resources |
US7243136B2 (en) * | 2000-01-18 | 2007-07-10 | Inktomi Corporation | Approach for managing and providing content to users |
US6820133B1 (en) * | 2000-02-07 | 2004-11-16 | Netli, Inc. | System and method for high-performance delivery of web content using high-performance communications protocol between the first and second specialized intermediate nodes to optimize a measure of communications performance between the source and the destination |
JP2001243079A (ja) * | 2000-03-02 | 2001-09-07 | Omron Corp | 情報処理システム |
US7988559B2 (en) | 2001-03-08 | 2011-08-02 | Igt | Computerized gaming system, method and apparatus |
US7043641B1 (en) | 2000-03-08 | 2006-05-09 | Igt | Encryption in a secure computerized gaming system |
US6711595B1 (en) * | 2000-05-09 | 2004-03-23 | Openwave Systems Inc. | Method and apparatus for sharing standard template library objects among processes |
US7013340B1 (en) | 2000-05-18 | 2006-03-14 | Microsoft Corporation | Postback input handling by server-side control objects |
US6876997B1 (en) | 2000-05-22 | 2005-04-05 | Overture Services, Inc. | Method and apparatus for indentifying related searches in a database search system |
US20020032691A1 (en) * | 2000-05-26 | 2002-03-14 | Infolibria, Inc. | High performance efficient subsystem for data object storage |
US7673229B1 (en) | 2000-06-07 | 2010-03-02 | Ebay Inc. | Apparatus and method for generating sub-codes to a turbo-encoder |
EP1295293A2 (en) * | 2000-06-09 | 2003-03-26 | Koninklijke Philips Electronics N.V. | Method of implicit partitioning the storage space available on a storage medium |
US7951002B1 (en) | 2000-06-16 | 2011-05-31 | Igt | Using a gaming machine as a server |
JP2002002140A (ja) * | 2000-06-22 | 2002-01-08 | Riso Kagaku Corp | 微多孔性孔版原紙およびその利用 |
US6941351B2 (en) | 2000-07-11 | 2005-09-06 | Microsoft Corporation | Application program caching |
US7603407B2 (en) * | 2000-08-17 | 2009-10-13 | Sun Microsystems, Inc. | Method and system for registering binary data |
US6694338B1 (en) * | 2000-08-29 | 2004-02-17 | Contivo, Inc. | Virtual aggregate fields |
US20020059499A1 (en) * | 2000-09-06 | 2002-05-16 | Hudson Michael D. | System and methods for performing last-element streaming |
US20020059440A1 (en) * | 2000-09-06 | 2002-05-16 | Hudson Michael D. | Client-side last-element cache network architecture |
US6928466B1 (en) * | 2000-09-28 | 2005-08-09 | Emc Corporation | Method and system for identifying memory component identifiers associated with data |
US6625591B1 (en) * | 2000-09-29 | 2003-09-23 | Emc Corporation | Very efficient in-memory representation of large file system directories |
US7111141B2 (en) * | 2000-10-17 | 2006-09-19 | Igt | Dynamic NV-RAM |
US6804763B1 (en) | 2000-10-17 | 2004-10-12 | Igt | High performance battery backed ram interface |
US20020087798A1 (en) * | 2000-11-15 | 2002-07-04 | Vijayakumar Perincherry | System and method for adaptive data caching |
US6751636B1 (en) * | 2000-12-05 | 2004-06-15 | Silicon Graphics, Inc. | System and method for maintaining and recovering data consistency across multiple instances of a database |
US6993523B1 (en) | 2000-12-05 | 2006-01-31 | Silicon Graphics, Inc. | System and method for maintaining and recovering data consistency in a data base page |
US6721739B1 (en) | 2000-12-05 | 2004-04-13 | Silicon Graphics, Inc. | System and method for maintaining and recovering data consistency across multiple pages |
US8550922B2 (en) * | 2006-03-03 | 2013-10-08 | Igt | Game removal with game history |
US7972214B2 (en) | 2000-12-07 | 2011-07-05 | Igt | Methods and devices for downloading games of chance |
US7515718B2 (en) * | 2000-12-07 | 2009-04-07 | Igt | Secured virtual network in a gaming environment |
US7168089B2 (en) * | 2000-12-07 | 2007-01-23 | Igt | Secured virtual network in a gaming environment |
US7127069B2 (en) * | 2000-12-07 | 2006-10-24 | Igt | Secured virtual network in a gaming environment |
US20070136817A1 (en) * | 2000-12-07 | 2007-06-14 | Igt | Wager game license management in a peer gaming network |
US7730213B2 (en) * | 2000-12-18 | 2010-06-01 | Oracle America, Inc. | Object-based storage device with improved reliability and fast crash recovery |
US6931450B2 (en) | 2000-12-18 | 2005-08-16 | Sun Microsystems, Inc. | Direct access from client to storage device |
US6745285B2 (en) * | 2000-12-18 | 2004-06-01 | Sun Microsystems, Inc. | System and method for synchronizing mirrored and striped disk writes |
US6990493B1 (en) * | 2000-12-22 | 2006-01-24 | Emc Corporation | File access system |
US7269784B1 (en) * | 2001-01-22 | 2007-09-11 | Kasriel Stephane | Server-originated differential caching |
US7921033B2 (en) * | 2001-01-29 | 2011-04-05 | Microsoft Corporation | System and method for high-density interactive voting using a computer network |
US6721850B2 (en) | 2001-02-27 | 2004-04-13 | Lucent Technologies Inc. | Method of cache replacement for streaming media |
JP2004532448A (ja) * | 2001-02-27 | 2004-10-21 | ビザ・インターナショナル・サービス・アソシエーション | 分散化された量子暗号化されたパターン生成およびスコアリング |
US7380250B2 (en) | 2001-03-16 | 2008-05-27 | Microsoft Corporation | Method and system for interacting with devices having different capabilities |
US6754799B2 (en) * | 2001-05-16 | 2004-06-22 | Microsoft Corporation | System and method for indexing and retrieving cached objects |
US7269608B2 (en) * | 2001-05-30 | 2007-09-11 | Sun Microsystems, Inc. | Apparatus and methods for caching objects using main memory and persistent memory |
US20020184612A1 (en) * | 2001-06-01 | 2002-12-05 | Hunt Joseph R. | Runtime configurable caching for component factories |
US7493397B1 (en) | 2001-06-06 | 2009-02-17 | Microsoft Corporation | Providing remote processing services over a distributed communications network |
US6915454B1 (en) | 2001-06-12 | 2005-07-05 | Microsoft Corporation | Web controls validation |
WO2002102484A1 (en) | 2001-06-15 | 2002-12-27 | Walker Digital, Llc | Method and apparatus for planning and customizing a gaming experience |
US7185063B1 (en) | 2001-06-22 | 2007-02-27 | Digital River, Inc. | Content delivery network using differential caching |
US6880154B2 (en) * | 2001-06-29 | 2005-04-12 | Intel Corporation | Alias-free test for dynamic array structures |
US6877066B2 (en) * | 2001-06-29 | 2005-04-05 | International Business Machines Corporation | Method and system for adaptive caching in a network management framework using skeleton caches |
US6854033B2 (en) * | 2001-06-29 | 2005-02-08 | Intel Corporation | Using linked list for caches with variable length data |
WO2003005203A2 (en) * | 2001-07-03 | 2003-01-16 | Research In Motion Limited | System and method of object-oriented persistence |
US7594001B1 (en) * | 2001-07-06 | 2009-09-22 | Microsoft Corporation | Partial page output caching |
US7761497B1 (en) * | 2001-07-13 | 2010-07-20 | Vignette Software, LLC | Storage medium having a manageable file directory structure |
US6714934B1 (en) | 2001-07-31 | 2004-03-30 | Logika Corporation | Method and system for creating vertical search engines |
US7162036B2 (en) * | 2001-08-06 | 2007-01-09 | Igt | Digital identification of unique game characteristics |
US7092997B1 (en) | 2001-08-06 | 2006-08-15 | Digital River, Inc. | Template identification with differential caching |
US7188214B1 (en) | 2001-08-07 | 2007-03-06 | Digital River, Inc. | Efficient compression using differential caching |
US6685567B2 (en) * | 2001-08-08 | 2004-02-03 | Igt | Process verification |
DK1417800T3 (en) * | 2001-08-15 | 2018-01-15 | Bentley Sys Inc | PROCEDURE AND SYSTEM FOR STORING LARGE DATA FILES |
US7428548B2 (en) | 2001-08-15 | 2008-09-23 | Bentley Systems, Inc. | Computer readable medium for storing large data files |
US6890259B2 (en) | 2001-09-10 | 2005-05-10 | Igt | Modular tilt handling system |
US8708828B2 (en) | 2001-09-28 | 2014-04-29 | Igt | Pluggable modular gaming modifiers and configuration templates for gaming environments |
US6902481B2 (en) * | 2001-09-28 | 2005-06-07 | Igt | Decoupling of the graphical presentation of a game from the presentation logic |
US7269663B2 (en) * | 2001-09-28 | 2007-09-11 | Intel Corporation | Tagging packets with a lookup key to facilitate usage of a unified packet forwarding cache |
US7931533B2 (en) * | 2001-09-28 | 2011-04-26 | Igt | Game development architecture that decouples the game logic from the graphics logics |
TW512268B (en) * | 2001-11-05 | 2002-12-01 | Ind Tech Res Inst | Single-layered consistent data cache dynamic accessing method and system |
US6829679B2 (en) * | 2001-11-09 | 2004-12-07 | International Business Machines Corporation | Different caching treatment of memory contents based on memory region |
US6754800B2 (en) * | 2001-11-14 | 2004-06-22 | Sun Microsystems, Inc. | Methods and apparatus for implementing host-based object storage schemes |
US7428725B2 (en) | 2001-11-20 | 2008-09-23 | Microsoft Corporation | Inserting devices specific content |
US7588535B2 (en) * | 2001-12-11 | 2009-09-15 | C2Cure Inc. | Apparatus, method and system for intravascular photographic imaging |
US20030115421A1 (en) * | 2001-12-13 | 2003-06-19 | Mchenry Stephen T. | Centralized bounded domain caching control system for network edge servers |
US7565402B2 (en) | 2002-01-05 | 2009-07-21 | Eric Schneider | Sitemap access method, product, and apparatus |
US7316616B2 (en) * | 2002-01-16 | 2008-01-08 | Igt | Gaming system license management |
US9167036B2 (en) * | 2002-02-14 | 2015-10-20 | Level 3 Communications, Llc | Managed object replication and delivery |
US7296051B1 (en) | 2002-02-19 | 2007-11-13 | Digital River, Inc. | Predictive predownload of templates with delta encoding |
US7487261B1 (en) | 2002-02-22 | 2009-02-03 | Digital River, Inc. | Delta caching service |
US6997803B2 (en) | 2002-03-12 | 2006-02-14 | Igt | Virtual gaming peripherals for a gaming machine |
US8360838B2 (en) * | 2006-07-03 | 2013-01-29 | Igt | Detecting and preventing bots and cheating in online gaming |
US8597116B2 (en) | 2002-03-12 | 2013-12-03 | Igt | Virtual player tracking and related services |
US7707287B2 (en) * | 2002-03-22 | 2010-04-27 | F5 Networks, Inc. | Virtual host acceleration system |
US7680875B1 (en) | 2002-04-01 | 2010-03-16 | Novell, Inc. | Markers for cached objects |
US6950838B2 (en) * | 2002-04-17 | 2005-09-27 | Sun Microsystems, Inc. | Locating references and roots for in-cache garbage collection |
EP1502196A4 (en) * | 2002-05-02 | 2008-04-02 | Sarvega Inc | SYSTEM AND METHOD FOR TRANSFORMING XML DOCUMENTS USING STYLE SHEETS |
US7676579B2 (en) * | 2002-05-13 | 2010-03-09 | Sony Computer Entertainment America Inc. | Peer to peer network communication |
US7243141B2 (en) * | 2002-05-13 | 2007-07-10 | Sony Computer Entertainment America, Inc. | Network configuration evaluation |
TWI240179B (en) * | 2002-06-06 | 2005-09-21 | Taiwan Semiconductor Mfg | Parsing method for recipe data |
US7918730B2 (en) | 2002-06-27 | 2011-04-05 | Igt | Trajectory-based 3-D games of chance for video gaming machines |
US8060626B2 (en) | 2008-09-22 | 2011-11-15 | Sony Computer Entertainment America Llc. | Method for host selection based on discovered NAT type |
US8224985B2 (en) | 2005-10-04 | 2012-07-17 | Sony Computer Entertainment Inc. | Peer-to-peer communication traversing symmetric network address translators |
US8083585B2 (en) | 2002-09-10 | 2011-12-27 | Igt | Apparatus and method for copying gaming machine configuration settings |
US7552223B1 (en) * | 2002-09-16 | 2009-06-23 | Netapp, Inc. | Apparatus and method for data consistency in a proxy cache |
US7287046B2 (en) * | 2002-09-30 | 2007-10-23 | Emc Corporation | Method and system of compacting sparse directories in a file system |
US7574653B2 (en) | 2002-10-11 | 2009-08-11 | Microsoft Corporation | Adaptive image formatting control |
AU2002952274A0 (en) * | 2002-10-24 | 2002-11-07 | Ideadata Pty Ltd | A computing device and method for recording data exchanged between electronic devices |
US7162582B2 (en) * | 2002-11-18 | 2007-01-09 | Aristos Logic Corporation | Caching in a virtualization system |
US20040106452A1 (en) * | 2002-12-02 | 2004-06-03 | Igt | Hosted game development environment |
US7093099B2 (en) * | 2002-12-12 | 2006-08-15 | Alacritech, Inc. | Native lookup instruction for file-access processor searching a three-level lookup cache for variable-length keys |
GB0229892D0 (en) * | 2002-12-21 | 2003-01-29 | Ibm | Method and apparatus for caching documents |
US20040128329A1 (en) * | 2002-12-31 | 2004-07-01 | International Business Machines Corporation | Parallel incremental compaction |
US7080060B2 (en) * | 2003-01-08 | 2006-07-18 | Sbc Properties, L.P. | System and method for intelligent data caching |
US7827282B2 (en) * | 2003-01-08 | 2010-11-02 | At&T Intellectual Property I, L.P. | System and method for processing hardware or service usage data |
US7797626B2 (en) * | 2003-02-12 | 2010-09-14 | Sap Ag | Managing different representations of information |
US20040167977A1 (en) * | 2003-02-25 | 2004-08-26 | Douglas Christopher Paul | Method and system for monitoring streaming media flow |
US7975043B2 (en) | 2003-02-25 | 2011-07-05 | Hewlett-Packard Development Company, L.P. | Method and apparatus for monitoring a network |
US20040167981A1 (en) * | 2003-02-25 | 2004-08-26 | Douglas Christopher Paul | Method and system for monitoring relationships between content devices in a content delivery network |
US7823077B2 (en) | 2003-03-24 | 2010-10-26 | Microsoft Corporation | System and method for user modification of metadata in a shell browser |
US7712034B2 (en) | 2003-03-24 | 2010-05-04 | Microsoft Corporation | System and method for shell browser |
US7627552B2 (en) | 2003-03-27 | 2009-12-01 | Microsoft Corporation | System and method for filtering and organizing items based on common elements |
US7409644B2 (en) | 2003-05-16 | 2008-08-05 | Microsoft Corporation | File system shell |
US7769794B2 (en) | 2003-03-24 | 2010-08-03 | Microsoft Corporation | User interface for a file system shell |
US7240292B2 (en) | 2003-04-17 | 2007-07-03 | Microsoft Corporation | Virtual address bar user interface control |
US7421438B2 (en) | 2004-04-29 | 2008-09-02 | Microsoft Corporation | Metadata editing control |
US7890960B2 (en) | 2003-03-26 | 2011-02-15 | Microsoft Corporation | Extensible user context system for delivery of notifications |
US7827561B2 (en) | 2003-03-26 | 2010-11-02 | Microsoft Corporation | System and method for public consumption of communication events between arbitrary processes |
US7587411B2 (en) | 2003-03-27 | 2009-09-08 | Microsoft Corporation | System and method for filtering and organizing items based on common elements |
US7499925B2 (en) | 2003-03-27 | 2009-03-03 | Microsoft Corporation | File system for displaying items of different types and from different physical locations |
US7536386B2 (en) * | 2003-03-27 | 2009-05-19 | Microsoft Corporation | System and method for sharing items in a computer system |
US7925682B2 (en) | 2003-03-27 | 2011-04-12 | Microsoft Corporation | System and method utilizing virtual folders |
US7526483B2 (en) | 2003-03-27 | 2009-04-28 | Microsoft Corporation | System and method for virtual folder sharing including utilization of static and dynamic lists |
US7650575B2 (en) | 2003-03-27 | 2010-01-19 | Microsoft Corporation | Rich drag drop user interface |
US7430570B1 (en) | 2003-04-28 | 2008-09-30 | Ibrix, Inc. | Shadow directory structure in a distributed segmented file system |
US7359395B2 (en) * | 2003-06-16 | 2008-04-15 | Packeteer, Inc. | Pre-fetch communication systems and methods |
US7617203B2 (en) * | 2003-08-01 | 2009-11-10 | Yahoo! Inc | Listings optimization using a plurality of data sources |
US7426525B2 (en) * | 2003-08-08 | 2008-09-16 | Hewlett-Packard Development Company, L.P. | Method and apparatus for identifying an object using an object description language |
JPWO2005033952A1 (ja) * | 2003-09-30 | 2006-12-14 | ソニー株式会社 | 情報再生装置および方法、並びにプログラム |
US7877390B2 (en) * | 2003-10-20 | 2011-01-25 | International Business Machines Corporation | Systems and methods for providing autonomous persistent storage systems |
US8512144B2 (en) | 2003-10-20 | 2013-08-20 | Tipping Point Group, Llc | Method and apparatus for providing secondary gaming machine functionality |
US9564004B2 (en) | 2003-10-20 | 2017-02-07 | Igt | Closed-loop system for providing additional event participation to electronic video game customers |
US8024335B2 (en) | 2004-05-03 | 2011-09-20 | Microsoft Corporation | System and method for dynamically generating a selectable search extension |
US7181463B2 (en) * | 2003-10-24 | 2007-02-20 | Microsoft Corporation | System and method for managing data using static lists |
US7171540B1 (en) * | 2003-10-31 | 2007-01-30 | Sun Microsystems, Inc. | Object-addressed memory hierarchy that facilitates accessing objects stored outside of main memory |
US7076608B2 (en) * | 2003-12-02 | 2006-07-11 | Oracle International Corp. | Invalidating cached data using secondary keys |
US7826600B2 (en) * | 2003-12-22 | 2010-11-02 | International Business Machines Corporation | Method and procedure for compiling and caching VoiceXML documents in a voice XML interpreter |
US7418464B2 (en) * | 2004-01-27 | 2008-08-26 | International Business Machines Corporation | Method, system, and program for storing data for retrieval and transfer |
WO2005089061A2 (en) * | 2004-03-23 | 2005-09-29 | Nds Limited | Optimally adapting multimedia content for mobile subscriber device playback |
US9092558B2 (en) * | 2004-04-05 | 2015-07-28 | International Business Machines Corporation | Grouping frequently referenced data items to co-locate for cache utilization |
US7657846B2 (en) | 2004-04-23 | 2010-02-02 | Microsoft Corporation | System and method for displaying stack icons |
US7694236B2 (en) | 2004-04-23 | 2010-04-06 | Microsoft Corporation | Stack icons representing multiple objects |
US7992103B2 (en) | 2004-04-26 | 2011-08-02 | Microsoft Corporation | Scaling icons for representing files |
US8707209B2 (en) | 2004-04-29 | 2014-04-22 | Microsoft Corporation | Save preview representation of files being created |
US7496583B2 (en) * | 2004-04-30 | 2009-02-24 | Microsoft Corporation | Property tree for metadata navigation and assignment |
US8108430B2 (en) | 2004-04-30 | 2012-01-31 | Microsoft Corporation | Carousel control for metadata navigation and assignment |
US7890604B2 (en) | 2004-05-07 | 2011-02-15 | Microsoft Corproation | Client-side callbacks to server events |
US9026578B2 (en) | 2004-05-14 | 2015-05-05 | Microsoft Corporation | Systems and methods for persisting data between web pages |
US7464386B2 (en) | 2004-05-17 | 2008-12-09 | Microsoft Corporation | Data controls architecture |
US7401102B2 (en) * | 2004-10-19 | 2008-07-15 | International Business Machines Corporation | Management of global counters in transactions |
KR100654447B1 (ko) * | 2004-12-15 | 2006-12-06 | 삼성전자주식회사 | 지역별로 존재하는 컨텐츠를 글로벌로 공유하고 거래하는방법 및 시스템 |
US9613491B2 (en) | 2004-12-16 | 2017-04-04 | Igt | Video gaming device having a system and method for completing wagers and purchases during the cash out process |
JP2006185059A (ja) * | 2004-12-27 | 2006-07-13 | Fujitsu Ltd | コンテンツ管理装置 |
US7383503B2 (en) * | 2005-02-23 | 2008-06-03 | Microsoft Corporation | Filtering a collection of items |
US20070073678A1 (en) * | 2005-09-23 | 2007-03-29 | Applied Linguistics, Llc | Semantic document profiling |
US20060236253A1 (en) * | 2005-04-15 | 2006-10-19 | Microsoft Corporation | Dialog user interfaces for related tasks and programming interface for same |
US8490015B2 (en) | 2005-04-15 | 2013-07-16 | Microsoft Corporation | Task dialog and programming interface for same |
US8522154B2 (en) | 2005-04-22 | 2013-08-27 | Microsoft Corporation | Scenario specialization of file browser |
US8195646B2 (en) | 2005-04-22 | 2012-06-05 | Microsoft Corporation | Systems, methods, and user interfaces for storing, searching, navigating, and retrieving electronic information |
US20060252542A1 (en) * | 2005-05-03 | 2006-11-09 | Mark Nicely | Device and method for a dynamically configurable user interface in a game of chance |
US7752625B2 (en) * | 2005-06-17 | 2010-07-06 | International Business Machines Corporation | Caching resources requested by applications |
US7966292B1 (en) | 2005-06-30 | 2011-06-21 | Emc Corporation | Index processing |
US8156079B1 (en) | 2005-06-30 | 2012-04-10 | Emc Corporation | System and method for index processing |
US8161005B1 (en) | 2005-06-30 | 2012-04-17 | Emc Corporation | Efficient index processing |
US7665028B2 (en) | 2005-07-13 | 2010-02-16 | Microsoft Corporation | Rich drag drop user interface |
US8287379B2 (en) | 2005-09-12 | 2012-10-16 | Igt | Distributed game services |
US7887420B2 (en) | 2005-09-12 | 2011-02-15 | Igt | Method and system for instant-on game download |
US20070073745A1 (en) * | 2005-09-23 | 2007-03-29 | Applied Linguistics, Llc | Similarity metric for semantic profiling |
US20070094347A1 (en) * | 2005-09-27 | 2007-04-26 | Teamon Systems, Inc. | System for obtaining image using xslt extension and related method |
US20070083599A1 (en) * | 2005-09-27 | 2007-04-12 | Teamon Systems, Inc. | System for transforming application data using xslt extensions to render templates from cache and related methods |
US7698325B1 (en) | 2005-09-30 | 2010-04-13 | Emc Corporation | Index processing for legacy systems |
US7627609B1 (en) | 2005-09-30 | 2009-12-01 | Emc Corporation | Index processing using transformed values |
US7752211B1 (en) * | 2005-09-30 | 2010-07-06 | Emc Corporation | Adaptive index processing |
US20070112812A1 (en) * | 2005-11-09 | 2007-05-17 | Harvey Richard H | System and method for writing data to a directory |
US8321486B2 (en) * | 2005-11-09 | 2012-11-27 | Ca, Inc. | Method and system for configuring a supplemental directory |
US8326899B2 (en) * | 2005-11-09 | 2012-12-04 | Ca, Inc. | Method and system for improving write performance in a supplemental directory |
US20070112791A1 (en) * | 2005-11-09 | 2007-05-17 | Harvey Richard H | Method and system for providing enhanced read performance for a supplemental directory |
US8458176B2 (en) * | 2005-11-09 | 2013-06-04 | Ca, Inc. | Method and system for providing a directory overlay |
US7529780B1 (en) | 2005-12-30 | 2009-05-05 | Google Inc. | Conflict management during data object synchronization between client and server |
US7951008B2 (en) * | 2006-03-03 | 2011-05-31 | Igt | Non-volatile memory management technique implemented in a gaming machine |
US9028329B2 (en) | 2006-04-13 | 2015-05-12 | Igt | Integrating remotely-hosted and locally rendered content on a gaming device |
US8968077B2 (en) | 2006-04-13 | 2015-03-03 | Idt | Methods and systems for interfacing with a third-party application |
US10026255B2 (en) | 2006-04-13 | 2018-07-17 | Igt | Presentation of remotely-hosted and locally rendered content for gaming systems |
US8784196B2 (en) | 2006-04-13 | 2014-07-22 | Igt | Remote content management and resource sharing on a gaming machine and method of implementing same |
US8992304B2 (en) | 2006-04-13 | 2015-03-31 | Igt | Methods and systems for tracking an event of an externally controlled interface |
US8777737B2 (en) * | 2006-04-13 | 2014-07-15 | Igt | Method and apparatus for integrating remotely-hosted and locally rendered content on a gaming device |
US10324735B2 (en) | 2006-05-15 | 2019-06-18 | Avaya Inc. | Method invocation for persistent objects with dynamic multikeys |
US10185579B2 (en) | 2006-05-15 | 2019-01-22 | Avaya Inc. | Dynamic multikeys for persistent objects |
US10289728B2 (en) * | 2006-05-15 | 2019-05-14 | Avaya Inc. | Garbage collection of persistent objects with dynamic multikeys |
US7720892B1 (en) * | 2006-06-30 | 2010-05-18 | Emc Corporation | Bulk updates and tape synchronization |
EP2057821A1 (en) * | 2006-08-29 | 2009-05-13 | Nokia Corporation | Service identification optimization |
US7963839B2 (en) * | 2006-09-19 | 2011-06-21 | Mudalla Technology, Inc. | Regulated gaming exchange |
US9311774B2 (en) | 2006-11-10 | 2016-04-12 | Igt | Gaming machine with externally controlled content display |
US20090156303A1 (en) | 2006-11-10 | 2009-06-18 | Igt | Bonusing Architectures in a Gaming Environment |
US20090024915A1 (en) * | 2007-04-27 | 2009-01-22 | Bea Systems, Inc. | Web based application constructor using objects as pages |
US7995478B2 (en) | 2007-05-30 | 2011-08-09 | Sony Computer Entertainment Inc. | Network communication with path MTU size discovery |
US7933273B2 (en) | 2007-07-27 | 2011-04-26 | Sony Computer Entertainment Inc. | Cooperative NAT behavior discovery |
JP5064134B2 (ja) * | 2007-08-03 | 2012-10-31 | 株式会社日立製作所 | メモリ管理方法およびその方法を用いるコンピュータ |
US7856501B2 (en) | 2007-12-04 | 2010-12-21 | Sony Computer Entertainment Inc. | Network traffic prioritization |
US20090193210A1 (en) * | 2008-01-29 | 2009-07-30 | Hewett Jeffrey R | System for Automatic Legal Discovery Management and Data Collection |
US20090198699A1 (en) * | 2008-01-31 | 2009-08-06 | International Business Machines Corporation | Remote space efficient repository |
CN104123239B (zh) | 2008-01-31 | 2017-07-21 | 甲骨文国际公司 | 用于事务缓存的系统和方法 |
US7856506B2 (en) | 2008-03-05 | 2010-12-21 | Sony Computer Entertainment Inc. | Traversal of symmetric network address translator for multiple simultaneous connections |
EP2274684A4 (en) | 2008-04-04 | 2012-12-05 | Level 3 Communications Llc | HANDLING LONG TAIL CONTENT IN A CONTENT DELIVERY NETWORK (CDN) |
US10924573B2 (en) | 2008-04-04 | 2021-02-16 | Level 3 Communications, Llc | Handling long-tail content in a content delivery network (CDN) |
US9762692B2 (en) | 2008-04-04 | 2017-09-12 | Level 3 Communications, Llc | Handling long-tail content in a content delivery network (CDN) |
US9456054B2 (en) | 2008-05-16 | 2016-09-27 | Palo Alto Research Center Incorporated | Controlling the spread of interests and content in a content centric network |
US8578338B2 (en) * | 2008-06-02 | 2013-11-05 | Igt | Game production and regulatory approval systems |
EP2324440B1 (en) * | 2008-08-07 | 2014-10-08 | Hewlett-Packard Development Company, L.P. | Providing data structures for determining whether keys of an index are present in a storage system |
US9934240B2 (en) * | 2008-09-30 | 2018-04-03 | Google Llc | On demand access to client cached files |
US8620861B1 (en) | 2008-09-30 | 2013-12-31 | Google Inc. | Preserving file metadata during atomic save operations |
US10235832B2 (en) | 2008-10-17 | 2019-03-19 | Igt | Post certification metering for diverse game machines |
US7962502B2 (en) | 2008-11-18 | 2011-06-14 | Yahoo! Inc. | Efficient caching for dynamic webservice queries using cachable fragments |
US8190844B2 (en) * | 2008-12-02 | 2012-05-29 | Lsi Corporation | Efficient alert mechanism for overutilization of storage resources |
US8055841B2 (en) | 2009-02-19 | 2011-11-08 | International Business Machines Corporation | System and method for caching data on a hard disk drive |
JP5174233B2 (ja) * | 2009-02-27 | 2013-04-03 | 富士通株式会社 | 電子署名プログラム、電子署名装置、および電子署名方法 |
US20100228906A1 (en) * | 2009-03-06 | 2010-09-09 | Arunprasad Ramiya Mothilal | Managing Data in a Non-Volatile Memory System |
US9117071B2 (en) | 2009-06-03 | 2015-08-25 | Apple Inc. | Methods and apparatuses for secure compilation |
US8677329B2 (en) * | 2009-06-03 | 2014-03-18 | Apple Inc. | Methods and apparatuses for a compiler server |
US8923293B2 (en) | 2009-10-21 | 2014-12-30 | Palo Alto Research Center Incorporated | Adaptive multi-interface use for content networking |
US8156385B2 (en) * | 2009-10-28 | 2012-04-10 | International Business Machines Corporation | Systems and methods for backward-compatible constant-time exception-protection memory |
US8577936B2 (en) | 2010-11-29 | 2013-11-05 | International Business Machines Corporation | Fixup cache tool for object memory compaction in an information handling system |
US8463765B2 (en) | 2011-04-29 | 2013-06-11 | Zachary C. LESAVICH | Method and system for creating vertical search engines with cloud computing networks |
US9400851B2 (en) * | 2011-06-23 | 2016-07-26 | Incapsula, Inc. | Dynamic content caching |
US9378138B2 (en) | 2011-06-29 | 2016-06-28 | International Business Machines Corporation | Conservative garbage collection and access protection |
US9524609B2 (en) | 2011-09-30 | 2016-12-20 | Igt | Gaming system, gaming device and method for utilizing mobile devices at a gaming establishment |
US9401065B2 (en) | 2011-09-30 | 2016-07-26 | Igt | System and method for remote rendering of content on an electronic gaming machine |
US9251086B2 (en) | 2012-01-24 | 2016-02-02 | SanDisk Technologies, Inc. | Apparatus, system, and method for managing a cache |
US8938428B1 (en) | 2012-04-16 | 2015-01-20 | Emc Corporation | Systems and methods for efficiently locating object names in a large index of records containing object names |
US10019371B2 (en) * | 2012-04-27 | 2018-07-10 | Hewlett Packard Enterprise Development Lp | Data caching using local and remote memory |
US8898376B2 (en) | 2012-06-04 | 2014-11-25 | Fusion-Io, Inc. | Apparatus, system, and method for grouping data stored on an array of solid-state storage elements |
US9229901B1 (en) * | 2012-06-08 | 2016-01-05 | Google Inc. | Single-sided distributed storage system |
US9569356B1 (en) * | 2012-06-15 | 2017-02-14 | Emc Corporation | Methods for updating reference count and shared objects in a concurrent system |
US8909808B2 (en) * | 2012-07-19 | 2014-12-09 | Cisco Technology, Inc. | Redundancy elimination for web caching |
US10528262B1 (en) * | 2012-07-26 | 2020-01-07 | EMC IP Holding Company LLC | Replication-based federation of scalable data across multiple sites |
US9164702B1 (en) * | 2012-09-07 | 2015-10-20 | Google Inc. | Single-sided distributed cache system |
US9129469B2 (en) | 2012-09-11 | 2015-09-08 | Igt | Player driven game download to a gaming machine |
US9213646B1 (en) | 2013-06-20 | 2015-12-15 | Seagate Technology Llc | Cache data value tracking |
US10098051B2 (en) | 2014-01-22 | 2018-10-09 | Cisco Technology, Inc. | Gateways and routing in software-defined manets |
US9954678B2 (en) | 2014-02-06 | 2018-04-24 | Cisco Technology, Inc. | Content-based transport security |
US9836540B2 (en) | 2014-03-04 | 2017-12-05 | Cisco Technology, Inc. | System and method for direct storage access in a content-centric network |
US9626413B2 (en) | 2014-03-10 | 2017-04-18 | Cisco Systems, Inc. | System and method for ranking content popularity in a content-centric network |
US9716622B2 (en) | 2014-04-01 | 2017-07-25 | Cisco Technology, Inc. | System and method for dynamic name configuration in content-centric networks |
US9473576B2 (en) | 2014-04-07 | 2016-10-18 | Palo Alto Research Center Incorporated | Service discovery using collection synchronization with exact names |
US9992281B2 (en) | 2014-05-01 | 2018-06-05 | Cisco Technology, Inc. | Accountable content stores for information centric networks |
US9609014B2 (en) | 2014-05-22 | 2017-03-28 | Cisco Systems, Inc. | Method and apparatus for preventing insertion of malicious content at a named data network router |
US9699198B2 (en) | 2014-07-07 | 2017-07-04 | Cisco Technology, Inc. | System and method for parallel secure content bootstrapping in content-centric networks |
US9430387B2 (en) * | 2014-07-16 | 2016-08-30 | ClearSky Data | Decoupling data and metadata in hierarchical cache system |
US9621354B2 (en) | 2014-07-17 | 2017-04-11 | Cisco Systems, Inc. | Reconstructable content objects |
US9729616B2 (en) | 2014-07-18 | 2017-08-08 | Cisco Technology, Inc. | Reputation-based strategy for forwarding and responding to interests over a content centric network |
US9590887B2 (en) | 2014-07-18 | 2017-03-07 | Cisco Systems, Inc. | Method and system for keeping interest alive in a content centric network |
US9535968B2 (en) * | 2014-07-21 | 2017-01-03 | Palo Alto Research Center Incorporated | System for distributing nameless objects using self-certifying names |
US9882964B2 (en) | 2014-08-08 | 2018-01-30 | Cisco Technology, Inc. | Explicit strategy feedback in name-based forwarding |
US9729662B2 (en) | 2014-08-11 | 2017-08-08 | Cisco Technology, Inc. | Probabilistic lazy-forwarding technique without validation in a content centric network |
US9800637B2 (en) | 2014-08-19 | 2017-10-24 | Cisco Technology, Inc. | System and method for all-in-one content stream in content-centric networks |
US10069933B2 (en) | 2014-10-23 | 2018-09-04 | Cisco Technology, Inc. | System and method for creating virtual interfaces based on network characteristics |
US9710199B2 (en) | 2014-11-07 | 2017-07-18 | International Business Machines Corporation | Non-volatile memory data storage with low read amplification |
US9590948B2 (en) | 2014-12-15 | 2017-03-07 | Cisco Systems, Inc. | CCN routing using hardware-assisted hash tables |
US10237189B2 (en) | 2014-12-16 | 2019-03-19 | Cisco Technology, Inc. | System and method for distance-based interest forwarding |
US10003520B2 (en) | 2014-12-22 | 2018-06-19 | Cisco Technology, Inc. | System and method for efficient name-based content routing using link-state information in information-centric networks |
US10162700B2 (en) | 2014-12-23 | 2018-12-25 | International Business Machines Corporation | Workload-adaptive data packing algorithm |
US9660825B2 (en) | 2014-12-24 | 2017-05-23 | Cisco Technology, Inc. | System and method for multi-source multicasting in content-centric networks |
US9832291B2 (en) | 2015-01-12 | 2017-11-28 | Cisco Technology, Inc. | Auto-configurable transport stack |
US9954795B2 (en) | 2015-01-12 | 2018-04-24 | Cisco Technology, Inc. | Resource allocation using CCN manifests |
US9946743B2 (en) | 2015-01-12 | 2018-04-17 | Cisco Technology, Inc. | Order encoded manifests in a content centric network |
US9916457B2 (en) | 2015-01-12 | 2018-03-13 | Cisco Technology, Inc. | Decoupled name security binding for CCN objects |
US10333840B2 (en) | 2015-02-06 | 2019-06-25 | Cisco Technology, Inc. | System and method for on-demand content exchange with adaptive naming in information-centric networks |
US10075401B2 (en) | 2015-03-18 | 2018-09-11 | Cisco Technology, Inc. | Pending interest table behavior |
US10560543B2 (en) * | 2015-03-26 | 2020-02-11 | Fortinet, Inc. | Rule based cache processing in application delivery controller for load balancing |
US10075402B2 (en) | 2015-06-24 | 2018-09-11 | Cisco Technology, Inc. | Flexible command and control in content centric networks |
US9612754B1 (en) * | 2015-06-29 | 2017-04-04 | EMC IP Holding Company LLC | Data storage system with window allocation using window cache |
US9916735B2 (en) | 2015-07-22 | 2018-03-13 | Igt | Remote gaming cash voucher printing system |
US10701038B2 (en) | 2015-07-27 | 2020-06-30 | Cisco Technology, Inc. | Content negotiation in a content centric network |
US9986034B2 (en) | 2015-08-03 | 2018-05-29 | Cisco Technology, Inc. | Transferring state in content centric network stacks |
US10055930B2 (en) | 2015-08-11 | 2018-08-21 | Igt | Gaming system and method for placing and redeeming sports bets |
US9832123B2 (en) | 2015-09-11 | 2017-11-28 | Cisco Technology, Inc. | Network named fragments in a content centric network |
US10355999B2 (en) | 2015-09-23 | 2019-07-16 | Cisco Technology, Inc. | Flow control with network named fragments |
US10313227B2 (en) | 2015-09-24 | 2019-06-04 | Cisco Technology, Inc. | System and method for eliminating undetected interest looping in information-centric networks |
US9712190B2 (en) | 2015-09-24 | 2017-07-18 | International Business Machines Corporation | Data packing for compression-enabled storage systems |
US9977809B2 (en) | 2015-09-24 | 2018-05-22 | Cisco Technology, Inc. | Information and data framework in a content centric network |
US10440140B2 (en) * | 2015-09-29 | 2019-10-08 | Apple Inc. | Browser cache management |
US10454820B2 (en) | 2015-09-29 | 2019-10-22 | Cisco Technology, Inc. | System and method for stateless information-centric networking |
US10263965B2 (en) | 2015-10-16 | 2019-04-16 | Cisco Technology, Inc. | Encrypted CCNx |
US9870285B2 (en) | 2015-11-18 | 2018-01-16 | International Business Machines Corporation | Selectively de-straddling data pages in non-volatile memory |
US9912776B2 (en) | 2015-12-02 | 2018-03-06 | Cisco Technology, Inc. | Explicit content deletion commands in a content centric network |
US10097346B2 (en) | 2015-12-09 | 2018-10-09 | Cisco Technology, Inc. | Key catalogs in a content centric network |
US10257271B2 (en) | 2016-01-11 | 2019-04-09 | Cisco Technology, Inc. | Chandra-Toueg consensus in a content centric network |
US10305864B2 (en) | 2016-01-25 | 2019-05-28 | Cisco Technology, Inc. | Method and system for interest encryption in a content centric network |
US10043016B2 (en) | 2016-02-29 | 2018-08-07 | Cisco Technology, Inc. | Method and system for name encryption agreement in a content centric network |
JP6638472B2 (ja) | 2016-02-29 | 2020-01-29 | 富士通株式会社 | 中継装置及び中継システム |
DE102016103882A1 (de) * | 2016-03-03 | 2017-09-07 | Cadami Ug (Haftungsbeschränkt) | Zuordnungsverfahren sowie Netzwerk mit einer Zuordnungsvorrichtung |
DE102016108018A1 (de) * | 2016-03-03 | 2017-09-07 | Cadami Ug (Haftungsbeschränkt) | Kennungscodierungseinrichtung und Kennungsdecodierungseinrichtung zur Datenverteilung in Netzwerken sowie derartige Einrichtungen aufweisende Netzwerkelemente |
US10742596B2 (en) | 2016-03-04 | 2020-08-11 | Cisco Technology, Inc. | Method and system for reducing a collision probability of hash-based names using a publisher identifier |
US10003507B2 (en) | 2016-03-04 | 2018-06-19 | Cisco Technology, Inc. | Transport session state protocol |
US10051071B2 (en) | 2016-03-04 | 2018-08-14 | Cisco Technology, Inc. | Method and system for collecting historical network information in a content centric network |
US10264099B2 (en) | 2016-03-07 | 2019-04-16 | Cisco Technology, Inc. | Method and system for content closures in a content centric network |
US10067948B2 (en) | 2016-03-18 | 2018-09-04 | Cisco Technology, Inc. | Data deduping in content centric networking manifests |
US10091330B2 (en) | 2016-03-23 | 2018-10-02 | Cisco Technology, Inc. | Interest scheduling by an information and data framework in a content centric network |
US10320760B2 (en) | 2016-04-01 | 2019-06-11 | Cisco Technology, Inc. | Method and system for mutating and caching content in a content centric network |
US9930146B2 (en) | 2016-04-04 | 2018-03-27 | Cisco Technology, Inc. | System and method for compressing content centric networking messages |
US10425503B2 (en) | 2016-04-07 | 2019-09-24 | Cisco Technology, Inc. | Shared pending interest table in a content centric network |
US10063414B2 (en) | 2016-05-13 | 2018-08-28 | Cisco Technology, Inc. | Updating a transport stack in a content centric network |
US10084764B2 (en) | 2016-05-13 | 2018-09-25 | Cisco Technology, Inc. | System for a secure encryption proxy in a content centric network |
US10103989B2 (en) | 2016-06-13 | 2018-10-16 | Cisco Technology, Inc. | Content object return messages in a content centric network |
US10305865B2 (en) | 2016-06-21 | 2019-05-28 | Cisco Technology, Inc. | Permutation-based content encryption with manifests in a content centric network |
US10148572B2 (en) | 2016-06-27 | 2018-12-04 | Cisco Technology, Inc. | Method and system for interest groups in a content centric network |
US10055351B1 (en) * | 2016-06-29 | 2018-08-21 | EMC IP Holding Company LLC | Low-overhead index for a flash cache |
US10261704B1 (en) | 2016-06-29 | 2019-04-16 | EMC IP Holding Company LLC | Linked lists in flash memory |
US10146438B1 (en) | 2016-06-29 | 2018-12-04 | EMC IP Holding Company LLC | Additive library for data structures in a flash memory |
US10089025B1 (en) | 2016-06-29 | 2018-10-02 | EMC IP Holding Company LLC | Bloom filters in a flash memory |
US10037164B1 (en) | 2016-06-29 | 2018-07-31 | EMC IP Holding Company LLC | Flash interface for processing datasets |
US10331561B1 (en) | 2016-06-29 | 2019-06-25 | Emc Corporation | Systems and methods for rebuilding a cache index |
US10009266B2 (en) | 2016-07-05 | 2018-06-26 | Cisco Technology, Inc. | Method and system for reference counted pending interest tables in a content centric network |
US9992097B2 (en) | 2016-07-11 | 2018-06-05 | Cisco Technology, Inc. | System and method for piggybacking routing information in interests in a content centric network |
US9886449B1 (en) * | 2016-07-22 | 2018-02-06 | Red Hat, Inc. | Delayed allocation for data object creation |
US9588976B1 (en) * | 2016-07-22 | 2017-03-07 | Red Hat, Inc. | Delayed allocation for a direct access non-volatile file system |
US10122624B2 (en) | 2016-07-25 | 2018-11-06 | Cisco Technology, Inc. | System and method for ephemeral entries in a forwarding information base in a content centric network |
US10069729B2 (en) | 2016-08-08 | 2018-09-04 | Cisco Technology, Inc. | System and method for throttling traffic based on a forwarding information base in a content centric network |
US10956412B2 (en) | 2016-08-09 | 2021-03-23 | Cisco Technology, Inc. | Method and system for conjunctive normal form attribute matching in a content centric network |
US10033642B2 (en) | 2016-09-19 | 2018-07-24 | Cisco Technology, Inc. | System and method for making optimal routing decisions based on device-specific parameters in a content centric network |
US10212248B2 (en) | 2016-10-03 | 2019-02-19 | Cisco Technology, Inc. | Cache management on high availability routers in a content centric network |
US10447805B2 (en) | 2016-10-10 | 2019-10-15 | Cisco Technology, Inc. | Distributed consensus in a content centric network |
US10135948B2 (en) | 2016-10-31 | 2018-11-20 | Cisco Technology, Inc. | System and method for process migration in a content centric network |
US10243851B2 (en) | 2016-11-21 | 2019-03-26 | Cisco Technology, Inc. | System and method for forwarder connection information in a content centric network |
US10289315B2 (en) | 2017-03-27 | 2019-05-14 | Western Digital Technologies, Inc. | Managing I/O operations of large data objects in a cache memory device by dividing into chunks |
US20180336128A1 (en) * | 2017-05-22 | 2018-11-22 | Ge Aviation Systems, Llc | Methods, systems, and apparatus for safe memory object access in memory management mechanisms |
US10366011B1 (en) | 2018-05-03 | 2019-07-30 | EMC IP Holding Company LLC | Content-based deduplicated storage having multilevel data cache |
US10705753B2 (en) * | 2018-05-04 | 2020-07-07 | EMC IP Holding Company LLC | Fan-out asynchronous replication logical level caching |
US10860239B2 (en) | 2018-05-04 | 2020-12-08 | EMC IP Holding Company LLC | Fan-out asynchronous replication caching |
US10776269B2 (en) * | 2018-07-24 | 2020-09-15 | International Business Machines Corporation | Two level compute memoing for large scale entity resolution |
CN109033439B (zh) * | 2018-08-15 | 2019-11-19 | 中科驭数(北京)科技有限公司 | 流式数据的处理方法和装置 |
CN110929186B (zh) * | 2018-08-29 | 2022-05-10 | 武汉斗鱼网络科技有限公司 | 一种客户端及信息显示方法、电子设备、介质 |
US11775433B2 (en) | 2019-02-01 | 2023-10-03 | Kinaxis Inc. | Cache management for search optimization |
US11556470B2 (en) | 2021-02-02 | 2023-01-17 | Kinaxis Inc. | Cache management for search optimization |
US10936501B2 (en) | 2019-02-01 | 2021-03-02 | Kinaxis Inc. | Cache management for search optimization |
US11899620B2 (en) | 2019-03-08 | 2024-02-13 | Netapp, Inc. | Metadata attachment to storage objects within object store |
US11144498B2 (en) * | 2019-03-08 | 2021-10-12 | Netapp Inc. | Defragmentation for objects within object store |
US11016943B2 (en) | 2019-03-08 | 2021-05-25 | Netapp, Inc. | Garbage collection for objects within object store |
CN111930708B (zh) * | 2020-07-14 | 2023-07-11 | 上海德拓信息技术股份有限公司 | 基于Ceph对象存储的对象标签的扩展系统及方法 |
US11582025B2 (en) | 2020-09-29 | 2023-02-14 | Amazon Technologies, Inc. | Efficient deduplication using block-based convergent encryption |
US11329803B2 (en) | 2020-09-29 | 2022-05-10 | Amazon Technologies, Inc. | Redundancy controls in convergent encryption using dynamic salt values |
US11341137B1 (en) * | 2020-12-04 | 2022-05-24 | Amadeus S.A.S. | Processing search requests |
US11954022B2 (en) * | 2022-03-02 | 2024-04-09 | International Business Machines Corporation | Throttling host writes in a host buffer to a storage device |
CN116467354B (zh) * | 2023-06-15 | 2023-09-12 | 本原数据(北京)信息技术有限公司 | 数据库的查询方法和装置、计算机设备、存储介质 |
Family Cites Families (47)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS58177383A (ja) * | 1982-04-12 | 1983-10-18 | Hitachi Ltd | エンドレスカウント方法およびその装置 |
US4918646A (en) | 1986-08-28 | 1990-04-17 | Kabushiki Kaisha Toshiba | Information retrieval apparatus |
US4841433A (en) | 1986-11-26 | 1989-06-20 | American Telephone And Telegraph Company, At&T Bell Laboratories | Method and apparatus for accessing data from data attribute tables |
US4853843A (en) | 1987-12-18 | 1989-08-01 | Tektronix, Inc. | System for merging virtual partitions of a distributed database |
US5611049A (en) * | 1992-06-03 | 1997-03-11 | Pitts; William M. | System for accessing distributed data cache channel at each network node to pass requests and data |
US5381539A (en) * | 1992-06-04 | 1995-01-10 | Emc Corporation | System and method for dynamically controlling cache management |
US5649200A (en) | 1993-01-08 | 1997-07-15 | Atria Software, Inc. | Dynamic rule-based version control system |
US5664106A (en) * | 1993-06-04 | 1997-09-02 | Digital Equipment Corporation | Phase-space surface representation of server computer performance in a computer network |
US5542087A (en) * | 1993-10-15 | 1996-07-30 | Hewlett-Packard Company | Linear hashing for distributed records |
US5586264A (en) | 1994-09-08 | 1996-12-17 | Ibm Corporation | Video optimized media streamer with cache management |
US6029195A (en) | 1994-11-29 | 2000-02-22 | Herz; Frederick S. M. | System for customized electronic identification of desirable objects |
JP3865775B2 (ja) | 1995-04-11 | 2007-01-10 | キネテック インコーポレイテッド | データ処理システムにおけるデータの識別 |
US5805809A (en) * | 1995-04-26 | 1998-09-08 | Shiva Corporation | Installable performance accelerator for maintaining a local cache storing data residing on a server computer |
JP2770786B2 (ja) * | 1995-06-05 | 1998-07-02 | 日本電気株式会社 | 構造化データの多重atm/stm変換装置 |
US5748954A (en) * | 1995-06-05 | 1998-05-05 | Carnegie Mellon University | Method for searching a queued and ranked constructed catalog of files stored on a network |
US5872969A (en) * | 1995-06-23 | 1999-02-16 | International Business Machines Corporation | System and method for efficiently synchronizing cache and persistent data in an object oriented transaction processing system |
US6141346A (en) * | 1995-07-19 | 2000-10-31 | Fujitsu Network Communications, Inc. | Point-to-multipoint transmission using subqueues |
US5732267A (en) * | 1995-08-02 | 1998-03-24 | Microsoft Corporation | Caching/prewarming data loaded from CD-ROM |
US5751993A (en) * | 1995-09-05 | 1998-05-12 | Emc Corporation | Cache management system |
US5592432A (en) * | 1995-09-05 | 1997-01-07 | Emc Corp | Cache management system using time stamping for replacement queue |
US5774670A (en) * | 1995-10-06 | 1998-06-30 | Netscape Communications Corporation | Persistent client state in a hypertext transfer protocol based client-server system |
US5701432A (en) * | 1995-10-13 | 1997-12-23 | Sun Microsystems, Inc. | Multi-threaded processing system having a cache that is commonly accessible to each thread |
US5774643A (en) | 1995-10-13 | 1998-06-30 | Digital Equipment Corporation | Enhanced raid write hole protection and recovery |
US5727159A (en) * | 1996-04-10 | 1998-03-10 | Kikinis; Dan | System in which a Proxy-Server translates information received from the Internet into a form/format readily usable by low power portable computers |
US5864852A (en) * | 1996-04-26 | 1999-01-26 | Netscape Communications Corporation | Proxy server caching mechanism that provides a file directory structure and a mapping mechanism within the file directory structure |
US5935207A (en) * | 1996-06-03 | 1999-08-10 | Webtv Networks, Inc. | Method and apparatus for providing remote site administrators with user hits on mirrored web sites |
US5918013A (en) * | 1996-06-03 | 1999-06-29 | Webtv Networks, Inc. | Method of transcoding documents in a network environment using a proxy server |
US6134583A (en) * | 1996-07-01 | 2000-10-17 | Sun Microsystems, Inc. | Method, system, apparatus and article of manufacture for providing identity-based caching services to a plurality of computer systems (#16) |
US5850443A (en) | 1996-08-15 | 1998-12-15 | Entrust Technologies, Ltd. | Key management system for mixed-trust environments |
US5852717A (en) * | 1996-11-20 | 1998-12-22 | Shiva Corporation | Performance optimizations for computer networks utilizing HTTP |
US5909540A (en) | 1996-11-22 | 1999-06-01 | Mangosoft Corporation | System and method for providing highly available data storage using globally addressable memory |
US5974421A (en) * | 1996-12-23 | 1999-10-26 | Microsoft Corporation | Cache-efficient object loader |
US5895488A (en) * | 1997-02-24 | 1999-04-20 | Eccs, Inc. | Cache flushing methods and apparatus |
US5870763A (en) * | 1997-03-10 | 1999-02-09 | Microsoft Corporation | Database computer system with application recovery and dependency handling read cache |
US5924116A (en) * | 1997-04-02 | 1999-07-13 | International Business Machines Corporation | Collaborative caching of a requested object by a lower level node as a function of the caching status of the object at a higher level node |
US5915255A (en) | 1997-04-23 | 1999-06-22 | Sun Microsystems, Inc. | Method and apparatus for referencing nodes using links |
US6038572A (en) | 1997-04-23 | 2000-03-14 | Sun Microsystems, Inc. | Method and apparatus for localizing nodes in a garbage collected carded heap |
US6115782A (en) | 1997-04-23 | 2000-09-05 | Sun Micosystems, Inc. | Method and apparatus for locating nodes in a carded heap using a card marking structure and a node advance value |
US6049810A (en) | 1997-04-23 | 2000-04-11 | Sun Microsystems, Inc. | Method and apparatus for implementing a write barrier of a garbage collected heap |
US5920876A (en) | 1997-04-23 | 1999-07-06 | Sun Microsystems, Inc. | Performing exact garbage collection using bitmaps that identify pointer values within objects |
US6078994A (en) * | 1997-05-30 | 2000-06-20 | Oracle Corporation | System for maintaining a shared cache in a multi-threaded computer environment |
US6026413A (en) | 1997-08-01 | 2000-02-15 | International Business Machines Corporation | Determining how changes to underlying data affect cached objects |
US6000006A (en) * | 1997-08-25 | 1999-12-07 | Bit Microsystems, Inc. | Unified re-map and cache-index table with dual write-counters for wear-leveling of non-volatile flash RAM mass storage |
US5950205A (en) * | 1997-09-25 | 1999-09-07 | Cisco Technology, Inc. | Data transmission over the internet using a cache memory file system |
US5987233A (en) * | 1998-03-16 | 1999-11-16 | Skycache Inc. | Comprehensive global information network broadcasting system and implementation thereof |
US6154769A (en) * | 1998-03-27 | 2000-11-28 | Hewlett-Packard Company | Scheduling server requests to decrease response time and increase server throughput |
US6128623A (en) * | 1998-04-15 | 2000-10-03 | Inktomi Corporation | High performance object cache |
-
1998
- 1998-04-15 US US09/060,866 patent/US6128623A/en not_active Expired - Lifetime
-
1999
- 1999-04-15 JP JP2000543914A patent/JP4489292B2/ja not_active Expired - Lifetime
- 1999-04-15 WO PCT/US1999/008281 patent/WO1999053422A1/en active IP Right Grant
- 1999-04-15 DE DE69915462T patent/DE69915462T2/de not_active Expired - Lifetime
- 1999-04-15 AU AU37475/99A patent/AU754816B2/en not_active Expired
- 1999-04-15 EP EP99919847A patent/EP1072004B1/en not_active Expired - Lifetime
-
2000
- 2000-04-05 US US09/543,238 patent/US6453319B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP1072004A1 (en) | 2001-01-31 |
US6128623A (en) | 2000-10-03 |
DE69915462D1 (de) | 2004-04-15 |
DE69915462T2 (de) | 2005-03-03 |
US6453319B1 (en) | 2002-09-17 |
WO1999053422A1 (en) | 1999-10-21 |
AU3747599A (en) | 1999-11-01 |
EP1072004B1 (en) | 2004-03-10 |
JP2002511616A (ja) | 2002-04-16 |
AU754816B2 (en) | 2002-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4489292B2 (ja) | 高性能オブジェクト・キャッシュ | |
US6128627A (en) | Consistent data storage in an object cache | |
US6289358B1 (en) | Delivering alternate versions of objects from an object cache | |
US6209003B1 (en) | Garbage collection in an object cache | |
US6292880B1 (en) | Alias-free content-indexed object cache | |
US6915307B1 (en) | High performance object cache | |
US7269608B2 (en) | Apparatus and methods for caching objects using main memory and persistent memory | |
US7552223B1 (en) | Apparatus and method for data consistency in a proxy cache | |
US7647417B1 (en) | Object cacheability with ICAP | |
US6754799B2 (en) | System and method for indexing and retrieving cached objects | |
US6675214B2 (en) | Method and apparatus for efficient storage and retrieval of objects in and from an object storage device | |
US9558201B2 (en) | Storage-network de-duplication | |
US6157925A (en) | System and method for caching identification and location information in a computer network | |
EP1540498B1 (en) | Apparatus and method for proxy cache | |
US7373520B1 (en) | Method for computing data signatures | |
US8433735B2 (en) | Scalable system for partitioning and accessing metadata over multiple servers | |
US7284030B2 (en) | Apparatus and method for processing data in a network | |
US7539818B2 (en) | Network object cache engine | |
US5950198A (en) | Processes and apparatuses for generating file correspondency through replication and synchronization between target and source computers | |
US20020032691A1 (en) | High performance efficient subsystem for data object storage | |
WO2001053996A2 (en) | Approach for managing and providing content to users | |
US20030050996A1 (en) | Appartus and method for increased data access in a network file object oriented system | |
US7249219B1 (en) | Method and apparatus to improve buffer cache hit rate | |
US6654856B2 (en) | System and method for managing storage space of a cache | |
US20020184441A1 (en) | Apparatus and methods for caching objects using main memory and persistent memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060201 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20070201 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20070201 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090519 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20090818 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20090825 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20090918 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20090930 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20091019 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20091109 |
|
RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20091109 |
|
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: 20100301 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20100331 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130409 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130409 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140409 Year of fee payment: 4 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |