IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エヌデータ・インコーポレイテッドの特許一覧

特表2023-510134スケッチ計算のためのシステムおよび方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-03-13
(54)【発明の名称】スケッチ計算のためのシステムおよび方法
(51)【国際特許分類】
   G06F 16/174 20190101AFI20230306BHJP
【FI】
G06F16/174
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022537814
(86)(22)【出願日】2020-12-17
(85)【翻訳文提出日】2022-08-03
(86)【国際出願番号】 US2020065711
(87)【国際公開番号】W WO2021127245
(87)【国際公開日】2021-06-24
(31)【優先権主張番号】16/718,686
(32)【優先日】2019-12-18
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/718,703
(32)【優先日】2019-12-18
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/718,714
(32)【優先日】2019-12-18
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.UNIX
2.ANDROID
(71)【出願人】
【識別番号】522242030
【氏名又は名称】エヌデータ・インコーポレイテッド
(74)【代理人】
【識別番号】100114188
【弁理士】
【氏名又は名称】小野 誠
(74)【代理人】
【識別番号】100119253
【弁理士】
【氏名又は名称】金山 賢教
(74)【代理人】
【識別番号】100124855
【弁理士】
【氏名又は名称】坪倉 道明
(74)【代理人】
【識別番号】100129713
【弁理士】
【氏名又は名称】重森 一輝
(74)【代理人】
【識別番号】100137213
【弁理士】
【氏名又は名称】安藤 健司
(74)【代理人】
【識別番号】100143823
【弁理士】
【氏名又は名称】市川 英彦
(74)【代理人】
【識別番号】100183519
【弁理士】
【氏名又は名称】櫻田 芳恵
(74)【代理人】
【識別番号】100196483
【弁理士】
【氏名又は名称】川嵜 洋祐
(74)【代理人】
【識別番号】100160749
【弁理士】
【氏名又は名称】飯野 陽一
(74)【代理人】
【識別番号】100160255
【弁理士】
【氏名又は名称】市川 祐輔
(74)【代理人】
【識別番号】100182132
【弁理士】
【氏名又は名称】河野 隆
(74)【代理人】
【識別番号】100172683
【弁理士】
【氏名又は名称】綾 聡平
(74)【代理人】
【識別番号】100219265
【弁理士】
【氏名又は名称】鈴木 崇大
(74)【代理人】
【識別番号】100146318
【弁理士】
【氏名又は名称】岩瀬 吉和
(74)【代理人】
【識別番号】100127812
【弁理士】
【氏名又は名称】城山 康文
(72)【発明者】
【氏名】ポナラ,サンソッシュ・ラフール
(72)【発明者】
【氏名】ヴァイシュ,タラン
(57)【要約】
スケッチ計算のための方法が提供される。本方法は、1つまたは複数のクライアントアプリケーションから入力データストリームを受信するステップを含み得る。本方法はまた、入力データストリームから少なくとも1つのセグメントを生成するステップを含み得る。少なくとも1つのセグメントは、複数のチャンクを含み得る。本方法は、少なくとも1つのセグメントのスケッチを計算するステップをさらに含んでもよい。スケッチは、特徴のセットが少なくとも1つのセグメントに対応するように、少なくとも1つのセグメントを表すまたは少なくとも1つのセグメントに固有の特徴のセットを含み得る。スケッチは、(i)複数のチャンクのフルインデックスを生成することなく、または(ii)少なくとも1つの他の入力データストリームをフルインデックスと比較することなく、1つまたは複数のクライアントアプリケーションから受信した少なくとも1つの他の入力データストリームのインライン重複排除に使用可能であり得る。
【選択図】図6B
【特許請求の範囲】
【請求項1】
スケッチ計算のための方法であって、
(a)1つまたは複数のクライアントアプリケーションから入力データストリームを受信するステップと、
(b)前記入力データストリームから少なくとも1つのセグメントを生成するステップであって、前記少なくとも1つのセグメントは複数のチャンクを含む、ステップと、
(c)前記少なくとも1つのセグメントのスケッチを計算するステップであって、前記スケッチは、特徴のセットが前記少なくとも1つのセグメントに対応するように、前記少なくとも1つのセグメントを表すまたは前記少なくとも1つのセグメントに固有の前記特徴のセットを含み、前記スケッチは、(i)前記複数のチャンクのフルインデックスを生成することなく、または(ii)前記少なくとも1つの他の入力データストリームを前記フルインデックスと比較することなく、前記1つまたは複数のクライアントアプリケーションから受信した前記少なくとも1つの他の入力データストリームのインライン重複排除に使用可能である、ステップと
を含む、方法。
【請求項2】
前記特徴のセットが、前記少なくとも1つのセグメントを別のセグメントから一意に識別または区別するために使用可能な特徴の最小数を含む、請求項1に記載の方法。
【請求項3】
前記特徴の最小数が、約3個の特徴から約15個の特徴までの範囲である、請求項2に記載の方法。
【請求項4】
前記特徴の最小数が、15個以下の特徴を含む、請求項2に記載の方法。
【請求項5】
前記少なくとも1つのセグメントが、少なくとも約1メガバイト(MB)のサイズを有する、請求項1に記載の方法。
【請求項6】
前記少なくとも1つのセグメントが、約1メガバイト(MB)~約4MBの範囲のサイズを有する、請求項5に記載の方法。
【請求項7】
前記複数のチャンクが、少なくとも約100個のチャンクを含む、請求項1に記載の方法。
【請求項8】
前記複数のチャンクが、少なくとも約1000個のチャンクを含む、請求項7に記載の方法。
【請求項9】
前記複数のチャンクが可変長である、請求項1に記載の方法。
【請求項10】
前記ステップ(b)が、前記入力データストリームから複数のセグメントを生成するステップであって、前記複数のセグメントは前記少なくとも1つのセグメントを含む、ステップをさらに含む、請求項9に記載の方法。
【請求項11】
前記複数のセグメントのうちのセグメントが、約1メガバイト(MB)~約4MBの範囲の異なるサイズを有する、請求項10に記載の方法。
【請求項12】
前記複数のセグメントのうちのセグメントが、約1メガバイト(MB)~約4MBの範囲内のほぼ同じサイズを有する、請求項10に記載の方法。
【請求項13】
前記ステップ(b)が、前記複数のチャンクの各チャンクについてフィンガープリントを生成するステップをさらに含む、請求項1に記載の方法。
【請求項14】
前記フィンガープリントが、1つまたは複数のハッシングアルゴリズムを使用して生成される、請求項13に記載の方法。
【請求項15】
前記フィンガープリントが、1つまたは複数の非ハッシングアルゴリズムを使用して生成される、請求項13に記載の方法。
【請求項16】
前記特徴のセットが、前記複数のチャンクから選択されたチャンクのサブセットに関連付けられる、請求項13に記載の方法。
【請求項17】
前記特徴のセットが、前記チャンクのサブセットのためのフィンガープリントのセットを含む、請求項16に記載の方法。
【請求項18】
前記フィンガープリントのセットが、前記チャンクのサブセットのための複数のチャンクハッシュを含む、請求項17に記載の方法。
【請求項19】
前記チャンクのサブセットが、前記複数のチャンクの約10%未満である、請求項16に記載の方法。
【請求項20】
前記チャンクのサブセットが、前記複数のチャンクの約1%未満である、請求項19に記載の方法。
【請求項21】
前記チャンクのサブセットが、約3個のチャンクから約15個のチャンクを含む、請求項16に記載の方法。
【請求項22】
前記チャンクのサブセットが、前記複数のチャンクについて生成された複数のハッシュに対する1つまたは複数のフィッティングアルゴリズムを使用して、前記複数のチャンクから選択される、請求項16に記載の方法。
【請求項23】
前記複数のハッシュが、2つ以上の異なるハッシュ関数を使用して生成される、請求項22に記載の方法。
【請求項24】
前記2つ以上の異なるハッシュ関数が、セキュアハッシュアルゴリズム0(SHA-0)、セキュアハッシュアルゴリズム1(SHA-1)、セキュアハッシュアルゴリズム2(SHA-2)、およびセキュアハッシュアルゴリズム3(SHA-3)からなる群から選択される、請求項23に記載の方法。
【請求項25】
前記1つまたは複数のフィッティングアルゴリズムが、前記2つ以上の異なるハッシュ関数の各ハッシュ関数について最小ハッシュを決定するために使用される、請求項23に記載の方法。
【請求項26】
前記特徴のセットの各特徴が、前記2つ以上の異なるハッシュ関数の各ハッシュ関数について前記最小ハッシュを含む、請求項25に記載の方法。
【請求項27】
前記特徴のセットが、前記2つ以上の異なるハッシュ関数の前記最小ハッシュのベクトルを含む、請求項25に記載の方法。
【請求項28】
前記特徴のセットが、前記ベクトルを含む前記特徴の線形結合として提供される、請求項27に記載の方法。
【請求項29】
データ処理のための方法であって、
(a)1つまたは複数のクライアントアプリケーションから1つまたは複数の入力データストリームを受信するステップと、
(b)前記1つまたは複数の入力データストリームから少なくとも第1のセグメントおよび第2のセグメントを生成するステップであって、前記第1のセグメントは第1のチャンクのセットを含み、前記第2のセグメントは第2のチャンクのセットを含む、ステップと、
(c)(i)前記第1の複数のチャンクの第1のフィンガープリントのセットおよび(ii)前記第2の複数のチャンクの第2のフィンガープリントのセットを計算するステップと、
(d)前記第1のチャンクのセットおよび前記第2のチャンクのセットが類似度閾値を満たすと判定するために、前記第1のフィンガープリントのセットおよび前記第2のフィンガープリントのセットを処理するステップと、
(e)前記第1のセグメントと前記第2のセグメントとの間の1つまたは複数の差分を決定するために、前記第1のチャンクのセットおよび前記第2のチャンクのセットを処理するステップと
を含む、方法。
【請求項30】
前記第1のセグメントおよび前記第2のセグメントが、少なくとも前記類似度閾値に基づいて類似していると判定される、請求項29に記載の方法。
【請求項31】
前記類似度閾値が少なくとも約50%である、請求項29に記載の方法。
【請求項32】
前記類似度閾値が、前記第1のチャンクのセットと前記第2のチャンクのセットとの間の重複度を示す、請求項29に記載の方法。
【請求項33】
前記第2のセグメントが、前記第1のセグメントとほぼ同じサイズである、請求項29に記載の方法。
【請求項34】
前記第2のセグメントが、前記第1のセグメントとは実質的に異なるサイズである、請求項29に記載の方法。
【請求項35】
前記第1のセグメントおよび前記第2のセグメントが各々、約1メガバイト(MB)~約4MBの範囲のサイズを有する、請求項29に記載の方法。
【請求項36】
前記第1のチャンクのセットおよび前記第2のチャンクのセットが、異なる数のチャンクを有する、請求項29に記載の方法。
【請求項37】
前記第1のチャンクのセットおよび前記第2のチャンクのセットが、同じ数のチャンクを有する、請求項29に記載の方法。
【請求項38】
前記第1のチャンクのセットおよび前記第2のチャンクのセットが各々、少なくとも約100個のチャンクを含む、請求項29に記載の方法。
【請求項39】
前記第1のチャンクのセットおよび前記第2のチャンクのセットが各々、少なくとも約1000個のチャンクを含む、請求項38に記載の方法。
【請求項40】
前記第1のチャンクのセットおよび前記第2のチャンクのセットが可変長である、請求項29に記載の方法。
【請求項41】
前記第1のフィンガープリントのセットが、前記第1のチャンクのセットから選択された第1のチャンクのサブセットに関連付けられ、前記第2のフィンガープリントのセットが、前記第2のチャンクのセットから選択された第2のチャンクのサブセットに関連付けられる、請求項29に記載の方法。
【請求項42】
前記第1のフィンガープリントのセットが、前記第1のチャンクのサブセットのための第1の複数のチャンクハッシュを含み、前記第2のフィンガープリントのセットが、前記第2のチャンクのサブセットのための第2の複数のチャンクハッシュを含む、請求項41に記載の方法。
【請求項43】
前記第1のチャンクのサブセットが、前記第1のチャンクのセットの約10%未満である、請求項41に記載の方法。
【請求項44】
前記第1のチャンクのサブセットが、前記第1のチャンクのセットの約1%未満である、請求項42に記載の方法。
【請求項45】
前記第2のチャンクのサブセットが、前記第2のチャンクのセットの約10%未満である、請求項41に記載の方法。
【請求項46】
前記第2のチャンクのサブセットが、前記第2のチャンクのセットの約1%未満である、請求項45に記載の方法。
【請求項47】
前記第1のチャンクのサブセットおよび前記第2のチャンクのサブセットが、同じ数のチャンクを有する、請求項41に記載の方法。
【請求項48】
前記第1のチャンクのサブセットおよび前記第2のチャンクのサブセットが、異なる数のチャンクを有する、請求項41に記載の方法。
【請求項49】
前記第1のチャンクのサブセットおよび前記第2のチャンクのサブセットが各々、約3個のチャンクから約15個のチャンクを含む、請求項41に記載の方法。
【請求項50】
前記第1のフィンガープリントのセットおよび前記第2のフィンガープリントのセットが、1つまたは複数のハッシングアルゴリズムを使用して生成される、請求項29に記載の方法。
【請求項51】
前記1つまたは複数のハッシングアルゴリズムが、セキュアハッシュアルゴリズム0(SHA-0)、セキュアハッシュアルゴリズム1(SHA-1)、セキュアハッシュアルゴリズム2(SHA-2)、およびセキュアハッシュアルゴリズム3(SHA-3)からなる群から選択される、請求項50に記載の方法。
【請求項52】
前記第1のフィンガープリントのセットおよび前記第2のフィンガープリントのセットが、前記群から選択された2つ以上の異なるハッシングアルゴリズムを使用して生成される、請求項51に記載の方法。
【請求項53】
前記第1のフィンガープリントのセットおよび前記第2のフィンガープリントのセットが、1つまたは複数の非ハッシングアルゴリズムを使用して生成される、請求項29に記載の方法。
【請求項54】
前記第1および第2のチャンクのサブセットが、前記第1および第2のチャンクのセットに対して生成された複数のハッシュに対する1つまたは複数のフィッティングアルゴリズムを使用して、前記第1および第2のチャンクのセットから選択される、請求項41に記載の方法。
【請求項55】
前記1つまたは複数のフィッティングアルゴリズムが最小ハッシュ関数を含む、請求項54に記載の方法。
【請求項56】
データ削減のための方法であって、
(a)1つまたは複数のクライアントアプリケーションから1つまたは複数の入力データストリームを受信するステップと、
(b)前記1つまたは複数の入力データストリームから少なくとも第1のセグメントおよび第2のセグメントを生成するステップであって、前記第1のセグメントは第1の複数のチャンクを含み、前記第2のセグメントは第2の複数のチャンクを含む、ステップと、
(c)(i)前記第1のセグメントの第1のスケッチおよび(ii)前記第2のセグメントの第2のスケッチを計算するステップであって、前記第1のスケッチは、前記第1のセグメントを表すかまたは前記第1のセグメントに固有の第1の特徴のセットを含み、前記第2のスケッチは、前記第2のセグメントを表すかまたは前記第2のセグメントに固有の第2の特徴のセットを含み、前記第1の特徴のセットは前記第1のセグメントに対応し、前記第2の特徴のセットは前記第2のセグメントに対応する、ステップと、
(d)前記第1のスケッチおよび前記第2のスケッチを処理して、前記第2のセグメントが前記第1のセグメントと類似しているかどうかを示す類似度指標を生成するステップと、
(e)(d)に続いて、(1)前記類似度指標が類似度閾値以上である場合に前記第1のセグメントに対する前記第2のセグメントに対して差分演算を実行するステップ、または(2)前記類似度指標が前記類似度閾値未満である場合に前記差分演算を実行せずに前記第1のセグメントおよび前記第2のセグメントをデータベースに格納するステップと
を含む、方法。
【請求項57】
前記ステップ(e)の差分演算が、(i)前記第1のセグメントの前記第1の複数のチャンクの参照ハッシュセットを生成するステップと、(ii)前記参照ハッシュセットをメモリテーブルに格納するステップと、を含む、請求項56に記載の方法。
【請求項58】
前記参照ハッシュセットが弱いハッシュを含む、請求項57に記載の方法。
【請求項59】
前記参照ハッシュセットが、少なくとも1ギガバイト(GB)規模のスループットを有するハッシング関数を使用して生成される、請求項57に記載の方法。
【請求項60】
前記差分演算が、(iii)順次ローリングベースで、前記第2のセグメントの前記第2の複数のチャンクのうちのチャンクについてハッシュを生成するステップと、(iv)前記ハッシュを前記参照ハッシュセットと比較して、一致があるかどうかを判定するステップと、をさらに含む、請求項57に記載の方法。
【請求項61】
前記差分演算が、(v)前記ハッシュおよび前記1つまたは複数の他のハッシュが前記参照ハッシュセットから一致を見つける限り、前記第2の複数のチャンクのうちの1つまたは複数の後続のチャンクについて1つまたは複数の他のハッシュを生成し続けるステップをさらに含む、請求項60に記載の方法。
【請求項62】
前記差分演算が、(vi)後続チャンクのハッシュが前記参照ハッシュセットから一致を見つけられないことを検出すると、前記チャンクおよび前記1つまたは複数の後続のチャンクを参照するシングルポインタを生成して格納するステップをさらに含む、請求項61に記載の方法。
【請求項63】
前記ハッシュが弱いハッシュである、請求項60に記載の方法。
【請求項64】
前記1つまたは複数の他のハッシュが弱いハッシュを含む、請求項61に記載の方法。
【請求項65】
前記ハッシュおよび前記1つまたは複数の他のハッシュが弱いハッシュを含む、請求項61に記載の方法。
【請求項66】
前記第2の複数のうちの次のチャンクについて別のハッシュを生成し、前記別のハッシュを前記参照ハッシュセットと比較して一致があるかどうかを判定する前に、前記ハッシュを前記参照ハッシュセットと比較して一致があるかどうかを判定する、請求項60に記載の方法。
【請求項67】
前記1つまたは複数の入力データストリームが前記1つまたは複数のクライアントアプリケーションから受信されると、前記差分演算がインラインで実行される、請求項56に記載の方法。
【請求項68】
前記差分演算が、前記第1のセグメントおよび前記第2のセグメントを複数の均質なフラグメントに縮小する、請求項56に記載の方法。
【請求項69】
1つまたは複数のクラウドオブジェクトデータストアに前記複数の均質なフラグメントを格納するステップをさらに含む、請求項68に記載の方法。
【請求項70】
前記複数の均質なフラグメントを前記第1のセグメントおよび前記第2のセグメントにマッピングするインデックスを生成するステップをさらに含む、請求項69に記載の方法。
【請求項71】
前記1つまたは複数のクライアントアプリケーションから送信された読み出し要求を受信するステップであって、前記読み出し要求は、前記第1のセグメントまたは前記第2のセグメントのうちの少なくとも1つを含むオブジェクトに対するものである、ステップと、
前記読み出し要求に応答して前記オブジェクトを生成するために、(1)前記1つまたは複数のクラウドオブジェクトデータストアに格納された前記複数の均質なフラグメント、および(2)前記インデックス、を少なくとも部分的に使用して、前記第1のセグメントまたは前記第2のセグメントを再構成するステップと
をさらに含む、請求項70に記載の方法。
【請求項72】
前記生成されたオブジェクトを、前記読み出し要求を送信した前記1つまたは複数のクライアントアプリケーションに提供するステップをさらに含む、請求項71に記載の方法。
【請求項73】
前記ステップ(d)の処理が、1つまたは複数の特徴が前記第1のセットと前記第2のセットの両方で共通であるかどうかを判定するために、前記第2の特徴のセットを前記第1の特徴のセットと比較するステップを含む、請求項56に記載の方法。
【請求項74】
前記第2のセグメントが、(i)前記類似度指標が前記類似度閾値以上である場合に前記第1のセグメントと類似していると判定される、または(ii)前記類似度指標が前記類似度閾値未満である場合に前記第1のセグメントと類似していないと判定される、請求項56に記載の方法。
【請求項75】
前記類似度閾値が少なくとも約50%である、請求項74に記載の方法。
【請求項76】
前記類似度指標が、前記第1のセグメントと前記第2のセグメントとの間の重複度を示す、請求項56に記載の方法。
【請求項77】
前記1つまたは複数の特徴が、前記第1のセットおよび前記第2のセットにおいて類似または同一である、請求項73に記載の方法。
【請求項78】
前記第2のセグメントが、前記第1のセグメントとほぼ同じサイズである、請求項56に記載の方法。
【請求項79】
前記第2のセグメントが、前記第1のセグメントとは実質的に異なるサイズである、請求項56に記載の方法。
【請求項80】
前記第1のセグメントおよび前記第2のセグメントが各々、約1メガバイト(MB)~約4MBの範囲のサイズを有する、請求項56に記載の方法。
【請求項81】
前記第1のセットおよび前記第2のセットがそれぞれ、約3個の特徴から約15個の特徴を含む、請求項56に記載の方法。
【請求項82】
前記第1の複数のチャンクおよび前記第2の複数のチャンクが各々、少なくとも約100個のチャンクを含む、請求項56に記載の方法。
【請求項83】
前記第1の複数のチャンクおよび前記第2の複数のチャンクが可変長である、請求項56に記載の方法。
【請求項84】
前記ステップ(e)が、前記類似度指標が前記類似度閾値未満である場合に前記第1のスケッチおよび前記第2のスケッチを前記データベースに格納するステップをさらに含む、請求項56に記載の方法。
【請求項85】
前記類似度指標が類似度スコアである、請求項56に記載の方法。
【請求項86】
スケッチ計算を使用するインラインデータ重複排除のためのコンピュータ実装方法であって、
コンピュータネットワークを介して1つまたは複数のクライアントアプリケーションから第1の入力データストリームを受信するステップと、
少なくとも1つのコンピュータプロセッサを使用して、前記第1の入力データストリームから第1のセグメントを生成するステップであって、前記第1のセグメントは、ハッシュ関数を前記第1の入力データストリームに適用して、複数のチャンクを生成するための前記第1の入力データストリーム内の1つまたは複数のブレークを識別し、前記第1のセグメントを形成するためにターゲットセグメントサイズ範囲に基づいて前記複数のチャンクを組み立てることによって生成される、ステップと、
前記第1のセグメントのスケッチを計算するステップであって、前記スケッチは、前記第1のセグメントを表すか、または前記第1のセグメントに固有の特徴のセットを含む、ステップと、
前記第1のスケッチと、前記第2の入力データストリームから生成された第2のセグメントの第2のスケッチとの間の少なくとも類似度を判定することによって前記1つまたは複数のクライアントアプリケーションから受信された第2の入力データストリームの前記インラインデータ重複排除のために前記第1のスケッチを使用するステップと
を含む、コンピュータ実装方法。
【請求項87】
前記複数のチャンクが可変長である、請求項86に記載のコンピュータ実装方法。
【請求項88】
前記第1のセグメントのサイズが、前記複数のチャンクの長さの合計に依存する、請求項87に記載のコンピュータ実装方法。
【請求項89】
前記第1のセグメントが、前記複数のチャンクの長さの合計が前記ターゲットセグメントサイズ範囲内にあると判定することによって生成され、前記ターゲットセグメントサイズ範囲は1メガバイト(MB)~16MBである、請求項88に記載のコンピュータ実装方法。
【請求項90】
前記第2のセグメントが、前記ターゲットセグメントサイズ範囲に基づいてチャンクのセットを組み立てることによって形成され、前記チャンクのセットは、前記第2の入力データストリームから生成される、請求項87に記載のコンピュータ実装方法。
【請求項91】
前記第2のセグメントのサイズが、前記第1のセグメントのサイズとは異なる、請求項87に記載のコンピュータ実装方法。
【請求項92】
前記第2のセグメントのサイズと前記第1のセグメントのサイズが同じである、請求項87に記載のコンピュータ実装方法。
【請求項93】
スケッチ計算を使用するインラインデータ重複排除のためのコンピュータ実装方法であって、
コンピュータネットワークを介して1つまたは複数のクライアントアプリケーションから第1の入力データストリームを受信するステップと、
少なくとも1つのコンピュータプロセッサを使用して、前記第1の入力データストリームから第1のセグメントを生成するステップであって、前記第1のセグメントは、前記第1の入力データストリーム内の1つまたは複数のブレークに少なくとも部分的に基づいて複数のチャンクを組み立てることによって生成される、ステップと、
前記第1のセグメントのスケッチを計算するステップであって、前記スケッチは、前記第1のセグメントを表すか、または前記第1のセグメントに固有の特徴のセットを含む、ステップと、
第1のスケッチと、第2の入力データストリームから生成された第2のセグメントの第2のスケッチとの間の少なくとも類似度を判定することによって前記1つまたは複数のクライアントアプリケーションから受信された前記第2の入力データストリームの前記インラインデータ重複排除のために前記第1のスケッチを使用するステップと
を含む、コンピュータ実装方法。
【請求項94】
前記特徴のセットが、前記第1のセグメントを前記第2のセグメントから一意に識別または区別するために使用可能な特徴の最小数を含む、請求項93に記載のコンピュータ実装方法。
【請求項95】
前記特徴の最小数が、3個の特徴から15個の特徴までの範囲である、請求項94に記載のコンピュータ実装方法。
【請求項96】
前記第1のセグメントまたは前記第2のセグメントが、少なくとも1メガバイト(MB)のサイズを有する、請求項93に記載のコンピュータ実装方法。
【請求項97】
前記複数のチャンクが、少なくとも100個のチャンクを含む、請求項93に記載のコンピュータ実装方法。
【請求項98】
前記複数のチャンクが可変長である、請求項93に記載のコンピュータ実装方法。
【請求項99】
前記第1のセグメントのサイズが、前記複数のチャンクの長さの合計に依存する、請求項98に記載のコンピュータ実装方法。
【請求項100】
前記第1のセグメントが、前記複数のチャンクの長さの合計がターゲットセグメントサイズ範囲内にあると判定することによって生成される、請求項99に記載のコンピュータ実装方法。
【請求項101】
前記複数のチャンクの各チャンクについてフィンガープリントを生成するステップをさらに含む、請求項93に記載のコンピュータ実装方法。
【請求項102】
前記フィンガープリントが、1つまたは複数のハッシングアルゴリズムを使用して生成される、請求項101に記載のコンピュータ実装方法。
【請求項103】
前記フィンガープリントが、1つまたは複数の非ハッシングアルゴリズムを使用して生成される、請求項101に記載のコンピュータ実装方法。
【請求項104】
前記特徴のセットが、前記複数のチャンクから選択されたチャンクのサブセットに関連付けられる、請求項101に記載のコンピュータ実装方法。
【請求項105】
前記特徴のセットが、前記チャンクのサブセットのためのフィンガープリントのセットを含む、請求項104に記載のコンピュータ実装方法。
【請求項106】
前記フィンガープリントのセットが、前記チャンクのサブセットのための複数のチャンクハッシュを含む、請求項105に記載のコンピュータ実装方法。
【請求項107】
前記チャンクのサブセットが、前記複数のチャンクの10%未満である、請求項104に記載のコンピュータ実装方法。
【請求項108】
前記チャンクのサブセットが、3個のチャンクから15個のチャンクを含む、請求項104に記載のコンピュータ実装方法。
【請求項109】
前記チャンクのサブセットが、前記複数のチャンクについて生成された複数のハッシュに対する1つまたは複数のフィッティングアルゴリズムを使用して、前記複数のチャンクから選択される、請求項104に記載のコンピュータ実装方法。
【請求項110】
前記複数のハッシュが、セキュアハッシュアルゴリズム0(SHA-0)、セキュアハッシュアルゴリズム1(SHA-1)、セキュアハッシュアルゴリズム2(SHA-2)、およびセキュアハッシュアルゴリズム3(SHA-3)からなる群から選択される2つ以上の異なるハッシュ関数を使用して生成される、請求項109に記載のコンピュータ実装方法。
【請求項111】
前記1つまたは複数のフィッティングアルゴリズムが、前記2つ以上の異なるハッシュ関数の各ハッシュ関数について最小ハッシュを決定するために使用される、請求項110に記載のコンピュータ実装方法。
【請求項112】
前記特徴のセットの各特徴が、前記2つ以上の異なるハッシュ関数の各ハッシュ関数についての前記最小ハッシュを含む、請求項111に記載のコンピュータ実装方法。
【請求項113】
前記特徴のセットが、前記2つ以上の異なるハッシュ関数の前記最小ハッシュのベクトルを含む、請求項112に記載のコンピュータ実装方法。
【請求項114】
前記特徴のセットが、前記ベクトルを含む前記特徴の線形結合として提供される、請求項113に記載のコンピュータ実装方法。
【請求項115】
前記複数のチャンクを組み立てることは、ハッシュ関数を前記第1の入力データストリームに適用して前記第1の入力データストリーム内の前記1つまたは複数のブレークを識別することによって、前記第1の入力データストリームから前記複数のチャンクを生成することと、ターゲットセグメントサイズ範囲に基づいて前記複数のチャンクのサブセットの複数の長さを合計することと、を含む、請求項93に記載のコンピュータ実装方法。
【請求項116】
前記第2のセグメントが、前記第2の入力データストリームから生成されたチャンクのセットを組み立てることによって生成される、請求項115に記載のコンピュータ実装方法。
【請求項117】
データ処理のための方法であって、
a.1つまたは複数のクライアントアプリケーションから1つまたは複数の入力データストリームを受信するステップと、
b.前記1つまたは複数の入力データストリームから少なくとも第1のセグメントおよび第2のセグメントを生成するステップであって、前記第1のセグメントは第1のチャンクのセットを含み、前記第2のセグメントは第2のチャンクのセットを含む、ステップと、
c.(i)前記第1のチャンクのセットの第1のフィンガープリントのセットと、(ii)前記第2のチャンクのセットの第2のフィンガープリントのセットとを計算するステップであって、前記第1のフィンガープリントのセットまたは前記第2のフィンガープリントのセットは、1つまたは複数のハッシングアルゴリズムを使用して生成された複数のハッシュを含む、ステップと、
d.類似度スコアを生成するために前記第1のフィンガープリントのセットを前記第2のフィンガープリントのセットと比較するステップと、
e.前記類似度スコアが類似度閾値以上である場合、差分演算を実行することによって前記第1のチャンクのセットおよび前記第2のチャンクのセットを処理するステップであって、前記差分演算には、少なくとも(i)前記第1のチャンクのセットに基づいて参照ハッシュセットを生成し、前記第2のチャンクのセットに基づいて第2のハッシュのセットを生成するステップ、(ii)前記第2のハッシュのセットを前記参照ハッシュセットと比較するステップ、および(ii)前記参照ハッシュセットにおいて一致を見つけるハッシュを有する前記第2のチャンクのセットのサブセットを参照するシングルポインタを生成して格納するステップが含まれる、ステップと
を含む、方法。
【請求項118】
前記類似度閾値が少なくとも50%である、請求項117に記載の方法。
【請求項119】
前記第2のセグメントが、前記第1のセグメントと同じサイズである、請求項117に記載の方法。
【請求項120】
前記第2のセグメントが、前記第1のセグメントと異なるサイズである、請求項117に記載の方法。
【請求項121】
前記第1のセグメントおよび前記第2のセグメントが各々、約1メガバイト(MB)~約4MBの範囲のサイズを有する、請求項117に記載の方法。
【請求項122】
前記第1のチャンクのセットおよび前記第2のチャンクのセットが、異なる数のチャンクを有する、請求項117に記載の方法。
【請求項123】
前記第1のチャンクのセットおよび前記第2のチャンクのセットが、同じ数のチャンクを有する、請求項117に記載の方法。
【請求項124】
前記第1のチャンクのセットおよび前記第2のチャンクのセットが各々、少なくとも100個のチャンクを含む、請求項117に記載の方法。
【請求項125】
前記第1のチャンクのセットおよび前記第2のチャンクのセットが各々、少なくとも1000個のチャンクを含む、請求項124に記載の方法。
【請求項126】
前記第1のチャンクのセットまたは前記第2のチャンクのセットが可変長を有する、請求項117に記載の方法。
【請求項127】
前記第1のフィンガープリントのセットが、前記第1のチャンクのセットから選択された第1のチャンクのサブセットに関連付けられた前記複数のハッシュに基づいて計算され、前記第2のフィンガープリントのセットが、前記第2のチャンクのセットから選択された第2のチャンクのサブセットに関連付けられた前記複数のハッシュに基づいて計算される、請求項117に記載の方法。
【請求項128】
前記第1のフィンガープリントのセットが、前記第1のチャンクのサブセットのための第1の複数のチャンクハッシュを含み、前記第2のフィンガープリントのセットが、前記第2のチャンクのサブセットのための第2の複数のチャンクハッシュを含む、請求項127に記載の方法。
【請求項129】
前記第1のチャンクのサブセットが、前記第1のチャンクのセットの10%未満である、請求項127に記載の方法。
【請求項130】
前記第1のチャンクのサブセットが、前記第1のチャンクのセットの1%未満である、請求項129に記載の方法。
【請求項131】
前記第2のチャンクのサブセットが、前記第2のチャンクのセットの10%未満である、請求項127に記載の方法。
【請求項132】
前記第2のチャンクのサブセットが、前記第2のチャンクのセットの1%未満である、請求項131に記載の方法。
【請求項133】
前記第1のチャンクのサブセットおよび前記第2のチャンクのサブセットが、同じ数のチャンクを有する、請求項127に記載の方法。
【請求項134】
前記第1のチャンクのサブセットおよび前記第2のチャンクのサブセットが、異なる数のチャンクを有する、請求項127に記載の方法。
【請求項135】
前記第1のチャンクのサブセットおよび前記第2のチャンクのサブセットが各々、約3個のチャンクから約15個のチャンクを含む、請求項127に記載の方法。
【請求項136】
前記1つまたは複数のハッシングアルゴリズムが、セキュアハッシュアルゴリズム0(SHA-0)、セキュアハッシュアルゴリズム1(SHA-1)、セキュアハッシュアルゴリズム2(SHA-2)、およびセキュアハッシュアルゴリズム3(SHA-3)からなる群から選択される、請求項117に記載の方法。
【請求項137】
前記第1のフィンガープリントのセットおよび前記第2のフィンガープリントのセットが、前記群から選択された2つ以上の異なるハッシングアルゴリズムを使用して生成される、請求項136に記載の方法。
【請求項138】
前記第1および第2のチャンクのサブセットが、前記第1および第2のチャンクのセットに対して生成された前記複数のハッシュに対する1つまたは複数のフィッティングアルゴリズムを使用して、前記第1および第2のチャンクのセットから選択される、請求項127に記載の方法。
【請求項139】
前記1つまたは複数のフィッティングアルゴリズムが最小ハッシュ関数を含む、請求項138に記載の方法。
【請求項140】
前記チャンクのサブセットがシーケンシャルチャンクである、請求項117に記載の方法。
【請求項141】
前記チャンクのサブセットへの後続チャンクが、前記参照ハッシュセット内で一致を見つけられないハッシュを有すると判定すると、前記シングルポインタが生成され格納される、請求項117に記載の方法。
【請求項142】
前記第2のハッシュのセットが弱いハッシュである、請求項117に記載の方法。
【請求項143】
データ削減のための方法であって、
(a)1つまたは複数のクライアントアプリケーションから1つまたは複数の入力データストリームを受信するステップと、
(b)前記1つまたは複数の入力データストリームから少なくとも第1のセグメントおよび第2のセグメントを生成するステップであって、前記第1のセグメントは第1の複数のチャンクを含み、前記第2のセグメントは第2の複数のチャンクを含む、ステップと、
(c)(i)前記第1のセグメントの第1のスケッチおよび(ii)前記第2のセグメントの第2のスケッチを計算するステップであって、前記第1のスケッチは、前記第1のセグメントを表すかまたは前記第1のセグメントに固有の第1の特徴のセットを含み、前記第2のスケッチは、前記第2のセグメントを表すかまたは前記第2のセグメントに固有の第2の特徴のセットを含み、前記第1の特徴のセットは前記第1のセグメントに対応し、前記第2の特徴のセットは前記第2のセグメントに対応する、ステップと、
(d)前記第1のスケッチおよび前記第2のスケッチを処理して、前記第2のセグメントが前記第1のセグメントと類似しているかどうかを示す類似度指標を生成するステップと、
(e)前記類似度指標に少なくとも部分的に基づいて、異なるハッシング強度を有する複数のハッシュ関数からハッシュ関数を選択するステップと、
(f)(e)に続いて、(1)(e)で選択された前記ハッシュ関数を使用して、前記類似度指標が類似度閾値以上である場合に前記第1のセグメントに対する前記第2のセグメントに対して差分演算を実行するステップ、または(2)前記類似度指標が前記類似度閾値未満である場合に前記差分演算を実行せずに前記第1のセグメントおよび前記第2のセグメントをデータベースに格納するステップと
を含む、方法。
【請求項144】
前記ステップ(f)の差分演算が、(i)前記第1のセグメントの前記第1の複数のチャンクの参照ハッシュセットを生成するために、(e)で選択された前記ハッシュ関数を使用するステップと、(ii)前記参照ハッシュセットをメモリテーブルに格納するステップと、を含む、請求項143に記載の方法。
【請求項145】
前記参照ハッシュセットが、少なくとも1ギガバイト(GB)規模のスループットを有するハッシング関数を使用して生成される、請求項144に記載の方法。
【請求項146】
前記差分演算が、(iii)順次ローリングベースで、前記第2のセグメントの前記第2の複数のチャンクのうちのチャンクについてハッシュを生成するステップと、(iv)前記ハッシュを前記参照ハッシュセットと比較して、一致があるかどうかを判定するステップと、をさらに含む、請求項144に記載の方法。
【請求項147】
前記差分演算が、(v)前記ハッシュおよび前記1つまたは複数の他のハッシュが前記参照ハッシュセットから一致を見つける限り、前記第2の複数のチャンクのうちの1つまたは複数の後続のチャンクについて1つまたは複数の他のハッシュを生成し続けるステップをさらに含む、請求項146に記載の方法。
【請求項148】
前記差分演算が、(vi)後続チャンクのハッシュが前記参照ハッシュセットから一致を見つけられないことを検出すると、前記チャンクおよび前記1つまたは複数の後続のチャンクを参照するシングルポインタを生成して格納するステップをさらに含む、請求項147に記載の方法。
【請求項149】
前記ハッシュが弱いハッシュである、請求項146に記載の方法。
【請求項150】
前記1つまたは複数の他のハッシュが弱いハッシュを含む、請求項147に記載の方法。
【請求項151】
前記第2の複数のうちの次のチャンクについて別のハッシュを生成し、前記別のハッシュを前記参照ハッシュセットと比較して一致があるかどうかを判定する前に、前記ハッシュを前記参照ハッシュセットと比較して一致があるかどうかを判定する、請求項146に記載の方法。
【請求項152】
前記1つまたは複数の入力データストリームが前記1つまたは複数のクライアントアプリケーションから受信されると、前記差分演算がインラインで実行される、請求項143に記載の方法。
【請求項153】
前記差分演算が、前記第1のセグメントおよび前記第2のセグメントを複数の均質なフラグメントに縮小する、請求項143に記載の方法。
【請求項154】
1つまたは複数のクラウドオブジェクトデータストアに前記複数の均質なフラグメントを格納するステップをさらに含む、請求項153に記載の方法。
【請求項155】
前記複数の均質なフラグメントを前記第1のセグメントおよび前記第2のセグメントにマッピングするインデックスを生成するステップをさらに含む、請求項154に記載の方法。
【請求項156】
前記1つまたは複数のクライアントアプリケーションから送信された読み出し要求を受信するステップであって、前記読み出し要求は、前記第1のセグメントまたは前記第2のセグメントのうちの少なくとも1つを含むオブジェクトに対するものである、ステップと、
前記読み出し要求に応答して前記オブジェクトを生成するために、(1)前記1つまたは複数のクラウドオブジェクトデータストアに格納された前記複数の均質なフラグメント、および(2)前記インデックス、を少なくとも部分的に使用して、前記第1のセグメントまたは前記第2のセグメントを再構成するステップと
をさらに含む、請求項155に記載の方法。
【請求項157】
前記生成されたオブジェクトを、前記読み出し要求を送信した前記1つまたは複数のクライアントアプリケーションに提供するステップをさらに含む、請求項156に記載の方法。
【請求項158】
前記ステップ(d)の処理が、1つまたは複数の特徴が前記第1のセットと前記第2のセットの両方で共通であるかどうかを判定するために、前記第2の特徴のセットを前記第1の特徴のセットと比較するステップを含む、請求項143に記載の方法。
【請求項159】
前記第2のセグメントが、(i)前記類似度指標が前記類似度閾値以上である場合に前記第1のセグメントと類似していると判定される、または(ii)前記類似度指標が前記類似度閾値未満である場合に前記第1のセグメントと類似していないと判定される、請求項143に記載の方法。
【請求項160】
前記類似度閾値が少なくとも約50%である、請求項159に記載の方法。
【請求項161】
前記類似度指標が、前記第1のセグメントと前記第2のセグメントとの間の重複度を示す、請求項143に記載の方法。
【請求項162】
前記1つまたは複数の特徴が、前記第1のセットおよび前記第2のセットにおいて類似または同一である、請求項158に記載の方法。
【請求項163】
前記第2のセグメントが、前記第1のセグメントとほぼ同じサイズである、請求項143に記載の方法。
【請求項164】
前記第2のセグメントが、前記第1のセグメントと異なるサイズである、請求項143に記載の方法。
【請求項165】
前記第1のセグメントおよび前記第2のセグメントが各々、約1メガバイト(MB)~約4MBの範囲のサイズを有する、請求項143に記載の方法。
【請求項166】
前記第1のセットおよび前記第2のセットがそれぞれ、約3個の特徴から約15個の特徴を含む、請求項143に記載の方法。
【請求項167】
前記第1の複数のチャンクおよび前記第2の複数のチャンクが各々、少なくとも約100個のチャンクを含む、請求項143に記載の方法。
【請求項168】
前記第1の複数のチャンクおよび前記第2の複数のチャンクが可変長である、請求項143に記載の方法。
【請求項169】
前記類似度指標が類似度スコアである、請求項143に記載の方法。
【請求項170】
前記類似度指標が第1のスコアを有する場合、第1のハッシュ関数が選択され、前記類似度指標が前記第1のスコアよりも低い第2のスコアを有する場合、第2のハッシュ関数が選択される、請求項143に記載の方法。
【請求項171】
前記第2のハッシュ関数が、前記第1のハッシュ関数よりも高いハッシング強度を有する、請求項170に記載の方法。
【請求項172】
前記選択されたハッシュ関数の強度が、前記類似度指標のスコアと逆に変化する、請求項143に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
【0002】
本出願は、2019年12月18日に出願された米国特許出願第16/718,686号、2019年12月18日に出願された米国特許出願第16/718,703号、および2019年12月18日に出願された米国特許出願第16/718,714号の優先権を主張し、これらの各々は、参照により本明細書に完全に組み込まれる。
【背景技術】
【0003】
クラウドストレージシステムは、クライアントアプリケーション、例えばエンタープライズアプリケーションからの大量のデータを格納することができる。多くの場合、入力データのかなりの部分が重複している可能性がある。データを格納して処理するために、大量のメモリ、記憶空間、および処理能力が必要とされる場合がある。場合によっては、例えば重複排除または圧縮技術を使用して、データを格納前に削減することができる。しかしながら、小さなチャンクおよび1:1のチャンク比較を使用する大規模なデータ削減は、(書き込みプロセスと読み取りプロセスの両方に計算負荷を加えることによって)著しいメモリ空間を消費し、性能を低下させる生成された大きなインデックステーブルのために、技術的に困難または非実用的であることが示されていた。その結果、従来の重複排除技術は、一般に、数百テラバイトまたはペタバイト規模、特にエンタープライズアプリケーションによって生成された大量のデータのデータ削減に対処することができない。
【発明の概要】
【発明が解決しようとする課題】
【0004】
データ生成における指数関数的スケーリングにより、本明細書では、計算性能を維持または改善しながら、大規模にデータ削減を効率的に処理することができる方法およびシステムの必要性が認識されている。データ削減は、計算リソースおよびストレージに関する運用コストの削減につながる可能性がある。
【0005】
本開示は、高スループット(例えば、1日当たり少なくともテラバイトのレベル、または1日当たり100テラバイト、または1日当たり数テラバイトなど)で大規模で(例えば、少なくともペタバイト規模で)データを最適に削減するように構成されたシステムおよび方法を提供する。本明細書のシステムおよび方法は、さまざまなクライアントアプリケーション、例えばエンタープライズアプリケーションによって生成されたデータに適用され得る。本明細書で使用される場合、「データ」という用語は、任意のタイプのデータ、例えば、構造化データ、非構造化データ、時系列データ、関係データなどを指すことができる。「エンタープライズアプリケーション」という用語は、エンタープライズアーキテクチャを使用して開発され、ビジネスなどの企業環境または政府で動作するように設計された大規模ソフトウェアシステムプラットフォームを指すことができる。本開示のいくつかの実施形態をエンタープライズアプリケーションに関して説明したが、本明細書のいくつかの実施形態を、非エンタープライズアプリケーションまたは他の小規模アプリケーションに適用可能にする、または適合させることができることを理解されたい。
【課題を解決するための手段】
【0006】
一態様では、本開示は、スケッチ計算のための方法を提供し、方法は、(a)1つまたは複数のクライアントアプリケーションから入力データストリームを受信するステップと、(b)入力データストリームから少なくとも1つのセグメントを生成するステップであって、少なくとも1つのセグメントは複数のチャンクを含む、ステップと、(c)少なくとも1つのセグメントのスケッチを計算するステップであって、スケッチは、特徴のセットが少なくとも1つのセグメントに対応するように、少なくとも1つのセグメントを表すまたは少なくとも1つのセグメントに固有の特徴のセットを含み、スケッチは、(i)複数のチャンクのフルインデックスを生成することなく、または(ii)少なくとも1つの他の入力データストリームをフルインデックスと比較することなく、1つまたは複数のクライアントアプリケーションから受信した少なくとも1つの他の入力データストリームのインライン重複排除に使用可能である、ステップと、を含む。
【0007】
別の態様では、本開示は、スケッチ計算のための方法を提供し、方法は、(a)1つまたは複数のクライアントアプリケーションから入力データストリームを受信するステップと、(b)入力データストリームから少なくとも1つのセグメントを生成するステップであって、少なくとも1つのセグメントは複数のチャンクを含む、ステップと、(c)少なくとも1つのセグメントのスケッチを計算するステップであって、スケッチは、特徴のセットが少なくとも1つのセグメントに対応するように、少なくとも1つのセグメントを表すまたは少なくとも1つのセグメントに固有の特徴のセットを含み、スケッチは、(i)複数のチャンクのフルインデックスを生成することなく、または(ii)少なくとも1つの他の入力データストリームをフルインデックスと比較することなく、1つまたは複数のクライアントアプリケーションから受信した少なくとも1つの他の入力データストリームのインライン重複排除に使用可能である、ステップと、を含む。
【0008】
別の態様では、本開示は、スケッチ計算のための方法を提供し、方法は、(a)1つまたは複数のクライアントアプリケーションから入力データストリームを受信するステップと、(b)入力データストリームから少なくとも1つのセグメントを生成するステップであって、少なくとも1つのセグメントは複数のチャンクを含む、ステップと、(c)少なくとも1つのセグメントのスケッチを計算するステップであって、スケッチは、特徴のセットが少なくとも1つのセグメントに対応するように、少なくとも1つのセグメントを表すまたは少なくとも1つのセグメントに固有の特徴のセットを含み、スケッチは、(i)複数のチャンクのフルインデックスを生成することなく、または(ii)少なくとも1つの他の入力データストリームをフルインデックスと比較することなく、1つまたは複数のクライアントアプリケーションから受信した少なくとも1つの他の入力データストリームのインライン重複排除に使用可能である、ステップと、を含む。
【0009】
別の態様では、本開示は、スケッチ計算を使用するインラインデータ重複排除のためのコンピュータ実装方法を提供し、方法は、コンピュータネットワークを介して1つまたは複数のクライアントアプリケーションから第1の入力データストリームを受信するステップと、少なくとも1つのコンピュータプロセッサを使用して、第1の入力データストリームから第1のセグメントを生成するステップであって、第1のセグメントは、ハッシュ関数を第1の入力データストリームに適用して、複数のチャンクを生成するための第1の入力データストリーム内の1つまたは複数のブレークを識別し、第1のセグメントを形成するためにターゲットセグメントサイズ範囲に基づいて複数のチャンクを組み立てることによって生成される、ステップと、第1のセグメントのスケッチを計算するステップであって、スケッチは、第1のセグメントを表すか、または第1のセグメントに固有の特徴のセットを含む、ステップと、第1のスケッチと、第2の入力データストリームから生成された第2のセグメントの第2のスケッチとの間の少なくとも類似度を判定することによって1つまたは複数のクライアントアプリケーションから受信された第2の入力データストリームのインラインデータ重複排除のために第1のスケッチを使用するステップと、を含む。
【0010】
別の態様では、本開示は、スケッチ計算を使用するインラインデータ重複排除のためのコンピュータ実装方法を提供し、方法は、コンピュータネットワークを介して1つまたは複数のクライアントアプリケーションから第1の入力データストリームを受信するステップと、少なくとも1つのコンピュータプロセッサを使用して、第1の入力データストリームから第1のセグメントを生成するステップであって、第1のセグメントは、第1の入力データストリーム内の1つまたは複数のブレークに少なくとも部分的に基づいて複数のチャンクを組み立てることによって生成される、ステップと、第1のセグメントのスケッチを計算するステップであって、スケッチは、第1のセグメントを表すか、または第1のセグメントに固有の特徴のセットを含む、ステップと、第1のスケッチと、第2の入力データストリームから生成された第2のセグメントの第2のスケッチとの間の少なくとも類似度を判定することによって1つまたは複数のクライアントアプリケーションから受信された第2の入力データストリームのインラインデータ重複排除のために第1のスケッチを使用するステップと、を含む。
【0011】
別の態様では、本開示は、データ処理のための方法を提供し、方法は、1つまたは複数のクライアントアプリケーションから1つまたは複数の入力データストリームを受信するステップと、前記1つまたは複数の入力データストリームから少なくとも第1のセグメントおよび第2のセグメントを生成するステップであって、前記第1のセグメントは第1のチャンクのセットを含み、前記第2のセグメントは第2のチャンクのセットを含む、ステップと、(i)前記第1のチャンクのセットの第1のフィンガープリントのセットと、(ii)前記第2のチャンクのセットの第2のフィンガープリントのセットと、を計算するステップであって、第1のフィンガープリントのセットまたは第2のフィンガープリントのセットは、1つまたは複数のハッシングアルゴリズムを使用して生成された複数のハッシュを含む、ステップと、類似度スコアを生成するために前記第1のフィンガープリントのセットを前記第2のフィンガープリントのセットと比較するステップと、前記類似度スコアが類似度閾値以上である場合、差分演算を実行することによって前記第1のチャンクのセットおよび前記第2のチャンクのセットを処理するステップであって、前記差分演算には、少なくとも(i)前記第1のチャンクのセットに基づいて参照ハッシュセットを生成し、前記第2のチャンクのセットに基づいて第2のハッシュのセットを生成するステップ、(ii)前記第2のハッシュのセットを前記参照ハッシュセットと比較するステップ、および(ii)前記参照ハッシュセットにおいて一致を見つけるハッシュを有する前記第2のチャンクのセットのサブセットを参照するシングルポインタを生成して格納するステップが含まれる、ステップと、を含む方法。
【0012】
別の態様では、本開示は、データ削減のための方法を提供し、方法は、(a)1つまたは複数のクライアントアプリケーションから1つまたは複数の入力データストリームを受信するステップと、(b)前記1つまたは複数の入力データストリームから少なくとも第1のセグメントおよび第2のセグメントを生成するステップであって、前記第1のセグメントは第1の複数のチャンクを含み、前記第2のセグメントは第2の複数のチャンクを含む、ステップと、(c)(i)前記第1のセグメントの第1のスケッチおよび(ii)前記第2のセグメントの第2のスケッチを計算するステップであって、前記第1のスケッチは、前記第1のセグメントを表すかまたは前記第1のセグメントに固有の第1の特徴のセットを含み、前記第2のスケッチは、前記第2のセグメントを表すかまたは前記第2のセグメントに固有の第2の特徴のセットを含み、前記第1の特徴のセットは前記第1のセグメントに対応し、前記第2の特徴のセットは前記第2のセグメントに対応する、ステップと、(d)前記第1のスケッチおよび前記第2のスケッチを処理して、前記第2のセグメントが前記第1のセグメントと類似しているかどうかを示す類似度指標を生成するステップと、(e)前記類似度指標に少なくとも部分的に基づいて、異なるハッシング強度を有する複数のハッシュ関数からハッシュ関数を選択するステップと、(f)(e)に続いて、(1)(e)で選択された前記ハッシュ関数を使用して、前記類似度指標が類似度閾値以上である場合に前記第1のセグメントに対する前記第2のセグメントに対して差分演算を実行するステップ、または(2)前記類似度指標が前記類似度閾値未満である場合に前記差分演算を実行せずに前記第1のセグメントおよび前記第2のセグメントをデータベースに格納するステップと、を含む。
【0013】
いくつかの実施形態では、特徴のセットは、少なくとも1つのセグメントを別のセグメントから一意に識別または区別するために使用可能な特徴の最小数を含み得る。いくつかの実施形態では、特徴の最小数は、約3個の特徴から約15個の特徴の範囲であってもよい。いくつかの実施形態では、特徴の最小数は、15個以下の特徴を含み得る。
【0014】
いくつかの実施形態では、少なくとも1つのセグメントは、少なくとも約1メガバイト(MB)のサイズを有し得る。いくつかの実施形態では、少なくとも1つのセグメントは、約1メガバイト(MB)~約4MBの範囲のサイズを有し得る。
【0015】
いくつかの実施形態では、複数のチャンクは、少なくとも約100個のチャンクを含み得る。いくつかの実施形態では、複数のチャンクは、少なくとも約1000個のチャンクを含み得る。
【0016】
いくつかの実施形態では、複数のチャンクは可変長であってもよい。本方法のいくつかの実施形態では、ステップ(b)は、入力データストリームから複数のセグメントを生成するステップであって、複数のセグメントは少なくとも1つのセグメントを含む、ステップをさらに含んでもよい。いくつかの実施形態では、複数のセグメントのうちのセグメントは、約1メガバイト(MB)~約4MBの範囲の異なるサイズを有する。いくつかの実施形態では、複数のセグメントのうちのセグメントは、約1メガバイト(MB)~約4MBの範囲内でほぼ同じサイズを有し得る。
【0017】
本方法のいくつかの実施形態では、ステップ(b)は、複数のチャンクの各チャンクについてフィンガープリントを生成するステップをさらに含んでもよい。いくつかの実施形態では、フィンガープリントは、1つまたは複数のハッシングアルゴリズムを使用して生成され得る。いくつかの実施形態では、フィンガープリントは、1つまたは複数の非ハッシングアルゴリズムを使用して生成され得る。いくつかの実施形態では、特徴のセットは、複数のチャンクから選択されたチャンクのサブセットに関連付けられ得る。
【0018】
いくつかの実施形態では、特徴のセットは、チャンクのサブセットのためのフィンガープリントのセットを含み得る。いくつかの実施形態では、フィンガープリントのセットは、チャンクのサブセットのための複数のチャンクハッシュを含み得る。いくつかの実施形態では、チャンクのサブセットは、複数のチャンクの約10%未満であってもよい。いくつかの実施形態では、チャンクのサブセットは、複数のチャンクの約1%未満であってもよい。いくつかの実施形態では、チャンクのサブセットは、約3個のチャンクから約15個のチャンクを含み得る。
【0019】
いくつかの実施形態では、チャンクのサブセットは、複数のチャンクについて生成された複数のハッシュに対する1つまたは複数のフィッティングアルゴリズムを使用して、複数のチャンクから選択され得る。いくつかの実施形態では、1つまたは複数のフィッティングアルゴリズムは、2つ以上の異なるハッシュ関数の各ハッシュ関数について最小ハッシュを決定するために使用され得る。いくつかの実施形態では、複数のハッシュは、2つ以上の異なるハッシュ関数を使用して生成され得る。いくつかの実施形態では、2つ以上の異なるハッシュ関数は、セキュアハッシュアルゴリズム0(SHA-0)、セキュアハッシュアルゴリズム1(SHA-1)、セキュアハッシュアルゴリズム2(SHA-2)、およびセキュアハッシュアルゴリズム3(SHA-3)からなる群から選択され得る。
【0020】
いくつかの実施形態では、特徴のセットの各特徴は、2つ以上の異なるハッシュ関数の各ハッシュ関数について最小ハッシュを含み得る。いくつかの実施形態では、特徴のセットは、2つ以上の異なるハッシュ関数の最小ハッシュのベクトルを含み得る。いくつかの実施形態では、特徴のセットは、ベクトルを含む特徴の線形結合として提供され得る。
【0021】
別の態様では、本開示は、データ処理のための方法を提供し、方法は、(a)1つまたは複数のクライアントアプリケーションから1つまたは複数の入力データストリームを受信するステップと、(b)1つまたは複数の入力データストリームから少なくとも第1のセグメントおよび第2のセグメントを生成するステップであって、第1のセグメントは第1のチャンクのセットを含み、第2のセグメントは第2のチャンクのセットを含む、ステップと、(c)(i)第1の複数のチャンクの第1のフィンガープリントのセットおよび(ii)第2の複数のチャンクの第2のフィンガープリントのセットを計算するステップと、(d)第1のチャンクのセットおよび第2のチャンクのセットが類似度閾値を満たすと判定するために、第1のフィンガープリントのセットおよび第2のフィンガープリントのセットを処理するステップと、(e)第1のセグメントと第2のセグメントとの間の1つまたは複数の差分を決定するために、第1のチャンクのセットおよび第2のチャンクのセットを処理するステップと、を含む。
【0022】
いくつかの実施形態では、第1のセグメントおよび第2のセグメントは、少なくとも類似度閾値に基づいて類似していると判定され得る。
【0023】
いくつかの実施形態では、類似度閾値は、少なくとも約50%であってもよい。いくつかの実施形態では、類似度閾値は、第1のチャンクのセットと第2のチャンクのセットとの間の重複度を示してもよい。
【0024】
いくつかの実施形態では、第2のセグメントは、第1のセグメントとほぼ同じサイズであってもよい。いくつかの実施形態では、第2のセグメントは、第1のセグメントとは実質的に異なるサイズであってもよい。
【0025】
いくつかの実施形態では、第1のセグメントおよび第2のセグメントはそれぞれ、約1メガバイト(MB)~約4MBの範囲のサイズを有し得る。
【0026】
いくつかの実施形態では、第1のチャンクのセットおよび第2のチャンクのセットは、異なる数のチャンクを有し得る。
【0027】
他の実施形態では、第1のチャンクのセットおよび第2のチャンクのセットは、同じ数のチャンクを有し得る。
【0028】
いくつかの実施形態では、第1のチャンクのセットおよび第2のチャンクのセットはそれぞれ、少なくとも約100個のチャンクを含んでもよい。いくつかの実施形態では、第1のチャンクのセットおよび第2のチャンクのセットはそれぞれ、少なくとも約1000個のチャンクを含んでもよい。
【0029】
いくつかの実施形態では、第1のチャンクのセットおよび第2のチャンクのセットは、可変長であってもよい。
【0030】
いくつかの実施形態では、第1のフィンガープリントのセットは、第1のチャンクのセットから選択された第1のチャンクのサブセットに関連付けられてもよく、第2のフィンガープリントのセットは、第2のチャンクのセットから選択された第2のチャンクのサブセットに関連付けられてもよい。いくつかの実施形態では、第1のフィンガープリントのセットは、第1のチャンクのサブセットのための第1の複数のチャンクハッシュを含んでもよく、第2のフィンガープリントのセットは、第2のチャンクのサブセットのための第2の複数のチャンクハッシュを含んでもよい。いくつかの実施形態では、第1のチャンクのサブセットは、第1のチャンクのセットの約10%未満であってもよい。いくつかの他の実施形態では、第1のチャンクのサブセットは、第1のチャンクのセットの約1%未満であってもよい。いくつかのさらなる実施形態では、第2のチャンクのサブセットは、第2のチャンクのセットの約10%未満であってもよい。いくつかの実施形態では、第2のチャンクのサブセットは、第2のチャンクのセットの約1%未満であってもよい。
【0031】
いくつかの実施形態では、第1のチャンクのサブセットおよび第2のチャンクのサブセットは、同じ数のチャンクを有し得る。他の実施形態では、第1のチャンクのサブセットおよび第2のチャンクのサブセットは、異なる数のチャンクを有し得る。いくつかの実施形態では、第1のチャンクのサブセットおよび第2のチャンクのサブセットはそれぞれ、約3個のチャンクから約15個のチャンクを含み得る。
【0032】
いくつかの実施形態では、第1および第2のチャンクのサブセットは、第1および第2のチャンクのセットに対して生成された複数のハッシュに対する1つまたは複数のフィッティングアルゴリズムを使用して、第1および第2のチャンクのセットから選択され得る。いくつかの実施形態では、1つまたは複数のフィッティングアルゴリズムは、最小ハッシュ関数を含み得る。
【0033】
いくつかの実施形態では、第1のフィンガープリントのセットおよび第2のフィンガープリントのセットは、1つまたは複数のハッシングアルゴリズムを使用して生成され得る。いくつかの実施形態では、1つまたは複数のハッシングアルゴリズムは、セキュアハッシュアルゴリズム0(SHA-0)、セキュアハッシュアルゴリズム1(SHA-1)、セキュアハッシュアルゴリズム2(SHA-2)、およびセキュアハッシュアルゴリズム3(SHA-3)からなる群から選択され得る。いくつかの実施形態では、第1のフィンガープリントのセットおよび第2のフィンガープリントのセットは、群から選択された2つ以上の異なるハッシングアルゴリズムを使用して生成され得る。
【0034】
いくつかの他の実施形態では、第1のフィンガープリントのセットおよび第2のフィンガープリントのセットは、1つまたは複数の非ハッシングアルゴリズムを使用して生成され得る。
【0035】
さらなる態様では、本開示は、データ削減のための方法を提供し、方法は、(a)1つまたは複数のクライアントアプリケーションから1つまたは複数の入力データストリームを受信するステップと、(b)1つまたは複数の入力データストリームから少なくとも第1のセグメントおよび第2のセグメントを生成するステップであって、第1のセグメントは第1の複数のチャンクを含み、第2のセグメントは第2の複数のチャンクを含む、ステップと、(c)(i)第1のセグメントの第1のスケッチおよび(ii)第2のセグメントの第2のスケッチを計算するステップであって、第1のスケッチは、第1のセグメントを表すかまたは第1のセグメントに固有の第1の特徴のセットを含み、第2のスケッチは、第2のセグメントを表すかまたは第2のセグメントに固有の第2の特徴のセットを含み、第1の特徴のセットは第1のセグメントに対応し、第2の特徴のセットは第2のセグメントに対応する、ステップと、(d)第1のスケッチおよび第2のスケッチを処理して、第2のセグメントが第1のセグメントと類似しているかどうかを示す類似度指標を生成するステップと、(e)(d)に続いて、(1)類似度指標が類似度閾値以上である場合に第1のセグメントに対する第2のセグメントに対して差分演算を実行するステップ、または(2)類似度指標が類似度閾値未満である場合に差分演算を実行せずに第1のセグメントおよび第2のセグメントをデータベースに格納するステップと、を含む。
【0036】
いくつかの実施形態では、(e)の差分演算は、(i)第1のセグメントの第1の複数のチャンクの参照ハッシュセットを生成するステップと、(ii)参照ハッシュセットをメモリテーブルに格納するステップと、を含み得る。いくつかの実施形態では、参照ハッシュセットは、弱いハッシュを含み得る。いくつかの実施形態では、参照ハッシュセットは、少なくとも1ギガバイト(GB)規模のスループットを有するハッシング関数を使用して生成され得る。いくつかの実施形態では、差分演算は、(iii)順次ローリングベースで、第2のセグメントの第2の複数のチャンクのうちのチャンクについてハッシュを生成するステップと、(iv)ハッシュを参照ハッシュセットと比較して、一致があるかどうかを判定するステップと、をさらに含んでもよい。
【0037】
いくつかの実施形態では、差分演算は、(v)ハッシュおよび1つまたは複数の他のハッシュが参照ハッシュセットから一致を見つける限り、第2の複数のチャンクのうちの1つまたは複数の後続のチャンクについて1つまたは複数の他のハッシュを生成し続けるステップをさらに含んでもよい。
【0038】
いくつかの実施形態では、差分演算は、(vi)後続チャンクのハッシュが参照ハッシュセットから一致を見つけられないことを検出すると、チャンクおよび1つまたは複数の後続のチャンクを参照するシングルポインタを生成して格納するステップをさらに含んでもよい。
【0039】
いくつかの実施形態では、ハッシュは弱いハッシュであってもよい。
【0040】
いくつかの実施形態では、1つまたは複数の他のハッシュは、弱いハッシュを含み得る。いくつかの実施形態では、ハッシュおよび1つまたは複数の他のハッシュは、弱いハッシュを含み得る。
【0041】
いくつかの実施形態では、第2の複数のうちの次のチャンクについて別のハッシュを生成し、別のハッシュを参照ハッシュセットと比較して一致があるかどうかを判定する前に、ハッシュを参照ハッシュセットと比較して一致があるかどうかを判定し得る。
【0042】
いくつかの実施形態では、1つまたは複数の入力データストリームが1つまたは複数のクライアントアプリケーションから受信されると、差分演算がインラインで実行されてもよい。
【0043】
いくつかの実施形態では、差分演算は、第1のセグメントおよび第2のセグメントを複数の均質なフラグメントに縮小し得る。いくつかの実施形態では、方法は、1つまたは複数のクラウドオブジェクトデータストアに複数の均質なフラグメントを格納するステップをさらに含んでもよい。いくつかの実施形態では、方法は、複数の均一フラグメントを第1のセグメントおよび第2のセグメントにマッピングするインデックスを生成するステップをさらに含んでもよい。いくつかの実施形態では、方法は、1つまたは複数のクライアントアプリケーションから送信された読み出し要求を受信するステップであって、読み出し要求は、第1のセグメントまたは第2のセグメントのうちの少なくとも1つを含むオブジェクトに対するものであり得る、ステップと、読み出し要求に応答してオブジェクトを生成するために、(1)1つまたは複数のクラウドオブジェクトデータストアに格納された複数の均質なフラグメント、および(2)インデックス、を少なくとも部分的に使用して、第1のセグメントまたは第2のセグメントを再構成するステップと、をさらに含んでもよい。いくつかの実施形態では、方法は、生成されたオブジェクトを、読み出し要求を送信した1つまたは複数のクライアントアプリケーションに提供するステップをさらに含んでもよい。
【0044】
本方法のいくつかの実施形態では、ステップ(d)の処理は、1つまたは複数の特徴が第1のセットと第2のセットの両方で共通であるかどうかを判定するために、第2の特徴のセットを第1の特徴のセットと比較するステップを含み得る。
【0045】
いくつかの実施形態では、第2のセグメントは、(i)類似度指標が類似度閾値以上である場合に第1のセグメントと類似していると判定され得る、または(ii)類似度指標が類似度閾値未満である場合に第1のセグメントと類似していないと判定され得る。いくつかの実施形態では、類似度閾値は、少なくとも約50%であってもよい。
【0046】
いくつかの実施形態では、類似度指標は、第1のセグメントと第2のセグメントとの間の重複度を示してもよい。いくつかの実施形態では、1つまたは複数の特徴は、第1のセットおよび第2のセットにおいて類似または同一であってもよい。
【0047】
いくつかの実施形態では、第2のセグメントは、第1のセグメントとほぼ同じサイズであってもよい。
【0048】
いくつかの他の実施形態では、第2のセグメントは、第1のセグメントとは実質的に異なるサイズであってもよい。
【0049】
いくつかの実施形態では、第1のセグメントおよび第2のセグメントはそれぞれ、約1メガバイト(MB)~約4MBの範囲のサイズを有し得る。
【0050】
いくつかの実施形態では、第1のセットおよび第2のセットはそれぞれ、約3個の特徴~約15個の特徴を含み得る。
【0051】
いくつかの実施形態では、第1の複数のチャンクおよび第2の複数のチャンクはそれぞれ、少なくとも約100個のチャンクを含み得る。
【0052】
いくつかの実施形態では、第1の複数のチャンクおよび第2の複数のチャンクは、可変長であってもよい。
【0053】
本方法のいくつかの実施形態では、ステップ(e)は、類似度指標が類似度閾値未満である場合に、第1のスケッチおよび第2のスケッチをデータベースに格納するステップをさらに含んでもよい。
【0054】
いくつかの実施形態では、類似度指標は類似度スコアであってもよい。
【0055】
いくつかの実施形態では、第1のセグメントは、複数のチャンクの長さの合計がターゲットセグメントサイズ範囲内にあると判定することによって生成され、ターゲットセグメントサイズ範囲は1メガバイト(MB)~16MBである。
【0056】
いくつかの実施形態では、特徴のセットは、複数のチャンクから選択された複数のチャンクのサブセットに関連付けられる。
【0057】
いくつかの実施形態では、特徴のセットは、複数のチャンクのサブセットのためのフィンガープリントのセットを含む。
【0058】
いくつかの実施形態では、フィンガープリントのセットは、複数のチャンクのサブセットのための複数のチャンクハッシュを含む。
【0059】
いくつかの実施形態では、複数のチャンクのサブセットは、複数のチャンクの10%未満を含む。
【0060】
いくつかの実施形態では、複数のチャンクのサブセットは、3個のチャンクから15個のチャンクを含む。
【0061】
いくつかの実施形態では、第2のセグメントは、ターゲットセグメントサイズ範囲に基づいてチャンクのセットを組み立てることによって形成され、チャンクのセットは、第2の入力データストリームから生成される。
【0062】
いくつかの実施形態では、第2のセグメントのサイズは、第1のセグメントのサイズとは異なる。
【0063】
いくつかの実施形態では、第2のセグメントのサイズと第1のセグメントのサイズは同じである。
【0064】
いくつかの実施形態では、第1のセグメントまたは第2のセグメントは、少なくとも1メガバイト(MB)のサイズを有する。
【0065】
いくつかの実施形態では、第1のセグメントのサイズは、複数のチャンクの長さの合計に依存する。
【0066】
いくつかの実施形態では、第1のセグメントは、複数のチャンクの長さの合計がターゲットセグメントサイズ範囲内にあると判定することによって生成される。
【0067】
いくつかの実施形態では、複数のハッシュは、セキュアハッシュアルゴリズム0(SHA-0)、セキュアハッシュアルゴリズム1(SHA-1)、セキュアハッシュアルゴリズム2(SHA-2)、およびセキュアハッシュアルゴリズム3(SHA-3)からなる群から選択される2つ以上の異なるハッシュ関数を使用して生成される。
【0068】
いくつかの実施形態では、複数のチャンクを組み立てることは、ハッシュ関数を第1の入力データストリームに適用して第1の入力データストリーム内の1つまたは複数のブレークを識別することによって、第1の入力データストリームから複数のチャンクを生成することと、ターゲットセグメントサイズ範囲に基づいて複数のチャンクのサブセットの複数の長さを合計することと、を含む。
【0069】
いくつかの実施形態では、第2のセグメントは、第2の入力データストリームから生成されたチャンクのセットを組み立てることによって生成される。
【0070】
いくつかの実施形態では、第1のフィンガープリントのセットは、第1のチャンクのセットから選択された第1のチャンクのサブセットに関連付けられた複数のハッシュに基づいて計算され、第2のフィンガープリントのセットは、第2のチャンクのセットから選択された第2のチャンクのサブセットに関連付けられた複数のハッシュに基づいて計算される。
【0071】
いくつかの実施形態では、チャンクのサブセットはシーケンシャルチャンクである。
【0072】
いくつかの実施形態では、チャンクのサブセットへの後続チャンクが、参照ハッシュセット内で一致を見つけられないハッシュを有すると判定すると、シングルポインタが生成され格納される。
【0073】
いくつかの実施形態では、第2のハッシュセットは弱いハッシュである。
【0074】
いくつかの実施形態では、類似度指標が第1のスコアを有する場合、第1のハッシュ関数が選択され、類似度指標が第1のスコアよりも低い第2のスコアを有する場合、第2のハッシュ関数が選択される。
【0075】
いくつかの実施形態では、第2のハッシュ関数は、第1のハッシュ関数よりも高いハッシング強度を有する。
【0076】

