JP4975724B2 - 低冗長記憶システム内のサブブロックの存在を検出する方法 - Google Patents

低冗長記憶システム内のサブブロックの存在を検出する方法 Download PDF

Info

Publication number
JP4975724B2
JP4975724B2 JP2008500013A JP2008500013A JP4975724B2 JP 4975724 B2 JP4975724 B2 JP 4975724B2 JP 2008500013 A JP2008500013 A JP 2008500013A JP 2008500013 A JP2008500013 A JP 2008500013A JP 4975724 B2 JP4975724 B2 JP 4975724B2
Authority
JP
Japan
Prior art keywords
sub
block
index
bits
bit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008500013A
Other languages
English (en)
Other versions
JP2008533571A (ja
Inventor
ロス ニール ウィリアムズ
Original Assignee
ロックソフト リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from AU2005901173A external-priority patent/AU2005901173A0/en
Application filed by ロックソフト リミテッド filed Critical ロックソフト リミテッド
Publication of JP2008533571A publication Critical patent/JP2008533571A/ja
Application granted granted Critical
Publication of JP4975724B2 publication Critical patent/JP4975724B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • G06F16/1744Redundancy elimination performed by the file system using compression, e.g. sparse files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • G06F16/137Hash-based

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、低冗長コンピュータ・データ記憶システム内に特定のデータ片が存在するか否かを迅速に判定する方法および装置を提供する。
従来のファイル・システムのような従来のデータ記憶システムは、いくつかのデータを名前により編成し索引(index)している。これらの従来のシステムは、自身が格納しているファイルの集合体内の反復データを識別したり除去しようとしていない。従来のファイル・システムは、格納パターンにより、1,000の異なるファイルに同じメガバイトのデータの1,000のコピーを含んでいる場合がある。
低冗長記憶システムは、自身が格納しているデータをサブブロックに分割し、次に重複しているサブブロックを検出し、除去することにより同じデータの重複コピーの発生を低減している。通信および格納のためにデータをサブブロックに分割する方法については、Ross Williams(本明細書に記載の本発明の発明者でもある)の米国特許第5,990,180号に記載されていて、この方法は参照により本明細書に組み込まれる。2006年3月10日付けの「データ・クラスタを使用して低冗長性でデータを格納する方法」(Method for Storing Data with Reduced Redundancy Using Data Clusters)という名称のRoss Williamsの米国特許出願第XX/XXXXX号、および2006年3月10日付けの「低冗長記憶システム内で索引をつける方法」(Method for Indexing in a Reduced−Redundancy System)という名称のRoss Williamsの米国特許出願第YY/YYYYY号も参照により本明細書に組み込まれる。
低冗長コンピュータ記憶システムにおいては、各BLOB(バイナリ・ラージ・オブジェクト−ゼロ以上のバイト(またはビット)の有限シーケンス)は、サブブロックのプールからのサブブロックのシーケンスとして表示される。
図1(従来技術)は、サブブロック・インデックスにより索引したサブブロックのプール10を示す。サブブロック12のインデックスを維持することにより、記憶システムは、記憶システム内に新しいサブブロックがすでに存在するか否かを判定し、存在する場合には、その位置を決定することができる。次に、記憶システムは、同じサブブロックを再度格納するのではなく、既存のサブブロックへの参照を生成することができる。図2は、2つの異なるBLOB20、22の表示の両方が、プール24内の同じサブブロックを参照することができ、それによりスペースを節約する方法を示す。このように共有することにより、記憶システムは、元のデータが占有するスペースより狭いスペース内にデータを格納することができる。
サブブロック・インデックス26は、各サブブロックに対するエントリを含んでいなければならない。各エントリは、サブブロックを識別する(それをすべての他のものから区別する)ための情報、およびサブブロック・プール内のサブブロックの位置についての情報を提供する。これらのエントリはかなりの量のスペースを使用する。例えば、(サブブロックの)128ビット(16バイト)のハッシュが、サブブロック識別子として使用され、128ビット(16バイト)のサブブロック記憶アドレスがアドレスとして使用される場合、各エントリの大きさは32バイトである。平均サブブロック長さが1024バイトである場合には、このことは、インデックスは実際に格納しているデータの大きさの約3%であることを意味する。このことは、1テラバイトを含む記憶システムは、約30ギガバイト(1TBの3%)のサブブロック・インデックスを必要とすることを意味する。
その大きさが記憶装置の大きさの3%程度であるインデックスを維持するための要件は、インデックスをディスク上に格納する場合には、大した問題にならない。しかし、低冗長記憶システムにおいては、インデックスは非常に頻繁に参照される場合がある。何故なら、格納する新しい各BLOBをサブブロックに分割しなければならないし、サブブロック(またはそのハッシュ)の多くをインデックス内でルックアップしなければならないからである。平均サブブロック長さが1024バイトである場合には、20メガバイト・ブロックのデータを格納するには、データを約20,480のサブブロックに分割し、次に、各サブブロック上でインデックス・ルックアップを行わなければならない場合がある。インデックスがディスク上にある場合には、少なくとも20,000ランダム・アクセス・シーク動作を行わなければならない場合があり、これは同じ数のメモリ・アクセスより遥かに遅い。インデックスがメモリ内に保持されている場合には、システムの動作は遥かに速くなる。しかし、メモリ(RAM)は、ディスク・スペースより遥かに高価であり、RAM/ディスク比が3%程度でなければならないという要件は、大型の記憶装置にとって面倒な場合がある。
本発明は、メモリ内に全インデックスを保持する今説明したシステムと比較すると遥かに小さなメモリしか必要としない索引方法を提供する。
最初に、気が付くことは、記憶装置内にサブブロックが存在する場合と比較すると、記憶装置内にサブブロックが存在しない場合は、インデックスを迅速にルックアップすることは遥かに重要であるということである。何故なら、実際のデータの場合、大部分のインデックス・ルックアップは、欠落サブブロック(記憶装置内に位置していないサブブロック)に対して行われるからである。何故なら、存在(「一致する」)サブブロック(すなわち、記憶装置内のサブブロック)は、多くの場合、ラン(run)40中で発生するからである。図4は、サブブロック42の一致する(「存在」)および一致しない(「欠落」)ランの代わりのシーケンスとしてモデル化する方法を示す。
図3は、2つの異なるBLOB30、32が、サブブロックのランを提供する方法を示す。格納された第1のBLOB38は、サブブロックABCからなる。そのため、サブブロックA、BおよびCを含むサブブロックのクラスタ31がプール36内に生成される。次に、第2のBLOB39が格納される。その最初の2つのサブブロックWおよびXは記憶装置内に含まれていないので、これら2つのサブブロックは、クラスタ(この例の場合には、新しいクラスタ33である)内に置かれる。しかし、次の3つのサブブロックは、同じ順序で記憶装置内にすでに位置するサブブロックABCのランである。そのため、第2のBLOBの表示は、一致しているサブブロックA、BおよびCのラン全体を参照することになる。サブブロックWおよびXは、インデックス内でルックアップしなければならないが、サブブロックAが記憶装置内にすでに位置するものとして検出され、それが1つのクラスタ内で発見された場合には、インデックスを参照しなくてもBとCを容易に調和することができる。
格納するサブブロックが記憶装置内にすでに存在することが分かった場合には、次のいくつかの(数百の場合もある)サブブロックも存在し、一致するサブブロックの直後に見出されることが多い。それ故、一致しているサブブロックのランの残りを、インデックスをルックアップしないで格納することができる。各入りサブブロックは、インデックスを参照しないで、サブブロックの一致するラン内の次のサブブロックと比較することができる。一致するランが終了した場合だけ、インデックスが再度必要になる。
対照的に、欠落サブブロック(すなわち、記憶装置内に存在しないサブブロック)のラン中(記憶装置内のサブブロックのある重複許容されない場合)、各単一のサブブロックに対してインデックス・ルックアップを行わなければならない。
この分析は、データの冗長度のレベルが何であれ、大部分のインデックス・ルックアップ動作は、記憶装置内に存在していないサブブロックに対するものであることを示唆している。それ故、本発明は、これらのルックアップの最適化に焦点を当てる。
2番目に気が付くことは、ルックアップが失敗した場合には、インデックスからそれ以上の情報を必要としないことである。サブブロックが存在する場合には、インデックスはサブブロックに対する格納位置を形成する。しかし、サブブロックが存在しない場合には、それ以上の情報は必要ない。サブブロックを記憶装置内のクラスタに単に書き込むことができ、索引することができる。それ故、インデックス・ルックアップの大部分に対して、インデックスの唯一の要件は、サブブロックが存在しないことを確認することである。
3番目に気が付くことは、どの欠落サブブロックのインデックス・ルックアップも迅速に行う必要がないことである(特に、メモリ対ディスク・アクセスに関して)。大部分のルックアップを迅速に行うことができる場合には、インデックスの速度は大幅に改善される。
メモリ内に全インデックスを保持する必要がない本発明の場合には、これらの発見を考慮に入れる。
本発明のある態様においては、インデックスはディスク上に常駐していて、ビットフィルタ130がメモリ内に維持されている。ビットフィルタは、すべて「0」で始まるビットのアレイである。各サブブロック132を格納すると、ビットフィルタ内に位置を形成するためにその内容がハッシュされ134、そこのビットが「1」に設定される。そのビットがすでに「1」である場合には、そのビットは「1」のままである。サブブロックがマッピングされないビットフィルタ内の位置は、「0」のままである。図13は、4つのサブブロックをビットフィルタ内の4つの位置にハッシュする方法を示す。対向するデジタル値を使用することができる。この場合、「1」は便宜上所定のビット値として使用される。
大部分の実施形態が、(例えば、比較のために)任意の方法で(暗号ハッシュを使用して)サブブロックをハッシュする場合が多いので、サブブロックのハッシュをビットフィルタへの2次ハッシュのための基準として簡単に使用することができる。図5は、この2つのステップのプロセスを示す。例えば、ビットフィルタが1024ビットを有している場合には、サブブロック50を、MD5ハッシュ・アルゴリズムを使って128ビットのハッシュにハッシュ52することができ、ハッシュの最初の10ビットを、インデックスを0から1023のビットフィルタ54に形成するために使用することができる。図14は、第1のハッシュ140が非暗号化または暗号化であり、ビットフィルタ・ハッシュ関数142が、第1のハッシュの結果の一部または全部上のモジュロ動作からなるより一般的な実施形態を示す。
このようなビットフィルタ内でのビット設定の結果、ビットフィルタは格納されたサブブロックのレコード含むことになる。このレコードは(ビットフィルタが各可能なハッシュに対して少なくとも1つのビットを含んでいない場合は)損失を生じる。任意の実際的なビットフィルタの大きさに対して、このことは、入りサブブロックのうちのいくつかが同じビットにマッピングされることを意味する。このことは、一方が存在するものであり、一方が存在しないものである2つのサブブロック60、62が同じビット164にマッピングされ、そのビットがオン166になると、欠落サブブロックのルックアップが、サブブロックが存在するという不正確な表示をすることを意味する。図6は、このような衝突を示す。これらのビットフィルタの衝突は、正確さに悪影響を与えない。何故なら、サブブロックがある位置にハッシュされ、そこで「1」を発見した場合には、サブブロックが本当にそこに存在するのか否かをチェックするためにインデックスがルックアップされる。
ビットフィルタ内で新しいサブブロックが既存のサブブロックと衝突する可能性は、ビットフィルタの密度(ビットの全数で割った「1」ビットの数)と同じであり、スパース・ビットフィルタに対するこの密度は、ビットフィルタ内のビット数に対する格納しているサブブロックの比率とほぼ同じである。密度は、1/Dで表される。ビットフィルタの大きさは設計の際に選択されるので、密度も設計の際に選択され、そのため、サブブロックの「衝突」の頻度を任意の所望のレベルに下げることができる。それでも、衝突は任意の実際の実施形態で発生する恐れがあり、ビットフィルタ内のビット数は、可能なサブブロック・ハッシュ値の数より小さい。
しかし、ビットフィルタは1つの重要な確実性を保持している。サブブロックがビットフィルタ内でビットにハッシュされると、ビットは0になり、その場合、サブブロックは確実に記憶装置から除去される。これは重要な特性である。何故なら、データ構造は、最も普通の場合(欠落サブブロックの場合)に確実性を提供するからである。
要するに、インデックスはディスク上に常駐しているが、ビットフィルタはメモリ内に常駐している。格納するデータは分割方法によりサブブロックに分割され、最初のサブブロックはビットフィルタ内でルックアップされる。ビットが「0」である場合には、サブブロックは確かに記憶装置内には存在しないで、記憶装置に書き込むことができ、索引することができる(そしてそのビットフィルタは「1」に設定される)。ビットが「1」である場合には、サブブロックは記憶装置内に存在している場合もあるし、存在していない場合もあり、ディスク上のインデックスを確認のためにチェックすることができる。サブブロックが存在する場合には、1つまたは複数のサブブロックの一致するランが存在する。各一致するランは、(ラン内の第1のサブブロックに対して)1回だけのインデックス・ルックアップを必要とし、各欠落サブブロックは、確率1/D(ビットフィルタ密度)でインデックス・ルックアップを必要とするので、密度を低く維持する限りは、インデックスを必要とする場合は比較的少ない。
残りの問題は、サブブロックのビットが「0」である場合でもサブブロックを依然としてインデックスに追加しなければならない場合のインデックスの更新である。各サブブロックに対してディスク上のインデックスにランダム・アクセス読出しおよび書込みを行う明白な方法は、明らかに非効率的である。
本発明のさらに他の態様においては、ビットフィルタは、メモリ常駐120インデックス・エントリ書込みバッファと組み合わされる。サブブロックをインデックスに追加すると、代わりにバッファ122に追加される。これはディスク124上のインデックスにランダム・アクセス書込みを行うよりも遥かに速い。図12は、ビットフィルタ126と、インデックス・エントリ書込みバッファ122と、サブブロック・インデックス128との間の関係を示す。
バッファが十分に満たされた場合には、バッファ内エントリをソートし(またはこれらエントリをソートした状態に維持し)次に、インデックスの次の部分がメモリ内に呼み出されるインデックスを通して1回シーケンシャルに通過することにより、バッファはディスク124のインデックス128にフラッシュされる121、その部分で失敗したバッファ内のエントリはマージされ、次に、この部分はディスク上のインデックスに書き戻される。このようにして、数百のランダム・アクセス読出し/書込みIO動作のペアが、メモリ内に全インデックスを保持しなくても、(ランダム・アクセス動作よりも速い)1回のシーケンシャル読出し動作および1回のシーケンシャル書込み動作に変換される。
フラッシュされなかったバッファの内容は、効果的にインデックスの一部を形成するので、インデックスを探索するたびにそれを探索しなければならない。しかし、そうしてもシステムの速度は遅くならない。何故なら、バッファはメモリ内に位置するからである。
このバッファ・アプローチの1つの問題は、バッファが満杯になった場合、フラッシュされている間すべてのものがストップすることである。このことはリアルタイム・システムの場合には不利である。本発明のさらに他の態様においては、インデックス70およびバッファ72はセクションに分割され、各セクションは別々にバッファされる(図7)。これにより、全バッファを一度に全部フラッシュさせる必要がなくなる。本発明のさらに他の態様においては、ビットフィルタは、同様に、対応するセクションに分割される。
本発明のさらに他の態様においては、ビットフィルタは、ビットフィルタ圧縮方法により圧縮される。そうすることにより、特にビットフィルタの密度が低い場合に、メモリの消費を大幅に低減することができる。
本発明のさらに他の態様においては、格納しているデータの少なくともT個の連続するサブブロックに対してビットフィルタが「1」を発生した場合だけ、サブブロック・インデックスがルックアップされる(ここで、Tは正の整数のしき値である)。通常の場合には、T=1と設定される。Tをより高い値に設定すると、T個のサブブロックより少ないサブブロックのすべての一致するランが、これらのサブブロックが欠落サブブロックであるかのように記憶装置内で複製されるが、サブブロックの格納がスピードアップし、フラグメンテーションが低減する。1/Dがビットフィルタの密度である場合には、T=2に設定すると、「偽陽性」(サブブロックがビットフィルタ内の「1」ビットにハッシュするが、次に記憶装置から削除されたことが発見される)の確率が1/Dから1/Dに低減する。
本発明のさらに他の態様においては、Tを1より大きい値に設定した場合、各T番目のサブブロックだけが索引されるが、(一致するラン内に位置していない)各サブブロックがビットフィルタ内でルックアップされ(そして、「1」ビットが存在する場合には、インデックスへのアクセスも行われる)。記憶装置内にサブブロックが存在する場合には、一致するサブブロックに先行する記憶装置内のT−1個のサブブロックが、一致するサブブロックに先行するサブブロックと比較され、一致した場合には、これらのサブブロックは一致するランの一部として結合される。図18は、BLOB BLOB1 180が、索引中の各3番目のサブブロックだけと一緒に格納されている、T=3の一例である。BLOB2 182を格納すると、その各サブブロックがビットフィルタ内でルックアップされる。サブブロックに対する結果が1である184場合には、インデックス内でサブブロックがルックアップされ、サブブロックがクラスタ186内に存在すると判定された場合には、隣接する一致するサブブロックに対する探索188は、一致するサブブロックから後方および前方の両方に進む。この例の場合には、BLOB2内のサブブロックBおよびCは、BLOB1内に含まれていて、すでに記憶装置内に存在するが、これらのサブブロックが(BLOB2のために)処理される場合には、一致は検出されない。何故なら、BLOB1を格納した場合に、サブブロックBおよびCは索引されない(ビットフィルタに追加される)からである。しかし、サブブロックDがビットフィルタ内でルックアップされた場合には、結果は1になり(何故なら、このサブブロックは、BLOB1を格納した場合に索引されたからである)、それ故、サブブロックDはインデックス内でルックアップされ、サブブロック・プール内のクラスタ内で発見される。サブブロックDのこの一致が確立すると、後方に(T−1(この場合2である)まで)探索が行われ、サブブロックBおよびCが一致することは発見される。サブブロックDから前方に探索すると、サブブロックEが一致するが、サブブロックYが一致しないことが分かる。この最終的な結果は、サブブロックBCDEのランの比較が行われたことである。
用語
欠落サブブロック:記憶装置内に存在しないサブブロック。
ビットフィルタ:サブブロックの有無を記録するために使用するビットのアレイ。
ビットフィルタの衝突:記憶装置内に格納している2つ以上のサブブロックが同じビットフィルタ位置にハッシュするとビットフィルタ衝突が発生する。
ビットフィルタ密度:ビットフィルタ内のビットの全数で割ったビットフィルタ内の「1」ビットの数である範囲[0,1]内の値。
BLOB(バイナリ・ラージ・オブジェクト):データのゼロ以上のバイト(またはビット)の有限シーケンス。その名前にも関わらず、BLOBは必ずしも大きくはない。BLOBは、数ビットのように小さいものであってもよいし、またはギガバイトのように大きいものであってもよい。
BLOBフラグメンテーション:記憶システム全体を通してBLOBの格納が散乱している範囲。
バッファ:インデックス・エントリ書込みバッファ参照。
衝突:ビットフィルタ衝突参照。
暗号ハッシュ:反転するのが計算上実行不能となるように設計されたハッシュ関数。
密度:ビットフィルタ密度参照。
ディスク:コンピュータが使用するランダム・アクセス記憶媒体。通常、「ディスク」という用語は、磁化したデータを保持している金属の回転円盤(ハードディスク)を意味する。本明細書においては、ディスクという用語は、メモリよりかなり遅いランダム・アクセス記憶媒体を意味するようにもっと広義に解釈することができる。
偽陽性:欠落サブブロックが「1」を保持するビットフィルタ内のある位置にハッシュすると、偽陽性が発生する。
ハッシュ:ハッシュ・アルゴリズムが生成したバイト(またはビット)の固定長シーケンス。サブブロックのハッシュは、サブブロックを索引し、比較するためのサブブロックを表すものとして使用することができる。
ハッシュ・アルゴリズム:バイト(またはビット)の有限シーケンスを受け入れ、入力シーケンスに高度に依存するバイト(またはビット)の有限シーケンスを生成するアルゴリズム。通常、ハッシュ・アルゴリズムは、特定の固定長の出力を生成する。ハッシュ・アルゴリズムは、シーケンスを直接比較しなくても、データの2つのシーケンスが同じであるか否かをチェックするための試験に使用することができる。実際に暗号ハッシュを使用すれば、そのハッシュが同じである場合、2つのサブブロックが同じであると結論することができる。
サブブロックのハッシュ:サブブロック・ハッシュ参照
インデックス:サブブロック・インデックス参照
インデックス・バッファ:インデックス・エントリ書込みバッファ参照。
インデックス・エントリ:サブブロック・インデックス内のレコード。ある実施形態の場合には、インデックス・レコードは、インデックス・キーおよびインデックス値を含む。ある実施形態の場合には、インデックス・レコードは、インデックス・キーの一部およびインデックス値を含む。ある実施形態の場合には、インデックス・レコードはインデックス値だけを含む。ある実施形態の場合には、インデックス・レコードは値を含まないで、キーの一部または全部を含む。
インデックス・エントリ書込みバッファ:ゼロまたはサブブロック・インデックスの一部を形成するが、ディスク上のインデックスにまだ書き込まれていないもっと最近追加したインデックス・エントリを保持するメモリ内のバッファ。
インデックス・キー:サブブロックについての情報を検索するためにサブブロック・インデックスに提供されるサブブロックについての情報。ある実施形態の場合には、この情報はインデックス・エントリの位置を発見し、読み出すことにより検索される。
インデックス・ルックアップ:インデックス・エントリにサブブロック(またはサブブロックのハッシュ)をマッピングする動作。インデックス・エントリは、ディスク上のサブブロックの位置についての情報を提供する。
インデックス値:サブブロック(またはその一例がそのハッシュであるサブブロックの派生物)をインデックスでルックアップした場合に、インデックスによりサブブロックについて生成された情報。ある実施形態の場合には、この値は、ディスク上のサブブロックの位置からなる。他の実施形態の場合には、インデックスの唯一の目的がキーの有無を記録することである場合には、値が存在しない場合がある。
メモリ:通常、ランダム・アクセス・メモリ(RAM)を参照するコンピュータが使用するランダム・アクセス記憶媒体。本明細書においては、この用語は、「ディスク」よりかなり速いランダム・アクセス記憶媒体を意味するようにもっと広義に解釈することができる。
分割方法:BLOB内の各バイト(またはビット)が、正確に1つのサブブロック内に入るように、BLOBを1つまたは複数のサブブロックに分割するための方法。
存在サブブロック:記憶装置内に存在するサブブロック。
低冗長記憶装置:データのその表示の際に、自身が格納している一組のデータ内の複製データのいくつかを除去する記憶システム。
記憶装置:低冗長記憶装置参照。
サブブロック:索引、比較および/または冗長除去のための単位として識別されたバイト(またはビット)のシーケンス。BLOBはサブブロックに分割することができる。
サブブロック・ハッシュ:サブブロックへのハッシュ・アルゴリズムの適用結果。サブブロックのハッシュは、例えば、サブブロックを索引および/または比較するために、サブブロックを表すものとして使用することができる。
サブブロック・インデックス:サブブロックの位置(例えば、制限なしで、クラスタ番号(およびまた、おそらくサブブロック識別子))に、サブブロックのハッシュ(またはサブブロック自身)をマッピングする(または他の方法で関連付ける)データ構造。
サブブロック・プール:低冗長記憶システム内のサブブロックの集合体。
書込みバッファ:インデックス・エントリ書込みバッファ参照。
本明細書および添付の特許請求の範囲全体を通して、他に別段の指定がない限り、「備える」および「含む」という用語、並びに「備えている」および「含んでいる」というような派生語は、上記の完全なものまたは完全なもののグループを包含するが、任意の他の完全なものまたは完全なもののグループを除外しないことを理解されたい。
本明細書の添付の特許請求の範囲は、本明細書に記載する本発明の広義の記述であり、参照により本明細書に組み込まれる。
本明細書での任意の従来技術への参照は、このような従来技術が共通の一般的知識の一部を形成しているという容認でもなければ、任意の形式の示唆でもないし、またそのように解釈すべきでもない。
添付の図面を参照しながら、以下に本発明の特定の実施形態についてさらに詳細に説明する。これらの実施形態は、説明のためのものであって、本発明の範囲を制限するためのものではない。他の実施形態の示唆および記述を本発明の範囲内に含めることができるが、これらのものは添付の図面には示していないし、または別の方法で本発明の機能を図面には示してあるが本明細書には記述していない。
6.1 分割方法
データをサブブロックに分割するために種々の方法を使用することができる。これらの方法としては、(データがNバイトのサブブロックに分割される)固定長分割、およびデータがその位置に近いバイト(またはビット)がある所定の制約を満たす位置のところで可変長サブブロックに分割される可変長分割等がある。Williams Rの米国特許第5,990,810号に、可変長分割方法が詳細に記載されている。
6.2 サブブロックのハッシュ
少なくとも2つのタイプのハッシュ方法を使用することができる。
最初に、記憶システムは、サブブロックを固定長ハッシュにハッシュするので、サブブロックをより容易に索引し、操作することができる。好適には、このハッシュ動作は、そのハッシュを比較することにより、サブブロックの機密保護比較を行うことができるように暗号ハッシュにより行うことが好ましい。暗号ハッシュ・アルゴリズムの例としては、MD5(128ビット(16バイト)値を生成する)およびSHA−1(160ビット(20バイト)値を生成する)等がある。
次に、サブブロック・ハッシュ(またはおそらくサブブロックだけ)はビットフィルタ内のある位置にハッシュされる。この動作は、ビットフィルタ内で衝突が予想されるので暗号化強度を必要としない。それ故、ハッシュ動作は、種々の方法のうちの1つを使用して行うことができる。ビットフィルタ位置にサブブロックをハッシュする1つの簡単な方法は、サブブロック・ハッシュのK個(あるKに対して)のビットを取り、剰余を得るためにB(ビットフィルタ内のビット数)によりその値を割る方法である(モジュロ関数)。この剰余は、サブブロック位置として使用される。この方法は、2がBより高い少なくとも1つの次数である限りは、ビットフィルタをかなり均一にロードしなければならない。
ビットフィルタ内のビット数が2のべき乗である場合には、底部のK個のビットを単に取ることによりモジュロ関数を実行することができる。
6.3 ビットフィルタの重要な特性
ビットフィルタの最も重要な特性は、サブブロックが「1」ビットにハッシュした場合、ビットフィルタが存在していても存在していなくてもよいことであるが、サブブロックが「0」にハッシュした場合には、サブブロックは記憶装置内に絶対存在しないということである。ビットフィルタを有用にしているのはこの確実性である。
6.4 ビットフィルタの密度とサイズ
ビットフィルタのサイズはどのくらいの大きさであるべきか?「1」ビットが所与の数である場合、ビットフィルタが大きければ大きいほど、メモリの消費量は大きくなるが、密度(ビットフィルタ内のビットに対する「1」ビットの比率)は小さくなる。ビットフィルタが小さければ小さいほど、メモリの消費量は少ないが、密度は大きくなる。それ故、メモリの消費量とビットフィルタの密度の間にはトレードオフがある。
メモリの消費は、明らかに望まいものではない。何故なら、低冗長記憶システムが使用するメモリの低減が、ビットフィルタを導入する一番の理由であったからである。それ故、ビットフィルタはあまり大きくすべきではなく、またはそのサイズそのものがその目的をダメにするからである。
ビットフィルタの密度も重要である。何故なら、ビットフィルタの密度が、偽陽性イベントの比率を決定するからである。これらのものは、記憶装置内にまだ存在しないサブブロックが、ビットフィルタ内にハッシュされ、そこに「1」が存在する場合に発生する(何故なら、それはある他のサブブロックにより設定されたものであるからである)。このことが発生すると、記憶装置は、サブブロックが本当に存在するのか否かをチェックするためにディスク上のインデックスにアクセスする(そしてそれが存在しないと判定する)。ビットフィルタの平均密度がD個のビットごとに「1」である場合には、偽陽性率は1/Dである。
偽陽性率とメモリ消費量との間のトレードオフは、このような要因をメモリのコストおよび平均サブブロック長さとして考慮することにより、特定の用途についてのより多くの情報を知って始めて行うことができる。
6.5 ビットフィルタの成長
ビットフィルタのサイズをどのように選択したにせよ、その密度は時間の経過ととも増大する。何故なら、サブブロックがインデックスに追加されるからである。密度があまり大きくなると、偽陽性率を低減するためにビットフィルタのサイズを増大することができる。
ビットフィルタ内の情報だけを使用してビットフィルタのサイズを増大するために明確な方法はないように思われる。何故なら、各「1」ビットは、「1」に設定する1つまたは複数のサブブロックの設定についての情報を含んでいないからである。代わりに、インデックス内の情報から新しい大きなビットフィルタを構成することができる。このことは、メモリ内に新しい大きなビットフィルタを準備し、それをすべて「0」に設定し、次にインデックスを通してシーケンシャルなパスを1回行い、各エントリをビットフィルタ内のビットにハッシュし、次にそれを「1」に設定することにより行うことができる。
インデックスを通してパスをシーケンシャルに行うことができたとしても、依然として時間のかかる動作であることが多い。ある実施形態の場合には、インデックスは数ギガバイトになる場合がある。リアルタイムの制限時間を有するシステム内で全インデックスを再度読出すのは、シーケンシャルに行う場合でも望ましくない。
1つの解決方法は、背景内に新しいビットフィルタを準備するという方法である。既存のビットフィルタの密度があまりに高くなった場合には、メモリ内に大きなビットフィルタを準備することができる。背景プロセスは、全インデックスを順次読み出すことができ、新しいビットフィルタを準備することができる。この動作が完了すると、古いビットフィルタを廃棄することができる。新しいビットフィルタの生成プロセス中に、すべての新しいサブブロックは、古いビットフィルタおよび新しいビットフィルタ両方内のビットを設定しなければならない。そのため、この動作の開始の後で到着するサブブロックは、依然として新しいビットフィルタ内に表示される。しかし、この解決方法の一部により、交換中にメモリ使用に追加のスパイクが発生する場合がある。
もっといい解決方法は、インデックスをセクションに分割し、各セクションに対して別々のビットフィルタを維持する方法である。次に、特定のセクションに対するビットフィルタの密度があまりに高くなった場合には、このビットフィルタを他のセクションのビットフィルタから独立して拡張することができる。この方法は、特に、ハッシュ・テーブル80のツリーであるインデックスのような成長のためにそれ自身が組織されたインデックスと協力してうまく動作することができる。この場合、ビットフィルタを、各ハッシュ・テーブル82と関連付けることができ、ハッシュ・テーブルを分割した場合には、分割することができる。図8は、メモリ88内に各葉がそれ自身のビットフィルタおよびインデックス84エントリ・バッファを保持するツリーを示す。ディスク86上には、各葉に対応するハッシュ・トラフィック0が位置する。図15も類似の図面であって、二分木152に関連するサブブロック・ハッシュ150値を示す。
6.6 インデックス・エントリ書込みバッファ
種々の方法によりインデックス・エントリ書込みバッファを実施することができる。バッファにインデックス・エントリを追加することができるものでなければならないし、ある実施形態の場合には、バッファを探索するための要件がある場合がある。
バッファがインデックスの1つのセクションだけに対応している場合には、バッファはそんなに大きくはならない。このような場合には、必要な場合には、インデックスを探索するために線形探索を使用して、簡単な順序通りでないリストでこのジョブを行うことができる。バッファはメモリ内に位置しているので、線形探索はかなり速い。
バッファが大きい場合には、そのエントリを迅速に探索することができるように、そのエントリをソートされた順序に、またはある種のツリーまたはハッシュ・テーブル・データ構造に維持しなければならない。
記憶システムがBLOBの削除をサポートする場合には、インデックス・エントリ書込みバッファは、削除または挿入をバッファしなければならない場合がある。
6.7 偽陽性
ビットフィルタを使用した場合の1つの問題は、「偽陽性」の問題である。この場合、サブブロックはビットフィルタ内の「1」ビットにハッシュするが、インデックスにアクセスした場合に、サブブロックが記憶装置内に存在しないことが分かる。ビットフィルタの密度が1/Dである場合には、これらの偽陽性が、D個の欠落サブブロックごとに平均1回発生する。偽陽性は、ディスク上のインデックスに対してランダム・アクセス読出しを行う恐れがある。
実験の結果、かなりの量の新しいデータを格納しているシステムにおいて、偽陽性がシステムの性能の制限要因の1つになり始めるランダム・アクセス・ディスク動作を低減するのに、ビットフィルタおよびインデックス・エントリ書込みバッファの組合せが非常に有効であることが分かっている。D=100の場合でも、100のサブブロックごとに平均1回発生するランダム・アクセス・シークは、性能分析の際に非常に重要な役割を持つ。
この時間のハンデを低減する最も簡単な方法は、ビットフィルタの密度を低減するという方法である。例えば、Dが100から200に増大した場合には、コストは半分になる。これは有効なオプションであり、特に有効な場合がある。何故なら、ビットフィルタのサイズは2倍になっても、ビットフィルタの圧縮したサイズは、2倍以下にしか増大しないからである(何故なら、低いエントロピーのビットフィルタは、より圧縮することができるからである(図11)。
もう1つのアプローチは、平均サブブロック長さを増大する方法である。平均サブブロック長さ(1K〜16Kの範囲内)を増大すると、通常、データ低減の範囲を除いて種々の性能測定基準が改善される。例えば、平均サブブロック長さが2倍になると、ビットフィルタ密度が半分になる。
6.8 短い一致するランのスキップ
偽陽性を低減するためのより興味のあるアプローチは、BLOBフラグメンテーション中に、偽陽性をアドレス指定する方法である。BLOBが格納されていて、そのサブブロックが記憶装置内で発見されない場合には、サブブロックは、通常、記憶装置内に順次書き込まれる。しかし、サブブロックが一致した場合には、システムは、1つまたは複数の一致するサブブロックのランを処理しなければならない。そのランが非常に短い場合には、BLOBの表示は、スペースをほんの少し低減するためにフラグメント化される。図9の場合には、1つのサブブロックCが記憶装置内にすでに存在するという理由だけで、BLOB290の表示は3つの部分91、92、93に分割される。
フラグメンテーションを増大するが、格納の低減を大きく改善しない一致する短いランを回避するために、T個のサブブロックのサブブロック一致しきい値を供給することができる。一致するラン(存在サブブロック)に遭遇したが、それがT−1個のまたはそれ以下のサブブロックである場合には、(存在)サブブロックは、フラグメンテーションを低減するために記憶装置内に複製される。図10は、サブブロックCを2回格納することにより、フラグメンテーションをなくし、BLOB2 100を1つのクラスタ102内のサブブロックにより表示する方法を示す。この技術の動機は、任意のビットフィルタの偽陽性により左右されないことに注目するのは重要なことである。このアプローチは、いくつかのサブブロックを複数回格納する場合があるが、使用する追加のスペースは、ディスク・スペースだけであり、この技術は、フラグメンテーションを低減することができ、それによりBLOB検索回数を低減することができる。
デフラグメンテーション上の理由で、(通常のシステムを表す)1つのサブブロックより大きいしきい値Tの値を使用する場合には、偽陽性のコストを低減するためにこのシナリオを使用することができる。例えば、Tが2である場合で、一致しないサブブロックの後で、ビットフィルタ内の「1」ビットにハッシュするサブブロックに遭遇した場合には、次のサブブロックもビットフィルタ内の「1」ビットにハッシュしない限りは、インデックスをルックアップする必要はない。一般に、しきい値を使用すると、(サブブロックごとの)偽陽性の確率が1/Dから(1/D)に低減する。D=100の場合には、これにより、偽陽性の頻度は100回に1回から10,000回に1回に低減する。これは非常に大幅な低減である。
ビットフィルタ内で「0」にマッピングするサブブロックは、記憶装置内に存在しないことが保証されるので、T個のサブブロックのいくつかのランを除くすべてをT個の存在サブブロックの候補ランとして除外するためにビットフィルタを使用することができる。図16は、3つ(T=3)以上の存在サブブロックの隣接するランだけが特別に処理される(すなわち、すでに存在するサブブロックへの参照として格納される)様式の下で格納中のサブブロック160のシーケンスを示す。「0」にマッピングする任意のサブブロックは、T個の存在サブブロックのランの一部となることはできない。それ故、ビットフィルタは、インデックスにアクセスすることにより、もっと完全に試験することができるいくつかの候補ランを除くすべてのものを除外することによりT個以上の存在サブブロックの隣接するランの探索を助ける。
6.9 各サブブロックに対する複数のビットの設定
偽陽性率を低減するためのもう1つの方法は、ビットフィルタ202内のN個の位置(ここで、Nは小さな正の整数)に各サブブロック200をマッピングし、ビットをN個すべての位置に設定するという方法である。このことはN個の異なるハッシュ関数204を使用することにより達成することができる。図20は、3つの異なるハッシュ関数(H1,H2,H3)を使用して、1つのサブブロック200をビットフィルタ内で3つの位置にハッシュし、3つのビットを設定する方法を示す。
サブブロック210を試験するために、サブブロックはN個の異なるハッシュ関数212によりハッシュされ、ビットフィルタ内の対応するビットがルックアップされる。結果は、サブブロックが決して存在しない216場合には「0」であり、存在するかもしれない218場合には「1」である1つの結果ビットを生成するために論理積がとられる214(図21)。
各サブブロックに対するN個のビットを設定すると、(スパース・ビットマップに対する)Nの係数程度でビットフィルタ内の密度が増大する。N=3の様式の下で、N=1の百万のビットフィルタが1000のビットセットおよび0.001の密度を有している場合には、その密度は3倍の約0.003になる。しかし、偽陽性の確率は、0.001から約2.7×10−8である0.003に急落する。この例は、Nが増大するとビット密度には線形効果があるが、偽陽性率には指数的影響があることを示す。
6.10 ビットフィルタの圧縮
偽陽性率を低くするために、ビットフィルタはまばらでなければならないし、ビットフィルタがまばらだと、エントロピーは低くなり、大きく圧縮することができる。さらに、ビットフィルタ内でビットが設定される無秩序な方法のために、ビットフィルタは、メモリレス2進乱数発生装置の出力を、「1」の1/Dの確率、および「0」の(D−1)/Dの確率で近似する(ここで、Dはビットフィルタの密度である)。このことは、データの複雑なモデルを構成しなくても圧縮を行うことができることを意味する。最も重要なことは、ビットフィルタの密度が分かっている限り、(データの大きな圧縮片に関連して)圧縮損失なしで、その個々の小片を個々に圧縮することができることである。
圧縮フィールドは、メモリレス2値ソースを圧縮するための種々様々な技術を提供する。下記のいくつかの節においては、この中のいくつかについて説明する。
6.11 ラン・レングス符号化ビットフィルタ圧縮
ビットフィルタを圧縮するための1つの簡単な技術は、(「0」が「1」より多いソースに対する)「0」ビット・ランの長さである数のシーケンスとしてビットフィルタが表示されるラン・レングス符号化である。種々のラン・レングス符号化方法は、主としてこれらの方法がラン・レングスを表示する方法において異なる。
ラン・レングス符号化の1つの簡単な形式は、固定幅の長さを使用する方法である。例えば、1バイトの幅(8ビット長)を選んだ場合には、「1」ビットが後に続く47の「0」ビットのランは、バイト値(少数)47により表される。
「0」ビットのランを255より長くすることができるように、値255を、それに続く4つのバイトが、実際の長さであることを意味する特殊コードとして予約することができる。これによりコードは、最高232−1個の「0」ビットのランを表すことができる。もっと長いランを表すことが必要な場合には、実際の長さが後に続く8バイト内に含まれていることを表示するために、4バイト値内に特殊コード(例えば、FFFFFFFF)を定義することができる。「0」で終わる1ビット・ブロックを、いつでも最後の「1」ビットを切り捨てる規定を採用することにより、または長さを記録することにより表示することができる。
バイトを長さとして選択する利点は、メモリからロードするのが非常に容易であることである。
6.12 TanakaおよびLeon−Garciaビットフィルタ圧縮
TanakaおよびLeon−Garciaによるラン・レングス符号化の特定の形式を使用すれば、ラン・レングス符号化の簡単さを保持しながら非常に効率的な圧縮を行うことができる。
Tanaka/Leon−Garciaモード−mコードは、ビット列「m個のビットとしての2進で、1<k」により「1」ビット(但し、k=0..2−1)が後に続くk個の「0」ビットのラン、および2個の「0」ビットのランをビット列「0」にマッピングする。それ故、モード3コードは、ビットを下記のようにマッピングする。
入力 出力
00000000 0
1 1000
01 1001
001 1010
0001 1011
00001 1100
000001 1101
0000001 1110
00000001 1111
TanakaおよびLeon−Garciaは、任意の2値メモリレス・ソースの場合には(1つのパラメータPにより選択した場合 − 「1」ビットの確率)、その理論的な圧縮性に対して少なくとも96%の効率でそのソースを圧縮するモード−mコードが存在することを示した。mの式は下記の通りである。

gamma=(squareroot(5)-1)/2
if(count(one_bits)=0)

p=1 / count(total_bits)
else

p=count(one_bits) / count(total_bits)
endif
m=ceiling( log2((ln
gamma) / ln(1-p)) )
それ故、この方法を使用してビットのブロックを圧縮するために、「1」ビットおよびビットの全数がカウントされ、最適のmが計算され、ブロックがモードmコードを使用して符号化される。コードmのモードは符号化ブロックの始まりのところに格納することができる。詳細については、Hatsukazu TanakaおよびAlbert Leon−Garciaの、「効率的なラン・レングス符号化」(Efficient Run−Length Encodings)情報理論についてのIEEE議事録、28(6)、1982年11月、880〜890ページを参照されたい。
6.13 ビットフィルタの算術符号化
算術符号化は、ビットフィルタを圧縮するための最もスペースを効率的に使用する方法であるが、ある実施形態の場合には、ラン・レングス符号化に関連して複雑さおよびおそらく速度の低下が起こる。2値算術コードについては、Langdon G.GおよびRissanen J.Jの参照文献内の、「算術符号化による白黒映像の圧縮」(Compression of Black−White Images with Arithmetic Coding)、通信に関するIEEE議事録、29(6)、1981年、858〜867ページで、LangdonおよびRissanenが記述している。
6.14 ビットフィルタの非線形圧縮
ビットフィルタ圧縮の興味のある面は、(所与の数の「1」ビットに対して)ビットフィルタのサイズを2倍にしても、圧縮したビットフィルタのサイズが2倍にならないことである。代わりに、そうすると少ない量だけサイズが増大する。何故なら、それは、2倍にしたビットフィルタの密度が元の密度の半分になり、エントロピーの低減が大きなビットフィルタをより圧縮しやすくするからである。
図11は、1,000の「1」ビットを含むビットフィルタのビットフィルタ密度と圧縮性との間の関係のグラフである。X軸は、(圧縮していない)ビットフィルタ内のビットの全数を表し、これが増大するにつれて、ビットフィルタのエントロピー(その圧縮したサイズの下の理論的境界)が増大するが、直線的には増大しない。ビットの50%が「1」であり、50%が「0」である2000ビットの全サイズのところで、エントロピーは2000ビットであるが、10,000ビットの全サイズのところでは、エントロピーは4834ビットであり、これは、一定数のビットに対して、ビットフィルタ・サイズと一緒にエントロピーが直線的に成長する場合には、予想(10,000ビット)の半分以下である。
この非直線性は、確率的に分析することができる。「1」ビットの確率がp(および、それ故、「0」ビットの確率が1−p)である場合には、理論上、各「0」ビットは下記のように圧縮することができ、

-log2(1-p)ビット
各「1」ビットは下記のように圧縮することができる。

-log2(p)ビット
このことは、平均的に、ビットフィルタ内の各ビットは、下記のように圧縮することができることを意味し、

-(1-p)log2(1-p) - plog2(p)ビット
この式が図11のグラフの形を決定することを意味する。
ビットフィルタの非直線圧縮性は、偽陽性率(ビットフィルタ密度に直接関連する)とメモリ消費との間のトレードオフが非直線的なものであり、任意の特定の実施形態の場合には、ある考えをトレードオフに入れなければならないことを意味する。特に、ビットフィルタの(圧縮していない)サイズを増大することはやってみたいことである。何故なら、そうすると、偽陽性率が直線的に低減するが、ビットフィルタが消費するスペースがほとんど直線的に(sub−linearly)増大するからである。
6.15 ビットフィルタの分割
新しい各サブブロックが到着すると、ビットが「0」であるか「1」であるかを判定するために、(このサブブロックをビットフィルタ位置にハッシュすることにより)ビットフィルタ内でこのサブブロックがルックアップされる。全ビットフィルタを圧縮する場合には、各ルックアップの前に全ビットフィルタを圧縮解除しなければならないし(またはビットがアクセスされる前に、少なくともその一部を圧縮解除しなければならない)、時間がかかり、その出力(圧縮解除したビットフィルタ)は、圧縮したビットフィルタよりも数百倍大きくなる場合がある。
直ちに必要としないビットを圧縮解除するのを避けるために、ビットフィルタをセクションに分割することができ、各セクションを別々に圧縮することができる。個々のビットをルックアップするために、そのビットを含んでいるセクション(または試験するそのビットの前のセクションの一部)だけを圧縮解除すればよいし。各セクション用の別々のビットフィルタによりインデックスをセクションに分割する場合には、ビットフィルタは、さらなる再分割を必要としないほど小さいものであってもよい。別の方法としては、任意の一組のビットにアクセスする目的で、圧縮解除しなければならないビットフィルタの量を低減するためにビットフィルタをさらに再分割するのが有利である場合がある。
ビットフィルタを圧縮する場合には、サブブロックごとにN個のビットを設定する任意の技術は、約N個のセクションを圧縮解除しなければならない(ビットを設定する場合には、再度またビットを圧縮しなければならない)。この圧縮解除のために処理コストがかかるので、システム設計者はNを小さく維持しようとする。
6.16 欠落サブブロックの処理
図17は、(多くの場合、欠落サブブロックのラン内で発生する)1つの欠落サブブロック170の、ビットフィルタ171およびインデックス・エントリ書込みバッファに関連する処理方法を示す。この図は、囲みBLOB172の格納の一部として、格納中のサブブロックEの処理の経過を示す。最初に、サブブロックEは、ビットフィルタ内である位置を形成するためにハッシュされ173、その後でその位置の内容である2進数にハッシュされる。Eが記憶装置内に存在せず(およびこのセクションがこのケースに焦点を当てている場合には)、ビットは「0」である。何故なら、サブブロックが格納されようとしているし、サブブロックEの存在を記録するために、ビットフィルタ内のビットが「1」に設定されるからである。次に、サブブロックは、記憶システム、およびサブブロックをその格納位置にマッピングする準備した175インデックス・エントリ内のある場所に格納される174。このインデックス・エントリ176は、後でディスク179上のサブブロック・インデックス178に書き込まれるインデックス・エントリ書込みバッファ177に追加される。この全プロセスのある態様は、(サブブロックE自身の内容もメモリ内にバッファされると仮定した場合)全プロセスは、1回のディスク・アクセスを必要としない。
6.17 遠隔記憶システムの表示
分散記憶用途および通信用途の場合には、本発明の1つの態様を、例えば、サブブロックを遠隔コンピュータに送信する必要があるか否かを判定するために、遠隔コンピュータ上の一組のサブブロックの存在を表示するために使用することができる。一般に、本発明の1つの態様は、ビットフィルタを格納しているコンピュータ上だけではなく、世界のどこか他の場所の1つまたは複数のコンピュータ上の数組のサブブロックを表示するために使用することができる。図19は、コンピュータA 190による、他のコンピュータB 194上に格納しているサブブロックの集合体に対応するビットフィルタ192の維持方法を示す。この例の場合には、コンピュータAは、コンピュータBがサブブロックX 196を処理しないと判定するためにそのビットフィルタを使用することができる。
1つのコンピュータ上の1つのビットフィルタは、複数の他のコンピュータ上の数組のサブブロックの合同を表示することができる。
6.18 ロバスト性
本発明の典型的な実施形態の場合には、インデックスはディスク上に常駐していて、ビットフィルタおよびインデックス・エントリ書込みバッファはメモリ内に常駐している(図12)。典型的な場合には、ビットフィルタのコピーは、時々更新されるディスク上に維持される。システムがクラッシュした場合、この編成はどのように対応するか?
コンピュータがクラッシュし、メモリの内容が失われた場合には、ビットフィルタ内の種々のビットの設定も失われる(何故なら、ディスク上のビットフィルタの古いコピーは、これらの位置のあるもの内に「1」よりも「0」を有しているからである)。インデックス・エントリ書込みバッファ内のインデックス・エントリも失われる。
これらの各喪失は、冗長性低減性能に悪影響を与える場合があるが、正確さは悪影響を受けない。ビットフィルタ内のいくつかのビットの設定の喪失の影響、またはインデックス・エントリの喪失の影響は、サブブロックは依然として記憶装置内に安全に存在し(および1つまたは複数のBLOBの一部を依然として形成しているが)、記憶装置のインデックスは、もはやサブブロックを記憶していない。それ故、同じサブブロックが再度到着した場合には、もう一度格納されることになる。このことは正確さに悪影響を与えない。何故なら、最初のサブブロックは依然としてサブブロック・プール内に存在し、インデックスから独立してサブブロックをポイントしている1つまたは複数のBLOBの一部として依然としてアクセスすることができるからである。
それ故、ビットフィルタのビットが「1」から「0」へ変化した場合の影響は、1つまたは複数のサブブロックが、格納中の新しいBLOBの一部として表れた場合、このような1つまたは複数のサブブロックは記憶装置内で複製される。ビットフィルタのビットが「0」から「1」へ変化すると、新しいサブブロックがたまたまビットフィルタ内のそのビットにハッシュした場合はいつでも、インデックスがアクセスされる。
それ故、ビットフィルタ内の「1」ビットの結果としての喪失は、正確さに悪影響を与えないし、クラッシュが比較的希な場合には、バッファ内またはバッファ内のインデックス・エントリ内のいくつかの「1」ビットの喪失は、低減性能に大きな影響を与えない。
低減性能が非常に絶対的に重要な場合、またはサブブロック・プールは決して同じサブブロックを2回格納してはならないというある絶対的要件がある場合には、この実施形態は、システムがクラッシュしてもその内容が失われないある種の不揮発性RAMを使用することできる。
図22は、典型的なコンピュータ・ハードウェア上でのある実施形態の展開方法を示す。サブブロック・インデックス・デジタル探索木は、メモリおよびディスク上に常駐しているが、サブブロック・インデックス・ハッシュ・テーブルはディスク上にしか常駐していない。ビットフィルタは、メモリ内に常駐していて、一方、インデックス・エントリは、ディスク上のハッシュ・テーブルに書き込まれるキャッシュ・エントリをバッファする。
6.19 範囲に関する注
当業者であれば、本発明は、上記の特定の用途に限定されないことを理解することができるだろう。また、本発明は、本明細書に記載し図面に示した特定の要素および/または機能に関してその好ましい実施形態に限定されない。本発明の原理から逸脱することなしに、種々の修正を行うことができることを理解することができるだろう。それ故、本発明は、本発明の範囲内に入るすべてのこのような修正を含むものと解釈すべきである。
サブブロック・プールおよびプール内の任意のサブブロックの位置を発見することができるインデックス(Williamsの米国特許第5,990,180号からの従来技術)である。 同一のサブブロックを1回だけ格納することにより、狭いスペース内にファイルを格納することができるようにする2つの異なるファイル内の同一のサブブロックの識別方法である。 格納する次のサブブロックが記憶装置内にすでに存在すると判定した場合に、格納する次のサブブロックと今一致したサブブロックの後の記憶装置内のサブブロックとを、サブブロック・インデックスを参照しなくても比較することができる方法である。 データのBLOB内のサブブロックを、一致する(存在)および一致しない(欠落)サブブロックの交互のランからなるものとして表示することができる方法である。 ビットフィルタ・インデックスを生成するために、最初にその暗号ハッシュを取り、次にそれをビットフィルタ・ハッシュ関数内に送ることにより、サブブロックをビットフィルタ内のある位置にマッピングする方法である。 2つのサブブロックがビットフィルタ内の同じ位置にハッシュするビットフィルタ衝突である。 サブブロック・インデックスを、ビットフィルタおよびメモリ内に常駐するインデックス・エントリ書込みバッファだけと一緒にディスク上に常駐させる方法である。 その各葉が、ディスク上に格納しているハッシュ・テーブルと、メモリ内に格納しているインデックス・エントリ書込みバッファを含むデジタル二分探索木である。 BLOBを格納する場合、孤立している一致するサブブロック(C)が、BLOBの表示内でどのようにフラグメンテーションを起こすのかを示す。 2回記憶装置内に孤立サブブロック(C)を格納することを選択することによりフラグメンテーションを回避する方法を示す。 ビットフィルタの密度とその圧縮性との間の非線形関係を示す。このグラフは、1,000の「1」ビットを含むビットフィルタの圧縮性を示す。X軸は、ビットフィルタの圧縮していない全サイズ、Y軸は、ビットフィルタの最適に圧縮したサイズを示す。 インデックス・エントリ書込みバッファの使用方法を示す。この場合、ビットフィルタおよびバッファは、メモリ内に保持され、サブブロック・インデックス自身はディスク上に常駐する。 記憶システム内の一組のサブブロックから入手したビットフィルタである。 ビットフィルタ・インデックスを生成するために、最初にそのハッシュを取り、次にそれをビットフィルタ・ハッシュ関数に送ることにより、ビットフィルタ内のある位置にサブブロックをマッピングする方法を示す。 そのそれぞれの葉がディスク上に格納しているハッシュ・テーブル、およびメモリ内に格納しているビットフィルタおよびインデックス・エントリ書込みバッファを含む、サブブロック・ハッシュの連続しているビット上にキーされているデジタル二分探索木である。 サブブロックのシーケンス内で、サブブロックのシーケンスに対するT個の存在サブブロックの隣接するランが存在しないと判定するプロセスを示す。 分割方法によるBLOBのサブブロックへの分割、ビットフィルタ内でのサブブロックEのハッシュ、そのビットの試験、ビット値が「0」である場合だけのビットの「1」への設定、およびインデックス・エントリ・バッファへのEに対するエントリの追加を示す。 BLOB1を格納したが、各3番目のサブブロックだけを索引した場合を示す。BLOB2を追加した場合には、その各サブブロックがインデックス内でルックアップされ、一致が発見された場合には、一致するブロックレット(blocklet)に対する探索が、後方および前方に行われる。 コンピュータAによる、他のコンピュータB上に格納しているサブブロックの集合体に対応するビットフィルタの維持方法を示す。この例の場合には、コンピュータAは、コンピュータBがサブブロックXを含んでいないと判定するためにそのビットフィルタを使用することができる。 ビット・フィルタ内のある位置にサブブロックをマッピングする複数のN個の異なる関数の、各サブブロックに対するビット・フィルタ内でN個のビットを設定するための使用方法を示す。 各サブブロックがN個のビットを設定した場合(図20に示す)のビット・フィルタによるサブブロックの試験方法を示す。サブブロックは、N個の各関数によりハッシュされ、結果はビット・フィルタを索引するために使用される。結果として得られるビットは、ルックアップ結果を形成するために論理積がとられる。 典型的なコンピュータのハードウェア上でのある実施形態の展開方法を示す。サブブロック・インデックス・デジタル探索木は、メモリおよびディスク内に常駐しているが、サブブロック・インデックス・ハッシュ・テーブルはディスク上だけに常駐している。ビットフィルタは、メモリ内に常駐していて、インデックス・エントリは、ディスク上のハッシュ・テーブルに書き込まれるキャッシュ・エントリをバッファする。

Claims (17)

  1. 記憶システム内に常駐するサブブロックの存在を表すコンピュータによる制御方法であって、
    前記サブブロックに対応するインデックス・ハッシュ値を得るためにサブブロックをハッシュし、
    前記サブブロックに対応する前記インデックス・ハッシュ値を入力し且つビットのアレイの中にビットを出力し且つ前記サブブロックをビットのアレイの位置にマッピングする関数を用いてビットのアレイを生成し、当該生成において、前記ビットのアレイの1つのビットが、前記ビットのアレイに前記ビットの位置をマッピングする記憶システム内で少なくとも1つのサブブロックであるかどうかを示す1つの設定されたビット値であり、当該設定されたビット値のうち、第1の設定されたビット値が前記記憶システムの中にサブブロックが存在しないことを示し、第2の設定されたビット値が前記記憶システムの中にサブブロックが存在する可能性を示し、
    前記サブブロックが前記記憶システム内に存在しない場合には、メモリ内に位置しているインデックス・エントリ・書込みバッファに前記インデックス・ハッシュ値を選択的に格納し、その場合に、当該インデックス・エントリ・書込みバッファが、前記記憶システム上に位置するサブブロック・インデックスの各位置に対応する複数のバッファ位置に分割され、および
    前記記憶システムに対する1回の読出し動作および1回の書込み動作によって、前記インデックス・エントリ・書込みバッファのコンテンツを前記記憶システム上に位置するサブブロック・インデックスに転送し、その場合に、前記ビットのアレイはメモリ内に属し、前記サブブロック・インデックスはディスクに属する、
    コンピュータによる制御方法。
  2. 前記関数がハッシュ関数である、請求項1に記載のコンピュータによる制御方法。
  3. 前記関数が、その結果が計算に入力される暗号ハッシュ関数である、請求項1に記載のコンピュータによる制御方法。
  4. 前記関数が、その結果が計算に入力される非暗号ハッシュ関数である、請求項1に記載のコンピュータによる制御方法。
  5. 前記計算がモジュロK演算であり、Kが前記ビットのアレイ内のビット数である、請求項3に記載のコンピュータによる制御方法。
  6. 複数の関数が、サブブロックを前記ビットのアレイ内の各位置にマッピングし、少なくとも1つのサブブロック/関数の組合せが前記ビットのアレイ内の各ビット位置にマッピングする場合には、前記ビットのアレイ内の前記ビットが前記設定されたビット値である、請求項1に記載のコンピュータによる制御方法。
  7. 前記ビットのアレイが、1つまたは複数のセクションに分割される、請求項に記載のコンピュータによる制御方法。
  8. 各セクションが、圧縮方法により圧縮される、請求項に記載のコンピュータによる制御方法。
  9. 前記インデックス・エントリ・書込みバッファが、複数のセクションに分割され、前記セクションのデータ容量が満たされた場合には、各セクションのデータが、前記記憶システム上のサブブロック・インデックスに転送される、請求項1に記載のコンピュータによる制御方法。
  10. 前記インデックス・エントリ・書込みバッファが設定されたレベルまで満たされた場合に、前記インデックスがメモリ内に読み込まれ、前記インデックス・エントリ・書込みバッファ内の要素が前記インデックスに追加され、次に、修正されたインデックスがディスクに書き込まれる、請求項に記載のコンピュータによる制御方法。
  11. 一組のサブブロックが、複数の相互に排他的なスペース内に分割され、第2のビットのアレイが、前記記憶システム内の各サブブロックの存在を表す、請求項1に記載のコンピュータによる制御方法。
  12. 前記サブブロックの前記分割が、サブブロックをハッシュし、デジタル探索木を使用してサブブロック・ハッシュのスペースを分割することにより行われる、請求項11に記載のコンピュータによる制御方法。
  13. 前記インデックス・エントリ・書込みバッファが対応するように分割される、請求項11に記載のコンピュータによる制御方法。
  14. 前記ビットのアレイが、メモリ内に格納される、請求項に記載のコンピュータによる制御方法。
  15. 請求項1の前記関数をサブブロックzに適用し、請求項1の方法により生成された前記ビットのアレイの対応するビット値を試験することにより、前記サブブロックzが記憶システム内に存在しないかどうかを判定するコンピュータによる制御方法。
  16. 請求項前記関数をサブブロックzに適用し、請求項の方法により生成された前記ビットのアレイの対応するビット値を試験することにより、前記サブブロックzが記憶システム内に存在しないかどうかを判定するコンピュータによる制御方法であって、
    前記ビットのアレイの試験されたビットがさらに設定されたビット値である場合には、前記サブブロックzが存在しないと判定する、コンピュータによる制御方法。
  17. サブブロックのシーケンス内で、明確に欠落した前記シーケンス内のサブブロックを試験するために、請求項15の方法を使用することにより前記シーケンス内の種々の位置において少なくともT個の存在するサブブロックに隣接するランが存在しないことを判定するコンピュータによる制御方法。
JP2008500013A 2005-03-11 2006-03-10 低冗長記憶システム内のサブブロックの存在を検出する方法 Expired - Fee Related JP4975724B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US66064105P 2005-03-11 2005-03-11
AU2005901173A AU2005901173A0 (en) 2005-03-11 Method for detecting the presence of subblocks in a reduced-redundancy storage system
AU2005901173 2005-03-11
US60/660,641 2005-03-11
PCT/AU2006/000328 WO2006094367A1 (en) 2005-03-11 2006-03-10 Method for detecting the presence of subblocks in a reduced-redundancy storage system

Publications (2)

Publication Number Publication Date
JP2008533571A JP2008533571A (ja) 2008-08-21
JP4975724B2 true JP4975724B2 (ja) 2012-07-11

Family

ID=36952890

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008500013A Expired - Fee Related JP4975724B2 (ja) 2005-03-11 2006-03-10 低冗長記憶システム内のサブブロックの存在を検出する方法

Country Status (3)

Country Link
EP (1) EP1866776B1 (ja)
JP (1) JP4975724B2 (ja)
WO (1) WO2006094367A1 (ja)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8190742B2 (en) 2006-04-25 2012-05-29 Hewlett-Packard Development Company, L.P. Distributed differential store with non-distributed objects and compression-enhancing data-object routing
US8099573B2 (en) 2007-10-25 2012-01-17 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
WO2009054827A1 (en) 2007-10-25 2009-04-30 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
US8150851B2 (en) 2007-10-25 2012-04-03 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
US8140637B2 (en) 2007-10-25 2012-03-20 Hewlett-Packard Development Company, L.P. Communicating chunks between devices
US8332404B2 (en) 2007-10-25 2012-12-11 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
DE112007003645B4 (de) 2007-10-25 2011-06-16 Hewlett-Packard Development Co., L.P., Houston Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
WO2009131585A1 (en) 2008-04-25 2009-10-29 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
US8788466B2 (en) 2008-08-05 2014-07-22 International Business Machines Corporation Efficient transfer of deduplicated data
US9063947B2 (en) 2008-08-18 2015-06-23 Hewlett-Packard Development Company, L.P. Detecting duplicative hierarchical sets of files
US8117343B2 (en) 2008-10-28 2012-02-14 Hewlett-Packard Development Company, L.P. Landmark chunking of landmarkless regions
US8375182B2 (en) 2009-02-10 2013-02-12 Hewlett-Packard Development Company, L.P. System and method for segmenting a data stream
US8001273B2 (en) 2009-03-16 2011-08-16 Hewlett-Packard Development Company, L.P. Parallel processing of input data to locate landmarks for chunks
US7979491B2 (en) 2009-03-27 2011-07-12 Hewlett-Packard Development Company, L.P. Producing chunks from input data using a plurality of processing elements
US9141621B2 (en) 2009-04-30 2015-09-22 Hewlett-Packard Development Company, L.P. Copying a differential data store into temporary storage media in response to a request
JP5463746B2 (ja) * 2009-06-15 2014-04-09 日本電気株式会社 アーカイブストレージ装置、ストレージシステム、データ格納方法、およびデータ格納プログラム
US20110093439A1 (en) * 2009-10-16 2011-04-21 Fanglu Guo De-duplication Storage System with Multiple Indices for Efficient File Storage
US8660994B2 (en) 2010-01-28 2014-02-25 Hewlett-Packard Development Company, L.P. Selective data deduplication
JP5418719B2 (ja) * 2011-09-16 2014-02-19 日本電気株式会社 ストレージ装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0282332A (ja) * 1988-09-20 1990-03-22 Fujitsu Ltd 索引ファイルのインデックス用入出力バッファ方式
JPH06103127A (ja) * 1992-09-22 1994-04-15 Kanebo Ltd ハッシュファイルデータ管理装置およびハッシュファイルデータ管理方法
JPH06139280A (ja) * 1992-10-29 1994-05-20 Toshiba Corp ファイル管理システム
WO1996025801A1 (en) * 1995-02-17 1996-08-22 Trustus Pty. Ltd. Method for partitioning a block of data into subblocks and for storing and communicating such subblocks
GB9811574D0 (en) * 1998-05-30 1998-07-29 Ibm Indexed file system and a method and a mechanism for accessing data records from such a system
JP2000187668A (ja) * 1998-12-22 2000-07-04 Hitachi Ltd グループ化方法と重複排除方法
US6704730B2 (en) * 2000-02-18 2004-03-09 Avamar Technologies, Inc. Hash file system and method for use in a commonality factoring system
CA2399555A1 (en) * 2000-02-18 2001-08-23 Avamar Technologies, Inc. Hash file system and method for use in a commonality factoring system
US6912645B2 (en) * 2001-07-19 2005-06-28 Lucent Technologies Inc. Method and apparatus for archival data storage

Also Published As

Publication number Publication date
EP1866776A4 (en) 2010-10-20
EP1866776A1 (en) 2007-12-19
EP1866776B1 (en) 2015-12-30
JP2008533571A (ja) 2008-08-21
WO2006094367A1 (en) 2006-09-14

Similar Documents

Publication Publication Date Title
JP4975724B2 (ja) 低冗長記憶システム内のサブブロックの存在を検出する方法
US8051252B2 (en) Method and apparatus for detecting the presence of subblocks in a reduced-redundancy storage system
US9880746B1 (en) Method to increase random I/O performance with low memory overheads
US7814129B2 (en) Method and apparatus for storing data with reduced redundancy using data clusters
US8380688B2 (en) Method and apparatus for data compression
JP4932726B2 (ja) データのランダムに命名したブロック用の記憶システム
US9727573B1 (en) Out-of core similarity matching
US9367557B1 (en) System and method for improving data compression
US8527482B2 (en) Method for reducing redundancy between two or more datasets
US7065619B1 (en) Efficient data storage system
US8024382B2 (en) Dynamic manipulation of archive files
CN107305586B (zh) 索引生成方法、索引生成装置及搜索方法
JP2008533570A (ja) 低冗長記憶システムで索引を行う方法
WO2006094365A1 (en) Method for storing data with reduced redundancy using data clusters
US10977315B2 (en) System and method for statistics-based pattern searching of compressed data and encrypted data
US5394143A (en) Run-length compression of index keys
JP4768009B2 (ja) データ・クラスタを使用する冗長性の少ないデータを格納する方法
CN113366463A (zh) 用于消除计算机存储器中的副本和值冗余的系统、方法和设备
US8988258B2 (en) Hardware compression using common portions of data
CN115454323A (zh) 用于数据克隆操作的日志
CN114461635A (zh) 一种MySQL数据库数据存储方法、装置和电子设备
KR101553028B1 (ko) 고정 블록에 기반을 둔 가변 처리 파일 시스템 및 파일 가변 처리 방법
CN117519576A (zh) 去重存储系统的数据收纳缓冲区
JP2003152548A (ja) データ圧縮における文字列検索方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090202

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110628

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110927

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20111004

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111205

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120321

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120411

R150 Certificate of patent or registration of utility model

Ref document number: 4975724

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150420

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees