(57)【要約】ガベージコレクション中の分散キャッシュへのアクセスを管理する技法について、本明細書に記載する。ガベージコレクションが、ノードに関して実施されるべきであるとき、ノードは、一次状態にある、ノードに含まれるデータモジュール（複数可）のインスタンスを二次状態に置くことを要求する要求をデータマネージャに送り得る。データマネージャは、データモジュール（複数可）の状態を二次状態に変えることができる。データマネージャは、別のノードに含まれるデータモジュール（複数可）の別のインスタンスの状態を一次状態に変えることができる。ガベージコレクションがノードに関して完了すると、ノードは、二次状態に置かれたデータモジュール（複数可）が一次状態に戻されることを要求する別の要求をデータマネージャに送ることができる。データマネージャは、こうしたデータモジュール（複数可）を一次状態に戻すことができる。
2012530294.tif 000002
【特許請求の範囲】
【請求項１】
分散キャッシュ（１００）の第１のノード（６１４Ａ〜６１４Ｎ）から、前記第１のノード（６１４Ａ〜６１４Ｎ）に関してのガベージコレクション操作の実行に先立って、前記第１のノード（６１４Ａ〜６１４Ｎ）をオフライン状態に置くための要求を受信するステップと、
前記要求の受信に応答して、少なくとも１つのプロセッサ（１６０２）を使って、前記第１のノード（６１４Ａ〜６１４Ｎ）に含まれる少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の第１のインスタンスの状態を一次状態から二次状態に変えるステップであって、前記第１のインスタンスの前記一次状態は、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）に関してのキャッシュ操作が、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第１のインスタンスの所で開始され、またはそこに最初に向けられるものであることを示し、前記第１のインスタンスの前記二次状態は、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）に関しての前記キャッシュ操作が、前記第１のインスタンスの所で開始されないこと、またはそこに最初に向けられるものではないことを示す、ステップと
を含むことを特徴とする方法。
【請求項２】
前記要求の受信に応答して、前記分散キャッシュ（１００）の第２のノード（６１４Ａ〜６１４Ｎ）に含まれる前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の第２のインスタンスの状態を前記二次状態から前記一次状態に変えるステップであって、前記第２のインスタンスの前記一次状態は、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）に関してのキャッシュ操作が、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第２のインスタンスの所で開始され、またはそこに最初に向けられるものであることを示し、前記第２のインスタンスの前記二次状態は、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）に関しての前記キャッシュ操作が、前記第２のインスタンスの所で開始されないこと、またはそこに最初に向けられるものではないことを示す、ステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記第２のノード（６１４Ａ〜６１４Ｎ）に含まれる前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第２のインスタンスに向けられる、前記分散キャッシュ（１００）の第３のノード（６１４Ａ〜６１４Ｎ）上でログ記録するための書込み要求を転送するステップをさらに含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記ガベージコレクション操作の完了に応答して、前記第１のノード（６１４Ａ〜６１４Ｎ）に含まれる前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第１のインスタンスの前記状態を、前記二次状態から前記一次状態に戻すステップと、
前記ガベージコレクション操作の完了に応答して、前記第２のノード（６１４Ａ〜６１４Ｎ）に含まれる前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第２のインスタンスの前記状態を、前記一次状態から前記二次状態に戻すステップと
をさらに含むことを特徴とする請求項２に記載の方法。
【請求項５】
前記要求の受信に応答して、前記第２のノード（６１４Ａ〜６１４Ｎ）内で前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第２のインスタンスを生成するステップをさらに含み、
前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第２のインスタンスの前記状態を変える前記ステップは、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第２のインスタンスを生成する前記ステップに応答して実施されることを特徴とする請求項２に記載の方法。
【請求項６】
前記ガベージコレクション操作の完了に応答して、前記第１のノード（６１４Ａ〜６１４Ｎ）の前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第１のインスタンスの前記状態を、前記二次状態から前記一次状態に戻すステップと、
前記ガベージコレクション操作の完了に応答して、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第２のインスタンスを、前記第２のノード（６１４Ａ〜６１４Ｎ）から消去するステップと
をさらに含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第２のインスタンスを、前記第２のノード（６１４Ａ〜６１４Ｎ）から消去する前記ステップに応答して、前記第２のノード（６１４Ａ〜６１４Ｎ）に関してガベージコレクション操作の実施を要求するステップをさらに含むことを特徴とする請求項６に記載の方法。
【請求項８】
第２のノード（６１４Ａ〜６１４Ｎ）に関しての前記ガベージコレクション操作の実行に先立って、前記第２のノード（６１４Ａ〜６１４Ｎ）をオフライン状態に置くための要求を前記分散キャッシュ（１００）の前記第２のノード（６１４Ａ〜６１４Ｎ）から受信するステップと、
前記第２のノード（６１４Ａ〜６１４Ｎ）からの前記要求の受信に応答して、前記第２のノード（６１４Ａ〜６１４Ｎ）に含まれる前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の１つまたは複数の第２のインスタンスを除く、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）のすべてのインスタンスが、前記ガベージコレクション操作によってロックされると判定するステップと、
前記第２のノード（６１４Ａ〜６１４Ｎ）に含まれる前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記１つまたは複数の第２のインスタンスを除く、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）のすべてのインスタンスが、前記ガベージコレクション操作によってロックされるという判定に応答して、前記ガベージコレクション操作が前記第２のノード（６１４Ａ〜６１４Ｎ）に関して延期されることを要求するステップと
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項９】
第２のノード（６１４Ａ〜６１４Ｎ）に関しての前記ガベージコレクション操作の実行に先立って、前記第２のノード（６１４Ａ〜６１４Ｎ）をオフライン状態に置くための要求を前記分散キャッシュ（１００）の前記第２のノード（６１４Ａ〜６１４Ｎ）から受信するステップと、
前記第２のノード（６１４Ａ〜６１４Ｎ）からの前記要求の受信に応答して、前記第２のノード（６１４Ａ〜６１４Ｎ）の負荷を閾値と比較するステップと、
前記負荷が前記閾値を超えることに基づいて、前記ガベージコレクション操作が前記第２のノード（６１４Ａ〜６１４Ｎ）に関して延期されることを要求するステップと
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項１０】
前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）に関しての前記キャッシュ操作は、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）に関しての書込み要求であることを特徴とする請求項１に記載の方法。
【請求項１１】
制御論理が格納されたコンピュータ可読媒体を備えるコンピュータプログラム製品であって、前記制御論理は、
請求項１から１０のいずれかに記載の前記方法ステップを実施するようになされたコンピュータ可読プログラム手段を備えることを特徴とするコンピュータプログラム製品。
【請求項１２】
分散キャッシュ（１００）の第１のノード（６１４Ａ〜６１４Ｎ）から、前記第１のノード（６１４Ａ〜６１４Ｎ）に関してのガベージコレクション操作の実行に先立って、前記第１のノード（６１４Ａ〜６１４Ｎ）をオフライン状態に置くための要求を受信するように構成された受信モジュール（１１０２）と、
前記要求に応答して、前記第１のノード（６１４Ａ〜６１４Ｎ）に含まれる少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の第１のインスタンスの状態を一次状態から二次状態に変えるように構成された状態モジュール（１１０４）であって、前記第１のインスタンスの前記一次状態は、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）に関してのキャッシュ操作が、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第１のインスタンスの所で開始され、またはそこに最初に向けられるものであることを示し、前記第１のインスタンスの前記二次状態は、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）に関しての前記キャッシュ操作が、前記第１のインスタンスの所で開始されないこと、またはそこに最初に向けられるものではないことを示す、状態モジュール（１１０４）と
を備えることを特徴とするデータマネージャ。
【請求項１３】
前記状態モジュール（１１０４）は、前記要求の受信に応答して、前記分散キャッシュ（１００）の第２のノード（６１４Ａ〜６１４Ｎ）に含まれる前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の第２のインスタンスの状態を前記二次状態から前記一次状態に変えるようにさらに構成され、前記第２のインスタンスの前記一次状態は、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）に関してのキャッシュ操作が、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記第２のインスタンスの所で開始され、またはそこに最初に向けられるものであることを示し、前記第２のインスタンスの前記二次状態は、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）に関しての前記キャッシュ操作が、前記第２のインスタンスの所で開始されないこと、またはそこに最初に向けられるものではないことを示すことを特徴とする請求項１２に記載のデータマネージャ。
【請求項１４】
前記受信モジュール（１１０２）は、第２のノード（６１４Ａ〜６１４Ｎ）に関しての前記ガベージコレクション操作の実行に先立って、前記第２のノード（６１４Ａ〜６１４Ｎ）をオフライン状態に置くための要求を前記分散キャッシュ（１００）の前記第２のノード（６１４Ａ〜６１４Ｎ）から受信するようにさらに構成され、
前記データマネージャは、
前記第２のノード（６１４Ａ〜６１４Ｎ）に含まれる前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の１つまたは複数の第２のインスタンスを除く、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）のすべてのインスタンスが、前記ガベージコレクション操作によってロックされると判定するように構成された判定モジュール（１１０６）と、
前記第２のノード（６１４Ａ〜６１４Ｎ）に含まれる前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）の前記１つまたは複数の第２のインスタンスを除く、前記少なくとも１つのデータモジュール（６１６Ａ〜６１６Ｎ）のすべてのインスタンスが、前記ガベージコレクション操作によってロックされるという判定に応答して、前記ガベージコレクション操作が前記第２のノード（６１４Ａ〜６１４Ｎ）に関して延期されることを要求するように構成された要求モジュール（１１１４）と
をさらに備えることを特徴とする請求項１２に記載のデータマネージャ。
【請求項１５】
前記受信モジュール（１１０２）は、第２のノード（６１４Ａ〜６１４Ｎ）に関しての前記ガベージコレクション操作の実行に先立って、前記第２のノード（６１４Ａ〜６１４Ｎ）をオフライン状態に置くための要求を前記分散キャッシュ（１００）の前記第２のノード（６１４Ａ〜６１４Ｎ）から受信するようにさらに構成され、
前記データマネージャは、
前記第２のノード（６１４Ａ〜６１４Ｎ）からの前記要求の受信に応答して、前記第２のノード（６１４Ａ〜６１４Ｎ）の負荷を閾値と比較するように構成された比較モジュール（１５０２）と、
前記負荷が前記閾値を超えることに基づいて、前記ガベージコレクション操作が前記第２のノード（６１４Ａ〜６１４Ｎ）に関して延期されることを要求するように構成された要求モジュール（１１１４）と
をさらに備えることを特徴とする請求項１２に記載のデータマネージャ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ガベージコレクション中の分散キャッシュの可用性に関する。
【背景技術】
【０００２】
コンピュータ科学という背景において、キャッシュとは、他の所に（たとえば、データベースや他のデータ記憶システム内に）格納されているオリジナルデータの複写であるデータの集合体である。キャッシュに格納されたデータはしばしば、オリジナルデータのうち、頻繁に使われる一部分である。たとえば、オリジナルデータは、キャッシュに関連づけられたアクセス時間と比較して、比較的長いアクセス時間に起因して、アクセスするのが不経済であり得る。したがって、データベースまたは他のデータ記憶システムよりも、キャッシュにあるデータにアクセスすることが望ましいであろう。
【０００３】
分散キャッシュとは、データが複数のマシン（たとえば、コンピュータや他の処理システム）上に格納されているキャッシュである。分散キャッシュは、スケーラビリティをもたらすが、スケーラビリティはしばしば、オリジナルデータを格納するデータ記憶システム（たとえば、リレーショナルデータベース）ではもたらされない。しかしながら、マネージドコード（たとえば、Ｊａｖａ（登録商標）、ＣＬＲ（共通言語ランタイム）など）で書かれた分散キャッシュはしばしば、ガベージコレクション操作など、いくつかの操作に関してボトルネックに遭う。
【０００４】
キャッシュは、データ構造などの（ただし、それに限定されない）オブジェクトを格納するのに使うことができる。オブジェクトは、アプリケーションによってオブジェクトを読み取らせ、または書き込ませるためのアドレスなど、一意の識別子に関連づけられ得る。様々な理由により、キャッシュに格納された一定のオブジェクトは、どのアプリケーションによっても、それ以上参照されない場合がある。この場合、キャッシュ内にこうしたオブジェクトを維持するのに必要とされるリソース（たとえば、キャッシュに関連づけられたメモリ）が、無駄にされる。この問題に対処するために、「ガベージコレクション」操作が、どのアプリケーションによっても参照されないオブジェクトを識別し、こうしたオブジェクトを維持するのに使われるリソースを回復するのに使われ得る。
【０００５】
通常、ガベージコレクション操作は、オブジェクトが少なくとも１つのアプリケーションによって参照されるかどうか判定するためにオブジェクトが分析されている間、そのオブジェクトを「ロック」する。オブジェクトをロックすることにより、プロセス（たとえば、ソフトウェアアプリケーションに関連づけられたプロセス）が、そのオブジェクトにアクセスすることが防止される。したがって、分散キャッシュへのアクセスを管理するエンティティには、ロックされたオブジェクトを格納するマシンが非応答的であるように見え得る。エンティティはしたがって、マシンを再構成しようと不必要に試みる場合がある。
【０００６】
単一のインスタンスと同じ量のデータを格納するために、分散キャッシュの複数のインスタンスを複数のマシンの間で稼動させると、単一のインスタンスを稼動させるよりも、ガベージコレクション操作中にロックされるオブジェクトの数を削減することができる。しかしながら、複数のキャッシュインスタンスを稼動させると、より多くのオーバーヘッドが必要になり、データがすべて、単一のプロセス（たとえば、結合、依存性など）におメモリにあることを必要とするプロセスの実施を妨げる場合がある。各マシンが、同じデータのそれぞれのインスタンスを格納する複製型分散キャッシュでは、あるマシン上のオブジェクトへのアクセスは、そのオブジェクトが別のマシン上でロックされている場合、負荷分散を用いて提供することができる。しかしながら、このような負荷分散は、各マシンがデータのそれぞれの区画（partition）を格納する分割型（partitioned）分散キャッシュにおいては可能でない。
【発明の概要】
【０００７】
様々な手法、特に、ガベージコレクション操作中の分散キャッシュへのアクセスを管理する手法について、本明細書に記載する。分散キャッシュは、複数のマシン（たとえば、コンピュータや他の処理システム）によってホストされる複数のノードからなる。各ノードは、分散キャッシュの１つまたは複数のデータモジュールを含む。データモジュールとは、分散キャッシュのそれぞれの部分（たとえば、区画（複数可）や他の適切な部分）または分散キャッシュの複製である。分散キャッシュのどの部分も、複数のノードに渡って複製され得ることに留意されたい。たとえば、ある部分の第１のインスタンスは第１のノードに含まれてよく、その部分の第２のインスタンスは第２のノードに含まれてよく、以下同様である。さらに、ノードは、分散キャッシュの同じ部分の複数のインスタンスを含み得る。しかしながら、「分散キャッシュの複製」は、分散キャッシュに格納された全データのインスタンスを指す。ノードに関して実施されるガベージコレクション操作は、そのノードに含まれるデータのインスタンス（複数可）をロックし得る。しかしながら、分散キャッシュの一部または全部が、複数のノードに渡って複製されると、データの他の１つまたは複数のインスタンスが、分散キャッシュの他のノード（複数可）上で利用可能になってよく、その結果ガベージコレクション操作の実施により、データにアクセスしようと試みるプロセス（たとえば、ソフトウェアアプリケーションに関連づけられたプロセス）にとって、データがアクセス不可能にならない。
【０００８】
データマネージャとは、１つまたは複数のプロセッサを含む、少なくとも１つのコンピュータまたは他の処理システム（複数可）であり、分散キャッシュのデータモジュールを複数のノードの間に分散させる。複製シナリオでは、データモジュールの複数のインスタンスは、「高可用性」のために異なるノードに格納することができる。データマネージャは、それぞれのデータモジュールのどのインスタンスが、それぞれのデータモジュールの一次（primary）インスタンスになるべきであるか、および、どれがデータモジュールの二次（secondary）インスタンスになるべきであるかも判定する。キャッシュ操作に関してのデータモジュールの一次インスタンスは、データモジュールに関してのキャッシュ操作が最初に向けられ、またはデータモジュールに関してのキャッシュ操作が開始される、データモジュールのインスタンスである。キャッシュ操作の例は、読取り操作、書込み操作、削除操作、通知操作などを含むが、それに限定されない。たとえば、読取り（または書込み）操作がデータモジュールに関して最初に向けられるデータモジュールのインスタンスは、その読取り（または書込み）操作に関してデータモジュールの一次インスタンスである。別の例では、削除（または通知）操作がデータモジュールに関して開始されるデータモジュールのインスタンスは、その削除（または通知）操作に関してデータモジュールの一次インスタンスである。キャッシュ操作に関してのデータモジュールの二次インスタンスは、本質的に、キャッシュ操作に関してデータモジュールの「バックアップ」インスタンスである。
【０００９】
データマネージャは、データモジュール（複数可）のインスタンス（複数可）の状態を変えることが可能でよく、その結果、ガベージコレクション操作が、データモジュールの第１のインスタンスに関して実施され得る。たとえば、データマネージャは、データモジュールの第１のインスタンスの状態を、一次状態から二次状態に変えることができる。ノードに含まれるデータモジュールの全インスタンスが二次状態にあるとき、ノードは、オフラインであると言われる。たとえば、キャッシュ操作は、オフラインであるノードに含まれるデータモジュールのインスタンスが二次状態にあるので、データモジュールのそうしたインスタンスの所では開始されず、そこに最初に向けられない。別の例では、データマネージャは、データモジュールの第２のインスタンスの状態を二次状態から一次状態に変えることができ、そうすることによって、データモジュールに格納されているデータが、ガベージコレクション操作中に利用可能になる。
【００１０】
ノードが、ガベージコレクション操作がそのノードに関して実施されるべきであるという指示を受信すると、ノードは、ノードに関してのガベージコレクション操作の実行に先立って、一次状態にある、ノードに含まれるデータモジュール（複数可）のインスタンスを二次状態に置かせることを要求する要求をデータマネージャに送ることができる。ノードが、ガベージコレクション操作がそのノードに関して完了したという指示を受信すると、ノードは、二次状態に置かれたデータモジュール（複数可）のインスタンスが一次状態に戻されることを要求する別の要求をデータマネージャに送ることができる。
【００１１】
ノードに関してのガベージコレクション操作の実行に先立って、ノードをオフライン状態に置くための要求が分散キャッシュのノードから受信される方法例について記載する。ノードに含まれるデータモジュール（複数可）のインスタンスの状態は、要求の受信に応答して、プロセッサ（複数可）を使って一次状態から二次状態に変えられる。インスタンスの一次状態は、データモジュール（複数可）に関してのキャッシュ操作（複数可）が、ノードに含まれるデータモジュール（複数可）のインスタンスの所で開始され、またはそこに最初に向けられるものであることを示す。インスタンスの二次状態は、データモジュール（複数可）に関してのキャッシュ操作（複数可）が、ノードに含まれるデータモジュール（複数可）のインスタンスの所で開始されるものではないこと、またはそこに最初に向けられるものではないことを示す。
【００１２】
ノードに関してのガベージコレクション操作の実行に先立って、ノードをオフライン状態に置くための要求が、分散キャッシュのノードから受信される別の方法例について記載する。ノードからの要求の受信に応答して、ノードに含まれるデータモジュール（複数可）のインスタンス（複数可）を除く、データモジュール（複数可）のすべてのインスタンスが、ガベージコレクション操作によってロックされるという判定が行われる。ノードに含まれるデータモジュール（複数可）のインスタンス（複数可）を除く、データモジュール（複数可）のすべてのインスタンスがガベージコレクション操作によってロックされるという判定に応答して、ガベージコレクション操作がそのノードに関して延期されるべきという要求が行われる。
【００１３】
ノードに関してのガベージコレクション操作の実行に先立って、ノードをオフライン状態に置くための要求が分散キャッシュのノードから受信される、さらに別の方法例について記載する。ノードからの要求の受信に応答して、ノードの負荷が閾値と比較される。負荷が閾値を超えることに基づいて、ガベージコレクション操作がそのノードに関して延期されるべきという要求が行われる。
【００１４】
分散キャッシュのノードでインジケータが受信される、さらに別の方法例について記載する。インジケータは、ガベージコレクション操作が、ノードに関して実施されるべきであることを示す。ノードをホストするマシンのプロセッサ（複数可）を使って、要求がノードからデータマネージャに送られる。この要求は、ガベージコレクション操作の実行に先立って、ノードに含まれるデータモジュール（複数可）のインスタンスを二次状態に置くことを求める。
【００１５】
分散キャッシュのノードでインジケータが受信される、さらに別の方法例について記載する。インジケータは、ガベージコレクション操作がノードに関して完了されたことを示す。ノードをホストするマシンのプロセッサ（複数可）を使って、要求がノードからデータマネージャに送られる。この要求は、ノードに関してのガベージコレクション操作の完了に応答して、ノードに含まれるデータモジュール（複数可）のインスタンスを二次状態から一次状態に戻すことを求める。
【００１６】
受信モジュールおよび状態モジュールを含むデータマネージャ例について記載する。受信モジュールは、ノードに関してのガベージコレクション操作の実行に先立って、ノードをオフライン状態に置くための要求を分散キャッシュのノードから受信するように構成される。状態モジュールは、要求に応答して、ノードに含まれるデータモジュール（複数可）のインスタンスの状態を一次状態から二次状態に変えるように構成される。
【００１７】
コンピュータプログラム製品についても記載される。このコンピュータプログラム製品は、プロセッサベースのシステムがガベージコレクション操作中の分散キャッシュへのアクセスを管理することを可能にするコンピュータプログラム論理が記録されたコンピュータ可読媒体を含む。コンピュータプログラム製品は、第１のプログラム論理モジュールおよび第２のプログラム論理モジュールを含む。第１のプログラム論理モジュールは、プロセッサベースのシステムが、第１のノードに関してのガベージコレクション操作の実行に先立って、第１のノードをオフライン状態に置くための、第１のノードからの要求に応答して、分散キャッシュの第１のノードに含まれるデータモジュール（複数可）の第１のインスタンスの状態を一次状態から二次状態に変えることを可能にするためのものである。第２のプログラム論理モジュールは、プロセッサベースのシステムが、要求に応答して、分散キャッシュの第２のノードに含まれるデータモジュール（複数可）の第２のインスタンスの状態を二次状態から一次状態に変えることを可能にするためのものである。
【００１８】
本概要は、「発明を実施するための形態」において後でさらに説明する概念の抜粋を、簡略化した形で紹介するためのものである。本概要は、特許請求の範囲に記載された主題の主要な特徴または本質的な特徴を特定することは意図しておらず、特許請求の範囲に記載された主題の範囲を限定するのに使われることも意図していない。さらに、本発明は、本文書の「発明を実施するための形態」および／または他のセクションに記載される特定の実施形態に限定されないことに留意されたい。このような実施形態は、例示目的でのみ本明細書に提示される。本明細書に含まれる教示内容に基づいて、当業者には追加実施形態が明らかであろう。
【図面の簡単な説明】
【００１９】
本明細書に組み込まれ、本明細書の一部をなす添付の図面は本発明の実施形態を例示し、記述とともに関連する原理を説明し当業者が本開示技術を行い、利用することを可能にするのにさらに役立つ。
【図１】分散キャッシュの論理表現例を示す図である。
【図２】一次データ区画をもつ分割型分散キャッシュにおけるＰｕｔおよびＧｅｔ操作の要求および応答をルーティングするのに使われるルーティングプロトコル例を示すブロック図である。
【図３】一次および二次データ区画をもつ分割型分散キャッシュにおけるＰｕｔおよびＧｅｔ操作の要求および応答をルーティングするのに使われるルーティングプロトコル例を示すブロック図である。
【図４】複製型分散キャッシュにおけるＰｕｔおよびＧｅｔ操作の要求および応答をルーティングするのに使われるルーティングプロトコル例を示すブロック図である。
【図５】ローカルキャッシュを使ってＰｕｔおよびＧｅｔ操作の要求および応答をルーティングするのに使われるルーティングプロトコル例を示すブロック図である。
【図６】ある実施形態による分散キャッシュを使用するコンピュータシステム例を示すブロック図である。
【図７】いくつかの実施形態による、ノードに含まれるデータモジュール（複数可）のインスタンスに対する状態変化を要求する方法を示すフローチャートである。
【図８】いくつかの実施形態による、ノードに含まれるデータモジュール（複数可）のインスタンスに対する状態変化を要求する方法を示すフローチャートである。
【図９】ある実施形態による、図１に示すマシンの実装例を示すブロック図である。
【図１０Ａ】ある実施形態による、ガベージコレクション操作中の分散キャッシュへのアクセスを管理する方法のフローチャートのそれぞれの部分を示す図である。
【図１０Ｂ】ある実施形態による、ガベージコレクション操作中の分散キャッシュへのアクセスを管理する方法のフローチャートのそれぞれの部分を示す図である。
【図１０Ｃ】ある実施形態による、ガベージコレクション操作中の分散キャッシュへのアクセスを管理する方法のフローチャートのそれぞれの部分を示す図である。
【図１１】ある実施形態による、図１に示すデータマネージャの実装形態例を示すブロック図である。
【図１２】いくつかの実施形態による、ガベージコレクション操作中の分散キャッシュへのアクセスを管理する方法を示すフローチャートである。
【図１３】ある実施形態による、図１に示すデータマネージャの実装形態例を示すブロック図である。
【図１４】いくつかの実施形態による、ガベージコレクション操作中の分散キャッシュへのアクセスを管理する方法を示すフローチャートである。
【図１５】ある実施形態による、図１に示すデータマネージャの実装形態例を示すブロック図である。
【図１６】実施形態が実装され得るコンピュータ例を示す図である。
【発明を実施するための形態】
【００２０】
本開示技術の特徴および利点が、これ以降で記載する詳細な説明を、同じ参照文字が全体を通して対応する要素を特定する図面と併せ読むと、より明らかになるであろう。図面において、同じ参照番号は概して、同一の、機能的に同様の、および／または構造的に同様の要素を示す。要素が最初に現れる図面は、対応する参照番号の左端の数字（複数可）で示される。
【００２１】
この詳細な説明は、後のセクションでさらに詳しく論じられる概念の一部を紹介するための導入セクションで始まる。分散キャッシュの実装例が、次のセクションで記載される。ガベージコレクション中の分散キャッシュの可用性を提供する実施形態例が次いで論じられ、結論セクションが続く。
【００２２】
Ｉ．概論
以下の詳細な説明では、本発明の例示的な実施形態を図解する添付の図面を参照する。しかしながら、本発明の範囲は、こうした実施形態に限定されるのではなく、添付の請求項によって定義される。したがって、例示する実施形態の修正バージョンなど、添付の図面に示すもの以外の実施形態も、やはり本発明によって包含され得る。
【００２３】
本明細書における、「一実施形態」、「実施形態」、「実施形態例」などへの言及は、記載される実施形態が、ある特定の特徴、構造、または特性を含み得るが、すべての実施形態がこうした特定の特徴、構造、または特性を必ずしも含まなくてよいことを示す。さらに、このようなフレーズは、同じ実施形態を必ずしも指すわけではない。さらに、ある特定の特徴、構造、または特性が、ある実施形態に関連して記載される場合は、明示的に記載されているかどうかに関わらず、他の実施形態に関連してこのような特徴、構造、または特性を実装することが、当業者の知識の範囲内であると言えよう。
【００２４】
実施形態例は、ガベージコレクション操作中の分散キャッシュへのアクセスを管理することが可能である。分散キャッシュは、複数のマシン（たとえば、コンピュータや他の処理システム）によってホストされる複数のノードからなる。各ノードは、分散キャッシュの１つまたは複数のデータモジュールを含む。データモジュールとは、分散キャッシュのそれぞれの部分（たとえば、区画（複数可）もしくは他の適切な部分）または分散キャッシュの複製である。分散キャッシュのどの部分も、複数のノードに渡って複製され得ることに留意されたい。たとえば、ある部分の第１のインスタンスは第１のノードに含まれてよく、その部分の第２のインスタンスは第２のノードに含まれてよく、以下同様である。さらに、ノードは、分散キャッシュの同じ部分の複数のインスタンスを含み得る。しかしながら、「分散キャッシュの複製」は、分散キャッシュに格納された全データのインスタンスを指す。ノードに関して実施されるガベージコレクション操作は、ノードに含まれるデータのインスタンス（複数可）をロックし得る。しかしながら、分散キャッシュの一部または全部が、複数のノードに渡って複製されると、データの他の１つまたは複数のインスタンスが分散キャッシュの他のノード（複数可）上で利用可能になってよく、その結果ガベージコレクション操作の実施により、データにアクセスしようと試みるプロセス（たとえば、ソフトウェアアプリケーションに関連づけられたプロセス）にとって、データがアクセス不可能にはならない。
【００２５】
データマネージャとは、１つまたは複数のプロセッサを含む少なくとも１つのコンピュータまたは他の処理システム（複数可）であり、分散キャッシュのデータモジュールのインスタンスを、それぞれのノードをホストする複数のマシンの間に分散させる。複製シナリオでは、データモジュールの複数のインスタンスが、そうしたデータモジュールの「高可用性」のために異なるノードに格納され得る。データマネージャは、それぞれのデータモジュールのどのインスタンスがそれぞれのデータモジュールの一次インスタンスになるべきか、また、どれがデータモジュールの二次インスタンスになるべきかも判定する。キャッシュ操作に関してのデータモジュールの一次インスタンスは、データモジュールに関してのキャッシュ操作がそこに最初に向けられ、またはデータモジュールに関してのキャッシュ操作がそこで開始されるデータモジュールのインスタンスである。キャッシュ操作の例は、読取り操作、書込み操作、削除操作、通知操作などを含むが、それに限定されない。たとえば、データモジュールに関しての読取り（または書込み）操作が最初に向けられるデータモジュールのインスタンスは、その読取り（または書込み）操作に関してのデータモジュールの一次インスタンスである。別の例では、データモジュールに関しての削除（または通知）操作が開始されるデータモジュールのインスタンスは、その削除（または通知）操作に関してのデータモジュールの一次インスタンスである。キャッシュ操作に関してのデータモジュールの二次インスタンスは、本質的に、キャッシュ操作に関してのデータモジュールの「バックアップ」インスタンスである。
【００２６】
実施形態例によると、データマネージャは、データモジュール（複数可）のインスタンス（複数可）の状態を変えることが可能であり、その結果、ガベージコレクション操作が、一次データモジュールに関して実施され得る。たとえば、データマネージャは、データモジュールの第１のインスタンスの状態を、一次状態から二次状態に変えることができる。ノードに含まれるデータモジュールの全インスタンスが二次状態にあるとき、ノードは、オフラインであると言われる。たとえば、キャッシュ操作は、オフラインであるノードに含まれるデータモジュールのインスタンスが二次状態にあるので、そうしたデータモジュールの所で開始されず、そこに最初に向けられない。別の例では、データマネージャは、データモジュールの第２のインスタンスの状態を二次状態から一次状態に変えることができ、そうすることによって、データモジュールに格納されているデータが、ガベージコレクション操作中に利用可能になる。
【００２７】
実施形態例によると、ガベージコレクション操作がノードに関して実施されるべきだという指示をノードが受信すると、ノードは、データマネージャに要求を送る。この要求は、ノードに含まれるとともに一次状態にあるデータモジュール（複数可）のインスタンスを、ノードに関してのガベージコレクション操作の実行に先立って二次状態に置かせることを求める。ガベージコレクション操作がノードに関して完了したという指示をノードが受信すると、ノードは、一次状態から二次状態に置かれたデータモジュール（複数可）のインスタンスが二次状態から一次状態に戻されることを要求する別の要求をデータマネージャに送ることができる。
【００２８】
ＩＩ．分散キャッシュの実装例
図１は、分散キャッシュ１００の論理表現例である。分散キャッシュとは、データが複数のマシン（たとえば、マシン１０２Ａ〜１０２Ｎ）上に格納されるキャッシュである。マシンとは、分散キャッシュの１つまたは複数のノードをサポートするように構成されたコンピュータ（たとえば、サーバ）または他の処理システムである。各ノードは、分散キャッシュの１つまたは複数のデータモジュールを含む。データモジュールとは、分散キャッシュのそれぞれの部分（たとえば、区画（複数可）もしくは他の適切な部分）または分散キャッシュの複製である。分散キャッシュのどの部分も、複数のノードに渡って複製され得ることに留意されたい。たとえば、ある部分の第１のインスタンスは第１のノードに含まれてよく、その部分の第２のインスタンスは第２のノードに含まれてよく、以下同様である。さらに、ノードは、分散キャッシュの同じ部分の複数のインスタンスを含み得る。しかしながら、「分散キャッシュの複製」は、分散キャッシュに格納された全データのインスタンスを指す。
【００２９】
分散キャッシュ１００は、名前付きキャッシュ１０６Ａ、１０６Ｂを含む。名前付きキャッシュとは、データを論理グループ化したものである。名前付きキャッシュは、論じやすくするためにデータベースと考えてよいが、実施形態例の範囲は、この点において限定されない。名前付きキャッシュ１０６Ａ、１０６Ｂは、フェイルオーバ、満了、削除などを含むが、それに限定されない、物理的構成およびキャッシュポリシーを指定する。指定された分散キャッシュ（たとえば、分散キャッシュ１００）と通信する必要があるアプリケーションは、同じ名前付きキャッシュをインスタンス化する。
【００３０】
アプリケーションは、様々なキャッシュ用のポリシーに基づいて、１つまたは複数の名前付きキャッシュを使うことができる。たとえば、第１のタイプのデータ（たとえば、アクティビティデータ）は、分割された名前付きキャッシュに格納することができ、第２のタイプのデータ（たとえば、参照データ）は、複製された名前付きキャッシュに格納することができる。分割型および複製型分散キャッシュについては、後でより詳細に論じる。
【００３１】
２つの名前付きキャッシュ（すなわち、名前付きキャッシュ１０６Ａ、１０６Ｂ）が、例示目的で図１に示されているが、限定的であることは意図していない。分散キャッシュ１００は、任意の数の名前付きキャッシュを含み得ることが、当業者には認識されよう。名前付きキャッシュ１０６Ａは、製品カタログに関連づけられたデータを格納するように示されており、名前付きキャッシュ１０６Ｂは、電子機器目録に関連づけられたデータを格納するように示されているが、名前付きキャッシュは、データの任意の適切なグループ化を格納し得ることが理解されよう。
【００３２】
ノード１０４Ａ〜１０４Ｚ（別名「キャッシュホスト」）はそれぞれ、分散キャッシュ１００の１つまたは複数のデータモジュールを含む。データモジュールとは、分散キャッシュのそれぞれの部分（たとえば、区画（複数可）もしくは他の適切な部分）または分散キャッシュの複製である。分散キャッシュのどの部分も、複数のノードに渡って複製され得ることに留意されたい。たとえば、ある部分の第１のインスタンスは第１のノードに含まれてよく、その部分の第２のインスタンスは第２のノードに含まれてよく、以下同様である。さらに、ノードは、分散キャッシュの同じ部分の複数のインスタンスを含み得る。しかしながら、「分散キャッシュの複製」は、分散キャッシュに格納された全データのインスタンスを指す。ノード１０４Ａ〜１０４Ｚは、まとめて「クラスタ」と呼ばれる。
【００３３】
名前付きキャッシュ１０６Ａ、１０６Ｂはそれぞれ、１つまたは複数の領域を含む。領域とは、名前付きキャッシュ内のオブジェクトを論理グループ化したものである。たとえば、名前付きキャッシュ１０６Ａが、例示目的のために領域１０８Ａ〜１０８Ｙを含むように図１に示されている。したがって、ノード１０４Ａ〜１０４Ｚの間の各データモジュールは、名前付きキャッシュ１０６Ａおよび／または名前付きキャッシュ１０６Ｂの１つまたは複数のそれぞれの領域を含み得る。領域は、論じやすくするためにテーブルと考えてよいが、実施形態の範囲は、この点において限定されない。たとえば、領域は、キー値ペアの任意のセットを格納することができる。キー値ペアは、キーおよび対応する値を含む。キーは、たとえば、分散キャッシュ１００内の場所を見つけるのに使われる文字列とすることができる。値は、キーによって示される場所に対応するデータ（たとえば、オブジェクト）である。キー値ペアのそれ以上の考察は、後で図２〜５を参照して行われる。
【００３４】
アプリケーションは、名前付きキャッシュ（たとえば、名前付きキャッシュ１０６Ａまたは１０６Ｂ）にアクセスするために、必ずしも領域を指定する必要はないことに留意されたい。たとえば、アプリケーションは、対応するオブジェクトへのキーのみを使うプット（put）、ゲット（get）、および除去ＡＰＩ（アプリケーションプログラミングインターフェイス）を使うことができる。実際、アプリケーションによって書き込まれるキー値ペアは、領域を考慮せずに名前付きキャッシュを越えて分散され得るので、アプリケーションは、領域を使わないとき、より拡張する。たとえば、キー値ペアの作成および書込み中に領域が指定されない場合、キー値ペアは、たとえば、暗黙的に作成された複数の領域に自動的に分割され得る。
【００３５】
各領域１０８Ａ〜１０８Ｙは、１つまたは複数のキャッシュ項目を含む。図１に示すように、領域１０８Ａは、例示目的のためにキャッシュ項目１１０Ａ〜１１０Ｐを含む。キャッシュ項目は、キー、オブジェクトペイロード、１つまたは複数のタグ、有効時間（ＴＴＬ）、作成されたタイムスタンプ、バージョン番号、他の内部記帳情報などを含み得るが、それに限定されない他の情報とともにキャッシュされるべきオブジェクトを含む、最低レベルのキャッシングを表す。キャッシュ項目１１０Ａ〜１１０Ｐはそれぞれ、例示目的のためにキー、ペイロード、およびタグを含むように示されているが、実施形態例は、この点において限定されないことが理解されよう。たとえば、キャッシュ項目１１０Ａ〜１１０Ｐは、それぞれのキー、ペイロード、および／またはタグを必ずしも含む必要はない。別の例では、キャッシュ項目１１０Ａ〜１１０Ｐは、図１に示すキー、ペイロード、および／またはタグに加えて、またはその代わりに、情報を含み得る。以下は、名前付きキャッシュおよび領域の作成を示すＣ＃コードの例である。
【００３６】
【表１】
2012530294.tif 000003
【００３７】
上に挙げたコード例は、限定的であることは意図していない。適切などのタイプのコードも、名前付きキャッシュおよび／または領域を作成するのに使われ得ることが理解されよう。
【００３８】
複製シナリオでは、データモジュールの複数のインスタンスが、「高可用性」のためにノード１０４Ａ〜１０４Ｚに渡って格納され得る。ノード１０４Ａ〜１０４Ｚはそれぞれ、分散キャッシュ１００の１つまたは複数のどのデータモジュールに関しても、一次ノードでも二次ノードでもよい。一次ノードとは、指定されたデータモジュールの一次インスタンスを含むノードである。たとえば、指定されたデータモジュールへのアクセスは、指定されたデータモジュール用の一次ノードにルーティングされる。二次ノードとは、指定された領域の二次インスタンスを含むノードである。たとえば、名前付きキャッシュが、高可用性のためにデータモジュールの「バックアップインスタンス」をもつように構成される場合、一次ノードが、データモジュールへのアクセスを提供するのに指定され、１つまたは複数の他のノードが、たとえば、一次インスタンスがアクセス不可能になった場合にデータモジュールの１つまたは複数のそれぞれの二次インスタンスを含むように選ばれる。データモジュールの一次インスタンスに対して行われる変更は、二次インスタンスにおいて反映される。このような変更は、同期して、または非同期に二次インスタンスに対しても与えられ得る。非同期手法では、データモジュール用の一次ノードが故障した場合、二次ノード（複数可）が、ログをディスクに書き込ませる必要なく、データモジュールに格納されているデータを読み取るのに使われ得る。たとえば、一次ノードの故障により、二次ノードが一次ノードになるので、データモジュールは、アクセス可能なままである。
【００３９】
ノードは、１つまたは複数の第１のデータモジュールに関しての一次ノード、および同じ分散キャッシュの１つまたは複数の第２のデータモジュールに関しての二次ノードでよい。たとえば、ノードが、第１のデータモジュール（複数可）の一次インスタンスをもつことを指定される場合、ノードは、第１のデータモジュール（複数可）に関して一次ノードであると見なされる。第１のデータモジュールのインスタンスを含むが、その第１のデータモジュールへのアクセスを提供しない他のどのノードも、その第１のデータモジュールに関して二次ノードであると見なされる。ノードが、第２のデータモジュール（複数可）へのアクセスを提供しない場合、ノードは、第２のデータモジュール（複数可）に関して、二次ノードであると見なされる。第２のデータモジュールへのアクセスを提供するノードは、その第２のデータモジュールに関して一次ノードであると見なされる。
【００４０】
分散キャッシュ１００は、分割型キャッシュ、複製型キャッシュ、またはローカルキャッシュを含むが、それに限定されない、様々なキャッシュタイプのいずれでもよい。こうしたタイプの分散キャッシュはそれぞれ、１つまたは複数の任意のデータモジュールの複数のインスタンスを含み得ることを理解されたい。たとえば、データモジュールの複数のインスタンスは、分散キャッシュの複数のそれぞれのノードに格納することができる。別の例では、データモジュールの複数のインスタンスは、共通ノード上に格納することができる。各データモジュールのあるインスタンスは、それぞれのデータモジュールの一次インスタンスとして指定することができる。データモジュールの他のインスタンスは、それぞれのデータモジュールの二次インスタンスとして指定される。
【００４１】
アプリケーションは、たとえば、キャッシュされるべきデータのタイプに基づいて、適切なタイプのキャッシュを選ぶことができる。分割型キャッシュとは、名前付きキャッシュがその上で定義されるノードの間に分割された領域を含むキャッシュである。クラスタに渡る複数のマシン（たとえば、マシン１０２Ａ〜１０２Ｎ）の複合メモリは、データをキャッシュするのに使うことができ、こうすることによって、分散キャッシュ１００にとって利用可能なメモリの量を増やすことができる。データ区画に関連づけられた全キャッシュ操作は、それぞれのキャッシュ操作に関しての、データ区画の一次インスタンス（複数可）を含むノード（複数可）の所で開始され、またはそこに最初に向けられる。
【００４２】
分割型キャッシュは、所望のスケールを達成するのに使うことができる。たとえば、マシンおよび／またはノードが分散キャッシュ１００に追加されて、自動負荷分散が起こることが可能になり得る。たとえば、マシン１０２Ａ〜１０２Ｎ（またはノード１０４Ａ〜１０４Ｚ）の間に格納されている一部の区画は、追加されたマシンおよび／またはノードに移動することができる。このような自動負荷分散の結果、修正されたクラスタに渡ってキーが分散され得る。アクセス要求は、より多くのマシンにルーティングすることができ、その結果、スループットが増加し得る。追加マシンは、追加メモリをもたらし得る。追加メモリにより、分散キャッシュ１００は、より多くのデータを格納することが可能になり得る。
【００４３】
図２は、データ区画（複数可）の一次インスタンス（複数可）２１０Ａ〜２１０Ｃをもつ分割型分散キャッシュにおいて、Ｐｕｔ操作２０６およびＧｅｔ操作２０８の要求および応答をルーティングするのに使われるルーティングプロトコル例２００のブロック図である。一次インスタンス（複数可）２１０Ａ〜２１０Ｃはそれぞれ、１つまたは複数のそれぞれのデータ区画の１つまたは複数の一次インスタンスを含む。図２の実施形態では、ノード１０４Ａ〜１０４Ｃがそれぞれ、それぞれのデータ区画（複数可）の一次インスタンス（複数可）のみを含むので、データ区画のどの複製も、ノード１０４Ａ〜１０４Ｃに含まれないことに留意されたい。データ区画のただ１つのインスタンスが、所与のときに一次インスタンスになり得る。Ｐｕｔ操作（たとえば、Ｐｕｔ操作２０６）が、分散キャッシュ（たとえば、分散キャッシュ１００）にデータを書き込む。Ｇｅｔ操作（たとえば、Ｇｅｔ操作２０８）が、分散キャッシュ（たとえば、分散キャッシュ１００）からデータを読み取る。Ｐｕｔ操作２０６およびＧｅｔ操作２０８は、それぞれのキャッシュクライアント２０２Ａ、２０２Ｂによって実施される。
【００４４】
キャッシュクライアントとは、分散キャッシュ内のデータ区画に関してデータを書き込み、および／または読み取るためにノードと通信するソフトウェアアプリケーションである。キャッシュクライアントは、簡易キャッシュクライアントまたはルーティングキャッシュクライアントとして構成され得る。簡易キャッシュクライアントとは、クラスタ内の１つのノード（たとえば、ノード１０４Ａ〜１０４Ｃの１つ）と接触するように構成されたキャッシュクライアントである。簡易キャッシュクライアントは、ルーティング能力をもたず、各キャッシュオブジェクトが分散キャッシュ内でどこに格納されるかを追跡しない。簡易キャッシュクライアントが、オブジェクトを格納していない、またはそのオブジェクト用の一次ノードではないノードに対してオブジェクトを要求した場合、そのノードは、クラスタからオブジェクトを取得し、次いで、オブジェクトを簡易キャッシュクライアントに戻す。一方、ルーティングクライアントとは、ルーティング能力をもつキャッシュクライアントである。ルーティングキャッシュクライアントは、クラスタ内のノード（たとえば、ノード１０４Ａ〜１０４Ｃ）に渡るキャッシュオブジェクトの配置を追跡するためのルーティングテーブルを含む。ルーティングキャッシュクライアントは、キャッシュオブジェクトそれぞれがどこにあるかを追跡するので、ルーティングキャッシュクライアントは、メモリにオブジェクトを格納しているノードに対して直接要求を行うことができる。
【００４５】
図２に示すように、キャッシュクライアント２０２Ａ、２０２Ｂは、例示目的のために簡易キャッシュクライアントとして構成される。しかしながら、キャッシュクライアント２０２Ａまたは２０２Ｂのどの１つまたは複数も、ルーティングキャッシュクライアントとして構成され得ることが理解されよう。図２において、Ｐｕｔ操作２０６は、キー「Ｋ２」に値「Ｖ２」を割り当てる。ノード１０４Ａのルーティングレイヤ２０４Ａは、キー「Ｋ２」がノード１０４Ｂに関連づけられていると判定する。したがって、ルーティングレイヤ２０４Ａは、Ｐｕｔ操作２０６に関連づけられた要求を、ノード１０４Ｂの一次データ区画２１０Ｂにルーティングする。ルーティングレイヤ２０４Ｃは、キー「Ｋ２」に対するＧｅｔ操作２０８に対応する要求を、やはり一次データ区画２１０Ｂにルーティングする。ルーティングレイヤは、キャッシュクライアントに組み込まれ得ることに留意されたい。したがって、ルーティングレイヤ２０４Ａは、キャッシュクライアント２０２Ａに組み込むことができ、および／またはルーティングレイヤ２０４Ｃは、キャッシュクライアント２０２Ｂに組み込むことができる。
【００４６】
図３は、データ区画（複数可）の一次インスタンス（複数可）２１０Ａ〜２１０Ｃおよびデータ区画（複数可）の二次インスタンス（複数可）３０２Ａ〜３０２Ｃをもつ分割型分散キャッシュにおいて、Ｐｕｔ操作２０６およびＧｅｔ操作２０８の要求および応答をルーティングするのに使われるルーティングプロトコル例３００のブロック図である。ノード１０４Ａ〜１０４Ｃに渡ってデータ（たとえば、キー値ペア「Ｋ１、Ｖ１」、「Ｋ２、Ｖ２」、および「Ｋ３、Ｖ３」）が複製されるが、データ区画２１０Ａ〜２１０Ｃおよび３０２Ａ〜３０２Ｃは複製されない。図３に示すように、キャッシュクライアント２０２Ａは、キー「Ｋ２」をもつ値「Ｖ２」をノード１０４Ａにプット（put）するための要求を送る。ルーティングレイヤ２０４Ａは、キー「Ｋ２」がノード１０４Ｂに属すと判定し、したがってキー「Ｋ２」をノード１０４Ｂにルーティングする。ノード１０４Ｂは、Ｐｕｔ操作２０６をローカルに実施し、また、Ｐｕｔ操作２０６に対応するプット（put）要求を二次ノード１０４Ａおよび１０４Ｃに送る。ノード１０４Ａおよび１０４Ｃは、キー値ペア「Ｋ２、Ｖ２」の二次インスタンスを含むので、ノード１０４Ａおよび１０４Ｃは、キー値ペア「Ｋ２、Ｖ２」に関して二次ノードであると思われる。ノード１０４Ｂは、キー値ペア「Ｋ２、Ｖ２」に対する要求がノード１０４Ｂから受信済みであるという、ノード１０４Ａおよび１０４Ｃからの確認応答を待つ。このような確認応答を受信すると、ノード１０４Ｂは、Ｐｕｔ操作の成功を確認するインジケータをノード１０４Ａに与える。ノード１０４Ａは、インジケータをキャッシュクライアント２０２Ａに転送する。
【００４７】
Ｇｅｔ操作２０８は、図２を参照して上で論じたのと同様にして実施される。たとえば、ルーティングレイヤ２０４Ｃが、Ｇｅｔ操作２０８に対応する要求を、キー「Ｋ２」を含む一次データ区画２１０Ｂにルーティングする。
【００４８】
図４は、複製型分散キャッシュにおいて、Ｐｕｔ操作２０６およびＧｅｔ操作２０８の要求および応答をルーティングするのに使われるルーティングプロトコル例４００のブロック図である。図４に示すように、ノード１０４Ａ〜１０４Ｃは、複製データ区画（複数可）４０２Ａ〜４０２Ｃそれぞれのインスタンスを含む。複製データ区画４０２Ａ〜４０２Ｃの各インスタンスは、キー値ペア「Ｋ１、Ｖ１」、「Ｋ２、Ｖ２」、および「Ｋ３、Ｖ３」を含む。キャッシュクライアント２０２Ａは、Ｐｕｔ操作２０６に対応するＰｕｔ要求をノード１０４Ａに与える。Ｐｕｔ要求は、キー「Ｋ２」および値「Ｖ２」を含む。ノード１０４Ａは、ルーティングレイヤ２０４Ａを介してＰｕｔ要求をノード１０４Ｂにルーティングする。というのは、この例ではノード１０４Ｂがキー「Ｋ２」に対する一次ノードだからである。ノード１０４Ｂは、Ｐｕｔ要求を受信したことに応答して、書込み操作をローカルに実施する。ノード１０４Ｂは、ノード１０４Ｂが書込み操作を実施済みであることを示す通知をノード１０４Ａに与える。ノード１０４Ａは、通知をキャッシュクライアント２０２Ａに転送する。その間、ノード１０４Ｂは、分散キャッシュの他の全ノード（たとえば、この例ではノード１０４Ｃ）に変更を非同期に伝播する。Ｇｅｔ操作２０８は、複製型分散キャッシュではローカルに実施される。
【００４９】
図５は、ローカルキャッシュ５０２Ａ、５０２Ｂを使ってＰｕｔ操作２０６およびＧｅｔ操作２０８の要求および応答をルーティングするのに使われるルーティングプロトコル例５００のブロック図である。図５に示すように、キャッシュクライアント２０２Ａ、２０２Ｂは、それぞれのローカルキャッシュ５０２Ａ、５０２Ｂを含む。たとえば、アプリケーションは、頻繁にアクセスされる項目のためのアプリケーションプロセス空間においてローカルキャッシュを維持することができる。各ローカルキャッシュ５０２Ａ、５０２Ｂは、それぞれのルーティングレイヤ５０４Ａ、５０４Ｂを含むように示してある。ローカルキャッシュ５０２Ａ、５０２Ｂにおいて、ペイロードは、たとえば、逆シリアル化コストおよび／または一次ノードへのネットワークホップを節約するように、オブジェクトの形で保つことができ、そうすることによって、分散キャッシュの性能が向上し得る。
【００５０】
ＩＩＩ．ガベージコレクション中の分散キャッシュへのアクセスを管理する実施形態例
図６は、ある実施形態による、分散キャッシュ（たとえば、図１に示す分散キャッシュ１００）を使用するコンピュータシステム例６００のブロック図である。概して、コンピュータシステム６００は、データのインスタンス（たとえば、オブジェクト）を、分散キャッシュのノードの間に格納するように動作する。図６に示すように、コンピュータシステム６００は、複数のユーザシステム６０２Ａ〜６０２Ｍ、ガベージコレクタ６０４、データマネージャ６０６、ネットワーク６０８、データベース６１０、およびキャッシュホスティングシステム６１２を含む。キャッシュホスティングシステム６１２は、複数のマシン１０２Ａ〜１０２Ｎを含むが、マシンについては後でより詳細に論じる。ユーザシステム６０２Ａ〜６０２Ｍ、ガベージコレクタ６０４、データマネージャ６０６、データベース６１０、およびマシン１０２Ａ〜１０２Ｎの間の通信は、公知のネットワーク通信プロトコルを使ってネットワーク６０８を介して実施される。ネットワーク６０８は、ワイドエリアネットワーク（たとえば、インターネット）、ＬＡＮ（ローカルエリアネットワーク）、別のタイプのネットワーク、またはその組合せとすることができる。
【００５１】
ユーザシステム６０２Ａ〜６０２Ｍは、コンピュータまたは他の処理システムであり、それぞれ、マシン１０２Ａ〜１０２Ｎと通信することが可能であり、１つまたは複数のプロセッサを含む。ユーザシステム６０２Ａ〜６０２Ｍは、分散キャッシュに格納されているデータにアクセスすることが可能であり、分散キャッシュは、キャッシュホスティングシステム６１２によってホストされる。分散キャッシュは、ノード６１４Ａ〜６１４Ｎを含み、ノードは、それぞれのマシン１０２Ａ〜１０２Ｎによってホストされる。たとえば、ユーザシステム６０２Ａ〜６０２Ｍは、マシンへのデータの書込みを要求するＰｕｔ要求をマシン１０２Ａ〜１０２Ｎに与えるように構成され得る。別の例では、ユーザシステム６０２Ａ〜６０２Ｍは、マシンに格納されているデータの読取りを要求するＧｅｔ要求をマシン１０２Ａ〜１０２Ｍに与えるように構成され得る。たとえば、ユーザが、ユーザによって所有され、あるいはユーザにとってアクセス可能なユーザシステム６０２上に展開されたクライアントを使って、Ｐｕｔ要求またはＧｅｔ要求を開始することができる。
【００５２】
キャッシュホスティングシステム６１２は、分散キャッシュをホストする。キャッシュホスティングシステム６１２は、複数のマシン１０２Ａ〜１０２Ｎを含む。マシン１０２Ａ〜１０２Ｎは、コンピュータまたは他の処理システムであり、それぞれ、ユーザシステム６０２Ａ〜６０２Ｍと通信することが可能であり、１つまたは複数のプロセッサを含む。マシン１０２Ａ〜１０２Ｎは、それぞれのノード（複数可）６１４Ａ〜６１４Ｎをホストするように構成される。各ノードは、分散キャッシュのそれぞれのデータモジュール（複数可）を含む。図６に示すように、第１のノード（複数可）６１４Ａは、第１のデータモジュール（複数可）６１６Ａを含み、第２のノード（複数可）６１４Ｂは、第２のモジュール（複数可）６１６Ｂを含み、以下同様である。
【００５３】
データモジュールとは、分散キャッシュのそれぞれの部分（たとえば、キャッシュ項目（複数可）、領域（複数可）、区画（複数可）など）または分散キャッシュの複製である。分散キャッシュのどの部分も、ノード６１４Ａ〜６１４Ｎに渡って複製され得ることに留意されたい。たとえば、ある部分の第１のインスタンスが、第１のノード（複数可）６１４Ａの１つのノードに含まれてよく、その部分の第２のインスタンスが、第２のノード（複数可）６１４Ｂの１つのノードに含まれてよく、以下同様である。さらに、ノードは、分散キャッシュの同じ部分の複数のインスタンスを含み得る。たとえば、第１のノード（複数可）６１４Ａの１つのノードが、キャッシュ項目（複数可）、領域（複数可）、データ区画（複数可）、または分散キャッシュの他の任意の適切な部分の２つ以上のインスタンスを含み得る。しかしながら、「分散キャッシュの複製」は、分散キャッシュに格納された全データのインスタンスを指す。ノードに関して実施されるガベージコレクション操作は、ノードに含まれるデータのインスタンス（複数可）をロックすることができる。しかしながら、分散キャッシュの一部または全部が、ノード６１４Ａ〜６１４Ｎに渡って複製されると、データの他の１つまたは複数のインスタンスが、分散キャッシュの他のノード（複数可）上で利用可能になってよく、その結果、ガベージコレクション操作の実施により、データが、データにアクセスしようと試みるプロセス（たとえば、アプリケーション６１８Ａ〜６１８Ｎに関連づけられたプロセス）にとってアクセス不可能にはならない。
【００５４】
データモジュールの任意の数のインスタンスが、ノード６１４Ａ〜６１４Ｎの間に格納され得るが、データモジュールのただ１つのインスタンスが、所与のときのキャッシュ操作に関して、そのデータモジュールの一次インスタンスとして指定され得る。キャッシュ操作に関するデータモジュールの一次インスタンスは、キャッシュ操作に関して一次状態にあると言われ、他のどのインスタンスも、キャッシュ操作に関して二次状態にあると言われる。データモジュールの一次インスタンスを含むノードは、そのデータモジュール用の一次ノードと呼ばれることに留意されたい。データモジュールの二次インスタンスを含むノードは、そのデータモジュール用の二次ノードと呼ばれる。ノードは、一部のデータモジュール用には一次ノードに、他のデータモジュール用には二次ノードになり得ることが理解されよう。
【００５５】
様々なアプリケーションのどれもが、マシン１０２Ａ〜１０２Ｎ上に展開され得る。図６に示すように、第１のアプリケーション（複数可）６１８Ａは、マシン１０２Ａ上に展開され、第２のアプリケーション（複数可）６１８Ｂはマシン１０２Ｂ上に展開され、以下同様である。アプリケーション（複数可）６１８Ａ〜６１８Ｎは、分散キャッシュに書き込まれるべき新規データを作成し、または分散キャッシュに格納されている既存データを読み取り、または修正する操作を実施することができる。たとえば、アプリケーション６１８Ａ〜６１８Ｎは、Ｐｕｔ要求およびＧｅｔ要求を使って、マシン１０２Ａ〜１０２Ｎに渡ってデータをそれぞれ書き込み、および読み取ることができる。いくつかの実施形態例では、ユーザシステム６０２Ａ〜６０２Ｍは、ネットワーク６０８を経由する必要なく、アプリケーション６１８Ａ〜６１８Ｎの１つまたは複数にアクセスすることが可能である。アプリケーション（複数可）６１８Ａ〜６１８Ｎのどの１つまたは複数も、それぞれのマシン１０２Ａ〜１０２Ｎ上に展開されるのに加えて、またはその代わりに、それぞれのユーザシステム６０２Ａ〜６０２Ｍ上に展開され得る。
【００５６】
キャッシュは、データ構造などの（ただし、それに限定されない）オブジェクトを格納するのに使うことができる。オブジェクトは、アプリケーションによってオブジェクトを読み取らせ、または書き込ませるためのアドレスなど、一意の識別子に関連づけられ得る。様々な理由により、キャッシュに格納された一定のオブジェクトは、どのアプリケーションによっても、それ以上参照されない場合がある。この場合、キャッシュ内にこうしたオブジェクトを維持するのに必要とされるリソース（たとえば、キャッシュに関連づけられたメモリ）が、無駄にされる。この問題に対処するために、「ガベージコレクション」操作が、どのアプリケーションによっても参照されないオブジェクトを識別し、こうしたオブジェクトを維持するのに使われるリソースを回復するのに使われ得る。
【００５７】
オブジェクトのインスタンスが、オブジェクトが少なくとも１つのアプリケーションによって参照されるかどうか判定するために、ガベージコレクション操作に従って分析されている間、ガベージコレクタ６０４は、オブジェクトのそのインスタンスを「ロックする」ことができる。オブジェクトのインスタンスをロックすることにより、プロセス（たとえば、アプリケーション（複数可）６１８Ａ〜６１８Ｎに関連づけられたプロセス）が、オブジェクトのそのインスタンスにアクセスすることが防止される。しかしながら、分散キャッシュは、オブジェクトの他のインスタンス（複数可）を含むことができ、こうしたインスタンス（複数可）は、一次状態にあるとともにガベージコレクション操作によってロックされていない限り、ガベージコレクション操作中にアクセス可能でよいことが理解されよう。ガベージコレクション操作中に分散キャッシュにおいてオブジェクトへのアクセスを管理する技法については、データマネージャ６０６および図７〜１５に示す実施形態例を参照して後でより詳細に論じる。
【００５８】
ガベージコレクタ６０４は、例示目的のために、スタンドアロン型コンピュータ（複数可）または処理システム（複数可）であるように図６に示されているが、限定的であることは意図していない。ガベージコレクタ６０４は、キャッシュホスティングシステム６１２に部分的または全体的に組み込まれ得ることが理解されよう。たとえば、ガベージコレクタ６０４の一部または全部が、マシン１０２Ａ〜１０２Ｎの１つの上に格納され、またはマシン１０２Ａ〜１０２Ｎの任意の２つ以上の間に分散され得る。
【００５９】
データマネージャ６０６は、１つまたは複数のプロセッサを含む少なくとも１つのコンピュータまたは他の処理システム（複数可）であり、分散キャッシュのデータモジュールのインスタンスを、マシン１０２Ａ〜１０２Ｎの間に分散する。データマネージャ６０６は、それぞれのデータモジュールのどのインスタンスが一次データモジュールになるべきであり、どれが二次データモジュールになるべきかも判定する。
【００６０】
データマネージャ６０６は、ガベージコレクション操作中の分散キャッシュへのアクセスを管理するように構成される。たとえば、データマネージャ６０６は、ガベージコレクション操作がノードに関して実施される前に、ノードに含まれるデータモジュールのインスタンスが二次状態にあることを保証するように構成され得る。この例では、データマネージャ６０６は、別のノードに含まれるデータモジュールの別のインスタンスの状態を一次状態に変えることができ、そうすることによって、データモジュール中のデータは、ガベージコレクション操作中にアクセス可能になる。ガベージコレクション操作が実施されるべきノードが、分散キャッシュ内のデータモジュールの唯一のインスタンスを含む場合、データマネージャ６０６は、別のノードに含まれるべき、データモジュールの別のインスタンスを生成することができ、そうすることによって新規インスタンスは、ガベージコレクション操作の実施中にデータモジュールの一次インスタンスとして設定され得る。ガベージコレクション操作中の分散キャッシュへのアクセスを管理する技法についてのそれ以上の考察は、図７〜１５を参照して後で行われる。
【００６１】
データマネージャ６０６は、例示目的のために、スタンドアロン型コンピュータ（複数可）または処理システム（複数可）であるように図６に示されているが、限定的であることは意図していない。データマネージャ６０６は、キャッシュホスティングシステム６１２に部分的または全体的に組み込まれ得ることが理解されよう。たとえば、データマネージャ６０６の一部または全部が、マシン１０２Ａ〜１０２Ｎの１つの上に格納され、またはマシン１０２Ａ〜１０２Ｎの任意の２つ以上の間に分散され得る。
【００６２】
データベース６１０は、オリジナルデータ６２０を、データベースモデル（たとえば、リレーショナルモデル、階層モデル、ネットワークモデルなど）に従って構造化された様式で格納するように構成される。ユーザシステム６０２Ａ〜６０２Ｍおよび／またはマシン１０２Ａ〜１０２Ｎは、ＳＱＬ（Structured Query Language）、ＳＰＡＲＱＬ、ＸＰａｔｈ（extensible markup language path language）などを含むが、それに限定されないクエリ言語（複数可）に従ってオリジナルデータ６２０にアクセスすることができる。分散キャッシュの１つまたは複数のどのデータモジュール６１６Ａ〜６１６Ｃも、たとえば、オリジナルデータ６２０のうち、頻繁に使われる一部分を格納することができる。オリジナルデータ６２０は、分散キャッシュに関連づけられたアクセス時間と比較して、データベース６１０に関連づけられた比較的長いアクセス時間に起因して、アクセスするのが不経済であり得る。したがって、データベース６１０よりも、ノード６１４Ａ〜６１４Ｎの所のデータにアクセスすることが望ましいであろう。
【００６３】
図７、８は、いくつかの実施形態による、ノードに含まれるデータモジュール（複数可）のインスタンスに対する状態変化を要求する方法のフローチャート７００、８００を示す。フローチャート７００、８００は、分散キャッシュのノードをホストするマシンの観点から記載されている。フローチャート７００、８００は、たとえば、図６に示すキャッシュホスティングシステム６１２のマシン１０２Ａ〜１０２Ｎのどれによっても実施することができる。例示目的のために、フローチャート７００、８００は、図９に示すマシン１０２’を参照して記載されているが、このマシンは、ある実施形態によるマシン１０２の例である。本文書では、プライム記号が、参照番号を修飾するのに使われる場合は常に、その修飾参照番号は、参照番号に対応する要素の例示的（または代替）実装形態を示す。
【００６４】
図９に示すように、マシン１０２’は、ノード６１４’を含む。ノード６１４’は、受信モジュール９０２および要求モジュール９０４を含む。それ以上の構造および動作実施形態が、フローチャート７００および８００に関する考察に基づいて、当業者には明らかであろう。フローチャート７００について、以下の通り記載する。
【００６５】
図７に示すように、フローチャート７００の方法は、ステップ７０２で始まる。ステップ７０２で、インジケータが分散キャッシュのノードで受信される。インジケータは、ガベージコレクション操作がノードに関して実施されるべきであることを示す。たとえば、ノードは、ガベージコレクション操作を実施するべきであるガベージコレクタ（たとえば、ガベージコレクタ６０４）からインジケータを受信し得る。ある実装例では、図９のノード６１４’の受信モジュール９０２が、インジケータを受信する。
【００６６】
ステップ７０４で、ノードをホストするマシンの１つまたは複数のプロセッサを使って、ノードに関してのガベージコレクション操作の実行に先立って、ノードに含まれる少なくとも１つのデータモジュールのインスタンスが二次状態に置かれることを要求する要求が、ノードからデータマネージャに送られる。インスタンスの一次状態は、少なくとも１つのデータモジュールに関してのキャッシュ操作（複数可）が、ノードに含まれる少なくとも１つのデータモジュールのインスタンスの所で開始され、またはそこに最初に向けられるものであることを示す。インスタンスの二次状態は、少なくとも１つのデータモジュールに関してのキャッシュ操作（複数可）が、ノードに含まれる少なくとも１つのデータモジュールのインスタンスの所で開始されないこと、またはそこに最初に向けられるものではないことを示す。
【００６７】
たとえば、ノードは、一次状態にある、ノードに含まれるデータモジュールのどのインスタンスも、二次状態に置かれることを要求し得る。別の例では、ノードは、一次状態にある、ノードに含まれる選択された１つまたは複数のデータモジュール（複数可）のインスタンスが二次状態に置かれることを要求し得る。ある実装例では、要求モジュール９０４が要求を送る。たとえば、要求は、マシン１０２’の１つまたは複数のプロセッサを使って送られ得る。
【００６８】
図８に示すように、フローチャート８００の方法は、ステップ８０２で始まる。ステップ８０２で、インジケータが、分散キャッシュのノードで受信される。インジケータは、ガベージコレクション操作がノードに関して完了されたことを示す。たとえば、ノードは、ガベージコレクション操作を実施したガベージコレクタ（たとえば、ガベージコレクタ６０４）から、インジケータを受信し得る。ある実装例では、図９のノード６１４’の受信モジュール９０２が、インジケータを受信する。
【００６９】
ステップ８０４で、ノードに関してのガベージコレクション操作の完了に応答して、ノードに含まれる少なくとも１つのデータモジュールのインスタンスが二次状態から一次状態に戻されることを要求する要求が、ノードをホストするマシンの１つまたは複数のプロセッサを使って、ノードからデータマネージャに送られる。
【００７０】
インスタンスの一次状態は、少なくとも１つのデータモジュールに関してのキャッシュ操作（複数可）が、ノードに含まれる少なくとも１つのデータモジュールのインスタンスの所で開始され、またはそこに最初に向けられるものであることを示す。インスタンスの二次状態は、少なくとも１つのデータモジュールに関してのキャッシュ操作（複数可）が、ノードに含まれる少なくとも１つのデータモジュールのインスタンスの所で開始されないこと、またはそこに最初に向けられるものではないことを示す。
【００７１】
たとえば、ノードは、ガベージコレクション操作の実施を期待して二次状態に置かれた、ノードに含まれるデータモジュールのどのインスタンスも、一次状態に戻されることを要求し得る。別の例では、ノードは、ガベージコレクション操作の実施を期待して二次状態に置かれた、ノードに含まれる選択された１つまたは複数のデータモジュールのインスタンスが、一次状態に戻されることを要求し得る。ある実装例では、要求モジュール９０４が、データマネージャに要求を送る。たとえば、要求は、マシン１０２’の１つまたは複数のプロセッサを使って送ることができる。
【００７２】
図１０Ａ〜１０Ｃは、ある実施形態による、ガベージコレクション操作中の分散キャッシュへのアクセスを管理する方法のフローチャートのそれぞれの部分を示す。フローチャート１０００は、データマネージャの観点から記載される。フローチャート１０００は、たとえば、図６に示すコンピュータシステム６００のデータマネージャ６０６によって実施することができる。例示目的のために、フローチャート１０００は、図１１に示すデータマネージャ６０６’を参照して記載されているが、このデータマネージャは、ある実施形態によるデータマネージャ６０６の例である。図１１に示すように、データマネージャ６０６’は、受信モジュール１１０２、状態モジュール１１０４、判定モジュール１１０６、生成モジュール１１０８、転送モジュール１１１０、消去モジュール１１１２、および要求モジュール１１１４を含む。それ以上の構造および動作実施形態が、フローチャート１０００に関する考察に基づいて当業者には明らかであろう。フローチャート１０００について、以下の通り記載する。
【００７３】
図１０Ａに示すように、フローチャート１０００の方法は、ステップ１００２で始まる。ステップ１００２で、第１のノードに関してのガベージコレクション操作の実行に先立って、第１のノードをオフライン状態に置くための要求が、分散キャッシュの第１のノードから受信される。ノードは、そのノードに含まれるデータモジュールの全インスタンスが二次状態にあるとき、オフライン状態にある。たとえば、データモジュールのこのようなインスタンスは、データモジュールに含まれるデータにアクセスすることを試みるアプリケーションにとってアクセス不可能とすることができる。ある実装例では、受信モジュール１１０２が、第１のノードから要求を受信する。
【００７４】
ステップ１００４で、第１のノードに含まれる少なくとも１つのデータモジュールの第１のインスタンスの状態が、要求の受信に応答して、データマネージャの少なくとも１つのプロセッサを使って、一次状態から二次状態に変えられる。たとえば、データマネージャは、一次状態にある第１のノードに含まれるデータモジュールのどのインスタンスも、二次状態に変えることができる。別の例では、データマネージャは、一次状態にある、第１のノードに含まれる、選択された１つまたは複数のデータモジュール（複数可）のインスタンスを二次状態に変えることができる。ある実装例では、状態モジュール１１０４は、第１のノードに含まれる少なくとも１つのデータモジュールの第１のインスタンスの状態を一次状態から二次状態に変える。
【００７５】
第１のインスタンスの一次状態は、少なくとも１つのデータモジュールに関してのキャッシュ操作（複数可）が、第１のノードに含まれる少なくとも１つのデータモジュールの第１のインスタンスの所で開始され、またはそこに最初に向けられるものであることを示す。第１のインスタンスの二次状態は、少なくとも１つのデータモジュールに関してのキャッシュ操作（複数可）が、第１のノードに含まれる少なくとも１つのデータモジュールの第１のインスタンスの所で開始されないこと、またはそこに最初に向けられるものではないことを示す。
【００７６】
ステップ１００６で、ガベージコレクション操作中に少なくとも１つのデータモジュールの可用性を維持するかどうか、判定が行われる。ある実装例では、判定モジュール１１０６が、少なくとも１つのデータモジュールの可用性を維持するかどうか判定する。少なくとも１つのデータモジュールの可用性が、ガベージコレクション操作中に維持されるべきでない場合、フローチャート１０００は終わる。しかしながら、少なくとも１つのデータモジュールの可用性が維持されるべきである場合、フローはステップ１００８に続く。
【００７７】
ステップ１００８で、分散キャッシュの第２のノードが、少なくとも１つのデータモジュールの第２のインスタンスを含むかどうか判定が行われる。たとえば、第１のノード以外の、分散キャッシュのいずれかのノードが、ガベージコレクション操作によってロックされていない少なくとも１つのデータモジュールの１つまたは複数のインスタンスを含むかどうか判定が行われ得る。ある実装例では、判定モジュール１１０６が、少なくとも１つのデータモジュールの第２のインスタンスを第２のノードが含むかどうか判定する。第２のノードが、少なくとも１つのデータモジュールの第２のインスタンスを含む場合、フローはステップ１０１２に続く。しかしながら、第２のノードが少なくとも１つのデータモジュールの第２のインスタンスを含まない場合、フローはステップ１０１０に続く。
【００７８】
ステップ１０１０で、第２のノードにおいて、少なくとも１つのデータモジュールの第２のインスタンスが生成される。たとえば、第２のノードは、ガベージコレクション操作がそれに対して実施されていない分散キャッシュのノードでよい。ある実装例では、生成モジュール１１０８が、第２のノードにおいて少なくとも１つのデータモジュールの第２のインスタンスを生成する。
【００７９】
ステップ１０１２で、第２のノードに含まれる少なくとも１つのデータモジュールの第２のインスタンスの状態が、二次状態から一次状態に変えられる。第２のインスタンスの一次状態は、少なくとも１つのデータモジュールに関してのキャッシュ操作（複数可）が、第２のノードに含まれる少なくとも１つのデータモジュールの第２のインスタンスの所で開始され、またはそこに最初に向けられるものであることを示す。第２のインスタンスの二次状態は、少なくとも１つのデータモジュールに関してのキャッシュ操作（複数可）が、第２のノードに含まれる少なくとも１つのデータモジュールの第２のインスタンスの所で開始されないこと、またはそこに最初に向けられるものではないことを示す。
【００８０】
たとえば、第２のノードに含まれる少なくとも１つのデータモジュールの第２のインスタンスの状態を一次状態に変えることにより、データモジュールに含まれるデータが、ガベージコレクション操作中に利用可能になることが可能になり得る。ある実装例では、状態モジュール１１０４が、第２のノードに含まれる少なくとも１つのデータモジュールの第２のインスタンスの状態を二次状態から一次状態に変える。ステップ１０１２が実施されると、フローはステップ１０１４に続くが、このステップは図１０Ｂに示す。
【００８１】
ステップ１０１４で、第２のノードに含まれる少なくとも１つのデータモジュールの第２のインスタンスに向けられる、分散キャッシュの第３のノード内でログ記録するための書込み要求が転送されるべきかどうかに関して、判定が行われる。たとえば、第３のノードに含まれる少なくとも１つのデータモジュールの第３のインスタンスが、書込み要求に関してデータモジュールに対して行われるべき全変更のログを維持することができる。ログは、たとえば、第２のインスタンスがアクセス不可能になった場合に、変更に関する情報を復元する目的で維持され得る。ある実装例では、判定モジュール１１０６が、第３のノードにログ記録するための書込み要求を転送するかどうか判定する。書込み要求が、第３のノードに転送されるべきでない場合、フローはステップ１０１８に続く。転送されるべきである場合、ステップ１０１６に続く。
【００８２】
ステップ１０１６で、書込み要求は、ログ記録のために第３のノードに転送される。ある実装例では、転送モジュール１１１０が、第３のノードに書込み要求を転送する。
【００８３】
ステップ１０１８で、第１のノードに関してガベージコレクション操作が完了したかどうかに関して、判定が行われる。たとえば、ガベージコレクション操作を実施するガベージコレクタ（たとえば、ガベージコレクタ６０４）が、第１のノードに関してのガベージコレクション操作の完了に応答して、第１のノードに関してガベージコレクション操作が完了したことを示すインジケータを第１のノードに与え得る。ある実装例では、判定モジュール１１０６が、ガベージコレクション操作が完了したかどうか判定する。ガベージコレクション操作が完了していない場合、フローはステップ１０１８に戻る。完了している場合、フローはステップ１０２０に続く。
【００８４】
ステップ１０２０で、第１のノードに含まれる少なくとも１つのデータモジュールの第１のインスタンスの状態が一次状態に戻されるべきかどうかに関して、判定が行われる。たとえば、判定は、第１のノードに含まれる少なくとも１つのデータモジュールの第１のインスタンスの状態を一次状態に戻させることを求める要求が受信されるかどうかに基づき得る。データマネージャと通信するように構成された、分散キャッシュの第１のノード、第２のノード、または別のノードが、このような要求を、第１のノードに関してガベージコレクション操作が完了すると与え得る。ある実装例では、判定モジュール１１０６が、第１のノードに含まれる少なくとも１つのデータモジュールの第１のインスタンスの状態が一次状態に戻されるべきかどうか判定する。第１のノードに含まれる少なくとも１つのデータモジュールの第１のインスタンスの状態が、一次状態に戻されるべきでない場合、フローチャート１０００は終わる。戻されるべきである場合、フローはステップ１０２２に続くが、このステップは図１０Ｃに示す。
【００８５】
ステップ１０２２で、第１のノードに含まれる少なくとも１つのデータモジュールの第１のインスタンスの状態が、二次状態から一次状態に戻される。ある実装例では、状態モジュール１１０４が、第１のノードに含まれる少なくとも１つのデータモジュールの第１のインスタンスの状態を二次状態から一次状態に戻す。
【００８６】
ステップ１０２４で、第２のノード内の少なくとも１つのデータモジュールの第２のインスタンスが、ステップ１０１０で生成されたかどうかに関して、判定が行われる。たとえば、ステップ１０１０が完了すると、インジケータを、ステップ１０１０が実施されたことを示す値をもつようにセットすることができる。この例によると、ステップ１０２４での判定は、インジケータの値に基づき得る。ある実装例では、判定モジュール１１０６が、第２のノード内の少なくとも１つのデータモジュールの第２のインスタンスがステップ１０１０で生成されたかどうか判定する。少なくとも１つのデータモジュールの第２のインスタンスが、ステップ１０１０で第２のノード内で生成された場合、フローはステップ１０２８に続く。そうでない場合、フローはステップ１０２６に続く。
【００８７】
ステップ１０２６で、第２のノードに含まれる少なくとも１つのデータモジュールの第２のインスタンスの状態が、一次状態から二次状態に戻される。ある実装例では、状態モジュール１１０４が、第２のノードに含まれる少なくとも１つのデータモジュールの第２のインスタンスの状態を、一次状態から二次状態に戻す。ステップ１０２６が実施されると、フローチャート１０００は終わる。
【００８８】
ステップ１０２８で、少なくとも１つのデータモジュールの第２のインスタンスが、第２のノードから消去される。ある実装例では、消去モジュール１１１２が、少なくとも１つのデータモジュールの第２のインスタンスを第２のノードから消去する。第２のノードに含まれる少なくとも１つのデータモジュールの第２のインスタンスは、必ずしも消去される必要はないことが理解されよう。たとえば、第２のノードに含まれる少なくとも１つのデータモジュールの第２のインスタンスの状態は、消去されるのではなく、二次状態に置かれ得る。この例によると、ステップ１０２２の完了の後、フローは、すべてのケースにおいてステップ１０２６に続くことになり、フローチャート１０００は、その後終了することになる。
【００８９】
ステップ１０３０で、ガベージコレクション操作を第２のノードに関して実施させることを求める要求がデータマネージャにおいて受信されたかどうかに関して、判定が行われる。たとえば、要求は、第１のノード、第２のノード、またはデータマネージャと通信するように構成された別のノードから受信され得る。ある実装例では、判定モジュール１１０６が、ガベージコレクション操作を第２のノードに関して実施させることを求める要求がデータマネージャ６０６’において受信されたかどうか判定する。このような要求が受信されない場合、フローチャート１０００は終わる。しかしながら、このような要求が受信された場合、フローはステップ１０３２に続く。
【００９０】
ステップ１０３２で、第２のノードに関してガベージコレクション操作の実施を要求する要求がガベージコレクタに送られる。たとえば、少なくとも１つのデータモジュールの第２のインスタンスが第２のノードから消去されるステップ１０２８の実施の後、第２のインスタンスは、依然として第２のノード上に存在し得るが、第２のインスタンスはもはや、どのアプリケーションによっても参照することができない。したがって、第２のノードに関してのガベージコレクション操作の実施は、第２のノードから第２のインスタンスを物理的に除去し得る。ある実装例では、要求モジュール１１１４が、第２のノードに関してのガベージコレクション操作の実施を要求する要求をガベージコレクタに送る。
【００９１】
いくつかの実施形態例では、フローチャート１０００の１つまたは複数のステップ１００２、１００４、１００６、１００８、１０１０、１０１２、１０１４、１０１６、１０１８、１０２０、１０２２、１０２４、１０２６、１０２８、１０３０、および／または１０３２は、実施しなくてよい。さらに、ステップ１００２、１００４、１００６、１００８、１０１０、１０１２、１０１４、１０１６、１０１８、１０２０、１０２２、１０２４、１０２６、１０２８、１０３０、および／または１０３２に追加される、またはその代わりのステップを実施してよい。
【００９２】
データマネージャ６０６’は、受信モジュール１１０２、状態モジュール１１０４、判定モジュール１１０６、生成モジュール１１０８、転送モジュール１１１０、消去モジュール１１１２、および／または要求モジュール１１１４の１つまたは複数を含まなくてよいことが理解されよう。さらに、データマネージャ６０６’は、受信モジュール１１０２、状態モジュール１１０４、判定モジュール１１０６、生成モジュール１１０８、転送モジュール１１１０、消去モジュール１１１２、および／または要求モジュール１１１４に追加される、またはその代わりのモジュールを含み得る。
【００９３】
図１２は、ある実施形態による、ガベージコレクション操作中の分散キャッシュへのアクセスを管理する方法のフローチャート１２００を示す。フローチャート１２００は、データマネージャの観点から記載される。フローチャート１２００は、たとえば、図６に示すコンピュータシステム６００のデータマネージャ６０６によって実施することができる。例示目的のために、フローチャート１２００は、図１３に示すデータマネージャ６０６’’を参照して記載されているが、このデータマネージャは、ある実施形態によるデータマネージャ６０６の例である。図１３に示すように、データマネージャ６０６’’は、受信モジュール１１０２’、判定モジュール１１０６’、および要求モジュール１１１４’を含む。それ以上の構造および動作実施形態が、フローチャート１２００に関する考察に基づいて当業者には明らかであろう。フローチャート１２００について、以下の通り記載する。
【００９４】
図１２に示すように、フローチャート１２００の方法は、ステップ１２０２で始まる。ステップ１２０２で、ノードに関してのガベージコレクション操作の実行に先立って、ノードをオフライン状態に置くための要求が、分散キャッシュのノードから受信される。ある実装例では、受信モジュール１１０２’が、ノードをオフライン状態に置くための要求をノードから受信する。
【００９５】
ステップ１２０４で、第２のノードからの要求の受信に応答して、ノードに含まれる少なくとも１つのデータモジュールの１つまたは複数のインスタンスを除く、少なくとも１つのデータモジュールのすべてのインスタンスが、ガベージコレクション操作によってロックされるという判定が行われる。ロックされるデータモジュールとは、ガベージコレクション操作がそれに対して実施されるデータモジュールである。たとえば、ステップ１２０４での判定は、分散キャッシュのガベージコレクタ（たとえば、ガベージコレクタ６０４）またはノード（複数可）（たとえば、ノード６１４Ａ〜６１４Ｎのいずれか）から受信される、ガベージコレクション操作がそれに対して実施されているデータモジュール（たとえば、データモジュール６１６Ａ〜６１６Ｎのいずれか）を示すインジケータ（複数可）に基づき得る。ある実装例では、判定モジュール１１０６’が、ノードに含まれる少なくとも１つのデータモジュールの１つまたは複数のインスタンスを除く、少なくとも１つのデータモジュールのすべてのインスタンスがガベージコレクション操作によってロックされると判定する。たとえば、データマネージャ６０６’’の１つまたは複数のプロセッサが、判定を行うのに使われ得る。
【００９６】
ステップ１２０６で、ノードに含まれる少なくとも１つのデータモジュールの１つまたは複数のインスタンスを除く、少なくとも１つのデータモジュールのすべてのインスタンスがガベージコレクション操作によってロックされるという判定に応答して、ガベージコレクション操作がノードに関して延期されるべきであるという要求が行われる。ある実装例では、要求モジュール１１１４’が、ガベージコレクション操作が第１のノードに関して延期されることを要求する。
【００９７】
図１４は、ある実施形態による、ガベージコレクション操作中の分散キャッシュへのアクセスを管理する別の方法のフローチャート１４００を示す。フローチャート１４００は、データマネージャの観点から記載される。フローチャート１４００は、たとえば、図６に示すコンピュータシステム６００のデータマネージャ６０６によって実施することができる。例示目的のために、フローチャート１４００は、図１５に示すデータマネージャ６０６’’’を参照して記載されているが、このデータマネージャは、ある実施形態によるデータマネージャ６０６の例である。図１５に示すように、データマネージャ６０６’’’は、受信モジュール１１０２’’、比較モジュール１５０２、および要求モジュール１１１４’’を含む。それ以上の構造および動作実施形態が、フローチャート１４００に関する考察に基づいて当業者には明らであろう。フローチャート１４００について、以下の通り記載する。
【００９８】
図１４に示すように、フローチャート１４００の方法は、ステップ１４０２で始まる。ステップ１４０２で、ノードに関してのガベージコレクション操作の実行に先立って、ノードをオフライン状態に置くための要求が、分散キャッシュのノードから受信される。ある実装例では、受信モジュール１１０２’’が、ノードをオフライン状態に置くための要求をノードから受信する。
【００９９】
ステップ１４０４で、ノードからの要求の受信に応答して、ノードの負荷が閾値と比較される。負荷は、指定された期間内にノードによって処理される要求の数、消費されつつあるノードの帯域幅の割合、および／または他の任意の適切な要因（複数可）に基づき得る。ある実装例では、比較モジュール１５０２が、ノードの負荷を閾値と比較する。
【０１００】
ステップ１４０６で、負荷が閾値を超えることに基づいて、ガベージコレクション操作がノードに関して延期されるべきという要求が行われる。いくつかの実施形態によると、比較的高い負荷は、ノードがかなりの量のデータに対して一次ノードとして働くことを示し得る。たとえば、ガベージコレクション操作をノードに関して実施することにより、ノードに含まれるデータの一次インスタンスをロックすることができる。この例によると、ガベージコレクション操作をノードに関して実施することにより、一次インスタンスがガベージコレクション操作によってロックされるのでデータをアクセス不可能にさせることになる。別の例では、ノードに含まれる一次インスタンスの状態を二次状態に変えることができ、別のノードに含まれるデータの別のインスタンス（または単一のノードに、もしくは複数のノードに渡って含まれるデータのそれぞれの部分の複数のインスタンス）を、一次状態に変えることができる。この例によると、ノードに含まれる一次インスタンスの状態を二次状態に、他のノード（複数可）に含まれる他のインスタンス（複数可）の状態を一次状態に変えるのに、かなりのリソースが必要となり得る。ある実装例では、要求モジュール１１１４’’が、ガベージコレクション操作がノードに関して延期されることを要求する。
【０１０１】
図１６は、実施形態が実装され得るコンピュータ例１６００を示す。図１、６に示したマシン１０２Ａ〜１０２Ｎ、図６に示したユーザシステム６０２Ａ〜６０２Ｍ、ガベージコレクタ６０４、データマネージャ６０６、もしくはデータベース６１０のどの１つもしくは複数も、または図９、１１、１３、および１５に示したものの１つもしくは複数のどのサブコンポーネントも、コンピュータ１６００の１つまたは複数の特徴および／または代替特徴を含むコンピュータ１６００を使って実装することができる。コンピュータ１６００は、たとえば、従来のパーソナルコンピュータ、モバイルコンピュータ、またはワークステーションの形の汎用コンピューティングデバイスでもよく、コンピュータ１６００は、特殊目的コンピューティングデバイスでもよい。本明細書に挙げるコンピュータ１６００の記述は、説明のために行われ、限定的であることは意図していない。実施形態は、当業者に公知であるように、それ以外のタイプのコンピュータシステムでも実装することができる。
【０１０２】
図１６に示すように、コンピュータ１６００は、処理ユニット１６０２と、システムメモリ１６０４と、システムメモリ１６０４を含む様々なシステムコンポーネントを処理ユニット１６０２に結合するバス１６０６とを含む。バス１６０６は、メモリバスまたはメモリコントローラ、周辺バス、グラフィック専用高速バス、および様々なバスアーキテクチャのいずれかを使うプロセッサまたはローカルバスを含む、いくつかのタイプのバス構造のいずれかの１つまたは複数を表す。システムメモリ１６０４は、ＲＯＭ（Read Only Memory）１６０８およびＲＡＭ（Random Access Memory）１６１０を含む。基本入出力システム１６１２（ＢＩＯＳ）が、ＲＯＭ１６０８に格納されている。
【０１０３】
コンピュータ１６００は、ハードディスクに読み書きするハードディスクドライブ１６１４、取外し可能磁気ディスク１６１８を読み取り、または書き込む磁気ディスクドライブ１６１６、およびＣＤ  ＲＯＭ、ＤＶＤ  ＲＯＭ、または他の光学媒体など、取外し可能光ディスク１６２２を読み取り、または書き込む光ディスクドライブ１６２０というドライブの１つまたは複数も有する。ハードディスクドライブ１６１４、磁気ディスクドライブ１６１６、および光ディスクドライブ１６２０は、それぞれ、ハードディスクドライブインターフェイス１６２４、磁気ディスクドライブインターフェイス１６２６、および光ドライブインターフェイス１６２８によってバス１６０６に接続される。ドライブおよびその関連コンピュータ可読記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールおよびコンピュータの他のデータの不揮発性記憶を可能にする。ハードディスク、取外し可能磁気ディスクおよび取外し可能光ディスクについて記載されているが、たとえばフラッシュメモリカード、デジタルビデオディスク、ＲＡＭ、ＲＯＭなど、他のタイプのコンピュータ可読媒体も、データを格納するのに使われ得る。
【０１０４】
いくつかのプログラムモジュールを、ハードディスク、磁気ディスク、光ディスク、ＲＯＭ、またはＲＡＭ上に格納することができる。こうしたプログラムは、オペレーティングシステム１６３０、１つまたは複数のアプリケーションプログラム１６３２、他のプログラムモジュール１６３４、およびプログラムデータ１６３６を含む。アプリケーションプログラム１６３２またはプログラムモジュール１６３４は、本明細書に記載されるように、たとえば、ノード１０４Ａ〜１０４Ｚ、名前付きキャッシュ１０６Ａ〜１０６Ｂ、領域１０８Ａ〜１０８Ｙ、キャッシュ項目１１０Ａ〜１１０Ｐ、キャッシュクライアント２０２Ａ〜２０２Ｂ、ルーティングレイヤ２０４Ａ〜２０４Ｃ、Ｐｕｔ操作２０６、Ｇｅｔ操作２０８、一次データモジュール２１０Ａ〜２１０Ｃ、二次データモジュール３０２Ａ〜３０２Ｃ、複製されたデータモジュール４０２Ａ〜４０２Ｃ、ローカルキャッシュ５０２Ａ〜５０２Ｂ、ルーティングレイヤ５０４Ａ〜５０４Ｂ、ノード６１４Ａ〜６１４Ｎ、データモジュール（複数可）６１６Ａ〜６１６Ｎ、アプリケーション（複数可）６１８Ａ〜６１８Ｎ、受信モジュール９０２、要求モジュール９０４、受信モジュール１１０２、状態モジュール１１０４、判定モジュール１１０６、生成モジュール１１０８、転送モジュール１１１０、消去モジュール１１１２、要求モジュール１１１４、比較モジュール１５０２、フローチャート７００（フローチャート７００のどのステップも含む）、フローチャート８００（フローチャート８００のどのステップも含む）、フローチャート１０００（フローチャート１０００のどのステップも含む）、フローチャート１２００（フローチャート１２００のどのステップも含む）、および／またはフローチャート１４００（フローチャート１４００のどのステップも含む）を実装するコンピュータプログラム論理を含み得る。
【０１０５】
ユーザは、キーボード１６３８およびポインティングデバイス１６４０などの入力デバイスを通してコンピュータ１６００にコマンドおよび情報を入れることができる。他の入力デバイス（図示せず）は、マイクロホン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどを含み得る。こうしたおよび他の入力デバイスはしばしば、バス１６０６に結合されたシリアルポートインターフェイス１６４２を介して処理ユニット１６０２に接続されるが、パラレルポート、ゲームポート、またはＵＳＢ（Universal Serial Bus）など、他のインターフェイスによって接続することもできる。
【０１０６】
モニタ１６４４または他のタイプの表示デバイスも、ビデオアダプタ１６４６などのインターフェイスを介してバス１６０６に接続される。モニタに加え、コンピュータ１６００は、スピーカおよびプリンタなど、他の周辺出力デバイス（図示せず）を含み得る。
【０１０７】
コンピュータ１６００は、ネットワークインターフェイスもしくはアダプタ１６５０、モデム１６５２、またはネットワークを越えて通信を確立する他の手段を介してネットワーク１６４８（たとえば、インターネット）に接続される。モデム１６５２は、内部にあっても外部にあってもよく、シリアルポートインターフェイス１６４２を介してバス１６０６に接続される。
【０１０８】
本明細書で使用する「コンピュータプログラム媒体」および「コンピュータ可読媒体」という用語は、概してハードディスクドライブ１６１４、取外し可能磁気ディスク１６１８、取外し可能光ディスク１６２２に関連づけられたハードディスクなどの媒体、ならびに、たとえばフラッシュメモリカード、デジタルビデオディスク、ＲＡＭ、ＲＯＭなど、他の媒体を指すのに使われる。
【０１０９】
上述したように、コンピュータプログラムおよびモジュール（アプリケーションプログラム１６３２および他のプログラムモジュール１６３４を含む）は、ハードディスク、磁気ディスク、光ディスク、ＲＯＭ、またはＲＡＭ上に格納することができる。このようなコンピュータプログラムは、ネットワークインターフェイス１６５０またはシリアルポートインターフェイス１６４２を介して受信することもできる。このようなコンピュータプログラムは、アプリケーションによって実行され、またはロードされると、本明細書で論じた実施形態の特徴をコンピュータ１６００が実装することを可能にする。したがって、このようなコンピュータプログラムは、コンピュータ１６００のコントローラを表す。
【０１１０】
実施形態は、どのコンピュータ使用可能媒体上にも格納されたソフトウェア（たとえば、コンピュータ可読命令）を備えるコンピュータプログラム製品も対象とする。このようなソフトウェアは、１つまたは複数のデータ処理デバイスにおいて実行されると、データ処理デバイス（複数可）を、本明細書に記載されたように動作させる。実施形態は、現時点で公知であり、または将来公知になる、どのコンピュータ使用可能またはコンピュータ可読媒体も利用し得る。コンピュータ可読媒体の例は、ＲＡＭ、ハードドライブ、フロッピーディスク、ＣＤ  ＲＯＭ、ＤＶＤ  ＲＯＭ、ｚｉｐディスク、テープ、磁気記憶デバイス、光学記憶デバイス、ＭＥＭＳベースの記憶デバイス、ナノテクノロジーベースの記憶デバイスなどの記憶デバイスを含むが、それに限定されない。
【０１１１】
ＩＶ．結論
様々な実施形態を上述したが、こうした実施形態は、例示の目的でのみ提示されるのであって、限定ではないことを理解されたい。形および細部における様々な変更が、本発明の精神および範囲から逸脱することなく行われ得ることが当業者には明らかであろう。したがって、本発明の範囲は、上述の例示的な実施形態のいずれによっても限定されるべきではなく、添付の請求項およびその等価物によってのみ定義されるべきである。
【図１】
2012530294.tif 000004
【図２】
2012530294.tif 000005
【図３】
2012530294.tif 000006
【図４】
2012530294.tif 000007
【図５】
2012530294.tif 000008
【図６】
2012530294.tif 000009
【図７】
2012530294.tif 000010
【図８】
2012530294.tif 000011
【図９】
2012530294.tif 000012
【図１０Ａ】
2012530294.tif 000013
【図１０Ｂ】
2012530294.tif 000014
【図１０Ｃ】
2012530294.tif 000015
【図１１】
2012530294.tif 000016
【図１２】
2012530294.tif 000017
【図１３】
2012530294.tif 000018
【図１４】
2012530294.tif 000019
【図１５】
2012530294.tif 000020
【図１６】
2012530294.tif 000021
【国際調査報告】
2012530294.tif 000022
2012530294.tif 000023