(57)【特許請求の範囲】
【請求項１】
コンピューティング環境における、プロセッサ・デバイスによる重複排除システムのハッシュ・ベース・マルチテナンシのための方法であって、
単一のハッシュ・ベース・インデックス・テーブルを用いて、マルチテナント重複排除システムにおいてデータ・セグメントを分離するためにテナント識別（ＩＤ）を入力データの一部であるかのようにハッシュ値計算に組み込むこと、
前記複数のテナントのそれぞれを分離してリポジトリに格納することをさらに実行させることを含み、前記リポジトリは仮想ストレージ・プールおよび物理トレージ・プールの少なくとも一方であり、かつ、前記リポジトリは専用ストレージ・プールおよび共用ストレージ・プールの少なくとも一方である、前記リポジトリに格納すること、
を前記プロセッサ・デバイスに実行させることを含む、方法。
【請求項２】
前記テナントＩＤを組み込むことに基づいてハッシュ値を生成することをさらに含む、請求項１に記載の方法。
【請求項３】
データ・セグメントに前記テナントＩＤの使用を加えた連結に対して前記ハッシュ値計算を行い、人工的な拡張されたデータ・セグメントを生成することをさらに含む、請求項１に記載の方法。
【請求項４】
２つのデータセグメントの内容が同一であったとしても、複数のテナントが異なるデータ・セグメントを指し示すように、異なるハッシュ値を複数のテナントのそれぞれに割り当てることをさらに含む、請求項１に記載の方法。
【請求項５】
前記テナントＩＤを前記リポジトリと関連付けることをさらに含む、請求項１に記載の方法。
【請求項６】
前記複数のテナントのそれぞれについての前記データ・セグメントを暗号化するために暗号化キーを使用すること、および
データ・セグメントのセキュリティのために、前記複数のテナントのそれぞれについての各テナントＩＤを暗号化すること、
の少なくとも一方を実施することをさらに含む、請求項１に記載の方法。
【請求項７】
コンピューティング環境における、重複排除システムのハッシュ・ベース・マルチテナンシのためのシステムであって、
重複排除エンジンと、
前記コンピューティング環境内で動作可能であり、前記重複排除エンジンを制御する少なくとも１つのプロセッサ・デバイスと、
を含み、前記プロセッサ・デバイスは、
単一のハッシュ・ベース・インデックス・テーブルを用いて、マルチテナント重複排除システムにおいてデータ・セグメントを分離するために、テナント識別（ＩＤ）を入力データの一部であるかのようにハッシュ値計算に組み込み、
前記複数のテナントのそれぞれを分離してリポジトリに格納し、前記リポジトリは仮想ストレージ・プールおよび物理トレージ・プールの少なくとも一方であり、かつ、前記リポジトリは専用ストレージ・プールおよび共用ストレージ・プールの少なくとも一方である、
システム。
【請求項８】
前記少なくとも１つのプロセッサ・デバイスは、前記テナントＩＤを組み込むことに基づいてハッシュ値を生成する、請求項７に記載のシステム。
【請求項９】
前記少なくとも１つのプロセッサ・デバイスは、データ・セグメントに前記テナントＩＤの使用を加えた連結に対して前記ハッシュ値計算を行い、人工的な拡張されたデータ・セグメントを生成する、請求項７に記載のシステム。
【請求項１０】
前記少なくとも１つのプロセッサ・デバイスは、２つのデータセグメントの内容が同一であったとしても、複数のテナントが異なるデータ・セグメントを指し示すように、異なるハッシュ値を複数のテナントのそれぞれに割り当てる、請求項７に記載のシステム。
【請求項１１】
前記少なくとも１つのプロセッサ・デバイスは、前記テナントＩＤを前記リポジトリと関連付ける、請求項７に記載のシステム。
【請求項１２】
前記少なくとも１つのプロセッサ・デバイスは、
前記複数のテナントのそれぞれについての前記データ・セグメントを暗号化するために暗号化キーを使用すること、および
データ・セグメントのセキュリティのために、前記複数のテナントのそれぞれについての各テナントＩＤを暗号化すること、
の少なくとも一方を実施する、請求項７に記載のシステム。
【請求項１３】
コンピューティング環境における、プロセッサ・デバイスによる、重複排除システムのハッシュ・ベース・マルチテナンシのためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、コンピュータ可読プログラム・コード部分を含み、前記コンピュータ可読プログラム・コード部分は、
単一のハッシュ・ベース・インデックス・テーブルを用いて、マルチテナント重複排除システムにおいてデータ・セグメントを分離するためにテナント識別（ＩＤ）を入力データの一部であるかのようにハッシュ値計算に組み込む第１の実行可能部分
を含み、
２つのデータセグメントの内容が同一であったとしても、複数のテナントが異なるデータ・セグメントを指し示すように、異なるハッシュ値を複数のテナントのそれぞれに割り当てること、および
前記複数のテナントのそれぞれを分離してリポジトリに格納することであって、前記リポジトリは仮想ストレージ・プールおよび物離トレージ・プールの少なくとも一方であり、かつ、前記リポジトリは専用ストレージ・プールおよび共用ストレージ・プールの少なくとも一方である、分離してリポジトリに格納すること、
の少なくとも一方を実行する第２の実行可能部分をさらに含む、
コンピュータ・プログラム。
【請求項１４】
前記テナントＩＤを組み込むことに基づいてハッシュ値を生成する第２の実行可能部分をさらに含む、請求項１３に記載のコンピュータ・プログラム。
【請求項１５】
データ・セグメントに前記テナントＩＤの使用を加えた連結に対して前記ハッシュ値計算を行い、人工的な拡張されたデータ・セグメントを生成する第２の実行可能部分をさらに含む、請求項１３に記載のコンピュータ・プログラム。
【請求項１６】
前記テナントＩＤを前記リポジトリと関連付ける第３の実行可能部分をさらに含む、請求項１３に記載のコンピュータ・プログラム。
【請求項１７】
前記複数のテナントのそれぞれについての前記データ・セグメントを暗号化するために暗号化キーを使用すること、および
データ・セグメントのセキュリティのために、前記複数のテナントのそれぞれについての各テナントＩＤを暗号化すること、
の少なくとも一方を実施する第２の実行可能部分をさらに含む、請求項１３に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピューティング・システムに関し、より具体的には、重複排除（deduplication）システムのハッシュ・ベース・マルチテナンシのためのシステムおよび方法に関する。
【背景技術】
【０００２】
今日の社会において、コンピュータ・システムは当たり前のものになっている。コンピュータ・システムは、職場、家庭、または学校に見出すことができる。データ処理システムは、一般的には、少なくとも１つの中央処理ユニット（ＣＰＵ）を有するプロセッサ・サブシステム、入力／出力（Ｉ／Ｏ）サブシステム、メモリ・サブシステム、およびバス・サブシステムを含む。データ処理システムのメモリ・サブシステムは、一般的には、バック・エンド・ストレージに接続されたコントローラを有するデータ・ストレージ・システムを含む。コントローラは、データ処理システムとバック・エンド・ストレージとの間のデータの流れを制御する。
【０００３】
これらのデータ処理システムは、データを処理し、格納するためのデータ・ストレージ・システムまたはディスク・ストレージ・システムを含むことができる。毎日大量のデータを処理する必要があり、現在の傾向は、近い将来、これらの量は増加の一途をたどり続けるだろうと示唆している。ほとんどの場合、コンピューティング・システムは、大量のデータの格納に対するますます厳しい需要に対処するための重大な問題に直面している。この問題を解決するための効率的な方法は、重複排除を用いるものである。重複排除システムの基礎となる考えは、利用可能データの大部分が何度も繰り返しコピーされ、変更することなく転送されるという事実を利用して、繰り返されるデータを見つけ、その最初の出現のみを格納するというものである。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従って、データ重複排除およびクラウド・コンピューティングを改善し、最適化することが望ましい。
【課題を解決するための手段】
【０００５】
一実施形態において、コンピューティング環境における、プロセッサ・デバイスを用いた、重複排除システムのハッシュ・ベース・マルチテナンシのための方法が提供される。単なる例として、一実施形態において、方法は、単一のハッシュ・ベース・インデックス・テーブルを用いて、マルチテナント重複排除システムにおいてデータ・セグメントを分離するためにテナント識別（ＩＤ）を入力データの一部であるかのようにハッシュ値計算に組み込む。
【０００６】
別の実施形態において、コンピューティング環境における、プロセッサ・デバイスを用いた、重複排除システムのハッシュ・ベース・マルチテナンシのためのコンピュータ・システムが提供される。コンピュータ・システムは、コンピュータ可読媒体と、コンピュータ可読媒体と動作可能に通信するプロセッサとを含む。単なる例として、一実施形態において、プロセッサは、単一のハッシュ・ベース・インデックス・テーブルを用いて、マルチテナント重複排除システムにおいてデータ・セグメントを分離するためにテナント識別（ＩＤ）を入力データの一部であるかのようにハッシュ値計算に組み込む。
【０００７】
さらに別の実施形態において、コンピューティング環境における、プロセッサ・デバイスを用いた、重複排除システムのハッシュ・ベース・マルチテナンシのためのコンピュータ・プログラム製品が提供される。コンピュータ可読ストレージ媒体は、その上に格納されたコンピュータ可読プログラム・コード部分を有する。コンピュータ可読プログラム・コード部分は、単一のハッシュ・ベース・インデックス・テーブルを用いて、マルチテナント重複排除システムにおいてデータ・セグメントを分離するためにテナント識別（ＩＤ）を入力データの一部であるかのようにハッシュ値計算に組み込む第１の実行可能部分を含む。
【０００８】
前述の例示的な方法の実施形態に加えて、他の例示的なシステムおよびコンピュータ・プログラム製品の実施形態が提供され、関連する利点を与える。前述の概要は、詳細な説明においてさらに後述される概念の選択を、簡略化された形で導入するために提供されている。本概要は、特許請求される主題の重要な特徴または必須の特徴を識別することを意図するものではなく、また、特許請求される主題の範囲を決定する一助として使用されることを意図するものでもない。特許請求される主題は、背景において言及した任意のまたは全ての不利点を解決する実施に限定されるものではない。
【０００９】
本発明の利点が容易に理解されるように、上記に簡単に説明される本発明のさらに具体的な説明が、添付図面に示される特定の実施形態を参照することによって与えられる。これらの図面は本発明の典型的な実施形態を示すものに過ぎず、従って、その範囲を限定していると考えるべきではないことを理解した上で、添付図面を用いて付加的な具体性および詳細さをもって本発明を記載し、説明する。
【図面の簡単な説明】
【００１０】
【図１】本発明の態様を実現することができる、例示的なストレージ・デバイスを有するコンピューティング・システム環境を示すブロック図である。
【図２】本発明の態様を実現することができる、コンピュータ・システムにおけるデータ・ストレージ・システムのハードウェア構造を示すブロック図である。
【図３】本発明の態様を実現することができる、データ重複排除のための参照ベースのデータ・ブロック位置合わせのための例示的な方法を示すフローチャートである。
【図４】本発明の態様を実現することができる、テナンシを無視する際の重複排除システムを示すブロック図である。
【図５】本発明の態様を実現することができる、ハッシュ関数がハッシュ値の計算時にテナントＩＤを考慮に入れる際の重複排除システムを示すブロック図である。
【発明を実施するための形態】
【００１１】
近年、クラウド・コンピューティングは、データの格納を改善する利益をもたらしている。クラウド・コンピューティングは、インターネットなどのネットワーク・インフラストラクチャを介するコンピューティング・リソースおよびデータのアクセスである。コンピューティング・リソースおよびデータ・ストレージは、「クラウド」、すなわち、ネットワークのリンクされたデータ・センタにより提供することができる。データ・センタの各々は、コンピューティング・リソース、ならびにデータ・ストレージおよび検索能力を提供する複数のサーバを含むことができる。クラウド・コンピューティングのユーザは、一般に、「クラウド」の基礎となるデータ・センタ・インフラストラクチャに関する知識、またはこれに対する制御を必要としない。ユーザは、必要に応じて、コンピューティング・リソースおよびデータ・ストレージ機能にアクセスすることができる。
【００１２】
さらに、多くのサービス・プロバイダは、ストレージ・システムにおけるストレージ・ドメインを容易にするマルチテナンシ・サービスを提供することを必要とする。ストレージ・サーバ（例えば、物理プール）内にそれぞれの専用ストレージ・リソースを有することができる、ストレージ・ドメインは、「テナント・ドメイン」と呼ばれる。ストレージ・クライアントおよび／またはクライアントのグループは、データの性質に基づき、テナント・ドメインを使用するまたは使用しないように選択することが可能である。クライアントは、データをグローバル・プール（テナンシ・サポートなしに）内に置くことができ、一方、他のデータを特定のプール上に置くことができ、従って、この目的のために一意のテナント・ドメインを有することになる。このモデルは、マルチテナント・ストレージと呼ばれる。マルチテナント・ストレージ・サービスにおいて、サービス・プロバイダ（ＳＰ）は、１）テナント・ドメイン間のデータ・セグメントの漏れ、２）テナントのドメイン境界を越えること、すなわち別のテナントによる１つのテナントのデータ・ブロックへのアクセス（偶然であっても）、および３）他のテナント・ドメインに対する、１つのテナント・ドメインのデータ・ブロックのデータ破損の影響を防止することによって、テナント・データの各々を保護することを求められる。
【００１３】
例えば、コピー・サービス範囲の管理において、コピー・サービス関係は、ユーザ指定のリソースのセットのドメインに限定することができる。さらに、ユーザＩＤは、これらが特定のドメインに対してのコピー・サービス要求の発行だけを可能にするように構成することができる。このことは、いずれかのホストまたはユーザが特定のテナント・ドメイン境界を越えてコピー・サービス作業を開始するのを防止することによって、マルチテナンシを容易にする。マルチテナント機能に加えて、コピー・サービス・ドメインは、異種環境を互いから隔離するために汎用のパーティション化を提供することもできる。
【００１４】
クラウド・コンピューティングに加えて、データ重複排除は、コンピューティング・ストレージ・システムにおいて極めて重要であり、活気のある分野である。データ重複排除とは、冗長データの低減および／または排除を言う。データ重複排除において、ファイル、データ・ストリーム、または何らかの他の形のデータとすることができるデータ・オブジェクトは、チャンクまたはブロックと呼ばれる１つまたは複数の部分に分解される（チャンクおよび／またはブロックは、データ・セグメントと呼ぶこともできる）。データ重複排除プロセスにおいて、データの重複コピー（duplicate copy）が低減または排除され、それぞれ、最小量の冗長コピーまたはデータの単一コピーを残ることになる。データ重複排除システムの目的は、重複データの単一コピーを格納することである。この目的を達成する際の問題は、通常大容量のリポジトリ内の重複データ・パターンを効率的に見つけ、そのデータ・パターンを、効率的に重複排除する形式でストレージ内に格納することである。
【００１５】
大部分の重複排除システムは、ハッシュ・ベース・インデックスを使用して、システム内に格納される既存のデータ・セグメントを見つける。新しいデータ・ストリームが重複排除システムに入ると、データはデータ・セグメントに分解される。各データ・セグメントには、計算された代表ハッシュ値が存在する。ハッシュ・ベース・インデックス内で、新しいハッシュ値のそれぞれを検索し、新しいハッシュ値が見つかった場合、一致するデータ・セグメントは同一と見なされ、新しいデータ・セグメントはシステムに書き込まれない。代わりに、既存のデータ・セグメントが指し示される。言い換えれば、同じハッシュ値を有するデータ・セグメント（例えば、ブロック）が識別され、そのデータ・ブロックの１つのコピーだけが格納される。ブロックのハッシュ値と関連して、同じデータを有するブロックの全ての位置へのポインタがテーブル内に格納される。
【００１６】
重複排除は、ストレージ・スペースの節約のために使用されるが、マルチテナンシの場合、重複排除は、実際には、同じシステムを用いる異なるテナント間のデータ・セグメントの共有をもたらし、クライアントはそのことを進んで受け入れない場合がある。従って、クラウド・コンピューティングにおいてデータ重複排除システムを改善するための必要性が存在する。
【００１７】
問題に対処する１つの方法は、各テナントについての専用ハッシュ・ベース・インデックスを保持することである。重複排除ハッシュ・ベース・インデックスは通常、システムのコア内にあり、最も大きいリソースを消費するものの１つであるので、これは、メモリ・スペース、ディスク・スペース、およびシステム内の他の最適化されたリソースのようなリソースの無駄をもたらし得る。従って、１つの実施形態において、本発明は、１つだけの（単一の）ハッシュ・ベース・インデックスを使用するが、テナントＩＤを、入力データの一部であるかのようにハッシュ計算に組み込む。テナントＩＤを、入力データの一部であるかのようにハッシュ計算に組み込むことにより、オリジナルのデータ・セグメントのコンテンツが同一である場合でも、２つの異なるテナントは、２つの異なるデータ・セグメントを指し示す。
【００１８】
一実施形態において、本発明は、コンピューティング環境における、プロセッサ・デバイスを用いた重複排除システムのハッシュ・ベース・マルチテナンシを提供する。一実施形態において、単なる例として、方法は、マルチテナント重複排除システムにおいてデータ・セグメントを分離するために、単一のハッシュ・ベース・インデックス・テーブルを用いて、入力データの一部であるかのように、テナント識別（ＩＤ）をハッシュ値計算に組み込む。一実施形態において、マルチテナント重複排除システムにおいてデータ・セグメントを分離するために、単一のハッシュ・ベース・インデックス・テーブルを用いて、テナントＩＤをハッシュ値計算に組み込むことは、ファイル・レベルではなく、ブロック・レベルのストレージを処理する重複排除エンジンを有するバックアップ・ストレージ・デバイスにおいて実施される。単一のハッシュ・ベース・インデックス・テーブルを用いて、入力データの一部であるかのようにテナントＩＤをハッシュ値計算に組み込むことにより、テナント・ドメイン間のデータ・セグメントの漏れ、および別のテナントによる１つまたは複数のテナントのデータ・ブロックへのアクセス（偶然であっても）、ならびに他のテナント・ドメインに対する、１つのテナントのデータ・ブロックのデータ破損の影響が防止される。
【００１９】
一実施形態において、本発明は、マルチテナント（クラウド）重複排除システムのハッシュ・ベース・マルチテナンシを提供する。本発明は、ファイルを、ファイル・レベルで複数のファイル・セグメントにセグメント化するのではなく、データを分離するために、入力データの一部であるかのように、テナントＩＤをハッシュ計算に組み込み、ファイル・レベルではなく、ブロック・レベルでストレージを処理する重複排除エンジンを有するバックアップ・ストレージ・デバイスにおいて実施される。一実施形態において、クライアントが、プライバシーおよび機密性を強化するために、各テナントごとに物理ストレージ（例えば、ディスクの分離）を必要とする場合、各テナントごとに専用および／または共用の仮想および／または物理ストレージ・プールが提供される。例えば、重複排除エンジンを有するバックアップ・ストレージの場合、ストレージ・システムにおいて定められるようなテナントごとの専用物理ストレージ・プールはないが、専用ストレージ・プールおよび／またはテナント間で共有される共有ストレージ・プールから構成できる１つのリポジトリがある。付加的な実施形態において、本発明は、テナント・データを、異なるストレージ・プール上に置くことを可能にし、従って、両方の場合が可能となる。一般に、テナント用の専用物理ストレージ・プールは、１つの選択肢であり、本発明は、その達成を助ける。付加的な実施形態において、本発明は、物理ストレージ・プールだけでなく、仮想ストレージ・プールも用いる。
【００２０】
重複排除エンジンが単一の重複排除ハッシュ・ベース・インデックスを保持しながらテナントのデータを完全に分離するので、上述の機能を有する重複排除エンジンは、この分離アクティビティをサポートする。また、権限のないユーザが、同じシステムを使用する全ての他のクライアントのデータの破損を引き起こし得る周知のハッシュ衝突データでそのデータをシードすることにより、権限のないユーザ（攻撃）がハッシュ分離およびハッシュ計算技術を突き止めるのを防止するようにデータのセキュリティおよびプライバシーを強化するために、本発明は、テナントＩＤ（暗号化される）を用いて上述の攻撃の影響を排除し、そうした攻撃の実施をはるかに困難にする暗号化のレベルを導入する。
【００２１】
現況の技術で使用される「テナント」の定義を理解することに加えて、本明細書で使用される用語「テナント」は、クライアント、クライアントのグループを含む／表すことができる。一方、本明細書で使用される用語「テナント・ドメイン」は、データのプールを含む／表すことができる。例えば、クライアントＸは、クライアントＸのデータの一部をグローバル・プール（テナントＩＤなし）に置き、他のデータを特定のプール（一意のテナントＩＤ）に置くように選択することができる。あるいは、本発明が仮想化エンジン（例えば、ＩＢＭ（登録商標）仮想化エンジンＴＳ７７００）に拡張された場合、「テナントＩＤ」は、「ストレージ・プール」、すなわち、データの「非クライアント」ベースの分離、と関連付けることができる。
【００２２】
ここで図１を参照すると、コンピューティング・システム環境の例示的なアーキテクチャ１０が示される。コンピュータ・システム１０は、中央処理ユニット（ＣＰＵ）１２を含み、ＣＰＵ１２は、通信ポート１８およびメモリ・デバイス１６に接続される。通信ポート１８は、通信ネットワーク２０と通信する。通信ネットワーク２０およびストレージ・ネットワークは、サーバ（ホスト）２４およびストレージ・デバイス１４を含むことができるストレージ・システムと通信するように構成することができる。ストレージ・システムは、ハードディスクドライブ（ＨＤＤ）デバイス、ソリッド・ステート・デバイス（ＳＳＤ）等を含むことができ、これらは、ｒｅｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｄｅｐｅｎｄｅｎｔ  ｄｉｓｋｓ（ＲＡＩＤ）に構成することができる。後述されるような操作は、システム１０中にまたは他の場所に位置するストレージ・デバイス１４上で実行することができ、システム１０は、独立しておよび／または他のＣＰＵデバイス１２と共に動作する複数のメモリ・デバイス１６を有することができる。メモリ・デバイス１６は、電気的消去可能プログラム可能読出し専用メモリ（ＥＥＰＲＯＭ）などのメモリ、または関連デバイスのホストを含むことができる。メモリ・デバイス１６およびストレージ・デバイス１４は、信号伝達媒体を介して、ＣＰＵ１２に接続される。さらに、ＣＰＵ１２は、通信ポート１８を通じて、複数の付加的なコンピュータ・ホスト・システム２４が取り付けられた通信ネットワーク２０に接続される。加えて、メモリ・デバイス１６およびＣＰＵ１２は、コンピューティング・システム１０の各コンポーネント内に埋め込まれ、含められてもよい。各ストレージ・システムは、協働して、または別個のメモリ・デバイス１６および／またはＣＰＵ１２として動作する、別個のおよび／または個別のメモリ・デバイス１６およびＣＰＵ１２を含むこともできる。
【００２３】
図２は、本発明によるコンピュータ・システムにおけるデータ・ストレージ・システムのハードウェア構造を示す例示的なブロック図２００である。ホスト・コンピュータ２１０、２２０、２５０が示されており、各々が、データ・ストレージ・システム２００の一部としてデータ処理を実施するための中央処理ユニットとして働く。クラスタ・ホスト／ノード（物理または仮想デバイス）２１０、２２０および２２５は、データ・ストレージ・システム２００において、本発明の目的を達成するための１つまたは複数の新しい物理デバイスまたは論理デバイスとすることができる。一実施形態において、単なる例として、データ・ストレージ・システム２００は、ＩＢＭ（登録商標）Ｓｙｓｔｅｍ  Ｓｔｏｒａｇｅ（商標）ＤＳ８０００（商標）として実装することができる。ネットワーク接続２６０は、ファイバ・チャネル・ファブリック、ファイバ・チャネル・ポイント・ツー・ポイント・リンク、ファイバ・チャネル・オーバー・イーサネット・ファブリック、またはポイント・ツー・ポイント・リンク、ＦＩＣＯＮ若しくはＥＳＣＯＮ  Ｉ／Ｏインターフェース、他のいずれかのＩ／Ｏインターフェース・タイプ、無線ネットワーク、有線ネットワーク、ＬＡＮ、ＷＡＮ、異種、同種、パブリック（すなわち、インターネット）、プライベート、またはこれらの任意の組み合わせとすることができる。ホスト２１０、２２０および２２５は、ローカルであっても、または１つまたは複数の位置間でまたは分散させてもよく、ファイバ・チャネル、ＦＩＣＯＮ、ＥＳＣＯＮ、イーサネット、光ファイバ、無線、同軸アダプタなど、ストレージ・コントローラ２４０への任意のタイプのファブリック（またはファブリック・チャネル）（図２には図示されていない）またはネットワーク・アダプタ２６０を備えていてもよい。従って、データ・ストレージ・システム２００は、通信するための適切なファブリック（図２には図示されていない）またはネットワーク・アダプタ２６０を備えている。データ・ストレージ・システム２００は、図２では、ストレージ・コントローラ２４０およびクラスタ・ホスト２１０、２２０および２５０を含むように示される。クラスタ・ホスト２１０、２２０および２５０は、クラスタ・ノードを含むことができる。
【００２４】
本明細書に説明される方法のより明確な理解を容易にするために、図２において、ストレージ・コントローラ２４０は、マイクロプロセッサ２４２、システム・メモリ２４３および不揮発性ストレージ（「ＮＶＳ」）２１６を含む単一の処理ユニットとして示される。幾つかの実施形態においては、ストレージ・コントローラ２４０は、複数の処理ユニットからなり、各処理ユニットは、それ自体のプロセッサ・コンプレックスおよびシステム・メモリを有し、データ・ストレージ・システム２００内の専用ネットワークによって相互接続されることに留意されたい。ストレージ２３０（図３では、２３０ａ、２３０ｂおよび２３０ｎと表記される）は、ストレージ・アレイなど、１つまたは複数のストレージ・デバイスからなるものとすることができ、これらのストレージ・デバイスは、（ストレージ・ネットワークによって）ストレージ・コントローラ２４０に接続され、１つまたは複数のクラスタ・ホスト２１０、２２０および２２５は、各ストレージ・コントローラ２４０に接続される。
【００２５】
幾つかの実施形態において、ストレージ２３０内に含められるデバイスは、ループ・アーキテクチャで接続されてもよい。ストレージ・コントローラ２４０は、ストレージ２３０を管理し、ストレージ２３０に向けられた書き込みおよび読み取り要求の処理を容易にする。ストレージ・コントローラ２４０のシステム・メモリ２４３は、本発明の機能および方法ステップを実行し、本明細書で説明されるストレージ２３０を実行および管理するために、プロセッサ２４２がアクセスすることができる、プログラム命令およびデータを格納する。一実施形態において、システム・メモリ２４３は、オペレーション・ソフトウェア２５０を含み、またはこれと関連付けられ、またはこれと通信し、本明細書で説明される方法および動作を実施する。図２に示されるように、システム・メモリ２４３はまた、それぞれ書き込み／読み込み要求およびその関連データを指す「書き込みデータ」および「読み込みデータ」をバッファリングするために、本明細書では「キャッシュ・メモリ」とも呼ばれる、ストレージ２３０のためのキャッシュ２４５を含むことも、またはこれと通信することもできる。一実施形態において、キャッシュ２４５は、システム・メモリ２４３の外部のデバイス中で割り当てられるが、なおマイクロプロセッサ２４２によってアクセス可能なままであり、本明細書で説明される動作を実行することに加えて、データ損失に対する付加的なセキュリティを提供するのに役立つことができる。
【００２６】
幾つかの実施形態において、キャッシュ２４５は、揮発性メモリおよび不揮発性メモリによって実装され、データ・ストレージ・システム２００の性能向上のために、ローカル・バス（図２には図示されない）を介してマイクロプロセッサ２４２に結合される。データ・ストレージ・コントローラ内に含まれるＮＶＳ２１６は、マイクロプロセッサ２４２によってアクセス可能であり、他の図に記載のような本発明の動作および実行のための、付加的なサポートを提供するのに役立つ。ＮＶＳ２１６は、「永続的」キャッシュまたは「キャッシュ・メモリ」とも呼ばれ、内部に格納されるデータを保持するために外部電力を用いることもまたは用いないこともある不揮発性メモリによって実装される。ＮＶＳ２１６は、本発明の目的を達成するのに適した任意の目的で、キャッシュ２４５内におよびキャッシュ２４５によって格納され得る。幾つかの実施形態において、データ・ストレージ・システム２００に対する電力損失の場合に、バッテリなどのバックアップ電源（図２には図示されない）が、内部に格納されたデータを保持するのに十分な電力をＮＶＳ２１６に供給する。特定の実施形態において、ＮＶＳ２１６の容量は、キャッシュ２４５の総容量より少ないか、またはこれに等しい。
【００２７】
ストレージ２３０は、ストレージ・アレイなど、１つまたは複数のストレージ・デバイスで物理的に構成されてもよい。ストレージ・アレイは、ハードディスクなどの個々のストレージ・デバイスの論理的グループ化である。特定の実施形態において、ストレージ２３０は、ＪＢＯＤ（Ｊｕｓｔ  ａ  Ｂｕｎｃｈ  ｏｆ  Ｄｉｓｋｓ）アレイまたはＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）アレイからなる。物理ストレージ・アレイの集まりをさらに結合して、ランクを形成することができ、ランクは、物理ストレージを論理構成から切り離す。ランク中のストレージ・スペースは、論理ボリュームに割り当てることができ、論理ボリュームは、書き込み／読み取り要求の中で指定されるストレージ位置を定める。
【００２８】
一実施形態において、単なる例として、図２に示すようなストレージ・システムは、論理ボリュームまたは単に「ボリューム」を含むことができ、異なる種類の割り当てを有することがある。ストレージ２３０ａ、２３０ｂおよび２３０ｎは、データ・ストレージ・システム２００中のランクとして示され、本明細書では、ランク２３０ａ、２３０ｂおよび２３０ｎと呼ばれる。ランクは、データ・ストレージ・システム２００に対してローカルであってもよく、または、物理的遠隔位置に位置してもよい。言い換えれば、ローカル・ストレージ・コントローラは、遠隔ストレージ・コントローラと接続し、遠隔位置におけるストレージを管理することができる。ランク２３０ａは、２つの全体的ボリューム２３４および２３６、ならびに１つの部分的ボリューム２３２ａを有して構成されるように示される。ランク２３０ｂは、別の部分的ボリューム２３２ｂを有して示される。このように、ボリューム２３２は、ランク２３０ａと２３０ｂとにまたがって割り当てられる。ランク２３０ｎは、ボリューム２３８に完全に割り当てられるものとして示される。すなわち、ランク２３０ｎは、ボリューム２３８に対する物理ストレージ全体を指す。上記の例から、ランクは、１つまたは複数の部分的および／または全体的ボリュームを含むように構成できることが理解されるであろう。ボリュームおよびランクはさらに、いわゆる「トラック」に分割することができ、トラックは、ストレージの固定ブロックを表す。従って、トラックは所定のボリュームと関連付けられ、トラックには所定のランクを与えることができる。
【００２９】
ストレージ・コントローラ２４０は、重複排除モジュール２５５、テナントＩＤモジュール２５７、単一のハッシュ・ベース・インデックス・テーブル２５９、暗号化モジュール２６１、およびテナント分離モジュール２６３を含むことができる。重複排除文字２５５、テナントＩＤモジュール２５７、単一のハッシュ・ベース・インデックス・テーブル２５９、暗号化モジュール２６１、およびテナント分離モジュール２６３は、ストレージ・コントローラ２４０、ホスト２１０、２２０、２２５およびストレージ・デバイス２３０のそれぞれのコンポーネントと協働することができる。重複排除文字２５５、テナントＩＤモジュール２５７、単一のハッシュ・ベース・インデックス・テーブル２５９、暗号化モジュール２６１、およびテナント分離モジュール２６３は、構造的に１つの完全なモジュールであってもよく、または他の個々のモジュールと関連付けることおよび／またはそれらと共に含まれてもよい。重複排除文字２５５、テナントＩＤモジュール２５７、単一のハッシュ・ベース・インデックス・テーブル２５９、暗号化モジュール２６１、およびテナント分離モジュール２６３は、キャッシュ２４５または他のコンポーネント内に配置してもよい。
【００３０】
ストレージ・コントローラ２４０は、ホスト・コンピュータ２１０、２２０、２２５へのファイバ・チャネル・プロトコルを制御するための制御スイッチ２４１と、全てのストレージ・コントローラ２４０を制御するためのマイクロプロセッサ２４２と、ストレージ・コントローラ２４０の動作を制御するためのマイクロプログラム（オペレーション・ソフトウェア）２５０と、制御のためのデータと、データを一時的に格納（バッファリング）するためのキャッシュ２４５と、キャッシュ２４５がデータの読み出しおよび書き込みを行うのを補助するためのバッファ２４４と、ストレージ・デバイス２３０との間のデータ転送を制御するプロトコルを制御するための制御スイッチ２４１と、重複排除モジュール２５５と、テナントＩＤモジュール２５７と、単一のハッシュ・ベース・インデックス・テーブル２５９と、暗号化モジュール２６１と、情報を設定することができるテナント分離モジュール２６３とを含むことができる。本発明を用いて複数のバッファ２４４を実装して、本明細書に述べる動作を補助することができる。一実施形態において、クラスタ・ホスト／ノード２１０、２２０、２２５およびストレージ・コントローラ２４０は、インターフェースとしてのネットワーク・アダプタ（これは、ファイバ・チャネルとすることができる）２６０を通じて、すなわち「ファブリック」と呼ばれる少なくとも１つのスイッチを介して接続される。
【００３１】
一実施形態において、ホスト・コンピュータ、すなわち１つまたは複数の物理若しくは仮想デバイス２１０、２２０、２２５、およびストレージ・コントローラ２４０は、インターフェースとしてのネットワーク・アダプタ（これは、ファイバ・チャネルとすることができる）２６０を通じて、すなわち「ファブリック」と呼ばれる少なくとも１つのスイッチを介して接続される。一実施形態において、図２に示すシステムの動作について説明する。マイクロプロセッサ２４２は、メモリ２４３を制御して、ホスト・デバイス（物理または仮想）２１０からのコマンド情報と、ホスト・デバイス（物理または仮想）２１０を識別するための情報とを格納することができる。制御スイッチ２４１、バッファ２４４、キャッシュ２４５、オペレーション・ソフトウェア２５０、マイクロプロセッサ２４２、メモリ２４３、ＮＶＳ２１６、重複排除モジュール２５５、テナントＩＤモジュール２５７、単一のハッシュ・ベース・インデックス・テーブル２５９、暗号化モジュール２６１、およびテナント分離モジュール２６３は、互いに通信し、これらは、別個のコンポーネントまたは１つの個々のコンポーネントとすることができる。また、オペレーション・ソフトウェア２５０など、全てのとは言わないまでも幾つかのコンポーネントが、メモリ２４３と共に含まれてもよい。図示されるデバイス内の各コンポーネントは、本発明に適した目的で、共にリンクされてよく、互いに通信することができる。
【００３２】
上述のように、重複排除モジュール２５５、テナントＩＤモジュール２５７、単一のハッシュ・ベース・インデックス・テーブル２５９、暗号化モジュール２６１、およびテナント分離モジュール２６３は、キャッシュ２４５または他のコンポーネント内に配置されてもよい。従って、重複排除モジュール２５５、テナントＩＤモジュール２５７、単一のハッシュ・ベース・インデックス・テーブル２５９、暗号化モジュール２６１、およびテナント分離モジュール２６３の１つまたは複数は、ストレージ・アーキテクチャおよびユーザ・プリファレンスに基づいて、必要に応じて使用することができる。図示されるデバイス内のコンポーネントの各々は、本発明に適した目的で、共にリンクされてよく、互いに通信することができる。
【００３３】
図３は、本発明の態様を実現することができる、重複排除システムにおけるハッシュ・ベース・マルチテナンシのための付加的な例示的方法３００を示すフローチャートである。方法３００は、単一のハッシュ・ベース・インデックス・テーブルを用いて、マルチテナント重複排除システムにおいてデータ・セグメントを分離するためにテナント識別（ＩＤ）を入力データの部分であるかのようにハッシュ値計算に組み込むこと（ステップ３０４）から始まる。方法は終了する（ステップ３０６）。
【００３４】
一実施形態において、新しいデータ・ストリームが重複排除システムに入ると、データはデータ・セグメントに分解され、各データ・セグメントについて、計算される代表ハッシュ値がある。データ・ストリームがデータ・セグメントに分解される場合、各データ・セグメントは依然としてハッシュ値を受け取るが、ハッシュ値は、テナントＩＤも考慮に入れる方法で計算される。一実施形態において、ハッシュ関数がテナントＩＤを考慮に入れるようにする１つより多い方法がある。例えば、１つの方法では、以下の実施を用いる。各テナントが一意の４バイトＩＤ、すなわちテナントＩＤを有するシステムにおいて、４千（Ｋ）のデータ・セグメント・サイズが処理されると仮定する。マルチテナンシ・サポートなしで使用される同じハッシュ・アルゴリズム（例えば、暗号ハッシュ関数ＳＨＡ−２）をここで同様に使用することができる。しかしながら、データ・セグメントに対するハッシュのみを計算する代わりに、４０９６バイトのデータ・セグメントに４バイトのテナントＩＤを加えた連結に対して計算を行い、単に計算用の４１００バイトのサイズ（４０９６バイト＋４バイト）の人工的な「拡張された」データ・セグメントを生成する。このように、テナントの両方の４Ｋデータ・セグメントが同一であっても、２つの異なるテナントは、異なる２つの値を得る。従って、この例は、一般的な場合における１つの可能な実施とすることができ、以下のハッシュ関数の式において示される。：
ＨＡＳＨ｛Ｆ（４０９６バイト・データ・セグメント，４バイト・テナントＩＤ  Ａ）｝＝ハッシュ値Ａ                  （１）
ここで、Ｆは関数であり、４０９６（ここでは、任意のサイズのバイト・サイズを使用できる）はデータ・セグメントのバイト・サイズであり、テナントＩＤ  Ａは、任意に「Ａ」と表記されたデータ・セグメントについてのテナントＩＤであり、ハッシュ値Ａは、テナントＩＤを組み込むときの、データ・セグメント「Ａ」についての計算されたハッシュ値である。この実施においては、１つのハッシュ・ベース・インデックスだけが使用される。
【００３５】
ここで図４を参照すると、本発明の態様を実現できる、テナンシを無視する場合の重複排除システムを示すブロック図４００である。図４は、テナンシを無視する場合の重複排除システムの例を示す。図４は、テナント・ドメインＡから受け取ったデータ・ストリーム４０２と、テナント・ドメインＢから受け取ったデータ・ストリーム４０６とを示す。テナントＡから受け取ったデータ・ストリーム４０２内には、３つのデータ・セグメント４０４Ａ〜Ｃ（データ・セグメントの＃Ａ１〜Ａ３）がある。テナントＢから受け取ったデータ・ストリーム４０６内には、３つのデータ・セグメント４０８Ａ〜Ｃ（データ・セグメントの＃Ｂ１〜Ｂ３）がある。各データ・セグメントは、ハッシュ関数を用いて計算されたハッシュ値を含む。例えば、テナントＡから受け取ったデータ・ストリーム４０２内の３つのデータ・セグメント４０４について、データ・セグメント＃Ａ１は、「Ｘ」に等しいハッシュ値（Ａ１）を有する（Ｈａｓｈ（Ａ１）＝Ｘとして図４に見られる）。データ・セグメント＃Ａ２は、「Ｙ」に等しいハッシュ値（Ａ２）を有する（Ｈａｓｈ（Ａ２）＝Ｙとして図４に見られる）。データ・セグメント＃Ａ３は、「Ｚ」に等しいハッシュ値（Ａ３）を有する（Ｈａｓｈ（Ａ３）＝Ｚとして図４に見られる）。テナントＢから受け取ったデータ・ストリーム４０６内の３つのデータ・セグメント４０８について、データ・セグメント＃Ｂ１は、「Ｖ」に等しいハッシュ値（Ｂ１）を有する（Ｈａｓｈ（Ｂ１）＝Ｖとして図４に見られる）。データ・セグメント＃Ｂ２は、「Ｗ」に等しいハッシュ値（Ｂ２）を有する（Ｈａｓｈ（Ｂ２）＝Ｗとして図４に見られる）。しかしながら、データ・セグメント＃Ｂ３は、「Ｚ」に等しいハッシュ値（Ｂ３）を有する（Ｈａｓｈ（Ｂ３）＝Ｚとして図４に見られる）。２つのデータ・セグメント４０４Ｃおよび４０８Ｃ（テナントＡのデータ・セグメント＃Ａ３  ４０４ＣおよびテナントＢのデータ・セグメント＃Ｂ３  ４０８Ｃ）は同じハッシュ値（例えば、図４に見られるように、Ｈａｓｈ（Ｂ＝３）＝Ｚ）を有するため、一致するデータ・セグメントは同一と考えられ、新しいデータ・セグメントはシステムに書き込まれない。２つのストリームは、同じデータ・セグメントを指し示すことになる。
【００３６】
図５は、本発明の態様を実現することができる、ハッシュ値の計算時にハッシュ関数がテナントＩＤを考慮に入れる場合の重複排除システム５００を示すブロック図である。図５は、テナントＡから受け取ったデータ・ストリーム５０２と、テナントＢから受け取ったデータ・ストリーム５０６とを示す。テナントＡから受け取ったデータ・ストリーム５０２内には、３つのデータ・セグメント５０４Ａ〜Ｃ（データ・セグメントの＃Ａ１〜Ａ３）がある。テナントＢから受け取ったデータ・ストリーム５０６内には、３つのデータ・セグメント５０８Ａ〜Ｃ（データ・セグメントの＃Ｂ１〜Ｂ３）がある。各データ・セグメントは、ハッシュ関数を用いて計算されたハッシュ値を含むが、このハッシュ値は、テナントＩＤも考慮に入れることによって計算される。一実施形態において、所定数のバイトのデータ・セグメントにテナントＩＤを加えた連結に対して計算を行って、単に計算用の人工的な「拡張された」データ・セグメント・サイズを生成する。
【００３７】
例えば、同じアーキテクチャ構造２つのデータ・ストリーム５０２および５０６を用いて、テナントＡから受け取ったデータ・ストリーム５０２内の３つのデータ・セグメント５０４、および、テナントＢから受け取ったデータ・ストリーム５０６内の３つのデータ・セグメント５０８が存在する。この例では、テナントＡから受け取ったデータ・ストリーム５０２について、テナントＩＤの５１０Ａ〜Ｃは今や、マルチテナント重複排除システムにおいてデータ・セグメント５０４Ａ〜Ｃを分離するために、単一のハッシュ・ベース・インデックス・テーブルを用いて、入力データの一部であるかのようにハッシュ値計算に組み込まれる。同様に、テナントＩＤの５１２Ａ〜Ｃは今や、マルチテナント重複排除システムにおいてデータ・セグメント５０８Ａ〜Ｃを分離するために、単一のハッシュ・ベース・インデックス・テーブルを用いて、入力データの一部であるかのようにハッシュ値計算に組み込まれる。
【００３８】
従って、マルチテナント重複排除システムにおいてデータ・セグメントを分離するために、単一のハッシュ・ベース・インデックス・テーブルを用いて、入力データの一部であるかのように、テナントＩＤ  ５１０および５１２をハッシュ値計算に組み込むことにより、データ・セグメント＃Ａ３  ４０４Ｃおよびデータ・セグメント＃Ｂ３  ４０８Ｃとは違って、データ・セグメント＃Ａ３  ５０４Ｃおよびデータ・セグメント＃Ｂ３  ５０８Ｃは、２つの異なるハッシュ値を有することになり、異なるテナント内の同一のデータ・セグメントが、同じデータ・セグメントを指し示すことになるのを防止する。
【００３９】
例えば、データ・セグメント＃Ａ３  ５０４Ｃは今や、テナントＩＤ  ５１０Ｃを含む新しく計算されたハッシュ値（例えば、Ｈａｓｈ（Ａ３、テナントＩＤ  Ａ）＝Ｚａとして図５に示されるような）を有する。さらに、テナントＢから受け取った第２のデータ・ストリーム５０６について、データ・セグメント＃Ｂ３は、テナントＩＤ  ５１２Ｃを含む新しく計算されたハッシュ値（例えば、Ｈａｓｈ（Ｂ３、テナントＩＤ  Ｂ）＝Ｚｂとして図５に示されるような）を有する。２つのデータ・セグメント５０４Ｃおよび５０８Ｃ（テナントＡのデータ・セグメント＃Ａ３およびテナントＢのデータ・セグメント＃Ｂ３）は、異なるハッシュ値を有するので、一致するデータ・セグメントは、もはや同一と見なされず、新しいデータ・セグメントはシステムに書き込まれる。２つのストリームは今や、同じデータ・セグメントを指し示すことにならない。このように、テナントの両方のデータ・セグメントが同一であってもおよび／または同一のオリジナルのデータ・ストリームに由来するものであっても、２つの異なるテナントは、２つの異なる値を得る。データ・セグメント５０４および５０８にテナントＩＤ  ５１０Ａ〜Ｃおよび５１２Ａ〜Ｃの使用を加えた連結に対して、ハッシュ値の計算を行うことができることに留意されたい。テナントＡおよびテナントＢは、互いに独立した別個の物理ストレージ・プール内に分離される。テナントＩＤ  ５１０Ａ〜Ｃおよび５１２Ａ〜Ｃは、テナントごとにそれぞれの物理ストレージ・プールと関連付けられる。言い換えれば、組み込まれたテナントＩＤ  ５１０Ｃを含む新しいハッシュ値を用いることにより、データ・セグメント＃Ａ３  ５０４Ｃは、テナントＡに割り当てられる別個の物理ストレージ・プールに関連付けられる。さらに、データ・セグメント＃Ｂ３は、組み込まれたテナントＩＤ  ５１２Ｃを含む新しい異なるハッシュ値（組み込まれたテナントＩＤ  ５１０Ｃと比較して）を有し、テナントＢに割り当てられる別個の仮想および／または物理ストレージ・プールと関連付けられる。従って、データ・セグメント５０４および５０８は分離される。このように、テナント・ドメイン間のデータ・セグメントの漏れ、別のテナントによる１つのテナントのデータ・ブロックへのアクセス（偶然であっても）、および他のテナントに対する、１つのテナントのデータ・ブロックのデータ破損の影響が排除される。
【００４０】
一実施形態において、本発明は、コンピューティング環境内のプロセッサ・デバイスを用いて、重複排除システムにおけるハッシュ・ベース・マルチテナンシを提供する。一実施形態において、単なる例として、本発明は、マルチテナント重複排除システムにおいてデータ・セグメントを分離するために、単一のハッシュ・ベース・インデックス・テーブルを用いて、入力データの一部であるかのように、テナント識別（ＩＤ）をハッシュ値計算に組み込む。新しいハッシュ値は、テナントＩＤの組み込みに基づいて生成される。一実施形態において、ハッシュ値計算は、データ・セグメントにテナントＩＤの使用を加えた連結に対して行われ、人工的な拡張されたデータ・セグメントを生成する。異なるデータ・セグメントが同一であったとしても、複数のテナントが異なるデータ・セグメントを指し示すように、異なるハッシュ値を複数のテナントのそれぞれに割り当てる。複数のテナントのそれぞれは分離され、リポジトリに格納される。リポジトリは仮想ストレージ・プールおよび物理ストレージ・プールの少なくとも一方であり、かつ、リポジトリは専用ストレージ・プールおよび共有ストレージ・プールの少なくとも一方である。一実施形態において、テナントＩＤは、リポジトリと関連付けられる。１つのテナントが他のテナントのデータ・セグメントにアクセスするのを禁止することにより、各データ・セグメントへのアクセスが制御される。このように、テナント・ドメイン間のデータ・セグメントの漏れ、別のテナントによる１つのテナントのデータ・ブロックへのアクセス（偶然であっても）、および他のテナントに対する、１つのテナントのデータ・ブロックのデータ破損の影響が排除される。
【００４１】
一実施形態において、複数のテナントのそれぞれのデータ・セグメントを暗号化するために暗号化キーを使用すること、およびデータ・セグメントのセキュリティのために複数のテナントのそれぞれについての各テナントＩＤを暗号化することのそれぞれを、および／またはそのうちの少なくとも１つを実施する。
【００４２】
本発明は、システム、方法、および／またはコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピューティング可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体（単数または複数）を含むことができる。
【００４３】
コンピュータ可読ストレージ媒体は、命令実行デバイスにより用いられる命令を保持および格納することができる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的リストとして、以下のもの：すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラム可能読み出し専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピーディスク、パンチ・カードまたは命令が記録された溝内の隆起構造のような機械的にエンコードされたデバイス、および上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波または他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波（例えば、光ファイバ・ケーブルを通る光パルス）、またはワイヤを通って伝送される電気信号などの、一時的な信号自体として解釈されるべきではない。
【００４４】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング／処理デバイスに、または、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワークおよび／または無線ネットワークなどのネットワークを介して、外部コンピュータまたは外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、および／またはエッジ・サーバを含むことができる。各コンピューティング／処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体内に格納する。
【００４５】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、または、「Ｃ」プログラミング言語若しくは類似のプログラミング言語などの通常の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されるいずれかのソース・コード若しくはオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、または完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、または外部コンピュータへの接続がなされる場合もある（例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて）。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラム可能論理アレイ（ＰＬＡ）を含む電子回路は、コンピュータ可読プログラム命令の状態除法を用いて電子回路を個人化することによりコンピュータ可読プログラム命令を実行し、本発明の態様を実施することができる。
【００４６】
本発明の態様は、本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート図および／またはブロック図を参照して説明される。フローチャート図および／またはブロック図の各ブロック、ならびにフローチャート図および／またはブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
【００４７】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータまたは他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャートおよび／またはブロック図の１つまたは複数のブロック内で指定された機能／動作を実装するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャートおよび／またはブロック図の１つまたは複数のブロックにおいて指定された機能／動作を実装する命令を含む製品を製造するようにすることもできる。
【００４８】
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、または他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータまたは他のプログラム可能装置上で実行される命令が、フローチャートおよび／またはブロック図の１つまたは複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにすることもできる。
【００４９】
図面内のフローチャートおよびブロック図は、本発明の種々の実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能および動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための１つまたは複数の実行可能命令を含む、モジュール、セグメント、またはコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される２つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、またはこれらのブロックはときとして逆順で実行されることもある。ブロック図および／またはフローチャート図の各ブロック、およびブロック図および／またはフローチャート図内のブロックの組み合わせは、指定された機能または動作を実行する、または専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
【符号の説明】
【００５０】
１０：コンピュータ・システム
１４：ストレージ・システム
１６：メモリ・デバイス
１８：通信ポート
２０：通信ネットワーク
２４：サーバ
２００：データ・ストレージ・システム
２１０、２２０、２２５：ホスト・コンピュータ
２１６：不揮発性ストレージ（ＮＶＳ）
２３０、２３０ａ、２３０ｂ、２３０ｎ：ストレージ
２４０：ストレージ・コントローラ
２４１：制御スイッチ
２４２：マイクロプロセッサ
２４３：システム・メモリ
２４４：バッファ
２４５：キャッシュ
２５０：オペレーション・ソフトウェア
２５５：重複排除モジュール
２５７：テナントＩＤモジュール
２５９：単一のハッシュ・ベース・インデックス・テーブル
２６０：ネットワーク接続、ネットワーク・アダプタ
２６１：暗号化モジュール
２６３：テナント分離モジュール
４０２、４０６、５０２、５０６：データ・ストリーム
４０４Ａ〜Ｃ、４０８Ａ〜Ｃ、５０４Ａ〜Ｃ、５０８Ａ〜Ｃ：データ・セグメント
５１０Ａ〜Ｃ、５１２Ａ〜Ｃ：テナントＩＤ
【図１】
0006568212.tif 000002
【図２】
0006568212.tif 000003
【図３】
0006568212.tif 000004
【図４】
0006568212.tif 000005
【図５】
0006568212.tif 000006