(57)【要約】  本発明の一実施形態は、コンテンツ・ユニットを時刻ベースのディレクトリ構造に記憶するコンテンツを用いてアドレス可能なコンピュータ・システムで単一インスタンス記憶機能を提供することを対象とする。もう１つの実施形態は、時刻ベースのディレクトリ構造内で、コンテンツ・アドレスにタイムスタンプを含まないコンテンツ・ユニットへのアクセスの管理を対象とする。もう１つの実施形態は、複製の時刻に基づくコンピュータに記憶された複製されたコンテンツ・ユニットへのアクセスを対象とする。もう１つの実施形態は、指定された時間範囲中に記憶されたコンテンツ・ユニットがディレクトリ構造内に記憶されているかどうかを示すのに使用する、時刻ベース・ディレクトリ構造内のビットマップの使用を対象とする。
2008537233.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータでコンテンツ・ユニットの記憶装置を管理する方法であって、前記方法はコンピュータによって実行され、
（Ａ）該コンピュータでコンテンツ・ユニットを記憶する要求を受け取る動作と、
（Ｂ）該要求に応答して第１識別子を該コンテンツ・ユニットに関連付ける動作と、
（Ｃ）該コンテンツ・ユニットのコピーが該コンピュータによって既に記憶されているかどうかを判定する動作であって、該コンテンツ・ユニットの該コピーが該第１識別子と異なる第２識別子に関連する動作と、
（Ｄ）該コンテンツ・ユニットが該コンピュータに既に記憶されていると判定される時に、該要求に応答して該コンテンツ・ユニットの追加コピーを記憶するのを見送る動作と
を備える方法。
【請求項２】
前記第１識別子は前記コンテンツ・ユニットのコンテンツから完全に導出可能ではない、請求項１に記載の方法。
【請求項３】
前記第１識別子は前記コンテンツ・ユニットの記憶の時刻に関連する時刻を示すタイムスタンプを含む、請求項１に記載の方法。
【請求項４】
前記第１識別子は前記コンテンツ・ユニットのコンテンツに少なくとも部分的に基づいて計算されるハッシュ値を含み、前記コンピュータはコンテンツ・ユニットをファイル・システム内に記憶し、該ファイル・システムが複数のディレクトリを有し、該複数のディレクトリの各々は少なくとも１つのハッシュ値に対応し、前記動作（Ｂ）はさらに、
該複数のディレクトリのうちで前記第１識別子の該ハッシュ値に対応する少なくとも１つのディレクトリを選択する動作と、
前記コンテンツ・ユニットの前記コピーに関連するファイルが該ディレクトリに記憶されているかどうかを判定する動作と
を含む、請求項１に記載の方法。
【請求項５】
前記コンテンツ・ユニットの前記コピーに関連する前記ファイルは前記コンテンツ・ユニットの前記コピーを含むファイルのファイル・システム位置を示すポインタ・ファイルである、請求項４に記載の方法。
【請求項６】
前記第２識別子は前記コンテンツ・ユニットの前記コピーの記憶の時刻に関連する時刻を示すタイムスタンプを含み、前記ファイル・システムが複数のディレクトリを含み、該複数のディレクトリの各々が時間期間に対応し、前記コンテンツ・ユニットの前記コピーは該複数のディレクトリのうちで前記第２識別子の該タイムスタンプ内で示される該時刻に対応するディレクトリに記憶される、請求項５に記載の方法。
【請求項７】
前記ポインタ・ファイルは前記複数のディレクトリのうちで前記コンテンツ・ユニットの前記コピーが記憶されている前記ディレクトリを示す、請求項６に記載の方法。
【請求項８】
前記コンピュータは複数のディレクトリを有するファイル・システムにコンテンツ・ユニットを記憶し、該複数のディレクトリの各々が時間期間に対応し、前記動作（Ｄ）がさらに、
該複数のディレクトリから前記タイムスタンプ内で示される前記時刻に対応する少なくとも１つのディレクトリを選択する動作と、
該選択されたディレクトリに前記コンテンツ・ユニットに関連するファイルを記憶する動作と
を含む、請求項３に記載の方法。
【請求項９】
前記ファイルは前記複数のディレクトリのうちで前記コンテンツ・ユニットの前記コピーが記憶されている一つのディレクトリを示すポインタ・ファイルである、請求項８に記載の方法。
【請求項１０】
（Ｅ）前記コンテンツ・ユニットがまだ前記コンピュータに記憶されていないと判定される時に、前記コンテンツ・ユニットを前記コンピュータに記憶する動作
をさらに含む、請求項１に記載の方法。
【請求項１１】
コンピュータ・システム上で実行される時に、該コンピュータ・システム内のコンピュータへのコンテンツ・ユニットの記憶を管理する方法を実行する命令が符号化された少なくとも１つのコンピュータ可読媒体であって、該方法は該コンピュータによって実行され、
（Ａ）該コンピュータで該コンテンツ・ユニットを記憶する要求を受け取る動作と、
（Ｂ）該要求に応答して、第１識別子を該コンテンツ・ユニットに関連付ける動作と、
（Ｃ）該コンテンツ・ユニットのコピーが該コンピュータによって既に記憶されているかどうかを判定する動作であって、該コンテンツ・ユニットの該コピーが該第１識別子と異なる第２識別子に関連する、動作と、
（Ｄ）該コンテンツ・ユニットが該コンピュータに既に記憶されていると判定される時に、該要求に応答して該コンテンツ・ユニットの追加コピーを記憶するのを見送る動作と
を備える、少なくとも１つのコンピュータ可読媒体。
【請求項１２】
前記第１識別子は前記コンテンツ・ユニットのコンテンツから完全に導出可能ではない、請求項１１に記載の少なくとも１つのコンピュータ可読媒体。
【請求項１３】
前記第１識別子は前記コンテンツ・ユニットの記憶の時刻に関連する時刻を示すタイムスタンプを含む、請求項１１に記載の少なくとも１つのコンピュータ可読媒体。
【請求項１４】
前記第１識別子は前記コンテンツ・ユニットのコンテンツに少なくとも部分的に基づいて計算されるハッシュ値を含み、前記コンピュータがコンテンツ・ユニットをファイル・システム内に記憶し、該ファイル・システムが複数のディレクトリを有し、該複数のディレクトリの各々は少なくとも１つのハッシュ値に対応し、前記動作（Ｂ）はさらに、
該複数のディレクトリのうちで前記第１識別子の該ハッシュ値に対応する少なくとも１つのディレクトリを選択する動作と、
前記コンテンツ・ユニットの前記コピーに関連するファイルが該ディレクトリに記憶されているかどうかを判定する動作と
を含む、請求項１１に記載の少なくとも１つのコンピュータ可読媒体。
【請求項１５】
前記コンテンツ・ユニットの前記コピーに関連する前記ファイルは前記コンテンツ・ユニットの前記コピーを含むファイルのファイル・システム位置を示すポインタ・ファイルである、請求項１４に記載の少なくとも１つのコンピュータ可読媒体。
【請求項１６】
前記第２識別子は前記コンテンツ・ユニットの前記コピーの記憶の時刻に関連する時刻を示すタイムスタンプを含み、前記ファイル・システムは複数のディレクトリを含み、該複数のディレクトリの各々が時間期間に対応し、前記コンテンツ・ユニットの前記コピーは該複数のディレクトリのうちで前記第２識別子の該タイムスタンプ内で示される該時刻に対応するディレクトリに記憶される、請求項１５に記載の少なくとも１つのコンピュータ可読媒体。
【請求項１７】
前記ポインタ・ファイルは前記複数のディレクトリのうちで前記コンテンツ・ユニットの前記コピーが記憶されている前記ディレクトリを示す、請求項１６に記載の少なくとも１つのコンピュータ可読媒体。
【請求項１８】
前記コンピュータは複数のディレクトリを有するファイル・システムにコンテンツ・ユニットを記憶し、該複数のディレクトリの各々が時間期間に対応し、前記動作（Ｄ）がさらに、
該複数のディレクトリから前記タイムスタンプ内で示される前記時刻に対応する少なくとも１つのディレクトリを選択する動作と、
該選択されたディレクトリに前記コンテンツ・ユニットに関連するファイルを記憶する動作と
を含む、請求項１３に記載の少なくとも１つのコンピュータ可読媒体。
【請求項１９】
前記ファイルは前記複数のディレクトリのうちで前記コンテンツ・ユニットの前記コピーが記憶されているディレクトリを示すポインタ・ファイルである、請求項１８に記載の少なくとも１つのコンピュータ可読媒体。
【請求項２０】
（Ｅ）前記コンテンツ・ユニットはまだ前記コンピュータに記憶されていないと判定される時に、前記コンテンツ・ユニットを前記コンピュータに記憶する動作
をさらに含む、請求項１１に記載の少なくとも１つのコンピュータ可読媒体。
【請求項２１】
コンピュータ・システム内の少なくとも１つのコンピュータであって、少なくとも１つの記憶装置と、
該記憶装置に接続され、
（Ａ）コンテンツ・ユニットを記憶する要求を受け取る動作、
（Ｂ）該要求に応答して第１識別子を該コンテンツ・ユニットに関連付ける動作、
（Ｃ）該コンテンツ・ユニットのコピーがコンピュータによって既に記憶されているかどうかを判定する動作であって、該コンテンツ・ユニットの該コピーが該第１識別子と異なる第２識別子に関連する動作、
（Ｄ）該コンテンツ・ユニットが該コンピュータに既に記憶されていると判定される時に、該要求に応答して該コンテンツ・ユニットの追加コピーを記憶するのを見送る動作
を実行する少なくとも１つのコントローラと
を備える、コンピュータ・システム内の少なくとも１つのコンピュータ。
【請求項２２】
前記第１識別子は前記コンテンツ・ユニットのコンテンツから完全に導出可能ではない、請求項２１に記載の少なくとも１つのコンピュータ。
【請求項２３】
前記第１識別子は前記コンテンツ・ユニットの記憶の時刻に関連する時刻を示すタイムスタンプを含む、請求項２１に記載の少なくとも１つのコンピュータ。
【請求項２４】
前記第１識別子は前記コンテンツ・ユニットのコンテンツに少なくとも部分的に基づいて計算されるハッシュ値を含み、前記コンピュータはコンテンツ・ユニットをファイル・システム内に記憶し、該ファイル・システムが複数のディレクトリを有し、該複数のディレクトリの各々が少なくとも１つのハッシュ値に対応し、前記少なくとも１つのコントローラは、
該複数のディレクトリのうちで前記第１識別子の該ハッシュ値に対応する少なくとも１つのディレクトリを選択し、
前記コンテンツ・ユニットの前記コピーに関連するファイルが該ディレクトリに記憶されているかどうかを判定する
請求項２１に記載の少なくとも１つのコンピュータ。
【請求項２５】
前記コンテンツ・ユニットの前記コピーに関連する前記ファイルは前記コンテンツ・ユニットの前記コピーを含むファイルのファイル・システム位置を示すポインタ・ファイルである、請求項２４に記載の少なくとも１つのコンピュータ。
【請求項２６】
前記第２識別子は前記コンテンツ・ユニットの前記コピーの記憶の時刻に関連する時刻を示すタイムスタンプを含み、前記ファイル・システムは複数のディレクトリを含み、該複数のディレクトリの各々が時間期間に対応し、前記コンテンツ・ユニットの前記コピーが該複数のディレクトリのうちで前記第２識別子の該タイムスタンプ内で示される該時刻に対応するディレクトリに記憶される、請求項２５に記載の少なくとも１つのコンピュータ。
【請求項２７】
前記ポインタ・ファイルは前記複数のディレクトリのうちで前記コンテンツ・ユニットの前記コピーが記憶されている前記ディレクトリを示す、請求項２６に記載の少なくとも１つのコンピュータ。
【請求項２８】
前記コンピュータは複数のディレクトリを含むファイル・システムにコンテンツ・ユニットを記憶し、該複数のディレクトリの各々は時間期間に対応し、前記少なくとも１つのコントローラは、
該複数のディレクトリから前記タイムスタンプ内で示される前記時刻に対応する少なくとも１つのディレクトリを選択し、
該選択されたディレクトリに前記コンテンツ・ユニットに関連するファイルを記憶する
請求項２３に記載の少なくとも１つのコンピュータ。
【請求項２９】
前記ファイルは前記複数のディレクトリのうちで前記コンテンツ・ユニットの前記コピーが記憶されているディレクトリを示すポインタ・ファイルである、請求項２８に記載の少なくとも１つのコンピュータ。
【請求項３０】
前記少なくとも１つのコントローラは前記コンテンツ・ユニットがまだ前記コンピュータに記憶されていないと判定される時に前記コンテンツ・ユニットを前記コンピュータに記憶する、請求項２１に記載の少なくとも１つのコンピュータ。
【請求項３１】
階層ツリーに整理された複数のディレクトリを有する階層ファイル・システム内の情報にアクセスする方法であって、少なくとも１つのルート・ディレクトリと各々は親ディレクトリを有する複数の非ルート・ディレクトリとを含み、該ツリー内の該複数のディレクトリのうちの少なくともいくつかはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、該方法は、
（Ａ）該ファイル・システム内の情報のユニットにアクセスする要求を受け取る動作であって、該要求が情報の該ユニットの識別子を含み、該識別子が情報の該ユニットの記憶の時刻に関連する時刻を識別しない動作と、
（Ｂ）該識別子の再現可能時刻値を生成するマッピング関数を使用して該識別子を時刻値にマッピングする動作と、
（Ｃ）該複数のディレクトリからディレクトリを選択する動作であって、該選択されたディレクトリは該識別子がマッピングされた該時刻値に対応する動作と
を備える方法。
【請求項３２】
（Ｄ）情報の前記ユニットを前記選択されたディレクトリに記憶する動作
をさらに含む、請求項３１に記載の方法。
【請求項３３】
（Ｅ）情報の前記ユニットを取り出す要求を受け取る動作であって、該要求は前記識別子を使用して情報の前記ユニットを識別する動作と、
（Ｆ）前記マッピング関数を使用して前記識別子を前記時刻値にマッピングする動作と、
（Ｇ）前記識別子がマッピングされた前記時刻値に対応する前記ディレクトリを選択する動作と
をさらに含む、請求項３２に記載の方法。
【請求項３４】
（Ｈ）前記選択されたディレクトリから情報の前記ユニットを取り出す動作
をさらに含む、請求項３３に記載の方法。
【請求項３５】
前記識別子は前記情報ユニットのコンテンツに少なくとも部分的に基づいて計算されるコンテンツ・アドレスである、請求項３１に記載の方法。
【請求項３６】
前記動作（Ｄ）はさらに、
情報の前記ユニットを前記ディレクトリ内にファイルとして記憶する動作
を含む、請求項３２に記載の方法。
【請求項３７】
前記識別子は前記ファイルのファイル名として使用される、請求項３６に記載の方法。
【請求項３８】
コンピュータ・システム上で実行される時に、階層ツリーに整理された複数のディレクトリを有する階層ファイル・システム内の情報にアクセスする方法を実行する命令が符号化された少なくとも１つのコンピュータ可読媒体であって、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを含み、該ツリー内の該複数のディレクトリのうちの少なくともいくつかはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、該方法は、
（Ａ）該ファイル・システム内の情報のユニットにアクセスする要求を受け取る動作であって、該要求が情報の該ユニットの識別子を含み、該識別子が情報の該ユニットの記憶の時刻に関連する時刻を識別しない動作と、
（Ｂ）該識別子の再現可能時刻値を生成するマッピング関数を使用して該識別子を時刻値にマッピングする動作と、
（Ｃ）該複数のディレクトリからディレクトリを選択する動作であって、該選択されたディレクトリは該識別子がマッピングされた該時刻値に対応する動作と
を備える、少なくとも１つのコンピュータ可読媒体。
【請求項３９】
前記方法は、
（Ｄ）情報の前記ユニットを前記選択されたディレクトリに記憶する動作
をさらに含む、請求項３８に記載の少なくとも１つのコンピュータ可読媒体。
【請求項４０】
前記方法が、
（Ｅ）情報の前記ユニットを取り出す要求を受け取る動作であって、該要求が前記識別子を使用して情報の前記ユニットを識別するものである動作と、
（Ｆ）前記マッピング関数を使用して前記識別子を前記時刻値にマッピングする動作と、
（Ｇ）前記識別子がマッピングされた前記時刻値に対応する前記ディレクトリを選択する動作と
をさらに含む、請求項３９に記載の少なくとも１つのコンピュータ可読媒体。
【請求項４１】
前記方法は、
（Ｈ）前記選択されたディレクトリから情報の前記ユニットを取り出す動作
をさらに含む、請求項４０に記載の少なくとも１つのコンピュータ可読媒体。
【請求項４２】
前記識別子が前記情報ユニットのコンテンツに少なくとも部分的に基づいて計算されるコンテンツ・アドレスである、請求項３８に記載の少なくとも１つのコンピュータ可読媒体。
【請求項４３】
前記動作（Ｄ）は、さらに、
情報の前記ユニットを前記ディレクトリ内にファイルとして記憶する動作
を含む、請求項３９に記載の少なくとも１つのコンピュータ可読媒体。
【請求項４４】
前記識別子は前記ファイルのファイル名として使用される、請求項４３に記載の少なくとも１つのコンピュータ可読媒体。
【請求項４５】
階層ツリーに整理された複数のディレクトリを有する階層ファイル・システムを維持する少なくとも１つのコンピュータであって、少なくとも１つのルート・ディレクトリと各々は親ディレクトリを有する複数の非ルート・ディレクトリとを含み、該ツリー内の該複数のディレクトリのうちの少なくともいくつかはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、該少なくとも１つのコンピュータは、
少なくとも１つの入力と、
該少なくとも１つの入力に接続され、
（Ａ）該ファイル・システム内の情報のユニットにアクセスする要求を該少なくとも１つの入力から受け取り、該要求が情報の該ユニットの識別子を含み、該識別子が情報の該ユニットの記憶の時刻に関連する時刻を識別せず、
（Ｂ）該識別子の再現可能時刻値を生成するマッピング関数を使用して該識別子を時刻値にマッピングし、
（Ｃ）該複数のディレクトリからディレクトリを選択し、該選択されたディレクトリは該識別子がマッピングされた該時刻値に対応する
少なくとも１つのコントローラと
を備える、少なくとも１つのコンピュータ。
【請求項４６】
前記少なくとも１つのコントローラは情報の前記ユニットを前記選択されたディレクトリに記憶する、請求項４５に記載の少なくとも１つのコンピュータ。
【請求項４７】
前記少なくとも１つのコントローラは、
情報の前記ユニットを取り出す要求を受け取り、該要求が前記識別子を使用して情報の前記ユニットを識別し、
前記マッピング関数を使用して前記識別子を前記時刻値にマッピングし、
前記識別子がマッピングされた前記時刻値に対応する前記ディレクトリを選択する
請求項４６に記載の少なくとも１つのコンピュータ。
【請求項４８】
前記少なくとも１つのコントローラは前記選択されたディレクトリから情報の前記ユニットを取り出す、請求項４７に記載の少なくとも１つのコンピュータ。
【請求項４９】
前記識別子は前記情報ユニットのコンテンツに少なくとも部分的に基づいて計算されるコンテンツ・アドレスである、請求項４５に記載の少なくとも１つのコンピュータ。
【請求項５０】
前記少なくとも１つのコントローラは情報の前記ユニットを前記ディレクトリ内にファイルとして記憶する、請求項４６に記載の少なくとも１つのコンピュータ。
【請求項５１】
前記識別子は前記ファイルのファイル名として使用される、請求項４５に記載の少なくとも１つのコンピュータ。
【請求項５２】
コンピュータ上の複製されたコンテンツ・ユニットにアクセスする方法であって、該複製されたコンテンツ・ユニットが第１時刻に複製されかつ該コンピュータ上の階層ファイル・システムに記憶され、該階層ファイル・システムは階層ツリーに整理される複数のディレクトリを有し、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリを備え、該ツリー内の該複数のディレクトリのうちの少なくとも１つはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、該方法は、
（Ａ）該コンピュータで、該第１時刻を含む指定された時間範囲中に該コンピュータに記憶されたコンテンツ・ユニットを識別する要求を受け取る動作と、
（Ｂ）該複製されたコンテンツ・ユニットが該指定された時間範囲中に記憶されたことを判定する動作と、
（Ｃ）該複製されたコンテンツ・ユニットが該指定された時間範囲中に該コンピュータに記憶されたことの表示を返す動作と
を備える、方法。
【請求項５３】
前記複数のディレクトリは前記コンピュータでの記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第１の複数のディレクトリと最初の記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第２の複数のディレクトリとを含み、前記複製されたコンテンツ・ユニットが該複数の第２ディレクトリのうちの１つに記憶され、前記複製されたコンテンツ・ユニットに対応する記憶時刻ファイルは該複数の第１ディレクトリのうちで前記第１時刻に対応するディレクトリに記憶され、前記動作（Ｂ）はさらに、
該複数の第１ディレクトリのうちで前記第１時刻に対応する該ディレクトリを判定する動作と、
該複数の第１ディレクトリのうちの該ディレクトリの該記憶時刻ファイルを特定する動作と
を含む、請求項５２に記載の方法。
【請求項５４】
前記記憶時刻ファイルは前記複数の第２ディレクトリのうちの前記１つで前記複製されたコンテンツ・ユニットを特定するのに使用可能な情報を含む、請求項５３に記載の方法。
【請求項５５】
前記複製されたコンテンツ・ユニットは前記複製されたコンテンツ・ユニットのコンテンツに少なくとも部分的に基づいて計算される識別子に関連する、請求項５３に記載の方法。
【請求項５６】
前記識別子は前記複製されたコンテンツ・ユニットの前記最初の記憶の時刻に関連する時刻を示すタイムスタンプを含む、請求項５３に記載の方法。
【請求項５７】
前記複数の第２ディレクトリのうちの前記１つは前記タイムスタンプによって示される前記時刻に対応する、請求項５６に記載の方法。
【請求項５８】
前記コンテンツ・ユニットの前記最初の記憶の時刻は前記第１時刻と異なる、請求項５６に記載の方法。
【請求項５９】
コンピュータ・システム上で実行される時に、コンピュータ上の複製されたコンテンツ・ユニットにアクセスする方法を実行する命令が符号化された少なくとも１つのコンピュータ可読媒体であって、該複製されたコンテンツ・ユニットは第１時刻に複製されかつ該コンピュータ上の階層ファイル・システムに記憶され、該階層ファイル・システムは階層ツリーに整理された複数のディレクトリを有し、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを含み、該ツリー内の該複数のディレクトリのうちの少なくとも１つはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、該方法は、
（Ａ）該コンピュータで該第１時刻を含む指定された時間範囲中に該コンピュータに記憶されたコンテンツ・ユニットを識別する要求を受け取る動作と、
（Ｂ）該複製されたコンテンツ・ユニットが該指定された時間範囲中に記憶されたことを判定する動作と、
（Ｃ）該複製されたコンテンツ・ユニットが該指定された時間範囲中に該コンピュータに記憶されたことの表示を返す動作と
を備える、少なくとも１つのコンピュータ可読媒体。
【請求項６０】
前記複数のディレクトリは前記コンピュータでの記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第１の複数のディレクトリと最初の記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第２の複数のディレクトリとを含み、前記複製されたコンテンツ・ユニットは該複数の第２ディレクトリのうちの１つに記憶され、前記複製されたコンテンツ・ユニットに対応する記憶時刻ファイルは該複数の第１ディレクトリのうちで前記第１時刻に対応するディレクトリに記憶され、前記動作（Ｂ）はさらに、
該複数の第１ディレクトリのうちで前記第１時刻に対応する該ディレクトリを判定する動作と、
該複数の第１ディレクトリのうちの該ディレクトリの該記憶時刻ファイルを特定する動作と
を含む、請求項５９に記載の少なくとも１つのコンピュータ可読媒体。
【請求項６１】
前記記憶時刻ファイルは前記複数の第２ディレクトリのうちの前記１つで前記複製されたコンテンツ・ユニットを特定するのに使用可能な情報を含む、請求項６０に記載の少なくとも１つのコンピュータ可読媒体。
【請求項６２】
前記複製されたコンテンツ・ユニットは前記複製されたコンテンツ・ユニットのコンテンツに少なくとも部分的に基づいて計算される識別子に関連する、請求項６０に記載の少なくとも１つのコンピュータ可読媒体。
【請求項６３】
前記識別子は前記複製されたコンテンツ・ユニットの前記最初の記憶の時刻に関連する時刻を示すタイムスタンプを含む、請求項６０に記載の少なくとも１つのコンピュータ可読媒体。
【請求項６４】
前記複数の第２ディレクトリのうちの前記１つは前記タイムスタンプによって示される前記時刻に対応する、請求項６３に記載の少なくとも１つのコンピュータ可読媒体。
【請求項６５】
前記コンテンツ・ユニットの前記最初の記憶の時刻は前記第１時刻と異なる、請求項６３に記載の少なくとも１つのコンピュータ可読媒体。
【請求項６６】
複製されたコンテンツ・ユニットをそこに記憶された少なくとも１つのコンピュータであって、該複製されたコンテンツ・ユニットは第１時刻に複製されかつ該コンピュータ上の階層ファイル・システムに記憶され、該階層ファイル・システムは階層ツリーに整理された複数のディレクトリを有し、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを含み、該ツリー内の該複数のディレクトリのうちの少なくとも１つはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、該少なくとも１つのコンピュータは、
少なくとも１つの入力と、
該少なくとも１つの入力に接続され、
（Ａ）該少なくとも１つの入力を介して該第１時刻を含む指定された時間範囲中に該コンピュータに記憶されたコンテンツ・ユニットを識別する要求を受け取り、
（Ｂ）該複製されたコンテンツ・ユニットが該指定された時間範囲中に記憶されたことを判定し、
（Ｃ）該複製されたコンテンツ・ユニットが該指定された時間範囲中に該コンピュータに記憶されたことの表示を返す
少なくとも１つのコントローラと
を備える、少なくとも１つのコンピュータ。
【請求項６７】
前記複数のディレクトリは前記コンピュータでの記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第１の複数のディレクトリと最初の記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第２の複数のディレクトリとを含み、前記複製されたコンテンツ・ユニットは該複数の第２ディレクトリのうちの１つに記憶され、前記複製されたコンテンツ・ユニットに対応する記憶時刻ファイルは該複数の第１ディレクトリのうちで前記第１時刻に対応するディレクトリに記憶され、前記少なくとも１つのコントローラは、
該複数の第１ディレクトリのうちで前記第１時刻に対応する該ディレクトリを判定する動作、
該複数の第１ディレクトリのうちの該ディレクトリの該記憶時刻ファイルを特定する動作
を実行する請求項６６に記載の少なくとも１つのコンピュータ。
【請求項６８】
前記記憶時刻ファイルは前記複数の第２ディレクトリのうちの前記１つで前記複製されたコンテンツ・ユニットを特定するのに使用可能な情報を含む、請求項６７に記載の少なくとも１つのコンピュータ。
【請求項６９】
前記複製されたコンテンツ・ユニットは前記複製されたコンテンツ・ユニットのコンテンツに少なくとも部分的に基づいて計算される識別子に関連する、請求項６７に記載の少なくとも１つのコンピュータ。
【請求項７０】
前記識別子は前記複製されたコンテンツ・ユニットの前記最初の記憶の時刻に関連する時刻を示すタイムスタンプを含む、請求項６７に記載の少なくとも１つのコンピュータ。
【請求項７１】
前記複数の第２ディレクトリのうちの前記１つは前記タイムスタンプによって示される前記時刻に対応する、請求項７０に記載の少なくとも１つのコンピュータ。
【請求項７２】
前記コンテンツ・ユニットの前記最初の記憶の時刻は前記第１時刻と異なる、請求項７０に記載の少なくとも１つのコンピュータ。
【請求項７３】
コンピュータ上でコンテンツ・ユニットを複製する方法であって、該コンピュータは階層ツリーに整理された複数のディレクトリを有する階層ファイル・システムを有し、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを含み、該ツリー内の該複数のディレクトリのうちの少なくともいくつかはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、該方法は、
（Ａ）該コンピュータで該コンピュータにコンテンツ・ユニットを複製する要求を受け取る動作であって、該要求は第１時刻に受け取られる動作と、
（Ｂ）該コンピュータの該階層ファイル・システム内で、該第１時刻に関連する時刻に対応しないディレクトリに該複製されたコンテンツ・ユニットを記憶する動作と、
（Ｃ）該コンピュータ上で該第１時刻の表示を記憶する動作と
を備える方法。
【請求項７４】
前記複数のディレクトリは前記コンピュータでの記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第１の複数のディレクトリと最初の記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第２の複数のディレクトリと含み、前記動作（Ｂ）はさらに、
（Ｂ１）前記複製されたコンテンツ・ユニットを該第２の複数のディレクトリのうちの１つに記憶する動作
を含む、請求項７３に記載の方法。
【請求項７５】
前記複製されたコンテンツ・ユニットは前記複製されたコンテンツ・ユニットのコンテンツに少なくとも部分的に基づいて計算される識別子に関連する、請求項７４に記載の方法。
【請求項７６】
前記識別子は前記複製されたコンテンツ・ユニットの最初の記憶の時刻に関連する時刻を示すタイムスタンプを含む、請求項７５に記載の方法。
【請求項７７】
前記第２の複数のディレクトリのうちで前記複製されたコンテンツ・ユニットを記憶する前記１つは前記タイムスタンプで示される前記時刻に関連する時刻に対応する、請求項７６に記載の方法。
【請求項７８】
前記動作（Ｃ）はさらに、
（Ｃ１）前記第１の複数のディレクトリのうちで前記第１時刻に対応する１つに記憶時刻ファイルを記憶する動作であって、該記憶時刻ファイルは前記第２の複数のディレクトリ内で前記複製されたコンテンツ・ユニットを特定するのに使用可能な情報を含む動作
を含む、請求項７４に記載の方法。
【請求項７９】
コンピュータ・システム上で実行される時に、該コンピュータ・システム内のコンピュータでコンテンツ・ユニットを複製する方法を実行する命令が符号化された少なくとも１つのコンピュータ可読媒体であって、該コンピュータは階層ツリーに整理された複数のディレクトリを有する階層ファイル・システムを有し、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを含み、該ツリー内の該複数のディレクトリのうちの少なくともいくつかはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、該方法は、
（Ａ）該コンピュータで、該コンピュータにコンテンツ・ユニットを複製する要求を受け取る動作であって、該要求が第１時刻に受け取られる動作と、
（Ｂ）該コンピュータの該階層ファイル・システム内で該第１時刻に関連する時刻に対応しないディレクトリに該複製されたコンテンツ・ユニットを記憶する動作と、
（Ｃ）該コンピュータ上で該第１時刻の表示を記憶する動作と
を備える、少なくとも１つのコンピュータ可読媒体。
【請求項８０】
前記複数のディレクトリは前記コンピュータでの記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第１の複数のディレクトリと最初の記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第２の複数のディレクトリとを含み、前記動作（Ｂ）はさらに、
（Ｂ１）前記複製されたコンテンツ・ユニットを該第２の複数のディレクトリのうちの１つに記憶する動作
を含む、請求項７９に記載の少なくとも１つのコンピュータ可読媒体。
【請求項８１】
前記複製されたコンテンツ・ユニットは前記複製されたコンテンツ・ユニットのコンテンツに少なくとも部分的に基づいて計算される識別子に関連する、請求項８０に記載の少なくとも１つのコンピュータ可読媒体。
【請求項８２】
前記識別子は前記複製されたコンテンツ・ユニットの最初の記憶の時刻に関連する時刻を示すタイムスタンプを含む、請求項８１に記載の少なくとも１つのコンピュータ可読媒体。
【請求項８３】
前記第２の複数のディレクトリのうちで前記複製されたコンテンツ・ユニットを記憶する前記１つは前記タイムスタンプで示される前記時刻に関連する時刻に対応する、請求項８２に記載の少なくとも１つのコンピュータ可読媒体。
【請求項８４】
前記動作（Ｃ）はさらに、
（Ｃ１）前記第１の複数のディレクトリのうちで前記第１時刻に対応する１つに記憶時刻ファイルを記憶する動作であって、該記憶時刻ファイルが前記第２の複数のディレクトリ内で前記複製されたコンテンツ・ユニットを特定するのに使用可能な情報を含む動作
を含む、請求項８０に記載の少なくとも１つのコンピュータ可読媒体。
【請求項８５】
複製されたコンテンツ・ユニットを記憶する少なくとも１つのコンピュータであって、該少なくとも１つのコンピュータは階層ツリーに整理された複数のディレクトリを有する階層ファイル・システムを有し、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを備え、該ツリー内の該複数のディレクトリのうちの少なくともいくつかはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、該少なくとも１つのコンピュータは、
少なくとも１つの入力と、
該少なくとも１つの入力に接続され、
（Ａ）該少なくとも１つの入力を介して該コンピュータにコンテンツ・ユニットを複製する要求を第１時刻に受け取り、
（Ｂ）該少なくとも１つのコンピュータの該階層ファイル・システム内で該第１時刻に関連する時刻に対応しないディレクトリに該複製されたコンテンツ・ユニットを記憶し、
（Ｃ）該少なくとも１つのコンピュータ上で該第１時刻の表示を記憶する
少なくとも１つのコントローラと
を備える、少なくとも１つのコンピュータ。
【請求項８６】
前記複数のディレクトリは前記コンピュータでの記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第１の複数のディレクトリと最初の記憶の時刻に基づいてコンテンツ・ユニットを特定するのに使用される第２の複数のディレクトリとを含み、前記少なくとも１つのコントローラは前記複製されたコンテンツ・ユニットを該第２の複数のディレクトリのうちの１つに記憶する、請求項８５に記載の少なくとも１つのコンピュータ。
【請求項８７】
前記複製されたコンテンツ・ユニットは前記複製されたコンテンツ・ユニットのコンテンツに少なくとも部分的に基づいて計算される識別子に関連する、請求項８６に記載の少なくとも１つのコンピュータ。
【請求項８８】
前記識別子は前記複製されたコンテンツ・ユニットの最初の記憶の時刻に関連する時刻を示すタイムスタンプを含む、請求項８７に記載の少なくとも１つのコンピュータ。
【請求項８９】
前記第２の複数のディレクトリのうちで前記複製されたコンテンツ・ユニットを記憶する１つは前記タイムスタンプで示される前記時刻に関連する時刻に対応する、請求項８８に記載の少なくとも１つのコンピュータ。
【請求項９０】
前記少なくとも１つのコントローラは前記第１の複数のディレクトリのうちで前記第１時刻に対応する１つに記憶時刻ファイルを記憶し、該記憶時刻ファイルが前記第２の複数のディレクトリ内で前記複製されたコンテンツ・ユニットを特定するのに使用可能な情報を含む、請求項８６に記載の少なくとも１つのコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンテンツの記憶装置の管理に関する。
【背景技術】
【０００２】
データがコンピュータに記憶される時に、そのデータの記憶、取出し、および管理に役立つファイル・システム内で、そのデータは整理される。ファイル・システムは通常、複数のディレクトリまたはフォルダを含み、このディレクトリまたはフォルダは、データを整理するファイル・キャビネットと考えることができる。本明細書で使用される時に、ディレクトリおよびフォルダという用語は同義である。データはファイルと称する単位に整理され、各ファイルはディレクトリのうちの１つに置かれる。いくつかのファイル・システムでは、ディレクトリを階層ツリーに整理し、ディレクトリは１つまたは複数のサブディレクトリを含む。
【０００３】
図１に示されているように、ファイル・システムはデータの整理に役立ち、コンピュータ・システムのユーザ（たとえば、人間のオペレータまたはアプリケーション・プログラム）がデータを特定することおよび取り出すことに役立つ。図１に示されているように、ファイル・システム１０１は３つのサブディレクトリ（すなわち、文書ディレクトリ１０５、ゲーム・ディレクトリ１０７、および写真ディレクトリ１０９）を有するルート・ディレクトリ１０３を含む。文書ディレクトリ１０５は３つの追加のサブディレクトリ（すなわち、法律文書ディレクトリ１１１、個人文書ディレクトリ１１３、および学校文書ディレクトリ１１５）を含み、写真ディレクトリ１０９は１つの追加サブディレクトリ（すなわち、家族休暇ディレクトリ１１７）を含む。したがって、たとえば、以前にこのファイル・システムに記憶された法律文書を探しているユーザは法律文書ディレクトリ１１１を調べ、この法律文書ディレクトリ１１１には２つのファイルが記憶されている。同様に、学校文書を探しているユーザは学校文書ディレクトリ１１５を調べる。ディレクトリは、たとえば、特定のアプリケーション・プログラムによって作成されたファイルを一緒にグループ化するためにも使用される。すなわち、たとえば、ディジタル・カメラまたはスキャナ・デバイスから画像データを受け取り、その画像データから画像ファイルを作成するアプリケーション・プログラムは、これらのファイルを写真ディレクトリ１０９に記憶する。したがって、そのアプリケーション・プログラムが後に画像ファイルを取り出す時、または別のユーザがそのアプリケーション・プログラムによって作成された画像ファイルにアクセスすることを望む時に、これらの画像ファイルを（すなわち、写真ディレクトリ１０９を調べることによって）簡単に特定することができる。
【０００４】
データ・ファイルがファイル・システム内で整理される方法は、これらのファイル内のデータがコンピュータの記憶装置に記憶される方法とほとんど関係ない。すなわち、たとえば、ファイル１１９およびファイル１２１はファイル・システム内の同一ディレクトリに記憶されているが、ファイル１１９内のデータは、必ずしもファイル１２１内のデータが記憶されるディスク上のブロックと連続したディスク上のブロックには記憶されない。実際に、ファイル１１９内のデータがディスク上でファイル１２１内のデータの近くのどこにも記憶されない場合がある。さらに、単一のファイル内のデータのすべてが連続したブロックに記憶される必要はない。たとえば、ファイル１１９のデータの一部が特定のディスクのブロック０〜４に記憶され、そのファイル内のデータの残りはそのディスクのブロック１５〜１８に記憶される。
【０００５】
ユーザがファイルへのアクセスを要求する時に、ファイル・システムはそのファイルの論理位置をディスク上の１つまたは複数の物理位置にマッピングし、これらの物理位置に記憶されたデータをディスクから取り出し、そのデータをユーザに返す。
【発明の開示】
【課題を解決するための手段】
【０００６】
一実施形態は、コンピュータによって実行される（Ａ）コンピュータでコンテンツ・ユニットを記憶する要求を受け取る動作と、（Ｂ）要求に応答して、第１識別子をコンテンツ・ユニットに関連付ける動作と、（Ｃ）コンテンツ・ユニットのコピーがコンピュータによって既に記憶されているかどうかを判定する動作であって、コンテンツ・ユニットのコピーが第１識別子と異なる第２識別子に関連する動作と、（Ｄ）コンテンツ・ユニットがコンピュータに既に記憶されていると判定される時に、要求に応答してコンテンツ・ユニットの追加コピーを記憶することを見送る動作とを備える、コンピュータでコンテンツ・ユニットの記憶を管理する方法を対象とする。もう１つの実施形態は、コンピュータ・システムで実行された時に、上で説明した方法を実行する命令を符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【０００７】
もう１つの実施形態は、少なくとも１つの記憶装置と、記憶装置に接続されて（Ａ）コンテンツ・ユニットを記憶する要求を受け取り、（Ｂ）要求に応答して、第１識別子をコンテンツ・ユニットに関連付け、（Ｃ）コンテンツ・ユニットのコピーがコンピュータによって既に記憶されているかどうかを判定し、コンテンツ・ユニットのコピーが第１識別子と異なる第２識別子に関連し、（Ｄ）コンテンツ・ユニットがコンピュータに既に記憶されていると判定される時に、要求に応答してコンテンツ・ユニットの追加コピーを記憶することを見送る少なくとも１つのコントローラとを備えるコンピュータ・システム内の少なくとも１つのコンピュータを対象とする。
【０００８】
もう１つの実施形態は、階層ツリーに整理された複数のディレクトリを有する階層ファイル・システム内の情報にアクセスする方法であって、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを含み、ツリー内の複数のディレクトリのうちの少なくともいくつかはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、方法は（Ａ）ファイル・システム内の情報のユニットにアクセスする要求を受け取る動作であって、要求が情報のユニットの識別子を含み、識別子が情報のユニットの記憶の時刻に関連する時刻を識別しない動作と、（Ｂ）識別子の再現可能時刻値を生成するマッピング関数を使用して識別子を時刻値にマッピングする動作と、（Ｃ）複数のディレクトリからディレクトリを選択する動作であって、選択されたディレクトリは識別子がマッピングされた時刻値に対応する動作とを備える方法を対象とする。もう１つの実施形態は、コンピュータ・システムで実行された時に、上で説明した方法を実行する命令が符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【０００９】
もう１つの実施形態は、階層ツリーに整理された複数のディレクトリを有して階層ファイル・システムを維持する少なくとも１つのコンピュータであって、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを含み、ツリー内の複数のディレクトリのうちの少なくともいくつかはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、少なくとも１つのコンピュータは少なくとも１つの入力と、少なくとも１つの入力に接続されて（Ａ）ファイル・システム内の情報のユニットにアクセスする要求を少なくとも１つの入力から受け取り、要求が情報のユニットの識別子を含み、識別子が情報のユニットの記憶の時刻に関連する時刻を識別せず、（Ｂ）識別子の再現可能な時刻値を生成するマッピング関数を使用して識別子を時刻値にマッピングし、（Ｃ）複数のディレクトリからディレクトリを選択し、選択されたディレクトリは識別子がマッピングされた時刻値に対応する少なくとも１つのコントローラとを備える少なくとも１つのコンピュータを対象とする。
【００１０】
もう１つの実施形態は、コンピュータ上の複製されたコンテンツ・ユニットにアクセスする方法であって、複製されたコンテンツ・ユニットが第１時刻に複製されてコンピュータ上の階層ファイル・システムに記憶され、階層ファイル・システムは階層ツリーに整理された複数のディレクトリを有し、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを含み、ツリー内の複数のディレクトリのうちの少なくとも１つがその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、方法は（Ａ）コンピュータで、第１時刻を含む指定された時間範囲中にコンピュータに記憶されたコンテンツ・ユニットを識別する要求を受け取る動作と、（Ｂ）複製されたコンテンツ・ユニットが指定された時間範囲中に記憶されたことを判定する動作と、（Ｃ）複製されたコンテンツ・ユニットが指定された時間範囲中にコンピュータに記憶されたことの表示を返す動作とを備える方法を対象とする。もう１つの実施形態は、コンピュータ・システムで実行された時に、上で説明した方法を実行する命令が符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【００１１】
もう１つの実施形態は、複製されたコンテンツ・ユニットをその上に記憶された少なくとも１つのコンピュータであって、複製されたコンテンツ・ユニットが、第１時刻に複製され、コンピュータ上の階層ファイル・システムに記憶され、階層ファイル・システムは階層ツリーに整理された複数のディレクトリを有し、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを含み、ツリー内の複数のディレクトリのうちの少なくとも１つが、その各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、少なくとも１つのコンピュータは少なくとも１つの入力と、少なくとも１つの入力に接続されて（Ａ）少なくとも１つの入力を介して、第１時刻を含む指定された時間範囲中にコンピュータに記憶されたコンテンツ・ユニットを識別する要求を受け取り、（Ｂ）複製されたコンテンツ・ユニットが指定された時間範囲中に記憶されたことを判定し、（Ｃ）複製されたコンテンツ・ユニットが指定された時間範囲中にコンピュータに記憶されたことの表示を返す少なくとも１つのコントローラと、を備える少なくとも１つのコンピュータを対象とする。
【００１２】
もう１つの実施形態は、コンピュータ上でコンテンツ・ユニットを複製する方法であって、コンピュータは階層ツリーに整理された複数のディレクトリを有する階層ファイル・システムを有し、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを含み、ツリー内の複数のディレクトリのうちの少なくともいくつかはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、方法は（Ａ）コンピュータで、コンピュータにコンテンツ・ユニットを複製する要求を受け取る動作であって、要求が第１時刻に受け取られる動作と、（Ｂ）コンピュータの階層ファイル・システム内で、第１時刻に関連する時刻に対応しないディレクトリに複製されたコンテンツ・ユニットを記憶する動作と、（Ｃ）コンピュータ上で第１時刻の表示を記憶する動作とを備える方法を対象とする。もう１つの実施形態は、コンピュータ・システムで実行された時に、上で説明した方法を実行する命令を符号化された少なくとも１つのコンピュータ可読媒体を対象とする。
【００１３】
もう１つの実施形態は、複製されたコンテンツ・ユニットを記憶する少なくとも１つのコンピュータであって、少なくとも１つのコンピュータは階層ツリーに整理された複数のディレクトリを有する階層ファイル・システムを有し、少なくとも１つのルート・ディレクトリと各々が親ディレクトリを有する複数の非ルート・ディレクトリとを含み、ツリー内の複数のディレクトリのうちの少なくともいくつかはその各々の親ディレクトリに対応する時間期間によって包含される時間期間に対応し、少なくとも１つのコンピュータは少なくとも１つの入力と、少なくとも１つの入力に接続されて（Ａ）少なくとも１つの入力を介してコンピュータにコンテンツ・ユニットを複製する要求を受け取り、要求が第１時刻に受け取られ、（Ｂ）少なくとも１つのコンピュータの階層ファイル・システム内で第１時刻に関連する時刻に対応しないディレクトリに複製されたコンテンツ・ユニットを記憶し、（Ｃ）少なくとも１つのコンピュータ上で第１時刻の表示を記憶する少なくとも１つのコントローラとを備える、少なくとも１つのコンピュータを対象とする。
【発明を実施するための最良の形態】
【００１４】
本発明の実施形態はコンピュータに記憶されたデータの管理に関する。データがコンピュータに記憶される時に、将来のアクセスのためにデータを特定するのに役立てるためにデータを整理することに関する複数の可能性がある。たとえば、データをデータベース内に記憶し、データベース照会を実行することによってデータの位置を特定することができる。もう１つの例として、データをファイル・システム内に記憶することがあげられる。下で説明する本発明の実施形態はデータを任意の適当な方法で論理的に記憶するので、データを論理的に記憶する特定の方法（たとえば、データベースまたはファイル・システム）に限定されない。
【００１５】
＜時刻ベースのディレクトリ＞
ファイル・システムを有してそこで記憶されたコンテンツのユニットを管理する一部のコンピュータは、記憶されたコンテンツ・ユニットにそれらがそのコンピュータに記憶された時刻に基づいてアクセスすることを可能にする機能を提供する。これに関して、そのファイル・システムを時刻に基づいて整理する。コンテンツのユニットをこのファイル・システム内のファイルとして記憶し、コンテンツ・ユニット（たとえば、ファイル）が記憶されるファイル・システム位置を、そのコンテンツ・ユニットがソース（たとえば、アプリケーション・プログラム）によって記憶された時刻に基づいて選択する。たとえば、２００４年７月３１日午前１１時０分に記憶されたコンテンツ・ユニットを、６つのレベル（階層順でＬ１〜Ｌ６）を有するディレクトリ構造に記憶し、ここで、ディレクトリＬ１はそのコンテンツ・ユニットが記憶された年を指定し、サブディレクトリＬ２は月を指定し、サブディレクトリＬ３は日を指定し、サブディレクトリＬ４は時を指定し、サブディレクトリＬ５は分を指定し、サブディレクトリＬ６は秒を指定する。コンテンツ・ユニットは最低レベル・ディレクトリまたは「リーフ」ディレクトリ（たとえば、Ｌ６にあるディレクトリ）に記憶する。したがって、たとえば、２００４年７月３１日午前１１時０分に記憶されたコンテンツ・ユニットを／２００４／０７／３１／１１／００／００というパスを有するＬ６ディレクトリに記憶し、ここで「２００４」は２００４年に対応するＬ１ディレクトリであり、「０７」は２００４年７月という月に対応する２００４ディレクトリのサブディレクトリであり、「０７」ディレクトリのサブディレクトリ「３１」は２００４年７月の３１番目の日に対応するＬ３ディレクトリであり、「３１」ディレクトリのサブディレクトリ「１１」は２００４年７月３１日の１２番目の時に対応するＬ４ディレクトリであり、「１１」ディレクトリのサブディレクトリ「００」は２００４年７月３１日の１２番目の時の１番目の分に対応するＬ５ディレクトリであり、「００」Ｌ５ディレクトリのサブディレクトリ「００」は２００４年７月３１日の１２番目の時の３１番目の分の最初の秒に対応するＬ６ディレクトリである。第２のコンテンツ・ユニットがアプリケーション・プログラムによって２００４年７月３１日午前１１時３０分に記憶される場合に、その第２のコンテンツ・ユニットをディレクトリ／２００４／０７／３１／１１／３０／００に記憶する。
【００１６】
コンテンツ・ユニットを記憶するディレクトリ構造を指定する際に時刻を使用する、下で説明する本発明の実施形態が、上で説明した特定の例の配置を有するディレクトリ構造と共に使用することに限定されないことを諒解されたい。その理由は、本発明の実施形態を、サブディレクトリ・レベルの境界を確立する時間の異なる単位（または異なる粒度）を使用するディレクトリ構造を用いるものを含む多数の方法のどれにおいても実施できるからである。
【００１７】
上の例では、階層ディレクトリ構造は６つのレベルを有し、時間粒度の最小単位（すなわち、階層内の最低レベル）はコンテンツ・ユニットが記憶された秒に対応した。しかし、上で述べたように、本明細書で説明する本発明の実施形態はこれに関して限定されない。その理由は、これらの実施形態を各レベルが時間の任意の適当な単位に対応する任意の適当な個数のレベルを有するディレクトリ構造と共に使用できるからである。たとえば、ディレクトリ構造に、時間粒度の最小単位が時である、４つのレベルだけを含めることができる。これに関して、（６レベルを有するディレクトリ構造と比較して）ディレクトリの総数を減らすし、各「リーフ」ディレクトリに記憶されるコンテンツ・ユニットの個数を増やす。これとは別に、階層内のレベルの個数を、たとえば粒度の最低レベル（すなわち、Ｌ７）がミリ秒に対応する、７つのレベルに増やすことができる。その結果、「リーフ」ディレクトリの個数を増やし、各「リーフ」ディレクトリに記憶されるコンテンツ・ユニットを減らす。
【００１８】
本発明者は各リーフ・ディレクトリに記憶されたコンテンツ・ユニットの個数がシステムの性能に影響する可能性があることに気づいた。上で説明したように、ファイル・システムは、ファイル・システム・ディレクトリ構造内の位置を物理ディスク位置（たとえば、ブロック）にマッピングする。ファイル・システムがこれを行うのに使用するマッピング情報が大きくなる場合があり、このマップ全体をメモリに格納することが不可能および／または実現不能である場合がある。したがって、このマップの諸部分がメモリ内でキャッシングされると同時に残りがディスクに記憶されたままになる場合がある。非常に多数のディレクトリと各ディレクトリに記憶された非常に少数のコンテンツ・ユニットとがある場合に、取り出されるコンテンツ・ユニットのファイル・システム位置はマップのうちでキャッシングされている部分に含まれる可能性がより低くなる。その結果、ファイル・システムがマップの関連部分をディスクから取り出さなければならず、性能の低下がもたらされる。その一方で、ディレクトリ構造内のディレクトリの個数が少なく、ディレクトリ内に多数のコンテンツ・ユニットがある場合には、適当なディレクトリ内で所望のコンテンツ・ユニットを特定するのに費やされる時間が増えて性能の低下がもたらされる。
【００１９】
この２つの競合する要因のバランスをとるディレクトリ構造を選択することが望ましい。階層構造内のレベルの最適個数は、たとえばディレクトリ構造内に記憶されるコンテンツ・ユニットの個数、ディレクトリ構造にまたがるコンテンツ・ユニットの分布、およびコンテンツ・ユニットがディレクトリ構造に記憶される頻度に依存する。したがって、一実施形態で、ディレクトリ階層内のレベルの個数は構成可能であり、システムの動作中に変更可能である。これは、レベルの個数を増やす場合に各リーフ・ディレクトリの追加サブディレクトリを作成し、コンテンツ・ユニットを適当な追加サブディレクトリに下に移動することによって達成することができる。レベルの個数を減らす場合にコンテンツ・ユニットをそれが記憶されているサブディレクトリの親ディレクトリに上に移動し、そのサブディレクトリを階層から除去することができる。
【００２０】
時刻ベースのファイル・システム・ディレクトリ構造内に記憶されたコンテンツ・ユニットには任意の適当な方法でアクセスすることができる。たとえば、時刻ベースのファイル・システム・ディレクトリ構造がコンテンツを用いてアドレス可能なコンピュータ（ｃｏｎｔｅｎｔ  ａｄｄｒｅｓｓａｂｌｅ  ｃｏｍｐｕｔｅｒ）上で実施される一実施形態で、コンテンツ・ユニットにコンテンツ・アドレスを使用してアクセスすることができる。コンテンツ・アドレスは少なくとも部分的にコンテンツ・ユニットのコンテンツに基づいて計算される、コンテンツ・ユニットの一意識別子である。たとえば、コンテンツ・ユニットのコンテンツをハッシュ化し、そのハッシュ値がコンテンツ・アドレスの一部を形成する。コンテンツを用いてアドレス可能なコンピュータおよびコンテンツを用いてアドレス可能なシステムの例は下の表１にリストされた本願の譲受人に譲渡された複数の特許出願に記載されており、これらの特許出願の各々が参照によって本願明細書に組み込まれる。
【００２１】
一実施形態で、コンテンツ・ユニットのコンテンツ・アドレスはそのコンテンツのハッシュに加えて情報を含む。本発明はこれに関して限定されないので、任意の適当な情報を含めることができる。一実施形態で、たとえばタイムスタンプがコンテンツ・アドレスの一部として含まれる。タイムスタンプはコンテンツ・ユニットがコンピュータに最初に記憶された時刻を反映する。たとえば、コンテンツ・ユニットを記憶する要求が受け取られる時に、そのコンテンツ・ユニットをハッシュ化してハッシュ値を生成し、タイムスタンプをそのコンテンツ・ユニットの記憶に関連する時刻に基づいて生成する。本発明はこれに関して限定されないので、タイムスタンプは、要求を送った実体によって（たとえば、その要求が送られた時刻に基づいて）記憶する実体によって（たとえば、要求が受け取られた時刻に基づいて）、または任意の他の適当な形で計算する。ハッシュ値およびタイムスタンプを組み合わせてコンテンツ・ユニットのコンテンツ・アドレスを形成する。本発明はこれに関して限定されないので、これを任意の適当な形で行うことができる。たとえばハッシュ値はコンテンツ・アドレス内でタイムスタンプに先行し、コンテンツ・アドレス内でタイムスタンプに続く、あるいはハッシュ値およびタイムスタンプを任意の適当な形で混合する。
【００２２】
コンテンツ・アドレスはタイムスタンプに加えてまたはその代わりに他の情報を含んでもよい。たとえばコンテンツ・アドレスは、保障一意識別子（ｇｕａｒａｎｔｅｅｄ  ｕｎｉｑｕｅ  ｉｄｅｎｔｉｆｉｅｒ、ＧＵＩＤ）を含んでもよく、このＧＵＩＤはコンテンツ・アドレスの一意性を保証するためにコンテンツ・アドレスに含めることができるビット列である。すなわち、たとえば、コンテンツ・ユニットをハッシュ化し、ハッシュ値を生成するのに使用されるハッシュ関数がハッシュ値の一意性を保証しない場合がある（すなわち、ハッシュ関数への２つの異なる入力が、同一の出力を作る場合がある）。２つの異なるコンテンツ・ユニットが同一のコンテンツ・アドレスを有する可能性がある状況を避けるために、ＧＵＩＤを含めることができる。
【００２３】
一実施形態で、コンテンツ・ユニットが、コンピュータ上の時刻ベースのディレクトリ内のファイルとして記憶される時に、そのコンテンツ・ユニットのコンテンツ・アドレス（またはコンテンツ・アドレスの一部）をそのファイルのファイル名として使用する。しかし、任意の適当なファイル名を使用することができるので、本発明はこれに関して限定されない。
【００２４】
時刻ベースのファイル・システム・ディレクトリ構造に記憶されたコンテンツ・ユニットを、たとえばそのコンテンツ・ユニットのコンテンツ・アドレスを使用して取り出す。たとえば、コンテンツ・アドレスのタイムスタンプ部分を使用すると、そのコンテンツ・ユニットがそのコンピュータに記憶された時刻を判定することができる。コンテンツ・ユニットはそのコンテンツ・ユニットの記憶の時刻に対応する時刻ベース・ディレクトリに記憶されるので、そのコンテンツ・ユニットが記憶されているディレクトリを、タイムスタンプから判定される。そのディレクトリにファイルとして記憶されたコンテンツ・ユニットのリストをそのディレクトリにアクセスすることによって判定し、要求されたコンテンツ・ユニットのコンテンツ・アドレスのハッシュ値をそのディレクトリに記憶されたコンテンツ・ユニットのコンテンツ・アドレスのハッシュ値と比較してハッシュ値が一致するコンテンツ・ユニットを選択することとによって正しいコンテンツ・ユニットがこのリストから選択される。
【００２５】
コンテンツ・ユニットのコンテンツ・アドレスがそのコンテンツ・ユニットを記憶するファイルのファイル名として使用される実施形態では、要求されたコンテンツ・ユニットのハッシュ値と比較するためにディレクトリ内の各コンテンツ・ユニットのハッシュ値を計算する必要がない。そうではなく、要求されたコンテンツ・ユニットのハッシュ値をディレクトリに記憶されたコンテンツ・ユニットのファイル名内のハッシュ値と比較する。
【００２６】
代替案では、コンテンツ・ユニットのファイル名は（たとえば、ハッシュ値だけを含むファイル名ではなく）そのコンテンツ・ユニットのハッシュ値およびそのコンテンツ・ユニットのタイムスタンプである。したがって、このコンテンツ・ユニットは要求されたコンテンツ・ユニットのハッシュおよびタイムスタンプをディレクトリ内のファイルのファイル名と比較することによって特定される。
【００２７】
＜単一インスタンス記憶＞
本発明者はいくつかの状況で、特定のコンテンツ・ユニットを１回だけ記憶することを可能にすることが望ましいことに気づいた。したがって、ユーザが、コンピュータに既に記憶されているコンテンツ・ユニットを記憶することを試みる場合に、そのコンピュータはそのコンテンツ・ユニットの記憶を回避し、その結果、同一のコンテンツ・ユニットの２つのコピーが記憶システムに記憶されなくなる。しかし、そのコンテンツ・ユニットの記憶を要求する実体各々から記憶システムはその記憶要求を受け入れて処理している。本発明はこれに関して限定されないので、これは、任意の適当な形で行うことができる。
【００２８】
参照によって本願明細書に組み込まれる下の表１にリストされた米国特許出願第０９／２３６，３６６号に記載の一実施形態では、コンテンツ・ユニットを記憶する要求が受け取られ、記憶されるコンテンツ・ユニットがコンテンツ・アドレスを割り当てられる時に、そのコンテンツ・アドレスのハッシュ値を、既に記憶されているコンテンツ・ユニットのコンテンツ・アドレスのハッシュ値と比較する。しかし、コンテンツ・ユニットがハッシュ値に加えて（たとえば、タイムスタンプおよび／またはＧＵＩＤのような）情報を有するコンテンツ・アドレスを割り当てられる実施形態では、コンテンツ・アドレスを比較することによってコンテンツ・ユニットが既に記憶システムに記憶されているかどうかを判定することが可能でない場合がある。その理由は、同一のコンテンツを有し、したがって同一のハッシュ値を有する２つのコンテンツ・ユニットがコンテンツ・アドレスを形成するためにハッシュ値に追加されるタイムスタンプおよび／またはＧＵＩＤが異なるので、異なるコンテンツ・アドレスを有する場合があるからである。さらに、コンテンツ・ユニットは時刻ベースのディレクトリ構造に記憶されるが、そのハッシュ値に基づいてインデックス化または整理されるのではない実施形態では、記憶要求で識別されるコンテンツ・ユニットのハッシュ値を記憶システムに記憶されたコンテンツ・ユニットのハッシュ値と比較することに時間がかかるために資源集中型の工程になる場合がある。そのような工程は一致が見つかるかすべてのハッシュ値を比較するまで、時刻ベースのディレクトリ構造に記憶されたすべてのコンテンツ・ユニットのハッシュ値を記憶されるコンテンツ・ユニットのハッシュ値と比較することを伴う。
【００２９】
一実施形態によれば、コンテンツ・ユニットの識別子がハッシュ値に加えて情報を含む状況で、単一インスタンス記憶を実行する（すなわち、既に記憶されたコンテンツ・ユニットの複製コピーの記憶を防ぐ）工程が提供される。コンピュータがそれに記憶されたコンテンツ・ユニットをミラーリングしてもよいことを諒解されたい。すなわち、コンピュータはそれに記憶されたコンテンツ・ユニットの追加コピーを作成することができ、その結果、そのコンテンツは最初のコピーが壊されるか破壊された場合であっても失われなくなる。単一インスタンス記憶機能の提供はコンピュータによるコンテンツ・ユニットのミラーリングを妨げることを意図されたものではない（し、実際に妨げない）。そうではなく、単一インスタンス記憶機能はコンテンツのユーザ（たとえば、人間のオペレータおよび／またはアプリケーション・プログラム）が同一コンテンツ・ユニットの複数のコピーを記憶しようとする試みに適用可能である。
【００３０】
上で述べた単一インスタンス記憶機能を任意の適当な方法で実施する。一実施形態で、図２に示された２つの別々の組の時刻ベースのディレクトリを含む時刻ベースのディレクトリ構造２００を使用する。たとえば、ルート・ディレクトリ２０１は２つのサブディレクトリすなわち、記憶サブディレクトリ２０３および単一インスタンス記憶（ＳＩＳ）サブディレクトリ２０５を有する。記憶サブディレクトリ２０３およびＳＩＳサブディレクトリ２０５の両方は時刻ベースのディレクトリ構造（たとえば、各々ディレクトリ構造２０７およびディレクトリ構造２０９）のルート・ディレクトリとして機能する。図を明瞭にするために、時刻ベースのディレクトリ構造２００のディレクトリ構造全体が図２で展開されてはいないことを理解されたい。すなわち、この時刻ベースのディレクトリ構造に含まれるサブディレクトリの多くが図示されていない。さらに、図２の時刻ベースのディレクトリ構造は３レベルの階層（年、月、および日）を有する。これが例としてのみ提供されることを諒解されたい。その理由は、この階層に時間の任意の適当な単位（たとえば、年、月、週、日、時、分、秒など）に対応する任意の適当な個数のレベルを含めることができるからである。さらに、ディレクトリ構造２０７およびディレクトリ構造２０９がその階層内に同一個数のレベルを有する必要はなく、これらのレベルが、時間の同一の単位に対応する必要はない。
【００３１】
コンテンツ・ユニットがコンピュータに記憶され、コンテンツ・アドレス（タイムスタンプを含む）がそのコンテンツ・ユニットに割り当てられる時に、そのコンテンツ・ユニットを記憶するファイルを時刻ベースのディレクトリ構造２０７（すなわち、階層内で記憶サブディレクトリ２０３の下の時刻ベースのディレクトリ構造）に記憶することができる。したがって、このコンテンツ・ユニットはその記憶の時刻（たとえば、タイムスタンプで示される時刻）に対応するディレクトリ構造２０７内のディレクトリに置かれる。
【００３２】
さらに、本発明の一実施形態によれば、同一のハッシュ値が必ず同一の時刻値にマッピングされるようにコンテンツ・アドレスのハッシュ値を再現可能な方法で時刻値にマッピングする工程にコンテンツ・ユニットのコンテンツ・アドレスを入力する。本発明はこれに関して限定されないので、任意の適当な工程またはマッピングが使用される。たとえば、一実施形態で時刻値を生成するのに使用される工程を複数の異なるハッシュ値が同一の時刻値を作るような、多対１マッピングである。コンテンツ・アドレスのハッシュ値から生成される時刻値を使用して、時刻ベースのディレクトリ構造２０９（すなわち、ＳＩＳサブディレクトリ２０５の下の時刻ベースのディレクトリ構造）内の対応するディレクトリを選択する。コンテンツ・ユニットのコンテンツ・アドレスを有するファイルをこの選択されたディレクトリに記憶して、そのコンテンツ・ユニットがディレクトリ構造２０７に記憶されることを示す。
【００３３】
一実施形態で、ディレクトリ構造２０９内の選択されたディレクトリに記憶されるファイルはコンテンツ・ユニットに関する追加情報を含む。本発明はこれに関して限定されないので、任意の適当な情報を含めることができる。たとえば、コンテンツ・ユニットを記憶したファイルが置かれたディレクトリ構造２０７内のディレクトリ（すなわち、パス）を示す情報が含まれる。そのような情報は同一コンテンツを記憶する後続要求が受け取られた後に元のコンテンツへのポインタを作成する時に有用である。そのようなポインタの作成を下でより詳細に示す。さらに、下でより詳細に述べるように、コンテンツ・ユニットの削除に役立つ参照カウントを含めることができる。
【００３４】
一実施形態で、ディレクトリ構造２０９は単一インスタンス記憶（ＳＩＳ）機能を提供することに役立つ。コンテンツ・ユニットを記憶する要求に応答してＳＩＳ機能を実施する工程を図３に示す。本発明はこれに関して限定されないので、図３に示された工程は使用できる工程の１例にすぎず、任意の適当な工程を使用することができる。
【００３５】
まず、コンテンツ・ユニットを記憶する要求を受け取る（動作３０１）。動作３０３でそのコンテンツ・ユニットが既にディレクトリ構造２００に記憶されているかどうかを判定する。これは、たとえば記憶を要求されたコンテンツ・ユニットのコンテンツ・アドレスを判定し、そのコンテンツ・アドレスのハッシュ値を時刻値にマッピングし（上で説明したように）、その時刻値に対応するディレクトリ構造２０９内のディレクトリを特定する（それが存在する場合に）ことによって行われる。そのようなディレクトリが存在しない場合、または記憶されるコンテンツ・ユニットのハッシュ値を含むファイル名がない場合には、そのコンテンツ・ユニットは以前にそのコンピュータに記憶されていないと判定される。したがって、この工程は動作３０９に継続することができ、ここで、記憶要求が処理され、コンテンツ・ユニットをコンピュータに記憶することができる。
【００３６】
時刻値に対応するディレクトリが特定された時にそのファイル名にハッシュ値を含むファイルが見つかった場合、この工程は動作３０５に継続することができ、ここでコンテンツ・ユニットの記憶を回避する（すなわち、そのコンテンツ・ユニットがコンピュータに既に記憶されているので）。さらに、ファイルに参照カウントが含まれる本発明の実施形態では、動作３０７でその参照カウントを下でより詳細に述べる理由から１だけ加算することができる。
【００３７】
上で説明した例示的ディレクトリ構造２００では、ディレクトリ構造２０９に記憶されたファイルがそれに対応するコンテンツ・ユニットのコンテンツ・アドレスのハッシュ部分（またはコンテンツ・アドレスの任意の他の適当な部分）をファイル名として使用する。しかし、任意の適当なファイル名を使用することができるので、本発明はこれに関して限定されない。コンテンツ・アドレスが、コンテンツ・アドレスのファイル名に使用されない時には、コンテンツ・アドレスを、ファイルのコンテンツに記憶し、その結果ディレクトリ構造２０９内のコンテンツ・ユニットが、そのコンテンツ・アドレスによって識別される。
【００３８】
さらに、図２の例では、ディレクトリ構造２０９が時刻ベースのディレクトリ構造である。いくつかの状況で、特にディレクトリ構造２０７が時刻ベースのディレクトリ構造である時に、ディレクトリ構造２０９を時刻ベースのディレクトリ構造として整理することが有用である。コンテンツ・ユニットを時刻ベースのディレクトリ構造に記憶し、コンテンツ・ユニットを時刻ベースのディレクトリ構造から取り出す（すなわち、ディレクトリ構造２０７での記憶および取出しの）機構（たとえば、ソフトウェア・コード）が既に存在するので、同一の時刻ベースの技法を使用してディレクトリ構造２０９に情報を記憶することが便利である。しかし、任意の適当なディレクトリ構造をＳＩＳディレクトリ構造に使用することができるので、本発明はこれに関して限定されない。たとえば、ディレクトリ構造２０９はコンテンツ・アドレス内のハッシュ値に基づいて整理されるディレクトリ構造である。たとえば、図４に示されているように、ＳＩＳディレクトリ２０５がコンテンツ・アドレスのハッシュ値の最初の文字に対応する複数のサブディレクトリを有する。これらのディレクトリの各々がコンテンツ・アドレスのハッシュ値の第２の文字に対応する複数のサブディレクトリを有してもよい。これらのサブディレクトリが階層内の所望のレベル数に基づいてコンテンツ・アドレスの追加の文字に対応する追加のサブディレクトリを有してもよい。あるコンテンツ・ユニットに対応するファイルはそのコンテンツ・ユニットのコンテンツ・アドレスに基づいてこれらのディレクトリのうちの１つに記憶される。したがって、たとえば、コンテンツ・アドレスが最初の２文字「ＡＡ」から始まる場合に、これをディレクトリ４０１に記憶する。同様に、コンテンツ・アドレスが最初の２文字「ＡＺ」から始まる場合に、これをディレクトリ４０３に記憶する。これに関して、コンテンツ・アドレスのハッシュ値を時刻値にマッピングする必要がない。その理由は、ディレクトリ構造２０９内のディレクトリをたとえばコンテンツ・アドレスのハッシュ値など他の方法を使用して選択するからである。
【００３９】
図４の例のディレクトリ構造４００では、ディレクトリがＡＳＣＩＩ文字に基づいて命名された。コンテンツ・アドレスがビット列であり、コンテンツ・アドレスのハッシュ値をＡＳＣＩＩ文字列として表すことができることを諒解されたい。しかし、ビット列の他の表現も可能であり、本発明はＡＳＣＩＩ文字列としてのハッシュ値の表現に限定されない。これに関して、ディレクトリ構造を他の方法でコンテンツ・アドレスのハッシュ値に基づいて構成することができるので、ディレクトリの名前および構成がＡＳＣＩＩベースである必要がないことを理解されたい。
【００４０】
本発明者はコンテンツ・ユニットを記憶する要求に応答して、そのコンテンツ・ユニットの記憶が回避される（すなわち、単一インスタンス記憶機能のゆえに）時であっても、そのコンテンツ・ユニットにコンテンツ・アドレスを割り当て、そのコンテンツ・ユニットの記憶を要求した実体が新しいコンテンツ・アドレスを使用してそのコンテンツ・ユニットの以前に記憶されたコピーにアクセスできるようにすることが望ましい場合があることに気づいた。
【００４１】
したがって、以前に記憶されたコンテンツ・ユニットに関する記憶要求が受け取られ、そのコンテンツ・ユニットのタイムスタンプが割り当てられ、そのコンテンツ・ユニットがディレクトリ構造内に既に記憶されていると判定される時に、ポインタ・ファイルをディレクトリ構造２０７内のタイムスタンプで示される記憶要求が受け取られた時刻に対応するディレクトリに記憶する。そのコンテンツ・ユニットのコンテンツ・アドレスをこのポインタ・ファイルのファイル名として使用する。このポインタ・ファイルはそのコンテンツ・ユニットのコンテンツを含む必要はなく、そのコンテンツ・ユニットの以前に記憶されたコピーを記憶するファイルが置かれているディレクトリの表示を含む（すなわち、「ポインタ」）。このファイル位置はディレクトリ構造２０９内のそのコンテンツ・ユニットに対応するファイルから判定される。
【００４２】
したがって、その識別子によってそのコンテンツ・ユニットを識別するそのコンテンツ・ユニットにアクセスする後続要求が受け取られる時に、このポインタ・ファイルをその識別子内のタイムスタンプに基づいて特定され、実際のコンテンツをこのポインタ・ファイル内のポインタを使用して特定して返す。
【００４３】
一実施形態では、ポインタ・ファイルのファイル名は１つまたは複数の追加文字（すなわち、コンテンツ・ユニットのコンテンツ・アドレスに加えて）を含めて、そのファイルが実際のコンテンツ自体ではなくコンテンツ・ユニットへのポインタを記憶することを示す。本発明はこれに関して限定されないので、任意の適当な１つまたは複数の文字を使用することができ、ファイル名内の任意の位置に置くことができる。
【００４４】
上で説明した例では、単一インスタンス記憶機能はコンテンツ・アドレスを使用してコンテンツ・ユニットを識別する、コンテンツを用いてアドレス可能なコンピュータ・システム上で実施される。しかし、単一インスタンス記憶に関する本発明の諸態様はコンテンツを用いてアドレス可能なコンピュータ・システムと共に使用することに限定されない。たとえば、ＳＩＳ機能をデータがコンテンツ・アドレスではなくディスク・ブロック・アドレス（物理的または論理的のいずれか）を使用して識別される、いわゆる「ブロックＩ／Ｏ」コンピュータ上で実行することができる。ＳＩＳ機能は任意の適当な方法でブロックＩ／Ｏコンピュータ上で実行される。たとえば、一実施形態で、「ブロックＩ／Ｏ」記憶システムがそれに記憶されるコンテンツ・ユニットのハッシュ値の記録を維持する。コンテンツを記憶する要求が受け取られる時にそのコンテンツのハッシュ値を計算し、記録内のハッシュ値と比較して、そのコンテンツがその記憶システムによって既に記憶されているかどうかを調べる。
【００４５】
＜ＳＩＳ機能を有するシステムでのコンテンツ・ユニットの削除＞
一実施形態で、２タイプのコンテンツ・ユニットすなわち、ブロブ（ｂｌｏｂ）およびコンテンツ記述ファイル（ＣＤＦ）がコンピュータに（および、その結果、ディレクトリ構造に）記憶される。ブロブは、たとえば患者のＸ線、会社の財務記録、または任意の他のタイプのデータなどのアプリケーション・データを含む。各ブロブは少なくとも１つのＣＤＦを関連付けられる。ＣＤＦは１つまたは複数のブロブおよび／またはＣＤＦへの参照のリストとして機能するコンテンツ・アドレスのリストを含み、メタデータとブロブまたは他のＣＤＦへの複数の参照とをも含む。ＣＤＦに含まれるメタデータはそのＣＤＦに関する情報ならびに／あるいはそのＣＤＦによって参照されるブロブおよび／または他のＣＤＦに関する情報とすることができる。本発明はこれに関して限定されないので、そのような情報は、たとえば各参照されるブロブに記憶されたデータの記述または任意の他の適当な情報を含む。ブロブおよびＣＤＦの使用は表１にリストされた特許出願でより詳細に説明されている。
【００４６】
一実施形態で、ディレクトリ構造はブロブおよびＣＤＦ用の別々のディレクトリを含むが、ブロブおよびＣＤＦを同一のディレクトリに記憶してもよいので、本発明はこれに関して限定されない。図５にブロブおよびＣＤＦが別々のサブディレクトリに記憶される時刻ベースのディレクトリ構造５００の例を示す。このディレクトリ構造内の時間の最小単位（図５の例では「日」）に対応する各サブディレクトリはブロブ用の１つ（ディレクトリ５０１）とＣＤＦ用の１つ（ディレクトリ５０３）という２つのサブディレクトリを有する。ブロブはブロブ・サブディレクトリに記憶され、ＣＤＦはＣＤＦサブディレクトリに記憶される。
【００４７】
ユーザはブロブを参照するＣＤＦのコンテンツ・アドレスを使用して、これらのブロブに記憶されたコンテンツにアクセスする。たとえば、ユーザがあるブロブに記憶されたコンテンツにアクセスすることを望む時に、そのユーザはそのブロブを参照するＣＤＦに要求を送ることができる。それに応答して、そのＣＤＦおよびそのＣＤＦによって参照されるすべてのブロブは記憶システムによって返される。同様に、ユーザがブロブに記憶されたデータを削除することを望む時に、そのユーザはＣＤＦの削除を要求する。ＣＤＦは削除されるが、そのＣＤＦによって参照されるブロブの削除はバックグラウンド・ガーベジ・コレクション工程によって処理される。ブロブの削除に関するガーベジ・コレクション工程の使用の例は、表１の特許出願により詳細に記載されている。たとえば、各ブロブを参照するＣＤＦの個数を追跡する、ブロブの参照カウントを維持する。本発明はこれに関して限定されないので、この参照カウントは任意の適当な形で維持される。たとえば、上で説明したように、参照カウントをブロブに対応するディレクトリ構造２０９内のファイルに記憶する。バックグラウンド・ガーベジ・コレクション工程は、たとえばブロブの参照カウントを周期的に検査し、参照カウントが０である場合にそのブロブを削除する。
【００４８】
したがって、ＣＤＦを削除する要求が受け取られた時に、そのＣＤＦに対応するファイルをディレクトリ構造２０７内で特定する。そのＣＤＦによって参照されるブロブおよび／または他のＣＤＦはそのＣＤＦのコンテンツ内の参照リストを調べることによって判定され、これらのブロブおよび／または他のＣＤＦの各々の参照カウントを（たとえば、ディレクトリ構造２０９内でブロブに対応するファイルを特定し、そこに記憶されたブロブの参照カウントを１だけ減算することによって）１だけ減算することができる。ＣＤＦの参照リスト内のコンテンツ・アドレスが実際のコンテンツを含むファイルではなくポインタ・ファイルに対応する場合には、そのポインタ・ファイルを削除する。あるファイルのファイル名を調べ、そのファイル名に上で述べたようにポインタ・ファイルを示す追加の１つまたは複数の文字が含まれるかどうかを判定することによって、そのファイルが実際のファイルではなくポインタ・ファイルであることを判定する。ＣＤＦを記憶するファイルもそのＣＤＦを削除する要求に応答して削除する。
【００４９】
いくつかの状況で、ポインタ・ファイルを削除してはならないことを諒解されたい。たとえば、複数のＣＤＦがポインタ・ファイルを参照し、削除要求に応答して、これらのＣＤＦのすべてが削除されるわけではない場合には、そのポインタ・ファイルを削除してはならない。一実施形態で、ポインタ・ファイルを参照するＣＤＦの個数を示す参照カウントをポインタ・ファイルについて維持する。ポインタ・ファイルを参照する１つのＣＤＦが削除される時に、参照カウントを１だけ減算することができる。参照カウントが０である時に、ポインタ・ファイルを削除することができる。
【００５０】
上で説明した例では、バックグラウンド・ガーベジ・コレクション工程がブロブを削除するのに使用された。しかし、ブロブの削除を任意の適当な形で実行することができるので、本発明はこれに関して限定されない。たとえば、ブロブの参照カウントが０まで１づつ減算される時に、対応するブロブを参照カウントの１だけの減算と同期して削除する。
【００５１】
＜リフレクション＞
本発明の一実施形態で、ＣＤＦまたはブロブが削除される時に、削除されるＣＤＦまたはブロブのリフレクションが作成される。リフレクションとは削除されるブロブまたはＣＤＦを置換するコンテンツ・ユニットであり、削除されるブロブまたはＣＤＦに関する情報を含む。たとえば、リフレクションは削除されるコンテンツ・ユニットのコンテンツの一部（またはすべて）、削除されるコンテンツ・ユニットを識別する情報、および／または監査情報を含む。監査情報はたとえば、コンテンツ・ユニットの削除の時刻、コンテンツ・ユニットを削除する要求を生成したユーザまたはアプリケーション・プログラム、コンテンツ・ユニットを削除する要求を生成したコンピュータのネットワーク・アドレス、削除されるコンテンツ・ユニットのサイズ、および／または任意の他の適当な情報を含む。リフレクションの使用の例は下の表１にリストされた米国特許出願第１１／０３４，６１３号、米国特許出願第１１／０３４，７３７号、および米国特許出願第１１／０３４，７３２号に記載されている。
【００５２】
一実施形態で、ディレクトリ構造はリフレクションを記憶する追加ディレクトリを含むが、リフレクションをブロブおよび／またはＣＤＦと同一のディレクトリに記憶することができるので、本発明はこれに関して限定されない。図６にリフレクション用の別々のディレクトリを含むディレクトリ構造６００の一部を示す。すなわち、このディレクトリ構造内で時間の最小単位（図６の例では「日」）に対応する各サブディレクトリはブロブ用に１つ（ディレクトリ６０１）、ＣＤＦ用に１つ（ディレクトリ６０３）、およびリフレクション用に１つ（ディレクトリ６０５）という３つのサブディレクトリを有する。コンテンツ・ユニットが削除される時にリフレクションを作成し、コンテンツ・ユニットの削除の時刻に対応するリフレクション・ディレクトリに記憶する。したがって、たとえば図６では、年０の月０の日０に削除されたコンテンツ・ユニットのリフレクションがリフレクション・ディレクトリ６０５に記憶されるはずである。
【００５３】
＜タイムスタンプのないコンテンツ・ユニットの記憶＞
いくつかの状況で、コンテンツ・アドレスにタイムスタンプを有しないコンテンツ・ユニットは時刻ベースのディレクトリ構造への記憶のために受け取られる。これは、たとえばその要求を送る実体がタイムスタンプを有するコンテンツ・アドレスを処理できない（たとえば、より古いソフトウェア・バージョンを使用しているので）時に発生する。
【００５４】
時刻ベースのディレクトリ構造内にタイムスタンプを有しないコンテンツ・アドレスを有するコンテンツ・ユニットを記憶する工程の例を図７に示す。図７に示された工程はタイムスタンプに関連付けられていないコンテンツ・ユニットを時刻ベースのディレクトリ構造内に記憶するのに使用される工程の１例にすぎず、本発明はこれに関して限定されないので、他の工程を使用することができる。
【００５５】
動作７０１でコンテンツ・ユニットを記憶する要求を受け取る。この要求は要求する実体が何らかの適当なタイムスタンプを有するコンテンツ・アドレスを処理できないことを（たとえば、タイムスタンプを供給しないことによって）示す。この工程は動作７０３に継続し、ここで、コンテンツ・ユニットのコンテンツ・アドレスを時刻値にマッピングする。本発明はこれに関して限定されないので、任意の適当なマッピング工程を使用することができる（その例を、上で図２に関して述べた）。この工程は、次に動作７０５に進み、ここで、マッピングから作られた時刻値に対応する時刻ベースのディレクトリ構造内のディレクトリを選択する。次に、この工程は動作７０７に進み、ここで、コンテンツ・ユニットを選択されたディレクトリに記憶する。
【００５６】
そのコンテンツ・アドレスによってそのコンテンツ・ユニットを識別する、そのコンテンツ・ユニットを取り出す後続アクセス要求が受け取られる時に、そのコンテンツ・アドレスがタイムスタンプを含まないことを判定する。したがって、そのコンテンツ・ユニットが記憶されているディレクトリを特定するために、コンテンツ・アドレスを同一のマッピングを使用して時刻値にマッピングする。この時刻値に対応するディレクトリが判定され、そのコンテンツ・ユニットがこのディレクトリから取り出される。
【００５７】
＜時刻ベースのディレクトリ内の仮想プール＞
本発明者は、コンテンツ源（たとえば、ホスト・コンピュータまたはサーバ、アプリケーション・プログラム、他のコンピュータなど）がコンピュータ上で時刻ベースのディレクトリ構造内に記憶されたコンテンツ・ユニットの物理的なまたは論理的な記憶位置を直接に制御しないので、そのコンテンツ源が何らかの方法で関連するコンテンツ・ユニットを物理的にまたは論理的に分離する能力を有しないことに気づいた。たとえば、同一のアプリケーション・プログラムによって記憶されるコンテンツ・ユニットが（たとえば、それらのコンテンツ・ユニットが異なる時に記憶されたので）完全に異なる物理位置または論理位置に最終的に落ち着く場合がある。
【００５８】
本発明者は、しばしば、さらにさまざまな管理機能（たとえば、異なるタイプの削除機能、複製機能など）がコンテンツ・ユニットの物理的記憶位置および／または論理的記憶位置に結び付けられていることに気づいた。したがって、コンテンツ源がコンテンツ・ユニットの物理的記憶位置または論理的記憶位置を制御する能力がないことは、一貫した記憶システム機能が何らかの形で関連するコンテンツ・ユニット（たとえば、同一のアプリケーション・プログラムによって書かれるコンテンツ・ユニット）に提供されることを保証する能力がないことをもたらす場合がある。
【００５９】
さらに、コンテンツ源がそのコンテンツ源によって供給されるコンテンツを記憶するのにどの論理記憶資源または物理記憶資源が使用されるかを制御する能力を持たないことは、任意の特定のコンテンツ源からコンピュータに記憶されたコンテンツ・ユニットの１つまたは複数の特性（たとえば、特定のコンテンツ源からのコンテンツ・ユニットを記憶するのに使用される記憶容量、特定のコンテンツ源から記憶されたコンテンツ・ユニットの個数など）を別々に追跡し、報告する能力がないことをもたらす可能性がある。
【００６０】
本発明の一実施形態は、コンテンツ・ユニットを、時刻ベースのディレクトリ構造内の複数の仮想プールに論理的にグループ化することに関する。たとえば、仮想プールの各々を１つまたは複数のコンテンツ源に割り振り、その結果、あるコンテンツ源がそれに割り振られた仮想プール内のコンテンツ・ユニットにアクセスすることだけを許可され、それに割り振られていない仮想プール内のコンテンツ・ユニットにアクセスすることを許可されなくなる。
【００６１】
仮想プールの使用の例は各々が下の表１にリストされた米国特許出願第１０／９１０，９８５号、米国特許出願第１０／９１１，３３０号、米国特許出願第１０／９１１，２４８号、米国特許出願第１０／９１１，２４７号、および米国特許出願第１０／９１１，３６０号に記載されている。コンテンツ・ユニットは、任意の適当な方法で仮想プール内にグループ化される。たとえば、図８に示されているように、ルート・ディレクトリを含み、記憶ディレクトリ８０１および（選択肢として）ＳＩＳディレクトリ８０５を有する記憶ディレクトリ構造８００が設けられる。記憶ディレクトリ８０１には各々が１つの仮想プールに対応し、それ自体の時刻ベース・ディレクトリ構造を有する複数の「仮想プール」サブディレクトリ（すなわち、８０３ａ、８０３ｂ、８０３ｃ、…、８０３ｎ）を含む。したがって、コンテンツ・ユニットが記憶のために受け取られる時に、そのコンテンツ・ユニットがどの仮想プールに属するかを（たとえば、どのアプリケーション・プログラムが要求を送るかに基づいて）判定し、そのコンテンツ・ユニットを、階層内の適当な仮想プールの下の時刻ベースのディレクトリ構造に記憶する。
【００６２】
代替案では、図９に示されたディレクトリ構造９００を使用する。図９のディレクトリ構造では、各「リーフ」ディレクトリは各々が１つの仮想プールに対応する複数のサブディレクトリを含む。したがって、コンテンツ・ユニットが記憶される時刻ベースのディレクトリを選択し、次に、そのコンテンツ・ユニットをそのディレクトリの適当な仮想プール・サブディレクトリに記憶する。たとえば、ブロブ・ディレクトリ９０５は複数の仮想プール・サブディレクトリ（すなわち、ディレクトリ９０１ａ、９０１ｂ、…、９０１ｎ）を含み、ＣＤＦディレクトリ９０７も同様である（すなわち、ディレクトリ９０３ａ、９０３ｂ、…、９０３ｎ）。コンテンツ・ユニットをたとえばブロブ・ディレクトリ９０５に記憶すると決定される（たとえば、コンテンツ・ユニットのコンテンツ・アドレスのタイムスタンプに基づいて）時に、ブロブ・ディレクトリ９０５の適当な仮想プール・サブディレクトリを（たとえば、要求を送ったアプリケーション・プログラムの識別子に基づいて）選択し、そのコンテンツ・ユニットを選択された仮想プール・ディレクトリに記憶する。同様に、コンテンツ・ユニットをＣＤＦディレクトリ９０７に記憶すると決定される時にＣＤＦディレクトリ９０７の適当な仮想プール・サブディレクトリを選択し、そのコンテンツ・ユニットを選択された仮想プール・ディレクトリに記憶する。
【００６３】
上で示したディレクトリ構造は仮想プールを作成する方法の例にすぎない。本発明はこれに関して限定されないので、任意の他の適当な技法を使用することができる。さらに、図８および図９の例示的なディレクトリ構造はＳＩＳディレクトリを含むが、仮想プールは単一インスタンス記憶を実行しないシステムで実施することができるので、仮想プールに関する本発明の諸態様は単一インスタンス記憶機能を有するシステムでの実施に限定されない。同様に、単一インスタンス記憶を仮想プールを実施しないシステムで実行することができる。
【００６４】
＜コンテンツ・ユニットの複製＞
一実施形態によれば、コンテンツ・ユニットをコンピュータに複製し、時刻ベースのディレクトリ構造に記憶する。すなわち、リモート・コンピュータに記憶されたコンテンツ・ユニットを（たとえば、ネットワークを介して）コピーし、ローカル・コンピュータ上で時刻ベースのディレクトリ構造内に記憶する。しかし、複製されたコンテンツ・ユニットは、以前にそれらがリモート・コンピュータ上で最初に記憶された時にコンテンツ・アドレスを割り当てられているので、これらの複製されたコンテンツ・ユニットのコンテンツ・アドレスのタイムスタンプはリモート・コンピュータでの記憶の時刻を反映し、そのコンテンツ・ユニットが複製のためにコピーされた時刻を反映しない。したがって、複製されたコンテンツ・ユニットがローカル・コンピュータの時刻ベースのディレクトリ構造内に記憶される時に、その複製されたコンテンツ・ユニットは複製のためにコピーされた時刻ではなく、リモート・コンピュータで最初に記憶した時刻（すなわち、タイムスタンプで示される時刻）に対応するディレクトリに記憶される。
【００６５】
このことは時刻ベースの照会を実行する時に問題が生じる。時刻ベースの照会とは指定された時間範囲の間にコンピュータに記憶されたコンテンツ・ユニットを識別する、コンピュータに対する要求である。たとえば、時刻ベースの照会は２００３年１月１８日から２００４年１月１８日までの間にコンピュータに記憶されたすべてのコンテンツ・ユニットの識別を要求する。しかし、時刻ベースの照会要求で指定された時間範囲の間にリモート・コンピュータで最初に記憶されたが、指定された時間範囲の後になるまでその時刻ベースの照会要求を受け取ったコンピュータに複製されなかったコンテンツ・ユニットがある場合がある。そのようなコンテンツ・ユニットは複製の時刻に対応するディレクトリではなく、そのタイムスタンプに対応する時刻ベースのディレクトリに記憶されるので、これらのコンテンツ・ユニットは実際には指定された時間範囲の間にそのコンピュータに記憶されなかった時刻の時刻ベースの照会要求に応答して識別される。
【００６６】
本発明の一実施形態は、複製されたコンテンツ・ユニットを記憶する別々のディレクトリを設けることによってこの制限に対処することを対象とする。これは、この制限に対処する方法の１つの例にすぎず、この問題に任意の適当な方法で対処することができるので、本発明はこの特定の例に限定されない。たとえば、図１０に示されたディレクトリ構造１０００を使用する。ディレクトリ構造１０００では、このディレクトリ構造内の時間の最小単位（図１０の例では「日」）に対応する各ディレクトリが複数のサブディレクトリを有する。上で説明したように、これらのサブディレクトリはブロブを記憶するディレクトリ（すなわち、ディレクトリ１００５）、ＣＤＦを記憶するディレクトリ（すなわち、ディレクトリ１００７）、およびリフレクションを記憶するディレクトリ（すなわち、ディレクトリ１００９）を含む。さらに、複製されたブロブを記憶するディレクトリ（すなわち、ディレクトリ１００１）、複製されたＣＤＦを記憶するディレクトリ（すなわち、ディレクトリ１００３）、および記憶時刻ディレクトリ（すなわち、ディレクトリ１０１１）も存在する。
【００６７】
上の例では、コンテンツ・ユニットのタイプ（すなわち、ブロブ、ＣＤＦ、およびリフレクション）の間を区別するディレクトリ構造が使用されたことを諒解されたい。しかし、これは、１例としてのみ提供される。その理由は、本発明がコンテンツ・ユニットの異なるタイプを使用するシステムと共に使用することに限定されないからである。
【００６８】
コンテンツ・ユニットが複製のためにコンピュータにコピーされる時に、そのコンテンツ・ユニットのコンテンツ・アドレス内のタイムスタンプに対応するディレクトリ構造内のディレクトリを選択し、そのコンテンツ・ユニットを、そのディレクトリの複製されたブロブ・サブディレクトリまたは複製されたＣＤＦサブディレクトリのいずれかに（そのコンテンツ・ユニットがブロブまたはＣＤＦのどちらであるかに応じて）記憶する。さらに、任意の適当な方法（たとえば、記憶時刻ファイルのファイル名は、そのコンテンツ・ユニットのコンテンツ・アドレスを含むか、あるいは、記憶時刻ファイルのコンテンツはその情報を含む）でそのコンテンツ・ユニットを識別する記憶時刻ファイルを作成する。次に、複製されたコンテンツ・ユニットの到着時刻に対応するディレクトリ構造１０００内のディレクトリを選択し、記憶時刻ファイルをその記憶時刻サブディレクトリに記憶する。
【００６９】
したがって、たとえば、ブロブが、２００５年２月１９日に複製のために受け取られ、そのブロブのコンテンツ・アドレスのタイムスタンプが、そのブロブが最初にリモート・コンピュータで２００３年３月３日に記憶されたことを示す場合に、そのブロブを、２００３年３月３日に対応するディレクトリの「複製されたブロブ」サブディレクトリ内のファイルに記憶する。さらに、そのブロブのコンテンツ・アドレスを示す記憶時刻ファイルを作成し、２００５年２月１９日に対応するディレクトリの記憶時刻サブディレクトリに記憶する。
【００７０】
特定の時間範囲を示す時刻ベースの照会要求が受け取られる時に、その時間範囲に含まれる時間の単位に対応するディレクトリを特定する。指定された時間範囲内の時間の単位に対応するディレクトリのブロブ・サブディレクトリ、ＣＤＦサブディレクトリ、およびリフレクション・サブディレクトリに記憶されたコンテンツ・ユニットをその要求に応答して識別する。しかし、その時間範囲と一致する、複製されたブロブ・サブディレクトリおよび複製されたＣＤＦサブディレクトリ内のコンテンツ・ユニットは返されない。そうではなく、指定された時間範囲内の時間の単位に対応するディレクトリの記憶時刻サブディレクトリ内の記憶時刻ファイルにアクセスし、その記憶時刻ファイルによって参照される複製されたコンテンツ・ユニットもその要求に応答して識別される。こうして、時刻ベースの照会に応答して、複製されたコンテンツ・ユニットがそのタイムスタンプで示されるリモート・コンピュータでの最初の記憶の時刻によるのではなく、複製の時刻に基づいて識別される。
【００７１】
一実施形態で、ローカル・コンピュータは複数のリモート・コンピュータから複製されたコンテンツ・ユニットを受け取り、これらのコンピュータを上で説明したように時刻ベースのディレクトリ構造に記憶することができる。リモート・コンピュータのうちの１つがコンピュータに複製されたコンテンツ・ユニットのすべてを復元することを望む場合（たとえば、そのリモート・コンピュータでのデータの消失の場合）に、すべてのリモート・コンピュータからのすべての複製されたコンテンツ・ユニットではなく、データを要求するその特定のリモート・コンピュータから複製されたコンテンツ・ユニットだけをローカル・コンピュータから復元することが望まれる。したがって、本発明の一実施形態ではコンテンツ・ユニットのソースに基づく複製されたコンテンツ・ユニットの論理的な分離を可能にするディレクトリ構造が提供される。図１１のディレクトリ構造１１００がそのようなディレクトリ構造の例である。ディレクトリ構造１１００では、複製されたブロブのサブディレクトリ（すなわち、ディレクトリ１１０１）および複製されたＣＤＦのサブディレクトリ（すなわち、ディレクトリ１１０３）の各々がそのコンピュータにコンテンツ・ユニットを複製するリモート・コンピュータに対応する１つまたは複数のサブディレクトリを有する。複製されたブロブまたはＣＤＦが受け取られる時に、その複製されたブロブまたはＣＤＦは複製源として機能したリモート・コンピュータに対応するサブディレクトリに置かれる。したがって、特定のコンピュータによって複製されたコンテンツ・ユニットをそのリモート・コンピュータに対応するサブディレクトリにアクセスすることによって取り出す。
【００７２】
代替案では、図１２に示されたディレクトリ構造１２００のようなディレクトリ構造を使用する。（複製されたのではない）コンテンツ・ユニットを記憶するための時刻ベースのディレクトリとして機能する記憶ディレクトリ１２０１を有するだけでなく、ディレクトリ構造１２００は、各々が別々の時刻ベースのディレクトリ構造のトップレベル・ディレクトリとして機能する複数の複製ディレクトリ（すなわち、１２０３）を含む。さらに、各複製ディレクトリは、コンテンツ・ユニットの複製源であるリモート・コンピュータに対応する。したがって、ローカル・コンピュータに複製されたコンテンツ・ユニットを複製源に対応する複製ディレクトリに記憶し、そのディレクトリ内の適当な時刻ベースのサブディレクトリに置く。さらに、記憶時刻ディレクトリ１２０７は、別の時刻ベースのディレクト構造のトップレベル・ディレクトリであり、上で説明したようにコンテンツ・ユニットの複製の時刻を追跡するための記憶時刻ファイル記憶用に使用される。
【００７３】
図１１および図１２のディレクトリ構造が使用できるディレクトリ構造の１つの例にすぎず、任意の適当なディレクトリ構造を使用することができるので、本発明が特定のディレクトリ構造に限定されないことを諒解されたい。
【００７４】
＜時刻ベースのビットマップ＞
本発明者は、いくつかの状況で、ファイル・システムへのアクセスが時間のかかる工程であることに気づいた。したがって、コンテンツ・ユニットを読み取る要求または時刻ベースの照会要求が受け取られる時に、コンテンツ・ユニットがその記憶システムに存在する場合にそのコンテンツ・ユニットが特定されるディレクトリに記憶された任意のコンテンツ・ユニットがあるかどうか（すなわち、読取要求の場合）、または、要求で指定された時間範囲に含まれる時間の単位に対応するディレクトリに記憶された任意のコンテンツ・ユニットがあるかどうか（すなわち、時刻ベースの照会要求の場合）を判定することが望ましい。
【００７５】
一実施形態で、ビットマップを使用して、そのような判定を行う。上で説明したように、時刻ベースのディレクトリ構造は、階層に配置された複数のレベルを含み、各レベルは、特定の時間期間に対応する。この階層の最低レベルは時間の最小単位に対応し、最低レベルのディレクトリを最低時間粒度ディレクトリ（ＬＴＧＤ）と呼ぶ。一実施形態では、このビットマップは複数のビットを含み、これらのビットの各々が時刻ベースのディレクトリ構造内のＬＴＧＤのうちの１つに対応する。ビットがある状態である場合（たとえば、ビットがセットされている場合）に、そのビットに対応するＬＴＧＤディレクトリに記憶されたコンテンツ・ユニットがないことを示す。ビットが他の状態である場合（たとえば、ビットがセットされていない場合）に、そのＬＴＧＤディレクトリに記憶されたコンテンツ・ユニットがあることを示す。このビットマップをディレクトリ構造にアクセスする前に検査し、その結果、コンテンツ・ユニットが関連するＬＴＧＤディレクトリのうちの１つまたは複数に記憶されていないと判定される場合に、これらのディレクトリにアクセスする必要がなくなる。
【００７６】
任意の適当な実施態様を使用することができるので、時刻ベースのビットマップの概念が上で説明した例示的実施に限定されないことを諒解されたい。
上で説明した本発明の実施形態は任意の適当なコンピュータまたはシステムで実施することができる。適当なコンピュータおよび／またはシステムの例は、その各々が参照によって本願明細書に組み込まれる、下の表１にリストされた特許出願（集合的に「ＣＡＳ出願」）に記載されている。これらの特許出願に記載のコンピュータおよびシステムが、本発明の実施形態を実施できるコンピュータおよびシステムの例にすぎないことを諒解されたい。その理由は、本発明が、これらのコンテンツを用いてアドレス可能な記憶システムのいずれかでの実施に限定されず、コンテンツを用いてアドレス可能な記憶システムにも全く限定されないからである。
【００７７】
一実施形態で、本発明を記憶システムで実施することができる。たとえば、ブロックＩ／Ｏ記憶システムおよび／またはＣＡＳ記憶システムなど、任意の適当なタイプの記憶システムを使用することができる。さらに、本発明を、表１の特許出願に記載の分散記憶システムで実施することもできる。本発明を、コンテンツを用いてアドレス可能な記憶機能を実行するホスト・コンピュータで実施することもできる。そのようなコンピュータは、下の表１にリストされた米国特許出願第１１／０２１，８９２号、米国特許出願第１１／０２２，０２２号、米国特許出願第１１／０２２，０７７号、米国特許出願第１１／０２１，７５６号、米国特許出願第１１／０２１，０１２号、および米国特許出願第１１／０２１，３７８号に記載されている。これらの特許出願でより詳細に説明されているように、このコンピュータは記憶システムにコンテンツを用いてアドレス可能なインターフェースを提供するように、記憶システム（たとえば、ブロックＩ／Ｏ記憶システム）に接続される。要約すると、本発明を任意の適当なコンピュータ・システムで実施することができ、本発明がこれに関して限定されないことを理解されたい。
【００７８】
【表１】
2008537233.tif 000003
2008537233.tif 000004
本発明の上で説明した実施形態は多数の任意の方法で実施することができる。たとえば、実施形態をハードウェア、ソフトウェア、またはその組合せを使用して実施することができる。ソフトウェアで実施される時に、ソフトウェア・コードを単一のコンピュータ内で提供されるものであれ複数のコンピュータの間で分散されるものであれ、任意の適当なプロセッサまたはプロセッサの集合で実行する。上で説明した機能を実行する任意の構成要素または構成要素の集合を、包括的に上で述べた機能を制御する１つまたは複数のコントローラと考えることができることを諒解されたい。この１つまたは複数のコントローラは上に列挙した機能を実行するためにマイクロコードもしくはソフトウェアを使用してプログラムされる専用ハードウェアまたは汎用ハードウェア（たとえば、１つまたは複数のプロセッサ）を用いてなど多数の方法で実施される。
【００７９】
これに関して、本発明の実施形態の１実施態様は、プロセッサ上で実行された時に本発明の実施形態の上で述べた機能を実行するコンピュータ・プログラム（すなわち、複数の命令）を符号化された少なくとも１つのコンピュータ可読媒体（たとえば、コンピュータ・メモリ、フロッピ・ディスク、コンパクト・ディスク、テープなど）を含むことを諒解されたい。このコンピュータ可読媒体はそれに記憶されたプログラムを任意のコンピュータ環境資源に読み出して、本明細書で説明した本発明の諸態様を実施できるようにするために輸送可能とすることができる。さらに、実行された時に上で説明した機能を実行するコンピュータ・プログラムへの言及がホスト・コンピュータで動作するアプリケーション・プログラムに限定されないことを諒解されたい。そうではなく、コンピュータ・プログラムという用語は、本明細書で本発明の上で述べた諸態様を実施するためにプロセッサをプログラムするのに使用できるすべてのタイプのコンピュータ・コード（たとえば、ソフトウェアまたはマイクロコード）を参照するために、包括的な意味で使用されている。
【００８０】
工程がコンピュータ可読媒体内で実施される本発明の複数の実施形態に従って、コンピュータで実施される工程がその実行の過程中に手動で（たとえば、ユーザから）入力を受け取ることができることを諒解されたい。
【００８１】
本明細書で使用される用語および専門用語は説明のためであり、限定として解釈してはならない。「含む（ｉｎｃｌｕｄｉｎｇ）」、「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「有する（ｈａｖｉｎｇ）」、「含む（ｃｏｎｔａｉｎｉｎｇ）」、「含む（ｉｎｖｏｌｖｉｎｇ）」、およびその活用形の使用はその後にリストされた項目および追加項目を含むことを意味する。
【００８２】
本発明の複数の実施形態を詳細に説明したので、さまざまな変更および改善を当業者はたやすく思い浮かべるであろう。そのような変更および改善は本発明の技術思想および範囲に含まれることが意図されている。したがって、前述の説明は例示のみであり、限定的として意図されたものではない。本発明は添付の特許請求の範囲およびその均等物による定義によってのみ限定される。
【図面の簡単な説明】
【００８３】
【図１】階層ファイル・システムの例を示す図。
【図２】本発明の一実施形態による、時刻ベースのディレクトリ構造の例を示す図。
【図３】本発明の一実施形態による、単一インスタンス記憶機能を実行する例示的工程を示す流れ図。
【図４】本発明の一実施形態による、コンテンツ・ユニットのハッシュ値に基づいて整理されたディレクトリ構造の例を示す図。
【図５】本発明の一実施形態による、ブロブおよびＣＤＦが別々に記憶される時刻ベースのディレクトリ構造の例を示す図。
【図６】本発明の一実施形態による、リフレクションをブロブおよびＣＤＦと別々に記憶できる時刻ベースのディレクトリ構造の例を示す図。
【図７】本発明の一実施形態による、そのコンテンツ・アドレスにタイムスタンプを有しないコンテンツ・ユニットを時刻ベースのディレクトリ構造に記憶する工程を示す流れ図。
【図８】本発明の一実施形態による、高レベル・ディレクトリの使用を介して仮想プール機能を提供する時刻ベースのディレクトリ構造の例を示す図。
【図９】本発明の一実施形態による、低レベル・ディレクトリの使用を介して仮想プール機能を提供する時刻ベースのディレクトリ構造の例を示す図。
【図１０】本発明の一実施形態による、複製されたコンテンツ・ユニットが複製されないコンテンツ・ユニットと別々に記憶される時刻ベースのディレクトリ構造の例を示す図。
【図１１】本発明の一実施形態による、複製されたコンテンツ・ユニットを、そのコンテンツ・ユニットの複製ソースに基づいて低レベル・ディレクトリを使用して論理的に分離できる時刻ベースのディレクトリ構造の例を示す図。
【図１２】本発明の一実施形態による、複製されたコンテンツ・ユニットを、そのコンテンツ・ユニットの複製ソースに基づいて高レベル・ディレクトリを使用して論理的に分離できる時刻ベースのディレクトリ構造の例を示す図。
【図１】
2008537233.tif 000005
【図２】
2008537233.tif 000006
【図３】
2008537233.tif 000007
【図４】
2008537233.tif 000008
【図５】
2008537233.tif 000009
【図６】
2008537233.tif 000010
【図７】
2008537233.tif 000011
【図８】
2008537233.tif 000012
【図９】
2008537233.tif 000013
【図１０】
2008537233.tif 000014
【図１１】
2008537233.tif 000015
【図１２】
2008537233.tif 000016
【手続補正書】
【提出日】平成19年10月26日(2007.10.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータでコンテンツ・ユニットの記憶装置を管理する方法であって、前記方法はコンピュータによって実行され、
（Ａ）該コンピュータでコンテンツ・ユニットを記憶する要求を受け取る動作と、
（Ｂ）該要求に応答して第１識別子を該コンテンツ・ユニットに関連付ける動作と、
（Ｃ）該コンテンツ・ユニットのコピーが該コンピュータによって既に記憶されているかどうかを判定する動作であって、該コンテンツ・ユニットの該コピーが該第１識別子と異なる第２識別子に関連する動作と、
（Ｄ）該コンテンツ・ユニットが該コンピュータに既に記憶されていると判定される時に、該要求に応答して該コンテンツ・ユニットの追加コピーを記憶するのを見送る動作と
を備える方法。
【請求項２】
前記第１識別子は前記コンテンツ・ユニットのコンテンツから完全に導出可能ではない、請求項１に記載の方法。
【請求項３】
前記第１識別子は前記コンテンツ・ユニットの記憶の時刻に関連する時刻を示すタイムスタンプを含む、請求項１に記載の方法。
【請求項４】
前記第１識別子は前記コンテンツ・ユニットのコンテンツに少なくとも部分的に基づいて計算されるハッシュ値を含み、前記コンピュータはコンテンツ・ユニットをファイル・システム内に記憶し、該ファイル・システムが複数のディレクトリを有し、該複数のディレクトリの各々は少なくとも１つのハッシュ値に対応し、前記動作（Ｂ）はさらに、
該複数のディレクトリのうちで前記第１識別子の該ハッシュ値に対応する少なくとも１つのディレクトリを選択する動作と、
前記コンテンツ・ユニットの前記コピーに関連するファイルが該ディレクトリに記憶されているかどうかを判定する動作と
を含む、請求項１に記載の方法。
【請求項５】
前記コンテンツ・ユニットの前記コピーに関連する前記ファイルは前記コンテンツ・ユニットの前記コピーを含むファイルのファイル・システム位置を示すポインタ・ファイルである、請求項４に記載の方法。
【請求項６】
コンピュータ・システム上で実行される時に、該コンピュータ・システム内のコンピュータへのコンテンツ・ユニットの記憶を管理する方法を実行する命令が符号化された少なくとも１つのコンピュータ可読媒体であって、該方法は該コンピュータによって実行され、
（Ａ）該コンピュータで該コンテンツ・ユニットを記憶する要求を受け取る動作と、
（Ｂ）該要求に応答して、第１識別子を該コンテンツ・ユニットに関連付ける動作と、
（Ｃ）該コンテンツ・ユニットのコピーが該コンピュータによって既に記憶されているかどうかを判定する動作であって、該コンテンツ・ユニットの該コピーが該第１識別子と異なる第２識別子に関連する、動作と、
（Ｄ）該コンテンツ・ユニットが該コンピュータに既に記憶されていると判定される時に、該要求に応答して該コンテンツ・ユニットの追加コピーを記憶するのを見送る動作と
を備える、少なくとも１つのコンピュータ可読媒体。
【請求項７】
コンピュータ・システム内の少なくとも１つのコンピュータであって、少なくとも１つの記憶装置と、
該記憶装置に接続され、
（Ａ）コンテンツ・ユニットを記憶する要求を受け取る動作、
（Ｂ）該要求に応答して第１識別子を該コンテンツ・ユニットに関連付ける動作、
（Ｃ）該コンテンツ・ユニットのコピーがコンピュータによって既に記憶されているかどうかを判定する動作であって、該コンテンツ・ユニットの該コピーが該第１識別子と異なる第２識別子に関連する動作、
（Ｄ）該コンテンツ・ユニットが該コンピュータに既に記憶されていると判定される時に、該要求に応答して該コンテンツ・ユニットの追加コピーを記憶するのを見送る動作
を実行する少なくとも１つのコントローラと
を備える、コンピュータ・システム内の少なくとも１つのコンピュータ。
【請求項８】
前記第１識別子は前記コンテンツ・ユニットの記憶の時刻に関連する時刻を示すタイムスタンプを含む、請求項７に記載の少なくとも１つのコンピュータ。
【請求項９】
前記コンピュータは複数のディレクトリを含むファイル・システムにコンテンツ・ユニットを記憶し、該複数のディレクトリの各々は時間期間に対応し、前記少なくとも１つのコントローラは、
該複数のディレクトリから前記タイムスタンプ内で示される前記時刻に対応する少なくとも１つのディレクトリを選択し、
該選択されたディレクトリに前記コンテンツ・ユニットに関連するファイルを記憶する
請求項８に記載の少なくとも１つのコンピュータ。
【請求項１０】
前記少なくとも１つのコントローラは前記コンテンツ・ユニットがまだ前記コンピュータに記憶されていないと判定される時に前記コンテンツ・ユニットを前記コンピュータに記憶する、請求項７に記載の少なくとも１つのコンピュータ。
【国際調査報告】
2008537233.tif 000017
2008537233.tif 000018
2008537233.tif 000019
2008537233.tif 000020
2008537233.tif 000021