いくつかの実施形態では、選択されたハッシュ関数の強度は、類似度指標のスコアと逆に変化する。
【0077】
本開示の別の態様は、1つまたは複数のコンピュータプロセッサによる実行時に、上記または本明細書の他の場所に記載の方法のいずれかを実施する機械実行可能コードを含む非一時的なコンピュータ可読媒体を提供する。
【0078】
本開示の別の態様は、1つまたは複数のコンピュータプロセッサおよびそれに結合されたコンピュータメモリを備えるシステムを提供する。コンピュータメモリは、1つまたは複数のコンピュータプロセッサによる実行時に、上記または本明細書の他の場所に記載の方法のいずれかを実施する機械実行可能コードを含む。
【0079】
本開示の追加の態様および利点は、本開示の例示的な実施形態のみが示され、説明される以下の詳細な説明から、当業者には容易に明らかとされよう。理解されるように、本開示は、他の異なる実施形態が可能であり、そのいくつかの詳細は、すべて本開示から逸脱することなく、さまざまな明白な点で修正が可能である。したがって、図面および説明は、本質的に例示と見なされるべきであり、限定と見なされるべきではない。
参照による援用
【0080】
本明細書で言及されるすべての刊行物、特許、および特許出願は、個々の刊行物、特許、または特許出願が参照により組み込まれることが具体的かつ個別に示された場合と同じ程度に、参照により本明細書に組み込まれる。参照により組み込まれる刊行物および特許または特許出願が本明細書に含まれる開示と相反する限り、本明細書は、そのような相反する材料に取って代わるおよび/または優先することを意図している。
【0081】
本発明の新規の特徴は、添付の特許請求の範囲に詳細に記載されている。本発明の特徴および利点のより良い理解は、本発明の原理が利用される例示的な実施形態を説明する以下の詳細な説明、および添付の図面(本明細書では「figure」および「FIG.」も参照))を参照することによって得られる。
【図面の簡単な説明】
【0082】
図1】本開示のいくつかの実施形態による、データを格納する前にデータを重複排除するためのモジュールを示す図である。
【0083】
図2】本開示のいくつかの実施形態による、データストリームをデータブロックおよびチャンクのセットに事前にチャンキングすることを示す図である。
【0084】
図3】本開示のいくつかの実施形態による、データストリームをセグメント化するためのフロー図である。
【0085】
図4】本開示のいくつかの実施形態による、データストリームを、可変サイズのセグメントおよびチャンクのセットへ事前にチャンキングすることを示す図である。
【0086】
図5】本開示のいくつかの実施形態による、可変サイズのセグメントを決定するためのフロー図である。
【0087】
図6A】本開示のいくつかの実施形態による、スケッチを計算するためのフロー図である。
図6B】本開示のいくつかの実施形態による、スケッチを計算するための要素を示す図である。
【0088】
図7A】本開示のいくつかの実施形態による、スケッチを比較するためのフロー図である。
図7B】本開示のいくつかの実施形態による、スケッチを比較するための別のフロー図である。
【0089】
図8A】本開示のいくつかの実施形態による、差分演算を実行するためのフロー図である。
図8B】本開示のいくつかの実施形態による、差分演算を実行するための別のフロー図である。
図8C】本開示のいくつかの実施形態による、差分演算を実行するためのさらに別のフロー図である。
図8D】本開示のいくつかの実施形態による、差分演算を実行するためのさらに別のフロー図である。
図8E】本開示のいくつかの実施形態による、差分演算を実行するためのさらに別のフロー図である。
【0090】
図9】本開示のいくつかの実施形態による、データ再構成のためのフロー図である。
【0091】
図10】本開示のいくつかの実施形態による、データ削減システムのためのエコシステムを示す図である。
【0092】
図11】本開示のいくつかの実施形態による、データ削減システムのためのモジュールを示す図である。
【0093】
図12】本明細書で提供される方法を実施するようにプログラムまたは他の方法で構成されたコンピュータシステムを示す図である。
【発明を実施するための形態】
【0094】
本発明のさまざまな実施形態が本明細書に示され、説明されてきたが、そのような実施形態が例としてのみ提供されることは当業者には明らかであろう。当業者は、本発明から逸脱することなく、数多くの変形、変更、および置換を想到し得る。本明細書に記載の本発明の実施形態のさまざまな代替案が使用され得ることを理解されたい。
【0095】
「少なくとも」、「より大きい」、または「以上」という用語が一連の2つ以上の数値の最初の数値の前にある場合、「少なくとも」、「より大きい」、または「以上」という用語は常に、その一連の数値の各数値に適用される。例えば、1、2、または3以上は、1以上、2以上、または3以上と同等である。
【0096】
「わずかに」、「未満」、または「以下」という用語が一連の2つ以上の数値の最初の数値の前にある場合、「わずかに」、「未満」、「以下」という用語は常に、その一連の数値の各数値に適用される。例えば、3、2、または1以下は、3以下、2以下、または1以下と同等である。
【0097】
本明細書で使用される「リアルタイム」という用語は、一般に、第2のイベントまたは動作の発生に対する第1のイベントまたは動作の同時または実質的に同時の発生を指す。リアルタイムの動作またはイベントは、少なくとも別のイベントまたは動作に対して1秒未満、10分の1秒未満、100分の1秒未満、ミリ秒未満、またはそれ未満の応答時間内に実行され得る。リアルタイム動作は、1つまたは複数のコンピュータプロセッサによって実行され得る。
【0098】
本明細書で使用される「スケッチ」という用語は、一般に、少なくとも1つのデータセグメントなどの少なくとも1つのデータユニットのフィンガープリントを指す。スケッチは、ファイルまたはオブジェクトの(1または複数の)データセグメントを記述または特徴付けるために使用されてもよい。スケッチは、(1または複数の)データセグメントを記述または特徴付けるために使用することができる特徴のセットを含んでもよい。
【0099】
本明細書で使用される「弱いハッシングアルゴリズム」などの用語は、一般に、ハッシュ化データチャンクの衝突の総数を減らすことを犠牲にして、単位時間当たりにハッシングされるデータチャンクの数を最大化するハッシングアルゴリズムを指す。衝突は、ハッシングアルゴリズムが異なるデータチャンクに対して同じハッシュ値を生成するときに発生し得る。
【0100】
本明細書で使用される「強いハッシングアルゴリズム、」などの用語は、一般に、単位時間当たりにハッシングされるハッシュ化データチャンクの数を最大化することを犠牲にして、ハッシュ化データチャンクの衝突の総数を最小化するハッシングアルゴリズムを指す。衝突は、ハッシングアルゴリズムが異なるデータチャンクに対して同じハッシュ値を生成するときに発生し得る。
概要
【0101】
データ削減は、データを格納するのに必要な容量を削減するプロセスであり得る。本明細書に記載のデータ削減システムは、他の利点の中でも、ストレージ効率を高め、処理/計算速度性能を向上させ、コストを削減することができる。
【0102】
データストレージシステムのデータ削減を処理する従来の方法は、一般に、データをチャンクにセグメント化し、データのチャンクについてフィンガープリント(例えば、ハッシュ)を生成し、フィンガープリントをメモリ内テーブルに格納することに依存している。フィンガープリントが計算された後、メモリ内でルックアップを実行して、チャンクを新しいチャンクと比較することができる。メモリ内でフィンガープリントが一致すると、新しいチャンクが一意であると見なされる場合、新しいチャンクを格納し得る。新しいチャンクが同じであると考えられる場合、最初に格納されたチャンクを指すポインタが格納され得る。このプロセスは、各フィンガープリントを格納するためにかなりの記憶空間を必要とする。さらに、このプロセスは、各チャンクの各フィンガープリントを生成し、次いで各チャンクに対応する各フィンガープリントを異なるチャンクの別のフィンガープリントと比較するために、かなりの処理および計算時間を必要とする。各チャンクのフィンガープリントの計算および処理は、時間がかかり、計算コストが高くなる可能性がある。
【0103】
本明細書に記載のデータ削減システムおよび方法は、少なくとも従来のデータ重複排除技術の欠点に対処することができる。例えば、個々のデータチャンクのすべての間でフィンガープリント(ハッシュ)の直接比較を行う代わりに、本明細書で提供されるデータ削減システムおよび方法は、スケッチを使用して、ファイルまたはオブジェクト内のデータの大きなセグメントを記述または特徴付け、スケッチを比較して、2つ以上のセグメントが同種である(例えば、類似である)かどうかを判定することができる。スケッチは、大きなセグメントデータを記述または特徴付けるために使用することができる特徴のセットを含み得る。2つ以上のセグメントのスケッチが実質的に類似していると判定された場合、その後、より細かいレベル(例えば、特徴レベル、チャンクレベルなど)でスケッチを差分することができ、その時点でフィンガープリント比較を実行することができる。個々のチャンクのポインタの代わりに、フィンガープリントが一致するチャンクの群に対してシングルポインタが生成されてもよい。2つ以上のセグメントのスケッチが実質的に異なると判定された場合、セグメントおよびそれらの特徴のセットがデータベースに格納され得、チャンクレベルでの差分を必要とせず、他の同様のセグメントの重複排除のための計算リソースを節約することができる。
【0104】
本明細書のいくつかの実施形態によるデータ削減システム1040は、例えば、図10に示すように、エコシステム内に存在し得る。エコシステムは、1つまたは複数のクライアントアプリケーション1010と、1つまたは複数の記憶モジュール1020および1030とを備えてもよい。
【0105】
本明細書に記載のデータ削減システム1040は、1つまたは複数のモジュールを備えてもよい。図11に示すように、モジュールは、スケッチ計算モジュール600、スケッチ比較モジュール700、差分演算モジュール800、データ再構成モジュール900、データチャンキングモジュール100、データセグメント化モジュール300、可変セグメントサイジングモジュール500、またはそれらのさまざまな組み合わせなどを含み得る。各モジュールの機能は、一般に、以下のように説明され得る。
【0106】
スケッチ計算モジュールは、1つまたは複数の入力データストリームから生成された1つまたは複数のデータセグメントについて、1つまたは複数のスケッチを計算するように構成され得る。スケッチがセグメントについて生成された後、スケッチ比較モジュールは、新しいセグメントのスケッチが前のセグメントのスケッチと実質的に類似しているか否かを判定することができる。2つのスケッチが実質的に類似していないと判定された場合、新しいセグメントはデータベースに格納され得る。2つのスケッチが実質的に類似していると判定された場合、差分演算モジュールを利用して、セグメント間でチャンクを比較し、セグメントが両方のセグメントに共通の1つまたは複数の重複チャンクを有するかどうかを判定する。差分モジュールは、スパースインデックス配列を生成し、重複チャンクのブロックのポインタを格納するように構成され得る。重複チャンクのブロックは、同種フラグメントとしてデータベースに格納されてもよい。クライアントアプリケーションから読み出し要求を受信すると、データ再構成モジュールは、スパースインデックス配列および差分モジュールによって生成された均質なフラグメントを使用して、(クライアントアプリケーションから要求された)要求されたオブジェクトを再構成することができる。データチャンキングモジュール、データセグメント化モジュール、または可変セグメントサイジングモジュールを使用したデータの分割に関する追加の態様は、本明細書の他の箇所でさらに詳細に説明される。
I.スケッチ計算
【0107】
一態様では、スケッチ計算のための方法が提供される。スケッチは、予め指定されたクエリのセットおよびデータベースへの更新をサポートするデータ構造であってもよい。スケッチは、セグメント全体のすべての情報を格納する場合と比較して、メモリ空間の消費が少なくなる可能性がある。スケッチは、セグメントのフィンガープリントであってもよい。スケッチ計算は、メモリ要件を低減し、データ書き込みおよび読み出しプロセスの速度を高速化するために使用され得る。スケッチ計算は、少なくとも1つのセグメントから特徴のセットを生成することを含み得る。特徴のセットは、それらの特徴(またはそれらの特徴のサブセット)を使用して類似のセグメントを識別することができるように、セグメント(例えば、フィンガープリントとして)の近似識別子として使用され得る。本明細書の他の箇所に記載されているように、ハッシングアルゴリズム(例えば、ハッシング関数)および/または他のアルゴリズム(例えば、非ハッシングアルゴリズム)を使用して特徴のセットを決定することによって、スケッチを計算することができる。スケッチは、1つまたは複数のデータセグメントを表してもよい。いくつかの実施形態では、スケッチはメタデータ値であってもよい。スケッチは、1つまたは複数の入力データストリームから他のセグメントに関連付けられた一致または類似のスケッチを見つけるために利用されてもよい。スケッチは、以前に処理されたセグメントに関連する一致または類似のスケッチを見つけるために利用されてもよい。
【0108】
スケッチは、スケッチ計算モジュール600を使用して計算され得る。スケッチ計算モジュールおよびスケッチ計算の一例が、図6Aおよび図6Bを用いて示される。図6Bに示すように、入力データストリーム(610)がスケッチ計算に使用され得る。本方法は、1つまたはは複数のクライアントアプリケーションから入力データストリームを受信するステップ(ステップ601)を含み得る。入力データストリームは、経時的に利用可能にされた一連のデータを含み得る。入力データストリームは、送信されるプロセスにある情報を送信または受信するために使用される一連のデジタル符号化コヒーレント信号(例えば、データのパケット、データパケット、ネットワークパケットなど)であってもよい。入力データストリームは、データ、データパケット、ファイル、オブジェクトなどを含み得る。入力データストリームは、抽出された情報のセットを含み得る。入力データストリームは生データ(例えば、未処理データ、非構造化データなど)を含み得る。入力データストリームは、構造化データを含み得る。入力データストリームは、例えば、ネットワークトラフィック、グラフストリーム、クライアントアプリケーションデータストリーム、またはマルチメディアストリームなどであってもよい。入力データストリームは、少なくとも1つのセグメントを含んでもよい。
【0109】
クライアントアプリケーションは、ワークステーションまたはパーソナルコンピュータ上で実行するように構成されたアプリケーションであってもよい。ワークステーションまたはパーソナルコンピュータは、ネットワーク内にあってもよい。クライアントアプリケーションは、エンタープライズアプリケーションを含み得る。いくつかの実施形態では、エンタープライズアプリケーションは、企業環境で動作するように設計された大規模ソフトウェアシステムプラットフォームであってもよい。エンタープライズアプリケーションは、組織内で使用される他のアプリケーションと、または他のアプリケーションなしでインタフェースまたは統合するように設計されてもよい。エンタープライズアプリケーションは、個々のユーザではなく組織のニーズを満たすために使用されるコンピュータソフトウェアであってもよい。そのような組織は、例えば、ビジネス、政府などを含み得る。エンタープライズアプリケーションは、(コンピュータベースの)情報システムの不可欠な部分であり得る。エンタープライズアプリケーションは、例えば、データ管理、ビジネスインテリジェンス、ビジネスプロセス管理、知識管理、顧客関係管理、データベース、エンタープライズリソース計画、エンタープライズ資産管理、低コード開発プラットフォーム、サプライチェーン管理、製品データ管理、製品ライフサイクル管理、ネットワーキングおよび情報セキュリティ、オンラインショッピング、オンライン決済処理、インタラクティブ製品カタログ、自動課金システム、セキュリティ、ビジネスプロセス管理、エンタープライズコンテンツ管理、ITサービス管理、顧客関係管理、エンタープライズリソース計画、ビジネスインテリジェンス、プロジェクト管理、協調、人的リソース管理、製造、労働衛生および安全、エンタープライズアプリケーション統合、情報ストレージまたはエンタープライズフォーム自動化などを支援し得る。エンタープライズアプリケーションの複雑さは、特殊な機能および特定の知識を必要とする場合がある。
【0110】
図6Bに示すように、本方法は、入力データストリームから少なくとも1つのセグメントを生成するステップ(ステップ602)を含み得る。本方法は、本明細書の他の箇所に記載されているように、少なくとも1つのセグメントのスケッチを計算するステップをさらに含んでもよい。図6Bに示すように、入力データストリーム610内の1つまたは複数のセグメント620~622を生成することができる(ステップ602)。いくつかの実施形態では、複数のセグメントを入力データストリームから生成することができる。複数のセグメントは、少なくとも約1、5、10、15、25、100、1000、10000またはそれ以上のセグメントを含み得る。複数のセグメントは、少なくとも約1キロバイト(KB)、10KB、100KB、500KB、1メガバイト(MB)、2MB、3MB、4MB、5MB、6MB、7MB、8MB、9MB、10MB、またはそれ以上のサイズを有し得る。複数のセグメントは、最大で約10MB、9MB、8MB、7MB、6MB、4MB、3MB、2MB、1MB、500KB、100KB、10KB、またはそれ以下のサイズを有し得る。複数のセグメントは、約100KB~10MB、500KB~5MB、または1MB~4MBのサイズを有し得る。いくつかの実施形態では、複数のセグメントの各々は、約1MB~約4MBの範囲のサイズを有し得る。いくつかの実施形態では、複数のセグメントは、約1MB~約4MBの範囲の異なるサイズを有し得る。
【0111】
本明細書の他の箇所で説明するように、入力データストリームからセグメントを生成することができる。各セグメントは、複数のチャンクを含み得る。図6Bに示すように、セグメントは、複数のチャンク630に変換されてもよい。セグメントは、例えば1000個のチャンクに変換されてもよい。チャンクはデータを含み得る。チャンクは、情報のフラグメントであってもよい。チャンクは、情報のユニットであってもよい。チャンクは、ヘッダを含み得る。ヘッダは、チャンクのパラメータを示し得る。パラメータは、例えば、チャンクのタイプ、コメント、サイズなどを含み得る。セグメントを取得し、1つまたは複数のチャンクを生成するプロセスは、チャンキングと呼ばれ得る。チャンキングは、データセグメント内のデータを(例えば、入力データストリームからの)連続データのいくつかのセクション(例えば、チャンク)に分割することを含み得る。例えば、中央処理装置(CPU)のオーバーヘッドを低減する、またはレイテンシを低減するために、チャンキングを使用することができる。いくつかの実施形態では、セグメントは、少なくとも約5、10、15、25、100、1000、10000またはそれ以上のチャンクを含み得る。セグメントは、約2から10000個のチャンク、10から1000個のチャンク、または25から100個のチャンクを含み得る。いくつかの実施形態では、セグメントは、少なくとも約1000個のチャンクを含み得る。複数のチャンクは、同じ長さであってもよいし、可変長であってもよい。複数のチャンクは、同じデータサイズであってもよい。複数のチャンクは、異なるデータサイズであってもよい。複数のチャンクは、少なくとも約0.1キロバイト(KB)、0.5KB、1KB、2KB、3KB、4KB、5KB、6KB、7KB、8KB、9KB、10KB、50KB以上のサイズを有し得る。複数のチャンクのサイズは、0.1KB~10KB、0.5KB~7KB、または1KB~4KBの範囲であってもよい。いくつかの実施形態では、複数のチャンクは、4KB~16KBの範囲のサイズを有し得る。
【0112】
本方法は、ステップ604を使用して複数のチャンクの各チャンクについてフィンガープリントを生成するステップをさらに含み得、図6Bにさらに示される。フィンガープリントは、特定のデータチャンクを識別するために利用され得る。いくつかの実施形態では、フィンガープリントは、1つまたは複数のハッシングアルゴリズムを使用して生成され得る。フィンガープリントは、1つまたは複数のハッシングアルゴリズムによって生成された1つまたは複数のハッシュ値を含み得る。図6Bに示すように、複数のハッシュ値640(例えば1000個のハッシュ値)を生成するために、チャンク(例えば、1000個のチャンク)に対してハッシングアルゴリズムが実行され得る。各ハッシュ値は、各それぞれのチャンクに関連付けられたフィンガープリントであってもよい。いくつかの実施形態では、特定のチャンクに対して2つ以上のハッシュ値が計算され得る。
【0113】
本明細書に記載のハッシングアルゴリズム(例えば、ハッシュ(ハッシング)関数)は、任意のサイズのデータを固定サイズ値にマッピングするために使用できる任意の方法を含み得る。ハッシュ関数によって返される値は、ハッシュ値、ハッシュコード、ダイジェスト、またはハッシュと呼ばれる場合がある。これらの値は、ハッシュテーブルと呼ばれる固定サイズテーブルにインデックスを付けるために使用され得る。場合によっては、暗号化グレードのハッシュ関数が、フィンガープリントを生成するために使用され得る。暗号化グレードのハッシュ関数は、鍵付きであっても、鍵なしであってもよく、またはそれらの組み合わせを使用してもよい。ハッシュ関数は、SHA-0、SHA-1、SHA-2、SHA-3、SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256、SHA3-224、SHA3-256、SHA3-384、SHA3-512、SHAKE128、SHAKE256、BLAKE-256、BLAKE-512、BLAKE2s、BLAKE2b、BLAKE2X、ECOH、FSB、GOST、Grostl、HAS-160、HAVAL、JH、LSH、MD2、MD4、MD5、MD6、RadioGatun、RIPEMD、RIPEMD-128、RIPEMD-160、RIPEMD-320、Skein、Snefru、Spectral Hash、Streebog、SWIFFT、Tiger、Whirlpool、HMAC、KMCA、One-key MAC、PMAC、Poly1305-AES、SipHash、UMAC、VMAC、Pearson hashing、Paul Hsieh’s SuperFastHash、Buzhash、Fowler-Noll-Voハッシュ関数、Jenkinsハッシュ関数、Bernstein hash djb2、PJW hash、MurmurHash、Fast-Hash、SpookyHash、CityHash、FarmHash、MetroHash、number hash、xxHash、t1ha、cksum(Unix)、CRC-16、CRC-32、Rabinフィンガープリント、集計ハッシング、一般的な一方向ハッシュ関数、およびZobristハッシングで構成される群から選択されてもよい。追加的または代替的に、フィンガープリントはまた、1つまたは複数の非ハッシングアルゴリズムを使用して生成されてもよい。
【0114】
本方法は、セグメントの複数の特徴を生成するステップをさらに含んでもよい。セグメントのスケッチは、セグメントを表す、またはセグメントに固有の特徴(例えば、特性)のセットを含み得る。特徴生成または抽出は、セグメントを記述するために必要なリソースの量を削減することができる。特徴は、セグメントからの最も関連性の高い情報を記述し得る。セグメントの特徴は、チャンクに小さな変形が導入されても変化しない場合がある。特徴は、チャンクのセット全体を使用する代わりに縮小表現(例えば、特徴のスケッチ比較)を使用して所望のタスク(例えば、チャンク比較)を実行できるように、セグメントからの関連情報を記述し得る。特徴は、例えば、セグメント内のチャンクに関連付けられた特定の項目を含み得る。項目は、例えば、1つまたは複数のハッシングアルゴリズムによって生成されたハッシュ値を含み得る。項目は、例えば、整数(例えば、ID番号、ハッシュ値)、データ型、ファイル拡張子などを含み得る。
【0115】
セグメントのスケッチにおける特徴のセットは、セグメントを一意に識別または区別するために使用可能な特徴の最小数を含み得る。特徴のセットは、少なくとも約1、2、3、4、5、10、15、25、100、100またはそれ以上の特徴を含んでもよい。特徴のセットは、最大で約100、100、25、15、10、5、4、3、2、またはそれより少ない特徴を含んでもよい。特徴のセットは、約1から100、2から25、3から15、または5から10の特徴を含んでもよい。いくつかの実施形態では、セグメントのスケッチにおける特徴のセットは、約3~約15の特徴の範囲であってもよい。特徴のセットは、特徴の線形結合を含んでもよい。特徴のセットは、セグメントを近似するために使用されてもよい。
【0116】
いくつかの実施形態では、特徴のセットは、複数のチャンクから選択されたチャンクのサブセットに関連付けられ得る。特徴のセットは、チャンクのサブセットのためのフィンガープリントのセットを含み得る。フィンガープリントのセットは、チャンクのサブセットのためのチャンクハッシュを含み得る。チャンクのサブセットは、複数のチャンクの約1%、5%、10%、15%、20%、25%、30%、40%、50%未満であってもよい。チャンクのサブセットは、複数のチャンクの約1%~50%、5%~40%、または10%~25%であってもよい。チャンクのサブセットは、少なくとも約1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、50、100、またはそれ以上のチャンクを含み得る。チャンクのサブセットは、複数のチャンクについて生成された複数のハッシュに対する1つまたは複数のフィッティングアルゴリズムを使用して、複数のチャンクから選択され得る。いくつかの実施形態では、複数のハッシュは、2つ以上の異なるハッシュ関数を使用して生成され得る。2つ以上の異なるハッシュ関数は、本明細書の他の箇所で説明されるようなハッシュ関数のいずれかを含み得る。
【0117】
いくつかの実施形態では、チャンクのセット全体またはチャンクのサブセットの最小ハッシュを決定するために、1つまたは複数のフィッティングアルゴリズムが使用され得る(ステップ605)。特徴は、チャンクのセット全体またはチャンクのサブセットの最小ハッシュ値に対応し得る。図6Bに示すように、フィッティングアルゴリズムは、特定のチャンクに対応する1000個のハッシュ値(例えば、フィンガープリント;650)の最小ハッシュ値を取得するために使用され得る。1つまたは複数のフィッティングアルゴリズムは、各チャンクのハッシュ値が生成されるときの最小ハッシュ値を計算するために使用され得る。1つまたは複数のフィッティングアルゴリズムは、チャンクのセット全体のすべてのハッシュ値が生成された後の最小ハッシュ値を計算するために使用され得る。チャンクのセットの最小ハッシュ値は、1000個のチャンクを表現または記述するために使用することができる特徴(F,650)であってもよい。いくつかの実施形態では、1つまたは複数のフィッティングアルゴリズムを使用して、2つ以上の異なるハッシュ関数の各関数について最小ハッシュを決定し得る。場合によっては、特徴のセットの各特徴は、2つ以上の異なるハッシュ関数の各ハッシュ関数について最小ハッシュを含み得る。特徴のセットは、2つ以上の異なるハッシュ関数の最小ハッシュのベクトルを含み得る。
【0118】
いくつかの実施形態では、チャンクのセット全体またはチャンクのサブセットの最大ハッシュを決定するために、1つまたは複数のフィッティングアルゴリズムが使用され得る。特徴は、チャンクのセット全体またはチャンクのサブセットの最大ハッシュ値に対応し得る。場合によっては、最大ハッシュ値は、追加的または代替的に、特徴のセットを決定するための最小ハッシュ値と共に使用されてもよい。場合によっては、特徴ベクトルは、最小ハッシュ値から生成された1つまたは複数の特徴および/または最大ハッシュ値から生成された1つまたは複数の特徴を含み得る。場合によっては、特徴は、1つまたは複数のチャンクに対する1つまたは複数のハッシングアルゴリズムによって生成された1つまたは複数のハッシュの線形結合であってもよい。
【0119】
例えば図6Bに示すように、1つまたは複数のハッシングアルゴリズムを使用して、1つまたは複数の特徴(例えば、F、F、F、...、F)を生成し得る。例えば、1000個のSHA-2ハッシュ値を生成するために、SHA-2ハッシングアルゴリズムが使用され得る。SHA-2ハッシュ値のセットにおける最小ハッシュ値は、第1の特徴(F)を生成するために使用され得る。次いで、MD2ハッシングアルゴリズムを使用して、1000個のMD2ハッシュ関数値を生成し得る。MD2ハッシュ値のセットにおける最小ハッシュ値は、第2の特徴(F)を生成するために使用され得る。特徴は、同時に生成されてもよい。特徴は、データベースに、または本明細書の他の箇所に記載されているように格納されてもよい。チャンクの個々のフィンガープリント(例えば、すべてのハッシュ値)の代わりに特徴を格納することにより、データストレージおよびメモリ要件の大きさを低減することができる。例えば、1000個のデータチャンクを含むセグメントの場合、10個の特徴は、セグメント全体(またはチャンクのセット全体)を表すことができる。1000個の個々のデータチャンクに対して1000個のハッシュ値を格納する代わりに、本明細書に記載のシステムは、10個の特徴を格納するだけでよく、したがって、メモリストレージを3桁削減することができる。場合によっては、1つまたは複数の特徴は、チャンクのセット内の1つまたは複数の特定のチャンクに関連付けられてもよい。例えば、特定のチャンク(例えば、チャンク1,1)は、セット内の最小ハッシュ値であるハッシュ値を有し得る。
【0120】
図6Bに示すように、特徴を組み合わせて特徴ベクトル670を生成し得る。特徴を使用して、スケッチ680を生成し得る(ステップ606)。スケッチ680は、特徴のセットを含むことができる。スケッチは、1つまたは複数の特徴ベクトルを含むことができる。スケッチは、本明細書の他の箇所に記載されているように、1つまたは複数の他のスケッチと比較することができる。場合によっては、スケッチは、例えば、時空間スケッチングアルゴリズム、Countスケッチ、Count-minスケッチ、コンサバティブアップデートスケッチ、Count-Min-Logスケッチ、Slim-Fatスケッチ、またはWeight-Median Sketchなどを使用して計算されてもよい。いくつかの実施形態では、スケッチは、類似度ハッシングアルゴリズムまたは同様の機能を使用して生成されてもよい。
【0121】
スケッチは、1つまたは複数のクライアントアプリケーションから受信した入力データストリームからの少なくとも1つの他のセグメントのインライン重複排除に使用可能であり得る。インライン重複排除にスケッチを使用することにより、大量のデータ(例えば、ペタバイト規模で)の削減を達成することができる。スケッチは、複数のチャンクのフルインデックスを必要とせずに、インライン重複排除のために使用可能であり得る。スケッチは、少なくとも1つの他の入力データストリーム内のすべてのチャンクをフルインデックスにルックアップする必要なく、インライン重複排除に使用可能であり得る。
II.スケッチ比較
【0122】
スケッチ比較は、例えば図7Aに示すように、スケッチ比較モジュール700を使用して実行され得る。本方法は、少なくとも1つの他の入力データストリームから少なくとも1つの他のセグメントを生成するステップ(ステップ701)をさらに含んでもよい。図7Bは、第1のセグメント720および第2のセグメント725を生成するために使用できる第1の入力データストリーム710および第2の入力データストリーム715を示す。場合によっては、第1のセグメント720および第2のセグメント725は、同じデータ入力ストリームから生成されてもよい。第2のセグメント725は、本明細書の他の箇所に記載された方法を使用して生成され得る。本方法は、第2のセグメントのスケッチを計算するステップ(ステップ702)をさらに含んでもよい。図7Bは、第1のセグメント730のスケッチと第2のセグメント745のスケッチとの比較(ステップ703)を示している。第2のセグメントのスケッチは、本明細書の他の箇所で説明するように計算され得る。第2のセグメントのスケッチは、第2のセグメントを表すまたは第2のセグメントに固有の特徴の別のセット(例えば、特性)を含んでもよい。図7Bは、第1のセグメントのスケッチ730が特徴のセット740を含んでもよく、また、第2のセグメントのスケッチ735が特徴のセット745を含んでもよいことを示している。上記の特徴は、本明細書の他の箇所で説明されるように生成され得る。
【0123】
本方法は、第2のセグメントが第1のセグメントと確率的に類似しているかどうかを判定するために、類似度スコアに少なくとも部分的に基づいて、第1のスケッチおよび第2のスケッチを処理するステップをさらに含んでもよい(ステップ704)。処理するステップは、1つまたは複数の特徴が両方のセットに共通であるかどうかを判定するために、第1の特徴のセットを第2の特徴のセットと比較するステップを含み得る。図7Bに示すように、第1のセグメントのスケッチ730および第2のセグメントのスケッチ735は、両方のセット764にある特徴および/または両方のセット(762,766)によって共有され得ない特徴を決定するために比較され得る(750)。各スケッチは、異なる数の特徴を含むことができる。例えば、スケッチ730は10個の特徴を含んでもよく、一方、スケッチ735は6個の特徴を含んでもよい。各スケッチは、同じ数の特徴を含むことができる。例えば、スケッチ730は10個の特徴を含んでもよく、一方、スケッチ735は10個の特徴を含んでもよい。
【0124】
類似度スコアが類似度閾値以上である場合、第2のセグメントは、第1のセグメントと確率的に類似していると判定され得る。類似度スコアが類似度閾値未満である場合、第2のセグメントは、第1のセグメントと確率的に類似していないと判定され得る。図7Bに示すように、類似度スコアが閾値以上である場合(770)、第1のセグメントと第2のセグメントとは類似していると考えてよい。場合によっては、第1のセグメントと第2のセグメントとが類似していると考えられる場合、本方法は、差分演算を実行するステップをさらに含んでもよい。差分演算は、本明細書の他の箇所に記載されている通りであってもよい。類似度スコアが閾値以下である場合(775)、第1のセグメントと第2のセグメントは類似していないと考えてよい。場合によっては、第1のセグメントと第2のセグメントとが類似していないと考えられ得る場合、第2のセグメントの1つまたは複数のチャンクをデータベースに格納してもよい(ステップ705)。類似度閾値は、少なくとも約5%、10%、15%、20%、25%、30%、35%、40%、50%、55%、60%、65%、70%、75%、80%、85%、90%、95%、99%、またはそれ以上であってもよい。類似度スコア閾値は、約5%~99%、10%~90%、20%~80%、30%~70%、または40%~50%であってもよい。いくつかの実施形態では、類似度閾値は、少なくとも約50%であってもよい。
【0125】
類似度スコアは、第1のセグメントと第2のセグメントとの間の重複度を示してもよい。場合によっては、例えば、第1のセグメントが10個の特徴を有し、第2のセグメントが8個の特徴を有し、両方のセットで6個の特徴が一致することが判明した場合、類似度スコアは50%(例えば、6個の一致する特徴/12個の固有の特徴)であってもよい。場合によっては、類似度スコアは、特定のセグメントに対して計算されてもよい。例えば、第1のセグメントが10個の特徴を有し、第2のセグメントが8個の特徴を有し、両方のセットで6個の特徴が一致することが判明した場合、類似度スコアは、それぞれ6/10(すなわち、60%)または6/8(すなわち、75%)であってもよい。場合によっては、第1のセグメントのスケッチの特徴の数と第2のセグメントのスケッチの特徴の数は同じであってもよい。場合によっては、第1のセグメントのスケッチの特徴の数と第2のセグメントのスケッチの特徴の数は異なっていてもよい。
【0126】
類似度スコアは、第1のセグメントと第2のセグメントとの間の一致する特徴の数を示してもよい。図7Bに示すように、一致する特徴764は、両方のスケッチに見られ得る。1つまたは複数の特徴は、両方のセットに類似または同一であってもよい。1つまたは複数の特徴は、両方のセットによって共有されなくてもよく、または両方のセットに共通でなくてもよい。1つまたは複数の特徴は、第1のセグメントと第2のセグメントとの間の一致する特徴と一致しない特徴との組み合わせであってもよい。第2のセグメントは、第1のセグメントと同じサイズであってもよい。第2のセグメントは、第1のセグメントと異なるサイズであってもよい。第1のセグメントおよび第2のセグメントの各々は、約1メガバイト(MB)~約4MBの範囲のサイズを有し得る。第1のセグメントおよび第2のセグメントの各々は、本明細書の他の箇所で説明されるような範囲のサイズを有し得る。
III.差分演算
【0127】
データ差分演算は、差分演算モジュール800を使用して実行されてもよく、例えば図8Aに示されている。本方法は、第1のセグメントおよび第2のセグメントの特徴をデータベースに格納するステップをさらに含んでもよい。図8Bに示すように、セグメントのスケッチ(例えば、セグメントの特徴のセット,810)と、そのスケッチに対応するチャンクとは、データベース(820,840)に格納され得る。本方法は、類似度スコアが類似度閾値未満である場合、第2のセグメントおよびその特徴のセット(例えば、スケッチ,830)をデータベースに格納するステップをさらに含んでもよい。例えば、スケッチと別のスケッチとの間の類似度スコアが15%であり、閾値が40%に設定されている場合、第2のセグメントおよびその特徴のセットをデータベースに格納することができる。図8Bに示すように、2つのスケッチが比較され(例えば、810対830)、類似度スコアが閾値を下回るとき、そのセグメントに対応するスケッチおよびチャンクの特徴は、データベース840に格納され得る。場合によっては、データベースは同じであってもよい。場合によっては、データベースは異なっていてもよい。
【0128】
本方法は、類似度スコアが類似度閾値以上である場合に、第2のセグメントに対して第1のセグメントとの差分演算を実行するステップをさらに含んでもよい。例えば、あるスケッチと別のスケッチとの間の類似度スコアが65%であり、閾値が40%に設定されている場合、第1のセグメントのチャンクと第2のセグメントのチャンクとは差分され得る。図8Cに示すように、第1のセグメントおよび第2のセグメントの類似度スコアが閾値以上である場合、両方のセグメントの個々のチャンクを比較することができる(例えば、850対860)。差分演算は、第1のセグメントの複数のチャンクについて参照ハッシュセット(870)を生成するステップを含み得る(ステップ801)。第1のセグメントの複数のチャンクのハッシュは、本明細書の他の箇所に記載されているような1つまたは複数のハッシングアルゴリズムを使用して生成され得る(ステップ802)。複数のチャンクのハッシュは、予め生成されたハッシュであってもよい。本方法は、参照ハッシュセットをメモリテーブルに格納するステップを含み得る。
【0129】
参照ハッシュセットは、弱いハッシュおよび/または強いハッシュを含み得る。ハッシュの強度は、ハッシングアルゴリズムに依存し得る。弱いハッシングアルゴリズムは、1つまたは複数の弱いハッシュを生成し得る。強いハッシングアルゴリズムは、1つまたは複数の強いハッシュを生成し得る。弱ハッシュおよび/または強ハッシュは、本明細書の他の箇所に記載されている1つまたは複数のハッシングアルゴリズムを使用して生成され得る。弱いハッシングアルゴリズムは、弱い衝突耐性を有するハッシングアルゴリズムであってもよい。弱い衝突耐性は、衝突を見つけることができない確率が無視できないことを示し得る。強いハッシングアルゴリズムは、強い衝突耐性を有するハッシングアルゴリズムであってもよい。強い衝突耐性は、衝突を見つけることができない確率が無視できることを示し得る。強いハッシングアルゴリズムは、同じハッシュ値にマッピングする入力を見つけることを困難にする可能性がある。弱いハッシングアルゴリズムは、強いハッシングアルゴリズムよりも、同じハッシュ値にマッピングする入力を見つけることを容易にし得る。弱いハッシングアルゴリズムは、強いハッシュ関数よりもハッシュ値(例えば、同じハッシュ値への鍵のマッピング)をクラスタ化する可能性が高い場合がある。強いハッシュ関数は、ハッシュ値の均一な分布を有し得る。
【0130】
ハッシングアルゴリズムの強度(例えば、弱から強)は、勾配スケールであってもよい。ハッシングアルゴリズムの強度は、ハッシングアルゴリズムを使用する時間スケール、ハッシングアルゴリズムの複雑さ、ハッシングアルゴリズムの実装、中央処理装置のベンチマーク、またはバイト当たりのサイクルなどに依存し得る。ハッシングアルゴリズムの強度は、1つまたは複数の統計的テストを使用して決定され得る。1つまたは複数の統計的テストは、例えば、ハッシュ関数がランダム関数と容易に区別できるかどうかを測定し得る。テストは、例えば、ハッシュ関数がアバランシェ効果を表示するかどうかを判定することであってもよい。アバランシェ効果は、入力キーの任意の単一ビット変更が出力の平均で半分のビットに影響を与える効果であり得る。
【0131】
弱いハッシングアルゴリズムは、単位時間当たりにハッシングされるデータチャンクの数を最大化し得る。弱いハッシングアルゴリズムは、ハッシュ化データチャンクの衝突の総数を減らすことを犠牲にして、単位時間当たりにハッシングされるデータチャンクの数を最大化し得る。衝突は、ハッシングアルゴリズムが異なるデータチャンクに対して同じハッシュ値を生成する場合であってもよい。強いハッシングアルゴリズムは、ハッシュ化データチャンクの衝突の総数を最小限に抑え得る。強いハッシングアルゴリズムは、単位時間当たりにハッシングされるハッシュ化データチャンクの数を最大化することを犠牲にして、ハッシュ化データチャンクの衝突の総数を最小化し得る。衝突は、ハッシングアルゴリズムが異なるデータチャンクに対して同じハッシュ値を生成する場合であってもよい。
【0132】
参照ハッシュセットは、少なくとも1ギガバイト規模のスループットを有する高スループットハッシング関数を使用して生成され得る。場合によっては、高スループットハッシング関数は弱いハッシングアルゴリズムであってもよい。ハッシングアルゴリズムは、本明細書の他の箇所に記載されているようなハッシングアルゴリズムであってもよい。2つのスケッチ/セグメント間の類似度は、高スループットハッシング関数に使用されるハッシングアルゴリズムの強度を決定し得る。例えば、2つのスケッチ/セグメントが特定の類似度スコアを有する場合、別のハッシングアルゴリズムを超える特定のハッシングアルゴリズムが選択され得る。例えば、2つのセグメントの2つのスケッチ間で類似度スコアが高いと考えられる場合、弱いハッシング関数が使用され得る。スケッチ比較が類似度を定量化する際の一次近似であり得るので、弱いハッシング関数が使用され得る(例えば、スケッチは、2つのセグメントが類似していると判定することを支援し、その結果、弱いハッシュが使用され得る)。逆に、2つのセグメント間の特徴のセットの類似度スコアが低い場合、強いハッシング関数が使用され得る。場合によっては、2つのスケッチが低い類似度スコアを有する場合、ハッシング関数を使用しなくてもよい。
【0133】
いくつかの実施形態では、類似度スコアが例えば70%~90%の範囲である場合、第1のハッシングアルゴリズムが使用されてもよい。場合によっては、類似度スコアが例えば90%より大きい場合、本方法は、第1のハッシュ関数とは異なる第2のハッシング関数を使用してもよい。類似度スコアが例えば70%未満であるが50%より大きい場合、本方法は第3のハッシング関数を使用してもよい。類似度が例えば50%未満である場合、本方法は、ハッシングアルゴリズムを使用せず、代わりに2つのスケッチ(例えば、特徴)および2つのセグメントをデータベースに格納してもよい。場合によっては、2つのセグメントのスケッチを比較した後に2つのセグメントが実質的に類似していないと考えられる場合、2つのセグメントを区別する利点はわずかであり得る。
【0134】
場合によっては、ハッシングスループット能力を最大化するためにハッシング関数を支援するために、さまざまな1つまたは複数のパラメータが変更されてもよい。例えば、パラメータは、ハッシュ値を生成するのに必要なクロックサイクル数を減少させ、ハッシュ値メモリフットプリント、またはデータワードサイズなどを調整するために使用され得る。ハッシュは、反復的に計算され得る。ハッシュは、ハッシングアルゴリズムに与えられるバイトサイズを調整することによって反復的に計算され得る。バイトサイズは、少なくとも約1バイト、2バイト、4バイト、8バイト、16バイト、32バイト、64バイト、またはそれ以上であってもよい。バイトサイズは、最大で約64バイト、32バイト、16バイト、8バイト、4バイト、2バイト、1バイト、またはそれ以下であってもよい。バイトサイズは、約1バイトから64バイト、1バイトから16バイト、または1バイトから4バイトであってもよい。
【0135】
いくつかの実施形態では、高スループットハッシュ値生成のためのハッシングアルゴリズムの性能は、スループットのデータサイズ(例えば、ギガバイト)に依存し得る。ハッシングアルゴリズムの性能は、ハッシュ値生成のためのデータのスループットの速度(例えば、毎秒ギガバイト)に依存し得る。ハッシングアルゴリズムの性能は、ハッシングアルゴリズムの強度に依存し得る。例えば、弱いハッシング関数が一般に強いハッシング関数よりも速くハッシュ値を生成するので、より迅速なハッシュ値生成が望まれる場合、弱いハッシングアルゴリズムは性能の向上をもたらし得る。
【0136】
いくつかの実施形態では、差分演算は、順次ローリングベースで、第2のセグメントの複数のチャンクのうちのチャンクについてハッシュを生成するステップをさらに含んでもよい。例えば、1000個のチャンクのハッシュ値は、1000個のハッシュ値が生成されるまで、または1000個のハッシュ値のサブセットが生成されるまで、第1のチャンクの第1のハッシュ値を生成し、その後、第2のチャンクの第2のハッシュ値を生成することによって生成され得る。図8Dに示すように、第2のセグメントにおけるチャンクのハッシュ値(HC,861)は、初期時間(例えば、t1)において計算され得る。第2のセグメント内のチャンクの第2のハッシュ値(HC,862)は、t1(例えば、t2)の後の時間に計算され得る。チャンクは、互いに隣接していてもよい。あるいは、チャンクは連続したチャンクである必要はない(例えば、861対863)。場合によっては、第2のセグメントの複数のチャンクのうちの次のチャンクについて別のハッシュを生成する前に、ハッシュを参照ハッシュセットと比較して、一致があるかどうかを判定してもよい。場合によっては、第2のセグメントの複数のチャンクのすべてのハッシュを同時に生成してもよい。
【0137】
差分演算は、ハッシュを参照ハッシュセットと比較して、一致があるかどうかを判定するステップ(ステップ803)をさらに含んでもよい。差分演算は、ハッシュおよび1つまたは複数の他のハッシュが参照ハッシュセットから一致を見つける限り、複数のチャンクのうちの1つまたは複数の後続のチャンクについて1つまたは複数の他のハッシュを生成し続けるステップ(ステップ802~804)をさらに含んでもよい。差分演算は、後続チャンクのハッシュが参照ハッシュセットから一致を見つけられないことを検出すると、チャンクおよび1つまたは複数の後続のチャンクを参照するシングルポインタを生成して格納するステップ(ステップ805)をさらに含んでもよい。ハッシュは、本明細書の他の箇所に記載されているような弱いハッシュであってもよい。
【0138】
図8Eに示すように、第2のセグメント860は、連続した順序であってもよい複数のチャンクを含んでもよい。第1のハッシュ値871は、参照ハッシュ値880と比較されてもよい。参照ハッシュは、後のセグメントのハッシングの前に任意のセグメントから生成されたハッシュであってもよい。参照ハッシュは、第1のセグメントからのハッシュであってもよい。参照ハッシュは、データベースに格納されたハッシュであってもよい。参照ハッシュ値は、第1のハッシュ値と同等であってもよい。場合によっては、この時点でポインタを生成する代わりに、順次チャンクを検査してもよい。シーケンシャルチャンク(例えば、872)が参照ハッシュ値と同じハッシュ値を有する場合、本方法は、不一致が生じるまで(例えば、ハッシュ値は参照ハッシュ値と一致しない,874)、各チャンクのハッシュ値(例えば、871から874)をチェックし続けるステップを含んでもよい。このとき、後続の各チャンク(871から873)を参照してポインタを格納してもよい。シーケンシャルチャンク分析に続いてポインタを格納すると、格納する必要のあるポインタが少なくなるため、メモリ使用量の減少に加えて、アクセスする必要のあるポインタが少なくなり、計算速度の向上につながる可能性がある。
【0139】
1つまたは複数の入力データストリームが1つまたは複数のクライアントアプリケーションから受信されると、差分演算がインラインで実行されてもよい。いくつかの代替実施形態では、差分演算はオフラインで実行されてもよい。例えば、差分演算は、1つまたは複数のセグメントがデータベースに格納された後にオフラインで実行されてもよい。差分演算は、第1のセグメントおよび第2のセグメントを複数の均質なフラグメントに縮小するために使用されてもよい。複数の均質なフラグメントは、1または複数のクラウドオブジェクトストアに格納されてもよい。差分演算は、縮小されたポインタのセットを含むスパースインデックスを生成するために使用されてもよい。縮小されたポインタのセットは、一連のシーケンシャルチャンクを参照するシングルポインタを含んでもよい。均質なフラグメントを使用すると、差分演算後に格納する必要があるチャンクが少なくなるため、メモリ記憶要件を低減することができる。
IV.データ再構成
【0140】
均質なフラグメントからのデータの再構成は、例えば図9Aに示すように、データ再構成モジュール900を使用して実行されてもよい。本方法は、1つまたは複数のクライアントアプリケーションから読み出し要求を受信するステップ(ステップ910)をさらに含んでもよい。読み出し要求は、第1のセグメントおよび/または第2のセグメントを含むオブジェクトに対するものであってもよい。本方法は、読み出し要求に応答してオブジェクトを生成するために、複数の均質なフラグメントおよびスパースインデックスを少なくとも部分的に使用して第1および/または第2のセグメントを再構成するステップ(ステップ920)をさらに含んでもよい。均質なフラグメントは、本明細書の他の箇所に記載されているように、1つまたは複数のデータチャンクを含んでもよい。
【0141】
本方法は、再構成されたオブジェクトを1つまたは複数のクライアントアプリケーションに提供するステップ(ステップ930)をさらに含んでもよい。読み出し要求は、スパースアレイインデックスを利用して、オブジェクトを迅速に再構成または再編成してもよい。スパースインデックスアレイは、クライアントアプリケーションによって要求されたオブジェクトを再構成するために各均質なフラグメントを指し示してもよい。データ再構成モジュールは、個々のチャンクのすべてとは対照的に、スパースインデックスおよび均質なフラグメント(例えば、チャンクの集合)を使用してオブジェクトを再構成することができるので、処理時間および計算能力を節約し得る。
V.データチャンキング
【0142】
本明細書に記載の入力データストリームは、可変サイズのセグメントにセグメント化され得る。データストリームのセグメントは、データストリームを、セグメントのうちの1つに組み立てられ得るチャンクのセットに事前にチャンキングすることによって決定され得る。各セグメントは、余分なスペースを浪費することなく重複排除され得る。重複排除チャンクアルゴリズムは、整数のチャンクを含み得るセグメントを生成するために使用され得る。例えば、データストリームのスライディングウィンドウ分析を使用して、4キロバイト(kB)~16kBのチャンクをサポートするためにデータストリーム内の自然なブレークを見つけることによってチャンクを識別し得る。この例では、自然なブレークは、16バイト領域のハッシュを計算し、そのハッシュがパターン内の最後の13ビットをゼロとして有するパターンを有するかどうかを判定することによって生成され得る。チャンクは、ターゲット範囲(例えば、1メガバイト(MB)~8MB、2MB~16MB、または他の何らかの範囲)内のセグメントにさらに組み立てられ得る。
【0143】
図1は、データを格納する前にデータを重複排除するために使用され得るデータチャンキングモジュール100のブロック図である。図1において、データチャンキングモジュール100は、重複排除されたチャンク(例えば、チャンク104A、104C、および104D)を格納するために使用され得るデータストレージ110を含み得る。データストレージ110は、データ(例えば、ハードディスクドライブ、ソールドステートドライブ、メモリ、光学ドライブ、テープドライブ、および/またはデータを格納することができる別のタイプのシステムを含むストレージシステム;分散ストレージシステム;クラウドストレージシステム;および/または別のタイプのストレージシステム)を重複排除および/または格納することができる任意のタイプのデータストレージシステムであってもよい。データストレージシステムは、物理的または仮想的なデータストレージシステムであってもよい。
【0144】
データストリーム108を重複排除するために、データチャンキングモジュール100は、データストリーム108を、データブロックのセット102A~102Cに分割し得る。例えば、3つのデータブロック102A~102Bが示されており、代替の実施形態では、より多いまたはより少ないデータブロック102A~102Cが存在することができる。データブロックのサイズを、1MB~16MBの範囲(例えば、1MB~8MBの範囲、2MB~16MBの範囲、または他の何らかの範囲)とすることができ、データブロックのサイズは、より大きくてもよいし、より小さくてもよい。場合によっては、データブロックは均等に分割されてもよく、各データブロック102A~102Cは同じ固定サイズを有してもよい。
【0145】
重複排除コンポーネント106は、各データブロックをより小さいチャンク104A~104Eに分割することによってデータブロック102A~102Cを重複排除し、チャンク104A~104Eの各々がデータストレージ110に現在格納され得るか否かを判定し得る。例えば、チャンク104A~104Eの各々について、システム110は、そのチャンク104A~104Eのフィンガープリントを計算し得る。この実施形態では、フィンガープリントは、各チャンク104A~104Eを一意に識別するために使用されるメカニズムであってもよい。セキュアハッシングアルゴリズム(SHA)(例えば、SHA-1、SHA-256など、および/または別のタイプの暗号化ハッシュ関数)の1つとして、フィンガープリントを暗号化ハッシュ関数とすることができる。チャンク104A~104Eの各々のフィンガープリントは、(フィンガープリント計算においてデータ衝突がないと仮定して)チャンク104A~104Eを一意に識別し得る。フィンガープリントは、チャンク104A~104Eのうちの1つがデータストレージ110に現在格納されているかどうかを判定するために使用され得る。システム110は、チャンクフィンガープリントをデータベースに格納し得る。格納され得る各チャンク104A~104Eについて、データチャンキングモジュール100は、チャンク(例えば、チャンク104A)についてのフィンガープリントを計算し得、そのフィンガープリントがフィンガープリントデータベースに存在するかどうかを判定し得る。新たに計算されたフィンガープリントがデータベース内にない場合、システム100は、対応するチャンクを格納し得る。チャンクフィンガープリントがデータベース内のフィンガープリントのうちの1つと一致する場合、このチャンクのコピーは、データストレージ110に現在格納され得る。この場合、システム100は、チャンクを格納しなくてもよい。代わりに、システムは、データストレージ内のこのチャンクへの参照の数のカウントをインクリメントし、そのチャンクへの参照を格納し得る。参照カウントは、そのチャンクをデータストレージ110からいつ削除することができるかを判定するために使用され得る。図1に示すように、チャンク104A、104C、および104Dは現在データストレージ110に格納されているため、システム100はデータブロック102A用のチャンク104Bおよび104Eを格納し得る。データブロック104A、104C、および104Dは、データストレージシステム110に既に格納されている可能性があるためである。結果として、システム100は、それらのチャンクを格納しなくてもよい。場合によっては、データストレージシステムは、データチャンキングモジュール100の外部に存在してもよい。
【0146】
図1で説明したように、データチャンキングモジュール100は、各データブロックをより小さなチャンクに分割し得、チャンクレベルで重複排除分析を実行し得る。データチャンキングモジュール100は、データブロックを等しいサイズのチャンクに分割し得る。しかしながら、これは、データストリーム102内の可変サイズのオブジェクトが無作為にランダムチャンクに分割される可能性があるため、重複データの不十分な判定につながる可能性がある。あるいは、データチャンキングモジュール100は、データストリーム内の異なるオブジェクトを見つけるために、データブロックをより自然なブレークで可変サイズのチャンクに分割し得る。これにより、データストリーム内の重複チャンクを見つける可能性を高めることができる。場合によっては、しかしながら、システムが固定サイズのデータブロックから可変サイズのチャンクを決定する場合、余分なデータチャンクを有する可能性があるため、問題が発生する場合がある。
【0147】
図2は、データストリーム200をデータブロックおよびチャンクのセットに事前にチャンキングするブロック図である。図2では、データストリーム200は、固定サイズのデータブロック202A~202C(例えば、1MB)に分割され得る。上記のように、データストリーム200に対して3つより多いまたは少ないデータブロック202A~202Cが存在し得る。データブロック202Aの場合、システムは、データブロック202Aをチャンク204A~204Eに分割し得る。チャンクは可変サイズ(例えば4kB~16kB)であり得るため、チャンク定義に適合しない余分なデータのパーティションが存在する可能性がある。システムは、データブロック2020Aをチャンク204A~204Eにチャンキングし得、システムによって使用されている分割アルゴリズムに適合しない余分なデータのチャンク206が存在し得る。例えば、システムは、スライディングウィンドウを使用して、データブロック202A~202C内の16バイトのスライディングウィンドウを調べることによって4~16kBサイズのチャンク204A~204Eを見つけることができ、パターン内の最後の13ビットをゼロとして有するパターンを探すことができる。しかしながら、これは、上記のパターン内に適合しない余分なチャンク206を残す可能性がある。この結果、別のチャンクが余分なチャンク206のフィンガープリントと同じフィンガープリントを有する可能性は低いため、このデータは無駄になる可能性がある。余分なチャンク206は、重複を有する可能性が低い別個のチャンクとして格納される。これは、チャンクサイズが小さい場合にはあまり問題にならないかもしれないが、チャンクサイズ(および場合によってはデータブロックサイズ)が大きくなるにつれて、データの浪費の可能性が増大する可能性がある。
【0148】
いくつかの実施形態では、これに対する回避策は、余分なチャンク206を含むチャンクについて次のデータブロックの先頭を調べることであり得る。例えば、余分なチャンク206は、次のデータブロックであるデータブロック202Bの先頭と併せて分析されてもよい。次のデータブロックを調べることにより、事前チャンキングプロセスを直列化し得、これにより、重複排除プロセス全体の並列化を抑制し得る。
【0149】
いくつかの実施形態では、固定サイズのデータブロックを有する代わりに、システムは、データブロックを複数のチャンクにチャンキングするために使用されるものと同じまたは同様の基準を使用して、データストリームを可変サイズのセグメントに事前にチャンキングし得る。システムは、重複排除動作のためにデータをチャンキングするために使用されるのと同じまたは類似の基準を使用して、チャンクについてデータストリームを分析し得る。システムがセグメントの範囲(例えば、1MB~8MB、2MB~16MB、または他の何らかの範囲)内にあるデータの量を含むのに十分なチャンクを有し得ると、システムはこのセグメントを複製し得る。この事前チャンキングを実行することにより、システムは、上記の図2に記載されたように、余分なチャンクを有することなくチャンキングされ得るセグメントを生成し得る。これにより、無駄が削減され、並列化が増加する可能性がある。
VI.データセグメント化
【0150】
図3は、データストリームをセグメント化するように構成されたセグメント化モジュール300のフロー図である。図3において、セグメント化モジュール300は、ブロック302においてデータストリームを受信することによって開始し得る。データストリームは、ファイル、または、重複排除することができる別のタイプのオブジェクトであってもよい。ブロック302において、セグメント化モジュール300は、チャンクのセグメントを作成するためにデータストリームを事前にチャンキングし得る。セグメントは、余分なチャンクを持たない複数のチャンクを含み得る。場合によっては、セグメント化モジュール300は、データブロックをチャンキングするための重複排除プロセスと同じまたは類似の基準を使用してデータストリームを事前にチャンキングし得る。事前チャンキングは、以下の図4および図5でさらに説明され得る。セグメント化モジュール300は、ブロック306においてセグメントを使用してデータストリームを重複排除し得る。重複排除は、セグメントが重複排除のための余分なチャンクを有しないため、順次または並列に行われ得る。セグメント化モジュール300は、セグメントの各々をチャンキングし得、これらのチャンクに対して重複排除を実行し得る。例えば、各チャンクについて、セグメント化モジュール300は、各チャンクについてフィンガープリントを計算し得、このフィンガープリントを使用して、このチャンクがデータストレージに現在格納されているかどうかを判定し得る。セグメント化モジュール300は、チャンクフィンガープリントをデータベースに格納し得る。格納される各チャンクについて、セグメント化モジュール300は、チャンクのフィンガープリントを計算し、そのフィンガープリントがフィンガープリントデータベースに存在するかどうかを判定し得る。新たに計算されたフィンガープリントがデータベース内にない場合、セグメント化モジュール300は、対応するチャンクを格納し得る。チャンクフィンガープリントがデータベース内のフィンガープリントのうちの1つと一致する場合、このチャンクのコピーは、データストレージに格納され得る。ブロック308において、このプロセスは、重複排除データストリームを格納し得る。重複排除されたデータストリームは、データストレージに現在格納されていない固有のチャンクを含み得る。セグメント化モジュール300は、データストリームが書き込まれているときに重複排除されたデータストリームを格納し得るか、または初期格納(例えば、バックグラウンドで重複排除)の後に行うことができる。
【0151】
上述したように、セグメント化モジュール300は、データストリームを、重複排除プロセスの準備ができているセグメントのセットに事前にチャンキングし得る。図4は、データストリーム400を可変サイズのデータブロックおよびチャンクのセットに事前にチャンキングするブロック図である。図4では、データストリーム400は、可変サイズのセグメントに事前にチャンキングされ得る。各セグメントは、チャンクの総数であってもよい(例えば、上記の図2に示すように、余分なチャンクがない)。例えば、セグメント402Bまたは402Cよりも小さいセグメント402Aは、チャンク404A~404Eを含み得る。場合によっては、チャンク404A~404Eは可変サイズであってもよく、セグメント402Aの一部である余分なチャンクがない。セグメント402Aは、セグメント402Bまたは402Cよりも小さいセグメントとして示されてもよく、場合によっては、セグメント402Aは、必ずしも他のデータセグメントよりも小さくなくてもよい(例えば、1つ、いくつか、またはすべてのセグメントより大きくてもよく、別のセグメントと同じサイズであってもよい)。
VII.可変セグメントサイジング
【0152】
図5は、重複排除のための可変サイズのセグメントを決定し得る可変セグメントサイジングモジュール500のフロー図である。図5において、可変セグメントサイジングモジュール500は、ブロック502においてターゲットセグメント情報を受信することによって開始し得る。ターゲットセグメント情報は、可変サイズのセグメントを決定するために使用することができるバイトの範囲を有し得る。例えば、ターゲットセグメント範囲は、1MB~8MB、2MG~16MB、または他の何らかの範囲であり得る。ブロック504において、ステップ500は、データストリームを受信し得る。データストリームは、データストレージに格納することができるファイルまたは別のオブジェクトであってもよい。
【0153】
可変セグメントサイジングモジュール500は、ブロック506においてデータストリームの先頭からのオフセットを計算し得る。可変セグメントサイジングモジュール500は、チャンクを見つけるために使用され得る4kB~16kBの範囲内にあり得るオフセットを計算し得る。例えば、可変セグメントサイジングモジュール500は、データストリームの先頭から4kB~16kBの範囲内とすることができるオフセットをランダムに計算し得る。ブロック508において、分析のための領域を選択し得る。可変セグメントサイジングモジュール500は、データストリームに自然なブレークがあるかどうかを判定するために16バイト領域を選択し得る。ステップ500は、ブロック510において領域ハッシュを計算し得る。可変セグメントサイジングモジュール500は、ローリングハッシュを使用して領域ハッシュを計算し得る(例えば、Rabin-Karp、Rabinフィンガープリント、Cyclicフィンガープリント、Addlerローリングハッシュ、および/または何らかの他のタイプのローリングハッシュ)。可変セグメントサイジングモジュール500は、本明細書の他の箇所に記載されているようなハッシュ関数アルゴリズムを使用し得る。可変セグメントサイジングモジュール500は、データストリームに自然なブレークがあるかどうかを判定する方法としてこのハッシュを計算し得る。ブロック512において、可変セグメントサイジングモジュール500は、チャンクが見つかったかどうかを判定し得る。可変セグメントサイジングモジュール500は、16バイト領域について計算されたハッシュが、ハッシュの最後のビットのうちの少なくとも13ビットがゼロであると判定することによって、チャンクが存在するか否かを判定し得る。可変セグメントサイジングモジュール500は、チャンクが見つかったかどうかを判定するために異なる基準を使用し得る(例えば、異なるゼロの数、異なるパターンなど)。チャンクが見つかった場合、実行はブロック514に進み得る。チャンクが見つからない場合、実行はブロック508に進み得、そこで分析のためにデータストリーム内のウィンドウを進めることによって新しい領域が選択され得る。
【0154】
ブロック514において、可変セグメントサイジングモジュール500は、セグメントが見つかったか否かを判定し得る。可変セグメントサイジングモジュール500は、識別されたセグメントの現在の部分ではないものについて可変セグメントサイジングモジュール500によって決定され得るようなチャンクの長さを合計することによって、セグメントが見つかったと判定し得る。これらの長さの合計がターゲットセグメントサイズ範囲内にある場合、可変セグメントサイジングモジュール500は、新しいセグメントが見つかったと判定し得、実行はブロック516に進み得る。セグメントが見つからない場合、実行はブロック508に進み得、新しいチャンクの分析のためにデータストリーム内のウィンドウを進めることによって新しい領域が選択され得る。ブロック518において、可変セグメントサイジングモジュール500は、重複排除のためにセグメントをマークし得る。可変セグメントサイジングモジュール500は、このセグメントを重複排除のためにマークし得、セグメントは、後で重複排除され得る。
コンピュータシステム
【0155】
本開示は、本開示の方法を実施するようにプログラムされたコンピュータシステムを提供する。図12は、入力データストリームを取り込み、入力データストリームから1つまたは複数のセグメントを生成し、1つまたは複数のセグメントの1つまたは複数のチャンクのハッシュ値を生成し、1つまたは複数のハッシュ値から特徴を生成し、1つまたは複数のセグメントのスケッチを計算し、1つまたは複数の入力データストリームからの1つまたは複数のセグメントの1つまたは複数のスケッチを比較し、1つまたは複数のセグメントを差分し、1つまたは複数のチャンクをデータベースに格納し、データ重複を削減し、1つまたは複数の読み出し要求からデータを再構成するようにプログラムされた、または他の方法で構成されたコンピュータシステム1201を示す。コンピュータシステム1201は、例えば、1つまたは複数のチャンクのハッシュ値を生成するためのハッシングアルゴリズムが、スケッチ計算およびスケッチ比較のための異なる特徴を取得するように調整され得るなど、本開示のスケッチ計算、スケッチ比較、セグメント差分、およびデータ再構成のさまざまな態様を調整することができる。コンピュータシステム1201は、ユーザの電子デバイス、または電子デバイスに対して遠隔に配置されたコンピュータシステムとすることができる。電子デバイスは、モバイル電子デバイスとすることができる。
【0156】
コンピュータシステム1201は、中央処理装置(CPU、本明細書では「プロセッサ」および「コンピュータプロセッサ」でもある)1205を含み、これは、シングルコアまたはマルチコアプロセッサ、あるいは並列処理のための複数のプロセッサであり得る。コンピュータシステム1201はまた、メモリまたはメモリロケーション1210(例えば、ランダムアクセスメモリ、読み取り専用メモリ、フラッシュメモリ)、電子記憶ユニット1215(例えば、ハードディスク)、1つまたは複数の他のシステムと通信するための通信インタフェース1220(例えば、ネットワークアダプタ)、ならびにキャッシュ、他のメモリ、データストレージおよび/または電子ディスプレイアダプタなどの周辺機器1225を含む。メモリ1210、記憶ユニット1215、インタフェース1220、および周辺機器1225は、マザーボードなどの通信バス(実線)を介してCPU1205と通信している。記憶ユニット1215は、データを格納するためのデータ記憶ユニット(またはデータリポジトリ)であり得る。コンピュータシステム1201は、通信インタフェース1220の助けを借りて、コンピュータネットワーク(「ネットワーク」)1230に動作可能に結合され得る。ネットワーク1230は、インターネット、インターネットおよび/またはエクストラネット、あるいはインターネットと通信しているイントラネットおよび/またはエクストラネットであり得る。ネットワーク1230は、場合によっては、電気通信および/またはデータネットワークである。ネットワーク1230は、クラウドコンピューティングなどの分散コンピューティングを可能にすることができる1つまたは複数のコンピュータサーバを含むことができる。ネットワーク1230は、場合によっては、コンピュータシステム1201の助けを借りて、ピアツーピアネットワークを実装することができ、これにより、コンピュータシステム1201に結合されたデバイスがクライアントまたはサーバとして動作することが可能になる。
【0157】
CPU1205は、プログラムまたはソフトウェアで具体化することができる一連の機械可読命令を実行することができる。命令は、メモリ1210などのメモリロケーションに格納され得る。命令は、CPU1205を対象とすることができ、これは、その後、本開示の方法を実装するようにCPU1205をプログラムまたは他の方法で構成することができる。CPU1205によって実行される動作の例には、フェッチ、デコード、実行、およびライトバックが含まれ得る。
【0158】
CPU1205は、集積回路などの回路の一部であり得る。システム1201の他の1つまたは複数のコンポーネントを回路に含めることができる。場合によっては、回路は特定用途向け集積回路(ASIC)である。
【0159】
記憶ユニット1215は、ドライバ、ライブラリ、および保存されたプログラムなどのファイルを格納することができる。記憶ユニット1215は、ユーザデータ、例えば、ユーザプリファレンスおよびユーザプログラムを格納することができる。コンピュータシステム1201は、場合によっては、イントラネットまたはインターネットを介してコンピュータシステム1201と通信しているリモートサーバ上に配置されるなど、コンピュータシステム1201の外部にある1つまたは複数の追加のデータ記憶ユニットを含むことができる。
【0160】
コンピュータシステム1201は、ネットワーク1230を介して1つまたは複数のリモートコンピュータシステムと通信することができる。例えば、コンピュータシステム1201は、ユーザのリモートコンピュータシステムと通信することができる。リモートコンピュータシステムの例には、パーソナルコンピュータ(例えば、ポータブルPC)、スレートまたはタブレットPC(例えば、Apple(登録商標)iPad、Samsung(登録商標)Galaxy Tab)、電話、スマートフォン(例えば、Apple(登録商標)iPhone、Android対応デバイス、Blackberry(登録商標))、またはパーソナルデジタルアシスタントが含まれる。ユーザは、ネットワーク1230を介してコンピュータシステム1201にアクセスすることができる。
【0161】
本明細書に記載の方法は、例えば、メモリ1210または電子記憶ユニット1215などのコンピュータシステム1201の電子記憶ロケーションに格納された機械(例えば、コンピュータプロセッサ)実行可能コードによって実施され得る。機械実行可能コードまたは機械可読コードは、ソフトウェアの形で提供できる。使用中、コードはプロセッサ1205によって実行され得る。場合によっては、コードは、記憶ユニット1215から取り出され、プロセッサ1205による容易なアクセスのためにメモリ1210に格納され得る。状況によっては、電子記憶ユニット1215を排除することができ、機械実行可能命令がメモリ1210に格納される。
【0162】
コードを、事前にコンパイルして、コードを実行するように適合されたプロセッサを有する機械で使用するように構成することも、実行時にコンパイルすることもできる。コードは、選択できるプログラミング言語で提供されて、事前にコンパイルされる方法または実行時にコンパイルされる方法でコードを実行できる。
【0163】
コンピュータシステム1201など、本明細書で提供されるシステムおよび方法の態様は、プログラミングで具体化され得る。技術のさまざまな態様は、通常は、機械可読媒体のタイプで実行または具体化される機械(またはプロセッサ)実行可能コードおよび/または関連データの形式での「製品」または「製造品」と考えることができる。機械実行可能コードを、メモリ(例えば、読み取り専用メモリ、ランダムアクセスメモリ、フラッシュメモリ)またはハードディスクなどの電子記憶ユニットに格納することができる。「記憶」タイプの媒体は、コンピュータ、プロセッサなどの有形メモリのいずれかもしくはすべて、またはソフトウェアプログラミングのためにいつでも非一時的な記憶を提供し得るさまざまな半導体メモリ、テープドライブ、ディスクドライブなどのそれらの関連モジュールを含むことができる。ソフトウェアのすべてまたは一部は、インターネットまたはその他のさまざまな電気通信ネットワークを通じて通信される場合がある。そのような通信は、例えば、あるコンピュータまたはプロセッサから別のコンピュータへの、例えば、管理サーバまたはホストコンピュータからアプリケーションサーバのコンピュータプラットフォームへのソフトウェアのロードを可能にし得る。したがって、ソフトウェア要素を保持し得る別のタイプの媒体には、ローカルデバイス間の物理インタフェース、有線および光の固定電話ネットワーク、およびさまざまなエアリンクで使用されるような、光、電気、および電磁波が含まれる。有線または無線リンク、光リンクなど、そのような波を運ぶ物理的要素も、ソフトウェアを保持した媒体と見なすことができる。本明細書で使用される場合、非一時的で有形の「記憶」媒体に限定されない限り、コンピュータまたは機械の「可読媒体」などの用語は、実行のためにプロセッサに命令を提供することに関与する任意の媒体を指す。
【0164】
したがって、コンピュータ実行可能コードなどの機械可読媒体は、有形記憶媒体、搬送波媒体、または物理的伝送媒体を含むがこれらに限定されない多くの形態をとることができる。不揮発性記憶媒体は、例えば、図面に示されるデータベースなどを実装するために使用され得るような、任意の(1または複数の)コンピュータなどの任意の記憶デバイスなどの、光ディスクまたは磁気ディスクを含む。揮発性記憶媒体は、そのようなコンピュータプラットフォームのメインメモリなどの動的メモリを含む。有形の伝送媒体には、コンピュータシステム内のバスを構成するワイヤを備える同軸ケーブル;銅線および光ファイバが含まれる。搬送波伝送媒体は、電気信号または電磁信号、あるいは無線周波数(RF)および赤外線(IR)データ通信中に生成されるような音響波または光波の形態をとることができる。したがって、コンピュータ可読媒体の一般的な形式には、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、その他の磁気媒体、CD-ROM、DVDもしくはDVD-ROM、その他の光学媒体、パンチカード紙テープ、穴のパターンを有するその他の物理的な記憶媒体、RAM、ROM、PROMとEPROM、FLASH-EPROM、その他のメモリチップもしくはカートリッジ、データもしくは命令を伝送する搬送波、そのような搬送波を伝送するケーブルもしくはリンク、またはコンピュータがプログラミングコードやデータを読み取ることができるその他の媒体が含まれる。これらの形式のコンピュータ可読媒体の多くは、実行のためにプロセッサに1つまたは複数の命令の1つまたは複数のシーケンスを運ぶことに関与し得る。
【0165】
コンピュータシステム1201は、例えば、スケッチングのための複数のチャンクの特徴決定のためのハッシングアルゴリズムを提供するためのユーザインタフェース(UI)1240を備える電子ディスプレイ1235を含むか、またはそれと通信することができる。UIの例には、グラフィカルユーザインタフェース(GUI)およびウェブベースのユーザインタフェースが含まれるが、これらに限定されない。
【0166】
本開示の方法およびシステムを、1つまたは複数のアルゴリズムによって実装することができる。アルゴリズムを、中央処理装置1205による実行時にソフトウェアを介して実施することができる。アルゴリズムは、例えば、複数のチャンクのハッシュ値のセットから最小ハッシュ値を生成することができる。
【0167】
本発明の好ましい実施形態を本明細書に示し、説明してきたが、そのような実施形態が例としてのみ提供されていることは当業者には明らかであろう。本発明が、明細書内に提供される特定の例によって限定されることは意図されていない。本発明を前述の明細書を参照して説明してきたが、本明細書の実施形態の説明および例示は、限定的な意味で解釈されることを意味するものではない。当業者は、本発明から逸脱することなく、数多くの変形、変更、および置換を想到し得る。さらに、本発明のすべての態様は、さまざまな条件および変数に依存する、本明細書に記載された特定の描写、構成または相対的比率に限定されないことを理解されたい。本明細書に記載された本発明の実施形態に対するさまざまな代替案が、本発明を実施する際に使用されてもよいことを理解されたい。したがって、本発明は、そのような代替、修正、変形、または同等物も網羅することが企図されている。以下の特許請求の範囲が本発明の範囲を定義し、これらの特許請求の範囲内の方法および構造ならびにそれらの均等物がそれによってカバーされることが意図されている。
図1
図2
図3
図4
図5
図6A
図6B
図7A
図7B
図8A
図8B
図8C
図8D
図8E
図9
図10
図11
図12
【国際調査報告】