(57)【要約】  複数のソリッドステートストレージデバイスを含むストレージシステムに記憶されたデータに関するユーザストレージ仮想化を効率的に実行するための、システム及び方法。データストレージサブシステムは、複数のマッピングテーブルをサポートする。マッピングテーブル内のレコードは、複数のレベルに配置される。各レベルは、キー値とポイント値との組を記憶する。上記レベルは時間によってソートされる。新たなレコードは、生成された最新の（最も新しい）レベルに挿入される。原位置での編集は実行されない。最も新しいもの以外の全てのレベルは、読出し専用であってよい。本システムは更に、マッピングテーブル内の無効である上記キーを識別するオーバレイテーブルを含んでよい。【選択図】図２
2014529126.tif 000002
【特許請求の範囲】
【請求項１】
データストレージ媒体；
前記データストレージ媒体に連結されたデータストレージコントローラ；及び
複数のエントリを含むマッピングテーブルであって、各前記マッピングテーブルエントリは、キーを含む順組を含む、マッピングテーブル
を備える、コンピュータシステムであって、
前記マッピングテーブルは、時系列順の複数のレベルとして編成され、各前記レベルは１つ又は複数の前記マッピングテーブルエントリを含む、コンピュータシステム。
【請求項２】
前記マッピングテーブルの少なくとも一部のキャッシュ化されたコピーを記憶するよう構成されたキャッシュを更に備える、請求項１に記載のコンピュータシステム。
【請求項３】
前記データストレージコントローラは更に、要求の受信に応答して：
前記要求に対応する少なくとも１つの所定のキーを用いて前記マッピングテーブルにアクセスし；
前記所定のキーに対応する１つ又は複数の前記エントリを識別し；
前記１つ又は複数の前記エントリのうちのどれが、前記時系列順のレベルのうち最も新しいレベルに対応するかを決定し；及び
前記時系列順のレベルのうち前記最も新しいレベルに対応するエントリを返して、前記要求を満たす
よう構成されている、請求項１に記載のコンピュータシステム。
【請求項４】
前記コントローラは、前記順組のキー値によって各前記レベルをソートするよう構成されている、請求項３に記載のコンピュータシステム。
【請求項５】
前記ストレージ媒体に記憶された前記マッピングテーブルの前記エントリは、ページにグループ化され、
クエリの結果を利用して複数の前記ページのうちの特定のページを取得する、請求項４に記載のコンピュータシステム。
【請求項６】
前記コントローラは、前記特定のページの受信に応答して、前記所定のキーを用いて、前記特定のページ内のマッピングを識別するよう構成され、
前記マッピングは、前記所定のキーに対応する前記ストレージ媒体に記憶されたデータアイテムの位置の指標を含む、請求項１に記載のコンピュータシステム。
【請求項７】
前記データストレージコントローラは更に、
前記マッピングテーブルに１つ又は複数の新たなエントリを挿入するための条件を検出すると、それに応答して、前記複数のレベルに加えられる新たなレベルを生成し；及び
前記１つ又は複数の新たなエントリを前記新たなレベルに挿入する
よう構成されている、請求項１に記載のコンピュータシステム。
【請求項８】
各前記マッピングテーブルエントリは更に、所定のキーに対応する前記ユーザデータが前記データストレージ媒体のどこに記憶されているかに関する指標を含む、請求項１に記載のコンピュータシステム。
【請求項９】
前記データストレージ媒体は、１つ又は複数のソリッドステートストレージデバイスからなる、請求項８に記載のコンピュータシステム。
【請求項１０】
前記時系列順の複数のレベルのうち、最も新しいレベルを除く全ては、読出し専用である、請求項１に記載のコンピュータシステム。
【請求項１１】
前記マッピングテーブルをオーバレイするオーバレイテーブルを更に含み、
前記オーバレイテーブル及び前記マッピングテーブルは異なるキーで索引付けされる、請求項１に記載のコンピュータシステム。
【請求項１２】
前記オーバレイテーブルは、前記マッピングテーブルの有効でない１つ又は複数の前記順組を識別する、請求項１１に記載のコンピュータシステム。
【請求項１３】
前記オーバレイテーブルは、値の範囲に対応する１つ又は複数のエントリを含む、請求項１１に記載のコンピュータシステム。
【請求項１４】
前記オーバレイテーブルの前記エントリを用いて、クエリに応答して前記マッピングテーブルから返された前記順組の１つ又は複数のフィールドを修正できる、請求項１１に記載のコンピュータシステム。
【請求項１５】
前記オーバレイテーブルの索引付けに使用される前記キーは、前記マッピングテーブルにアクセスするために使用される前記キーのフィールドから生成される、請求項１１に記載のコンピュータシステム。
【請求項１６】
前記オーバレイテーブルの索引付けに使用される前記キーは、前記マッピングテーブルへのアクセスによって得られた前記順組のフィールドから生成される、請求項１１に記載のコンピュータシステム。
【請求項１７】
前記オーバレイテーブルの少なくとも一部のキャッシュ化されたコピーを記憶するよう構成されたキャッシュを更に含む、請求項１１に記載のコンピュータシステム。
【請求項１８】
前記オーバレイテーブルは、時系列順の複数のレベルとして編成され、各前記レベルは１つ又は複数のオーバレイテーブルエントリを含む、請求項１１に記載のコンピュータシステム。
【請求項１９】
複数のエントリを含むマッピングテーブルを記憶するステップであって、前記マッピングテーブルエントリはキーを含む順組を含む、ステップ；及び
複数のエントリを含むマッピングテーブル索引を記憶するステップ
を備える、ストレージシステムで使用するための方法であって、
前記マッピングテーブルは、時系列順の複数のレベルとして編成され、各前記レベルは１つ又は複数の前記マッピングテーブルエントリを含む、マッピングテーブルを記憶する方法。
【請求項２０】
特定のページの受信に応答して、所定のキーを用いて前記特定のページ内のマッピングを識別するステップを更に含み、
前記マッピングは、前記所定のキーに対応する前記ストレージ媒体に記憶されたデータアイテムの位置の指標を含む、請求項１９に記載の方法。
【請求項２１】
前記マッピングテーブルの少なくとも一部のキャッシュ化されたコピーを記憶するステップを更に含む、請求項２０に記載の方法。
【請求項２２】
要求の受信に応答して：
前記要求に対応する少なくとも１つの所定のキーを用いて前記マッピングテーブルにアクセスするステップ；
前記所定のキーに対応する１つ又は複数の前記エントリを識別するステップ；
前記１つ又は複数の前記エントリのうちのどれが、前記時系列順のレベルのうち最も新しいレベルに対応するかを決定するステップ；及び
前記時系列順のレベルのうち前記最も新しいレベルに対応するエントリを返して、前記要求を満たすステップ
を更に含む、請求項２０に記載の方法。
【請求項２３】
前記順組のキー値によって各前記レベルをソートするステップを更に含む、請求項２２に記載の方法。
【請求項２４】
前記ストレージ媒体に記憶された前記マッピングテーブルの前記エントリは、ページにグループ化され、
クエリの結果を利用して複数の前記ページのうちの特定のページを取得する、請求項２３に記載の方法。
【請求項２５】
前記マッピングテーブルに１つ又は複数の新たなエントリを挿入するための条件を検出すると、それに応答して、前記複数のレベルに加えられる新たなレベルを生成するステップ；及び
前記１つ又は複数の新たなエントリを前記新たなレベルに挿入するステップ
を更に含む、請求項１９に記載の方法。
【請求項２６】
各前記マッピングテーブルエントリは更に、所定のキーに対応する前記ユーザデータが前記データストレージ媒体のどこに記憶されているかに関する指標を含む、請求項１９に記載の方法。
【請求項２７】
前記データストレージ媒体は、１つ又は複数のソリッドステートストレージデバイスからなる、請求項２６に記載の方法。
【請求項２８】
前記時系列順の複数のレベルのうち、最も新しいレベルを除く全ては、読出し専用である、請求項１９に記載の方法。
【請求項２９】
前記マッピングテーブルをオーバレイするオーバレイテーブルを更に含み、
前記オーバレイテーブル及び前記マッピングテーブルは異なるキーで索引付けされる、請求項１９に記載の方法。
【請求項３０】
前記オーバレイテーブルは、前記マッピングテーブルの有効でない１つ又は複数の前記順組を識別する、請求項２９に記載の方法。
【請求項３１】
前記オーバレイテーブルは、値の範囲に対応する１つ又は複数のエントリを含む、請求項２９に記載の方法。
【請求項３２】
前記オーバレイテーブルの前記エントリを用いて、クエリに応答して前記マッピングテーブルから返された前記順組の１つ又は複数のフィールドを修正するステップを更に含む、請求項２９に記載の方法。
【請求項３３】
前記オーバレイテーブルの索引付けに使用される前記キーは、前記マッピングテーブルにアクセスするために使用される前記キーのフィールドから生成される、請求項２９に記載の方法。
【請求項３４】
前記オーバレイテーブルの索引付けに使用される前記キーは、前記マッピングテーブルへのアクセスによって得られた前記順組のフィールドから生成される、請求項２９に記載の方法。
【請求項３５】
複数のエントリを含むマッピングテーブルであって、各前記マッピングテーブルエントリは、キーを含む順組を含む、マッピングテーブルを記憶し；
複数のエントリを含むマッピングテーブル索引を記憶するためにプロセッサが実行可能なプログラム命令を記憶した、非一時的コンピュータ可読ストレージ媒体であって、
前記マッピングテーブルは、時系列順の複数のレベルとして編成され、各前記レベルは１つ又は複数の前記マッピングテーブルエントリを含む、コンピュータ可読ストレージ媒体。
【請求項３６】
前記プログラム命令は、前記マッピングテーブルの少なくとも一部のキャッシュ化されたコピーをキャッシュに保存するために更に実行可能である、請求項３５に記載のコンピュータ可読ストレージ媒体。
【請求項３７】
前記プログラム命令は、前記順組のキー値によって前記キャッシュ化されたコピーをソートするために更に実行可能である、請求項３５に記載のコンピュータ可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータネットワークに関し、より詳細には、複数のソリッドステートストレージデバイスにわたって記憶されたデータに関するユーザストレージ仮想化を効率的に実行するコンピュータシステムに関する。
【背景技術】
【０００２】
コンピュータメモリストレージ及びデータ帯域が増大するにつれて、業務にあたって日々取り扱うデータの量及び複雑性も増大する。データセンタ等の大規模分散ストレージシステムは、典型的には多くの業務操作を実行する。サーバルームと呼ばれることもあるデータセンタは、１つ又は複数の業務に関連するデータの記憶、管理及び配布のための物理的又は仮想集中レポジトリである。分散ストレージシステムは、１つ又は複数のネットワークで相互接続されたクライアントコンピュータに連結できる。分散ストレージシステムのいずれの部分の性能が劣っている場合、会社運営に悪影響が生じ得る。従って分散ストレージシステムは、データ可用性及び高性能な機能性に関して高い基準を維持する。
【０００３】
分散ストレージシステムは物理ボリュームを備え、これはハードディスク、ソリッドステートデバイス、別のストレージ技術を用いたストレージデバイス、又はストレージデバイスのパーティションであってよい。論理ボリュームマネージャ又はディスクアレイマネージャのようなソフトウェア・アプリケーションは、マスストレージアレイ上にスペースを割り当てる手段を提供する。更に、このソフトウェアによって、システム管理者は、論理ボリュームを含むストレージグループのユニットを生成できる。ストレージの仮想化は、エンドユーザが物理ストレージを認識することなく論理ストレージにアクセスするための、物理ストレージからの論理ストレージの抽象化（分離）を提供する。
【０００４】
ストレージの仮想化を支援するために、ボリュームマネージャは、エンドユーザからのローカルアドレスを用いた、入力される入出力（Ｉ／Ｏ）要求を、ストレージデバイス内の物理位置と関連するアドレスを用いた新しい要求に変換することによって、Ｉ／Ｏリダイレクションを実行する。ソリッドステートストレージデバイスで使用できるアドレス変換レイヤー等の追加のアドレス変換機構を含むことができるストレージデバイスも存在するため、論理アドレスから上述の別のアドレスへの変換は、唯一の又は最後のアドレス変換を表すものではない。リダイレクションは、１つ又は複数のマッピングテーブルに記憶されたメタデータを利用する。更に、１つ又は複数のマッピングテーブルに記憶された情報を、ストレージの重複排除のため及び特定のスナップショットレベルにおける仮想セクタを物理位置にマッピングするために使用してよい。ボリュームマネージャは、仮想化されたストレージのためのマッピング情報を一貫して維持できる。しかしながら、支援されるアドレススペースは、マッピングテーブルを維持するために使用されるストレージ容量によって制限され得る。
【０００５】
選択されたストレージディスクに関連する技術及び機構は、ボリュームマネージャが使用する方法を決定する。例えば、ハードディスクの粒度レベル、ハードディスクのパーティション、又は外部ストレージデバイスの論理ユニット番号（ＬＵＮ）に関するマッピングを提供するボリュームマネージャは、大きなデータに関する重複データのリダイレクション、配置、除去等に限定される。別のタイプのストレージディスクの一例は、ソリッドステートディスク（ＳＳＤ）である。ＳＳＤはＨＤＤインタフェースを模倣してよいが、ＳＳＤは、ＨＤＤに見られる電気機械的デバイスではなく、ソリッドステートメモリを利用して、永続的なデータを記憶する。例えばＳＳＤは、フラッシュメモリの層を備えてよい。従って、１つ又は複数のマッピングテーブルによって支援される大きなアドレススペースは、記憶用ＳＳＤを備えながら、ＨＤＤ用に開発されたマッピングテーブル割り当てアルゴリズムを利用しているシステムでは達成できない。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
以上から、複数のソリッドステートストレージデバイスにわたって記憶されたデータに関するストレージ仮想化を効率的に実行するためのシステム及び方法が必要とされている。
【課題を解決するための手段】
【０００７】
複数のソリッドステートストレージデバイスにわたって記憶されたデータに関するユーザストレージ仮想化を効率的に実行するためのコンピュータシステム及び方法の様々な実施形態を開示する。
【０００８】
一実施形態では、ネットワークに連結されたデータストレージサブシステムは、ネットワーク上のクライアントコンピュータからの読出し及び書込み要求を受信する。データストレージサブシステムは、複数のストレージデバイスを含むデバイスグループ上に複数のデータストレージ位置を備える。データストレージサブシステムは更に、時間によってソートされる複数のレベルを含む少なくとも１つのマッピングテーブルを備える。一実施形態では、各レベルは１つ又は複数の順組を記憶し、各順組は、ルックアップキーとして使用できる１つ又は複数の値を含む。各順組は更に、キー値と関連するデータ値を含んでよい。一実施形態では、マッピングテーブルは仮想−物理アドレス変換テーブルである。別の実施形態では、マッピングテーブルは重複排除テーブルである。データストレージサブシステムは更に、１つ又は複数の新規の順組をマッピングテーブルに挿入するための条件の検知に応じて複数のレベルに加えられることになる新規の最高レベル（最も新しいレベル）を生成するよう構成された、データストレージコントローラを備える。各順組は、マッピングテーブル内の別個のレコード又はエントリに記憶してよい。レコードはキー値によってソートしてよい。
【０００９】
システムが１つ又は複数の「オーバレイ」テーブルを含む実施形態も考えられる。オーバレイテーブルは、マッピングテーブルによって返答されるクエリに対する応答を修正するために使用できる。修正された応答は、応答を無効と標識すること又はマッピングテーブルに対するクエリに応じて提供される順組内のフィールド値を修正することを含むことができる。オーバレイテーブルへのアクセスは、所定のキーが有効でないことを比較的迅速に決定できる。マッピングテーブルの、最も新しいレベル以外の全てのレベルが読出し専用である実施形態も考えられる。
【００１０】
これらの及び他の実施形態は、以下の説明及び添付の図面を検討することによって明らかになるであろう。
【図面の簡単な説明】
【００１１】
【図１】図１は、ネットワークアーキテクチャの一実施形態を示す、一般化されたブロック図である。
【図２】図２は、マッピングテーブルの一実施形態の、一般化されたブロック図である。
【図３Ａ】図３Ａは、マッピングテーブルにアクセスするために使用する一次索引の一実施形態の、一般化されたブロック図である。
【図３Ｂ】図３Ｂは、マッピングテーブルにアクセスするために使用する一次索引の別の実施形態の、一般化されたブロック図である。
【図４】図４は、一次索引の別の実施形態及びマッピングテーブルの、一般化されたブロック図である。
【図５Ａ】図５Ａは、読出しアクセスを実行するための方法の一実施形態を示す、一般化されたブロック図である。
【図５Ｂ】図５Ｂは、書込み操作を実行するための方法の一実施形態を示す、一般化されたブロック図である。
【図６】図６は、共有マッピングテーブルを有するマルチノードネットワークの一実施形態の、一般化されたブロック図である。
【図７】図７は、マッピングテーブルにアクセスするために使用する二次索引の一実施形態の、一般化されたブロック図である。
【図８】図８は、マッピングテーブルにアクセスする三次索引の一実施形態の、一般化されたブロック図である。
【図９】図９は、オーバレイテーブルを利用する方法の一実施形態を示す。
【図１０】図１０は、マッピングテーブル内のレベルに対する平板化操作の一実施形態の、一般化されたブロック図である。
【図１１】図１１は、マッピングテーブル内のレベルに対する平板化操作の別の実施形態の、一般化されたブロック図である。
【図１２】図１２は、マッピングテーブル内のレベルを平板化するための方法の一実施形態を示す、一般化されたフローチャートである。
【図１３】図１３は、マッピングテーブル内のバルクアレイタスクを効率的に処理するための方法の一実施形態を示す、一般化されたフローチャートである。
【図１４】ストレージデバイス内のデータレイアウトアーキテクチャのある実施形態を示す、一般化されたブロック図である。
【発明を実施するための形態】
【００１２】
本発明は、様々な修正及び代替形態を許容するものであるが、具体的な実施形態を例として図に示し、本明細書で詳細に説明する。しかしながら、図面及びそれに対する詳細な説明は、ここに開示する特定の形態に本発明を限定することを意図したものではなく、反対に本発明は、添付の請求項で定義されるような本発明の精神及び範囲内にある全ての修正形態、均等物及び代替形態を包含し得るものであることを理解するべきである。
【００１３】
以下の説明では、本発明の完全な理解を提供するために多数の具体的な詳細を挙げる。しかしながら、これらの具体的詳細を用いずに本発明を実施し得ることを当業者は認識するべきである。いくつかの例では、本発明を不明瞭にすることを避けるために、公知の回路、構造、信号、コンピュータプログラム命令及び技術を詳細に示すことはしなかった。
【００１４】
図１を参照すると、ネットワークアーキテクチャ１００の一実施形態の一般化されたブロック図が示されている。以下に更に説明するように、ネットワークアーキテクチャ１００の一実施形態は、ネットワーク１８０を通して互いに相互接続され、またデータストレージアレイ１２０ａ、１２０ｂに相互接続された、クライアントコンピュータシステム１１０ａ、１１０ｂを含む。ネットワーク１８０は、スイッチ１４０を通して第２のネットワーク１９０に連結してよい。クライアントコンピュータシステム１１０ｃは、ネットワーク１９０を介してクライアントコンピュータシステム１１０ａ、１１０ｂ及びデータストレージアレイ１２０ａ、１２０ｂに連結される。更に、ネットワーク１９０は、スイッチ１５０を通してインターネット１６０に連結するか又はそうでない場合は外部ネットワークに連結してよい。
【００１５】
代替実施形態では、クライアントコンピュータ及びサーバ、スイッチ、ネットワーク、データストレージアレイ並びにデータストレージデバイスの数及び種類は、図１に示したものに限定されないことに留意されたい。様々な時点において、１つ又は複数のクライアントはオフラインで動作してよい。更に、動作中、個々のクライアントコンピュータの接続タイプは、ユーザ接続、非接続、及びネットワークアーキテクチャ１００への再接続のように変化し得る。更に、本説明では一般にネットワーク接続ストレージについて議論するが、本明細書に記載のシステム及び方法を、直接接続ストレージシステムに適用してもよく、また本明細書に記載のシステム及び方法は、本明細書に記載の方法の１つ又は複数の態様を実行するよう構成されたホストオペレーティングシステムを含んでよい。多数のこのような代替実施形態が可能であり、考えられる。図１に示す各構成部品の更なる説明を簡単に行う。まず、データストレージアレイ１２０ａ、１２０ｂが示す特徴のうちのいくつかの概要を説明する。
【００１６】
ネットワークアーキテクチャ１００では、各データストレージアレイ１２０ａ、１２０ｂを用いて、クライアントコンピュータシステム１１０ａ〜１１０ｃ等の異なるサーバ及びコンピュータ間でデータを共有してよい。更に、データストレージアレイ１２０ａ、１２０ｂを、ディスクミラーリング、バックアップ及び復元、アーカイブ化及びアーカイブ化されたデータの回復、並びにあるストレージデバイスから別のストレージデバイスへのデータの移行のために使用してよい。代替実施形態では、高速ローカルエリアネットワーク（ＬＡＮ）を通して１つ又は複数のクライアントコンピュータシステム１１０ａ〜１１０ｃを互いにリンクさせ、クラスタを形成してよい。このようなクライアントは、データストレージアレイ１２０ａ、１２０ｂのうちの１つの中にあるクラスタ共有ボリューム等のストレージリソースを共有してよい。
【００１７】
各データストレージアレイ１２０ａ、１２０ｂは、データストレージのためのストレージサブシステム１７０を含む。ストレージサブシステム１７０は、複数のストレージデバイス１７６ａ〜１７６ｍを備えてよい。これらのストレージデバイス１７６ａ〜１７６ｍは、クライアントコンピュータシステム１１０ａ〜１１０ｃにデータストレージサービスを提供できる。各ストレージデバイス１７６ａ〜１７６ｍは、データストレージを実行するために、特定の技術及び機構を使用する。各ストレージデバイス１７６ａ〜１７６ｍ内で使用される技術及び機構の種類を少なくとも部分的に用いて、各ストレージデバイス１７６ａ〜１７６ｍへの書込み操作及び各ストレージデバイス１７６ａ〜１７６ｍからの読出し操作を制御及びスケジューリングするために使用されるアルゴリズムを決定してよい。例えば、アルゴリズムはこれらの操作に対応する特定の物理位置を定めることができる。更に、アルゴリズムは、これらの操作のための入出力（Ｉ／Ｏ）リダイレクション、及びストレージサブシステム１７０内の重複データの除去を実行でき、またアドレスのリダイレクション及び重複排除のために使用される１つ又は複数のマッピングテーブルを支援できる。
【００１８】
上述のアルゴリズムで使用される論理は、ベースオペレーティングシステム（ＯＳ）１３２、ボリュームマネージャ１３４、ストレージサブシステムコントローラ１７４内、各ストレージデバイス１７６ａ〜１７６ｍ内の制御論理内等のうちの１つ又は複数に含むことができる。更に、本明細書に記載の論理、アルゴリズム及び制御機構はハードウェア及び／又はソフトウェアを含んでよい。
【００１９】
各ストレージデバイス１７６ａ〜１７６ｍは、読出し及び書込み要求を受信するよう並びに複数のデータストレージ位置を備えるように構成してよく、各データストレージ位置は、アレイ内の行及び列としてアクセス可能である。一実施形態では、ストレージデバイス１７６ａ〜１７６ｍ内のデータストレージ位置は、論理冗長ストレージコンテナ、又はＲＡＩＤ（安価／独立デバイスの冗長アレイ（ｒｅｄｕｎｄａｎｔ  ａｒｒａｙｓ  ｏｆ  ｉｎｅｘｐｅｎｓｉｖｅ／ｉｎｄｅｐｅｎｄｅｎｔ  ｄｉｓｋｓ））内に配置してよい。
【００２０】
いくつかの実施形態では、各ストレージデバイス１７６ａ〜１７６ｍは、従来のハードディスクドライブ（ＨＤＤ）とは異なるデータストレージのための技術を利用してよい。例えば、ストレージデバイス１７６ａ〜１７６ｍのうちの１つ又は複数は、永続的なデータを記憶するためのソリッドステートメモリからなるストレージを含むか、又はこのようなストレージに更に連結されてよい。他の実施形態では、ストレージデバイス１７６ａ〜１７６ｍのうちの１つ又は複数は、回転トルク転送技術、磁気抵抗ランダムアクセスメモリ（ＭＲＡＭ）技術、瓦記録方式ディスク、メモリスタ、相変化メモリ若しくは他のストレージ技術等の、他の技術を使用したストレージを含むか、又はこのようなストレージに更に連結されてよい。
【００２１】
一実施形態では、使用されるソリッドステートメモリはソリッドステートドライブ（ＳＳＤ）技術からなる。ＨＤＤ技術とＳＳＤ技術との間の技術及び機構の違いは、データストレージデバイス１７６ａ〜１７６ｍの入出力（Ｉ／Ｏ）特性の違いにつながり得る。ソリッドステートディスク（ＳＳＤ）をソリッドステートドライブと呼んでもよい。可動部品又は機械的遅延がないため、ＳＳＤは、ＨＤＤよりも低い読出しアクセス時間及びレイテンシを有し得る。しかしながら、ＳＳＤの書込み性能は一般に読出し性能より低く、ＳＳＤ内の自由なプログラマブルブロックの可用性に大きく影響され得る。
【００２２】
ストレージアレイの効率は、ユーザストレージと、ストレージデバイス１７６ａ〜１７６ｍ内の物理位置との間にストレージ仮想化層を生成することによって改善できる。一実施形態では、ボリュームマネージャの仮想層は、ストレージデバイス内又はネットワーク内ではなく、オペレーティングシステム（ＯＳ）のデバイスドライバ積層に配置される。多くのストレージアレイは、粗粒度レベルにおいてストレージ仮想化を実行し、これによって仮想−物理マッピングテーブルをメモリに全体的に記憶できる。しかしながら、このようなストレージアレイは、データ圧縮、重複排除及び修正時コピー操作等の特徴を統合することはできない。多くのファイルシステムは、微粒度仮想−物理マッピングテーブルをサポートしているが、デバイスグループ１７３ａ〜１７３ｍのような大型ストレージアレイをサポートしていない。寧ろ、ボリュームマネージャ又はディスクアレイマネージャを用いて、デバイスグループ１７３ａ〜１７３ｍをサポートする。
【００２３】
一実施形態では、１つ又は複数のマッピングテーブルを、ＲＡＭ１７２、メモリ媒体１３０又はプロセッサ１２２内のキャッシュ等のメモリではなく、ストレージデバイス１７６ａ〜１７６ｍに記憶してよい。ストレージデバイス１７６ａ〜１７６ｍは、フラッシュメモリを利用したＳＳＤであってよい。ＳＳＤの低い読出しアクセス時間及びレイテンシによって、ストレージアクセス要求をクライアントコンピュータから提供する間に、少数の参照先読出し操作を行うことができる。参照先読出し操作を用いて、ストレージアクセス要求の提供中に、１つ又は複数の索引、１つ又は複数のマッピングテーブル及びユーザデータにアクセスできる。
【００２４】
一実施例では、参照先読出し操作によってＩ／Ｏリダイレクションを実行してよい。別の実施例では、参照先読出し操作によってインライン重複排除を実行してよい。更に別の実施例では、ユーザデータを保持するストレージ位置にアクセスするのではなく、マッピングテーブル内で、ラージコピー、移動又はゼロイング操作等のバルクアレイタスクを全て実行してよい。このような直接的なマップ操作により、ストレージデバイス１７６ａ〜１７６ｍ内でのＩ／Ｏトラフィック及びデータ移動を大幅に低減できる。ストレージアクセス要求を提供するための時間と、ＳＳＤからの参照先読出し操作を実行するための時間とを合わせた時間は、回転するＨＤＤからのストレージアクセス要求を提供するための時間よりも短くなり得る。
【００２５】
更に、マッピングテーブル内の情報を圧縮してよい。特定の圧縮アルゴリズムを選択することにより、複数のレコードのうちの１つのレコード内のキー等、個々の構成要素の識別を可能とすることができる。従って、複数の圧縮レコード内の所定のキーの検索を行ってよい。マッチングが発見された場合、マッチングするレコードだけを復元してよい。マッピングテーブルのレコード内の順組を圧縮することによって、微粒度レベルのマッピングを更に可能とすることができる。この微粒度レベルのマッピングにより、従来のバルクアレイタスクに代わる直接マッピング操作が可能となり得る。効率的なストレージ仮想化に関する更なる詳細について、以下に議論する。
【００２６】
前述の通り、図示したように、ネットワークアーキテクチャ１００は、ネットワーク１８０、１９０を通して互いに相互接続され、またデータストレージアレイ１２０ａ、１２０ｂに相互接続された、クライアントコンピュータシステム１１０ａ〜１１０ｃを含む。ネットワーク１８０、１９０は、無線接続、直接ローカルエリアネットワーク（ＬＡＮ）接続、インターネット、ルータ、ストレージエリアネットワーク、イーサネット（登録商標）等の広域ネットワーク（ＷＡＮ）接続を含む、様々な技術を含んでよい。ネットワーク１８０、１９０は、これもまた無線であってよい１つ又は複数のＬＡＮを備えてよい。ネットワーク１８０、１９０は更に、リモートダイレクトメモリアクセス（ＲＤＭＡ）ハードウェア及び／若しくはソフトウェア、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）ハードウェア及び／若しくはソフトウェア、ルータ、リピータ、スイッチ、グリッド並びに／又はその他を含んでよい。ネットワーク１８０、１９０では、ファイバチャネル、ファイバチャネルオーバイーサネット（ＦＣｏＲ）、ｉＳＣＳＩ等のプロトコルを使用してよい。スイッチ１４０は、ネットワーク１８０、１９０の両方に関連するプロトコルを利用してよい。ネットワーク１９０は、伝送制御プロトコル（ＴＣＰ）及びインターネットプロトコル（ＩＰ）、即ちＴＣＰ／ＩＰのような、インターネット１６０のために使用される一連の通信方式プロトコルとインタフェース接続してよい。スイッチ１５０はＴＣＰ／ＩＰスイッチであってよい。
【００２７】
クライアントコンピュータシステム１１０ａ〜１１０ｃは、デスクトップパーソナルコンピュータ（ＰＣ）、サーバ、サーバファーム、ワークステーション、ラップトップコンピュータ、ハンドヘルドコンピュータ、サーバ、パーソナルデジタルアシスタント（ＰＤＡ）スマートフォン等の、任意の数の据置型又は携帯用コンピュータを表す。一般的に、クライアントコンピュータ１１０ａ〜１１０ｃは、１つ又は複数のプロセッサコアを備える１つ又は複数のプロセッサを含む。各プロセッサコアは、所定の汎用命令セットに応じて命令を実行するための回路構成を含む。例えば、ｘ８６命令セットアーキテクチャを選択してよい。代替として、Ａｌｐｈａ（登録商標）、ＰｏｗｅｒＰＣ（登録商標）、ＳＰＡＲＣ（登録商標）又は他のいずれの汎用命令セットアーキテクチャを選択してよい。プロセッサコアは、データ及びコンピュータプログラム命令のためのキャッシュメモリサブシステムにアクセスしてよい。キャッシュサブシステムは、ランダムアクセスメモリ（ＲＡＭ）及びストレージデバイスを備えるメモリ階層に連結してよい。
【００２８】
クライアントコンピュータシステム内の各プロセッサコア及びメモリ階層は、ネットワークインタフェースに接続してよい。ハードウェア構成要素に加えて、各クライアントコンピュータシステム１１０ａ〜１１０ｃは、メモリ階層内に記憶されたベースオペレーティングシステム（ＯＳ）を含んでよい。ベースＯＳは、例えばＭＳ−ＤＯＳ（登録商標）、ＭＳ−ＷＩＮＤＯＷＳ（登録商標）、ＯＳ／２（登録商標）、ＵＮＩＸ（登録商標）、Ｌｉｎｕｘ（登録商標）、Ｓｏｌａｒｉｓ（登録商標）、ＡＩＸ（登録商標）、ＤＡＲＴ又はその他等の様々なオペレーティングシステムのうちのいずれかを表してよい。従ってベースＯＳは、様々なサービスをエンドユーザに提供するために及び様々なプログラムの実行をサポートするために動作可能なソフトウェアフレームワークを提供するために、動作可能であってよい。更に、各クライアントコンピュータシステム１１０ａ〜１１０ｃは、仮想マシン（ＶＭ）をサポートするために使用されるハイパーバイザを含んでよい。当業者には公知であるように、ＯＳ等のソフトウェアをシステムのハードウェアから完全に又は部分的に切り離すために、デスクトップコンピュータ及びサーバにおいて仮想化を用いてよい。仮想化は、それぞれ固有のリソース及び各データストレージアレイ１２０ａ、１２０ｂ内のストレージデバイス１７６ａ〜１７６ｍに基づく論理ストレージエンティティ（例えばＬＵＮ）へのアクセスを有する複数のＯＳが１つのマシン上で実行されているかのような錯覚をエンドユーザに提供できる。
【００２９】
各データストレージアレイ１２０ａ、１２０ｂを、クライアントコンピュータシステム１１０ａ〜１１０ｃ等の異なるサーバ間でデータを共有するために使用してよい。各データストレージアレイ１２０ａ、１２０ｂは、データストレージのためのストレージサブシステム１７０を含む。ストレージサブシステム１７０は、複数のストレージデバイス１７６ａ〜１７６ｍを備える。これらのストレージデバイス１７６ａ〜１７６ｍはそれぞれ、ＳＳＤであってよい。コントローラ１７４は、受信した読出し／書込み要求を扱うための論理を備えてよい。ランダムアクセスメモリ（ＲＡＭ）１７２は、受信した書込み要求等の操作をまとめるために使用してよい。様々な実施形態において、書込み操作（又は他の操作）をまとめる際、不揮発性ストレージ（例えばＮＶＲＡＭ）を使用してよい。
【００３０】
ベースＯＳ１３２、ボリュームマネージャ１３４（又はディスクアレイマネージャ１３４）、いずれのＯＳドライバ（図示せず）及びメモリ媒体１３０に記憶された他のソフトウェアは、ファイルへのアクセスを提供する機能及びこれらの機能の管理を提供できる。ベースＯＳ１３２は、ＮｅｔＡｐｐ  Ｄａｔａ  ＯＮＴＡＰ（登録商標）等のストレージオペレーティングシステムであってよい。ベースＯＳ１３２及びＯＳドライバは、メモリ媒体１３０に記憶されプロセッサ１２２によって実行可能なプログラム命令を備えてよく、これによって、受信した要求に対応する、ストレージサブシステム１７０内の１つ又は複数のメモリアクセス動作を実行する。図１に示すシステムは一般に、１つ又は複数のファイルサーバ及び／又はブロックサーバを含んでよい。
【００３１】
各データストレージアレイ１２０ａ、１２０ｂは、ネットワーク１８０に接続するためのネットワークインタフェース１２４を用いてよい。クライアントコンピュータシステム１１０ａ〜１１０ｃと同様に、一実施形態では、ネットワークインタフェース１２４の機能は、ネットワークアダプタカード上に含まれてよい。ネットワークインタフェース１２４の機能は、ハードウェア及びソフトウェアの両方を用いて実装してよい。ネットワークインタフェース１２４のネットワークカードの実装には、ランダムアクセスメモリ（ＲＡＭ）及び読出し専用メモリ（ＲＯＭ）の両方を含んでよい。１つ又は複数の特定用途向け集積回路（ＡＳＩＣ）を使用して、ネットワークインタフェース１２４の機能を提供してよい。
【００３２】
以上に加えて、データストレージアレイ１２０ａ、１２０ｂ内の各ストレージコントローラ１７４は、スナップショット、複製及び高可用性等のストレージアレイ機能をサポートしてよい。更に、各ストレージコントローラ１７４は、それぞれ複数のスナップショットを含む複数のボリュームを備える仮想マシン環境をサポートしてよい。一実施例では、ストレージコントローラ１７４は、数十万ボリュームをサポートしてよく、各ボリュームは数千のスナップショットを含む。一実施形態では、ボリュームは、ストレージデバイス１７６ａ〜１７６ｍ内の、４キロバイト（ＫＢ）等の固定サイズセクタにおいてマッピングしてよい。別の実施形態では、ボリュームは書込み要求に関するもの等の可変サイズセクタにおいてマッピングしてよい。ボリュームＩＤ、スナップショットＩＤ及びセクタ番号を用いて、所定のボリュームを識別してよい。
【００３３】
アドレス変換テーブルは複数のエントリを備えてよく、各エントリは、対応するデータ構成要素のための仮想−物理マッピングを保持する。このマッピングテーブルを用いて、各クライアントコンピュータシステムからの論理読出し／書込み要求をマッピングしてよい。受信した読出し／書込み要求に対応するルックアップ動作中に、「物理」ポインタ値をマッピングテーブルから読出してよい。次に、この物理ポインタ値を用いて、ストレージデバイス１７６ａ〜１７６ｍ内の物理位置を定めてよい。物理ポインタ値を用いて、ストレージデバイス１７６ａ〜１７６ｍの所定のストレージデバイス内の別のマッピングテーブルにアクセスしてよいことに留意されたい。その結果、物理ポインタ値と標的ストレージ位置との間に１つ又は複数のレベルの間接指定が存在し得る。
【００３４】
別の実施形態では、マッピングテーブルは、データの重複排除に使用される情報（重複排除テーブル関連情報）を備えてよい。重複排除テーブルに記憶された情報は、所定のデータ構成要素に関して算出された１つ又は複数のハッシュ値と、この所定のデータ構成要素を保持するストレージデバイス１７６ａ〜１７６ｍのうちの１つの中の物理位置に対する物理ポインタとの間のマッピングを含んでよい。更に、所定のデータ構成要素の長さ及び対応するエントリに関するステータス情報を、重複排除テーブルに記憶してよい。
【００３５】
次に図２を参照すると、マッピングテーブルの一実施形態の一般化されたブロック図が示されている。上述のように、Ｉ／Ｏリダイレクション又は変換、ユーザデータの重複コピーの重複排除、ボリュームスナップショットマッピング等のために、１つ又は複数のマッピングテーブルを使用してよい。マッピングテーブルはストレージデバイス１７６ａ〜１７６ｍに記憶してよい。図２に示す図は、マッピングテーブルの編成及びストレージの一実施形態の論理表現を表す。図示した各レベルは、異なる期間に対応するマッピングテーブルエントリを含んでよい。例えばレベル「１」は、レベル「２」に記憶された情報より古い情報を含んでよい。同様にレベル「２」は、レベル「３」に記憶された情報より古い情報を含んでよい。図２に示すレコード、ページ及びレベルに記憶された情報は、ストレージデバイス１７６ａ〜１７６ｍ内に、ランダムアクセス方式で記憶してよい。更に、所定のマッピングテーブルエントリのうちの一部又は全てを、ＲＡＭ１７２、コントローラ１７４内のバッファ、メモリ媒体１３０、及びプロセッサ１２２内の又はプロセッサ１２２に連結された１つ又は複数のキャッシュに記憶してよい。様々な実施形態において、各レベルに、（後に図４で示すように）そのレベルの一部であるマッピングのための対応する索引が含まれていてよい。このような索引は、マッピングテーブルエントリ及びこれらがレベル内のどこに記憶されているかの識別（例えばページの識別）を含んでよい。他の実施形態では、マッピングテーブルエントリに関連する索引は、別個のエンティティ又は複数のエンティティであってよく、これらは論理的にレベル自体の一部ではない。
【００３６】
一般に、各マッピングテーブルは行及び列のセットを備える。単一のレコードを、マッピングテーブル内に行として記憶してよい。レコードはエントリと呼んでもよい。一実施形態では、レコードはキーを含む少なくとも１つの順組を記憶する。順組はまた、ストレージサブシステム１７０に記憶されるデータ構成要素を識別するか又はその位置を定めるために使用されるポインタ等のデータを含むデータフィールドを含んでよい（又は含まなくてもよい）。様々な実施形態において、ストレージサブシステムは、内部マッピング機構を有するストレージデバイス（例えばＳＳＤ）を含んで良いことに留意されたい。このような実施形態では、順組内のポインタは、それ自体が実際の物理アドレスではなくてもよい。寧ろポインタは、ストレージデバイスがデバイス内の物理位置にマッピングする論理アドレスであってよい。時間が経過すると、論理アドレスと物理位置との間のこの内部マッピングは変化し得る。他の実施形態では、マッピングテーブルのレコードは、追加の関連するデータフィールドを有さないキーフィールドのみを含んでよい。所定のレコードに対応するデータ構成要素と関連する属性を、テーブルの列又はフィールドに記憶してよい。有効性インジケータ、データの経過年数、データサイズ等のステータス情報を、図２に示すフィールド０〜フィールドＮ等のフィールドに記憶してよい。様々な実施形態において、各列は、所定のタイプに対応する情報を記憶する。いくつかの実施形態では、場合によっては圧縮表現が長さゼロビットであるフィールドとなり得る選択されたフィールドのために、圧縮技術を利用してよい。
【００３７】
キーは、あるデータの行を別の行から区別できる、マッピングテーブルのエンティティである。各行は、エントリ又はレコードと呼んでもよい。キーは単一の列であってよく、又はレコードを識別するために使用される列の群からなってよい。一実施例では、アドレス変換マッピングテーブルは、ボリューム識別子（ＩＤ）、論理又は仮想アドレス、スナップショットＩＤ、セクタ番号等を備えるキーを利用してよい。所定の受信した読出し／書込みストレージアクセス要求は、特定のボリューム、セクタ及び長さを識別してよい。セクタは、ボリュームに記憶されたデータの論理ブロックであってよい。セクタは、様々なボリューム上で様々なサイズを有してよい。アドレス変換マッピングテーブルは、セクタサイズのユニット内にボリュームをマッピングしてよい。
【００３８】
ボリューム識別子（ＩＤ）を用いて、ボリュームＩＤ及び対応する現在のスナップショットＩＤを伝達するボリュームテーブルにアクセスしてよい。受信したセクタ番号にと共に、この情報を用いて、アドレス変換マッピングテーブルにアクセスしてよい。従ってこのような実施形態では、アドレス変換マッピングテーブルにアクセスするためのキー値は、ボリュームＩＤ、スナップショットＩＤ及び受信したセクタ番号の組み合わせである。一実施形態では、アドレス変換マッピングテーブル内のレコードはボリュームＩＤによってソートされ、続いてセクタ番号、そしてスナップショットＩＤによってソートされる。この順列は、異なるスナップショットの様々なバージョンのデータ構成要素を共にグループ化できる。従って、ストレージアクセス読出し要求のためのルックアップ中に、対応するデータ構成要素を、ストレージデバイス１７６ａ〜１７６ｍへのより少ない読出し操作で見つけ出すことができる。
【００３９】
アドレス変換マッピングテーブルは、受信したデータストレージアクセス要求に対応するデータ構成要素を記憶するデータストレージサブシステム１７０内の位置を示す、物理ポインタ値を伝達してよい。キー値を、マッピングテーブルに記憶された１つ又は複数のキー値を比較してよい。図示した実施例では、説明を容易にするために、「０」、「２」、「１２」等のより単純なキー値を示す。物理ポインタ値を、対応するレコードの１つ又は複数のフィールドに記憶してよい。
【００４０】
物理ポインタ値は、セグメント識別子（ＩＤ）、及びストレージの位置を識別する物理アドレスを含んでよい。セグメントは、各ストレージデバイス１７６ａ〜１７６ｍの割り当ての基本単位であってよい。セグメントは、独立デバイスの冗長アレイ（ｒｅｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｄｅｐｅｎｄｅｎｔ  ｄｅｖｉｃｅ：ＲＡＩＤ）レベル及びデータタイプを有する。割り当て中、セグメントは対応するストレージから選択されたストレージデバイス１７６ａ〜１７６ｍのうちの１つ又は複数を有してよい。一実施形態では、セグメントは、ストレージデバイス１７６ａ〜１７６ｍから選択された１つ又は複数のストレージデバイスそれぞれ上に等しい量のストレージスペースを割り当ててよい。データストレージアクセス要求は、複数のセクタに対応してよく、これは多重並列ルックアップにつながり得る。書込み要求はＲＡＭ１７２等のＮＶＲＡＭバッファに配置してよく、書込み完了確認をクライアントコンピュータ１１０ａ〜１１０ｃの対応する１つのクライアントコンピュータに送信してよい。その後、非同期処理によって、バッファされた要求をストレージデバイス１７６ａ〜１７６ｍに書き出してよい。
【００４１】
別の実施例では、図２に示すマッピングテーブルは重複排除テーブルであってよい。重複排除テーブルは、ストレージアクセス要求と関連するデータ構成要素から決定されたハッシュ値を含むキーを利用してよい。重複排除操作の初期ステップは、読出し／書込み要求、ガベージコレクション操作、トリム操作等の他の操作と同時に実行してよい。所定の書込み要求に関して、クライアントコンピュータ１１０ａ〜１１０ｃのうちの１つから送信されるデータは、バイトストリーム等のデータストリームであってよい。当業者には公知であるように、データストリームは固定長又は可変長チャンクのシーケンスに分割できる。チャンキングアルゴリズムは、「チャンク」と呼んでよい別個のデータ構成要素へのデータストリームの分割を実行してよい。チャンクは、データのサブファイル内容アドレス可能ユニットであってよい。様々な実施形態において、デーブル又は他の構造を用いて、所定のファイルタイプ又はデータのタイプのために、特定のチャンキングアルゴリズムを使用することを決定してよい。ファイルのタイプは、そのファイル名拡張子、別個の識別情報、データ自体の内容等を参照することによって決定してよい。結果として生成されたチャンクを、データストレージアレイ１２０ａ、１２０ｂのうちの１つに記憶して、チャンクの共有を可能としてよい。このようなチャンクは、様々な方法で別個に又はグループ化して記憶してよい。
【００４２】
様々な実施形態において、チャンクは、（例えば特定のファイルを、記憶されたデータの１つ又は複数のより小さなチャンクに基づいて再構成できる）そのチャンクからより大きなデータ構成要素を再構成できるデータ構造によって表してよい。対応するデータ構造は、関連する算出されたハッシュ値、データストレージアレイ１２０ａ、１２０ｂのうちの１つにおけるその位置の（物理及び／又は論理）ポインタ、並びにその長さを含む対応するチャンクを記録してよい。各データ構成要素について、重複排除アプリケーションを用いて対応するハッシュ値を算出してよい。例えば、メッセージダイジェストアルゴリズム５（ＭＤ５）、セキュアハッシュアルゴリズム（ＳＨＡ）等のハッシュ関数を用いて、対応するハッシュ値を算出してよい。受信した書込み要求に対応する所定のデータ構成要素が、データストレージアレイ１２０ａ、１２０ｂのうちの１つに既に記憶されているかどうかを知るために、所定のデータ構成要素に関する算出した数ビットのハッシュ値（又は数ビットのハッシュ値のサブセット）を、データストレージアレイ１２０ａ、１２０ｂのうちの１つ又は複数に記憶されたデータ構成要素の数ビットのハッシュ値と比較してよい。
【００４３】
マッピングテーブルは、図２に示すように１つ又は複数のレベルを備えてよい。マッピングテーブルは１６〜６４のレベルを備えてよいが、別の数のレベルをマッピングテーブル内でサポートすることもでき、予期される。図２では、図示を簡略化するために、レベル「１」、レベル「２」、レベル「Ｎ」と標識された３つのレベルを示す。マッピングテーブル内の各レベルは１つ又は複数のパーティションを含んでよい。一実施形態では、各パーティションは４キロバイト（ＫＢ）のページである。例えばレベル「Ｎ」はページ２１０ａ〜２１０ｇを備えるものとして示されており、レベル「２」はページ２１０ｈ〜２１０ｊを備え、レベル「１」はページ２１０ｋ〜２１０ｎを備える。マッピングテーブル内の各レベルに対して他のパーティションサイズを選択することもでき、予期される。更に、１つ又は複数のレベルは単一のパーティションを有することもでき、このパーティションはレベルそのものである。
【００４４】
一実施形態では、マッピングテーブル内の複数のレベルは時間によってソートされる。例えば図２では、レベル「１」はレベル「２」より古いものであってよい。同様にレベル「２」はレベル「Ｎ」より古いものであってよい。一実施形態では、マッピングテーブルに１つ又は複数の新規のレコードを挿入するための条件を検出すると、新規のレベルを生成してよい。様々な実施形態において、新規のレベルが生成される場合、この新規のレベルに与えられる番号／名称は、この新規のレベルに時間的に先行するレベルに与えられている番号よりも大きい。例えば、最も最近に生成されたレベルに値８が割り当てられる場合、次に新しく生成されるレベルは値９を割り当てられてよい。このようにして、レベル間の時間的関係を確立又は決定してよい。数値は厳密に順番でなくてもよいことは、理解できるであろう。更に、代替実施形態ではこの番号付けスキームを逆転してよく、これにより、より新しいレベルがより小さい数字による名称を有する。更に、他の実施形態は、レベル間の区別をつけるために数字でない名称を利用してよい。多数のこのような実施形態が可能であり、予期される。後の古いレベルはそれぞれ、前の新しいレベルの標識整数値から１だけ減少した標識を有する。図示していない別個のテーブルを用いてマッピングテーブルを論理的に記載してよい。例えばこの別個のテーブルの各エントリは、所定のレベルＩＤ及び所定のレベルＩＤ内に記憶されたページＩＤのリストを含んでよい。
【００４５】
新規のレコードの挿入のための新規の最高レベルを生成することによって、マッピングテーブルにこの新規のレコードを付加して更新する。一実施形態では、単一のレベルを新規の最高レベルとして生成し、各新規のレコードをこの単一のレベルに挿入する。別の実施形態では、マッピングテーブルへの挿入前に、複写キーについて新規のレコードを検索してよい。単一のレベルを新規の最高レベルとして生成してよい。複写キーを記憶した所定のレコードが見つかった場合、所定のレコードより前にバッファされた各レコードを上記単一のレベルに挿入してよい。要求を順序通りに完了する等のメモリ順序付けを保存するような様式でこの新規のレコードをバッファしてよい。そして別の単一のレベルを生成してよく、複写キーを記憶した別のレコードが見つからない場合は、新規のレコードの残り上記別の単一のレベルに挿入してよい。上述のようなレコードが見つかった場合は、これらのステップを繰り返す。新規のレコードのうちの１つと同一のキー値を記憶したマッピングテーブル内に存在するレコードは、新規のレコードの挿入によって原位置で編集される又は書き換えられることはない。
【００４６】
レベルのサイズについては、より低いレベルが新規のレベルより大きくなって増大するものとして図示しているが、より高いレベルが隣接するレベルより交互に大きく又は小さくなるようにしてもよい。マッピングテーブルに挿入する新規のレコードの数は時間を経ると変動し得、上下するレベルサイズを生成し得る。より低いレベルの平坦化により、より低いレベルは新規のレベルより大きくなり得る。特定の条件が検出された場合、２つ以上のより低いレベルを単一のレベルに平坦化してよい。更なる詳細を以下に示す。
【００４７】
マッピングテーブル内に記憶されたレコードに原位置での編集が行われない場合、より高いレベルに位置する新規のレコードは、より低いレベルに位置を定められたものと同一のキー値を記憶したレコードを無効にし得る。例えば、所定のキー値によってマッピングテーブルにアクセスする際、所定のキー値にマッチングするキー値を保持するレコードを記憶するための１つ又は複数のレベルが見つかり得る。このような場合、この１つ又は複数のレベルのうち最高のレベルを選択することによって、対応するレコードに記憶された情報をアクセスの結果として提供してよい。更なる詳細を以下に示す。更に、１つ又は複数の新規のレコードをマッピングテーブルに挿入するための検出される条件及び情報のストレージに関する更なる詳細を、以下に示す。
【００４８】
一実施形態では、所定のページ内のエントリはキーによってソートしてよい。例えば、エントリは、エントリが含むキーに従って昇順にソートしてよい。更に様々な実施形態において、あるレベル内のページも（例えばキー値に従って又はその他の方法で）ソートしてよい。図２の実施例では、レベルＮのページ２１０ａは、キー値に従って昇順にソートされたレコードを含む。様々な実施形態において、１つ又は複数の列を使用してキー値を記憶してよい。図２の実施例では、キー値を記憶するための各順組に２つの列又はフィールドが示されている。このようなキー値を利用して、レコードを所望の順序にソートしてよい。あるレコードに関するキー値のいずれ又はそのレコードに関するキー値のいずれの組み合わせに基づいてソートを実行してよい。図示した実施例では、第１のレコードは２つの列に記憶された０及び８を含むキー値を記憶しており、最後のレコードは１２、３３を含むキー値を記憶している。図示したこの実施例では、ページ２１０ａの第１のレコードと最後のレコードとの間のソートされた各レコードは、第１の列に０〜１２のキー値を記憶し、これらレコードは、第１の列に（少なくとも部分的に）基づいて０から１２までの昇順にキー値を記憶するように配列される。同様に、ページ２１０ｂはソートされたレコードを含み、第１のレコードは１２及び３９のキー値を記憶しており、最後のレコードは３１、１９のキー値を記憶している。図示したこの実施例では、ページ２１０ｂの第１のレコードと最後のレコードとの間のソートされた各レコードは、第１の列に１２〜３１のキー値を記憶し、これらレコードは、１２から３１までの昇順にキー値を記憶するように配列される。
【００４９】
以上に加えて、レベルＮ内のページは所望の順序にソートされる。様々な実施形態において、あるレベル内のページは、ページ内のエントリがソートされる順序を反映した様式でソートしてよい。例えば、あるレベル内のページは、キー値に従って昇順にソートしてよい。ページ２１０ｂの第１のキー値はページ２１０ａの最後のキー値より大きいため、ページ２１０ｂはソート順においてページ２１０ａの後ろにある。よってページ２１０ｇは、ページ２１０ａ〜２１０ｆ（図示せず）に含まれるエントリよりもキー値が大きいエントリを含むことになる。このようにして、あるレベル内の全てのエントリは従来のスキームに従ってソートされる。エントリはページ又は他のサイズ単位に単純に細分化される。希望に応じて他のソート用スキームを使用してもよいことは理解できるであろう。
【００５０】
ここで図３Ａを参照すると、マッピングテーブルにアクセスするために使用する一次索引の一実施形態の一般化されたブロック図が示されている。キー生成器３０４は１つ又は複数の要求者データ入力３０２を受信してよい。一実施形態では、マッピングテーブルはアドレス変換ディレクトリテーブルである。所定の受信した読出し／書込み要求は、特定のボリューム、セクタ及び長さを識別してよい。キー生成器３０４は、ボリューム識別子（ＩＤ）、論理又は仮想アドレス、スナップショットＩＤ及びセクタ番号を含むクエリキー値３０６を生成してよい。他の組み合わせも可能であり、他の又は追加の値を同様に利用してよい。クエリキー値３０６の他の部分を、マッピングテーブル内で隣接していてもしていなくてもよい複数の列に記憶された値と比較してよい。図示した実施例では、説明の簡略化のためにキー値「２２」を使用する。
【００５１】
上述のように、チャンキングアルゴリズム及び／又はキー生成器３０４に関連するセグメント化アルゴリズムの両方が、ストレージアクセス要求に対応するデータ３０２を受信してよい。これらのアルゴリズムは１つ又は複数のデータ構成要素を生成してよく、各データ構成要素ついて対応するハッシュ値又はクエリキー値３０６を算出するためのハッシュ関数を選択してよい。結果として生成されるハッシュ値を用いて、重複排除テーブルに索引をつけてよい。
【００５２】
図３Ａに示すように、一次索引３１０は、ストレージデバイス１７６ａ〜１７６ｍに記憶されたデータに関する位置識別情報を生成してよい。例えば、再び図２を参照すると、対応する一次索引３１０（又はその一部）は、各レベル「１」、レベル「２」及びレベル「Ｎ」に論理的に含まれていてよい。また、各レベル及び各対応する一次索引は、ストレージデバイス１７６ａ〜１７６ｍ内にランダムアクセス方式で物理的に記憶されていてよい。
【００５３】
一実施形態では、一次索引３１０を、パーティション３１２ａ、３１２ｂのようなパーティションに分割してよい。一実施形態では、パーティションのサイズは４キロバイト（ＫＢ）ページ〜２５６ＫＢであるが、他のサイズも可能であり、予期される。一次索引３１０の各エントリはキー値を記憶してよい。更に各エントリは、対応一意仮想ページ識別子（ＩＤ）及びキー値に対応するレベルＩＤを記憶してよい。各エントリは、有効性情報等の対応するステータス情報を記憶してよい。クエリキー値で一次索引にアクセスした場合、キー値にマッチングするか又はそうでない場合はキー値に対応する１つ又は複数のエントリについて、索引３１０内のエントリを検索してよい。次に、マッチングするエントリからの情報を使用して、受信した読出し又は書込み要求の標的であるストレージ位置を識別するマッピングの位置を定め、取得してよい。言い換えると、インデックス３１０はマッピングの位置を識別する。一実施形態では、インデックス内でのヒットは、キー値及び対応する物理ポインタ値の両方を記憶するストレージデバイス１７６ａ〜１７６ｍ内のページを識別する対応ページＩＤを提供する。対応ページＩＤで識別されたページをキー値で検索して、物理ポインタ値を得てよい。
【００５４】
図３Ａの実施例では、受信した要求はキー「２２」に対応する。このキーを使用して索引３１０にアクセスする。索引３１０の検索の結果、パーティション３１２ｂ内のエントリへのヒットが得られる。この場合のマッチングするエントリは、ページ２８及びレベル３のような情報を含む。この結果に基づいて、要求に対する所望のマッピングを、マッピングテーブルのレベル３内のページ２８として識別されたページに見出す。この情報を用いて、所望のマッピングを取得するために、マッピングテーブルへのアクセスを行ってよい。一次索引３１０へのアクセスにストレージへのアクセスが必要である場合、所望のマッピングを得るために少なくとも２回のストレージアクセスが必要となることになる。従って、以下に説明する様々な実施形態において、一次索引の一部はキャッシュ化されるか、又は比較的高速なアクセスメモリに記憶され、これによってストレージデバイスへの１回のアクセスを削減する。様々な実施形態において、マッピングテーブルに対する全一次索引はキャッシュ化される。いくつかの実施形態では、一次索引がその全体をキャッシュ化するには大きすぎる場合、又は所望のものより大きい場合、キャッシュ内で二次、三次又はその他の索引部分を用いてそのサイズを低減してよい。二次タイプの索引について以下で議論する。以上に加えて、様々な実施形態において、最新のヒットに対応するマッピングページも、少なくともある程度の期間キャッシュ化される。このようにして、時間的局所性を有するアクセスを行うプロセスをより迅速に提供できる（即ち、現在アクセスされている位置は、そのマッピングをキャッシュ化されるか容易に利用可能とされることになる）。
【００５５】
ここで図３Ｂを参照すると、マッピングテーブルにアクセスするために使用するキャッシュ化された一次索引の一実施形態の一般化されたブロック図が示されている。図３Ａに対応する回路及び論理部分には同一の番号が付けられている。キャッシュ化された一次索引３１４は、マッピングテーブルの複数のレベルに関する各一次索引３１０に記憶された情報のコピーを含んでよい。一次索引３１４は、ＲＡＭ１７２、コントローラ１７４内のバッファ、メモリ媒体１３０及びプロセッサ１２２内のキャッシュのうちの１つ又は複数に記憶されていてよい。一実施形態では、一次索引３１４はキー値によってソートしてよいが、それ以外のソートも可能である。一次索引３１４はまた、パーティション３１６ａ、３１６ｂ等のパーティションに分割してもよい。一実施形態では、パーティション３１６ａ、３１６ｂのサイズは、一次索引３１０内のパーティション３１２ａ、３１２ｂと同一のサイズであってよい。
【００５６】
一次索引３１０と同様に、一次索引３１４の各エントリは、キー値、対応一意仮想ページ識別子（ＩＤ）、キー値に対応するレベルＩＤ、及び有効性情報等のステータス情報のうちの１つ又は複数を記憶してよい。クエリキー値３０６で一次索引３１４にアクセスした場合、一次索引３１４は、キー値及び対応ポインタ値の両方を記憶するストレージデバイス１７６ａ〜１７６ｍ内のページを識別する対応ページＩＤを伝達してよい。対応ページＩＤで識別されるページをキー値で検索して、ポインタ値を見出してよい。図示したように、一次索引３１４は同一のキー値を記憶する複数のレコードを有してよい。従って、所定のキー値に関する検索から複数のヒットが得られることがある。一実施形態では、レベルＩＤの最高値によるヒット（又は最も新しい又は最も最近のエントリを識別するためにどのようなインジケータを用いるか）を選択できる。複数のヒットからの１つのヒットのこのような選択は、ここでは図示していないマージ論理によって実行してよい。マージ論理の更なる説明は以下で行う。
【００５７】
ここで図４に移ると、マッピングテーブルにアクセスするために使用するマッピングテーブル及び一次索引の別の実施形態の一般化されたブロック図が示されている。図３Ａと対応する回路及び論理部分には同一の番号が付けられている。マッピングテーブル３４０は、図２に示したマッピングテーブルと同様の構造を有してよい。しかしながら、各レベルに対する対応一次索引３１０のストレージについてはここには示さない。一次索引の部分３１０ａ〜３１０ｉのうちの１つ又は複数のコピーが、索引コピー３３０（例えばキャッシュ化されたコピー）に含まれていてよい。コピー３３０は、図３Ｂに示したキャッシュ化された索引に概ね対応してよい。索引コピー３３０内の情報は、ＲＡＭ１７２、コントローラ１７４内のバッファ、メモリ媒体１３０及びプロセッサ１２２内のキャッシュに記憶されていてよい。図示した実施形態では、一次索引３１０ａ〜３１０ｉ内の情報は、ストレージデバイス１７６ａ〜１７６ｍ内のマッピングのページと共に記憶してよい。図示されている一次索引３１０ｉ等の一次索引にアクセスするために使用してよい二次索引３２０も示されている。同様に、マッピングテーブル３４０へのアクセス及びマッピングテーブル３４０の更新は上述のように行われてよい。
【００５８】
マッピングテーブル３４０は、レベル「１」〜レベル「Ｎ」のような複数のレベルを備える。図示した実施例では、各レベルは複数のページを含む。レベル「Ｎ」はページ「０」〜「Ｄ」を含むものとして示されており、レベルＮ−１はページ「Ｅ」〜「Ｇ」を含み、以下同様である。ここでもまた、マッピングテーブル３１０内のレベルは時間によってソートしてよい。レベル「Ｎ」はレベル「Ｎ−１」より新しく、以下同様であってよい。少なくとも１つのキー値でマッピングテーブル３４０にアクセスしてよい。図示した実施例では、キー値「２７」及びページＩＤの「３２」でマッピングテーブル３４０にアクセスする。例えば一実施形態では、レベルＩＤ「８」を用いて、マッピングテーブル３４０の特定のレベル（又は「サブテーブル」）を識別して検索してよい。所望のサブテーブルを識別したら、ページＩＤを用いてサブテーブル内の所望のページを識別してよい。最後に、キーを用いて所望のページ内の所望のエントリを識別してよい。
【００５９】
上述のように、キャッシュ化された索引３３０へのアクセスによって複数のヒットが得られることがある。一実施形態では、これらの複数のヒットの結果を、どのヒットを使用してマッピングテーブル３４０にアクセスするかを識別するマージ論理３５０に提供する。マージ論理３５０は、ストレージコントローラ内に含まれるハードウェア及び／又はソフトウェアを表してよい。一実施形態では、マージ論理３５０は、最も最近の（最新の）マッピングに対応するヒットを識別するよう構成される。このような識別は、エントリに対する対応レベルの識別に基づくものであってもよいし、又はそれ以外のものであってもよい。図示した実施例では、レベル８、ページ３２、キー２７に対応するクエリを受信する。クエリに応答して、レベル８のページ３２がアクセスされる。ページ３２内でキー２７が発見されると（ヒット）、対応する結果が返される（例えば図示した実施例のポインタｘＦ３２０９Ｂ２４）。ページ３２内でキー２７が発見されない場合、失敗の指標が返される。この物理ポインタ値は、マッピングテーブル３４０から出力され、これによってキー値「２７」に対応するストレージアクセス要求を提供してよい。
【００６０】
一実施形態では、マッピングテーブル３４０はインラインマッピングをサポートする。例えば、十分に小さい標的を有することが検出されたマッピングは、ストレージデバイス１７６ａ〜１７６ｍ内のユーザデータを記憶する実際の物理セクタを用いることなく表示できる。一実施例は、ユーザデータを用いない反復パターンであってよい。対応するマッピングは、ストレージデバイス１７６ａ内のユーザデータとして反復パターン（例えば一連のゼロ）の複数のコピーを実際に記憶するのではなく、マッピングテーブルのフィールド０〜フィールドＮのうちの１つの中等、ステータス情報中に含まれた指標を含んでよく、この指標は、読出し要求に対してどのようなデータ値が返されるかを示す。しかしながら、このユーザデータの実際の記憶はストレージデバイス１７６ａ〜１７６ｍ内の標的位置に存在しない。更に、指標を、一次索引３１０及び使用できるいずれの追加の索引（ここでは図示せず）のステータス情報内に記憶してよい。
【００６１】
以上に加えて、様々な実施形態において、ストレージシステムは、データ編成、ストレージスキーム等の複数のバージョンを同時にサポートしてよい。例えば、システムハードウェア及びソフトウェアが発展するにつれて、新たな特徴を組込まれ得るか、又はそうでない場合は新規の特徴がもたらされ得る。より新しくなる（例えば）データ、索引及びマッピング
これらの新たな特徴を利用してよい。図４の実施例では、新しいレベルＮはシステムのあるバージョンに対応してよく、その一方でより古いレベルＮ‐１は過去のバージョンに対応してよい。これらの異なるバージョンを包括するために、そのレベルにおいていずれのバージョン、いずれの特徴、圧縮スキーム等が使用されているかを示すメタデータを、各レベルに関連して記憶してよい。このメタデータは索引の一部、ページ自体又はこれらの両方として記憶できる。アクセスを行う際、このメタデータは、データを適切に取り扱う方法を示す。更に、新たなスキーム及び特徴を、システムを休止させる必要なく動的に適用できる。このようにして、システムのアップグレードはより柔軟になり、より新しいスキーム及びアプローチを反映するための古いデータの再構成は必要なくなる。
【００６２】
ここで図５Ａに移ると、読出しアクセスを提供するための方法の一実施形態が示されている。上述のネットワークアーキテクチャ１００及びマッピングテーブル３４０において具現化される構成要素は通常、方法５００に従って動作してよい。議論を目的として、この実施形態のステップを順序通りに示す。しかしながら、いくつかのステップは図示したものと異なる順序で行われてよく、いくつかのステップは同時に実行されてよく、いくつかのステップは他のステップと組み合わせてよく、またいくつかのステップは別の実施形態には存在しなくてよい。
【００６３】
読出し及び記憶（書込み）要求を、クライアント１１０ａ〜１１０ｃのうちの１つから、データストレージアレイ１２０ａ、１２０ｂのうちの１つへと伝達してよい。図示した実施例では、読出し要求５００は受信され、ブロック５０２において対応するクエリキー値を生成してよい。いくつかの実施形態では、要求自体が、索引にアクセスするために使用されるキーを含んでよく、キーの「生成」５０２は不要である。既に述べたように、クエリキー値は、ボリュームＩＤ、受信した要求に関連する論理又は仮想アドレス、スナップショットＩＤ、セクタ番号等を備える仮想アドレス索引であってよい。重複排除のために使用される実施形態では、ハッシュ関数又は他の関数を用いてクエリキー値を生成してよい。マッピングテーブルにアクセスするために使用するクエリキー値に関しては他の値も可能であり、予期される。
【００６４】
ブロック５０４では、クエリキー値を用いて１つ又は複数のキャッシュ化された索引にアクセスし、キー値に対応するマッピングを記憶してよいマッピングテーブルの１つ又は複数の部分を識別してよい。更に、現在使用されているキャッシュ化されたマッピングを同様に検索してよい。キャッシュ化されたマッピング上でヒットを検出した場合（ブロック５０５）、キャッシュ化されたマッピングを用いて、要求されたアクセスを実行してよい（ブロック５１２）。キャッシュ化されたマッピング上にヒットが存在しない場合、キャッシュ化された索引上にヒットが存在するかどうかに関する決定を行ってよい（ブロック５０６）。このような場合、ヒットに対応する結果を用いて、マッピングテーブルを識別してこれにアクセスする（ブロック５０８）。例えば一次索引３１０と共に、クエリキー値を記憶するエントリはまた、マッピングテーブル内の単一の特定のページを識別する一意仮想ページＩＤを記憶してよい。この単一の特定のページは、クエリキー値及び関連する物理ポインタ値の両方を記憶してよい。ブロック５０８では、マッピングテーブルの識別された部分にアクセスしてよく、クエリキー値を用いて検索を実行してよい。その後マッピングテーブルの結果を戻してよく（ブロック５１０）、これを用いて、元の読出し要求の標的位置に対応するストレージアクセスを実行してよい（ブロック５１２）。
【００６５】
いくつかの実施形態では、読出し要求に対する索引クエリは失敗する場合がある。このような失敗は、索引の一部分しかキャッシュ化されていないこと又はエラー状態（例えば存在しない位置への読出しアクセス、アドレス破損等）が原因であり得る。このような場合、記憶された索引へのアクセスを実行してよい。記憶された索引へのアクセスによってヒットが得られる場合（ブロック５２０）、この結果を返してよく（ブロック５２２）、これを用いてマッピングテーブルにアクセスする（ブロック５０８）。一方、記憶された索引へのアクセスが失敗した場合、エラー状態が検出され得る。エラー状態に対する処置は、様々な望ましい方法のいずれを用いて行ってよい。一実施形態では、例外を生成してよく（ブロック５２４）、これを所望のとおりに処置する。一実施形態では、マッピングテーブルの一部はブロック５１０において戻される。様々な実施形態において、この部分は４ＫＢページであってよいページであってよく、又はそれ以外のものであってもよい。上述のように、ページ内のレコードをソートして、レコードが含むコンテンツのより速い検索を促進してよい。
【００６６】
一実施形態では、マッピングテーブルは、各ページの情報ストレージのための、従来のデータベースシステム方法を利用する。例えば、マッピングテーブル内の各レコード（又は行又はエントリ）を交互に記憶する。このアプローチは、行指向型データベース又は行記憶型データベースにおいて及び相互関係データベースと共に使用してよい。これらのタイプのデータベースは、値ベースのストレージ構造を利用する。値ベースのストレージ（ｖａｌｕｅ−ｂａｓｅｄ  ｓｔｏｒａｇｅ：ＶＢＳ）アーキテクチャは、一意データ値を一回のみ記憶し、自動生成索引システムが全ての値のためのコンテキストを維持する。様々な実施形態において、データは行によってソートしてよく、行の中の列（フィールド）に対して圧縮を使用してよい。いくつかの実施形態では、使用される技術は、ベース値を記憶すること、並びにオフセットのためのより小さいフィールドサイズを有すること及び／又はベース値のセットを有することを含んでよく、行の中の列は、ベースセレクタ及びベースからのオフセットからなる。どちらの場合においても、圧縮情報をパーティション内に（例えば開始時に）記憶してよい。
【００６７】
いくつかの実施形態では、マッピングテーブルは、各ページの情報ストレージのための、列指向型データベースシステム（列記憶型）方法を利用する。列記憶は、各データベーステーブル列を別個に記憶する。更に、同一の列に属する属性値を、連続して記憶してよく、圧縮してよく、及び高密度にパックしてよい。従って、例えばページ内等のテーブルの列のサブセットの読出しを、比較的迅速に実行できる。列データは均一タイプのものであってよく、また、行志向型データでは利用できない、使用するストレージサイズの最適化を可能とすることができる。Ｌｅｍｐｅｌ−Ｚｉｖ−Ｗｅｌｃｈ（ＬＺ）及びランレングス符号化（ＲＬＥ）等のいくつかの圧縮スキームは、隣接するデータの検出された類似点を圧縮に利用する。ページ内の個々のレコードを識別及び索引付けできるような圧縮アルゴリズムを選択してよい。マッピングテーブル内のレコードを圧縮することによって、微粒度マッピングを可能にすることができる。様々な実施形態において、データの特定の部分に対して使用される圧縮のタイプを、データと関連して記憶してよい。例えば、圧縮のタイプを、圧縮データと同一のページの一部として索引に（例えば何らかのタイプのヘッダに）記憶でき、又はそれ以外の様式で記憶できる。このようにして、複数の圧縮技術及びアルゴリズムを、ストレージシステム内で並行して用いてよい。更に、様々な実施形態において、ページデータを記憶するために使用される圧縮のタイプは、データを記憶する際に動的に決定してよい。一実施形態では、様々な圧縮技術のうちの１つを、圧縮しようとするデータの性質及びタイプに少なくとも部分的に基づいて選択してよい。いくつかの実施形態では、複数の圧縮技術を実行し、その後最も良好な圧縮を示す圧縮技術を選択して、データの圧縮に使用する。数多くのこのようなアプローチが可能であり、予期される。
【００６８】
マッピングテーブルのレベルのうちのいずれかに発見されるクエリキー値３０６のマッチングが存在する場合（ブロック５０８）、ブロック５１０において、ヒットの１つ又は複数の指標をマージ論理３５０に伝達してよい。例えば、１つ又は複数のヒット指標を、図４に示すようにレベル「１」から「Ｊ」へと伝達してよい。マージ論理３５０は、ヒット指標を伝達するレベル「１」〜「Ｊ」の最高レベルを選択してよく、このレベルは最も新しいレベルであってもよい。選択されたレベルは、アクセスの結果として対応するレコードに記憶される情報を提供してよい。
【００６９】
ブロック５１２では、選択したページのマッチングするレコード内の１つ又は複数の対応するフィールドを読出して、対応する要求を処理してよい。一実施形態では、ページ内のデータは圧縮されたフォーマットで記憶され、ページが復元され、対応する物理ポインタ値が読出される。別の実施形態では、マッチングするレコードだけが復元され、対応する物理ポインタ値が読出される。一実施形態では、全物理ポインタ値を、マッピングテーブルと対応する標的物理位置との間で分割してよい。こうして、ユーザデータを記憶する複数の物理位置にアクセスして、データストレージアクセス要求を完了してよい。
【００７０】
ここで図５Ｂに移ると、受信した読出し要求に対応する方法の一実施形態が示されている。受信した読出し要求に応じて（ブロック５３０）、この要求に対応する新たなマッピングテーブルエントリを生成してよい（ブロック５３２）。一実施形態では、書込み要求の仮想アドレスを対応するデータ構成要素を記憶する物理位置と組にするマッピングテーブルに、新たな仮想−物理アドレスマッピングを加えてよい（ブロック５３４）。様々な実施形態において、新たなマッピングを他の新たなマッピングによってキャッシュ化してよく、これをマッピングテーブルエントリの新たな最高レベルに加えてよい。次に、持続的ストレージへの書込み操作（ブロック５３６）を実行してよい。様々な実施形態において、持続的ストレージのマッピングテーブルへの新たなマッピングエントリの書込みは、より効率的であると思われる後の時点まで実行しなくてよい（ブロック５３８）。上述のように、ソリッドステートストレージデバイスを用いるストレージシステムでは、ストレージへの書込みはストレージからの読出しよりも大幅に遅い。従って、ストレージへの書込みは、システム全体の性能に対する影響を最小化するような方法で計画される。いくつかの実施形態では、マッピングテーブルへの新たなレコードの挿入は、他のより大きなデータの更新と組み合わせてよい。このようにして更新を組み合わせることにより、より効率的な書込み操作を提供できる。議論を簡略化するために、図５Ｂの方法では、本明細書に記載の各方法と同様に、複数の操作を特定の順序で行うものとして説明していることに留意されたい。しかしながら、これらの操作は実際には異なる順序で行ってよく、場合によってはこれらの操作のうちの何らかの操作を同時に行ってもよい。このような全ての実施形態が考えられる。
【００７１】
以上に加えて、いくつかの実施形態では重複排除機構を用いてよい。図５Ｂは、重複排除システム及び方法に一般に対応し得る操作５５０を示す。図示した実施例では、受信した書込み要求に対応するハッシュ値を生成し（ブロック５４０）、これを使用して重複排除テーブルにアクセスする（ブロック５４２）。重複排除テーブル内でヒットが存在する（即ちシステム内にデータのコピーが既に存在する）場合（ブロック５４４）、新たなエントリを重複排除テーブルに加えて（ブロック５４８）、新たな書込みを反映させてよい。このような場合、データ自体をストレージに書込む必要はなく、受信した書込みデータは破棄してよい。代替として、重複排除テーブルで失敗した場合、新たなデータのための新たなエントリが生成され、重複排除テーブルに記憶される（ブロック５４６）。更に、ストレージへのデータの書込みを実行する（ブロック５３６）。更に、索引において新たなエントリを生成して、新たなデータを反映して良い（ブロック５３８）。いくつかの実施形態では、インライン重複排除操作中に失敗が発生した場合、この時には重複排除テーブルへの挿入は実行されない。寧ろ、インライン重複排除操作中、全重複排除テーブルのうちの一部分（例えば重複排除テーブルのキャッシュ化された部分）のみに対してハッシュ値を有するクエリを生成してよい。失敗が発生した場合、新たなエントリを生成してキャッシュに記憶させてよい。続いて、ガベージコレクション中に行われる操作等の後処理重複排除操作中、全重複排除テーブルに対してハッシュ値を有するクエリを生成してよい。失敗は、ハッシュ値が一意ハッシュ値であることを示し得る。従って、ハッシュ−物理ポインタマッピング等の新たなエントリを、重複排除テーブルに挿入してよい。代替として、後処理重複排除中にヒットが検出される（即ち重複が検出される）場合、重複排除を実行して、検出されたコピーのうちの１つ又は複数を削除してよい。
【００７２】
ここで図６を参照すると、共有マッピングテーブルを有するマルチノードネットワークの一実施形態の、一般化されたブロック図が示されている。図示した実施例では、３つのノード３６０ａ〜３６０ｃを用いて、マッピングノードのクラスタを形成する。一実施形態では、各ノード３６０ａ〜３６０ｃは、１つ又は複数の論理装置番号（ＬＵＮ）を担当してよい。図示した実施形態では、多数のマッピングテーブルレベル、即ちレベル１〜Ｎが示されている。レベル１は最も古いレベルに対応してよく、レベルＮは最新のレベルに対応してよい。特定のノードが管理するＬＵＮのマッピングテーブルエントリについて、この特定のノード自体が、このノード自体に記憶されたより新しいエントリを有してよい。例えばノード３６０ａは、マッピングサブテーブル３６２ａ、３６４ａを記憶するものとして示されている。これらのサブテーブル３６２ａ、３６４ａは、ノード３６０ａが一般に担当するＬＵＮに対応してよい。同様に、ノード３６０ｂは、このノードが管理するＬＵＮに対応してよいサブテーブル３６２ｂ、３６４ｂを含み、ノード３６０ｃは、このノードが管理するＬＵＮに対応してよいサブテーブル３６２ｃ、３６４ｃを含む。このような実施形態では、これらの「より新しい」レベルのマッピングテーブルエントリは、それらに対応する管理ノードによってのみ維持され、一般に他のノード上には見られない。
【００７３】
上述の相対的に新しいレベルとは対照的に、より古いレベル（即ちレベルＮ−２からレベル１まで）は、全てのノード３６０ａ〜３６０ｃが共有し得るマッピングテーブルエントリを表し、上記共有とは、これらのノードのうちのいずれがこれらのエントリのコピーを記憶してよいという意味である。図示した実施例では、これらのより古いレベル３７０、３７２、３７４はまとめて、共有テーブル３８０として識別される。更に、上述のように、様々な実施形態においてこれらのより古いレベルは、後に議論するマージ又は同様の操作は別として、静的である。一般に、静的な層とは、修正を受けない（即ち「固定されている」）層のことである。このようなレベルがこの意味で固定されている場合、これら低いレベルのいずれのコピーへのアクセスは、複数のコピーのうち別のものが修正されたかどうか又は修正中であるかどうかに関係なく行うことができる。従って、ノードのうちのいずれは、共有テーブル３８０のコピーを安全に記憶してよく、これらのテーブルへの要求を、この要求を適切に処理できるという確信を持って処理できる。共有テーブル３８０を複数のノード３６０に記憶させることにより、ルックアップを実行する際及びそれ以外の要求を処理する際、様々な負荷平衡化スキームを使用できるようにすることができる。
【００７４】
以上に加えて、様々な実施形態において、共有されていてよいレベル３８０は、ノード３６０自体を反映するような様式で編成してよい。例えば、ノード３６０ａはＬＵＮ１、２を担当してよく、ノード３６０ｂはＬＵＮ３、４を担当してよく、ノード３６０ｃはＬＵＮ５、６を担当してよい。様々な実施形態において、マッピングテーブルエントリは、それ自体が対応するＬＵＮを識別する順組を含んでよい。このような実施形態では、共有マッピングテーブルを、キー値、ストレージスペースの絶対幅若しくは量、又はその他に従ってソートしてよい。レベル３８０におけるマッピングテーブルエントリのソートが部分的にＬＵＮに基づくものである場合、エントリ３７０ａはＬＵＮ１、２に対応してよく、エントリ３７０ｂはＬＵＮ３、４に対応してよく、エントリ３７０ｃはＬＵＮ５、６に対応してよい。このような編成は、検索する必要があるデータの量を効果的に削減して、特定のＬＵＮを担当するノードを要求の標的としてコーディネータが直接選択できるようにすることにより、特定のＬＵＮを標的とする要求に対する所定のノードによるルックアップの速度を向上できる。これらの及びその他の編成及びソートスキームも可能であり、そのような場合も考えられる。更に、ＬＵＮの担当があるノードから別のノードへと移行することが望ましい場合、そのノードに関する元々のノードマッピングを共有レベルに書出して（そして例えばマージして）よい。ＬＵＮの担当は、このＬＵＮに対処している新たなノードに移行する。
【００７５】
ここで図７を参照すると、マッピングテーブルにアクセスするために使用する二次索引の一実施形態の一般化されたブロック図が示されている。既に述べたように、キー生成器３０４が要求者データ入力３０２を受信してよく、このキー生成器３０４はクエリキー値３０６を生成する。クエリキー値３０６を用いてマッピングテーブルにアクセスする。いくつかの実施形態では、図３に示す一次索引３１０は、ＲＡＭ１７２又はメモリ媒体１３０に記憶するには大きすぎる（又は望ましい大きさより大きい）場合がある。例えば、インデックスのより古いレベルは、図１０、１１において後で説明するマージ及び平坦化操作によって極めて大きくなっている場合がある。従って、一次索引３１０の対応する部分の代わりに、一次索引の少なくとも一部分に対して二次索引３２０をキャッシュ化してよい。二次索引３２０は、ストレージデバイス１７６ａ〜１７６ｍに記憶されたデータの、より粗レベルの粒度の位置識別を提供し得る。従って二次索引３２０は、これが対応する一次索引３１０の部分に比べて小さくなり得る。従って、二次索引３２０をＲＡＭ１７２又はメモリ媒体１３０に記憶できる。
【００７６】
一実施形態では、二次索引３２０はパーティション３２２ａ、３２２ｂ等のパーティションに分割される。更に、より最近のレベルが最初に現れるように、レベルに従って二次索引を編成してよい。一実施形態では、より古いレベルは小さな番号を有し、より新しいレベルは大きな番号を有する（例えばレベルＩＤは、新たなレベルそれぞれについて増大してよい）。二次索引３２０の各エントリはキー値の範囲を識別してよい。例えば、本実施例に示す第１のエントリは、レベル２２の０〜１２のキー値範囲を識別してよい。これらのキー値は、一次索引３１０の所定のページ内の第１のレコード及び最後のレコードに関連するキー値に対応してよい。言い換えると、二次索引のエントリは、キー０の識別及びキー１２の識別だけを記憶することによって、対応するページがこの範囲内のエントリを含むことを示してよい。再び図３Ａを参照すると、パーティション３１２ａはページであってよく、その第１のレコード及び最後のレコードのキー値はそれぞれ０、１２である。従って、二次索引３２０内のあるエントリは、図７に示すように範囲０〜１２を記憶する。再マッピングはマッピングテーブル内のレベルに維持されるため、キー値の範囲は複数のページ及び関連するレベルに対応してよい。図７に示すように、二次索引３２０内のフィールドはこの情報を記憶してよい。各エントリは、キー値の範囲に対応する１つ又は複数の対応一意仮想ページ識別子（ＩＤ）及び関連するレベルＩＤを記憶してよい。各エントリはまた、有効性情報等の対応するステータス情報も記憶してよい。維持されているページＩＤ及び関連するレベルＩＤのリストは、所定のクエリキー値がどこに記憶され得るかを示すことができるが、そのキー値がそのページ及びレベルに存在することを確認することはできない。二次索引３２０は一次索引３１０より小さいが、ストレージデバイス１７６ａ〜１７６ｍに記憶されたデータの、より粗レベルの粒度の位置識別を有する。二次索引３２０はＲＡＭ１７２又はメモリ媒体１３０に記憶できる程度に十分に小さくてよい。
【００７７】
クエリキー値３０６を用いて二次索引３２０にアクセスすると、１つ又は複数の対応するページＩＤ及び関連するレベルＩＤを伝達できる。このような結果を用いて、記憶された一次索引の一部にアクセスしてこれを引き出す。そして、クエリキー値を用いて１つ又は複数の識別されたページを検索し、物理ポインタ値を見つけ出してよい。一実施形態では、レベルＩＤを用いて、識別された１つ又は複数のレベル（これもまたクエリキー値３０６を記憶している）のうちの最も新しいレベルを決定してよい。こうして対応するページ内のレコードを取得でき、ストレージアクセス要求を処理するために物理ポインタ値を読出すことができる。図示した実施例では、クエリキー値２７はキーの範囲１６〜３１内にある。対応するエントリに記憶されたページＩＤ及びレベルＩＤは、クエリキー値と共にマッピングテーブルへと伝達される。
【００７８】
ここで図８を参照すると、マッピングテーブルにアクセスするために使用する三次索引の一実施形態の一般化されたブロック図が示されている。図４に対応する回路及び論理部分には同一の番号が付けられている。上述のように、図３に示した一次索引３１０は、ＲＡＭ１７２又はメモリ媒体１３０に記憶するには大きすぎる場合がある。更に、マッピングテーブル３４０が大きくなるにつれて、二次索引３２０もまたこれらのメモリに記憶するには大きくなりすぎる場合がある。従って、二次索引３２０の前に三次索引３３０にアクセスしてよく、これは一次索引３１０にアクセスするより更に早くなり得る。
【００７９】
三次索引３３０は、ストレージデバイス１７６ａ〜１７６ｍに記憶されたデータの二次索引３２０による位置識別よりもより粗レベルの粒度を提供し得る。従って、三次索引３３０は、これが対応する二次索引３２０の部分よりも小さくなり得る。一次索引３１０、二次索引３２０、三次索引３３０等はそれぞれ、圧縮フォーマットで記憶されてよい。選択される圧縮フォーマットは、マッピングテーブル３４０内に情報を記憶するために使用する圧縮フォーマットと同一であってよい。
【００８０】
一実施形態では、三次索引３３０は、パーティション３３２ａ、３３２ｂ等の複数のパーティションを含んでよい。クエリキー値３０６を用いて三次索引３３０にアクセスしてよい。図示した実施例では、「２７」であるクエリキー値３０６が０〜７８のキー値の範囲にあることがわかる。三次索引３３０の第１のエントリはこのキー値範囲に対応する。三次索引３３０の列は、二次索引３２０内のどのパーティションにアクセスするかを示してよい。図示した実施例では、０〜７８の範囲のキー値は二次索引３２０内のパーティション０に対応する。
【００８１】
フィルタ（図示せず）にアクセスして、索引３１０〜３３０のうちのいずれか１つの中にクエリキー値がないかどうかを決定してよいことにも留意されたい。このフィルタは、ある要素があるセットの構成要素であるかどうかを決定する確率的データ構造であってよい。誤って検知してしまうことは起こり得るが、誤って検知できないことは起こり得ない。このようなフィルタの一例はブルームフィルタである。このようなフィルタのアクセスによって、特定の値が全索引１４２に存在しないことが決定された場合、ストレージにクエリが送信されない。このフィルタのアクセスによって、クエリキー値が対応する索引に存在することが決定された場合、対応する物理ポインタ値がストレージデバイス１７６ａ〜１７６ｍに記憶されているかどうかは不明であり得る。
【００８２】
以上に加えて、様々な実施形態において、１つ又は複数のオーバレイテーブルを用いて、クエリに応答してマッピングテーブルによって提供される順組を修正又は削除してよい。このようなオーバレイテーブルを用いて、マッピングテーブルへのアクセスに応答して又は新たなレベルの生成時に平滑化操作中に使用するためのフィルタリング条件を適用して良い。様々な実施形態において、他のハードウェア及び／又はソフトウェアを用いてフィルタリング条件を適用してよい。いくつかの実施形態では、オーバレイテーブルは、上述のマッピングテーブルと同様の様式で、時間に関して順序付けられたレベルとして編成してよい。他の実施形態では、異なる様式で編成してよい。オーバレイテーブルのためのキーは、その下層のマッピングテーブルのキーにマッチングする必要はない。例えば、オーバレイテーブルは、特定のボリュームが削除されたこと又はそうでない場合はアクセス不可能である（例えばこの順組に問い合わせを行うための通常のアクセス経路が存在しない）こと、及びその代わりにそのボリューム識別子を参照する順組に対応するクエリに対する応答が無効となっていることを表す、単一のエントリを含んでよい。別の実施例では、オーバレイテーブルのエントリは、ストレージ位置が自由となっていること、及びこのストレージ位置を参照するいずれの順組が無効となっており、マッピングテーブルが用いるキーではなくルックアップの結果が無効化されることを示してよい。いくつかの実施形態では、オーバレイテーブルは、その下層のマッピングテーブルへのクエリに応答してフィールドを修正してよい。いくつかの実施形態では、キー範囲（キー値の範囲）を用いて、同一の操作（削除又は修正）が行われる複数の値を効率的に識別してよい。このようにして、オーバレイテーブルに「削除」エントリを生成することにより、マッピングテーブルを修正することなく、マッピングテーブルから順組を（効果的に）削除してよい。この場合、オーバレイテーブルは、関連する非キーデータフィールドを有さないキーを含んでよい。
【００８３】
ここで図９に移ると、マッピング及びオーバレイテーブルを含むシステムにおいて読出し要求を処理するための方法の一実施形態が示されている。読出し要求の受信に応答して（ブロック９００）、この要求に対応するマッピングテーブルキー（ブロック９０８）及び第１のオーバレイテーブルキー（ブロック９０２）が生成される。この実施例では、オーバレイ及びマッピングテーブルへのアクセスは同時に行われるものとして示されている。しかしながら他の実施形態では、これらテーブルへのアクセスはいずれの所望の順序で、非同時に（例えば順次、又はそうでなければ時間的に離間して）実行してよい。マッピングテーブルについて生成されたキーを用いて、対応する順組をマッピングテーブルから取得してよい（ブロック９１０）。第１のオーバレイテーブルは、オーバレイテーブルキーに対応する「削除」エントリを含み（条件ブロック９０６）、マッピングテーブル内に見られるいずれの順組は無効と考えられ、この効果に関する指標を要求者に返してよい。一方、オーバレイテーブルが、オーバレイテーブルキーに対応する「修正」エントリを含む場合（条件ブロック９１２）、第１のオーバレイテーブルエントリの値を用いて、マッピングテーブルから取得した順組の１つ又は複数のフィールドを修正してよい（ブロック９２２）。このプロセスを行うと、マッピングテーブルからの順組（これが修正されているかいないかに関わらず）に基づいて、第２のオーバレイテーブルキーが生成され（ブロック９１４）、第１のオーバレイテーブルと同一のテーブルであってもなくてもよい第２のオーバレイテーブルで第２のルックアップが行われる（ブロック９１６）。第２のオーバレイテーブルに「削除」エントリが見られる場合（条件ブロック９２０）、マッピングテーブルからの順組は無効と見做される（ブロック９１８）。第２のオーバレイテーブルに「修正」エントリがみられる場合、マッピングテーブルからの順組のうちの１つ又は複数を修正してよい（ブロック９２６）。このような修正は、順組を落とすこと、順組を標準化すること等を含んでよい。修正された順組を要求者に返してよい。第２のオーバレイテーブルが修正エントリを含まない場合（条件ブロック９２４）、順組を修正しないまま要求者に返してよい。いくつかの実施形態では、１つ又は複数のオーバレイテーブルの少なくともある程度の部分をキャッシュ化して、これらのコンテンツへのより迅速なアクセスを提供してよい。様々な実施形態において、第１のオーバレイテーブルの検知された削除エントリは、いずれの他の対応するルックアップ（例えばブロック９１４、９１６等）を短絡する役割を果たし得る。他の実施形態では、アクセスを並行して実行して「競争」させてよい。数多くのこのような実施形態が可能であり、予期される。
【００８４】
ここで図１０に移ると、マッピングテーブル内のレベルに関する平坦化操作の一実施形態の一般化されたブロック図が示されている。様々な実施形態において、平坦化操作は、１つ又は複数の条件の検出に応答して実行してよい。例えば、時間の経過と共に新たなレコードの挿入によってマッピングテーブル３４０が大きくなり、複数のレベルを包括するにつれて、クエリキー値についてより多くのレベルを検索するためのコストは不必要に高くなり得る。検索するレベルの数を制限するために、複数のレベルを単一の新たなレベルに平坦化してよい。例えば、論理的に隣接した又は時間的に連続した２つ以上のレベルを、平坦化操作のために選択してよい。２つ以上のレコードが同一のキー値に対応する場合、新たな「平坦化された」レベルには最新のレコードを保持し、それ以外のレコードは含めなくてよい。このような実施形態では、この新たに平坦化されたレベルは、所定のキー値に関する検索に関して、対応する複数のレベルの検索によって得られるはずのものと同一の結果を返すことになる。新たな平坦化されたレベルの検索の結果が、このレベルによって置換された２つ以上のレベルと比較して変化しないため、平坦化操作をマッピングテーブルの更新操作と同期させる必要はない。言い換えると、あるテーブルにおける平坦化操作は、そのテーブルに対する更新と非同期的に実行してよい。
【００８５】
上述のように、より古いレベルは、それらのマッピングが修正されていない（即ちＡからＢへのマッピングが変化しないまま残っている）という意味において固定されている。従って、平坦化されているレベルに対する（例えばユーザの書込みによる）修正は行われておらず、レベルの同期ロックは不要である。更に、各ノードが索引のより古いレベルのコピーを記憶できる（例えば図６に関連して上述したような）、ノードをベースとしたクラスタ環境では、平坦化操作をある１つのノードに対して、他のノードの対応するレベルをロックする必要なしに行ってよい。従って、複数のノードのうちのいずれかに対して非同期的に平坦化を行っている間、処理を全てのノードにおいて継続してよい。後の時点において、他のノードはレベルを平坦化してよく、又は既に平坦化されたレベルを用いてよい。一実施形態では、平坦化されたレベルを形成するために使用された２つ以上のレベルを、エラー修復、ミラーリング又はその他の目的のために保持してよい。以上に加えて、様々な実施形態において、削除されたレコードは、新たなレベルに再挿入しなくてよい。上述の平坦化は例えば、マッピングテーブルのレベルの数が所定の閾値に達したことが検出された場合に、これに応答して実行してよい。代替として、平坦化は、１つ又は複数のレベルのサイズが閾値を超えたことが検出された場合に、これに応答して実行してよい。考慮できる更に別の条件は、システム上の負荷である。レベルを平坦化するかどうかの決定は、これらの条件を独立して考慮することに加えて、これらの条件を組み合わせて考慮してよい。平坦化を行うかどうかの決定はまた、条件に関する現在の値及び条件に関して将来予測される値の両方を考慮してもよい。平坦化を実行できる他の条件も可能であり、予期される。
【００８６】
図示した実施例では、レコードは単にキーとポインタとの組として示されている。図示を簡略化するために、ページは４つのレコードを含むものとして示されている。平坦化操作に関して、レベル「Ｆ」及びその次の論理的に連続した隣接するレベル「Ｆ−１」を考慮してよい。レベル「Ｆ」は、レベル「Ｆ−１」よりも新しくてよい。ここでは２つのレベルを平坦化するものとして示すが、３つ以上のレベルを選択して平坦化することも可能であり、予期される。図示した実施例では、レベル「Ｆ−１」はレベル「Ｆ」に見られるものと同一のキー値を記憶したレコードを有してよい。両方向矢印を用いて、２つの連続したレベルにわたって同一のキー値を記憶するレコードを識別する。
【００８７】
新たなレベル「Ｎｅｗ  Ｆ」は、レベル「Ｆ」及びレベル「Ｆ−１」に見られる重複キー値に対応するキーを含む。更に、新たなレベル「Ｎｅｗ  Ｆ」は、この重複キー値を記憶するレコードのうち最新の（又はこの場合より新しい）レコードに対応するポインタ値を含む。例えば、レベル「Ｆ」及びレベル「Ｆ−１」はそれぞれ、キー値４を記憶するレコードを含む。より新しいレコードはレベル「Ｆ」にあり、このレコードはポインタ値５１２も記憶している。従ってレベル「Ｆ−１」は、キー値４と、より古いレベル「Ｆ−１」に見られるポインタ値６５６ではなくポインタ値５１２とを記憶するレコードを含む。更に、新たなレベル「Ｎｅｗ  Ｆ」は、レベル「Ｆ」とレベル「Ｆ−１」との間に見られる一意キー値を有するレコードを含む。例えばレベル「Ｆ−１」は、レベル「Ｆ」に見られるキー６とポインタ２４６との組及びレベル「Ｆ−１」に見られるキー２とポインタ３９８との組を有するレコードを含む。図示したように、レベル内の各ページはキー値によってソートされる。
【００８８】
上述のように、様々な実施形態において、オーバレイテーブルを用いてその下層のマッピングテーブルのキー値に対応する順組を修正又は削除してよい。このような１つ又は複数のオーバレイテーブルは、マッピングテーブルと同様の様式で管理してよい。例えば、オーバレイテーブルを平坦化して、スペースの節約のために隣接するエントリをマージしてよい。代替として、マッピングテーブルを管理するために使用した方法と異なる方法でオーバレイテーブルを管理してよい。いくつかの実施形態では、オーバレイテーブルは、オーバレイテーブルキーの範囲を表す単一のエントリを含んでよい。このようにして、オーバレイテーブルのサイズを制限できる。例えば、マッピングテーブルがｋ個の有効なエントリを含む場合、（平坦化後の）オーバレイテーブルは、マッピングテーブルの有効なエントリ間の間隔に対応する、範囲を無効なものとして示すｋ＋１個以下のエントリを含む必要がある。従って、オーバレイテーブルを用いて、マッピングテーブルから落としてよい順組を比較的効率のよい様式で識別してよい。以上に加えて、上述の議論ではオーバレイテーブルを用いて１つ又は複数のマッピングテーブルからの要求に対する応答を削除又は修正することについて記載したが、オーバレイテーブルを用いて、マッピングテーブルの平坦化操作中に値を削除又は修正してもよい。従って、マッピングテーブルの平坦化操作中に新たなレベルを生成する場合、この新たなレベルに挿入されるはずであったキー値を削除してよい。代替として、新たなレベルへの挿入前に値を修正してよい。このような修正の結果として、マッピングテーブルのキー値の所定の範囲に対応する単一のレコードを、それぞれ元のレコードのサブ範囲に対応する複数のレコードで（新たなレベルにおいて）置換してよい。更に、あるレコードを、より小さい範囲に対応する新たなレコードで置換してよく、又は複数のレコードを、元のレコードの全範囲を包括する範囲を有する単一のレコードで置換してよい。このような全ての実施形態が考えられる。
【００８９】
ここで図１１を参照すると、マッピングテーブル内のレベルの平坦化操作の実施形態の、一般化されたブロック図が示されている。既に議論したように、レベルは時系列順であってよい。図示した実施例では、１つ又は複数の索引及び対応するマッピングを含むレベル「Ｆ」は、より古いレベル「Ｆ−１」の論理的に上側に位置している。またレベル「Ｆ」は、より新しいレベル「Ｆ＋１」の論理的に下側に位置している。同様に、レベル「Ｆ−２」は、より新しいレベル「Ｆ−１」の論理的に下側に位置し、レベル「Ｆ＋２」はより古いレベル「Ｆ＋１」の論理的に上側に位置している。一実施例では、レベル「Ｆ」、「Ｆ−１」に関する平坦化操作を考えてよい。両方向矢印を用いて、２つの連続したレベルにわたる同一のキー値を記憶するレコードが存在することを示す。
【００９０】
既に述べたように、新たなレベル「Ｎｅｗ  Ｆ」は、レベル「Ｆ」及びレベル「Ｆ−１」に見られる重複キー値に対応するキー値を含む。更に新たなレベル「Ｎｅｗ  Ｆ」は、重複キー値を記憶するレコードのうちの最新の（又はこの場合より新しい）レコードに対応するポインタ値を含む。平坦化操作が完了しても、レベル「Ｆ」及びレベル「Ｆ−１」をマッピングテーブルからすぐに除去しなくてよい。また、ノードをベースとするクラスタでは、各ノードは、レベル「Ｎｅｗ  Ｆ」のような新たな単一のレベルが利用できる状態になっていること、及びこの新たなレベルが置換した２つ以上のレベル（レベル「Ｆ」及びレベル「Ｆ−１」等）をもはや使用しないことを確認できる。この確認は、新たなレベルによる置換を行う前に実行してよい。一実施形態では、レベル「Ｆ」及びレベル「Ｆ−１」等の２つ以上の置換されるレベルを、エラー修復、ミラーリング又はその他の目的のために保持してよい。レベル及びそのマッピングの時系列順を維持するために、新たな平坦化されたレベルＦは、より新しいレベル（例えばレベルＦ＋１）の下側、かつこのレベルＦが置換する元のレベルの上側（レベルＦ及びレベルＦ−１）に論理的に配置される。
【００９１】
ここで図１２に移ると、マッピングテーブル内のレベルを平坦化するための方法１０００の一実施例が示されている。ネットワークアーキテクチャ１００及び上述のマッピングテーブル３４０内に具現化された構成要素は一般に、本方法１０００に従って動作してよい。議論を目的として、この実施形態の複数のステップを順序通りに示す。しかしながら、いくつかのステップは図示したものと異なる順序で行われてよく、いくつかのステップは同時に実行されてよく、いくつかのステップは他のステップと組み合わせてよく、またいくつかのステップは別の実施形態には存在しなくてよい。
【００９２】
ブロック１００２では、マッピングテーブル及び対応する索引にストレージスペースを割り当てる。ブロック１００４では、マッピングテーブル内の２つ以上のレベルを平坦化するための１つ又は複数の条件が決定される。例えば、マッピングテーブル内のレベルの現在の数を検索するためのコストは、平坦化操作を実行するためのコストよりも高くなり得る。更にコストは、平坦化される構造内のレベルの現在の（又は予測される）数、１つ又は複数のレベル内のエントリの数、削除又は修正されることになるマッピングエントリの数及びシステムの負荷のうちの少なくとも１つに基づいてよい。コストはまた、対応する操作を実行するための時間、１つ又は複数のバスの占有、対応する操作中に使用されるストレージスペース、何らかの閾値に到達する一連のレベル内の重複エントリの数等を含む。更に、各レベル内のレコードの数の計数を用いて、２つの連続したレベルに対して実行される平坦化操作が、１つ次の又は１つ前のレベル内のレコードの数の２倍に等しい数のレコードを有する新たな単一のレベルを生成し得る時点を推定してよい。単独又はいずれの組み合わせで考えられるこれらの条件及びその他の条件が可能であり、予期される。
【００９３】
ブロック１００６では、データを記憶して新たなマッピングを見つけるために、索引及びマッピングテーブルにアクセスして更新する。新たなレコードをマッピングテーブルに挿入するため、マッピングテーブル内のレベルの数は増加する。マッピングテーブル内の２つ以上のレベルを平坦化するための条件が検出されると（条件ブロック１００８）、ブロック１０１０において、平坦化のためのレベルの１つ又は複数のグループを識別する。レベルのグループは２つ以上のレベルを含んでよい。一実施形態では、この２つ以上のレベルは連続したレベルである。最も低いレベル即ち最も古いレベルが平坦化の最良の候補であり得るが、より新しいグループを選択してもよい。
【００９４】
ブロック１０１２では、各グループに対して、対応するグループ内の最新のレコードを含む新たな単一のレベルが生成される。上述の実施例では、新たな単一のレベル「Ｎｅｗ  Ｆ」は、レベル「Ｆ」及びレベル「Ｆ＋１」の中の最新のレコードを含む。ブロック１０１４では、ノードをベースとするクラスタにおいて、平坦化操作によって生成された新規のレベルを各ノードが利用できる状態になっていることを示す承認を、クラスタ内の各ノードから要求してよい。各ノードが、新たなレベルを利用できることを承認した場合、ブロック１０１６において、識別されたグループ内の現在のレベルをこの新たなレベルで置換する。他の実施形態では、複数のノードにわたる同期は不要である。このような実施形態では、いくつかのノードは他のノードよりも前にこの新たなレベルを使用し始めてよい。更に、いくつかのノードは、新たに平坦化されたレベルが利用可能となった後でさえ、元のレベルの使用を続行してよい。例えば特定のノードは、元のレベルのデータをキャッシュ化し、これを、新たに平坦化されたレベルのキャッシュ化されていないデータを使用するよりも好んで使用してよい。数多くのこのような実施形態が可能であり、予期される。
【００９５】
ここで図１３に移ると、マッピングテーブル内のバルクアレイタスクを効率的に処理するための方法１１００の一実施形態が示されている。既に説明した他の方法と同様に、ネットワークアーキテクチャ１００及び上述のマッピングテーブル３４０内に具現化された構成要素は一般に、本方法１１００に従って操作してよい。更に、この実施形態の複数のステップを順序通りに示す。しかしながら、いくつかのステップは図示したものと異なる順序で行われてよく、いくつかのステップは同時に実行されてよく、いくつかのステップは他のステップと組み合わせてよく、またいくつかのステップは別の実施形態には存在しなくてよい。
【００９６】
マッピングテーブル内に圧縮フォーマットで情報を記憶することにより、微粒度マッピングを可能とすることができ、これによって、従来のバルクアレイタスクの代替として、マッピングテーブル内の情報をマッピングする直接操作を可能とすることができる。直接マッピング操作は、Ｉ／Ｏネットワーク及びバストラフィックを低減できる。上述のように、フラッシュメモリは「シーク時間」が短く、これによって回転するディスクからの単一の操作より短い時間で、多数の参照先読出し操作を行うことができる。これらの参照先読出しを用いて、オンライン微粒度マッピングを実行し、圧縮及び重複排除等のスペース節約に役立つ特徴を統合できる。更にこれらの参照先読出し操作により、ストレージコントローラ１７４は、ストレージデバイス１７６ａ〜１７６ｍ内に記憶されたユーザデータにアクセスする（読出し及び書込み）代わりに、完全にマッピングテーブル内でバルクアレイタスクを実行できるようになる。
【００９７】
ブロック１１０２では、大型又はバルクアレイタスクを受信する。例えば、バルクコピー又は移動要求は数ダース又は数百の仮想マシンのバックアップに対応してよく、更にこのような仮想マシンによってエンタープライズアプリケーションデータを実行及び更新する。このデータの全ての移動、分岐、クローン又はコピーに関連する受信した要求に関連するデータの量は、１６ギガバイト（ＧＢ）又はそれ以上にもなり得る。ユーザデータにアクセスしてこの要求を処理した場合、要求に対して莫大な処理時間を使うことになり得、システムの性能が低下する。更に、仮想化環境は典型的には物理環境よりも少ない総入出力（Ｉ／Ｏ）リソースを有する。
【００９８】
ブロック１１０４では、ストレージコントローラ１７４は、新たなキーの範囲を古いキーの範囲と関連付ける、受信した要求に対応する指標を記憶してよく、これらのキーの範囲は両方共、受信した要求に対応する。例えば、受信した要求が１６ＧＢのデータをコピーすることである場合、１６ＧＢのデータに対応する開始キー値及び終了キー値を記憶してよい。また、開始キー値及び終了キー値はそれぞれ、ボリュームＩＤ、受信した要求内の論理又は仮想アドレス、スナップショットＩＤ、セクタ番号等を含んでよい。一実施形態では、この情報は、一次索引３１０、二次索引３２０、三次索引３３０等の索引に記憶された情報とは別個に記憶してよい。しかしながら、後の要求の処理中に索引にアクセスする際にこの情報にアクセスしてよい。
【００９９】
ブロック１１０６では、データストレージコントローラ１７４は、ユーザデータへの過去のアクセスを必要とせずに、受信した要求の完了を示す応答を、クライアントコンピュータシステム１１０ａ〜１１０ｃの対応するクライアントに対して伝達してよい。従って、ストレージコントローラ１７４は、短い休止時間で又は休止時間なしで、及びプロセッサ１２２への負荷なしに、受信した要求を処理できる。
【０１００】
ブロック１１０８では、ストレージコントローラ１７４は、マッピングテーブルの古いキーを置換する新たなキーに対応するマッピングテーブルの１つ又は複数のレコードを更新するために、条件、指標又はフラグ若しくはバッファ更新操作を設定してよい。移動要求及びコピー要求の両方について、新たなキーに対応する１つ又は複数の新たなレコードをマッピングテーブルに挿入してよい。上述のように生成された新たな最高レベルにキーを挿入してよい。移動要求について、対応する新たなレコードをマッピングテーブルに挿入した後で、１つ又は複数の古いレコードをマッピングテーブルから除去してよい。即座に又は後の時点において、マッピングテーブルのレコードは実際に更新される。
【０１０１】
ゼロイング又は消去要求について、キー値の範囲が連続するバイナリ・ゼロに現在対応しているという指標を記憶してよい。更に上述のように、オーバレイテーブルを用いて、有効でない（又はもはや有効でなくなった）キー値を識別してよい。ユーザデータを上書きする必要はない。消去要求について、「自由となった」ストレージ位置を、後続の記憶（書込み）要求のための新たなデータに後で割り当てる際に、ユーザデータを上書きしてよい。外部主導デフラグ要求について、セクタの再編成のために連続したアドレスを選択してよく、これはクライアントコンピュータシステム１１０ａ〜１１０ｃのクライアント上で実行されるアプリケーションに役立つ。
【０１０２】
ストレージコントローラ１７４が、新たなキーのうちの１つに対応するデータストレージアクセス要求を受信した場合（条件ブロック１１１０）、及び新たなキーが既にマッピングテーブルに挿入されている場合（条件ブロック１１１２）、ブロック１１１４において、新たなキーを用いて索引及びマッピングテーブルにアクセスしてよい。例えば、新たなキーを用いて一次索引３１０、二次索引３２０又は三次索引３３０のいずれかにアクセスしてよい。索引がマッピングテーブルの１つ又は複数のページを識別する場合、これら識別されたページにアクセスしてよい。ブロック１１１６では、ストレージアクセス要求を、新たなキーに関連するマッピングテーブルに見られる物理ポインタ値を用いて処理してよい。
【０１０３】
ストレージコントローラ１７４が、新たなキーのうちの１つに対応するデータストレージアクセス要求を受信した場合（条件ブロック１１１０）、及び新たなキーが既にマッピングテーブルに挿入されている場合（条件ブロック１１１２）、ブロック１１１８において、対応する古いキーを用いて索引及びマッピングテーブルにアクセスしてよい。古いキーの範囲及び新たなキーの範囲を保持するストレージにアクセスして、対応する古いキー値を決定してよい。索引がマッピングテーブルの１つ又は複数のページを識別する場合、これら識別されたページにアクセスしてよい。ブロック１１２０では、ストレージアクセス要求を、古いキーに関連するマッピングテーブルに見られる物理ポインタ値を用いて処理してよい。
【０１０４】
ここで図１４に移ると、ストレージデバイス内のデータレイアウトアーキテクチャのある実施形態を示す、一般化されたブロック図が示されている。一実施形態では、ストレージデバイス１７６ａ〜１７６ｍ内のデータストレージ位置は、独立デバイスの冗長アレイ（ＲＡＩＤ）に配置してよい。図示したように、データレイアウトアーキテクチャに従って、異なるタイプのデータをストレージデバイス１７６ａ〜１７６ｋに記憶してよい。一実施形態では、各ストレージデバイス１７６ａ〜１７６ｋはＳＳＤである。ＳＳＤ内の割り当て単位は、ＳＳＤ内の１つ又は複数のイレースブロックを含んでよい。
【０１０５】
ストレージデバイス１７６ａ〜１７６ｋのうちの１つ又は複数内に含まれる１つ又は複数のページ内に、ユーザデータ１２３０を記憶してよい。ＲＡＩＤストライプとストレージデバイス１７６ａ〜１７６ｋのうちの１つとの各交点において、記憶された情報を一連の論理ページとしてフォーマットしてよい。各論理ページは、ページ内のデータのためのヘッダ及びチェックサムを含んでよい。読出し要求が出される場合、これは１つ又は複数の論理ページに対するものであってよく、各ページのデータをチェックサムで確認してよい。各論理ページは、そのページのためのチェックサム（「メディア」チェックサムと呼んでもよい）を含むページヘッダを含んでよいため、データのための実際のページサイズは、１つの論理ページより小さくてよい。いくつかの実施形態では、ＲＡＩＤパリティ情報等のデバイス間復元データ１２５０を記憶するページについて、ページヘッダはより小さくてよく、これによってパリティページはデータページのページチェックサムを保護できる。他の実施形態では、複数のデータページチェックサムのうちの１つのチェックサムが、対応するデータページを包含するパリティページのチェックサムと同一となるように、デバイス間復元データ１２５０を記憶するパリティページのチェックサムを算出してよい。このような実施形態では、パリティページのためのヘッダはデータページのためのヘッダより小さい必要はない。
【０１０６】
デバイス間ＥＣＣデータ１２５０は、ユーザデータを保持する他のストレージデバイス上の１つ又は複数のページから生成されたパリティ情報であってよい。例えば、デバイス間ＥＣＣデータ１２５０は、ＲＡＩＤデータレイアウトアーキテクチャで使用されるパリティ情報であってよい。記憶された情報は、ストレージデバイス１７６ａ〜１７６ｋの連続した論理ページとして示されているが、論理ページをランダムな順序で配置してもよいことは当該技術分野で公知であり、ここで各ストレージデバイス１７６ａ〜１７６ｋはＳＳＤである。
【０１０７】
デバイス内ＥＣＣデータ１２４０は、デバイス内冗長スキームが使用する情報を含んでよい。デバイス内冗長スキームは、所定のストレージデバイス内の、パリティ情報等のＥＣＣ情報を利用する。このデバイス内冗長スキーム及びそのＥＣＣ情報は所定のデバイスに対応し、所定のデバイス内に保持してよいが、デバイス自体によって内部で生成及び維持され得るＥＣＣとは別個のものである。一般に、内部で生成及び維持されるデバイスのＥＣＣは、デバイスが含まれているシステムにとって不可視である。
【０１０８】
デバイス内ＥＣＣデータ１２４０は、デバイス内エラー修復データ１２４０と呼んでもよい。デバイス内エラー修復データ１２４０を用いて、潜在的セクタエラー（ｌａｔｅｎｔ  ｓｅｃｔｏｒ  ｅｒｒｏｒ：ＬＳＥ）から所定のストレージデバイスを保護してよい。ＬＳＥは、所定のセクタを評価するまで検出されないエラーのことである。従って、当該セクタに過去に記憶されたいずれのデータが失われ得る。単一のＬＳＥは、これがストレージデバイスの故障の後のＲＡＩＤ再構築中に発生した場合、データ損失につながり得る。用語「セクタ」は典型的には、ディスク上の所定のトラック内のセグメント等、ＨＤＤ上のストレージの基本単位を表す。潜在的セクタエラー（ＬＳＥ）は、ストレージデバイス内の所定のセクタ又はその他のストレージユニットがアクセス不可能となった場合に発生する。当該セクタに対する読出し又は書込み操作を完了することができなくなり得る。更に、訂正不可能なエラー訂正コード（ＥＣＣ）エラーが存在し得る。
【０１０９】
所定のストレージデバイス内に含まれるデバイス内エラー復元データ１２４０を用いて、当該ストレージデバイス内のデータストレージ信頼性を向上させることができる。装置内エラー復元データ１２４０は、ＲＡＩＤデータレイアウトアーキテクチャで利用されるパリティ情報等、別のストレージデバイス内に含まれ得る他のＥＣＣ情報に更に加えられるものである。
【０１１０】
各ストレージデバイス内において、デバイス内エラー修復データ１２４０を１つ又は複数のページに記憶してよい。当業者には公知であるように、デバイス内エラー修復データ１２４０は、ユーザデータ１２３０内の情報の選択されたビット上の機能を実行することによって得てよい。ＸＯＲベース操作を用いて、デバイス内エラー修復データ１２４０に記憶するパリティ情報を導出してよい。デバイス内冗長スキームの他の例には、単一パリティ検査（ＳＰＣ）、最大距離分離（ＭＤＳ）消去コード、インタリーブされたパリティチェックコード（ＩＰＣ）、ＳＰＣ及びＭＤＳのハイブリッドコード（ＭＤＳ＋ＳＰＣ）及び列対角パリティ（ＣＤＰ）が挙げられる。もたらされる信頼性及びオーバヘッドに関して、スキームはデータ１２４０をコンピュータ処理する方法に応じて変化する。
【０１１１】
上述のエラー復元情報に加えて、デバイス上のある領域に関するチェックサム値を算出するようにシステムを構成してよい。例えば、情報をデバイスに書込む際にチェックサムを算出してよい。このチェックサムはシステムに記憶される。デバイスから情報を読出す際、システムはチェックサムを再び算出して、これを初めに記憶した値と比較してよい。２つのチェックサムが異なる場合、情報は適切に読出されておらず、システムは他のスキームを用いてデータを復元してよい。チェックサム関数の例としては、巡回冗長検査（ＣＲＣ）、ＭＤ５、ＳＨＡ−１が挙げられる。
【０１１２】
ＳＳＤ内のイレースブロックは、複数のページを含んでよい。あるページは４ＫＢのデータストレージスペースを含んでよい。イレースブロックは６４ページ、即ち２５６ｋＢを含んでよい。他の実施形態では、イレースブロックは１メガバイト（ＭＢ）もの大きさであってよく、２５６ページを含んでよい。割り当て単位サイズは、割り当て単位のオーバヘッドトラッキングを低減するために十分に大きいサイズのユニット及び比較的少ない数のユニット両方を提供する様式で選択してよい。一実施形態では、１つ又は複数の状態テーブルが、割り当てユニットの状態（割り当て済み、自由、消去済み、エラー）、摩耗レベル、割り当てユニット内で発生した（修正可能及び／又は修正不可能な）エラー数の計数を維持してよい。一実施形態では、割り当てユニットはＳＳＤの総ストレージ性能に対して比較的小さい。他の量のページ、イレースブロック及び他のユニット構成も可能であり、予期される。
【０１１３】
メタデータ１２６０は、ページヘッダ情報、ＲＡＩＤストライプ識別情報、１つ又は複数のＲＡＩＤストライプに関するログデータ等を含んでよい。様々な実施形態において、各ストライプの最初の単一のメタデータページは、他のストライプのヘッダから再構築してよい。代替として、このページはパリティ分割において異なるオフセットであってよく、これにより、デバイス間パリティでデータを保護できる。一実施形態では、メタデータ１２６０は、このデータが重複排除されないことを示す特定のフラグ値を記憶するか又はこのフラグ値と関連してよい。
【０１１４】
デバイス間パリティ保護及びデバイス内パリティ保護に加えて、ストレージデバイス１７６ａ〜１７６ｋの各ページは、各所定のページ内に記憶されたチェックサム等、更なる保護を含んでよい。ヘッダの後及び対応するデータの前のページ内にチェックサム（８バイト、４バイト又はそれ以外）を配置してよく、これは圧縮されてよい。更に別のレベルの保護のために、チェックサム値にデータ位置情報を含めてよい。各ページのデータはこの情報を含んでよい。この情報は仮想アドレス及び物理アドレスの両方を含んでよい。この情報は、セクタ番号、データチャンク及びオフセット番号、トラック番号、プレーン番号等も同様に含んでよい。このマッピング情報を用いて、テーブルのコンテンツが失われた場合にアドレス変換マッピングテーブルを再構築してもよい。
【０１１５】
一実施形態では、ストレージデバイス１７６ａ〜１７６ｋ内の各ページは、データタイプ１２３０〜１２６０等の特定のタイプのデータを記憶する。代替として、ページは２つ以上のタイプのデータを記憶してよい。ページヘッダは、対応するページのためのデータタイプを識別するための情報を記憶してよい。一実施形態では、デバイス内冗長スキームはデバイスを、ユーザデータの記憶のための位置のグループに分割する。例えば分割は、ＲＡＩＤレイアウト内のストライプに対応するデバイス内の位置のグループであってよい。図示を簡略化するために、図示した実施例では２つのストライプ１２７０ａ、１２７０ｂのみを示す。
【０１１６】
一実施形態では、ストレージコントローラ１７４内のＲＡＩＤエンジンは、ストレージデバイス１７６ａ〜１７６ｋのためにあるレベルの保護を使用することを決定してよい。例えばＲＡＩＤエンジンは、ストレージデバイス１７６ａ〜１７６ｋに対してＲＡＩＤ二重パリティを利用することを決定してよい。デバイス間冗長データ１２５０は、対応するユーザデータから生成されたＲＡＩＤ二重パリティ値を表してよい。一実施形態では、ストレージデバイス１７６ｊ、１７６ｋは二重パリティ情報を記憶してよい。ＲＡＩＤパリティ保護の他のレベルも可能であり、予期されることを理解されたい。更に、他の実施形態では、二重パリティ情報のストレージは、各ＲＡＩＤストライプに関してストレージデバイス１７６ｊ、１７６ｋ内に記憶するのではなく、ストレージデバイス間で循環してよい。図示及び説明を簡略化するために、二重パリティ情報のストレージは、ストレージデバイス１７６ｊ、１７６ｋに記憶されるものとして示している。各ストレージデバイス１７６ａ〜１７６ｋは複数のページを含んでよいが、図示を簡略化するために、ページ１２１２及びページ１２２０のみを標識してある。
【０１１７】
上述の実施形態はソフトウェアを備えてよいことに留意されたい。このような実施形態では、本方法及び／又は機構を実装するプログラム命令を伝達してよく、またコンピュータ可読媒体上に記憶させてよい。プログラム命令を記憶するよう構成された数多くのタイプの媒体が利用可能であり、これにはハードディスク、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュメモリ、プログラム可能なＲＯＭ（ＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）及び他の様々な形態の揮発性又は不揮発性ストレージが含まれる。
【０１１８】
様々な実施形態において、本明細書に記載の方法及び機構の１つ又は複数の部分は、クラウドコンピューティング環境の一部分を形成してよい。このような実施形態では。１つ又は複数の様々なモデルに応じたサービスとして、インターネットを介してリソースを提供してよい。このようなモデルとしては、サービスとしてのインフラストラクチャ（Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ：ＩａａＳ）、サービスとしてのプラットフォーム（Ｐｌａｔｆｏｒｍ  ａｓ  ａ  Ｓｅｒｖｉｃｅ：ＰａａＳ）及びサービスとしてのソフトウェア（Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ：ＳａａＳ）が挙げられる。ＩａａＳでは、コンピュータインフラストラクチャをサービスとして提供する。このような場合、コンピュータ設備は一般に、サービスプロバイダが所有して操作する。ＰａａＳモデルでは、ソフトウェアツール及び開発者がソフトウェアソリューションを開発するために使用する下層の設備をサービスとして提供してよく、サービスプロバイダがホストとなる。ＳａａＳは典型的には、オンデマンドサービスとしてのサービスプロバイダライセンス付与ソフトウェアを含む。このサービスプロバイダはソフトウェアのホストとなってよく、又は所定の期間だけソフトウェアを顧客に頒布してよい。上述のモデルの数多くの組み合わせが可能であり、予期される。
【０１１９】
以上の実施形態はかなり詳細に説明したが、当業者には、以上の開示を十分に理解すれば、数多くの変形及び修正が明らかになるであろう。以下の請求項は全てのこのような変形及び修正を包含するものと解釈されることを意図している。
【図１】
2014529126.tif 000003
【図２】
2014529126.tif 000004
【図３Ａ】
2014529126.tif 000005
【図３Ｂ】
2014529126.tif 000006
【図４】
2014529126.tif 000007
【図５Ａ】
2014529126.tif 000008
【図５Ｂ】
2014529126.tif 000009
【図６】
2014529126.tif 000010
【図７】
2014529126.tif 000011
【図８】
2014529126.tif 000012
【図９】
2014529126.tif 000013
【図１０】
2014529126.tif 000014
【図１１】
2014529126.tif 000015
【図１２】
2014529126.tif 000016
【図１３】
2014529126.tif 000017
【図１４】
2014529126.tif 000018
【国際調査報告】
2014529126.tif 000019
2014529126.tif 000020
2014529126.tif 000021