JP5043820B2 - 低冗長記憶システムで索引を行う方法 - Google Patents

低冗長記憶システムで索引を行う方法 Download PDF

Info

Publication number
JP5043820B2
JP5043820B2 JP2008500012A JP2008500012A JP5043820B2 JP 5043820 B2 JP5043820 B2 JP 5043820B2 JP 2008500012 A JP2008500012 A JP 2008500012A JP 2008500012 A JP2008500012 A JP 2008500012A JP 5043820 B2 JP5043820 B2 JP 5043820B2
Authority
JP
Japan
Prior art keywords
block
hash
leaf
key
index
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
JP2008500012A
Other languages
English (en)
Other versions
JP2008533570A (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 AU2005901174A external-priority patent/AU2005901174A0/en
Application filed by ロックソフト リミテッド filed Critical ロックソフト リミテッド
Publication of JP2008533570A publication Critical patent/JP2008533570A/ja
Application granted granted Critical
Publication of JP5043820B2 publication Critical patent/JP5043820B2/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/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (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

本発明は、低冗長コンピュータ記憶システムでデータのサブブロックを索引する方法および装置を提供する。
低冗長コンピュータ記憶システムにおいては、各BLOB(バイナリ・ラージ・オブジェクト−ゼロ以上のバイト(またはビット)の有限シーケンス)は、サブブロックのプールからのサブブロックのシーケンスとして表示される。図1(従来技術)は、サブブロックのプールおよびプールからのサブブロックのリストとして表示される2つのBLOBを示す。
格納するデータの各BLOBは、サブブロックに分割され、プール内のサブブロックと照合される。プール内にすでに位置する新しいBLOB内の各サブブロックは、プール内のサブブロックへの参照により置換される。プール内に存在しない新しいBLOB内の各サブブロックは、プールに追加される。新しい固有のサブブロックだけを格納することにより、記憶システムは、格納しているBLOBの低冗長性表示を形成し、それにより使用する記憶空間の大きさを低減する。図2は、すでにサブブロックA、BおよびC22を含んでいるプールへのサブブロックABCXYからなる新しいBLOB20の追加を示す。新しいBLOB24は、最初に既存のサブブロックA、BおよびC、および次に新しいBLOBを追加した結果としてのサブブロック・プールに追加される2つの新しいサブブロックXおよびYからなるサブブロックのリストとして表示される。
この方法を実施するために、低冗長記憶システムは、通常、下記の構成要素からなる。すなわち、(BLOBを表示し、検索することができるようにする)BLOBテーブル30と、(実際のサブブロック・コンテンツを保持するための)サブブロック・プール32と、(記憶装置内にサブブロックが存在するか否かを迅速に識別し、存在する場合にはそのサブブロックの位置を発見するための)サブブロック・インデックス34とからなる(図3)。これら各構成要素は、種々様々な方法で実施することができる。
低冗長記憶システムの速度にとって非常に重要なものはサブブロック・インデックスである。BLOBテーブルは、通常、格納している各BLOBに対して1回または2回アクセスされるだけであり、効率を良くするために、サブブロック・プールはグループ内のサブブロック上で動作することができるので、サブブロック・インデックスは、格納のためにシステムに提示される各サブブロックに対してアクセスされる(少なくとも簡略化された実施態様の場合)。サブブロックがそれぞれ1キロバイトである場合には、これは20メガバイトのデータを格納するために、約20,000回のインデックス・ルックアップになる。それ故、サブブロック・インデックスが高速であることは非常に重要なことである。
インデックスへのアクセスの実際の速度は、インデックスがメモリ内に保持されているのか、またはディスク上に保持されているのかにより異なる。何故なら、ランダム・メモリ・アクセスは50ナノ秒程度かかるのに対し、ランダム・ディスク・アクセスは、10ミリ秒程度かかるからである(約200,000倍長い)。インデックスは、ディスク上に完全に保持することもできるし、またはディスク上にその一部を保持することもできるし、またはメモリ内に全体を保持することもできる。インデックスをメモリ内に完全に常駐させることは当然望ましいことであるが、インデックスが大きい場合にはそれは不可能であるか、あまりにコストが高くなりすぎる。インデックスのある部分をディスク上に保持する場合、ディスク・アクセスを最少にするように、特にランダム・アクセス・ディスク・アクセスを最少にするようにインデックスを設計することが重要である。
インデックス・データ構造のもう1つの要件は、スケーリングすることができることであり、スムースにスケーリングすることができることである。何故なら、記憶システムは、多くの場合、予想よりも大きなサイズに成長するからである。
本発明は、少ない数のランダム・アクセス・ディスク動作で、高速アクセスを行いながら、スムースに成長することができるデータ構造を提供する。
本明細書は、データのブロックの索引を実施するためのデータ構造を開示している。ブロックは、BLOBおよびサブブロックを含む。説明のために、本明細書は、サブブロックのインデックスを記述するが、これは本発明を制限するものではない。
サブブロック・インデックスは、サブブロックから入手したキーをサブブロック格納位置にマッピングする。図18は、マッピング方法を示すと共にそのマッピングを示す。キー180は、通常、サブブロック184の固定長ハッシュ(例えば、128ビットのMD5ハッシュ182)である。サブブロック格納位置は、多くの形式をとることができるが、すべてサブブロックの位置を発見するのを助ける。説明のために、ハッシュをキーと呼び、サブブロック位置を値186と呼ぶことにする。
データ構造の唯一の目的がキーの有無を記録することである本発明のいくつかの態様の場合には、値は存在しない。これを表示するもう1つの方法の場合、値がすべてゼロバイトの長さを有する。1つの例は、1つのコンピュータが他のコンピュータ内に保持しているサブブロックを追跡している場合であるが、これに限定されない。
本発明のある態様によれば、キー/値マッピングは、その葉がそれぞれ葉内に入るキーをその対応する値にマッピングするハッシュ・テーブルを含んでいる(キーの連続しているビット上の)デジタル二分探索木から構成されるデータ構造を使用して実施される(図4)。非葉ノード50はエントリを含んでいない。エントリがデータ構造に追加されると、そのハッシュ・テーブルが満杯54(特定の満杯レベル)になる各葉ノード52、54は、2つの葉ノードの子孫58、59を含む非葉ノード56により置換される(図5)。この分割プロセス中、ハッシュ・テーブルのコンテンツは、2つの新しい葉ノード間で分割され、この場合、各エントリは、そのキーの(ツリーにより)次の未使用ビットにより、2つの新しい葉のうちの一方に割り当てられる(図6)。各葉のハッシュ・テーブル・エントリのキーは、ツリー内の葉の位置によりまだ制限されていない元のキーのこれらのビットだけに基づくものでなければならない(図7)。
葉ノード内ハッシュ・テーブルが非常に大きなテーブル(例えば、数千エントリ)に構成されている場合には、データ構造の興味のある特性は、ツリー内の非葉ノードが、葉ノードと比較すると非常に小さなスペースしか占有しないことである。それ故、本発明の他の態様によれば、非葉ノードはメモリ内に保持され、葉ノード(または少なくともこれらが含むハッシュ・テーブル)はディスク上に保持される(図8)。この構成はいくつかの利点を有する。第1の利点は、この構成の場合には、非常に小さなメモリですむことである。第2の利点は、ハッシュの幅(例えば、128ビット)がツリーの深さの上部境界となるので、約128(128ビット・キーに対して)のランダム・アクセス・メモリ・シークのタイトなループの最悪の場合でも、ツリーが非常に高速で横断される(その全体は、依然としてランダム・ディスク・シークより約1500倍速い)。第3の利点は、葉内のハッシュ・テーブルがそれほど満杯にならない限り、二分木の根−葉横断の終わりのところで発生する葉ハッシュ・テーブルのルックアップは、1回のランダム・アクセス・ディスク・シークからなることである。これは時間がかかるが、ディスク上にツリーの非葉も保持されている場合に必要な数回のランダム・アクセス・ディスク・シークよりは遥かに時間がかからない。
ある実施形態の場合には、キーはサブブロック・ハッシュである。これらのものは(少なくとも理論的には)一様にランダムに分布しているので、その成長の各段階においてツリーがかなりよくバランスすることが多い。これにより、短いツリー横断アクセス時間も短縮することができる。本発明の他の態様によれば、ツリーの頂部Lレベルは、2エントリの1つのアレイにより置換される(図9)。これにより、ツリーの頂部Lレベルの横断のL回のステップが、アレイをルックアップの1回のステップに低減する。ツリーの成長がバランスよく行われることが多いので、アレイの下のツリーのレベルが少なくなることが多い(図9)。アレイによりツリーのいくつのレベル(L)を置換するのかの選択は種々の要因により決まり、最も可能性が高い要因は、各レベルのところのツリーの満杯度のレベルである。
ハッシュ値の均一性による均一なツリーの成長により、ツリーの頂部をアレイにより置換することができるが、同じ均一性がツリーの葉の成長中に不連続な部分を生じる。実験により、ツリーは均一に成長することができるので、葉ノードの全底部層が満杯になり、ほぼ同時に分割されることが分かっている。このことは、正確さは低下しないが、リアルタイムの意味を持つ。何故なら、葉ノードを分割するには、その子孫のハッシュ・テーブル間のノードのハッシュ・テーブル内のエントリを分割する必要があり、このことは、テーブルに新しいエントリを単に追加するよりも遥かに長い時間がかかるからである。ツリー内の1つのレベルのところのすべての葉がほぼ同時に分割された場合には、分割が完了し、その正常なレベルを回復するまでシステムの速度は低下する。この性能の低下はいくつかの方法により回避することができる。本発明のさらに他の態様によれば、葉が生成された場合、ランダム満杯しきい値が各葉に割り当てられる。そのハッシュ・テーブルの満杯度がしきい値に達した場合だけ、葉は分割される。例えば、ある葉には40%のしきい値を割り当てることができ、他の葉には80%のしきい値を割り当てることができる。ランダム値は、(スペースを無駄にしないように)最小値より小さい値を選択しないで、または(テーブル内での長いオーバラン・チェーンを避けるために)最大値より大きい値を選択しないある分布により選択することができる。ランダムしきい値は、葉が所与のレベルところで分割した場合に時間を拡張する。もう1つのアプローチは、ノードが生成された場合に、各葉ノード内にランダム・サイズのハッシュ・テーブルを生成する方法である。この場合、異なるサイズのハッシュ・テーブルは異なる時間に満杯になる。
要するに、ある方法は、非常に小さなメモリを使い果たすサブブロックを索引するためのものであり、キーをルックアップするために1回のランダム・ディスク・アクセスを必要とし、スケーラブルなものであり、この方法に沿ってほとんどまたは全くリアルタイムの衝撃を与えないでスムースに成長する。
用語
デジタル二分探索木:各レベルのところで行った決定が、キーの連続しているビットにより行われる二分木。
BLOB(バイナリ・ラージ・オブジェクト):データのゼロ以上のバイト(またはビット)の有限シーケンス。その名前にも関わらず、BLOBは必ずしも大きくはない。BLOBは、数ビットのように小さいものであってもよいし、またはギガバイトのように大きいものであってもよい。
ブロック:データのゼロ以上のバイト(またはビット)の有限シーケンス。この用語は抽象的なものであり、制限なしにBLOBおよびサブブロックを含む。
バケット:インデックス・バケット参照。
衝突:衝突は、2つ以上のキーが、ハッシュ・テーブル内の同じスロット(位置)にハッシュした場合にハッシュ・テーブル内で起こる。
衝突チェーン:エントリをハッシュ・テーブルに追加し、エントリが他のエントリと衝突した場合に、元のエントリからのエントリの衝突チェーンを形成することによりそれを格納することができる。衝突チェーンは、テーブル内またはテーブルの外に存在することができる。
デジタル探索木:各レベルのところで行った決定が、キーの連続しているディジットにより行われるツリー。
ディスク:コンピュータが使用するランダム・アクセス記憶媒体。通常、「ディスク」という用語は、磁化したデータを保持している金属の回転円盤(ハードディスク)を意味する。本明細書においては、ディスクという用語は、メモリよりかなり遅いランダム・アクセス記憶媒体を意味するようにもっと広義に解釈することができる。
エントリ:インデックス・エントリ参照。
ハッシュ:ハッシュ・アルゴリズムが生成したバイト(またはビット)の固定長シーケンス。サブブロックのハッシュは、サブブロックを索引し、比較するためのサブブロックを表すものとして使用することができる。
サブブロックのハッシュ:サブブロック・ハッシュ参照。
ハッシュ・テーブル:アレイを使用してキーを値にマッピングする手段。この場合、値(および場合によっては、キーまたはキーの一部)は、キーのハッシュにより決定される位置のところでアレイ内に格納される。
インデックス・バケット:ハッシュ・テーブルを使用してサブブロック・インデックスを実施する実施形態の場合には、ハッシュ・テーブルを、それぞれが空であるかエントリを含み、それぞれが一定数のエントリ・スロットを含むバケットのアレイとして構成することができる。インデックス・バケットの1つの目的は、ハッシュ・テーブルを、ランダム・アクセス・ディスク動作の回数を低減するために、グループとしてディスクから読み出し、ディスクに書き込むことができる部分に構成することである。
インデックス・エントリ:サブブロック・インデックス内のレコード。ある実施形態の場合には、インデックス・レコードは、インデックス・キーおよびインデックス値を含む。ある実施形態の場合には、インデックス・レコードは、インデックス・キーの一部およびインデックス値を含む。ある実施形態の場合には、インデックス・レコードはインデックス値だけを含む。ある実施形態の場合には、インデックス・レコードは値を含まないで、キーの一部または全部を含む。
インデックス・キー:サブブロックについての情報を検索するためにサブブロック・インデックスに提供されるサブブロックについての情報。ある実施形態の場合には、この情報はインデックス・エントリの位置を発見し、読み出すことにより検索される。
インデックス値:サブブロック(またはその一例がそのハッシュであるサブブロックの派生物)をインデックスで参照した場合に、インデックスによりサブブロックについて生成された情報。ある実施形態の場合には、この値は、ディスク上のサブブロックの位置からなる。他の実施形態の場合には、インデックスの唯一の目的がキーの有無を記録することである場合には、値が存在しない場合がある。
キー:インデックス・キー参照。
葉:探索木の葉は、子孫を有していないノードである。
メモリ:通常、ランダム・アクセス・メモリ(RAM)を参照するコンピュータが使用するランダム・アクセス記憶媒体。本明細書においては、この用語は、「ディスク」よりかなり速いランダム・アクセス記憶媒体を意味するようにもっと広義に解釈することができる。
分割方法:BLOB内の各バイト(またはビット)が、正確に1つのサブブロック内に入るように、BLOBを1つまたは複数のサブブロックに分割するための方法。
低冗長記憶装置:データのその表示の際に、自身が格納している一組のデータ内の複製データのいくつかを除去する記憶システム。
スロット:ハッシュ・テーブル内の位置。スロットは、空であってもよいし、エントリを含むこともできる。
記憶装置:低冗長記憶装置参照。
サブブロック:索引、比較および/または冗長除去のための単位として識別されたバイト(またはビット)のシーケンス。BLOBはサブブロックに分割することができる。
サブブロック・ハッシュ:サブブロックへのハッシュ・アルゴリズムの適用結果。サブブロックのハッシュは、例えば、サブブロックを索引および/または比較するために、サブブロックを表すものとして使用することができる。
サブブロック・インデックス:サブブロックの位置(例えば、制限なしで、クラスタ番号(およびまた、おそらくサブブロック識別子))に、サブブロックのハッシュ(またはサブブロック自身)をマッピングする(または他の方法で関連付ける)データ構造。
サブブロック・プール:低冗長記憶システム内のサブブロックの集合体。
横断(Traversal):ツリー横断参照。
横断(Traverse):ツリー横断参照。
ツリー横断:「ツリーの横断」は、通常、ツリーの各ノードの訪問を意味するが、本明細書の場合には、この用語は、ツリーの根から葉への経路を意味する。
インデックスの値:インデックス値参照。
本明細書全体および添付の特許請求の範囲を通して、別段の指示がない限り、「備える」および「含む」という用語、および「備えている」および「含んでいる」という派生語は、「包含」および「除外しないこと」を意味する用語であると理解されたい。例えば、このような用語を記載の整数または整数のグループを参照するために使用した場合には、このような用語は、任意の他の整数または整数のグループの除外を意味しない。
本明細書の添付の特許請求の範囲は、本明細書に開示する本発明の広義の記述であり、参照により本明細書に組み込むものとする。
本明細書での任意の従来技術への参照は、このような従来技術が共通の一般的知識の一部を形成しているという容認でもなければ、任意の形式の示唆でもないし、またそのように解釈すべきでもない。
添付の図面を参照しながら、以下に本発明の特定の実施形態についてさらに詳細に説明する。これらの実施形態は、説明のためのものであって、本発明の範囲を制限するためのものではない。他の実施形態の示唆および記述を本発明の範囲内に含めることができるが、これらのものは添付の図面には示していないし、または別の方法で本発明の機能を図面には示してあるが本明細書には記述していない。
本明細書で任意の従来技術を参照したからといって、このような従来技術が共通の一般的知識の一部を形成することを承認したものでもなく、または任意の形の示唆でもなく、またそう見なすべきでもない。
図21は、典型的なコンピュータ・ハードウェア210上でのある実施形態の展開方法を示す。すべてのデータ構造はディスク212上に常駐している。デジタル二分探索木214は、いくつかのBLOBレコードの作業コピーおよびサブブロック・プールの一部を格納しているいくつかのキャッシュ218と一緒にメモリ216内に保持される。
6.1 インデックス・キー
サブブロック・インデックス・データ構造は、サブブロックの存在および位置を判定するために使用される。このことは、データ構造のキーは、サブブロックから入手されることを示唆している。
サブブロック自身をキーとして使用することができる。しかしそうすると、ツリーが非常に深くなる場合がある。例えば、すべてのサブブロックが、ゼロである1,000バイトで開始した場合には、ツリーの各アクセスは、ツリーを下方に向かって何らかの実際の進行(すなわち、あるサブブロックを他のサブブロックから区別する進行)を行う前に、これら1,000バイトのデータを処理しなければならない。
サブブロックのハッシュは、サブブロック自身より優れたキーになる。何故なら、ハッシュは有限幅(例えば、128ビット(16バイト))を有し、ハッシュは各サブブロック内のすべてのバイトを(損失を起こす方法で)純化するからである。幅が有限なのでキーを操作し易くなり、ツリーはハッシュの幅より深く成長することは決してできない。サブブロックのすべてのバイトをハッシュ・キーにハッシュすれば、サブブロックが長い共通プレフィックスを有する場合に生じる非効率がなくなる。サブブロック・ハッシュをキーとして使用した場合の1つの利点は、結果として得られるキーが可能なキーのスペース内でランダムにまた一様に分布される可能性が非常に高いことである。
6.2 インデックス値
インデックスの各値は、1つまたは複数のサブブロック属性を含むレコードからなる。
低冗長記憶システムにおいては、値は索引中のサブブロックの位置であってもよい。格納位置の値の例としては、ディスク上の位置、ファイル名、ファイル番号、サブブロック・クラスタ番号、少数のサブブロック・クラスタを識別するマスク、およびクラスタ番号とクラスタ内のサブブロック識別子の組合せがあるが、これらに限定されない。
通信用途の場合には、値は、ネットワーク内のサブブロックの位置を運ぶこともできるし、遠隔コンピュータ上のサブブロックの存在を記録するために、インデックス内のサブブロックのキーの存在に単に依存する用途の場合には、情報を全然含んでいなくてもよい。
値の性質は主として索引用途の性質により異なる。
6.3 ツリー
本発明のある態様は、ハッシュ・テーブルのツリーからなる。種々様々なツリーがあり、これらの各役割で使用することができる種々様々なハッシュ・テーブルがある。
キーがサブブロック・ハッシュである場合には、デジタル探索木は特に有効である。何故なら、非常に容易に横断することができるからである。デジタル探索木の場合には、キーは固定幅のディジットに分割され、連続している各ディジットは、ツリーの各レベルのところの分岐を選択するために使用される。例えば、典型的な実施形態の場合には、デジタル二分探索木40を、1ビット・ディジットに分割したハッシュと一緒に使用することができる。デジタル二分探索木の根42から開始して、ハッシュの最左端(最上位)のビット44を、左に行くのか右に行くのかを決定するために使用することができる。根46の直接の子のところで、次の決定をするために次のビットが使用され、以下同様に行われる(図4)。
ハッシュが2つのビット10のグループに分割された場合には、このような各グループをディジットとして処理することができ、デジタル探索木は、各非葉ノードからの4つの分岐12、14、16、18を含む4値デジタル探索木であってもよい(図10)。同様に、3ビットのディジットは、それぞれ、8つの分岐を有するツリーになる。任意の他の分岐も使用することができる。
任意の小さくないハッシュ・テーブル・サイズの場合、ツリー内の非葉ノードが少ないメモリを使用することは容易に証明できる。デジタル二分探索木およびK個のビットのハッシュの場合を考えてみよう。ツリーの各非葉ノードが8バイト(2つの4バイトのポインタ)からなる場合には、(他の葉ノードとの祖先ノードの共有を考慮に入れて)各葉の全メモリ・コストは、8×(1/2+1/4+1/8+...+1/(2))となる。ここで、Lは葉の深さである。無限Lの場合でも、このコストは依然として8バイトにしか過ぎない。各葉内のハッシュ・テーブルがメガバイト以上である場合には、非葉ノードは、全データ構造が使用する全スペースの100,000分の1より小さくなる。この高い比率によりメモリ内にツリーを経済的に格納することができる。
特定の葉内に格納しているすべてのキー/値ペア・エントリは、共通プレフィックスを含むキーを有することに留意されたい。それ故、葉内のハッシュ・テーブルにアクセスするためにこの共通プレフィックスの任意の部分を使用しても問題はない(図6、図7)。
ハッシュ・テーブルの使用に関連していくつかの困った問題がある。テーブルのアドレス指定方法、テーブルを格納する場合の衝突の処理方法、およびテーブルの分割方法がそれである。
6.4 ハッシュ・テーブル・アドレス指定
サブブロックがハッシュされ、ハッシュの最初のT個のビットがツリーを横断するために使用され、その結果、葉に到着した場合のサブブロックに対する探索中の問題について考えてみよう。葉内にはハッシュ・テーブルが存在する。次に何が起こるか。
最初に、葉に到着するために最初のT個のビットを使用しているので、葉のハッシュ・テーブル内に格納している、またはこれから格納するすべてのキーは、同じT個のビットのプレフィックスを有する(図6および図7)。それ故、重要なことは、ハッシュ・テーブル内の位置を選択するためにこれらのT個のビットを使用しないことである。
ハッシュ・テーブルがN=2スロット(ここで、Pは正の整数である)を含んでいる場合には、キーを容易にハッシュ・テーブルにハッシュすることができる。単に、葉に到着するためにすでに使用したT個のビット70の後のキーのP個のビット72を使用する。Nが2のべき乗でない場合には、異なるアプローチを使用することができる。最初のT個のビットの後の次のQ個のビットを使用し、Nで割る。残りがハッシュ・テーブル・インデックスである。これにより、(テーブルの他の部分よりテーブルの1つの部分に多くのロードが行われないようにするために)Qがlog(N)より数ビット高い限り、テーブル内でかなり均一な拡張が行われなければならない。種々の他のハッシュ方法も使用することができる。
6.5 ハッシュ・テーブルの衝突
衝突は、2つ以上のキーが、同じ位置(スロット)110にハッシュした場合に、ハッシュ・テーブル内で起こる(図11)(従来技術)。この状況を解決する1つの方法は、第2のエントリを単に廃棄するという方法である。ある場合には、これは正しい選択である。しかし、ハッシュ・テーブルが損失を許容するものでない場合には、このオプションを使用することはできないので、この「オーバーフロー」状況を処理するために種々様々な技術のうちの1つを使用することができる。
衝突を処理するために昔から使用されてきた1つの技術は、オーバーフロー領域120と呼ばれる別の記憶領域を有する方法である。各ハッシュ・テーブル・スロット122は、オーバーフロー・フィールド124を含む。スロット内で衝突が起きた場合には、オーバーフロー・エントリは、オーバーフロー領域内に格納され、エントリへのポインタがスロット126内に置かれる(図12)(従来技術)。オーバーフロー領域によりエントリはまた相互にポイントすることができ、各オーバーフロー・スロットは、エントリのリストをポイントすることができる(図12)(従来技術)。(ハッシュ・テーブルがメモリ内に位置していて、メモリ・ヒープの形をしている場合のように)別々のオーバーフロー領域を使用できる場合には、この技術はうまく動作する。しかし、ハッシュ・テーブルがディスク上に位置している場合には、オーバーフロー領域内にオーバーフロー・エントリを置くと、通常、少なくとも1回の追加のランダム・アクセス・シークを行うステップが関連する。
衝突に対するもっと完全なアプローチは、ハッシュ・テーブル自身内に衝突しているエントリを格納する方法である。従来のアプローチの場合には、衝突が起こると、第2のハッシュ関数により第2の項目のキーがハッシュされ、結果として得られるスロットがチェックされる。そのスロットが空である場合には、エントリをそこに格納することができる。空でない場合には、第3のハッシュ関数を呼び出すことができ、空のスロットを発見するまで同じ手順を反復することができる。全テーブルが満杯である場合には、ある実施形態の場合には、新しいエントリを追加する前に、テーブルが分割される。一般に、ハッシュ関数H(K,X)は、Kがハッシュするキーであり、Xが、衝突しているエントリに対するハッシュ・テーブル内の連続している候補の位置を発見するために増大することができる正の整数である場合に定義することができる。キーKを探索するために、キーを含むスロットを発見するまで、または(テーブル内の特定のハッシュ・オーバーフロー・チェーンの終わりを示す)空のスロットに遭遇するまで、X=1,2,...に対してスロットH(K,X)がチェックされる。
しかし、ハッシュ・テーブルが大きくディスク上に位置している場合には、衝突チェーンの後で、ディスク上で一連のランダム・アクセス・シークを行う必要がある。これは非常に時間がかかる。このことは、H(K,X)=H(K,X−1)+1と定義することにより、すなわち、(テーブルの終わりのところを囲んでいる)次の隣接スロット130(図13)(従来技術)にオーバーフローすることにより避けることができる。線形プロービングと呼ばれるこの技術の場合には、アクセスは局所的なままである。アクセスした第1のスロットを読み出した場合には、次のSスロットも小さなSに対して読み出され、ディスク動作は、(例えば、12バイトの代わりに1Kを読み出すように)余分な時間はかからないし、オーバーフロー・スロットも提供する。新しいエントリが追加されると、複数のスロットを1つのグループとしてディスクに書戻すことができる。衝突チェーンがS個のスロットを超えて跨ることがまれになる(およびそれにより追加のディスク・アクセスが必要になる)ように(おそらく動的に)値Sが調整される。
6.6 ハッシュ・テーブル・バケット
一度に2つ以上のハッシュ・テーブル・エントリの読出しに関連するアプローチは、テーブルをバケット140に分割する方法である(図14)。例えば、1024のスロットのテーブルを、それぞれが16のスロットを含む64のバケットのテーブルで置換することができる。エントリを探索するために、バケット内で線形探索を行うことができる(またはおそらく、各バケット内のキーがソートされている場合には、二分探索を行うことができる)。たまにしかバケットは満杯にならないので、その場合には、オーバーフローは次のバケットに移動することができる。テーブルがあまり大きく成長できない限り、オーバーフロー・チェーンはあまり長くすべきではない。インデックス・バケットの利点は、インデックス・バケットは、ランダム・アクセス・ディスク・シークの回数が少なくなるようにディスク・アクセスに対するユニットを生成することである。
6.7 ハッシュ・テーブルの格納
概念上は、ツリーの各葉は、ツリーの種々の部分が格納される位置がどこであれ、ハッシュ・テーブルを「含む」。実際には、メモリ内の葉ノードは、実際のハッシュ・テーブルまたはディスク上のハッシュ・テーブルの位置を含むことができる。ツリーがメモリ80内に格納され、ハッシュ・テーブルがディスク82上に格納される典型的な実施形態の場合には、メモリ内の葉ノード84は、ディスク82上の葉のハッシュ・テーブル86の位置へのポインタを格納する(図8)。
すべてのハッシュ・テーブルのサイズが同じである場合には、容易にハッシュ・テーブルを格納することができる。単にファイルまたはディスクの一部を割り当て、ファイル内またはディスク88の一部内にアレイとしてハッシュ・テーブルを格納しさえすればよい(図8)。アレイ内のハッシュ・テーブルは、任意の順序で格納することができる。
すべてのハッシュ・テーブルのサイズが同じでない他の実施形態の場合には、テーブルをディスク上にヒープ構造を使用して格納することができる。
6.8 ハッシュ・テーブルの分割
葉62が非葉64および2つの新しい葉66、68に分割される場合には、葉のハッシュ・テーブルのコンテンツは、2つの新しい葉の間で分割される(図6)。
葉ハッシュ・テーブルがすべて同じサイズであり、ディスク150のアレイ内に格納される場合には、既存の葉のハッシュ・テーブルは新しい左の葉152のハッシュ・テーブル154になることができ、1つの余分なハッシュ・テーブル156をハッシュ・テーブル・アレイ158の終わりに付けることができる。図15の実施形態の場合には、ハッシュ・テーブルBをポイントしている葉ノードは分割され、2つの葉ノード子孫を有する新しい非葉ノードになる。ハッシュ・テーブルBを保持するためのスペースは、新しい左のハッシュ・テーブルB1を保持するために使用され、新しいハッシュ・テーブルが新しい右の葉ハッシュ・テーブルB2を収容するためにハッシュ・テーブルのアレイの終わりのところに生成される。
最初に考えた場合、元の葉を新しい左の葉として再使用し、新しい右の葉を生成したので、もとの葉の分割は、そのハッシュ・テーブルを通して1回通過し、その次のビットが1である要素を右のハッシュ・テーブルに移動するのと同じくらい簡単なものと思うかもしれない。しかし、このアプローチは、2つの欠点を有する。第1の欠点はオーバーフローである。エントリがテーブルから除去されると、テーブル内のオーバーフロー・チェーンが切れて、いくつかのエントリにアクセスできなくなる恐れがある。第2の欠点は、元の葉に到着するのに使用した頂部T個のビットの後のK個のビットを使用し、エントリがすでにハッシュされていた場合には、これらK個のビットの最初のビットはもはや使用すべきではない。何故なら、このビットは新しい葉へツリーの最後のリンクを横断するのに使用するビットであるからである。
これらすべての理由により、ハッシュ・テーブル190を分割するための最も簡単な方法は、それをメモリ192内に読み込み、メモリ内に2つの新しい新鮮で空のハッシュ・テーブル194、196を生成し、元のハッシュ・テーブルを1回通過し、各エントリを2つの新しいハッシュ・テーブルの一方または他方に入れるという方法である。次に、2つの新しいテーブル198、199をディスク191に書き込めばよい197(図19)。
どのような方法で分割を行おうとも、エントリ自身が、他のデータ構造、特にディスク上のデータ構造にアクセスしなくても分割を行うことができるだけの十分なそのキーを含んでいれば有利である。
6.9 ツリーの成長
いつ葉を分割すべきか。多数のヒューリスティックを使用することができ、これらはそれぞれ、「満杯」の異なるコンセプトに等しい。
おそらく、最も明白なヒューリスティックは、そのハッシュ・テーブルが完全に満杯になった場合に葉を分割することである。簡単であるが、このヒューリスティックは、テーブルの使用を遅くする恐れがある。何故なら、分割の直前にスロットの平均オーバーフロー・チェーン長さは、テーブル長さの約半分になるからである。
そのハッシュ・テーブルがある割合の満杯度より大きい場合には、葉を分割することができる。例えば、そのハッシュ・テーブルが80%以上満杯になった場合(すなわち、0.8Sエントリ以上(ここで、Sはスロット数である)を含んでいる場合)には、葉を分割することができる。
テーブル内の最も長いオーバーフロー・チェーンが、例えば30のオーバーフローのような所定の長さに達した場合には、葉を分割することができる。所定の長さは許容密度を生じるのに十分高いものに設定しなければならないが、オーバーフロー・チェーンの横断が効率的でなくなるほど長くならないように十分低いものでなければならない。
葉のテーブルにエントリを追加中に、所定のしきい値よりも長いオーバーフロー・チェーンに遭遇した場合には、葉を分割することができる。新しいエントリが追加されるたびに、またはテーブルが満杯になった場合に、所定の確率Pで葉を分割することができる。Pをあまり低く設定すると、ハッシュ・テーブル内のスペースを過度に浪費する恐れがある。Pをあまり高く設定すると、横断するのに非効率的なオーバーフロー・チェーンを生成する恐れがある。
6.10 ツリーの成長をスムースにする技術
ツリー構造についての経験により、キーがサブブロック・ハッシュである実施形態の場合には、キーは、通常、ツリー内の葉すべてがほぼ同じ時間に分割される傾向があるほど非常に一様に分布していることが分かっている。これにより分割が行われている間、速度が一時的に遅くなる。これらの性能の低下は、各反復の度にますます広くなる性能の低下が拡がるにつれて、2倍の間隔で発生する。しかし、性能の低下は、リアルタイムの性能に悪影響を与える恐れがあるので、それを軽減する手段を調査する価値がある。
(分割する場合の時間を区別する)各レベルが分割する期間を増大する1つの簡単な方法は、各葉が生成される場合に、ランダムなしきい値を各葉に割り当てる方法である。例えば、各葉には、60〜90%の間の一様に分布しているランダムな密度しきい値を割り当てることができる。次に、そのハッシュ・テーブルの密度がしきい値を超えた場合に葉が分割される。各葉はそれ自身の密度で分割するので、レベルの分割は、長い時間の間に拡散する。今説明した静的スキームとは別の方法は、しきい値が試験される度にランダムに変化するしきい値に対するものである。
スペースをよりよく活用することができるもう1つのアプローチは、一定の分割しきい値(例えば、80%)を使用するが、各葉内にサイズの異なるハッシュ・テーブル160、162、164、166を生成する方法である(図16)。このアプローチの場合には、葉は異なる時点で分割される。例えば、ランダム値をXとYの間に設定することができる。この場合、Xは不必要な分割を起こさせるほど低くはなく、Yはリアルタイム処理に分裂を起こさせるほど高くはない。
ある実施形態の場合には、各テーブルに対して小さな一組のサイズ(例えば、1キロバイト、2キロバイト、4キロバイト、8キロバイト)のうちの1つから選択したランダムなサイズを選択すると有利な場合がある。
6.11 アレイによるツリーの頂部の置換
ハッシュ値のキーは、一様に分布している場合が非常に多いので、ツリーは非常にバランスがとれた方法で成長することが多い。このことは、ツリーの全レベル(例えば、レベル3)90が非葉ノードで満杯になる可能性があることを意味する。このことが起こった場合、((例えば)レベルLへの)ツリーの全頂部を1つのアレイ92で置換することができ(図9)、O(L)からO(1)へのツリーのその部分に対するアクセス時間を短くすることができる。
ツリーの頂部を置換する時期を決定するために種々のヒューリスティックを使用することができる。簡単なアプローチは、レベルL全体が非葉ノードである場合だけ、ツリーの頂部Lレベルを置換する方法である。このアプローチは、簡単であるが、この技術はツリーが成長するにつれて破断する恐れがある。何故なら、下のレベルのいくつかのノードが暫くの間「保持」される恐れがあり、分割されない恐れがあるからである。そのため、頂部Lレベルが非葉ノードのX%より多くを含んでいる場合に、ツリーの頂部Lレベルを置換させるようなヒューリスティックを使用することができる(この場合、Xは、予め定義したしきい値(例えば、80%)である。これは、スペースを浪費するほど低くはないが、最適化を呼び出す厳しい要件になるほど高くはない)。このアプローチを実施する1つの方法は、各ノード内にノードの深さであるフィールド170を設置することである。次に、1つの葉ノードへのポインタ172を、同じアレイ内の複数のスロット内に置くことができる。葉が満杯になり分割すると、結果として得られる2つの葉へのポインタは、元の葉により占有されているアレイ内の位置を満たすことができる(図17)。
理論はさておき、ハッシュをキーとして使用し、ツリーの頂部のところにアレイを有し、葉内にハッシュ・テーブルを有するデータ構造に対してO(1)の複雑さが達成される。頂部のアレイは明らかにO(1)である。葉内のハッシュ・テーブルも明らかにO(1)である。これによりアレイと葉の間に非葉ノードの層だけが残り、O(1)より高い次数の複雑さが増す。ハッシュが一様に分布している場合には、アレイと葉の間のレベルの平均数が、全データ構造がO(1)アクセス時間を有することを意味するO(1)であることを示す証明を行うことができる可能性があるように思われる。
可能な理論的(およびおそらく実際的)関心事は、葉のハッシュ・テーブル内の現在の各要素を2つの異なる子孫のノードのハッシュ・テーブルのうちの一方に移動するステップを含むハッシュ・テーブル分割動作である。2倍になると、成長しているデータ構造のコストが更新ごとにO(1)より高くなる恐れがあるだろうか。答えは「ノー」である。何故なら、個々のエントリを斜めから見た場合、分割動作は2倍の時間間隔で起こるからである。分割される前に満杯になっている長さNのハッシュ・テーブルに対するエントリごとの全分割コストは、それ故、1/N+1/2N+1/4N+1/8N...であり、O(1)である1まで加算される。
6.12 他のデータ構造
ハッシュ・テーブルのツリーを維持する他のアプローチは、ツリーを1つのマスタ・ハッシュ・テーブルで置換する方法である。このアプローチは、そうでない場合は、二分探索木内に格納される各ノードに対するマスタ・テーブル内にハッシュ・エントリを生成することにより実行することができる。
6.13 複雑な攻撃
攻撃者が、システムのデータ構造のうちの1つを最悪な場合の状態にするように設計されているシステム内にデータを供給する場合に、システム上に複雑な攻撃が発生する。例えば、攻撃者がウェブ・サーバが非平衡二分木を使用していることを知っている場合には、攻撃者は、ツリーをリストにするために、ソートしたデータをツリー内に供給することができる。こうすることにより、サーバが停止するような非常に悪い以降の探索時間が生じる恐れがある。
本発明は、結局(暗号化ハッシュをキーとして使用している実施形態の場合)複雑な攻撃に弱いように見えない。何故なら、ツリーが深くなると、攻撃者にとって特定の葉にハッシュするサブブロックを発見するための計算がますます高価なものになるからである。しかし、そのスケールに到着するまでは、個々の各ハッシュ・テーブルは、攻撃者が同じスロットに反復してヒットするサブブロック内に供給する場合、複雑な攻撃に対して弱い。そのため、そのテーブル内での以降の探索を遅くする恐れがある非常に長いオーバーフロー・チェーンがテーブル内に形成される。
複雑な攻撃を避けるための最も健全な方法は、優れた最悪の場合を有するデータ構造を設計することである。ある種の平衡木構造を使用してこのような設計を行うことができるが、ハッシュ・テーブルを使用してそのような設計を行うのは容易ではない。何故なら、ハッシュ関数がどんなに無秩序であっても、すべてを知っている攻撃者は、ハッシュ・テーブルの最も長いチェーン上に来るような方法で次のキーを形成することができるからである。
(テーブルが最大密度に近づいていない限りは)ランダムに発生するハッシュ・テーブルの最悪(またはほぼ最悪)のケースの確率を無視することができるとするならば、ハッシュ・テーブル内での複雑な攻撃から身を守るための1つの方法は、ハッシュ・テーブルを生成した場合に秘密のランダム・シードを生成し、ハッシュ・テーブル・スロットを形成するためにサブブロック・ハッシュをシードでハッシュする方法である。攻撃者がシードを知らない限り、複雑な攻撃は事実上不可能である。
6.14 範囲に関する注
当業者であれば、本発明は、上記の特定の用途に限定されないことを理解することができるだろう。また、本発明は、本明細書に記載し図面に示した特定の要素および/または機能に関してその好ましい実施形態に限定されない。本発明の原理から逸脱することなしに、種々の修正を行うことができることを理解することができるだろう。それ故、本発明は、本発明の範囲内に入るすべてのこのような修正を含むものと解釈すべきである。
その中のいくつかが両方のBLOB内に表れる、サブブロックのシーケンスとしてのデータの2つのBLOBを示す。 サブブロックABCXYからなる新しいBLOBの新しい一意のサブブロック(XおよびY)だけをサブブロック・プール(すでに存在しているサブブロックA、BおよびC)に追加する方法を示す。 BLOBテーブル、サブブロック・プールおよびサブブロック・インデックスを有する低冗長記憶システムを示す。 その葉がキー/値ペア・エントリを含むハッシュ・テーブルであるデジタル二分探索木(サブブロック・ハッシュの連続しているビット上の)である、サブブロック格納位置にサブブロック・ハッシュをマッピングするために使用するデータ構造を示す。 そのハッシュ・テーブルが十分満杯になった場合のツリー上の葉ノードの分割方法を示す。 葉ノードを非葉ノードに変換させ、ハッシュ・テーブル内のそのエントリを2つの新しい子孫の葉ノード間で分割させる二分探索木の葉ノードの分割を示す。新しい葉ノードは、ツリー内で1レベルだけ深いので、これら葉ノード内のエントリへのアクセスは、サブブロック・ハッシュの追加ビットの使用を含む。 サブブロック・ハッシュであり、残りのものを葉内のハッシュ・テーブルにアクセスするために使用することができる状態で、デジタル二分探索木を横断するためのその左の部分の使用方法を示す。 メモリ内でのデジタル二分探索木の保持、およびディスク上の葉内、この場合は、ハッシュ・テーブルのアレイを含むファイル内でのハッシュ・テーブルの保持方法を示す。 デジタル二分探索木の頂部のアレイによる置換方法を示す。 ビットの連続しているペアが各レベルで行う選択を決定する4値のデジタル探索木である。 (従来技術)2つのキーがテーブル内の同じ位置にハッシュするハッシュ・テーブル衝突を示す。 (従来技術)外部オーバーフロー領域を有するハッシュ・テーブルを示す。 (従来技術)オーバーフロー・エントリが次の空のスロット(線形プロービング)内に格納されるテーブル内オーバーフローを示す。 それぞれが一定数のエントリ・スロットを含むバケットのアレイとして構成されたハッシュ・テーブルを示す。 葉ノードを分割する場合の、その既存のハッシュ・テーブルの、左の葉のハッシュ・テーブルとしての使用方法を示す。 サイズが変化するハッシュ・テーブルを含む葉を有するデジタル二分探索木を示す。 レベル番号により、レベルLがまだ満杯になっていなくても、アレイでデジタル二分探索木の第1のLレベルを置換する方法を示す。この図の場合には、第1の2つのレベルが置換される。 キーがサブブロックから入手され、値がサブブロックの位置である場合のマッピング方法を示す。 ハッシュ・テーブルをディスクからメモリにロードすることによるハッシュ・テーブルの分割、メモリ内でのその分割、その後での2つのハッシュ・テーブルのディスクへの書込みを示す。 データ構造上の複雑な攻撃を防止するための秘密鍵によるキーのハッシングを示す。 典型的なコンピュータ・ハードウェア上でのある実施形態の展開方法を示す。すべてのデータ構造はディスク上に常駐している。デジタル二分探索木は、いくつかのBLOBレコードの作業コピーおよびサブブロック・プールの一部を格納しているいくつかのキャッシュと一緒にメモリ内に保持される。

Claims (30)

  1. データの1つまたは複数のブロックを索引することにより、低冗長記憶システムにデータを格納し、前記低冗長記憶システムに格納されたデータを通信し、または比較するために、データを索引するコンピュータによる制御方法であって、
    前記データのブロックから入手したキーを有するデジタル探索ツリーを含むインデックスをメモリの中に生成し、当該生成に係る前記デジタル探索ツリーの1つの葉が1つのテーブルを有し、前記テーブルが前記葉内に入るキーに対する1つのインデックス値を有し、
    前記キーが、ハッシュ関数を用いて前記ブロックを処理することによって、前記ブロックから入手した1つの値であり、
    1つのブロックが、前記低冗長記憶システムに関連する1つのサブブロックであり、および
    前記インデックス値が、前記低冗長記憶システムにおけるブロックの位置および前記低冗長記憶システムにおけるブロックの存在の表示のいずれか一方を表し、
    前記デジタル探索ツリーは、その葉ノードが、ランダムな満杯分割しきい値に到達したことを決定することによって、複数の新しい葉ノードハッシュテーブルを持つ非葉ノードに置き換えることにより拡張され、前記ハッシュ・テーブルにおけるハッシュ・テーブルの内容は、新しい葉ノードハッシュ・テーブルの中のハッシュ間に分布される、
    コンピュータによる制御方法。
  2. 前記デジタル探索ツリーが、デジタル二分探索ツリーである、請求項1に記載のコンピュータによる制御方法。
  3. 前記デジタル探索ツリーのディジットが、前記キーの連続しているビットに対応する、請求項2に記載のコンピュータによる制御方法。
  4. 各インデックス値がブロックの位置を有する、請求項1に記載のコンピュータによる制御方法。
  5. 前記キーがブロックのハッシュである、請求項1に記載のコンピュータによる制御方法。
  6. 前記ブロックのハッシュの一部が、前記テーブルを索引するために使用される、請求項5に記載のコンピュータによる制御方法。
  7. 前記葉と関連するテーブルがアレイ内に格納される、請求項1に記載のコンピュータによる制御方法。
  8. 前記アレイがメモリ内に位置する、請求項7に記載のコンピュータによる制御方法。
  9. 前記アレイがディスク上に位置する、請求項7に記載のコンピュータによる制御方法。
  10. 前記ツリーのサブツリーの頂部Lレベルがアレイにより置換され、Lは1より大きい整数である、請求項1に記載のコンピュータによる制御方法。
  11. 前記ツリーの頂部Lレベルがアレイにより置換される、請求項10に記載のコンピュータによる制御方法。
  12. 前記ツリーがデジタル二分探索ツリーであり、前記置換アレイが2L要素を有する、請求項10に記載のコンピュータによる制御方法。
  13. 前記置換が、前記サブツリーのLレベルが所定の基準を満たすときに行われる、請求項10に記載のコンピュータによる制御方法。
  14. 前記所定の基準は、前記サブツリーの頂部Lレベルが非葉ノードからなることである、請求項13に記載のコンピュータによる制御方法。
  15. 前記所定の基準は、前記サブツリーの頂部Lレベルが、少なくともTパーセントの非葉ノードを含み、Tが所定のしきい値であることである、請求項13に記載のコンピュータによる制御方法。
  16. テーブルの満杯の程度が所定のしきい値を超えた場合に拡張が行われる、請求項1に記載のコンピュータによる制御方法。
  17. 新しい各葉が、サイズが変化するハッシュ・テーブルと一緒に生成される、請求項1に記載のコンピュータによる制御方法。
  18. 各ハッシュ・テーブルのサイズが、所定の最小値と所定の最大値の間で選択される、請求項17に記載のコンピュータによる制御方法。
  19. 各ハッシュ・テーブルのサイズが、所定の最小値と所定の最大値の間でランダムに選択される、請求項18に記載のコンピュータによる制御方法。
  20. 各サイズの前記決定がランダム構成要素を有する請求項17に記載のコンピュータによる制御方法。
  21. ハッシュ・テーブルが前記ハッシュ・テーブルをメモリ内に読み込み、前記ハッシュ・テーブルを2つのハッシュ・テーブルに分割し、ディスクに前記2つのハッシュ・テーブルを書き込むことにより分割される、請求項1に記載のコンピュータによる制御方法。
  22. 前記元の葉のテーブルが使用する記憶空間が、子孫の葉のうちの1つの葉のテーブルに再割り当てされる請求項1に記載のコンピュータによる制御方法。
  23. 前記テーブルがオーバーフロー・チェーンを使用し、最も長いオーバーフロー・チェーンが所定のしきい値に達した場合に前記テーブルが分割される請求項1に記載のコンピュータによる制御方法。
  24. 前記テーブルがオーバーフロー・チェーンを使用し、所定の長さより長いオーバーフロー・チェーンが横断された場合に前記テーブルが分割され、請求項18に記載のコンピュータによる制御方法。
  25. 前記テーブルが満杯になった場合に、またはキー/値ペアが前記テーブルに追加された場合にいつでも所定の確率Pで前記テーブルが分割される請求項1に記載のコンピュータによる制御方法。
  26. 前記ツリーがメモリ内に保持され、前記葉内のハッシュ・テーブルがディスク上に保持される請求項1に記載のコンピュータによる制御方法。
  27. 前記データ構造に対する複雑な攻撃を防止するために、前記キーが最初に秘密鍵によりハッシュされる請求項1に記載のコンピュータによる制御方法。
  28. データの1つまたは複数のブロックを索引することにより、低冗長記憶システムにデータを格納し、前記低冗長記憶システムに格納されたデータを通信し、または比較するためにデータを索引するデータ処理装置であって、
    前記データのブロックから入手したキーを有するデジタル探索ツリーを含むインデックスをメモリの中に生成し、当該生成に係る前記デジタル探索ツリーの1つの葉が1つのハッシュ・テーブルを有し、前記テーブルが前記葉内に入るキーに対する1つのインデックス値を有し、
    前記キーが、ハッシュ関数を用いて前記ブロックを処理することによって、前記ブロックから入手した1つの値であり、
    1つのブロックが、前記低冗長記憶システムに関連する1つの前記低冗長記憶システムに関連する1つのサブブロックであり、および
    前記インデックス値が、前記低冗長記憶システムにおけるブロックの位置および前記低冗長記憶システムにおけるブロックの存在の表示のいずれか一方を表し、
    ハッシュ・テーブルに対するランダムな満杯分割しきい値に達したことを決定することにより、前記インデックスの葉ノードハッシュ・テーブルは2つまたはそれ以上の葉ノードハッシュ・テーブルに分割される
    データ処理装置。
  29. データの1つまたは複数のブロックを索引することにより、低冗長記憶システムにデータを格納し、前記低冗長記憶システムに格納されたデータを通信し、または比較するためにデータを索引する際に、コンピュータに、 前記データのブロックから入手したキーを有するデジタル探索ツリーを含むインデックスを生成し、当該生成に係る前記デジタル探索ツリーの1つの葉が1つのテーブルを有し、前記テーブルが前記葉内に入るキーに対する1つのインデックス値を有し、
    前記キーが、ハッシュ関数を用いて前記ブロックを処理することによって、前記ブロックから入手した1つの値であり、
    1つのブロックが、前記低冗長記憶システムに関連する1つのサブブロックであり、および
    前記インデックス値が、前記低冗長記憶システムにおけるブロックの位置および前記低冗長記憶システムにおけるブロックの存在の表示のいずれか一方を表し、
    ハッシュ・テーブルに対するランダムな満杯分割しきい値に達したことを決定することにより、前記インデックスの葉ノードハッシュ・テーブルは2つまたはそれ以上の葉ノードハッシュ・テーブルに分割される、
    手順を実行させるためのプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
  30. データの1つまたは複数のブロックを索引することにより、低冗長記憶システムにデータを格納し、前記低冗長記憶システムに格納されたデータを通信し、または比較するためにデータを索引する際に、コンピュータに、
    前記データのブロックから入手したキーを有するデジタル探索ツリーを含むインデックスを生成し、当該生成に係る前記デジタル探索ツリーの1つの葉が1つのテーブルを有し、前記テーブルが前記葉内に入るキーに対する1つのインデックス値を有し、
    前記キーが、ハッシュ関数を用いて前記ブロックを処理することによって、前記ブロックから入手した1つの値であり、
    1つのブロックが、前記低冗長記憶システムに関連する1つのサブブロックであり、および
    前記インデックス値が、前記低冗長記憶システムにおけるブロックの位置および前記低冗長記憶システムにおけるブロックの存在の表示のいずれか一方を表し、
    ハッシュ・テーブルに対するランダムな満杯分割しきい値に達したことを決定することにより、前記インデックスの葉ノードハッシュ・テーブルは2つまたはそれ以上の葉ノードハッシュ・テーブルに分割される
    手順を実行させるためのプログラム。
JP2008500012A 2005-03-11 2006-03-10 低冗長記憶システムで索引を行う方法 Expired - Fee Related JP5043820B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US66096105P 2005-03-11 2005-03-11
US60/660,961 2005-03-11
AU2005901174A AU2005901174A0 (en) 2005-03-11 Method for indexing in a reduced-redundancy system
AU2005901174 2005-03-11
PCT/AU2006/000327 WO2006094366A1 (en) 2005-03-11 2006-03-10 Method for indexing in a reduced-redundancy storage system

Publications (2)

Publication Number Publication Date
JP2008533570A JP2008533570A (ja) 2008-08-21
JP5043820B2 true JP5043820B2 (ja) 2012-10-10

Family

ID=36952889

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008500012A Expired - Fee Related JP5043820B2 (ja) 2005-03-11 2006-03-10 低冗長記憶システムで索引を行う方法

Country Status (3)

Country Link
EP (1) EP1866775B1 (ja)
JP (1) JP5043820B2 (ja)
WO (1) WO2006094366A1 (ja)

Families Citing this family (32)

* 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
US8150851B2 (en) 2007-10-25 2012-04-03 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
US8332404B2 (en) 2007-10-25 2012-12-11 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
WO2009054834A1 (en) 2007-10-25 2009-04-30 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
CN101855619B (zh) 2007-10-25 2017-04-26 慧与发展有限责任合伙企业 数据处理设备和数据处理方法
US8140637B2 (en) 2007-10-25 2012-03-20 Hewlett-Packard Development Company, L.P. Communicating chunks between devices
GB2472520B (en) 2008-04-25 2012-11-21 Hewlett Packard Development Co Data processing apparatus and method of deduplicating data for data backup
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
JP4962483B2 (ja) * 2008-12-19 2012-06-27 日本電気株式会社 情報処理装置
US20110289112A1 (en) * 2009-01-26 2011-11-24 Junpei Kamimura Database system, database management method, database structure, and storage medium
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
US8660994B2 (en) 2010-01-28 2014-02-25 Hewlett-Packard Development Company, L.P. Selective data deduplication
US9628438B2 (en) 2012-04-06 2017-04-18 Exablox Consistent ring namespaces facilitating data storage and organization in network infrastructures
US8868926B2 (en) * 2012-04-06 2014-10-21 Exablox Corporation Cryptographic hash database
WO2014155668A1 (ja) 2013-03-29 2014-10-02 株式会社 東芝 データの重複をハッシュテーブルに基づいて排除するためのストレージシステム、ストレージコントローラ及び方法
US9552382B2 (en) 2013-04-23 2017-01-24 Exablox Corporation Reference counter integrity checking
EP3011428A4 (en) 2013-06-19 2017-02-22 Exablox Corporation Data scrubbing in cluster-based storage systems
US9934242B2 (en) 2013-07-10 2018-04-03 Exablox Corporation Replication of data between mirrored data sites
US10248556B2 (en) 2013-10-16 2019-04-02 Exablox Corporation Forward-only paged data storage management where virtual cursor moves in only one direction from header of a session to data field of the session
US9985829B2 (en) 2013-12-12 2018-05-29 Exablox Corporation Management and provisioning of cloud connected devices
WO2015120071A2 (en) 2014-02-04 2015-08-13 Exablox Corporation Content based organization of file systems
US20170060924A1 (en) 2015-08-26 2017-03-02 Exablox Corporation B-Tree Based Data Model for File Systems
US9846553B2 (en) 2016-05-04 2017-12-19 Exablox Corporation Organization and management of key-value stores
US11120046B2 (en) 2018-05-04 2021-09-14 Microsoft Technology Licensing Llc Data replication in a distributed storage system
US10817197B2 (en) 2018-05-04 2020-10-27 Microsoft Technology Licensing, Llc Data partitioning in a distributed storage system
JP2020119363A (ja) * 2019-01-25 2020-08-06 日本電信電話株式会社 検索装置、および、ハッシュテーブルの作成方法
CN112686633B (zh) * 2020-12-30 2022-07-01 国网浙江省电力有限公司嘉兴供电公司 一种智能拟票方法

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 索引ファイルのインデックス用入出力バッファ方式
JPH06139280A (ja) * 1992-10-29 1994-05-20 Toshiba Corp ファイル管理システム
US5990810A (en) 1995-02-17 1999-11-23 Williams; Ross Neil Method for partitioning a block of data into subblocks and for storing and communcating such subblocks
JP3703874B2 (ja) * 1995-03-17 2005-10-05 富士通株式会社 ファイル管理方法及びファイル管理装置
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
US6704730B2 (en) * 2000-02-18 2004-03-09 Avamar Technologies, Inc. Hash file system and method for use in a commonality factoring system
US6594665B1 (en) * 2000-02-18 2003-07-15 Intel Corporation Storing hashed values of data in media to allow faster searches and comparison of data
US6754799B2 (en) * 2001-05-16 2004-06-22 Microsoft Corporation System and method for indexing and retrieving cached objects
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
EP1866775A4 (en) 2010-10-20
EP1866775B1 (en) 2016-04-20
EP1866775A1 (en) 2007-12-19
JP2008533570A (ja) 2008-08-21
WO2006094366A1 (en) 2006-09-14

Similar Documents

Publication Publication Date Title
JP5043820B2 (ja) 低冗長記憶システムで索引を行う方法
US8356021B2 (en) Method and apparatus for indexing in a reduced-redundancy storage system
Fan et al. Cuckoo filter: Practically better than bloom
KR101467589B1 (ko) 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체
Litwin Linear Hashing: a new tool for file and table addressing.
JP5996088B2 (ja) 暗号ハッシュ・データベース
JP6028567B2 (ja) データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法
JP4975724B2 (ja) 低冗長記憶システム内のサブブロックの存在を検出する方法
CN102985909B (zh) 为良好分格的对象提供高扩展性网络存储的方法和设备
JP2012531674A5 (ja)
JP3992495B2 (ja) トリー構造に基づく機能的メモリ
US8225060B2 (en) Data de-duplication by predicting the locations of sub-blocks within the repository
WO2006094365A1 (en) Method for storing data with reduced redundancy using data clusters
CN101169761A (zh) 大容量缓存实现方法及存储系统
JPH1131096A (ja) データ格納検索方式
KR20170065374A (ko) 버킷 단위의 정렬을 기반으로 하는 해시 충돌 처리 방법
CN106528703A (zh) 一种重复删除的模式切换方法及装置
US20210165808A1 (en) Computer system and method for indexing and retrieval of partially specified type-less semi-infinite information
CN113094336B (zh) 基于Cuckoo哈希的文件系统目录管理方法及系统
JP4768009B2 (ja) データ・クラスタを使用する冗長性の少ないデータを格納する方法
JP6006740B2 (ja) インデックス管理装置
Mullin Tightly controlled linear hashing without separate overflow storage
JP2000181768A (ja) デ―タ格納検索方式
KR102388458B1 (ko) 데이터 키 값 변환 방법 및 장치
Pinkas et al. A simple recursive tree oblivious ram

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

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120321

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120619

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: 20120710

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: 20120712

R150 Certificate of patent or registration of utility model

Ref document number: 5043820

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: 20150720

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees