(57)【要約】      （修正有）【課題】データを送信器から受信器にアップロードする際に重複排除を行って使用する帯域幅を低減する。【解決手段】受信器１１０は以前にアップロードされたデータのフィンガープリントディクショナリ１３０を維持する。送信器１２０は追加のアップロードすべきデータを有する場合に複数のデータユニット１４２夫々のフィンガープリント１２４を抽出して受信器１１０に送信する。受信器１１０はフィンガープリントディクショナリ１３０を確認し、アップロードすべきデータユニット１４２を判断して送信器１２０に通知する。送信器１２０は通知されたデータユニット１４２を受信器１１０に送信する。【選択図】図２Ａ
2015179523.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサと、
プログラム命令を備えるメモリとを備える装置であって、前記プログラム命令は、データストアサービスを実装する前記少なくとも１つのプロセッサによって、
フィンガープリントをフィンガープリントディクショナリに保存し、前記フィンガープリントディクショナリの各フィンガープリントは、前記データストアに保存された前記データ内のそれぞれのデータユニットを一意に識別し、
ネットワークを介してゲートウェイ装置から、データ量のそれぞれのデータユニットに対応する少なくとも１つのフィンガープリントを受信し、前記ゲートウェイ装置は前記データストアサービスから離れた顧客サイトに位置し、前記データ量は前記顧客サイトの顧客装置によって前記ゲートウェイ装置上に生成または修正され、
前記フィンガープリントディクショナリを、前記少なくとも１つのフィンガープリントを検索して、前記フィンガープリントが前記フィンガープリントディクショナリ内にあるか、または前記フィンガープリントディクショナリ内にないかを判断し、フィンガープリントが前記フィンガープリントディクショナリ内にないと判断することは、対応するデータユニットを前記データストアにアップロードすべきであることを示し、
前記ゲートウェイ装置に前記ネットワークを介して、前記検索によって判断した、１または複数のアップロードすべきデータユニットの通知を送信し、
前記ゲートウェイ装置から前記ネットワークを介して、前記通知された１または複数のデータユニットを前記データストアサービスに保存するために受信することを備えるシステム。
【請求項２】
各フィンガープリントはそれぞれのデータユニットのハッシュである、請求項１に記載のシステム。
【請求項３】
前記ハッシュは、前記それぞれのデータユニットに適用される暗号学的に強い一方向ハッシュ関数によって生成される、請求項２に記載のシステム。
【請求項４】
前記フィンガープリントディクショナリを、前記デートウェイ装置から受信し、および前記データストアサービスに保存した各データユニットに対応する前記フィンガープリントで更新することをさらに備える、請求項１に記載のシステム。
【請求項５】
前記データはデータブロックとして前記データストアに保存され、各データブロックは２つ以上のデータユニットを備える、請求項１に記載のシステム。
【請求項６】
前記プログラム命令は、前記少なくとも１つのプロセッサによって、仮想化データストアとして前記データストアサービスを複数の顧客に前記ネットワークを介して提供し、前記データストアに保存された前記データは前記複数の顧客のそれぞれの顧客データを含み、前記装置は前記複数の顧客の１つに関連し、前記ゲートウェイ装置は前記データストアから前記それぞれの顧客の前記顧客データの少なくとも一部分をローカルにキャッシュすることを特徴とする請求項１に記載のシステム。
【請求項７】
１または複数のアップロードすべきデータユニットの表示は、前記検索によって前記フィンガープリントディクショナリにフィンガープリントを発見出来ないデータユニットを表示することを特徴とする請求項１に記載のシステム。
【請求項８】
１または複数のコンピュータ装置上に実装されるデータストアサービスによって実行され、
フィンガープリントをデータストアに保存するデータとしてフィンガープリントディクショナリに保存し、前記データは複数のデータユニットを備え、前記フィンガープリントディクショナリの各フィンガープリントは、前記データストアに保存された前記データ内のそれぞれのデータユニットを一意に識別し、
ネットワークを介して装置から、前記装置でキャッシュされた異なるデータユニットにそれぞれ対応する１または複数のフィンガープリントを受信し、
前記フィンガープリントディクショナリを、前記装置から受信した前記１または複数のフィンガープリントそれぞれのために検索して、前記フィンガープリントが前記フィンガープリントディクショナリ内にあるか、または前記フィンガープリントディクショナリ内にないかを判断し、フィンガープリントが前記フィンガープリントディクショナリ内にないと判断することは、対応するデータユニットを前記データストアにアップロードすべきであることを示し、
前記装置に前記ネットワークを介して、前記フィンガープリントディクショナリを検索することによって判断した、１または複数のアップロードすべきデータユニットの通知を送信し、
前記装置から前記ネットワークを介して、前記通知された１または複数のデータユニットを受信し、各受信したデータユニットは、前記フィンガープリントディクショナリ内にはないフィンガープリントに対応し、
前記装置から受信した前記１または複数のデータユニットを前記データストアに保存することを備える方法。
【請求項９】
各フィンガープリントはそれぞれのデータユニットのハッシュである、請求項８に記載の方法。
【請求項１０】
前記ハッシュは、前記それぞれのデータユニットに適用される暗号学的に強い一方向ハッシュ関数によって生成される、請求項９に記載の方法。
【請求項１１】
前記方法はさらに、前記装置から受信した前記１または複数のデータユニットを前記データストアに保存することを備える、請求項８に記載の方法。
【請求項１２】
前記データストアサービスは、前記データストアを仮想化データストアとして、複数の顧客に前記ネットワークを介して提供するよう構成されることを特徴とする請求項８に記載の方法。
【請求項１３】
前記データストアサービスの複数の顧客それぞれの顧客識別子に関連し、
前記フィンガープリントディクショナリを検索することは、所与の顧客の顧客識別子にしたがって、所与の顧客データに対応するフィンガープリントの中のみから検索することをさらに備える、請求項８に記載の方法。
【請求項１４】
前記通知された１または複数のデータユニットを前記装置から受信後に、前記検索によって前記フィンガープリントディクショナリ内にあると表示された少なくとも１つのフィンガープリントは、その後前記フィンガープリントディクショナリから削除されたことを判断し、
前記判断に応えて、前記装置に前記ネットワークを介して、前記少なくとも１つのフィンガープリントに対応する少なくとも１つのデータユニットの通知を送信し、
前記装置から前記ネットワークを介して、前記通知された少なくとも１つのデータユニットを受信すること、
をさらに備える、請求項８に記載の方法。
【請求項１５】
１または複数のコンピュータがデータストアサービスを実装することによって実行されるとき、コンピュータ実行可能なプログラム命令を保存する非一時的コンピュータアクセス可能ストレージメディアであって、
フィンガープリントをデータストアに保存するデータとしてフィンガープリントディクショナリに保存し、前記データは複数のデータユニットを備え、前記フィンガープリントディクショナリの各フィンガープリントは、前記データストアに保存された前記データ内のそれぞれのデータユニットを一意に識別し、
ネットワークを介して装置から、前記装置でキャッシュされた異なるデータユニットにそれぞれ対応する１または複数のフィンガープリントを受信し、
前記フィンガープリントディクショナリを、前記装置から受信した前記１または複数のフィンガープリントそれぞれのために検索して、前記フィンガープリントが前記フィンガープリントディクショナリ内にあるか、または前記フィンガープリントディクショナリ内にないかを判断し、フィンガープリントが前記フィンガープリントディクショナリ内にないと判断することは、対応するデータユニットを前記データストアにアップロードすべきであることを示し、
前記装置に前記ネットワークを介して、前記フィンガープリントディクショナリを検索することによって判断した、１または複数のアップロードすべきデータユニットの通知を送信し、
前記装置から前記ネットワークを介して、前記通知された１または複数のデータユニットを受信し、各受信したデータユニットは、前記フィンガープリントディクショナリ内にはないフィンガープリントに対応し、
前記装置から受信した前記１または複数のデータユニットを前記データストアに保存することから構成されることを特徴とする非一時的コンピュータアクセス可能ストレージメディア。
【請求項１６】
各フィンガープリントはそれぞれのデータユニットのハッシュである、請求項１５に記載の非一時的コンピュータアクセス可能ストレージメディア。
【請求項１７】
前記ハッシュは、それぞれのデータユニットに適用される暗号学的に強い一方向ハッシュ関数によって生成される、請求項１６に記載の非一時的コンピュータアクセス可能ストレージメディア。
【請求項１８】
前記データストアサービスは、フィンガープリントディクショナリを、前記装置から受信してデータストアに保存する各データユニットに対応するフィンガープリントで更新することをさらに備える、請求項１５に記載の非一時的コンピュータアクセス可能ストレージメディア。
【請求項１９】
前記データは複数のデータブロックを備え、各データブロックは複数のデータユニットのうち２つ以上を備える、請求項１５に記載の非一時的コンピュータアクセス可能ストレージメディア。
【請求項２０】
前記データストアサービスは、前記データストアを仮想化データストアとして、複数の顧客に前記ネットワークを介して提供するよう構成されることを特徴とする請求項１５に記載の非一時的コンピュータアクセス可能ストレージメディア。
【発明の詳細な説明】
【背景技術】
【０００１】
多くのデータシステムでは、広く考えると、送信器（データソース）は通信チャンネルを介してデータを受信器（データプロセッサ）にアップロードする。このようなシステムの一例は、データストレージシステムである。ただし、これらのデータシステムは、送信器からアップロードしたデータを何らかの方法で処理する任意のシステムを含んでいてもよい。アップロードしたデータおよび処理したデータは、任意の種類の文字、図形、または画像データ、音声データ（たとえば、音楽および音声データ）、映像データ、圧縮および／または暗号データなどを含んでいてもよいが、これらに限定されない。このようなシステムの多くでは、大量のデータを送信器から受信器に通信チャンネルを介してアップロードする必要があることもある。ただし、このようなデータシステムの目標は、通信チャンネルから受信器にわたってできるだけ多くの有用なデータを得ることである一方、通信チャンネルは、一般に帯域幅制約を有する。
【０００２】
データ重複排除は、たとえば、データストレージシステムのストレージ利用を改良し、および／または通信チャンネルで使用する帯域幅を低減するために、このようなシステム内の冗長データを低減し、または削除するための技術に関する。たとえば、データストレージシステムに適用される少なくともいくつかのデータ重複排除技術において、重複データをデータストアに保存することを防ぐことができる。これを実現するために、データストア内にすでにあるデータユニットおよび／またはデータストア内にないデータユニットを識別してもよく、およびデータストア内にないユニットのみをデータストア内に保存し、または更新する。この適用において、データ重複排除によって、このように必要なストレージ容量を低減してもよく、または特定のデータユニットの１コピーのみを保持してもよい。
【０００３】
データシステムのデータを重複排除するための１つの技術は、受信器で処理すべきデータすべて（たとえば、データストレージシステム内に保存されている）を送信器にアップロードさせ、処理すべきデータユニットを受信器に識別させることである。ただし、この技術は送信器と受信器との間の帯域幅使用を低減しない。
【０００４】
低減帯域幅使用を低減することもあるデータ重複排除のための従来の技術は、受信器にアップロードするためのデータユニットを送信器に識別させ、識別したデータユニットのみを送信器から受信器にアップロードすることである。図１は、従来の重複排除技術を例示する。ここでは、送信器（データソース）はデータユニットを識別し、受信器（たとえば、データストレージシステム）にアップロードする。この従来の重複排除技術では、送信器２０はデータ２２と、ローカルに保存したフィンガープリント２４とを維持する。ローカルに保存したフィンガープリント２４は、データストア１２にアップロードされたデータユニット２２を一意に識別してもよい。フィンガープリント２４は、たとえば、データユニット２２のハッシュであってもよい。ブロックベースのデータシステム（たとえば、ブロックストレージシステム）では、データユニットは、たとえば、データブロックの２５６ｋバイト部分、データブロックの１０２４ｋバイト部分、またはデータブロックのいくつかのその他の固定または可変サイズの部分であってもよい。ファイルベースのシステムでは、データユニットはファイル、またはブロックベースのデータシステムにおける部分と同様にファイルの部分であってもよい。送信器２０が受信器１０にアップロードすべきデータ２２を有する場合は、データアップロードマネージャ２６は送信器２０でアップロードすべきデータ２２のユニットの１または複数のフィンガープリントを抽出し、抽出した１または複数のフィンガープリントと、ローカルに保存したフィンガープリント２４とを比較して、受信器１０にアップロードされていない（または以前にアップロードされたが、ローカルに修正された）１または複数のデータユニットを識別してもよい。データアップロードマネージャ２６は次に、識別した１または複数のデータユニットを受信器１０にアップロードしてもよい。受信器１０は１または複数のデータユニットを、たとえばデータユニットをデータストアに保存することによって、処理する。
【０００５】
この技術によって、送信器２０から受信器１０にデータをアップロードする際に使用する帯域幅が低減することもある。この技術は送信器２０がフィンガープリント２４のディクショナリを維持することを必要とする。このようなシステムの多くでは、送信器２０がローカルに維持するローカルストアまたはデータ２２のキャッシュは、データの多くのギガバイトまたはテラバイトを含んでいてもよい。このように、送信器２０が維持しなくてはならないフィンガープリント２４のディクショナリは極めて大きくなることもある。さらに、いくつかのシステムでは、受信器１０は複数の送信器２０と協働することもあり、これらのシステムでは全体的に重複排除を適用する（たとえば、２つ以上のデータソースに対して受信器１０が保存するデータに一貫して重複排除を適用する）ことは困難である。
【図面の簡単な説明】
【０００６】
【図１】送信器（データソース）がデータユニットを識別して、受信器（たとえば、データストレージシステム）にアップロードする、従来の重複排除技術を例示する。
【図２Ａ】少なくともある実施形態による、送信器（データソース）および受信器（データストレージシステム）を含むデータシステムで実装されるデータ重複排除技術を例示するブロック図である。
【図２Ｂ】少なくともある実施形態による、送信器（データソース）および受信器（データストレージシステム）を含むデータシステムで実装されるデータ重複排除技術を例示するブロック図である。
【図２Ｃ】少なくともある実施形態による、送信器（データソース）および受信器（データストレージシステム）を含むデータシステムで実装されるデータ重複排除技術を例示するブロック図である。
【図２Ｄ】少なくともある実施形態による、送信器（データソース）および受信器（データストレージシステム）を含むデータシステムで実装されるデータ重複排除技術を例示するブロック図である。
【図３Ａ】少なくともある実施形態による、仮想化データストアシステムの高レベルブロック図である。
【図３Ｂ】少なくともある実施形態による、仮想化データストア顧客サイトの仮想化データストアゲートウェイを含む仮想化データストアシステムのブロック図である。仮想化データストアゲートウェイは、仮想化データストア顧客と仮想化データストアサービスとの間のインターフェースとして機能する。
【図３Ｃ】少なくともある実施形態による、仮想化データストアサービスおよびハードウェア仮想化サービスを仮想化サービスプロバイダの顧客に提供する、仮想化サービスのブロック図である。
【図４Ａ】少なくともある実施形態による、仮想化データストア顧客の仮想化データストアゲートウェイを含む仮想化データストアシステムにおいて実装されるデータ重複排除技術を例示する、ブロック図である。
【図４Ｂ】少なくともある実施形態による、仮想化データストア顧客の仮想化データストアゲートウェイを含む仮想化データストアシステムにおいて実装されるデータ重複排除技術を例示する、ブロック図である。
【図４Ｃ】少なくともある実施形態による、仮想化データストア顧客の仮想化データストアゲートウェイを含む仮想化データストアシステムにおいて実装されるデータ重複排除技術を例示する、ブロック図である。
【図４Ｄ】少なくともある実施形態による、仮想化データストア顧客の仮想化データストアゲートウェイを含む仮想化データストアシステムにおいて実装されるデータ重複排除技術を例示する、ブロック図である。
【図４Ｅ】少なくともある実施形態による、仮想化データストア顧客の仮想化データストアゲートウェイを含む仮想化データストアシステムにおいて実装されるデータ重複排除技術を例示する、ブロック図である。
【図４Ｆ】少なくともある実施形態による、仮想化データストア顧客の仮想化データストアゲートウェイを含む仮想化データストアシステムにおいて実装されるデータ重複排除技術を例示する、ブロック図である。
【図５】少なくともある実施形態による、仮想化データストアゲートウェイを初期化する方法のフローチャートである。
【図６】少なくともある実施形態による、仮想化データストアゲートウェイを含む仮想化データストアシステムにおいて実装されるデータ重複排除技術のフローチャートである。
【図７】ある実施形態で使用してもよいコンピュータシステムの例を例示するブロック図である。
【０００７】
本明細書では、実施形態をいくつかの実施形態および例示的な図の例として記載するが、当業者は実施形態が記載した実施形態または図面に限定されないことを理解するであろう。図面および図の詳細な説明は実施形態を開示した具体的な形状に限定することを意図するものではなく、逆に、添付の請求項で規定する精神および範囲内にあるすべての修正、同等物および代替物を対象とすることを目的とすることを理解されたい。本明細書で用いる見出しは整理を目的とするのみであって、明細書または請求項の範囲を制限するものではない。本出願を通じて用いているように、「してもよい（ｍａｙ）」という用語は、義務を意味する（つまり、必須（ｍｕｓｔ）を意味する）ものではなく、許可の意味で用いられる（つまり、可能性を有することを意味する）。同様に、「含む」、「含んでいる」という用語は含んでいるが、限定されないことを意味する。
【発明を実施するための形態】
【０００８】
受信器側のデータ重複を排除する方法の様々な実施形態および機器が記載されている。
データ重複排除技術の実施形態は、たとえば、送信器と受信器との間の通信チャンネルの帯域幅使用を、従来のデータ重複排除技術と比較して低減するために、仮想化データストアシステムに適用してもよい。データ重複排除技術の実施形態では、フィンガープリントディクショナリを維持して、受信器にアップロードすべきデータユニットを決定するのではなく、むしろ、受信器がフィンガープリントディクショナリを維持する。送信器がアップロードすべきデータを有する場合は、送信器はデータのフィンガープリントを抽出し、フィンガープリントを受信器に送信する。受信器はフィンガープリントディクショナリを確認し、受信器にアップロードすべきデータユニットを決定して送信器に通知する。次に、送信器は識別したデータユニットを受信器に送信する。データ重複排除技術の実施形態は、このように、データストア内にないユニットのみをアップロードするため、データ送信器から受信器にデータをアップロードするときに使用する帯域幅を低減する。さらに、実施形態によって、送信器が大量のフィンガープリントディクショナリを維持する必要と、受信器でのデータ重複排除を集中化する必要がなくなる。そのため、複数のデータソースのために保存したデータ全体にデータ重複排除を適用することが可能となる。技術によって送信器と受信器との間の通信が余分に必要となるため、軽度の妥協として、アップロード処理の待ち時間が長くなることもある。ただし、待ち時間は一般に、プライマリアップロード処理においては一時的な関心事ではない。
【０００９】
本明細書では、データ重複排除技術の実施形態は、一般に、データストレージシステムの適用において記載されているが、データ重複排除技術は、受信器が送信器からアップロードしたデータを受信する任意のシステムに適用してもよい。アップロードしたデータおよび処理したデータは、任意の種類の文字、図形、または画像データ、音声データ（たとえば、音楽または音声データ）、映像データ、圧縮および／または暗号データなどを含んでいてもよいが、これらに限定されない。さらに、本明細書では、実施形態は、一般に離れて位置し、有線および／またはインターネットなどの無線ネットワークを介して通信する送信器および受信器に関して記載しているが、データ重複排除技術は、送信器および受信器が、たとえば、有線または無線ローカルネットワークまたはダイレクトリンクを介して通信するローカル装置である適用、および適用送信器および受信器が単一の装置またはシステム内のハードウェアおよび／またはソフトウェアコンポーネントであり、データバス、ダイレクトデータリンク、共有メモリ転送、または無線通信チャンネルなどの内部通信チャンネルを介して通信する適用に適用してもよい。
【００１０】
図２Ａから２Ｄは、データシステムに実装されたデータ重複排除技術を例示するブロック図である。データシステムは、少なくともある実施形態によれば、送信器（データソース）と、受信器（たとえば、データストレージシステム）とを含む。図２Ａを参照すると、受信器１１０は、データ処理１１２技術または機能にしたがって、データを処理してもよい。たとえば、受信器１１０は、データをデータストアに保存してもよい。図２Ａは単一の送信器１２０を示す。ただし、２つ以上の送信器１２０があってもよい。送信器１２０は、たとえば、サーバなどの単一のシステム、サーバクラスタなどのシステムの集まり、またはデータセンタに対応するが、一般に、送信器１２０はデータを受信器１１０にアップロードできる任意の装置またはシステムに対応してもよい。受信器１１０は受信器データアップロードマネージャ１１４を実装してもよい。受信器データアップロードマネージャ１１４は、ハードウェア、ソフトウェア、またはその組み合わせに実装されてもよい。受信器データアップロードマネージャ１１４は、インターフェース、たとえばウェブサービスインターフェースまたはＡＰＩを提供してもよい。インターフェースを介して送信器１２０は受信器１１０が提供する機能にアクセスしてもよい。
【００１１】
受信器データアップロードマネージャ１１４は、たとえばデータストアに保存されたデータのフィンガープリント１３２を、フィンガープリントディクショナリ１３０に保存および管理してもよい。少なくともある実施形態では、フィンガープリント１３２はデータユニットのハッシュであってもよい。ブロックベースのデータシステム（ブロックストレージシステムともいう）では、データユニットは、たとえば、データブロックの２５６ｋバイトの部分、データブロックの１０２４ｋバイト部分、またはデータブロックの別の固定または変動するサイズの部分であってもよい。ファイルベースのシステムでは、データユニットはファイル、またはブロックベースのデータシステムの部分と同様に、ファイルの部分であってもよい。少なくともある実施形態では、フィンガープリント１３２は任意の種類の暗号学的に強い一方向ハッシュ関数、たとえば安全なハッシュアルゴリズム（ＳＨＡ）２５６ハッシュ関数であってもよい。暗号学的に強い一方向ハッシュ関数を使用することで安全性が実現し、このようなハッシュ関数を使用する場合の衝突はほとんど起こらないため、衝突を避けることができる。衝突とは、２つのデータユニットが同じフィンガープリントを作成することである。
【００１２】
フィンガープリントディクショナリ１３０は単一のシステム上にあってもよく、または２つ以上のシステム、たとえば２つ以上のサーバシステムに分散されていてもよい。ある実施形態では、フィンガープリントディクショナリ１３０は２つ以上のサーバにわたるコンシステントハッシュディクショナリとして実装され、維持されてもよい。少なくともある実施形態では、フィンガープリントディクショナリ１３０は、固定サイズのディクショナリであってもよい。
【００１３】
少なくともある実施形態では、受信器データアップロードマネージャ１１４は、複数の顧客のフィンガープリント１３２を単一のフィンガープリントディクショナリ１３０に維持してもよい。顧客は具体的なデータ集の「所有者」であり、個人、企業、または事業部、部、事務所、またはその他の企業内の組織であってもよい。ある実施形態では、各顧客には特有の顧客識別子を割り当てる。顧客識別子は、それぞれの顧客データのフィンガープリント１３２に付加され、またはその他の方法で関連してもよい。代替的に、受信器データアップロードマネージャ１１４は、個別のフィンガープリントディクショナリ１３０を各顧客に維持してもよい。
【００１４】
送信器データアップロードマネージャ１２６は、送信器１２０と受信器データアップロードマネージャ１１４との間のインターフェースとして機能してもよい。送信器データアップロードマネージャ１２６は、ハードウェア、ソフトウェア、またはその組み合わせに実装されてもよい。送信器データアップロードマネージャ１２６と受信器データアップロードマネージャ１１４との間の１または複数の通信チャンネルは、送信器データアップロードマネージャ１２６と受信器データアップロードマネージャ１１４との間のネットワーク（たとえば、インターネット）にわたって転送する必要があることもあるため、比較的高帯域幅の接続または通信チャンネルであってもよい。
【００１５】
受信器１１０がデータのプライマリストレージまたは送信先であってもよい一方、送信器１２０は、少なくともいくつかのデータをローカルにキャッシュし、保存し、または取得してもよい。たとえば、ユーザのデータアクセスタイムを改良するために、要望に応じて受信器１１０が維持するデータストアからデータを取り込むのではなく、大きなデータのブロックまたはデータのチャンク、データ全体量さえも、送信器１２０にローカルデータ１２２としてローカルにキャッシュし、または保存してもよい。送信器１２０は、物理的なデータストレージおよび／またはメモリを含んでいてもよく、その上にローカルデータ１２２をキャッシュし、または保存してもよい。ただし、受信器１１０が維持するデータストアは顧客のプライマリデータストアとして機能してもよい。したがって、送信器データアップロードマネージャ１２６は受信器データアップロードマネージャ１１４と通信し、定期的に、不定期に、または継続してローカルデータ１２２内の新規または修正したデータをデータストアにアップロードする。
【００１６】
送信器データアップロードマネージャ１２６は、少なくともある実施形態では、ローカルデータ１２２を比較的大きなブロック、たとえば４メガバイトのブロックまたは１０メガバイトのブロックに維持してもよいが、それより大きい、または小さいブロックサイズを使用してもよい。たとえば、新規データを作成し、または既存データを修正するために、ユーザまたはプロセスがデータブロック１４０にアクセスするとき、ブロックを「ダーティ」とマークしてもよい。ただし、アクセスによって、ブロックの小さな部分のみを変更してもよい。このように、図２Ａに示すように、送信器データアップロードマネージャ１２６は、たとえばハッシュ関数を各ユニットに適用することによって、ダーティブロック１４０のユニットのフィンガープリント１２４を生成してもよい。ブロックベースのデータシステム（たとえば、ブロックストレージシステム）では、データユニットは、たとえば、データブロックの２５６ｋバイト部分、データブロックの１０２４ｋバイト部分、またはデータブロックのいくつかのその他の固定または可変サイズの部分であってもよい。（ファイルベースのシステムでは、データユニットはファイル、またはブロックベースのデータシステムの部分と同様のファイルの部分であってもよい。）図２Ａに示すように、送信器データアップロードマネージャ１２６は、ダーティブロック１４０のために生成したフィンガープリント１２４を受信器データアップロードマネージャ１１４に送信してもよい。
【００１７】
図２Ｂでは、受信器データアップロードマネージャ１１４はフィンガープリントディクショナリ１３０を検索して、送信器データアップロードマネージャ１２６から受信したフィンガープリント１２４と適合させてもよい。受信器データアップロードマネージャ１１４によって実装またはアクセスする検索機能にしたがって、検索を実行してもよい。当業者は、任意の種類の検索技術を用いてもよいことを理解するであろう。前述したように、ある実施形態では、それぞれの顧客に対する特有の識別子を用いて、これらのフィンガープリント１２４を他の顧客のフィンガープリントから識別して衝突を避けてもよい。これは、それぞれの顧客に特有のフィンガープリントディクショナリを検索することによって、またはすべての顧客に共通するフィンガープリントディクショナリからそれぞれの顧客に属するものとして指示されたフィンガープリントを特有の識別子で検索することによって行う。フィンガープリントディクショナリ１３０内で発見したフィンガープリント１２４をアップロードする必要はない。ディクショナリ１３０内に存在するということは、対応するデータユニットが受信器１１０に存在する（たとえば、データユニットはデータストアに保存されている）ことを示すからである。フィンガープリントディクショナリ１３０内で発見できないフィンガープリント１２４はアップロードする必要がある。ディクショナリ１３０にないということは、対応するデータユニットが受信器１１０に存在しない（たとえば、データユニットはデータストアに保存されていない）こと、または対応するデータユニットが送信器１２０で変更され、交換または更新の必要があることを示すからである。
【００１８】
フィンガープリント１２４が生成されるデータブロック全体が新規に作成されたデータブロックである場合は、フィンガープリント１２４のどれもがフィンガープリントディクショナリ１３０で発見されず、したがって、すべての対応するユニットを受信器１１０にアップロードする必要が生じる場合もあることに留意されたい。ただし、同じデータユニットが顧客に対して以前にアップロードされた他のブロック内に存在する場合は、いくつかの、またはすべてのフィンガープリント１２４がフィンガープリントディクショナリ１３０内で発見されることもある。したがって、少なくともいくつかの対応するユニットは受信器１１０にアップロードする必要がないこともある。つまり、２つ以上のデータのブロックは、少なくともいくつかの共通のユニットを受信器１１０、たとえばデータストア内で共有してもよい。
【００１９】
図２Ｃで示す例では、フィンガープリント１２４Ｃを、アップロードする必要があるデータユニットに対応するものとして識別している（つまり、フィンガープリント１２４Ｃはフィンガープリントディクショナリ１３０内にない。）受信器データアップロードマネージャ１１４は次に、フィンガープリント１２４Ｃに対応するデータユニット（つまり、データユニット１４２Ｃ）のデータユニット識別子を送信器データアップロードマネージャ１２６に送信する。ある実施形態では、１または複数のデータユニット識別子は、それぞれ１または複数のフィンガープリントであってもよく、この例では、フィンガープリント１２４Ｃである。別の方法を用いて、アップロードする必要があるデータユニットを識別してもよい。たとえば、ある実施形態では、ブロック番号／ユニット番号インデキシング方式を用いて、アップロードする必要があるデータユニットを識別してもよく、またはビットフィールド方式を用いてもよい。ビットフィールド方式では、「ビットマップ」内の１または複数のビットを設定して、アップロードする必要があるデータユニット、またはアップロードする必要のないデータユニットのいずれかを表示してもよい。ある実施形態では、受信器データアップロードマネージャ１１４によって送信器データアップロードマネージャ１２６に送信された１または複数のデータユニット識別子は、アップロードする必要がある１または複数のデータユニットではなく、むしろアップロードする必要のない１または複数のデータユニットを表示してもよい。ある実施形態では、帯域幅使用を低減するために、受信器データアップロードマネージャ１１４は、アップロードする必要のない１または複数のデータユニットのセット、またはアップロードする必要がある１または複数のデータユニットのセットのいずれかを表示する１または複数のデータユニット識別子を、どちらがより小さいかによって送信してもよい。たとえば、送信器データアップロードマネージャ１２６に送信された１または複数の識別子は、アップロードする必要がある１または複数のデータユニット、またはアップロードする必要のない１または複数のデータユニットのどちらに対するものかを表示する情報をヘッダに含んでいてもよい。
【００２０】
図２Ｄでは、識別したデータユニット１４２Ｃを、送信器データアップロードマネージャ１２６によって受信器データアップロードマネージャ１１４にアップロードする。ダーティブロックから識別した１または複数のデータユニットのみをアップロードすることに留意されたい。受信器データアップロードマネージャ１１４が、ブロックのすべてのデータユニットをアップロードする必要があると認識しない限り、ブロック全体はアップロードされない。図２Ｄでは、受信器データアップロードマネージャ１１４のアップロードハンドラまたはプロセス１５０を示す。アップロードハンドラまたはプロセス１５０はアップロードした１または複数のデータユニットを受信し、さらに処理するために、受信した１または複数のデータユニットをデータ処理１１２機能に送る。たとえば、データストレージシステムでは、データ処理１１２機能は、データストアにアップロードしたデータユニット１４２Ｃを保存してもよい。データストレージシステムでは、データ処理１１２機能は、アップロードしたデータユニットをデータストア内の新規のデータユニットとして追加してもよい。またはデータストア内の既存データユニットをアップロードしたデータユニットと交換するか、更新してもよい。
【００２１】
ある実施形態では、識別したデータユニットを受信器データアップロードマネージャ１１４にアップロードする前に、データユニットを送信器データアップロードマネージャ１２６によって圧縮して、さらに通信チャンネルの帯域幅使用を低減してもよい。ある実施形態では、送信器データアップロードマネージャ１２６は、所与のデータユニットの圧縮バージョンが、圧縮していないバージョンよりも、ある閾値量または割合だけ小さいがどうかを判断し、小さい場合は圧縮バージョンをアップロードし、そうでない場合は圧縮していないバージョンをアップロードしてもよい。送信器データアップロードマネージャ１２６が受信する圧縮データユニットを、処理１１２の前に解凍してもよいが、必須ではない。
【００２２】
前述のように、少なくともある実施形態では、フィンガープリントディクショナリ１３０は固定サイズのディクショナリであってもよい。そのため、ある実施形態では、フィンガープリントディクショナリ１３０は、受信器１１０が受信したすべてのデータユニットに対応するフィンガープリント１３２を保存する余裕がないこともある。たとえば、データストレージシステムでは、フィンガープリントディクショナリ１３０はデータストアに保存したすべてのデータユニットのフィンガープリント１３２を保存しないこともある。
そのため、これらの実施形態では、受信器１１０は、１または複数のディクショナリ維持機能を実装してもよい。ディクショナリ維持機能は、定期的にまたは必要に応じて、フィンガープリント１３２、たとえば陳腐なまたは最近もっとも使われていない（ＬＲＵ）フィンガープリント１３２を消去し、削除し、または置き換える。そのため、フィンガープリント１２４を送信器１２０から受信することに対応して、受信器データアップロードマネージャ１１４がディクショナリ１３０内にあると判断する１または複数のフィンガープリントを、ディクショナリ維持機能によって、データ重複排除技術において送信器１２０と受信器１１０との交換が終了する前に、消去することが可能である。このように、ある実施形態では、図２Ｄに示すように、１または複数のデータユニットを送信器データアップロードマネージャ１２６から受信後に、受信器データアップロードマネージャ１１４は受信した１または複数のデータユニットをフィンガープリントディクショナリ１３０に対して確認し、任意のデータユニットが欠けているかを判断してもよい。つまり、受信器データアップロードマネージャ１１４が最初にディクショナリ１３０にあると判断した任意のフィンガープリント１２４が（図２Ｂおよび２Ｃ参照）、もはやディクショナリ１３０になく、したがって、トランザクションを完了するためには対応するデータユニットが必要であることを判断してもよい。ある実施形態では、受信器データアップロードマネージャ１１４がトランザクションを完了するために追加のデータユニットが必要であると判断すると、トランザクションを再開してもよい。つまり、受信器データアップロードマネージャ１１４は、フィンガープリント１２４の新規のリストを送信器データアップロードマネージャ１２６から要求してもよい。ただし、受信器データアップロードマネージャ１１４および送信器データアップロードマネージャ１２６の両方はすでにトランザクションの状態情報を持っているため、ある実施形態では、この状態情報を活用して帯域幅をセーブしてもよい。これらの実施形態では、受信器データアップロードマネージャ１１４は、トランザクションの追加段階として、１または複数のデータユニット識別子を送信器データアップロードマネージャ１２６に送信して、欠けているデータユニットのみを要求してもよい。つまり、トランザクション中にフィンガープリント１３２が消去されたデータユニットのみを要求してもよい。
【００２３】
図２Ａから２Ｄのデータシステムに関連して前述したプロセスは、連続したプロセスであってもよい。つまり、送信器１２０は連続してダーティデータのブロックを確認し、ブロック内のデータユニットのフィンガープリントを生成し、フィンガープリントを受信器１１０に送信し、アップロードすべきデータユニットの表示を受信し、表示されたデータユニットを受信器１１０にアップロードしてもよい。受信器１１０は、フィンガープリントディクショナリ１３０を維持して、受信器１１０にデータの現在の状態を反映し、受信した１または複数のデータユニットをデータ処理機能１１２に転送する。データ処理機能１１２は、たとえば、１または複数の送信器１２０から受信したデータユニットにしたがって、データストア内のデータブロックを保存または更新する。
【００２４】
データ重複排除技術の実施形態を、一般的な送信器（データソース）および受信器（データストア）を含む任意のデータシステムに適用して、アップロード帯域幅使用を低減してもよい。このデータシステムは、任意のデータストレージシステムを含むがこれに限定されない。それと同時に、フィンガープリントディクショナリを維持し、アップロードすべきデータユニットを判断するためにディクショナリを確認するデータ重複排除タスクを送信器から受信器に移動させる。ただし、データ重複排除技術の実施形態を、本明細書では仮想化データストアプロバイダを提供する仮想化データストアシステムに関連して記載した。仮想化データストアプロバイダはインターネットなどのネットワークを介して、１または複数の仮想化データストアクライアントの仮想化データストアを提供する。以下の部分では、仮想化データストアシステムの実施形態を記載する。プロバイダ側の仮想化データストアサービスおよびクライアント側の仮想化データストアゲートウェイを提供する実施形態も記載する。以下の部分では、顧客に対するハードウェア仮想化サービス、および仮想化データストアサービスを提供する仮想化サービスプロバイダの実施形態も記載する。
仮想化データストアシステム
【００２５】
図３Ａから３Ｃは、少なくともある実施形態による、データ重複排除技術を実装してもよい仮想化データストアシステムの例を例示する。図３Ａは、少なくともある実施形態による、仮想化データストアシステムの高レベルブロック図である。グローバルネットワーク２００（たとえば、インターネット）の仮想化データストアプロバイダ２１０は、グローバルネットワーク２００にも接続する１または複数の仮想化データストア顧客２５０に、仮想化データストアサービス２１２を介して仮想化データストア２１６へのアクセスを提供してもよい。各仮想化データストア顧客２５０は異なる事業体に対応してもよく、または２つ以上の仮想化データストア顧客２５０は同じ事業体の異なるデータセンタまたは現地事務所、たとえば企業の異なる支社または学校システムの異なるキャンパスに対応してもよい。事業体は、インターネットなどのグローバルネットワーク２００に接続するコンピュータネットワークまたはネットワークを実装して、ネットワーク化したコンピューティングサービスをユーザに提供する企業、教育機関、政府機関、または一般の任意の事業体であってもよい。ある実施形態では、仮想化データストアサービス２１２はインターフェース、たとえばウェブサービスのインターフェースを提供してもよい。仮想化データストア顧客２５０は、このインターフェースを介してサービス２１２が提供する機能にアクセスしてもよい。
【００２６】
データクライアント２５８は、仮想化データストア顧客２５０のローカルネットワークに接続する物理マシンおよび／または仮想マシンまたはシステムを表す。ユーザはデータクライアント２５８を介して、仮想化データストア２１６に仮想化データストアサービス２１２を介してデータ量を作成および搭載してもよい。仮想化データストア顧客２５０のユーザの観点からは、仮想化データストアサービス２１２が提供するデータ量はすべてローカルストレージであるかのように見える。そのため、このようなデータ量は仮想データ量２９８と呼ばれることもある。仮想データ量２９８は実際に１または複数の物理的なストレージ装置またはストレージシステムにマッピングされ、物理的なストレージ装置またはストレージシステム上に仮想化データストア２１６はインスタンス化される。ただし、このマッピングは仮想化データストアサービス２１２によって処理され、したがって仮想化データストア顧客２５０の観点からトランスペアレントとなる。データクライアント２５８のユーザは、デスクトップまたは装置リスティングに組み込んだ量のみを見てもよい。データクライアント２５８のユーザは、仮想データ量２９８がローカルに取り付けるストレージ装置上に実装されたかのようにデータを作成し、データを修正し、データを削除し、一般に仮想データ量２９８上の任意のデータ関連機能を実行する。
【００２７】
仮想化データストア顧客２５０は、仮想化データストアサービス２１２とグローバルネットワーク２００を介してと通信し、データをアップロードしてもよく、データを仮想化データストア２１６からダウンロードしてもよい。図３Ｂは仮想化データストアシステムのブロック図であり、仮想化データストアゲートウェイ２５２を仮想化データストア顧客２５０に含む。少なくともある実施形態によると、仮想化データストアシステムは仮想化データストア顧客２５０と仮想化データストアサービス２１２との間のインターフェースとして機能する。
【００２８】
少なくともある実施形態では、仮想化データストアゲートウェイ２５２は、仮想化データストア顧客のデータセンタの現場でインストールされるファイルおよびブロックストレージ装置であってもよい。仮想化データストアゲートウェイ２５２は、よく利用するデータのローカルキャッシュ２５４を保存する一方、仮想化データストアプロバイダ２１０に戻るデータ移動を安全に暗号化し、加速する。標準のインターネット接続と比較すると加速しているこのデータ移動は、データ重複排除、圧縮、並列化、およびＴＣＰウィンドウスケーリングを用いて実現してもよい。仮想化データストアゲートウェイ２５２は、オンサイトのストレージアレイの管理に一般的に伴うコスト、利用、維持、およびプロビジョニングの悩みを顕著に低減してもよい。仮想化データストアゲートウェイ２５２は、顧客がその他の方法で、社内の高価なネットワーク接続ストレージ（ＮＡＳ）およびストレージエリアネットワーク（ＳＡＮ）ハードウェアに保存する何百ものテラバイトからペタバイトのデータを、費用効率が高い装置と交換することによって、実現してもよい。仮想化データストアゲートウェイ２５２を用いると、仮想化データストアプロバイダ２１０が提供する、耐久性があり、利用可能かつ拡張可能なクラウドストレージ基盤を活用しながら、顧客はオンサイトのストレージ（ゲートウェイ２５２が提供するローカルキャッシュ２５４によって提供される）のアクセス遅延が低いことから利益を得てもよい。
【００２９】
仮想化データストアゲートウェイ２５２の実施形態は、顧客のオンサイトのアプリケーションと途切れなく協働してもよい。少なくともある実施形態では、顧客は仮想化データストアゲートウェイ２５２を構成して、ＳＡＮ（インターネットスモールコンピュータシステムインターフェース（ｉＳＣＳＩ））、ＮＡＳ（ネットワークファイルシステム（ＮＦＳ）、マイクロソフト（Ｒ）（Ｍｉｃｒｏｓｏｆｔ））共通インターネットファイルシステム（ＣＩＦＳ））、またはオブジェクト（Ｏｂｊｅｃｔ）（レスト（ＲＥＳＴ））ストレージをサポートしてもよい。少なくともある実施形態では、仮想化データストアゲートウェイ２５２が提供するｉＳＣＳＩインターフェースによって、マイクロソフト（Ｒ）シェアポイント（Ｒ）（ＳｈａｒｅＰｏｉｎｔ）などのオンサイトのブロックストレージアプリケーションとの統合が可能になる。少なくともある実施形態では、顧客は仮想化データストアゲートウェイ２５２が提供するＮＦＳおよびＣＩＦＳインターフェースを利用して、環境をまたぐファイルストレージに統合してもよい。このファイルストレージは、ウィンドウズ（Ｗｉｎｄｏｗｓ（登録商標））、リナックス（Ｌｉｎｕｘ（登録商標））、およびユニックス（ＵＮＩＸ（登録商標））環境を含むが、これらに限定されない。少なくともある実施形態では、仮想化データストアゲートウェイ２５２はまた、ＲＥＳＴベースの要求をサポートするように構成されてもよい。
【００３０】
仮想化データストアゲートウェイ２５２を、ハードウェア、ソフトウェア、またはその組み合わせに実装してもよい。仮想化データストアゲートウェイ２５２のいくつかの実施形態を、仮想化データストア顧客２５０のローカルネットワーク２５６に接続し、またグローバルネットワーク２００（たとえば、インターネット）にも接続する専用装置または機器として実装してもよい。装置または機器は、ゲートウェイ２５２の様々な機能を実施するソフトウェアおよび／またはハードウェアを含んでいてもよい。代替的に、仮想化データストアゲートウェイ２５２を、仮想化データストア顧客２５０データセンタの１または複数のサーバシステム上の仮想装置または機器として実装してもよい。
【００３１】
仮想化データストアゲートウェイ２５２をグローバルネットワーク２００に接続することは、一般に、仮想化データストア顧客２５０が提供する高帯域幅接続を介して行われる。大量のデータを、仮想化データストアサービス２１２と仮想化データストアゲートウェイ２５２との間のグローバルネットワーク２００を介して転送するためである。たとえば、ピーク時には、接続は１００メガビット／秒（１００Ｍｂｉｔ／ｓ）以上の速さでデータの転送をサポートする必要があることもある。ただし、本明細書に記載するデータ重複排除技術は、アップロードするデータを仮想化データストアゲートウェイ２５２から仮想化データストアサービス２１２にアップロードする場合に帯域幅使用を低減する。したがって、より多くの接続の帯域幅が他のアプリケーションに利用可能となる。
【００３２】
少なくともある実施形態では、接続の帯域幅を仮想化データストアゲートウェイ２５２および他の顧客アプリケーションに、たとえば仮想化データストア顧客２５０のコンソールを介して割り当ててもよい。本明細書に記載するデータ重複排除技術によれば、仮想化データストアゲートウェイ２５２は、変異した（新規または変化した）データを仮想化データストアサービス２１２に継続してまたは略継続してアップロードしてもよい。ただし、顧客２５０のデータの変異率は時間と共に変化してもよい。たとえば、日中は変異率が高く、夜間は変異率が落ちてもよい。このように、変異率が高い繁忙期には、仮想化データストアゲートウェイ２５２に割り当てた帯域幅が維持するほど高くない場合は、仮想化データストアゲートウェイ２５２は変異したデータをアップロードするのが遅れることもある。次に、仮想化データストアゲートウェイ２５２は、変異率はあまり高くない忙しくないときに取り戻す。少なくともある実施形態では、仮想化データストアゲートウェイ２５２が特定の閾値を超えて遅れると、仮想化データストアゲートウェイ２５２は、追加の帯域幅の割り当てを要求してもよい。少なくともある実施形態では、仮想化データストアゲートウェイ２５２は、必要に応じて警告を発して、多くの帯域幅を要求してもよい。仮想化データストアゲートウェイ２５２が必要以上に多くの帯域幅を有する場合、たとえば仮想化データストアゲートウェイ２５２が変異率に追いつくために必要以上に多くの帯域幅を有するあまり忙しくないときには、仮想化データストアゲートウェイ２５２はいくつかの帯域幅を解除して顧客に戻してもよく、それによって帯域幅を他のアプリケーションに使用することができる。
【００３３】
ある実施形態では、データを仮想化データストア２１６から要望に応じて取り込むよりも、大きなデータのブロックまたはデータのチャンク、データの全体量さえ、ローカルにキャッシュしてもよい。仮想化データストアゲートウェイ２５２は、物理的なデータストレージおよび／またはメモリを含んでいてもよい。その上に、データのローカルキャッシュ２５４、たとえば頻繁にアクセスするデータまたは重大なデータを維持してもよい。ローカルキャッシュ２５４は、揮発性または不揮発性ストレージまたはメモリ、またはその組み合わせに実装されてもよい。
【００３４】
ローカルキャッシュ２５４を維持することは、一般に、ユーザがデータクライアント２５８にアクセスするデータアクセス時間を改良してもよい。多くのまたはほとんどのデータアクセスは、データを仮想化データストア２１６から取り込むよりも、ローカルキャッシュ２５４からサービスを受けることができるからである。ただし、仮想化データストア２１６は仮想化データストア顧客２５０のプライマリデータストアとして機能する。したがって、仮想化データストアゲートウェイ２５２は、仮想化データストアサービス２１２とグローバルネットワーク２００を介して通信し、定期的に、不定期に、または継続してローカルキャッシュ２５４の新規のまたは修正したデータを仮想化データストア２１６にアップロードし、必要な場合に、要求したデータを仮想化データストア２１６からダウンロードする。
【００３５】
図３Ｂでは、仮想化データストア２１６のストレージ２１８Ａ、２１８Ｂ、２１８Ｃ…は、仮想化データストア２１６を仮想化データストアプロバイダ２１０のローカルネットワーク２１４に接続するいくつかのストレージ装置またはシステム上に、または横切って実装してもよいことを例示する。このように、仮想化データストア顧客２５０のデータを「バックエンド」上の２つ以上の物理的なストレージ装置またはシステムにわたって広げてもよい。ただし、図３Ａに関して記載するように、仮想化データストア顧客２５０の視点から、クライアントのデータをクライアントに仮想量またはストレージ装置として表す。
【００３６】
ある実施形態では、図３Ａおよび３Ｂに関して記載する仮想化データストアシステムを、ハードウェア仮想化技術およびその他の仮想化ストレージ技術も提供する一般の仮想化サービスの一部として実装してもよい。仮想化サービスは、一連の仮想化コンピューティング技術および仮想化ストレージ技術を提供してもよい。これには、仮想化ブロックレベルストレージ能力（つまり、ブロックベースのストレージシステム）を顧客に提供する仮想化ブロックレベルストレージ技術も含む。仮想化サービスプロバイダが提供するハードウェア仮想化技術によって実装される仮想コンピューティング環境またはシステムは、仮想化ブロックレベルストレージ技術によってサポートされてもよい。仮想化ブロックレベルストレージ技術は仮想ストレージシステムを提供してもよい。仮想ストレージシステムは、標準化ストレージコールを経て仮想コンピューティングシステムとやり取りすることができる。ブロックレベルストレージがサポートする量の構造および機能の詳細を選ばずに、標準化ストレージコールによって、ブロックレベルストレージが機能し、ブロックレベルストレージがストレージ利用可能性を提供する仮想コンピューティングシステム（またはその他のシステム）上で稼働するオペレーティングシステムを選ばずに、ブロックレベルストレージが機能する。
【００３７】
オンサイトの顧客アプリケーションを統合することに加えて、仮想化データストアゲートウェイ２５２は、仮想化サービスプロバイダ３００が提供する仮想化コンピューティング技術および仮想化ストレージ技術を統合してもよく、顧客に柔軟な「クラウドベースの」コンピューティングおよびストレージリソースへのアクセスを提供する。たとえば、仮想化データストアゲートウェイ２５２をＳＡＮストレージのために利用する顧客は、仮想化ブロックレベルストレージ技術からアクセス可能なブロックストレージデータの一貫したポイントインタイムスナップショットを作成してもよい。これらのスナップショットを次に、仮想化ブロックレベルストレージ技術が提供する高いＩ／Ｏおよび低い待ち時間データアクセスを必要とする、ハードウェア仮想化技術アプリケーションまたはインスタンス（たとえば、図３Ｃの１または複数の仮想コンピューティングシステム３９２参照）によって処理してもよい。別の例として、顧客は、ＮＡＳストレージの仮想化データストアゲートウェイ２５２をＮＦＳまたはＣＩＦＳファイルプロトコルを介して構成してもよく、ハードウェア仮想化技術インスタンスからアクセス可能なファイルデータのポイントインタイムスナップショットを作成してもよい。
【００３８】
ある実施形態では、仮想化データストアゲートウェイ２５２が提供するＲＥＳＴベースのインターフェースを使用して書きかれたオブジェクトは、ＨＴＴＰまたはその他のプロトコルを介して仮想化サービスプロバイダが提供する仮想化ストレージ技術から直接アクセスされてもよく、または仮想化サービスプロバイダが提供する統合コンテンツ配布技術を使用して配布されてもよい。ある実施形態では、顧客はまた、ハードウェア仮想化技術インスタンス上のこれらのオブジェクトを並行処理するために提供される、拡張可能性が高い、仮想化ストレージ技術が提供する分散基盤を利用してもよい。
【００３９】
図３Ｃは仮想化サービスのブロック図であり、少なくともある実施形態によれば、仮想化データストアサービス３１２およびハードウェア仮想化サービス３６０を仮想化サービスプロバイダ３００の顧客３５０に提供する。仮想化サービス顧客３５０データセンタは、たとえば図３Ｂに関して記載するように、仮想化データストア顧客３５０と仮想化サービスプロバイダ３００の仮想化データストアサービス３１２との間のインターフェースとして機能する仮想化データストアゲートウェイ３５２を含む。
【００４０】
ハードウェア仮想化技術によって、複数のオペレーティングシステムを同時にホストコンピュータ３６２上で稼働することができる。つまり、ホスト３６２上の仮想マシン（ＶＭ）３６６として稼働することができる。ＶＭ３６６は、たとえば、仮想化サービスプロバイダ３００の顧客に（たとえば、仮想化サービス顧客３５０に）貸与またはリースしてもよい。ホスト３６２上のハイパーバイザ、または仮想マシンモニタ（ＶＭＭ）３６４はホスト３６２上の仮想プラットフォームを備えるＶＭ３６６を表し、ＶＭ３６６の実行をモニタする。各ＶＭ３６６は１または複数のＩＰアドレスを備えていてもよい。ホスト３６２上のＶＭＭ３６４は、ホスト上のＶＭ３６６のＩＰアドレスを認識していてもよい。
仮想化サービスプロバイダ３００のローカルネットワークは、ＶＭ３６６からのパケットをインターネット目的地（たとえば、仮想化サービス顧客３５０の１または複数のサービスクライアント３９０）まで経由し、インターネットソース（たとえば、１または複数のサービスクライアント３９０）からＶＭ３６６まで経由するように構成されてもよい。
【００４１】
仮想化サービスプロバイダ３００は、ローカルネットワーク３５６を介してグローバルネットワーク２００に接続する仮想化サービス顧客３４０を提供してもよい。ローカルネットワーク３５６は、仮想コンピューティングシステム３９２をハードウェア仮想化サービス３６０を介して実装する能力を有する。ハードウェア仮想化サービス３６０は、グローバルネットワーク２００および仮想化サービスプロバイダ３００のローカルネットワークに接続する。ある実施形態では、ハードウェア仮想化サービス３６０は、インターフェース、たとえばウェブサービスインターフェースを提供してもよい。このインターフェースを介して、サービスクライアント３９０は、ハードウェア仮想化サービス３６０が提供する機能にアクセスしてもよい。仮想化サービスプロバイダ３００では、各仮想コンピューティングシステム３９２は、リース、貸借、またはその他の方法で仮想化サービス顧客３５０に提供されるホスト３６２システム上の仮想マシン（ＶＭ）３６６を表してもよい。
【００４２】
仮想コンピューティングシステム３９２のインスタンスから、前述したように、ユーザは仮想化データストアサービス３１２の機能にアクセスしてもよい。このように、図３Ｃに例示するように、仮想化システムの実施形態によって、クライアントは、仮想化システムプロバイダが提供するＶＭ上に実装される仮想コンピューティングシステムのローカルインスタンスを作成することができ、仮想データストアのデータにアクセスし、仮想コンピューティングシステムのローカルインスタンスから、仮想化システムプロバイダが実装する仮想データストアにデータを保存することができる。前述したように、仮想化データストアゲートウェイ３５２を、ローカルに少なくともいくつかのデータをキャッシュする、たとえばよく利用するデータまたは重大なデータをキャッシュする仮想化サービスクライアント３５２に提供してもよい。仮想化サービスクライアント３５２は、仮想化データストアサービス３１２と１または複数の高帯域幅通信チャンネルを介して通信し、ローカルキャッシュから新規のまたは修正したデータをアップロードする。それによって、データのプライマリストレージ（仮想化データストア３１６）は維持される。
仮想化データストアシステムのデータ重複排除技術
【００４３】
たとえば、前述のように仮想化データストアシステムを適用し、仮想化データストア内の冗長データを低減または排除するデータ重複排除技術の実施形態を記載する。データ重複排除技術の実施形態では、フィンガープリントディクショナリを維持し、仮想化データストアにアップロードすべきデータユニットを仮想化データストア顧客（送信器）で判断する代わりに、フィンガープリントディクショナリを仮想化データストアプロバイダ（受信器）に維持し、アップロードすべきデータユニットを判断することは仮想化データストアプロバイダで実行される。
【００４４】
図４Ａから４Ｆは、仮想化データストアシステムで実装するデータ重複排除技術を例示するブロック図である。仮想化データストアシステムは、少なくともある実施形態によれば、仮想化データストア顧客の仮想化データストアゲートウェイを含む。これらの図は一例として示されることに留意されたい。データ重複排除技術の実施形態は、送信器（データソース）および受信器（データストア）を含む任意のデータストレージシステムに適用してもよい。図４Ａを参照すると、受信器、仮想化データストアプロバイダ２１０は、１または複数の仮想化データストア顧客２５０のために、データ２２０を仮想化データストア２１６に保存してもよい。仮想化データストアプロバイダ２１０は、仮想化データストアサービス２１２を提供してもよい。仮想化データストアサービス２１２は、インターフェース、たとえばウェブサービスインターフェースを提供してもよい。このインターフェースを介して、仮想化データストア顧客２５０は、サービス２１２が提供する機能にアクセスしてもよい。
【００４５】
仮想化データストアサービス２１２は、フィンガープリントディクショナリ２３０の仮想化データストア２１６に保存したデータ２２０のフィンガープリント２３２を保存してもよい。少なくともある実施形態では、フィンガープリント２３２はデータユニット２２０のハッシュであってもよい。少なくともある実施形態では、フィンガープリント２３２は、任意の種類の暗号学的に強い一方向ハッシュ関数、たとえば安全なハッシュアルゴリズム（ＳＨＡ）２５６ハッシュ関数であってもよい。暗号学的に強い一方向ハッシュ関数を使用することで安全性が実現し、このようなハッシュ関数を使用する場合の衝突はほとんど起こらないため、衝突を避けることができる。衝突とは、２つのデータユニットが同じフィンガープリントを作成することである。ブロックベースのデータシステム（ブロックストレージシステムともいわれる）では、データユニットは、たとえば、データブロックの２５６ｋバイト部分、データブロックの１０２４ｋバイト部分、またはデータブロックのいくつかのその他の固定または可変サイズの部分であってもよい。ファイルベースのシステムでは、ブロックベースのデータシステムと同様に、データユニットはファイル、またはファイルの部分であってもよい。
【００４６】
フィンガープリントディクショナリ２３０は単一のシステム上にあってもよく、または２つ以上のシステム、たとえば２つ以上のサーバシステムに分散されていてもよい。ある実施形態では、フィンガープリントディクショナリ２３０は仮想化データストアサービス２１２に２つ以上のサーバにわたるコンシステントハッシュディクショナリとして実装され、維持されてもよい。少なくともある実施形態では、フィンガープリントディクショナリ２３０は、固定サイズのディクショナリであってもよい。
【００４７】
少なくともある実施形態では、仮想化データストアサービス２１２は、複数の顧客２５０のフィンガープリント２３２を単一のフィンガープリントディクショナリ２３０に維持してもよい。顧客は具体的なデータ集の「所有者」であり、個人、企業、または事業部、部、事務所、またはその他の企業内の組織であってもよい。ある実施形態では、各顧客２５０には特有の顧客識別子を割り当てる。顧客識別子は、それぞれの顧客データのフィンガープリント２３２に付加され、またはその他の方法で関連してもよい。代替的に、仮想化データストアサービス２１２は、個別のフィンガープリントディクショナリ２３０を各顧客２５０に維持してもよい。
【００４８】
仮想化データストアゲートウェイ２５２は、仮想化データストア顧客２５０と仮想化データストアサービス２１２との間のインターフェースとして機能してもよい。仮想化データストアゲートウェイ２５２を、ハードウェア、ソフトウェア、またはその組み合わせに実装してもよい。仮想化データストアゲートウェイ２５２のいくつかの実施形態を、仮想化データストア顧客２５０のローカルネットワークに接続し、またインターネットなどのグローバルネットワークにも接続する仮想化データストア顧客２５０の専用装置または機器として実装してもよい。装置または機器は、ゲートウェイ２５２の様々な機能を実施するソフトウェアおよび／またはハードウェアを含んでいてもよい。代替的に、仮想化データストアゲートウェイ２５２を、仮想化データストア顧客２５０データセンタの１または複数のサーバシステム上の仮想装置または機器として実装してもよい。大量のデータを仮想化データストアサービス２１２と仮想化データストアゲートウェイ２５２間のグローバルネットワークにわたって転送する必要があることもあるため、グローバルネットワークの接続は、一般に、高帯域幅接続である。
【００４９】
要望に応じて仮想化データストア２１６からデータを取り込むよりも、大きなデータのブロックまたはデータのチャンク、データ全体量さえも、仮想化データストアゲートウェイ２５２によってローカルにキャッシュされてもよい。仮想化データストアゲートウェイ２５２は、物理的なデータストレージおよび／またはメモリを含んでいてもよく、その上にデータ２５６のローカルキャッシュ２５４、たとえば、頻繁にアクセスするデータまたは重大なデータを維持してもよい。ローカルキャッシュ２５４は、揮発性または不揮発性ストレージまたはメモリ、またはその組み合わせに実装されてもよい。データ２５６のローカルキャッシュ２５４、たとえば頻繁にアクセスするデータまたは重大なデータを維持することは、一般に、仮想化データストア顧客２５０のユーザがアクセスするデータアクセス時間を改良してもよい。多くのまたはほとんどのデータアクセスは、アクセスごとにデータを仮想化データストア２１６から取り込むよりも、ローカルキャッシュ２５４からサービスを受けることができるからである。ただし、仮想化データストア２１６は仮想化データストア顧客２５０のプライマリデータストアとして機能する。したがって、仮想化データストアゲートウェイ２５２は、仮想化データストアサービス２１２とグローバルネットワークを介して通信し、定期的に、不定期に、または継続してローカルキャッシュ２５４の新規のまたは修正したデータを仮想化データストア２１６にアップロードする。
【００５０】
仮想化データストアゲートウェイ２５２は、少なくともある実施形態では、キャッシュされたデータ２５６を比較的大きなブロック、たとえば４メガバイトのブロックまたは１０メガバイトのブロックに維持してもよいが、それより大きいまたは小さいブロックサイズを使用してもよい。たとえば新規データを作成し、または既存データを修正するために、ユーザまたはプロセスがデータブロック２５６にアクセスするとき、ブロックを「ダーティ」とマークしてもよい。ただし、アクセスによって、ブロックのほんの一部のみを変更してもよい。このように、図４Ａに示すように、仮想化データストアゲートウェイ２５２は、たとえばハッシュ関数を各ユニットに適用することによって、ダーティブロックのユニットのフィンガープリント２７０を生成してもよい。ブロックベースのデータシステム（ブロックストレージシステムともいう）では、データユニットは、たとえば、データブロックの２５６ｋバイト部分、データブロックの１０２４ｋバイト部分、またはデータブロックのいくつかのその他の固定または可変サイズの部分であってもよい。（ファイルベースのシステムでは、データユニットはファイル、またはブロックベースのデータシステムの部分と類似するファイルの部分であってもよい。）
【００５１】
図４Ｂでは、仮想化データストアゲートウェイ２５２は、ダーティブロックのために生成されたフィンガープリント２７０を仮想化データストアサービス２１２に送信してもよい。
【００５２】
図４Ｃでは、仮想化データストアサービス２１２はフィンガープリントディクショナリ２３０を検索して、仮想化データストアゲートウェイ２５２から受信したフィンガープリント２７０と適合させてもよい。仮想化データストアサービス２１２が実装する検索機能２７２によって検索を実行してもよい。当業者は、任意の種類の検索技術を用いてもよいことを理解するであろう。前述したように、ある実施形態では、顧客２５０に対する特有の識別子を用いて、これらのフィンガープリント２７０を他の顧客２５０のフィンガープリントから識別して衝突を避けてもよい。これは、それぞれの顧客２５０に特有のフィンガープリントディクショナリ２３０を検索することによって、またはすべての顧客２５０に共通するフィンガープリントディクショナリ２３０から特有の識別子によって、それぞれの顧客２５０に属するものとして指示されたフィンガープリントを検索することによって行う。フィンガープリントディクショナリ２３０内で発見したフィンガープリント２７０をアップロードする必要はない。ディクショナリ２３０内に存在するということは、対応するデータユニットが仮想化データストア２１６に存在することを示すからである。フィンガープリントディクショナリ２３０内で発見できないフィンガープリント２７０はアップロードする必要がある。ディクショナリ２３０にないということは、対応するデータユニットが仮想化データストア２１６に存在しないか、または対応するデータユニットが変更され、交換または更新の必要があることを示すからである。
【００５３】
フィンガープリント２７０が生成されるデータブロック全体が新規に作成されたデータブロックである場合は、フィンガープリント２７０のどれもがフィンガープリントディクショナリ２３０で発見されず、したがって、すべての対応するユニットを仮想化データストア２１６にアップロードする必要が生じる場合もあることに留意されたい。ただし、同じデータユニットが顧客２５０に対して以前にアップロードされた他のブロック内に存在する場合は、いくつかの、またはすべてのフィンガープリント２７０がフィンガープリントディクショナリ２３０内で発見されることもある。したがって、少なくともいくつかの対応するユニットを仮想化データストア２１６にアップロードする必要がないこともある。つまり、２つ以上のデータのブロックは、少なくともいくつかの共通のユニットを仮想化データストア２１６内で共有してもよい。
【００５４】
図４Ｄでは、仮想化データストアサービス２１２は、「ダーティ」と識別したデータユニットの１または複数のデータユニット識別子２８０（つまり、仮想化データストア２１６にアップロードする必要があるデータブロックからのデータユニット）を仮想化データストアゲートウェイ２５２に返す。ある実施形態では、データユニット識別子２８０は、データユニットの１または複数のそれぞれのフィンガープリント２７０であってもよい。
アップロードする必要があるデータユニットを識別するために別の方法を用いてもよい。
たとえば、ある実施形態では、ブロック番号／ユニット番号インデキシング方式を用いて、アップロードする必要があるデータユニットを識別してもよい。ある実施形態では、ビットフィールド方式を用いてもよい。ビットフィールド方式では、「ビットマップ」内の１または複数のビットを設定して、アップロードする必要があるデータユニットまたはアップロードする必要のないデータユニットのいずれかを表示してもよい。ある実施形態では、仮想化データストアサービス２１２によってデータストアゲートウェイ２５２に送信された１または複数のデータユニット識別子２８０は、アップロードする必要がある１または複数のデータユニットではなく、むしろアップロードする必要のない１または複数のデータユニットを表示してもよい。ある実施形態では、帯域幅使用を低減するために、仮想化データストアサービス２１２は、アップロードする必要のない１または複数のデータユニットのセットまたはアップロードする必要がある１または複数のデータユニットのセットのいずれかを表示する１または複数のデータユニット識別子を、どちらが小さいかによって送信してもよい。たとえば、仮想化データストアゲートウェイ２５２に送信された１または複数の識別子は、アップロードする必要がある１または複数のデータユニット、またはアップロードする必要のない１または複数のデータユニットかどちらに対するものかを表示する情報をヘッダに含んでいてもよい。
【００５５】
図４Ｅでは、識別した１または複数のデータユニット２８２を、仮想化データストアゲートウェイ２５２から仮想化データストアサービス２１２にアップロードする。ダーティブロックから識別した１または複数のデータユニットのみをアップロードすることに留意されたい。仮想化データストアサービス２１２が、ブロックのすべてのデータユニットを「ダーティ」であると識別しない限り、ブロック全体はアップロードされない。
【００５６】
図４Ｆでは、仮想化データストアサービス２１２は識別した１または複数のデータユニット２８２を仮想化データストア２１６に保存する。仮想化データストアサービス２１２は、所与の識別したデータユニット２８２を仮想化データストア２１６に新規のデータユニットとして追加してもよく、または仮想化データストア２１６内の既存データユニットを所与の識別したデータユニット２８２と置き換えるか、または更新してもよい。
【００５７】
ある実施形態では、識別したデータユニット２８２を仮想化データストアサービス２１２にアップロードする前に、データユニット２８２を仮想化データストアゲートウェイ２５２によって圧縮して、さらに通信チャンネルの帯域幅使用を低減してもよい。ある実施形態では、仮想化データストアゲートウェイ２５２は、所与のデータユニットの圧縮バージョンが圧縮していないバージョンよりも、ある閾値量または割合だけ小さいがどうかを判断し、小さい場合は圧縮バージョンをアップロードし、そうでない場合は圧縮していないバージョンをアップロードしてもよい。仮想化データストアサービス２１２にアップロードされた圧縮データユニットは、仮想化データストア２１６に保存する前に解凍されてもよいが、必須ではない。
【００５８】
前述のように、少なくともある実施形態では、フィンガープリントディクショナリ２３０は固定サイズのディクショナリであってもよい。このように、ある実施形態では、フィンガープリントディクショナリ２３０は、仮想化データストア２１６に保存したすべてのデータユニットのフィンガープリント２３２を保存しないこともある。このように、これらの実施形態では、仮想化データストアサービス２１２は、１または複数のディクショナリ維持機能を実装してもよい。ディクショナリ維持機能は、定期的にまたは必要に応じて、フィンガープリント２３２、たとえば陳腐なまたは最近もっとも使われていない（ＬＲＵ）フィンガープリント２３２を消去し、削除し、または置き換える。このように、フィンガープリント２７０を仮想化データゲートウェイ２５２から受信することに対応して、仮想化データストアサービス２１２がディクショナリ２３０内にあると判断する１または複数のフィンガープリントを、ディクショナリ維持機能によって、データ重複排除技術において交換が終了する前に、消去することが可能である。このように、ある実施形態では、図４Ｅに示すように、１または複数のデータユニット２８２を仮想化データストアゲートウェイ２５２から受信後に、仮想化データストアサービス２１２は受信した１または複数のデータユニットをフィンガープリントディクショナリ２３０に対して確認し、任意のデータユニットが欠けているかを判断してもよい。つまり、仮想化データストアサービス２１２が最初にディクショナリ２３０（図４Ｃ参照）にあると判断した任意のフィンガープリント２７０がもはやディクショナリ２３０になく、したがって、トランザクションを完了するためには対応するデータユニットが必要であることを判断してもよい。ある実施形態では、仮想化データストアサービス２１２がトランザクションを完了するために追加のデータユニットが必要であると判断すると、トランザクションを再開してもよい。つまり、仮想化データストアサービス２１２は、フィンガープリント２７０の新規のリストを仮想化データストアゲートウェイ２５２から要求してもよい。ただし、仮想化データストアサービス２１２および仮想化データストアゲートウェイ２５２の両方はすでにトランザクションの状態情報を持っているため、ある実施形態では、この状態情報を活用して帯域幅をセーブしてもよい。これらの実施形態では、仮想化データストアサービス２１２は、トランザクションの追加段階として、１または複数のデータユニット識別子２８０を仮想化データストアゲートウェイ２５２に送信して、欠けているデータユニットのみを要求してもよい。つまり、トランザクション中にフィンガープリント２３２が消去されたデータユニットのみを要求してもよい。
【００５９】
図４Ａから４Ｆの仮想化データストアシステムに関連して前述したプロセスは、連続したプロセスであってもよい。つまり、仮想化データストアゲートウェイ２５２は連続してダーティデータのブロックを確認し、ブロック内のデータユニットのフィンガープリントを生成し、フィンガープリントを仮想化データストアサービス２１２に送信し、アップロードすべきデータユニットの表示を受信し、表示されたデータユニットを仮想化データストアサービス２１２にアップロードする。仮想化データストアサービス２１２は、フィンガープリントディクショナリ２３０を維持して、仮想化データストア２１６の現在の状態を反映し、１または複数の仮想化データストアゲートウェイ２５２から受信したデータユニットによって、仮想化データストア２１６内のデータブロックを保存または更新する。
【００６０】
図５は、少なくともある実施形態による、仮想化データストアゲートウェイを初期化するための方法のフローチャートである。５００に表示するように、仮想化データストアゲートウェイを仮想化データストア顧客にインスタンス化する。仮想化データストアゲートウェイのいくつかの実施形態を、仮想化データストア顧客データセンタのローカルネットワークに接続し、またグローバルネットワーク（たとえば、インターネット）にも接続する専用装置または機器として実装してもよい。装置または機器は、ゲートウェイの様々な機能を実施するソフトウェアおよび／またはハードウェアを含んでいてもよい。代替的に、仮想化データストアゲートウェイを、仮想化データストア顧客データセンタの１または複数のサーバシステム上の仮想装置または機器として実装してもよい。
【００６１】
５０２に示すように、１または複数のユーザは１または複数のデータ量を仮想化データストアゲートウェイにインスタンス化してもよい。５０４では、顧客はデータの１または複数の量を仮想化データストアゲートウェイに生成または修正する。たとえば、クライアント装置のユーザは量をクライアント装置から作成し、量をクライアント装置のデスクトップに搭載し、量の新規のデータをクライアント装置から作成してもよい。
【００６２】
５０６に表示するように、仮想化データストアゲートウェイは新規のまたは修正したデータ（つまり、「ダーティ」データ）を仮想化データストアに仮想化データストアサービスを介してアップロードする。データのアップロードは、たとえば図６に例示するように、データ重複排除技術によって実行され、それによって仮想化データストアサービスは、フィンガープリントディクショナリを保存、維持、および確認し、仮想化データストアにアップロードする必要があるデータユニットだけが仮想化データストアサービスに送信される。データブロックの修正およびデータ重複排除処理、およびデータユニットのアップロードは、継続したプロセスであってもよい。つまり、仮想化データストアゲートウェイは継続して、データ重複排除技術によって、ダーティデータのブロックを処理し、データユニットをブロックから仮想化データストアに仮想化データストアサービスを介してアップロードしてもよい。
【００６３】
図６は、少なくともある実施形態による、仮想化データストアゲートウェイを含む仮想化データストアシステムで実装されるデータ重複排除技術のフローチャートである。６００に表示するように、仮想化データストアゲートウェイは、データユニットのフィンガープリントをダーティデータブロックに生成する。６０２に表示するように、仮想化データストアゲートウェイは、フィンガープリントを仮想化データストアサービスにネットワーク（たとえば、インターネット）を介して送信する。６０４に表示するように、仮想化データストアサービスは、フィンガープリントをフィンガープリントディクショナリで検索し、対応するデータユニットが仮想化データストアに保存されているか判断する。６０６に表示するように、仮想化データストアサービスは、アップロードすべきデータの１または複数のユニット（つまり、仮想化データストアによると、フィンガープリントディクショナリに保存されていないユニット）を識別する情報を仮想化データストアゲートウェイに送信する。ある実施形態では、アップロードすべきデータの１または複数のユニットを識別する情報は、アップロードする必要がある１または複数のデータユニットを表示してもよい。ある実施形態では、アップロードすべきデータの１または複数のユニットを識別する情報は、アップロードする必要がある１または複数のデータユニットよりも、アップロードする必要のない１または複数のデータユニットを表示してもよい。ある実施形態では、帯域幅使用を低減するために、仮想化データストアサービスは、アップロードする必要のない１または複数のデータユニットのセット、またはアップロードする必要がある１または複数のデータユニットのセットのいずれかを表示する情報を、どちらがより小さいかによって送信してもよい。ある実施形態では、「ビットマップ」内の１または複数のビットを設定して、アップロードする必要があるデータユニットまたはアップロードする必要のないデータユニットのいずれかを表示するビットフィールド方式を使用してもよい。
６０８に表示するように、仮想化データストアゲートウェイは、識別した１または複数のユニットを仮想化データストアサービスにネットワークを介してアップロードする。ある実施形態では、仮想化データストアサービスにアップロードする前に、少なくともいくつかのデータユニットを仮想化データストアゲートウェイで圧縮してもよい。６１０に表示するように、仮想化データストアサービスは、１または複数のユニットを仮想化データストアに保存し、フィンガープリントディクショナリを適切な１または複数のフィンガープリントで更新する。
【００６４】
少なくともある実施形態では、フィンガープリントディクショナリは固定サイズのディクショナリであってもよい。これらの実施形態では、仮想化データストアサービスは、１または複数のディクショナリ維持機能を実装してもよい。ディクショナリ維持機能は、定期的にまたは必要に応じて、フィンガープリントを消去し、削除し、または置き換える。
このように、図６の６０４に表示するように、フィンガープリントを仮想化データストアゲートウェイから受信することに対応して、仮想化データストアサービスがディクショナリ内にあると判断する１または複数のフィンガープリントを、ディクショナリ維持機能によって、データ重複排除技術において交換が終了する前に、消去することが可能である。
このように、ある実施形態では、１または複数のデータユニットを仮想化データストアゲートウェイから受信後に、仮想化データストアサービスは受信した１または複数のデータユニットをフィンガープリントディクショナリに対して確認し、仮想化データストアサービスが最初にディクショナリにあると判断した任意のフィンガープリントが、もはやディクショナリになく、したがって、トランザクションを完了するためには対応するデータユニットが必要であることを判断してもよい。ある実施形態では、仮想化データストアサービスがトランザクションを完了するために追加のデータユニットが必要であると判断すると、仮想化データストアサービスは、フィンガープリントの新規のリストを仮想化データストアゲートウェイに要求して、トランザクションを再開してもよい。ただし、仮想化データストアサービスおよび仮想化データストアゲートウェイ両方はすでにトランザクションの状態情報を持っているため、ある実施形態では、この状態情報を活用して帯域幅をセーブしてもよい。これらの実施形態では、仮想化データストアサービスは、トランザクションの追加段階として、１または複数のデータユニット識別子を仮想化データストアゲートウェイに送信して、欠けているデータユニットのみを要求してもよい。つまり、トランザクション中にフィンガープリントが消去されたデータユニットのみを要求してもよい。
仮想化データストアゲートウェイは次に、追加して要求したデータユニットをアップロードしてもよく、仮想化データストアサービスは、それにしたがって、追加のデータユニットを処理してもよい。
例示システム
【００６５】
少なくともある実施形態では、サーバは、本明細書に記載するデータストレージシステム技術およびデータ重複排除技術を含むがこれらに限定されない１または複数の技術の部分またはすべてを実装する。サーバは、図７に例示するコンピュータシステム１０００などの汎用コンピュータシステムを含んでいてもよい。汎用コンピュータシステムは、１または複数のコンピュータにアクセス可能なメディアへのアクセスを含み、またはそれらにアクセスするように構成される。例示する実施形態では、コンピュータシステム１０００は、システムメモリ１０２０に入出力（Ｉ／Ｏ）インターフェース１０３０を介して接続する１または複数のプロセッサ１０１０を含む。コンピュータシステム１０００はさらに、Ｉ／Ｏインターフェース１０３０に接続するネットワークインターフェース１０４０を含む。
【００６６】
様々な実施形態では、コンピュータシステム１０００は、１つのプロセッサ１０１０を含むユニプロセッサシステム、またはいくつかのプロセッサ１０１０（たとえば、２台、４台、８台、または別の適切な台数）を含むマルチプロセッサシステムであってもよい。
プロセッサ１０１０は、命令を実行可能な任意の適切なプロセッサであってもよい。たとえば、様々な実施形態では、プロセッサ１０１０は、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、またはＭＩＰＳ  ＩＳＡ、または任意のその他の適切な命令セットアーキテクチャ（ＩＳＡ）などの任意の種類のＩＳＡを実装する汎用または組み込みプロセッサであってもよい。マルチプロセッサシステムでは、各プロセッサ１０１０は共通に同じＩＳＡを実装してもよいが、必須ではない。
【００６７】
システムメモリ１０２０は、命令および１または複数のプロセッサ１０１０がアクセスできるデータを保存するように構成されてもよい。様々な実施形態では、システムメモリ１０２０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、同期ダイナミックＲＡＭ（ＳＤＲＡＭ）、不揮発性／フラッシュタイプメモリ、または任意のその他の種類のメモリなどの任意の適切なメモリ技術を使用して実装されてもよい。例示する実施形態では、プログラム命令およびデータは、データストレージシステム技術およびデータ重複排除技術に関して前述した方法、技術、およびデータなどの１または複数の所望する機能を実装し、コード１０２５およびデータ１０２６としてシステムメモリ１０２０内に保存して示される。
【００６８】
一実施形態では、Ｉ／Ｏインターフェース１０３０は、プロセッサ１０１０、システムメモリ１０２０、および装置内の任意の周辺装置間のＩ／Ｏトラフィックを調整するように構成されてもよい。周辺装置には、ネットワークインターフェース１０４０またはその他の周辺インターフェースを含む。ある実施形態では、Ｉ／Ｏインターフェース１０３０は、データ信号を１つのコンポーネント（たとえば、システムメモリ１０２０）から別のコンポーネント（たとえば、プロセッサ１０１０）が使用する適切なフォーマットに転換するために必要な任意のプロトコル、タイミングまたはその他のデータ変換を実行してもよい。ある実施形態では、Ｉ／Ｏインターフェース１０３０は、たとえば、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス標準、またはユニバーサルシリアルバス（ＵＳＢ）標準の変形などの様々な種類の周辺バスを介して取り付けられた装置のサポートを含んでいてもよい。ある実施形態では、Ｉ／Ｏインターフェース１０３０の機能を、たとえばノースブリッジおよびサウスブリッジなどの、２つ以上の個別のコンポーネントに分けてもよい。ある実施形態では、システムメモリ１０２０のインターフェースなどのＩ／Ｏインターフェース１０３０のいくつかのまたはすべての機能を、プロセッサ１０１０に直接組み込んでもよい。
【００６９】
ネットワークインターフェース１０４０を、コンピュータシステム１０００と、たとえば、その他のコンピュータシステムまたは図２から４Ｆに例示する装置などのネットワークまたはネットワーク１０５０に接続したその他の装置１０６０との間でデータが交換できるように構成してもよい。様々な実施形態では、ネットワークインターフェース１０４０は、たとえばイーサネット（登録商標）ネットワークなどの種類の、任意の適切な有線または無線の一般のデータネットワークを介して通信をサポートしてもよい。さらに、ネットワークインターフェース１０４０は、アナログ音声ネットワークまたはデジタルファイバ通信ネットワークなどの遠隔通信／テレフォニネットワークを介して、ファイバチャンネルＳＡＮなどのストレージ区域ネットワークを介して、または任意のその他の適切な種類のネットワークおよび／またはプロトコルを介して、通信をサポートしてもよい。
【００７０】
ある実施形態では、システムメモリ１０２０は、プログラム命令および図２から６に前述したデータを保存して、データストレージシステム技術およびデータ重複排除技術の実施形態を実装するように構成される、コンピュータアクセス可能メディアの１つの実施形態であってもよい。ただし、その他の実施形態では、プログラム命令および／またはデータを、異なる種類のコンピュータアクセス可能メディア上で受信、送信、または保存してもよい。一般には、コンピュータアクセス可能メディアは、磁気または光学メディアなどの非一時的ストレージメディアまたはメモリメディア、たとえば、コンピュータシステム１０００にＩ／Ｏインターフェース１０３０を介して接続するディスクまたはＤＶＤ／ＣＤを含んでいてもよい。非一時的コンピュータアクセス可能ストレージメディアは、ＲＡＭ（たとえばＳＤＲＡＭ、ＤＤＲＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなどの任意の揮発性または不揮発性メディアも含んでいてもよい。これらのメディアは、コンピュータシステム１０００のある実施形態にシステムメモリ１０２０または別の種類のメモリとして、含まれていてもよい。さらに、コンピュータアクセス可能メディアは、ネットワークおよび／または無線リンクなどの通信メディアを介して伝達され、ネットワークインターフェース１０４０を介して実装されるように、電気、電磁気、またはデジタル信号などの伝達メディアまたは信号を含んでいてもよい。
【００７１】
以上、本発明を説明したが、
その代表的な実施態様を以下に「節」として記載する。
節
第１節  少なくとも１つのプロセッサと、
プログラム命令を備えるメモリとを備えるシステムであって、プログラム命令は、少なくとも１つのプロセッサによって、
データストアに保存したデータのフィンガープリントをフィンガープリントディクショナリに保存し、データは複数のデータユニットを備え、フィンガープリントディクショナリの各フィンガープリントは、データストア内に保存されたデータのそれぞれのデータユニットを一意に識別し、
ネットワークを介して装置から、装置でキャッシュされた異なるデータユニットにそれぞれ対応する１または複数のフィンガープリントを受信し、
フィンガープリントディクショナリを、装置から受信した１または複数のフィンガープリントそれぞれのために検索して、フィンガープリントがフィンガープリントディクショナリ内にあるか、またはフィンガープリントディクショナリ内にないかを判断し、フィンガープリントがフィンガープリントディクショナリ内にないと判断することは対応するデータユニットをアップロードすべきであることを示し、
装置にネットワークを介して、フィンガープリントディクショナリを検索することによって判断した、１または複数のアップロードすべきデータユニットの表示を送信し、
装置からネットワークを介して、表示された１または複数のデータユニットを受信し、各受信したデータユニットは、フィンガープリントディクショナリ内にはないフィンガープリントに対応し、
装置から受信した１または複数のデータユニットをデータストアに保存するように実行可能である、システム。
【００７２】
第２節  各フィンガープリントはそれぞれのデータユニットのハッシュである、第１節に記載のシステム。
【００７３】
第３節  ハッシュは、それぞれのデータユニットに適用される暗号学的に強い一方向ハッシュ関数によって生成される、第２節に記載のシステム。
【００７４】
第４節  プログラム命令は、少なくとも１つのプロセッサによって、フィンガープリントディクショナリを、装置から受信してデータストアに保存する各データユニットに対応するフィンガープリントで更新することをさらに備える、第１節に記載のシステム。
【００７５】
第５節  データはデータストアにデータブロックとして保存され、各データブロックは複数のデータユニットのうち２つ以上を備える、第１節に記載のシステム。
【００７６】
第６節  プログラム命令は、少なくとも１つのプロセッサによって、データストアを仮想化データストアとして複数の顧客にネットワークを介して提供するように実行可能であり、データストアに保存されるデータは複数の顧客それぞれの顧客データを含み、装置は複数の顧客の１つに関連し、装置は、データストアからのそれぞれの顧客の顧客データの少なくとも一部をローカルにキャッシュする、第１節に記載のシステム。
第７節  フィンガープリントディクショナリは複数の顧客の顧客データのフィンガープリントを含み、プログラム命令は、少なくとも１つのプロセッサによって、
顧客識別子を各顧客と関連づけ、
フィンガープリントディクショナリの検索によって、それぞれの顧客の顧客識別子にしたがってそれぞれの顧客データに対応するフィンガープリントのみを検索するように実行可能である、第６節に記載のシステム。
【００７７】
第８節  １または複数のアップロードすべきデータユニットの表示は、検索によって、フィンガープリントディクショナリ内に発見できなかったフィンガープリントのデータユニットを表示する、第１節に記載のシステム。
【００７８】
第９節  １または複数のアップロードすべきデータユニットの表示は、検索によってフィンガープリントディクショナリ内に発見されたフィンガープリントのデータユニットを表示する、第１節に記載のシステム。
【００７９】
第１０節  フィンガープリントディクショナリ内にないフィンガープリントに対応するデータユニットのみを装置から受信する、第１節に記載のシステム。
【００８０】
第１１節  プログラム命令は、少なくとも１つのプロセッサによって、
表示された１または複数のデータユニットを装置から受信後に、検索によってフィンガープリントディクショナリ内にあると表示された少なくとも１つのフィンガープリントは、その後フィンガープリントディクショナリから削除されたことを判断し、
装置にネットワークを介して、少なくとも１つのフィンガープリントに対応する少なくとも１つのデータユニットの表示を送信し、
装置からネットワークを介して、表示された少なくとも１つのデータユニットを受信するようにさらに実行可能である、第１節に記載のシステム。
【００８１】
第１２節  データのフィンガープリントをフィンガープリントディクショナリにローカルに保存し、データは複数のデータユニットを備え、フィンガープリントディクショナリの各フィンガープリントは、データ内のそれぞれのデータユニットを一意に識別し、
ネットワークを介して装置から、装置でキャッシュされた異なるデータユニットにそれぞれ対応する１または複数のフィンガープリントを受信し、
フィンガープリントディクショナリを、装置から受信した１または複数のフィンガープリントそれぞれのために検索して、フィンガープリントがフィンガープリントディクショナリ内にあるか、またはフィンガープリントディクショナリ内にないかを判断し、フィンガープリントがフィンガープリントディクショナリ内にないと判断することは対応するデータユニットをアップロードすべきであることを示し、
装置にネットワークを介して、フィンガープリントディクショナリを検索することによって判断した、１または複数のアップロードすべきデータユニットの表示を送信し、
装置からネットワークを介して、表示された１または複数のデータユニットを受信し、各受信したデータユニットは、フィンガープリントディクショナリ内にはないフィンガープリントに対応することと、
を備える、方法。
【００８２】
第１３節  各フィンガープリントはそれぞれのデータユニットのハッシュである、第１２節に記載の方法。
【００８３】
第１４節  ハッシュは、それぞれのデータユニットに適用される暗号学的に強い一方向ハッシュ関数によって生成される、第１３節に記載の方法。
【００８４】
第１５節  フィンガープリントディクショナリを、装置から受信した各データユニットに対応するフィンガープリントで更新することをさらに備える、第１２節に記載の方法。
【００８５】
第１６節  データは複数のデータブロックを備え、各データブロックは複数のデータユニットのうち２つ以上を備える、第１２節に記載の方法。
【００８６】
第１７節  データはデータストアに保存され、装置から受信した１または複数のデータユニットをデータストアに保存することをさらに備える、第１２節に記載の方法。
【００８７】
第１８節  データストアを仮想化データストアとして、複数の顧客にネットワークを介して提供することをさらに備える方法であって、データストアに保存されるデータは複数の顧客それぞれの顧客データを含み、装置は複数の顧客の１つに対応し、装置はデータストアからのそれぞれの顧客の顧客データの少なくとも一部をローカルにキャッシュする、第１７節に記載の方法。
【００８８】
第１９節  フィンガープリントディクショナリは、複数の顧客の顧客データのフィンガープリントを含み、顧客識別子を各顧客に関連させることをさらに備える方法であって、フィンガープリントディクショナリを検索することは、それぞれの顧客の顧客識別子にしたがって、それぞれの顧客データに対応するフィンガープリントの中のみから検索することを備える、第１８節に記載の方法。
【００８９】
第２０節  表示された１または複数のデータユニットを装置から受信後に、検索によってフィンガープリントディクショナリ内にあると表示された少なくとも１つのフィンガープリントは、その後フィンガープリントディクショナリから削除されたことを判断し、
装置にネットワークを介して、少なくとも１つのフィンガープリントに対応する少なくとも１つのデータユニットの表示を送信し、
装置からネットワークを介して、表示された少なくとも１つのデータユニットを受信することと、
をさらに備える、第１２節に記載の方法。
【００９０】
第２１節  コンピュータ実行可能なプログラム命令を保存する非一時的コンピュータアクセス可能ストレージメディアであって、
データのフィンガープリントをフィンガープリントディクショナリにローカルに保存し、データは複数のデータユニットを備え、フィンガープリントディクショナリの各フィンガープリントは、データ内のそれぞれのデータユニットを一意に識別し、
ネットワークを介して装置から、装置でキャッシュされた異なるデータユニットにそれぞれ対応する１または複数のフィンガープリントを受信し、
フィンガープリントディクショナリを、装置から受信した１または複数のフィンガープリントそれぞれのために検索して、フィンガープリントがフィンガープリントディクショナリ内にあるか、またはフィンガープリントディクショナリ内にないかを判断し、フィンガープリントがフィンガープリントディクショナリ内にないと判断することは対応するデータユニットをアップロードすべきであることを示し、
装置にネットワークを介して、フィンガープリントディクショナリを検索することによって判断した、１または複数のアップロードすべきデータユニットの表示を送信し、
装置からネットワークを介して、表示された１または複数のデータユニットを受信し、各受信したデータユニットは、フィンガープリントディクショナリ内にはないフィンガープリントに対応することと、
を実装する、非一時的コンピュータアクセス可能ストレージメディア。
【００９１】
第２２節  各フィンガープリントはそれぞれのデータユニットのハッシュである、第２１節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【００９２】
第２３節  ハッシュは、それぞれのデータユニットに適用される暗号学的に強い一方向ハッシュ関数によって生成される、第２２節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【００９３】
第２４節  プログラム命令は、フィンガープリントディクショナリを、装置から受信した各データユニットに対応するフィンガープリントで更新するように実装する、コンピュータ実行可能である、第２１節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【００９４】
第２５節  データは複数のデータブロックを備え、各データブロックは複数のデータユニットのうち２つ以上を備える、第２１節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【００９５】
第２６節  データはデータストアに保存され、プログラム命令はさらに、装置から受信した１または複数のデータユニットをデータストアに保存するように実装するために、コンピュータ実行可能である、第２１節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【００９６】
第２７節  プログラム命令は、データストアを仮想化データストアとして、複数の顧客にネットワークを介して提供し、データストアに保存されるデータは複数の顧客それぞれの顧客データを含み、装置は複数の顧客の１つに対応し、装置はデータストアからのそれぞれの顧客の顧客データの少なくとも一部をローカルにキャッシュするように実装するために、コンピュータ実行可能である、第２６節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【００９７】
第２８節  フィンガープリントディクショナリは、複数の顧客の顧客データのフィンガープリントを含み、顧客識別子を各顧客に関連させるためにプログラム命令はコンピュータ実行可能であり、フィンガープリントディクショナリを検索する際に、それぞれの顧客の顧客識別子にしたがって、それぞれの顧客データに対応するフィンガープリントの中のみから検索するように実装するためにプログラム命令はコンピュータ実行可能である、第２７節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【００９８】
第２９節  プログラム命令はさらに、表示された１または複数のデータユニットを装置から受信後に、検索によってフィンガープリントディクショナリ内にあると表示された少なくとも１つのフィンガープリントは、その後フィンガープリントディクショナリから削除されたことを判断し、
装置にネットワークを介して、少なくとも１つのフィンガープリントに対応する少なくとも１つのデータユニットの表示を送信し、
装置からネットワークを介して、表示された少なくとも１つのデータユニットを受信するように実装するために、コンピュータ実行可能である、第２１節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【００９９】
第３０節  データ受信器を実装し、データ受信器は、データのフィンガープリントをフィンガープリントディクショナリにローカルに保存し、データは複数のデータユニットを備え、フィンガープリントディクショナリの各フィンガープリントは、データ内のそれぞれのデータユニットを一意に識別する１または複数の装置と、
データ送信器を実装する１または複数の装置とを備えるシステムであって、
データ送信器は、
ローカルにキャッシュされたデータの複数のデータユニットのフィンガープリントを生成し、各フィンガープリントはローカルにキャッシュされたデータ内のそれぞれのデータユニットを一意に識別し、
フィンガープリントをデータ受信器に通信チャンネルを介して送信するように構成され、
データ受信器は、
フィンガープリントディクショナリを、データ送信器から受信したフィンガープリントのために検索して、フィンガープリントのそれぞれがフィンガープリントディクショナリ内にあるか、またはフィンガープリントディクショナリ内にないかを判断し、フィンガープリントがフィンガープリントディクショナリ内にないと判断することは対応するデータユニットをアップロードすべきであることを示し、
データ送信器に通信チャンネルを介して、フィンガープリントディクショナリを検索することによって判断した、１または複数のアップロードすべきデータユニットの表示を送信するように構成され、
データ送信器は、データ受信器に通信チャンネルを介して、表示された１または複数のデータユニットを送信するように構成され、フィンガープリントディクショナリ内にはないフィンガープリントに対応するデータユニットのみをデータ受信器に送信する、システム。
【０１００】
第３１節  表示された１または複数のデータユニットをデータ送信器から受信後に、データ受信器はさらに、
検索によって、フィンガープリントディクショナリ内にあると表示された少なくとも１つのフィンガープリントは、その後フィンガープリントディクショナリから削除されたことを判断し、
データ送信器に通信チャンネルを介して、少なくとも１つのフィンガープリントに対応する少なくとも１つのデータユニットの表示を送信し、
データ送信器から通信チャンネルを介して、表示された少なくとも１つのデータユニットを受信するように構成される、第３０節に記載のシステム。
【０１０１】
第３２節  通信チャンネルはインターネットである、第３０節に記載のシステム。
【０１０２】
第３３節  データ受信器はデータをデータストアに保存し、データ受信器は、データ送信器から受信した１または複数のデータユニットをデータストアに保存する、第３０節に記載のシステム。
【０１０３】
第３４節  通信チャンネルはネットワークであり、データ受信器は、データストアを仮想化データストアとして複数の顧客にネットワークを介して提供し、データストアに保存されたデータは複数の顧客それぞれの顧客データを含み、データ送信器は複数の顧客の１つに関連し、データ送信器は、データストアからのそれぞれの顧客の顧客データの少なくとも一部をローカルにキャッシュする、第３３節に記載のシステム。
【０１０４】
第３５節  フィンガープリントディクショナリは複数の顧客の顧客データのフィンガープリントを含み、データ受信器は顧客識別子を各顧客に関連させ、フィンガープリントディクショナリを検索する際に、データ受信器はそれぞれの顧客の顧客識別子にしたがって、それぞれの顧客データに対応するフィンガープリントの中のみから検索する、第３４節に記載のシステム。
【０１０５】
第３６節  データ送信器は顧客サイトのローカルネットワークに通信可能に接続し、通信チャンネルはグローバルネットワークを介した通信チャンネルであり、データ送信器は、
データの部分をデータ受信器からグローバルネットワークを介してダウンロードして、ローカルにキャッシュし、
ローカルにキャッシュされたデータに、ローカルネットワークのその他の装置で実装される１または複数の仮想コンピューティングシステムを含む、ローカルネットワークのその他のプロセスに対するローカルアクセスを提供する、第３０節に記載のシステム。
【０１０６】
第３７節  データ送信器は通信チャンネルの帯域幅の一部を割り当てられ、データ送信器は、必要な場合は通信チャンネルの追加の帯域幅の割り当てを要求し、必要ではない場合は通信チャンネルの帯域幅を解除するように構成される、第３６節に記載のシステム。
【０１０７】
第３８節  少なくとも１つのプロセッサと、
プログラム命令を備えるメモリとを備える装置であって、プログラム命令は、少なくとも１つのプロセッサによって、
ローカルにキャッシュされたデータの複数のデータユニットのフィンガープリントを生成し、各フィンガープリントはローカルにキャッシュされたデータ内のそれぞれのデータユニットを一意に識別し、
フィンガープリントを遠隔データストレージサービスにネットワークを介して送信し、遠隔データストレージサービスはデータのプライマリデータストアを維持し、
遠隔データストレージサービスからネットワークを介して、プライマリデータストアに保存すべき１または複数のデータユニットの表示を受信し、
ネットワークを介して遠隔データストレージサービスに、遠隔データストレージサービスによってプライマリデータストアに保存するための１または複数のデータユニットを送信するように実行可能である、装置。
【０１０８】
第３９節  データユニットのフィンガープリントを生成するために、プログラム命令は、少なくとも１つのプロセッサによって、ハッシュ関数をデータユニットに適用するようにコンピュータ実行可能である、第３８節に記載の装置。
【０１０９】
第４０節  ハッシュ関数は暗号学的に強い一方向ハッシュ関数である、第３９節に記載の装置。
【０１１０】
第４１節  ローカルにキャッシュされたデータは複数のデータブロックとしてキャッシュされ、複数のデータユニットは複数のデータブロックの１つに対応する、第３８節に記載の装置。
【０１１１】
第４２節  複数のデータブロックの１つは、ローカルにキャッシュされたデータブロックが作成または修正され、したがってローカルにキャッシュされたデータからプライマリデータストアにアップロードすることが必要であると表示するためにダーティとマークされる、第４１節に記載の装置。
【０１１２】
第４３節  遠隔データストレージサービスは、仮想化データストアを複数の顧客にネットワークを介して提供し、仮想化データストアに保存されるデータは複数の顧客それぞれの顧客データを含み、装置は複数の顧客の１つに関連し、プログラム命令は、少なくとも１つのプロセッサによって、データストアからそれぞれの顧客の顧客データの少なくとも一部分をローカルにキャッシュするように実行可能である、第３８節に記載の装置。
【０１１３】
第４４節  装置は顧客サイトのローカルネットワークに通信可能に接続し、プログラム命令は、少なくとも１つのプロセッサによって、
顧客データの部分を遠隔データストレージサービスからダウンロードして、ローカルにキャッシュし、
ローカルにキャッシュされた顧客データに、ローカルネットワークのその他の装置で実装される１または複数の仮想コンピューティングシステムを含む、ローカルネットワークのその他のプロセスに対するローカルアクセスを提供するように実行可能である、第４３節に記載の装置。
【０１１４】
第４５節  顧客データをダウンロードしてローカルにキャッシュした部分は、ブロックベースのストレージ技術によるデータブロックである、第４４節に記載の装置。
【０１１５】
第４６節  装置は、ネットワークを介して遠隔データストレージサービスまでの通信チャンネルの帯域幅の一部を割り当てられ、プログラム命令は、少なくとも１つのプロセッサによって、必要な場合は、データユニットを遠隔データストレージサービスにアップロードするために通信チャンネルの追加の帯域幅の割り当てを要求し、必要ではない場合には、通信チャンネルの帯域幅を解除するように実行可能である、第３８節に記載の装置。
【０１１６】
第４７節  ローカルにキャッシュされたデータの複数のデータユニットのフィンガープリントを生成し、各フィンガープリントはローカルにキャッシュされたデータ内のそれぞれのデータユニットを一意に識別し、
フィンガープリントをデータ受信器に通信チャンネルを介して送信し、
データサービスから通信チャンネルを介して、データサービスに通信チャンネルを介してアップロードすべき１または複数のデータユニットの表示を受信し、
通信チャンネルを介してデータサービスに、表示された１または複数のデータユニットを送信することと、
を備える、方法。
【０１１７】
第４８節  データユニットのフィンガープリントを生成するために、プログラム命令は、暗号学的に強い一方向ハッシュ関数をデータユニットに適用するようにコンピュータ実行可能である、第４７節に記載の方法。
【０１１８】
第４９節  ローカルにキャッシュされたデータは複数のデータブロックとしてキャッシュされ、複数のデータユニットは複数のデータブロックの１つに対応する、第４７節に記載の方法。
【０１１９】
第５０節  複数のデータブロックの１つは、ローカルにキャッシュされたデータブロックが作成または修正され、したがってローカルにキャッシュされたデータからデータサービスにアップロードすることが必要であると表示するためにダーティとマークされる、第２１節に記載の方法。
【０１２０】
第５１節  データサービスは、データのプライマリデータストアを維持する遠隔データストレージサービスである、第４７節に記載の方法。
【０１２１】
第５２節  通信チャンネルはネットワークである、第４７節に記載の方法。
【０１２２】
第５３節  データサービスは、仮想化データストアを複数の顧客にネットワークを介して提供し、仮想化データストアに保存されるデータは複数の顧客それぞれの顧客データを含み、装置は複数の顧客の１つに関連し、プログラム命令は、データストアからのそれぞれの顧客の顧客データの少なくとも一部をローカルにキャッシュするようにコンピュータ実行可能である、第５２節に記載の方法。
【０１２３】
第５４節  装置は顧客サイトのローカルネットワークに通信可能に接続し、プログラム命令は、
顧客データの部分をデータサービスからダウンロードして、ローカルにキャッシュし、
ローカルにキャッシュされたデータに、ローカルネットワークのその他の装置で実装される１または複数の仮想コンピューティングシステムを含む、ローカルネットワークのその他のプロセスに対するローカルアクセスを提供するように実装するために、コンピュータ実行可能である、第５２節に記載の方法。
【０１２４】
第５５節  コンピュータ実行可能であるプログラム命令を保存する非一時的コンピュータアクセス可能ストレージメディアであって、プログラム命令は、
ローカルにキャッシュされたデータの複数のデータユニットのフィンガープリントを生成し、各フィンガープリントはローカルにキャッシュされたデータ内のそれぞれのデータユニットを一意に識別し、
フィンガープリントをデータサービスに通信チャンネルを介して送信し、
データサービスから通信チャンネルを介して、データサービスに通信チャンネルを介してアップロードすべき１または複数のデータユニットの表示を受信し、
通信チャンネルを介してデータサービスに、表示された１または複数のデータユニットを送信するように実装する、非一時的コンピュータアクセス可能ストレージメディア。
【０１２５】
第５６節  データユニットのフィンガープリントを生成するために、プログラム命令は、ハッシュ関数をデータユニットに適用するようにコンピュータ実行可能である、第５５節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【０１２６】
第５７節  ハッシュ関数は暗号学的に強い一方向ハッシュ関数である、第５６節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【０１２７】
第５８節  ローカルにキャッシュされたデータは複数のデータブロックとしてキャッシュされ、複数のデータユニットは複数のデータブロックの１つに対応する、第５５節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【０１２８】
第５９節  複数のデータブロックの１つは、ローカルにキャッシュされたデータブロックが作成または修正され、したがってローカルにキャッシュされたデータからデータサービスにアップロードすることが必要であると表示するためにダーティとマークされる、第５８節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【０１２９】
第６０節  データサービスは、データのプライマリデータストアを維持する遠隔データストレージサービスである、第５５節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【０１３０】
第６１節  通信チャンネルはネットワークである、第５５節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【０１３１】
第６２節  データサービスは、仮想化データストアを複数の顧客にネットワークを介して提供し、仮想化データストアに保存されるデータは複数の顧客それぞれの顧客データを含み、装置は複数の顧客の１つに関連し、プログラム命令は、データストアからのそれぞれの顧客の顧客データの少なくとも一部をローカルにキャッシュするようにコンピュータ実行可能である、第６１節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【０１３２】
第６３節  装置は顧客サイトのローカルネットワークに通信可能に接続し、プログラム命令は、
顧客データの部分をデータサービスからダウンロードして、ローカルにキャッシュし、
ローカルにキャッシュされたデータに、ローカルネットワークのその他の装置で実装される１または複数の仮想コンピューティングシステムを含む、ローカルネットワークのその他のプロセスに対するローカルアクセスを提供するように実装するために、コンピュータ実行可能である、第６１節に記載の非一時的コンピュータアクセス可能ストレージメディア。
【０１３３】
第６４節  顧客データをダウンロードしてローカルにキャッシュした部分は、ブロックベースのストレージ技術によるデータブロックである、第６３節に記載の非一時的コンピュータアクセス可能ストレージメディア。
結論
【０１３４】
様々な実施形態は、さらに、コンピュータアクセス可能メディアに関する前述の説明にしたがって実装する命令および／またはデータを受信し、送信し、または保存することを含む。一般には、コンピュータアクセス可能メディアは、磁気メディアまたは光学メディアなどのストレージメディアまたはメモリ、たとえば、ディスクまたはＤＶＤ／ＣＤ−ＲＯＭ、ＲＡＭ（たとえばＳＤＲＡＭ、ＤＤＲ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなどの揮発性または不揮発性メディアを含んでいてもよく、また、ネットワークおよび／または無線リンクなどの通信メディアが伝達する電気、電磁気、またはデジタル信号などの伝達メディアまたは信号を含んでいてもよい。
【０１３５】
図に例示する様々な方法および本明細書に記載する様々な方法は、方法の代表的な実施形態を表す。方法は、ソフトウェア、ハードウェア、またはその組み合わせに実装されてもよい。方法の順番を変化させてもよく、様々な要素の追加、順番変更、組み合わせ、削除、修正などを行ってもよい。
【０１３６】
様々な修正および変更を、この開示から利益を受ける当業者に明らかなように行ってもよい。すべてのこのような修正および変更、したがって、前述の説明は限定的なものではなく、例示として理解されることを意図するものである。
【図１】
2015179523.tif 000003
【図２Ａ】
2015179523.tif 000004
【図２Ｂ】
2015179523.tif 000005
【図２Ｃ】
2015179523.tif 000006
【図２Ｄ】
2015179523.tif 000007
【図３Ａ】
2015179523.tif 000008
【図３Ｂ】
2015179523.tif 000009
【図３Ｃ】
2015179523.tif 000010
【図４Ａ】
2015179523.tif 000011
【図４Ｂ】
2015179523.tif 000012
【図４Ｃ】
2015179523.tif 000013
【図４Ｄ】
2015179523.tif 000014
【図４Ｅ】
2015179523.tif 000015
【図４Ｆ】
2015179523.tif 000016
【図５】
2015179523.tif 000017
【図６】
2015179523.tif 000018
【図７】
2015179523.tif 000019