JP3606542B2 - 基礎データの変更がオブジェクトにどのように影響するかの判定方法およびプログラム記憶装置 - Google Patents
基礎データの変更がオブジェクトにどのように影響するかの判定方法およびプログラム記憶装置 Download PDFInfo
- Publication number
- JP3606542B2 JP3606542B2 JP21284698A JP21284698A JP3606542B2 JP 3606542 B2 JP3606542 B2 JP 3606542B2 JP 21284698 A JP21284698 A JP 21284698A JP 21284698 A JP21284698 A JP 21284698A JP 3606542 B2 JP3606542 B2 JP 3606542B2
- Authority
- JP
- Japan
- Prior art keywords
- cache
- version
- graph
- objects
- data
- 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
- G06F15/00—Digital computers in general; Data processing equipment in general
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- 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
-
- 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/912—Applications of a database
- Y10S707/922—Communications
-
- 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/912—Applications of a database
- Y10S707/951—Calendar or scheduling
-
- 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
- Y10S707/99945—Object-oriented database structure processing
-
- 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/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
- Y10S707/99953—Recoverability
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Description
【発明の属する技術分野】
本発明は、改良されたデータ処理システムに関する。具体的な態様は、ワールド・ワイド・ウェブ、データベースおよびトランザクション処理システムに関する。より具体的な態様は、ワールド・ワイド・ウェブのダイナミック・ドキュメントのキャッシュ記憶に関する。
【0002】
【従来の技術】
ワールド・ワイド・ウェブからダイナミック・ドキュメントを取り出すことのできる速度は、ウェブが情報転送および電子商取引のサポートのためにどれほど有用であるかに関する最も重要な要因の1つである。ウェブ・サーバは、コンテンツをユーザにすばやくサービスすることができなければならない。ウェブ・サーバによって配布されるデータは、次の2つの範疇に分類できる。
(1)静的データ。このデータは、コンピュータに格納されたファイルから取得される。静的データは、比較的すばやくサービスすることができる。単一のRS/6000 590ノードなどのコンピュータ上で走行する高性能ウェブ・サーバは、通常は、毎秒数百ファイルを配布できる。
(2)動的データ。このデータは、要求が行われた時点でプログラムを実行することによって取得される。動的データは、作成が高くつくことがしばしばである。多くの場合に、動的データは、静的データの取得より1桁から2桁高くつく。
【0003】
高い比率の動的データを含むウェブ・サイトの場合、動的データの性能がボトルネックになる可能性がある。高い比率の動的データを含むサイトの例には、LL Bean社のウェブ・サイト(www.llbean.com)などのIBM社のnet.Commerceソフトウェアを使用する電子商取引サイトや、IBM社の1996年オリンピック・ウェブ・サイトが含まれる。
【0004】
動的データのオーバーヘッドを減らす方法の1つが、プログラムによってダイナミック・ページを作成した後に、そのページをキャッシュに格納することである(リュウ(Y.H.Liu)、ダンチッヒ(P.Dantzig)、ウー(C.E.Wu)、チャレンジャ(J.Challenger)、ナイ(L.M.Ni)共著、「A Distributed Web Server and its Performance Analysis on Multiple Platforms」、Proceedings of the International Conference for Distributed Computing Systems、1996年5月を参照されたい)。この方法では、これらのページへのアクセスを必要とする後続の要求で、キャッシュ内のコピーにアクセスすることができる。あるページは、プログラムによって1回計算するだけでよい。複数の要求に応答して同一のページを複数回再計算するためのオーバーヘッドが、削減または除去される。
【0005】
キャッシュ記憶は、すべてのダイナミック・ウェブ・ページに適用できるわけではない。一部のダイナミック・ページは、ページが要求されるたびに必ず発生する状態変化を引き起こす。このようなページは、キャッシュ記憶することができない。
【0006】
【発明が解決しようとする課題】
キャッシュ記憶できるページの場合、1つまたは複数のウェブ・ページの値に影響する可能性がある基礎データに対する変更が発生した時に、キャッシュを更新する方法の必要が残っている。たとえば、ダイナミック・ウェブ・ページは、データベースから構築されることがしばしばである。データベースが変更された時には、データベース変更の結果として古くなったキャッシュ・オブジェクトの判定が、極端に困難になる可能性がある。本発明は、この問題に対する解決を提供する。この解決は非常に一般的であり、基礎データに対する変更がオブジェクトの値にどのように影響するかを知る必要がある他の状況で使用することができる。
【0007】
もう1つの問題は、基礎データのソースとキャッシュが地理的に異なる位置にある時に、1つまたは複数のキャッシュの組を更新された状態に保つ方法である。本発明は、動的データと静的データの両方の代理キャッシュ記憶に関連するこの問題に対する解決を有する。
【0008】
第3の問題は、1つまたは複数のキャッシュに対する更新の組の一貫性を保ち、その結果、すべての更新が同時に行われ、システムによって受け取られる要求が、更新に関して、後に受け取られた要求より後のシステムの状態を見ることがなくなるようにする方法である。本発明は、静的データと動的データの両方の代理キャッシュ記憶に関連する一貫性の問題に対する解決を有する。これは、必ずしもキャッシュを使用しないトランザクション・システムにも関連する。
【0009】
当技術分野には、コンピュータ・プログラムの作成に必要なファイルの間の依存性を管理するためのユーティリティが存在する。たとえば、単一のプログラムが、複数のソース・ファイルおよびオブジェクト・ファイルから構築される場合がある。ソース・ファイル、オブジェクト・ファイルおよび実行可能ファイルの間の依存性を管理するためのツールが開発されてきた。このような依存性を管理するための周知のユーティリティの1つが、Unixのmakeコマンドである(たとえば、IBM AIX Version 4のオンライン・マニュアルを参照されたい)。makeなどのユーティリティでは、ユーザが、メイクファイルと称する特殊なファイルでファイル間の依存性を指定する必要がある。たとえば、次のファイル依存性の指定
foo: foo.h foo.c
cc −o foo foo.c
をメイクファイルに記述して、「foo」が「foo.h」と「foo.c」に依存することを示す。「foo.h」または「foo.c」のいずれかに対する変更があれば、次にコマンド「make foo」が発行された時に、コマンド「cc −o foo foo.c」を使用して、「foo」が再コンパイルされることになる。
【0010】
makeなどのユーティリティは、以下を含む複数の制限を有する。
(1)makeでは、ファイル間の依存性しか指定できない。ファイルとファイル以外のものの間の依存性を指定することはできない。キャッシュに格納できるオブジェクトと、キャッシュ記憶することができないグラフ・オブジェクト(基礎データを含む)との間の依存性を指定できるようにする方法が必要である。(2)makeによるアプローチを使用する場合、ファイルがどれほど古いかに無関係に、古いとわかったファイルは「make」コマンドによって必ずすべてが更新される。古いオブジェクトを必ず更新することを必要としない方法の必要も存在する。たとえば、その結果、ほんのわずかに古いオブジェクトをキャッシュに保持することができる。
(3)makeによるアプローチでは、ファイル・システム内に同時には1つのバージョンのファイルだけが存在することを許可される。同一オブジェクトの複数のバージョンが同一のキャッシュ内に同時に存在することを許容する方法の必要が存在する。
(4)あるオブジェクトがどの程度古いかを判定する、makeなどのツールが提供しない定量的な方法を提供する方法の必要も存在する。
(5)同一オブジェクトの2つのバージョンがどの程度類似しているかを判定する、makeなどのツールが提供しない定量的な方法を提供する方法の必要が存在する。
(6)おそらく古いオブジェクトの一貫性のあるセットを保持する、makeなどのツールが提供しない方法の必要も存在する。
(7)関係データベースの一部とすることのできる関係オブジェクトと称するオブジェクト間の依存性を簡潔に指定するための、makeなどのツールが提供しない方法の必要が存在する。
【0011】
本発明は、これらの必要に対処する。
【0012】
【課題を解決するための手段】
多くの場合に、オブジェクトの値は、基礎データに依存する。本発明は、基礎データに対する変更がオブジェクトの値にどのように影響するかの判定を対象とする。
【0013】
1例として、データベースから動的にページが作成されるウェブ・サイトを検討する。この状況では、ダイナミック・ウェブ・ページはオブジェクトであり、基礎データにデータベースが含まれる。一部の場合には、ウェブ・ページがより単純なウェブ・ページに対する依存性を有し、後者のウェブ・ページがデータベースに対する依存性を有する場合がある。オブジェクトが他のオブジェクトに依存し、そのオブジェクトが他のオブジェクトに依存する、依存性の全体階層を有することが可能である。また、オブジェクトの組のうちのいずれかのオブジェクトに対する変更が、その組の他のすべてのオブジェクトの値に影響する、1組のオブジェクトの間の共同依存性(co−dependency)を有することも可能である。
【0014】
本発明のもう1つの態様は、コンピュータ・システムが、基礎データの変更の後にシステム内の全オブジェクトに更新を伝播できるようにする、オブジェクトと基礎データの間の依存性を指定するための方法を対象とする。この方法には、以下の特徴のうちの1つまたは複数が含まれる。
1.オブジェクトが他のオブジェクトに依存し、そのオブジェクトが他のオブジェクトに依存するなど、階層的な形で依存性を指定することができる。
2.オブジェクトの組が共同依存性を有することができる。たとえば、2つのオブジェクトが、お互いの間で依存性を有することができ、これによって、一方のオブジェクトが変更された時に必ずもう一方のオブジェクトの値が変更されることが示される。
3.オブジェクトが依存する基礎データのいずれかに変更が行われた時に、必ずオブジェクトが更新(または無効化)されることを確実にする方法。
4.あるオブジェクトの旧バージョンが現行バージョンとどれほど異なるかを判定するための定量的な方法。
5.オブジェクトが現行バージョンと十分異なる時に、必ずそのオブジェクトが更新されるか無効化されるようにする方法。これは、常にオブジェクトを現行に保つことに伴うオーバーヘッドが多すぎる時に有用である。
6.オブジェクトの新バージョンは、その値を再計算するたびに作られる。同一オブジェクトの複数バージョンを保持することができる。同一オブジェクトの2つのコピーに対して、以下の判定を行うことができる。
(a)2つのオブジェクトが同一バージョンに対応し、したがって、同一であるかどうか
(b)(a)の結果が否定の場合に、どちらのバージョンがより新しい(すなわち、後で作成された)か
(c)(a)の結果が否定の場合に、オブジェクトの相違の定量的な表示。
7.すべてのオブジェクトが現行であることを必要とせずに、オブジェクトの組の間で一貫性を維持する方法。これは、すべてのオブジェクトが現行であることを必要とすることによって一貫性を維持すると、オーバーヘッドが高くなりすぎる時に有用である。
8.関係オブジェクト間の暗黙のデータ依存性がオブジェクト・マネージャによって自動的に追加される、関係オブジェクトを管理する方法。
【0015】
本発明の応用分野の例には、以下の状況が含まれる。
1.ダイナミック・ウェブ・ページのキャッシュ記憶。
2.クライアント−サーバ・アプリケーション。多くのクライアント−サーバ・アプリケーションでは、サーバが複数のクライアントにオブジェクトを送る。オブジェクトは、常に変化しつつある。オブジェクトが要求された時に応じて、同一オブジェクトの異なるバージョンが異なるクライアントに送られる可能性がある。サーバには、どのバージョンをどのクライアントに送ったかと、そのバージョンがどれほど古いかを記録する方法が必要である。
3.オブジェクトの複数のバージョンを維持し、それらを一意に識別し、それらが古くなりすぎた場合に更新し、同一オブジェクトの2つのバージョンの相違を定量的に評価し、オブジェクトの組の間で一貫性を維持することが必要であるすべての状況。
【0016】
好ましい実施例では、オブジェクト依存性グラフ(G)と称する、オブジェクト間のデータ依存性を表す有向グラフを使用する。オブジェクトo1から別のオブジェクトo2への一辺は、o2がo1に対する依存性を有することを示す。o1に対する更新があれば、o2の現行値も変更される。代替実施例では、辺のそれぞれに、データ依存性の重要さを表す重みと称する負でない数を関連付けることができる。たとえば、大きい数で重要な依存性を表し、小さい数で重要でない依存性を表すことができる。オブジェクトには、threshold_weight(閾重み)と称する値を関連付けることもできる。現行の入方向のデータ依存性に対応する重みの合計がthreshold_weight未満になった時には必ず、そのオブジェクトは非常に古いとみなされる。このようなオブジェクトは、最新のバージョンのオブジェクトを必要とするアプリケーションのために更新しなければならない。各オブジェクトは、object_id(オブジェクトID)フィールドとversion_number(バージョン番号)フィールドを有することが好ましい。object_idフィールドは、アプリケーション・プログラムがオブジェクトの識別に使用するもの(たとえばURL)に対応するが、version_numberフィールドは、同一のobject_idを有する複数のオブジェクトを維持し、一意に識別するのに使用される。
【0017】
具体的に言うと、オブジェクト・マネージャと称するプロセスが、データ依存性情報を維持する。オブジェクトが新規作成されるかデータ依存性が変更された時には、必ず、オブジェクト・マネージャが、適当な情報を更新する責任を負う。オブジェクトが更新された時には、必ず、オブジェクト・マネージャが、オブジェクト依存性グラフの情報を使用して、データ依存性によって必要とされるシステムに対する他の更新を伝播する。
【0018】
各オブジェクトo1も、o1との一貫性を保たなければならないオブジェクトのリストを含む一貫性リストを有することができる。2つのオブジェクトo1およびo2は、
(1)両方のオブジェクトが現行であるか、
(2)過去のある時点tで、両方のオブジェクトが現行であった。
のいずれかの場合に、一貫性を有する。o1に対する更新は、o1の一貫性リストに含まれる他のオブジェクトに対する更新を必要とする可能性がある。
【0019】
関係データベースの関係に類似の関係に属する1つまたは複数のレコードとオブジェクトを関連付けることが可能である。このようなオブジェクトを、関係オブジェクトと称する。本発明は、関係オブジェクト間の依存性を自動的に追加する機能も有する。
【0020】
【発明の実施の形態】
用語集
通常の辞書の意味は本明細書で使用される単語にも適用されるが、以下の用語集は有用であろう。
【0021】
キャッシュとは、記憶区域である。これは、メモリ内、ディスク上、または一部をメモリ内、一部をディスク上とすることができる。キャッシュに対応する物理アドレスまたは仮想アドレスは、固定することができる。その代わりに、時間に伴って変化するアドレスとすることができる。キャッシュの定義には、以下が含まれるが、これに制限されるものではない。
・IBM Internet Connection Serverのプロキシ・キャッシュやNetscape Navigatorのブラウザ・キャッシュなどの、ウェブ・ドキュメント用のキャッシュ
・IBM社のDB2データベースのキャッシュなどのデータベース・キャッシュ
・IBM RS/6000系列のコンピュータのキャッシュなどのプロセッサ・キャッシュ
・少なくとも一部のデータについて、記憶リポジトリ・プログラムがデータが格納される仮想アドレスまたは物理アドレスの明示的な制御を有しない、高水準プログラミング言語で記述されたデータの記憶リポジトリ
【0022】
キャッシュ・ユニオンとは、システム内の全キャッシュの組み合わせである。
【0023】
オブジェクトとは、1つまたは複数のキャッシュに格納できるデータである。
【0024】
複数バージョン・キャッシュとは、同一オブジェクトの複数のバージョンを含むことが許容されるキャッシュである。
【0025】
単一バージョン・キャッシュとは、同一オブジェクトの1つのバージョンだけを含むことができるキャッシュである。
【0026】
現行バージョン・キャッシュとは、すべてのキャッシュ記憶されたオブジェクトのバージョンが現行でなければならない、単一バージョン・キャッシュである。
【0027】
基礎データには、1つまたは複数のオブジェクトの値に影響する可能性があるシステム内のすべてのデータが含まれる。基礎データは、システム内の全オブジェクトのスーパーセットである。
【0028】
複合オブジェクトとは、基礎データに対する1つまたは複数の依存性を有するオブジェクトである。
【0029】
オブジェクト・マネージャとは、基礎データに対する変更がオブジェクトの値にどのように影響するかを判定するプログラムである。
【0030】
グラフG=(V,E)は、有限個の頂点V(ノードとも称する)の空ではない集合と、頂点の対からなる辺Eの組からなる。辺が頂点の順序付きの対(v,w)である場合には、そのグラフは、vが辺の始点、wが辺の終点の有向グラフと呼ばれる。
【0031】
マルチグラフは、グラフに類似している。主な相違は、頂点の対の間に複数の辺が存在できることである。マルチグラフは、グラフのスーパーセットである。
【0032】
重み付きグラフまたは重み付きマルチグラフは、任意選択で、各辺に重みと称する数値を関連付けることができるグラフである。
【0033】
オブジェクト依存性グラフは、有向マルチグラフである。オブジェクト依存性グラフの頂点を、グラフ・オブジェクトと称する。グラフ・オブジェクトは、オブジェクトのスーパーセットであり、グラフ・オブジェクトには下記が含まれる。
(1)オブジェクト
(2)オブジェクトではない基礎データ
(3)仮想オブジェクト
これらのグラフ・オブジェクトは、実際のデータには対応しない。これらは、データ依存性を伝播するための手段として使用される。仮想オブジェクトは、(1)や(2)ほど頻繁には使用されない。
【0034】
グラフ・オブジェクトo1からo2への辺は、o1からo2へのデータ依存性(単に依存性と称する場合もある)を示す。これは、o1に対する変更によってo2も変更される可能性があることを意味する。依存性は、推移的である。したがって、aがbに対するデータ依存性を有し、bがcに対するデータ依存性を有する場合には、aはcに対する依存性を有する。
【0035】
グラフ・オブジェクトは、関係オブジェクト(RO)でもある場合がある。ROは、関係指定子を関連付けられている。ROの例を2つ示す。
1.単一レコード・オブジェクト(SRO) 関係指定子が単一のレコードを表す。
2.複数レコード・オブジェクト(MRO) 関係指定子が複数のレコードを表す。
【0036】
RO r2によって表されるすべてのレコードがRO r1によって表される場合に、RO r2はRO r1に含まれる。
【0037】
ノードvの出隣接リストとは、辺(v,w)がEに含まれるノードwのすべてを含むリストである。
【0038】
ノードvの入隣接リストとは、辺(w,v)がEに含まれるノードwのすべてを含むリストである。
【0039】
葉ノードとは、どの辺の終点でもないノードである。
【0040】
固有葉ノードとは、少なくとも1つの辺の始点である葉ノードである。
【0041】
極大ノードとは、どの辺の始点でもないノードである。
【0042】
固有極大ノードとは、少なくとも1つの辺の終点である極大ノードである。
【0043】
単純依存性グラフとは、各ノードが葉ノードまたは極大ノードである有向グラフである。
【0044】
2つのオブジェクトo1およびo2は、
(1)両方のオブジェクトが現行であるか、
(2)過去の時点tで、両方のオブジェクトが現行であった。
のいずれかの場合に、一貫性を有する。
【0045】
バージョン番号とは、同一オブジェクトの異なるバージョンを一意に識別できるようにするためのデータである。1実施例では、バージョン番号に整数を使用し、新たに作成された現行バージョンに、その前のバージョンのバージョン番号+1のバージョン番号を割り当てる。しかし、他の実施態様も可能であり、バージョン番号が数値である必要もない。たとえば、テキスト文字列を使用してバージョン番号を実施することもできる。
【0046】
オブジェクトの最新バージョンを、現行バージョンと称する。
【0047】
ここで図面を参照すると、図1は、本発明の特徴を有するクライアント−サーバ・アーキテクチャの例を示す図である。図からわかるように、クライアント90は、ネットワーク95を介してサーバ100に要求を通信する。サーバ100は、1つまたは複数のキャッシュ2を維持する。通常通り、サーバ100は、キャッシュ2を使用して、性能を改善し、クライアント90の要求を満足するためのCPU時間を減らす。図1には、単一のサーバに関連するキャッシュ2が示されているが、キャッシュ2は、複数のサーバにまたがって維持することもできる。当業者であれば、クライアント−サーバ・ベースではない他の応用例に本発明を簡単に適合させることができるはずである。
【0048】
サーバ100上で走行するアプリケーション・プログラム97は、オブジェクトを作成し、その後、これらのオブジェクト(たとえば、要求時に状態変化を引き起こさないダイナミック・ページ)を、1つまたは複数のキャッシュ2に格納する。サーバ100は、プロキシ・サーバとすることもでき、この場合、データベース99内の基礎データのソースとキャッシュ2が地理的に分離される。この実施例では、オブジェクトは、1つまたは複数のキャッシュ2に格納できるデータである。オブジェクトは、データベース99に格納された基礎データから構築することができる。基礎データには、キャッシュ2に格納される1つまたは複数のオブジェクトの値に影響する可能性があるシステム内の全データが含まれる。基礎データは、システム内の全オブジェクトのスーパーセットである。複合オブジェクトは、基礎データに対する1つまたは複数の依存性を有するオブジェクトである。
【0049】
また、キャッシュ・ユニオン内のキャッシュ2のすべてが、現行バージョン・キャッシュであるものとする。現行バージョン・キャッシュは、キャッシュ記憶されたオブジェクトのバージョンが現行でなければならない単一バージョン・キャッシュであることと、単一バージョン・キャッシュは、同一オブジェクトの1つのバージョンだけを含むことができるキャッシュであることを想起されたい。
【0050】
本発明によれば、キャッシュ・マネージャ1(オブジェクト・マネージャの1例である)は、基礎データに対する変更がオブジェクトの値にどのように影響するかを判定する。図1には、単一のサーバに常駐するキャッシュ・マネージャ1が示されているが、キャッシュ・マネージャを複数のサーバにまたがって分散することもできる。キャッシュ・マネージャ1は、サーバ100(またはクライアント90)などのコンピュータ上での実行のためにプログラム記憶装置上で具体的に実施されるコンピュータ実行可能コードとして実施されることが好ましい。当業者であれば、本発明に従って、キャッシュ2、キャッシュ・マネージャ1およびデータベース99をクライアント90に同様に関連付けることができることを諒解するであろう。
【0051】
キャッシュ・マネージャ1は、キャッシュ記憶されたオブジェクトが、たとえばデータベース・レコードなど、どの基礎データに依存するかを指定するためのAPI(図6)を提供する。キャッシュ・マネージャ1は、これらの依存性を記憶する。あるプロセスがキャッシュ内の複合オブジェクトの値に影響する可能性のある状態を変更する時には、必ず、そのプロセスが、更新する基礎データを指定する。その後、キャッシュ・マネージャは、更新される基礎データに依存するキャッシュ記憶されたオブジェクトのすべてを無効化する。
【0052】
図2は、本発明の特徴を有するオブジェクト依存性グラフG121’の例を示す図である。この実施例のG121’は、代替実施例(図15)より単純であることに留意されたい。この場合、G121’は、単純依存性グラフ、すなわち各ノードが葉ノードr1…r4または極大ノードco1およびco2である有向グラフである。葉ノードは、どの辺の終点でもないノードであり、極大ノードは、どの辺の始点でもないノードであることを想起されたい。また、すべての経路が、長さ1であり、辺の重みを指定する必要がないことに留意されたい。さらに、固有極大ノード(少なくとも1つの辺の終点である極大ノード)co1およびco2は、それぞれがオブジェクトであり、Gの固有葉ノードr1…r4(少なくとも1つの辺の始点である葉ノード)は、オブジェクトではない基礎データを表す。固有葉ノードr1…r4によって表される基礎データを、レコードと称する(このレコードは、第2の実施例に使用されるレコードと同義ではない)。固有極大ノードco1およびco2によって表されるオブジェクトは、複合オブジェクトである。
【0053】
キャッシュ・マネージャ1は、G121’を表す基礎データの構造(図4および図5参照)を維持する。アプリケーション・プログラム97は、1組のキャッシュAPI(図6参照)を介して、キャッシュ・マネージャ1にオブジェクト依存性グラフの構造を通信する。アプリケーションは、APIを使用して、変更されたレコードr1…r4についてもキャッシュ・マネージャ1に通知する。キャッシュ・マネージャ1は、レコードr1…r4に対する変更について通知された時に、複合オブジェクトco1およびco2のどれが影響を受けたかを識別しなければならず、識別された複合オブジェクトを、それを含むキャッシュ2から削除(または更新)させなければならない。キャッシュ・マネージャ1は、Gの辺を調べることによって、どの複合オブジェクトが変更されたかを判定できる(図13参照)。
【0054】
たとえば、キャッシュ・マネージャ1が、r1が変更されたことの通知を受けたと仮定する。G121’から、co1も変更されていることが示される。キャッシュ・マネージャ1は、co1が、それを含むすべてのキャッシュ2から削除(または更新)されるようにしなければならない。もう1つの例として、r2が変更されたと仮定する。G121’から、co1とco2も影響を受けることが示される。この場合、キャッシュ・マネージャは、co1とco2の両方が、それらを含むすべてのキャッシュ2から削除(または更新)されるようにしなければならない。
【0055】
言い換えると、基本的なアプローチは、アプリケーション・レベルで複合オブジェクトを構築し、その結果、複合オブジェクトが1組のレコードに依存するようにすることである。アプリケーションは、複合オブジェクトco1およびco2が依存するレコードr1…r4を指定できなければならない。キャッシュ記憶された複合オブジェクトの値に影響する可能性がある形で状態を変更するプロセスのすべてについて、アプリケーション・プログラムは、どのレコードが影響を受けるかを指定できなければならない。この種の複合オブジェクトを、正規形式であると称する。多くの既存のウェブ・アプリケーションは、すでに正規形式になっているキャッシュ記憶可能な複合オブジェクトを作成する。これらのアプリケーションでキャッシュ記憶を使用するためには、複合オブジェクトの基礎となるレコードを認識し、提供されるAPIを介してアプリケーションをキャッシュにインターフェースすることだけが必要である。アプリケーションに対するこれ以外の変更は不要である。
【0056】
キャッシュ・マネージャ1は、1つまたは複数のキャッシュ2の記憶を管理する、長期間走行するプロセスであることが好ましい。しかし、当業者であれば、以下のいずれかのキャッシュ・マネージャに本発明を簡単に適合させることができる。
1.時間的に重なり合わない、複数の別個のプロセス。
2.一部が時間的に重なり合う、複数の別個のプロセス。これには、キャッシュ・システムのスループットを改善するために設計された複数の並列キャッシュ・マネージャが含まれる。
【0057】
図3は、ダイナミック・ウェブ・ページをキャッシュ記憶するための、本発明によるシステムの例を示す図である。図からわかるように、複数のページ(ページ1…ページ5)が1つまたは複数のデータベース99から動的に作成され、1つまたは複数のキャッシュ2に格納される、通常のウェブ・サイトであるサーバ100を検討する。本発明に適応可能なデータベース99およびデータベース管理システムの例が、IBM Corporation社によって商標DB2の下で販売されているデータベースである。ここでは、ダイナミック・ウェブ・ページ(ページ1…ページ5)がオブジェクトであり、基礎データ(テーブルまたはレコード)には、データベース99の各部が含まれる。
【0058】
本発明によれば、キャッシュ・マネージャ1は、キャッシュ記憶されたオブジェクトが依存するレコードをアプリケーション・プログラム97が指定できるようにするAPI(図6)を提供する。キャッシュ・マネージャ1は、これらの依存性を記憶する。アプリケーション・プログラム97が、レコードを変更するか、キャッシュ内の複合オブジェクトの値に影響する可能性があるレコードに対する変更について知った時には、アプリケーション・プログラム97は、必ず、更新されたレコードについてキャッシュ・マネージャ1に通知する。キャッシュ・マネージャ1は、変更されたレコードに対する依存性を有するキャッシュ記憶されたオブジェクトのすべてを無効化するか更新する。
【0059】
たとえば、図3に示されたHTMLページ(ページ1…ページ5)を検討する。このHTMLページは、複合オブジェクトであるが、データベース99から構築され、キャッシュ3に格納される。各HTMLページは、テーブルT1、T2、…、T6と記されたデータベースの部分である1つまたは複数のレコードに対する依存性を有する可能性がある。テーブルとページの間の対応は、ハッシュ・テーブル19およびレコード・リストによって維持できる。たとえば、キャッシュ・マネージャ1は、テーブルT1に対する変更について通知された場合に、ページ1を無効化(または更新)する。同様に、キャッシュ・マネージャは、テーブルT2に対する変更について通知された場合に、ページ1、ページ2およびページ3を無効化(または更新)する。
【0060】
図4は、キャッシュ2の例を示す図である。図からわかるように、各キャッシュ2は、4つの記憶区域すなわち、キャッシュ記憶されたオブジェクトのそれぞれに関する情報を維持するディレクトリ3と、オブジェクト6を格納するためのオブジェクト記憶域4と、他の状態情報(たとえばキャッシュによって維持される統計)を含む補助状態情報5と、ハッシュ・テーブル項目25内にレコードに関する情報が格納されるハッシュ・テーブル19とを有することが好ましい。
【0061】
好ましい実施例では、ハッシュ・テーブル項目25に、record_id(レコードID)12とオブジェクト・リスト8が含まれ、オブジェクト・リスト8には、その値がデータベース99の一部である可能性があるレコードに依存するオブジェクト、すなわちobject_id9のリストが含まれる。しかし、本発明では、他の種類の情報をハッシュ・テーブル項目に格納することもできる。ハッシュ・テーブルの目的は、特定のテーブル/レコードに関する情報を見つけるための効率的な方法を提供することである。ハッシュは、record_id12に基づくキーを使用することが好ましい。ハッシュ・テーブルは、当技術分野で周知である(たとえば、エイホ(Aho)、ホップクロフト(Hopcroft)、ウルマン(Ullman)共著、「The Design and Analysis of Computer Algorithms」、Addison−Wesley刊、1974年を参照)。ハッシュ・テーブルは、本発明にとって効率的なデータ構造をもたらす。しかし、本発明は、広範囲の他のデータ構造との互換性を有し、ハッシュ・テーブルの使用に制限されるものではない。
【0062】
ディレクトリ3には、キャッシュに格納されたオブジェクト6のそれぞれについて1つのオブジェクト情報ブロック(OIB)10が含まれる。OIB10の構成要素の1つが、複合オブジェクトco1およびco2に関連するレコードr1…r4を識別するrecord_id12のすべてを格納するのに使用されるレコード・リスト11(図5)である。ここでは、複合オブジェクトが、キャッシュ2に格納されたダイナミック・ウェブ・ページ(ページ1…ページ5)であり、レコードは、データベース99の一部である可能性がある。好ましい実施例ではレコードIDにテキスト文字列を使用するが、他の方法も互換性を有する。
【0063】
アプリケーション・プログラムは、1組のAPI関数を介してキャッシュ・マネージャ1と通信する。本発明によるAPIの例を、図6に示す。当業者は、多数の追加APIを本発明の趣旨および範囲の中で簡単な形で実施できることを諒解するであろう。図からわかるように、このAPIの例には以下の関数が含まれる。
【0064】
cache_object (object_id, object, cache_id) 410:キーobject_id 9の下でcache_idによって識別されるキャッシュ2(図4)にobject−idによって識別されるオブジェクト6を格納する。同一のキーを有する前のオブジェクト6は上書きされる。本発明は、object_id、objectおよびcache_idに関して、広範囲の型と互換性を有する。好ましい実施例では、オブジェクト6は、複数の型のいずれかとすることができ、object_idはバイト文字列、cache_idはキャラクタ文字列である。ここでは、同一のキーを有する複数の項目が、同一のキャッシュ内に同時に存在することを許容されないことが好ましい。しかし、当業者であれば、同一のキーを有する複数の項目が同一キャッシュ内に同時に存在できる状況で本発明を使用することも簡単である。
【0065】
lookup_object (object_id, cache_id) 415:cache_idによって識別されるキャッシュ2内でキーobject_id 9を有するオブジェクト6を探す。そのようなオブジェクト6が存在する場合には、そのオブジェクトをアプリケーション・プログラムに返す。
【0066】
delete_object (object_id, cache_id) 420:cache_idによって識別されるキャッシュ内でキーobject_id 9を有するオブジェクト6を探す。そのようなオブジェクト6が存在する場合には、そのオブジェクトを削除する。
【0067】
add_dependency (object_id, cache_id, record_id) 430:cache_idによって識別されるキャッシュ2内でキーobject_id 9を有するオブジェクト6を探す。そのようなオブジェクト6が存在し、そのオブジェクト6と、引数record_idに関連するrecord_id 12によって識別されるレコードの間に依存性が存在しない場合には、依存性を追加する。
【0068】
delete_dependency (object_id, cache_id, record_id) 440:cache_idによって識別されるキャッシュ内でキーobject_id 9を有するオブジェクト6を探す。そのようなオブジェクト6が存在し、そのオブジェクト6と、record_id 12によって識別されるレコードの間に依存性が存在する場合には、その依存性を削除する。
【0069】
invalidate_record (cache_id, record_id) 450:cache_idによって識別されるキャッシュ2から、record_idによって識別されるレコードに依存するキャッシュ・オブジェクトをすべて削除する。
【0070】
show_dependent_objects (cache_id, record_id) 460:cache_idによって識別されるキャッシュ2内で、record_idによって識別されるレコードに依存する全オブジェクトのobject_id 9のリストを返す。この関数は、record_idによって識別されるレコードに対応するハッシュ・テーブル項目25のオブジェクト・リスト8を返すことによって実装することができる。キャッシュ2またはハッシュ・テーブル項目25のいずれかが見つからない場合を示すために、状況変数を返すこともできる。
【0071】
show_associated_records (cache_id, object_id) 470:cache_idによって識別されるキャッシュ2内でobject_idによって識別されるオブジェクト6が依存する全レコードのrecord_id 12のリストを返す。この関数は、cache_idによって識別されるキャッシュ2内でobject_idによって識別されるオブジェクト6のレコード・リスト11(図5)を返すことによって実装することができる。キャッシュまたはオブジェクト6のいずれかが見つからない場合を示すために、状況変数を返すこともできる。
【0072】
図7は、キャッシュ・マネージャ1のロジックの例を示す図である。図からわかるように、ステップ1010で、キャッシュ・マネージャが、アプリケーション・プログラムからコマンド(図6)を受け取る。ステップ1020で、キャッシュ・マネージャは、コマンド(図6)を読み取り、そのコマンドに基づいて、下で説明する異なるロジック1100から1600を呼び出す。
【0073】
図8は、cache_object(object_id,object,cache_id)410コマンドのためのキャッシュ・マネージャのロジック1200の例を示す図である。図からわかるように、ステップ1200で、キャッシュ・マネージャ1は、cache_idパラメータが有効なキャッシュ2を指定しているかどうかを判定する。有効でない場合には、ステップ1245で、アプリケーション・プログラムに返される状況変数を適当に設定する。cache_idが有効なキャッシュ2を指定している場合には、複数のプロセスがキャッシュに同時にアクセスしないように、キャッシュ2をロックすることが好ましい。これによって、一貫性が保たれる。当業者であれば、他のロック方式を使用して、より高いレベルの並列性を実現できることを諒解するであろう。本発明は、好ましい実施例に使用される例のほかに、広範囲の従来のロック方式との互換性を有する。
【0074】
ステップ1205で、キャッシュ・マネージャ1は、ディレクトリ3(図4)を調べることによってオブジェクト6を探す。オブジェクト6の前のコピーが見つかった場合には、ステップ1215で、オブジェクト6のOIB10を更新し、オブジェクト記憶域4にあるオブジェクト6の古いバージョンを新しいバージョンに置換し、状況変数を適当に設定する。ステップ1205で、オブジェクト6の前のコピーが見つからない場合には、ステップ1210で、オブジェクト6の新しいOIB10を作成し、初期設定し、ディレクトリ3に格納する。キャッシュ・マネージャ1は、オブジェクト6をオブジェクト記憶域4に格納し、状況変数を適当に設定する。
【0075】
ステップ1230で、キャッシュのロックを解除して、他のプロセスがそのキャッシュを更新できるようにする。ステップ1240で、コマンドの結果を示す状況変数をアプリケーション・プログラムに返す。その後、処理はステップ1010(図7)に戻る。
【0076】
図9は、lookup_object(object_id,cache_id)415コマンドのロジックの例を示す図である。図からわかるように、ステップ1600で、キャッシュ・マネージャ1は、cache_idパラメータが有効なキャッシュ2を指定しているかどうかを判定する。有効でない場合には、ステップ1640で、状況変数を適当に設定し、ステップ1680で、その状況変数をアプリケーション・プログラムに返す。cache_idが有効なキャッシュを指定している場合には、ステップ1610で、キャッシュ2をロックする。
【0077】
ステップ1620で、キャッシュ・マネージャ1は、ディレクトリ3(図4)を調べることによって、object_idパラメータに対応するオブジェクト6を探す。オブジェクト6が見つからない場合には、ステップ1650でキャッシュ2のロックを解除し、ステップ1670で状況変数を設定し、ステップ1680で状況変数をアプリケーション・プログラムに返す。ステップ1620でオブジェクト6が見つかった場合には、ステップ1630でキャッシュ2のロックを解除し、ステップ1660でオブジェクト6をアプリケーション・プログラムに返す。
【0078】
図10は、delete_object(object_id,cache_id)420コマンドのロジックの例を示す図である。図からわかるように、ステップ1100で、キャッシュ・マネージャ1は、cache_idパラメータに対応するキャッシュ2が有効であるかどうかを判定する。有効でない場合、ステップ1103で、状況変数を適当に設定し、ステップ1150で、状況変数をアプリケーション・プログラムに返す。
【0079】
ステップ1100で、cache_idが有効なキャッシュ2を指定している場合には、ステップ1105でそのキャッシュをロックする。ステップ1107で、キャッシュ・マネージャ1は、ディレクトリ3(図4)を調べることによって、object_idパラメータに対応するオブジェクト6を探す。オブジェクト6が見つからない場合には、ステップ1108でキャッシュのロックを解除し、ステップ1109で状況変数を設定し、ステップ1150で状況変数をアプリケーション・プログラムに返す。ステップ1107でオブジェクト6が見つかった場合には、ステップ1110で、キャッシュ・マネージャ1が、レコード・リスト11(図5)に関連するオブジェクトを削除し、対応するオブジェクト・リスト8(図4)を更新する。キャッシュ・マネージャ1は、オブジェクト6に対応するレコード・リスト11(図5)のrecord_id12のそれぞれを走査する。レコード・リスト11の各record_id12は、対応するオブジェクト・リスト8(図4)を有することに留意されたい。削除されるオブジェクト6に対応するobject_id9(図4)へのポインタが、そのようなオブジェクト・リスト8からすべて削除される。この結果、オブジェクト・リスト8が空になった場合、それに対応するハッシュ・テーブル項目25も削除される。レコード・リスト11の各要素を調べた後に、その要素を削除することができる。
【0080】
ステップ1120で、オブジェクト6をオブジェクト記憶域4から削除する。ステップ1130で、対応するOIB10を削除する。ステップ1120は、ステップ1110およびステップ1130と同時にまたはこれらの前に実行できることに留意されたい。ステップ1140で、キャッシュのロックを解除し、ステップ1150で、状況変数をアプリケーション・プログラムに返す。
【0081】
図11は、add_dependency(object_id,cache_id,record_id)430コマンドのロジックの例を示す図である。図からわかるように、ステップ1300で、キャッシュ・マネージャは、cache_idパラメータが有効なキャッシュ2を指定しているかどうかを判定する。有効でない場合には、ステップ1302で状況変数を適当に設定し、ステップ1360で状況変数をアプリケーション・プログラムに返す。
【0082】
ステップ1300で、cache_idが有効なキャッシュを指定していると判定された場合には、ステップ1305でキャッシュ2をロックする。ステップ1310で、キャッシュ・マネージャ1は、ディレクトリ3(図4)を調べることによって、object_idに対応するオブジェクト6を探す。ステップ1310でオブジェクト6が見つからない場合には、ステップ1315でキャッシュ2のロックを解除し、ステップ1317で状況変数を設定し、ステップ1360で適当な状況変数をアプリケーション・プログラムに返す。ステップ1310でオブジェクト6が見つかった場合には、ステップ1320で、キャッシュ・マネージャ1が、レコード・リスト11(図5)を検査して、オブジェクト6と、record_idによって識別されるレコードとの間の関連(すなわち依存性情報)がすでに存在するかどうかを調べる。その代わりに、record_idに対応するレコードがハッシュ・テーブル項目25を有するかどうかを判定し、有する場合にはオブジェクト・リスト8でobject_id9を探すことができる。ステップ1320で、オブジェクトへの依存性が存在する場合には、ステップ1325でキャッシュ2のロックを解除し、ステップ1327で状況変数を適当に設定し、ステップ1360で適当な状況変数をアプリケーション・プログラムに返す。ステップ1320で、オブジェクトへの依存性が見つからない場合には、ステップ1330で、object_id9をレコードのオブジェクト・リスト8に追加する。必要であれば、そのレコードのためのハッシュ・テーブル項目25とオブジェクト・リスト8を作成する。ステップ1340で、record_id12を、オブジェクト6のレコード・リスト11(図5)に追加する。ステップ1340は、ステップ1330と同時にまたはその前に実行できることに留意されたい。ステップ1350でキャッシュ2のロックを解除し、ステップ1360で、状況変数をアプリケーション・プログラムに返す。
【0083】
図12は、delete_dependency(object_id,cache_id,record_id)440コマンドのロジックの例を示す図である。図からわかるように、ステップ1400で、キャッシュ・マネージャ1は、cache_idパラメータが有効なキャッシュ2を指定しているかどうかを判定する。有効でない場合、ステップ1402で、状況変数を適当に設定し、ステップ1460で、状況変数をアプリケーション・プログラムに返す。
【0084】
ステップ1400で、cache_idが有効なキャッシュを指定していると判定された場合には、ステップ1405で、キャッシュをロックする。ステップ1410で、キャッシュ・マネージャ1は、ディレクトリ3(図4)を調べることによって、object_idに対応するオブジェクト6を探す。ステップ1410でオブジェクト6が見つからない場合には、ステップ1412でキャッシュ2のロックを解除し、ステップ1415で状況変数を設定し、ステップ1460で状況変数をアプリケーション・プログラムに返す。ステップ1410でオブジェクト6が見つかった場合には、ステップ1420で、キャッシュ・マネージャ1がレコード・リスト11(図5)を調べて、オブジェクト6とrecord_idによって識別されるレコードの間に関連(すなわち依存性情報)がすでに存在するかどうかを調べる。その代わりに、record_idに対応するレコードがハッシュ・テーブル項目25を有するかどうかを判定し、有する場合にはオブジェクト・リスト8でobject_id9を探すことができる。ステップ1420で依存性が見つからない場合には、ステップ1422でキャッシュ2のロックを解除し、ステップ1425で状況変数を適当にセットし、ステップ1460で適当な状況変数をアプリケーション・プログラムに返す。ステップ1420でオブジェクトに対する依存性が見つかった場合には、ステップ1430で、そのレコードのオブジェクト・リスト8からobject_id9を削除する。これによってオブジェクト・リストが空になった場合には、そのレコードのハッシュ・テーブル項目25を削除する。ステップ1440で、オブジェクト6のレコード・リスト11(図5)からrecord_id12を削除する。ステップ1440は、ステップ1430と同時にまたはその前に実行できることに留意されたい。ステップ1450でキャッシュのロックを解除し、ステップ1460で状況変数をアプリケーション・プログラムに返す。
【0085】
図13は、invalidate_record(cache_id,record_id)450コマンドのロジックの例を示す図である。図からわかるように、ステップ1500で、キャッシュ・マネージャ1は、cache_idパラメータが有効なキャッシュ2を指定しているかどうかを判定する。そのキャッシュが有効でない場合には、ステップ1502で状況変数を適当に設定し、ステップ1550で状況変数をアプリケーション・プログラムに返す。
【0086】
ステップ1500で、キャッシュ・マネージャ1が、cache_idパラメータが有効なキャッシュ2を指定していると判定した場合には、ステップ1505でキャッシュ2をロックする。ステップ1510で、キャッシュ・マネージャは、オブジェクト6のいずれかの値が、record_idに関連するレコードに依存するかどうかを、レコードがハッシュ・テーブル項目25(図4)を有するかどうかを調べることによって判定する。そのレコードのハッシュ・テーブル項目25が見つからない場合には、ステップ1515でキャッシュのロックを解除し、ステップ1517で状況変数を設定する。
【0087】
ステップ1510で、そのレコードのハッシュ・テーブル項目25が見つかった場合には、ステップ1520で、キャッシュ・マネージャ1が、そのレコードのオブジェクト・リスト8を走査する。オブジェクト・リスト8にobject_id9があるオブジェクト6のそれぞれを、キャッシュから削除する。各オブジェクト6を削除する際に、他のオブジェクト・リスト8からのそのオブジェクト6への参照も、すべて削除する。このような参照は、削除するオブジェクト6のレコード・リスト11(図5)をトラバースすることによって見つけることができる。そのような参照を削除した結果、オブジェクト・リストが空になった場合には、対応するハッシュ・テーブル項目を削除する。record_id12(record_idパラメータに対応する)に関連するオブジェクト・リスト8の各要素を調べた後に、その要素を削除することができる。ステップ1530で、そのレコードのハッシュ・テーブル項目25を削除する。ステップ1540でキャッシュのロックを解除し、ステップ1550で、状況変数をアプリケーション・プログラムに返す。
【0088】
当業者が実装できるinvalidate_record関数の簡単な拡張は、record_idパラメータに依存する1つまたは複数のオブジェクトを、無効化するのではなく更新することである。
【0089】
ステップ1099は、キャッシュ・マネージャが処理できる他のコマンドを表す。
【0090】
当業者であれば、本発明の趣旨および範囲の中に、多数の拡張および変形が存在することを諒解するであろう。たとえば、1つの変形は、オブジェクト6がキャッシュ記憶される前とオブジェクト6がキャッシュから除去された後の両方で、キャッシュ・マネージャ1が、オブジェクト6のOIB10(図4)を保持し、更新できるようにすることである。このアプローチを使用する場合、オブジェクト6がキャッシュから除去される時に、オブジェクト6のレコード・リスト11を削除する必要がなくなり、すべてのオブジェクト・リスト8からオブジェクト6を除去する必要もなくなるはずである。この形で、オブジェクト6がキャッシュ内にない場合であっても、依存性情報を保持し、更新できるようになる。
【0091】
もう1つの変形は、オブジェクトがオブジェクト・リスト8に追加される前とオブジェクト・リスト8が空になった後の両方で、言い換えると、キャッシュ・マネージャがレコードに対する依存性に気付く前と、キャッシュ・マネージャが気付いているレコードに対する依存性のすべてが古くなった後の両方で、キャッシュ・マネージャ1が、レコードのハッシュ・テーブル項目25を維持し、更新できるようにすることである。これは、ハッシュ・テーブル項目25に、record_id12およびオブジェクト・リスト8以外の情報も含まれる場合に、特に価値があるはずである。
【0092】
代替実施例
図14は、本発明の特徴を有するシステムのもう1つの例を示す図である。この実施例ならびに前の実施例では、本発明は、通常のクライアント−サーバ環境でのサーバ・アプリケーションの性能を改善するのに使用することができる。当業者であれば、クライアント−サーバ・ベースではない他の応用例に本発明を簡単に適合させることができるはずである。図からわかるように、このクライアント−サーバ・アーキテクチャでは、クライアント90がネットワーク95を介してサーバ100と通信する。サーバ100は、1つまたは複数のキャッシュ2’を維持する。通常通り、サーバ100は、キャッシュ2’を使用して、性能を改善し、クライアント90の要求を満足するためのCPU時間を減らす。図14には、単一のサーバに関連するキャッシュ2’が示されているが、キャッシュ2’は、複数のサーバにまたがって維持することもできる。
【0093】
サーバ100上で稼動するアプリケーションは、オブジェクトを作成し、1つまたは複数のキャッシュ2’にこれらのオブジェクトを格納する。このシステムは、データベース99内の基礎データのソースとキャッシュ2’が地理的に分離されたアーキテクチャとすることもできる。この実施例では、オブジェクトは、1つまたは複数のキャッシュ2’に格納することができるデータである。オブジェクトは、データベース99に格納された基礎データから構築することができる。基礎データには、1つまたは複数のオブジェクトの値に影響する可能性がある、システム内の全データが含まれる。基礎データは、システム内の全オブジェクトのスーパーセットである。
【0094】
本発明によれば、オブジェクト・マネージャ120は、サーバ100(またはクライアント90)などのコンピュータでの実行のためにコンピュータ可読媒体内で具体的に実施されたコンピュータ実行可能コード(プログラム)として実施されることが好ましい。オブジェクト・マネージャ120は、基礎データに対する変更がキャッシュ2’内のオブジェクトの値にどのように影響するかを判定するのを助ける。図14には、単一のサーバに常駐するオブジェクト・マネージャが図示されているが、オブジェクト・マネージャは、複数のサーバにまたがって分散することができる。オブジェクト・マネージャ120は、1つまたは複数のキャッシュ2’の記憶域を管理する長期間走行するプロセスであることが好ましい。キャッシュという用語は、非常に包括的であり、これには、通常の意味のキャッシュに加えて、アプリケーション(たとえばクライアント90アプリケーション)を含めることができる。当業者であれば、以下のいずれかであるオブジェクト・マネージャのために本発明を簡単に適合させることができるはずである。
1.時間的に重なり合わない複数の別個のプロセス
2.一部が時間的に重なり合う、複数の別個のプロセス。これには、システムのスループットを改善するために設計された複数の並列オブジェクト・マネージャが含まれる。
【0095】
図15は、本発明の特徴を有するオブジェクト依存性グラフG121の例を示す図である。オブジェクト依存性グラフG121は、グラフ・オブジェクトgobj1…gobjnの間のデータ依存性を表す。ここでは、gobj1…gobj7が、異なるグラフ・オブジェクトを表し、グラフの辺eは、データ依存性を表す。たとえば、gobj1からgobj5への辺は、gobj1が変更された場合に、gobj5も変更されていることを示す。辺の重みwは、辺の始点であるオブジェクトに対する変更が、その辺の終点であるオブジェクトにどれほど影響するかを示す。たとえば、gobj1に対する変更は、gobj5にgobj2よりも大きな変更をもたらすことを意味する。これは、gobj1からgobj5への辺eの重みwが、gobj2からgobj5への辺eの重みwの5倍になっているからである。
【0096】
オブジェクト・マネージャ120は、オブジェクト依存性グラフを表す基礎となるデータ構造(図14から図21を参照)を維持する責任を負う。アプリケーション・プログラムは、1組のAPI(図22参照)を介してオブジェクト・マネージャにオブジェクト依存性グラフの構造を通信する。また、アプリケーションは、APIを使用して、変更された基礎データについてオブジェクト・マネージャに通知する。オブジェクト・マネージャ120は、基礎データに対する変更について通知された時に、他のどのオブジェクトが変更されたかを判定し、その変更をキャッシュ2’に通知しなければならない。オブジェクト・マネージャは、オブジェクト依存性グラフ(図26参照)の辺をたどることによって、他のどのオブジェクトが変更されたかを判定する。
【0097】
たとえば、オブジェクト・マネージャ120が、gobj1が変更されたという通知を受けたと仮定する。オブジェクト依存性グラフG121の辺をgobj1からたどることによって、オブジェクト・マネージャは、gobj5とgobj7も変更されたと判定する。もう1つの例として、オブジェクト・マネージャが、gobj7が変更されたという通知を受けたと仮定する。gobj7が始点になっている辺はこのオブジェクト依存性グラフに存在しないので、オブジェクト・マネージャは、他のオブジェクトは影響を受けないと結論する。
【0098】
図16は、本発明の特徴を有するオブジェクト・マネージャ120の例を示す図である。図からわかるように、オブジェクト・マネージャ120には、以下の複数の記憶域が含まれる。
1.複数の依存性情報ブロック(DIB)128によって実施されるオブジェクト依存性グラフG121(図17参照)。当業者であれば、さまざまなデータ構造を使用してDIBを格納できることを諒解するであろう。通常のハッシュ・テーブルを使用し、object_id160によってDIBをインデクシングすることが好ましい。ハッシュ・テーブルは、たとえば、エイホ(Aho)、ホップクロフト(Hopcroft)、ウルマン(Ullman)共著、「The Design and Analysis of Computer Algorithms」、Addison−Wesley刊、1974年に記載されている。
2.複数レコード・ツリー(MRT)122(図32および図33を参照)。
3.単一レコード・ツリー(SRT)123(図32および図33を参照)。
4.以下を含むがこれらに制限されない、補助状態情報124。
a.num_updates(更新回数)125:オブジェクト・マネージャがグラフを介して伝播した更新の回数を追跡するためにオブジェクト・マネージャが維持するカウンタ。
b.一貫性スタック128.5:更新中に一貫性を維持するために使用される。
c.関係情報区域129(図32および図33を参照)。
5.プログラム・ロジック126。
【0099】
図18は、各キャッシュ127によって維持される記憶域の例を示す図である。各キャッシュは、それを識別するcache_id135を有する。主な記憶域は以下の3つである。
1.ディレクトリ130:オブジェクトに関する情報が維持される。ディレクトリ130には、複数のオブジェクト情報ブロック(OIB)10’が含まれる。あるオブジェクトに関する情報は、そのオブジェクトがキャッシュから出た後に、OIB10’(図19)に保存することができる。当業者であれば、さまざまなデータ構造を使用してOIBを格納できることを諒解するであろう。通常のハッシュ・テーブルを使用し、object_id160によってOIBをインデクシングすることが好ましい。
2.オブジェクト記憶域132:キャッシュに含まれるオブジェクトが格納される。
3.補助状態情報124:たとえばcache_id135など、他の状態情報を含む。
【0100】
図19は、OIB10’の例を示す図である。OIBには、以下が含まれることが好ましい。
object_id160:以下の説明のために、あるオブジェクトがobject_id o1を有すると仮定する。
version_num(バージョン番号)141:オブジェクト・マネージャが、同一オブジェクトの異なるバージョンを一意に識別できるようにする。
timestamp(タイムスタンプ)142:オブジェクトがどれほど最近に計算されたかを示す数。
actual_weight(実際の重み)143:グラフ・オブジェクトo1のキャッシュ記憶されたバージョンが、グラフ・オブジェクトo2の現行バージョンとの一貫性を有するようにするための、o2からo1へのすべての辺の重みの合計。
dep_list(依存性リスト)144:オブジェクトo1への依存性を表すリスト。
【0101】
図20は、dep_list144の要素の例を示す図である。図からわかるように、各リストには、以下が含まれることが好ましい。
object_id160:o1への依存性の辺を有するグラフ・オブジェクトo2(すなわち、o2が始点、o1が終点)を表す。
weight_act(実重み)152:o2の最も最近のバージョンがo1のキャッシュ記憶されたバージョンとどれほどの一貫性を有するかを表す数。好ましい実施例では、0の値(全く一貫性がない)またはDIB128(図21)の対応する辺のweight(重み)165(図21)(完全な一貫性を有する)を使用する。簡単な拡張は、これら2つの極端な値の間の値によって一貫性の度合を表せるようにすることである。
version_num153:o1のキャッシュ記憶されたバージョンとの一貫性を有するo2のversion_num。
【0102】
図21は、図16のDIB128の例を示す図である。図からわかるように、DIB128には、以下のフィールドが含まれることが好ましい。
object_id160:アプリケーション・プログラムがグラフ・オブジェクトを識別するのに使用する。以下の説明のために、あるグラフ・オブジェクトがobject_id o1を有すると仮定する。
version_num161:グラフ・オブジェクトの現行バージョンのバージョン番号。
timestamp162:グラフ・オブジェクトの現行バージョンのタイムスタンプ。
storage_list(記憶域リスト)163(オブジェクトであるグラフ・オブジェクトの場合):そのオブジェクトを含む全キャッシュのcache_idのリスト。
incoming_dep(入依存性)164:o1への依存性辺を有するグラフ・オブジェクトo2のすべての(object_id160,weight165)対のリスト。weight165は、依存性の重要さを表す。たとえば、大きい数は、より重要な依存性を表すことができる。
outgoing_dep(出依存性)166:o1から発する依存性辺が存在するすべてのオブジェクトのobject_idのリスト。
sum_weight(重み合計)167:o1に入る依存性辺のすべての重みの合計。
threshold_weight168(オブジェクトであるグラフ・オブジェクトの場合):あるオブジェクトが非常に古いとみなされる時を表す数。OIB10’(図19)のactual_weight143フィールドが、そのオブジェクトのthreshold_weight168フィールド未満になった時には、必ず、そのオブジェクトは非常に古いとみなされ、キャッシュから無効化されるか、更新されなければならない。
consistency_list(一貫性リスト)169(オブジェクトであるグラフ・オブジェクトの場合):現行オブジェクトとの一貫性を維持されなければならない他のオブジェクトに対応するobject_id160のリスト。一貫性は、同一キャッシュ内のオブジェクトの間でのみ実施されることが好ましい。簡単な拡張は、複数のキャッシュにまたがってオブジェクトの一貫性を実施することである。もう1つの簡単な拡張は、consistency_list169の全オブジェクトが、object_idがキャッシュ内にある時にはキャッシュ内にあり、object_idがキャッシュ外にある時にはキャッシュ外にあることを必要とすることである。
latest_object(最新オブジェクト)1601(オブジェクトであるグラフ・オブジェクトの場合):そのオブジェクトの最新バージョンを指すポインタ。オブジェクト・マネージャがそのようなコピーを知らない場合にはnullになる。このフィールドを使用すると、毎回値を再計算することなく、複数のキャッシュ内でオブジェクトを更新できるようになる。
relational_string(関係文字列)1602:グラフ・オブジェクトが関係オブジェクトでない場合にはnullになる。そうでない場合には、SROの場合はrelation_name(関係名)(25,30)、MROの場合はrelation_name(>=50)という形になる。以下の項目は、relational_string1602がnullでない場合に限って関連する。
multiple_records(複数レコード)1603:グラフ・オブジェクトが複数レコード・オブジェクト(MRO)の場合は真、単一レコード・オブジェクト(SRO)の場合は偽になる。
以下の項目は、multiple_records1603が真の場合に限って関連する。
mro_dep_weight(MRO依存重み)1604:別の関係オブジェクトからo1への暗黙の依存性に割り当てられる重み。
mro_threshold_increment(MRO閾値増分)1605:o1に対する暗黙の依存性のそれぞれについて、threshold_weightを増分する量。
【0103】
図14から図17を参照すると、オブジェクト・マネージャは、グラフを介してオブジェクト・マネージャが更新を伝播した回数を記録するカウンタであるnum_updates125(当初は0)を維持することが好ましい。オブジェクト・マネージャは、キャッシュ内のオブジェクト間の一貫性を維持するのに使用される一貫性スタック128.5(図16)と称するデータ構造(当初は空)も維持する。
【0104】
アプリケーション・プログラム97は、1組のAPIを介してオブジェクト・マネージャと通信することが好ましい。図22は、本発明による複数のAPIの例を示す図である。当業者であれば、本発明に鑑みて簡単な拡張である他のAPIを実施できることを諒解するであろう。
【0105】
図23は、異なるAPI関数を処理するためのオブジェクト・マネージャ120のロジックの例を示す図である。これらの関数は、後程詳細に説明する。概要を示すと、オブジェクト依存性グラフG121内のノードは、オブジェクト・マネージャに対するAPI呼出しcreate_node(obj_id,initial_version_num,thresh_weight)181を介して作成できる。グラフ内の既存ノード間の依存性は、API呼出しadd_dependency(source_object_id,target_object_id,dep_weight)182を介して作成できる。オブジェクト「obj_id」に対応するconsistency_list169は、API呼出しdefine_consistency_list(obj_id,list_of_objects)183を介して設定できる。ノードは、API delete_node(obj_id)184を介してGから削除できる。API cache_latest_version(obj_id,cache)185では、オブジェクトの最新バージョンがキャッシュに追加される。API copy_object(obj_id,to_cache_id,from_cache_id)186は、あるバージョンのオブジェクトをあるキャッシュから別のキャッシュにコピーしようと試みる。オブジェクトは、API呼出しdelete_object(obj_id,cache)187を介してキャッシュから削除される。
【0106】
基礎データの値を変更するアプリケーション・プログラムは、オブジェクト・マネージャに知らせなければならない。これを達成するための2つのAPI呼出しが、object_has_changed(obj_id)188(obj_idパラメータでグラフ・オブジェクトを識別する)と、objects_have_changed(list_of_objects)189(list_of_objectsパラメータにグラフ・オブジェクト(へのポインタ)のリストが含まれる)である。
【0107】
SROに対応するノードは、API呼出しcreate_sro_node(obj_id,initial_version_num,thresh_weight,relation_name,list_of_attribute_values)190を介して作成される。
【0108】
MROは、API create_mro_node(obj_id,initial_version_num,thresh_weight,relation_name,list_of_attribute_conditions,rel_default_weight,rel_default_threshold)191を介して作成される。
【0109】
API compare_objects(obj_id,cache_id1,cache_id2)192は、cache_id1とcache_id2にあるobj_idのバージョンがどれほど似ているかを判定するのに使用することができる。API update_cache(cache)193によって、キャッシュ内のすべての項目が現行であることが保証される。API define_relation(relation_name,list_of_attributes)194によって、オブジェクト・マネージャに対して関係が識別される。1つまたは複数のレコードが変更された時には、オブジェクト・マネージャは、API record_has_changed(relation_name,list_of_attribute_values)195およびrecords_have_changed(relation_name,list_of_attribute_conditions)196を介して変更に関する通知を受けることができる。
【0110】
オブジェクト依存性グラフG121内のノードは、オブジェクト・マネージャに対するAPI呼出しcreate_node(obj_id,initial_version_num,thresh_weight)181を介して作成される。当業者であれば、本発明の趣旨および範囲の中で、簡単な形で多数の追加APIを実施できることを諒解するであろう。たとえば、ノードを作成した後に、object_id160、version_num161およびthreshold_weight168を変更するためにAPIを追加することができる。
【0111】
グラフ内の既存ノードの間の依存性は、API呼出しadd_dependency(source_object_id,target_object_id,dep_weight)182を介して作成される。
【0112】
当業者であれば、本発明の趣旨および範囲の中で、簡単な形で多数の追加APIを実施できることを諒解するであろう。たとえば、依存性を削除するAPIや、依存性の重みを変更するAPIを追加することもできる。
【0113】
オブジェクト「obj_id」に対応するconsistency_list169は、API呼出しdefine_consistency_list(obj_id,list_of_objects)183を介して設定される。obj_idのconsistency_listには、obj_idをメンバとして含めることができないようになっていることが好ましい。このAPIでは、これが不可能にされている。
【0114】
本発明の趣旨および範囲の中で、作成後にconsistency_list169を変更するためのAPIを追加することも同様に可能である。
【0115】
あるオブジェクトがキャッシュ記憶された後に、そのオブジェクトのDIB128(図21)に変更を加えると、1つまたは複数のキャッシュ127に対する更新が必要になる場合がある。これは簡単である。新しいグラフ・オブジェクトo2からキャッシュ記憶されたオブジェクトo1への新しい依存性の場合、新しい依存性は、オブジェクト・マネージャo2がいつ作成されたかを知らない場合、またはo2のDIBのtimestamp162>o1のOIBのtimestamp142の場合に古くなる。ノードは、API delete_node(obj_id)184を介してGから削除できる。
【0116】
オブジェクトは、API cache_latest_version(obj_id,cache)185およびcopy_object(obj_id,to_cache_id,from_cache_id)186を介して、キャッシュに明示的に追加することができる。これらのAPIでは、オブジェクトのOIB10’が存在しない場合に、キャッシュ・ディレクトリ内に新しいOIB10’が作成される。
【0117】
図24は、API cache_latest_version(obj_id,cache)185の例を示す図である。図からわかるように、ステップ2030で、obj_idパラメータが既存のオブジェクトを指定し、cacheパラメータが既存のキャッシュを指定しているかどうかを検証する。そうである場合には、処理はステップ2040に進む。そうでない場合には、適当な状況メッセージを返し、処理はステップ2010に進む。ステップ2040では、cacheにobj_idの最新バージョンがあるかどうかを判定する。そうである場合には、処理はステップ2010に継続する。そうでない場合には、ステップ2050で、DIB128(図21)のlatest_object1601フィールドからobj_idの最新バージョンを取得する試みを行う。このフィールドがnullの場合、ステップ2050で、obj_idの最新値を計算し(および、おそらくはDIBのlatest_object1601フィールドを介してその値にアクセスできるようにし)、DIB128(図21)のversion_num161を更新する。ステップ2050では、obj_idの新しいバージョンを完全に再計算するか、その一部だけを再計算し、新しい部分を既存のバージョンからの部分と合併するかのいずれかを行う。後者の方法は、しばしば前者より効率的である。
【0118】
cacheのディレクトリ130にobj_idのOIB10’が存在しない場合には、そのOIB10’を作成する。cacheに以前にobj_idのバージョンが含まれていたことがない場合には、obj_idのstorage_list163をcacheに追加する。OIB10’(図19)のversion_num141およびtimestamp142には、DIB128(図21)のversion_num161およびtimestamp162をセットする。OIB10’(図19)のactual_weight143には、DIBのsum_weight167をセットする。OIB10’(図19)のdep_list144に属する(o2,weight_act,version_num)の組のそれぞれについて、weight_act152に、DIBのincoming_dep164上の対応する辺のweight165をセットする。version_num153には、o2のDIBに含まれるversion_num161をセットする。ステップ2060で、確実に一貫性が保たれるようにする。この関数では、obj_idのconsistency_list169に含まれる現行でないオブジェクトobj2のすべてが、obj2のOIB10’のtimestamp142がobj_idのDIB128のtimestamp162より以前である時に必ず更新または無効化されることを、再帰的に確実にする。そのようなobj2をこの処理で更新する場合には、前記obj2のそれぞれのconsistency_list169に対して同様の手順を再帰的に適用する。ステップ2050とステップ2060の順序は、この実施例の正しさにとって特に重要ではない。
【0119】
図25は、API copy_object(obj_id,to_cache_id,from_cache_id)186の例を示す図である。図からわかるように、ステップ2100で、パラメータobj_id、to_cache_idおよびfrom_cache_idが、オブジェクト・マネージャによってすべて認識されることを検証する。そうである場合には、ステップ2110で、from_cache_idがobj_idのコピーを有するかどうかを判定する。そうでない場合には、何も行われず、処理はステップ2010に進む。これ(他の場合も同様)のために状況変数を適当に設定し、アプリケーション・プログラムに返して、何が起きたかを示す。そうでない場合には、処理はステップ2120に継続し、to_cache_idとfrom_cache_idにobj_idの同一バージョンが含まれるかどうかを判定する。そうである場合には、コピーを行う必要はなく、処理はステップ2010に継続する。そうでない場合には、ステップ2130で、from_cache_idにobj_idの最新バージョンが含まれるかどうかを判定する。そうである場合には、ステップ2140で、オブジェクトをto_cache_idのオブジェクト記憶域132にコピーし、ディレクトリ130を更新する。to_cache_idのディレクトリ130にobj_idのOIB10’が存在しない場合には、これを作成する。以前にobj_idのどのバージョンもto_cache_idに含まれたことがない場合には、obj_idのstorage_list163にto_cache_idを追加する。ステップ2170で、consistency_list169にある現行でないオブジェクトのうち、obj_idのDIBのtimestamp162より前のOIBのtimestamp142を有するオブジェクトのすべてを、更新または無効化することよって、一貫性を保つ。そうではなく、ステップ2130の結果が否定の場合には、ステップ2150で、(1)obj_idのconsistency_list169に含まれるオブジェクトのうちで、現行でないバージョンがto_cache_idに格納されているオブジェクトのすべてが、from_cache_idにあるobj_idのバージョンのtimestamp142と同一のtimestamp142を有し、(2)obj_idのconsistency_list169に含まれるオブジェクトのうちで、現行バージョンがto_cache_idに格納されているオブジェクトのすべてが、from_cache_idにあるobj_idのバージョンのtimestamp142と同一かこれより以前のtimestamp142を有する場合でなければ、オブジェクトのコピーは許可されない。この両方の条件が満たされる場合には、ステップ2160で、obj_idがfrom_cache_idからto_cache_idにコピーされる。
【0120】
to_cache_idのディレクトリ130内にobj_idのOIB10’が存在しない場合には、これを作成する。以前にobj_idのどのバージョンもto_cache_idに含まれたことがない場合には、obj_idのstorage_list163にto_cache_idを追加する。
【0121】
API copy_objectおよびcache_latest_versionに対する簡単な拡張は、一貫性リストの他のオブジェクトも更新を必要としている場合に、オブジェクトが格納されないようにするフラグである。もう1つの簡単な拡張は、キャッシュにobject_idのどのバージョンも含まれたことがない場合に、キャッシュにobject_idを置くだけの追加フラグである。
【0122】
もう1つの簡単な拡張は、オブジェクト・マネージャがオブジェクトの以前のバージョンのすべてを維持するシステムである。この場合、特定の(object_id,version_num)対によって識別される特定のオブジェクトをキャッシュに追加するためのAPIを有することができる。
【0123】
オブジェクトは、API呼出しdelete_object(obj_id,cache)187を介してキャッシュから削除される。当業者であれば、この詳細な説明に従ってこの関数を実施することが簡単であることを諒解するであろう。このAPI呼出しによって実行される機能の例が、obj_idによって識別されるオブジェクトのDIB128(図21)のstorage_list163からのcacheの除去である。
【0124】
基礎データの値を変更するアプリケーション・プログラムは、オブジェクト・マネージャに知らせなければならない。これを達成するための2つのAPI呼出しが、object_has_changed(obj_id)188(obj_idパラメータでグラフ・オブジェクトを識別する)と、objects_have_changed(list_of_objects)189(list_of_objectsパラメータにグラフ・オブジェクト(へのポインタ)のリストが含まれる)である。
【0125】
list_of_objectsの複数のグラフ・オブジェクトが、共通の他の多数のグラフ・オブジェクトに影響する場合には、リストのグラフ・オブジェクトごとに1回ずつobject_has_changed APIを呼び出すよりも、objects_have_changed APIの方が効率的である。
【0126】
図26は、API objects_have_changed(list_of_objects)189の例を示す図である。当業者であれば、この図から、API object_has_changed(obj_id)の実装が簡単であることを諒解するであろう。
【0127】
説明を簡単にするために、list_of_objectsの各要素がGの有効なノードに対応し、list_of_objectsの2つの要素が同一のノードを参照することがないと仮定する。詳細な説明から、これがあてはまらない状況にこの関数を適合させるのは簡単である。図からわかるように、ステップ2400で、カウンタnum_updates125(図16)を1つだけ増分する。ステップ2402で、list_of_objectsパラメータによって指定されたグラフ・オブジェクトに対応するノードのすべてを訪れたかどうかを判定する。そうである場合には、ステップ2403で、更新伝播段階(図27参照)に進み、ステップ2404で、一貫性検査段階(図31参照)に進む。そうでない場合には、ステップ2405で、list_of_objectsのグラフ・オブジェクトに対応する新しいノードに進む。obj_idが、そのノードのobject_id160であるものとする。オブジェクト・マネージャは、obj_idのDIB128(図21)のversion_num161を1つだけ増分し、timestamp162フィールドにnum_updates125の値をセットする。ステップ2406とステップ2408は、obj_idを含むキャッシュc1(storage_list163から取得する)のそれぞれに、obj_idのバージョンを更新または無効化するように通知するループを表す。ステップ2406で、関数update_or_invalidate(c1,obj_id)(図30参照)を呼び出して、これを行う。
【0128】
当業者であれば、obj_idのコピーを更新または無効化しなければならないキャッシュをステップ2406で決定する際に、選択性を適用することが単純であることを諒解するであろう。
【0129】
図30は、update_or_invalidate(cacheid,objectid)のロジックの例を示す図である。これは、現在cacheidにあるobjectidのバージョンを更新または無効化しなければならない時(たとえば図26のステップ2406)に必ず呼び出される。図からわかるように、ステップ2407で、objectidをcacheid内で更新しなければならないかどうかを判定する。回答が否定の場合、ステップ2440でキャッシュからobjectidを無効化し、ステップ2441でこの手順はリターンする。回答が肯定の場合、ステップ2442で、objectidのOIB10’(図19)に対して以下の変更を行う。
1.version_num141フィールドとtimestamp142フィールドに、DIB128(図21)に含まれる現行のversion_num161とtimestamp162をセットする。
2.actual_weight143に、DIBのsum_weight167をセットする。
3.dep_list144(図20)を更新する。dep_list144の各メンバは、objectidによって識別されるオブジェクトに対する依存性を有するグラフ・オブジェクトo2に対応する。weight_act152が、Gの同一の辺に対応するDIB128(図21)のweight165と異なる場合には、weight_act152にこのweight165をセットする。さらに、version_num153が、o2のDIBに含まれるversion_num161と異なる場合には、version_num153にこのversion_num161をセットする。
【0130】
ステップ2444で、オブジェクト記憶域132に格納されたobjectidの実際の値を更新する。まず、DIB128(図21)のlatest_object1601フィールドからobjectidの更新されたバージョンの取得を試みる。これに成功した場合、ステップ2444は終了である。これに失敗した(すなわち、このポインタがnullである)場合、たとえばobjectidの新バージョンを完全に計算するか、一部だけを再計算し、新しい部分を既存のバージョンの他の部分と合併するかのいずれかなどによって、objectidの更新されたバージョンを計算する。後者の計算は、しばしば前者より効率的である。どちらの場合でも、オブジェクト・マネージャは、DIBのlatest_object1601フィールドを更新し、その結果、objectidの最新バージョンを必要とする他のキャッシュが、それを再計算する代わりに単純にコピーできるようにするという選択肢を有する。
【0131】
いくつかの場合では、ステップ2444で、objectidの後のバージョン、好ましくは、実際には現行でない簡単にアクセスできる最終バージョン(一般に、最も高いversion_num141を有するキャッシュ記憶されたバージョン)を用いて、objectidの実際の値を更新することができる。これは、objectidの現行値の計算が、非現実的に高コストの場合に有利である。このタイプの更新は、以下のどちらかが真の場合には許可されないことが好ましい。
1.objectidが、objects_have_changed(list_of_objects)に渡されるリストに含まれるオブジェクトの1つであるか、
2.objectidの後のバージョンでも、actual_weight143<threshold_weight168である。
【0132】
ステップ2443で、cacheidによって識別されるキャッシュに含まれる、consistency_list169のオブジェクトごとに、(object_id160,cache_id)対を一貫性スタック128.5(図16)に追加する。オブジェクト・マネージャ120は、一貫性スタック128.5上のキャッシュ記憶された項目のすべてが一貫性を有することを、一貫性検査段階(図31)で確認する。
【0133】
一貫性スタックは、複数の形で実施することができるが、可能な2つの構造が、リストと平衡木(balanced trees)である(参考文献、エイホ(Aho)、ホップクロフト(Hopcroft)、ウルマン(Ullman))。リストには、挿入が一定時間で行えるという長所がある。短所は、項目の重複したコピーが存在する可能性があることである。木には、重複した項目を格納する必要がないという長所がある。短所は、nが一貫性スタックの項目数であるとして、挿入時間がO(log(n))になることである。
【0134】
ステップ2443では、任意選択として、一貫性スタックにオブジェクトを追加する前に、さらに選択性を適用することができる。object_id2が、cacheid内のconsistency_list169に含まれるオブジェクトであるものとする。cacheidにobject_id2の現行バージョンが含まれる場合、(object_id2,cacheid)を一貫性スタックに追加する必要はない。このバージョンが現行バージョンであるのは、以下の両方が真の場合である。
1.object_id2に対応する頂点に、objects_have_changed(list_of_objects)189への現在の呼出しの処理中にすでに訪れている。これが真になるのは、object_id2のDIB128(図21)のtimestamp162がnum_updates125と等しい場合だけである。
2.OIB10’(図19)のversion_num141とobject_id2のDIBのversion_num161が同一である。
【0135】
ステップ2443で、(1)と(2)の両方が真であると判定された場合には、(object_id2,cacheid)は、一貫性スタックに追加されない。(1)が真だが(2)が偽の場合、ステップ2443で、object_id2とcacheidに対してupdate_or_invalidateを再帰的に呼び出すことができ、これによって、(object_id2,cacheid)を一貫性スタックに追加する必要がなくなる。
【0136】
当業者は、この説明から、ステップ2442、2443および2444を任意の順序または並列に実施することが簡単にできるはずである。
【0137】
図27は、objects_have_changed(list_of_objects)189の更新伝播段階の例を示す図である。ステップ2403および2416によって実行される基本的な機能は、list_of_objectsからアクセスできるグラフGのすべての辺をトラバースすることである。好ましい技法は、深さ優先探索(「dfs」)(参考文献、エイホ(Aho)、ホップクロフト(Hopcroft)、ウルマン(Ullman))に類似の技法である。しかし、当業者であれば、幅優先探索などの他のグラフ・トラバース法と共に機能するように技法を適合させることが簡単にできるはずである。
【0138】
図28は、基礎データに対する変更に応答して、深さ優先の形(dfs)でオブジェクト依存性グラフを介して変更を伝播するための方法の一部の例を示す図である。第1のノードobj1から第2のノードobj2への辺をトラバースした直後であると仮定する。ステップ2416では、ノードobj2を訪れたことがあるかどうかを判定する。回答が肯定になるのは、obj2のtimestamp162(図21)=num_updates125(図16)の場合に限る。
【0139】
ステップ2416の結果が真の場合、処理はステップ2412に継続する。このステップは、storage_list163(図21)に含まれるすべてのキャッシュを検査して、そのキャッシュにobj2のコピーが含まれるかどうかを調べるループの一部である。各オブジェクトは、object_idフィールドとversion_numberフィールドを有することが好ましいことを想起されたい。object_idフィールドは、アプリケーション・プログラムがオブジェクトを識別するのに使用するもの(たとえばURL)に対応するが、version_numberフィールドは、同一のobject_idを有する複数のオブジェクトを維持し、一意に識別するのに使用される。ステップ2420で、そのようなキャッシュcacheidのそれぞれについて、OIB10’(図19)のversion_num141とDIB128(図21)のversion_num161を比較することによって、obj2のバージョンが現行であるかどうかを判定する。ステップ2420の結果が肯定の場合、ステップ2421で、obj2のdep_list144上で、obj1に対応する要素が、obj1のDIBのversion_num161と等しいversion_num153を有するようにする。
【0140】
ステップ2420の結果が否定の場合、すなわち、obj2のバージョンが現行でない場合には、関数decrease_weight(cacheid,obj1,obj2)を呼び出す(図29参照)。各辺に、データ依存性の重要さを表す、重みと称する負でない数を関連付けることができることを想起されたい。たとえば、大きい数で重要な依存性を表し、小さい数で重要でない依存性を表すことができる。また、オブジェクトに、threshold_weight(閾重み)と称する値を関連付けることもできることを想起されたい。現行の入方向のデータ依存性に対応する重みの合計がthreshold_weight未満になった時には必ず、そのオブジェクトは非常に古いとみなされる。このようなオブジェクトは、最近のバージョンのオブジェクトを必要とするアプリケーションのために更新または無効化しなければならない。
【0141】
ステップ2416の結果が偽の場合、ステップ2423で、obj2のversion_num161を増分し、timestamp162にnum_updates125(図16)をセットして、obj2に訪れたことを示す。ステップ2424は、storage_list163上のすべてのキャッシュを検査して、そのキャッシュにobj2のコピーが含まれるかどうかを調べるループの一部である。そのようなキャッシュcacheidのそれぞれについて、ステップ2425で、関数decrease_weight(cacheid,obj1,obj2)を呼び出す。このループを抜けた後に、ステップ2426で、obj2から出る辺のすべてに対して再帰的にdfsロジック(図28)を呼び出す。
【0142】
図29は、decrease_weight(cacheid,from_obj,to_obj)のロジックの例を示す図である。図からわかるように、ステップ2425で、to_objのactual_weight143をwだけ減分する。このwは、from_objからto_objへの辺に対応するweight_act152である。ステップ2435で、actual_weight143<threshold_weight168であるかどうかを判定する。回答が肯定の場合、関数update_or_invalidate(cacheid,to_obj)を呼び出す。回答が否定の場合、ステップ2436で、from_objからto_objへの辺に対応するweight_act152に、0をセットする。
【0143】
更新伝播段階の後に、オブジェクト・マネージャは、consistency_list169が実際に一貫性を有するようにしなければならない。これは、図31に示された一貫性検査段階で行われる。図からわかるように、ステップ2404は、一貫性スタック128.5(図16)内の対(object_id160,cache_id135)のそれぞれを調べるループの一部である。そのような対のそれぞれについて、ステップ2451で、version_num141とversion_num161を比較することによって、キャッシュcache_id内のobject_idのバージョンが現行であるかどうかを判定する。回答が肯定の場合、処理はステップ2404に戻る。そうでない場合には、オブジェクトの更新または無効化のいずれかを行わなければならない。ステップ2455で、オブジェクトを更新するかどうかを判定する。回答が否定の場合、前に説明したステップ2440(図30)でオブジェクトを無効化する。回答が肯定の場合、前に説明したステップ2050(図24)で最新の値をキャッシュに追加し、やはり前に説明したステップ2060(図24)で、新しい一貫性の制約を満足させる。ステップ2050とステップ2060の順序は、この実施例の正しさにとって特に重要ではない。
【0144】
もう1つのAPIであるupdate_cache(cache)193は、キャッシュ内のすべての項目を現行にするAPIである。これは、キャッシュ内のすべてのオブジェクトのOIBを調べ、古い項目を無効化または更新することによって行われる。すべてのオブジェクトが現行になり、したがって、この関数の完了後には一貫性が保たれているので、一貫性リストは無視される。
【0145】
関係
本発明は、関係データベース(メルトン(J.Melton)およびサイモン(A.R.Simon)共著「Understanding the New SQL: A Complete Guide」、Morgan Kaufmann刊、1993年を参照)の一部とすることのできるレコード(このレコードは、好ましい実施例に使用されるレコードと同義ではない)を処理するための特殊な特徴を有する。
【0146】
たとえば、関係rel_nameが、どちらもinteger型の属性age(年齢)およびweight(体重)を有すると仮定する。以下では、rel_name(age=25、weight=34)が単一レコードを表し、rel_name(age=25)が、複数レコード指定子(MRS)であり、rel_nameに属しage=25であるすべてのレコードを表す。
【0147】
本発明は、単一レコードまたは複数レコードのいずれかに対応するオブジェクトを管理できるようにする特徴を有する。このようなオブジェクトを、関係オブジェクトと称する。単独のオブジェクトが、同一の関係からの複数のレコードを表すことができる。このようなオブジェクトを、複数レコード・オブジェクト(MRO)と称し、単一のレコードに対応するオブジェクトを、単一レコード・オブジェクト(SRO)と称する。関係オブジェクトobj2に対応するレコードのセットが、MROであるobj1に対応するレコードのセットのサブセットである場合に、obj1にobj2が含まれる。オブジェクト・マネージャは、関係オブジェクトからそれを含むMROへの依存性を自動的に追加する。
【0148】
オブジェクト・マネージャは、複数レコード・ツリー(MRT)122と称する平衡木を維持する。このMRT122には、GのすべてのMROノードへのポインタが含まれ、MRT122は、DIB128(図21)のrelational_string1602によってアルファベット順にインデクシングされる。単一関係木(SRT)と称する平衡木には、GのすべてのSROノードへのポインタが含まれ、SRTも、DIBのrelational_string1602によってアルファベット順にインデクシングされる。この説明から簡単に実施できる代替アプローチは、単一関係と複数関係の両方のための単独の平衡木を維持することである。もう1つの変形は、この情報を維持するために平衡木以外のデータ構造を使用することである。
【0149】
本発明によれば、関係オブジェクトを作成する前に、API define_relation(relation_name,list_of_attributes)194を介してオブジェクト・マネージャに対して関係を識別しなければならない。
【0150】
引数list_of_attributesの各要素は、属性の名前と型を含む対である。API define_relation(relation_name,list_of_attributes)194では、関係に関する情報が、関係情報区域129(図16)に格納される。
【0151】
図32は、単一レコード・オブジェクト(SRO)に対応するノードを作成するためのロジックの例を示す図である。単一のレコードに対応するオブジェクトを、単一レコード・オブジェクト(SRO)と称することを想起されたい。単一関係木(SRT)と称する平衡木には、GのすべてのSROノードへのポインタが含まれ、SRTは、DIB(図21)のrelational_string1602によってアルファベット順にインデクシングされる。SROに対応するノードは、API create_sro_node(obj_id,initial_version_num,thresh_weight,relation_name,list_of_attribute_values)190(図22)を介して作成される。図32を参照すると、ステップ2300で、すべての入力パラメータが有効であるかどうか(たとえば、正しい型であるかどうかなど)を判定する。関係情報区域129を調べることによって、関係「relation_name」が以前にdefine_relation(relation_name,list_of_attributes)194を介して定義されたことを検証する。list_of_attribute_valuesに正しい個数の値が含まれ、すべての値が正しい型であることも検証する。obj_idのノードまたは同一レコードに対応するノードがまだ存在しないことも検証する(obj_idのノードがすでに存在する場合に、古いノードを上書きするように設計を変更することは簡単である。同一のobj_idを有する複数のノードが存在可能になるように設計を変更することも簡単である。同一レコードに対応する複数のノードを許容することも簡単である)。すべてのパラメータが有効であると判定された場合、処理はステップ2305に継続する。そうでない場合には、create_sro_nodeは、ステップ2320で適当な状況メッセージを返す。
【0152】
ステップ2305では、object_id160にobj_idをセットし、version_num161にinitial_version_numをセットし、threshold_weight168にthresh_weightをセットし、relational_string1602に、属性値のすべてを連結されたrelation_nameをセットすることによって初期設定を行い、Gに新しいノードを作成する。relational_string1602を構成する関係と属性値は、区切り文字によって分離されることが好ましい。そうすれば、関係と属性値のそれぞれを、relational_string1602から簡単に識別できるようになる。multiple_records1603(図21)フィールドには偽をセットする。ステップ2310で、ノードへのポインタをSRTに追加する。SRTでの新しいポインタの位置は、relational_string1602から決定される。ステップ2315で、obj_idからそれを含む複数レコード・オブジェクト(MRO)のそれぞれへの依存性を追加する。このようなMROは、MRT122を調べることによって見つかる。MRTは、GのすべてのMROノードへのポインタを含む平衡木であることが好ましく、DIB128(図21)のrelational_string1602によってアルファベット順にインデクシングされる。relation_nameに関するMROを調べることだけが必要である。そのようなMROは、MROの総数をn、relation_nameに関するMROの数をmとして、O(log(n)+m)命令ですべてを識別できる。
【0153】
obj_idを含むMRO「obj2_id」のそれぞれについて、obj_idからobj2_idへの依存性を作成する。図21を参照すると、依存性は、obj2_idのmro_dep_weight1604の重みを用いて初期設定されることが好ましい。obj2_idのthreshold_weight168は、obj2_idのmro_threshold_increment1605だけ増分される。このアルゴリズムの簡単な拡張は、依存性に重みを割り当て、threshold_weight168を変更するのに他の技法を使用することである。図32に戻って、ステップ2320で、この処理は状況メッセージを返す。ステップ2305、2310および2315の順序は、変更することができる。さらに、これらのステップは、並行に実行することができる。
【0154】
図33は、複数レコード・オブジェクト(MRO)を作成するためのロジックの例を示す図である。MROは、API create_mro_node(obj_id,initial_version_num,thresh_weight,relation_name,list_of_attribute_conditions,rel_default_weight,rel_default_threshold)191を介して作成され、list_of_attribute_conditionsの属性条件は、「=25」、「>96」、「>45 and <100」などの形式である。属性条件は、nullとすることもでき、これは、属性値に対する制約がないことを意味する。
【0155】
単独のオブジェクトが、同一の関係からの複数のレコードを表すことができることを想起されたい。このようなオブジェクトを、複数レコード・オブジェクト(MRO)と称し、単一のレコードに対応するオブジェクトを、単一レコード・オブジェクト(SRO)と称する。関係オブジェクトobj2に対応するレコードのセットが、MROであるobj1に対応するレコードのセットのサブセットである場合に、obj1にobj2が含まれる。オブジェクト・マネージャは、関係オブジェクトからそれを含むMROへの依存性を自動的に追加する。オブジェクト・マネージャは、MRT122と称する平衡木を維持することが好ましく、このMRT122には、GのすべてのMROノードへのポインタが含まれ、DIB128(図21)のrelational_string1602によってアルファベット順にインデクシングされる。単一関係木(SRT)と称する平衡木には、GのすべてのSROへのポインタが含まれ、SRTも、DIBのrelational_string1602によってアルファベット順にインデクシングされる。
【0156】
図からわかるように、ステップ2600で、すべての入力パラメータが有効である(たとえば、正しい型であるなど)かどうかを判定する。さらに、関係情報区域129(図16)を調べることによって、関係「relation_name」が以前にdefine_relation(relation_name,list_of_attributes)194への呼出しを介して定義されたことを検証する。また、list_of_attribute_conditionsが有効であることと、obj_idのノードまたは同一セットのレコードに対応するノードがまだ存在しないことも検証する。当業者であれば、obj_idのノードがすでに存在する場合に、古いノードを上書きするように設計を変更することが簡単であることを諒解するであろう。また、同一のobj_idを有する複数のノードが存在できるように設計を変更することも簡単である。また、同一セットのレコードに複数ノードが対応することを可能にすることも簡単である。ステップ2600の結果、全パラメータが有効であると判定された場合には、処理はステップ2605に継続する。そうでない場合には、create_mro_nodeは、ステップ2620で、適当な状況メッセージを返す。
【0157】
ステップ2605では(図21も参照されたい)、object_id160にobj_idをセットし、version_num161にinitial_version_numをセットし、threshold_weight168にthresh_weightをセットし、relational_string1602に、属性条件のすべてを連結されたrelation_nameをセットすることによって初期設定を行い、G(図22)に新しいノードを作成する。relational_string1602を構成する関係と属性条件は、すべてが区切り文字によって分離される。この形で、関係と属性条件のそれぞれをrelational_string1602から簡単に識別できるようになる。multiple_records1603フィールドには真をセットし、mro_dep_weight1604にはrel_default_weightをセットし、mro_threshold_increment1605にはrel_default_thresholdをセットする。
【0158】
ステップ2610で、ノードへのポインタをMRTに追加する。MRTでの新しいポインタの位置は、relational_string1602によって決定される。ステップ2615では、ステップ2315と同一の形で、obj_idからそれを含むMROのそれぞれへの依存性を追加する。
【0159】
obj_idに含まれるオブジェクトobj2_idのそれぞれについて、ステップ2625で、obj2_idからobj_idへの依存性を追加する。このような依存オブジェクトは、MRT122とSRT123の両方を検索し、relation_nameに関する他のすべての関係オブジェクトを検討することによって見つかる。依存性のそれぞれに、obj_idのmro_dep_weight1604の重みを割り当てる。このような依存性のそれぞれについて、obj_idのthreshold_weight168を、obj_idのmro_threshold_increment1605だけ増分する。当業者であれば、依存性への重みの割り当てとthreshold_weight168の変更に他の技法を使用できることを諒解するであろう。ステップ2620で、create_mro_nodeは状況メッセージを返す。ステップ2605、2610、2615および2625の順序は、変更することができる。さらに、これらのステップは、並行に実行することができる。
【0160】
その代わりに、関係オブジェクトobj1からそれを含むMRO obj2への依存性の重みを、obj1にも含まれるobj2に対応するレコードの比率と重要さに基づくものとすることができる。この変形は、ステップ2315、2615または2625に適用することができる。もう1つの代替案は、2つのMROのどちらもが他方のサブセットではないが、2つのMROが1つまたは複数の共通のレコードを有する時に、このMROの間に選択的に依存性を追加することである。
【0161】
図21に戻って、当業者は、本発明の趣旨および範囲の中で、関係オブジェクトがcreate_sro_node(obj_id,initial_version_num,thresh_weight,relation_name,list_of_attribute_values)190またはcreate_mro_node(obj_id,initial_version_num,thresh_weight,relation_name,list_of_attribute_conditions,rel_default_weight,rel_default_threshold)191を介して定義された後に、そのオブジェクトのrelational_string1602、multiple_records1603、mro_dep_weight1604およびmro_threshold_increment1605を変更するためのAPIを追加できることを諒解するであろう。
【0162】
1つまたは複数のレコードが変更された時には、オブジェクト・マネージャは、API(図22)record_has_changed(relation_name,list_of_attribute_values)195およびrecords_have_changed(relation_name,list_of_attribute_conditions)196を介してその変更に関する通知を受けることができる。これらのAPIによって、依存性の階層全体に変更が自動的に伝播される。
【0163】
図34は、records_have_changed(relation_name,list_of_attribute_conditions)196APIを実施できる方法の例を示す図である。当業者であれば、この図からrecord_has_changed(relation_name,list_of_attribute_values)195APIを実施することが簡単であることを諒解するであろう。
【0164】
図からわかるように、ステップ2700で、入力パラメータが有効であるかどうかを判定する。また、関係情報区域129(図16)を調べることによって、関係relation_nameが以前に(define_relation(relation_name,list_of_attributes)194API(図22)への呼出しを介して)定義されたことを検証する。また、list_of_attribute_conditionsが有効であることも検証する。入力パラメータが有効である場合には、処理はステップ2710に進む。そうでない場合には、ステップ2730で、適当な状況メッセージを返してこの手順を打ち切る。
【0165】
ステップ2710で、変更されたレコードを少なくとも1つ含む関係オブジェクトをすべて見つける。これは、relation_nameに対応するMRT122およびSRT123(図16)にある関係オブジェクトのすべてを調べることによって行われる。ステップ2720で、ステップ2710で識別された全オブジェクトのリストに対してobjects_have_changed(list_of_objects)189を呼び出すことによって、Gの他のノードに変更を伝播することができる。
【0166】
最後に、ステップ2730で、records_have_changedが適当な状況メッセージを返す。
【0167】
records_have_changed APIの簡単な変形は、変更情報をG全体に伝播する方法を決定する際に、関係オブジェクトの変更されたレコードの比率と重要さを検討することである。
【0168】
API compare_objects(obj_id,cache_id1,cache_id2)192(図22)は、cache_id1とcache_id2にあるobj_idのバージョンがどれほど似ているかを判定するのに使用することができる。たとえば、2つのバージョンが同一であるかどうかを調べるために、version_num141を比較することができる。これらが異なる場合には、たとえばversion_num141とtimestamp142(図19)の差によって、どちらのオブジェクトが他方よりどれほど新しいかを示すことができる。
【0169】
オブジェクトの2つのバージョンが異なる場合、0(似ていない)以上1未満(1は同一のバージョンに対応する)の範囲の類似性スコアを計算することができる。類似性スコアは、cache_id1内のobj_idとの一貫性を有するobj_id2のバージョンが、cache_id2内のobj_idとの一貫性を有するobj_id2のバージョンと同一であるグラフ・オブジェクトobj_id2からobj_idに入る方向の依存性の重さの合計に基づくことが好ましい。類似性スコア(SS)は、次式を使用して計算できる。
SS=common_weight/sum_weight167
ただし、common_weightは、グラフ・オブジェクトobj_id2からobj_idへの辺に対応するweight165のうちで、その辺に対応するversion_num153がobj_idの両方のバージョンと同一であるものの合計である。compare_objectsのロジックは、2つのバージョンが非常に異なるか否かの判定にも使用することができる。2つのバージョンが非常に異なるのは、common_weight<threshold_weightの場合に限られる。
【0170】
拡張
本発明の簡単な拡張は、OIB(図19)にthreshold_weightフィールドを含め、このフィールドと独立にキャッシュ2’(図18)を設定させることである。もう1つの簡単な拡張は、異なるキャッシュに対応する同一のオブジェクトのために異なる一貫性リストを使用可能にすることである。
【0171】
もう1つの拡張は、グラフ・オブジェクトobj1から別のグラフ・オブジェクトobj2への、異なる重みを有する複数の依存性が存在可能なシステムである。アプリケーション・プログラムは、これらの複数の依存性を独立に変更できる。
【0172】
もう1つの拡張は、オブジェクトが古くなった時を、オブジェクトへの古いリンクに基づいて判定するために他のアルゴリズムを使用することである。
【0173】
グラフ・オブジェクトが変更された時には、好ましい実施例では、依存性グラフGを介してその情報を伝播する時に、グラフ・オブジェクトがどのように変化したかを考慮していない。グラフ・オブジェクトが変更されたという事実だけを考慮に入れている。もう1つの拡張は、他のグラフ・オブジェクトに変更を伝播するために、グラフ・オブジェクトがどのように変更されたかを検討することである。これは、次の形で実行できる。
1.object_has_changedなどの関数へのパラメータを介して、グラフ・オブジェクトがどのように変更されたかに関する追加情報を提供することによって実行する。この情報は、グラフ・オブジェクトからその値に依存する他のグラフ・オブジェクトへのリンクを変更するのに使用され、その後、そのグラフ・オブジェクトを継承するオブジェクトがどのように変更されたかを判定するのに使用される。
2.オブジェクト・マネージャ120は、グラフ・オブジェクトo2が変更されたと判定した時に、その親のうちのどれが変更されたかと、親がどのように変更されたかについて再帰的に収集された情報との両方を検討することができる。その後、オブジェクト・マネージャは、この情報を使用して、o2がどのように変更されたかを判定する。o2がどのように変更されたかに関する情報は、o2に依存する他のグラフ・オブジェクトへのリンクの変更に使用され、その後、o2を継承するオブジェクトがどのように変更されたかの判定に使用される。
【0174】
たとえば、図35を検討する。u2とu3は、変更された基礎データである。オブジェクト・マネージャは、この変更情報をo1とo3に伝播する。オブジェクト・マネージャは、変更情報をo2に伝播する時に、o2のキャッシュ記憶されたコピーを更新または無効化する方法を決定する上で、o1およびo3からo2への辺の重みだけを検討するのではなく、u2、u3、o1およびo3に対する変更の性質も検討する。この情報は、o4のキャッシュ記憶されたバージョンを更新または無効化する方法を決定するのにも使用できる。
【0175】
他の応用分野
本発明は、基礎データを更新するか否かをアプリケーションが決定しなければならないシステムでも使用することができる。オブジェクト依存性グラフを調べることによって、そのシステムは、基礎データに対する変更によって影響を受ける他のオブジェクトを判定することができる。この集合が満足であれば、変更を行うことができる。そうでない場合には、そのシステムは、基礎データに対する変更を止めることもできる。
【0176】
当業者であれば、動作を効率的にスケジューリングするために、コンパイラ、実行時システムまたはデータベースによって本発明を使用することもできることを諒解するであろう。異なるスケジュールは、基礎データに対する異なる変更をもたらす可能性がある。オブジェクト依存性グラフを分析することによって、スケジューリングの決定を行うプログラムが、動作をスケジューリングするのに好ましい方法を判定できるようになる。
【0177】
キャッシュを維持し、一貫性のある形で更新するためのスケーラブルな方法の詳細な説明
本発明のこの実施例は、ネットワークによって接続された1つまたは複数の物理(コンピュータ)システムの集合に対して機能するように設計されている。このシステムの集合には、本発明の複数の実体が常駐する可能性がある。本発明の複数の実体を区別するための案内として、以下に用語の定義を示す。
【0178】
オブジェクト・ソース。オブジェクト・ソースには、IBM社が商標DB2の下で販売する製品や、Lotus社が商標LOTUS NOTESおよびDOMINO Serverの下で販売する製品などの1つまたは複数の製品と、より複雑なオブジェクト(HTMLページなど)を構築するデータまたはオブジェクトを含む他のソース3030が含まれる。
【0179】
トリガ。データの変更に応答して動作を自動的に発生させるのに使用することのできる手段。トリガは、IBM社が商標DB2の下で販売するものやLotus社が商標LOTUS NOTESおよびDOMINO Serverの下で販売するものなどの多数の標準的なオブジェクト・ソースの、データの変更に応答して自動的に動作を発生させるための標準の特徴である。本発明の1実施例では、新規の形でトリガを使用して、オブジェクト・ソースに格納されたデータから構築されるオブジェクトを、データと同期した状態に保つ。
【0180】
トリガ通知。これは、オブジェクト・ソース内で呼び出されたトリガに応答して本発明に送られるメッセージである。
【0181】
キャッシュ・トランザクション。キャッシュ・オブジェクトの読取、更新または削除のためのキャッシュ・マネージャに対する要求を含む。
【0182】
トリガ・モニタ。キャッシュ・マネージャによって管理されるキャッシュ内のオブジェクトを、関連する遠隔データと同期した状態に保つための、本発明によるロジックの例。トリガ・モニタは、キャッシュ・マネージャによって管理されるキャッシュに格納された複合オブジェクトを基礎データと同期した状態に保つ目的で遠隔データ・ソースを監視する、長期間走行する単一のプロセスとすることができる。
【0183】
マスタ・トリガ・モニタ。これは、トリガ・モニタのインスタンスのうちで、トリガ通知を受け取るインスタンスである。
【0184】
スレーブ・トリガ・モニタ。これは、トリガ・モニタのインスタンスのうちで、マスタ・トリガ・モニタ3000’からトリガ通知を転送される(すなわち、オブジェクト・ソースから直接ではなく)インスタンスである。
【0185】
局所キャッシュ。これは、そのキャッシュ自体と同一の物理計算機上に常駐するトリガ・モニタのインスタンスによって更新されるキャッシュ(または、ファイル・システムなどの他の標準的なオブジェクト記憶域)である。
【0186】
遠隔キャッシュ。これは、そのキャッシュ自体とは異なる物理計算機上に常駐するトリガ・モニタのインスタンスによって更新されるキャッシュ(または、ファイル・システムなどの他の標準的なオブジェクト記憶域)である。
【0187】
本発明は、マスタ・トリガ・モニタ3000’(トリガ・イベントを受け取る場合)およびスレーブの遠隔トリガ・モニタ3000a(あるマスタからトリガ・イベントの通知を受け取る場合)の両方の役割を演じることが可能である。
【0188】
ここで図面を参照すると、図36は、本発明の特徴を有するシステムの例のブロック図である。図からわかるように、このシステムには、(1つまたは複数の)遠隔ノード3108が含まれる。遠隔ノード3108は、ウェブ・サーバ(httpd3080)を介してクライアントにウェブ・ページを供給するサーバとすることができる。各ウェブ・サーバは、データベース3010から構築される、かなりの比率のダイナミック・ウェブ・ページを供給することができる。そのようなサーバ100のそれぞれは、ウェブ・ページの生成に伴うコストが原因で、ダイナミック・ウェブ・ページなどの複合オブジェクトを含む1つまたは複数のオブジェクト3004をキャッシュ記憶する。同一のダイナミック・ページに関する複数の要求を、キャッシュ3003から満足することができ、したがって、オーバーヘッドが減る。
【0189】
サーバとして複数の遠隔ノード3108を使用すると、システムがサービスできる要求の量が増える。必須ではないが、サーバとしての遠隔ノード3108は、地理的に長距離の間隔を設けることができる。
【0190】
本発明によれば、データベース3010などのオブジェクト・ソースに対する変更が発生し、キャッシュ3003に格納されている1つまたは複数のオブジェクト3004の値に影響する可能性がある時には、トリガ・モニタ3000が、値を変更されたオブジェクトについてキャッシュ・マネージャ3001のそれぞれに通知する。トリガ・モニタ3000は、キャッシュ3003内のオブジェクト3004が変更されたことをキャッシュ・マネージャ3001に知らせることができる。この場合、キャッシュ・マネージャ3001は、そのオブジェクト3004のコピーを無効化することができる。その代わりに、トリガ・モニタ3000は、オブジェクト3004が変更されたことをキャッシュ・マネージャ3001に知らせ、オブジェクト3004の新しい値を供給することができる。当業者であれば、オブジェクト3004の新しい値を、データ・サーバ・ノード3102ならびに遠隔ノード3108またはプロキシ・ノードなどの他の中間ノードで計算できることを諒解するであろう。どちらの場合でも、キャッシュ・マネージャは、オブジェクト3004を無効化する必要なしに、たとえば新しいバージョンを格納するなど、オブジェクト3004を動的に更新するという選択肢を有する。
【0191】
図37は、トリガ・モニタ3000の詳細な例を示す図である。ここでは、トリガ・モニタ3000は、マスタ・トリガ・モニタ3000’としてインスタンス化されている。図からわかるように、複合オブジェクト3004sを含むキャッシュ3003の維持は、トリガ・モニタ3000と称する本発明によるプロセス(またはプロセスの集合)によって行われる。トリガ・モニタ3000は、キャッシュ・マネージャ3001の内容を基礎データと同期した状態に保つためにオブジェクト・ソース3050を監視する、長期間走行する単一のプロセスであることが好ましい。マスタ・トリガ・モニタ3000’は、トリガ・イベント3020を受け取るトリガ・モニタ3000のインスタンスである。マスタ・トリガ・モニタ3000’には、トリガ・モニタ・ドライバ3040、オブジェクトID分析(OIA)3041ロジック、オブジェクト・ジェネレータ3042ロジックおよび分配マネージャ3043が含まれる。
【0192】
マスタ・トリガ・モニタ3000’は、オブジェクト・ソース3050と、キャッシュ・マネージャ3001(局所キャッシュ・マネージャと称する)と、0個以上のスレーブ・トリガ・モニタ3000”(図38)および他の物理計算機に常駐する遠隔キャッシュ・マネージャ3002と共に動作する。オブジェクト・ソース3050には、1つまたは複数の実体、たとえば、IBM Corp.社が商標DB2の下で販売するものなどのデータベース3010や、より複雑なオブジェクト(HTMLページなど)を構築する、Lotus Corp.社が商標DOMINOの下で販売するサーバなどの他のソース3030が含まれる。
【0193】
オブジェクト・ソース3050が変更を検出した時に、トリガが呼び出される。トリガは、上記などの多数の標準的なオブジェクト・ソース3050の標準的な特徴であるが、通常は、データの変更に応答して動作を自動的に発生させるのに使用される。本発明は、新規の形でトリガを使用して、オブジェクト・ソースに格納されたデータから構築されるオブジェクト3004をデータと同期した状態に保つ。トリガに関連するのが、トリガ・モニタ・ドライバ3040へメッセージを送らせるAPI send_trigger3026(図39)である。これに応答して、トリガ・モニタ・ドライバ3040は、トリガ・イベント3020と称するトランザクション(図40)を生成することができる。
【0194】
トリガ・イベント3020は、(通常の手段によって)レコードID3012に変換でき、変換のためにキャッシュ・マネージャ3001に転送される。キャッシュ・マネージャ3001は、対応するオブジェクトID3009のリストを返し、このリストは、OIA3041へ待ち行列化される。OIA3041は、周知の手段によって、オブジェクトID3009ごとに1組のオブジェクト処置ブロック(ODB)3100(下で説明する)を生成する。
【0195】
図41は、ODB3100の例を示す図である。オブジェクトID3009は、後程オブジェクトを置換または削除する時に、キャッシュ3003内のオブジェクト3004の識別に使用される。キャッシュID3200は、オブジェクト3004が属するキャッシュ3003の識別に使用される。外部ID3101は、オブジェクト・ジェネレータ3042がオブジェクトを知るのに使用する可能性がある追加の識別子である。要求処置3103は、オブジェクト・ジェネレータがオブジェクト更新要求3022または遠隔オブジェクト削除要求3025(図40)を生成するのに使用する。要求処置3103がDispRegenerate3130である場合には、ODB3100によって表されるオブジェクト3004が、システムによって再生成され、分配される。要求処置3103がDispInvalidate3131である場合には、オブジェクト3004は、すべてのシステムから削除される。
【0196】
図42は、キャッシュID3200の例を示す図である。図からわかるように、キャッシュIDには、キャッシュ名3201、キャッシュ・ホスト3202の識別子およびキャッシュ・ポート3203の識別子が含まれることが好ましい。
【0197】
図37に戻って、ODB3100は、オブジェクト・ジェネレータ3042に送られる。オブジェクト・ジェネレータは、ODB3100を調べ、a)遠隔オブジェクト削除要求3025を生成するか、b)オブジェクト・ソース3050との接続を確立し、オブジェクト3004を再構築し、オブジェクト更新要求3022を作成するかのいずれかを行う。
【0198】
トリガ・モニタ・ドライバ3040は、遠隔オブジェクト削除要求3025またはオブジェクト更新要求3022を分配マネージャ3043に渡す。
【0199】
分配マネージャ3043は、構成された遠隔キャッシュ・マネージャ3002またはスレーブ・トリガ・モニタ3000”(図38)のそれぞれとの接続を確立し、要求のそれぞれを分配する。要求がトリガ転送要求3021の場合、その要求は、スレーブ・トリガ・モニタ3000”(図38)に送られる。要求がオブジェクト更新要求3022の場合、新しいオブジェクトが、cache_object(object_id,object,cache_id)410API(図6)を介してキャッシュ・マネージャ3001に送られる。要求が遠隔オブジェクト削除要求3025の場合、オブジェクト3004が、delete_object(object_id,cache_id)420API(図6)を介してキャッシュ・マネージャ3001から除去される。
【0200】
図38は、トリガ・モニタ3000のもう1つの例を示す図である。ここでは、トリガ・モニタ3000は、スレーブ・トリガ・モニタ3000”としてインスタンス化されている。マスタ・トリガ・モニタ3000’が、正確に1つのシステムを維持している場合、または、オブジェクト3004が、再生成される(すなわち、削除されない)場合には、図37で説明した処理を使用してこれを完全に維持することができる。トリガ・モニタ3000が複数のシステムを維持している場合には、オブジェクト3004が、すべてではなく一部のキャッシュに存在することが可能である。具体的に言うと、オブジェクト3004は、トリガ・イベント3020を受け取るトリガ・モニタ3000と同一のキャッシュ内に存在しない可能性がある。この場合を処理するために、スレーブ・トリガ・モニタ3000”(図38)が、構成されたノードのそれぞれで実行される。図からわかるように、スレーブ・トリガ・モニタ3000”は、トリガ転送要求3021を受け取る。これは、要求がオブジェクト・ジェネレータ3042に達するまでは、トリガ・イベント3020と同一の形で処理される。ODB3100が、DispRegenerate3130に等しい要求処置3103を有する場合、この要求は破棄される。要求処置3103がDispInvalidate3131である場合には、局所オブジェクト削除要求3023が構築され、スレーブの局所キャッシュに送られる。
【0201】
図38に戻って、トリガ・モニタ3000は、オブジェクト・ソース3050を監視する、単一の長期間走行するプロセスとして実施されることが好ましい。当業者であれば、コンポーネントごとに1つまたは複数のプロセスからなり、プロセスの一部が時間的に重なり合ってシステムのスループットが改善されるように本発明を適合させることが簡単にできるはずである。また、当業者は、基礎となるシステムがプロセスのスレッド化をサポートする場合に、単一プロセス内の複数のスレッドの動作を使用するように本発明を適合させ、各スレッドが1つまたは複数のコンポーネントを実装し、一部が時間的に重なり合うようにすることが簡単にできるはずである。
【0202】
トリガ・イベント3020およびトリガ転送要求3021を受け取って、これらの要求が、配布された後に完了までシステム内にとどまることをオブジェクト・ソース3050に保証するために、多相コミットや持続性データ・オブジェクトなどの通常の機構を使用することが好ましい。再試行や多相コミットなどの従来の機構を使用して、待ち行列化されたアウトバウンド要求(図40に示されたもの)が、完了までシステム内にとどまることの保証を提供することが好ましい。
【0203】
OIA3041は、オブジェクトID3009をODB3100(図41)に変換する。OIA3041は、構成オプションとして、APIとしてまたは他の標準的な方法で指定し、インターフェースすることができる。当業者は、このような機構を簡単に構築できるはずである。
【0204】
オブジェクト・ジェネレータ3042は、ODB3100の情報を、図40に示し下で説明するトランザクション・タイプに変換する。トリガ・モニタ3000は、構成オプション、APIまたは他の標準的な技法を使用して、このコンポーネントへのインターフェースを提供する。オブジェクト・ジェネレータ3042の例は、IBM社が商標NET.DATAの下で販売する製品、Lotus Corporation社が商標DOMINO Serverの下で販売する製品、または、HTMLページを取り出すことができるウェブ・サーバである。
【0205】
図39は、send_trigger APIの例を示す図である。図からわかるように、send_trigger3026を用いると、オブジェクト・ソース3050が、トリガ・モニタ・ドライバ3040と通信できるようになる。send_trigger3026は、トリガを一意に識別し、トリガ・イベント3020を構築するのに十分な情報(メッセージ・パラメータ)を含むメッセージを送る。当業者は、標準的な技法(可変長パラメータ・リストなど)を使用して、その情報を簡単に定義し、指定することができるはずである。
【0206】
図40は、本発明に従って使用されるトランザクション・タイプの例を示す図である。図からわかるように、複数のトランザクション3020から3025をシステム内で生成することができる。
【0207】
トリガ・イベント3020は、send_trigger3026を介して送られたメッセージの受取に応答して生成される。トリガ・イベント3020は、send_trigger3026によって送られたデータを1つまたは複数の依存オブジェクト表示要求3024に変換し、システムを介してそれ自体を正しく追跡し、案内するのに十分な情報を維持する構造体である。
【0208】
トリガ転送要求3021は、send_trigger3026を介して送られたトリガ・イベント3020の受取に応答して生成される。トリガ転送要求3021は、1つまたは複数の依存オブジェクト表示要求3024を生成し、システムを介してそれ自体を正しく追跡し、案内するのに十分な情報を維持する構造体である。
【0209】
オブジェクト更新要求3022は、新しいオブジェクトを分配マネージャ3043を介して遠隔キャッシュ・マネージャ3002へ配布させるためにオブジェクト・ジェネレータ3042が生成する。オブジェクト更新要求は、任意のキャッシュ3003内のオブジェクト3004を置換するのに十分な情報を維持する構造体である。
【0210】
局所オブジェクト削除要求3023は、キャッシュ3003にオブジェクト3004を削除させるためにオブジェクト・ジェネレータが生成する。局所オブジェクト削除要求3023は、キャッシュ・マネージャ3001からオブジェクト3004を削除するのに十分な情報を維持する構造体である。
【0211】
依存オブジェクト表示要求3024は、キャッシュ・マネージャ3001に依存性情報を要求するために、トリガ・イベント3020に応答してトリガ・モニタ・ドライバ3040が生成する。依存オブジェクト表示要求3024は、トリガ・イベント3020またはトリガ転送要求3021を分析し、show_dependent_objects(cache_id,record_id)460を呼び出してキャッシュ・マネージャ3001からオブジェクトID3009を取得するのに十分な情報を維持する構造体である。
【0212】
遠隔オブジェクト削除要求3025は、分配マネージャ3043を介してオブジェクト3004を遠隔キャッシュ・マネージャ3002から削除させるためにオブジェクト・ジェネレータ3042が生成する。遠隔オブジェクト削除要求3025は、任意のキャッシュ3003からオブジェクト3004を削除するのに十分な情報を維持する構造体である。
【0213】
図43および図44は、トリガ・モニタ・ドライバ3040と分配マネージャ3043の高水準の編成と通信経路の例を示す図である。好ましい編成は、独立に実行される複数のコントロールのスレッドからなる。
【0214】
受取側スレッド3300は、トリガ・イベント3020とトリガ転送要求3021を含む要求を受け取り、これらを持続性記憶域に保管する。入力作業ディスパッチャ・スレッド3320は、受取側スレッド3300からの入力要求を待機解除し、処理のため待ち行列化する。キャッシュ・マネージャ通信スレッド3340は、局所オブジェクト削除要求3023と依存オブジェクト表示要求3024を局所キャッシュ・マネージャ3060に送る。オブジェクト・ジェネレータ・スレッド3360は、オブジェクト要求すなわち、遠隔オブジェクト削除要求3025とオブジェクト更新要求3022の生成を調整し、分配のためこれらを待ち行列化する。分配スレッド3080(分配マネージャ3043の主要構成要素である)は、分配マネージャ待ち行列3370から要求を待機解除し、これらをアウトバウンド計算機のすべてに待ち行列化する。アウトバウンド・トランザクション・スレッド3395は、遠隔計算機にコンタクトし、計算機アウトバウンド待ち行列3390に待ち行列化された作業を転送する。
【0215】
通常通り、これらのスレッドは、複数のFIFO待ち行列すなわち、入力要求待ち行列3310、キャッシュ・マネージャ要求待ち行列3330、オブジェクト・ジェネレータ待ち行列3350、分配マネージャ待ち行列3370および計算機アウトバウンド待ち行列3390(分散キャッシュごとに1つ)を介して通信することができる。
【0216】
図45は、受取側スレッド3300のロジックの例を示す図である。図からわかるように、ステップ3410で、入力メッセージ(send_trigger3026またはトリガ転送要求3021のいずれか)がシステムに入り、トリガ・イベント3020に変換される。ステップ3420で、このメッセージが、受取側スレッド3300によって永続性待ち行列3450に書き込まれ、ステップ3430で、入力要求待ち行列3310に待ち行列化される。ステップ3440で、要求のタイプを検査する。要求がトリガ・イベント3020の場合、ステップ3460で、トリガ転送要求3021を分配マネージャ待ち行列3370に待ち行列化する。ステップ3490で、受取側スレッド3300は、作業の待機に戻る。
【0217】
図46は、入力作業ディスパッチャ・スレッド3320のロジックの例を示す図である。図からわかるように、ステップ3510で、入力作業ディスパッチャ・スレッド3320は、作業要求を待機解除する。ステップ3520で、依存オブジェクト表示要求3024を、キャッシュ・マネージャ要求待ち行列3330に待ち行列化する。ステップ3590で、受取側スレッド3300は、作業の待機に戻る。
【0218】
図47は、キャッシュ・マネージャ通信スレッド3340のロジックの例を示す図である。図からわかるように、ステップ3610で、キャッシュ・マネージャ通信スレッド3340が、次の要求を待機解除し、キャッシュ・マネージャ3001との通信を確立する。ステップ3023で、要求が局所オブジェクト削除要求である場合には、ステップ3650で、delete_object(object_id,cache_id)420を使用して、キャッシュ3003からオブジェクトを削除する。ステップ3024で、要求が依存オブジェクト表示要求である場合には、ステップ3620で、show_dependent_objects(cache_id,record_id)460を使用して、オブジェクトID3009を取り出す。ステップ3630では、オブジェクトID3009をOIA3041に渡し、OIA3041が、ODB3100を構築する。ステップ3640で、ODB3100をオブジェクト・ジェネレータ3042に待ち行列化する。最後に、ステップ3690で、キャッシュ・マネージャ通信スレッド3340は、作業の待機に戻る。
【0219】
図48は、オブジェクト・ジェネレータ・スレッド3360のロジックの例を示す図である。図からわかるように、ステップ3710で、オブジェクト・ジェネレータ・スレッド3360は、オブジェクト・ジェネレータ待ち行列3350から次の要求を待機解除する。ステップ3720で、オブジェクトの処置を検査する。処置がDispInvalidate3131の場合はステップ3750に進み、DispRegenerate3130の場合はステップ3730に進む。ステップ3730では、要求のタイプを検査する。トリガ転送要求3021の場合はステップ3770に進み、トリガ・イベント3020の場合はステップ3740に進む。ステップ3740では、オブジェクト・ソース3050にコンタクトして、オブジェクト3004を再生成する。新しいオブジェクト3004は、オブジェクト更新要求3022を用いて、分配マネージャ待ち行列3370に待ち行列化される。その後、処理はステップ3790に戻って、作業を待つ。
【0220】
ステップ3750では、要求のタイプを検査する。トリガ転送要求3021の場合はステップ3780に進み、トリガ・イベント3020の場合はステップ3760に進む。ステップ3760では、遠隔オブジェクト削除要求3025を作成し、分配マネージャ待ち行列3370に待ち行列化する。その後、処理はステップ3790に戻って、作業を待つ。
【0221】
ステップ3770では、要求をシステムから削除する。その後、処理はステップ3790に戻って、作業を待つ。
【0222】
ステップ3780では、局所オブジェクト削除要求3023をキャッシュ・マネージャ要求待ち行列3330に待ち行列化する。その後、処理はステップ3790に戻って、作業を待つ。
【0223】
図49は、分配マネージャ・スレッド3380のロジックの例を示す図である。図からわかるように、ステップ3810で、分配マネージャ・スレッド3380は、分配マネージャ待ち行列3370から作業を待機解除し、要求のコピーを、計算機アウトバウンド待ち行列3390のそれぞれに待ち行列化する。その後、処理はステップ3890に戻って、作業を待つ。
【0224】
図50は、アウトバウンド・トランザクション・スレッド3395のロジックの例を示す図である。分散更新方式に関与する計算機ごとに1つのアウトバウンド・トランザクション・スレッド3395がある。図からわかるように、ステップ3910で、このスレッドは、計算機アウトバウンド待ち行列3390から作業を待機解除し、要求のタイプを検査する。要求がオブジェクト更新要求3022または遠隔オブジェクト削除要求3025の場合には、処理はステップ3920に進み、要求がトリガ転送要求3021の場合には、処理はステップ3930に進む。
【0225】
ステップ3920で、遠隔のキャッシュ・マネージャ3001にコンタクトする。要求がオブジェクト更新要求3022の場合、ステップ3940で、cache_object(object_id,object,cache_id)410を使用して、新しいオブジェクト3004を遠隔キャッシュ・マネージャ3002に送る。その後、処理はステップ3990に戻って、作業を待つ。要求が遠隔オブジェクト削除要求3025の場合、ステップ3950で、delete_object(object_id,cache_id)420を使用して、遠隔キャッシュ・マネージャ3002からオブジェクト3004を削除する。その後、処理はステップ3990に戻って、作業を待つ。
【0226】
ステップ3930では、遠隔トリガ・モニタ3000aにコンタクトする。ステップ3960で、トリガ転送要求3021を遠隔のトリガ・モニタ3000に送る。その後、処理はステップ3990に戻って、作業を待つ。
【0227】
拡張と変形
本発明の特定の応用例によっては、トリガ・イベント3020の完全な分析と動作(オブジェクト更新要求3022または遠隔オブジェクト削除要求3025など)への変換のために、本明細書に記載されていない他の出口が必要になる可能性がある。
【0228】
たとえば、図51を参照すると、
a)ある出口を介して、単一のトリガ・イベント3020を複数の依存オブジェクト表示要求3024の組に変換すること4000が有用である場合がある。b)オブジェクト・ジェネレータ3042によって作成されたオブジェクト3004を、オブジェクト更新要求3022でそのオブジェクト3004を待ち行列化する前に、変更または分析すること4010が有用である場合がある。
c)オブジェクト3004をキャッシュ3003に書き込む代わりに、またはこれに加えて、オブジェクト3004をファイル・システムに書き込むことが有用である可能性がある。
【0229】
トリガ・モニタ3000のもう1つの用途は、現在キャッシュ内に存在しない可能性があるオブジェクトを処理するために、オブジェクトの生成と分配の能力を再利用することである。
a)prime_cache API4020を使用して、所与のオブジェクトID3009を有するオブジェクト3004が現在キャッシュ3003のいずれかに既知であるかどうかに無関係に、そのオブジェクト3004を生成し、分配することができる。
b)global_delete API4030を使用して、ある特定のオブジェクト3004が実際にどこかに存在するかどうかを知ることなしに、システム内のすべてのキャッシュ1からそのオブジェクト3004を確実に除去することができる。
【0230】
トリガ・モニタ3000は、厳格なFIFOの順序付けと要求の処理を強制するように実施することができ、また、要求の完全に非同期の処理を許容するように実施することができ、また、周知のスケジューリング方式のいずれかに従って要求を処理するように実施することができ、また、これらの任意の組み合わせを実施することができる。
【0231】
一貫性の維持
上で述べたように、本明細書で使用する用語には辞書の意味も含まれるが、案内のために以下に一部の用語の用語集を示す。
【0232】
トランザクション・マネージャとは、状態を管理するプログラムである。その例には、キャッシュを管理するキャッシュ・マネージャ、DB2などのデータベース管理システム、CICSなどのトランザクション処理システムが含まれる。
【0233】
トランザクションとは、トランザクション・マネージャに対して別のプログラムが行う要求である。
【0234】
状態変化型トランザクションとは、トランザクション・モニタによって管理される状態を変更するトランザクションである。キャッシュ・マネージャに対するキャッシュ・オブジェクトの読取、更新または削除の要求が、トランザクションを構成する。
【0235】
データの読取と変更を、アクセスと称する。
【0236】
ロックとは、共用データを読み書きするプロセスの能力を制限する実体である。あるプロセスがデータの読取ロックを獲得した時には、他のプロセスは、そのデータにアクセスできるが、そのデータを変更することができなくなる。あるプロセスがデータに対する書込ロックまたは排他ロックを獲得した時には、他のプロセスは、そのデータを読み取ることも変更することもできなくなる。従来技術には、ロックを実装するための方法が複数存在する。たとえば、ヘネシー(Hennessy)およびパターソン(Patterson)著、「Computer Architecture: A Quantitative Approach」第2版、Morgan Kaufmann刊、1996年を参照されたい。
【0237】
Sが、1つまたは複数のトランザクション・マネージャを含むシステム上のデータdを変更するトランザクションのセットであると仮定する。一貫性のある形でSを実行するための条件は、
(1)dのすべてまたは一部にアクセスする、Sに含まれない要求r1について、r1によってアクセスされるdのすべての部分が、Sに含まれるすべてのトランザクションによる変更の前の状態またはSに含まれるすべてのトランザクションによる変更の後の状態のいずれかである。
(2)Sに含まれない要求r1およびr2について、r2が、r1と同時またはr1の後にシステムによって受け取られ、r1とr2の両方が、dのサブセットd’にアクセスし、
(a)r1によってアクセスされるd’のバージョンが、Sに含まれるトランザクションによって変更されている場合、r2によってアクセスされるd’のバージョンもSに含まれるトランザクションによって変更されている。
(b)r2によってアクセスされるd’のバージョンが、Sに含まれるトランザクションによって変更されていない場合、r1によってアクセスされるd’のバージョンもSに含まれるトランザクションによって変更されていない。
【0238】
タイムスタンプとは、システムがトランザクションを受け取ったり、ロックが獲得されるなどのイベントに割り当てることができる属性である。従来技術でタイム・スタンプを実装するための一般的な方法には、クロック時刻およびイベントを順序付ける番号が含まれる。
【0239】
本発明のもう1つの特徴は、1つまたは複数のキャッシュに対して1組の一貫性のある更新を行う能力である。本発明は、以下の特性が所望される、1つまたは複数のキャッシュ・マネージャ3001に対する要求の組Sのために有益である。
(1)システムにアクセスするプログラムpについて、Sは原子的に行われなければならない。すなわち、pは、Sに含まれる要求の一部が満足され、それ以外が満足されていない状態のシステムを見ることができてはならない。
(2)適当なキャッシュ・マネージャ3001によって同時に受け取られる2つの要求r1およびr2について、r1とr2は、Sに関して同一のシステムの外見を見る。すなわち、r1とr2の両方が、Sに含まれる要求が満たされる前のシステムの外見を見るか、r1とr2の両方が、Sに含まれる要求が満たされた後のシステムの外見を見るかのいずれかになる。
(3)r1がキャッシュ・マネージャ3001によって受け取られた後にr2がキャッシュ・マネージャによって受け取られる2つの要求r1およびr2について、r1が、Sに含まれる要求が満たされた後のシステムの外見を見る場合には、r2も同一の外見を見なければならない。r2が、Sに含まれる要求が満たされる前のシステムの外見を見る場合には、r1も同一の外見を見なければならない。
【0240】
図52は、1つまたは複数のキャッシュを含むシステムに対して一貫性のある形で要求の組Sを行うためのロジックの例を示す図である。Sの要求のそれぞれは、1つのキャッシュ・マネージャ3001に向けられることが好ましい。Sからの要求を受け取るキャッシュ・マネージャの組Cは、1つまたは複数の要素を有することができる。
【0241】
図からわかるように、ステップ4500で、要求の組Sが、システムによって受け取られる。各要求は、特定のキャッシュ・マネージャ3001に向けられる。
【0242】
ステップ4505で、キャッシュ・マネージャがデータをロックする。Sから要求を受け取るキャッシュ・マネージャjのそれぞれについて、キャッシュ・マネージャjは、Sの要求によって変更されるデータの場合は書込ロックを獲得し、Sの要求によって読み取られるがSの要求によって書き込まれないデータの場合は読取ロックを獲得する。このステップでロックされたデータを、以下ではロック済みデータと称する。
【0243】
ステップ4600で、システムは、最後にロックが獲得された時刻last_lock_timeを判定する。Sから要求を受け取るキャッシュ・マネージャの組Cに1つしか要素がない場合には、このステップは、従来技術を使用して簡単に実施できる。Cに複数の要素がある場合、last_lock_timeは、図53で説明する形で判定される。
【0244】
ステップ4510で、last_lock_timeの前に受け取られ、ロック済みデータを待っている要求を実行する。ステップ4520で、Sの要求を実行する。ステップ4530で、ロック済みデータからロックを除去し、これによって、last_lock_timeの後に受け取られた、ロック済みデータを待っている要求を実行できるようにする。ステップ4510、4520および4530は、この順序で実行しなければならない。
【0245】
図52に示された実施例の代替実施例は、単一のロックを使用して、Sの要求によってアクセスされるデータに、他の要求がアクセスできなくすることである。好ましい実施例を用いると、この代替手法よりはるかに高い水準の並列性が可能になる。
【0246】
図53は、Sから要求を受け取るキャッシュ・マネージャの組Cに複数の要素がある場合に、last_lock_timeを判定するためのロジックの例を示す図である。図からわかるように、ステップ4600で、キャッシュ・マネージャiと記されたCの各要素が、ステップ4505で最後にロックを獲得した時刻last_lock_time_iを判定し、キャッシュ・マネージャiは、last_lock_time_iをコーディネータ・プログラムと称するプログラムに送る。ステップ4610で、コーディネータ・プログラムは、Cのすべてのキャッシュ・マネージャからlast_lock_time_i値を受け取り、last_lock_timeに、受け取ったlast_lock_time_iのうちで最新の値をセットする。ステップ4615で、コーディネータ・プログラムが、Cのすべてのキャッシュ・マネージャにlast_lock_timeを送る。
【0247】
図53に示された例に対する変形は、Cの各キャッシュ・マネージャiが、コーディネータ・プログラムにlast_lock_time_iを送るのではなく、ステップ4600でCの他のキャッシュ・マネージャとlast_lock_time_iの値を交換することである。ステップ4610では、Cの各キャッシュ・マネージャiが、受け取ったlast_lock_time_iの値からlast_lock_timeを判定する。ステップ4615は不要になる。好ましい実施例では、Cが大きい時に通信量と比較の回数が減り、したがって、この変形よりスケーラブルである。
【0248】
当業者は、トランザクション・マネージャがキャッシュ・マネージャである必要がない、1つまたは複数のトランザクション・マネージャを含む他のシステムで一貫性を達成するように本発明を適合させることが簡単にできるはずである。
【0249】
詳細な説明と代替案によって本発明を説明したので、当業者には、さまざまな機能強化、変形および均等物が明白になる。したがって、この詳細な説明は、例示のために提供されたものであって、制限として提供されたものではないことを理解されたい。本発明の正しい範囲は、請求項によって定義される。
【0250】
まとめとして、本発明の構成に関して以下の事項を開示する。
【0251】
(1)1つまたは複数の複合オブジェクトを格納する1つまたは複数のキャッシュを含むコンピュータ・システムにおいて、
キャッシュ記憶が可能または不可能な基礎データの、少なくとも一部を識別するステップと、
前記基礎データの少なくとも一部に対する1つまたは複数のデータ依存性を有する前記複合オブジェクトのうちの1つまたは複数に、前記基礎データの少なくとも一部をマッピングするステップと
を含む、前記基礎データに対する変更が1つまたは複数の前記複合オブジェクトの値にどのように影響することができるかを判定するための方法。
(2)さらに、複数のコンピュータを含み、第1キャッシュに関連する第1組のコンピュータが、前記マッピング・ステップに関連する第2組のコンピュータから分離されている、上記(1)の方法。
(3)さらに、時間に伴って変化する可能性があるオブジェクト依存性グラフ(G)を維持するステップを含み、前記オブジェクト依存性グラフが、複数のグラフ・オブジェクトと辺を含み、前記辺が、グラフ・オブジェクト間の1つまたは複数のデータ依存性を示す、上記(1)の方法。
(4)前記マッピング・ステップが、さらに、異なるスケジュールが前記基礎データに対する異なる変更をもたらす可能性があるプログラム・スケジューリング動作のステップを含む、上記(1)の方法。
(5)前記プログラム・スケジューリング動作が、コンパイラ、実行時システムまたはデータベースである、上記(4)の方法。
(6)前記マッピング・ステップが、前記基礎データの少なくとも一部を少なくとも1つの前記複合オブジェクトにマッピングするために前記グラフを使用するステップを含む、上記(3)の方法。
(7)さらに、辺に重みを割り当てるステップを含み、前記重みが、データ依存性の重要さに相関する、上記(3)の方法。
(8)少なくとも1つの辺の重みが、割り当てられた後に変化しない、上記(7)の方法。
(9)(1)グラフ・オブジェクトo1の2つのバージョンo1_v1およびo1_v2が存在し、
(2)オブジェクト依存性グラフ(G)が、o1で終わり、割り当てられた重みを有する少なくとも1つの辺(o2,o1)を含み、
前記o1で終わり組Sを構成する1つまたは複数の辺(o2,o1)について、o1_v1との一貫性を有する前記オブジェクトo2のバージョン番号と、o1_v2との一貫性を有する前記オブジェクトo2の第2バージョン番号とを維持するステップと、
前記グラフ・オブジェクトo2の同一のバージョンが前記バージョンo1_v1およびo1_v2との一貫性を有する前記組S内の辺(o2,o1)の重みの合計と、前記組S内のo1で終わるすべての辺の重荷の合計とに基づいて、o1_v1とo1_v2がどれほど似ているかを判定するステップと
をさらに含む、上記(7)の方法。
(10)前記2つのバージョンがどれほど似ているかを判定する前記ステップがさらに、前記グラフ・オブジェクトo2の同一バージョンが、前記バージョンo1_v1およびo1_v2との一貫性を有する前記組S内の辺(o2,o1)の重みの前記合計を前記組S内のo1で終わるすべての辺の重みの前記合計によって除算するステップを含む、上記(9)の方法。
(11)前記マッピング・ステップが、さらに、前記基礎データの少なくとも一部に対して変更を行うかどうか、またはどのような変更を行うかを判定するために、前記基礎データの少なくとも一部に対する変更によって1つまたは複数の前記複合オブジェクトがどのように影響を受けるかに関する情報を使用するステップを含む、上記(1)の方法。
(12)前記マッピング・ステップを実施するプログラムが、複数プロセスと、複数スレッドと、1つまたは複数の前記キャッシュの記憶域を管理する1つまたは複数の長期間稼動するプロセスまたはスレッドとのうちの1つまたは複数を生成する、上記(1)の方法。
(13)前記マッピング・ステップが、さらに、
前記基礎データの前記少なくとも一部に対する変更を識別するステップと、
前記基礎データの少なくとも一部に対する変更の前記識別に応答して、1つまたは複数の前記複合オブジェクトがどのように影響されるかを識別するステップと
を含む、上記(1)の方法。
(14)前記マッピング・ステップを実施するプログラムが、少なくとも1つの長期間走行するプロセスを生成し、さらに、
アプリケーション・プログラムが、前記基礎データの少なくとも一部に対する変更を識別するステップと、
上記アプリケーション・プログラムが、前記基礎データの少なくとも一部に対する識別された変更を、前記マッピング・ステップを実施する前記プログラムに通信するステップと
を含む、上記(12)の方法。
(15)さらに、キャッシュに格納された前記複合オブジェクトのバージョンが、前記基礎データの少なくとも一部に対する変更の結果として非常に古くなることを判定するステップを含む、上記(1)の方法。
(16)さらに、オブジェクトの非常に古いバージョンをキャッシュから削除するステップを含む、上記(15)の方法。
(17)オブジェクトのバージョンが現行でない時に、必ずそれが非常に古いとみなされる、上記(15)の方法。
(18)オブジェクトのバージョン(o1_v1)が非常に古いと判定する前記ステップが、
時間に伴って変化する可能性があり、複数のグラフ・オブジェクト(o1,…,on)と、グラフ・オブジェクト間の1つまたは複数のデータ依存性を表す複数の辺とを含む、オブジェクト依存性グラフ(G)を維持するステップと、
o1_v1がo2の現行バージョンと一貫性を有しない辺(o2,o1)の数に基づいて前記o1_v1が非常に古くなると判定するステップと
を含む、上記(15)の方法。
(19)さらに、オブジェクトの非常に古いバージョンを、より新しいバージョンに置換するステップを含む、上記(15)の方法。
(20)より新しいバージョンが、オブジェクトの現行バージョンである、上記(19)の方法。
(21)キャッシュに格納されたオブジェクトo1のバージョンo1_v1が非常に古くなると判定する前記ステップが、
時間に伴って変化する可能性があり、複数のグラフ・オブジェクトと、グラフ・オブジェクト間の1つまたは複数のデータ依存性を表す複数の辺とを含む、オブジェクト依存性グラフ(G)を維持するステップと、
前記o1で終わる1つまたは複数の辺に対応する、前記o1_v1のweight_actフィールドを初期設定し、維持するステップと、
グラフ・オブジェクトo2からグラフ・オブジェクトo1への辺が存在し、o1_v1がweight_actフィールドを有する、前記オブジェクトo2の現行バージョンに対する1つまたは複数の変更について、辺に対応するweight_actフィールドを決定するステップと、
前記o1_v1のweight_actフィールドに基づいて、前記o1_v1が非常に古くなるかどうかを判定するステップと
を含む、上記(15)の方法。
(22)さらに、前記o1_v1の重みしきい値を維持するステップを含み、
前記o1_v1のweight_actフィールドに基づいて前記o1_v1が非常に古くなるかどうかを判定する前記ステップが、前記o1_v1のweight_actフィールドの合計と前記重みしきい値を比較するステップを含む上記(21)の方法。
(23)データ依存性の重要さに相関する重みを、オブジェクト依存性グラフの辺に割り当てるステップと、
前記o1_v1の1つまたは複数のweight_actフィールドに、オブジェクト依存性グラフの対応する辺の1つまたは複数の重みを初期設定するステップと
をさらに含む、上記(21)の方法。
(24)o2の現行バージョンが更新される時に、必ず、オブジェクト依存性グラフ内で前記o2から前記o1への辺に対応する、所定の最小の可能な値より大きいweight_actフィールドに、前記所定の最小の可能な値をセットするステップを含む、上記(21)の方法。
(25)1つまたは複数の前記キャッシュが、複数バージョン・キャッシュと、単一バージョン・キャッシュと、現行バージョン・キャッシュとのうちの1つまたは複数を含む、上記(1)の方法。
(26)1つまたは複数の前記キャッシュが、少なくとも1つの単一バージョン・キャッシュc1を含み、
少なくとも1つのオブジェクトo1について、o1および他のオブジェクトo2の両方がc1に含まれる時に、必ずo1およびo2が一貫性を有するように、o2の一貫性セットを維持するステップ
をさらに含む、上記(25)の方法。
(27)前記o1および前記o2の両方がc1にある場合に、前記o1および前記o2が一貫性を有するようにするステップをさらに含む、上記(26)の方法。
(28)おそらくはオブジェクトo1の以前のバージョンを置換することによって、単一バージョン・キャッシュに前記オブジェクトo1の現行バージョンを追加するステップと、
オブジェクトo2の非現行バージョンo2_vが前記キャッシュc1に格納されており、前記o1の現行バージョンが作成される前に作成された、1つまたは複数の前記オブジェクトo2を、o1の一貫性セット内で識別するステップと、
前記キャッシュc1から前記o2_vを除去するか、前記オブジェクトo2のより新しいバージョンによってo2_vを置換するステップと、
1つまたは複数のオブジェクトを識別する前記ステップと、前記キャッシュc1から前記o2_vを除去するか、前記オブジェクトのより新しいバージョンによってo2_vを置換する前記ステップとを、前記オブジェクトo2に関する一貫性セット内のオブジェクトに再帰的に適用するステップと
をさらに含む、上記(27)の方法。
(29)おそらくはオブジェクトo1の以前のバージョンを置換することによって、単一バージョン・キャッシュにオブジェクトo1のバージョンを追加するか否かを決定するために、オブジェクトo1の一貫性セットを使用するステップをさらに含む、上記(26)の方法。
(30)単一バージョン・キャッシュc1内の複数のオブジェクトo1ないしonについて、
オブジェクトoiの一貫性セットによって強制されるすべての制約が、前記oiの更新と同時に満足されることを確実にすることなく、その代わりに、オブジェクトobj1の一貫性を有しないバージョンがc1内に存在する可能性がある、前記oiの一貫性セットからのobj1を、一貫性スタックに追加することによって、c1内の異なるバージョンを有するオブジェクトoiのそれぞれを置換するステップと、
c1内のオブジェクトo1ないしonのすべてが現行バージョンに置換された後に、一貫性スタック上の全オブジェクトをトラバースし、一貫性を有しないバージョンがc1に存在するオブジェクトobj1のそれぞれについて、それをc1から除去するか一貫性を有するバージョンと置換するステップと
をさらに含む、上記(27)の方法。
(31)前記Gが、単純依存性グラフおよびマルチグラフのうちの1つである、上記(3)の方法。
(32)前記Gが、単純依存性グラフであり、前記Gの固有極大ノードが、複合オブジェクトであり、前記Gの固有葉ノードが、オブジェクトではない基礎データである、上記(31)の方法。
(33)オブジェクト依存性グラフを維持する前記ステップが、
少なくとも1つの固有葉ノードvの出隣接リストを維持するステップと、
少なくとも1つの固有極大ノードwの入隣接リストを維持するステップと
を含む、上記(32)の方法。
(34)さらに、ハッシュ・テーブルを介して、出隣接リストおよび入隣接リストのうちの1つにアクセスするステップを含む、上記(33)の方法。
(35)前記オブジェクト依存性グラフを維持するステップが、さらに、
初期に変更されるデータが、固有葉ノードの変更によって表すことのできるデータdを含む時に、dに対応する出隣接リストを探すステップと、
出隣接リストが見つかった場合に、影響を受ける複合オブジェクトを決定するためにリストを調べるステップと
を含む、上記(33)の方法。
(36)さらに、前記オブジェクト依存性グラフから少なくとも1つの固有極大ノードwを削除するステップを含む、上記(33)の方法。
(37)前記オブジェクト依存性グラフから少なくとも1つの固有極大ノードwを削除する前記ステップが、さらに、
wの入隣接リスト上の少なくとも1つの固有葉ノードの出隣接リストから前記wを削除するステップと、
前記wの入隣接リストを削除するステップと
を含む、上記(36)の方法。
(38)さらに、前記オブジェクト依存性グラフから少なくとも1つの固有葉ノードvを削除するステップを含む、上記(33)の方法。
(39)前記オブジェクト依存性グラフから少なくとも1つの固有葉ノードvを削除する前記ステップが、さらに、
vの出隣接リスト上の1つまたは複数の固有極大ノードの入隣接リストからvを削除するステップと、
前記vの出隣接リストを削除するステップと
を含む、上記(38)の方法。
(40)グラフ・オブジェクトrが、単一レコード(SRO)または複数レコード(MRO)を表すことのできる関連関係指定子を有する関係オブジェクト(RO)であり、前記オブジェクト依存性グラフを維持するステップが、さらに、
(a)前記rの関係指定子を格納するステップと、
(b)1つまたは複数のグラフ・オブジェクトが前記rを含む場合に、前記rから前記rを含む1つまたは複数のグラフ・オブジェクトへの1つまたは複数の依存性を追加するステップと、
(c)前記rが1つまたは複数のグラフ・オブジェクトを含む場合に、前記rに含まれる前記1つまたは複数のグラフ・オブジェクトから前記rへの1つまたは複数の依存性を追加するステップと
を含む、上記(3)の方法。
(41)データ依存度の重要さに相関する重みを辺に割り当てるステップをさらに含み、
前記ステップ(b)および(c)のうちの1つが、ROノードr2を含むROノードr1に対応する依存性のうちの少なくとも1つの重みを、前記r2によって含まれる前記r1のレコードの割合と、前記レコードの相対的な重要さとのうちの一方または両方に従って決定するステップを含む
上記(40)の方法。
(42)(d)前記rから前記rを含まないもう1つのRO r2への1つまたは複数の依存性を、前記r2にも含まれる前記rのレコードの比率と、前記r2にも含まれる前記rのレコードの相対的な重要さとのうちの一方または両方に基づく測定基準を使用して追加するステップと、
(e)前記rが含まないもう1つのRO r3からrへの1つまたは複数の依存性を、前記rにも含まれる前記r3のレコードの比率と、前記rにも含まれる前記r3のレコードの相対的な重要さとのうちの一方または両方に基づく測定基準を使用して追加するステップと
のうちの一方または両方をさらに含む、上記(40)の方法。
(43)データ依存性の重要さに相関する重みを辺に割り当てるステップと、
同一の測定基準を使用してステップ(d)および(e)の一方または両方で追加された前記1つまたは複数の依存性の重みを計算するステップと
を含む、上記(42)の方法。
(44)前記rが、新たに作成されたノード、変更された既存ノード、SROノードおよびMROノードのうちの1つである、上記(40)の方法。
(45)共通のレコードを有するROの対が、同一のレコード名を所有する高い確率を有するように、1つまたは複数の関係指定子が関係名を含む、上記(40)の方法。
(46)さらに、関係名を使用するか、関係名と共に平衡木を使用することによって、ROを分離するステップを含む、上記(45)の方法。
(47)基礎データの内の少なくとも一部を識別する前記ステップが、
関係指定子を識別するステップと、
前記関係指定子と共通する1つまたは複数のレコードを有するオブジェクト依存性グラフ内の1つまたは複数のROを突き止めるステップと
を含む、上記(40)の方法。
(48)前記マッピングのステップが、
前記基礎データの少なくとも一部に対応する前記オブジェクト依存性グラフ内の1つまたは複数のノードの組(update_set)を訪れるステップと、
前記update_setから到達可能なノードを訪れるために、前記オブジェクト依存性グラフ内の辺をトラバースするステップと
を含む、上記(3)の方法。
(49)前記トラバースのステップが、深さ優先または幅優先のいずれかで前記オブジェクト依存性グラフをトラバースするステップを含む、上記(48)の方法。
(50)前記オブジェクト依存性グラフのトラバースのそれぞれを一意に識別するタイムスタンプを維持するステップと、
トラバース中にある頂点に初めて訪れた時に、必ず、前記オブジェクト依存性グラフの頂点にタイムスタンプを格納するステップと、
頂点のタイムスタンプと現トラバースのタイムスタンプとを比較することによって、現トラバース中に頂点に訪れているかどうかを判定するステップと
をさらに含む、上記(48)の方法。
(51)さらに、新しいグラフ・トラバースのたびに、タイム・スタンプを増分するステップを含む、上記(50)の方法。
(52)グラフ・オブジェクトo1の2つのバージョンo1_v1およびo1_v2が存在し、前記オブジェクト依存性グラフGが、o1で終わる少なくとも1つの辺(o2,o1)を含む場合に、さらに、
前記o1で終わり組Sを構成する1つまたは複数の辺(o2,o1)について、o1_v1との一貫性を有する前記オブジェクトo2のバージョン番号と、o1_v2との一貫性を有する前記オブジェクトo2の第2のバージョン番号とを維持するステップと、
グラフ・オブジェクトo2の同一バージョンが、前記バージョンo1_v1およびo1_v2との一貫性を有する前記組Sの辺(o2,o1)の数と前記組Sのo1で終わるすべての辺の数とに基づいて、o1_v1とo1_v2とがどれほど似ているかを判定するステップと
を含む、上記(3)の方法。
(53)o1_v1とo1_v2とがどれほど似ているかを判定する前記ステップが、前記組Sのo1で終わるすべての辺の数によって、グラフ・オブジェクトo2の同一バージョンが前記バージョンo1_v1およびo1_v2との一貫性を有する前記組Sの辺(o2,o1)の数を除算するステップを含む、上記(52)の方法。
(54)オブジェクトのうちの少なくともいくつかが、ウェブ・ドキュメントであり、基礎データのうちの少なくともいくつかが、1つまたは複数のデータベースの一部である、上記(1)の方法。
(55)前記キャッシュに格納された前記複合オブジェクトo1のバージョンが非常に古くなると判定する前記ステップが、o1の前記バージョンが前記o2の現行バージョンとの一貫性を有しない辺(o2,o1)の数を判定するステップを含む、上記(15)の方法。
(56)前記キャッシュに格納された前記複合オブジェクトo1のバージョンが非常に古くなると判定する前記ステップが、さらに、前記o1で終わる辺の総数に基づく、上記(55)の方法。
(57)さらに、1つまたは複数のグラフ・オブジェクトの組s_updateに含まれる1つまたは複数のオブジェクトに対する依存性を、直接にまたは前記オブジェクト依存性グラフによって推移的に指定される少なくとも1つの他のグラフ・オブジェクトが、どのように影響を受けるかを判定するために、前記オブジェクト依存性グラフと共に、基礎データに対する変更によって前記s_updateがどのように影響を受けるかに関する情報を使用するステップを含む、上記(3)の方法。
(58)さらに、前記オブジェクトへの参照をリンク・リスト上に格納することによって一貫性スタックを実施するステップを含む、上記(30)の方法。
(59)前記一貫性スタックを実施するために1つまたは複数の平衡木を使用するステップと、
少なくとも1つのオブジェクトobj1について、前記obj1への参照を一貫性スタックに追加する前に、前記obj1への参照が一貫性スタックにまだ含まれていないことを検証するステップと
をさらに含む、上記(30)の方法。
(60)前記一貫性セットが、1つまたは複数のリンク・リストを使用して実施される、上記(26)の方法。
(61)1つまたは複数の複合オブジェクトを格納する1つまたは複数のキャッシュと、オブジェクトのうちの1つまたは複数の現在値に影響する可能性がある基礎データを格納した1つまたは複数の遠隔データ・ソースとを含むコンピュータ・システムにおいて、
時間に伴って変化する可能性があり、複数のグラフ・オブジェクトと、前記グラフ・オブジェクト間の1つまたは複数のデータ依存性を示す複数の辺とを含むオブジェクト依存性グラフを維持するステップと、
前記基礎データのうちの少なくとも一部が変更された時を認識するステップと、
変更された、前記基礎データのうちの少なくとも一部に関する情報と、変更された前記基礎データの結果として値を変更された少なくとも1つのオブジェクトの識別を含む情報と、変更された前記基礎データの結果として値を変更された少なくとも1つのオブジェクトの識別を判定できるようにする情報とのうちの1つまたは複数を前記キャッシュに通信するステップと、
前記通信するステップに応答して、前記キャッシュからオブジェクトを除去するか、前記キャッシュ内のオブジェクトの新バージョンを更新するステップと
を含む方法。
(62)前記基礎データの少なくとも一部が、1つまたは複数の遠隔データ・ソースに格納され、さらに、
変更された前記基礎データの少なくとも一部に関する情報と、変更された前記基礎データの結果として値を変更された少なくとも1つのオブジェクトの識別を含む情報と、変更された前記基礎データの結果として値を変更された少なくとも1つのオブジェクトの識別を判定できるようにする情報とのうちの1つまたは複数の前記キャッシュに通信するステップと、
前記通信するステップに応答して、前記キャッシュからオブジェクトを除去するか、前記キャッシュ内のオブジェクトの新バージョンを更新するステップと
を含む、上記(13)の方法。
(63)上記(1)ないし(11)、(13)、(18)、(21)ないし(24)、(26)ないし(30)、(40)、(45)、(47)、(48)または(50)のいずれかによる、基礎データに対する変更が1つまたは複数の複合オブジェクトにどのように影響することができるかを判定するための方法ステップを実行するため計算機によって実行可能な命令のプログラムを具体的に実施する、計算機によって可読のプログラム記憶装置。
【図面の簡単な説明】
【図1】本発明の特徴を有するシステムの例を示す図である。
【図2】本発明の特徴を有するオブジェクト依存性グラフの例を示す図である。
【図3】本発明の特徴を有するシステムの例を示す図である。
【図4】本発明に従って使用されるキャッシュの例を示す図である。
【図5】本発明に従って使用されるオブジェクト情報ブロック(OIB)の例を示す図である。
【図6】本発明によるAPI関数の例を示す図である。
【図7】図6のAPI関数を実装する方法のブロック図である。
【図8】オブジェクトをキャッシュに追加するAPI関数のブロック図である。
【図9】キャッシュ内のオブジェクトを探すAPI関数のブロック図である。
【図10】キャッシュからオブジェクトを削除するAPI関数のブロック図である。
【図11】レコードからオブジェクトへの依存性を追加するAPI関数のブロック図である。
【図12】レコードからオブジェクトへの依存性を削除するAPI関数のブロック図である。
【図13】レコードが変更された時に呼び出されるAPI関数のブロック図である。
【図14】本発明の特徴を有するシステムのもう1つの例を示す図である。
【図15】本発明の特徴を有するオブジェクト依存性グラフのもう1つの例を示す図である。
【図16】図14のオブジェクト・マネージャの例を示す図である。
【図17】本発明の特徴を有するオブジェクト依存性グラフのもう1つの図である。
【図18】本発明の実施例に従って使用されるキャッシュの例を示す図である。
【図19】本発明に従って使用されるオブジェクト情報ブロック(OIB)の例を示す図である。
【図20】本発明に従って使用される依存性リストの例を示す図である。
【図21】本発明に従って使用される依存性情報ブロック(DIB)の例を示す図である。
【図22】本発明によるAPI関数のもう1つの例を示す図である。
【図23】図22のAPI関数を実装する方法のブロック図である。
【図24】最新バージョンのオブジェクトをキャッシュに追加するキャッシュAPI関数のブロック図である。
【図25】あるバージョンのオブジェクトをあるキャッシュから別のキャッシュにコピーしようとするAPI関数のブロック図である。
【図26】基礎データが変更された時に呼び出すことのできるAPI関数のブロック図である。
【図27】基礎データに対する変更に応答してオブジェクト依存性グラフを介して変更を伝播する方法の一部を示すブロック図である。
【図28】基礎データに対する変更に応答して、深さ優先の形でオブジェクト依存性グラフを介して変更を伝播する方法の一部を示すブロック図である。
【図29】基礎データに対する変更に応答して特定のグラフ・オブジェクトに変更を伝播する方法の一部を示すブロック図である。
【図30】基礎データに対する変更に応答して、キャッシュ記憶されたバージョンのオブジェクトを更新または無効化する方法の一部を示すブロック図である。
【図31】基礎データに対する変更に応答して、1つまたは複数のオブジェクトが1つまたは複数のキャッシュに追加された時に一貫性を維持するための方法の一部を示すブロック図である。
【図32】単一レコード・オブジェクト(SRO)に対応するグラフ・ノードを作成するキャッシュAPI関数のブロック図である。
【図33】複数レコード・オブジェクト(MRO)に対応するグラフ・ノードを作成するAPI関数のブロック図である。
【図34】レコードが変更された時に呼び出すことのできるAPI関数のブロック図である。
【図35】オブジェクト依存性グラフと、これを使用してグラフ・オブジェクトに変更を伝播する方法のもう1つの例を示す図である。
【図36】キャッシュをスケーラブルに維持し、一貫性のある形で更新するための、本発明の特徴を有するシステムの例を示すブロック図である。
【図37】マスタ・トリガ・モニタとしてインスタンス化された図36のトリガ・モニタの詳細な例を示す図である。
【図38】スレーブ・モニタとしてインスタンス化されたトリガ・モニタの例を示す図である。
【図39】図37のsend_trigger APIの例を示す図である。
【図40】本発明によるトランザクション・タイプの例を示す図である。
【図41】図37のオブジェクト処置ブロック(ODB)の例を示す図である。
【図42】図41のキャッシュIDの例を示す図である。
【図43】図44と共に、トリガ・モニタ・ドライバと分配マネージャの高水準の編成および通信経路の例を示す図である。
【図44】図43と共に、トリガ・モニタ・ドライバと分配マネージャの高水準の編成および通信経路の例を示す図である。
【図45】図43および図44の受取側スレッド・ロジックの例を示す図である。
【図46】図43および図44の入力作業ディスパッチャ・スレッド・ロジックの例を示す図である。
【図47】図43および図44のキャッシュ・マネージャ通信スレッド・ロジックの例を示す図である。
【図48】図43および図44のオブジェクト・ジェネレータ・スレッド・ロジックの例を示す図である。
【図49】図43および図44の分配マネージャ・スレッド・ロジックの例を示す図である。
【図50】図43および図44のアウトバウンド・トランザクション・スレッド・ロジックの例を示す図である。
【図51】トリガ・イベントの分析と変換のための拡張と変形の例を示す図である。
【図52】1つまたは複数のキャッシュからなるシステムに対して1組の要求を一貫性のある形で行うためのロジックの例を示す図である。
【図53】要求を受け取るキャッシュ・マネージャの組が複数の要素を有する場合にlast_lock_timeを決定するためのロジックの例を示す図である。
【符号の説明】
1 キャッシュ・マネージャ
2 キャッシュ
2’ キャッシュ
3 ディレクトリ
4 オブジェクト記憶域
5 補助状態情報
6 オブジェクト
8 オブジェクト・リスト
9 object_id
10 オブジェクト情報ブロック(OIB)
10’ オブジェクト情報ブロック(OIB)
11 レコード・リスト
12 record_id(レコードID)
19 ハッシュ・テーブル
25 ハッシュ・テーブル項目
90 クライアント
95 ネットワーク
97 アプリケーション・プログラム
99 データベース
100 サーバ
Claims (58)
- 1つまたは複数の複合オブジェクトを格納する1つまたは複数のキャッシュを含むコンピュータ・システムにおいて、基礎データに対する変更が1つまたは複数の前記複合オブジェクトの値にどのように影響を及ぼすかを判定するための方法であって、前記基礎データは、前記1つまたは複数の複合オブジェクトの値に影響する可能性があるデータを含み、
前記コンピュータ・システムが、
前記コンピュータ・システム上で稼働するアプリケーション・プログラムによって複合オブジェクトを生成するステップであって、前記複合オブジェクトは前記基礎データから構築される、前記生成するステップと、
前記生成された複合オブジェクトを前記1つまたは複数のキャッシュに格納するステップと、
前記基礎データの少なくとも一部を識別するステップであって、前記複合オブジェクトのうちの1つまたは複数は、前記基礎データの識別された前記少なくとも一部に対して、1つまたは複数のデータ依存性を有する、前記識別するステップと
前記複合オブジェクトのうちの1つまたは複数に、前記基礎データの少なくとも一部をマッピングするステップであって、前記マッピングが、前記基礎データの前記少なくとも一部に対する変更を識別すること、そして前記基礎データの少なくとも一部に対する変更の前記識別に応答して、1つまたは複数の前記複合オブジェクトが影響されるかどうかを識別する、前記マッピングするステップと、
オブジェクト依存性グラフ(G)をキャッシュ・マネージャ内に維持するステップであって、前記オブジェクト依存性グラフ(G)は、オブジェクト依存性グラフの頂点であるグラフ・オブジェクトと、他の頂点である複数のグラフ・オブジェクトと、前記グラフ・オブジェクトと前記複数のグラフ・オブジェクトとの間のデータ依存性を示す1又は複数の辺とを含み、前記オブジェクト依存性グラフの頂点は複合オブジェクトであり、前記他の頂点である複数のグラフ・オブジェクトは複合オブジェクト又は基礎データであり、前記オブジェクト依存性グラフ(G)は、時間に伴って変化する可能性がある、前記維持するステップと、
前記基礎データの少なくとも一部に対する変更の結果、キャッシュに格納された前記複合オブジェクトのバージョンが、そのバージョンが古くなることを判定するステップであって、前記判定は、前記オブジェクト依存性グラフ(G)の辺を調べることによって、どの複合オブジェクトが変更したかを判定する、前記判定するステップと、
前記古くなることの判定に応答して、前記複合オブジェクトの古いバージョンをキャッシュから削除するステップ又は前記複合オブジェクトの古いバージョンを、それより新しいバージョンに置換するステップと、
を実行する、方法。 - 複数のコンピュータを含み、第1キャッシュに関連する第1組のコンピュータが、前記マッピングするステップに関連付けされた第2組のコンピュータから分離されている、請求項1記載の方法。
- 前記基礎データは、キャッシュ記憶が可能である、又はキャッシュ記憶が不可能である、請求項1記載の方法。
- 前記マッピングするステップが、異なるスケジュールが前記基礎データに対して異なる変更をもたらす可能性があるところのプログラム・スケジューリングの操作をするステップをさらに含む、請求項1記載の方法。
- プログラム・スケジューリングの前記操作において、前記プログラム・スケジューリングが、コンパイラ、実行時システムまたはデータベースによって行われる、請求項4記載の方法。
- 前記マッピングするステップが、前記グラフを使用して前記基礎データの少なくとも一部を少なくとも1つの前記複合オブジェクトにマッピングするステップを含む、請求項1記載の方法。
- 前記辺に重みを割り当てるステップをさらに含み、前記重みが、データ依存性の重要さに相関する、請求項1記載の方法。
- 少なくとも1つの前記辺の重みが、その重みが割り当てられた後に変化しない、請求項7記載の方法。
- (1)グラフ・オブジェクトo1の2つのバージョンo1_v1およびo1_v2が存在し、
(2)前記オブジェクト依存性グラフ(G)が、o1で終わり且つ割り当てられた重みを有するところの少なくとも1つの辺(o2,o1)を含み、
前記o1で終わり且つ組Sを含むところの1つまたは複数の辺(o2,o1)について、o1_v1との一貫性を有する前記オブジェクトo2のバージョン番号と、o1_v2との一貫性を有する前記オブジェクトo2の第2バージョン番号とを維持すること、そして
前記グラフ・オブジェクトo2の同一のバージョンが前記バージョンo1_v1およびo1_v2との一貫性を有するような前記組S内の辺(o2,o1)の重みの合計と、前記組S内のo1で終わるすべての辺の重みの合計とに基づいて、o1_v1とo1_v2がどれほど似ているかを判定すること
をさらに含む、請求項7記載の方法。 - 前記2つのバージョンがどれほど似ているかを判定することが、前記グラフ・オブジェクトo2の同一バージョンが前記バージョンo1_v1およびo1_v2との一貫性を有するような前記組S内の辺(o2,o1)の重みの前記合計を前記組S内のo1で終わるすべての辺の重みの前記合計によって除算することをさらに含む、請求項9記載の方法。
- 前記マッピングするステップが、
前記基礎データの少なくとも一部に対する変更によって1つまたは複数の前記複合オブジェクトが影響を受けるかどうかに関する情報を使用して、前記基礎データの少なくとも一部に対して変更を行うかどうか、またはどのような変更を行うかを判定するステップをさらに含む、請求項1記載の方法。 - 前記マッピングするステップを実施するプログラムが、複数プロセスと、複数スレッドと、1つまたは複数の前記キャッシュの記憶域を管理する、1つまたは複数の長期実行プロセスまたはスレッドのうちの1つまたは複数とを生成する、請求項1記載の方法。
- 前記マッピングするステップを実施するプログラムが、少なくとも1つの長期実行プロセスを生成し、
アプリケーション・プログラムが、前記基礎データの少なくとも一部に対する変更を識別すること、そして
上記アプリケーション・プログラムが、前記基礎データの少なくとも一部に対する前記識別された変更を、前記マッピングするステップを実施する前記プログラムに通信すること
をさらに含む、請求項12記載の方法。 - オブジェクトのバージョンが現行でない時に、必ずそれが古いとみなされる、請求項1記載の方法。
- オブジェクトのバージョン(o1_v1)が古くなることを判定することが、
時間に伴って変化する可能性があり且つ複数のグラフ・オブジェクト(o1,…,on)とグラフ・オブジェクト間の1つまたは複数のデータ依存性とを表す複数の辺とを含むところのオブジェクト依存性グラフ(G)を維持すること、そして
o1_v1がo2の現行バージョンと一貫性を有しないような辺(o2,o1)の数に基づいて前記o1_v1が古くなることを判定すること
を含む、請求項1記載の方法。 - 前記新しいバージョンが、オブジェクトの現行バージョンである、請求項1記載の方法。
- キャッシュに格納されたオブジェクトo1のバージョンo1_v1が古くなることを判定することが、
時間に伴って変化する可能性があり且つ複数のグラフ・オブジェクトとグラフ・オブジェクト間の1つまたは複数のデータ依存性を表す複数の辺とを含むところのオブジェクト依存性グラフ(G)を維持すること、
前記o1で終わる1つまたは複数の辺に対応する、前記o1_v1のweight_actフィールドを初期設定し、維持すること、
グラフ・オブジェクトo2からグラフ・オブジェクトo1への辺がo1_v1がweight_actフィールドを有するように存在するような、前記オブジェクトo2の現行バージョンに対する1つまたは複数の変更について、前記辺に対応するweight_actフィールドを減分すること、
前記o1_v1のweight_actフィールドに基づいて、前記o1_v1が古くなるかどうかを判定すること
を含む、請求項1記載の方法。 - 前記o1_v1の重みしきい値を維持することをさらに含み、
前記o1_v1のweight_actフィールドに基づいて前記o1_v1が古くなるかどうかを判定することが、前記o1_v1のweight_actフィールドの合計と前記重みしきい値を比較することを含む
請求項17記載の方法。 - データ依存性の重要さに相関する重みを、前記オブジェクト依存性グラフの前記辺に割り当てること、
前記o1_v1の1つまたは複数のweight_actフィールドを、オブジェクト依存性グラフの対応する辺の1つまたは複数の重みに初期設定すること
をさらに含む、請求項17記載の方法。 - o2の現行バージョンが更新される時に、必ず、オブジェクト依存性グラフ内で前記o2から前記o1への辺に対応する、所定の最小の可能な値より大きいweight_actフィールドに、前記所定の最小の可能な値をセットすることを含む、請求項17記載の方法。
- 1つまたは複数の前記キャッシュが、複数バージョン・キャッシュと、単一バージョン・キャッシュと、現行バージョン・キャッシュとのうちの1つまたは複数を含む、請求項1記載の方法。
- 1つまたは複数の前記キャッシュが、少なくとも1つの単一バージョン・キャッシュc1を含み、
前記オブジェクトo1の少なくとも1つについて、o1および他のオブジェクトo2の両方がc1に含まれる時に必ずo1およびo2が一貫性を有するようなo2の一貫性セットを維持すること
をさらに含む、請求項21記載の方法。 - 前記o1および前記o2の両方がc1にある場合に、前記o1および前記o2が一貫性を有するようにすることをさらに含む、請求項22記載の方法。
- 前記オブジェクトo1の以前のバージョンを置換することによって、前記単一バージョン・キャッシュに前記オブジェクトo1の現行バージョンを追加すること、そして
前記オブジェクトo2の非現行バージョンo2_vが前記キャッシュc1に格納され且つ前記o1の現行バージョンが作成される前に作成されるようなo1の一貫性セット内で1つまたは複数の前記オブジェクトo2を識別すること、そして
前記キャッシュc1から前記o2_vを除去するか、又は前記オブジェクトo2のより新しいバージョンによってo2_vを置換すること、
1つまたは複数のオブジェクトを前記識別すること、前記キャッシュc1から前記o2_vを前記除去するか、又は前記オブジェクトのより新しいバージョンによってo2_vを前記置換することを、前記オブジェクトo2に関する一貫性セット内のオブジェクトに繰り返し適用すること
をさらに含む、請求項23記載の方法。 - 単一バージョン・キャッシュにオブジェクトo1のバージョンを追加するか否かを決定するためにオブジェクトo1の一貫性セットを使用し、オブジェクトo1の以前のバージョンを置換することをさらに含む、請求項22記載の方法。
- 単一バージョン・キャッシュc1内の複数のオブジェクトo1ないしonについて、
オブジェクトoiの一貫性セットによって強制されるすべての制約が、前記oiの更新と同時に満足されることを確実にすることなく、その代わりに、オブジェクトobj1の一貫性を有しないバージョンがc1内に存在する可能性がある、前記oiの一貫性セットからのobj1を、一貫性スタックに追加することによって、c1内の異なるバージョンを有するオブジェクトoiのそれぞれを置換すること、そして
c1内のオブジェクトo1ないしonのすべてが現行バージョンに置換された後に、一貫性スタック上の全オブジェクトをトラバースし、一貫性を有しないバージョンがc1に存在するオブジェクトobj1のそれぞれについて、それをc1から除去するか一貫性を有するバージョンと置換すること
をさらに含む、請求項23記載の方法。 - 前記Gが、単純依存性グラフおよびマルチグラフのうちの1つである、請求項1記載の方法。
- 前記Gが、単純依存性グラフであり、前記Gの固有極大ノードが、複合オブジェクトであり、前記Gの固有葉ノードが、オブジェクトではない基礎データである、請求項27記載の方法。
- オブジェクト依存性グラフを維持するステップが、
少なくとも1つの固有葉ノードvの出隣接リストを維持すること、
少なくとも1つの固有極大ノードwの入隣接リストを維持すること
を含む、請求項28記載の方法。 - ハッシュ・テーブルを介して、出隣接リストおよび入隣接リストのうちの1つにアクセスすることをさらに含む、請求項29記載の方法。
- 前記オブジェクト依存性グラフを維持するステップが、
初期に変更されるデータが、固有葉ノードの変更によって表すことのできるデータdを含む時に、dに対応する出隣接リストを探すこと、そして
前記出隣接リストが見つかった場合に、影響を受ける複合オブジェクトを決定するためにリストを調べること
をさらに含む、請求項29記載の方法。 - 前記オブジェクト依存性グラフから少なくとも1つの固有極大ノードwを削除することをさらに含む、請求項29記載の方法。
- 前記オブジェクト依存性グラフから少なくとも1つの固有極大ノードwを削除することが、
wの入隣接リスト上の少なくとも1つの固有葉ノードの出隣接リストから前記wを削除すること、
前記wの入隣接リストを削除すること
をさらに含む、請求項32記載の方法。 - 前記オブジェクト依存性グラフから少なくとも1つの固有葉ノードvを削除することをさらに含む、請求項29記載の方法。
- 前記オブジェクト依存性グラフから少なくとも1つの固有葉ノードvを削除することが、
vの出隣接リスト上の1つまたは複数の固有極大ノードの入隣接リストからvを削除すること、
前記vの出隣接リストを削除すること
をさらに含む、請求項34記載の方法。 - グラフ・オブジェクトrが、単一レコード(SRO)または複数レコード(MRO)を表すことのできる関連関係指定子を有する関係オブジェクト(RO)であり、
前記オブジェクト依存性グラフを維持することが、
(a)前記rの関係指定子を格納すること、
(b)1つまたは複数のグラフ・オブジェクトが前記rを含む場合に、前記rから前記rを含む1つまたは複数のグラフ・オブジェクトへの1つまたは複数の依存性を追加すること、
(c)前記rが1つまたは複数のグラフ・オブジェクトを含む場合に、前記rに含まれる前記1つまたは複数のグラフ・オブジェクトから前記rへの1つまたは複数の依存性を追加すること
をさらに含む、請求項1記載の方法。 - データ依存性の重要さに相関する重みを前記辺に割り当てることをさらに含み、
前記(b)および(c)の複数の依存性を追加することのうちの1つが、ROノードr2を含むROノードr1に対応する依存性のうちの少なくとも1つの重みを、前記r2によって含まれる前記r1のレコードの割合と、前記レコードの相対的な重要さとのうちの一方または両方に従って決定するステップを含む
請求項36記載の方法。 - (d)前記rから前記rがr2を含まないもう1つのRO r2への1つまたは複数の依存性を、前記r2にも含まれる前記rのレコードの比率と、前記r2にも含まれる前記rのレコードの相対的な重要さとのうちの一方または両方に基づく測定基準を使用して追加すること、
(e)rがr3を含まないもう1つのRO r3から前記rへの1つまたは複数の依存性を、前記rにも含まれる前記r3のレコードの比率と、前記rにも含まれる前記r3のレコードの相対的な重要さとのうちの一方または両方に基づく測定基準を使用して追加すること
のうちの一方または両方をさらに含む、請求項36記載の方法。 - データ依存性の重要さに相関する重みを辺に割り当てること、
同一の測定基準を使用して前記(d)および(e)の一方または両方で追加された前記1つまたは複数の依存性の前記重みを計算すること
を含む、請求項38記載の方法。 - 前記rが、新たに作成されたノード、変更された既存ノード、SROノードおよびMROノードのうちの1つである、請求項36記載の方法。
- 共通のレコードを有するROの対が、同一のレコード名を所有する高い確率を有するように、1つまたは複数の関係指定子が関係名を含む、請求項36記載の方法。
- 関係名を使用するか、関係名と共に平衡木を使用することによって、ROを分離することをさらに含む、請求項41記載の方法。
- 基礎データの内の少なくとも一部を識別することが、
関係指定子を識別すること、
前記関係指定子と共通する1つまたは複数のレコードを有するオブジェクト依存性グラフ内の1つまたは複数のROを突き止めること
を含む、請求項36記載の方法。 - 前記マッピングするステップが、
前記基礎データの少なくとも一部に対応する前記オブジェクト依存性グラフ内の1つまたは複数のノードの組(update_set)を訪れること、
前記update_setから到達可能なノードを訪れるために、前記オブジェクト依存性グラフ内の辺をトラバースすること
を含む、請求項1記載の方法。 - 前記トラバースすることが、深さ優先または幅優先のいずれかで前記オブジェクト依存性グラフをトラバースすることを含む、請求項44記載の方法。
- 前記オブジェクト依存性グラフのトラバースのそれぞれを一意に識別するタイムスタンプを維持すること、
トラバース中にある頂点に初めて訪れた時に、必ず、前記オブジェクト依存性グラフの頂点にタイムスタンプを格納すること、
頂点のタイムスタンプと現トラバースのタイムスタンプとを比較することによって、現トラバース中に頂点に訪れているかどうかを判定すること
をさらに含む、請求項44記載の方法。 - 新しいグラフ・トラバースのたびに、タイムスタンプを増分することをさらに含む、請求項46記載の方法。
- グラフ・オブジェクトo1の2つのバージョンo1_v1およびo1_v2が存在し、前記オブジェクト依存性グラフGが、o1で終わる少なくとも1つの辺(o2,o1)を含む場合に、
前記o1で終わり組Sを構成する1つまたは複数の辺(o2,o1)について、o1_v1との一貫性を有する前記オブジェクトo2のバージョン番号と、o1_v2との一貫性を有する前記オブジェクトo2の第2のバージョン番号とを維持すること、
グラフ・オブジェクトo2の同一バージョンが、前記バージョンo1_v1およびo1_v2との一貫性を有する前記組Sの辺(o2,o1)の数と前記組Sのo1で終わるすべての辺の数とに基づいて、o1_v1とo1_v2とがどれほど似ているかを判定すること
をさらに含む、請求項1又は2のいずれか記載の方法。 - o1_v1とo1_v2とがどれほど似ているかを判定すること、前記組Sのo1で終わるすべての辺の数によって、グラフ・オブジェクトo2の同一バージョンが前記バージョンo1_v1およびo1_v2との一貫性を有する前記組Sの辺(o2,o1)の数を除算することを含む、請求項48記載の方法。
- オブジェクトのうちの少なくともいくつかが、ウェブ・ドキュメントであり、基礎データのうちの少なくともいくつかが、1つまたは複数のデータベースの一部である、請求項1記載の方法。
- 前記キャッシュに格納された前記複合オブジェクトo1のバージョンが古くなると判定することが、o1の前記バージョンが前記o2の現行バージョンとの一貫性を有しない辺(o2,o1)の数を判定することを含む、請求項1記載の方法。
- 前記キャッシュに格納された前記複合オブジェクトo1のバージョンが古くなると判定することが、前記o1で終わる辺の総数にさらに基づく、請求項51記載の方法。
- 1つまたは複数のグラフ・オブジェクトの組s_updateに含まれる1つまたは複数のオブジェクトに対する依存性を、直接にまたは前記オブジェクト依存性グラフによって推移的に指定される少なくとも1つの他のグラフ・オブジェクトが、どのように影響を受けるかを判定するために、前記オブジェクト依存性グラフと共に、基礎データに対する変更によって前記s_updateがどのように影響を受けるかに関する情報を使用することをさらに含む、請求項1記載の方法。
- 前記オブジェクトへの参照をリンク・リスト上に格納することによって一貫性スタックを実施することをさらに含む、請求項26記載の方法。
- 前記一貫性スタックを実施するために1つまたは複数の平衡木を使用すること、
少なくとも1つのオブジェクトobj1について、前記obj1への参照を一貫性スタックに追加する前に、前記obj1への参照が一貫性スタックにまだ含まれていないことを検証すること
をさらに含む、請求項26記載の方法。 - 前記一貫性セットが、1つまたは複数のリンク・リストを使用して実施される、請求項22記載の方法。
- 前記基礎データの少なくとも一部が、1つまたは複数の遠隔データ・ソースに格納され、
変更された前記基礎データの少なくとも一部に関する情報と、変更された前記基礎データの結果として値を変更された少なくとも1つのオブジェクトの識別を含む情報と、変更された前記基礎データの結果として値を変更された少なくとも1つのオブジェクトの識別を判定できるようにする情報とのうちの1つまたは複数の前記キャッシュに通信すること、そして
前記通信することに応答して、前記キャッシュからオブジェクトを除去するか、前記キャッシュ内のオブジェクトの新バージョンを更新すること
をさらに含む、請求項1記載の方法。 - 1つまたは複数の複合オブジェクトを格納する1つまたは複数のキャッシュを含むコンピュータ・システムにおいて、基礎データに対する変更が1つまたは複数の前記複合オブジェクトの値にどのように影響を及ぼすかを判定するためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記基礎データは、前記1つまたは複数の複合オブジェクトの値に影響する可能性があるデータを含み、
前記コンピュータ・システムに、
前記コンピュータ・システム上で稼働するアプリケーション・プログラムによって複合オブジェクトを生成するステップであって、前記複合オブジェクトは前記基礎データから構築される、前記生成するステップと、
前記生成された複合オブジェクトを前記1つまたは複数のキャッシュに格納するステップと、
前記基礎データの少なくとも一部を識別するステップであって、前記複合オブジェクトのうちの1つまたは複数は、前記基礎データの識別された前記少なくとも一部に対して、1つまたは複数のデータ依存性を有する、前記識別するステップと
前記複合オブジェクトのうちの1つまたは複数に、前記基礎データの少なくとも一部をマッピングするステップであって、前記マッピングが、前記基礎データの前記少なくとも一部に対する変更を識別すること、そして前記基礎データの少なくとも一部に対する変更の前記識別に応答して、1つまたは複数の前記複合オブジェクトが影響されるかどうかを識別する、前記マッピングするステップと、
オブジェクト依存性グラフ(G)をキャッシュ・マネージャ内に維持するステップであって、前記オブジェクト依存性グラフ(G)は、オブジェクト依存性グラフの頂点であるグラフ・オブジェクトと、他の頂点である複数のグラフ・オブジェクトと、前記グラフ・オブジェクトと前記複数のグラフ・オブジェクトとの間のデータ依存性を示す1又は複数の辺とを含み、前記オブジェクト依存性グラフの頂点は複合オブジェクトであり、前記他の頂点である複数のグラフ・オブジェクトは複合オブジェクト又は基礎データであり、前記オブジェクト依存性グラフ(G)は、時間に伴って変化する可能性がある、前記維持するステップと、
前記基礎データの少なくとも一部に対する変更の結果、キャッシュに格納された前記複合オブジェクトのバージョンが、そのバージョンが古くなることを判定するステップであって、前記判定は、前記オブジェクト依存性グラフ(G)の辺を調べることによって、どの複合オブジェクトが変更したかを判定する、前記判定するステップと、
前記古くなることの判定に応答して、前記複合オブジェクトの古いバージョンをキャッシュから削除するステップ又は前記複合オブジェクトの古いバージョンを、それより新しいバージョンに置換するステップと、
を実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/905114 | 1997-08-01 | ||
US08/905,114 US6026413A (en) | 1997-08-01 | 1997-08-01 | Determining how changes to underlying data affect cached objects |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH11120066A JPH11120066A (ja) | 1999-04-30 |
JP3606542B2 true JP3606542B2 (ja) | 2005-01-05 |
Family
ID=25420311
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP21284698A Expired - Lifetime JP3606542B2 (ja) | 1997-08-01 | 1998-07-28 | 基礎データの変更がオブジェクトにどのように影響するかの判定方法およびプログラム記憶装置 |
Country Status (7)
Country | Link |
---|---|
US (1) | US6026413A (ja) |
JP (1) | JP3606542B2 (ja) |
KR (1) | KR100310066B1 (ja) |
CN (1) | CN1173270C (ja) |
GB (1) | GB2328535B (ja) |
SG (1) | SG90032A1 (ja) |
TW (1) | TW400494B (ja) |
Families Citing this family (224)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6292835B1 (en) * | 1997-11-26 | 2001-09-18 | International Business Machines Corporation | Network bandwidth and object obsolescence sensitive scheduling method and apparatus for objects distributed broadcasting |
US6889358B1 (en) * | 1998-01-08 | 2005-05-03 | Lucent Technologies Inc. | Concurrency control in materialized views of a database |
US6298356B1 (en) * | 1998-01-16 | 2001-10-02 | Aspect Communications Corp. | Methods and apparatus for enabling dynamic resource collaboration |
US6256620B1 (en) * | 1998-01-16 | 2001-07-03 | Aspect Communications | Method and apparatus for monitoring information access |
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 |
US6401101B1 (en) * | 1998-06-01 | 2002-06-04 | Trident Systems, Inc. | Method, server/computer and data structure for implementation of complex objects in an object-oriented database |
US6347330B1 (en) * | 1998-09-04 | 2002-02-12 | International Business Machines Corporation | Dynamic selective distribution of events to server receivers |
US6314424B1 (en) * | 1998-09-28 | 2001-11-06 | International Business Machines Corporation | System and method for dynamically expanding and collapsing a tree view for an HTML web interface |
US6449622B1 (en) * | 1999-03-08 | 2002-09-10 | Starfish Software, Inc. | System and methods for synchronizing datasets when dataset changes may be received out of order |
US6460051B1 (en) * | 1998-10-28 | 2002-10-01 | Starfish Software, Inc. | System and methods for synchronizing datasets in a communication environment having high-latency or other adverse characteristics |
US6249844B1 (en) * | 1998-11-13 | 2001-06-19 | International Business Machines Corporation | Identifying, processing and caching object fragments in a web environment |
US20030195974A1 (en) * | 1998-12-04 | 2003-10-16 | Ronning Joel A. | Apparatus and method for scheduling of search for updates or downloads of a file |
US7058597B1 (en) | 1998-12-04 | 2006-06-06 | Digital River, Inc. | Apparatus and method for adaptive fraud screening for electronic commerce transactions |
US7617124B1 (en) | 1998-12-04 | 2009-11-10 | Digital River, Inc. | Apparatus and method for secure downloading of files |
GB2347528A (en) * | 1999-03-04 | 2000-09-06 | Naxt Limited | Object database with caching support |
US6535892B1 (en) | 1999-03-08 | 2003-03-18 | Starfish Software, Inc. | System and methods for exchanging messages between a client and a server for synchronizing datasets |
US6360361B1 (en) * | 1999-03-15 | 2002-03-19 | Microsoft Corporation | Field reordering to optimize cache utilization |
US7343412B1 (en) * | 1999-06-24 | 2008-03-11 | International Business Machines Corporation | Method for maintaining and managing dynamic web pages stored in a system cache and referenced objects cached in other data stores |
US6031747A (en) * | 1999-08-02 | 2000-02-29 | Lockheed Martin Missiles & Space Company | Interleaved synchronous flyback converter with high efficiency over a wide operating load range |
US6880126B1 (en) | 1999-08-03 | 2005-04-12 | International Business Machines Corporation | Controlling presentation of a GUI, using view controllers created by an application mediator, by identifying a destination to access a target to retrieve data |
US6539396B1 (en) * | 1999-08-31 | 2003-03-25 | Accenture Llp | Multi-object identifier system and method for information service pattern environment |
US6772225B1 (en) * | 1999-09-30 | 2004-08-03 | International Business Machines Corporation | Policy enabled web caching |
US6687698B1 (en) | 1999-10-18 | 2004-02-03 | Fisher Rosemount Systems, Inc. | Accessing and updating a configuration database from distributed physical locations within a process control system |
US6704737B1 (en) * | 1999-10-18 | 2004-03-09 | Fisher-Rosemount Systems, Inc. | Accessing and updating a configuration database from distributed physical locations within a process control system |
US6779177B1 (en) | 1999-10-28 | 2004-08-17 | International Business Machines Corporation | Mechanism for cross channel multi-server multi-protocol multi-data model thin clients |
US7181686B1 (en) | 1999-10-29 | 2007-02-20 | International Business Machines Corporation | Selecting screens in a GUI using events generated by a set of view controllers |
US6862686B1 (en) | 1999-10-29 | 2005-03-01 | International Business Machines Corporation | Method and apparatus in a data processing system for the separation of role-based permissions specification from its corresponding implementation of its semantic behavior |
US7383320B1 (en) * | 1999-11-05 | 2008-06-03 | Idom Technologies, Incorporated | Method and apparatus for automatically updating website content |
US6427235B1 (en) * | 1999-11-05 | 2002-07-30 | Sun Microsystems, Inc. | Method and apparatus for performing prefetching at the critical section level |
US6721780B1 (en) * | 1999-11-09 | 2004-04-13 | Fireclick, Inc. | Predictive pre-download of network objects |
US6766325B1 (en) * | 1999-12-02 | 2004-07-20 | Microsoft Corporation | System and method for maintaining data for performing “what if” analysis |
AU1956101A (en) * | 1999-12-10 | 2001-06-18 | Sun Microsystems, Inc. | Maintaining cache consistency for dynamic web content |
US6606525B1 (en) * | 1999-12-27 | 2003-08-12 | Motorola, Inc. | System and method of merging static data in web pages |
FR2793910B1 (fr) * | 2000-03-20 | 2005-03-25 | Ibm | Procede et systeme pour publier des documents dynamiques sur le web |
JP2003528395A (ja) * | 2000-03-22 | 2003-09-24 | インターウォーヴェン インコーポレイテッド | コンピュータネットワーク内でデータを自動的に配置するための方法及び装置 |
US6963875B2 (en) | 2000-03-23 | 2005-11-08 | General Atomics | Persistent archives |
US6622168B1 (en) * | 2000-04-10 | 2003-09-16 | Chutney Technologies, Inc. | Dynamic page generation acceleration using component-level caching |
US20010032257A1 (en) * | 2000-04-12 | 2001-10-18 | Wells Ronald B. | Method and system for managing information on a network |
US6457047B1 (en) * | 2000-05-08 | 2002-09-24 | Verity, Inc. | Application caching system and method |
US7475404B2 (en) | 2000-05-18 | 2009-01-06 | Maquis Techtrix Llc | System and method for implementing click-through for browser executed software including ad proxy and proxy cookie caching |
US8086697B2 (en) * | 2005-06-28 | 2011-12-27 | Claria Innovations, Llc | Techniques for displaying impressions in documents delivered over a computer network |
KR20010107572A (ko) * | 2000-05-24 | 2001-12-07 | 포만 제프리 엘 | 신뢰성 기반의 링크 액세스 제어 방법, 장치 및 프로그램제품 |
US7020658B1 (en) | 2000-06-02 | 2006-03-28 | Charles E. Hill & Associates | Data file management system and method for browsers |
US7200666B1 (en) | 2000-07-07 | 2007-04-03 | International Business Machines Corporation | Live connection enhancement for data source interface |
US6615317B2 (en) * | 2000-07-07 | 2003-09-02 | Fitech Laboratories, Inc. | Methods and systems for providing a highly scalable synchronous data cache |
WO2002007364A2 (en) * | 2000-07-17 | 2002-01-24 | Eplication Networks Ltd. | BANDWIDTH SAVINGS AND QoS IMPROVEMENT FOR WWW SITES BY CATCHING STATIC AND DYNAMIC CONTENT ON A DISTRIBUTED NETWORK OF CACHES |
WO2002017082A1 (en) * | 2000-08-22 | 2002-02-28 | Akamai Technologies, Inc. | Dynamic content assembly on edge-of-network servers in a content delivery network |
JP2004515864A (ja) * | 2000-10-24 | 2004-05-27 | トムソン ライセンシング ソシエテ アノニム | 埋め込み型メディア・プレーヤ・ページのサイズ調整方法、記録媒体、および伝送媒体 |
US8122236B2 (en) | 2001-10-24 | 2012-02-21 | Aol Inc. | Method of disseminating advertisements using an embedded media player page |
US6792419B1 (en) * | 2000-10-30 | 2004-09-14 | Verity, Inc. | System and method for ranking hyperlinked documents based on a stochastic backoff processes |
FR2816157A1 (fr) * | 2000-10-31 | 2002-05-03 | Thomson Multimedia Sa | Procede de traitement de donnees video distinees a etre visualisees sur ecran et dispositif mettant en oeuvre le procede |
US20020103920A1 (en) | 2000-11-21 | 2002-08-01 | Berkun Ken Alan | Interpretive stream metadata extraction |
US20040030681A1 (en) * | 2000-11-21 | 2004-02-12 | Shannon Paul Thurmond | System and process for network site fragmented search |
US7051330B1 (en) * | 2000-11-21 | 2006-05-23 | Microsoft Corporation | Generic application server and method of operation therefor |
US20020073110A1 (en) * | 2000-12-12 | 2002-06-13 | Edouard Duvillier | Version collection technique implemented on an intrinsic versioning information storage and retrieval system |
US8452850B2 (en) | 2000-12-14 | 2013-05-28 | International Business Machines Corporation | Method, apparatus and computer program product to crawl a web site |
US7904595B2 (en) | 2001-01-18 | 2011-03-08 | Sdl International America Incorporated | Globalization management system and method therefor |
US7269784B1 (en) | 2001-01-22 | 2007-09-11 | Kasriel Stephane | Server-originated differential caching |
US20020107910A1 (en) * | 2001-02-02 | 2002-08-08 | Yan Zhao | Client/server two-way communication system framework under HTTP protocol |
US8392827B2 (en) * | 2001-04-30 | 2013-03-05 | International Business Machines Corporation | Method for generation and assembly of web page content |
US7975042B2 (en) * | 2001-05-01 | 2011-07-05 | International Business Machines Corporation | Method for adapting an internet web server to short-term changes in demand |
JP2002373109A (ja) * | 2001-06-13 | 2002-12-26 | Nec Corp | データ先読みシステムおよび先読み方法 |
US7185063B1 (en) * | 2001-06-22 | 2007-02-27 | Digital River, Inc. | Content delivery network using differential caching |
US20030004998A1 (en) * | 2001-06-29 | 2003-01-02 | Chutney Technologies, Inc. | Proxy-based acceleration of dynamically generated content |
JP2003015793A (ja) * | 2001-07-03 | 2003-01-17 | Matsushita Electric Works Ltd | ネットワーク上の監視対象の情報を監視画面上にダイナミックに変化させて表示する方法、ネットワーク上の監視対象の情報を監視画面上にダイナミックに変化させて表示するシステム、およびこのシステムを実現するためのユーザインタフェースプレイヤープログラム |
US20040128346A1 (en) * | 2001-07-16 | 2004-07-01 | Shmuel Melamed | Bandwidth savings and qos improvement for www sites by catching static and dynamic content on a distributed network of caches |
US6934720B1 (en) * | 2001-08-04 | 2005-08-23 | Oracle International Corp. | Automatic invalidation of cached data |
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 |
US20030055915A1 (en) * | 2001-09-14 | 2003-03-20 | Ngo Kin Cuc | Method and apparatus for transmitting data over a network |
US6988105B2 (en) * | 2001-09-27 | 2006-01-17 | International Business Machines Corporation | Use of agents and control documents to update a database structure |
US7797376B1 (en) * | 2001-11-13 | 2010-09-14 | Cisco Technology, Inc. | Arrangement for providing content operation identifiers with a specified HTTP object for acceleration of relevant content operations |
US20040064500A1 (en) * | 2001-11-20 | 2004-04-01 | Kolar Jennifer Lynn | System and method for unified extraction of media objects |
US20030110272A1 (en) * | 2001-12-11 | 2003-06-12 | Du Castel Bertrand | System and method for filtering content |
US7730154B2 (en) * | 2001-12-19 | 2010-06-01 | International Business Machines Corporation | Method and system for fragment linking and fragment caching |
US20030120722A1 (en) * | 2001-12-20 | 2003-06-26 | Forkner Damien R. | Persistent process software architecture |
US7062515B1 (en) * | 2001-12-28 | 2006-06-13 | Vignette Corporation | System and method for the synchronization of a file in a cache |
US6976244B2 (en) * | 2002-01-09 | 2005-12-13 | International Business Machines Corporation | Method, system, and product for storage of attribute data in an object oriented environment |
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 |
US7970816B2 (en) * | 2002-03-01 | 2011-06-28 | NetSuite Inc. | Client-side caching of pages with changing content |
US7370329B2 (en) * | 2002-03-01 | 2008-05-06 | Sun Microsystems, Inc. | System and method for state saves in a distributed data system |
US20040139089A1 (en) * | 2002-03-29 | 2004-07-15 | Wells Ronald B. | Method and system for managing information on a network |
US7069515B1 (en) * | 2002-05-21 | 2006-06-27 | Claria Corporation | Method and apparatus for displaying messages in computer systems |
GB2412464B (en) * | 2002-05-29 | 2006-09-27 | Flyingspark Ltd | Method and system for using caches |
GB2412769B (en) * | 2002-05-29 | 2006-09-13 | Flyingspark Ltd | Methods and systems for using caches |
US20040003034A1 (en) * | 2002-06-27 | 2004-01-01 | Weiyun Sun | Method for notification of varying versions of code between client and server |
US20040064458A1 (en) * | 2002-10-01 | 2004-04-01 | Richard Hagarty | Deletion objector for determining whether or not to delete an object from an application |
TWI220713B (en) * | 2002-10-04 | 2004-09-01 | Hon Hai Prec Ind Co Ltd | System and method for synchronizing documents between multi-nodes |
US7603341B2 (en) | 2002-11-05 | 2009-10-13 | Claria Corporation | Updating the content of a presentation vehicle in a computer network |
WO2004043045A2 (de) * | 2002-11-06 | 2004-05-21 | Tellique Kommunikationstechnik Gmbh | Verfahren zum vorabübertragen strukturierter datenmengen zwischen einer cliente-einrichtung und einer servereinrichtung |
US7818506B1 (en) * | 2002-12-13 | 2010-10-19 | Vignette Software Llc | Method and system for cache management |
US8463998B1 (en) | 2002-12-13 | 2013-06-11 | Open Text S.A. | System and method for managing page variations in a page delivery cache |
US8312222B1 (en) | 2002-12-13 | 2012-11-13 | Open Text, S.A. | Event-driven regeneration of pages for web-based applications |
US8380932B1 (en) * | 2002-12-13 | 2013-02-19 | Open Text S.A. | Contextual regeneration of pages for web-based applications |
US7168064B2 (en) * | 2003-03-25 | 2007-01-23 | Electric Cloud, Inc. | System and method for supplementing program builds with file usage information |
US7395529B1 (en) * | 2003-03-25 | 2008-07-01 | Electric Cloud, Inc. | Conflict detection and correction in a program build environment |
US7676788B1 (en) * | 2003-03-25 | 2010-03-09 | Electric Cloud, Inc. | Architecture and method for executing program builds |
US7539976B1 (en) | 2003-03-25 | 2009-05-26 | Electric Cloud, Inc. | System and method for intelligently distributing source files within a distributed program build architecture |
US7269581B2 (en) * | 2003-03-28 | 2007-09-11 | Microsoft Corporation | Systems and methods for proactive caching utilizing OLAP variants |
US20040193656A1 (en) * | 2003-03-28 | 2004-09-30 | Pizzo Michael J. | Systems and methods for caching and invalidating database results and derived objects |
US7836031B2 (en) * | 2003-03-28 | 2010-11-16 | Microsoft Corporation | Systems and methods for employing a trigger-based mechanism to detect a database table change and registering to receive notification of the change |
US20040205048A1 (en) * | 2003-03-28 | 2004-10-14 | Pizzo Michael J. | Systems and methods for requesting and receiving database change notifications |
US7577960B2 (en) * | 2003-06-19 | 2009-08-18 | Microsoft Corporation | System and method for managing cached objects using notifications bonds |
US7398304B2 (en) * | 2003-06-23 | 2008-07-08 | Microsoft Corporation | General dependency model for invalidating cache entries |
US7624126B2 (en) * | 2003-06-25 | 2009-11-24 | Microsoft Corporation | Registering for and retrieving database table change information that can be used to invalidate cache entries |
US20050027549A1 (en) * | 2003-08-01 | 2005-02-03 | Sbc Knowledge Ventures, L.P. | Multi-layer architecture for property management |
US7788681B1 (en) | 2003-09-16 | 2010-08-31 | Vignette Software, LLC | System and method for incorporating web services in a web site |
US7978716B2 (en) * | 2003-11-24 | 2011-07-12 | Citrix Systems, Inc. | Systems and methods for providing a VPN solution |
US7499913B2 (en) | 2004-01-26 | 2009-03-03 | International Business Machines Corporation | Method for handling anchor text |
US7293005B2 (en) * | 2004-01-26 | 2007-11-06 | International Business Machines Corporation | Pipelined architecture for global analysis and index building |
US8296304B2 (en) * | 2004-01-26 | 2012-10-23 | International Business Machines Corporation | Method, system, and program for handling redirects in a search engine |
US7424467B2 (en) * | 2004-01-26 | 2008-09-09 | International Business Machines Corporation | Architecture for an indexer with fixed width sort and variable width sort |
US20050192922A1 (en) * | 2004-02-27 | 2005-09-01 | Edlund Stefan B. | Client-server computing system capable of validating cached data based on data transformation |
US20060004801A1 (en) * | 2004-05-03 | 2006-01-05 | Hoefer Felix F | Data consistency in a multi-layer datawarehouse |
US7899907B2 (en) * | 2004-06-30 | 2011-03-01 | Siebel Systems, Inc. | Access and synchronization with enterprise applications using remote hosted solution |
US8739274B2 (en) * | 2004-06-30 | 2014-05-27 | Citrix Systems, Inc. | Method and device for performing integrated caching in a data communication network |
US7757074B2 (en) | 2004-06-30 | 2010-07-13 | Citrix Application Networking, Llc | System and method for establishing a virtual private network |
US8495305B2 (en) | 2004-06-30 | 2013-07-23 | Citrix Systems, Inc. | Method and device for performing caching of dynamically generated objects in a data communication network |
ATE535078T1 (de) * | 2004-07-23 | 2011-12-15 | Citrix Systems Inc | Verfahren und system zur sicherung von zugriff aus der ferne auf private netze |
EP1771998B1 (en) * | 2004-07-23 | 2015-04-15 | Citrix Systems, Inc. | Systems and methods for optimizing communications between network nodes |
US8255413B2 (en) * | 2004-08-19 | 2012-08-28 | Carhamm Ltd., Llc | Method and apparatus for responding to request for information-personalization |
US8078602B2 (en) * | 2004-12-17 | 2011-12-13 | Claria Innovations, Llc | Search engine for a computer network |
US7984113B2 (en) * | 2004-09-08 | 2011-07-19 | Sap Ag | System and method for passing messages to a web browser |
US7461064B2 (en) * | 2004-09-24 | 2008-12-02 | International Buiness Machines Corporation | Method for searching documents for ranges of numeric values |
US20060080271A1 (en) * | 2004-10-08 | 2006-04-13 | Jeff Williams | Dynamic reporting tool for a fact warehouse, a fact contained within the fact warehouse, and a method for refreshing the fact warehouse |
EP1825388A4 (en) * | 2004-11-17 | 2010-07-28 | Univ California | SYSTEM AND METHOD FOR PROVIDING A WEBSITE |
US7590635B2 (en) * | 2004-12-15 | 2009-09-15 | Applied Minds, Inc. | Distributed data store with an orderstamp to ensure progress |
US11321408B2 (en) | 2004-12-15 | 2022-05-03 | Applied Invention, Llc | Data store with lock-free stateless paging capacity |
US7774308B2 (en) * | 2004-12-15 | 2010-08-10 | Applied Minds, Inc. | Anti-item for deletion of content in a distributed datastore |
US8275804B2 (en) | 2004-12-15 | 2012-09-25 | Applied Minds, Llc | Distributed data store with a designated master to ensure consistency |
US8996486B2 (en) | 2004-12-15 | 2015-03-31 | Applied Invention, Llc | Data store with lock-free stateless paging capability |
US7567943B2 (en) * | 2004-12-17 | 2009-07-28 | Microsoft Corporation | System and method for composition of mappings given by dependencies |
US7693863B2 (en) * | 2004-12-20 | 2010-04-06 | Claria Corporation | Method and device for publishing cross-network user behavioral data |
US7810089B2 (en) | 2004-12-30 | 2010-10-05 | Citrix Systems, Inc. | Systems and methods for automatic installation and execution of a client-side acceleration program |
US8954595B2 (en) * | 2004-12-30 | 2015-02-10 | Citrix Systems, Inc. | Systems and methods for providing client-side accelerated access to remote applications via TCP buffering |
US20060253605A1 (en) * | 2004-12-30 | 2006-11-09 | Prabakar Sundarrajan | Systems and methods for providing integrated client-side acceleration techniques to access remote applications |
US8706877B2 (en) * | 2004-12-30 | 2014-04-22 | Citrix Systems, Inc. | Systems and methods for providing client-side dynamic redirection to bypass an intermediary |
US8700695B2 (en) * | 2004-12-30 | 2014-04-15 | Citrix Systems, Inc. | Systems and methods for providing client-side accelerated access to remote applications via TCP pooling |
US8549149B2 (en) | 2004-12-30 | 2013-10-01 | Citrix Systems, Inc. | Systems and methods for providing client-side accelerated access to remote applications via TCP multiplexing |
US7647632B1 (en) | 2005-01-04 | 2010-01-12 | Arcsight, Inc. | Object reference in a system |
US8255456B2 (en) | 2005-12-30 | 2012-08-28 | Citrix Systems, Inc. | System and method for performing flash caching of dynamically generated objects in a data communication network |
US7849269B2 (en) * | 2005-01-24 | 2010-12-07 | Citrix Systems, Inc. | System and method for performing entity tag and cache control of a dynamically generated object not identified as cacheable in a network |
US8073866B2 (en) * | 2005-03-17 | 2011-12-06 | Claria Innovations, Llc | Method for providing content to an internet user based on the user's demonstrated content preferences |
US7882447B2 (en) * | 2005-03-30 | 2011-02-01 | Ebay Inc. | Method and system to determine area on a user interface |
US7716182B2 (en) * | 2005-05-25 | 2010-05-11 | Dassault Systemes Enovia Corp. | Version-controlled cached data store |
US7698349B2 (en) * | 2005-05-25 | 2010-04-13 | Microsoft Corporation | Dimension member sliding in online analytical processing |
US8417693B2 (en) * | 2005-07-14 | 2013-04-09 | International Business Machines Corporation | Enforcing native access control to indexed documents |
US7702686B2 (en) * | 2005-07-29 | 2010-04-20 | Microsoft Corporation | Retrieving and persisting objects from/to relational databases |
US8301839B2 (en) * | 2005-12-30 | 2012-10-30 | Citrix Systems, Inc. | System and method for performing granular invalidation of cached dynamically generated objects in a data communication network |
US7921184B2 (en) * | 2005-12-30 | 2011-04-05 | Citrix Systems, Inc. | System and method for performing flash crowd caching of dynamically generated objects in a data communication network |
US9633356B2 (en) * | 2006-07-20 | 2017-04-25 | Aol Inc. | Targeted advertising for playlists based upon search queries |
US7536401B2 (en) * | 2006-08-07 | 2009-05-19 | International Business Machines Corporation | Methods, systems, and computer program products for using graphs to solve circular dependency in object persistence |
US7725524B2 (en) | 2006-10-03 | 2010-05-25 | Electric Cloud, Inc. | Process automation system and method having a hierarchical architecture with multiple tiers |
US7886265B2 (en) | 2006-10-03 | 2011-02-08 | Electric Cloud, Inc. | Process automation system and method employing property attachment techniques |
US8042089B2 (en) * | 2006-10-03 | 2011-10-18 | Electric Cloud, Inc. | Process automation system and method employing multi-stage report generation |
US9697253B2 (en) * | 2006-10-20 | 2017-07-04 | Oracle International Corporation | Consistent client-side cache |
US10296629B2 (en) * | 2006-10-20 | 2019-05-21 | Oracle International Corporation | Server supporting a consistent client-side cache |
US8074028B2 (en) | 2007-03-12 | 2011-12-06 | Citrix Systems, Inc. | Systems and methods of providing a multi-tier cache |
US8504775B2 (en) | 2007-03-12 | 2013-08-06 | Citrix Systems, Inc | Systems and methods of prefreshening cached objects based on user's current web page |
US8701010B2 (en) * | 2007-03-12 | 2014-04-15 | Citrix Systems, Inc. | Systems and methods of using the refresh button to determine freshness policy |
US7720936B2 (en) * | 2007-03-12 | 2010-05-18 | Citrix Systems, Inc. | Systems and methods of freshening and prefreshening a DNS cache |
US7809818B2 (en) * | 2007-03-12 | 2010-10-05 | Citrix Systems, Inc. | Systems and method of using HTTP head command for prefetching |
US7584294B2 (en) * | 2007-03-12 | 2009-09-01 | Citrix Systems, Inc. | Systems and methods for prefetching objects for caching using QOS |
US8103783B2 (en) | 2007-03-12 | 2012-01-24 | Citrix Systems, Inc. | Systems and methods of providing security and reliability to proxy caches |
US7783757B2 (en) * | 2007-03-12 | 2010-08-24 | Citrix Systems, Inc. | Systems and methods of revalidating cached objects in parallel with request for object |
US8037126B2 (en) * | 2007-03-12 | 2011-10-11 | Citrix Systems, Inc. | Systems and methods of dynamically checking freshness of cached objects based on link status |
US8086609B2 (en) * | 2007-11-01 | 2011-12-27 | Cavium, Inc. | Graph caching |
US20090144338A1 (en) * | 2007-11-30 | 2009-06-04 | Yahoo! Inc. | Asynchronously replicated database system using dynamic mastership |
US20100174863A1 (en) * | 2007-11-30 | 2010-07-08 | Yahoo! Inc. | System for providing scalable in-memory caching for a distributed database |
CN101981545B (zh) | 2008-01-31 | 2014-08-20 | 甲骨文国际公司 | 用于事务缓存的系统和方法 |
US8943271B2 (en) | 2008-06-12 | 2015-01-27 | Microsoft Corporation | Distributed cache arrangement |
US20100017702A1 (en) * | 2008-07-16 | 2010-01-21 | International Business Machines Corporation | Asynchronous Partial Page Updates Based On Dynamic Dependency Calculation |
US8041893B1 (en) | 2008-09-09 | 2011-10-18 | Vignette Software Llc | System and method for managing large filesystem-based caches |
US8108623B2 (en) * | 2008-10-26 | 2012-01-31 | Microsoft Corporation | Poll based cache event notifications in a distributed cache |
US8117156B2 (en) * | 2008-10-26 | 2012-02-14 | Microsoft Corporation | Replication for common availability substrate |
US9069644B2 (en) | 2009-04-10 | 2015-06-30 | Electric Cloud, Inc. | Architecture and method for versioning registry entries in a distributed program build |
KR101172579B1 (ko) | 2009-12-15 | 2012-08-09 | 한국과학기술원 | 이상 속성을 포함하는 데이터의 검출 방법 및 장치 |
US20110225120A1 (en) * | 2010-03-11 | 2011-09-15 | Yahoo! Inc. | System for maintaining a distributed database using leases |
US20110225121A1 (en) * | 2010-03-11 | 2011-09-15 | Yahoo! Inc. | System for maintaining a distributed database using constraints |
US9361394B2 (en) * | 2010-06-30 | 2016-06-07 | Oracle International Corporation | Response header invalidation |
CN102331985B (zh) | 2010-07-12 | 2013-09-25 | 阿里巴巴集团控股有限公司 | 网页页面的分片嵌套缓存的处理方法和装置 |
US10657540B2 (en) | 2011-01-29 | 2020-05-19 | Sdl Netherlands B.V. | Systems, methods, and media for web content management |
US9547626B2 (en) | 2011-01-29 | 2017-01-17 | Sdl Plc | Systems, methods, and media for managing ambient adaptability of web applications and web services |
US10580015B2 (en) | 2011-02-25 | 2020-03-03 | Sdl Netherlands B.V. | Systems, methods, and media for executing and optimizing online marketing initiatives |
US8997084B2 (en) * | 2011-04-20 | 2015-03-31 | Hewlett-Packard Development Company, L.P. | Method and apparatus for determining compatible versions of dependent entities in a computer system |
CN102768660B (zh) * | 2011-05-05 | 2014-09-03 | 江苏金鸽网络科技有限公司 | 一种基于动态交互的互联网采集系统模版生成方法 |
US8850266B2 (en) | 2011-06-14 | 2014-09-30 | International Business Machines Corporation | Effective validation of execution units within a processor |
CN102289354B (zh) * | 2011-06-17 | 2013-07-10 | 华中科技大学 | 一种失效盘优先的高速缓冲存储器替换方法 |
CN102955786B (zh) * | 2011-08-22 | 2015-09-23 | 北大方正集团有限公司 | 一种动态网页数据缓存和发布方法及系统 |
US20130086323A1 (en) * | 2011-09-30 | 2013-04-04 | Oracle International Corporation | Efficient cache management in a cluster |
US9038033B1 (en) * | 2011-12-09 | 2015-05-19 | Sencha, Inc. | Techniques and mechanisms for web application minification |
US9430449B2 (en) | 2012-03-30 | 2016-08-30 | Sdl Plc | Systems, methods, and media for managing editable previews of webpages |
US9773270B2 (en) | 2012-05-11 | 2017-09-26 | Fredhopper B.V. | Method and system for recommending products based on a ranking cocktail |
US11308528B2 (en) | 2012-09-14 | 2022-04-19 | Sdl Netherlands B.V. | Blueprinting of multimedia assets |
US10452740B2 (en) | 2012-09-14 | 2019-10-22 | Sdl Netherlands B.V. | External content libraries |
US11386186B2 (en) | 2012-09-14 | 2022-07-12 | Sdl Netherlands B.V. | External content library connector systems and methods |
US8583763B1 (en) | 2012-09-19 | 2013-11-12 | Edgecast Networks, Inc. | Sandboxing content optimization at the network edge |
US9881101B2 (en) | 2012-11-16 | 2018-01-30 | International Business Machines Corporation | Dynamic file retrieving for web page loading |
US8930760B2 (en) | 2012-12-17 | 2015-01-06 | International Business Machines Corporation | Validating cache coherency protocol within a processor |
CN103106334A (zh) * | 2012-12-26 | 2013-05-15 | 深圳Tcl新技术有限公司 | 利用二维码控制交互式内容的方法和装置 |
US9648125B2 (en) * | 2013-10-04 | 2017-05-09 | Akamai Technologies, Inc. | Systems and methods for caching content with notification-based invalidation |
US9641640B2 (en) * | 2013-10-04 | 2017-05-02 | Akamai Technologies, Inc. | Systems and methods for controlling cacheability and privacy of objects |
CN103645904B (zh) * | 2013-12-20 | 2016-09-21 | 北京京东尚科信息技术有限公司 | 一种接口调用的缓存实现方法 |
US9898520B2 (en) | 2014-03-25 | 2018-02-20 | Open Text Sa Ulc | Systems and methods for seamless access to remotely managed documents using synchronization of locally stored documents |
WO2016032548A1 (en) * | 2014-08-25 | 2016-03-03 | Hewlett Packard Enterprise Development Lp | Providing transactional support to a data storage system |
US10061577B2 (en) | 2014-10-14 | 2018-08-28 | Electric Cloud, Inc. | System and method for optimizing job scheduling within program builds |
US20160232470A1 (en) * | 2015-02-05 | 2016-08-11 | Keguo Zhou | Automated Generation of Process Flow Charts |
US10614167B2 (en) | 2015-10-30 | 2020-04-07 | Sdl Plc | Translation review workflow systems and methods |
US10769113B2 (en) * | 2016-03-25 | 2020-09-08 | Microsoft Technology Licensing, Llc | Attribute-based dependency identification for operation ordering |
US11003632B2 (en) | 2016-11-28 | 2021-05-11 | Open Text Sa Ulc | System and method for content synchronization |
US10664440B2 (en) | 2017-02-09 | 2020-05-26 | International Business Machines Corporation | Format management for a content repository |
US11301431B2 (en) | 2017-06-02 | 2022-04-12 | Open Text Sa Ulc | System and method for selective synchronization |
US11567934B2 (en) | 2018-04-20 | 2023-01-31 | Oracle International Corporation | Consistent client-side caching for fine grained invalidations |
US10949393B2 (en) * | 2018-06-05 | 2021-03-16 | International Business Machines Corporation | Object deletion in distributed computing environments |
CN109284182A (zh) * | 2018-10-10 | 2019-01-29 | 广州虎牙信息科技有限公司 | 响应数据更新方法、装置及计算机设备 |
US20210311910A1 (en) * | 2018-10-17 | 2021-10-07 | Tinderbox Media Limited | Media production system and method |
US11455304B2 (en) * | 2019-09-20 | 2022-09-27 | Sap Se | Graph-based predictive cache |
US11409711B2 (en) | 2019-12-03 | 2022-08-09 | Western Digital Technologies, Inc. | Barriers for dependent operations among sharded data stores |
US12111794B2 (en) | 2019-12-03 | 2024-10-08 | Western Digital Technologies, Inc. | Replication barriers for dependent data transfers between data stores |
US11567899B2 (en) * | 2019-12-03 | 2023-01-31 | Western Digital Technologies, Inc. | Managing dependent delete operations among data stores |
US11403397B2 (en) | 2020-04-30 | 2022-08-02 | Mcafee, Llc | Cache system for consistent retrieval of related objects |
US20230153537A1 (en) * | 2021-11-18 | 2023-05-18 | International Business Machines Corporation | Automatic data domain identification |
Family Cites Families (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4325120A (en) * | 1978-12-21 | 1982-04-13 | Intel Corporation | Data processing system |
US4322795A (en) * | 1980-01-24 | 1982-03-30 | Honeywell Information Systems Inc. | Cache memory utilizing selective clearing and least recently used updating |
US5058185A (en) * | 1988-06-27 | 1991-10-15 | International Business Machines Corporation | Object management and delivery system having multiple object-resolution capability |
US5317716A (en) * | 1988-08-16 | 1994-05-31 | International Business Machines Corporation | Multiple caches using state information indicating if cache line was previously modified and type of access rights granted to assign access rights to cache line |
EP0396834B1 (en) * | 1989-05-12 | 1995-08-30 | International Business Machines Corporation | Version-control in a data-processing system |
US5226143A (en) * | 1990-03-14 | 1993-07-06 | International Business Machines Corporation | Multiprocessor system includes operating system for notifying only those cache managers who are holders of shared locks on a designated page by global lock manager |
JP2575543B2 (ja) * | 1990-04-04 | 1997-01-29 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 同時アクセス管理方法 |
US5261069A (en) * | 1990-08-13 | 1993-11-09 | Hewlett-Packard Company | Method of maintaining consistency of cached data in a database system |
US5357618A (en) * | 1991-04-15 | 1994-10-18 | International Business Machines Corporation | Cache prefetch and bypass using stride registers |
US5355477A (en) * | 1991-12-23 | 1994-10-11 | International Business Machines Corporation | Method for updating a block using record-level locks by committing the update if the block has not been updated by another process otherwise spinning |
US5287507A (en) * | 1992-03-27 | 1994-02-15 | Sun Microsystems, Inc. | Method and apparatus for portable object handles that use local caches |
US5396614A (en) * | 1992-06-25 | 1995-03-07 | Sun Microsystems, Inc. | Method and apparatus for a secure protocol for virtual memory managers that use memory objects |
US5434992A (en) * | 1992-09-04 | 1995-07-18 | International Business Machines Corporation | Method and means for dynamically partitioning cache into a global and data type subcache hierarchy from a real time reference trace |
US5452447A (en) * | 1992-12-21 | 1995-09-19 | Sun Microsystems, Inc. | Method and apparatus for a caching file server |
US5560007A (en) * | 1993-06-30 | 1996-09-24 | Borland International, Inc. | B-tree key-range bit map index optimization of database queries |
WO1995004960A2 (en) * | 1993-08-02 | 1995-02-16 | Persistence Software, Inc. | Method and apparatus for managing relational data in an object cache |
US5544345A (en) * | 1993-11-08 | 1996-08-06 | International Business Machines Corporation | Coherence controls for store-multiple shared data coordinated by cache directory entries in a shared electronic storage |
US5574902A (en) * | 1994-05-02 | 1996-11-12 | International Business Machines Corporation | Efficient destaging of updated local cache pages for a transaction in a multisystem and multiprocess database management system with a high-speed shared electronic store |
US5546579A (en) * | 1994-05-02 | 1996-08-13 | International Business Machines Corporation | Page refreshing procedure using two locking granularities to ensure cache coherency in a multisystem database processing environment having a high-speed shared electronic store |
US5542078A (en) * | 1994-09-29 | 1996-07-30 | Ontos, Inc. | Object oriented data store integration environment for integration of object oriented databases and non-object oriented data facilities |
US5577224A (en) * | 1994-12-13 | 1996-11-19 | Microsoft Corporation | Method and system for caching data |
US5689711A (en) * | 1995-04-21 | 1997-11-18 | Bardasz; Theodore | Method and apparatus for representing data dependencies in software modeling systems |
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 |
US5752246A (en) * | 1995-06-07 | 1998-05-12 | International Business Machines Corporation | Service agent for fulfilling requests of a web browser |
US5778427A (en) * | 1995-07-07 | 1998-07-07 | Sun Microsystems, Inc. | Method and apparatus for selecting a way of a multi-way associative cache by storing waylets in a translation structure |
US6366933B1 (en) * | 1995-10-27 | 2002-04-02 | At&T Corp. | Method and apparatus for tracking and viewing changes on the web |
US5797004A (en) * | 1995-12-08 | 1998-08-18 | Sun Microsystems, Inc. | System and method for caching and allocating thread synchronization constructs |
US5873084A (en) * | 1996-01-18 | 1999-02-16 | Sun Microsystems, Inc. | Database network connectivity product |
US5862325A (en) * | 1996-02-29 | 1999-01-19 | Intermind Corporation | Computer-based communication system and method using metadata defining a control structure |
US5842216A (en) * | 1996-05-03 | 1998-11-24 | Mitsubishi Electric Information Technology Center America, Inc. | System for sending small positive data notification messages over a network to indicate that a recipient node should obtain a particular version of a particular data item |
GB2317302A (en) * | 1996-09-12 | 1998-03-18 | Sharp Kk | A distributed information system |
US5787470A (en) * | 1996-10-18 | 1998-07-28 | At&T Corp | Inter-cache protocol for improved WEB performance |
US5852717A (en) * | 1996-11-20 | 1998-12-22 | Shiva Corporation | Performance optimizations for computer networks utilizing HTTP |
-
1997
- 1997-08-01 US US08/905,114 patent/US6026413A/en not_active Expired - Lifetime
-
1998
- 1998-07-01 TW TW087110654A patent/TW400494B/zh not_active IP Right Cessation
- 1998-07-17 GB GB9815429A patent/GB2328535B/en not_active Expired - Lifetime
- 1998-07-28 JP JP21284698A patent/JP3606542B2/ja not_active Expired - Lifetime
- 1998-07-28 SG SG9802694A patent/SG90032A1/en unknown
- 1998-07-31 CN CNB981167594A patent/CN1173270C/zh not_active Expired - Lifetime
- 1998-08-01 KR KR1019980031400A patent/KR100310066B1/ko not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
KR19990023290A (ko) | 1999-03-25 |
GB2328535B (en) | 2002-08-14 |
KR100310066B1 (ko) | 2001-12-17 |
US6026413A (en) | 2000-02-15 |
SG90032A1 (en) | 2002-07-23 |
GB9815429D0 (en) | 1998-09-16 |
CN1173270C (zh) | 2004-10-27 |
JPH11120066A (ja) | 1999-04-30 |
CN1213800A (zh) | 1999-04-14 |
TW400494B (en) | 2000-08-01 |
GB2328535A (en) | 1999-02-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3606542B2 (ja) | 基礎データの変更がオブジェクトにどのように影響するかの判定方法およびプログラム記憶装置 | |
US6256712B1 (en) | Scaleable method for maintaining and making consistent updates to caches | |
US10803047B2 (en) | Accessing data entities | |
US20200210412A1 (en) | Using databases for both transactions and analysis | |
US6598058B2 (en) | Method and apparatus for cross-node sharing of cached dynamic SQL in a multiple relational database management system environment | |
Manassiev et al. | Exploiting distributed version concurrency in a transactional memory cluster | |
US6397227B1 (en) | Database management system and method for updating specified tuple fields upon transaction rollback | |
US6604102B2 (en) | System and method for performing database operations on a continuous stream of tuples | |
US6304873B1 (en) | System and method for performing database operations and for skipping over tuples locked in an incompatible mode | |
US6349310B1 (en) | Database management system and method for accessing rows in a partitioned table | |
US7831771B2 (en) | System and method for managing cachable entities | |
US5414840A (en) | Method and system for decreasing recovery time for failed atomic transactions by keeping copies of altered control structures in main memory | |
US6915510B1 (en) | System and method for automatically modifying database access methods to insert database object handling instructions | |
US6453313B1 (en) | Database management system and method for dequeuing rows published to a database table | |
EP1015983B1 (en) | Data sharing method and computer architecture | |
US5685003A (en) | Method and system for automatically indexing data in a document using a fresh index table | |
Degenaro et al. | A middleware system which intelligently caches query results | |
US6823514B1 (en) | Method and system for caching across multiple contexts | |
CA2282999C (en) | Method and apparatus for cross-node sharing of instructions in a multiple node relational database management system environment | |
US11940994B2 (en) | Mechanisms for maintaining chains without locks | |
SE | Cloudy Transactions: Cooperative XML Authoring on Amazon S3. | |
JP2000347998A (ja) | 共有情報管理システム及び共有情報管理プログラムを記録したコンピュータ読み取り可能な記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20031219 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040419 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20040715 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20040726 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040826 Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20040826 |
|
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: 20040916 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20040916 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20040916 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041004 |
|
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: 20071015 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081015 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081015 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091015 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091015 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101015 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101015 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111015 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121015 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121015 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131015 Year of fee payment: 9 |
|
EXPY | Cancellation because of completion of term |