(57)【要約】【課題】小さいデータ・チャンクを用いて動作するスケーラブル・データデュプリケーションのための例示的な方法、システム、およびコンピュータ・プログラムの実施形態を提供する。【解決手段】例示としてのみ示す一実施形態では、小さいデータ・チャンクの各々について、小さいデータ・チャンクに現れるキャラクタの表現と小さいデータ・チャンクの頻度の表現との組み合わせに基づいてシグネチャを発生させる。現れるキャラクタの表現の組み合わせに基づいてシグネチャを発生させる。シグネチャを用いて、デュプリケーションの対象となるデータの選択を支援する。【選択図】図２
2014534486.tif 000002
【特許請求の範囲】
【請求項１】
小さいデータ・チャンクを用いて動作するスケーラブル・データデュプリケーションのための方法であって、
前記小さいデータ・チャンクの各々について、前記小さいデータ・チャンクに現れるキャラクタの表現と前記小さいデータ・チャンクの頻度の表現との組み合わせに基づいてシグネチャを発生させることであって、前記シグネチャを用いてデュプリケーションの対象となるデータの選択を支援する、方法。
【請求項２】
前記シグネチャが、前記小さいデータ・チャンクにおける小さい変更によって前記シグネチャに小さい変化および変化なしの一方を引き起こすことができる特性を有する、請求項１に記載の方法。
【請求項３】
前記シグネチャが、前記小さいデータ・チャンクのｃスペクトラム、前記小さいデータ・チャンクのｆスペクトラム、前記小さいデータ・チャンクのｐスペクトラムに基づいており、前記小さいデータ・チャンクの前記ｃスペクトラムが、前記小さいデータ・チャンクにおける発生頻度の順に配列された異なるキャラクタの表現のシーケンスであり、前記小さいデータ・チャンクの前記ｆスペクトラムが、前記小さいデータ・チャンクにおける前記異なるキャラクタの頻度の対応するシーケンスであり、前記小さいデータ・チャンクの前記ｐスペクトラムが、前記小さいデータ・チャンクにおける前記発生頻度の順に配列された異なるキャラクタ対のシーケンスである、請求項１に記載の方法。
【請求項４】
ｃスペクトラム、ｆスペクトラム、およびｐスペクトラムに基づいて前記シグネチャを発生させることに関連付けて、
順序付けたシーケンスにおいて隣接するキャラクタの頻度ｆｉ間のギャップｄｉ＝ｆｉ−ｆｉ＋１に重み付けすることによって、同様の頻度を有する前記ｃスペクトラムのキャラクタを組み合わせてブロックを生成し、前記ギャップが重みに基づいて正規化されている、ことと、
前記ｃスペクトラムのキャラクタのブロックの境界を規定するために前記ギャップのサブセットを選択することと、
前記ｃスペクトラムのキャラクタのブロックにおけるキャラクタの組み合わせに論理ＸＯＲ演算を実行することと、
前記ｆスペクトラムの頻度のサブセットのビットのサブセットを選択することと、
前記ｐスペクトラムの対のサブセットを選択し、前記ｐスペクトラムの対の前記選択したサブセットの各々についてキャラクタの表現の対に論理演算を実行することと、
の１つ以上を実行することを更に含む、請求項３に記載の方法。
【請求項５】
前記ビットの選択したサブセットおよび前記対の選択したサブセットにシフト動作を実行し、前記選択したサブセットを組み合わせてシグネチャを表すビット・ストリングを生成することによって論理ＸＯＲ演算を実行することを更に含む、請求項４に記載の方法。
【請求項６】
パラメータ・テーブルに従って前記シフト動作を実行することを更に含む、請求項５に記載の方法。
【請求項７】
前記ギャップｄｉ＝ｆｉ−ｆｉ＋１を除算する重みｗｉがｗｉ＝１／ｉである、請求項４に記載の方法。
【請求項８】
キャラクタの表現の対に実行される前記論理演算が、
ビットのストリングを循環的に回転させることと、
前記ビットのストリングをシフトさせることと、
論理ＸＯＲ演算を実行することと、
の少なくとも１つを含む、請求項４に記載の方法。
【請求項９】
コンピューティング環境において小さいデータ・チャンクを用いて動作するスケーラブル・データデュプリケーションのためのシステムであって、
前記コンピューティング記憶環境において動作可能である少なくとも１つのプロセッサ・デバイスであって、
前記小さいデータ・チャンクの各々について、前記小さいデータ・チャンクに現れるキャラクタの表現と前記小さいデータ・チャンクの頻度の表現との組み合わせに基づいてシグネチャを発生させ、前記シグネチャを用いてデュプリケーションの対象となるデータの選択を支援するために適合されている少なくとも１つのプロセッサ・デバイスを含む、システム。
【請求項１０】
前記シグネチャが、前記小さいデータ・チャンクにおける小さい変更によって前記シグネチャに小さい変化および変化なしの一方を引き起こすことができる特性を有する、請求項９に記載のシステム。
【請求項１１】
前記シグネチャが、前記小さいデータ・チャンクのｃスペクトラム、前記小さいデータ・チャンクのｆスペクトラム、前記小さいデータ・チャンクのｐスペクトラムに基づいており、前記小さいデータ・チャンクの前記ｃスペクトラムが、前記小さいデータ・チャンクにおける発生頻度の順に配列された異なるキャラクタの表現のシーケンスであり、前記小さいデータ・チャンクの前記ｆスペクトラムが、前記小さいデータ・チャンクにおける前記異なるキャラクタの頻度の対応するシーケンスであり、前記小さいデータ・チャンクの前記ｐスペクトラムが、前記小さいデータ・チャンクにおける前記発生頻度の順に配列された異なるキャラクタ対のシーケンスである、請求項９に記載のシステム。
【請求項１２】
ｃスペクトラム、ｆスペクトラム、およびｐスペクトラムに基づいて前記シグネチャを発生させることに関連付けて、前記プロセッサ・デバイスが、
順序付けたシーケンスにおいて隣接するキャラクタの頻度ｆｉ間のギャップｄｉ＝ｆｉ−ｆｉ＋１に重み付けすることによって、同様の頻度を有する前記ｃスペクトラムのキャラクタを組み合わせてブロックを生成し、前記ギャップが重みに基づいて正規化されている、ことと、
前記ｃスペクトラムのキャラクタのブロックの境界を規定するために前記ギャップのサブセットを選択することと、
前記ｃスペクトラムのキャラクタのブロックにおけるキャラクタの組み合わせに論理ＸＯＲ演算を実行することと、
前記ｆスペクトラムの頻度のサブセットのビットのサブセットを選択することと、
前記ｐスペクトラムの対のサブセットを選択し、前記ｐスペクトラムの対の前記選択したサブセットの各々についてキャラクタの表現の対に論理演算を実行することと、
の１つ以上を実行するために更に適合されている、請求項１１に記載のシステム。
【請求項１３】
前記プロセッサ・デバイスが、前記ビットの選択したサブセットおよび前記対の選択したサブセットにシフト動作を実行し、前記選択したサブセットを組み合わせてシグネチャを表すビット・ストリングを生成することによって論理ＸＯＲ演算を実行するために更に適合されている、請求項１２に記載のシステム。
【請求項１４】
前記プロセッサ・デバイスが、パラメータ・テーブルに従って前記シフト動作を実行するために更に適合されている、請求項１３に記載のシステム。
【請求項１５】
前記ギャップｄｉ＝ｆｉ−ｆｉ＋１を除算する重みｗｉがｗｉ＝１／ｉである、請求項１２に記載のシステム。
【請求項１６】
キャラクタの表現の対に実行される前記論理演算が、
ビットのストリングを循環的に回転させることと、
前記ビットのストリングをシフトさせることと、
論理ＸＯＲ演算を実行することと、
の少なくとも１つを含む、請求項１２に記載のシステム。
【請求項１７】
小さいデータ・チャンクを用いて動作するスケーラブル・データデュプリケーションのためのコンピュータ・プログラムであって、前記コンピュータ・プログラムが、コンピュータ読み取り可能プログラム・コード部分が記憶された一時的でないコンピュータ読み取り可能記憶媒体を含み、前記コンピュータ読み取り可能プログラム・コード部分が、
前記小さいデータ・チャンクの各々について、前記小さいデータ・チャンクに現れるキャラクタの表現と前記小さいデータ・チャンクの頻度の表現との組み合わせに基づいてシグネチャを発生させるための第１の実行可能部分であって、前記シグネチャを用いてデュプリケーションの対象となるデータの選択を支援する、第１の実行可能部分を含む、コンピュータ・プログラム。
【請求項１８】
前記シグネチャが、前記小さいデータ・チャンクにおける小さい変更によって前記シグネチャに小さい変化および変化なしの一方を引き起こすことができる特性を有する、請求項１７に記載のコンピュータ・プログラム。
【請求項１９】
前記シグネチャが、前記小さいデータ・チャンクのｃスペクトラム、前記小さいデータ・チャンクのｆスペクトラム、前記小さいデータ・チャンクのｐスペクトラムに基づいており、前記小さいデータ・チャンクの前記ｃスペクトラムが、前記小さいデータ・チャンクにおける発生頻度の順に配列された異なるキャラクタの表現のシーケンスであり、前記小さいデータ・チャンクの前記ｆスペクトラムが、前記小さいデータ・チャンクにおける前記異なるキャラクタの頻度の対応するシーケンスであり、前記小さいデータ・チャンクの前記ｐスペクトラムが、前記小さいデータ・チャンクにおける前記発生頻度の順に配列された異なるキャラクタ対のシーケンスである、請求項１７に記載のコンピュータ・プログラム。
【請求項２０】
ｃスペクトラム、ｆスペクトラム、およびｐスペクトラムに基づいて前記シグネチャを発生させることに関連付けて、
順序付けたシーケンスにおいて隣接するキャラクタの頻度ｆｉ間のギャップｄｉ＝ｆｉ−ｆｉ＋１に重み付けすることによって、同様の頻度を有する前記ｃスペクトラムのキャラクタを組み合わせてブロックを生成し、前記ギャップが重みに基づいて正規化されている、ことと、
前記ｃスペクトラムのキャラクタのブロックの境界を規定するために前記ギャップのサブセットを選択することと、
前記ｃスペクトラムのキャラクタのブロックにおけるキャラクタの組み合わせに論理ＸＯＲ演算を実行することと、
前記ｆスペクトラムの頻度のサブセットのビットのサブセットを選択することと、
前記ｐスペクトラムの対のサブセットを選択し、前記ｐスペクトラムの対の前記選択したサブセットの各々についてキャラクタの表現の対に論理演算を実行することと、
の１つ以上を実行するための第３の実行可能部分を更に含む、請求項１９に記載のコンピュータ・プログラム。
【請求項２１】
前記ビットの選択したサブセットおよび前記対の選択したサブセットにシフト動作を実行し、前記選択したサブセットを組み合わせてシグネチャを表すビット・ストリングを生成することによって論理ＸＯＲ演算を実行することと、
パラメータ・テーブルに従って前記シフト動作を実行することと、
の一方のための前記第３の実行可能部分を更に含む、請求項２０に記載のコンピュータ・プログラム。
【請求項２２】
前記ギャップｄｉ＝ｆｉ−ｆｉ＋１を除算する重みｗｉがｗｉ＝１／ｉである、請求項２０に記載のコンピュータ・プログラム。
【請求項２３】
キャラクタの表現の対に実行される前記論理演算が、
ビットのストリングを循環的に回転させることと、
前記ビットのストリングをシフトさせることと、
論理ＸＯＲ演算を実行することと、
の少なくとも１つを含む、請求項２０に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピュータに関し、更に特定すれば、コンピューティング記憶環境において小さいデータ・ブロックに対するアクセスを可能とするために細かい分解が必要であるスケーラブル・デュプリケーション（scalable duplication）に関する。
【背景技術】
【０００２】
今日の社会において、コンピュータ・システムは一般化している。職場や家庭で、また学校でもコンピュータ・システムを見ることができる。コンピュータ・システムは、データを処理し記憶するためにデータ記憶システムまたはディスク記憶システムを含むことができる。大量のデータを毎日処理する必要があり、現在の動向からこのデータ量が当分の間は増え続けることが示唆される。この問題を軽減するための１つの効率的な方法は、デュプリケーションを用いることである。デュプリケーション・システムの基礎となる考えは、反復されたデータを探し出し、その最初の発生のみを記憶することによって、利用可能データの大部分を全く変更せずに何度もコピーし転送することである。以降のコピーは、記憶された発生を指し示すポインタによって置換する。これによって、データが実際に反復される場合の記憶要求を著しく低減させる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
データ・デュプリケーションとは、冗長データの削減または排除あるいはその両方を指す。データ・デュプリケーションにおいて、ファイル、データ・ストリーム、または他の何らかのデータ形態とすることができるデータ・オブジェクトは、チャンキング方法を用いて、チャンクと呼ばれる１つ以上の部分に分解される。データ・デュプリケーション・プロセスにおいて、データの複製の（duplicate）コピーは削減または排除され、最少量の冗長コピーまたは単一のデータ・コピーがそれぞれ残される。デュプリケーション・プロセスを用いると、必要な記憶容量の縮小およびネットワーク帯域幅の拡大等の様々な利点が得られる。これらおよび他のメリットのため、デュプリケーションは近年、コンピューティング記憶システムにおいて極めて重要な技術分野として浮上している。デュプリケーションに対するいくつかの手法が提案されており、それらの多くはハッシング技法を用いる。
【０００４】
しかしながら、ハッシング技法を用いる際の主な問題の１つは、一方では衝突（誤一致）数を最小限に抑えるように関数によってできる限り均一に近い値の分散を与えなければならない均一性と、他方ではチャンクにおける小さい変更によって対応するハッシュ値に及ぼす影響を皆無とするかまたはごく小さくしなければならない感度との間で、適切なバランスを見出すことである。
【課題を解決するための手段】
【０００５】
従って、前述のことに鑑み、コンピューティング環境において小さいデータ・チャンクを用いて動作するスケーラブル・データ・デュプリケーションのための様々な例示的な方法、システム、およびコンピュータ・プログラムの実施形態を提供する。例示としてのみ示す一実施形態では、小さいデータ・チャンクの各々について、小さいデータ・チャンクに現れるキャラクタの表現と小さいデータ・チャンクの頻度の表現との組み合わせに基づいてシグネチャ（signature）を発生させる。現れるキャラクタの表現の組み合わせに基づいてシグネチャを発生させる。シグネチャを用いて、デュプリケーションの対象となるデータの選択を支援する。
【０００６】
前述の例示的な方法の実施形態に加えて、他の例示的なシステムおよびコンピュータの実施形態を提供し、関連する利点を与える。前述の「発明の概要」は、概念のいくつかの抜粋を簡略化した形態で紹介するために示したが、この概念については以下の「発明を実施するための形態」において更に記載する。「発明の概要」は、特許請求した主題の重要な特性（features）または不可欠な特性を明確にすることは意図しておらず、特許請求した主題の範囲の決定に役立てるために用いることも意図していない。特許請求した主題は、「背景技術」において言及した欠点のいずれかまたは全てを解決する実施に限定されるものではない。
【０００７】
本発明の利点を容易に理解するため、添付図面に示す特定の実施形態を参照して、簡単に記載した本発明について更に具体的な説明を行う。これらの図面は本発明の実施形態を表しており、従ってその範囲を限定するものとは見なさないことを踏まえて、添付図面を用いて本発明を更に具体的かつ詳細に記載し説明する。
【図面の簡単な説明】
【０００８】
【図１】本発明の態様を実現可能である一例の記憶デバイスを有するコンピューティング・システム環境を示す。
【図２】小さいブロックを用いたスケーラブル・データ・デュプリケーションのための例示的な方法を示すフローチャートである。
【図３】本発明の態様を実現可能であるコンピュータ環境においてパーティションをキャラクタ頻度のブロックに分けることを概略的に表す例示的な図を示す。
【図４】本発明の態様を実現可能である近似ハッシュ関数（appropriate hash function）の様々な構築コンポーネントのレイアウトを示す例示的な図を示す。
【図５】３２ＧＢサイズの試験データベースにおいて、規定されたシグネチャの３２ビット位置の各々で１ビットを取得する確率を示すグラフである。
【図６】データ・チャンクを規定するための例示的な方法を示すフローチャートである。
【図７】シグネチャ規定のキャラクタ部分を規定する例示的な方法を示すフローチャートである。
【図８】シグネチャ規定の頻度部分を規定するための例示的な方法を示すフローチャートである。
【図９】シグネチャ規定のキャラクタ対部分を規定するための例示的な方法を示すフローチャートである。
【図１０】図７、図８、および図９のフローチャートにおいて用いられるシフト定数を規定する。
【発明を実施するための形態】
【０００９】
前述のように、データ・デュプリケーションとは、冗長データの削減または排除あるいはその両方を指す。データ・デュプリケーション・プロセスにおいて、データの複製のコピーは削減または排除され、最少量の冗長コピーまたは単一のデータ・コピーがそれぞれ残される。デュプリケーション・プロセスを用いると、必要な記憶容量の縮小およびネットワーク帯域幅の拡大等の様々な利点が得られる。
【００１０】
ハッシングに基づいたデュプリケーションのための手法については、概略的に以下のように記載することができる。利用可能データは、チャンク（例えばＣｉおよびＣｊ）と呼ばれる部分に分割される。これらのチャンクは固定または可変のサイズとすることができ、１つのチャンクの（平均）サイズは、例えば４〜８キロバイト（ＫＢ）の小さいものから、１６メガバイト（ＭＢ）等の極めて大きいものまでとすることができる。これらのチャンクに対して、暗号的に強力なハッシュ関数（ｈ）を適用する。これが意味するのは、ｈ（Ｃｉ）＝ｈ（Ｃｊ）ならば、極めて低いエラー確率で、チャンクＣｉおよびチャンクＣｊは同一であると想定可能であるということである。異なるハッシュ値のセット（Ｓ）は、対応するチャンクに対するポインタと共に、高速アクセスおよび容易な更新を可能とするデータ構造（Ｄ）に保持される。これは典型的にハッシュ・テーブルまたはＢツリーである。処理対象の新しいチャンクごとに、そのハッシュ値をＤ内で検索する。これが見つかった場合には、その所与のチャンクがデュプリケーション可能であると想定できるので、これを再び記憶するのではなく、もっと前の時点の発生を指し示すポインタによって置換する。ハッシュ値がＤ内に存在しない場合、その所与のチャンクは新しいと見なされるので、これを記憶してそのハッシュ値をセットＳに付加する。
【００１１】
しかしながら、どのようにチャンク境界を規定するかに基づいて、示唆されるチャンク・サイズに差が生じ得る。チャンク・サイズは性能に大きな影響を与える。チャンク・サイズが小さすぎる場合、異なるチャンクの数が多すぎてデュプリケーション手法に支障を来すことがある。これは、データ構造ＤがＲＡＭに収まらないのでシステムがスケーラブルでなくなる恐れがあるからである。一方、チャンク・サイズが大きすぎる場合は、同一のチャンクを取得する確率が低下する。多くの場合、チャンク・サイズがもっと小さければデュプリケーションを実行できたチャンクが多数存在するが、チャンク・サイズが大きいと、これらのチャンクの多くを保持しなければならない。
【００１２】
また、デュプリケーション・プロセスは、同一のチャンクだけでなく類似のチャンクを探すことができる。類似チャンクが探し出されると、その差だけが記録されるが、これは一般にチャンク全体よりもはるかに小さい。これによって、同一性ベースのシステムにおけるよりもはるかに大きいチャンクを用いることができる。しかしながら多くの使用例では、データを更に細分化し、極めて小さいチャンクを用いてもっと高効率のデュプリケーション・プロセスを実行することができる。例えば、設計に他の変更を加えることなくチャンク・サイズを２０００分の１に、例えば１６ＭＢから８Ｋに縮小することができるシステムを簡単に一般化すると、インデックス・サイズは４ＧＢから約８ＴＢに２０００倍増大することが暗示される。しかしながら、これはＲＡＭに収まらないと見なされる場合がある。更に、チャンク類似性の概念の規定を保持しつつそのサイズを縮小すると、衝突数の増大につながり、この手法を全く無効にしてしまう恐れがある。
【００１３】
これに対して、前述の非効率に対処するため、例示する実施形態の機構は、近似ハッシュ・スキーム（approximate hash scheme）と特定されるものによって必要な類似性を実現するように機能する。その主な考えは、かかる近似ハッシュ関数が、その値の均一に近い分布に関する限り、チャンク内の「小さい」変更に影響されず、他のハッシュ関数と同様にふるまうことである。従って、この機構は、ハッシュ使用例において通常実行されるように（ハッシュ・テーブルを用いて、または値をＢツリーに記憶して）近似ハッシュ値セットを処理することができるが、類似ブロックおよび同一ブロックの双方を検出可能である。所与のチャンクに、もっと広範であるが依然として小さい更新が行われた場合、その新しいハッシュ値は元のものに近いことがあり、これはミスの場合にハッシュ・テーブル内でその所与の要素の近傍に記憶された値をチェックしなければならないことを示す。かかる近傍検索は、通常のハッシュ手法では役に立たない。
【００１４】
レポジトリを記憶するための一般的なアルゴリズムは、基本的なデータ構造として、例えば２３２のエントリを有するハッシュ・テーブルＨの使用を含むことができる。構築プロセスの間、各チャンクＣにその近似ハッシュ値ａｈ（Ｃ）を割り当て、チャンクのインデックスまたはアドレスをＨ［ａｈ（Ｃ）］に記憶し、Ｈのエントリにはチャンクのハッシュ値でインデックスを付ける。テーブル内のロケーションがフリーでない場合、これが上書きされることがある。これは、新しいチャンクが以前に遭遇したチャンクと同一または極めて類似している場合に起こり得る。この場合、必要であれば後に参照するためにもっと最近のチャンクのアドレスを記憶することが好ましい場合がある。しかしながら、２つの完全に異なるチャンクを同一の値にハッシングした結果として衝突が起こる場合があり、上書きされた古いチャンクを指し示すポインタは失われる。
【００１５】
一実施形態において、本発明の機構は、データに対して固有の変形を適用し、デュプリケーションの対象となるデータの選択を可能とするシグネチャを決定する。この機構はデータを、固定長または可変長の、（平均）サイズが約８〜１６Ｋの比較的小さいチャンク（Ｃ）に分割する。各チャンクは、これを形成するキャラクタの分布およびそれらの対応する発生頻度について分析することができる。チャンク内の発生頻度によって配列させた異なるキャラクタのシーケンスをＣのｃスペクトラムとして規定し、対応する頻度のシーケンスをＣのｆスペクトラムとして規定する。更に、本発明の機構は、チャンク内の発生頻度によって配列させた異なるキャラクタ対のシーケンスについて検討し、この対のシーケンスをＣのｐスペクトラムとして規定する。提案する近似ハッシュ関数（ａｈ（Ｃ）と称する）は、これらのスペクトラムのいくつかの要素の組み合わせである。一例としてのみ示す一実施形態において、割り当てたハッシュ・テーブルの空間を利用するために、ハッシュ値のサイズを前もって固定することができる。例えば、テーブルが、３２ビットのハッシュ値に相当する約４０億のエントリを有すると決定することができる。スペクトラムの選択された要素、もっと正確にはスペクトラムの選択された要素のビットの一部は、それらを所望の位置にシフトさせてそのビット・ストリングに論理ＸＯＲ演算を実行することによって、適切に配置することができる。一実施形態において、近似ハッシュ関数は、キャラクタおよびそれらの頻度の組み合わせに基づいて発生させる。近似ハッシュ関数を用いて、デュプリケーションの対象となるデータを選択する。
【００１６】
ここで図１に移ると、コンピューティング・システム環境の例示的なアーキテクチャ１０が図示されている。コンピュータ・システム１０は、中央処理装置（ＣＰＵ）１２を含み、これは通信ポート１８およびメモリ・デバイス１６に接続されている。通信ポート１８は通信ネットワーク２０と通信状態にある。通信ネットワーク２０および記憶ネットワークは、サーバ（ホスト）２４、および記憶デバイス１４を含むことができる記憶システムと通信状態にあるように構成することができる。記憶システムは、ハード・ディスク・ドライブ（ＨＤＤ）・デバイス、固体デバイス（ＳＳＤ）等を含むことができ、これらはＲＡＩＤ（redundant array of independentdisks）に構成することができる。以下に記載するような動作は、システム１０内または他の場所に配置された記憶デバイス（複数のデバイス）１４上で実行することができ、独立してまたは他のＣＰＵデバイス１２と関連付けてあるいはその両方で動作する多数のメモリ・デバイス１６を有することができる。メモリ・デバイス１６は、電気的消去可能プログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ）または関連デバイスのホストのようなメモリを含むことができる。メモリ・デバイス１６および記憶デバイス１４は、信号担持媒体を介してＣＰＵ１２に接続されている。更に、ＣＰＵ１２は、通信ポート１８を介して、複数の追加のコンピュータ・ホスト・システム２４が付与された通信ネットワーク２０に接続されている。更に、メモリ・デバイス１６およびＣＰＵ１２は、コンピューティング・システム１０の各コンポーネントに埋め込まれるかまたは含ませることができる。また、各記憶システムが、別個のまたは異なるあるいはその両方のメモリ・デバイス１６およびＣＰＵ１２を含んで、これらが関連して動作するかまたは別個のメモリ・デバイス１６またはＣＰＵ１２あるいはその両方として動作することも可能である。
【００１７】
図２は、小さいブロックを用いたスケーラブル・データ・デュプリケーションのための例示的な方法２００を示すフローチャートである。方法２００が開始し（ステップ２０２）、シグネチャを発生する。これは、キャラクタ、頻度、およびキャラクタ対の分布の組み合わせに基づいて小さいデータ・ブロックに近似ハッシュ関数を適用した結果である（ステップ２０４）。近似ハッシュ関数を用いて、所与のデータ・ブロックについて、このデータ・ブロックのデュプリケーションが可能であるか否かを決定する（ステップ２０６）。方法２００は終了する（ステップ２０８）。
【００１８】
図２の機構を更に説明するため一実施形態において、ａ１，ａ２，．．．，ａｎ等のキャラクタ・セットを、チャンク内の異なるキャラクタのシーケンスとして、更に正確には、チャンク内で頻度の高い順に配列させたこれらのキャラクタのＡＳＣＩＩ表現として規定する。これらのキャラクタの頻度におけるタイ（tie）は、同一頻度を有するキャラクタをそれらのＡＳＣＩＩ値でソートすることによって切ることができる。この機構では、ｆ１≧ｆ２≧．．．≧ｆｎを、それぞれ対応する頻度とする。チャンク内の異なるキャラクタの数ｎは、１（同一キャラクタのチャンクについて全てゼロまたはブランクのように）とチャンクのサイズであるｋとの間で変動し得る。一般にこのサイズはＡＳＣＩＩアルファベットよりもはるかに大きいので、１≦ｎ≦２５６と想定することができる。
【００１９】
要素ａｉはブロックに分割することができる。この機構は、いくつかのキャラクタを集めて、それらを対称的に処理することができる。これは、いくつかのキャラクタの頻度が等しいかまたは極めて近いことが頻繁に起こり得るからである。このような場合、小さい混乱によってキャラクタの順序が変化し、完全に異なるハッシュ値が生じ得る。このことは、近似ハッシュ関数の目的が小さい変更に影響されないことであるのとは正反対である。ブロック内の全要素のＡＳＣＩＩ表現を同一のオフセットで並べ、それらの要素にＸＯＲ演算を実行して、ブロック内の内部順序が任意となるようにすることができる。
【００２０】
一実施形態において、ブロックを規定するための機構は、ｉ＝１，．．．，ｎ−１について、隣接する頻度間のギャップ・サイズｄｉを調べる（ｄｉ＝ｆｉ−ｆｉ＋１）。しかしながら、ｄｉのみに従ってギャップをソートすると、ギャップの規定は単一の要素を有するブロックを生成する方向へと強く偏る可能性がある。これは、最大のギャップが最大値間で発生する傾向があり得るからである。ギャップのサイズは、適切な重みで除算することによって正規化させ、ジップの法則に従ってｉ≧１について高調波の重み１／ｉを適用する。従って、ギャップはｉ×ｄｉ＝ｉ（ｆｉ−ｆｉ＋１）に関してソートされる。これは有利である。すなわち、整数の計算しか必要としない。最大の重みを有するｌ−１（ｌはブロックの数を表す）のギャップを選択し（例えばｌ＝１０に設定する）、シーケンスの開始、これらのｌ−１のギャップ、およびシーケンスの終了によって区切られる連続要素のｌセットをブロックとして規定する。
【００２１】
図３は、本発明の態様を実現可能であるコンピュータ環境においてブロックへの分割を概略的に示す例示的なブロック図を示す。一例としてのみ、図３においてｌ＝８とする。四角形は要素ａｉを表し、矢印は重み付けしたギャップｉ（ｆｉ−ｆｉ＋１）を表し、矢印の下の数字は低下順（non-increasing order）の重み付けギャップのインデックスである。図３において一例としてのみ示すが、生成されたブロックは、それぞれ３、１、３、２、４、１、４、および５の要素から成る。
【００２２】
図４は、本発明の態様を実現可能である近似ハッシュ関数の様々なコンポーネントのレイアウトを示す例示的なブロック図を示す。一実施形態において、提案する近似ハッシュ関数の様々な構築ブロックは、３２ビットのシグネチャを表す３２列を示し、これらは右（０）から左（３１）に示すように付番されている。右上から左下への斜線を付けたブロックは、キャラクタａｉのブロックを表し、キャラクタのＡＳＣＩＩ表現がその元の形態で行われていることを示す。左上から右下への斜線を付けたブロックは、キャラクタのＡＳＣＩＩ表現が逆に行われていることを示す。例えば、ＡＳＣＩＩの文字Ｗについて０１０１０１１１の代わりに１１１０１０１０である。網状線を付けたブロックは、キャラクタ対のブロックを表す。図の右下部分の小さいバーは、頻度（すなわちｆスペクトラムの要素）を表す。
【００２３】
一実施形態において、ブロックの数はｌ＝１０であり、最後のブロックのサイズは、多くても１０のキャラクタを含むように必要ならば切り捨てる。また、検討対象のキャラクタの発生数（例えば（１５））およびギャップ・サイズｄｉの制限は、もっと小さくすることも可能である。これらの調節の後、所与のチャンク内のブロック数が１０よりも小さい場合、その所与のブロック数に適合させた異なるレイアウトを選択することができる。図４のレイアウトでは、ｌ＝１０のブロックが与えられていると想定する。図７のフローチャートで、全ての可能な値ｌを扱う完全な説明を見ることができる。
【００２４】
更に、ｃスペクトラムから取得される各データ・ブロックは、完全なＡＳＣＩＩ表現を用いて、８ビット・サイズとすることができる。ただし、第１の（最も左の）２ビットを切り取ることができる最高頻度キャラクタの第１のブロックを除く。これらのブロックの各々をシフトすることができる。より具体的には、第１のブロックを２６ビット左に（例えば３２ビット・レイアウトにおいて左に揃えて）シフトし、次のブロックを２４ビット、次いで１８、１６、１３、１１、９、７、５、および３ビットずつシフトすることができる。キャラクタのそのままの表現および逆の表現は交互に配することができる。
【００２５】
ｆスペクトラムの要素は、以下に記載するようにシグネチャに組み込むことができる。１と８１９２との間の整数とすることができる各頻度値について、この機構はまず頻度値を（例えば１６ビットの）標準的な二値表現と見なし、このストリングに８個のゼロを追加することで右に拡張する。従って、この機構は各頻度ｆｉに２４ビット・ストリングＦｉを割り当て、例えばｆｉ＝５である場合、Ｆｉ＝００００００００  ０００００１０１  ００００００００とする。この機構はＤｉを、最上位ビットの直後の位置で開始する３ビット長のＦｉのサブストリングと規定する。上述の例では、
【数１】
2014534486.tif 000003
である（Ｄｉを形成するビットを強調して示す）。一例として、８ビットを超える値を有する別の例を示すためにｆｉ＝７５９について検討すると、
【数２】
2014534486.tif 000004
となる。ＦｉおよびＤｉの双方を表示している（強調を加えている）。一実施形態において、長さ２ビットのみである第１の要素を除いた全要素のサイズを３ビットに選択し、このことと、ｆスペクトラムの値の下限が１５であることによって、ゼロによる右パディングが必要ないことが示唆される。しかしながら他の実施形態では、下限を更に小さくし、値のビット・サイズを大きくすることも可能である。これらの要素のビットのオフセットは、０、０、０、１、１、２、２、３、３、４、４、５、５、６、６、および６と示されている。第１の（最大の）頻度は図において最も下の要素として示されている。
【００２６】
Ｃのｐスペクトラムのブロックは、長さ１２ビットとすることができ、レイアウトにおいて左に揃えて配置することができる。一実施形態において、Ｃのｐスペクトラムは、頻度の高い順に配列させることで規定することができ、この配列において５、６、７、８、および９とインデックスを付けたもの（すなわち５番目から９番目のブロック）を検討する。キャラクタについて実行したように最高頻度の対を選択しない理由は、それらの分布がはるかに偏っており、対（０、０）および（２５５、２５５）が、我々が試験を行った例の圧倒的多数において最高頻度として現れたからである。
【００２７】
５対の各々について、以下のビット・ストリングを構築することができる。２バイトＡ＝ａ７ａ６ａ５ａ４ａ３ａ２ａ１ａ０およびＢ＝ｂ７ｂ６ｂ５ｂ４ｂ３ｂ２ｂ１ｂ０が与えられると、この機構は、Ａを循環的に３ビット左に回転させ、Ｂを循環的に３ビット右に回転させる。Ａの右側の４ビットがＢの左側の４ビットと重複するようにこれらのバイトを並べ、次いでこれらのビット・ストリングにＸＯＲ論理演算を実行することができる。結果として得られる１２のビットを、
【数３】
2014534486.tif 000005
と示すことができる。ここで、ａＸＯＲｂについて表記
【数４】
2014534486.tif 000006
を用いている。ＡおよびＢの双方の最上位ビットおよび最下位ビットは重複部分にあるので、それらの分布が偏っている場合、更にＸＯＲ論理演算を行うことによって偏りを補正する追加の機会が得られる。最後に、レイアウトの全要素にＸＯＲ論理演算を実行して、所与のチャンクＣのハッシュ値として機能することができる０と２３２−１との間の数を表す３２ビット・ストリングを生成することができる。
【００２８】
一例としてのみ、シグネチャの実行を説明して分布の均一性を示すため、約２７ＧＢのＥｘｃｈａｎｇｅデータベースのサブセットおよび約５ＧＢのファイルを選択した。選択した実施形態において、チャンクは可変長サイズであった。検討対象のチャンクの右側ｄバイトに単純なラビン−カープ・ローリング・ハッシュを適用することで、チャンクの境界を規定した。このハッシュ値が何らかの既定の定数ｃに等しい場合、これらのｄバイトの後でチャンクを切り捨てた。他の場合、バイトを付加し、ローリング・ハッシュを用いた試験を繰り返した。選択した実施形態において、ｄ＝２５、ｃ＝２７１８であり、ハッシュ関数はＲＫ（ｘ）＝ｘ  ｍｏｄ  Ｐであった。ここでＲＫはラビン−カープ・ローリング・ハッシュ値であり、ｘは変数であり、Ｐ＝２４８−２５７は素数であり、ｍｏｄはモジュラス関数を表し、Ａ  ｍｏｄ  Ｂで規定されるのはＡをＢで除算した余りであり、ここでＡおよびＢの双方は整数である。または、数学的表記では以下のとおりである。
【数５】
2014534486.tif 000007
チャンク長に極値を避けるため、一例として２Ｋの下限および６４Ｋの上限を適用する。このため、チャンクの平均サイズは試験データベースで約１２Ｋであった。
【００２９】
図５は、例示的な試験データベースにおいて、シグネチャの３２ビット位置の各々で１ビットを取得する確率を示すグラフである。垂直軸は０から１までの確率値を示し、水平軸は０から３１のインデックスを付けた３２ビット位置を示す。図５からわかるように、全てのビット位置で、確率はランダム分布についての予想値０．５に極めて近い。
【００３０】
図６は、データ・チャンクを規定するための例示的な方法６００を示すフローチャートである。方法６００が開始し（ステップ６０２）、パラメータＫｍｉｎ，Ｋｍａｘ，Ｐ，ｓ，Ｃｏｎｓｔを読み取る。ここでＫｍｉｎおよびＫｍａｘはチャンクに許容する最小サイズおよび最大サイズである（ステップ６０４）。Ｐはラビン−カープ・ハッシュにおいて用いる素数であり、ｓはラビン−カープ・ハッシュを適用するバイト数であり、Ｃｏｎｓｔは何らかの固定の整数定数である（０≦Ｃｏｎｓｔ＜Ｐ）。Ｋｍｉｎバイトをバッファに読み込む（ステップ６０６）。Ｓを、最後のｓバイトが整数を表すと見なされた場合に読み取られるそのｓバイトの値を示すものとする（ステップ６０８）。次いで方法６００は、Ｓ  ｍｏｄ  Ｐ＝Ｃｏｎｓｔであるか否かを判定する（ステップ６１０）。イエスの場合、方法６００は現在のバッファをチャンクとして規定する（ステップ６１６）。ノーの場合、方法６００は更に１バイトを読み取る（ステップ６１２）。次いで方法６００は、バッファ・サイズがパラメータＫｍａｘと等しいか否かを判定する（ステップ６１４）。ノーの場合、方法６００はステップ６０８に戻る。イエスの場合、方法６００は現在のバッファをチャンクとして規定し（ステップ６１６）、方法６００は終了する（ステップ６１８）。
【００３１】
図７、図８、および図９は、シグネチャ規定のための方法７０００を示す。技術的な理由のため、方法７００のフローチャートは３つの部分すなわち図７、図８、および図９に分割され、それぞれキャラクタ、頻度、およびキャラクタ対を処理するが、図７、図８、図９は全て方法７００の一部である。図７は、シグネチャ規定のキャラクタ部分を規定するための例示的な方法を示すフローチャートである。キャラクタを処理する図７において、方法７００はステップ７０２で開始し、次いでパラメータを初期化するため、チャンクを読み取り、チャンクにおける異なるキャラクタのシーケンスでありチャンク内の頻度の高い順にインデックスを付けたキャラクタａ１，ａ２，．．．，ａｎのセットを規定し、対応する頻度としてｆ１≧ｆ２≧．．．≧ｆｎをそれぞれ規定し、ｉ＝１，．．．，ｎ−１について頻度間のギャップ・サイズｄｉ＝ｆｉ−ｆｉ＋１として規定し、ｆｉ≦１５またはｄｉ≦５である要素ａ１を排除し、
【数６】
2014534486.tif 000008
（９、シーケンスｄｉ内の要素数）によってブロック数Ｋを規定し、シーケンスｉｄｉをソートし、ｎ１，．．．，ｎｋ−１を、シーケンスｉｄｉ内のＫ−１の最大要素のインデックスとし、ｎ０＝０およびｎｋ＝ｎｋ−１＋１０を規定し、頻度のＫブロックを、
【数７】
2014534486.tif 000009
として規定する（ステップ７０４）。構築するシグネチャｓｉｇは、ゼロのみから成る３２ビット長の整数として初期化される。続いてステップ７０８に移り、方法７００は、ブロックのインデックスを表すパラメータｊをゼロに設定し、現在のキャラクタのインデックスを表すパラメータｉｓをｎｊ＋１に設定し（ステップ７０８）、その後、方法７００はｊ＝０であるか否かを判定する（ステップ７２４）。イエスの場合、方法７００はａｉの２の最も左の２ビットを切り捨て（ステップ７２６）、次いでステップ７２８に移る。いずれの場合であっても、方法７００は次いでｊが奇数であるか否かを判定する（ステップ７２８）。イエスの場合、ａｉのＡＳＣＩＩ表現を逆にする（ステップ７３０）。いずれの場合であっても、方法７００は次いで関数
【数８】
2014534486.tif 000010
を実行する（ステップ７３２）。これは、ｓｉｇに記憶された現在の値と、ブロックのインデックスｊおよびブロック合計数Ｋによって決まる位置にシフトされたキャラクタａｉのＡＳＣＩＩ表現との論理ＸＯＲ演算を実行する。これらのシフトの正確な量は、シグネチャ・スキームの外部パラメータである（特定のチャンクに依存しない）テーブルｃｓｈｉｆｔ［Ｋ，ｊ］で与えられ、図１０に示されている。次いで方法７００はｉを１だけ増分する（ステップ７３４）。次いで方法７００は、ｉ≦ｎｊ＋１であるか否かをチェックすることで、ｊとインデックスが付いた処理対象の現在のブロック内にまだ要素があるか否かを判定する（ステップ７３６）。イエスの場合、方法７００はステップ７２４に戻る。ノーの場合、方法７００はｊを１だけ増分することで次のブロックに移ろうとする（ステップ７３８）。次いで方法７００は、ｊ＜Ｋであるか否かをチェックすることで処理対象のブロックがまだあるか否かを判定する（ステップ７４０）。イエスの場合、方法７００はステップ７２４に戻ってループの追加の繰り返しを実行する。ノーの場合、方法７００は続けて接続点Ａ（ステップ７４２）に移る。これは、頻度を処理する図８に示すフローチャートの次の部分に対するエントリ・ポイントである。
【００３２】
図８は、シグネチャ規定の頻度部分を規定するための例示的な方法７００を示すフローチャートである。頻度を処理する図８において、方法７００はエントリ・ポイントＡで開始し（ステップ７４２）、利用可能ブロックの数Ｋに従ってシグネチャの規定に関係する頻度の数を選択する。Ｋ＞６である場合（ステップ７５０）、頻度の数ｌｉｍを１６に設定する（ステップ７５４）。他の場合、Ｋ＞２であるならば（ステップ７５２）、頻度の数ｌｉｍを２０に設定する（ステップ７５６）。他の場合、すなわちＫ＝２またはＫ＝１またはＫ＝０である場合、頻度の数ｌｉｍを２３に設定する（ステップ７５８）。全ての場合において、方法７００はステップ７６０に移り、頻度ｆｉのインデックスを表すパラメータｉを初期化し、これを１に設定する。ステップ７６２において、図４で上述したように、頻度ｆｉの二進表現から長さ３ビットのサブストリングを抽出する。更に具体的には、Ｆはｆｉを右端の８個のゼロでパディングした結果であり、これはｆｉを２５６で乗算したものと同等である。ｆｉ、従ってＦはゼロになり得ないことに留意すべきである。次いで、方法７００はパラメータｈを
【数９】
2014534486.tif 000011
に設定し、これは０のインデックスが付いた最も右のビットでカウントを始めたＦの二進表現の最も左の１ビットのインデックスである。最後に、Ｆから２ｈを減算することによってＦの先頭の１ビットの後の３ビットをｅにおいて取得する。これによって先頭の１ビットをキャンセルする。次いで２ｈ−３で除算して、右側のｈ−３ビットを消去し、所望のとおり３ビットのみを残す。次いで方法７００は、ステップ７６４においてｉ＝１であるか否かをチェックすることによって第１の頻度を処理するか否かをチェックし、そうである場合、ステップ７６６においてｅの値を半分にする。これはその３ビットの最も右側を消去することと同等である。いずれの場合であっても、方法７００は次いで
【数１０】
2014534486.tif 000012
を実行する（ステップ７６８）。これは、ｓｉｇに記憶された現在の値と、要素のインデックスｉおよびブロック合計数Ｋによって決まる位置にシフトされた値ｅの２または３ビットとの論理ＸＯＲ演算を実行する。これらのシフトの正確な量は、シグネチャ・スキームの外部パラメータである（特定のチャンクに依存しない）テーブルｆｓｈｉｆｔ［Ｋ，ｉ］で与えられ、図１０に示されている。次いで方法７００はｉを１だけ増分し（ステップ７７０）、ｉ≦ｌｉｍであるか否かをチェックすることで処理対象の頻度がまだあるか否かを判定する（ステップ７７２）。イエスの場合、方法７００はステップ７６２に戻ってループの追加の繰り返しを実行する。ノーの場合、方法７００は続けて接続点Ｂに移る（ステップ７７４）。これは、キャラクタ対を処理する図９に示すフローチャートの次の部分に対するエントリ・ポイントである。
【００３３】
図９は、シグネチャ規定のキャラクタ対部分を規定するための例示的な方法７００を示すフローチャートである。キャラクタ対を処理する図９において、方法７００はエントリ・ポイントＢで開始する（ステップ７７４）。ステップ７７６において、最初にキャラクタ対をチャンク内の発生頻度の高い順にソートする。方法７００での検討対象の対は、ソートによる順序でインデックスが５以上のものである。対は、いくつかの対のクラスタで処理する。クラスタの数ｐｎｕｍ、および各クラスタにどの対が属するかは、利用可能ブロックの数Ｋに従って決定する。対のクラスタへの分割は、アレイｐｌｉｍ［ｊ］によって実施する。ここで１≦ｊ≦ｐｎｕｍであり、ｐｌｉｍ［ｊ］はクラスタｊ内の最後の対のインデックスを与える。Ｋ≧８である場合（ステップ７７８）、クラスタの数ｐｎｕｍを１に設定し、ｐｌｉｍ［１］を９に設定するので、この場合の唯一のクラスタは、５、６、７、８、および９とインデックスが付いた５対から成る（ステップ７８１）。他の場合、Ｋ＞１であるならば（ステップ７８０）、クラスタの数ｐｎｕｍを２に設定し、ｐｌｉｍ［１］を８に設定し、ｐｌｉｍ［２］を１２に設定するので、この場合の２つのクラスタの第１のものは５、６、７、および８とインデックスが付いた４対から成り、第２のクラスタは９、１０、１１、および１２とインデックスが付いた４対から成る（ステップ７８２）。他の場合、すなわちＫ＝１またはＫ＝０である場合、クラスタの数ｐｎｕｍを３に設定し、ｐｌｉｍ［１］を８に設定し、ｐｌｉｍ［２］を１２に設定し、ｐｌｉｍ［３］を１６に設定するので、この場合の３つのクラスタの第１のものは５、６、７、および８とインデックスが付いた４対から成り、第２のクラスタは９、１０、１１、および１２とインデックスが付いた４対から成り、第３のクラスタは１３、１４、１５、および１６とインデックスが付いた４対から成る（ステップ７８３）。全ての場合において、方法７００は次いでステップ７８４に移り、対のインデックスを表すパラメータｉを初期化し、これを５に設定し、クラスタのインデックスを表すパラメータｊも初期化し、これを１に設定する。
【００３４】
ステップ７８５において、方法７００は、各繰り返しにおいて単一の対Ｐｉを処理するループを開始する。ｕおよびｖは、対Ｐｉを形成するキャラクタとして規定される。ステップ７８６において、ｕおよびｖのＡＳＣＩＩ表現の関数として長さ１２ビットのストリングｗを形成する。更に具体的には、ｕを循環的に３ビット左に回転させ、ｖを循環的に３ビット右に回転させ、ｕを４ビット左にシフトさせた後に回転後のストリングに論理ＸＯＲ演算を適用することによって、結果ｗを得る。方法７００は次いで、
【数１１】
2014534486.tif 000013
を実行する（ステップ７８７）。これは、ｓｉｇに記憶された現在の値と、クラスタのインデックスｊおよびブロック合計数Ｋによって決まる位置にシフトされた値ｗの１２ビットとの論理ＸＯＲ演算を実行する。これらのシフトの正確な量は、シグネチャ・スキームの外部パラメータである（特定のチャンクに依存しない）テーブルｐｓｈｉｆｔ［Ｋ，ｊ］で与えられ、図１０に示している。方法７００は次いでｉを１だけ増分し（ステップ７８８）、ｉ≦ｐｌｉｍ［ｊ］であるか否かをチェックすることでこのクラスタ内に処理対象の対がまだあるか否かを判定する（ステップ７８９）。イエスの場合、方法７００はステップ７８５に戻って、同一クラスタの別の対を用いてループの更に別の繰り返しを実行する。ノーの場合、方法７００はｊを１だけ増分して（ステップ７９０）、ｊ≦ｐｎｕｍであるか否かをチェックすることで処理対象のクラスタがまだあるか否かを判定する（ステップ７９１）。イエスの場合、方法７００はステップ７８５に戻って、別のクラスタを用いてループの更に別の繰り返しを実行する。ノーの場合、方法７００は評価を行ったシグネチャｓｉｇを出力し（ステップ７９２）、終了する（ステップ７９９）。
【００３５】
図１０は、図７、図８、図９のフローチャートに用いたシフト定数を規定する。これらのテーブルはＣスタイルで与え、インデックスは０から開始するので、第１の行および第１の列は用いない。第１のパラメータはブロックＫの所与の数である。第２のパラメータは、
ａ）ｃｓｈｉｆｔでは、キャラクタのブロックのインデックスｊ
ｂ）ｆｓｈｉｆｔでは、頻度のインデックスｉ
ｃ）ｐｓｈｉｆｔでは、用いる対の数のインデックスｐｎｕｍ（１から３）
Ｋ≧８では、１対だけ用い、要素はインデックスが５−６−７−８−９のもの
２≦Ｋ≦７では、２対を用いる。５−６−７−８および９−１０−１１−１２
Ｋ＝１では、３対を用いる。５−６−７−８、９−１０−１１−１２、１３−１４−１５−１６
これらの要素ブロックの最後のインデックスはｐｌｉｍ［ｊ］で与えられる。
【００３６】
当業者によって認められるように、本発明の態様は、システム、方法、またはコンピュータ・プログラムとして具現化することができる。従って、本発明の態様は、全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、または、ソフトウェアおよびハードウェアの態様を組み合わせた実施形態という形態を取ることができ、それらは全て本明細書において、「回路」、「モジュール」、または「システム」と一般的に称することができる。更に、本発明の態様は、具現化されたコンピュータ読み取り可能プログラム・コードを有する１つ以上のコンピュータ読み取り可能媒体（複数の媒体）において具現化されたコンピュータ・プログラムの形態を取ることも可能である。
【００３７】
１つ以上のコンピュータ読み取り可能媒体（複数の媒体）のあらゆる組み合わせを利用することができる。コンピュータ読み取り可能媒体は、コンピュータ読み取り可能信号媒体またはコンピュータ読み取り可能記憶媒体とすることができる。コンピュータ読み取り可能記憶媒体は例えば、限定ではないが、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、デバイス、または前述のもののいずれかの適切な組み合わせとすることができる。コンピュータ読み取り可能記憶媒体の更に具体的な例（非網羅的な列挙）は、以下を含む。すなわち、１本以上のワイヤを有する電気的接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶デバイス、または前述のもののいずれかの適切な組み合わせである。この文書の文脈において、コンピュータ読み取り可能記憶媒体は、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを含有または記憶することが可能ないずれかの有形の（tangible）媒体とすることができる。
【００３８】
コンピュータ読み取り可能媒体上で具現化されるプログラム・コードは、限定ではないが、無線、有線、光ファイバ・ケーブル、ＲＦ等、または前述のもののいずれかの適切な組み合わせを含むいずれかの適切な媒体を用いて伝送することができる。本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋等のオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語等の従来の手順プログラミング言語を含む１つ以上のプログラミング言語のいずれかの組み合わせにおいて記述することができる。プログラム・コードは、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンのソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモート・コンピュータ上で、または全体的にリモート・コンピュータもしくはサーバ上で、実行することができる。後者の場合、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを介してユーザのコンピュータに接続することができ、または、接続は、（例えばインターネット・サービス・プロバイダを用いてインターネットを介して）外部コンピュータに対して行うことができる。
【００３９】
本発明の実施形態に従った方法、装置（システム）、およびコンピュータ・プログラムのフローチャート図またはブロック図あるいはその両方を参照して、本発明の態様について上述した。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実施可能であることは理解されよう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて機械を生成することができ、これによって、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施するための手段を生成するようになっている。
【００４０】
これらのコンピュータ・プログラム命令はコンピュータ読み取り可能媒体に記憶することができ、これによって、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスに特定の方法で機能するように指示することができ、これにより、コンピュータ読み取り可能媒体に記憶された命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施する命令を含む製造品を生成するようになっている。また、コンピュータ・プログラム命令を、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにロードして、そのコンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させてコンピュータ実施プロセスを生成することができ、これによって、コンピュータまたは他のプログラマブル装置上で実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能／行為を実施するためのプロセスを提供するようになっている。
【００４１】
上述の図面におけるフローチャートおよびブロック図は、本発明の様々な実施形態に従ったシステム、方法、およびコンピュータ・プログラムの可能な実施のアーキテクチャ、機能性、および動作を例示する。この点で、フローチャートまたはブロック図における各ブロックは、指定された論理機能（複数の機能）を実施するための１つ以上の実行可能命令を含むコードのモジュール、セグメント、または一部を表すことができる。また、いくつかの代替的な実施において、ブロックに明記した機能は、図面に明記した順序どおりでなく発生する場合があることに留意すべきである。例えば、関与する機能性に応じて、連続して示した２つのブロックは実際には実質的に同時に実行されることがあり、またはブロックは時に逆の順序で実行される場合がある。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせは、指定された機能もしくは行為を実行する特殊目的ハードウェア・ベースのシステム、または特殊目的ハードウェアおよびコンピュータ命令の組み合わせによって実施可能であることに留意すべきである。
【００４２】
本発明の１つ以上の実施形態について詳細に例示したが、以下の特許請求の範囲に記載した本発明の範囲から逸脱することなくそれらの実施形態に変更および適合を実施可能であることは、当業者には認められよう。特に、図６のステップ６０４に見られる定数Ｋｍｉｎ，Ｋｍａｘ，Ｐ，ｓ，Ｃｏｎｓｔ、または、図７、図８、または図９のフローチャートにおいて、ステップ７０４、７２６、７５０、７５２、７５４、７５６、７５８、７６２、７６６、７７６、７７８、７８０、７８１、７８２、７８３、７８４、７８６に見られる定数のいずれか、または図８のまたは表ｃｓｈｉｆｔ、ｆｓｈｉｆｔ、およびｐｓｈｉｆｔのいずれかの値を変更すると、完全に異なるシグネチャｓｉｇが得られるが、これも本発明の目的を達成することができる。従って、上で用いた具体的な定数は、一例として可能な実施のために与えられており、これらの値のみに本発明の範囲を限定するものとして理解されない。
【図１】
2014534486.tif 000014
【図２】
2014534486.tif 000015
【図３】
2014534486.tif 000016
【図４】
2014534486.tif 000017
【図５】
2014534486.tif 000018
【図６】
2014534486.tif 000019
【図７】
2014534486.tif 000020
【図８】
2014534486.tif 000021
【図９】
2014534486.tif 000022
【図１０】
2014534486.tif 000023
【手続補正書】
【提出日】平成26年3月28日(2014.3.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
小さいデータ・チャンクを用いて動作するスケーラブル・データデュプリケーションのための方法であって、
前記小さいデータ・チャンクの各々について、前記小さいデータ・チャンクに現れるキャラクタの表現と前記小さいデータ・チャンクの頻度の表現との組み合わせに基づいてシグネチャを発生させることであって、前記シグネチャを用いてデュプリケーションの対象となるデータの選択を支援する、方法。
【請求項２】
前記シグネチャが、前記小さいデータ・チャンクにおける小さい変更によって前記シグネチャに小さい変化および変化なしの一方を引き起こすことができる特性を有する、請求項１に記載の方法。
【請求項３】
前記シグネチャが、前記小さいデータ・チャンクのｃスペクトラム、前記小さいデータ・チャンクのｆスペクトラム、前記小さいデータ・チャンクのｐスペクトラムに基づいており、前記小さいデータ・チャンクの前記ｃスペクトラムが、前記小さいデータ・チャンクにおける発生頻度の順に配列された異なるキャラクタの表現のシーケンスであり、前記小さいデータ・チャンクの前記ｆスペクトラムが、前記小さいデータ・チャンクにおける前記異なるキャラクタの頻度の対応するシーケンスであり、前記小さいデータ・チャンクの前記ｐスペクトラムが、前記小さいデータ・チャンクにおける前記発生頻度の順に配列された異なるキャラクタ対のシーケンスである、請求項１に記載の方法。
【請求項４】
ｃスペクトラム、ｆスペクトラム、およびｐスペクトラムに基づいて前記シグネチャを発生させることに関連付けて、
順序付けたシーケンスにおいて隣接するキャラクタの頻度ｆｉ間のギャップｄｉ＝ｆｉ−ｆｉ＋１に重み付けすることによって、同様の頻度を有する前記ｃスペクトラムのキャラクタを組み合わせてブロックを生成し、前記ギャップが重みに基づいて正規化されている、ことと、
前記ｃスペクトラムのキャラクタのブロックの境界を規定するために前記ギャップのサブセットを選択することと、
前記ｃスペクトラムのキャラクタのブロックにおけるキャラクタの組み合わせに論理ＸＯＲ演算を実行することと、
前記ｆスペクトラムの頻度のサブセットのビットのサブセットを選択することと、
前記ｐスペクトラムの対のサブセットを選択し、前記ｐスペクトラムの対の前記選択したサブセットの各々についてキャラクタの表現の対に論理演算を実行することと、
の１つ以上を実行することを更に含む、請求項３に記載の方法。
【請求項５】
前記ビットの選択したサブセットおよび前記対の選択したサブセットにシフト動作を実行し、前記選択したサブセットを組み合わせてシグネチャを表すビット・ストリングを生成することによって論理ＸＯＲ演算を実行することを更に含む、請求項４に記載の方法。
【請求項６】
パラメータ・テーブルに従って前記シフト動作を実行することを更に含む、請求項５に記載の方法。
【請求項７】
前記ギャップｄｉ＝ｆｉ−ｆｉ＋１を除算する重みｗｉがｗｉ＝１／ｉである、請求項４に記載の方法。
【請求項８】
キャラクタの表現の対に実行される前記論理演算が、
ビットのストリングを循環的に回転させることと、
前記ビットのストリングをシフトさせることと、
論理ＸＯＲ演算を実行することと、
の少なくとも１つを含む、請求項４に記載の方法。
【請求項９】
コンピューティング環境において小さいデータ・チャンクを用いて動作するスケーラブル・データデュプリケーションのためのシステムであって、
前記コンピューティング記憶環境において動作可能である少なくとも１つのプロセッサ・デバイスであって、
前記小さいデータ・チャンクの各々について、前記小さいデータ・チャンクに現れるキャラクタの表現と前記小さいデータ・チャンクの頻度の表現との組み合わせに基づいてシグネチャを発生させ、前記シグネチャを用いてデュプリケーションの対象となるデータの選択を支援するために適合されている少なくとも１つのプロセッサ・デバイスを含む、システム。
【請求項１０】
前記シグネチャが、前記小さいデータ・チャンクにおける小さい変更によって前記シグネチャに小さい変化および変化なしの一方を引き起こすことができる特性を有する、請求項９に記載のシステム。
【請求項１１】
前記シグネチャが、前記小さいデータ・チャンクのｃスペクトラム、前記小さいデータ・チャンクのｆスペクトラム、前記小さいデータ・チャンクのｐスペクトラムに基づいており、前記小さいデータ・チャンクの前記ｃスペクトラムが、前記小さいデータ・チャンクにおける発生頻度の順に配列された異なるキャラクタの表現のシーケンスであり、前記小さいデータ・チャンクの前記ｆスペクトラムが、前記小さいデータ・チャンクにおける前記異なるキャラクタの頻度の対応するシーケンスであり、前記小さいデータ・チャンクの前記ｐスペクトラムが、前記小さいデータ・チャンクにおける前記発生頻度の順に配列された異なるキャラクタ対のシーケンスである、請求項９に記載のシステム。
【請求項１２】
ｃスペクトラム、ｆスペクトラム、およびｐスペクトラムに基づいて前記シグネチャを発生させることに関連付けて、前記プロセッサ・デバイスが、
順序付けたシーケンスにおいて隣接するキャラクタの頻度ｆｉ間のギャップｄｉ＝ｆｉ−ｆｉ＋１に重み付けすることによって、同様の頻度を有する前記ｃスペクトラムのキャラクタを組み合わせてブロックを生成し、前記ギャップが重みに基づいて正規化されている、ことと、
前記ｃスペクトラムのキャラクタのブロックの境界を規定するために前記ギャップのサブセットを選択することと、
前記ｃスペクトラムのキャラクタのブロックにおけるキャラクタの組み合わせに論理ＸＯＲ演算を実行することと、
前記ｆスペクトラムの頻度のサブセットのビットのサブセットを選択することと、
前記ｐスペクトラムの対のサブセットを選択し、前記ｐスペクトラムの対の前記選択したサブセットの各々についてキャラクタの表現の対に論理演算を実行することと、
の１つ以上を実行するために更に適合されている、請求項１１に記載のシステム。
【請求項１３】
前記プロセッサ・デバイスが、前記ビットの選択したサブセットおよび前記対の選択したサブセットにシフト動作を実行し、前記選択したサブセットを組み合わせてシグネチャを表すビット・ストリングを生成することによって論理ＸＯＲ演算を実行するために更に適合されている、請求項１２に記載のシステム。
【請求項１４】
前記プロセッサ・デバイスが、パラメータ・テーブルに従って前記シフト動作を実行するために更に適合されている、請求項１３に記載のシステム。
【請求項１５】
前記ギャップｄｉ＝ｆｉ−ｆｉ＋１を除算する重みｗｉがｗｉ＝１／ｉである、請求項１２に記載のシステム。
【請求項１６】
キャラクタの表現の対に実行される前記論理演算が、
ビットのストリングを循環的に回転させることと、
前記ビットのストリングをシフトさせることと、
論理ＸＯＲ演算を実行することと、
の少なくとも１つを含む、請求項１２に記載のシステム。
【請求項１７】
小さいデータ・チャンクを用いて動作するスケーラブル・データデュプリケーションのためのコンピュータ・プログラムであって、
前記小さいデータ・チャンクの各々について、前記小さいデータ・チャンクに現れるキャラクタの表現と前記小さいデータ・チャンクの頻度の表現との組み合わせに基づいてシグネチャを発生させるための第１の実行可能部分であって、前記シグネチャを用いてデュプリケーションの対象となるデータの選択を支援する、第１の実行可能部分をコンピュータに実行させる、コンピュータ・プログラム。
【請求項１８】
前記シグネチャが、前記小さいデータ・チャンクにおける小さい変更によって前記シグネチャに小さい変化および変化なしの一方を引き起こすことができる特性を有する、請求項１７に記載のコンピュータ・プログラム。
【請求項１９】
前記シグネチャが、前記小さいデータ・チャンクのｃスペクトラム、前記小さいデータ・チャンクのｆスペクトラム、前記小さいデータ・チャンクのｐスペクトラムに基づいており、前記小さいデータ・チャンクの前記ｃスペクトラムが、前記小さいデータ・チャンクにおける発生頻度の順に配列された異なるキャラクタの表現のシーケンスであり、前記小さいデータ・チャンクの前記ｆスペクトラムが、前記小さいデータ・チャンクにおける前記異なるキャラクタの頻度の対応するシーケンスであり、前記小さいデータ・チャンクの前記ｐスペクトラムが、前記小さいデータ・チャンクにおける前記発生頻度の順に配列された異なるキャラクタ対のシーケンスである、請求項１７に記載のコンピュータ・プログラム。
【請求項２０】
ｃスペクトラム、ｆスペクトラム、およびｐスペクトラムに基づいて前記シグネチャを発生させることに関連付けて、
順序付けたシーケンスにおいて隣接するキャラクタの頻度ｆｉ間のギャップｄｉ＝ｆｉ−ｆｉ＋１に重み付けすることによって、同様の頻度を有する前記ｃスペクトラムのキャラクタを組み合わせてブロックを生成し、前記ギャップが重みに基づいて正規化されている、ことと、
前記ｃスペクトラムのキャラクタのブロックの境界を規定するために前記ギャップのサブセットを選択することと、
前記ｃスペクトラムのキャラクタのブロックにおけるキャラクタの組み合わせに論理ＸＯＲ演算を実行することと、
前記ｆスペクトラムの頻度のサブセットのビットのサブセットを選択することと、
前記ｐスペクトラムの対のサブセットを選択し、前記ｐスペクトラムの対の前記選択したサブセットの各々についてキャラクタの表現の対に論理演算を実行することと、
の１つ以上を実行するための第３の実行可能部分を更にコンピュータに実行させる、請求項１９に記載のコンピュータ・プログラム。
【国際調査報告】
2014534486.tif 000024
2014534486.tif 000025