(57)【要約】  入力データに類似するデータ位置に関するリポジトリの検索を可能にするシステム及び方法であって、リポジトリサイズとは無関係で入力データサイズとは線形の時間内での規定類似性測度とリポジトリサイズの小部分に比例する空間とを用いる。かく配置された類似データセグメントをさらに分析し、リポジトリ内の共通データ部分の順序や位置に関係なく、それらの共通（同一）データ部分を特定する。遠隔演算は、遠隔差分処理演算を実行することで著しく低減されたシステム帯域を用い達成される。【選択図】      図４
2008513891.tif 000002
【特許請求の範囲】
【請求項１】
リポジトリデータ内で入力データを識別する方法で、前記リポジトリデータがリポジトリデータチャンクを含み、前記入力データが入力データチャンクを含み、前記各リポジトリデータチャンクが対応する１以上のリポジトリデータチャンク識別特性（ＲＤＣ）集合を有する前記方法であって、前記各入力データチャンクごとに、
１以上の入力データチャンク識別特性（ＩＤＣ）集合を特定するステップと、
被特定ＩＤＣ集合を１以上のＲＤＣ集合と比較するステップと、
前記１以上のＲＤＣ集合に対する前記被識別ＩＤＣ集合を比較する関数として前記入力データチャンクに類似するリポジトリデータチャンクを識別するステップとを含む、ことを特徴とする方法。
【請求項２】
個別チャンクの全データを比較することで前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を特定するステップをさらに含む、請求項１記載の方法。
【請求項３】
前記入力データは第１の位置に配置してあり、前記リポジトリデータは遠隔位置に配置してあり、前記方法はさらに、
前記第１の位置のＩＤＣ集合を特定するステップと、
前記被特定ＩＤＣ集合を前記第１の位置から前記遠隔位置へ送信するステップと、
前記被特定ＩＤＣ集合を前記遠隔位置の前記１以上のＲＤＣ集合と比較するステップとを含む、請求項１記載の方法。
【請求項４】
前記第１のデータチャンクを全て前記遠隔位置へ送信することなく、かつ前記被識別類似リポジトリデータチャンクを全て前記第１の位置へ送信することなく、前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの１以上の差分を特定するステップをさらに含む、請求項３記載の方法。
【請求項５】
１以上の被特定差分でもって前記遠隔位置を更新するステップをさらに含む、請求項４記載の方法。
【請求項６】
前記第１の位置は第１のコンピュータであり、前記遠隔位置は前記第１のコンピュータとは異なる遠隔コンピュータであり、前記第１のコンピュータと前記遠隔コンピュータは互いにネットワーク接続通信状態にあり、
前記リポジトリデータを、前記遠隔コンピュータを介してアクセスするデータリポジトリ内に格納する、請求項５記載の方法。
【請求項７】
ＲＤＣ集合に対するＩＤＣの集合の類似性識別は類似性閾値の関数である、請求項１記載の方法。
【請求項８】
前記ＩＤＣ集合内の所定数の前記識別特性がＲＤＣ集合内で検出されたときに前記類似性閾値に合致する、請求項７記載の方法。
【請求項９】
識別特性集合の特定ステップは、
個別データチャンク内で１以上のデータ部分を識別するステップと、
個別データチャンクの１以上のデータ部分のそれぞれについて算術的ハッシュ値を算出するステップとを含む、請求項８記載の方法。
【請求項１０】
集合内でｋ個の最大算術ハッシュ値を特定するステップで、ｋが所定数である前記ステップと、
前記ｋ個の最大ハッシュ値のそれぞれについて個別データ部分を識別するステップと、
識別特性集合を前記ｋ個の最大算術的ハッシュ値のそれぞれに対応する前記各データ部分に対する次の連続するデータ部分の算術的ハッシュ値と特定するステップとをさらに含む、請求項９記載の方法。
【請求項１１】
前記被特定差分をリポジトリ内に格納するステップをさらに含む、請求項２記載の方法。
【請求項１２】
１以上の差分を特定するステップが２値差分の特定とバイト単位でのファクタリングとのうちの少なくとも一方を含む、請求項１１記載の方法。
【請求項１３】
前記識別特性はハッシュ関数とローリングハッシュ関数とモジュラーハッシュ関数のうちの一つにより特定する、請求項１記載の方法。
【請求項１４】
前記ＲＤＣ集合はインデックス内に２値ツリーとＢツリーと並べ替えリストとハッシュテーブルのうちの少なくとも一つとして格納する、請求項１記載の方法。
【請求項１５】
前記リポジトリデータチャンクと前記入力データチャンクは複数のシードを備え、該各シードが基本要素の連続系列であって同じシードサイズｓを有しており、前記識別特性が前記個別チャンクのシードの選択された部分集合のハッシュ値である、請求項１記載の方法。
【請求項１６】
前記シードが重複シードを含む、請求項１５記載の方法。
【請求項１７】
前記方法は、データファクタリングとデータバックアップとの少なくとも一方に使用する、請求項１記載の方法。
【請求項１８】
前記類似リポジトリチャンク特定ステップは前記リポジトリの大きさとは無関係でかつ前記入力データの大きさとは線形の時間内に実行する、請求項１記載の方法。
【請求項１９】
入力データに類似するデータについてリポジトリデータ内で検索する方法であって、
前記リポジトリデータを１以上のリポジトリチャンクに分割するステップと、
前記各リポジトリチャンクごとに、リポジトリ識別特性（ＲＤＣ）の対応集合を算出するステップで、該各ＲＤＣ集合が少なくとも一つの識別特性を有する前記ステップと、
前記各ＲＤＣ集合に関連するインデックスと対応するリポジトリチャンクとを保持するステップと、
前記入力データを１以上の入力チャンクに分割し、該各入力チャンクごとに、
入力識別特性（ＩＤＣ）の対応集合を算出するステップで、該ＩＤＣ集合が少なくとも一つの識別特性を含む前記ステップと、
前記ＩＤＣ集合を前記インデックス内に格納した１以上のＲＤＣ集合と比較するステップと、
前記ＩＤＣ集合内の識別特性の類似性閾値ｊが前記インデックス内に格納されたＲＤＣ集合内に検出された場合、前記入力チャンクと前記対応するリポジトリチャンクとの間に類似性が存在すると特定するステップとを含む、ことを特徴とする方法。
【請求項２０】
前記ＲＤＣ集合と前記ＩＤＣ集合のそれぞれは、
前記個別データチャンクを複数のシードへ区画するステップで、該各シードを前記個別データチャンクの小部分としてシード系列にて順列配置する前記ステップと、
前記各シードに対しハッシュ関数を適用して複数のハッシュ値を生成するステップで、前記各シードが一つのハッシュ値を生み出す前記ステップと、
前記複数のハッシュ値の部分集合を選択するステップと、
前記選択されたハッシュ値の部分集合に対応して前記シード系列内の前記シードの位置を特定するステップと、
前記被特定位置に対し関数を適用して前記シード系列内の対応する他の位置を特定するステップと、
前記識別特性集合を前記被特定の他の位置における前記シードのハッシュ値として規定するステップとにより得る、請求項１９記載の方法。
【請求項２１】
前記ハッシュ値の部分集合はｋ個の最大ハッシュ値の識別により選択し、
前記対応する他の位置の特定に適用する関数は前記シード系列内で次のシードを識別する、請求項２０記載の方法。
【請求項２２】
前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を前記個別データチャンクの全データを比較することで特定するステップをさらに含む、請求項１９記載の方法。
【請求項２３】
前記被特定差分を前記リポジトリデータを格納した同じリポジトリ内に保管するステップをさらに含む、請求項２２記載の方法。
【請求項２４】
前記入力データは第１の位置に配置し、前記リポジトリデータと前記インデックスは遠隔位置に配置し、前記方法はさらに
前記第１の位置のＩＤＣ集合を特定するステップと、
前記被特定ＩＤＣ集合を前記第１の位置から前記遠隔位置へ送信するステップと、
前記被特定ＩＤＣ集合を前記遠隔位置の１以上のＲＤＣ集合と比較するステップと、
前記入力データチャンクを全て前記遠隔位置へ送信することなく、かつ前記被識別類似リポジトリデータチャンクを全て前記第１の位置へ送信することなく、前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を規定するステップとを含む、請求項１９記載の方法。
【請求項２５】
被特定差分を遠隔位置に格納するステップをさらに含む、請求項２４記載の方法。
【請求項２６】
前記方法は、データファクタリングとデータバックアップの少なくとも一方に使用する、請求項１９記載の方法。
【請求項２７】
リポジトリデータ内で入力データを識別するシステムで、前記リポジトリデータがリポジトリデータチャンクを含み、前記入力データが入力データチャンクを含み、該各リポジトリデータチャンクが対応する１以上のリポジトリデータチャンク識別特性（ＲＤＣ）集合を有する前記システムであって、
前記各入力データチャンクごとに１以上の入力データチャンク識別特性（ＩＤＣ）集合を特定する手段と、
前記被特定ＩＤＣ集合を１以上のＲＤＣ集合と比較する手段と、
前記１以上のＲＤＣ集合に対する前記被特定ＩＤＣ集合を比較する関数として前記入力データチャンクに類似するリポジトリデータチャンクを該各入力データチャンクごとに識別する手段とを含む、ことを特徴とする装置。
【請求項２８】
前記各入力データチャンクごとに、該入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を前記個別チャンクの全データを比較することで特定する手段をさらに含む、請求項２７記載のシステム。
【請求項２９】
前記入力データは第１の位置に位置し、前記リポジトリデータは遠隔位置に位置し、前記システムはさらに、
前記第１の位置の前記ＩＤＣ集合を特定する手段と、
前記被特定ＩＤＣ集合を前記第１の位置から前記遠隔位置へ送信する手段と、
前記被特定ＩＤＣ集合と前記遠隔位置の１以上のＲＤＣ集合との比較とをさらに備える、請求項２７記載のシステム。
【請求項３０】
前記第１のデータチャンクを全て前記遠隔位置へ送信することなく、かつ前記被識別類似リポジトリデータチャンクを全て前記第１の位置へ送信することなく、前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を特定する手段をさらに備える、請求項２９記載のシステム。
【請求項３１】
前記１以上の被特定差分でもって前記遠隔位置を更新する手段をさらに備える、請求項３０記載のシステム。
【請求項３２】
前記第１の位置は第１のコンピュータであり、前記遠隔位置は前記第１コンピュータとは異なる遠隔コンピュータであり、前記第１と前記遠隔コンピュータは相互にネットワーク接続通信状態にあり、
前記リポジトリデータは、前記遠隔コンピュータを介してアクセスするデータリポジトリ内に保管する、請求項３１記載のシステム。
【請求項３３】
ＲＤＣ集合に対するＩＤＣ集合の類似性の識別は類似性閾値の関数である、請求項２７記載のシステム。
【請求項３４】
前記類似性閾値はＲＤＣ集合内にＩＤＣ集合内の所定数の識別特性が検出されたときに合致する、請求項３３記載のシステム。
【請求項３５】
識別特性集合の特定手段は、
個別データチャンク内で１以上のデータ位置を識別する手段と、
個別データチャンクの１以上のデータ部分それぞれについて算術的ハッシュ値を算出する手段とを備える、請求項３４記載のシステム。
【請求項３６】
集合内のｋ個の最大算術的ハッシュ値の特定手段で、ｋが所定数である前記手段と、
ｋ個の最大ハッシュ値のそれぞれについて個別データ部分を識別する手段と、
識別特性集合をｋ個の最大算術的ハッシュ値のそれぞれに対応する前記各データ部分に対し次の系列データ部分の算術的ハッシュ値と特定する手段とをさらに備える、請求項３５記載のシステム。
【請求項３７】
前記被特定差分をリポジトリに格納する手段をさらに備える、請求項２８記載のシステム。
【請求項３８】
１以上の差分を特定する手段は、
２値差分を特定する手段と、
バイト単位ファクタリング手段と
のうちの少なくとも一方を備える、請求項３７記載のシステム。
【請求項３９】
前記識別特性はハッシュ関数とローリングハッシュ関数とモジュラーハッシュ関数のうちの一つにより特定する、請求項２７記載のシステム。
【請求項４０】
前記ＲＤＣ集合は２値ツリーとＢツリーと並べ替えリストとハッシュテーブルの少なくとも一つとしてインデックス内に格納する、請求項２７記載のシステム。
【請求項４１】
前記リポジトリデータチャンクと前記入力データチャンクのそれぞれは複数のシードを備え、該各シードは基本要素の連続系列であり、同一のシードサイズｓを有し、前記識別特性は前記個別チャンクのシードの選択された部分集合のハッシュ値である、請求項２７記載のシステム。
【請求項４２】
前記シードは重複シードを含む、請求項４１記載のシステム。
【請求項４３】
前記システムはデータファクタリングとデータバックアップのうちの少なくとも一方に使用する、請求項２７記載のシステム。
【請求項４４】
類似リポジトリチャンクの特定はリポジトリのサイズとは無関係で前記入力データのサイズとは線形の時間内に実行する、請求項２７記載のシステム。
【請求項４５】
入力データに類似するデータについてリポジトリデータを検索するシステムであって、
前記リポジトリデータを１以上のリポジトリチャンクに分割する手段と、
前記各リポジトリチャンクごとにリポジトリ識別特性（ＲＤＣ）の対応集合を算出する手段で、該各ＲＤＣ集合が少なくとも一つの識別特性を含む前記手段と、
前記各ＲＤＣ集合に関連するインデックスと対応するリポジトリチャンクとを保持する手段と、
前記入力データを１以上の入力チャンクへ分割する手段と、該各入力チャンクごとに、
入力識別特性（ＩＤＣ）の対応集合を算出し、該ＩＤＣ集合が少なくとも一つの識別特性を含み、
前記ＩＤＣ集合を前記インデックス内に格納された１以上のＲＤＣ集合と比較し、
前記ＩＤＣ集合内の前記識別特性の類似性閾値ｊが前記インデックス内に格納されたＲＤＣ集合内に検出された場合、前記入力チャンクと前記対応リポジトリチャンクとの間に類似性が存在すると特定する手段とを備える、ことを特徴とするシステム。
【請求項４６】
前記ＲＤＣ集合と前記ＩＤＣ集合のそれぞれを、
前記個別データチャンクを複数のシードへ区画し、該各シードを前記個別データチャンクの小部分としてシード系列にて順列配列し、
該各シードにハッシュ関数を適用して複数のハッシュ値を生成し、該各シードがハッシュ値をもたらし、
前記複数のハッシュ値の部分集合を選択し、
前記ハッシュ値の選択された部分集合に対応するシード系列内のシード位置を特定し、
被特定位置に関数を適用し、前記シード系列内の対応する他の位置を特定し、
前記被特定の他の位置の前記シードのハッシュ値として前記識別特性集合を規定することにより得る、請求項４５記載のシステム。
【請求項４７】
前記ハッシュ値の部分集合は前記ｋ個の最大ハッシュ値を識別することで選択され、
前記対応する他の位置の特定用に適用する関数が前記シード系列内の次のシードを識別する、請求項４６記載のシステム。
【請求項４８】
前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を前記個別データチャンクの全データを比較することで特定する手段をさらに備える、請求項４５記載のシステム。
【請求項４９】
前記被特定差分を前記リポジトリデータを格納した同じリポジトリに格納する手段をさらに備える、請求項４８記載のシステム。
【請求項５０】
前記入力データは第１の位置に位置し、前記リポジトリデータと前記インデックスは遠隔位置に位置し、前記システムはさらに
前記第１の位置の前記ＩＤＣ集合を特定する手段と、
前記被特定ＩＤＣ集合を前記第１の位置から前記遠隔位置へ送信する手段と、
前記被特定ＩＤＣ集合を前記遠隔位置の前記１以上のＲＤＣ集合と比較する手段と、
前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を、前記入力データチャンクを全て前記遠隔位置へ送信することなく、かつ前記被識別類似リポジトリデータチャンクを全て前記第１の位置へ送信することなく特定する手段とを備える、請求項４５記載のシステム。
【請求項５１】
前記被特定差分を遠隔位置に格納する手段をさらに備える、請求項５０記載のシステム。
【請求項５２】
データファクタリングとデータバックアップのうちの少なくとも一つに使用する、請求項４５記載のシステム。
【請求項５３】
リポジトリデータ内で入力データを識別する方法で、前記リポジトリデータがリポジトリデータチャンクを含み、前記入力データが入力データチャンクを含み、該各リポジトリデータチャンクが対応する１以上のリポジトリデータチャンク識別特性（ＲＤＣ）集合を有する前記方法を、コンピュータに実行させるコンピュータ実行可能命令でもってエンコードするコンピュータ可読媒体であって、前記方法が、前記各入力データチャンクごとに、
１以上の入力データチャンク識別特性（ＩＤＣ）集合を特定するステップと、
前記被特定ＩＤＣ集合を１以上のＲＤＣ集合と比較するステップと、
前記入力データチャンクに類似するリポジトリデータチャンクを前記被特定ＩＤＣ集合を前記１以上のＲＤＣ集合と比較する関数として識別するステップとを含む、ことを特徴とするコンピュータ可読媒体。
【請求項５４】
前記入力データチャンクと前記被識別類似リポジトリデータとの間の１以上の差分を前記個別チャンクの全データを比較することで特定するステップを実行するコンピュータ実行可能命令をさらに含む、請求項５３記載のコンピュータ可読媒体。
【請求項５５】
前記入力データは第１の位置に位置し、前記リポジトリデータは遠隔位置に位置しており、
前記第１の位置の前記ＩＤＣ集合を特定するステップと、
前記第１の位置から前記遠隔位置へ前記被特定ＩＤＣ集合を送信するステップと、
前記被特定ＩＤＣ集合を前記遠隔位置の１以上のＲＤＣ集合と比較するステップと
を実行するコンピュータ実行可能命令をさらに備える、請求項５３記載のコンピュータ可読媒体。
【請求項５６】
前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を、前記第１のデータチャンクを全て前記遠隔位置へ送信することなく、かつ前記被識別類似リポジトリデータチャンクを全て前記第１の位置へ送信することなく特定するステップを実行するコンピュータ実行可能命令をさらに含む、請求項５５記載のコンピュータ可読媒体。
【請求項５７】
前記遠隔位置を前記１以上の被特定差分でもって更新するステップを実行するコンピュータ実行可能命令をさらに含む、請求項５６記載のコンピュータ可読媒体。
【請求項５８】
前記第１の位置は第１のコンピュータであり、前記遠隔位置は前記第１のコンピュータとは異なる遠隔コンピュータであり、前記第１のコンピュータと前記遠隔コンピュータが互いにネットワーク接続通信状態にあり、
前記リポジトリデータを前記遠隔コンピュータを介してアクセスするデータリポジトリ内に保管する、請求項５７記載のコンピュータ可読媒体。
【請求項５９】
前記ＲＤＣ集合に対する前記ＩＤＣ集合の類似性の識別は類似性閾値の関数である、請求項５３記載のコンピュータ可読媒体。
【請求項６０】
前記類似性閾値は、前記ＩＤＣ集合内の所定数の識別特性がＲＤＣ集合内で検出されたときに合致する、請求項５９記載のコンピュータ可読媒体。
【請求項６１】
前記識別特性集合の特定は、
個別データチャンク内で１以上のデータ部分を特定するステップと、
個別データチャンクの１以上のデータ部分のそれぞれについて算術的ハッシュ値を算出するステップとを含む、請求項６０記載のコンピュータ可読媒体。
【請求項６２】
集合内でｋ個の最大算術的ハッシュ値を特定するステップで、ｋが所定数である前記ステップと、
前記ｋ個の最大ハッシュ値のそれぞれについて個別データ部分を特定するステップと、
識別特性集合をｋ個の最大算術的ハッシュ値のそれぞれに対応する前記各データ部分に対し次の連続するデータ部分の算術的ハッシュ値と特定するステップと
を実行するコンピュータ実行可能命令をさらに含む、請求項６１記載のコンピュータ可読媒体。
【請求項６３】
前記被特定差分をリポジトリ内に格納するステップを実行するコンピュータ実行可能命令をさらに含む、請求項５３記載のコンピュータ可読媒体。
【請求項６４】
前記１以上の差分の特定は２値差分の特定とバイト単位ファクタリングのうちの少なくとも一方を含む、請求項６３記載のコンピュータ可読媒体。
【請求項６５】
前記識別特性はハッシュ関数とローリングハッシュ関数とモジュラーハッシュ関数のうちの一つにより特定する、請求項５３記載のコンピュータ可読媒体。
【請求項６６】
前記ＲＤＣ集合はインデックス内に２値ツリーとＢツリーと並べ替えリストとハッシュテーブルのうちの少なくとも一つとして格納する、請求項５３記載のコンピュータ可読媒体。
【請求項６７】
前記リポジトリデータチャンクと前記入力データチャンクのそれぞれは複数のシードを備え、該各シードが基本素子の連続系列をなし、同じシードサイズｓを有し、前記識別特性が前記個別チャンクの前記シードの選択された部分集合のハッシュ値である、請求項５３記載のコンピュータ可読媒体。
【請求項６８】
前記シードが重複シードを含む、請求項６７記載のコンピュータ可読媒体。
【請求項６９】
前記方法は、データファクタリングとデータバックアップのうちの少なくとも一方に使用する、請求項５３記載のコンピュータ可読媒体。
【請求項７０】
前記類似リポジトリチャンク特定ステップは前記リポジトリのサイズとは無関係でかつ前記入力データのサイズとは線形の時間内に実行する請求項５３記載のコンピュータ可読媒体。
【請求項７１】
入力データに類似するデータをリポジトリデータ内で検索する方法をコンピュータに実行させるコンピュータ実行可能命令にてエンコードするコンピュータ可読媒体であって、前記方法が、
前記リポジトリデータを１以上のリポジトリチャンクに分割するステップと、
前記各リポジトリチャンクごとに、リポジトリ識別特性（ＲＤＣ）の対応集合を算出するステップで、該各ＲＤＣ集合が少なくとも一つの識別特性を備える前記ステップと、
前記各ＲＤＣ集合に関連するインデックスと前記対応リポジトリチャンクとを保持するステップと、
前記入力データを１以上の入力チャンクに分割し、該各入力チャンクごとに、
入力識別特性（ＩＤＣ）の対応集合を算出し、該ＩＤＣ集合が少なくとも一つの識別特性を含み、
前記ＩＤＣ集合を前記インデックス内に格納した１以上のＲＤＣ集合と比較し、
前記ＩＤＣ集合内の前記識別特性の類似性閾値ｊが前記インデックス内に保管されたＲＤＣ集合内に検出された場合、前記入力チャンクと前記対応リポジトリチャンクとの間に類似性が存在すると特定するステップとを含む、コンピュータ可読媒体。
【請求項７２】
前記ＲＤＣ集合と前記ＩＤＣ集合のそれぞれを、
前記個別データチャンクを複数のシードへ区画し、該各シードを前記個別データチャンクの小部分としてシード系列にて順列配置し、
前記各シードにハッシュ関数を適用して複数のハッシュ値を生成し、該各シードが一つのハッシュ値をもたらし、
前記複数のハッシュ値の部分集合を選択し、
前記選択されたハッシュ値の部分集合に対応して前記シード系列内の前記シードの位置を特定し、
前記被特定位置に対し関数を適用し、前記シード系列内の対応する他の位置を特定し、
前記識別特性集合を前記被特定の他の位置の前記シードのハッシュ値として規定する
ことにより得るステップを実行するコンピュータ実行可能命令をさらに含む、請求項７１記載のコンピュータ可読媒体。
【請求項７３】
前記ハッシュ値の部分集合は前記ｋ個の最大ハッシュ値を識別することで選択し、
前記対応する他の位置を特定するよう適用する前記関数が前記シード系列内の次のシードを識別する、請求項７２記載のコンピュータ可読媒体。
【請求項７４】
前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を前記個別データチャンクの全データを比較することで特定するステップを実行するコンピュータ実行可能命令をさらに含む、請求項７１記載のコンピュータ可読媒体。
【請求項７５】
前記リポジトリデータを保管する同じリポジトリに前記被特定差分を格納するステップを実行するコンピュータ実行可能命令をさらに含む、請求項７４記載のコンピュータ可読媒体。
【請求項７６】
前記入力データは第１の位置に位置し、前記リポジトリデータと前記インデックスは遠隔位置に位置し、
前記第１の位置の前記ＩＤＣ集合を特定するステップと、
前記被特定ＩＤＣ集合を前記第１の位置から前記遠隔位置へ送信するステップと、
前記被特定ＩＤＣ集合を前記遠隔位置の１以上のＲＤＣ集合と比較するステップと、
前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を、前記入力データチャンクを全て前記遠隔位置へ送信することなく、かつ前記被識別類似リポジトリデータチャンクを全て前記第１の位置へ送信することなく特定するステップと
を実行するコンピュータ実行可能命令をさらに含む、請求項７１記載のコンピュータ可読媒体。
【請求項７７】
前記被特定差分を前記遠隔位置に格納するステップを実行するコンピュータ実行可能命令をさらに含む、請求項７６記載のコンピュータ可読媒体。
【請求項７８】
前記方法は、データファクタリングとデータバックアップのうちの少なくとも一方に用いる、請求項７１記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを検索して既格納データを識別し、既格納データに基づき新たなデータを効率的に格納するシステムならびに方法に関する。これらのシステム及び方法は、一例としてバックアップ及び復元システム内に大規模データリポジトリを生成して保持するのに有用である。
【背景技術】
【０００２】
時間と空間の両方の点での大量のデータの効率的な格納は、バックアップ及び復元システム、特に大量のデジタルデータを保存しなければならない設計における至上関心事である。例えば、ユーザやユーザ群は重要なデータの予想される破壊や変造や事故による欠損に対する予防措置としてその一（又は複数）のコンピュータに記憶させた全データをリポジトリへ定期的（例えば、毎日又は毎週）にバックアップすることを望むことがある。大半のデータが最後のバックアップから９９％を超える回数で変化することはなく、かくして現データの大部分がごく僅かな変化しか伴なうことなくリポジトリ内に早くも検出できる。現バックアップデータに類似するリポジトリ内のこのデータが効率的に配置できるならば、そのときはデータを再度記憶する必要はなく、むしろ変化分だけを記録すればよい。共通データを１回しか格納させないこの処理は、データファクタリングとして公知である。
【０００３】
ファクタリングを実行する大規模バックアップ及び復元システムは、１ペタバイト（ＰＢ）以上をそのリポジトリに有するであろう。例えば、顧客が行った商取引を記録する銀行や複数ユーザ向けの電子メールを保管するインターネット・サービスプロバイダは通常、数百ギガバイトから数ペタバイトに及ぶリポジトリサイズを有する。１ＰＢ＝１０２４ＴＢ（テラバイト），１ＴＢ＝１０２４ＧＢ（ギガバイト），１ＧＢ＝１０２４ＭＢ（メガバイト），１ＭＢ＝１０２４ＫＢ（キロバイト），１ＫＢ＝１０２４バイトであることが、思い起こされよう。換言すれば、ペタバイト（ＰＢ）は２５０バイト、すなわち約１０１５バイトである。
【０００４】
この種の大型システムでは、リポジトリへ付加する入力（バックアップ）データストリームは例えば最大１００ＧＢ以上ある。この入力データはリポジトリ内の既存のデータと類似する可能性は極めて高いが、厳密に同じではない。さらに、バックアップデータストリームはリポジトリ内の既存データとは同一データ境界（例えば、ブロック整列配置）に配置されないであろう。続くファクタリングステップをより効率的なものとするには、バックアップと復元システムはリポジトリ内のデータと入力ストリーム内のデータのいかなる相対的配列にも頼ることなく入力ストリームに充分類似するリポジトリ内のデータの位置を効率的に検出できねばならない。バックアップ及び復元システムはまた入力ストリームを効率的にリポジトリへ追加し、削除或いは破棄した旧入力ストリームをリポジトリから取り除かねばならない。
【０００５】
一般に、データ変更は局所的であると仮定することができる。かくして、例えば１％のデータが変化した場合、そのときはこの種の変化は局所領域に集中し、これらの領域において恐らく主要変化が存在し、一方でデータ領域の膨大な大多数は同じままに留まる。通常（ただし、必ずしもそうとは限らないが）、例えば１％のデータが変化した場合、そのときはそのデータをバイトストリームとしてではなく５１２バイトブロックのストリームとして見れば、１％強のブロックが変化したことになる。しかしながら、入力ストリームとリポジトリ内にはデータの所定整列配置が皆無であるが故に、局所化データ変化を検出すことは重要な仕事となる。
【０００６】
類似データの検索はパターンマッチングの古典的問題の延長と考えられ、そこでは長さｎのうちのテキストＴを長さｍのうちのストリングＰの体裁について検索する。通常、テキスト長ｎは検索ストリング長ｍよりもずっと大である。多くの刊行物がこの問題を効率的に解決するよう試みる多くの検索方法を提示しており、それはテキストＴ内の各位置を試験してストリングＰがそこに出現するかどうか特定する稚拙な手法よりも高速である。パターンを前処理することで、一部アルゴリズムはより良好な計算量を達成している。例えば、以下を参照されたい。
Ｋｎｕｔｈ  Ｄ．Ｅ．とＭｏｒｒｉｓ  Ｊ．Ｈ．とＰｒａｔｔ  Ｖ．Ｒ．著、「Ｆａｓｔ  Ｐａｔｔｅｒｎ  Ｍａｔｃｈｉｎｇ  Ｉｎ  Ｓｔｒｉｎｇｓ（ストリングにおける高速パターンマッチング）」、ＳＩＡＭコンピューティング技報、６巻、ｐｐ３２３−３５０、１９７７年、
Ｂｏｙｅｒ  Ｒ．Ｓ．とＭｏｏｒｅ  Ｊ．Ｓ．著、「Ａ  Ｆａｓｔ  Ｓｔｒｉｎｇ  Ｓｅａｒｃｈｉｎｇ  Ａｌｇｏｒｉｔｈｍ（高速ストリング検索アルゴリズム）」、ＡＣＭ通信、２０巻、ｐｐ７６２−７７２、１９７７年、
Ｋａｒｐ  Ｒ．とＲａｂｉｎ  Ｍ．著、「Ｅｆｆｉｃｉｅｎｔ  Ｒａｎｄｏｍｉｚｅｄ  Ｐａｔｔｅｒｎ  Ｍａｔｃｈｉｎｇ  Ａｌｇｏｒｉｔｈｍｓ（効率的に乱数化したパターンマッチングアルゴリズム）」、ＩＢＭ研究開発技報３１、ｐｐ２４９−２６０、１９８７年
【０００７】
これらのアルゴリズムは全てＯ（ｎ＋ｍ）台の時間内で作動し、それは検索時間がテキストサイズと線形的に大きくなることを意味する。これらのアルゴリズムに付随する一つの問題は、それらが或る制約的限界を越えてスケーリングできない点にある。例えば、１ＧＢテキスト（ジェームズ王聖書の約３００部の複写サイズ）を１秒で行うことができるならば、１ペタバイトテキストの検索はＣＰＵ時間で１２日を上回るものを必用とする筈である。そのリポジトリ内の１ペタバイト（ＰＢ）以上のバックアップ及び復元システムは、この種のアルゴリズムを使用できないものであった。上記アルゴリズムの別の欠点は、それらが厳密な一致だけを公表し、近似的一致を実行するよう簡単には拡張されない点にある。
【０００８】
パターンを前処理する代りに、テキスト自体を前処理し、添え字ツリーとして知られるデータ構造を構築することもできる。これは、下記の刊行物に記載されている。
Ｗｅｉｎｅｒ  Ｐ著、「Ｌｉｎｅａｒ  Ｐａｔｔｅｒｎ  Ｍａｔｃｈｉｎｇ  Ａｌｇｏｒｉｔｈｍ（線形パターンマッチングアルゴリズム）」、スイッチングとオートマタ理論に関する第１４回ＩＥＥＥシンポジウム講演録、ｐｐ１−１１、１９７３年、
Ｕｋｋｏｎｅｎ  Ｅ．著、「Ｏｎ−Ｌｉｎｅ  Ｃｏｎｓｔｒｕｃｔｉｏｎ  Ｏｆ  Ｓｕｆｆｉｘ  Ｔｒｅｅｓ（添え字ツリーのオンライン構成）」、アルゴリズミカ、１４（３）、ｐｐ２４９−２６０、１９９５年
【０００９】
前処理をオフラインで行った場合、前処理時間は問題ではなかろう。その場合、添え字ツリーを用い、続く検索を時間Ｏ（ｍ）内で（すなわち、テキストサイズではなくパターンサイズにのみ応じて）実行することができる。しかし、ここでも厳密な一致しか検出すことができず、さらに添え字ツリーのサイズは、テキストのサイズでは線形であるものの抑制的であり、何故ならそれは原テキストの最大６倍まで大きなものとなろうからである。
【００１０】
バックアップと復元用にハ、近似パターンマッチング用アルゴリズムを使用することが望ましく、何故ならリポジトリ内には入力データの厳密な複製ではなく、むしろ厳密に言って異なる複写で、それでも或る種の定義の類似性規範によれば非常に類似するものが検出し得ることは通常真実だからである。近似パターンマッチングは、以下に記載される如く広範囲に研究されてきた。
Ｆｉｓｃｈｅｒ  Ｍ．ＪとＰａｔｅｒｓｏｎ  Ｍ．Ｓ著、「Ｓｔｒｉｎｇ  Ｍａｔｃｈｉｎｇ  Ａｎｄ  Ｏｔｈｅｒ  Ｐｒｏｄｕｃｔｓ，  ｉｎ  Ｃｏｍｐｌｅｘｉｔｙ  ｏｆ  Ｃｏｍｐｕｔａｔｉｏｎ（計算処理の計算量におけるストリングマッチングと他の製品）」、Ｒ．Ｍ．  Ｋａｒｐ（編集），ＳＩＡＭ−ＡＭＳ講演録、７巻、ｐｐ１１３−１２５、１９７４年、
Ｌａｎｄａｕ  Ｇ．  Ｍ．とＶｉｓｈｋｉｎ  Ｕ．著、「Ｆａｓｔ  Ｐａｒａｌｌｅｌ  Ａｎｄ  Ｓｅｒｉａｌ  Ａｐｐｒｏｘｉｍａｔｅ  Ｓｔｒｉｎｇ  Ｍａｔｃｈｉｎｇ（高速の並列及び直列近似ストリングマッチング）｝、アルゴリズム技法、１０（２）、ｐｐ１５７−１６９、１９８９年、
Ｎａｖａｒｒｏ  Ｇ．著、「Ａ  Ｇｕｉｄｅｄ  Ｔｏｕｒ  Ｔｏ  Ａｐｐｒｏｘｉｍａｔｅ  Ｓｔｒｉｎｇ  Ｍａｔｃｈｉｎｇ（近似ストリングマッチングへのガイド付きツアー）」、ＡＣＭ計算処理調査、３３（１）、ｐｐ３１−８８、２００１年
【００１１】
近年の一つのアルゴリズムは時間Ｏ（ｎ（ｋｌｏｇｋ）１／２）内で作動し、ここでｎはテキストの大きさであり、ｋはパターンとテキストとの間の許容不一致数である。例えば、以下を参照されたい。
Ａｍｉｒ  Ａ．とＬｅｗｅｎｓｔｅｉｎ  Ｍ．とＰｏｒａｔ  Ｅ．著、「Ｆａｓｔｅｒ  Ａｌｇｏｒｉｔｈｍｓ  Ｆｏｒ  Ｓｔｒｉｎｇ  Ｍａｔｃｈｉｎｇ  Ｗｉｔｈ  Ｋ  Ｍｉｓｍａｔｃｈｅｓ（Ｋ個の不一致を用いたストリングマッチング用のより高速なアルゴリズム）」、アルゴリズム技法、５０（２）、ｐｐ２５７−２７５、２００４年
【００１２】
しかしながら、大規模データリポジトリについては、Ｏ（ｎ（ｋｌｏｇｋ）１／２）は受け入れがたい計算量である。バックアップと復元システムへの入力データストリームは、例えば１００ＧＢ以上の長さまでとなることがある。この入力ストリームの大半の同一の複写がリポジトリ内に存在すると仮定した場合、１％のデータしか変化しない状態でも、依然として約１ＧＢの差分が存在し、すなわちｋ＝２３０バイトとなる。リポジトリ内で近似一致位置を検出するため、このアルゴリズムはテキストｎのサイズの約１８０，０００倍に比例する時間を費やすことになる。テキスト長ｎのみが大きくてテキストを一回しか走査しないアルゴリズムが余りに低速になりかねないとの前提では、これを受け入れることはできない。
【００１３】
別のアルゴリズム系は、ハッシュ処理関数に基づくものである。これらは、下記に記載されている如く、ストレージ産業ではＣＡＳ（コンテンツ・アドレスド・ストレージ）として公知である。
Ｍｏｕｌｔｏｎ  Ｇ．Ｈ．とＷｈｉｔｅｈｉｌｌ  Ｓ．Ｂによる米国特許第６，７０４，７３０号、「Ｈａｓｈ  Ｆｉｌｅ  Ｓｙｓｔｅｍ  Ａｎｄ  Ｍｅｔｈｏｄ  Ｆｏｒ  Ｕｓｅ  Ｉｎ  Ａ  Ｃｏｍｍｏｎａｌｉｔｙ  Ｆａｃｔｏｒｉｎｇ  Ｓｙｓｔｅｍ（共通性ファクタリングシステムに用いるハッシュファイルシステム及び方法）」
【００１４】
汎用の理論的枠組みは、以下の通りである。すなわち、リポジトリデータをブロックに分け、指紋或いは署名とも呼ばれるハッシュ値を各ブロックごとに生成する。これら全てのハッシュ値をインデックス内に格納する。バージョンと呼ぶ或る種の所与のデータを配置すべく、所与の入力データはまたブロックに分け、同じハッシュ関数（リポジトリブロックに適用されたもの）を各バージョンブロックに適用する。バージョンブロックのハッシュ値がインデックス内に検出された場合、一致を公表する。
【００１５】
先の方法を上回るＣＡＳの利点は、類似データに対する検索をここでリポジトリテキスト自体に対してではなくインデックスに対し実行し、適当なデータ構造を用いてインデックスを格納する場合、検索時間を著しく低減することができる。例えば、インデックスを２値ツリー或いはより一般的なＢツリーとして記憶させた場合、検索時間はたったのＯ（ｌｏｇ（ｎ／ｓ））となり、ここでｎはテキストサイズであり、ｓはブロックサイズである。インデックスを並べ替えリストに格納した場合、並べ替えリストの内挿検索はＯ（ｌｏｇ（ｌｏｇ（ｎ／ｓ）））なる予想時間を有する。インデックスをハッシュテーブルに格納した場合、予想時間はＯ（１）にまで低減し得、インデックスの検索が特にリポジトリテキストのサイズとは無関係な時間内に一定の予想時間でもって果たし得ることを意味する。
【００１６】
しかしながら、この方式には欠点がある。以前の如く、厳密な一致のみが検出され、すなわち入力データのブロックがリポジトリデータのブロックと同一でありさえすれば、一致が公表される。良質のハッシュ関数の要件の一つは、二つのブロックがごく僅かしか異ならないときでも対応ハッシュ値が全く異なるものになることであり、このことはハッシュ値の良好な分布を保証するのに必用とされる。しかし、バックアップ及び復元アプリケーションにおいて、このことは二つのブロックが近似的にのみ一致する場合に、ハッシュ処理方式がそれらの近似度を検出しないことを意味する。検出されたハッシュ値の近傍での検索が、近似的な一致を明らかにすることもない。さらに、公表された一致が必ずしも二つのブロック間の実際の一致に対応するとは限らない。ハッシュ関数ｈは一般に１対１ではなく、かくして通常ブロックＸとＹをＸ≠Ｙでｈ（Ｘ）＝ｈ（Ｙ）の如く検出することがあり得る。
【００１７】
さらにまた、リポジトリ更新とネットワーク上でのデータ送信に必用な帯域要件もまた、改善を求める機会を提示している。
【００１８】
これらの問題は、ブロックのサイズｓを如何に選択するかの難題を生み出す。大ブロックサイズを選択すれば、より小さなインデックスが得られ（何故なら、インデックスはｎ／ｓ個の要素を記憶する必用があるから）、誤一致の可能性は減るが、同時に一致ブロックを検出する可能性は減り、そのことが結局は圧縮比を低減する（非一致ブロック及び一致したものへのポインタだけを格納するハッシュ関数を圧縮法に用いるものと仮定）。他方、小ブロックサイズを選択すれば、全体的な圧縮効率は増大するかもしれないが、誤一致の可能性もまた増え、数が増えたブロックがかくも大きなインデックスを必用とし、インデックス自体がストレージ問題となることがある。
【発明の開示】
【発明が解決しようとする課題】
【００１９】
要するに、これらの問題に対処する多くの手際の良い方法が示唆されてきたが、それらは全て結局は大型サイズのデータリポジトリ内のデータ量に対し妥当な時間と空間にてスケーリング不能となる欠点がある。
【課題を解決するための手段】
【００２０】
本発明は、効率的なデータ検索と記憶及び／又は低減のためのシステムならびに方法に関する。さらに、システム間で送信されるデータ量は、エラー耐性のある遠隔差分処理の実行により低減される。
【００２１】
本発明の一実施形態に整合するシステムと方法は、定義された類似性測度を用いて入力データに類似するデータ位置について２値非変換データのリポジトリを検索することができ、リポジトリのサイズとは無関係に入力データのサイズに線形の時間内にリポジトリサイズの小部分に比例する空間内で斯くすることができる。
【００２２】
本発明の他の実施形態に整合するシステムと方法はさらに、リポジトリの類似データセグメントと入力データを分析し、リポジトリ及び入力内の共通データの順序や位置に関係なくそれらの共通（同一）部分を効率的に特定し、セグメントサイズと線形な時間内にかつ一定の空間内で斯くすることができる。
【００２３】
幾つかの実施形態になるシステム及び方法は、データの記憶に使用するネットワーク帯域量の低減をもたらす。このシステム／方法は、送信先に既に存在するデータをネットワークを介して送信する必要性を取り除く。一実施形態では、データリポジトリは第１の位置に位置する。第２の位置は、それがリポジトリへの格納を望む新規データを有する。新規データと既にリポジトリにあるデータとの比較を、行う。都合よくは、新規データの全てを比較用にリポジトリへ送信せず、リポジトリに既に格納されたデータを送信することで恐らくは帯域を無駄にせずに、リポジトリデータと新規データとの比較は新規データ全体よりもずっと小さなサイズの新規データの表現を送信することで、ただしリポジトリデータに対する新規データの比較が類似性或いは差分を特定する上で基礎とすることのできる十分な情報を用いて達成される。
【００２４】
一実施形態では、一つの方法はリポジトリデータ内で入力データの識別を含み、リポジトリデータがリポジトリデータチャンクを含み、入力データが入力データチャンクを含み、各リポジトリデータチャンクは１以上のリポジトリデータチャンク識別特性（ＲＣＤ）の対応集合を有しており、この方法は、各インプットデータチャンク毎に、１以上の入力データチャンク識別特性（ＩＤＣ）集合を特定するステップと、被特定ＩＤＣ集合を１以上のＲＤＣ集合と比較するステップと、１以上のＲＤＣ集合に対し被特定ＩＤＣ集合を比較する関数として入力データチャンクに類似するリポジトリデータチャンクを識別するステップとを含む。
【００２５】
一実施形態では、入力データは第１の位置に位置し、リポジトリデータは遠隔位置に位置し、本方法はさらに、第１の位置のＩＤＣ集合を特定するステップと、被特定ＩＤＣ集合を第１の位置から遠隔位置へ送信するステップと、被特定ＩＤＣ集合を遠隔位置の１以上のＲＤＣ集合と比較するステップとを含む。
【００２６】
別の実施形態では、第１の位置は第１のコンピュータであり、遠隔位置は第１のコンピュータとは異なる遠隔コンピュータであり、第１のコンピュータと遠隔コンピュータは互いにネットワーク接続通信状態にあり、リポジトリデータは遠隔コンピュータを介してアクセスするデータリポジトリ内に格納される。
【００２７】
ＲＤＣ集合に対するＩＤＣ集合の類似性の識別は類似性閾値の関数であり、類似性閾値はＩＤＣ集合内の所定数の識別特性がＲＤＣ集合内に検出されたときに合致する。
【００２８】
識別特性集合の特定は、個別データチャンク内で１以上のデータ部分を識別するステップと、個別データチャンクの１以上のデータ部分のそれぞれについて算術的ハッシュ値を算出するステップとを含む。
【００２９】
本発明の別の実施形態によれば、入力データに類似するデータについてリポジトリデータ内を検索する方法は、リポジトリデータを１以上のリポジトリチャンクへ分割するステップと、各リポジトリチャンクごとに、リポジトリ識別特性（ＲＤＣ）の対応集合を算出するステップで、各ＲＤＣ集合が少なくとも一つの識別特性を含む前記ステップと、各ＲＤＣ集合と対応リポジトリチャンクに関連するインデックスを保持するステップと、入力データを１以上の入力チャンクに分割し、各入力チャンクごとに、入力識別特性（ＩＤＣ）の対応集合を算出するステップで、ＩＤＣ集合が少なくとも一つの識別特性を含む前記ステップと、ＩＤＣ集合をインデックス内に格納された１以上のＲＤＣ集合と比較するステップと、ＩＤＣ集合内の識別特性の類似性閾値ｊがインデックス内に保管されたＲＤＣ集合内に検出された場合、入力チャンクと対応リポジトリチャンクとの間に類似性が存在すると判定するステップとを含む。
【００３０】
ＲＤＣ集合とＩＤＣ集合はそれぞれ、個別データチャンクを複数のシードに区画するステップで、各シードを個別データチャンクの小部分としてシード系列内に順列配置するステップと、各シードにハッシュ関数を適用して複数のハッシュ値を生成するステップで、各シードが一つのハッシュ値をもたらす前記ステップと、複数のハッシュ値の部分集合を選択するステップと、選択されたハッシュ値の部分集合に対応するシード系列内でシード位置を特定するステップと、被特定位置へ関数を適用し、シード系列内の対応する他の位置を特定するステップと、識別特性集合を特定された他の位置のシードのハッシュ値として規定するステップとにより得る。
【００３１】
別の実施形態は、リポジトリデータ内で入力データを識別するシステムで、リポジトリデータがリポジトリデータチャンクを含み、入力データが入力データチャンクを含み、各リポジトリデータチャンクが１以上のリポジトリデータチャンク識別特性（ＲＤＣ）の対応集合を有するシステムであり、このシステムが、各入力データチャンクごとに１以上の入力データチャンク識別特性（ＩＤＣ）集合を特定する手段と、各入力データチャンクごとに、被特定ＩＤＣ集合を１以上のＲＤＣ集合と比較する手段と、各入力データチャンクごとに、１以上のＲＤＣ集合に対し被特定ＩＤＣ集合を比較する関数として入力データチャンクに類似するリポジトリデータチャンクを識別する手段とを備える。
【００３２】
本システムは、一実施形態ではさらに、各入力データチャンクごとに、個別チャンクの全データを比較することで入力データチャンクと被特定類似リポジトリデータチャンクとの間の１以上の差分を特定する手段を含む。
【００３３】
識別特性集合の特定手段は、一実施形態では、個別データチャンク内で１以上のデータ部分を識別する手段と、個別データチャンクの１以上のデータ部分のそれぞれについて算術的ハッシュ値を算出する手段とを備える。
【００３４】
別の実施形態では、本システムはさらに、集合内でｋ個の最大算術的ハッシュ値を特定する手段で、ｋが所定数である前記手段と、ｋ個の最大ハッシュ値のそれぞれについて個別データ部分を識別する手段と、識別特性集合をｋ個の最大算術的ハッシュ値のそれぞれに対応する各データ部分に対する次の系列データ部分の算術的ハッシュ値と特定する手段とを含む。
【００３５】
識別特性は、ハッシュ関数とローリングハッシュ関数のうちの一方により特定し、モジュラーハッシュ関数とＲＤＣ集合は２値ツリーとＢツリーと並べ替えリストとハッシュテーブルのうちの少なくとも一つとしてインデックス内に格納する。
【００３６】
入力データに類似するデータについてリポジトリデータ内を検索するシステムで、このシステムが、リポジトリデータを１以上のリポジトリチャンクに分割する手段と、各リポジトリチャンクごとに、リポジトリ識別特性（ＲＤＣ）の対応集合を算出する手段で、各ＲＤＣ集合が少なくとも一つの識別特性を含む前記手段と、各ＲＤＣ集合に関連するインデックスと対応するリポジトリチャンクとを保持する手段と、入力データを１以上の入力チャンクへ分割する手段で、各入力チャンクごとに、入力識別特性（ＩＤＣ）の対応集合を算出し、ＩＤＣ集合が少なくとも一つの識別特性を有し、ＩＤＣ集合をインデックス内に保管された１以上のＲＤＣ集合と比較し、ＩＤＣ集合内の識別特性の類似性閾値ｊがインデックス内に保管されたＲＤＣ集合内に検出された場合、入力チャンクと対応リポジトリチャンクとの間に類似性が存在すると特定する前記手段とを含む。
【００３７】
各ＲＤＣ集合とＩＤＣ集合は、個別データチャンクを複数のシードに区画し、各シードを個別データチャンクの小部分としてシード系列内に順列配置し、各シードにハッシュ関数を適用して複数のハッシュ値を生成し、各シードが一つのハッシュ値をもたらし、複数のハッシュ値の部分集合を選択し、選択されたハッシュ値の部分集合に対応するシード系列内でシード位置を特定し、被特定位置へ関数を適用し、シード系列内の対応する他の位置を特定し、識別特性集合を被特定の他の位置のシードのハッシュ値として規定することにより得る。
【００３８】
ハッシュ値の部分集合は、ｋ個の最大ハッシュ値を識別することで選択し、対応する他の位置の特定に適用する関数は、シード系列内の次のシードを識別するものである。
【００３９】
さらに別の実施形態では、リポジトリデータ内で入力データを識別する方法で、リポジトリデータがリポジトリデータチャンクを含み、入力データが入力データチャンクを含み、各リポジトリデータチャンクが対応する１以上のデータチャンク識別特性（ＲＤＣ）集合を有する方法をコンピュータに実行させるコンピュータ実行可能命令でもってエンコードしたコンピュータ可読媒体であり、前記方法が、各入力データチャンクごとに、１以上の入力データチャンク識別特性（ＩＤＣ）集合を特定するステップと、被特定ＩＤＣ集合を１以上のＲＤＣ集合と比較するステップと、入力データチャンクに類似するリポジトリデータチャンクを被特定ＩＤＣ集合を前記１以上のＲＤＣ集合と比較する関数として識別するステップとを含む。
【００４０】
さらに、コンピュータ可読媒体は、入力データに類似するデータをリポジトリデータ内で検索する方法をコンピュータに実行させるコンピュータ実行可能命令でもってエンコードし、前記方法が、前記リポジトリデータを１以上のリポジトリチャンクに分割するステップと、各リポジトリチャンクごとに、リポジトリ識別特性（ＲＤＣ）の対応集合を算出するステップで、各ＲＤＣ集合が少なくとも一つの識別特性を備える前記ステップと、ＲＤＣの各集合に関連するインデックスと前記対応リポジトリチャンクとを保持するステップと、前記入力データを１以上の入力チャンクに分割し、各入力チャンクごとに、入力識別特性（ＩＤＣ）の対応集合を算出し、ＩＤＣ集合が少なくとも一つの識別特性を含み、ＩＤＣ集合をインデックス内に格納された１以上のＲＤＣ集合と比較し、ＩＤＣ集合内の識別特性の類似性閾値ｊがインデックス内に格納されたＲＤＣ集合内に検出された場合、入力チャンクと対応リポジトリチャンクとの間に類似性が存在すると特定するステップとを含む。
【００４１】
さらにまた、コンピュータ可読媒体は、ＲＤＣ集合とＩＤＣ集合のそれぞれを得るステップを下記により実行するコンピュータ実行可能命令をさらに含み、すなわち個別データチャンクを複数のシードへ区画し、各シードを個別データチャンクの小部分としてシード系列にて順列配置し、各シードにハッシュ関数を適用して複数のハッシュ値を生成し、各シードが一つのハッシュ値をもたらし、複数のハッシュ値の部分集合を選択し、ハッシュ値の選択された部分集合に対応するシード系列内でシード位置を特定し、被特定位置に関数を適用してシード系列内に対応する他の位置を特定し、識別特性集合を特定された他の位置のシードのハッシュ値として規定する。
【００４２】
ハッシュ値の部分集合は、ｋ個の最大ハッシュ値を識別することで選択され、対応する他の位置を特定するのに適用する関数は、シード系列内で次のシードを特定するものである。
【発明を実施するための最良の形態】
【００４３】
本明細書内に取り込んでその一部を構成する添付図面は、本発明の様々な実施形態と態様を示すものであり、説明と合わせ本発明の幾つかの原則を説明するのに役立つ。
【００４４】
以下の実施形態にて使用する如く、リポジトリはメモリ内に格納するデジタルデータの収集及び／又はコンピュータ参照用のストレージである。そのサイズに限界はなく、１ＰＢ以上のオーダーとし得る。特定用途にあっては、データは２値非変換データとして保管する。入力データはリポジトリデータと同種或いは異種とすることができる。入力データは、バージョンとも呼ばれる。特定用途にあっては、バージョンとリポジトリをそれぞれチャンクに分割する。チャンクサイズｍは、例えば３２ＭＢ等のパラメータである。用語シードは、バイト等の連続系列データ要素を指す。シードサイズｓもまた、例えば５１２バイト或いは（他の非限定例では）４ＫＢやさらに８ＫＢものパラメータである。一般に、シードサイズｓはチャンクサイズｍよりもずっと小さい。
【００４５】
本発明の幾つかの実施形態によれば、ハッシュ関数が用いられる。ハッシュ関数は、或る種大空間の要素を第１の空間の要素にハッシュ値と呼ぶ数値を割り当てることで或る種の小空間の要素へ写像する。ハッシュ関数は通常、第１の空間の基本要素の或る種の数値変換を入力として使用する算術関数である。「良質な」ハッシュ関数は、ほぼ常時第１の空間の要素内の最も軽微な変化についてさえ統計的に関連のないハッシュ値を生成する。
【００４６】
以下の実施形態では、モジュラーハッシュ関数を使用する。しかしながら、この使用は非限定例である。公知の如く、モジュラーハッシュ関数は、或るストリーム内のｓ個の連続する基本要素のハッシュ値が既知である場合、一つの基本要素後に始まる（かくして基本要素の先の系列に重複する）ストリーム内のｓ個の基本要素のハッシュ値をＯ（１）演算により算出できる特性を有する。こうして、チャンク内の全てのシードの全ハッシュ値はＯ（ｍ・ｓ）ではなくＯ（ｍ）演算により算出できる。この特性が故に、ハッシュ関数はローリングハッシュ関数と呼ばれる。本発明が特定のローリングハッシュ関数或いは一般のハッシュ関数の使用に拘束されないことに、留意されたい。
【００４７】
インデックスは、効率的な検索を容易にするデータ構造である。それは、空間効率が良くなければならない。一部用途（本実施形態等）では、内挿や消去等の効率的な動的演算をサポートしなければならない。一つのインデックスをハッシュテーブルにより実装し、かくして検索と内挿と消去をＯ（１）演算それぞれにサポートする。以下に説明する本発明の幾つかの実施形態によれば、インデックスは或るシードのハッシュ値であるキーにより索引付けされ、各キー値がそれが生成された一のシード（或いは複数のシード）を識別する。
【００４８】
図１中、本発明の一実施形態になる汎用ストレージシステム・アーキテクチャが図示してある。本発明は、無論、この特定のシステムアーキテクチャに拘束されない。図１中、ストレージ領域ネットワークＳＡＮ（１２）が４個のバックアップサーバ（１１）をサーバ（１３）へ接続している。サーバ（１３）は、仮想テープインタフェース（１４）とＲＡＭメモリ（１５）とを含む。インデックスは、ＲＡＭ（１５）内に格納される。サーバ（１３）は、１以上の（恐らくは外部）二次ストレージ装置に格納したリポジトリに接続してある。
【００４９】
本発明がストレージ領域ネットワーク（ＳＡＮ）とその特定の技術的特徴、例えばファイバーチャンネルに限定されないことに、留意されたい。これに限定はされないがインターネットプロトコル（ＩＰ）とＴＣＰ／ＩＰを含むサーバ間のネットワーク化通信を容易にするのに任意のネットワーク技術を使用できることは、当業者には理解されよう。図１に続く説明はＳＡＮを引用するものであるが、これは例示目的に合わせただけで、特許請求の範囲に明示的に記載していない限り本発明のどの実施形態も限定すべきではない。
【００５０】
図２中、フローチャート（２０）は本発明の一実施形態になるシステム寿命サイクルのステップを示す。図示の如く、処理は空インデックス（２１）から始まる。インデックスの内容と目的は、以下に詳述する。次に、システムはバージョン（２２）を受信するまで待機状態に入り、その後にバージョンを以下にさらに詳しく説明する仕方で処理（２３）する。バージョンを処理した後、システムは別のバージョンを受信するまで待機状態（２２）へ復帰する。手順（２２，２３）は、より多くの入力バージョンが受信される限り続けられる。入力バージョンは、リポジトリ及び／又はインデックスを更新することもそうしないこともできる。ここに記載する一つのファクタリング応用例では、入力バージョンが新規（リポジトリ内のデータに充分には類似しない）と認識された場合、それはリポジトリ内にそのまま組み込まれる。他方、入力バージョンがリポジトリ内の既存のデータに十分類似すると認識された場合、それはリポジトリデータでもってファクタリング処理され、バージョンの不一致部分だけが格納される。前記から明らかな如く、システムが長く作動するほど、リポジトリのサイズも大きくなる。幾つかの用途にあっては、リポジトリサイズは数百ギガバイトから数ペタバイトに及ぶ。かくして、入力データに十分類似するリポジトリデータを効率的仕方で配置或いは識別する必用がある。さもなくば、処理時間は余りに長引き、システムは経済的にも商業的にも実施できなくなる。
【００５１】
類推するに、説明の代替方法として限定は意図しないが、互いに非常に異なる文書Ａと文書Ｂの二つの文書についての筋書きを考える。初期化したシステム、すなわち空のリポジトリでは、本発明の一実施形態によれば、各文書ＡとＢはチャンク或いはセクションに分割して格納する（チャンクは以下にさらに詳しく説明する）。この筋書きの説明を簡略化するため、チャンクは各文書Ａ，Ｂが各半体ごとに２個のチャンクを有する４個のチャンク長となるサイズとする。そこで、８個のチャンクをリポジトリ内に格納する。本実施形態によれば、これらのチャンクはファイルネームに基づいて格納されないことに留意されたい。これらのチャンクは、リポジトリがチャンクから文書を再生できるようにして格納される。
【００５２】
次に、文書Ａの最初の半分を切り貼りすることで新規文書Ｃを（文書Ｃへ）生成し、続いて他の追加データを追加することなく文書Ｂの残り半分を切り貼りすることで（文書Ｃへ）生成するものとする。その文書Ｃが文書Ａと文書Ｂそれぞれに対し実質的類似性を有すると理解はできるものの、各文書から実質的差分もまた有することになる。
【００５３】
本実施形態は、文書Ｃをその４個のチャンクに分け、類似チャンクについてリポジトリを検索することにする。類似チャンクは、文書Ｃの最初の二つのチャンクと文書Ａの最初の二つのチャンクの間と、文書Ｃの最後の二つのチャンクと文書Ｂの最後の二つのチャンクとの間とで識別するものとする。システムは類似チャンクを識別するだけで、厳密なチャンクは識別しないため、システムはそこで類似チャンク間のどんな差分（ファクタリング）も特定することになる。ここで、類似のチャンクは同一である。かくして、この筋書きでは、文書Ｃは事実上既に格納（Ａ及びＢチャンクとして）されており、それを格納する、すなわちそれを再生し検索できるのに必用な空間は文書Ｃ全体の格納よりはずっと少量となる。ファイルネーム準拠システムでは、文書Ｃの４個のチャンクが再度保管され（文書Ｃとして）、これらチャンクがシステム内に既に保管されているが故にそれは冗長となろう。
【００５４】
文書Ｃを再生するため、本実施形態になるシステムは文書Ａの最初の半分について格納した二つのチャンクと文書Ｂの次の半分について記憶した二つのチャンクとを検索することになる。
【００５５】
別の筋書きでは、新規文書Ｄは文書Ａの最初の半分を切り貼りすることで生成され（文書Ｄへ）、続いて文書Ｂの残りの半分を切り貼りすることで生成される（文書Ｄへ）。その結果、文書の表題は他の変更を一切伴なうことなく、「Ｔｈｅ  Ｌｉｆｅ  ｏｆ  Ｊｏｈｎ  Ａｄａｍｓ（ジョンアダムスの生涯）」から「Ｔｈｅ  Ｌｏａｎ  ｔｏ  Ｊｏｂｓ  Ａｐｐｌｅ（ジョブスアダムスへの借金）」に変更される。ここでも、文書ＡとＤの間及び文書ＢとＤの間に実質類似性が存在することを理解できるだけでなく、実質差分もまた理解することができる。
【００５６】
本システムは、文書Ｄを４個のチャンクへ分割し、続いて既に格納されている類似チャンクを検出する。この場合、システムは文書Ａから最初の二つのチャンクを検出し、文書Ｂからの後の二つのチャンクは文書Ｄのチャンクに類似するとして検出する。次に、システムは文書Ｄの最初のチャンクとその個別類似チャンクとの間に差分が存在すると判定することになる。差分、すなわち表題における変更場所が特定されることになる。かくして、文書Ｄは文書Ａからの最初の二つのチャンクと文書Ｂからの後の二つのチャンクとしてリポジトリ内で表わされることになるが、ただし識別、すなわち文書Ｄの最初のチャンクが被識別類似チャンク、すなわち本例の場合文書Ａと関連する第１のチャンクとは異なる箇所のデルタすなわち差分とその内容とを伴なう。かくして文書Ｄの表現に必用な空間量は、そこでリポジトリ内に文書Ｄを全て保管するよりはずっと少量となる。
【００５７】
前記した単純な筋書きはファイルネーム、すなわち文書を引用して説明したが、本発明の様々な実施形態は任意のファイルシステムに対しガラス張りであり、何故なら比較はさらに詳しく後述するチャンクと特性の関数となるからである。本システムを用いることで、文書Ａ，Ｂ，Ｃ，Ｄはファイル準拠或いはファイルネーム準拠システム内と同様、同一ユーザに関連付けられないが、類似性を特定し、効率的な保管を依然として達成することができる。バックアップシステム或いはファイルシステムに基づき類似性を検出する試みは、上記筋書きにおいて文書Ａと文書Ｂと文書Ｃと文書Ｄの部分間での類似性を特定できない筈である。都合よくは、本発明は最も知られたファイルシステムに対しガラス張りとする。
【００５８】
図３は、本発明の一実施形態になるバージョン処理（図２におけるステップ２３）の一方法を詳しく示すものである。バージョンを受信（３１）すると、それはより小さなチャンク（３２）、すなわちチャンクごとに３２ＭＢに分割される。第１の入力チャンクを選択（３３）し、この入力チャンクを処理してリポジトリ内で実質類似するチャンクとその位置を検出（３４）する。このステップ（３４）を、図４を参照してより詳しく以下に説明する。類似リポジトリチャンクを検出したことで、バージョンチャンクをさらに処理（３５）し、それは本実施形態によればリポジトリとバージョンチャンクのファクタリングを必然的に伴なう。この処理は、バージョン内にそれ以上のチャンクが存在せず、処理が終わる（３８）まで、入力バージョンの追加のチャンクについて反復（３４〜３７）する。
【００５９】
本発明の異なる実施形態によれば、入力チャンクが所定のリポジトリデータに一致すると、続く入力チャンクを先ず試験して一致リポジトリチャンクに続くリポジトリデータとの一致が試験され、かくしてそのアプリケーション専用処理（３５）へ直接進む。他方で、以下の入力チャンクがこの試験に失敗した場合、それを完全に処理してその類似リポジトリデータを検出（３４，３５）する。
同期アルゴリズムとファクタリング
【００６０】
図４は、本発明の一実施形態に従い、リポジトリ内で十分類似するチャンクの位置を効率的に検出するステップと続くファクタリングステップの一つの手順を示すものである。入力（バージョン）チャンクに対する類似リポジトリチャンクを検出すのに使用するアルゴリズムをここでは同期アルゴリズムと呼ぶが、それはその出力がリポジトリとバージョン内で共通点を含むからであり、このことはそれまで二つの不整列配置データセグメントであったものを効果的に（同一のデータ境界上に）整列配置する後処理に有用である。
【００６１】
入力チャンクサイズｍ、すなわち３２ＭＢは次の仕方で処理（４１）する。先ず、バージョンチャンクのｋ個の識別特性集合（４２）を算出し、ここでｋは以下に説明するこのアルゴリズムのパラメータ（通常は数十台）であり、ｋ≪ｍ（チャンクサイズ）である。一実施形態によれば（特定の例についてさらに下記に説明する如く）、ｋ個の識別特性集合を下記の如く算出する（図４には図示せず）。
（１）入力データチャンクの各シードについてハッシュデータを算出する。シードは、ストリング長ｍよりも実質小さな任意のサイズｓ、つまり４ＫＢとすることができる。この非限定実施形態により、各シードごとのハッシュ値は各反復において１バイトだけ順方向へ動かすローリングハッシュ関数を用いて算出する。ハッシュ値は、この範囲内に収容された４ＫＢのシードサイズについて各反復ごとに算出する。本例により、入力チャンクサイズがｍ＝３２ＭＢであって、シードサイズがｓ＝４ＫＢである場合、各チャンクごとに３３，５５０，３３７（３２ＭＢ−４ＫＢ＋１）個のハッシュ値が得られ、それぞれチャンク内でそれぞれ可能なバイトオフセットにある。ローリングハッシュ関数はｓバイトのシードに対するハッシュ値が一旦既知となると、次のｓバイトに関するハッシュ関数の計算（すなわち、先のｓバイトに対し１バイトだけシフトさせ、かくしてｓ−１の重複バイトを有するｓバイト）はＯ（ｓ）ではなくＯ（１）演算によって行うことができる。本発明は、ハッシュ関数の使用にも、或いはローリング型のハッシュ関数にも拘束されない。
（２）次に、ｋ個の最大ハッシュ値、すなわちｋ個の個別シードの降順の最大のハッシュ値を（３３，５５０，３３７）の算出ハッシュ値の中から選択する。これらｋ個のシードが、ｋ個の最大シードを構成する。その後、ｋ個の最大シードに１バイトだけ続く（ｓ−１バイトだけ重複する）ｋ個の個別シードのｋ個のハッシュ値を、それぞれ選択する。これらｋ個のシードはｋ個の識別シードを構成し、それらの対応ハッシュ値がｋ個の入力識別特性を構成する。最大値がそれ自体不均一な確率分布を有することに、留意されたい。しかしながら、良質のハッシュ関数を使用した場合、続くｋ個の値の確率分布は非常に均一に近く、それ故に意図した用例にとって実質より良好なものとなる。均一分布とは、ｋ個の識別特性が或る範囲の数の上で数としてほぼ均一に分布することを意味する。
【００６２】
本発明は上記した仕方で識別特性を算出することによって拘束されないことに、留意されたい。より広域に亙りエラー耐性があって良好に拡散した特性を生み出し、所与のチャンクに対し反復可能なあらゆる選択肢が、本発明の本実施形態に使用可能である。
【００６３】
定義
【００６４】
エラー耐性：チャンクに割り当てた特性が、チャンクが穏当な変化を受ける限り、かなり一定のままに留まる（例えば、そのシードの２５％まで）。
【００６５】
良好に拡散：特性位置がチャンク全体（地勢的に拡散）に良好に拡散（ほぼ一様に）している。
【００６６】
反復可能：一定の形式のチャンクがほぼ常に同一の特性を割り当てられる。
【００６７】
この種の方法は、チャンクシードの部分集合だけを考慮することになろう。例えば、特性の選択はチャンクの間隔とすることができ、その距離はしかるべき実施形態に従って算術的或いは幾何学的に規定される。他方法は、前述の方法等の全てのチャンクシードに配慮するものである。
【００６８】
本実施形態によれば、特性間の最小の地理的（位置的）拡散を強要し、かくして適用範囲が改善される。一般に、算出されたシード値の算術特性に基づきあらゆる反復可能な選択肢が適用可能である。
【００６９】
例えば、ｋ個の最小ハッシュ値、すなわち最小のハッシュ値、すなわちチャンク内で算出された全てのハッシュ値の中央値に最も近いｋ個のハッシュ値又は或る所定の定数に最も近いｋ個のハッシュ値さえ選択することができる。別の例はｋ個の特性を対の総和として選択し、かくして第１対が最小値と最大値を構成し、第２対が第２の最小値と第２の最大値を構成する等することができる。特定用途に応じて、他の変形例が適用可能である。
【００７０】
また、最小値に対応するシードの１バイトシフトを用いる代りに、位置及び／又は算出ハッシュ値に応じて、或る種の他の所定定数シフトや、或いはさらに異なるシフトを用いることもできる。最大のハッシュ値と１バイトシフトの使用例は、かくして唯一の可能な実施形態となる。
【００７１】
識別特性を算出するこの一つの手順の具体例を、以下に示す。
【００７２】
本実施形態では、リポジトリにはインデックスが関連付けてあり、このインデックスが各リポジトリチャンクごとに、ｎ個、ただしｎ≦ｋの識別特性を格納している。ｎ個の識別特性はそれぞれ１バイトが続く（ｓ−１バイトが重複する）シードサイズｓバイトのｎ個のハッシュ値であり、それぞれ、シードはリポジトリチャンク内のシードの中からｎ個の最大ハッシュ値を有する。ｋ個の識別特性を各入力チャンクごとに算出するも、インデックスが各リポジトリチャンクごとにたったｎ個の識別特性しか含まない理由を、以下に説明する。インデックスはさらに、各識別特性のリポジトリ内に位置を格納する。本発明は、特定のインデックス構造と前述したコンテンツによって拘束されることはない。
【００７３】
インデックス構造をより良く理解するため、図５は本発明の一実施形態に従い、インデックス（４４）と、入力チャンク（５１）内の（例えば５個の）識別特性集合（５５ｉ〜５９ｉ）と実質類似するリポジトリチャンク（５２）内の（５個の）対応識別特性集合（５５ｒ〜５９ｒ）との間の対応を図解して示すものである。リポジトリチャンク５２はリポジトリ（５３）の一部を形成しており、ここでは膨大な数のチャンク５０が格納してある。識別特性は、前述の如く、入力チャンク（５１）内の５個の三角形（５５ｉ）〜（５９ｉ）が示す良好に拡散されたシードから生成する選択されたハッシュ値集合である。同じ５個の識別特性（５５ｒ〜５９ｒ）が、実質類似のリポジトリチャンク（５２）内に図示してある。このインデックス（４４）は、リポジトリチャンク（チャンク（５２）のうちの５個）と関連する位置データ（例えば、リポジトリ内のチャンク（５２）の相対的位置）の識別特性を保持している。かくして、類似性検索期間中、リポジトリチャンク（５２）の値が入力チャンク（５１）のそれに一致すると検出されたときに、リポジトリ内の検出されたチャンク（５２）の位置は関連位置データを抽出することで容易に知れることになる。インデックス（４４）は、新規バージョンがリポジトリ内に導入され、各バージョンのチャンクに関連するハッシュ値（前記した仕方で算出）がインデックスへ追加されるにつれ、連続的に成長する。
【００７４】
図４を参照するに、インデックス（４４）は最大ｎ個の一致が検出されるまで識別特性のハッシュ値について検索する（ステップ４３）。より具体的には、入力チャンク集合のｋ個の識別特性のそれぞれを一致を検出すべくインデックス内を検索し、最大ｎ個の識別特性が一致するまでこれを継続する。ここで、ｊ（ｊ≦ｎ）が一致した識別特性の数を指すものとする。明らかに、入力チャンクのｋ個の識別特性の全集合が検査される（すなわち、ｋ個の値の中からｉ個だけを検査する）前にｎ個の一致が検出された場合、残り（すなわち、本例ではｋ−ｉ）を検査する必用性は不要となる。
【００７５】
これらｊ個の一致を検出する計算処理の計算量は低く、何故なら最大でｋ回のインデックス（本例では、ハッシュ値）検索を必要とし、各回ともＯ（１）の計算量であるからである。
【００７６】
一実施形態では、ｊ＞２の一致識別特性を有するバージョンチャンクは１以上のリポジトリチャンクに一致すると見なされる。他方で、ｊ＜２の一致識別特性を有するバージョンチャンクはリポジトリチャンク内のいずれとも一致しないと見なされる。たった一つの一致（ｊ＝１）は統計的に有意味とは見なされず、何故ならその発生は非常に大きなリポジトリにとって稀な事象ではないだろうからである。
【００７７】
バージョンチャンクの識別特性がリポジトリチャンクの複数の識別特性に合致し得ることに、留意されたい。二つのバージョン識別特性が互いに良好に十分離れた二つのリポジトリ識別特性と一致し、二つの個別リポジトリチャンクに属する可能性もある。そこで、バージョンチャンクが複数のリポジトリチャンクと一致する可能性が前記のことから生ずる。この種の各リポジトリチャンクｉについて、ｈｉをこの種の一致識別特性の数とする。一実施形態では、リポジトリチャンクｉとバージョンチャンクとの間の類似性レベルは、ｈｉとｎの間の比により計測され、ここでこの比が閾値を上回る場合、リポジトリチャンクはバージョンチャンクに実質類似すると考えることができる（図４のステップ４５）。
【００７８】
例えば、リポジトリ内に保管された２値データの旧バージョンに比べ若干の変更を受けたバージョンについて考察する。通常、この種の変化は幾つかの局所的変化を受けるシードの僅かな百分率に反映される。この正味の影響は、所与のチャンクについてはその大半が無傷のまま残る点にある。チャンクの識別特性の位置は適切に拡散するよう選択（地勢的にはチャンク全体に）してあるため、局所的変化はあるにせよごく僅かしか識別特性に影響せず、その残りは変化しないことになる。換言すれば、この表現方法はエラー耐性があり、何故なら一（又は複数）の局所的変化の大部分でさえ多くの識別特性を手付かずのまま残すからである。統計的には、しかるべき実施形態では、検索によって少なくとも二つの一致を有するリポジトリチャンクを見出した場合（後者の例を意味、すなわちｊ≧２）、そのときはリポジトリとバージョンチャンクは十分に類似し、さらなる比較に値することになる。
【００７９】
選択実施形態では、バージョンチャンク（結局はリポジトリの一部ともなる）上の識別特性の均一な拡散を改善すべく、チャンクはさらにｕ個の下位チャンクに分割する。各下位チャンクごとにｋ／ｕ個の識別特性を計算し、それらが合わせｋ個の識別特性を構成する。
【００８０】
選択実施形態では、識別特性の各一致の重要性を改善すべく、高度循環型識別特性リストを保持する。識別特性を或る閾値を超える一定数のバージョンチャンクについて算出すると、それはデータ内の一部系統的パターンに属すると見なされ、かくして低減された識別情報をもたらす。そこで、それを循環値リストに追加し、続くチャンクに対しそれが生ずる際にその使用を排除する。識別特性の算出時に、その値をリスト内の存在ごとに検査し、それが存在する場合は、それを廃棄して別の識別特性をその場で計算する。
【００８１】
説明した実施形態では、ｎ個超からｋ個までの識別特性を恐らくはインデックス内で検索し、その間に各リポジトリチャンクに対しｎ個だけをインデックス内に格納する。この実施形態によれば、リポジトリに対しバージョンチャンクに対する変化により引き起こされる最大のハッシュ値に対する恐らく二つの影響が存在する。すなわち、１）その対応シードを構成するデータが修正されているが故に最大のハッシュ値が出現し得る。２）変更されたデータがより高次の最大値を導入し、依然存在する最大値を変位させ得る。第２の効果を含む事例では、より多くの識別特性の検索がより多くの安定性を提供し、何故なら先の最大値は消滅せず、それはただ置換されるだけだからである。これら二つの影響は、降順及び／又はｋ＞ｎ選択用に最大値を選択する理由となる。
【００８２】
図６は、データに対する変更にもかかわらず識別特性を実質保存する仕方の一例を示す。本例では、データはｍｐ３データであり、リポジトリサイズは２０ＧＢ、バージョンサイズは数万チャンク、チャンクサイズは３２ＭＢ、各チャンクごとに算出される識別特性の数は８である。図示の検索結果の三次元表現では、水平軸（幅）は検出されたキー（識別特性）の数と検索した数を表わす。左方余白の軸（深さ）は、バージョン内で変化したデータシードの百分率を表わす。右方余白の軸（高さ）は、キーを検索して検出されたチャンク数を表わす。かくして、各行（深さにおける）は、変化したシードの或る百分率が与えられたときの幾つかの識別特性に対する影響を示すことになる。
【００８３】
例えば、第５行では、データの１０％が変化しており、依然として約５，０００個のチャンクの平均がそれらの８個の識別特性のうちの７個を手付かずのまま有し、これらチャンクの９５％以上がそれら８個の識別特性のうち４以上を未だ現有している。第４行乃至第１行では、データの５％、３％、２％、１％がそれぞれ変化しており、識別特性の保存は次第に大きくなる。データ変化百分率が増大すると、より低い閾値（リポジトリと入力内の識別特性の最小一致数）の設定によりより多くの類似データの検出が可能になる。本例の場合、２５％データ変化に関するピーク（第８行）は検出された約４個のキーに中心があり、閾値が４（ｋ個の入力識別特性の中から）に設定されている場合、そのときは類似性検索は最大２５％までのデータが変化するほぼ全てのリポジトリ位置へ復帰することになる。同じ２５％のデータ変化について閾値がより高く、例えば６に設定されている場合、そのときは検索は類似リポジトリ位置のずっと低い百分率へ復帰することになる。かくして、図６等のグラフが特定の用例においてｊ，ｋ，ｍ，ｎに関する値のユーザによる選択を支援することができる。
【００８４】
ここで再度図４に戻るに、１以上の実質類似するリポジトリチャンクが検出された場合、各一致したリポジトリチャンクの位置をインデックスから抽出する（４５，４６）。リポジトリチャンクの位置データ（ｊ個の検出されたハッシュ値に関連）の位置をインデックスから容易に検索できることを、思い起されたい。続くステップは１以上の一致したリポジトリチャンクを使用でき、それらの類似度によりリポジトリチャンクを等級付けすることができる。本実施形態では、バージョンチャンクとその一致リポジトリチャンクを含むファクタリングステップ（４７）が続き、それがリポジトリ内へのバージョンチャンクの保管効率のよい取り込みに繋がる。この種のバックアップ及び復元システムでは、さらなるステップは、バージョンとリポジトリ内での共通（同一）データと非共通（非同一）データの識別と、バージョンの非共通データだけの格納（適当なポインタを用いてストリームに一貫性を保つ）、すなわち格納の節約を含む。例えば、典型的なバックアップ及び復元システムでは、データはバックアップ間で１％だけ変化することがある。そのデータの１％だけをリポジトリへ追加し、残りのデータが検出される箇所へポインタを維持し、必用な空間の９９％を効果的に節約することで、第２のバックアップをリポジトリへ追加することができる。
【００８５】
本実施形態の次のステップ（４８）では、リポジトリの一致部分の識別等級をインデックスから取り除く。本ステップはインデックスから新規入力チャンクのより更新されたバージョンでもって現在置換された「旧」部分へのあらゆる参照を取り除くべく実行する。次のステップ（４９）において、新規チャンクのｎ個の最も重要な識別特性をインデックスへ追加する。本実施形態では、Ａの最大シードのハッシュ値がＢのそれを上回る場合、識別特性Ａは別の識別特性Ｂよりも有意味である。これは、殆どコスト無しで行われ、何故ならｎは小さく、ｎ個の値のそれぞれのハッシュテーブル内への除去と挿入がＯ（１）演算によって行うことができるからである。バージョンチャンクの処理を、ここで行う（４０４）。
【００８６】
図４中、一致が見つからなかった場合（すなわち、或る一致閾値未満のｊ個が見つかった場合）（４０１，４０２）、新規バージョンチャンクを或る代替処理によって処理し、何故なら類似リポジトリデータが検出されなかったからである（４０３）。一例では、バージョンチャンクはファクタリングを用いずにリポジトリ内に保管することができる。本実施形態のインデックス更新策によれば、バージョンチャンクの識別特性がインデックスに追加される（４９）。処理（４０４）はそこで（前述の一致成功或いは一致失敗の経路のいずれかにおいて）終了し、新規バージョンチャンクの処理に至る。
【００８７】
本発明が前述した例のインデックス更新策により拘束されないことに、留意されたい。他の用例では、バージョンチャンクとその全ての一致リポジトリ部分の両方の識別特性の全てを保管することが適切かも知れない。さもなくばバージョンチャンクの識別特性の追加を排除し、或いは恐らくバージョンとリポジトリチャンクの識別特性との或る種の混合でもってインデックスを更新する。
【００８８】
特に本実施形態では、バージョンチャンクの識別特性が一致リポジトリ部分の特徴の全てに置き換わる場合、逆インデックスと呼ぶ別のインデックスを用いて妥当リポジトリ部分に関連する全ての識別特性（一部は恐らくバージョンチャンク識別特性とは一致しない）を識別する。逆インデックスはリポジトリ内の位置によって打ち込まれ、これらの位置をそれらの関連する識別特性へ写像する。この逆インデックスはまた、リポジトリの一部の欠損事例において主インデックスの整合性の維持を容易にする。
【００８９】
また、本発明はインデックスが空から始まるこの実施形態に拘束されないことに留意されたい。他の用例にあっては、リポジトリをチャンクへ分割し、それらの識別特性を算出し、この情報に基づいてインデックスを構築する前述の処理を介してリポジトリデータの既存体に基づきインデックスをロードすることが適切かも知れない。この種の場合、インデックスは前述した種のある種更新策に従って入来バージョンチャンクによりさらに更新することも或いはそうしないこともできる。
【００９０】
バージョンデータに類似するデータについてリポジトリを検索する計算処理の計算量はバージョンサイズ、すなわちＯ（バージョン）に比例し、リポジトリサイズとは無関係に設計されることは、強調しておきたい。この検索は、上記の非限定実施形態に従って、バージョンチャンクごとにそれぞれせいぜいｋ個のＯ（１）のハッシュテープ検索を必用とする。ｋ＜ｍ（ｍはバージョンチャンクのサイズである）であるため、特定の実施形態によりリポジトリ内で類似チャンクを検出する計算上の計算量がＯ（バージョン）、すなわち識別特性算出の計算量を超えないことが有り、このことはリポジトリサイズとは無関係に真実である。類似データに対する検索手順はかくして、非常に大きなリポジトリについてさえ非常に効率的なものとなる。
【００９１】
さらに、インデックスに必用とされる空間がリポジトリの各チャンクごとに格納された識別特性の数とチャンクサイズとの間の比、すなわちｎとｍの間の比に比例することは強調しておきたい。一実施形態では、ｎが８で、ｍが３２ＭＢである場合、各識別特性の格納に必用な空間は１６バイトであり、全部で１２８バイトを３２ＭＢの各リポジトリとにインデックス内に格納し、２５０，０００：１を上回る比となる。換言すれば、４ＧＢの随時読み書き可能メモリ（ＲＡＭ）はそのメモリ内に１ＰＢリポジトリに必用なインデックスを保持でき、インデックスの迅速な検索を容易にし、かくして任意の入力チャンクに関する非常に大きなリポジトリでの同様のデータの迅速な検出を容易にする。
【００９２】
前述した仕方で一致識別特性の識別に基づき類似チャンクを検出すると、類似チャンク間の厳密な差分の特定が関心事となろうことに、留意されたい。この種の場合、より詳細な比較（或いは補充）アルゴリズムを適用し、個別チャンクの全データ（ｎ個の識別特性だけではない）を比較することができる。一般に、ただし排他的ではないが、この種のアルゴリズムの例は２値差分とバイト単位ファクタリング種アルゴリズムである。選択実施形態に都合よく使用できる改善された２値差分アルゴリズムを、以下に説明する。
【００９３】
補充アルゴリズムは、直前に記載した同期（類似性検索）アルゴリズムに比し（計算上のリソースの点で）効率は落ちよう。劣化した効率は、補充アルゴリズム中の所与のリポジトリチャンクの全データを処理するも、類似性検索アルゴリズムではチャンクに関連する一部データ（すなわち、識別特性を含むデータ）だけを処理するという事実から派生することがある。しかしながら、補充アルゴリズムはサイズｍのたった一つのリポジトリチャンクにだけ、或いは恐らくは入力チャンクに充分類似するとして既に検出された少数のこの種のリポジトリチャンクに適用するが故に、劣化性能は選択アプリケーション内では比較的無意味なものとなろう。このことは、特に１ＰＢ以上のリポジトリ全体についての補充アルゴリズムの代替実行例とは対照的に特に真実である。
【００９４】
類似性検索アルゴリズムの前述の実施形態は、入力バージョンチャンクに対し大半の類似リポジトリチャンクを探索する最近隣クエリ種を解くインデックスの使用を例示するものである。本実施形態は、決して発明を限定するものではない。インデックスを用い、範囲クエリ等の他種のクエリを解くことができる。特定種のクエリは、特定用途によって決まる。
【００９５】
前述の類似検索のより良好な理解に向け、本発明の幾つかの実施形態を例示する説明を以下に続ける。本発明は、本例に拘束はされない。説明の便宜上、リポジトリは単一のチャンクを含み、本例は入力チャンクをリポジトリチャンクに十分類似するとして分類する仕方を例示することになる。
例１
ステップ１：リポジトリごとにインデックスを構築する。
【００９６】
本例は、以下のリポジトリストリングを使用する。すなわち、「Ｂｅｇｉｎ−ａｔ−ｔｈｅ−ｂｅｇｉｎｎｉｎｇ−ａｎｄ−ｇｏ−ｏｎ−ｔｉｌｌ−ｙｏｕ−ｃｏｍｅ−ｔｏ−ｔｈｅ−ｅｎｄ；−ｔｈｅｎ−ｓｔｏｐ．」である。本ステップは、先のアルゴリズムの反復の副産物である。本例が理解しやすいよう、それはここに明示的に包含してある。
ステップ１ａ：ハッシュを算出する。
【００９７】
本例はローリングハッシュ関数を用いて各バイトオフセットごとにハッシュ値を算出する。それはモジュラーハッシュ関数を用い、これは例示目的に素数８３８８５９３を使用する。使用するハッシュ関数は、ｈ（Ｘ）＝Ｘｍｏｄ８３８８５９３である。本例では、シードサイズは８バイトである。
入力ストリング：「Ｂｅｇｉｎ−ａｔ−ｔｈｅ−ｂｅｇｉｎｎｉｎｇ−ａｎｄ−ｇｏ−ｏｎ−ｔｉｌｌ−ｙｏｕ−ｃｏｍｅ−ｔｏ−ｔｈｅ−ｅｎｄ；−ｔｈｅｎ−ｓｔｏｐ．」
算出ハッシュ値
【００９８】
【表１】
2008513891.tif 000003
2008513891.tif 000004
ステップ１ｂ：最大値を算出する。
【００９９】
最大ハッシュ値を有するｎ個のテキスト位置を、検出する。本例では、ｎ＝４について、これらは下記の如くなる。
【０１００】
【表２】
2008513891.tif 000005
ステップ１ｃ：右方へ１文字移動させる。
【０１０１】
先に記載したように、最大ハッシュ値自体は十分均一な確率分布を持たない。かくして、最大ハッシュ値の一つに対応する各シードごとに、ここでは続く１文字を有するシードのハッシュ値を使用する。本例の目的に合わせこれらのハッシュ値を識別特性として使用し、これらの部分と合わせそれらは本例のインデックスを構成する。
【０１０２】
【表３】
2008513891.tif 000006
ステップ２：バージョンの一致をとる。
リポジトリは、「Ｓｔａｒｔ−ａｔ−ｔｈｅ−ｂｅｇｉｎｎｉｎｇ−ａｎｄ−ｃｏｎｔｉｎｕｅ−ｔｏ−ｔｈｅ−ｅｎｄ；−ｔｈｅｎ−ｃｅａｓｅ．」と修正された。この修正されたリポジトリは、バージョンと見なす（一つしかチャンクを持たない本例により）。
ステップ２ａ：ハッシュを算出する。
【０１０３】
入力ストリング：「Ｓｔａｒｔ−ａｔ−ｔｈｅ−ｂｅｇｉｎｎｉｎｇ−ａｎｄ−ｃｏｎｔｉｎｕｅ−ｔｏ−ｔｈｅ−ｅｎｄ；−ｔｈｅｎ−ｃｅａｓｅ．」
算出ハッシュ値：
【０１０４】
【表４】
2008513891.tif 000007
2008513891.tif 000008
ステップ２ｂ：最大値を算出する。
最大ハッシュ値を有するｋ個のテキスト位置を、検出する。本例では、ｋ＝８について、これらは下表の通りとなる。
【０１０５】
【表５】
2008513891.tif 000009
ステップ２ｃ：右方へ一文字移動させる。
先に記載した如く、最大ハッシュ値自体は十分均一な確率分布を持たない。かくして、ここでは続く１文字を有するシードのハッシュ値を用いることにする。これらの位置を識別位置として使用し、これらの８個のハッシュ値をインデックスの検索に用いる。
【０１０６】
【表６】
2008513891.tif 000010
ステップ２ｄ：一致をとる。
バージョンハッシュ値５６１５３５５（バージョン位置１８）と６３１０９４１（バージョン位置３５）と６１４６６３（バージョン位置６）とが、インデックス内で検出された。それらは、それぞれリポジトリ１８，４６，６内の位置に対応する。一つの一致が宣言され、すなわちアルゴリズムが、「ｓｔａｒｔ−ａｔ−ｔｈｅ−ｂｅｇｉｎｎｉｎｇ−ａｎｄ−ｃｏｎｔｉｎｕｅ−ｔｏ−ｔｈｅ−ｅｎｄ；−ｔｈｅｎ−ｃｅａｓｅ．」を、「Ｂｅｇｉｎ−ａｔ−ｔｈｅ−ｂｅｇｉｎｎｉｎｇ−ａｎｄ−ｇｏ−ｏｎ−ｔｉｌｌ−ｙｏｕ−ｃｏｍｅ−ｔｏ−ｔｈｅ−ｅｎｄ；−ｔｈｅｎ−ｓｔｏｐ．」に類似するデータであると識別し、対応位置を検出した旨である。
【０１０７】
本例により、類似性閾値（識別特性の最小一致数）はｊ≧２であることに、留意されたい。この閾値を４に設定したとするならば、チャンクは十分類似すると見なされず、何故ならたった３個の一致しか検出されないからである。本例ではｎを４に設定し、リポジトリチャンクの識別特性の数が４であることを意味し、ｋを８に設定し、バージョンチャンクにつき算出された識別特性の数が８であることを意味することにも、留意されたい。ｋ＞ｎに設定することで、検索は数７７３５６４８のリポジトリ位置に戻るが、これはリポジトリ内の第４の最大値から入力内の第５の最大値へ移動していて、かくしてｋが４に設定（ｋ＝ｎ）されたならば検出されることはなかった筈である。
【０１０８】
本例は、たった一つのチャンクを保持するリポジトリの縮退事例における類似チャンクの検出法を例示するものである。しかしながら、多数のチャンクの識別特性を記憶するインデックスについてさえ、検索処理は依然として非常に効率的であり、何故ならインデックス（例えば、ここではハッシュテーブルとして格納）内の検索が大きなインデックスについてさえ非常に効率的な仕方で行われるからである。また、各インデックス入力について格納するデータは小さく（本例の場合、ハッシュ値と位置）、従って多くのアプリケーションでは、インデックスはコンピュータの内部高速メモリ（ＲＡＭ）内に収容し、緩速入／出力演算を実行する必用性を取り除き、それによってインデックス内での検索を促すことができる。
（同期アルゴリズムの）計算量
【０１０９】
バージョンチャンクのシードのハッシュを算出するのに必用な時間はチャンクサイズに線形であり、何故ならローリングハッシュを用いているからである。ｋ個の最大値の算出に必用な時間はＯ（ｍ・ｌｏｇ（ｋ））であり、これはｋが小さいが故に妥当である。インデックスが２値ツリーである場合、ｋ個の識別特性についてインデックスを検索するのに必用な時間はＯ（ｋ・ｌｏｇ（ｒ））であり、ここでｒ＝（Ｒ・ｋ）／ｍはインデックス内の入力数であり、ここでＲはリポジトリサイズ（最大約２５０）であり、ｋは小さく（通常２３）であり、ｍはチャンクサイズ（通常２２５）であり、かくしてｒは通常２２８であり、ｌｏｇ（ｒ）＝２８である。ｋは小さいため、インデックス全体の検索時間は容認し得る。インデックスがハッシュテーブルで表わされる場合、ｋ個の識別特性についてインデックスを検索するのに必用な時間はｋ・Ｏ（１）となる。それ故、チャンク検索時間はそれが算出に必用とする時間と最大値の次数、すなわちＯ（ｍ・ｌｏｇ（ｋ））により決まり、かくして少数のバージョンチャンクの線形走査と等価となる。ｋは小さいため、全体的な検索時間は容認し得る。この結果は総当たり攻撃アルゴリズムの計算量の一部をなし、Ｏ（Ｒ・ｍ）すなわちリポジトリサイズＲとチャンクサイズｍの積となることに、留意されたい。
【０１１０】
インデックス内へバージョンチャンクを挿入するのに必用な時間の計算量は、インデックスの検索に必用なものと同じである。ｎ個の識別特性の算出に余計な時間は一切不要であり、何故ならこれらは既に算出してあるからである。
【０１１１】
このアルゴリズムに関する空間要件は、インデックスが必要とするものである。各入力は所与の例ごとに１６バイトのパラメータを有しており、それがキー（識別特性）と位置データとを含み、１ＰＢ内にはそれらの２２８（上記算出したｒの値）が存在し、かくして１ＰＢのリポジトリデータの管理に４ＧＢのインデックスが必要となる。
【０１１２】
本実施形態になるシステムは、適当にプログラムしたコンピュータにて実行することができる。同様に、本発明は本発明方法を実行するコンピュータにより可読のコンピュータプログラムを熟慮するものである。本発明はさらに、本発明方法を実行するマシンが実行可能な命令からなるプログラムを有形物として実施するマシン可読メモリを熟慮するものである。
２値差分アルゴリズム
【０１１３】
二つのデータ間隔の共通部分を効率的に計算する新規の２値差分アルゴリズムを、ここで説明する。説明する実施形態では、アルゴリズムは先に説明した類似検索（同期）アルゴリズムの出力を用い、これが所与のバージョンチャンクについてバージョンとリポジトリデータ内の数対の一致する識別特性の位置を特定する。一対の一致する識別特性位置（一つはリポジトリ内にあり、一つはバージョン内にある）を、ここではアンカーと記述する。アンカーは整列配置とバージョン内に一致を含みそうもないさらなる処理リポジトリ間隔からの剪定に用いられ、かくしてバージョンチャンクに最も類似するリポジトリ間隔が絞り込まれる。このことで、アルゴリズムの処理時間が減る。
【０１１４】
アンカーに基づき、対応間隔は十中八九は一致部分（同一データ）を含むバージョンとリポジトリ間隔対として規定される。２値差分処理を、これらの間隔対のそれぞれに使用する。リポジトリとバージョン窓を一致オフセット内に配置する代りに、スライド窓との類似物を用いることで、ここではそれらをアンカーに従って配置する（恐らくは、非一致オフセットにて）。
【０１１５】
本アルゴリズムの一つの利点は、間隔対の一つの間隔に対するシード刻みサイズの使用である。既知の２値差分或いはデルタアルゴリズムは両間隔に対しバイト刻みで動かすが、本アルゴリズムは例えば一つの間隔（バージョン間隔）についてバイト刻みのみで動かし、他の間隔（リポジトリ間隔）についてはシードサイズ（例えば、複数バイト）刻みで動かす。この技法が、一致処理レートを減らすことなく処理速度を上げて空間要件を低減する（何故なら、逆方向と順方向の両方に一致処理が拡張されるからである）。本アルゴリズムの別の利点は、既知の２値デルタアルゴリズムが追加と複写の両指令を生成する一方で、本アルゴリズムを用いて並べ替え順で複写指令だけを生成できる点にある。追加指令は、そこで必用に応じて複写指令から暗黙のうちに導出し、かくしてアルゴリズムの出力に必用なストレージを低減することができる。
【０１１６】
以下の表は、本実施形態に使用するシンボルを規定するものであり、図７と図８は要素を図解的に説明するものである。
【０１１７】
【表７】
2008513891.tif 000011
図９は、アンカー集合上で作動する２値差分処理の一実施形態のステップを示す高レベル（概観）フローチャートである。図１０は、アンカー集合内で作動するアルゴリズムを示すより詳細なフローチャートである。図１１乃至図１４は、本実施形態になるバージョン間隔とリポジトリ間隔の演算例を示す。
【０１１８】
説明した実施形態内の入力は、バージョンチャンクと、バージョンチャンクに関連するバイトオフセットのハッシュ値列と、バージョンチャンクとリポジトリデータとを連結するアンカー集合である。後者の二つの入力は、同期（類似性検索）アルゴリズムにより生成される。２値差分アルゴリズムの出力は、バージョンチャンクとリポジトリデータ内の一致（すなわち、同一）間隔対集合となる。一対の一致間隔は、複写間隔として表記される。各複写間隔は、バージョンとリポジトリ内の関連間隔の開始オフセットと間隔サイズとを含む複写指令としてコード化することができる。この複写命令は個別（非重複）バージョン間隔を指し、降順バージョンオフセット順序にて並べ替えしたアルゴリズムにより生成される。
【０１１９】
図９中、フローチャート（８０）は２値差分アルゴリズムの一実施形態を実行するステップを示す。図示の如く、処理は類似性検索からのアンカーとバイトオフセットのバージョンチャンクのハッシュ値を入力として受信する（８１）ことで開始される。次に、アンカー集合を算出（８２）する。これは、以下のステップ１において説明した如く達成することができる。そこで、第１のアンカー集合（８３）を用い、別のアンカー集合上で２値差分アルゴリズムを実行する。これは、図１０について記載する如く達成することができる。本処理は、バージョン内にもはやアンカー集合が存在せず、処理が達成（８７）されるまで、追加のアンカー集合（８４〜８６）について反復する。
【０１２０】
より詳細な説明を、ここで図１０〜図１４について述べることにする。図１０中、フローチャート（９０）はアンカー集合に対し施す２値差分アルゴリズム演算（図９のステップ８４）の一実施形態を示す。図１１〜図１４は、バージョンチャンク１２０と対応リポジトリデータ１１８の一間隔に対する演算手順を示す。この間隔は現アンカー集合１２２として表記され、バージョンチャンク１２０の識別特性１２４の複数位置を含み、その一部がリポジトリデータ１１８内に一致識別特性１２５を有する。
【０１２１】
ステップ１−アンカー集合（図９の８２）を計算する。アンカーをそれらのバージョンオフセットの昇順に並べ替える。順列配置したアンカーを横断し、それらに以下の如くアンカー集合を関連付ける。一対の連続するアンカーＡｉとＡｉ＋１は、それらが同じリポジトリオフセット推定子を有する場合、同一アンカー集合内にあり、ここでは例えば
｜［Ｏ（Ａｉ＋１Ｖ）−Ｏ（ＡｉＶ）］−［Ｏ（Ａｉ＋１Ｒ）−Ｏ（ＡｉＲ）］｜≦Ｃ
により与えられ、ここでＣは所望の挙動特性（計算量に関連して以下にさらに説明）に合わせ選択した定数である。連続するアンカー対が同じ集合に所属する限り、それを現集合へ追加する。連続対が同一集合に所属しないときは、現集合を閉じ、新集合を開き、最新のアンカーを新集合内に追加する。このステップの出力を｛ＡＳｊ｝１ｍで記述し、ここでｍは被識別非接合アンカーの数である。図７は、バージョン１２０とリポジトリ１１８とを連結する二つのアンカーＡｉとＡｉ＋１を含むアンカー集合ＡＳｊを示す。図１１乃至図１４は、バージョン１２０とリポジトリ１１８内の現アンカー集合１２２を示す。｛ＡＳｊ｝１ｍ内の各アンカー集合ごとに、以下に説明するステップ２〜６（図９のステップ８４）を実行する。ＡＳｊは現アンカー集合であるとする（図１０のステップ９１）。
【０１２２】
ステップ２−バージョン間隔を計算する（図１０の９２）。バージョン間隔ＩｊＶは、現アンカー集合ＡＳｊ（図７参照）に関連する。間隔ＩｊＶは先のバージョン間隔Ｉｊ−１Ｖ上の２値差分処理の実行により生成される最新の複写指令の右方オフセットの１バイト後か、又はチャンクの始端（先のアンカー集合ＡＳｊ−１が全く存在しない場合）で始まり、ＡＳｊ＋１内の最左方のアンカーよりも１バイト前か、又はチャンクの終端（ＡＳｊ＋１が全く存在しない場合）で終る。
【０１２３】
ステップ３−リポジトリ間隔を算出する（図１０のステップ９３）。リポジトリ間隔ＩｊＲは、現アンカー集合ＡＳｊに関連付けられる。ＡｌＲ（図１１中、ｌは１２４ｂである）を最左方のアンカーＡＳｊとし、ＡｒＲ（図１１中、ｒは１２４ｇである）を最右方のアンカーＡＳｊとする。そこで、ＩｊＲ＝［Ｏ（ＡｌＲ）−（Ｏ（ＡｌＶ）−ＬＯ（ＩｊＶ）），Ｏ（ＡｒＲ）＋（ＲＯ（ＩｊＶ）−Ｏ（ＡｒＶ））］となる。ここで、間隔対ＩｊＶ，ＩｊＲを、対応間隔と呼ぶ。図８は、それぞれが個別アンカー集合Ａ〜Ｄに関連する４対の対応間隔（バージョン１２０とリポジトリ１１８との間に破線で接続してある）を示す。各対の対応間隔と本ステップ内で算出されたＩｊＶ，ＩｊＲについて、以下に詳述する２値差分処理（ステップ４，５，６）を施す。
【０１２４】
本アルゴリズムはファクタリングアプリケーションの一部であり、対応するリポジトリ間隔ＩｊＲがリポジトリからメモリ内に読み込まれ（図１０のステップ９４）、ＩｊＶ内のデータとＩｊＲ内のデータとの比較が可能になる。
【０１２５】
ステップ４（図１２参照）−一致アンカーを拡張する（図１０のステップ９５）。一致処理を、現アンカー集合ＡＳｊのアンカー周りに順方向と逆方向に拡張し、これらの一致を複写指令としてコード化する。バージョン１２０内の領域１２８及びリポジトリ１１８内の領域１２９により図１２に示したこれらの一致を、一致アンカーと呼ぶ。これらの複写指令は、一時指令バッファ内に格納する。本ステップの出力を集合｛ＣｉＲ｝１ｎ，｛ＣｉＶ｝１ｎで表わし、ここでｎはアンカー集合内のアンカー数である。
【０１２６】
ステップ５（図１３参照）−リポジトリ間隔ハッシュ値をハッシュテーブルにロードする（図１０のステップ９６）。ＩｊＲ内にあるリポジトリアンカー（１２９）の拡張を除き、ＩｊＲ内の全ての連続する非重複シードのハッシュ値（図１３の領域１３０）を算出し、それらをＲＨａｓｈＴと呼ぶハッシュテーブル内に保管する。
【０１２７】
ステップ６（図１４参照）−一致を検索する（図１０内のステップ９７〜１０５）。Ｉｊ＋１Ｖ内の各連続する（バイトオフセットでもって）シードごとに、ＩｊＲ内に在るアンカーの拡張（図１４の領域１２８）を排除する。そのハッシュ値を検索（これらのハッシュ値が同期アルゴリズムの製品からの入力として受信されたことを念頭に置かれたい）し、ＲＨａｓｈＴ内でそれを検索する（図１０のステップ９８）。一致が検出された場合、バージョン内で先の複写指令又は次の一致アンカー或いはＩｊＶの始端及び終端と重複しない最大の拡張（図１４の領域１３４と１３６）へそれを順方向と逆方向に拡張（図１０のステップ９９）し、それを複写指令としてコード化し、それを出力する（図１０のステップ１００）。バージョン内で一致アンカーに到達した場合（図１０のステップ１０１）、一時的指令バッファ内に格納されたその対応複写指令を出力し（図１０のステップ１０２）、処理対象である次のシード（図１０のステップ１０４）をそのバージョン内での一致アンカーの後に配置する第１のシードとする。一致アンカーに全く到達せず、ＩｊＶの終端にも到達しない場合（図１０内のステップ１０３）、そのときはＩｊＶ内の処理対象（図１０のステップ１０４）である次のシードが以下に規定する次の未一致シードとなる。現シードが一致しなかった場合、そのときは次の未一致シードは現シードの第１バイトの１バイト後に始まる。他方で、現シードが一致し拡張された場合、そのときは次の未一致シードは前記拡張内に含まれる最終シードの最終バイトの１バイト後に始まるものとなる。ＩｊＶの終端に達した場合（図１０のステップ１０３）、そこでこのアンカー集合ＡＳｊと関連する対応間隔の処理を行う（図１０のステップ１０５）。次のアンカー集合が全く存在しない場合（図９のステップ８５）、バージョンチャンクの２値差分処理は完了する（図９のステップ８７）。さもなくば、処理は前記に詳述したステップ２から次のアンカー集合ＡＳｊ＋１（図９のステップ８６）へ続く。
計算量（２値差分）
【０１２８】
ストレージ：本願明細書に記載した２値差分アルゴリズムの実施形態は固定サイズハッシュテーブル（ＲＨａｓｈＴ）を使用しており、そのサイズはシードサイズにより分割されたチャンクサイズに比例し、何故ならチャンクサイズはリポジトリ間隔サイズの上限であるからである。かくして、テーブルサイズはチャンクサイズに準線形となる。加えて、一致アンカーを示す複写指令の一時的記憶が必要である。これは、チャンク内のアンカー数、すなわちその識別特性の数に比例し、それは少ない。それ故、アルゴリズムの総記憶要件はチャンクの長さに準線形となる。
【０１２９】
時間：一致アンカー（ステップ９５）の拡張とＲＨａｓｈＴへのリポジトリハッシュ値のローディング（ステップ９６）の位相は、対応間隔上で一つの線形パスを要する。ＲＨａｓｈＴ内でのバージョンハッシュ値の検索位相（ステップ９８）とそれらの検出一致の拡張位相（ステップ９９）は、その最悪の場合の時間が対応間隔長の二次式である貪欲算法アルゴリズムに類似する。しかしながら、ハッシュテーブルチェーンの長さを固定サイズに制限することで、この位相の所要平均時間は対応間隔上で１乃至ハッシュチェーン線形パス長の間とされる。稼動時間がバージョンとリポジトリ間隔との間の類似（同一データ）度の関数でもあることに、留意されたい（類似性があるほど、所要時間は少なくなる）。連続する対応間隔の重複の処理にかかる余分な時間が、存在する。これに続き、所要平均総時間は対応間隔上の２回の線形パスとなる。
【０１３０】
本願明細書に開示したこのシステムと方法は、例えばコンピュータ等のデータプロセッサを含む様々な形態にて実施することができる。さらに、本発明の上記特徴と他の態様と原理は、様々な環境にて実装することができる。この種の環境と関連アプリケーションは本発明になる様々な処理や演算を遂行するよう特別に構成でき、或いはそれらに必用な機能性を提供するコードにより選択的に起動或いは再構成する汎用コンピュータや計算プラットホームを含めることができる。本願明細書に開示した処理は何らかの特定のコンピュータや他の装置に元々関連するのではなく、ハードウェアとソフトウェア及び／又はファームウエアの適切な組み合わせにより実行することができる。例えば、様々な汎用マシンに本発明教示に従って書き込むプログラムと共に使用できるようにしたり、或いは特化した装置或いはシステムを構成して要求された方法や技法を遂行させる上でより便宜を図ることもできる。
【０１３１】
本発明に整合するシステムならびに方法には、本発明の方法ならびに処理に基づき様々なコンピュータ実行可能処理を実行するプログラム命令或いはコードを含むコンピュータ可読媒体を含めることもできる。媒体とプログラム命令は本発明の目的に合わせ特別に設計し構成したものとするか、或いはコンピュータソフトウェア技術の当業者によく知られ利用可能な種とすることができる。さらに、コンピュータ可読媒体は搬送波上の信号の形をとらせるか、或いはディスク等の記憶媒体の形をとらせることができる。プログラム命令の例には、コンパイラが生成する等の例えばマシンコードや変換器を用いてコンピュータが実行できる高レベルコードを含むファイルが含まれる。
【０１３２】
図１５に示す如く、データプロセッサ３００は入力３０５を受け取り、中央処理装置３２０と記憶モジュール３５０及び／又は入／出力（Ｉ／Ｏ）モジュール３３０とを含めることができる。入／出力モジュール３３０には、ディスプレイ３３５とキーボードとマウスと入力記憶デバイスとプリンタ３３６とネットワークインタフェース３３８とを含む１以上の入／出力デバイスを含めることができる。ネットワークインタフェースにより、データプロセッサを通信チャンネル等のネットワークを介して通信させることができる。中央処理装置は、例えば以下のうちの１以上を含めることができる。すなわち、中央処理装置とコプロセッサとメモリとレジスタと適当な他の処理デバイスやシステムである。
【０１３３】
記憶装置は、例えばハードドライブや光学ドライブや汎用記憶デバイスや挿脱式記憶デバイス及び／又はメモリを含むストレージを提供することのできる様々な構成要素或いは下位システムで実施することができる。
【０１３４】
本願明細書に記載した本発明方法及びシステムの各種実施形態は、リポジトリ内に既に存在する入力ストリーム内のデータ識別に有用である。この種のシステムと方法を用いる製品には、先刻バックアップしたが故に変化していないバックアップデータを繰り返し記憶させないことでディスク記憶空間を節約する対ディスクバックアップ製品が含まれる。これにより、同じリポジトリに複数のバックアップを保管するときに末端ユーザディスク空間が節約される。
【０１３５】
本発明の本システムならびに方法は、ストレージ機器や人工知能付き交換機やサーバやソフトウェアアプリケーションに含めることができる。この方法とシステムは、他の構成要素を含む派生製品と抱き合わせることができる。サービスプロバイダは、このシステムと方法を利用し、説明した能力をサービスとして提供することができる。このシステムと方法は、データ保護マーケットにおいて、例えばバックアップや復元や複製や跳躍や媒体管理に特に有用となろう。他の実装には、主ストレージにおける使用を含めることができる。
【０１３６】
本願明細書に記載するシステムと方法は、管理されたストレージ媒体と管理されたリポジトリ内のデータ表現とに関するものである。これには、ディスクやテープや時間経過しても市場で生き残れる他の形式の記憶媒体が含まれる。本発明は、ディスクや固定媒体に限定されず、挿脱式媒体にも適用可能である。例えば、挿脱式ディスクはターゲット出力デバイスとして使用することができる。それは同様にテープに対しても管理でき、両者は挿脱式媒体となる。
【０１３７】
テープ等の挿脱式媒体を含むシステムの設計に対する一つの手法は、ディスクを最大の基準とするチャンクや要素に対する保管場所として動作させ、最小基準とするチャンクをテープ媒体上へ移動させることである。これは、全てのチャンクの新しさを考慮する管理システムによりバランスさせ得る。また、このシステムは一集合として書庫から保管し再生する集合全体として関連リポジトリチャンクをテープへ移動させることができる。このことで、本発明の利点は倍加する筈である。例えば、本発明を用いずに１００片の媒体の使用が要求されたとするならば、そのときは本発明の使用後に例えば１０片の媒体しか必用ない。この媒体は、それ自体がリポジトリとして記述される仮想媒体から構成することができる。
【０１３８】
本願明細書に記載した同期アルゴリズムと２値差分処理アルゴリズムの様々な実施形態は、バージョンサイズについて線形の実行時間と一定（チャンクとアンカー集合のサイズに依存）の空間とを有する。アルゴリズム間の算出値の再利用が、計算時間を節約する。
【０１３９】
説明した実施形態はまた、二つのメモリ階層構造の使用を示している。同期アルゴリズムは入力データに関する一集合の代表（例えば、ハッシュ）値を計算して一時記憶し、そこから一集合の識別特性を導出してリポジトリ内の類似データ領域を識別し、一旦入力データをリポジトリ内に保管したならばこの識別特性をインデックス内に格納する。一時的ストレージ内の入力データの表現値は、そこでリポジトリデータに一致する厳密なデータを識別する２値差分処理アルゴリズムに使用することができる。２値差分アルゴリズムはリポジトリ内で問題のデータ領域に関する一集合の代表（例えば、ハッシュ）値を計算し、入力データの代表値との比較用にこの種の値をメモリ内に一時保管する。リポジトリデータと入力データの対応間隔を処理することで、代表値の保管に比較的少量のメモリを使用することができる。また、一致したデータセグメントは入力データの位置順序にて生成され、このことで並べ替え時間と記憶要件が節約される。
【０１４０】
さらに、同期アルゴリズムと２値差分アルゴリズムからなる本願明細書に記載した実施形態は、ペタバイトサイズリポジトリへスケーリングする。様々な実施形態において、インデックスサイズに対するリポジトリサイズの比は最大で２５０，０００対１であり、４ＧＢインデックスを１ＰＢリポジトリを表わすようにでき、このインデックスを市販商品種のコンピュータのメモリ内へ適合させることができる。ハッシュテーブルをインデックスとして使用した場合、インデックスの検索は一定時間及び一定空間Ｏ（１）演算であり、探索処理は最大１ＰＢまでのリポジトリについてリポジトリサイズとは独立したものとなる。リポジトリが１ＰＢに限定されない場合、そのときは２値ツリー或いはＢツリーをそのインデックス用に用いることができる。インデックスのサイズは、依然としてリポジトリより２５０，０００対１ほど小さなものであり、インデックス検索はＯ（ｌｏｇ（ｍ／２５０，０００））を用いる演算であり、ここでｍはリポジトリサイズである。１ＰＢのリポジトリでは、ｍは２５０であり、かくしてｌｏｇ（ｍ／２５０，０００）は３２となる。
【０１４１】
本願明細書に記載したシステムならびに方法は、入力データをリポジトリ内にある部分とそうでない部分とに区画することでリポジトリについて入力データの大規模な損失のないデータ低減を実行するデータ記憶システムを提供することができる。区画処理は、２段階の処理によって行われる。すなわち、
（１）入力データの各チャンクについて、それに類似するデータを含むリポジトリ内の全領域を検出し、
ここで、この検出処理はまた大雑把な類似性推定をもたらし、類似性レベルの等級化能力を提供する。
たとえリポジトリが非常に大きくとも、インデックスとメモリを使用して検出処理が行え、
インデックスサイズに対するリポジトリサイズの比は最大２５０：０００：１であり、
各領域内で検出した場合、検索は対応する１以上の実際の場所を検出し、
（２）検出された全領域について、リポジトリ内で最も類似する領域と２値差分とを、
リポジトリのその部分をメモリ内に読み込み、入力チャンクをリポジトリ内の一部と比較して厳密な変化を検出し、その一方で実際の対応場所を案内として使用し、
その出力を前記被識別区画とすることで選択する。リポジトリ内で検出された入力データ内のデータは、再度格納する必要はない。入力データの特性は、インデックスに付加することができる。
【０１４２】
本願明細書に記載した２値差分処理アルゴリズムの各実施形態は、幾つかの利点を有する。一致識別特性は、２値差分処理工程用の基準フレームから、このフレーム内の論理的区画（例えば、アンカー）からと同様（インデックスの）類似性検索によりもたらされる。２値差分処理アルゴリズムはハッシュテーブルをたった一つしか必用とせず、このハッシュテーブルは小さく、何故ならそれは問題のリポジトリデータセグメントの各シードごとにたった一つの値しか格納しないからである。各下位シードステップ（例えば、バイト）での入力データの表現値は既知であり、何故ならそれらはインデックス検索期間中に算出されているからである。２値差分処理工程のコスト増分は小さく、それは入力データのサイズにおいて線形である。リポジトリハッシュテーブルが各下位シード間隔（例えば、バイト）にて検索するため、２値差分処理が不整列配置データを検出する。
【０１４３】
様々な実施形態中、入力データと、類似する被識別リポジトリの領域とを比較する線形時間と定数空間Ｏ（１）処理との実行に２値差分処理法を用いることができる。本処理は先に算出された類似性検索の結果と、シードサイズの係数だけリポジトリ内の被識別領域よりも小型であるたった一つのリポジトリハッシュテーブルを用いる。２値差分処理は、それがたとえ交換され或いは不整列であったとしても、同一データを検出する。それは少なくともシードサイズの長さである全ての同一データを検出し、ここではハッシュテーブルは十分大である。本処理は、入力データ内のそれらの出現順に検出された入力データ内の下位領域のリストを導出する。
【０１４４】
本発明の別の実施形態では、バージョンデータすなわち新規データは一つのシステム又はコンピュータ上に配置できるが、リポジトリは第１のシステムとは異なる別のシステム又はコンピュータ上に配置することができる。この種の筋書きでは、デルタ情報は第１のシステムと第２のすなわち遠隔システムとの間の通信を介して特定しなければならない。前記した如く、大量のデータを管理し、かくしてシステムに使用する帯域は可能な限り最小化しなければならない。本発明の一態様によれば、最低量の帯域を用いて新規データ或いはバージョンデータから遠隔位置に位置するリポジトリの更新を達成する。
【０１４５】
図１６に示す如く、図１に示したものに類似のシステム（１６００）はネットワーク（１６０１）を含み、これが前記した如くＳＡＮ或いはＴＣＰ／ＩＰ準拠ネットワークとし、サーバＡ（１６０２）とサーバＢ（１６０４）とサーバＣ（１６０６）とサーバＤ（１６０８）との間の通信を提供することができる。例示目的にだけ、サーバＢ（１６０４）はそれにリポジトリＢ（１７）を結合してあり、その一方でサーバＤ（１６０８）はそれにリポジトリＤ（１７）を結合してある。リポジトリＤ（１７）はリポジトリＢ（１７）の鏡像やバックアップや複製複写の全て或いは一部とすることができ、かくしてその上に同じ情報を保管する。サーバＡ（１６０２）とサーバＣ（１６０６）は、個別リポジトリを持たない。
【０１４６】
一つの例示筋書きでは、サーバＡ（１６０２）は新規データとバージョンデータを有し、リポジトリＢ（１７）は前記した如くそこに保管したリポジトリデータとリポジトリチャンクとを有する。
【０１４７】
例示文脈では、サーバＡ（１６０２）はリポジトリＢ（１７）に保管する必要のある新規データを有する。前述の説明から、新規データの差別特性或いは識別特性集合を算出し、インデックス検索に使用して新規データすなわちバージョンデータに類似のリポジトリデータの位置を検出するようサーバＢ（１６０４）へ転送し、リポジトリＢ（１７）から旧データすなわち類似データを検索し、新規データと旧データを比較してデルタすなわち差分を特定することを、理解されたい。
【０１４８】
サーバＡ（１６０２）は新規データを含むため、デルタを特定するために、リポジトリＢ（１７）からの類似データをサーバＡ（１６０２）を介して送信すべきことをここで決定し得る。しかしながら、この送信はネットワーク（１６０１）の帯域の大半を占め得る。一旦サーバＡ（１６０２）がデルタを特定すると、リポジトリＢ（１７）を更新すべく、サーバＡ（１６０２）からネットワーク（１６０１）を介してサーバＢ（１６０４）へデルタ情報を送信してリポジトリＢ（１７）の更新に使用するようにしなければならない。
【０１４９】
本発明の一実施形態の一態様によれば、リポジトリＢ（１７）の更新に必要な帯域は低減される。都合よくは、リポジトリＢ（１７）からの類似データはデルタ情報を特定すべくサーバＡ（１６０２）に送信することはない。
【０１５０】
本発明の一実施形態に従い最小帯域使用でもってリポジトリＢ（１７）を更新する処理方法を、図１７に示した方法（１７００）についてここで説明することにする。ステップ（１７０２）において、バージョンすなわちサーバＡ（１６０２）上の新規データに関する特性集合をサーバＡ（１６０２）にて局所的に算出する。サーバＡ（１６０２）は、ステップ（１７０４）において特性算出集合をサーバＢ（１６０４）へ送信する。遠隔サーバ、この場合サーバＢ（１６０４）は、受信した特性との一致を検索し、ステップ（１７０６）においてリポジトリＢ（１７）が保持する１以上の類似データチャンクを識別する。ステップ（１７０８）において一致が検出された場合、制御はステップ（１７１０）へ進み、そこでサーバＢ（１６０４）はリポジトリＢ（１７）から類似データチャンクを検索する。
【０１５１】
リポジトリＢ（１７）内で検出される新規データと識別類似遠隔データとの間の差分を特定すべく、ステップ（１７１２）では、低通信コストの遠隔差分処理の修正バージョン、例えばｒｓｙｎｃユーティリティを用いる。ｒｓｙｎｃ等の修正された既存の遠隔差分処理を用いることで、デルタ情報の識別に使用するネットワーク帯域の量は著しく減ることになる。
【０１５２】
修正された遠隔差分処理は、全ての新規データと全ての被識別類似データを同じシステム上に持たねばならないことはなく、新規データと被識別類似遠隔データとの間の差分を特定する。修正された処理の結果、ネットワーク上で送信しなければならないデータ量が低減される。作動時、幾つかの異なる遠隔差分処理のいずれか一つをこのアプリケーション用に修正することができる。
【０１５３】
かくして、修正された遠隔差分化工程の一実施形態では、新規データと被識別類似遠隔データのハッシュを、ローカルシステムとサーバＡ（１６０２）と遠隔システム（１７）とサーバＢとがそれぞれ同じアルゴリズムを用いて算出する。これらのハッシュをそこで比較し、異なるハッシュが異なる個別データの代表的部分を表わす。異なる部分に関するデータを、そこでサーバＡからサーバＢへ搬送してリポジトリＢに保管する。ハッシュの生成と比較が、データ内の差分特定に必要なデータ帯域の量を低減する。
【０１５４】
ステップ（１７１２）に続き、デルタデータを識別し、ステップ（１７１４）にてそのリポジトリＢ（１７）を更新すべきと特定された場合、制御はステップ（１７１６）へ進み、そこで遠隔リポジトリＢ（１７）が前述した説明に従って更新される。
【０１５５】
ステップ（１７０８）へ戻るに、一致が検出されない場合、制御はステップ（１７１４）へ進み、そこでリポジトリＢ（１７）を更新する決定がなされ、更新を一切行わない場合、そのときは制御はステップ（１７１８）へ進む。
【０１５６】
別の動作筋書きでは、サーバＡ（１６０２）がサーバＣ（１６０２）へ搬送する必要のある新規データすなわちバージョンデータを有する状況があり得る。システム（１６００）に示す如く、サーバＡ（１６０２）もサーバＣ（１６０６）もリポジトリを含まない。新規データの量が非常に大量である場合、本発明の一実施形態では、サーバＡ（１６０２）からサーバＣ（１６０６）へ新規データを搬送するのに必要なデータ帯域量を最小化する。
【０１５７】
ネットワーク（１６０１）の最低量の帯域を用いてサーバＡ（１６０２）からサーバＣ（１６０６）へ新たなデータを送信する方法（１８００）を、図１８を参照して説明することにする。ステップ（１７０２〜１７１２）は、図１７に関して既に前記したものと同じである。ステップ（１７１２）に続き、ステップ（１８０２）において、サーバＡ（１６０２）は第２のシステムすなわちサーバＣ（１６０６）へデルタ情報と類似データの識別子情報とを送信する。類似データの識別子情報には、リポジトリデータが配置されたリポジトリの位置、この場合リポジトリＢ（１７）に関する情報と、サーバＢ（１６０４）のＩＰアドレスであるリポジトリＢ（１７）のアドレスと、類似するとして識別された特定リポジトリの一つのチャンク或いは複数のチャンクに関する情報、例えば基準レベルと、ステップ（１７１２）にて差分すなわちデルタ情報が生成されたリポジトリＢ（１７）の状態に同期するタイムスタンプ識別子とが含まれよう。このタイムスタンプ情報は、サーバＣ（１６０６）による後続の動作がステップ（１７１２）にて差分を特定する同一状態を有するリポジトリＢ（１７）についてなされることを保証するのに必要とされよう。
【０１５８】
ステップ（１８０４）において、第２のシステムすなわちサーバＣ（１６０６）がサーバＡ（１６０２）から受信した情報を用い、リポジトリＢ（１７）から被識別類似データチャンクを検索することになる。一実施形態では、サーバＣ（１６０６）は被識別リポジトリチャンク全体を要求し、サーバＡ（１６０２）から受信したデルタ情報でもって変化部分を置換することができ、或いはサーバＣ（１６０６）は変化しなかったリポジトリデータの一部だけをリポジトリＢ（１７）から要求し、そこでサーバＡ（１６０２）からのデルタ情報を合成してサーバＡ（１６０２）の新規データに達することができる。
【０１５９】
都合よくは、サーバＡ（１６０２）は、リポジトリＢ（１７）に格納された類似データに関する識別子情報と共にデルタ情報を送信するだけで最小量の帯域を用いて新規データをサーバＣ（１６０６）へ搬送することができる。
【０１６０】
本方法１６００の代替実施形態について、図１８を参照しながら、ここで説明する。この代替筋書きでは、受信サーバＣ（１６０６）はサーバＡ（１６０２）から送信されるデータを再生すべく、ステップ（１８０４）において、リポジトリＢ（１７）にアクセスする代りにリポジトリＤ（１７）へアクセスする。サーバＣ（１６０６）はリポジトリＤ（１７）がリポジトリＢ（１７）と同じデータを有することを知っており、幾つかの理由からリポジトリＤ（１７）から類似データを得ることがより良い選択肢であると判定する。これらの理由には、システム負荷特性やシステムの利用可能性やシステム応答時間やシステム品質サービスレベル契約のうちの１以上が含まれよう。サーバＣ（１６０６）とシステムＤ（１６０８）とリポジトリＤ（１７）との間の調整は、前記したサーバＣ（１６０６）とサーバＢ（１６０４）とリポジトリＢ（１７）との間の調整と同じ筈である。一旦サーバＣ（１６０６）がリポジトリＤ（１７）から情報を検索すると、リポジトリＤ（１７）を更新し、サーバＣ（１６０６）を介してサーバＡ（１６０２）から受信した現在のデータを反映させることができる。
【０１６１】
さらに別の実施形態では、一旦サーバＢ（１６０４）とリポジトリＢ（１７）がサーバＡ（１６０２）からの差分データでもって更新されると、リポジトリＤ（１７）はサーバＢ（１６０４）とリポジトリＢ（１７）とのトランザクションにより更新することができる。
【０１６２】
無論、サーバＣ（１６０６）とサーバＤ（１６０８）がシステムの簡略化と効率の理由から同じコンピュータで構成できることを、当業者は理解しよう。
【０１６３】
本発明の他の実施形態は、本願明細書に開示した本発明の明細書と実例を検討することから当業者には明らかとなろう。本発明範囲は添付特許請求の範囲により指示され、明細書と実施例は例示としてのみ考慮されることを意図するものである。
【図面の簡単な説明】
【０１６４】
【図１】本発明の幾つかの記載実施形態に有用である例示バックアップ及び復元システムの一般的システムアーキテクチャを示す図である。
【図２】本発明の一実施形態になる入力バージョンデータストリームを処理する例示ステップを示すフローチャートである。
【図３】一実施形態により入力バージョンデータのデータチャンクを処理するより詳細な手順ステップを示す図である。
【図４】一実施形態によりリポジトリ内でバージョンチャンクの位置を検出するより詳細な手順ステップを示す図である。
【図５】一実施形態によりバージョンチャンク内のシードとリポジトリチャンク内のシードとの間の対応性を概略示す図である。
【図６】識別特性がデータ変化にも拘わらずほぼ維持できる仕方を示す特定例の類似性検索の結果を示す三次元グラフを表わす図である。
【図７】２値差分アルゴリズムの一実施形態に使用するシンボルを規定するバージョン及びリポジトリ内の対応間隔を表わす概略図である。
【図８】アンカー集合を示すバージョンとリポジトリの対応間隔を表わす概略図である。
【図９】本発明の一実施形態によりアンカー集合を算出し、各アンカー集合に対し２値差分化処理を施す例示ステップを示すフローチャートである。
【図１０】一実施形態になるアンカー集合を処理するステップのより詳細な手順を示す図である。
【図１１】本発明の一実施形態になるアンカー集合内のアンカーを示すバージョン及びリポジトリを表わす概略図である。
【図１２】アンカー周りでの一致の拡張ステップを示す図１１の同一のバージョン及びリポジトリを表わす概略図である。
【図１３】リポジトリ内の拡張されたあんかー間のハッシュ値の算出ステップを示す図１１の同一のバージョン及びリポジトリを表わす概略図である。
【図１４】バージョンとリポジトリ内での一致と対応する一致とを拡張するステップを示す図１１の同一のバージョン及びリポジトリの概略図である。
【図１５】例示システム環境を示す図である。
【図１６】代替汎用システムアーキテクチャを示す図である。
【図１７】最小帯域を用いて遠隔リポジトリを更新する例示ステップを示すフローチャートである。
【図１８】一つのシステムから別のシステムへのバージョンデータの例示転送ステップを示すフローチャートである。
【符号の説明】
【０１６５】
１７  データリポジトリ
４４  インデックス
５０  リポジトリチャンク
５１  入力データチャンク
５２  リポジトリデータチャンク
５３  リポジトリ
５５ｉ〜５９ｉ，５５ｒ〜５９ｒ  識別特性
１６０２  第１の位置（サーバＡ）
１６０４  遠隔位置（サーバＢ）
【図１】
2008513891.tif 000012
【図２】
2008513891.tif 000013
【図３】
2008513891.tif 000014
【図４】
2008513891.tif 000015
【図５】
2008513891.tif 000016
【図６】
2008513891.tif 000017
【図７】
2008513891.tif 000018
【図８】
2008513891.tif 000019
【図９】
2008513891.tif 000020
【図１０】
2008513891.tif 000021
【図１１】
2008513891.tif 000022
【図１２】
2008513891.tif 000023
【図１３】
2008513891.tif 000024
【図１４】
2008513891.tif 000025
【図１５】
2008513891.tif 000026
【図１６】
2008513891.tif 000027
【図１７】
2008513891.tif 000028
【図１８】
2008513891.tif 000029
【手続補正書】
【提出日】平成18年7月17日(2006.7.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
入力データをリポジトリ（５３）へ供給し該入力データに類似するデータについて前記リポジトリ内のリポジトリデータを検索し、前記入力データを１以上の入力チャンク（５１）に分割する前記システムで、
各入力チャンクごとに、入力識別特性（ＩＤＣ）の対応集合を算出する手段で、該各ＩＤＣ集合が複数の識別特性（５５ｉ〜５９ｉ）を含み、該手段が前記個別データチャンクを複数のシード（ｓ）に区画するようにしてあり、該各シードを前記個別データチャンクの小部分としてシード系列に順列配置し、該各シードにハッシュ関数を適用して複数のハッシュ値を生成し、該各シードが一つのハッシュ値をもたらす前記手段を備える前記システムであって、
前記算出手段が、前記複数のハッシュ値の部分集合を選択するよう作動し、
前記選択されたハッシュ値の部分集合に対応して前記シード系列内での前記シードの位置を特定し、
該被特定位置に関数を適用して前記シード系列内の対応する他の位置を特定し、
前記識別特性集合を前記特定された他の位置の前記シードのハッシュ値として規定する、ことを特徴とするシステム。
【請求項２】
前記被特定ＩＤＣ集合を前記リポジトリが位置する遠隔位置へ送信する手段を備える、請求項１記載のシステム。
【請求項３】
入力データに類似するデータについてリポジトリデータを検索し、該リポジトリデータを１以上のリポジトリチャンク（５０）に分割するシステムで、
前記各リポジトリチャンクごとにリポジトリ識別特性（ＲＤＣ）の対応集合を算出する手段で、該各ＲＤＣ集合が複数の識別特性（５５ｒ〜５９ｒ）を含み、該手段が前記個別データチャンクを複数のシード（ｓ）に区画するようにしてあり、該各シードを前記個別データチャンクの小部分としてシード系列に順列配置し、該各シードにハッシュ関数を適用して複数のハッシュ値を生成し、該各シードが一つのハッシュ値をもたらす前記手段を備え、
前記各ＲＤＣ集合と前記対応するリポジトリチャンクとに関連するインデックス（４４）を保持する手段と、
前記入力データの入力チャンク（５１）の入力識別特性（５５ｉ〜５９ｉ）を前記インデックス内に格納された１以上のＲＤＣ集合と比較し、前記入力チャンクと前記対応するリポジトリチャンクとの間に類似性が存在するか判定する手段とを備える前記システムであって、
前記比較手段が前記入力識別特性集合の類似性閾値ｊが前記インデックス内に格納されたＲＤＣ集合内で検出された場合に類似性が存在すると判定するよう作動し、
前記算出手段が前記複数のハッシュ値の部分集合（ｋ）を選択するよう作動し、
前記ハッシュ値の選択された部分集合に対応する前記シード系列内で前記シードの位置を特定し、
前記特定された位置に関数を適用し、前記シード系列内の対応する他の位置を特定し、
前記識別特性集合を前記特定された他の位置の前記シードのハッシュ値として規定する、ことを特徴とするシステム。
【請求項４】
前記ハッシュ値集合（ｋ）は前記ｋ個の最大ハッシュ値を識別することで選択し、
前記対応する他の位置を特定するのに適用する関数が前記シード（ｓ）系列内の次のシードを識別する、請求項１乃至３のいずれか１項に記載のシステム。
【請求項５】
前記入力データチャンク（５１）と前記被識別類似リポジトリデータチャンク（５２）との間の１以上の差分を前記個別データチャンクの全データを比較することで特定する手段をさらに備える、請求項３記載のシステム。
【請求項６】
前記被特定差分を前記リポジトリデータを格納した同じリポジトリ（５３）内に格納する手段をさらに備える、請求項５記載のシステム。
【請求項７】
データファクタリングとデータバックアップの少なくとも一方に用いる、請求項３記載のシステム。
【請求項８】
ネットワーク接続コンピュータシステムであって、第１の位置の第１のコンピュータで請求項１記載のシステムを提供する前記第１のコンピュータと、遠隔位置の第２のコンピュータで請求項３記載のシステムを提供する前記第２のコンピュータとを備え、前記第１と第２のコンピュータが互いにネットワーク通信状態にあり、前記リポジトリデータを前記第２のコンピュータを介してアクセスするデータリポジトリ（１７）内に格納する、ことを特徴とするネットワーク接続コンピュータシステム。
【請求項９】
前記入力データチャンクを全て前記遠隔位置へ送信することなく、かつ前記被識別類似リポジトリデータチャンクを全て前記第１の位置へ送信することなく、前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を特定する手段を備える、請求項８記載のネットワーク接続コンピュータシステム。
【請求項１０】
入力データに類似するデータについてリポジトリデータを検索し、該リポジトリデータを１以上のリポジトリチャンク（５０）に分割する方法で、
各リポジトリチャンクごとに、リポジトリ識別特性（ＲＤＣ）（５５ｒ〜５９ｒ）の対応集合を算出するステップで、前記ＲＤＣ集合が複数（ｎ）の識別特性（５５ｒ〜５９ｒ）を含む前記ステップと、
各ＲＤＣ群と前記対応するリポジトリチャンクに関連するインデックス（４４）を保持するステップと、
データの入力チャンク（５１）について入力識別特性（５５ｉ〜５９ｉ）（ＩＤＣ）を算出するステップと、
前記ＩＤＣ（５５ｉ〜５９ｉ）を前記インデックス（４４）内に格納された１以上のＲＤＣ集合（５５ｒ〜５９ｒ）と比較し、前記入力チャンクと前記対応リポジトリチャンクとの間に類似性が存在するか判定するステップで、前記ＲＤＣと前記ＩＤＣを、
前記個別データチャンク（５１，５２）を複数のシード（ｓ）に区画し、該各シードを前記個別データチャンクの小部分としてシード系列内に順列配置し、
前記各シードにハッシュ関数を適用して複数のハッシュ値を生成し、各シードが一つのハッシュ値をもたらすことにより取得する前記ステップとを含む前記方法であって、
ＩＤＣ集合を各入力データチャンクごとに算出し、該集合が複数（ｋ）の識別特性からなり、前記集合を前記ＲＤＣ集合と比較し、
前記ＩＤＣ集合の前記識別特性の類似性閾値（ｊ）が前記インデックス内に格納されたＲＤＣ集合内で検出された場合、類似性が存在すると判定し、
前記ＲＤＣ集合と前記ＩＤＣ集合をそれぞれさらなるステップ群、すなわち前記複数のハッシュ値の部分集合（ｋ）を選択するステップと、
前記選択されたハッシュ値の部分集合に対応する前記シード系列内で前記シード位置を特定するステップと、
前記被特定位置に関数を適用して前記シード系列内での対応する他の位置を特定するステップと、
前記特定された他の位置の前記シードのハッシュ値として前記識別特性集合を規定するステップとにより取得する、ことを特徴とする方法。
【請求項１１】
前記ハッシュ値の部分集合を前記ｋ個の最大ハッシュ値を識別することで選択し、
前記対応する他の位置を特定するために適用する前記関数が前記シード系列内で次のシードを識別する、請求項１０記載の方法。
【請求項１２】
前記入力データチャンクと前記被識別類似リポジトリチャンクとの間の１以上の差分を前記個別データチャンクの全データを比較することで特定するステップをさらに含む、請求項１０記載の方法。
【請求項１３】
前記リポジトリデータを格納した同じリポジトリ（５３）内に前記被特定差分を格納するステップをさらに含む、請求項１２記載の方法。
【請求項１４】
前記入力データは第１の位置に位置し、前記リポジトリデータ及び前記インデックスは遠隔位置に位置し、前記方法はさらに、
前記第１の位置（１６０２）の前記ＩＤＣ集合（５５ｉ〜５９ｉ）を特定するステップと、
前記被特定ＩＤＣ集合を前記第１の位置から前記遠隔位置（１６０４）へ送信するステップと、
前記被特定ＩＤＣ集合を前記遠隔位置の１以上のＲＤＣ集合と比較するステップと、
前記入力データチャンクを全て前記遠隔位置へ送信することなく、かつ前記被識別類似リポジトリデータチャンクを全て前記第１の位置へ送信することなく、前記入力データチャンクと前記被識別類似リポジトリデータチャンクとの間の１以上の差分を特定するステップとを含む、ことを特徴とする請求項１３記載の方法。
【請求項１５】
前記遠隔位置（１６０４）に前記被特定差分を格納するステップをさらに含む、請求項１４記載の方法。
【請求項１６】
前記方法は、データファクタリングとデータバックアップとの少なくとも一方に使用する、請求項１０乃至１５のいずれか１項に記載の方法。
【請求項１７】
前記類似性閾値はＲＤＣ集合内に前記ＩＤＣ集合内の所定数の識別特性が検出されたときに合致する、請求項１０乃至１６のいずれか１項に記載の方法。
【請求項１８】
前記複数のハッシュ値の部分集合（ｋ）は集合内のｋ個の最大算術的ハッシュ値であり、前記被特定位置に適用する前記関数が前記ｋ個の最大算術的ハッシュ値のそれぞれに対応する各シードに対し次の系列的シードを採用する、請求項１０乃至１７のいずれか１項に記載の方法。
【請求項１９】
前記ハッシュ関数はローリングハッシュ関数とモジュラーハッシュ関数から選択する、請求項１０乃至１８のいずれか１項に記載の方法。
【請求項２０】
前記ＲＤＣ集合は２値ツリーとＢツリーと並べ替えリストとハッシュテーブルの少なくとも一つとしてインデックス内に格納する、請求項１０乃至１９のいずれか１項に記載の方法。
【請求項２１】
前記各シードは基本要素の連続系列であって同じシードサイズｓを有する、請求項１０乃至２０のいずれか１項に記載の方法。
【請求項２２】
前記シードは重複シードを含む、請求項２１記載の方法。
【請求項２３】
前記ＩＤＣを１以上のＲＤＣ集合と比較して類似性が存在するかどうか判定するステップは、前記リポジトリのサイズとは無関係に前記入力データのサイズとは線形な時間内に行う、請求項１０乃至２２のいずれか１項に記載の方法。
【請求項２４】
リポジトリデータ内の入力データを識別する方法をコンピュータに実行させるコンピュータ可実行命令でもってエンコードしたコンピュータ可読媒体で、前記リポジトリデータがリポジトリデータチャンクを含み、前記入力データが入力データチャンクを含む前記コンピュータ可読媒体であって、各リポジトリデータチャンクが１以上のリポジトリデータチャンク識別特性（ＲＤＣ）の対応集合を有し、前記方法が請求項１０乃至２３のいずれか１項に記載のステップを含む、ことを特徴とするコンピュータ可読媒体。
【請求項２５】
入力データに類似するデータについてリポジトリデータを検索する方法で、前記リポジトリデータを１以上のリポジトリチャンク（５２）に分割する前記方法で、
各リポジトリチャンク（５２）ごとに、リポジトリ識別特性の対応集合を算出するステップで、該各ＲＤＣ集合が複数の識別特性（５５ｒ〜５９ｒ）を含み、前記個別データチャンクを複数のシード（ｓ）に区画することで取得し、該各シードを前記個別データチャンクの小部分としてシード系列内に順列配置し、前記各シードにハッシュ関数を適用して複数のハッシュ値を生成し、該各シードが一つのハッシュ値をもたらす前記ステップと、
各ＲＤＣ集合と前記対応リポジトリチャンクに関連するインデックス（４４）を保持するステップと、
入力データの入力チャンクの入力識別特性（５５ｉ〜５９ｉ）を前記インデックス内に格納された１以上のＲＤＣ集合と比較し、前記入力チャンクと前記対応リポジトリチャンクとの間に類似性が存在するかどうか判定するステップとを含む方法であって、
前記ＩＤＣ集合内の前記識別特性の類似性閾値（ｊ）が前記インデックス内に格納されたＲＤＣ集合内に検出された場合に、前記入力チャンクと前記対応リポジトリチャンクとの間に類似性が存在すると判定し、
前記ＲＤＣ集合を、
前記複数のハッシュ値の部分集合（ｋ）を選択し、
前記ハッシュ値の選択された部分集合に対応して前記シード系列内で前記シード位置を特定し、
前記被特定位置に関数を適用して前記シード系列内で対応する他の位置を特定し、
前記特定された他の位置の前記シードのハッシュ値として前記識別特性集合を規定することで取得する、ことを特徴とする方法。
【請求項２６】
入力データに類似するデータについてリポジトリデータ内を検索する方法をコンピュータに実行させるコンピュータ可実行命令でもってエンコードしたコンピュータ可読媒体であって、前記リポジトリデータを１以上のリポジトリチャンクに分割し、前記方法が請求項２５記載のステップを含む、ことを特徴とするコンピュータ可読媒体。
【請求項２７】
入力データをリポジトリ（５３）に供給し、前記入力データに類似するデータについて前記リポジトリ内のリポジトリデータを検索する方法であって、
前記入力データを１以上の入力チャンク（５１）に分割するステップと、
各チャンクごとに入力識別特性（ＩＤＣ）集合を算出するステップで、該入力識別特性集合が複数の特性（５５ｉ〜５９ｉ）を含み、かつ該集合を、
前記個別データチャンクを複数のシード（ｓ）に区画し、各シードを前記個別データチャンクの小部分をなしてシード系列にて順列配置し、
前記各シードにハッシュ関数を適用して複数のハッシュ値を生成し、各シードが一つのハッシュ値をもたらし、
前記複数のハッシュ値の部分集合（ｋ）を選択し、
前記選択されたハッシュ値の部分集合に対応して前記シード系列内で前記シード位置を特定し、
前記被特定位置に関数を適用して前記シード系列内の対応する他の位置を特定し、
前記識別特性集合を前記特定された他の位置の前記シードのハッシュ値として規定することにより取得する前記ステップを含む、ことを特徴とする方法。
【請求項２８】
入力データに類似するデータについてリポジトリ内を検索する方法をコンピュータに実行させるコンピュータ可実行命令でもってエンコードしたコンピュータ可読媒体であって、前記リポジトリデータを１以上のリポジトリデータチャンクに分割し、前記方法が請求項２７記載のステップを含む、ことを特徴とするコンピュータ可読媒体。
【請求項２９】
リポジトリデータ内で入力データを識別する方法で、前記リポジトリデータがリポジトリデータチャンク（５０）を含み、前記入力データが入力データチャンク（５１）を含み、該各リポジトリデータチャンクがリポジトリデータチャンク識別特性（ＲＤＣ）の対応集合を有し、該各識別特性（５５ｒ〜５９ｒ）を特性位置と共に格納し、前記特性位置が前記チャンク全体に拡散する前記方法であって、該各入力データチャンクごとに、
入力データチャンク識別特性（ＩＤＣ）集合を特定するステップで、該各識別特性（５５ｉ〜５９ｉ）が特性位置を有し、該特性位置が前記チャンク全体に拡散する前記ステップと、
前記被特定ＩＤＣ集合内の前記ＩＤＣを１以上のＲＤＣ集合と比較するステップと、
前記入力データに類似するリポジトリデータチャンクを１以上のＲＤＣ集合に対し前記被特定ＩＤＣ集合を比較する関数として識別するステップとを含む、ことを特徴とする方法。
【請求項３０】
リポジトリデータ内での入力データの識別を含む方法で、前記リポジトリデータがリポジトリデータチャンクを含み、前記入力データが入力データチャンクを含み、各リポジトリデータチャンクがリポジトリデータチャンク識別特性の対応集合を有しており、該各識別特性をＲＤＣ特性位置と共に格納する前記方法であって、該各入力データチャンクごとに、
入力データチャンク識別特性（ＩＤＣ）集合を特定するステップで、該各識別特性がＩＤＣ特性位置を有する前記ステップと、
続いて前記被特定ＩＤＣ集合を１以上のＲＤＣ集合と比較するステップと、
前記入力データに類似するリポジトリデータチャンクを前記１以上のＲＤＣ集合に対し前記被特定ＩＤＣ集合を比較する関数として識別するステップで、前記ＩＤＣ集合内の所定数の識別特性がＲＤＣ集合内で一致すると検出されたときにリポジトリデータチャンクが類似すると識別する前記ステップと、
少なくとも一対の一致するＩＤＣとＲＤＣの前記ＩＤＣ及びＲＤＣ位置を出力するステップとを含む、ことを特徴とする方法。
【国際調査報告】
2008513891.tif 000030
2008513891.tif 000031
2008513891.tif 000032