(57)【要約】      （修正有）【課題】分散型連想記憶装置における計算に要する費用を抑える。【解決手段】一実施形態は、記憶システム４０７上のコンテンツの位置を特定するシステムであって、記憶システム４０７が、今後のアクセス要求で再発行できるデータがどこに物理的に記憶されているかに関する位置の手がかり４０６を、ホスト４０１に与える、システムである。他の実施形態では、物理的な記憶位置にコンテンツアドレスをマッピングするインデックスが、記憶システムのキャッシュ４１２ａ−ｄに入れられる。また他の実施形態では、データのアドレスに基づいて新しく書き込まれたデータの記憶位置を選択するために、固有の位置が使用される。さらなる実施形態では、ほぼ同時に記憶されたデータユニットは、インデックスに隣接した位置インデックスエントリをそれぞれ有している。【選択図】  図４
2005235171.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムで実行される時に、データを処理する方法を実行する命令で符号化された少なくとも１つのコンピュータ可読媒体であって、前記コンピュータシステムが、少なくとも１つのホストと、前記少なくとも１つのホストのデータユニットを記憶する少なくとも１つの連想記憶装置とを有し、前記少なくとも１つのホストが、データユニットのコンテンツに少なくとも一部分基づいたコンテンツアドレスを使用してデータユニットにアクセスし、前記方法が、
（ａ）どのデータユニットが時間的に近接して記憶システムに書き込まれたかについての指標を与える第１の情報を持つデータユニットのコンテンツアドレスを生成する行為
を含む、コンピュータ可読媒体。
【請求項２】
前記方法が、
（ｂ）１つのデータユニットのコンテンツアドレスを前記記憶システムに与えることによって、前記データユニットの１つにアクセスする行為と、
（ｃ）前記記憶システム内のどこに前記１つのデータユニットを記憶すべきかを算出する時に、前記第１の情報を１つのデータユニットのコンテンツアドレスと考える行為と、をさらに含む請求項１記載の少なくとも１つのコンピュータ可読媒体。
【請求項３】
データユニットの１つに対して、前記行為（ａ）が、
データユニットの少なくとも一部のハッシュを生成する行為と、
前記ハッシュに前記第１の情報を挿入して該データユニットの１つのコンテンツアドレスを生成する行為と、
を有する請求項１記載の少なくとも１つのコンピュータ可読媒体。
【請求項４】
前記第１の情報が、前記データユニットの１つが前記少なくとも１つの記憶システムにいつ書き込まれたかに関するタイムスタンプの少なくとも一部を含んでいる、請求項３記載の少なくとも１つのコンピュータ可読媒体。
【請求項５】
前記行為（ｂ）が、データユニットの１つを記憶する前記少なくとも１つの記憶システム内の記憶位置を選択するのに前記第１の情報の少なくとも一部を使用する行為を有し、前記方法が、前記選択された記憶位置に前記データユニットの１つを記憶する行為をさらに含む、請求項２記載の少なくとも１つのコンピュータ可読媒体。
【請求項６】
コンピュータシステムで実行される時に、データを処理する方法を実行する命令で符号化された少なくとも１つのコンピュータ可読媒体であって、前記コンピュータシステムが、少なくとも１つのホストと、前記少なくとも１つのホストのデータユニットを記憶する少なくとも１つの連想記憶装置とを有し、前記少なくとも１つのホストが、データユニットのコンテンツに少なくとも一部分基づいたコンテンツアドレスを使用してデータユニットにアクセスし、前記少なくとも１つの記憶システムが、データユニットが記憶されている少なくとも１つの記憶システム内の記憶場所にデータユニットのコンテンツアドレスをマッピングするインデックスを有し、前記方法が、
（ａ）前記少なくとも１つのホストから、データユニットの１つを記憶するという要求であって、データユニットに関連付けられたコンテンツアドレスでデータユニットの１つを識別する要求を受け取る行為と、
（ｂ）記憶位置の前記インデックスへのエントリが、前記データユニットの１つと時間的に近接して少なくとも１つの記憶システムに書き込まれた他のデータユニットのインデックスへのエントリに近接するように、前記データユニットの１つを選択された記憶位置に記憶する行為と、
を含むコンピュータ可読媒体。
【請求項７】
データユニットの１つのコンテンツアドレスが、データユニットの少なくとも一部をハッシュすることによって少なくとも一部分生成される、請求項６記載の少なくとも１つのコンピュータ可読媒体。
【請求項８】
コンテンツアドレスが、どのデータユニットが時間的に近接して記憶システムに書き込まれるかを算出するのに使用可能な第１の情報を含み、前記方法が、前記少なくとも１つのホストから前記第１の情報を受け取ることをさらに含む、請求項７記載の少なくとも１つのコンピュータ可読媒体。
【請求項９】
コンテンツアドレスが、どのデータユニットが近接した前記記憶システムに書き込まれているかを算出するのに使用可能な第１の情報を含み、前記方法が、
前記少なくとも１つの記憶システムで前記第１の情報の第１の部分を生成する行為と、
前記少なくとも１つのホストから前記第１の情報の第２の部分を受け取る行為と、
前記第１の部分および前記第２の部分をコンテンツアドレスに追加する行為と、
をさらに含む請求項７記載の少なくとも１つのコンピュータ可読媒体。
【請求項１０】
連想記憶装置と、少なくとも１つのホストを有するコンピュータシステムで使用される連想記憶装置であって、前記少なくとも１つのホストが、データユニットのコンテンツに基づいて生成されたコンテンツアドレスを用いて前記連想記憶装置に記憶されているデータユニットにアクセスし、前記連想記憶装置が、
前記少なくとも１つのホストから受け取ったデータを記憶する少なくとも１つの記憶装置と、
少なくとも１つの記憶システムに時間的に近接して書き込まれたデータユニットがインデックスに近接したエントリを有するように、データユニットが記憶されている前記少なくとも１つの記憶システム内の記憶位置に、データユニットのコンテンツアドレスをマッピングする前記インデックスを保持する少なくとも１つのコントローラと、
を有する連想記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶システムのコンテンツにアクセスする方法および装置に関する。
【背景技術】
【０００２】
連想記憶装置（Content Addressed Storage,  ＣＡＳ）は、記憶システムに記憶されているデータユニットがそのデータユニットのコンテンツから得られたアドレスを使用してアクセスされる技術である。一例として、データユニットを、そのデータユニットのコンテンツアドレスとして使用されるハッシュ値を生成するハッシュ関数への入力として与えることができる。コンテンツアドレスの生成に適したハッシュ関数の一例として、メッセージダイジェスト５（ＭＤ５）ハッシュアルゴリズムがある。ホストコンピュータが連想記憶装置に要求を送ってデータユニットを取り出す場合、そのホストは、データユニットのコンテンツアドレス（例えばハッシュ値）を与える。次に、記憶システムは、その記憶システムのデータユニットの物理的位置をコンテンツアドレスに基づいて算出し、その（物理的な）位置からデータユニットを取り出し、（取り出した）データユニットをホストコンピュータに返す。
【０００３】
データユニットの物理的位置を算出するタスクは、特にその記憶システムが分散型記憶システムの場合には、いくつかの態様を含むことができる。分散型記憶システムは、各ノードが個別のリソース（例えば、プロセッサ、メモリ、ディスク）を備えた個別のマシンでもよい、多くの個別のノードから構成されたシステムである。ノードは、互いに（例えば、ネットワークによって）通信し、１つまたは２つ以上のホストコンピュータからのデータアクセス要求を処理する。記憶システムのデータユニットの物理的位置をデータユニットのコンテンツアドレスに基づいて決定するために、記憶システムは先ず、そのデータユニットがどのノードに記憶されているかを算出する。次に、記憶システムは、データユニットが記憶されているディスクの物理的位置（例えばシリンダ、ヘッド、セクタ）のみならず、（ノードが複数のディスクを有している場合）データユニットがそのノードのどのディスクに記憶されているかを算出する。
【０００４】
図１に、分散型記憶システムの一実施例を示す。分散型記憶システムは、複数のアクセスノード（ＡＮ）１０１ａ、１０１ｂ、…、１０１ｎと、複数のストレージノード（ＳＮ）１０５ａ、１０５ｂ、１０５ｃ、…、１０５ｎと、それらを相互に接続するネットワーク１０３とを含んでいる。アクセスノード１０１は、ホストコンピュータ（図示されない）からのアクセス要求（例えばリード／ライト要求）の処理に使用され、一方ストレージノード１０５はデータの記憶に使用できる。アクセスノードがホストから要求を受け取ってデータユニットを読み出す場合、そのアクセスノードは、データユニットがどのストレージノードに記憶されているかを算出し、データユニットを適切な１つまたは２つ以上のストレージノードから取り出すことを要求する。
【０００５】
どのストレージノードが特定のデータユニットを記憶しているかを算出する周知の方法の１つを、ここではマルチキャスト位置クエリ（ＭＬＱ）と呼ぶことにする。マルチキャスト位置クエリでは、アクセスノード１０１が、データユニットにアクセスする要求をホストから受け取る。次に、アクセスノードは、ネットワークメッセージを各ストレージノード１０５にブロードキャストし、ストレージノードが特定のデータユニットを記憶しているかどうかを問い合わせる。次に、各ストレージノード１０５は、要求されたデータユニットがそこに記憶されているかどうかを算出する。各ストレージノード１０５は、データユニットが記憶されているストレージノードのディスクと共に、そのストレージノード
に記憶されているデータユニットのコンテンツアドレスを記録しているデータセット（例えば、データベースまたは表）を含むことができる。すなわち、ストレージノードが４枚のディスクを有している場合、その表は、各データユニットが４枚のディスクのどれに記憶されているかを示すことができる。このように、ストレージノード１０５がＭＬＱネットワークメッセージをアクセスノード１０１から受け取った場合、ストレージノードは、そのデータセットを細かく調べて、要求されたデータユニットがディスクに記憶されているかどうかを判断することができる。
【０００６】
一旦、ストレージノード１０５が、要求されたデータユニットをディスクが記憶していると判断すると、ストレージノードは、同じデータセットを使用してデータユニットが記憶されている物理ディスクを算出する。次に、ストレージノードは、データユニットが記憶されている適切なディスクの物理的位置を算出してもよい。データユニットは、ストレージノードのファイルシステムにファイルとして記憶されていてもよい。このように、データユニットの物理的なディスク位置を算出するために、ストレージノードは、データユニットを含んだファイルシステムの対応するファイルの位置を特定し、ファイルシステムの位置を物理的なディスク位置に、ストレージノードのオペレーティングシステムに基づいてマッピングできる。例えば、データユニットを記憶する場合、ストレージノードは、そのファイル名としてデータユニットのコンテンツアドレスを有するファイルを生成し、そのファイルにデータユニットを記憶することができる。
【０００７】
図２は、データユニットを分散型連想記憶装置に記憶するファイルシステムの説明図である。図２のファイルシステムは多くの階層ディレクトリを含んでいる。階層構造の最上位のディレクトリがルートディレクトリと呼ばれている。階層構造の第２のレベルには、多くのサブディレクトリがある。これらのサブディレクトリの各々は、データユニットのコンテンツアドレス中の第１番目の文字に相当する。すなわち、文字「Ａ」で始まるコンテンツアドレスを有するデータユニットは、ディレクトリ「Ａ」のサブディレクトリの１つに記憶される。データユニットが記憶されるサブディレクトリは、コンテンツアドレスの第２番目の文字に左右される。記憶システムが後でデータユニット（例えば、リード要求に応答して）へのアクセスを試みる場合に、記憶システムは、ファイルシステム階層構造をくまなく調査してデータユニットの位置を特定し、データユニットのコンテンツアドレスの最初の２文字と名前が一致するサブディレクトリの位置を特定することができる。記憶システムがそのファイルシステムのデータユニットの位置を特定すると、記憶システムはデータユニットを含んでいるファイルを開き、ストレージノードがそこに記憶されたデータユニットを実際に有していることを確認してもよい。次に、ストレージノードは、マルチキャスト要求を発行したアクセスノードに、データユニットを返すことができる。次に、アクセスノードは、データユニットをそのデータユニットを要求したホストに返すことができる。
【０００８】
ＭＬＱは、要求された各データユニットの完全なデータベース検索の実行を各ストレージノードに要求するので、計算に要する費用が高くつく処理である。さらに、データユニットは、通常１つまたは少数のストレージノード（データユニットが１つまたは２つ以上のストレージノードに複写されると仮定すると）にのみ存在するので、これらの全数検索の大半はヒットしない。
【０００９】
記憶システムのデータユニットの位置を特定するＭＬＱの使用の計算に要する費用を低減するために、データユニットの位置を特定するインデックスを用いる他の技術が開発された。インデックスを、ここではデータユニットを意味する用語「ブロブ（ｂｌｏｂ）」によりブロブ位置検索（ＢＬＩ）と呼ぶことにする。ＢＬＩは、データユニット（「ブロブ」）のコンテンツアドレスをコンテンツが記憶されている１つまたは２つ以上のストレージノードにマッピングするデータベースである。ＭＬＱスキームとほぼ同一手法で、デ
ータユニットは、選択されたファイルシステムの位置にデータユニットのコンテンツアドレスに基づいて記憶される。ただし、ＢＬＩの管理はストレージノード間で分割されるので、結果的に各ストレージノードはＢＬＩの一部分の処理を行うことになる。したがって、データユニットを求めるアクセス要求は、すべてのストレージノードにブロードキャストされる必要がなく、要求されたデータユニットを含んだＢＬＩ部を管理している１つのストレージノードだけにブロードキャストされるだけでよい。
【００１０】
図３にＢＬＩの構成を示す。ＢＬＩを管理する履行任務は、ストレージノード３０１、３０３、３０５、および３０７のすべてに平等に分割されている。ストレージノード３０１は、文字「Ａ」−「Ｆ」で始まるコンテンツアドレスを含んだＢＬＩの一部分を処理し、ストレージノード３０３は、文字「Ｇ」−「Ｌ」で始まるコンテンツアドレスを含んだＢＬＩの一部分を処理し、ストレージノード３０５は、文字「Ｍ」−「Ｒ」で始まるコンテンツアドレスを含んだＢＬＩの一部分を処理し、ストレージノード３０７は、文字「Ｓ」−「Ｚ」で始まるコンテンツアドレスを含んだＢＬＩの一部分を処理する。ＢＬＩの各部分は、記憶システムに記憶されている、指定された範囲内のあらゆるコンテンツアドレスのエントリを含み、対応するデータユニットがどのストレージノードに記憶されているかを示す。ストレージノードは、それぞれのストレージノードに記憶されているデータユニットのコンテンツアドレスを記憶しているローカルデータベース３０９、３１１、３１３、および３１５も有し、これらのコンテンツアドレスがストレージノードのどの物理ディスクに記憶されているかを示す。
【００１１】
アクセスノードは、ＢＬＩのどの部分が各ストレージノードによって管理されているかについての記録を保持している。したがって、アクセスノードがホストから要求を受け取り特定のデータユニットを検索する場合には、そのアクセスノードは、要求されたデータユニットのコンテンツアドレスを含んでいるＢＬＩ部をどのストレージノードが管理しているかを算出する。例えば、ホストが、「５」で始まるコンテンツアドレスを有するデータユニットを求めてアクセスノードに要求を送る場合、アクセスノードは、ストレージノード３０７に問い合わせて、どのストレージノードが要求されたデータユニットを記憶しているかを算出する。ストレージノード３０７はＢＬＩを検索し、１つまたは２つ以上のどのストレージノードが要求されたデータユニットを記憶しているかを算出して、この情報を要求しているアクセスノードに返す。アクセスノードは、適切なストレージノードからデータユニットを直接要求することもできる。このように、データユニットを記憶していない他のストレージノードは問い合わせをされない。したがって、ＭＬＱとは異なり、各ストレージノードは、ＢＬＩを使用することでデータベースの全数検索を実行する必要がない。その代わりに、１つのストレージノードだけがＢＬＩに問い合わせ、１つのストレージノードだけがそのローカルデータベースに問い合わせるので、記憶システム全体の計算に要する費用が低減される。
【００１２】
ＢＬＩが要求されたデータユニットをストレージノードに返せなかった場合、（すなわち、ホストから要求されたコンテンツアドレスがＢＬＩに見つからなかった場合）、記憶システムはＭＬＱスキームに戻り、ＭＬＱを発行して要求されたコンテンツアドレスに対応したデータユニットがどのストレージノードに存在するかを算出する。
【００１３】
ＢＬＩ管理履行任務をストレージノード間に等しく分散することによって、特定のデータユニットを記憶システムに配置するための計算に必要な負担は、ストレージノード間で等しく共有される。コンテンツアドレスを生成するのに使用されるハッシュ関数のランダム性は、ほぼ等しい数のコンテンツアドレスを各ストレージノードに分散することに基づいている。新しいストレージノードが記憶システムに追加、またはストレージノードが記憶システムから取り除かれる場合には、ＢＬＩの管理履行任務はストレージノード間で再配分され、その結果、管理履行任務は、すべてのストレージノード間で等しく共有される
。さらに、新しいデータユニットが記憶システムに記憶された場合には、ストレージノードはＢＬＩを更新し、データユニットが記憶されているストレージノードのローカルデータベースを更新して、記憶システムにコンテンツそのものを書き込む。この３段階の書き込みが、書き込み処理における記憶システムの性能に影響を与える。
【００１４】
１つの例証的実施形態は、少なくとも１つのホストと、少なくとも１つのホストのデータを記憶する少なくとも１つの記憶システムとを有するコンピュータシステムにおけるデータ処理方法を対象とする。この方法は、（ａ）記憶システムで、少なくとも１つの記憶システムに記憶されているデータユニットにアクセスする少なくとも１つのホストからの要求を受け取る行為と、（ｂ）その要求に応答して、少なくとも１つのホストにデータユニットが少なくとも１つの記憶システムのどこに物理的に記憶されているかについての情報を返す行為とを含む。他の例証的実施形態は、コンピュータシステムで実行される時に、上記方法を実行する命令で符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【００１５】
さらなる例証的実施形態は、少なくとも１つのホストを含むコンピュータシステムで使用され、少なくとも１つのホストのデータを記憶する記憶システムを対象とする。この記憶システムは、少なくとも１つのホストから受け取ったデータを記憶する少なくとも１つの記憶装置と、コンテンツアドレスを使用してデータユニットを特定する要求を連想記憶装置に記憶されたデータユニットにアクセスする少なくとも１つのホストから受け取り、その要求に応答して、少なくとも１つのホストにデータユニットが連想記憶装置のどこに物理的に記憶されているかについての情報を返す少なくとも１つのコントローラと、を有する。
【００１６】
本発明の他の例証的実施形態は、少なくとも１つのホストと、少なくとも１つのホストのデータを記憶する少なくとも１つの記憶システムとを有するコンピュータシステムにおけるデータ処理方法を対象とする。この方法は、（ａ）少なくとも１つの記憶システムに、記憶システムに記憶されたデータユニットにアクセスする要求を送る行為と、（ｂ）少なくとも１つの記憶システムから、データユニットが少なくとも１つの記憶システムのどこに物理的に記憶されているかについての情報を受け取る行為とを含む。他の例証的実施形態は、コンピュータシステムで実行される時に、上記方法を実行する命令で符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【００１７】
さらなる例証的実施形態は、少なくとも１つの記憶システムに記憶されたデータにアクセスするホストコンピュータと、少なくとも１つの記憶システムとを含むコンピュータシステムで使用されるホストコンピュータを対象とする。このホストコンピュータは、少なくとも１つの記憶装置と、少なくとも１つの記憶システムに、少なくとも１つの記憶システムに記憶されたデータユニットにアクセスする要求を送り、その要求に応答して、少なくとも１つの記憶システムからデータユニットが少なくとも１つの記憶システムのどこに物理的に記憶されているかについての情報を受け取り、その情報を少なくとも１つの記憶装置に記憶する少なくとも１つのコントローラと、を有する。
【００１８】
他の例証的実施形態は、少なくとも１つのホストと、少なくとも１つの記憶システムとを有するコンピュータシステムにおけるデータ処理方法を対象とする。この方法は、（ａ）少なくとも１つの記憶システムで、データユニットへのアクセスに使用可能な識別子を有する要求をデータユニットにアクセスする少なくとも１つのホストから受け取る行為と、（ｂ）その要求に応答して、少なくとも１つのホストに、データユニットへのアクセスに使用可能な識別子、および、データユニットが少なくとも１つの記憶システムのどこに物理的に記憶されているかについての、識別子とは別の付加情報、を返す行為とを含む。他の例証的実施形態は、コンピュータシステムで実行される時に、上記方法を実行する命
令で符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【００１９】
さらなる例証的実施形態は、記憶システムと、少なくとも１つのホストとを含むコンピュータシステムで使用される記憶システムを対象とする。この記憶システムは、少なくとも１つのホストから受け取ったデータを記憶する少なくとも１つの記憶装置と、少なくとも１つの記憶システムで、データユニットへのアクセスに使用可能な識別子を有する要求をデータユニットにアクセスする少なくとも１つのホストから受け取り、その要求に応答して、少なくとも１つのホストにデータユニットへのアクセスに使用可能な識別子、および、データユニットが少なくとも１つの記憶システムのどこに物理的に記憶されているかについての、識別子とは別の付加情報、を返す少なくとも１つのコントローラとを有する。
【００２０】
他の例証的実施形態は、少なくとも１つのホストと、少なくとも１つの記憶システムとを有するコンピュータシステムにおけるデータ処理方法を対象とする。この方法は、（ａ）少なくとも１つの記憶システムに、データユニットへのアクセスに使用可能な識別子を有する要求を、データユニットにアクセスする少なくとも１つのホストから送る行為と、（ｂ）少なくとも１つの記憶システムから、データユニットへのアクセスに使用可能な識別子、および、データユニットが少なくとも１つの記憶システムのどこに物理的に記憶されているかについての、識別子とは別の付加情報、を受け取る行為とを含む。他の例証的実施形態は、コンピュータシステムで実行される時に、上記方法を実行する命令で符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【００２１】
さらなる例証的実施形態は、ホストコンピュータと、少なくとも１つの記憶システムとを含むコンピュータシステムで使用されるホストコンピュータを対象とする。このホストコンピュータは、少なくとも１つの記憶装置と、少なくとも１つの記憶システムに、データユニットへのアクセスに使用可能な識別子を有する要求を、データユニットにアクセスする少なくとも１つのホストから送り、その要求に応答して、少なくとも１つの記憶システムから、データユニットへのアクセスに使用可能な識別子、および、データユニットが少なくとも１つの記憶システムのどこに物理的に記憶されているかについての、識別子とは別の付加情報、を受け取り、この付加情報を少なくとも１つの記憶装置に記憶する少なくとも１つのコントローラとを有する。他の例証的実施形態は、少なくとも１つのホストと、データユニットのコンテンツに基づいて生成されたコンテンツアドレスを用いて、少なくとも１つの記憶システムに記憶されたデータユニットにアクセスする少なくとも１つのホストのデータを記憶する少なくとも１つの連想記憶装置とを有するコンピュータシステムにおけるデータ処理方法を対象とする。この方法は、（ａ）データユニットが記憶されている少なくとも１つの記憶システム内の記憶位置に、少なくとも１つのデータユニットのコンテンツアドレスをマッピングする少なくとも１つのインデックスを保持すること、（ｂ）位置インデックスのキャッシュを保持することを含む。他の例証的実施形態は、コンピュータシステムで実行される時に、上記方法を実行する命令で符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【００２２】
さらなる例証的実施形態は、連想記憶装置と、データユニットのコンテンツに基づいて生成されたコンテンツアドレスを用いて、連想記憶装置に記憶されたデータユニットにアクセスする少なくとも１つのホストとを含むコンピュータシステムで使用される連想記憶装置を対象とする。連想記憶装置は、少なくとも１つのホストから受け取ったデータを記憶する少なくとも１つ記憶装置と、データユニットが記憶されている連想記憶装置内の記憶位置に、少なくとも１つのデータユニットのコンテンツアドレスをマッピングする少なくとも１つのインデックスを保持するとともに、位置インデックスのキャッシュを保持する少なくとも１つのコントローラとを有する。
【００２３】
他の例証的実施形態は、少なくとも１つのホストと、データユニットのコンテンツに基づいて生成されたコンテンツアドレスを用いて、少なくとも１つの記憶システムに記憶されたデータユニットにアクセスする少なくとも１つのホストのデータを記憶する少なくとも１つの連想記憶装置とを有するコンピュータシステムにおけるデータ処理方法を対象とする。この方法は、（ａ）コンテンツアドレスによって特定されたデータユニットを求める少なくとも１つのホストコンピュータからのアクセス要求に応答して、少なくとも１つの記憶システムのデータユニットの物理的な記憶位置の少なくとも１つの側面を算出するために、コンテンツアドレスをパーズする行為を含む。他の例証的実施形態は、コンピュータシステムで実行される時に、上記方法を実行する命令で符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【００２４】
さらなる例証的実施形態は、連想記憶装置と、データユニットのコンテンツに基づいて生成されたコンテンツアドレスを用いて、連想記憶装置に記憶されたデータユニットにアクセスする少なくとも１つのホストとを含むコンピュータシステムで使用される連想記憶装置を対象とする。連想記憶装置は、少なくとも１つのホストから受け取ったデータを記憶する少なくとも１つの記憶装置と、コンテンツアドレスによって特定されたデータユニットを求める少なくとも１つのホストコンピュータからのアクセス要求に応答して、少なくとも１つの記憶システムのデータユニットの物理的な記憶位置の少なくとも１つの側面を算出するために、コンテンツアドレスをパーズする少なくとも１つのコントローラとを有する。
【００２５】
他の例証的実施形態は、少なくとも１つのホストと、データユニットのコンテンツに基づいて生成されたコンテンツアドレスを用いて、少なくとも１つの記憶システムに記憶されたデータユニットにアクセスする少なくとも１つのホストのデータを記憶する少なくとも１つの連想記憶装置とを有するコンピュータシステムにおけるデータ処理方法を対象とする。この方法は、（ａ）ホストから、データユニットのコンテンツに基づいたコンテンツアドレスを有するデータユニットを記憶システムに記憶する要求を受け取る行為と、（ｂ）コンテンツアドレスに基づいて、コンテンツアドレスがマッピングする記憶システムの第１の記憶位置を算出する行為と、（ｃ）第２の記憶位置を指し示す第１のデータユニットのポインタを第１の記憶位置に記憶する行為と、（ｄ）データユニットを記憶システムの第２の記憶位置に記憶する行為とを含む。他の例証的実施形態は、コンピュータシステムで実行される時に、上記方法を実行する命令で符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【００２６】
さらなる例証的実施形態は、データユニットのコンテンツに基づいて生成されたコンテンツアドレスを用いて、連想記憶装置に記憶されたデータユニットにアクセスする少なくとも１つのホストを含むコンピュータシステムで使用される連想記憶装置を対象とする。連想記憶装置は、少なくとも１つのホストから受け取ったデータを記憶する少なくとも１つの記憶装置と、ホストから、データユニットのコンテンツに基づいたコンテンツアドレスを有するデータユニットを記憶システムに記憶する要求を受け取り、コンテンツアドレスがマッピングする記憶システムの第１の記憶位置をコンテンツアドレスに基づいて算出し、第２の記憶位置を指し示す第１のデータユニットのポインタを第１の記憶位置に記憶し、データユニットを記憶システムの第２の記憶位置に記憶する少なくとも１つのコントローラとを有する。
【００２７】
他の例証的実施形態は、少なくとも１つのホストと、データユニットのコンテンツに少なくとも一部分基づいたコンテンツアドレスを使用してデータユニットにアクセスする少なくとも１つのホストのデータユニットを記憶している少なくとも１つの連想記憶装置とを有するコンピュータシステムにおけるデータ処理方法を対象とする。この方法は、（ａ）どのデータユニットが時間的に近接して記憶システムに書き込まれたかについての指標
を与える第１の情報を有するデータユニットのコンテンツアドレスを生成する行為を含む。他の例証的実施形態は、コンピュータシステムで実行される時に、上記方法を実行する命令で符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【００２８】
さらなる例証的実施形態は、データユニットのコンテンツに基づいて生成されたコンテンツアドレスを用いて、連想記憶装置のデータにアクセスするホストコンピュータと、連想記憶装置とを有するコンピュータシステムで使用されるホストコンピュータを対象とする。このホストコンピュータは、データユニットを生成する少なくとも１つのプロセッサと、どのデータユニットが時間的に近接して記憶システムに書き込まれたかについての指標を与える第１の情報を有するデータユニットのコンテンツアドレスを生成する少なくとも１つのコントローラとを有する。
【００２９】
他の例証的実施形態は、少なくとも１つのホストと、少なくとも１つのホストのデータユニットを記憶する少なくとも１つの連想記憶装置とを有するとともに、この少なくとも１つのホストが、データユニットのコンテンツに少なくとも一部分基づいたコンテンツアドレスを使用してデータユニットにアクセスし、この少なくとも１つの記憶システムが、データユニットが記憶されている少なくとも１つの記憶システム内の記憶位置にデータユニットのコンテンツアドレスをマッピングするインデックスを有するコンピュータシステムにおけるデータ処理方法を対象とする。この方法は、（ａ）少なくとも１つのホストから、データユニットの１つを記憶するという要求であって、データユニットに関連付けられたコンテンツアドレスでデータユニットの１つを特定する要求を受け取る行為と、（ｂ）記憶位置のインデックスへのエントリが、データユニットの１つと時間的に近接して少なくとも１つの記憶システムに書き込まれた他のデータユニットのインデックスへのエントリに近接するように、データユニットの１つを選択された記憶位置に記憶する行為とを含む。他の例証的実施形態は、コンピュータシステムで実行される時に、上記方法を実行する命令で符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【００３０】
さらなる例証的実施形態は、連想記憶装置と、データユニットのコンテンツに基づいて生成されたコンテンツアドレスを用いて、連想記憶装置に記憶されたデータユニットにアクセスする少なくとも１つのホストとを有するコンピュータシステムで使用される連想記憶装置を対象とする。連想記憶装置は、少なくとも１つのホストから受け取ったデータを記憶する少なくとも１つの記憶装置と、少なくとも１つの記憶システムに時間的に近接して書き込まれたデータユニットがインデックスへの近接したエントリを有するように、データユニットが記憶されている少なくとも１つの記憶システム内の記憶位置にデータユニットのコンテンツアドレスをマッピングするインデックスを保持した少なくとも１つのコントローラとを有する。
【発明を実施するための最良の形態】
【００３１】
本発明の側面は、記憶システムのコンテンツにアクセスする改善された技術に関する。
本発明の一実施形態によれば、記憶システムは、記憶システム内に記憶されているデータユニットの記憶位置に関する手がかりをホストに提供できる。データユニットへの次のアクセス要求で、ホストは、位置の手がかりを記憶システムに返し、記憶システムがデータユニットの位置を容易に特定できるようにし、その結果、データユニットの位置を特定する際の記憶システムの効率を向上できる。
【００３２】
本発明の別の実施形態では、連想記憶装置が、データユニットが記憶される記憶位置に少なくとも１つのデータユニットのコンテンツアドレスをマッピングするインデックスを備えている。記憶システムは、位置インデックスのキャッシュを保持して、インデックス内に含まれる情報へのアクセス性能の向上を図る。
【００３３】
本発明のさらなる実施形態では、連想記憶装置のデータユニットにアクセスするホストからの要求の処理を容易にする技術が用いられる。この技術は、データユニットが記憶される物理的な記憶位置の少なくとも１つの側面を算出するために、コンテンツアドレスをパーズすることを含んでいる。データユニットを記憶可能な物理的な記憶位置の少なくとも１つの側面の決定要因であるコンテンツアドレスの少なくとも１つの側面を使用することによって、以下に説明するように、アクセス要求に応答してデータユニットの位置の特定を効率的に行うことができる。
【００３４】
本発明の他の実施形態では、コンテンツアドレスが、どのデータユニットが時間的に近接して記憶システムに書き込まれたかについての指標を与える情報を含むように、データユニットのコンテンツアドレスを生成する技術が用いられる。以下の説明から理解できると思われるが、時間的に近接して書き込まれた複数のデータユニットのコンテンツアドレスの少なくとも一部に類似性を有するコンテンツアドレスを与えることによって、ホストからのアクセス要求に応答してデータユニットの位置を特定する記憶システムの効率を向上させることができる。
【００３５】
上記の説明から当然理解されるように、本発明のいくつかの態様は、特に連想記憶装置に向けられている。しかし、これは、より広範な応用例を有する本発明の他の態様に対して正確とはいえない。したがって、以下に説明する特定の実施例は、特に連想記憶装置に関するものであるが、以下に説明する実施例を他の形態の記憶システムで使用することができるので、本発明のすべての態様がこの点だけに限定されているものではないことを理解されたい。
【００３６】
記憶システム４０７に接続されたホストコンピュータ４０１を示している図４に、本発明の態様が使用可能な例証的コンピュータシステムの構成を示す。
ホストコンピュータ４０１は、データユニットを読み出し／書き込みするアプリケーションプログラム４０３、および記憶システム４０７とのインタフェースに適応されるアプリケーションプログラミングインターフェース（ＡＰＩ）４０５を実行する。ホスト４０１は、例えばリソース（例えばデータ記憶、電子メール、および他のサービス）を提供するサーバ、クライアント（例えばユーザによって操作される汎用コンピュータシステム）、ネットワーク構成要素（例えばスイッチ）、または他の形態のコンピュータであってもよい。ホスト４０１は、通信リンク４０４によって記憶システム４０７に接続されているので、ホスト４０１は記憶システム４０７をデータの記憶、検索に使用することができる。リンク４０４は、任意の形態のネットワークや直接接続を含むあらゆる形態の通信リンクであってもよい。アプリケーションプログラム４０３は、ホスト４０１のユーザまたは管理者が使用して、データを記憶システム４０７に、および／または記憶システムから取り出す任意のコンピュータアプリケーションプログラムであってもよい。アプリケーションプログラム４０３はＡＰＩ４０５とリンクされているので、アプリケーションプログラム４０３は、ＡＰＩ４０５を使用して記憶システム４０７と通信することができる。
【００３７】
ＡＰＩ４０５は、例えば、アプリケーションプログラム４０３のプログラマに提供されるコンピュータオブジェクトコードを含んでいてもよい。コンピュータオブジェクトコードは、記憶システムとの通信に使用可能なルーチンを含んでいる。アプリケーションプログラムは、ＡＰＩ４０５とリンクされると、これらのルーチンを呼び出して記憶システム４０７と通信することができる。ＡＰＩ４０５はアプリケーションの任意の数とリンク可能なので、記憶システム４０７が通信する（のに使用する）内部プロトコルからアプリケーションプログラム４０３のプログラマを保護している。多くの方法のいずれにおいても、ホストと記憶システム間のインタフェースの性質は実現可能であり、かつ本発明はいかなる特定の実施例の技術にも限定されていないので、ここに説明した本発明の態様は、ホスト４０１と記憶システム４０７間の通信を容易にすることに特に供するホストでＡＰＩ
を使用するシステムにおいて限定的に使用されるものではないことは理解されたい。１つの別の実施例として、アプリケーションプログラム４０３は、記憶システム４０７と直接通信するようにカスタマイズすることができる。
【００３８】
本発明の一実施形態において、記憶システム４０７は、共通して同時係属中の出願に付された、１９９９年１月２１日に出願の「連想情報のカプセル化、表現、および転送」と題する、出願番号第０９／２３６，３６６号（ａｐｐｌｉｃａｔｉｏｎｓ  ｓｅｒｉａｌｓ  ｎｏ．  ０９／２３６，３６６，  ｅｎｔｉｔｌｅｄ  ”Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｅｎｃａｐｓｕｌａｔｉｏｎ，  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎ，  ａｎｄ  Ｔｒａｎｓｆｅｒ”，  ｆｉｌｅｄ  Ｊａｎｕａｒｙ  ２１，  １９９９）、１９９９年１月２１日に出願の「ネットワーク上の連想データへのアクセス」と題する、出願番号第０９／２３５，１４６号（ａｐｐｌｉｃａｔｉｏｎｓ  ｓｅｒｉａｌｓ  ｎｏ．  ０９／２３５，１４６  ｅｎｔｉｔｌｅｄ  ”Ａｃｃｅｓｓ  ｔｏ  Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｄａｔａ  Ｏｖｅｒ  Ａ  Ｎｅｔｗｏｒｋ”，  ｆｉｌｅｄ  Ｊａｎｕａｒｙ  ２１，  １９９９）、１９９９年９月７日に出願の「連想情報を安全に記憶、転送、および取り出すシステムとその方法」と題する、出願番号第０９／３９１，３６０号（ａｐｐｌｉｃａｔｉｏｎｓ  ｓｅｒｉａｌｓ  ｎｏ．
０９／３９１，３６０，  ｅｎｔｉｔｌｅｄ  Ｓｙｓｔｅｍ  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｓｅｃｕｒｅ  Ｓｔｏｒａｇｅ，  Ｔｒａｎｓｆｅｒ  ａｎｄ  Ｒｅｔｒｉｅｖａｌ  ｏｆ  Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｉｎｆｏｒｍａｔｉｏｎ，  ｆｉｌｅｄ  Ｓｅｐｔｅｍｂｅｒ  ７，１９９９）、１９９９年９月７日に出願の出願番号がまだ付与されていない「記憶システムにおいてデータを保持する方法およびその装置」（ａｐｐｌｉｃａｔｉｏｎ  ｅｎｔｉｔｌｅｄ  ”Ｍｅｔｈｏｄ  Ａｎｄ  Ａｐｐａｒａｔｕｓ  Ｆｏｒ  Ｄａｔａ  Ｒｅｔｅｎｔｉｏｎ  Ｉｎ  Ａ  Ｓｔｏｒａｇｅ  Ｓｙｓｔｅｍ”，  ｆｉｌｅｄ  ｏｎ  ｅｖｅｎ  ｄａｔｅ  ｈｅｒｅｗｉｔｈ）、そしてそのそれぞれが参照によってここに組み込まれている出願において説明されている形態の連想記憶装置（ＣＡＳ）であってもよい。
これらのアプリケーションは連想記憶装置（ＣＡＳ）に関するものであり、「ＣＡＳアプリケーション」と総称されている。上記のごとく、連想（記憶）装置では、データは、データのコンテンツそれ自身に基づいて生成されたコンテンツアドレスを使用して記憶される。コンテンツアドレスは、記憶されるデータにハッシュ関数を適用することによって生成することができる。ハッシュ関数の出力をホストと記憶システム間の通信に使用されるコンテンツアドレスの少なくとも一部として使用してデータを参照することができる。コンテンツアドレスは、記憶システム内の１つまたは２つ以上の物理的な記憶位置にマッピングすることができる（例えば記憶システム４０７内に）。
【００３９】
コンテンツアドレスを生成するために使用できるハッシュ関数の１つの例は、メッセージダイジェスト（ＭＩＤ）である。コンテンツアドレスは、コンテンツのハッシュの結果に直接対応させることができ、または付加情報をハッシュの結果に追加してアドレスを生成することもできる。ここに説明した本発明の態様は、ハッシュ関数のいずれかの特定の形態を使用するようには限定されておらず、またいくつかの態様は連想（記憶）装置に使用することすら限定されていないので、任意の形態のハッシュ関数が使用されてもよいことは理解されたい。
【００４０】
本発明の一実施形態において、保証された一意な識別子（ＧＵＩＤ）を１つまたは２つ以上のハッシュの結果に追加して、データユニットのコンテンツアドレスの一意性を確保してもよい。ＧＵＩＤは、コンテンツアドレス、タイムスタンプ、および乱数を生成する、例えばホストコンピュータのＭＡＣアドレスに基づいて、または他の適切な方法で生成することができる。本発明の実施形態に使用可能なＧＵＩＤを生成する１つの実施例は、国際標準化機構（ＩＳＯ）仕様書ＩＳＯ／ＪＥＣ  １１５７８：１９９６（Ｉｎｔｅｒｎ
ａｔｉｏｎａｌ  Ｓｔａｎｄａｒｄｓ  Ｏｒｇａｎｉｚａｔｉｏｎ  （ＩＳＯ）  ｓｐｅｃｉｆｉｃａｔｉｏｎ  ＩＳＯ／ＪＥＣ  １１５７８：１９９６）に記載されている。
【００４１】
ホストが記憶されるべきデータを記憶システムに送った時、ホストと記憶システムの両方は、独立してデータのコンテンツアドレスを算出することができる。ホストは、記憶システムからデータを取り出すために今後使用するコンテンツアドレスを保持してもよい。別の選択肢として、記憶システムのみがコンテンツアドレスを算出し、後でデータへのアクセスの際に使用できるように算出されたコンテンツアドレスをホストに返してもよい。また別の選択肢として、記憶システムとホストの両方が、コンテンツアドレスを算出して、記憶システムがその生成されたコンテンツアドレスをホストに返すこともできる。ホストは、その独立して算出されたコンテンツアドレスを、記憶システムから受け取った１つと比較して、それらが一致していることを確認してもよい。
【００４２】
図４の例証的構成において、記憶システム４０７は、複数のアクセスノード４０９ａ、４０９ｂ、４０９ｃ、および４０９ｄと、複数のストレージノード４１１ａ、４１１ｂ、４１１ｃ、および４１１ｄとを含む分散型記憶システムである。アクセスノード４０９とストレージノード４０７は、ＴＣＰ／ＩＰネットワークプロトコールを使用している通信ネットワーク（図示されない）のような、任意の適切な方法で接続することができる。本発明の態様はこの点で限定されるものではないが、各アクセスノード４０９およびストレージノード４１１は、独立したハードウェアおよびソフトウェアリソース（すなわち１つまたは２つ以上のプロセッサ、メモリ、ディスクリソース、オペレーティングシステム、記憶システムソフトウェア）を有する、例えば個別のコンピュータであってもよい。
【００４３】
上記のごとく、ホストコンピュータ４０１は、アクセスノード４０９の１つにアクセス要求（例えばリード、ライト、または他の要求）を発行する。ライト要求の場合には、アクセスノード４０９は、ホストコンピュータからライト要求（およびライトされるデータ）を受け取り、ストレージノード４１１を選択してデータを記憶し、データを記憶用のストレージノードに送る。いくつかの実施形態では、アクセスノード４０９は、任意の適切な方法でストレージノード４１１を選択することができる。例えば、アクセスノード４０９は、負荷平衡スキームを使用してデータをストレージノード間で等しく分散することができ、またはアクセスノード４０９は異なった選択技術を使用することもできる。図２に関して上に説明したように、データユニットを記憶する場合、ストレージノードは、そのファイル名として、データユニットのコンテンツアドレスを有するファイルを生成し、そのファイルにデータユニットを記憶することもできる。
【００４４】
リード要求の場合には、アクセスノード４０９は、ホストコンピュータから要求を受け取り、要求データがどのストレージノード４１１に記憶されているかを算出し、適切なストレージノード４１１から要求データを取り出し、（取り出した）要求データをホストコンピュータに返すことができる。記憶システムの任意の適切な構成を使用することができるので、ここに説明した本発明の態様は、この構成または他の特定の構成に限定されるものではない。例えば、アクセスノードにストレージノードから要求データを取り出させて、ホスト４０１に（その要求）データを転送させるよりもむしろ、アクセスノードがデータをホスト４０１に直接返すようにストレージノードに単に示すような記憶システムを代わりに構成することもできるであろう。
【００４５】
ストレージノード４１１は、アクセスノード４０９からリード／ライト要求を受け取り、これに応答してデータを取り出し、記憶することができる。それゆえ、ストレージノード４１１は、データユニットが記憶される１つまたは２つ以上の記憶装置（例えばディスクドライブまたは他の形態の記憶装置）を含んでいてもよい。アクセスノード４０９は、アクセスノード４０９とストレージノード４１１が同一の（またはほぼ同一の）、または
異なったハードウェア構成を有するように１つまたは２つ以上の記憶装置を含むこともできることは理解されたい。
【００４６】
図４に４つのアクセスノードと４つのストレージノードを有する記憶システムを示す。ただし、記憶システムは、任意の適切な数のアクセスノードおよび任意の適切な数のストレージノード（アクセスノードの数と異なってもよい）を含むことができ、この点で本発明は任意の特定の方法で構成された記憶システムに使用するように限定されているものではないので、この構成は単に実例にすぎないことを理解されたい。
【００４７】
さらに、図４の実施例は、ホストコンピュータが記憶システムにアクセスするために通信するアクセスノードと、データユニットを記憶するストレージノードとを含んでいるが、本発明はこの点で限定されるものではないことを理解されたい。例えば、記憶システムは、双方がホストコンピュータと通信し、データユニットを記憶するノードを含むことができる。すなわち、１つまたは２つ以上のノードは、ストレージノードとアクセスノード両方の役目をすることもできる（少なくとも一部分）。
位置の手がかり
本発明の一実施形態において、記憶システムは、記憶システムへのアクセスの効率を向上させるために、ホストに位置の手がかりを与えることができる。位置の手がかりは、記憶システムからホストに提供され、特定のデータユニットが記憶システムのどこに記憶されているかに関する情報である。次に、位置の手がかりの中で提供された情報を、データユニットを求める今後のアクセス要求と共にホストから記憶システムに戻し、記憶システムはその情報を使用して、データユニットへの効率的なアクセスを可能にする。特定のデータユニットを求める位置の手がかりは、データユニットが記憶されているストレージノードに関する情報、（例えばデータユニットを記憶しているそのストレージノードの物理的な記憶装置、その物理的な記憶装置にそのデータユニットを含むファイルのファイルシステムの位置、データユニットが記憶されている物理的な（記憶）装置の位置、またはその任意の組み合わせ）を含んでいてもよい。さらに、データユニットの物理的な記憶位置の１つまたは２つ以上の側面を直接特定する情報とは全く異なり、位置の手がかりの中で提供される情報は、データユニットが他の方法で物理的にどこに記憶されているかに関するものであってもよい。例えば、記憶システムは、データユニットの物理的な記憶位置のインデックスを含むことができ、またホストに提供される位置の手がかりは、このインデックスに鍵を与えることもできるであろう。したがって、位置の手がかりの中で提供される情報は、データユニットが任意の適切な方法で物理的にどこに記憶されているかに関するものであってもよい。
【００４８】
本発明はこの点で限定されるものではないので、記憶システムは、種々方法の任意の１つによってホストに位置の手がかりを与えることができる。例えば、データユニットを書き込むホストコンピュータからのライト要求に応答して、記憶システムは、データユニットの位置の手がかり情報を返すことができる（例えばトークンとして、または任意の形態で）。位置の手がかりは、ライト要求に応答してホストに返される唯一の情報であってもよく、または、それは、ライト要求に応答してホストに返される他の情報と共にホストに返されてもよい。例えば、一実施形態において、記憶システムは、データユニットに対応するコンテンツアドレス（例えばＭＤ５ハッシュ値）を返すことによってライト要求に応答し、その結果、ホストは、記憶システムがコンテンツアドレスを正しく算出したことを確認することができる。一実施形態において、ライト要求に応答してホストにコンテンツアドレスを返す場合、図４の４０６に概念的に示すように、記憶システムは、位置の手がかりを送ることもできる。
【００４９】
記憶システムは、リード要求に応答して、ホストに位置の手がかり情報を提供することもできる。例えば、記憶システムが要求されたデータユニットをホストに返す場合、記憶
システムは、要求されたデータユニットの位置の手がかり情報を送ることもできる。
【００５０】
記憶システムは、問い合わせ要求または他の形態の要求に応答して、ホストに位置の手がかり情報を提供することもできる。問い合わせ要求は、ホストがデータユニットをそのデータユニットに関する情報に基づいて要求できる記憶システムへの要求である。このような情報は、例えばデータユニットが記憶システムに記憶される時間、ＣＤＦに記憶されているメタデータの一部、部分的なコンテンツアドレス、または他の適切な情報であってもよい。
【００５１】
例えば、記憶システムにコンテンツアドレスを与える代わりに（通常のリード要求でのように）、ホストは、記憶システムに時間範囲（例えば開始時刻と終了時間）を与えてもよい。これに応答して、記憶システムは、時間範囲で示された期間中、記憶システムに記憶されていたデータユニットに対応するコンテンツアドレスのリストをホストに返す。記憶システムは、問い合わせ要求に応答して特定された各（データ）ユニットの位置の手がかり情報をホストに送ってもよい。ホストは、問い合わせ要求に応答して記憶システムによって返された少なくともいくつかのコンテンツアドレスのリード要求を発行することが想定されるので、問い合わせ要求に応答して位置の手がかりを与えることは有用かもしれない。ホストが、これらのコンテンツアドレスに対応するデータユニットの位置について記憶システムに知らせることができる場合（すなわち位置の手がかりから）、記憶システムのデータユニットの位置を特定するのに費やされる記憶システムの計算上のリソース（および時間）を低減することができる。
【００５２】
上記のごとく、問い合わせ要求で記憶システムに提供できる情報は、時間範囲に限定されるものではない。情報は、ＣＤＦに記憶されているメタデータの一部、部分的なコンテンツアドレス、または他の適切な情報を付加的にまたは代替的に含んでいてもよい。例えば、問い合わせ要求が、ＣＤＦに記憶されているメタデータまたは部分的なコンテンツアドレスを含んでいる場合、記憶システムは、指定されたメタデータまたは部分的なコンテンツアドレスを含んだいかなるＣＤＦのコンテンツアドレスをも返すことができる。
【００５３】
本発明はこの点で限定されるものではないので、ホストは、種々方法のいずれでも記憶システムから受け取った位置の手がかり情報を使用することができる。上記のごとく、ホストで実行するアプリケーションプログラム４０３（図４）は、ＡＰＩ４０５によって記憶システムと通信することができる。ＡＰＩが記憶システムから位置の手がかりを受け取ると（例えばリード、ライト、問い合わせ要求、または他のアクセス要求に応答して）、ＡＰＩは、アプリケーションプログラムに位置の手がかりを与えることができる。次に、アプリケーションプログラムは、位置の手がかり情報を対応するコンテンツアドレスにそれを関連づける方法で記憶してもよい。したがって、次にアプリケーションプログラムがそのコンテンツアドレスに対応するデータユニットにアクセスを要求する時（すなわちＡＰＩを通して）、アプリケーションプログラムは、コンテンツアドレスと共に位置の手がかり情報を提供することができる。一方、アプリケーションプログラムに位置の手がかり情報を渡す代わりに、ＡＰＩは、位置の手がかり情報を自分自身で記憶してもよい。したがって、ＡＰＩは、所望のデータユニットのコンテンツアドレスを含む要求と共に、アプリケーションプログラムから記憶システムのデータユニットにアクセスする要求を受け取ることができる。ＡＰＩは、それがそのコンテンツアドレスに対応する位置の手がかりを記憶しているかどうかを判断することができる。記憶している場合には、ＡＰＩはアクセス要求と共に位置の手がかりを記憶システムに提供してもよい。
【００５４】
ホスト（例えばＡＰＩまたはアプリケーションプログラム）は、任意の適切な方法で位置の手がかり情報を記憶してもよい。一実施形態において、ホスト（例えばＡＰＩ）は、性能的理由により、記憶されている位置の手がかりおよびそれに対応するコンテンツアド
レスのキャッシュを保持している。キャッシュが一杯の場合、ＡＰＩまたはアプリケーションプログラムは、最低使用頻度の交換スキーム、最後に使用された交換スキーム、または他の適切なキャッシュ交換スキームを使用して、キャッシュの項目を交換することができる。
【００５５】
ホストコンピュータが位置情報の記録を保持しアクセスするので、位置の手がかりの使用により記憶システムのデータ位置を特定する計算上の負担のいくらかが、記憶システムからホストに移ることは理解されたい。記憶システムにアクセス要求を発行すると、ホストコンピュータはこれらの記録を検索し、可能ならば記憶システムに位置情報を提供する。これによって、記憶システムは、記憶システムの記録の少なくともいくらかの検索を回避し、記憶されているデータユニットの物理的な（記憶）位置を算出することができる。他の実施形態では、ホストは、それが記憶システムから受け取るどんな位置の手がかりについても全く無視することができる。すなわち、ホストは、データの位置を特定する計算上の負担を少しも負わないことを選択し、記憶システムに頼ってコンテンツの位置を特定してもよい。
【００５６】
他の実施形態では、位置の手がかりの使用は、機能をオン／オフできるようなオプション機能としてホストに提供される。
本発明は、いかなる特定の実施例の技術にも限定されていないので、位置の手がかり情報は、多数の方法のいずれかで記憶システムによって算出することができることは理解されたい。図４に示す構成を有する記憶システムを使用する本発明の一実施形態によれば、提供される位置情報のグラニュラリティ次第で、アクセスノード４０９、および恐らくストレージノード４１１も位置情報を生成することができる。この点でおよび上記のごとく、本発明はこの点で限定されるものではないので、位置情報は、多数のレベルのグラニュラリティのいずれでも提供できる。例えば、位置情報は、どのアクセスノードが物理的な記憶位置へのアクセスを制御するかに関するだけの手がかりを与えることができ、または、データユニットを記憶する特定のストレージノードに関する付加情報を提供することができる。同様に、この情報が、単にストレージノードを特定することができ、または代わりにより記述的になって、ファイルシステムの位置およびデータユニットが記憶されている随意の特定の記憶装置（例えばディスクドライブ）も特定することができるので、データユニットを記憶している特定のストレージノードに関する情報も、多数のレベルのグラニュラリティで与えることができる。データユニットへのアクセスの結果の時点で、記憶システムは物理的な記憶位置を算出する処理を終え、ホストへの手がかりの中で提供できるこの情報を有するので、アクセス要求に応答して、記憶システムが位置情報を生成することはかなり簡単な処理であることは理解されたい。例えば、本発明の一実施形態において、データユニットがアクセスされると、データが記憶されているストレージノードは、適切なアクセスノードにデータが記憶されているファイルシステムおよびディスクドライブを特定し、次に、アクセスノードは、この情報を上記の位置の手がかりの形式でホストに渡す。本発明のこの態様は、アクセスノードおよびストレージノード構造を用いない構成を含む多数の他の形態の記憶システムの構成と共に使用できるので、グラニュラリティのレベルおよび位置情報が生成される方法は、ここに説明している実施例に限定されるものでも、図４に示す構成の形態を有する記憶システムに限定されるものでもないことは理解されたい。
【００５７】
位置の手がかりが使用されない（すなわち、機能がオフに設定されている）場合、またはホストが特定のデータユニットの位置情報を持っていない場合、記憶システムは、マルチキャスト位置クエリ、ＢＬＩルックアップまたは他の適切な技術を使用してデータの位置を特定することができる。さらに、いくつかの状況では、位置の手がかりは、記憶システムのコンテンツの位置を正確に特定しないかもしれない。例えば、ホストが位置の手がかりを受け取った後、記憶システムが新しい位置にコンテンツを移した場合に、このよう
な状況が発生するかもしれない。位置の手がかりが記憶システムのコンテンツの正確な位置を特定しない場合、記憶システムは、ＭＬＱ、ＢＬＩルックアップ、または他の適切な技術のようなコンテンツの位置を特定する他の方法を使用することができる。
【００５８】
ＢＬＩキャッシング
本発明の一実施形態において、記憶システムは、周知のシステムに関連して上記のＢＬＩの方法で動作するブロブ位置インデックス（ＢＬＩ）と呼ばれるデータセット（例えばデータベース）を保持している。一実施形態において、ＢＬＩを管理する履行任務は、各々が責任を負うべき指定された範囲のアドレス（例えばコンテンツアドレス）と対応するデータユニットがどこに記憶されているかを特定するその範囲のアドレスのインデックスを有するストレージノード４１１（図４）間で分散される。ＢＬＩそれ自体も（管理履行任務に加えて）記憶システムの複数のノード間で分散されてもよい。ＢＬＩへのアクセスの効率を向上させるために、ＢＬＩの一部は、本発明の一実施形態によるキャッシュ（メモリ）に入れられる。ブロブ位置インデックスは、記憶システムに記憶されたデータユニットのために、データユニットに対応するコンテンツアドレスをデータユニットが記憶されているストレージノードにマッピングするデータベース（または他のデータセット）であってもよい。ＢＬＩは、１つのストレージノードにそれ全体が記憶されてもよいし（１つまたは２つ以上の他のストレージノードに随意に映されて）、または上記のごとく２つまたは３つ以上のストレージノード間で分散されてもよい。特定のアドレスへのアクセス要求に応答して、要求を受け取ったアクセスノード４０９は、そのアドレスを含んでいるＢＬＩの一部を管理するストレージノード４１１にその要求を導くと、そのＢＬＩが適切なストレージノードによって読み出され、記憶システムの要求されたデータのユニットの位置が算出される。
【００５９】
ＢＬＩの単一の部分の管理は、２つ以上のストレージノードで共有されてもよく、その場合、アクセスノード４０９は、このような要求をＢＬＩのその部分を管理している１つまたはすべてのストレージノードに導くことができるということは理解されたい。
【００６０】
本発明はこの点で限定されるものではないので、本発明のいくつかの実施形態において、ＢＬＩの記憶またはＢＬＩの管理は、アクセスノードとストレージノードの両方、またはアクセスノード単独で実行されることも理解されたい。ＢＬＩの一部をキャッシュに入れるために以下に説明する技術は、アクセスノードとストレージノードの両方に同じように適用できることをさらに理解されたい。
【００６１】
従来技術のシステムにおいて、ＢＬＩは、主記憶システムよりもアクセスが遅い補助記憶システム（例えば磁気ディスク）に記憶される。アクセス要求がＢＬＩにエントリのない新しいデータユニットのライト要求の場合、ＢＬＩは、新しく記憶されるデータのコンテンツアドレスとストレージノード位置とを含むように更新される。記憶システムは、書き込みが成功裡に完成したことをホストに示す前に、ＢＬＩが更新されるのを待つ。更新されるＢＬＩの一部が、まだストレージノードの主記憶システムにない場合、ＢＬＩを更新するストレージノードは、ディスクリードを実行してＢＬＩを主記憶システム（すなわちＲＡＭ）に読み込み、主記憶システムのＢＬＩを更新し、次に、ディスクライトを実行してディスクに最新のＢＬＩを書き込む。したがってアプリケーションプログラムの観点から、ライト要求が発行された時間から、記憶システムが書き込みの成功を確認して書き込まれたデータのコンテンツアドレスを返す時間までにある待ち時間があり、ＢＬＩが更新されるまで確認が返されない場合にはこの待ち時間は増加する。
【００６２】
本発明の一実施形態によれば、記憶システムは、主記憶システム（例えばＲＡＭ）にＢＬＩキャッシュを保持しアクセス性能の向上をもたらす。例えば、ライト要求に応答して、記憶システムは、主記憶システムのＢＬＩキャッシュに新しいエントリを書き込み、書
き込みが成功裡に終わったことを要求ホストに応答する。ＢＬＩキャッシュのコンテンツは、ディスクのＢＬＩに後でデステージすることができる。その結果、ＢＬＩの更新によって生じた待ち時間は短くなる。
【００６３】
ＢＬＩキャッシュは、記憶システム対するリードアクセスの効率も向上させる。リード要求が受け取られると、記憶システムは、ＢＬＩキャッシュを検索して、要求されたデータのユニットの位置がＢＬＩキャッシュに記憶されているかどうかを判断する。記憶されている場合には、ＢＬＩのディスクリードの必要性はなくなる。
【００６４】
本発明は、いかなる特定の実施例の技術にも限定されていないので、ＢＬＩキャッシュは、任意の適切な方法で配置、記憶することができる。例えば、ＢＬＩが単一のストレージノードに完全に記憶される場合、ＢＬＩキャッシュは、同一のストレージノードに完全に保持されても、または複数のストレージノード間で分散されてもよい。同様に、ＢＬＩが複数のストレージノード間で分散される場合には、１つのストレージノードがＢＬＩキャッシュを記憶するために使用されてもよく、または各ストレージノードが、そのストレージノードによって記憶されたＢＬＩの一部に対応するＢＬＩキャッシュ（図４の４１２ａ−ｄ）の一部を記憶することができるであろう。
【００６５】
ＢＬＩキャッシュは、記憶システムのどこであってもその位置を特定できおよび／または任意の方法で記憶システム間に分散できるので、上記のＢＬＩキャッシュの位置は、ＢＬＩの対応するエントリと同一のマシンにあることに必ずしも限定されていない分散型ＢＬＩキャッシュのエントリを持つ実施例としてだけ与えられていることは理解されたい。本発明はこの点で限定されるものではないので、ＢＬＩキャッシュは、任意の適切な方法でＢＬＩにデステージできることをさらに理解されたい。例えば、ＢＬＩキャッシュが一杯の場合は常に、ＢＬＩキャッシュのエントリは、任意の適切な交換アルゴリズムに応じてＢＬＩにデステージすることができる。別の選択肢として、ＢＬＩキャッシュエントリは、記憶システム内の軽いプロセッサ使用の期間中ＢＬＩにデステージすることもできる。また別の選択肢として、時間の指定期間が経過した後、ＢＬＩキャッシュエントリをＢＬＩにデステージすることもできる。
【００６６】
一実施形態において、アクセスノードは、ストレージノードにＢＬＩキャッシュエントリを記憶する代わりにまたはその記憶に加えて、ＢＬＩエントリをキャッシュに入れることもできる。アクセスノードがホストからのライト要求を処理する場合、アクセスノードは、データが書き込まれるストレージノードを選択し、それで、アクセスノードは、新しく書き込むデータのコンテンツアドレスと共にこの情報を有し、そのＢＬＩキャッシュにその情報を追加することができる。一実施形態において、ストレージノードは、新しく書き込まれたデータを記憶した後、データが記憶されているストレージノードのファイルシステムおよびディスクに関する情報をアクセスノードに返して、この情報をアクセスノードのキャッシュエントリに追加することもできる。ＢＬＩキャッシュエントリは、代わりに、データユニットが記憶されているストレージノードのみを特定することができるので、本発明がこの点で限定されるものではないことは理解されたい。
【００６７】
アクセスノードは、リード要求を受け取ると、そのＢＬＩキャッシュの要求されたコンテンツアドレスを検索することができる。キャッシュヒット（すなわち、コンテンツアドレスがキャッシュで見つかる）がある場合には、アクセスノードがそれ自身のＢＬＩキャッシュから要求されたデータユニットの記憶位置を算出するので、アクセスノードは記憶システムのＢＬＩに問い合わせる必要はない。したがって、要求されたデータユニットを返す応答時間をさらに短縮することができる。
【００６８】
アクセスノードのＢＬＩキャッシュは、ストレージノードのＢＬＩキャッシングに他の
レイヤがあっても、なくても使用できることは理解されたい。上記のごとく、ＢＬＩは、コンテンツアドレスを、それらのコンテンツアドレスに対応するデータユニットを記憶するストレージノードにマッピングすることも理解されたい。ただし、本発明はこの点で限定されるものではないので、ＢＬＩは、特定の物理ディスク装置および／またはデータユニットのファイルシステムの位置に関する情報も含んでいてもよい。
【００６９】
一実施形態において、ＢＬＩキャッシングは、機能をオン／オフできるようなオプション機能として記憶システムのユーザに提供される。
上記のごとく、新しいデータユニットが記憶システムに書き込まれると、ストレージノードにデータを書き込み、データユニットがどこに記憶されているかに関係する記憶システムのメタデータを更新することに加えてＢＬＩキャッシュを使用する実施形態では、ＢＬＩキャッシュも同様に更新することができる。さらに上記のごとく、記憶システムの多数の領域を更新することは、ライト要求が処理されたという確認が記憶システムからホストに送られる時間の点から、ある待ち時間を提供するかもしれない。本発明の一実施形態によれば、データユニットのＢＬＩキャッシュへのエントリを有しないことは、データユニットへの今後のアクセスの遂行にのみ影響を与えるが、データユニットが記憶システムによってアクセスされることは排除しないので、その確認がホストに提供された後、ＢＬＩキャッシュへの書き込みを行うことができる。本発明のさらなる実施形態では、任意の適切なエントリがＢＬＩに書き込まれる以前でさえ、書き込み性能をさらに改善するための確認も与えることができる。この点において、本発明の一実施形態によれば、アクセス要求が受け取られてデータが読み出されたが、対応するエントリがＢＬＩに提供されていない場合、記憶システムは、データユニットを求めるマルチキャスト位置クエリを発行して、データユニットがストレージノードのいずれかに記憶されているかどうかを確かめてもよいことは理解されたい。したがって、本発明のこの実施形態によれば、それらがＢＬＩに対応するエントリを含んでいなくても、記憶システムはデータユニットの位置を特定することができる。図４に示す構成を有する連想記憶装置の位置インデックスをキャッシュに入れることを実現する上記の説明は、単に例証的目的に提供されるだけであり、しかも、本発明はこの点で限定されるものではないことは理解されたい。連想記憶装置の位置インデックスのキャッシュの使用に関する本発明の態様は、図４に示すアクセスノード／ストレージノード構成とは別の構成を有する記憶システムで使用することができる。
さらに、位置インデックスをキャッシュに入れることと、ホストコンピュータに渡すことができる位置の手がかりを使用することに関する本発明の態様は相互排他的ではなく、しかも、これらの２つの機能は、ともに単独で使用することができることを理解されたい。
【００７０】
固有の位置
代替の実施形態は、コンテンツアドレスの少なくとも一部を使用して、記憶システムのデータユニットの記憶位置の少なくとも１つの側面の算出する技術を用いる（ここでは固有の位置と呼ぶ）。図５に固有の位置を使用した例証的記憶システム５０７を示す。記憶システム５０７は、複数のアクセスノード５０３ａ、５０３ｂ、５０３ｃ、複数のストレージノード５０５ａ、５０５ｂ、５０５ｃ、５０５ｄ、５０５ｅ、５０５ｆを含んでいる。ストレージノードは、ストレージノードの各グループがコンテンツアドレスの一範囲に割り当てられるようにグループに分割されてもよい。図５の実施例において、ストレージノード５０５ａおよび５０５ｂは、文字「Ａ」−「Ｉ」で始まるコンテンツアドレスを割り当てられ、ストレージノード５０５ｃおよび５０５ｄは、文字「Ｊ」−「Ｒ」で始まるコンテンツアドレスを割り当てられ、ストレージノード５０５ｅおよび５０Ｓｆは、文字「Ｓ」−「Ｚ」で始まるコンテンツアドレスを割り当てられている。図５では、ストレージノードの各グループは、２つのストレージノードを含んでいる。ただし、１つのストレージノードグループは、単に１つのストレージノードを含んでいても、または３つ以上のストレージノードを含んでいてもよいことは理解されたい。さらに、ストレージノードの
各グループは、等しい数のストレージノードを含んでいる必要はない。一実施形態において、ストレージノードの各グループは、コンテンツアドレスのその割り当てられた範囲に対応するデータユニットを記憶する。アクセスノード５０３は、コンテンツアドレスのどの範囲がストレージノードの各グループに割り当てられるかについての情報を保持し、そのため、アクセス要求に応答して、データユニットにアクセスする適切なストレージノードを選択することができる。
【００７１】
例えば、アクセスノード５０３ａが、ホスト５０１ａからコンテンツアドレスが文字「Ｊ」で始まるデータユニットを書き込む要求を受け取ると、そのアクセスノードは、ストレージノード５０５ｃまたは５０５ｄのいずれかを選択してデータを記憶する。一実施形態において、アクセスノード５０３ａは、これらの２つのストレージノードの１つを、コンテンツアドレスの他の部分に基づいて選択する。例えば、アクセスノード５０３ａは、コンテンツアドレスの第２番目の文字を調べて、選択されたグループ内の適切なストレージノードを選択する。例えば、ストレージノード５０５ｅは、コンテンツアドレスが「Ａ」−「Ｍ」の第２番目の文字を有するデータユニットを記憶し、ストレージノード５０５ｄは、コンテンツアドレスが「Ｎ」−「Ｚ」の第２番目の文字を有するデータユニットを記憶してもよい。本発明はこの点で限定されるものではないので、コンテンツアドレスの任意の１つまたは２つ以上の文字が、複数のストレージノードのグループ内の適切なストレージノードを選択するために使用されてもよいことは理解されたい。
【００７２】
一旦、アクセスノード５０３ａが、ストレージノードを選択してデータユニットを記憶すると、選択されたストレージノードは、データユニットを記憶する物理的な記憶装置（例えばディスク）を選択することができる。図６に、４つの物理的な記憶装置、６０３ａ、６０３ｂ、６０３ｃ、および６０３ｄを有するストレージノード６０１を概念的に示す。ストレージノード６０１は、これらの記憶装置の１つを選択し、データユニットをコンテンツアドレスの１つまたは２つ以上の文字に基づいて記憶することができる。例えば、ストレージノード６０１は、コンテンツアドレスの第３番目の文字に基づいて、記憶装置６０３の１つを選択することができる。コンテンツアドレスの第３番目の文字が「Ａ」−「Ｆ」の場合、記憶装置６０３ａがデータを記憶することができる。第３番目の文字が「Ｇ」−「Ｌ」の場合、記憶装置６０３ｂがデータを記憶することができる。第３番目の文字が「Ｍ」−「Ｒ」の場合、記憶装置６０３ｃがデータを記憶する。第３番目の文字が「Ｓ」−「Ｚ」の場合、記憶装置６０３ｄがデータを記憶する。
【００７３】
データユニットの物理的な記憶位置（例えばストレージノードおよび記憶装置）を、データユニットのコンテンツアドレスに基づいて選択することによって、アクセスノードは、データベースルックアップまたはマルチキャスト位置クエリを行わずに、後で物理的な記憶位置を算出することができる。すなわち、アクセスノードは、コンテンツアドレスを簡単に調べるだけで、データユニットの位置をコンテンツアドレスに基づいて算出することができる。
【００７４】
上記の例証的実施例は、固有の位置技術を用いて、そのコンテンツアドレスに基づいて、データユニットが記憶されているストレージノードだけでなく、そのノード内のファイルシステムおよび記憶装置も算出するが一方、他にではなくデータユニットの物理的な記憶位置のいくつかの態様のみを算出するのに固有の位置技術を使用することができるので、固有の位置の使用に関する本発明の態様は、この点で限定されるものではないことを理解されたい。例えば、この固有の位置技術は、データユニットが記憶されているストレージノードのみを選択するのに、その代替として使用できるので、ストレージノードを算出するルックアップまたはブロードキャストクエリを実行する必要性をそれによってなくすことができるが、しかしデータユニットが記憶されているファイルシステムおよび／または物理的な記憶装置の算出は、上記のインデクシング技術の使用によることを含む他の方
法で実行することができる。
【００７５】
出願人らは、そのコンテンツアドレスに基づいた固有の位置技術を用いて、データユニットをそのデータユニットを求めるために指定された特定の物理的な記憶位置に記憶しないことが望ましいかもしれないことをいくつかのデータユニットで理解したので、出願人らは、このようなデータユニットを扱う技術を発展させた。これは、多くの理由のいずれか、特に大きなデータユニットがある例で発生する場合がある。大きなデータユニットでは、固有の位置技術によって実行されたマッピングによって、データを指定された物理的な記憶位置に記憶する余地がないかもしれないし、または負荷平衡のためにそのデータをどこか他のところに記憶することが望ましいかもしれない。さらに、記憶システムに特に大きなデータユニットを書き込むいくつかのアプリケーションプログラムは、書込み操作がコンテンツアドレスの算出前にデータユニットに対して始まるように、コンテンツアドレスを全体のデータユニットに基づいて生成する前に書き込み操作の開始を望んでもよい。したがって、固有の位置技術が使用されると、データユニットが記憶システムに渡される時に、データユニットをどこに記憶したらよいかを算出するコンテンツアドレスはないかもしれない。本発明の一実施形態によれば、上記状況は、固有の位置技術およびポインタの使用によって対処できる。例えば、上記の固有の位置マッピング技術によって指定された以外の位置に、データユニット（例えば比較的大きいなデータユニット）を記憶することが望ましい場合、ポインタは、データユニットを記憶することがより望ましい他の物理的な記憶位置を指し示すポインタで、データユニットのコンテンツアドレスによって指定された記憶位置に記憶することができる。したがって、今後のアクセス要求がデータユニットを求めて受け取られる場合、固有の位置マッピング技術は、次に読み出されてデータを取り出すために使用できるデータユニットのポインタにマッピングする。
【００７６】
コンテンツアドレスがまだ生成されていないデータユニットのライト要求を処理する場合に、ポインタ技術を使用することもできる。この点で、データユニットが受け取られると、記憶位置は、任意の適切な記憶位置にデータユニットを配置することができ、次に、一旦、データユニットのコンテンツアドレスが算出、および／または提供されると、ポインタは、データユニットの選択された記憶位置を指し示すポインタで、新しく提供されたコンテンツアドレスの固有の位置マッピング技術によって算出された適切な位置に配置することができる。当然、一旦、コンテンツアドレスが提供されると、データは、固有の位置マッピング技術によって指定された記憶位置に、代わりに移動させることができることを理解されたい。さらに、ポインタ技術がデータを記憶するために使用される一実施形態において、記憶システムは、データユニットが記憶されている他の記憶位置を指し示すポインタを求めて記憶システムを周期的に検索するバックグラウンドプロセスを実行することができる。このようなポインタのいずれかが見つかると、その処理は、ポインタによって指し示された記憶位置から、固有の位置マッピングによって指定された記憶位置（すなわちポインタの位置）にデータユニットを移動させ、それによって、ポインタを対応するデータユニットと取り替えることができる。したがって、記憶システムがポインタの記憶位置およびデータユニットの記憶位置の両方にアクセスする必要がないので、データユニットにアクセスする（例えばホストコンピュータからのリード要求に応答して）記憶システムの効率を向上させることができる。
【００７７】
ポインタをそれらの対応するデータユニットで取り替えるバックグラウンドプロセスは、任意の記憶システムにおいて任意の適切な方法で実行することができることは理解されたい。例えば、その処理は、アイドル状態であるストレージノードにおいてのみ実行されてもよい。別の選択肢として、その処理は、所定の期間が経過した後あらゆるストレージノードで実行されてもよい。多くの他の選択肢が利用可能であるが、本発明はこの点で限定されるものではない。本発明の一実施形態によれば、固有の位置技術を使用してデータユニットを見つけることができない場合、マルチキャスト位置クエリを実行するような別
のルックアップ技術を使用することができる。
【００７８】
時間的局所参照
上記のごとく、一実施形態では、データユニットは、対応するストレージノードのファイルシステムのファイルに記憶される。このようなファイルは、そこに記憶されているデータユニットのコンテンツアドレスに、少なくとも一部分対応しているファイル名を有していて、そのファイルシステムは、ディレクトリと、特定のデータユニットがデータユニットのファイル名の少なくとも一部に少なくとも一部分対応して記憶されているサブディレクトリの名前を持つサブディレクトリとで構成することができる。上記のごとく、ファイルシステムは、ファイルシステムに記憶されているデータユニットのコンテンツアドレスの第１番目の文字に基づいて構成することができる。ただし、ファイルシステムは、最初の文字またはビット、中間部分、または最終部分を含むがそれに限定されることなくコンテンツアドレスの任意一部を使用して構成できるので、本発明はこの点で限定されるものではないことを理解されたい。コンテンツアドレスを生成するのに使用されるハッシュアルゴリズムは、かなりランダムな値（ＭＤ５ハッシュアルゴリズムの場合のように）を発生することができる。その結果、出願人らは、ほぼ同時に書き込まれたデータユニットがファイルシステム階層構造の異なった位置に記憶されることを理解した。すなわち、データユニットが時間的に近接して書き込まれたという事実にもかかわらず、これらのデータユニットはファイルシステムに広範に分散できる。したがって、ハッシュアルゴリズムのランダム性は、ファイルシステムの任意の局所参照もできなくする。
【００７９】
オペレーティングシステムは、通常物理的なディスク位置にファイルシステムの位置をマッピングするファイルシステムマップを保持している。ファイルシステムが大きく（すなわちディレクトリおよびサブディレクトリの大きい階層構造）、ファイルシステムに記憶されている多くのファイルがある場合、オペレーティングシステムによって保持されているファイルシステムマップも非常に大きい可能性がある。その結果、オペレーティングシステムは、ストレージノードの主記憶システム（例えばＲＡＭ）に、ファイルシステムマップの小さな部分を一時維持できるだけである。ファイルシステムマップの残りは、補助記憶システム（例えばディスク）に残されたままかもしれない。ファイルシステムマップの種々の部分が必要なので（すなわちファイルがアクセスされる場合）、それらはディスクにスワップされている他の部分と共に主記憶システムに引き渡されてもよい。ディスクではなくメモリのファイルシステム部にアクセスする場合には、アクセスの性能はより良好であることは理解されたい。
【００８０】
２つのデータユニットが時間的に近接してストレージノードに書き込まれたがファイルシステムマップの異なった部分に記憶される場合、オペレーティングシステムは、先ず、第１のデータユニットのファイルシステムの位置を有するファイルシステムマップの一部をディスクからロードして（すなわちそのデータユニットの物理的なディスク位置を算出するために）、次に、第２のデータユニットのファイルシステムの位置を有するファイルシステムマップの一部をロードするためにディスクに返却しなければならない。これらの反復するディスクアクセスは、記憶システムの書き込み応答時間を遅くする。さらに、時間的に近接して書き込まれた複数のデータユニットも時間的に近接して読み出されるので、データユニットを読み出す時に同様のアクセス遅延に遭遇するであろう。
【００８１】
出願人らは、ファイルシステム構造を使用する記憶システムにおいて、ほぼ同時に記憶される複数のデータユニットをほぼ同一のファイルシステムの位置に記憶し、順次アクセスされるデータユニットを求めてファイルシステムの異なった部分をロードしにディスクに行かなくてはならないオペレーティングシステムの可能性を最小限にすることが望ましいことを理解した。上記のごとく、本発明の一実施形態において、ファイルのファイルシステムの位置は、ファイルのファイル名に基づいて算出される。したがって、本発明の一
実施形態によれば、これは、ほぼ同時に書き込まれたファイルの時間的局所参照を提供し、これらのファイルは、隣接したファイルシステムの位置に記憶されるという結果になる傾向がある。
【００８２】
連想記憶装置を使用した本発明の実施形態において、ファイルのファイル名に追加される情報は、そのファイルに記憶されているデータのコンテンツアドレスに追加することもできることは理解されたい。例えば、情報は、ファイルのコンテンツのハッシュに追加され、そのハッシュおよび付加情報に基づいてコンテンツアドレスを生成することもできる。情報はハッシュの任意の適切な位置に追加されてもよい。例えば、情報は、ハッシュの最初、終わり、または他の任意の位置に追加することができる。ホストコンピュータは、コンテンツアドレスを使用して上記方法のファイルにアクセスすることができる。
【００８３】
本発明の一実施形態において、時間的局所参照を設定するために追加された情報は、記憶システムでコンテンツアドレスに追加することができる。すなわち、例えば、データユニットが記憶システムに記憶される場合、記憶システムは、ハッシュに情報を含む時間的局所参照情報を生成し、その結果生じたコンテンツアドレスを記憶要求を提出したホストコンピュータに返してもよい。代替の実施形態において、ホストコンピュータが時間的局所参照情報を生成し、ハッシュに情報を追加してコンテンツアドレスを生成してもよい。ホストコンピュータは、コンテンツアドレスを記憶システムに送り、または時間的局所参照情報を記憶システムに単に送り、記憶システムがハッシュに情報を追加することを許可してコンテンツアドレスを算出することもできる。ホストコンピュータで時間的局所参照情報を計算することによって、ホストコンピュータが、データユニットを複数の記憶システムに同時（またはほぼ時間）に、例えばバックアップまたは反復用に記憶する場合、データユニットのコンテンツアドレスは各記憶システムで同一になる。
【００８４】
他の実施形態では、時間的局所参照情報は、記憶システムおよびホストコンピュータによって生成され、その両方の情報セットは、ハッシュの任意の適切な位置でハッシュに追加され、データユニットのコンテンツアドレスを生成することができる。
【００８５】
ファイルシステムに記憶されたファイルに関する時間的局所参照を与えるものとして、上記実施例を説明した。しかし、このような技術は、他の論理データ記憶構成体にも適用できることを理解されたい。例えば、コンテンツアドレス（またはデータベースに記憶されている他の情報）に時間的局所参照情報を追加することによって、キーとしてコンテンツアドレス（または他の情報）を使用してアクセスされるとともに、他の論理的な構成体と共に使用することもできるデータベーステーブルのアクセス効率を向上させることができる。
【００８６】
ファイル名に追加された情報は、ほぼ同時に書き込まれたデータユニットに類似したどんな情報であってもよい。例えば、タイムスタンプがファイル名に追加されてもよく、ファイルシステムは、データユニットをどこに記憶するかを算出する時にそのタイムスタンプを調べることができる。一方、カウンター値が、新しいデータユニットが記憶システムに書き込まれるごとにインクリメントされるカウンター値をと共にファイル名に追加されてもよい。繰り返し述べるが、本発明がこの点で限定されるものではないので、任意の適切な情報が使用されてもよい。本発明のこの態様は、多数の異なった構成を備えた記憶システムと共に使用できるので、どのデータユニットが時間的に近接して記憶システムに書き込まれるかについての指標を与えるコンテンツアドレスに情報を追加することに関する本発明の態様は、説明した特定のアクセスノードおよびストレージノードの構成を備えた記憶システム、またはストレージノードのファイルシステムを上記のごとく使用することに限定されるものではないことは理解されたい。
【００８７】
図７がコンテンツアドレス７０１に追加されている位置情報７０３を示しているので、そこに本発明の時間的局所参照の態様を概念的に例示する。コンテンツアドレスの最後、またはコンテンツアドレスの範囲内に位置情報を与えることを含む、および位置情報を図７に示すような連続ブロックとして、またはコンテンツアドレス情報７０１の全体にわたって分散して与えることを含む任意の適切な方法で位置情報をコンテンツアドレスに追加することができるので、本発明のこの態様は、位置情報を図７に示すようなコンテンツアドレスの最初に与えることに限定されるものではないことは理解されたい。
【００８８】
本発明の上記の実施形態は、任意の多数の方法で実現することができる。例えば、実施形態はハードウェア、ソフトウェア、またはその組み合わせを使用して実現することができる。ソフトウェアで実現する場合、単一のコンピュータで提供されたか、複数のコンピュータ間で分散されたかにかかわらず、ソフトウェアコードは、任意の適切なプロセッサまたはプロセッサの集合で実行することができる。任意の構成装置または上記の機能を実行する構成装置の集合は、総称的に、上記の機能を制御する１つまたは２つ以上のコントローラとして見なすことができることは理解されたい。その１つまたは２つ以上のコントローラは、専用ハードウェア、または上記の機能を実行するマイクロコードまたはソフトウェアを使用してプログラムされた汎用ハードウェア（例えば１つまたは２つ以上のプロセッサ）ような、多数の方法で実現することができる。
【００８９】
この点で、本発明の実施形態の１つの実施は、プロセッサで実行される場合に、本発明の実施形態の上記機能を実行するコンピュータプログラム（すなわち複数の命令）で符号化された、少なくとも１つのコンピュータ可読媒体（例えばコンピュータメモリ、フロッピーディスク、コンパクトディスク、テープ、等）を有していることを理解されたい。その媒体に記憶されたプログラムが任意のコンピュータシステムリソースにロードされてここに説明した本発明の態様を実現できるように、コンピュータ可読媒体は持ち運び可能である。さらに、実行時に上記機能を実行するコンピュータプログラムという言及は、ホストコンピュータで動作するアプリケーションプログラムに限定されるものではないことを理解されたい。もっと正確に言えば、コンピュータプログラムという用語は、本発明の上記態様を実現するプロセッサをプログラムするのに使用できる任意の形態のコンピュータコード（例えばソフトウェアまたはマイクロコード）を意味する総称的な意味でここに使用している。
【００９０】
処理がコンピュータ可読媒体で実行される本発明のいくつかの実施形態によれば、コンピュータによって実行される処理は、処理の実行中、入力を手動で受け取る（例えばユーザから）ことができることは理解されたい。
【００９１】
上記種々の実施例において、コンテンツアドレスが英字「Ａ」−「Ｚ」を含むように説明した。本発明はこの点で限定されるものではないので、これらのコンテンツアドレスは、実施例としてのみ示しているものであり、コンテンツアドレスは、任意の英数字、一連のビット、または他の適切な文字を含むことができることは理解されたい。
【００９２】
ここに使用している語法および用語は説明を目的とするものであり、（本発明を）制限するものとして見なされるべきではない。ここで使用している「含む（ｉｎｃｌｕｄｉｎｇ）」、「有する（ｃｏｍｐｒｉｓｉｎｇ）」、または、「有する、備える（ｈａｖｉｎｇ）」「含む（ｃｏｎｔａｉｎｉｎｇ）」、「含む（ｉｎｖｏｌｖｉｎｇ）」、およびその変形は、その後にリストされた項目および追加の項目を包含することを意味している。本発明のいくつかの実施形態を詳細に説明したが、当業者にとっては、種々の修正および改善が容易に思い浮かぶであろう。このような修正および改善は、本発明の精神および範囲内にあるように意図されている。したがって、今までの説明は例示を目的にするにすぎず、本発明を制限することを意図しない。本発明は、添付の請求項およびその等価物によ
って定義されたものによってのみ制限される。
【図面の簡単な説明】
【００９３】
【図１】例証的な従来技術の分散型記憶システムのブロック図。
【図２】データユニットが従来技術の連想記憶装置に記憶されるファイルシステム階層構造の説明図。
【図３】従来技術の連想記憶装置において、複数のストレージノード間で共有されるブロブ位置インデックスを示すブロック図。
【図４】本発明の態様が実施可能な記憶システムおよびホスト構成を示すブロック図。
【図５】本発明の一実施形態による複数のストレージノードに割り当てられた固有の位置を示すブロック図。
【図６】本発明の一実施形態によるストレージノード内の複数の記憶装置に割り当てられた固有の位置を示すブロック図。
【図７】本発明の一実施形態によるデータユニットのコンテンツアドレスに追加される位置情報。
【図１】
2005235171.tif 000003
【図２】
2005235171.tif 000004
【図３】
2005235171.tif 000005
【図４】
2005235171.tif 000006
【図５】
2005235171.tif 000007
【図６】
2005235171.tif 000008
【図７】
2005235171.tif 000009
【手続補正書】
【提出日】平成17年2月18日(2005.2.18)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2005235171.tif 000010
【図２】
2005235171.tif 000011
【図３】
2005235171.tif 000012
【図４】
2005235171.tif 000013
【図５】
2005235171.tif 000014
【図６】
2005235171.tif 000015
【図７】
2005235171.tif 000016
【外国語明細書】
2005235171.tif 000017
2005235171.tif 000018
2005235171.tif 000019
2005235171.tif 000020
2005235171.tif 000021
2005235171.tif 000022
2005235171.tif 000023
2005235171.tif 000024
2005235171.tif 000025
2005235171.tif 000026
2005235171.tif 000027
2005235171.tif 000028
2005235171.tif 000029
2005235171.tif 000030
2005235171.tif 000031
2005235171.tif 000032
2005235171.tif 000033
2005235171.tif 000034
2005235171.tif 000035
2005235171.tif 000036
2005235171.tif 000037
2005235171.tif 000038
2005235171.tif 000039
2005235171.tif 000040
2005235171.tif 000041
2005235171.tif 000042
2005235171.tif 000043
2005235171.tif 000044
2005235171.tif 000045
2005235171.tif 000046
2005235171.tif 000047
2005235171.tif 000048
2005235171.tif 000049
2005235171.tif 000050
2005235171.tif 000051
2005235171.tif 000052
2005235171.tif 000053
2005235171.tif 000054
2005235171.tif 000055
2005235171.tif 000056
2005235171.tif 000057
2005235171.tif 000058
2005235171.tif 000059