(58)【調査した分野】(Int.Cl.,DB名)
請求項13に記載のシステムにおいて、前記コールバック・モジュールが、チャンク・コンテナをソートしたリストを生成するために、追加のコールを前記復元アプリケーションに対して生成し、
前記コールバック・モジュールが、前記ソートしたリストによって定められた順序で前記複数のデーター・チャンクに対応する複数の追加のコールを前記復元アプリケーションに対して生成する、システム。
【発明を実施するための形態】
【0024】
I.序説
[0046] 本明細書は、本発明の特徴を組み込んだ1つ以上の実施形態を開示する。開示する実施形態(1つまたは複数)は、単に本発明を例示するに過ぎない。本発明の範囲は、開示する実施形態(1つまたは複数)に限定されるのではない。本発明は、本明細書に添付する特許請求の範囲によって定められるものとする。
【0025】
[0047] 本明細書において「一実施形態」、「実施形態」、「実施形態例」等に言及するときは、その記載される実施形態が特定の特徴、構造、または特性を含むことができるが、あらゆる実施形態がその特定の特徴、構造、または特性を必ずしも含まなくてもよいことを示す。更に、このような句は、必ずしも同じ実施形態に言及するとは限らない。更に、特定の特徴、構造、または特性をある実施形態と関連付けて説明するとき、明示的に記載されているか否かを問わず、このような特徴、構造、または特性を他の実施形態と関連付けて実施することは、当業者の知識の範囲内のことであることを具申する。
【0026】
[0048] 本明細書における最適化データーとは、チャンクの単一インスタンス化および圧縮というようなデーター重複排除技法の内1つ以上によって最適化、即ち、重複排除されているデーターを指す。最適化ストリームとは、重複排除されたストリーム、言い換えると、データー重複排除技法を用いて最適化されたそのデーターを指す。
II.実施形態例
[0049] 実施形態は、データー重複排除のための技法を示す。このような実施形態は、データー量(例えば、バイト数)を格納すること、送信すること、またはデーターの忠実性や完全性を損なうことなく削減することを可能にする。たとえば、実施形態は、最適化データーにアクセスする際にレイテンシー量の低減を可能にする。更に、実施形態は、計算機械/デバイスのようなリソースを一層効率的に使用し、リソースの消費を低減することができる。その上更に、実施形態は、データー重複排除、重複排除データーのバックアップ、およびストレージからのバックアップ・データーの復元のための技術も提供し、これらは、格納するディジタル・データー量の増大に合わせて拡大可能(scalable)である。
【0027】
[0050] 例えば、一実施形態では、データー重複排除のために、スケーラブルなチャンク・ストアを提供する。このチャンク・ストアは、最適化データーのアクセスにおいてレイテンシーを最小限に抑え、機械のリソース消費(例えば、メモリーおよびディスクI/O)を削減し、ならびにデーター重複排除、データーのバックアップ、およびデーターの復元の間における信頼性を高める種々の技法を可能にする。以下の副章において実施形態例について更に詳しく説明する。
【0028】
A.データー重複排除の実施形態例
[0051] 実施形態では、格納しようとするデーターを最適化して、そのデーターに必要な記憶量を削減することができる。例えば、データー・ストリームを一意のデーター・チャンクの形態で格納することができる。データー・チャンクは、データー・ストリームを定める最適化データー・メタデーターによって参照することができる。このように、同じデーター・チャンクを多数回格納するのではなく、多数のデーター・ストリームのメタデーターが、格納されている同じデーター・チャンクを参照すればよいので、データー・ストリームが一層効率的に格納されることになる。更に、所望に応じてストレージから最適化データーを要求することもできる(例えば、アプリケーションによって)。このような場合、データー・ストリームは、対応するメタデーターにしたがって、格納されているデーター・チャンクから組み立て直すことができる。
【0029】
[0052] 例えば、
図1は、一実施形態例によるデーター重複排除システム100のブロック図を示す。
図1に示すように、システム100は、記憶システム102、データー重複排除モジュール104、維持モジュール106、およびストレージ108を含む。更に、記憶システム102は、データー・ストリームAPI(アプリケーション・プログラミング・インターフェース)110、チャンク維持API112、およびデーター・アクセスAPI114を含む。システム100について、最適化データーの格納、およびストレージからの最適化データーの復元を例示するために、以下のように説明するが、これは限定することを意図するのではない。
【0030】
[0053] システム100は、効率的にデーターをストレージ108に格納することを可能にするように、そしてストレージ108からデーターを引き出すことを可能にするように構成されている。例えば、一実施形態では、データー重複排除モジュール104があるとよい。データー重複排除モジュール104は、受信データーを格納に最適化するように構成されている。例えば、データー重複排除モジュール104は、データー・ストリーム132として受信した受信データーを圧縮することができる。データー・ストリーム132は、データー・ファイルの一部、1つのデーター・ファイル、多数のデーター・ファイル、および/またはファイルおよび/またはファイル部分のあらゆる組み合わせを含むことができる。
図1に示すように、データー重複排除モジュール104は、データー・チャンク124を生成する。データー・チャンク124は、データー・ストリームを圧縮および区分したバージョンとすることができる。
【0031】
[0054] データー・ストリームAPI110は、記憶システム102がデーター・チャンク124を受け取るためのインターフェースを設ける。データー・チャンク124は、このデーター・チャンク124が生成された元であるデーター・ストリーム132を形成する複数のデーター・チャンクを含むことができる。データー・ストリームAPI110は、関連技術(1つまたは複数)の当業者には周知である、適したやり方であればいずれでも構成することができる。データー・ストリームAPI110は、チャンク・ストア・インターフェース116によって受け取られるデーター・チャンク124を出力することができる。
【0032】
[0055]
図1に示すように、ストレージ108は記憶システム102に結合されている。チャンク・ストア・インターフェース116は、API110、112、および114とストレージ108との間のインターフェースである。例えば、チャンク・ストア・インターフェース116は、データー・チャンク124を受け取ることができ、データー・チャンク124のデーター・チャンクをストレージ108に格納することができる。例えば、
図1に示すように、ストレージ108はチャンク・ストア118を含む。チャンク・ストア・インターフェース116は、受け取ったデーター・チャンク124のデーター・チャンクをチャンク・ストア118に、データー・チャンク128として格納することができる。
【0033】
[0056] データー・アクセスAPI114は、アプリケーションが記憶システム102のデーターを要求するためのインターフェースを設ける。例えば、
図1に示すように、データー・アクセスAPI114は、データー・ストリーム要求120を受ける。データー・アクセスAPI114は、関連技術(1つまたは複数)における当業者には周知である、適したやり方であればいずれでも構成することができる。データー・アクセスAPI114は、チャンク・ストア・インターフェース116が受けたデーター・ストリーム要求120を出力することができる。チャンク・ストア・インターフェース116は、データー・チャンクを、データー・ストリーム要求120の要求されたデーター・ストリームに対応するストレージ108に(例えば、チャンク・ストア118に)要求することができる。チャンク・ストア・インターフェース116は、要求されたデーター・チャンクをストレージ108から、データー・チャンク130として受け取ることができ、データー・チャンク130を含むデーター・ストリームをデーター・アクセスAPI114に供給することができる。データー・アクセスAPI114は、このデーター・ストリーム(例えば、1つのファイルまたは組み立て直されたファイル)を要求元のアプリケーションに、データー・ストリーム応答122として供給することができる。
【0034】
[0057] 更に、維持モジュール106は、チャンク・ストア118に格納されているデーター・チャンクに関する1つ以上の維持作業を実行するためにあるとよい。例えば、維持モジュール106は、ストレージ108に格納されているデーター・チャンクの断片化解消を実行するために、断片化解消モジュールを含むことができる。例えば、断片化解消モジュールは、ストレージ108における空き空間を排除する(例えば、コンパクション(compaction)を実行する)、関連データー・チャンクを纏めてシーケンスにする、および/または他の関連タスクを実行するように構成することができる。他の例では、維持モジュール106は、ストレージ108に格納されているデーター/チャンクのガベージ・コレクションを実行するために、ガベージ・コレクション・モジュールを含むこともできる。例えば、ガベージ・コレクション・モジュールは、ストレージ108における使用されていないデーター・チャンクを削除するように構成することができる。更に他の実施形態では、維持モジュール106は、ストレージ108に関して追加のまたは代わりの維持タスクを実行することもできる。
【0035】
[0058]
図1に示すように、チャンク維持API112は、維持モジュール106が記憶システム102と相互作用するためのインターフェースを設ける。維持モジュール106は、維持タスク126(例えば、断片化解消命令、コンパクション命令、データー・チャンク削除命令等)を生成することができる。維持タスク126は、チャンク維持API112によって受けられる。チャンク維持API112は、関連技術(1つまたは複数)の当業者には周知である、適したやり方であればいずれでも構成することができる。チャンク維持API112は、は、維持タスク126をチャンク・ストア・インターフェース116に付与することができる。チャンク・ストア・インターフェース116は、ストレージ108に格納されているデーター・チャンクに対して維持タスク126を実行することを可能にすることができる。
【0036】
[0059] 記憶システム102は、1つ以上のコンピューター/計算デバイスの形態を含む、適した形態であればいずれにでも実現することができる。ストレージ108は、磁気ディスク(例えば、ハード・ディスク・ドライブにおける)、光ディスク(例えば、光ディスク・ドライブにおける)、磁気テープ(例えば、テープ・ドライブにおける)、および/または他のあらゆる適したタイプの記憶媒体を含む、あらゆるタイプのメカニズムの内1つ以上を含むことができる。
【0037】
[0060] 尚、データー重複排除システム100は、本発明の実施形態を実現することができる環境の一例であることを注記しておく。データー重複排除紙アステム100は、例示の目的に限って提示するのであって、限定することを意図するのではない。実施形態は、データー重複排除システムの更に他のタイプおよび構成にも組み込むこともできる。
【0038】
B.データー・チャンク局在性(locality)を可能にするチャンク・ストアの実施形態例
[0061]
図1のチャンク・ストア118は、データー・チャンクの形態でデーター・ストリームをいずれのやり方でも格納することができる。例えば、チャンク・ストア118は、データー・ストリームに含まれるデーター・チャンクを示す最適化ストリーム・メタデーターを、マップ、データーベース、または他の形態で格納することができる。チャンク・ストア118は、更に、参照されているデーター・チャンクも格納することができる。一実施形態では、チャンク・ストア118は、データー重複排除技法にしたがって、データー・チャンクの重複コピーを格納しない。
【0039】
[0062] 例えば、
図2は、一実施形態例による、チャンク・ストア118のブロック図を示す。
図2に示すように、チャンク・ストア118は、ストリーム・コンテナ202とチャンク・コンテナ204とを含む。ストリーム・コンテナ202は、1つ以上のデーター・ストリームについての最適化ストリーム・メタデーター206を含み、チャンク・コンテナ204は、複数のデーター・チャンク208を含む。データー・チャンク208は、1つ以上のデーター・ストリーム(例えば、
図1のデーター・ストリーム132)によって参照されているデーターのセグメントである。最適化ストリーム・メタデーター206は、元のデーター・ストリーム構造と最適化データー・チャンク構造との間におけるマッピングを記述するデーター構造である。最適化ストリーム・メタデーター206は、参照されているデーター・チャンクを突き止め、ファイル・ストリーム・ビューに組み立てることができるように、データー・チャンク位置情報を、直接収容するかまたは間接層を介して収容する。最適化ストリーム・メタデーター206は、実施形態では、種々の形態をなすことができ、ストリーム・マップ(各ストリーム・マップが、対応するデーター・ストリームについてのデーター・チャンク位置を示す)、データーベース、またはグローバル・テーブル(全てのデーター・ストリームに対してデーター・チャンク位置を示す)の形態、あるいは他の形態を有することを含む。
図2の例では、データー・チャンク208および最適化ストリーム・メタデーター206は、それぞれ、ストリーム・コンテナ202およびチャンク・コンテナ204に格納されている。これらのコンテナは、ファイル・システムにおけるファイルであってよい。一実施形態では、チャンク・ストア118は、最適化ストリーム・メタデーター206が、ファイル・ストリーム−データー・チャンク208のマッピング、データー・チャンク・アドレス、およびハッシュを記述するための内部メタデーター(データー・ストリーム・メタデーター)を収容するデーター・チャンク(例えば、各ストリーム・マップをデーター・チャンクとして格納する)として格納されるように、全てのデーターをチャンクの形態で格納することができる。あるいは、最適化ストリーム・メタデーター206を他の形態(例えば、中央データーベースまたはテーブル等)で格納してもよい。
【0040】
[0063] ストリーム・コンテナ202およびチャンク・コンテナ204は、実施形態では、種々の方法で構成することができる。例えば、
図3は、一実施形態例によるチャンク・ストア300のブロック図を示す。チャンク・ストア300は、
図2のチャンク・ストア118の一例である。
図3に示すように、チャンク・ストア300は、ストレージ・コンテナ302とチャンク・コンテナ304とを含む。ストレージ・コンテナ302は、
図2のストレージ・コンテナ202の一例であり、チャンク・コンテナ304は、
図2のチャンク・コンテナ204の一例である。
図3の実施形態では、ストレージ・コンテナ302は、ファイル・ヘッダー306、リダイレクション・テーブル308、および複数のストリーム・マップ310を含む。ストリーム・マップ310は、最適化ストリーム・メタデーター206の例であり、図示を容易にするために設けられている。例示の目的に限って、最適化ストリーム・メタデーター206は、ここではストリーム・マップに関して頻繁に記載されることがあるが、他の実施形態では、最適化ストリーム・メタデーター206を代わりにデーターベース、グローバル・テーブル等として格納してもよいことが理解されることを意図している。
【0041】
[0064]
図3には、例示の目的に限って、第1および第2ストリーム・マップ310aおよび310bが示されているが、実施形態では、いずれの数のストリーム・マップ310でもストリーム・コンテナ302に含まれてもよく、数百、数千、そしてそれよりも更に多い数のストリーム・マップ310を含む。チャンク・コンテナ304は、ファイル・ヘッダー318、リダイレクション・テーブル320、および複数のデーター・チャンク322を含む。
図3には、例示の目的に限って、第1および第2データー・チャンク322aおよび322bが示されているが、実施形態では、いずれの数のデーター・チャンク322でもチャンク・コンテナ304に含まれてもよく、数百、数千、そしてそれよりも更に多い数のデーター・チャンク322を含む。
図3のこれらの特徴について、以下のように説明する。
【0042】
[0065] ファイル・ヘッダー306は、ストリーム・コンテナ302がファイルとして格納される実施形態では、ストリーム・コンテナ302のファイル・ヘッダーとなる。ファイル・ヘッダー306は、ストリーム・コンテナ識別子(例えば、ストリーム・コンテナ識別番号)等を含む、ストリーム・コンテナ302と関連のある情報を含むことができる。
【0043】
[0066] リダイレクション・テーブル308がストリーム・コンテナ302内にあるのは任意である。ある場合、リダイレクション・テーブル308は、ストリーム・マップ310の内いずれのストリーム・コンテナ302における位置変化に関する情報も格納することができる。例えば、第1ストリーム・マップ310aをストリーム・コンテナ302から削除することもあり、第2ストリーム・マップ310bを第1ストリーム・マップ310aの位置に移動させることもある(例えば、断片化解消またはコンパクション・ルーチンのために)。この移動に続いて、アプリケーションがストリーム・コンテナ302にアクセスして、第2ストリーム・マップ310bを引き出すことができる。しかしながら、このアプリケーションは、第2ストリーム・マップ310bの以前の位置も引き続き使っている場合もある。リダイレクション・テーブル308は、第2ストリーム・マップ310bの現在の位置を示す第2ストリーム・マップ310bについてのマッピングを含むことができる。したがって、アプリケーションは、リダイレクション・テーブル308にアクセスして、第2ストリーム・マップ310bの現在の位置を判定することができ、これによってこの新たな位置から第2ストリーム・マップ310bを引き出すことを可能にすることができる。
【0044】
[0067] ストリーム・マップ310は、
図2の最適化ストリーム・メタデーター206の例である。ストリーム・マップ310の各々は、特定のデーター・ストリームを構成するデーター・チャンク332のシーケンスを定めるために用いられる。
図3に示すように、ストリーム・マップ310の各々は、ストリーム・ヘッダー312、メタデーター314、およびハッシュ値316を含むことができる。例えば、第1ストリーム・マップ310aは、ストリーム・ヘッダー312a、メタデーター314a、およびハッシュ値316aを含むことが示されており、第2ストリーム・マップ310bは、ストリーム・ヘッダー312b、メタデーター314b、およびハッシュ値316bを含むことが示されている。各ストリーム・ヘッダー312は、ストリーム・マップ識別子(例えば、ストリーム・マップ識別番号のような)等のような、対応するストリーム・マップ310に関連する情報を含む。各メタデーター314は、対応するストリーム・マップ310によって定められるデーター・ストリームを構成するデーター・チャンク322を記述する情報を含む。ハッシュ値316が存在するのは任意である。ハッシュ値316は、対応するストリーム・マップ310によって定められるデーター・ストリームを構成するデーター・チャンク322に対するハッシュ値である。ハッシュ値316は、対応するデーター・ストリームを構成するデーター・チャンクのハッシュ・ベクトルに効率的なアクセスを付与するために、ストリーム・マップ310に格納するとよい。例えば、これは、データー・ストリーム・ハッシュのリスト全体(全ての最適化ファイル・チャンクに対するハッシュ)に対する高速アクセスが望まれる、ワイヤ・データー転送の状況(wire data transfer scenario)には有用である場合がある。
【0045】
[0068] メタデーター314は、データー・チャンク毎のメタデーター、またはデーター・チャンク特定のメタデーターであり、参照されているデーター・チャンク332毎にストリーム・マップ310に含むことができる。種々のタイプの情報をメタデーター314に含ませることができる。例えば、一実施形態では、データー・チャンク322についてのメタデーター314は、データー・ストリーム・オフセット、データー・チャンク識別子、および位置関係インディケーター(locality indicator)の内1つ以上を含むことができる。データー・ストリーム・オフセットは、特定のストリーム・マップ310によって定められるデーター・ストリームにおける、関連するデーター・チャンク322の位置を示す(例えば、データー・ストリームの先頭から、または関連するデーター・チャンク322が始まるデーター・ストリームにおける他の基準点からのバイト数)。データー・チャンク識別子は、チャンクidまたは「信頼性のあるチャンク・ロケータ」(reliable chunk locator)としても知られており、チャンク・コンテナ304における対応するデーター・チャンク322への参照またはポインタである。位置関係インディケーターは、チャンク・コンテナ304におけるチャンク挿入順序を表し、どのデーター・チャンク322を共通のストリーム・マップ310によって参照するとよいかという判断を行うことを可能にする。他の実施形態では、メタデーター314は、参照されているデーター・チャンク322毎に追加の情報および/または代わりの情報を含むこともできる。
【0046】
[0069]
図3のチャンク・コンテナ304を参照すると、ファイル・ヘッダー318は、チャンク・コンテナ304がファイルに格納される実施形態では、チャンク・コンテナ302に対するファイル・ヘッダーとなる。ファイル・ヘッダー318は、チャンク・コンテナ304に関連する情報を含むことができ、チャンク・コンテナ識別子(例えば、チャンク・コンテナ識別番号)、チャンク・コンテナ304の改訂回数(revision number)を示すチャンク・コンテナ生成インディケーター等を含む。
【0047】
[0070] リダイレクション・テーブル320がチャンク・コンテナ304内にあるのは任意である。ある場合、リダイレクション・テーブル320は、ストリーム・コンテナ302のリダイレクション・テーブル308がストリーム・マップ310の位置変化を扱うのと同様に、データー・チャンク322のいずれのチャンク・コンテナ304における位置変化に関する情報も格納することができる。
【0048】
[0071] データー・チャンク322は、
図2のデーター・チャンク208の例である。
図3に示すように、データー・チャンク322の各々は、チャンク・ヘッダー324とチャンク・データー326とを含む。例えば、第1データー・チャンク322aはチャンク・ヘッダー324aとチャンク・データー326aとを含み、第2データー・チャンク322bは、チャンク・ヘッダー324bとチャンク・データー326bとを含む。各チャンク・ヘッダー312は、データー・チャンク識別子等のような、対応するデーター・チャンク322に関連する情報を含む。各チャンク・データー326は、対応するデーターを含む。このデーターは、圧縮形態または非圧縮形態であってもよい。
【0049】
[0072] ストリーム・マップ310およびデーター・チャンク322は、データー重複排除を可能にするために、それぞれ、ストリーム・コンテナ302およびチャンク・コンテナ304に格納される。例えば、
図1のチャンク・ストア・インターフェース116は、データー・ストリーム132に関連するデーター・チャンク124を受け取り、
図3のチャンク・ストア300にこのデーター・チャンクを格納することができる。例えば、特定のデーター・ストリーム132について、チャンク・ストア・インターフェース116は、ストリーム・マップを生成することができ、このストリーム・マップを、ストリーム・コンテナ302に、チャンク・ストア・インターフェース116によってチャンク・コンテナ304に格納された1つ以上のデーター・チャンク322を参照するストリーム・マップ310として格納する。
【0050】
[0073] 例えば、
図3は、一実施形態例による、ストリーム・マップ310によって参照されている数個のデーター・チャンク332を示す。
図3に示すように、第1ストリーム・マップ310aは、チャンク・コンテナ304内にある第1および第2データー・チャンク322aおよび322bに対する参照を含むメタデーター314aを含む。つまり、第1および第2データー・チャンク322aおよび322bは、第1ストリーム・マップ310aに関連するソース・データー・ストリームの中に含まれている。例えば、メタデーター314aは、第1ストリーム・マップ310aによって定められるソース・データー・ストリーム内における第1データー・チャンク322aの位置を第1データー・チャンク322aに対して示すデーター・ストリーム・オフセット402値と、チャンク・コンテナ304内における第1データー・チャンク322aに対するデーター・チャンク識別子404(例えば、チャンク・ヘッダー324a内に格納されている第1データー・チャンク322aに対するデーター・チャンク識別子)と、更に第1データー・チャンク322aに対する位置関係インディケーター406とを含むことができる。更に、メタデーター314aは、ソース・データー・ストリーム内における第2データー・チャンク322bの位置を第2データー・チャンク322bに対して示すデーター・ストリーム・オフセット402値と、チャンク・コンテナ304内における第2データー・チャンク322bに対するデーター・チャンク識別子(例えば、チャンク・ヘッダー324b内に格納されている第2データー・チャンク322bに対するデーター・チャンク識別子)と、更に第2データー・チャンク322bに対する位置関係インディケーター406とを含むことができる。一実施形態では、第1および第2データー・チャンク322aおよび322bは、これらの位置関係インディケーターに同じ値を有することもあり、この値は、第1ストリーム・マップ310aによって定められるソース・データー・ストリームに対応するように生成され、第1および第2データー・チャンク322aおよび322bが連続的に(隣接して)チャンク・コンテナ304に格納されていることを示す。
【0051】
[0074] 更に、第2ストリーム・マップ310bは、チャンク・コンテナ304内にある第2データー・チャンク322bに対する参照を含むメタデーター314bを含む。例えば、メタデーター314bは、第2ストリーム・マップ310bによって定められるソース・データー・ストリーム内における第2データー・チャンク322bの位置を第2データー・チャンク322bに対して示すデーター・ストリーム・オフセット402値と、チャンク・コンテナ304内における第2データー・チャンク322bに対するデーター・チャンク識別子404(例えば、チャンク・ヘッダー324b内に格納されている第2データー・チャンク322bに対するデーター・チャンク識別子)と、第2データー・チャンク322bに対する位置関係インディケーター406とを含むことができる。第2データー・チャンク322bについてのメタデーター314bにおける位置関係インディケーター406は、第1および第2データー・チャンク322aおよび322bに対して生成された位置関係インディケーターと同じ値を有する。何故なら、第2データー・チャンク322bは、本来第1ストリーム・マップ310aのためにチャンク・コンテナ304に格納されたからである。第2ストリーム・マップ310bによって定められるソース・データー・ストリームがチャンク・ストア300に格納されたときに、他のデーター・チャンク322(
図3には示されていない)がチャンク・コンテナ304に新たに格納された場合、そのいずれにも、位置関係インディケーター406に対して新たな値が割り当てられる。
【0052】
[0075]
図1のチャンク・ストア・インターフェース116は、
図3のチャンク・ストア300内にデーター・ストリームを格納するために、種々の方法で構成することができる。例えば、
図4は、一実施形態例によるデーター・ストリーム・ストア・システムのブロック図を示す。
図4に示すように、データー・ストリーム・ストア・システム400は、データー・ストリーム・パーサー402、チャンク・ストア・インターフェース116、ストリーム・コンテナ302、およびチャンク・コンテナ304を含む。一実施形態では、データー・ストリーム・パーサー402は、
図1のデーター重複排除モジュール104に含まれてもよい。
図4の実施形態では、チャンク・ストア・インターフェース116は、データー・チャンク記憶マネージャー404、メタデーター生成器406、およびストリーム・マップ生成器408を含む。
図4のこれらの特徴について、
図5に関して次のように説明する。
図5は、一実施形態例にしたがって、データー・ストリームを格納するフローチャート500を示す。一実施形態では、
図4のシステム400は、フローチャート500にしたがって動作することができる。フローチャート500に関する論述に基づけば、関連技術(1つまたは複数)の当業者には、更に他の構造および動作的実施形態も明白であろう。フローチャート500およびシステム400について、以下のように説明する。
【0053】
[0076] フローチャート500は、ステップ502から開始する。ステップ502において、データー・ストリームを解析してデーター・チャンクを求める。例えば、
図4に示すように、データー・ストリーム・パーサー402は、データー・ストリーム410を受け取ることができる。データー・ストリーム410は、
図1のデーター・ストリーム132と同様に、1つ以上のファイルおよび/またはファイルの一部を含むことができる。データー・ストリーム・パーサー402は、データー・ストリーム410を解析して、データー・チャンク・シーケンス412として示す、データー・チャンクのシーケンスを求める。例えば、一実施形態では、データー・チャンク・シーケンス412は、データー・チャンクがデーター・ストリーム410において位置する順序で、これらのデーター・チャンクのシーケンスを含むことができる。データー・チャンク・シーケンス412のデーター・チャンクは、同じサイズを有することができ、または異なるサイズを有することもできる。
【0054】
[0077] ステップ504において、これらのデーター・チャンクのいずれかが、チャンク・コンテナに格納されているデーター・チャンクの複製であるか否か判断する。例えば、
図4に示すように、データー・チャンク記憶マネージャー404は、データー・チャンク・シーケンス412を受け取る。データー・チャンク記憶マネージャー404は、データー・チャンク・シーケンス412のデーター・チャンクのいずれかが既にチャンク・コンテナ304に格納されており、したがって複製であるか否か判断するように構成されている。例えば、一実施形態では、
図4に示すように、データー・チャンク記憶マネージャー404は、データー・チャンク情報426をチャンク・コンテナ304から受け取ることができる。データー・チャンク情報426は、チャンク・コンテナ304に格納されているデーター・チャンク毎にハッシュ値を含むことができる。他の実施形態では、データー・チャンク記憶マネージャー404は、ストリーム・コンテナ302からハッシュ値316(
図3)を受け取ることができる。これらのハッシュ値316は、チャンク・コンテナ304に格納されているデーター・チャンク322に対するハッシュ値である。データー・チャンク記憶マネージャー404は、データー・チャンク・シーケンス412のデーター・チャンク毎にハッシュ値を生成することができ、生成したハッシュ値を、データー・チャンク情報426において受け取ったハッシュ値(またはストリーム・コンテナ302からの)と比較して、データー・チャンク・シーケンス412のどのデーター・チャンクが既にチャンク・コンテナ304に格納されているか判断することができる。更に他の実施形態では、データー・チャンク記憶マネージャー404は、データー・チャンク・シーケンス412のどのデーター・チャンクが既にチャンク・コンテナ304に格納されているのか、関連技術(1つまたは複数)の当業者には周知である他の方法で判断することができる。
【0055】
[0078]
図4に示すように、データー・チャンク記憶マネージャー404は、格納チャンク指示416を生成する。格納チャンク指示416は、データー・チャンク・シーケンス412のどのデーター・チャンクが既にチャンク・コンテナ304に格納されているのか指示する。
【0056】
[0079] 再度
図5を参照すると、ステップ506において、複製ではないと判断されたデーター・チャンクを、連続配置で、そしてデーター・ストリームにおけると同じシーケンスで、チャンク・コンテナに格納する。例えば、一実施形態では、データー・チャンク記憶マネージャー404は、データー・チャンク・シーケンスの内、チャンク・コンテナ304に格納されていると判断されなかったデーター・チャンクを格納するように構成されている。例えば、一実施形態では、データー・チャンク記憶マネージャー404は、新たなデーター・チャンク毎にチャンク・ヘッダー324(例えば、データー・チャンク識別子)を生成し、新たな各データー・チャンクを、データー・チャンク322として、チャンク・ヘッダー324およびチャンク・データー326と共に格納することができる。更に、一実施形態では、データー・チャンク記憶マネージャー404は、新たなデーター・チャンクを連続配置で、ソース・データー・ストリームにおけるのと同じ順序で(例えば、データー・チャンク・シーケンス412において受け取った順序で)チャンク・コンテナ304に格納するように構成されている。
【0057】
[0080] ステップ508において、複製でないと判断されたデーター・チャンクの各々について、メタデーターを生成する。このデーター・チャンクについてのメタデーターは、データー・ストリーム・オフセット、チャンク・コンテナにおける位置へのポインタ、および位置関係インディケーターを含む。例えば、
図4に示すように、メタデーター生成器406は、データー・チャンク・シーケンス412および格納チャンク指示(stored chunk indication)416を受け取ることができる。一実施形態では、メタデーター生成器406はメタデーター(例えば、
図3のメタデーター314)を生成するように構成することができる。メタデーター生成器406は、データー・チャンク・シーケンス412のデーター・チャンク毎にメタデーターを生成することができ、このメタデーターは、データー・ストリーム・オフセット402と、データー・チャンク識別子404と、位置関係インディケーター406とを含む。チャンク・コンテナ304に既に格納されていると判断されたデーター・チャンク(ステップ504において)に対して、データー・チャンク識別子404は、既に格納されているデーター・チャンクを指し示すように構成されている。ステップ508においてチャンク・コンテナ304に新たに格納されたデーター・チャンクに対して、データー・チャンク識別子404は、新たに格納されたデーター・チャンクを指し示すように構成されている。
【0058】
[0081] 再度
図5を参照すると、ステップ510において、生成したメタデーターを含むデーター・ストリームについてのストリーム・マップを生成する。例えば、
図4に示すように、ストリーム・マップ生成器408は、特定のデーター・ストリームに対してデーター・チャンク・シーケンス412において受け取ったデーター・チャンク毎にデーター・チャンク・メタデーター420を受け取る。ストリーム・マップ生成器408は、受け取ったデーター・チャンク毎のデーター・チャンク・メタデーター420を含むデーター・ストリームに関連するストリーム・マップ424を生成する。更に、ストリーム・マップ生成器408は、ストリーム・マップ424に対してストリーム・ヘッダー312を生成することができ、ストリーム・マップ424内に、受け取ったデーター・チャンク毎にハッシュ値316を含めることができる。
【0059】
[0082] ステップ512において、ストリーム・マップをストリーム・コンテナに格納する。例えば、
図4に示すように、ストリーム・マップ生成器408はストリーム・マップ424をストリーム・コンテナ302に(例えば、ストリーム・マップ310として)格納する(または「存続させる」)ことができる。尚、代替実施形態では、データー・ストリームについてストリーム・マップを生成し格納する代わりに、データー・ストリームによって参照されるデーター・チャンクの位置を指し示す(pointing to)または示す(indicating)メタデーターを含むエントリを、データーベースまたはグローバル・テーブル内にデーター・ストリームに対して作成することもできる。
【0060】
[0083]
図6は、一実施形態にしたがってデーター・ストリームをデーター・ストアに格納する一例を表すブロック図を示す。
図6は、例示の目的に限って提示されるのであり、限定することは意図していない。
図6の例では、第1データー・ストリーム602aをデーター・ストアに格納し、続いて、第2データー・ストリーム602bをデーター・ストアに格納する。ストリーム・リンク608a(「ストリーム・ポインタ」または「ストリーム・メタデーター・スタブ」としても知られている)が、第1データー・ストリーム602aに対して示されており、ストリーム・リンク608bが第2データー・ストリーム602bに対して示されている。各ストリーム・リンク608は、データー・ストリーム692をチャンク・ストア内にある対応するデーター(例えば、ストリーム・マップ604または他の最適化ストリーム・メタデーター)にリンクし、データー・ストリーム602を組み立て直すことを可能にする。
図6に示すように、第1データー・ストリーム602aは、4つのデーター・チャンク614a〜614dを含む。前述のように、ストリーム・マップ604aは、第1データー・ストリーム602aについて生成するとよく、4つのデーター・チャンク614a〜614dをチャンク・コンテナ606に格納することができる。ストリーム・マップ604aは、データー・チャンク614a〜614dの各々へのポインタ(
図6では矢印で表されている)を含む。データー・チャンク614a〜614dは、全て新しくチャンク・コンテナ606に対して一意であるデーター・チャンクという1つの組に分類することができる。したがって、データー・チャンク614a〜614dは、連続配列で、データー・ストリーム602aにおけると同じ順序でチャンク・コンテナ606に格納することができる。例えば、データー・チャンク614a〜614dは、チャンク・コンテナ606に格納される最初の4つのデーター・チャンクにすることができ、または1つ以上のデーター・チャンクが既にチャンク・コンテナ606に格納されている場合、データー・チャンク614a〜614dは、既に格納されているデーター・チャンクの直後に、チャンク・コンテナ606に格納することができる。データー・チャンク614a〜614dの各々には、ストリーム・マップ604aにおける同じ位置関係インディケーターが割り当てられ、位置関係インディケーターの値は、第1データー・ストリーム602aに対して選択されたものである。
【0061】
[0084] 第2データー・ストリーム602aは、4つのデーター・チャンク614b、614c、614e、および614fを含む。ストリーム・マップ604bは、第2データー・ストリーム602bについて生成することができる。データー・チャンク614b、614c、614e、および614fは、フローチャート500のステップ504にしたがって、2組のデーター・チャンクに分類することができる。第1組は、チャンク・コンテナ606に存在するコピーを既に有するチャンク614bおよび614cを含み(第1データー・ストリーム602aのチャンク・シーケンスのため)、第2組は、新しく一意のデーター・チャンクである(チャンク・コンテナ606に既に格納されているコピーを有さない)、チャンク614eおよび614fを含む。データー・チャンク614bおよび614cは既にチャンク・コンテナ606に格納されているので、ストリーム・マップ604bは、チャンク・コンテナ606に既に格納されているデーター・チャンク614bおよび614cに対するポインタ(データー・チャンク識別子404に対する値)を含む。つまり、データー・チャンク614bおよび614cは、チャンク・コンテナ606内にある既存のデーター・チャンクへのポインタとして格納し、データー・チャンク614bおよび614cのチャンク・データーを格納しなくてよい。データー・チャンク614eおよび614fは未だチャンク・コンテナ606に格納されていないので、前述のように、データー・チャンク614eおよび614fをチャンク・コンテナ606に格納すればよい。例えば、データー・チャンク614eおよび614fはチャンク・コンテナ606にとって新しく一意のデーター・チャンクであるので、チャンク614eおよび614fは、チャンク・コンテナ606に現在格納されている最後の格納データー・チャンク(例えば、データー・チャンク614d)の後ろに、連続配列で、データー・ストリーム602bにおけると同じ順序で格納すればよい。ストリーム・マップ604bは、第1から第4までのデーター・チャンク識別子612a〜612dを含み、これらは、それぞれ、チャンク・コンテナ606に格納されているデーター・チャンク614b、614c、614e、および614fを指し示す。ストリーム・マップ604bでは、データー・チャンク614bおよび614cには、第1データー・ストリーム602aに関連する位置関係インディケーター値が割り当てられ、データー・チャンク614eおよび614fには、第2データー・ストリーム602bに対して選択された位置関係インディケーター値が割り当てられる。
【0062】
[0085] 尚、データー・ストリーム602aおよび602bに続いて、いかなる数の追加のデーター・ストリーム602でも同様に格納できることを注記しておく。更に、
図6の例では、第2ストリーム・マップ604bのデーター・チャンクには、各々、2つの位置関係インディケーター値の内1つが割り当てられた。即ち、第2ストリーム・マップ604bに対して選択された新たな位置関係インディケーター値、または第1ストリーム・マップ604aのデーター・チャンクに関連する位置関係インディケーター値のいずれかである。実施形態では、特定のストリーム・マップのデーター・チャンクには、チャンク・コンテナの中に既に存在するストリーム・マップのデーター・チャンクに関連する異なる位置関係インディケーターの数に応じて、いずれの数の位置関係インディケーター値からでも、その1つでも割り当てることができる。例えば、前述のように、チャンク・コンテナに対する新たなデーター・チャンクには、ストリーム・マップに関連する特定のデーター・ストリームに対して選択された新たな位置関係インディケーター値を割り当てることができる。更に、チャンク・コンテナ内に既に存在するストリーム・マップによって参照されるデーター・チャンクは、いずれの数でも、チャンク・コンテナに既に存在するデーター・チャンクの対応する位置関係インディケーター値が割り当てられる。これが意味するのは、データー・ストリームのデーター・チャンクの組は、1つ以上のいずれの数でも、データー・ストリームのデーター・チャンクに2つ、3つ、またはそれよりも更に多い異なる位置関係インディケーター値から選択された位置関係インディケーターを割り当てることができるように、対応する位置関係インディケーター値を割り当てることができるということである。
【0063】
[0086] したがって、ストリーム・マップ・メタデーターの位置関係インディケーターによって、データー・ストリーム内におけるデーター・チャンクの位置関係(locality)を確認することが可能になる。これは、重複データー・チャンクが集合単位で発生する傾向があるからである。新たなデーター・ストリームが既に知られているデーター・チャンク(チャンク・コンテナに既に格納されている)を収容しているとき、この新たなデーター・ストリーム内にある次のデーター・チャンクも複製データー・チャンク(チャンク・コンテナ内に既に格納されている)であることに妥当な確率がある。新たな元のデーター・チャンクは位置関係インディケーターにしたがって互いに隣接してチャンク・コンテナ内に格納されるので、この新たなデーター・ストリームが参照する、既に存在するデーター・チャンクもチャンク・コンテナ内において連続して格納されている可能性は一層高くなる。これは、チャンク・ストアから最適化データー・ストリームを読み出す性能(performance)を向上させるのに役立つ。例えば、対応するストリーム・マップおよびデーター・チャンクに基づいてデーター・ストリームを組み立て直すように構成されているリハイドレーション・モジュールは、先読みバッファーにおける次のデーター・チャンクの必要性を見出すことを予期して、チャンク・コンテナ内に格納されているデーター・チャンクに対して先読み(read ahead)を実行することができる。更に、断片化解消およびコンパクションというようなチャンク・ストア維持タスクは、既存の隣接するチャンクをチャンク・コンテナ内であちこち移動させるときにこれらを一緒に保持することによって、元の位置関係を維持しようとしつつ、そのタスクを実行することができる。
【0064】
[0087] 例えば、データー・ストリームを最適化しチャンク・ストア300内にストリーム・マップ310およびデーター・チャンク322の形態で格納した後、これらのデーター・ストリームをチャンク・ストア300から読み出すことができる。
図7は、一実施形態による、リハイドレーション・モジュール702を含むチャンク・ストア・インターフェース116のブロック図を示す。リハイドレーション・モジュール702は、要求されたデーター・ストリーム(例えば、
図1に示したデーター・ストリーム要求120にしたがって要求される)を組み立て直すように構成されている。例えば、データー・ストリーム要求120(
図1)に応答してチャンク・ストア300から読み出されるデーター・ストリームに対して、リハイドレーション・モジュール702は、チャンク・ストア300から(例えば、リパース位置において)データー・ストリーム要求120の最適化ファイルによって参照されるストリーム・マップ310を決定して受け取る。例えば、リハイドレーション・モジュール702は、要求120のストリーム・マップ識別子を
図3のチャンク・ストア300に供給することができる。チャンク・ストア300は、ストリーム・マップ識別子に基づいて対応するストリーム・マップ310を引き出し(例えば、ストリーム・マップ・ヘッダー312をスキャンすることによって)、リハイドレーション・モジュール702は、この引き出されたストリーム・マップ310にしたがってデーター・ストリームを再生する、即ち、「リハイドレート」(rehydrate)ことができる。引き出されたストリーム・マップ310は、チャンク・コンテナ304内におけるデーター・ストリームに含まれるデーター・チャンクの各々に対するポインタ(
図4のデーター・チャンク識別子404)を含む。リハイドレーション・モジュール702は、このポインタを用いて、データー・チャンク322の各々を引き出す。リハイドレーション・モジュール702は、引き出したストリーム・マップ310に含まれるデーター・ストリーム・オフセット402を(例えば、引き出されたストリーム・マップ310に含まれるかもしれないデーター・チャンク長情報と共に)用いて、引き出したデーター・チャンク322を適正な順序に並べて、データー・ストリームを再生する(regenerate)ことができ、このデーター・ストリームがリハイドレーション・モジュール702によってデーター・ストリーム704として出力される。
【0065】
[0088] 位置関係インディケーター406の使用によって、チャンク・コンテナ304からデーター・チャンク322の順次読み出しを行うことができる。例えば、順次I/O(入力/出力)要求または1つよりも多いデーター・チャンク境界に跨がる(encompass)何らかのI/O要求を用いてリハイドレーション・モジュール702によってチャンク・ストア300内にあるファイル・ストリームにアクセスしているとき、ストリーム・マップ310は、データー・チャンクへの高速アクセスを可能にする。これは、チャンク・ストア300がストリーム・マップ310を作成した時点で、新たなデーター・チャンクがチャンク・コンテナ304内に連続してストリーム・マップの順に格納されるからである。したがって、リハイドレーション・モジュール702による順次データー・アクセスの間、同じデーター・ストリームに属するデーター・チャンクが連続して格納される可能性が高くなり、このような連続するデーター・チャンクに1回のデーター・アクセス「シーク」(例えば、読み出すべき次の格納データー・チャンクを発見するためのチャンク・コンテナ全域にわたる順方向および逆方向の移動)でアクセスし読み出すことができ、断片化は一意でないデーター・チャンク(対応するデーター・ストリームを格納する前にチャンク・コンテナ内に既に存在していたストリーム・マップによって参照されているデーター・チャンク)に限られる(reduce)。順次データー・アクセスの間におけるデーター・アクセス・シークは、1つのデーター・チャンクまたはデーター・ストリームの一連のチャンクがチャンク・ストア内に既に存在することが分かっているときに制限される。ストリーム・マップ310は、データー重複排除システムの他のモジュール(例えば、ファイル複写(replication)モジュールによって用いられるハッシュ値のリスト)によって必要とされるかもしれない最適化ファイル・メタデーター(例えば、メタデーター314)に、効率的なメタデーター・コンテナを付与する。ストリーム・マップ310は、簡潔であり、高速アクセスのためにメモリーにキャッシュすることができる。チャンク・ストア300は、LRU(最も長い間使われていない)アルゴリズムまたは他のタイプのキャッシュ・アルゴリズムに基づいて、頻繁にアクセスされるストリーム・マップ310(リハイドレーション・モジュール702によって頻繁に要求されリハイドレートされた最適データー・ストリーム)をキャッシュすることができる。
【0066】
C.信頼性の高いデーター・チャンクの位置検出を可能にするチャンク・ストアの実施形態例
[0089] 前述のように、断片化解消技法のために、ガベージ・コレクションを実行するコンパクション技法のために等というように、種々の理由のためにチャンク・コンテナ内部でデーター・チャンクを移動させる場合がある。この副章において、チャンク・コンテナ内部におけるデーター・チャンクの移動を追跡し続ける実施形態について説明する。
【0067】
[0090]
図8は、一実施形態によるチャンク・コンテナ304のブロック図を示す。
図8に示すように、チャンク・コンテナ304は、総じて
図3のチャンク・コンテナに似ており、ファイル・ヘッダー318に含まれるチャンク・コンテナ識別子802およびチャンク・コンテナ生成指示804が追加されている。チャンク・コンテナ識別子802は、チャンク・コンテナ304を、チャンク・ストア300内に存在するかもしれない他のチャンク・コンテナから区別するためにチャンク・コンテナ304に割り当てられた一意の識別子(例えば、識別番号)である。チャンク・コンテナ生成指示804は、チャンク・コンテナ304に対する改訂(revision)または生成を示す。例えば、1つ以上のデーター・チャンク322がチャンク・コンテナ304内部で移動させられる毎に、生成指示804を変更することができる(例えば、0のような開始生成レベル、またはその他の開始値から始めて、次の生成レベルに高めることができる)。
【0068】
[0091] 一実施形態では、チャンク・コンテナ304を、チャンク・コンテナ識別子802とチャンク・コンテナ生成指示804の組み合わせによって特定することができる(例えば、チャンク・コンテナ304のファイル名を形成することができる)。一実施形態では、チャンク・コンテナ識別子802およびチャンク・コンテナ生成指示804の双方が整数であってもよい。チャンク・コンテナ304は、固定サイズ(または固定数のエントリ)を有してもよく、または可変サイズを有してもよい。例えば、一実施形態例では、チャンク・コンテナ304を定める各チャンク・コンテナ・ファイルは、約16,000個のチャンクを格納する大きさにすることができ、平均的なチャンク・サイズは64KBであり、チャンク・コンテナ・ファイルのサイズは1GBに設定される。他の実施形態では、チャンク・コンテナ・ファイルは代わりのサイズを有してもよい。
【0069】
[0092] チャンク・コンテナ304に格納されているデーター・チャンク322には、種々の方法で、メタデーター400(
図4)のデーター・チャンク識別子404にしたがって参照することができる。実施形態では、データー・チャンク識別子404は、このような参照を可能にする種々のタイプの情報を含むことができる。例えば、一実施形態では、データー・チャンク識別子404は、データー・チャンク・コンテナ識別子、ローカル識別子、チャンク・コンテナ生成値、およびチャンク・オフセット値の内1つ以上を含むことができる。チャンク・コンテナ識別子は、データー・チャンク322が格納されているチャンク・コンテナ304に対してチャンク・コンテナ識別子802の値を有する。ローカル識別子は、データー・チャンク322に割り当てられる識別子(例えば、数値)であり、データー・チャンク322が格納されているチャンク・コンテナ304内部において割り当てられたデーター・チャンク322に一意である(例えば、データー・チャンクに対して一意のコンテナ毎の識別子である)。チャンク・コンテナ生成値は、データー・チャンク322が格納されているチャンク・コンテナ304に対して、データー・チャンク322がチャンク・コンテナ304に格納された時点におけるチャンク・コンテナ生成指示804の値を有する。チャンク・オフセット値は、データー・チャンク322がチャンク・コンテナ304に追加された時点における、チャンク・コンテナ304内におけるデーター・チャンク322のオフセットである。
【0070】
[0093] 一実施形態では、チャンク・ストアは、移動したデーター・チャンクを追跡するために用いることができる、信頼性のあるチャンク・ロケータ(chunk locator)を実装(implement)することができる。従来の技法とは対照的に、この信頼性のあるチャンク・ロケータは、データー・チャンク識別子を物理的なチャンク位置にマッピングするためにインデックスを用いない。従来の技法は、チャンク識別子をチャンク・データーの物理位置にマッピングするインデックスを用いる。記憶システムの規模(例えば、数百テラバイト以上)および平均チャンク・サイズ(例えば、64KB)のために、このようなインデックスは非常に大きくなる。このようなインデックスを全てメモリーにロードすると、大量の利用可能なメモリーおよびプロセッサー・リソースを消費することになる。インデックスをメモリーにロードしないと、インデックスをメモリーにページングする(page)必要があるので、データー・アクセスは遅くなる。
【0071】
[0094] 一実施形態では、信頼性のあるチャンク・ロケータは、
図3におけるチャンク・コンテナ304のリダイレクション・テーブル320のような、リダイレクション・テーブルの形態で実装される。このリダイレクション・テーブルは、チャンク・コンテナ304内において移動させられたデーター・チャンク322に対して1つ以上のエントリを格納することができる。各エントリは、移動させられたデーター・チャンク322を特定し、その新たな位置におけるチャンク・コンテナ304内でのデーター・チャンク322の位置を示すデーター・チャンク・オフセット値を有する。移動したデーター・ストリームのデーター・チャンクの位置を検出するために、データー・ストリームのリハイドレーションの間リダイレクション・テーブルを参照することもできる。
【0072】
[0095] 例えば、
図9は、一実施形態例によるリダイレクション・テーブル900のブロック図を示す。リダイレクション・テーブル900は、データー・チャンク322がチャンク・コンテナ304内部で移動させられた場合に、データー・チャンク322(データー・チャンクとして格納されたストリーム・マップを含む)の位置を検出するために用いられる。例えば、リダイレクション・テーブル900は、ガベージ・コレクションおよびコンパクション・プロセスの一部として空間再利用のために、チャンク・コンテナ304内部でデーター・チャンク322を移動させることができ、それでもなおデーター・チャンク322の元のチャンク識別子に基づいて信頼性高くデーター・チャンク322の位置を検出可能にすることができる。
図9に示すように、リダイレクション・テーブル900は、第1エントリ902aおよび第2エントリ902bのような、複数のエントリ902を含む。数百、数千、およびそれ以上の数のエントリ902も含む、いずれの数のエントリ902でも、リダイレクション・テーブル900に含ませることができる。各エントリ902は、ローカル識別子904と変更チャンク・オフセット値906とを含む。例えば、第1エントリ902aは、第1ローカル識別子904aと第1変更チャンク・オフセット値906aとを含み、第2エントリ902bは、第2ローカル識別子904bと第2変更チャンク・オフセット値906bとを含む。
【0073】
[0096] ローカル識別子904は、最初にチャンク・コンテナ304に格納されたときにデーター・チャンク322に割り当てられる一意のローカル識別子である。変更チャンク・オフセット値906は、移動させられたデーター・チャンク322に対して、対応するローカル識別子904を有する新たなチャンク・オフセット値である。したがって、リダイレクション・テーブル900には、データー・チャンクに対する位置関係インディケーターを用いてアクセスし、そのデーター・チャンクに対する変更チャンク・オフセット値を判定することができる。
【0074】
[0097] 例えば、
図9におけるローカル識別子904aは、データー・チャンク614bに割り当てられたローカル識別子とすることができる。データー・チャンク614bに割り当てられたローカル識別子を用いて、リダイレクション・テーブル900のエントリ902aにアクセスし、チャンク・コンテナ304内におけるデーター・チャンク614bの新たな位置を示す、変更チャンク・オフセット値906aを決定することができる。
【0075】
[0098] 尚、リダイレクション・テーブル900はいずれのサイズを有してもよいことを注記しておく。例えば、一実施形態では、リダイレクション・テーブル900にサイズは、(所定の最大数のデーター・チャンク−コンパクションのために削除された所定の最小数のデーター・チャンク)×(リダイレクション・テーブル・エントリのサイズ)によって制限するとよい。場合によっては、データー・チャンクの配置換え(relocation)が希にしか起こらないこともある。一実施形態では、データー・チャンクに対して変更チャンク・オフセット値を決定した後、ストリーム・マップからこのデーター・チャンクへのいずれのポインタも、ストリーム・マップにおいて変更チャンク・オフセット値に修正し、エントリ902をリダイレクション・テーブル900から除去することができる。状況によっては、時間の経過に連れてこのようにリダイレクション・テーブル900からエントリ902がなくなる場合もある。
【0076】
[0099] リダイレクション・テーブルには、種々の方法でエントリを追加することができる。例えば、
図10は一実施形態にしたがって、データー・ストリームを格納するフローチャート1000を示す。フローチャート1000に関する論述に基づいて、関連技術(1つまたは複数)の当業者には、更に他の構造および動作の実施形態も明白であろう。以下にフローチャート1000について説明する。
【0077】
[0100] フローチャート1000は、ステップ1002から開始する。ステップ1002において、チャンク・コンテナの内容を修正(modify)する。例えば、一実施形態では、
図8のチャンク・コンテナ304における1つ以上のデーター・チャンク322を移動させることができる。このようなデーター・チャンク322は、断片化解消プロセス、ガベージ・コレクション後のコンパクション・プロセス、またはその他のプロセスというような、維持タスク(例えば、
図1における維持モジュール106)によって移動させることができる。
【0078】
[0101] ステップ1004において、ステップ1002によるチャンク・コンテナの1つ以上のデーター・チャンクに対する変更チャンク・オフセット値を示した1つ以上のエントリを、リダイレクション・テーブルに追加する。例えば、1つ以上の移動させられたデーター・チャンク322に対応する1つ以上のエントリ902をリダイレクション・テーブル900に追加することができる。例えば、移動させられたデーター・チャンク322毎に、移動させられたデーター・チャンク322のローカル識別子の値を示すエントリ902を、ローカル識別子904として生成することができ、このエントリ902は、移動させられたデーター・チャンク322の新たなオフセット値を、変更チャンク・オフセット値906として示す。
【0079】
[0102] ステップ1006において、ステップ1002に伴い、チャンク・コンテナ・ヘッダー内にある生成指示が増加する。例えば、一実施形態では、チャンク・コンテナ生成指示804は0の初期値を有することができ、データー・チャンク322がチャンク・コンテナ304内で移動させられる毎に、チャンク・コンテナ生成指示804を増加させて、更に高い生成値を示すことができる。他の実施形態では、チャンク・コンテナ生成指示804を他の方法で修正することもできる。
【0080】
[0103] したがって、参照元ストリーム・マップ310に格納されているデーター・チャンク識別子を用いて
図8のチャンク・コンテナ304のデーター・チャンク322を調べるとき、チャンク・コンテナ304のチャンク・コンテナ生成指示804をチェックして、チャンク・コンテナ304の現在の生成が、データー・チャンク識別子のチャンク・コンテナ生成値と同じか否か確かめることができる。これらが同じである場合、データー・チャンク識別子内にあるチャンク・オフセット値によって示されるオフセットに、データー・チャンク322を配置することができる。同じでない場合、リダイレクション・テーブル900を読み取って、チャンク・コンテナ304内におけるデーター・チャンク322の変更オフセット値を決定する。
【0081】
[0104] 例えば、
図11は、一実施形態例にしたがって、データー・ストリーム要求1110に応じてデーター・ストリームをリハイドレートするために、ストリーム・コンテナ302およびチャンク・コンテナ304と通信するリハイドレーション・モジュール1130のブロック図を示す。
図11に示すように、リハイドレーション・モジュール1130は、データー・ストリーム・アセンブラー1102と、生成チェッカー1106と、データー・チャンク・リトリバー1108とを含む。以下に、
図11について説明する。
【0082】
[0105]
図11において、データー・ストリーム・アセンブラー1102は、データー・ストリーム要求1110を受ける。データー・ストリーム要求1110は、ストリーム・コンテナ302に格納されているストリーム・マップ1104のような、リハイドレートしようとしているデーター・ストリームに対応するストリーム・マップを示す。データー・ストリーム・アセンブラー1102は、ストリーム・マップ1104を処理して、ストリーム・マップ1104によって参照されているデーター・チャンク毎に、データー・チャンク要求1112を生成する。
【0083】
[0106] 一実施形態では、データー・ストリーム・アセンブラー1102が生成するデーター・チャンク要求1112は、要求されたデーター・チャンク322を特定するためのデーター・チャンク識別子を含むとよい。位置を突き止められたチャンク・コンテナには次のようにアクセスして、要求されたデーター・チャンクを引き出すことができる。
【0084】
[0107]
図11に示すように、生成チェッカー1106は、要求されたデーター・チャンクに対するデーター・チャンク要求1112を受ける。生成チェッカー1106は、チャンク・コンテナ304(要求されたデーター・チャンク322のチャンク・コンテナ識別子と一致するチャンク・コンテナ識別子802を有することが以上で確認されたチャンク・コンテナ304)にアクセスする。生成チェッカー1106は、チャンク・コンテナ304に対するチャンク・コンテナ生成指示804を、要求されたデーター・チャック322に対するチャック・コンテナ生成値と比較し、生成一致指示1114を出力するように構成されている。これらの値が一致しない場合(例えば、チャンク・コンテナ生成指示804の値が、要求されたデーター・チャンク322に対するチャンク・コンテナ生成値よりも大きい場合)、生成一致指示1114は、一致が得られなかったことを示し、動作はステップ1806に進む。これらの値が一致した場合、生成一致指示1114は、一致が得られたことを示し、要求されたデーター・チャンクを引き出す標準的なI/O経路(または他の経路)に従うことができる。
【0085】
[0108]
図11に示すように、データー・チャンク・リトリバー1108は、生成一致指示1114とデーター・チャンク要求1112とを受け取る。生成一致指示1114が、一致が得られなかったことを示す場合、データー・チャンク・リトリバー1108は、要求されたデーター・チャンク322のローカル識別子と一致するローカル識別子904を有するエントリ902内にある変更チャンク・オフセット値906(
図9)を求めて、リダイレクション・テーブル900にアクセスする。
図11に示すように、データー・チャンク・リトリバー1108は、第1チャンク・オフセット値とは異なる第2チャンク・オフセット値116を受け取る。
【0086】
[0109]
図11に示すように、データー・チャンク・リトリバー1108は、第2チャンク・オフセット値1116に位置するデーター・チャンク322zを求めて、チャンク・コンテナ304にアクセスする。データー・チャンク322zは、要求されたデーター・チャンク322であり、チャンク・コンテナ304内において第2チャンク・オフセット値1116に移動させられている。
【0087】
[0110]
図11に示すように、データー・チャンク・リトリバー1108は、現在の例ではデーター・チャンク322zである、データー・チャンク1118を出力する。データー・チャンク1118は、データー・ストリーム・アセンブラー1102によって受け取られる。このように、データー・ストリーム・アセンブラー1102は、ストリーム・マップ1104によって参照されている全てのデーター・チャンク322を、データー・チャンク・リトリバー1108から受け取る。これらのデーター・チャンク322は、対応するチャンク・オフセット値にしたがってチャンク・コンテナ304から直接引き出されるか、またはリダイレクション・テーブル900によってリダイレクトされて、チャンク・コンテナ304から引き出される。
図11に示すように、データー・ストリーム・アセンブラー1102は、データー・ストリーム1120を生成する。データー・ストリーム1120は、データー・ストリーム要求1110において示された、要求されたデーター・ストリームが元に戻された形態である。データー・ストリーム・アセンブラー1102は、本明細書の他のところで説明したように、受け取ったデーター・チャンク322の全てを纏めて組み立て、データー・ストリーム1120を形成する。
【0088】
[0111] 尚、データー・ストリームのリパース・ポイント(reparse point)に存在するストリーム・マップ参照識別子(例えば、
図6におけるストリーム・リンク608aまたは608b)は、データー・チャンク識別子と同じ構造を有するのでもよいことを注記しておく。先に説明したように、ストリーム・マップ310は、エンド・ユーザー・ファイル・データーの代わりに、ストリーム・マップ・メタデーターを収容するデーター・チャンク322の形態を有することもできる。したがって、ストリーム・マップ310にアドレスする手順は、データー・チャンク322にアドレスするのと同じでよい。双方の技法は、データー・チャンク識別子の構造を用いることができる。最適化データー・ストリームは、ストリーム・マップ310のデーター・チャンク識別子をファイル・リパース・ポイント(実際のデーター・ストリーム・ファイル・オブジェクトに添付される)に置くことによって、ストリーム・マップ310を参照する。ストリーム・マップ識別子は、[コンテナ識別子、ローカル識別子、生成値、オフセット値]情報を収容する。この情報は、ストリーム・コンテナ302の内部においてストリーム・マップ310のデーター・チャンクの位置を突き止めるために(直接、またはリダイレクション・テーブルを通じて)用いることができる。したがって、一実施形態では、ストリーム・コンテナ302のフォーマットおよびレイアウトは、チャンク・コンテナ304のそれと本質的に同一であってよい。
【0089】
D.データー最適化バックアップの実施形態例
[0112] データー最適化技法を装備するデーター・システムをバックアップし復元することは、チャンク・ストア内において多数のデーター・ストリーム間でデーターが共有されるので困難である。したがって、データーはファイル名称空間から分離される。しかしながら、データー・バックアップおよび復元能力は有用である。通例、エンティティは、有効なデーター・バックアップが一体になっていなければ、データー最適化の解決手段を装備することを躊躇するであろう。
【0090】
[0113] 実施形態では、データー最適化環境に合わせて種々のバックアップ技法が設けられ、最適化バックアップ、無最適化バックアップ(un-optimized backup)、項目レベル最適化バックアップ、および混成バックアップ技法が含まれる。更に、実施形態では、異なるバックアップ技法間で選択を行うために発見法を用いることができる。例えば、最適化バックアップと無最適化バックアップとの間で選択するために発見法を用いてもよい。実施形態は、データー最適化システムに最適化バックアップ技法を設けて、データーがその最適化された(例えば、重複排除した)形態でバックアップできるようにする。実施形態は、用いるバックアップ媒体空間を削減してデーター・バックアップを行うことを可能とし、バックアップ時間枠(time window)を短縮するために用いることができる。これは、年々増大するデーターを考慮すると重要である。更に、実施形態は、バックアップからのデーター復元の高速化を可能にする(例えば、RTO(復元時間目標)を小さくする)。
【0091】
[0114] 実施形態では、データー最適化システムにおけるバックアップは、種々の方法で実行することができる。例えば、
図12は、一実施形態例にしたがって、データー最適化システムにおいてデーターのバックアップを実行するフローチャート1200を示す。フローチャート1200は、一実施形態では、
図1のチャンク・ストア・インターフェース116によって実行することができる。例示の目的に限って、
図13に関してフローチャート1200を説明する。
図13は、一実施形態例によるデーター・バックアップ・システム1300のブロック図を示す。フローチャート1200は、データー・バックアップ・システム1300によって実行することができる。
図13に示すように、データー・バックアップ・システム1300は、データー・バックアップ・モジュール1302と、バックアップ・ストレージ1304と、チャンク・ストア1334とを含む。チャンク・ストア1334は、ストリーム・コンテナ302と、1つ以上のチャンク・コンテナ304(例えば、チャンク・コンテナ304aおよび304b)とを含む。更に他の構造的および動作上の実施形態も、フローチャート1200に関する論述に基づいて、関連技術(1つまたは複数)の当業者には明白であろう。フローチャート1200について、以下のように説明する。
【0092】
[0115] フローチャート1200のステップ1202において、チャンク・ストアに格納されている複数の最適化データー・ストリームを、バックアップのために特定する。例えば、
図13を参照すると、データー・バックアップ・モジュール1302は、チャンク・ストア1334に格納されている1つ以上の最適化データー・ストリームをバックアップ・ストレージ1304に格納する要求1318を受けることができる。要求1318は、最適化データー・ストリームに対応する最適化ストリーム構造(例えば、ファイル)の対応するファイル名称によって、これら1つ以上の最適化データー・ストリームを特定することができる。各最適化ストリーム構造は、前述のように、最適化データー・ストリームのチャンク・コンテナ304の1つ以上に格納されているデーター・チャンク322へのマッピングを記述するメタデーターを収容するストリーム・コンテナ302におけるストリーム・マップ・チャンク1316のストリーム・マップ・チャンクを参照する。
【0093】
[0116] ステップ1204において、先の複数の最適化データー・ストリームをバックアップするために、チャンク・ストアの少なくとも一部をバックアップ・ストレージに格納する。要求1318に応答して、データー・バックアップ・モジュール1302は、要求1318において特定された最適化データー・ストリームをバックアップ・ストレージに格納するように、チャンク・ストア1334の少なくとも一部をバックアップ・ストレージ1304に格納することができる。データー・バックアップ・モジュール1302は、チャンク・ストア1334の一部を種々の方法でバックアップ・ストレージ1304に格納することによって、最適化データー・ストリームを格納することができる。例えば、一実施形態では、最適化データー・ストリーム毎に、データー・バックアップ・モジュール1302は、ストリーム・マップ・チャンク1316の対応するストリーム・マップ・チャンク、およびストリーム・マップ・チャンクによって参照されているデーター・チャンク322を決定することができ、そして決定したストリーム・マップ・チャンクおよびデーター・チャンクをバックアップ・ストレージ1304に格納することができる。他の実施形態では、データー・バックアップ・モジュール1302は、最適化データー・ストリームをバックアップするために、最適化データー・ストリームの内決定したチャンクを含むチャンク・ストア1334のもっと大きな部分をバックアップ・ストレージ1304に格納することもできる。
【0094】
[0117] したがって、データー・バックアップ・モジュール1302は、ステップ1204にしたがって種々の方法で最適化データー・ストリームを格納するように構成することができる。例えば、
図13に示すように、データー・バックアップ・モジュール1302は、最適化ファイル・バックアップ・モジュール1306と、リハイドレーション・バックアップ・モジュール1308と、項目レベル・バックアップ・モジュール1310と、データー・チャンク識別子バックアップ・モジュール1312とを含むことができる。実施形態では、データー・バックアップ・モジュール1302は、モジュール1306、1308、1310、および1312の内いずれの1つ以上でも含むことができる。モジュール1306、1308、1310、および1312は、最適化データー・ストリームを種々の方法でバックアップ・ストレージ1304に格納することを可能にする。モジュール1306、1308、1310、および1312について、以下のように説明する。
【0095】
[0118] 一実施形態では、最適化バックアップ(「最適化データー・ストリーム・バックアップ」とも呼ぶ)は、最適化データー・ストリームを最適化した形態でバックアップするために実行することができる。例えば、最適化ファイル・バックアップ・モジュール1306は、最適化データー・ストリームをバックアップ・ストレージ1304に最適化した形態で格納することによって、最適化バックアップを実行するように構成することができる。最適化バックアップにしたがって、最適化データー・ストリームをバックアップするために、チャンク・ストア1334の1つ以上のチャンク・コンテナ全体を格納することができる。例えば、一実施形態では、最適化ファイル・バックアップ・モジュール1306は、
図14に示すフローチャート1400を実行することができる。フローチャート1400および最適化ファイル・バックアップ・モジュール1306について、以下のように説明する。
【0096】
[0119] ステップ1402において、チャンク・ストア全体をバックアップ・ストレージに格納する。一実施形態では、最適化ファイル・バックアップ・モジュール1306は、要求1318において示された最適化データー・ストリームがバックアップされるように、チャンク・ストア1334全体をバックアップ・ストレージ1304に格納することができる。あるいは、最適化ファイル・バックアップ・モジュール1306は、最適化データー・ストリームがバックアップされるように、チャンク・ストア1334の内、要求された最適化データー・ストリーム全体を含む1つ以上のチャンク・コンテナ全体(例えば、ストリーム・コンテナ302およびチャンク・コンテナ304の内1つ以上)を格納することができる。バックアップしようとするチャンク・コンテナは、チャンク識別子の内、最適化データー・ストリームの最適化ストリーム構造によって参照されているチャンクに対するチャンク・コンテナ識別子によって識別することができる。格納動作1320にしたがって、最適化ファイル・バックアップ・モジュール1306によって、チャンク・コンテナ/チャンク・ストア全体をバックアップ・ストレージ1304に格納することができる。
【0097】
[0120] ステップ1404において、チャンク・ストアにおける対応するデーターにリンクする複数の最適化データー・ストリームに対して、複数のストリーム・メタデーター・スタブをバックアップ・ストレージに格納する。ストリーム・メタデーター・スタブは、最適化ファイル・バックアップ・モジュール1306によって、バックアップ・ストレージ1304以外のストレージというような、他のストレージ(例えば、主ストレージ)から引き出すことができ、これらは最適化データー・ストリームに対するチャンク・ストア1334におけるデーター・ストアにリンクするファイルである。例えば、各ストリーム・メタデーター・スタブは、ストリーム・マップ・チャンクによって参照されているいずれのデーター・チャンク322でも組み合わせることによって、リハイドレーション・プロセスの間に対応するデーター・ストリームを非最適化形態に構築し直す/組み立て直すために用いることができる、ストリーム・マップ・チャンク1316のそれらの対応するストリーム・マップ・チャンクへの参照を収容することができる。一実施形態では、要求1318において特定された最適化データー・ストリームに対応するストリーム・メタデーター・スタブは、最適化ファイル・バックアップ・モジュール1306によって、格納動作1320を用いて、バックアップ・ストレージ1304に格納される。ストリーム・メタデーター・スタブは、それらの「ディスク上」フォーマットで、最適化ファイル・バックアップ・モジュール1306によってバックアップ・ストレージ1304に格納することができる。
【0098】
[0121] したがって、バックアップ・ストレージ1304上にある最適化データー・ストリームについてファイル状態を示す「ボリューム・イメージ」は、チャンク・ストア1334を忠実に表現する(mirror)。バックアップ・ストレージ1304に格納されたチャンク・コンテナおよび格納されたストリーム・メタデーター・スタブの組み合わせによって、最適化された(組み立て直されたのではない)形態で、最適化データー・ストリームの完全な格納が行われる。追加のメタデーターを格納する必要はない。
【0099】
[0122] 最適化バックアップ(例えば、フローチャート1400および最適化ファイル・バックアップ・モジュール1306による)は、最適化データー・ストリームをバックアップするいずれの状況においても実行することができる。最適化バックアップは、バックアップされるボリューム(バックアップ・ストレージにおいてアクセス可能な記憶エリア)の殆どが範囲内にある場合に実行することが望まれると考えられる。要求1318において特定された最適化データー・ストリームによって参照されていないが他の最適化データー・ストリームによって参照されているデーター・チャンクは、チャンク・コンテナに含まれているかもしれないので、チャンク・コンテナ全体を格納するときには、何らかの「無駄」があり得る。したがって、必要とされるよりも多いデーター全体がバックアップされる可能性がある。範囲内においてバックアップされる量が比較的少ない場合(例えば、バックアップされたチャンク・コンテナに含まれている少数のデーター・チャンクが、要求1318において特定された最適化データー・ストリームと関連付けられている)、チャンク・コンテナ全体を格納するのではない他のバックアップ技法が望まれる場合もある(例えば、以下で説明する無最適化バックアップ技法)。
【0100】
[0123] 最適化バックアップにしたがってバックアップされた最適化データー・ストリームを復元するには、この復元が最適化された復元となるように、チャンク・ストア・コンテナ・ファイルおよびストリーム・メタデーター・スタブを復元する必要がある。このような最適化格納(optimized store)の方が相対的にサイズが小さく、したがって相対的に高速であり、消費するI/O資源が少ない。最適化バックアップからの最適化データー・ストリームの選択的復元のための技法については、次の副章において以下で更に詳しく説明する。
【0101】
[0124] したがって、最適化バックアップの実施形態は種々の便益を提供することができる。例えば、最適化バックアップの結果、バックアップの格納サイズを縮小することができ、バックアップ媒体空間(例えば、バックアップ・ストレージ1304における)を節約する。これは、ディスクに基づくバックアップの解決策には有用となるであろう。場合によっては、バックアップ・ストレージにおける記憶空間の節約が、主ストレージにおける節約よりも意味があり、価格効率的になる場合もある。最適化バックアップの結果、バックアップを実行する時間を短縮することができる。バックアップ実行時間を短縮することができ、年々増大しつつあるデーターの格納量を考慮すると、これは有意である。データー量の増大のために、ストレージ・ユーザーは、頻繁にバックアップを行う(例えば、毎日)ことに悪戦苦闘する場合もある。何故なら、バックアップ実行時間は、データー量と共に増大するからである。最適化バックアップ技法は、バックアップ実行時間を短縮するのに役立つことができる。更に、最適化バックアップはRTOを短縮し、復元の高速化をもたらすことができる。RTOは、バックアップ/復元解決策の重要な尺度である。
【0102】
[0125] 他の実施形態では、最適化データー・ストリームを非最適化(non-optimized)または無最適化(un-optimized)形態で格納するために、非最適化バックアップ(「無最適化データー・ストリーム・バックアップ」とも呼ぶ)を実行することもできる。非最適化バックアップによれば、バックアップ・ストレージに合わせて設計された最適化データー・ストリームを、格納する前に、リハイドレートすることができる。例えば、一実施形態では、リハイドレーション・バックアップ・モジュール1308が、最適化データー・ストリームをリハイドレートし、リハイドレートしたデーター・ストリームをバックアップ・ストレージ1304に格納することによって、非最適化バックアップを実行するように構成することができる。一実施形態では、リハイドレーション・バックアップ・モジュール1308は、
図15に示すフローチャート1500を実行することができる。フローチャート1500およびリハイドレーション・バックアップ・モジュール1308について、以下のように説明する。
【0103】
[0126] フローチャート1500のステップ1502において、各最適化データー・ストリームをリハイドレートして、対応する無最適化データー・ストリームにする。この無最適化データー・ストリームは、対応する最適化ストリーム・メタデーターによって参照されているあらゆるデーター・チャンクを含む。リハイドレーション・バックアップ・モジュール1308は、リハイドレーション・モジュール702(
図7)について先に説明したようなことを含む、いずれのやり方でも最適化データー・ストリームをリハイドレートすることができる。例えば、
図13を参照すると、リハイドレーション・バックアップ・モジュール1308は、ストリーム・コンテナ1302にアクセスして、要求1318において特定された最適化データー・ストリームに対応するストリーム・マップ・チャンクの形態、または他の形態(例えば、グローバル・テーブル、データーベース等)の最適化ストリーム・メタデーターを求めることができる。
図13に示すように、リハイドレーション・バックアップ・モジュール1308は、所望のストリーム・マップ・チャンクに対する1つ以上のストリーム・コンテナ・アクセス1322を生成することができる。ストリーム・コンテナ・アクセス1322は、対応するストリーム・マップ識別子によって、所望のストリーム・マップ・チャンクを特定することができる。ストリーム・コンテナ・アクセス1322に応答して、リハイドレーション・バックアップ・モジュール1308は要求1318において特定された最適化データー・ストリームに対応するストリーム・マップ・チャンク1324をストリーム・コンテナ302から受け取る。リハイドレーション・バックアップ・モジュール1308は、対応する引き出されたストリーム・マップ・チャンクのストリーム・マップにしたがって、各最適化データー・ストリームを再生する、即ち、「リハイドレートする」ことができる。
図13の例では、各ストリーム・マップは、対応する最適化データー・ストリームに含まれるデーター・チャンクの各々へのポインタ(例えば、
図4のデーター・チャンク識別子404)を含む。これらのデーター・チャンクは、チャンク・コンテナ304aおよび/または304bに含まれているとよい。リハイドレーション・バックアップ・モジュール1308は、このポインタを用いて、参照されているデーター・チャンク322の各々を引き出す。例えば、リハイドレーション・バックアップ・モジュール1308は、チャンク・コンテナ・アクセス1326および/または1330の内1つ以上を生成して、第1および/または第2チャンク・コンテナ304aおよび304bそれぞれからデーター・チャンク322を得ることができる。チャンク・コンテナ・アクセス1326および/または1330に応答して、リハイドレーション・バックアップ・モジュール1308は要求1318において特定された最適化データー・ストリームに対応するデーター・チャンク1328および/または1332をチャンク・コンテナ302aおよび302bから受け取る。
【0104】
[0127] リハイドレーション・バックアップ・モジュール1308は、引き出されたストリーム・マップ(例えば、
図3のストリーム・マップ310)に含まれるデーター・ストリーム・オフセット402を用いて、引き出されたデーター・チャンクを適正な順序に並べて各データー・ストリームを無最適化形態で(例えば、無最適化データー・ストリームとして)再生することができる。
【0105】
[0128] ステップ1504において、無最適化データー・ストリームの各々をバックアップ・ストレージに格納する。例えば、
図13に示すように、無最適化データー・ストリームは、格納動作1320にしたがって、リハイドレーション・バックアップ・モジュール1308によってバックアップ・ストレージ1304に格納することができる。したがって、データー・ストリームをバックアップ・ストレージ1304から復元することが望まれる場合、バックアップ・ストレージ1304に格納されている無最適化データー・ストリームを引き出すことができる。
【0106】
[0129] このように、無最適化バックアップ(フローチャート1500およびリハイドレーション・バックアップ・モジュール1308による)は、最適化データー・ストリームをバックアップするいずれの状況においても実行することができる。無最適化バックアップを実行することが望まれると考えられるのは、最適化データー・ストリームのデーター・チャンクがチャンク・ストア1334の記憶空間の内比較的少ない部分を埋める場合である。つまり、チャンク・コンテナ全体をバックアップ・ストレージ1304に格納すると、要求1318において特定された最適化データー・ストリームに関係ない多数のデーター・チャンクを格納することも含む可能性があるが、そうするのはなく、特定の最適化データー・ストリームをリハイドレートしてバックアップ・ストレージ1304に格納することができる。したがって、バックアップ媒体は、データー・ストリームをそれらの最適化されていていない元の形態で格納することができ、関係ないデーター・チャンクを格納することを回避することによって、バックアップ記憶空間を節約することができる。
【0107】
[0130] 無最適化バックアップの実施形態は、種々の便益を提供することができる。例えば、無最適化バックアップは、選択的バックアップをより多く用い(そして選択的復元を可能にする)、実施するのが比較的容易である。バックアップしたデーター・ストリームの復元は、記憶システムが用いるデーター最適化技法に左右されない。何故なら、データー・ストリームは無最適化形態でバックアップされているからである。したがって、インストールされたデーター最適化解決策の機能に左右されることなく、データー・ストリームはどこでも復元およびアクセスすることができる。
【0108】
[0131] リハイドレーション・プロセスのために、無最適化バックアップは比較的遅くなる可能性があり、データー・バックアップ・モジュール1302の性能に影響を及ぼす可能性がある。最適化データーのハイドレーションは、最適化データーには解凍が行われるために、更に潜在的にデーター断片化のために、通常のデーター読み出しよりも遅い。更に、データー・ストリームが無最適化形態でバックアップされるので、バックアップされるデーターの総量が大きくなる可能性がある。これは、重複排除の利点がないからである。データーの総量は、潜在的に、バックアップされるボリュームよりも大きな量になることもある(何故なら、ボリュームは最適化されるが、バックアップ・データーは最適化されないからである)。場合によっては、バックアップ・ストレージのサイズ制限のために、データーの全てをバックアップすることができない場合もある。つまり、無最適化バックアップは、特定のバックアップ状況における使用のために選択されるとよい。無最適化バックアップまたは他のバックアップ技法を選択する例について、以下で更に説明する。
【0109】
[0132] 他の実施形態では、項目レベル最適化形態で最適化データー・ストリームを格納するために、項目レベル・バックアップを実行することもできる。項目レベル・バックアップによれば、バックアップ・ストレージに指定された最適化データー・ストリームが、最適化形態での格納のために準備される。例えば、特定の最適化データー・ストリームのために、最適化データー・ストリームのストリーム・マップ・チャンクによって参照されているデーター・チャンクを判定する。参照されているデーター・チャンクの内既にバックアップ・ストレージに格納されているものはいずれも、チャンク・ストアから引き出されない。参照されているデーター・チャンクの内未だバックアップ・ストレージに格納されていないものはいずれも、チャンク・ストアから引き出され、バックアップ・ストレージに格納される。例えば、一実施形態では、項目レベル・バックアップ・モジュール1310は、バックアップ・ストレージ1304に、ストリーム・マップ・チャンクと、参照されているデーター・チャンクの内未だバックアップ・ストレージ1304に格納されていないものを格納することによって、項目レベル・バックアップを実行するように構成することができる。例えば、項目レベル・バックアップ・モジュール1310は、一実施形態では、
図16に示すフローチャート1600を実行することができる。フローチャート1600は、要求1318において特定された最適化データー・ストリーム毎に実行することができる。フローチャート1600および項目レベル・バックアップ・モジュール1310について、以下のように説明する。
【0110】
[0133] フローチャート1600のステップ1602において、バックアップするために特定された第1最適化データー・ストリームを受け取る。例えば、要求1318は最適化データー・ストリームを特定することができる。この最適化データー・ストリームに対して、項目レベル・バックアップ・モジュール1310は、最適化ストリーム・メタデーター(例えば、ストリーム・コンテナ302からのストリーム・マップ・チャンク1324)を引き出すことができ、最適化ストリーム・メタデーターによって参照されているいずれのデーター・チャンク322もチャンク・コンテナ304から引き出すことができる。例えば、項目レベル・バックアップ・モジュール1310は、ストリーム・コンテナ302へのストリーム・コンテナ・アクセス1322を生成して所望のストリーム・マップ・チャンクをストリーム・マップ・チャンク1324として引き出すことができ、更にチャンク・コンテナ・アクセス1326および/または1330の内1つ以上を生成して、第1および/または第2チャンク・コンテナ304aおよび304bから、参照されているデーター・チャンク322をデーター・チャンク1328および/または1332として入手することができる。
【0111】
[0134] ステップ1604において、第1最適化データー・ストリームの最適化ストリーム・メタデーターによって参照されている1つ以上のデーター・チャンクの内、バックアップ・ストレージに未だ格納されていないものを判定する。一実施形態では、項目レベル・バックアップ・モジュール1310は、ストリーム・マップ・チャンクのメタデーターによって参照されているデーター・チャンクを、既にバックアップ・ストレージ1304に格納されているあらゆるデーター・チャンクと比較して、参照されているデーター・チャンクの内いずれかが既にバックアップ・ストレージ1304に格納されているか否か判定することができる。項目レベル・バックアップ・モジュール1310は、参照されているデーター・チャンクのハッシュを、バックアップ・ストレージ1304に格納されているデーター・チャンクのハッシュと比較すること(例えば、ハッシュ・インデックス等を用いて)を含む、いずれの方法でもこの比較を実行することができ、参照されているデーター・チャンクのデーター・チャンク識別子をバックアップ・ストレージ1304に格納されているデーター・チャンクのデーター・チャンク識別子と比較することもでき、または他の技法にしたがってこの比較を行うこともできる。項目レベル・バックアップ・モジュール1310は、リストまたはその他のデーター構造を(例えば、メモリーに)保持することによってというようにして、参照されているデーター・チャンクの内バックアップ・ストレージに未だ格納されていないと判定されたものを追跡し続けることができる。
【0112】
[0135] ステップ1606において、第1最適化データー・ストリームの最適化ストリーム・メタデーターをバックアップ・ストレージに格納する。例えば、項目レベル・バックアップ・モジュール1310は、最適化データー・ストリームに対してストリーム・コンテナ302から引き出されたストリーム・マップ・チャンクを、バックアップ・ストレージ1304に格納することができる(例えば、格納動作1320を用いて)。
【0113】
[0136] ステップ1608において、判定された1つ以上のデーター・チャンクをバックアップ・ストレージに格納する。項目レベル・バックアップ・モジュール1310は、 最適化データー・ストリームに対してチャンク・コンテナ302aおよび/または302bから引き出され、ステップ1604において未だバックアップ・ストレージ1304に格納されていないと判定されたデーター・チャンクを、バックアップ・ストレージ1304に格納することができる(例えば、格納動作1320を用いて)。したがって、データー・ストリームをバックアップ・ストレージ1304から復元することが望まれるとき、最適化データー・ストリームに対してバックアップ・ストレージ1304に格納されているストリーム・マップ・チャンクおよびデーター・チャンクをバックアップ・ストレージ1304から引き出し、リハイドレートしてデーター・ストリームを形成することができる。一実施形態では、最適化ストリーム構造(例えば、フローチャート1400(
図14)のステップ1404に関して先に説明したストリーム・メタデーター・スタブ)をバックアップ・ストレージ1304にバックアップすることもでき、そしてデーター・ストリームをリハイドレートするためのリパース・ポイントとして、バックアップ・ストレージ1304から引き出すことができる。
【0114】
[0137] このように、項目レベル・バックアップ(例えば、フローチャート1600および項目レベル・バックアップ・モジュール1310による)は、最適化データー・ストリームをバックアップするいずれの状況においても実行することができる。項目レベル・バックアップによれば、重複排除データー・チャンクを、バックアップされるあらゆるデーター・ストリームと関連付けつつ、バックアップを最適化形態に維持する(例えば、リハイドレーションなしで、あらゆるデーター・チャンクを1回バックアップする)。チャンク・ストア・コンテナ全体をバックアップすることはしない。
【0115】
[0138] 一実施形態では、バックアップ(および任意に復元)API(アプリケーション・プログラミング・インターフェース)を、項目レベル・バックアップ・モジュール1310によって実装することができる。例えば、バックアップ・セッションを、チャンク・ストア1334に格納されている第1ファイルおよび第2ファイルを最適化形態でバックアップするために定めることもできる。この例では、第1ファイルはチャンク・コンテナ302aのデーター・チャンク322aおよび322bならびにチャンク・コンテナ304bのデーター・チャンク322dを含み、第2ファイルは、チャンク・コンテナ302aのデーター・チャンク322a〜322c、ならびにチャンク・コンテナ304bのデーター・チャンク322dおよび322eを含むと仮定する。第1ファイルをバックアップするために、バックアップAPIをコールすることができる。応答して、APIは第1ファイルに対するストリーム・マップ・チャンク、ならびにデーター・チャンク322a、322b、および322dを戻す。戻されたストリーム・マップ・チャンクならびにデーター・チャンク322a、322b、および322dは、第1ファイルのためにバックアップ・ストレージ1304に格納される。続いて、第2ファイルをバックアップするためにバックアップAPIをコールすることができる。応答して、APIは第2ファイルに対するストリーム・マップ・チャンク、ならびにデーター・チャンク322cおよび322eを戻す。これは、APIが、第2ファイルのデーター・チャンク322a、322b、および322dが既にバックアップ・ストレージ1304に格納されていると判定したからである(第1ファイルがバックアップ・ストレージ1304にバックアップされることによる)。したがって、戻されたストリーム・マップ・チャンクならびにデーター・チャンク322cおよび322eは、第2ファイルのためにバックアップ・ストレージ1304に格納される。
【0116】
[0139] 項目レベル・バックアップにしたがってバックアップされたデーター・ストリームを復元するための復元モジュールは、同様のAPIを用いることができ、最適化ストリーム・メタデーターは、復元モジュールAPIが、参照されているデーター・チャンクを指し示すのを補助する。項目レベル・バックアップは、全体バックアップおよび選択的バックアップの双方に対して最適化バックアップ(サイズについて)を可能にする(何故なら、バックアップの粒度がデーター・ストリーム/ファイルの粒度になるからである)。しかしながら、項目レベル・バックアップは比較的遅く複雑である場合があり、しかもブロック・レベルのバックアップ技法とではうまく動作しないこともある。
【0117】
[0140] 更に他の実施形態では、最適化データー・ストリームを他の形式の最適化形態で格納するために、データー・チャンク識別子バックアップを実行することもできる。データー・チャンク識別子バックアップによれば、バックアップしようとする最適化データー・ストリームに対して、データー・チャンク識別子を決定する。データー・チャンク識別子をバックアップ・ストレージに格納し、参照されているデーター・チャンクを格納するチャンク・コンテナをバックアップ・ストレージに格納する。例えば、一実施形態では、データー・チャンク識別子バックアップ・モジュール1312は、バックアップ・ストレージ1304に、データー・ストリームの最適化ストリーム・メタデーターによって参照されているデーター・チャンク識別子、および関連するデーター・チャンク識別子によって特定されるチャンクを格納するチャンク・コンテナを格納することによって、データー・チャンク識別子バックアップを実行するように構成することができる。例えば、データー・チャンク識別子バックアップ・モジュール1312は、一実施形態では、
図17に示すフローチャート1700を実行することができる。フローチャート1700およびデーター・チャンク識別子バックアップ・モジュール1312について、以下のように説明する。
【0118】
[0141] フローチャート1700のステップ1702において、各最適化データー・ストリームの最適化ストリーム・メタデーターを分析して、最適化ストリーム・メタデーターによって参照されている少なくとも1つのデーター・チャンクに対して、対応する少なくとも1つのデーター・チャンク識別子を決定する。例えば、一実施形態では、要求1318において特定された最適化データー・ストリーム毎に、データー・チャンク識別子バックアップ・モジュール1312は、ストリーム・コンテナ302から、対応する最適化ストリーム・メタデーターをストリーム・マップ・チャンクの形態で引き出すことができる。更に、データー・チャンク識別子バックアップ・モジュール1312は、引き出したストリーム・マップ・チャンクのメタデーターを分析して、チャンク・コンテナ304からのストリーム・マップ・チャンクのメタデーターによって参照されている全ての(any)データー・チャンク322に対してデーター・チャンク識別子を決定する。データー・チャンク識別子は、メタデーター(例えば、
図4に示したメタデーター400に含まれているデーター・チャンク識別子404)に含まれている。データー・チャンク識別子バックアップ・モジュール1312は、リダイレクション・テーブル(例えば、
図9のリダイレクション・テーブル900)を参照して、データー・チャンク識別子の内1つ以上のチャンク・オフセット値をマッピングし、1つ以上の参照されているデーター・チャンクがチャンク・コンテナ304内で移動させられた場合、チャンク・オフセット値を更新する。
【0119】
[0142] ステップ1704において、最適化データー・ストリーム毎の最適化ストリーム構造を、対応する少なくとも1つのデーター・チャンク識別子と共に、バックアップ・ストレージに格納する。例えば、データー・チャンク識別子バックアップ・モジュール1312は、最適化データー・ストリームの各々の最適化ストリーム構造を、ステップ1702において決定した、対応するデーター・チャンク識別子と共に、バックアップ・ストレージ1304に格納することができる(例えば、格納動作1320を用いて)。チャンク識別子は、いかようにでも、最適化ストリーム構造と関連付けて格納することができ、バックアップ・ストレージ1304内において対応する最適化ストリーム構造の外部または内部に格納することを含む。
【0120】
[0143] ステップ1706において、最適化データー・ストリームを収容する、チャンク・ストアの1つ以上のチャンク・コンテナを、バックアップ・ストレージに格納する。一実施形態では、データー・チャンク識別子バックアップ・モジュール1312は、最適化データー・ストリームのストリーム・マップ・チャンクがバックアップされるように、ストリーム・コンテナ302をバックアップ・ストレージ1304に格納することができる(例えば、格納動作1320を用いて)。更に、データー・チャンク識別子バックアップ・モジュール1312は、参照されているデーター・チャンクがバックアップされるように、最適化データー・ストリームのストリーム・マップ・チャンクによって参照されているいずれのデーター・チャンク322を格納するチャンク・コンテナ304でも、その1つ以上を格納することができる(例えば、格納動作1320を用いて)。一実施形態では、データー・チャンク識別子バックアップ・モジュール1312は、最適化データー・ストリームの全てのチャンクがバックアップされるように、チャンク・ストア1334全体をバックアップ・ストレージ1304に格納することができる。
【0121】
[0144] したがって、データー・チャンク識別子バックアップは、前述の最適化バックアップに似ているが、バックアップ時に「復元計画」(restore plan)を付与するために、全てのデーター・チャンク(データー・チャンク)のそれぞれのコンテナ・ファイル内における位置も格納する(データー・チャンク識別子によって)。データー・チャンク識別子バックアップの利点は、バックアップ・アプリケーション(例えば、データー・バックアップ・モジュール1302)がそのカタログに「復元計画」を格納し、選択的復元を含む、復元の状況毎にどの他のファイル(したがって、どのバックアップ媒体)が必要とされるのか前もって知ることができることである。前述の無最適化バックアップと同様、データー・チャンク識別子バックアップも比較的遅く複雑である可能性があり、データー・チャンク識別子バックアップ・モジュール1312によって実装されるバックアップAPIを用いる場合もある。更に、データー・チャンク識別子バックアップは、チャンク・ストアのモジュール性(modularity)を破壊し、内部チャンク・ストアの実施態様(implementation)を露出する。
【0122】
[0145] したがって、最適化バックアップ、無最適化バックアップ、項目レベル・バックアップ、およびデーター・チャンク識別子バックアップは、各々、
図13のデーター・バックアップ・モジュール1302によって実現することができるバックアップの実施形態である。更に、データー・バックアップ・モジュール1302は、最適化バックアップ、無最適化バックアップ、項目レベル・バックアップ、およびデーター・チャンク識別子バックアップの内1つ以上の組み合わせであるバックアップの実施形態を実現することもできる。
【0123】
[0146] 例えば、一実施形態では、データー・バックアップ・モジュール1302は、最適化バックアップおよび無最適化バックアップの組み合わせを実現することができる。一実施形態では、ボリューム全体のバックアップを実行するときに、最適化バックアップを実行することを選択するとよい。1つの最適化データー・ストリームをバックアップしようとする場合、無最適化バックアップを実行するとよい。1つと全ての最適化データー・ストリームとの間の数の最適化データー・ストリームについては、最適化バックアップまたは無最適化バックアップを選択することができる。例えば、発見法に基づいて、最適化バックアップまたは無最適化バックアップを切り替えても良い。
【0124】
[0147] 例えば、一実施形態では、データー・バックアップ・モジュール1302は、
図18に示すプロセスにしたがって最適化データー・ストリームのバックアップを実行するように構成することができる。
図18は、一実施形態例にしたがって、発見法に基づいてバックアップ技法を選択し実行するプロセスを表すフローチャート1800を示す。
図18について、以下のように説明する。
【0125】
[0148] フローチャート1800のステップ1802において、発見法に基づいてバックアップ技法を選択する。例えば、
図13に示したように、データー・バックアップ・モジュール1302は任意に発見法モジュール1314を含むことができる。発見法モジュール1314は、最適化データー・ストリームをバックアップするために用いるバックアップ技法を選択するために用いられる発見法を決定するように構成されている。
【0126】
[0149] ステップ1804において、バックアップ技法を実行して、複数の最適化データー・ストリームをバックアップ・ストレージにバックアップする。発見法モジュール1314によって決定された発見法に基づいて、最適化ファイル・バックアップ・モジュール1306またはリハイドレーション・バックアップ・モジュール1308から1つを選択して、最適化データー・ストリームをバックアップすることができる(例えば、先に
図14および
図15に関してそれぞれ説明したように)。例えば、一実施形態では、発見法モジュール1314は、最適化データー・ストリームをバックアップするために選択された最適化ファイル・バックアップ・モジュール1306またはリハイドレーション・バックアップ・モジュール1308の内1つに、イネーブル信号を供給することができる。このイネーブル信号は、最適化ファイル・バックアップ・モジュール1306またはリハイドレーション・バックアップ・モジュール1308の内1つが、その対応するバックアップ技法にしたがって最適化データー・ストリームをバックアップすることを可能にする。
【0127】
[0150] 例えば、一実施形態では、発見法モジュール1314は、「除外モード」(exclude mode)および「含有モード」(include mode)に基づく比較的単純な発見法を実装することができる。「除外モード」によれば、ユーザーはチャンク・ストア・ボリュームを選択することができ、一部のフォルダー/ファイルをバックアップから除外することができる。したがって、発見法モジュール1314は、除外モードにしたがって最適データー・ストリームがバックアップのために選択されたと判断することができる。このような場合、除外モードが決定された結果、最適化データー・ストリーム・バックアップ技法が発見法モジュール1314によって選択される。これは、「除外モード」が通例範囲内のチャンク・ストア・ボリュームの殆どを有するからである。したがって、コンテナ・ファイルが、ユーザーによって選択されたもの以外の最適化データー・ストリームによって参照されているチャンクを含むことがあっても、選択されたデーター・ストリーム(その最適化形態で)に加えて全てのチャンク・ストア・コンテナ・ファイルをバックアップすることが、より良いトレードオフとなる。
【0128】
[0151] 「含有モード」によれば、ユーザーは比較的少ないフォルダー/ファイルをバックアップのために選択することができる。したがって、発見法モジュール1314は、含有モードにしたがって最適化データー・ストリームがバックアップのために選択されたと判断することができる。このような場合、含有モードが決定された結果、無最適化データー・ストリーム・バックアップ技法が発見法モジュール1314によって選択される。これは、「含有モード」が通例範囲内のチャンク・ストア・ボリュームの比較的小さな部分を有するからである。したがって、選択されたファイルだけをその無最適化形態でバックアップすることが、より良いトレードオフとなる。このような場合、チャンク・ストア・コンテナ・ファイルをバックアップする必要はない。
【0129】
[0152] 他の実施形態では、発見法モジュール1314が比較的高度な発見法を実装することもできる。バックアップ技法におけるトレードオフは、バックアップ範囲内のファイルの最適化サイズと論理サイズとの間の差(delta)に基づくとよい。記憶空間の無駄は、バックアップ範囲に含まれない最適化データー・ストリームのみによって参照されているチャンクによって消費されるチャンク・ストア・コンテナ・ファイル内における記憶空間であると判断することができる。したがって、発見法モジュール1314は、チャンク・ストア・ボリュームにおけるファイル・サイズに基づいて、更にチャンク・ストア統計に基づいて、無駄な記憶空間の量を決定(例えば、計算)することができる。一実施形態では、どの位のチャンクが所与の1群のデーター・ストリームによって参照されているか精度高く報告するようにチャンク・ストアが構成されていない場合、何らかの仮定を行うとよい。チャンク・ストアが、指定された1群の最適化データー・ストリームによって参照されているチャンク数を報告することができる場合、発見法モジュール1314は、全てのチャンクによって埋められた空間から、バックアップのために指定された最適化データー・ストリームによって参照されているチャンクによって埋められた空間を差し引いた量として、無駄な記憶空間量を決定することができる。無駄な記憶空間量(例えば、全記憶空間に対する)に基づいて、発見法モジュール1314は、最適バックアップまたは無最適バックアップを選択することができる。
【0130】
[0153] 例えば、
図13を参照すると、一実施形態では、発見法モジュール1314は、報告1318において特定された複数の最適化データー・ストリームのいずれのストリーム・マップ・チャンク・メタデーターによっても参照されていないデーター・チャンク322によって消費されたチャンク・ストア1334における空間量を判定することができる。発見法モジュール1314は、チャンク・ストア1334において参照されていないデーター・チャンクによって消費されたと判定された空間量が所定の閾値(例えば、チャンク・ストア1334の総記憶空間の50%またはその他のパーセント)未満である場合、バックアップ技法を最適化データー・ストリーム・バックアップ技法にする選択を行うことができる。発見法モジュール1314は、参照されていないデーター・チャンクによって消費されたと判定されたチャンク・ストア1334の量が所定の閾値よりも大きい場合、バックアップ技法を無最適化データー・ストリーム・バックアップ技法にする選択を行うことができる。
【0131】
[0154] 一例では、発見法モジュール1314は、以下の分析を実行してバックアップ技法を設定することができる。バックアップ範囲が1つ以上の名称空間ルート(namespace roots)を含み、名称空間ルートがサブフォルダーを反復的に含むフォルダーである場合、以下の発見法パラメータを定義することができる。
【0132】
範囲=バックアップ範囲における全てのファイルであり、バックアップのために選択されたフォルダーの下にある全てのファイルを意味する。
A=その範囲にある全てのファイルの論理サイズであり、ファイルの論理サイズとは、そのファイルが重複排除される前におけるファイルのサイズである(Aは、範囲内にあるファイルの全ての論理サイズの総和である)。
【0133】
B=その範囲内にある全てのファイルのディスク上のサイズであり、ファイルのディスク上のサイズとは、そのファイルの重複排除の後に最適化ファイルがディスク上で埋める実際のサイズである。
【0134】
C=チャンク・ストアのサイズであり、全てのチャンク・ストア・コンテナ・ファイルのサイズの総和である。
これらの定義を検討し、バックアップ・アプリケーションが最適化バックアップを用いる場合、バックアップ媒体上における総バックアップ・サイズはB+Cとなる。バックアップ・アプリケーションが無最適化バックアップを用いる場合、バックアップ・メディア上における総バックアップ・サイズはAとなる。
【0135】
[0155] したがって、発見法モジュール1314は、バックアップ・ファイル範囲を決定した後、最適または無最適バックアップ間の選択において決定する際に役立てるために、AおよびB+Cの値を計算することができる。A>B+Cである場合、最適化バックアップの方が占める空間が少ないので、選択するとよい。そうでなければ、A≦B+Cである場合、無最適化バックアップの方が占める空間が少ないので、選択するとよい。
【0136】
E.データー最適化復元の実施形態例
[0156]
図13を参照すると、最適化データー・ストリームが何らかの原因で転化(corrupt)したときというような、何らかの時点において、バックアップ・ストレージ1304にバックアップした最適化データー・ストリームを主ストレージに復元する(restore)ことが望まれる場合がある。例えば、最適化データー・ストリームの1つ以上のチャンク(例えば、ストリーム・マップ・チャンクおよび/またはデーター・チャンク)がチャンク・ストア1334において転化していたということがあり得る。このような場合、最適化データー・ストリームのバックアップ・バージョンを、バックアップ・ストレージ1304から非最適化形態で復元することが望まれる場合がある。現在使用中のバックアップ技法は、ファイル・システムの名称空間全体をバックアップする可能性が高く、最適化ファイルおよびチャンク・ストア・コンテナ・ファイルを含む。更に、多くの現在使用中のバックアップ技法は、テープ媒体のようなシーケンシャル・バックアップ媒体を、バックアップ・ストレージのために未だに用いている。したがって、データー・ストリームを復元する技法が、異なるバックアップ媒体の種類およびバックアップ・フォーマットを考慮に入れることができることが望ましい。
【0137】
[0157] この副章では、最適化データー・ストリームをバックアップ・ストレージから復元する実施形態について説明する。実施形態は、レイテンシーおよびディスクI/O動作を低減するように、最適化データー・ストリーム(例えば、ファイル)を復元することを可能にする。一実施形態によれば、バックアップしたチャンク・コンテナの別の不要な部分を復元するのではなく、特定のデーター・ストリームに対するチャンクを、バックアップ・ストレージから復元することが可能になる。実施形態は、最適化バックアップ全体からのデーター・ストリームの選択的復元を可能にし、データー最適化メタデーターを理解する必要がなく、更にバックアップ媒体の種類やバックアップ・フォーマットについて仮定を行う必要もない。
【0138】
[0158] 実施形態では、データー最適化システムにおけるデーター・ストリームの復元は、種々の方法で実行することができる。例えば、
図19は、一実施形態例にしたがって、データー最適化システムにおいてバックアップ・データーの復元を実行するフローチャート1900を示す。フローチャート1900は、一実施形態では、
図1のチャンク・ストア・インターフェース116によって実行することができる。例示の目的に限って、
図20に関してフローチャート1900を説明する。
図20は、一実施形態例によるデーター復元システム2000のブロック図を示す。尚、一実施形態では、
図13のデーター・バックアップ・システム1300およびデーター復元システム2000を共通のシステムにおいて(例えば、共通のバックアップ/復元アプリケーション等)実装してもよく、または別々に実装してもよいことを注記しておく。
図20に示すように、データー復元システム2000は、データー復元モジュール2002とバックアップ・ストレージ2034とを含む。バックアップ・ストレージ2034は、ストリーム・コンテナ302と1つ以上のチャンク・コンテナ304(例えば、チャンク・コンテナ304aおよび304b)を格納する。更に、データー復元モジュール2002は、ファイル・リコンストラクター(file reconstructor)2004と、復元アプリケーション2006とを含む。フローチャート1900は、一実施形態では、ファイル・リコンストラクター2004によって実行することができる。フローチャート1900に関する論述に基づいて、関連技術(1つまたは複数)の当業者には更に他の構造的および動作的実施形態も明白であろう。フローチャート1900およびデーター復元モジュール2002について、以下のように説明する。
【0139】
[0159]
図20を参照すると、復元アプリケーション2006は、カタログ(またはその他の何らかのメカニズム)を用いてバックアップ・ストレージにおいてファイルの位置を突き止め、突き止めたファイルをストレージに書き込むことによって、ファイルをバックアップ・ストレージから復元するように構成されている従来の復元アプリケーションであってよい。復元アプリケーション2006は、復元機能のみを含むのでもよく、またはバックアップ機能も含んでもよい(例えば、バックアップ/復元アプリケーションであってもよい)。データー最適化システムの場合、ファイル復元要求に応答して復元アプリケーション2006によってストレージに書き込まれるファイルは、最適ストリーム構造であり、ストリーム・マップ・チャンクへの参照を収容している。
【0140】
[0160] 例えば、復元アプリケーション2006は、データー・ストリームをバックアップ・ストレージ2034から引き出す要求2010を受けることができる。要求2010は、ファイル名称によってデーター・ストリームを特定することができる。
図20に示すように、復元アプリケーション2006は、最適化ストリーム構造2038(例えば、ストリーム・メタデーター・スタブ)をバックアップ・ストレージ2034から引き出すことができる。最適化ストリーム構造2038は、要求2010の要求されたファイル・ストリームに対応する。しかしながら、最適化ストリーム構造2038は要求2010において要求されたデーター・ストリームに対するリパース・ポイントであるので(例えば、最適化ストリーム構造2038はファイル・データーを含まない)、復元アプリケーション2006は、最適化ストリーム構造2038に対応するデーター・ストリームを再現するために、ファイル・リコンストラクター2004にアクセスするように構成されている。例えば、ファイル・リコンストラクター2004は、
図19におけるフローチャート1900にしたがって、次のようにデーター・ストリームを再現するように構成することができる。
【0141】
[0161] フローチャート1900のステップ1902において、ストレージ内にあるチャンク・ストアからデーター・ストリームを引き出す要求を受ける。この要求は、このデーター・ストリームに対応する最適化ストリーム・メタデーターの識別子を含む。例えば、
図20に示すように、ファイル・リコンストラクター2004は、要求2036を復元アプリケーション2006から受けるのでもよい。要求2036は、ファイル・リコンストラクター2004が最適化データー構造2038に対応するデーター・ストリームを再現する要求である。要求2036は、最適化ストリーム構造2038を含む。最適化ストリーム構造2038は、ストリーム・マップ・インディケーターのような、最適化ストリーム・メタデーター・インディケーターを含み、対応する最適化データー・ストリームに対応する最適化ストリーム・メタデーター(例えば、ストリーム・マップ・チャンク)の位置を突き止めるために用いることができる。本明細書のいずれかの場所で説明したように、最適化ストリーム・メタデーターは、ファイル・リコンストラクター2004がデーター・ストリームを組み立て直すために用いることができるデーター・チャンクへの参照を含む。
【0142】
[0162] ファイル・リコンストラクター2004は、ハードウェア、ソフトウェア、またはこれらのあらゆる組み合わせで実現することができる。例えば、一実施形態では、ファイル・リコンストラクター2004は、バックアップ・ストレージから復元された最適化データー構造に基づいてデーター・ストリームをリハイドレートするように構成されているアプリケーション・プログラミング・インターフェース(API)とすることができる。一実施形態では、ファイル・リコンストラクター2004のAPIは、以下の形態で要求2036を受けるように構成することができる。
【0143】
再現ファイル(復元−状態/コンテキスト[内]、ファイル−名称[内]、コールバック−インターフェース[内])
ここで、要求パラメータを次のように定義する。
【0144】
「復元−状態/コンテキスト」は、多数のコール間で内部状態を維持するために用いられるラベルである。
「ファイル−名称」は、最適化ストリーム構造2038のファイル名称である。
【0145】
「コールバック−インターフェース」は、ファイル・リコンストラクター2004が復元アプリケーション2006に対してコールバックを行うために用いる識別子である。
他の実施形態では、ファイル・リコンストラクター2004は、API以外の方法で構成することもできる。例示の目的に限って、ファイル・リコンストラクター2004のAPIの実施形態について以下で引用することがあるが、この実施形態は限定することを意図するのではない。
【0146】
[0163] ステップ1904において、復元アプリケーションに対する第1のコールを、最適化ストリーム・メタデーター識別子に基づいて生成する。この第1のコールは、最適化ストリーム・メタデーター識別子によって特定された最適化ストリーム・メタデーターを格納するストレージにおける第1チャンク・コンテナにファイル名称を指定し、更に第1チャンク・コンテナにおける最適ストリーム・メタデーターにオフセットを指定する。
図20に示すように、一実施形態では、ファイル・リコンストラクター2004は、コールバック・モジュール2008を含むことができる。コールバック・モジュール2008は、コールを生成するように構成されており、復元アプリケーション2006にコールバックするためにファイル・リコンストラクター2004によって用いられる(例えば、ファイル・リコンストラクター2004のAPIによって用いられる)。コールバック・モジュール2008は、復元アプリケーション2006に対してコールバックを行い(例えば、復元アプリケーション2006によって供給される「コールバック・インターフェース」にしたがって)、コールにおいて特定されたチャンクをバックアップ・ストレージ2034から復元することができる。ファイル・リコンストラクター2004は、復元されたチャンクを受け取り、これらを用いて、特定されたデーター・ストリームを組み立て直す。例えば、一実施形態では、コールバック・モジュール2008は、以下のコールバック構造にしたがってコールを実施することができる。
【0147】
リード([in]復元−状態/コンテキスト、[in]ファイル名称、[in]オフセット、[in]サイズ、[out]バッファー)
ここで、コール・パラメータを次のように定義する。
「復元−状態/コンテキスト」は、多数のコール間で内部状態を維持するために用いられるラベルである。
「ファイル名称」は、バックアップ・ストレージ2034において、要求されたチャンクを格納するコンテナのファイル名称である。
「オフセット」は、要求されたチャンクに対するコンテナにおけるオフセットである。
「サイズ」は、要求されたチャンクのコンテナ内におけるサイズである。
「バッファー」は、ファイル・リコンストラクター2004が、復元されたチャンクにアクセスするために、復元されたチャンクを復元アプリケーション2006が格納することができる場所(例えば、メモリーまたは他のストレージにおけるバッファー)である。
【0148】
他の実施形態では、コールは他のフォーマットまたは構造を有することもできる。復元アプリケーション2006は、特定のバックアップされたファイルにおいて与えられるオフセットから、バックアップ・ストレージ2304からチャンクを復元することができることによって、選択的復元が行えるように構成されている。例えば、復元アプリケーション2006は、バックアップ・カタログを用いて、受けたコールの{ファイル−名称、ファイル−オフセット}を{バックアップ−媒体、メディアにおけるオフセット}にマッピングする(ファイルからバックアップ媒体にマッピングする)ことができる。
【0149】
[0164] 最適化ストリーム・メタデーターをストリーム・マップ・チャンクの形態で格納する実施形態では、コールバック・モジュール2008によって生成された最初のコール(ステップ1094にしたがって)は、最適化ストリーム構造2038内におけるストリーム・マップ・チャンク識別子によって特定されるストリーム・マップ・チャンクを求める、復元アプリケーション2006に対する要求である。一実施形態では、コールバック・モジュール2008は、前述のコールバック構造にしたがって最初のコールを生成することができる。コールバック・モジュール2008は、チャンク・コンテナ識別子の値を「ファイル名称」パラメータとして含むように、そしてチャンク・オフセット値の値を「オフセット」パラメータとして含むように、最初のコールを生成することができる。「サイズ」パラメータは任意である。何故なら、復元アプリケーション2006は、バックアップ・ストレージ2034内において、要求されたチャンクのサイズを独立して決定することができる場合もあるからである(例えば、デフォルトのサイズで作られたチャンクのため、バックアップ・カタログに格納されているチャンク・サイズ情報にアクセスすることによって等)。
図20の例に関して、コールバック・モジュール2008は、ストリーム・コンテナ302のファイル名称を「ファイル名称」パラメータとして含み、更にストリーム・コンテナ302内におけるストリーム・マップのオフセットの値を「オフセット」パラメータとして含むように、最初のコールを生成することができる。
図20に示すように、ファイル・リコンストラクター2004は、コールバック・モジュール2008によって生成された第1のコール2014を復元アプリケーション2006に送信する。
【0150】
[0165] ステップ1906において、第1のコールに応答して最適化ストリーム・メタデーターを受け取る。一実施形態では、復元アプリケーション2006は第1のコール2104を受け取り、バックアップ・ストレージ2034にアクセスして、第1のコール2014において特定されたストリーム・マップ・チャンクを入手する。復元アプリケーション2006は、バックアップ・ストレージ2034内にあるストリーム・コンテナ302へのアクセス2016を生成し、ストリーム・コンテナ302において、第1のコール2104において示されているストリーム・マップ・チャンク2018を引き出す。復元アプリケーション2006は、ストリーム・マップ・チャンク2018を、応答2020においてファイル・リコンストラクター2004に送信する。
【0151】
[0166] ステップ1908において、最適化ストリーム・メタデーター内において参照されている少なくとも1つのデーター・チャンク識別子を判定する。一実施形態では、ファイル・リコンストラクター2004は、応答2020において受け取ったストリーム・マップ・チャンク2018によって定められたストリーム・マップのメタデーター(例えば、
図3のストリーム・マップ310のメタデーター314)を分析して、参照されているデーター・チャンクに対する1つ以上のデーター・チャンク識別子を求める。ストリーム・マップのメタデーターは、データー・チャンク識別子の形態で(例えば、
図4のデーター・チャンク識別子404)、処理対象のデーター・ストリームに含まれるチャンク・コンテナ304aおよび304b内にあるデーター・チャンク322の各々へのポインタを含む。このように、ストリーム・マップ・チャンク2018に含まれる1つ以上のデーター・チャンク識別子を判定する。
【0152】
[0167] ステップ1910において、ストレージ内における少なくとも1つのチャンク・コンテナから少なくとも1つのデーター・チャンクを得るために、復元アプリケーションに対する少なくとも1つの追加のコールを、少なくとも1つのデーター・チャンク識別子に対応して生成する。一実施形態では、コールバック・モジュール2008は、復元アプリケーション2006に対して1つ以上の追加のコールを生成する。各コールは、ステップ1908において判定されたデーター・チャンク識別子に対応する、バックアップ・ストレージ2034における、データー・チャンク322を求める要求である。例えば、コールバック・モジュール2008は、判定されたデーター・チャンク識別子(1つまたは複数)の内対応するデーター・チャンク識別子に基づいて、復元アプリケーション2006に第2のコールを生成することができる。この第2のコールは、前述のコール構造を有することができ、または他の構造を有しても良い。第2のコールは、バックアップ・ストレージ2034内において、データー・チャンク識別子によって特定されたデーター・チャンク322を格納するチャンク・コンテナ304aおよび304bの内1つのファイル名称(「ファイル名称」パラメータとして)を指定することができる。第2のコールは、ファイル名称によって特定された第1および第チャンク・コンテナ304aおよび304bの内1つの中で特定されたデーター・チャンク322に対してオフセットを指定することができる(「オフセット」パラメータとして)。「サイズ」パラメータは任意である。何故なら、復元アプリケーション2006は、特定されたデーター・チャンク322のサイズを独立して決定することができる場合もあるからである。
図20に示すように、ファイル・リコンストラクター2004は、コールバック・モジュール2008によって生成された第2のコール2022を復元アプリケーション2006に送信する。
【0153】
[0168] ステップ1912において、少なくとも1つの追加のコールに応答して、少なくとも1つのデーター・チャンクを受け取る。一実施形態では、復元アプリケーション2006は第2のコール2022を受け、バックアップ・ストレージ2034にアクセスして、第2のコール2022において特定されたデーター・チャンク322を得る。例えば、特定されたデーター・チャンクが第1チャンク・コンテナ304aに格納されている場合、復元アプリケーション2006はバックアップ・ストレージ2034における第1チャンク・コンテナ302aへのアクセス2024を生成することができ、第1チャンク・コンテナ302aにおいて、第2のコール2022において指示されているオフセットにおけるデーター・チャンク2026を引き出すことができる。復元アプリケーション2006は、データー・チャンク2026を応答2028においてファイル・リコンストラクター2004に送信する。
【0154】
[0169] 尚、ステップ1908において判定された追加のデーター・チャンク識別子毎に、ファイル・リコンストラクター2004は、第2のコール2022と同様にして、対応するデーター・チャンク322をバックアップ・ストレージ2034から引き出すために、復元アプリケーション2006への追加のコールを生成することができる。例えば、ファイル・リコンストラクター2004から受けた第3のコールに応答して、復元アプリケーション2006は、第3のコールにおいて特定されたデーター・チャンク322を得るために、バックアップ・ストレージ2034にアクセスすることができる。例えば、識別されたデーター・チャンクが第2チャンク・コンテナ304bに格納されている場合、復元アプリケーション2006は、バックアップ・ストレージ2304における第2チャンク・コンテナ302bへのアクセス2030を生成することができ、そして第3のコールにおいて示されている、第2チャンク・コンテナ302bにおけるオフセットにおいて、データー・チャンク2032を引き出すことができる。復元アプリケーション2006は、データー・チャンク2032を他の応答において、ファイル・リコンストラクター2004に送信することができる。追加のデーター・チャンク識別子に対応する追加のコールも同様に処理して、ファイル・リコンストラクター2004ために、バックアップ・ストレージ2034から追加のデーター・チャンクを引き出すことができる。
【0155】
[0170] ステップ1914において、最適化ストリーム・メタデーターおよび少なくとも1つのデーター・チャンクを組み合わせて、データー・ストリームを復元する。一実施形態では、ストリーム・マップ・チャンク2018、およびバックアップ・ストレージ2034から引き出された1つ以上のデーター・チャンク322(例えば、データー・チャンク2026および2032)は、データー・ストリームを復元するために組み合わせることができる。リハイドレーション・モジュール702について先に説明したのと同様に、ファイル・リコンストラクター2004は、ストリーム・マップ・チャンク2018のストリーム・マップに含まれるデーター・ストリーム・オフセット402(
図4)を用いて、引き出されたデーター・チャンク322を適正な順序に並べて、データー・ストリームを再生することができる。このデーター・ストリームは、ファイル・リコンストラクター2004によってデーター・ストリーム2012として出力される。データー・ストリーム2012は、主ストレージに格納することができ、または主ストレージに格納するために復元アプリケーション2006に出力することができ、あるいは特定のアプリケーションに合わせて所望通りに、それ以外で処理または配信することもできる。
【0156】
[0171] 例示の目的のために、
図19のフローチャート1900および
図20のシステム2000を参照して、最適化ファイルの復元例について説明する。最適化ファイルに対するストリーム・マップ・チャンクをストリーム・コンテナ302に格納し、この最適化ファイルは、チャンク・コンテナ304aのデーター・チャンク322aおよび322bと、チャンク・コンテナ304bのデーター・チャンク322eとを含む。この例では、ストリーム・コンテナ302はファイル名称SC5を有し、チャンク・コンテナ304aはファイル名称CC3を有し、そしてチャンク・コンテナ304bはファイル名称CC7を有する。先に説明したように、復元アプリケーション2006は、バックアップ・ストレージ2034からの最適化ファイルに合わせて、最適化ストリーム構造2038(例えば、ファイル名称「OFN」を有する)を復元することができる。ステップ1902において、復元アプリケーション2006は、最適化ファイルに対してファイル再構築プロセスを開始する要求2036をファイル・リコンストラクター2004に対して生成することができる(例えば、ファイル再現(OFN、コールバック)を用いて)。ステップ1904において、コールバック・モジュール2008は第1コールを復元アプリケーション2006に生成し、最適化フィアルに対して最適化ストリーム構造2038において特定されたストリーム・マップ・チャンクを要求する(例えば、コールバック−>リード(内部状態、SC5、streammapchunkoffset、64K、バッファー)。ここで、ストリーム・マップ・チャンクのサイズは64Kである)。ステップ1906において、復元アプリケーション2006は、ストリーム・マップ・チャンクをストリーム・コンテナ304から引き出し、このストリーム・マップ・チャンクを応答においてファイル・リコンストラクター2004に供給する。ステップ1908において、ファイル・リコンストラクター2004はこのストリーム・マップ・チャンクを分析して、所望のファイルに含まれるデーター・チャンク322a、322b、および322eの3つのデーター・チャンク識別子を判定する。ステップ1910において、コールバック・モジュール2008は、3つのコールを復元アプリケーション2006に対して生成し、それぞれ、データー・チャンク322a、322b、および322eを要求する(例えば、コールバック−>リード(内部状態、CC3、datachunk322aoffset、64K、バッファー)の第1のコール、コールバック−>リード(内部状態、CC3、datachunk322boffset、64K、バッファー)の第2のコール、およびコールバック−>リード(内部状態、CC7、datachunk322coffset、64K、バッファー)の第3のコール)。ステップ1912において、ファイル・リコンストラクター2004は、3つのコールに応答して、復元アプリケーション2006からデーター・チャンク322a、322b、および322eを受け取る。ステップ1914において、ファイル・リコンストラクター2004は、ストリーム・マップ・チャンクのストリーム・マップにしたがって、最適化ファイルを無最適化形態に組み立て直し、組み立てたファイルを格納する(例えば、組み立て直されたファイルをディスク上の最適化ストリーム構造2038に書き込む)。
【0157】
[0172] 尚、フローチャート1900の例では、データー・ストリームを組み立て直す(ステップ1914において)ことを注記しておく。他の実施形態では、データー・ストリームを組み立て直す代わりに、最適化ストリーム構造2038をストレージ(主またはバックアップ)に最適化ファイルとして維持してもよく、データー・ストリームに含まれると判定されたデーター・チャンクを、チャンク・ストア(バックアップ・ストレージ2034におけるのではない)に格納してもよい。このように、最適化データー・ストリームは最適化された状態であり続け、チャンク・ストアにおけるデーター・チャンクを参照する。このような実施形態では、ストリーム・マップ・チャンク(ステップ1906において受け取られた)および1つ以上のデーター・チャンク(ステップ1912において受け取られた)をチャンク・ストアに格納する。
【0158】
[0173] 更に先に説明したように、チャンクは、断片化解消およびコンパクションのような、種々の機能のために、コンテナ内部で移動させられる場合がある。したがって、チャンクのこのような移動を追跡するリダイレクション・テーブルを維持するとよい。一実施形態では、ファイル・リコンストラクター2004は、リダイレクション・テーブルにアクセスして、コンテナにおいて調節されたオフセットから引き出されたチャンクを有するようにコールを調節するように構成することもできる。例えば、
図21は、一実施形態による、再分配テーブル(redistribution table)900にアクセスするコールバック・モジュールのブロック図を示す。コールバック・モジュール2008は、バックアップ・ストレージにおけるコンテナ毎(例えば、
図20の例におけるストリーム・コンテナ302ならびにチャンク・コンテナ304aおよび304bの各々)に、再分配テーブル900にアクセスすることができる。このように、コールバック・モジュール2008は、オフセットを古いままにしておくのではなく、コンテナにおいてオフセットを調節し、これに対してコールを生成することができる。
【0159】
[0174] 例えば、一実施形態では、コールバック・モジュール2008は、
図22に示すフローチャート2200を実行することができる。
図22は、一実施形態例にしたがって、チャンクに対して更新されたオフセットを得るために再分配テーブル(redistribution table)にアクセスするプロセスを表すフローチャート2200を示す。フローチャート2200について、以下のように説明する。
【0160】
[0175] フローチャート2200のステップ2202において、データー・チャンクに対するデーター・チャンク識別子に含まれる第1オフセットを第2オフセットにマッピングするために、リダイレクション・テーブルにアクセスする。例えば、コールバック・モジュール2008は、ストリーム・コンテナの再分配テーブルにアクセスし、ここからストリーム・マップ・チャンクを引き出す(例えば、
図3のストリーム・コンテナ302におけるリダイレクション・テーブル308)。または、コールバック・モジュール2008は、チャンク・コンテナの再分配にアクセスし、ここから、データー・チャンクを引き出す(例えば、
図3のチャンク・コンテナ304における再分配テーブル320)。コールバック・モジュール2008は、再分配テーブルにはいかようにもアクセスすることができ、この再分配テーブルを引き出すためのコールを生成することによることを含む。たとえば、コールを生成し、復元アプリケーション2006に送信することができる。復元アプリケーション2006は、再分配テーブルを収容するコンテナのファイル名称、およびコンテナにおける再分配テーブルに対するオフセットを定める。復元アプリケーション2006は、再分配テーブルをバックアップ・ストレージ2034から引き出すことができ、そしてこの再分配テーブルをファイル・リコンストラクター2004に供給することができる。このように、コールバック・モジュール2008は、再分配テーブルにアクセスして、更新チャンク・オフセットを判定することができる。
【0161】
[0176] ステップ2204において、データー・チャンク識別子に基づいて、第2のコールを復元アプリケーションに対して生成する。この第2のコールは、データー・チャンク識別子に対応するデーター・チャンクを格納するストレージにおける第2チャンク・コンテナのファイル名称を指定し、更に第2チャンク・コンテナにおけるデーター・チャンクに対して第2のオフセットを指定する。例えば、データー・チャンクに対するコールに先立って、コールバック・モジュール2008はこのデーター・チャンクに対する再分配テーブルにアクセスし、このデーター・チャンクに対して更新された第2のオフセットを判定することができる(再分配テーブルにおいて新たなオフセットがある場合)。コールバック・モジュール2008は、復元アプリケーション2006へのコールにおいて、この更新オフセット値を用いて、データー・チャンクを引き出すことができる。このコールは、バックアップ・ストレージ2034におけるチャンク・コンテナ304のファイル名称を指定することができ、そして再分配テーブルから得られる更新オフセット値を指定することができる。復元アプリケーション2006は、このコールを受け、指示されたチャンク・コンテナおよび更新オフセットからデーター・チャンクを引き出し、引き出したデーター・チャンクを応答においてファイル・リコンストラクター2004に供給することができる。
【0162】
[0177] 尚、フローチャート2200の例では、データー・チャンク・オフセットを第1オフセットから第2オフセットにマッピングするために、チャンク・コンテナの再分配テーブルにアクセスすることを注記しておく。代わりに、ストリーム・マップ・チャンクを第1オフセットから第2オフセットにマッピングするためにストリーム・コンテナの再分配テーブルにアクセスするように、フローチャート2200を修正してもよい。一実施形態では、コンテナのリダイレクション・テーブルは、チャンクに対するコールを生成するのに先立って、コールバック・モジュール2008によって予め引き出すこともできる。
【0163】
[0178] 一実施形態では、バックアップ・ストレージ2304から引き出されるチャンクのサイズを、これらのチャンクを引き出す前に、判定する。例えば、一実施形態では、チャンク毎に、コールバック・モジュール2008によって復元アプリケーション2006に第1のコールを行って、引き出そうとするチャンクのサイズを判定することができ、コールバック・モジュール2008によって復元アプリケーション2006に第2のコールを行って、判定したサイズを有するチャンクをバックアップ・ストレージ2034から引き出すことができる。
【0164】
[0179] 例えば、一実施形態では、コールバック・モジュール2008は、バックアップ・ストレージ2034において当該チャンクを格納しているコンテナのファイル名称、そのコンテナにおけるチャンクに対するオフセット、およびそのチャンクのヘッダー・サイズ(そして、任意に、そのチャンクを出力するバッファー)を指定する第1コールを生成することができる。例えば、チャンク・ヘッダー・サイズは、コールバック・モジュール2008が知っている標準的なヘッダー・サイズにするとよい。第1のコールは、復元アプリケーション2006に送信され、この第1のコールによって指示されるように、バックアップ・ストレージ2034からチャンク・ヘッダーを引き出すことができる。復元モジュール2006は、チャンク・ヘッダー(例えば、ストリーム・マップ・チャンク・ヘッダーまたはデーター・チャンク・ヘッダー)を引き出すことができ、このチャンク・ヘッダーをコールバック・モジュール2008に第1の応答において供給することができる。チャンク・ヘッダーは、チャンクのサイズを指示することができる。例えば、ストリーム・マップ・チャンク・ヘッダーは、ストリーム・マップ・チャンクのサイズを指示することができ、データー・チャンク・ヘッダーはデーター・チャンクのサイズを指示することができる。次いで、コールバック・モジュール2008は、バックアップ・ストレージ2034内において当該チャンクを格納するコンテナのファイル名称、そのコンテナにおけるチャンクに対するオフセット、およびチャンク・ヘッダーから判定されたチャンクのサイズ(そして、任意に、そのチャンクを出力するバッファー)を指定する第2のコールを生成することができる。復元アプリケーション2006は、指定されたオフセットにおいて、そして指示されたサイズを有するこのチャンク(例えば、ストリーム・マップ・チャンクまたはデーター・チャンク)を引き出すことができる。復元アプリケーション2006は、引き出したチャンクをコールバック・モジュール2008に第2の応答において供給することができる。このように、コールバック・モジュール2008は復元アプリケーション2006を用いてチャンク・サイズを判定することができ、2つのコールを用いてチャンクを引き出すことができる。第1のコールは、チャンク・サイズを判定するために用いることができ、第2のコールは、この判定されたサイズを有するチャンクを引き出すために用いることができる。
【0165】
[0180] 一実施形態では、コールバック・モジュール2008は、ストリーム・マップ・チャンクにデーター・チャンク識別子が含まれている順序を含む、いずれの順序でもデーター・チャンクを引き出すためにコールを生成することができる。他の実施形態では、ファイル・リコンストラクター2004は、コールバック・モジュール2008がデーター・チャンクを一層効率的な順序で引き出すように、データー・チャンク識別子をソートする(sort)ように構成することができる。例えば、
図23は、一実施形態例によるファイル・リコンストラクター2004のブロック図を示す。
図23に示すように、ファイル・リコンストラクター2004は、識別子ソーター2302を含む。識別子ソーター2302は、チャンクを復元する順序をソートすることができる。例えば、一実施形態では、識別子ソーター2302は、
図24に示すフローチャート2400を実行することができる。
図24は、一実施形態例にしたがってデーター・チャンク復元順序をソートするプロセスを表すフローチャートを示す。フローチャート2400について、以下のように説明する。
【0166】
[0181] フローチャート2400のステップ2402において、第1ソート・キーとして決定されたチャンク・コンテナと、第2キーとしてのチャンク・オフセットとに基づいて、複数のデーター・チャンク識別子をソートする。一実施形態では、識別子ソーター2302は、対応するデーター・チャンクを一層効率的に引き出すことを可能にするように、1つ以上のソート・キーにしたがって、ストリーム・マップ・チャンクに含まれるデーター・チャンク識別子をソートすることができる。例えば、データー・チャンク識別子は、第1ソートキーとしてコンテナ・ファイルに基づいて、そして第2ソート・キーとしてこのコンテナ・ファイル内部にあるチャンクに基づいてソートすることができる。他の実施形態では、データー・チャンク識別子は、追加のおよび/または代わりの判断基準あるいはキーを用いてソートすることもできる。
【0167】
[0182] ステップ2404において、ステップ2402によって定められた順序で、複数のデーター・チャンクに対応して、複数の追加のコールを復元アプリケーションに対して生成する。例えば、フローチャート1900(
図19)のステップ1910の追加のコールを、ステップ2402の並び替えによって定められた順序で生成することができる。このように、バックアップ・ストレージ2034から一層効率的にデーター・チャンクを引き出すことができる。例えば、テープのような連続媒体にデーター・チャンクが格納されているシーケンスと一致する連続順序でデーター・チャンクを引き出すように、そして共通のバックアップ媒体(例えば、同じテープ、同じディスク等)に格納されているデーター・チャンクを、他のデーター・チャンクを復元する前に、順次復元するように、コールをソートすることができる。このような順序付けによって、バックアップ媒体の切り替え回数、およびバックアップ媒体内におけるシークの回数を減らすことができ、これは特にテープからの復元には望ましい。
【0168】
[0183] 復元アプリケーションが復元の順序に影響を及ぼすことができると、および/またはどのファイル範囲(file extents)を各コンテナ・ファイルから復元しようとしているのかについて予め通知を受けることができると、復元の実施形態の遂行(performance)を改善することができる。例えば、実施形態では、以下のコールバック関数の内1つ以上をファイル・リコンストラクターによって用いて、復元を改善することができる。
【0169】
[0184] 「ContainersRestoreOrder」は、全てのデーター・チャンク・コンテナのファイル名称を含むアレイを入力として受け取る復元順序コールバックである。ファイル名称は、ファイル再現に必要とされるコンテナ(少なくともファイル再現に必要なデーター・チャンクを格納するコンテナ)のファイル名称である。このコールバック関数の出力は、同じコンテナ・ファイル名称のリストを含むが、このリストがソートされている(例えば、並び替え直されている)アレイである。
【0170】
[0185] この復元順序コールバックを用いて、テープ・バックアップの場合、復元アプリケーションは、テープの順序に基づいて、バックアップ・テープおよびコンテナ・ファイルが格納されているテープ上のオフセットにしたがって、コンテナ・ファイル名称を並び替えることができる。このソート順序にしたがって復元プロセスを実行すると、テープ媒体の交換(例えば、ユーザーによる)およびテープ・シーク機能を削減する、または最小限に抑えることができる。テープ媒体の交換およびテープ・シークの回数を最小限に抑えることによって、テープ媒体の寿命が長くなり復元プロセスが高速化する。これらのコンテナ・ファイルを収容するテープが物理的にオフサイトに配置されており、そのテープをオフサイト現場から要求し輸送する必要がある場合、この能力は、データーの復元を完了するためにオフサイト現場から引き出す必要があるテープのリストを、復元アプリケーションが提供することを可能にする。この能力は、オフサイトからのテープ引き出しは何時間もまたは何日もかかる可能性があるのでデーター復元(data recovery)を著しく高速化することができ、媒体引き出しに伴うコストを削減することができる。
【0171】
[0186] 例えば、復元アプリケーションは、最初に、コンテナ・ファイルがどのバックアップ・テープに配置されているかに基づいて、コンテナ・ファイルを分類し、各テープ内において、コンテナ・ファイルをテープ上のそれらの位置(開始オフセット)に基づいてソートすることができる。次いで、ファイル・リコンストラクターは、バックアップ・アプリケーションによって指定されたコンテナの順序に基づいてデーター・チャンクを復元することができる。バックアップ・アプリケーションは、ソートされたリストにある最初のデーター・チャンク・コンテナ・ファイルに格納されているデーター・チャンクに対してリード・コールバック関数をコールし、次に、ソートされたリストにある2番目のデーター・チャンク・コンテナに格納されているデーター・チャンクに対してリード・コールバックをコールすることができ、以下同様に続けることができる。
【0172】
[0187] 復元を順序付けることから効果が得られないファイル・バックアップまたは他のバックアップ技法の場合、復元アプリケーションは、データー・チャンク・コンテナ・リストをソートすることを避け、コンテナの復元順序を任意のままにしておくことを選択してもよい。
【0173】
[0188] 「ContainerRestorePlan」は、1つのデーター・チャンク・コンテナ・ファイル名称と、データー・チャンクのオフセットおよびサイズのアレイとを入力として受け取るコンテナ復元計画コールバックである。このアレイは、その名前が付けられたコンテナに格納されておりファイルの再現に必要とされる全てのデーター・チャンクを含む。
【0174】
[0189] ファイル・リコンストラクターは、データー・チャンク・コンテナ毎に1回このコールバックをコールし、その後に、そのデーター・チャンク・コンテナに格納されているデーター・チャンクに対してリード・コールバックをコールする。ContainerRestorePlanコールバックは、復元アプリケーションによる使用のために、復元計画を作成する。復元アプリケーションは、このコールバックによって出力される復元計画を用いることができる。復元計画は、バックアップ媒体から読み出す必要があるデーター・チャンク・コンテナ・ファイルのファイル範囲を示す。復元アプリケーションは、バックアップ媒体からデーター・チャンクを読み出し、バッチ処理、キャッシュ処理、および先読みというような技法を利用するそれ自体の最適化のために、この復元計画を用いることができる。
【0175】
[0190] このコールバックを処理することは任意である。復元アプリケーションがバックアップ媒体からの読み取りを最適化することができない場合またはその必要がない場合、復元アプリケーションはこの計画を無視し、最適化せずにリード・コールバックを処理することができる。
【0176】
[0191] 「CreateChunksRestorePlan」は、構造のアレイを入力として受け取るデーター・チャンク復元計画コールバックである。このアレイにおける各構造は、ファイルを再現するために必要とされる1つのデーター・チャンクに対応する。各構造は、以下のメンバーを含むことができる。コンテナ・ファイル名称(どこにデーター・チャンクが格納されているかを示す)、コンテナ・ファイルにおけるチャンク・オフセット、およびチャンク・サイズ。このコールバックの出力は、同じ構造のアレイであるが、復元を実行すべき順序にソートされている。
【0177】
[0192] データー・チャンク復元計画コールバックは、復元順序コールバックおよびコンテナ復元計画コールバックの代わりである。データー・チャンク復元計画コールバックは、少なくとも2つの目的を果たす。第1に、このコールバックは、復元アプリケーションに、どのデーター・チャンクを復元すべきかを示す。コールバックへの入力に基づいて、復元アプリケーションは、どのバックアップ媒体が各チャンクを有するか判断することができ、そして対応する媒体上のどこに各チャンクが配置されているか判断することができる。バックアップ媒体からデーターを読み出すための同じ最適化技法を用いることもできる。第2に、コールバックの出力に基づいて、復元アプリケーションは、どの順序でチャンクを復元するか、ファイル・リコンストラクターに命令することができる。
【0178】
[0193] 例えば、テープ・バックアップの場合、特定のデーター・チャンク・コンテナ・ファイルが多数のテープ上に格納されている可能性がある。1つのファイルを再現するために、同じコンテナ・ファイル上に位置するが2つの異なるテープ上にバックアップされている2つのデーター・チャンクを必要とする場合もある。何故なら、コンテナ・ファイルがテープ間で分割されているからである。復元アプリケーションがチャンク・データーの粒度で復元順序を指令する機会を有する場合、復元アプリケーションはコンテナ・ファイルが多数のテープ間で分割されている場合であっても、データー・チャンクをテープ順に分類しソートすることができる。
【0179】
[0194] ファイル・リコンストラクターは、ファイルの復元プロセス毎に1回データー・チャンク復元計画コールバックをコールすることができる。ファイル・リコンストラクターは、どのデーター・チャンクが必要とされるか、そしてデーター・チャンク・コンテナ・ファイルのどこにそのデーター・チャンクが位置するか分かった時点で、コールバックをコールするのでもよい。ファイル・リコンストラクターは、このコールバックの出力を用いて、データー・チャンク復元の順序を規定することができる。ファイル・リコンストラクターは、出力構造リストによって指令されるデーター・チャンクの順序に基づいて、リード・コールバック関数をコールすることができる。
【0180】
[0195] データー・チャンク復元計画コールバックの処理は任意である。復元アプリケーションがバックアップ媒体からの読み取りを最適化し復元の順序を指令することができない場合、またはその必要がない場合、このコールバックを無視する、または実行しないことができる。次いで、ファイル・リコンストラクターは、先に説明したそれ自体のロジックを用いて、または何らかの任意の順序で、データー・チャンクを復元することができる。
【0181】
III.計算デバイスの実施形態例
[0196] データー重複解除モジュール104、維持モジュール106、データー・ストリームAPI110、チャンク維持API112、データー・アクセスAPI114、チャンク・ストア・インターフェース116、データー・ストリーム・パーザー402、データー・チャンク記憶マネージャー404、メタデーター生成器406、ストリーム・マップ生成器408、リハイドレーション・モジュール702、データー・ストリーム・アセンブラー1102、生成チェッカー1106、データー・チャンク・リトリバー1108、データー・バックアップ・モジュール1302、最適化ファイル・バックアップ・モジュール1306、リハイドレーション・バックアップ・モジュール1308、項目レベル・バックアップ・モジュール1310、データー・チャンク識別子バックアップ・モジュール1312、発見法モジュール1314、データー復元モジュール2002、ファイル・リコンストラクター2004、復元アプリケーション2006、コールバック・モジュール2008、および識別子ソーター2302は、ハードウェア、ソフトウェア、ファームウェア、またはそのいずれの組み合わせでも実現することができる。例えば、 データー重複解除モジュール104、維持モジュール106、データー・ストリームAPI110、チャンク維持API112、データー・アクセスAPI114、チャンク・ストア・インターフェース116、データー・ストリーム・パーザー402、データー・チャンク記憶マネージャー404、メタデーター生成器406、ストリーム・マップ生成器408、リハイドレーション・モジュール702、データー・ストリーム・アセンブラー1102、生成チェッカー1106、データー・チャンク・リトリバー1108、データー・バックアップ・モジュール1302、最適化ファイル・バックアップ・モジュール1306、リハイドレーション・バックアップ・モジュール1308、項目レベル・バックアップ・モジュール1310、データー・チャンク識別子バックアップ・モジュール1312、発見法モジュール1314、データー復元モジュール2002、ファイル・リコンストラクター2004、復元アプリケーション2006、コールバック・モジュール2008、および/または識別子ソーター2302は、1つ以上のプロセッサーにおいて実行するように構成されたコンピューター・プログラムとして実現することができる。あるいは、 データー重複解除モジュール104、維持モジュール106、データー・ストリームAPI110、チャンク維持API112、データー・アクセスAPI114、チャンク・ストア・インターフェース116、データー・ストリーム・パーザー402、データー・チャンク記憶マネージャー404、メタデーター生成器406、ストリーム・マップ生成器408、リハイドレーション・モジュール702、データー・ストリーム・アセンブラー1102、生成チェッカー1106、データー・チャンク・リトリバー1108、データー・バックアップ・モジュール1302、最適化ファイル・バックアップ・モジュール1306、リハイドレーション・バックアップ・モジュール1308、項目レベル・バックアップ・モジュール1310、データー・チャンク識別子バックアップ・モジュール1312、発見法モジュール1314、データー復元モジュール2002、ファイル・リコンストラクター2004、復元アプリケーション2006、コールバック・モジュール2008、および/または識別子ソーター2302は、ハードウェア・ロジック/電気回路として実現することもできる。
【0182】
[0197]
図25は、本発明の実施形態を実現することができるコンピューター2500の一実施態様例を示す。例えば、記憶システム102、および/またはそのいずれの部分も、コンピューター2500と同様であり、コンピューター2500の1つ以上の特徴および/または代わりの特徴を有する1つ以上のコンピューター・システムにおいて実現することができる。コンピューター2500は、従来のパーソナル・コンピューター、移動体コンピューター、またはワークステージョンの形態とした汎用計算デバイスとすることができ、例えば、コンピューター2500が特殊目的計算デバイスであってもよい。本明細書において提示するコンピューター2500の説明は、例示の目的に限って行われるのであり、限定することを意図するのではない。本発明の実施形態は、関連技術(1つまたは複数)の当業者には周知である、更に他のタイプのコンピューター・システムにおいても実現することができる。
【0183】
[0198]
図25に示すように、コンピューター2500は、演算装置2502、システム・メモリー2504、およびシステム・メモリー2504から演算装置2502までを含む種々のシステム・コンポーネントを結合するバス2506を含む。バス2506は、メモリー・バスまたはメモリー・コントローラー、周辺バス、加速グラフィクス・ポート、および種々のバス・アーキテクチャーの内いずれかを用いるプロセッサー・バスまたはローカル・バスを含む、様々なタイプのバス構造の内いずれかの1つ以上を表す。システム・メモリー2504は、リード・オンリ・メモリー(ROM)2508およびランダム・アクセス・メモリー(RAM)2510を含む。基本入力/出力システム2512(BIOS)はROM2508に格納されている。
【0184】
[0199] また、コンピューター2500は以下のドライブの内1つ以上も有する。ハード・ディスクから読み取るおよびハード・ディスクに書き込むためのハード・ディスク・ドライブ2514、リムーバブル磁気ディスク2518から読み取るまたはリムーバブル磁気ディスク2518に書き込むための磁気ディスク・ドライブ2516、ならびにCD ROM、DVD ROM、または他の光媒体のようなリムーバブル光ディスク2522から読み取るおよびリムーバブル光ディスク2522に書き込むための光ディスク・ドライブ2520。ハード・ディスク・ドライブ2514、磁気ディスク・ドライブ2516、および光ディスク・ドライブ2520は、それぞれ、ハード・ディスク・ドライブ・インターフェース2524、磁気ディスク・ドライブ・インターフェース2526、および光ドライブ・インターフェース2528によって、バス2506に接続されている。これらのドライブおよびこれらに付随するコンピューター読み取り可能媒体は、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、およびコンピューターのためのその他のデーターの不揮発性記憶を行う。ハード・ディスク、リムーバブル磁気ディスク、およびリムーバブル光ディスクについて説明したが、フラッシュ・メモリー・カード、ディジタル・ビデオ・ディスク、ランダム・アクセス・メモリー(RAM)、リード・オンリ・メモリー(ROM)等のような、他のタイプのコンピューター読み取り可能記憶媒体も、データーを格納するために用いることができる。
【0185】
[0200] ハード・ディスク、磁気ディスク、光ディスク、ROM、またはRAM上には多数のプログラム・モジュールを格納することができる。これらのプログラムは、オペレーティング・システム2530、1つ以上のアプリケーション・プログラム2532、その他のプログラム・モジュール2534、およびプログラム・データー2536を含む。アプリケーション・プログラム2532またはプログラム・モジュール2534は、例えば、データー重複解除モジュール104、維持モジュール106、データー・ストリームAPI110、チャンク維持API112、データー・アクセスAPI114、チャンク・ストア・インターフェース116、データー・ストリーム・パーザー402、データー・チャンク記憶マネージャー404、メタデーター生成器406、ストリーム・マップ生成器408、リハイドレーション・モジュール702、データー・ストリーム・アセンブラー1102、生成チェッカー1106、データー・チャンク・リトリバー1108、データー・バックアップ・モジュール1302、最適化ファイル・バックアップ・モジュール1306、リハイドレーション・バックアップ・モジュール1308、項目レベル・バックアップ・モジュール1310、データー・チャンク識別子バックアップ・モジュール1312、発見法モジュール1314、データー復元モジュール2002、ファイル・リコンストラクター2004、復元アプリケーション2006、コールバック・モジュール2008、識別子ソーター2302、フローチャート500、フローチャート1000、フローチャート1200、フローチャート1400、フローチャート1500、フローチャート1600、フローチャート1700、フローチャート1800、フローチャート1900、フローチャート2200、フローチャート2400(フローチャート500、1000、1200、1400、1500、1600、1700、1800、1900、2200、および2400のいずれのステップも含む)、および/または本明細書において説明した更に他の実施形態を実現するためのコンピューター・プログラム・ロジックを含むことができる。
【0186】
[0201] ユーザーは、キーボード2538およびポインティング・デバイス2540のような入力デバイスを通じて、コマンドおよび情報をコンピューター2500に入力することができる。他の入力デバイス(図示せず)には、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星ディッシュ、スキャナー等が含まれる。これらおよびその他の入力デバイスは、多くの場合、バス2506に結合されているシリアル・ポート・インターフェース2542を介して演算装置2502に接続されているが、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス(USB)のような他のインターフェースによって接続してもよい。
【0187】
[0202] ディスプレイ・デバイス2544も、ビデオ・アダプター2546のような、インターフェースを介してバス2506に接続されている。モニターに加えて、コンピューター2500は、スピーカーおよびプリンターのような、他の周辺出力デバイス(図示せず)も含むことができる。
【0188】
[0203] コンピューター2500は、アダプターまたはネットワーク・インターフェース2550、モデム2552、あるいはネットワークを通じて通信を確立するその他の手段を介してネットワーク2548(例えば、インターネット)に接続されている。モデム2552は、内蔵型でも外付け型でもよいが、シリアル・ポート・インターフェース2542を介してバス2506に接続されている。
【0189】
[0204] 本明細書において用いる場合、「コンピューター・プログラム媒体」、「コンピューター読み取り可能媒体」、および「コンピューター読み取り可能記憶媒体」という用語は、一般に、ハード・ディスク・ドライブ2514に付随するハード・ディスク、リムーバブル磁気ディスク2518、リムーバブル光ディスク2522、更には、フラッシュ・メモリー・カード、ディジタル・ビデオ・ディスク、ランダム・アクセス・メモリー(RAM)、リード・オンリ・メモリー(ROM)等のような媒体を指す。このようなコンピューター読み取り可能記憶媒体は、通信媒体と区別され、通信媒体とは重複しない。通信媒体は、通例、搬送波のような変調データー信号内に、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、またはその他のデーターを具体化する。「変調データー信号」という用語は、信号内に情報をエンコードするように、その特性の1つ以上が設定または変更された信号を意味する。一例として、そして限定ではなく、通信媒体は、音響、RF、赤外線、およびその他のワイヤレス媒体というような、ワイヤレス媒体を含む。また、実施形態はこのような通信媒体も対象とする。
【0190】
[0205] 先に注記したように、コンピューター・プログラムおよびモジュール(アプリケーション・プログラム2532および他のプログラム・モジュール2534を含む)は、ハード・ディスク、磁気ディスク、光ディスク、ROM、またはRAMに格納することができる。このようなコンピューター・プログラムは、ネットワーク・インターフェース2550またはシリアル・ポート・インターフェース2542を介して受信することもできる。このようなコンピューター・プログラムは、アプリケーションによって実行またはロードされると、コンピューター2500が、本明細書において論じた本発明の実施形態の特徴を実現することを可能にする。したがって、このようなコンピューター・プログラムは、コンピューター2500のコントローラーを表す。
【0191】
[0206] また、本発明は、いずれかのコンピューター使用可能媒体上に格納されているソフトウェアを備えているコンピューター・プログラム生産物も対象とする。このようなソフトウェアは、1つ以上のデーター処理デバイスにおいて実行すると、データー処理デバイス(1つまたは複数)に、本明細書で記載したように動作させる。本発明の実施形態は、現在知られているまたは今後知られることになる、いずれのコンピューター使用可能媒体またはコンピューター読み取り可能記憶でも採用する。コンピューター読み取り可能媒体の例には、RAM、フラッシュ・ストレージ(例えば、フラッシュ・メモリー)、ソリッド・ステート・ドライブ(SSD)、ハード・ドライブ、フロッピ・ディスク、CD ROM、DVD ROM、ジップ・ディスク、テープ、磁気記憶デバイス、光記憶デバイス、MEM、ナノテクノロジーに基づく記憶デバイス等のような記憶デバイスを含むが、これらに限定されるのではない。
【0192】
VI.結論
[0207] 以上、本発明の種々の実施形態について説明したが、これらは一例として紹介したに過ぎず、限定ではないことは言うまでもない。関連技術(1つまたは複数)の当業者には、添付する特許請求の範囲に定められる本発明の主旨および範囲から逸脱することなく、形態および詳細において種々の変更も可能であることは理解されよう。したがって、本発明の広さ(breadth)および範囲は、以上で説明した実施形態例のいずれによっても限定されはせず、以下の特許請求の範囲およびその均等物のみにしたがって定義されることとする。