JP2008516342A - データのランダムに命名したブロック用の記憶システム - Google Patents

データのランダムに命名したブロック用の記憶システム Download PDF

Info

Publication number
JP2008516342A
JP2008516342A JP2007535813A JP2007535813A JP2008516342A JP 2008516342 A JP2008516342 A JP 2008516342A JP 2007535813 A JP2007535813 A JP 2007535813A JP 2007535813 A JP2007535813 A JP 2007535813A JP 2008516342 A JP2008516342 A JP 2008516342A
Authority
JP
Japan
Prior art keywords
index
name
new
record
level 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.)
Granted
Application number
JP2007535813A
Other languages
English (en)
Other versions
JP4932726B2 (ja
Inventor
エイチ. マーゴラス、ノーマン
オルソン、エドウィン
スクラファーニ、マイケル
コーウィン コバーン、ジェイ.
フォートソン、マイケル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Burnside Acquisition LLC
Original Assignee
Burnside Acquisition LLC
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
Application filed by Burnside Acquisition LLC filed Critical Burnside Acquisition LLC
Publication of JP2008516342A publication Critical patent/JP2008516342A/ja
Application granted granted Critical
Publication of JP4932726B2 publication Critical patent/JP4932726B2/ja
Active 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/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9014Indexing; Data structures therefor; Storage structures hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9017Indexing; Data structures therefor; Storage structures using directory or table look-up
    • G06F16/902Indexing; Data structures therefor; Storage structures using directory or table look-up using more than one table in sequence, i.e. systems with three or more layers
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • Y10S707/99934Query formulation, input preparation, or translation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99943Generating database or data structure, e.g. via user interface

Landscapes

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

Abstract

長い全体的にランダムに分布している記録名により大きな一組の記録を索引し、前記一組の記録についてのメンバシップ問合せに応答するのに適している索引を構成するための方法であって、前記一組の記録に新しい記録を追加し、各名前の少なくとも一部が少なくともほぼランダムになっている名前を生成するように設計されたプロセスにより、前記新しい記録に新しい記録名を割り当てること、第1のレベルの索引をチェックすることにより、前記索引内に前記新しい記録名がまだ存在しないと判定すること、前記新しい記録名よりも短い結合記録名を形成するために、前記新しい記録名に前記索引内にすでに存在する記録名情報を結合すること、前記新しい記録を表す新しい第1のレベルの索引エントリを形成するために、前記結合記録名を前記第1のレベルの索引に追加すること、前記一組の記録に第2の新しい記録を追加し、前記第2の新しい記録に、前記新しい記録名とは異なる第2の新しい記録名を割り当てること、前記第2の新しい記録名が前記第1の新しい記録名と異なるものであるかどうかを判定するために、前記第1のレベルの索引が十分な情報を含んでいないと判定すること、前記第2の新しい記録名を表し、前記第2の新しい記録名より短い前記第1のレベルの索引にエントリを追加することを含み、前記第1のレベルの索引が、前記新しい記録名が前記索引に追加されたと結論するのに十分な情報を含んではおらず、前記一組の記録内の異なる各記録が異なる記録名に割り当てられ、前記第1のレベルの索引の少なくとも一部が、記録名に基づいて配列される方法。

Description

本発明は、コンピュータ用の記憶システムに関し、特に、データ・オブジェクトの大きな未構造化収集物を格納するように設計されたシステムに関する。
(関連出願への相互参照)
本出願は、2004年10月6日付けの米国仮特許出願第60/16,653号の優先権を主張する。
現代のファイル・システムの性能は、このファイル・システムが格納するファイル・セットの構造についての仮定に依存する。ファイル・システムは、ランダムに選択した名前またはランダムに選択したパス名を含むファイルの大きな組を格納するのにはあまり適していない。オブジェクト記憶システムは、ファイル・システムに類似しているが、階層的ディレクトリ構造を含んでいない。オブジェクトは、本質的にランダムな方法で命名することができる。膨大な数のランダムに命名したオブジェクトを格納するために、通常のファイル・システムをオブジェクト記憶システムとして使用した場合には、性能が非常に悪くなる。
一組のオブジェクト名が大きく、名前自身が大きい場合には、名前の完全なリストはランダム・アクセス・メモリに入らない。簡単な別の方法は、例えば、ファイルおよび記憶装置技術についての会議の議事録(2002年)記載のSean QuinlanおよびSean Dorwardの「Venti:アーカイブ・ストレージへの新しいアプローチ」(Venti:a new approach to archival storage)に記載されているVenti記憶システムで行われているように、ディスク上でハッシュ・テーブルを実施するという方法である。このアプローチの場合には、ディスク上のオブジェクト自身の位置へのポインタを入手するために、本質的にランダムに選択したディスク位置に少なくとも1回アクセスする必要がある。
ある種のオブジェクト記憶システムは、ブロックを命名するためにデータのブロックの暗号ハッシュを使用する。暗号ハッシュは、任意のサイズの入力から(メッセージ・ダイジェストまたは指紋とも呼ばれる)一定の幅の疑似乱数を決定論的に計算する機能である。例えば、SHA−256暗号ハッシング・アルゴリズムの出力の幅は256ビットである。(国立標準技術研究所、NIST FIPS PUB 180−2、「セキュア・ハッシュ規格」、米国商務省、2002年8月参照)。
Venti記憶システムは、ブロックを命名するためにデータのブロックの暗号ハッシュを使用するオブジェクト記憶システムの一例である。Venti記憶システムにおいては、同じオブジェクト名を有する同じブロックのコピーをだぶって格納するのを避けることにより、記憶スペースを節約している。Margolus他の「データにネットワーク・ストレージを促進するためのデータリポジトリおよび方法」(A Data Repository and Method for Promoting Network Storage of Data)という名称の2002年3月28日付けの米国特許出願第2002/0038296 A1号に、ブロックを命名するために暗号ハッシュを使用する記憶システムのもう1つの例が記載されている。この第2の例は、記憶システム内にこの名前がすでに存在しているのかどうかについての問合せに応答し、存在していない場合には、そのブロックだけを送信することにより、データのハッシュ命名したブロックを格納する際に、帯域幅を節約することができるようにするネットワーク・プロトコルをサポートする。この種のプロトコルをうまくサポートするには、非常に大きな一組のオブジェクから1つのオブジェクトが存在するのかしないのかについての問合せに、効率的にまた迅速に応答することができる記憶システムが必要になる。
これが一組のメンバシップを検出する際の問題である。この問題に対する最も初期の最も重要な貢献の1つは、1970年7月付けのACMの通信掲載のBurton H.Bloomの「許容できるエラーを含むハッシュ・コード化の際のスペース/時間の折り合い」(Space/Time Tradeoffs in Hash Coding with Allowable Errors)からのものである。彼は、後で他の何らかの機構により解かなければならない、少量の偽の肯定的応答を許容することにより、この問題を簡単なものにすることができることを観察した。彼のハッシング技術は、2−rの偽の肯定的な量を入手するために、表示した一組の要素当たり約r(loge)ビットの記憶装置を必要とする。この記憶装置要件は、その一組内の要素の数だけに依存し、要素のサイズには依存しないことに留意されたい。(以後ブルーム・フィルタと呼ぶ)ブルームの技術は、現在広く使用されている。しかし、この技術は、データを索引し、それを発見するための機構は供給しないで、それが存在するかどうかを試験するだけである。
テキストの索引および探索の領域内においては、テキスト記録の大きな収集物に対する索引を効率的に格納するという問題が研究されてきた。使用された1つの技術は、例えば、Witten、MoffatおよびBellの著作内に掲載されているMorgan Kaufmannの「ギガバイトの管理」(Managing Gigabytes)(1999年)に記載されている逆ファイル索引がある。この技術は、索引内の記録番号をソートし、記録番号のリスト内の差だけを表示することを含む。しかし、この技術は、長いハッシュをベースとする名前の場合のように、記録番号の疎スペースを含む索引内のスペースの有意な部分を節約しない。
ランダムに命名したオブジェクトを索引するという問題の他に、効率的にアクセスしまた修正するために、ディスク上のその記憶装置を組織化するという問題もある。Venti記憶システムは、追加ログ構造を使用し、ディスク上で格納している項目を変更したり、削除したりまたは再配置したりはしない。Ventiは、アーカイブ・ストレージ用に設計されたものであるが、法の下である期間保持しなければならないが、その後で削除することができる重要なデータをアーカイブする際に、削除機能を持たないことはかなり大きな欠点である。
本発明は、通常、長い全体的にランダムに分布している記録名により識別された大きな一組の記録を索引するのに適している索引を形成し、上記一組の記録についてのメンバシップ問合せに応答するための方法を特徴とする。この方法は、上記一組の記録に新しい記録を追加し、各名前の少なくとも一部が少なくともほぼランダムになっている名前を生成するように設計されているプロセスにより、新しい記録に新しい記録名を割り当てること、第1のレベルの索引をチェックすることにより、索引内にこの新しい記録名がまだ存在しないと判定すること、新しい記録名よりも短い結合記録名を形成するために、索引内にすでに存在する記録名情報に新しい記録名を結合すること、新しい記録を表示する新しい第1のレベルの索引エントリを形成するために、第1のレベルの索引に結合記録名を追加すること、上記一組の記録に第2の新しい記録を追加し、第2の新しい記録に、新しい記録名とは異なる第2の新しい記録名を割り当てること、第2の新しい記録名が第1の新しい記録名と異なるものであるかどうかを判定するために、第1のレベルの索引が十分な情報を含んでいないと判定すること、第2の新しい記録名を表示し、第2の新しい記録名より短い第1のレベルの索引にエントリを追加することを含み、第1のレベルの索引は、新しい記録名が索引に追加されたと結論するのに十分な情報を含んではおらず、上記一組の記録内の異なる各記録に異なる記録名が割り当てられ、第1のレベルの索引の少なくとも一部が、記録名に基づいて配列される。
好ましい実施態様の場合には、下記の機能のうちの1つまたは複数を含むことができる。一組の記録内の異なる各記録は、第1のレベルの索引内に異なるエントリを有することができる。新しい記録名を結合するために使用するプロセスは、索引内にすでに含まれている記録名からそれを区別するのに十分な、新しい記録名から入手した情報の一部を決定することを含むことができる。本発明は、さらに、新しいエントリを、完全な新しい記録名またはそれを再構成するのに十分な情報を含む第2のレベルの索引に追加すること、最初に、問合せを受けた記録名が新しい第1のレベルの索引エントリにより表示されていると判定し、次に、問合せを受けた記録名が新しい第2のレベルの索引エントリにより表示されていると判定することにより、問合せを受けた記録名が索引内にすでに存在していると判定することを含むことができる。第1のレベルの索引は、RAM内に格納することができ、第2のレベルの索引はディスク上に格納することができる。新しい記録名から入手した情報の一部は、新しい記録名を表す2進値のビットのあるサブセットを除去することにより入手することができる。結合することは、2つの記録名の少なくとも一部の算術差を計算すること、または2つの記録名の少なくとも一部を含む、何か他の算術演算または有限体算術演算を計算することを含むことができる。新しい記録名を割り当てるプロセスは、疑似乱数を生成すること、または記録自身の少なくとも一部の暗号ハッシュを計算すること、または一意であることが分かっている記録識別情報のある組合せの暗号ハッシュを計算することを含むことができる。索引の一部は、新しい記録を追加した時間を含むある時間内に、索引に記録名が追加された一組の記録を表すことができ、この一部は、新しい記録についての追加情報を入手するために、1つの単位として検索することができ、上記時間内に追加した他の記録についての情報はRAM内にキャッシュすることができる。記録または索引情報は、ディスク上のシーケンシャルなログ構造内に格納することができ、シーケンシャルなログ構造のセグメントを含む一組の部材のビット毎のXORを記録する余分な情報を、読むことができないセクタをディスク上で再構成することができるように、ディスクに書き込むことができる。可能な記録名のスペースは、一組のばらばらのサブスペースに分割することができ、各サブスペースは、索引の複数のインスタンスのうちの1つまたは複数と関連づけることができる。同じサブスペースに関連する異なる索引には、記録名の一部に基づいて異なる役割を割り当てることができる。新しい記録は、内容のブロックであってもよいし、新しい記録名は、内容のブロックの暗号ハッシュであってもよいし、内容のブロックを反復して送信したり、反復して格納するのを避けるために、索引に対して問合せを行うこともできる。新しい記録名は2回索引に追加することができ、新しい記録名に関連する参照カウントは、新しい記録が2回追加されたことを示すことができる。注釈を、新しい記録に関連する情報または追加情報を発見することができる場所の表示を含む第1のレベルの索引内の新しいエントリに取り付けることもできる。新しいエントリに取り付けられた注釈内に格納している情報は、後で他の場所に表示することもできるし、第1のレベルの索引内のエントリから除去することもできる。索引の少なくとも一部は、記録が索引に追加された時点に基づいて組織化することができる。それを索引内にすでに含まれている記録名から区別するのに十分な新しい記録名から入手した情報の一部だけを、第1のレベルの索引内に表示することができる。索引内に含まれている記録名の長さの合計は、第1のレベルの索引内のエントリの長さの合計よりも長くてもよい。第1のレベルの索引は、すべての可能な記録名間の一定のおよび所定の順序に基づいてばらばらのセグメントに分割することができる。記録または索引情報は、ディスク上のシーケンシャルなログ構造内に格納することができ、入手装置プログラム(reaper program)は、情報のうちのあるものを除去し、セグメントを再使用できるように解放して、ディスク上の他の場所にこのログ構造のセグメントをコピーすることができる。新しい記録に関連する情報は、セグメント内に収容することができ、新しい記録に関連する参照カウントはゼロに低減することができ、入手装置プログラムは、セグメントを再使用のために解放する前に、新しい記録に関連する情報をコピーすることはできない。記録または索引情報は、ディスク上のシーケンシャルなログ構造内に格納することができ、このログ構造内のバイトの範囲を、ある時間の間変えることができないものとしてマークすることができる。この変えることができない状態は、データ・ストアの基礎をなす記憶リソースにより強制される。索引がその設計容量を超えて書き込まれない限りは、第1のレベルの索引だけをチェックしてランダムに選択した記録名が索引内に含まれていないと判定することができる可能性は98%以上である。索引の容量は、使用することができる記憶スペースによってだけ制限することができる。ある時間の間の記録名が索引に追加された一組の記録は、すべて記憶デバイスの局所化した領域内に格納することができ、一組の記録を表す索引の一部はこの一組内に格納することができる。新しい第1のレベルの索引エントリはディスクに書き込むことができ、RAMから削除することができ、問合せを受けた記録名が索引内にすでに含まれていると判定することは、ディスク上の新しい第1のレベルの索引エントリにアクセスすることを含むことができる。新しいエントリに取り付けられている注釈内の情報は、ディスク上に表示することができ、注釈から除去することができる。新しい第1のレベルの索引エントリは、ディスク上のデータの位置に関する情報を含むことはできない。第1のレベルの索引エントリは、エントリが記録名情報以外の情報を含んでいるかどうかについての表示を含むことができる。コピー・プロセスは、第1のレベルの索引エントリからディスクに情報をコピーし、第1のレベルの索引から情報を除去する索引に適用することができる。注釈は、近似的なディスクの位置を含む第1のレベルの索引内の新しいエントリに取り付けることができる。注釈は、新しい記録に関連する近似的なディスクの位置を含むディスク上に格納している第2のレベルの索引内の新しいエントリに取り付けることができる。複数の参照カウントは、新しい記録名に関連することができ、この場合、複数の参照カウントの合計は、記録が索引に追加された全回数を反映している。新しい記録名に関連する参照カウントは、ディスク上に参照カウント構成要素を有することができ、第1のレベルの索引内に参照カウント構成要素を有することができ、新しい記録に属する参照カウント構成要素の合計は、新しい記録名が索引に追加された回数を反映することができる。入手装置プログラムは、ディスク上の古い位置からディスク上の新しい位置に記録または索引データをコピーし、コピーからある情報を削除することができ、入手装置プログラムは、少なくとも削除したデータを分からなくし、読めなくするために、古い位置にデータのパターンを上書きすることができる。入手装置プログラムは、ソース記憶デバイス上のソース位置から宛先記憶デバイス上の宛先位置に記録または索引データをコピーし、コピーからある情報を除去し、ソース位置に自由スペースのマークを付けることができる。この場合、宛先記憶デバイスの選択は、コピーしたデータが次にアクセスまたは変更される時点の予測に基づいて行うことができる。新しい記録名に関連する第1のレベルの索引のセグメントは、一定のサイズおよび位置を有することができる。新しい記録名に関連する第1のレベルの索引のセグメントは、可変サイズまたは位置を有することができる。第1のレベルの索引の複数のセグメントは、アレイ構造内に格納することができ、アレイ構造内のある位置に対するポインタは、新しい記録名に関連するセグメントのスタートを指定することができる。
他の態様においては、本発明は、長い全体的にランダムに分布している記録名により識別された大きな一組の記録を索引するのに適している索引を形成し、上記セットについてのメンバシップ問合せに応答するための方法を特徴とする。この方法は、上記組に新しい記録を追加し、各名前の少なくとも一部が少なくともほぼランダムになっている名前を生成するように設計されたプロセスにより新しい記録に新しい記録名を割り当てること、すでに索引に追加された記録の完全な記録名を再構成するのに十分な情報を含んでいない第1のレベルの索引をチェックすることにより、索引内にこの新しい記録名が存在しないと判定すること、新しい記録名より短いが、すでに索引内に含まれている記録名からそれを区別するのに十分な新しい省略名を形成するために新しい記録名を短縮すること、新しい記録を表示する新しい第1のレベルの索引エントリを形成するために、短縮記録名の表示を第1のレベルの索引に追加すること、一組の記録に第2の新しい記録を追加し、第2の新しい記録に新しい記録名とは異なる第2の新しい記録名を割り当てること、第1のレベルの索引が、第2の新しい記録名が第1の新しい記録名と異なっているのかどうかを判定するための十分な情報を含んでいないと判定すること、あるエントリを、第2の新しい記録名を表示し、第2の新しい記録名より短い第1のレベルの索引に追加することを含む。その場合、上記組内の各異なる記録には異なる記録名が割り当てられ、その場合、第1のレベルの索引が短縮した記録名に基づいて配列され、第1のレベルの索引のセグメントがその中に含まれる短縮した記録名の長さの合計より短いコンパクトな形内に格納される。
好ましい実施態様の場合には、下記の特徴のうちの1つまたは複数を含むことができる。本発明は、さらに、新しいエントリを、完全な新しい記録名またはそれを再構成するのに十分な情報を含む第2のレベルの索引に追加すること、最初に、問合せを受けた記録名が新しい第1のレベルの索引エントリにより表示されていると判定し、次に、問合せを受けた記録名が新しい第2のレベルの索引エントリにより表示されていると判定することにより、問合せを受けた記録名が索引内にすでに含まれていると判定することを含むことができる。この場合、その組内の異なる各記録は、第1のレベルの索引内に異なるエントリを有する。
本発明の他の特徴および利点は、図面、詳細な説明および特許請求の範囲を読めば理解することができるだろう。
本発明は、本明細書には記載しきれない種々様々な方法で実施することができる。現時点で好適ないくつかの可能な実施態様について以下に説明する。しかし、これらは本発明の実施態様の説明であって、本発明そのものの説明ではない。本発明は、この節に記載する詳細な実施態様に限定されるものではなく、特許請求の範囲内に広義に記述してある。
始めに
この説明においては、ブロック名という用語は、任意に割り当てることができる内容のブロックの名前、またはブロック内容の暗号ハッシュに基づく名前をいつでも意味する。
すべてのブロック名が、ブロック内容(例えば、SHA−256)の暗号ハッシュに基づいている場合には、ブロック名は一意のものありランダムに分布していることが統計的に保証される。また、すべてのブロック名が内容のブロックに関連するある一意の識別子のハッシュに基づいている場合には、この同じ保証を行うことができる。例えば、ファイル・システム用の一意の識別子と一緒のファイルパス名。両方のタイプのブロック名を使用する場合には、ハッシュしたデータが2つのタイプの名前を構成する際に決して同じにならないように、ハッシュするデータ(内容または識別子)にブロック・タイプをプリペンドすることができる。内容をベースとする名前のブロック・タイプが一意の識別子をベースとする名前のブロック・タイプと異なっている限りは、2つのタイプの一対の名前が偶然一致(衝突)する可能性は、1つのタイプまたは他のタイプの一対の名前の場合程度である。ブロック名は、本明細書に定義するように、一意のブロック識別子であることが統計的に保証される。
米国特許出願第2002/0038296 A1号および関連する出願に記載されているデータ・リポジトリは、それぞれにブロック名アドレス・スペースの一部が割り当てられる記憶装置サーバの分散集合体として実施することができる。各記憶装置サーバには、ブロック名値の一組の範囲が割り当てられる。各記憶装置サーバ内には、それぞれが物理的ディスク記憶装置デバイスに関連する1つまたは複数のデータ・ストアが、最終的に、データの多数の疑似ランダムに命名したブロックを格納し、索引する。
データ・ストアの索引
データ・リポジトリの最初の原型は、ブロック名を通常のLinux ext2ファイル・システム内に埋め込まれるデータ・ストアを使用する。ブロック名およびパス名間のマッピングを調整した後でも、データ・ストア内の名前を付けたブロックの数が数百万になると、格納している各ブロックにアクセスするには、平均して数十回のディスク探索が行われる。所与のブロック名がすでに使用されているのかどうかを単に問合せる問題は同様に非効率的である。内容の名前のブロックの帯域幅および記憶装置の節減はこの問合せに依存している。
簡単で高速な索引スキームを実施するための周知の他の方法は、すべての索引情報をRAM内に保持する。256ビット・ハッシュをベースとするブロック名があり、記憶装置サーバ当たり無数の名前が付いているブロックを格納し、索引することが予想される場合には、最初このことは実行不可能のように思われる。図1は、これを実行可能にする機構を示す。この機構は、高品質の大きな一組の疑似乱数の予測可能な性質を利用する。問題を簡単にするために、残りのビットがランダムであると仮定することができるようにする目的で、データ・ストアにブロック名の範囲を割り当てるために、ブロック名の最下位のビットのある数をベースとするアドレス範囲を使用するものと仮定する。
図1に示すように、索引はソートした順序に維持される。索引するN数の最大値(例えば、数億)、およびサイズLの名前値(例えば、2256)の範囲の場合には、ソートしたリスト内の隣接する値間の平均距離はL/Nである。このソートしたリスト内の隣接する値間の差の分布は指数的である。この距離が平均のx倍以上になる可能性は、大きなNの制限内でexp(−x)である。このことは、平均距離が1/Nである場合のリスト内の値を2進分数であるとみなし、x/Nより大きい差の確率が(1−x/N)であることを観察することにより理解することができるだろう。
それ故、例えば、ソートしたリスト内の2つの隣接する値間の距離が、平均の4倍になる可能性は、約1.8%である。このことは、差の第1の(logN−2)ビットがすべてゼロになる可能性は、98%以上であることを意味する。隣接する値の差(デルタ)が、ソートしたリスト内のもとの値の正しい位置に格納される場合には、同じ情報が表示されるが、ほとんどすべての場合、差の第1の(logN−2)ビットは表示する必要がない。しかし、このことは、それ自身有意なスペースの節約にならない。何故ならNはLより遥かに小さいからである。
図1に示すように、この実施態様の場合には、ソートしたリスト内のブロック名は、デルタを計算する前に切り捨てられる。(Lより小さい)2つの値Mのベキが選択され、各ブロック名に対して第1のlogMビット以外のすべてが除去される(すなわち、値の範囲が小さくなって、LにではなくMになる)。所与の切り捨てたブロック名が他のある切り捨てたブロック名と衝突(すなわち、一致)する確率は、N/Mより小さい(衝突するMからのNの選択より小さくなる)。このことは、1つの全ブロック名と一意に関連しない切り捨てたブロック名の一部は、N/2Mより小さいことを意味する(何故なら、両方の衝突する名前が1つの名前になるからである)。
それ故、例えば、M=32Nである場合には、衝突を表示する切り捨てた値の一部は約1.6%であり、切り捨てた値は、logNより5ビット長いだけである。大きなデルタおよび小さなデルタのありそうもないことについてのこれら2つの観察を総合すると(図2参照)、各ブロック名の一意の最初のセグメントを表示するために、7ビットの差より大きいものを格納しなければならない確率は約3.4%であり、第1の(logN−2)ビットのどれかを表示する必要がある可能性は1.8%、(logN+5)を超えるビットのうちのどれかを表示しなければならない可能性は1.6%であることが分かる。これら3.4%の場合内に少量の余分な情報を内蔵させることにより、ブロック名当たり1バイトより小さい平均を使用する各ブロック名の一意の最初のセグメントを表示することができる。これによりSHA−256をベースとするブロック名に対する32の要因のスペースが少なくなる。
ブロック名当たりに必要なスペースの大きさは、もとのブロック名のサイズにも、索引内の名前の数にも依存しない。ブロック名の切捨て位置(すなわち、Mの値)はNの値に依存し、データが格納するエントリの最大数は、索引するように設計されている。しかし、この数はいつでも知る必要がある。何故なら、索引に対する最大メモリ要件は、索引しているブロックの最大数に比例するからである。
索引の問合せ
提案のスキームの場合には、ほとんどすべてのブロック名に対して、名前の最初のlogMビットだけが索引リスト内に表示される。このことは、索引がN個のエントリのその最大の大きさである場合には、ランダムに選択した名前が索引リスト内の現在のエントリと衝突する可能性は、約N/Mであることを意味する。これは、索引リスト内の一致する問合せを受けた名前は、全ブロック名のリスト内には実際には存在しない可能性である。これは、メンバシップ試験装置としての索引リストの偽の正の割合である。M=32Nである場合には、これは約3%である。M=64N(ビットがもう1つ多い)の場合には、これは約1.6%である。索引リストが、問合せた項目が全リスト内に含まれていないと間違って表示する可能性はない。
これは、2−rの偽の正の割合を達成するために索引した項目当たりrlogeビットを必要とする発明の背景のところで説明したブルーム・フィルタ技術にうまく対応する。索引リスト技術は、項目当たりr+3ビットより少ないビットを使用し、ブルーム・フィルタとは異なり索引した各項目に対して個々のエントリを含む全索引を供給する。
問合せを行った名前がリスト内のエントリを含むlogMビットと一致する場合には、その名前がすべてlogLビットと一致することを確認するために、もっと決定的な情報にアクセスしなければならない。このもっと決定的な情報はディスク上に維持することができ、索引の第2のレベルとなる。索引の第2のレベルは、例えば、単にディスク上の完全なハッシュ・テーブルであってもよい。すべての曖昧さを解消するには、ディスク上の第2のレベル索引に1回アクセスするだけで十分である。RAM内の第1のレベル索引は、問合せを受けた名前が第1のレベルの索引エントリと一致するが、実際には索引内に含まれていないことを発見する確率が低くなるように構成される。良い近似を行うために、(RAM)内の第1のレベル索引は、ディスクにアクセスしないでどの名前が存在しないのかを示す。存在する名前に関する問合せの場合には、ディスクに1回アクセスするだけでよい。このアプローチの場合には、すでに格納しているブロックを送信するのを避けることにより帯域幅を節約するために、記憶システム内の内容名のブロックを収容する場合に、記憶装置クライアントはいつでも問合せを行うことができる。また、これにより、前に格納した内容名のブロックを再度収容する場合に記憶スペースを効率的に共有することができる。
索引へのエントリの追加
データ・ストアに新しい名前が付いているブロックを書き込む場合には、データ・ストア内にその名前がすでに存在するかどうかをチェックするために、索引に対して問合せが行われる。この問合せの間に、すべての衝突しているエントリのブロック名が検索される。衝突している場合には、古いエントリおよび新しいエントリ両方の追加ビットが、第1のレベルの索引に追加され、その結果、両方のエントリは、全ブロック名の一意の最初のセグメントを表示する。
名前が付いているブロックの検索
各名前が付いているブロックは、第1のレベルの索引内に個々のエントリを有しているので、各エントリに簡単にディスク上のブロックの位置を付けることができる。このことは各エントリに数バイトを追加することになるが、1回ディスクにアクセスするだけで、名前が付いているブロックをいつでも検索することができる。このディスク・アクセスは、ブロック、およびそれが問合せを行っているブロックであるかどうかを判定するためにテストされる全ブロック名(またはそれを再構成するのに十分な情報)の両方を検索する。別の方法としては、衝突の場合の曖昧さを解消するために使用する第2のレベルの索引は、ディスク上の簡単なハッシュ・テーブルであってもよいし、すべての検索は、全ブロック名およびブロック位置の両方を発見するためのこのテーブルへのアクセス、その後での名前が付いているブロック自身の検索を含むことができる。この第2のアプローチは、第1のレベルの索引エントリへデータを追加しないが、ブロックを検索するために2回のディスク・アクセスをいつでも行う。各第1のレベルの索引エントリに短い注釈を追加する中間スキームが現在よく使用されている。この中間スキームは、名前が付いているブロックの書込み順のパターンが、検索順にうまく反映されている場合には、(ブロック位置が第1のレベルの索引内に置かれる)全注釈スキームも実行する。また、索引しているデータ・ブロックに近く、ほぼ同時に書き込まれる第2のレベルの索引情報のセグメントを格納することにより、データ・ブロックの格納および検索の両方をより効率的に行うことができる。
データ・ストア
本明細書に開示するデータ・ストアは、始めにのところで概略説明したアプローチのある可能な実施態様に過ぎない。他の実施態様の節内でいくつかの可能な別の方法および強化について説明する。また、本発明が使用する索引技術は広く適用することができる。
図3は、通常RAMが内蔵している第1のレベルの索引の構造を示す。第1のレベルの索引は、セグメントに分割される。この場合、各セグメントはブロック名アドレス・スペースの一部に対応する。この図の場合には、このことはブロック名の最初の部分をセグメント番号として使用することにより行われる。好ましい実施態様の場合には、個々の一定の大きさのアレイ構造は、各セグメントに関連する。最初に、少数のセグメントが割り当てられ、セグメントが満杯になるといつでもそのアドレス範囲が半分に切断され、その内容の一部は範囲の他の半分を担当する新しく割り当てられたセグメントに移動する。対応するセグメント・アレイを識別するために必要なブロック名の最初のビットの数は、変えることができる。
第1のレベルの索引の各セグメントは、表示される切り捨てたブロック名により決まるソートした順序内に維持されているエントリのリストを含む。エントリは2つの部分、すなわち、あるエントリと前のエントリとの間の差を記録するデルタ値と、索引エントリに対応する名前が付いているブロックに関する情報を記録する注釈を有する。各索引エントリは、1つのブロックに対応し、各ブロックは1つの索引エントリを有する。
デルタのコード化
図4は、好ましい実施態様で使用するバイト指向索引エントリ・フォーマットである。このフォーマットは、1バイトのデルタ値および2バイトの注釈を使用する。デルタの溢れ(2−1のデルタにより表示する大きすぎる差)がある場合には、情報の余分な2つのバイトが追加される。これにより、8の余分な(高次)ビットを含む切り捨てた値を表示することができる。(216−1のデルタにより表示されるように)これで十分でない場合には、もっと多くのバイトが追加される等する。このコード化は、索引が最大の大きさである場合には、平均、エントリ当たり約0.3個の余分なビットを使用する。
衝突(デルタがゼロの場合)は、一対の衝突ブロック名のうちの1つの全表示を含む補助テーブルを使用することにより最も簡単に処理される。このアプローチは、索引が最大の大きさである場合には、平均、エントリ当たり約1.9個の余分なビットを必要とする。補助テーブルは、いつでも任意の索引参照の場合最初にチェックされる。
好ましい実施態様の場合には、衝突を処理するためにもっとコンパクトな表示が使用される。衝突エントリを明確にするために、いくつかの余分なビットが、第1のレベルの索引内のエントリに追加される。図5はこのアプローチを示す。衝突記録の始まりを表示するために0のデルタが使用される。この後に衝突したlogMビットの切り捨てた値をコード化するデルタが続く。次に、衝突するブロック名のための個々のエントリが続くが、各エントリは、切捨ておよび通常のエントリ注釈のもとの位置を越えた次のいくつかのビットを含む。最後の衝突エントリにフラッグが立てられ、その後のエントリは通常のエントリである。この場合、先行するデルタに関連するデルタを含む。2つ以上の次のビット値が同じである場合には、衝突記録の追加のレベルが定義されるが(図示せず)、共通のステムを超える異なる連続が再度コード化される。このコード化が使用する余分なビットの平均数は、索引が最大の大きさである場合、エントリ当たり約0.125ビットである。
注釈のコード化
図4は、索引の注釈、すなわち、索引エントリに対応する名前が付いているブロックに関する情報をコード化するためのバイト指向フォーマットである。好ましい実施態様の場合には、第1のレベルの索引エントリは、いつでも数バイトの長さの整数である。もちろん、この制限は便宜上のものである。
図4の索引フォーマットの場合には、大部分の索引エントリの長さは3バイトである。このフォーマットは、索引付きブロックを含むディスク上の第2のレベルの索引の最高8Kセグメントのうちの1つと関連する年代番号の13ビットを含む。各セグメントは、年代索引と呼ばれ、それが索引する名前が付いているブロック付近のディスク上のある位置に格納される。年代索引は、図6のフォーマットを含むエントリのリストからなる(全ブロック名、ブロック・タイプ、およびディスク上のブロックの相対的位置)。
注釈は、また「参照カウント」および(図7のようにコード化された)「リース」を追跡するために使用する3ビットを含む。内容名が付いているブロックは、もっと大きなオブジェクトの構成要素として共有することができる。データ・ストアは、所与のブロックを参照するすべてのもっと大きなオブジェクトが削除されたかどうかをチェックするために、参照カウントを継続的に追跡するので、共有ブロック自身を削除することができる。データ・ストアのクライアントは、内容名のブロックに関連する参照カウントを増減する時間をデータ・ストアにはっきりと通知する。大部分の内容名のブロックは、0または1の参照カウントを有する。何故なら、大部分のブロックは共有されていないからである。参照カウントがもっと大きい場合には、この情報を表示することができるように、索引エントリの注釈に余分のビットが追加される。
リースは、任意のもっと大きな構造内にまだ内蔵されていない、それ故ゼロの参照カウントを有する内容名のブロックのために役に立つ。リースは、使用されていないために削除の対象になる前に、新しく収容したブロックが少なくとも24時間保持されることを保証するために使用される。内容名のブロックを収容する場合には、新しいリースが与えられる。24時間毎に、背景プロセスは、すべての新しいリースを古いリースに変え、すべての古いリースを非リースに変える。リースおよびゼロの参照カウントを含んでいない内容名のブロックは、データ・ストアにより削除することができ、そのスペースは再生される。
オンディスク・フォーマット
図8は、データ・ストアが使用する論理的ディスク・フォーマットである。このフォーマットは、記憶装置内のデータのランダムに命名したブロックの索引および検索を容易にするために設計される。
現代のファイル・システムの場合には、おなじディレクトリ内に格納している項目は、異なるディレクトリ内のファイルよりも一緒にアクセスされる可能性が高いという事実を利用している。これにより、ファイル・システムは、最近アクセスしたファイルに関するディレクトリ情報をキャッシュすることによりディスクへのアクセスを最適化することができ、それ故、格納しているデータの位置を発見するのに必要なディスク活動の量が低減する。
データのランダムに命名したブロックを含むデータ・ストアにおいては、どのブロックが一緒にアクセスされる可能性が高いのかについてのヒントを供給するために使用することができるディレクトリ構造が存在しない。別のヒントは、一時的な位置を使用することができる。ほぼ同時に書き込まれるデータのブロックは、ほぼ同時に読み出される可能性が高い。
このことは、データ・ストア用のオンディスク・フォーマットは、追加ログの構造を有していなければならないことを示唆している。新しい情報は、前に書き込まれた最新情報の直後に書き込まれる。情報索引のためのセグメントは、間隔を置いてこのログ内に挿入される。この構造を使用することにより、高速で書込みを行うことができる。何故なら、すべてのデータが同じ位置に書き込まれるからである(それ故、ディスク探索を行わないですむからである)。この構造は、ディスク上に相互に接近してほぼ同じ時間に書き込まれたデータを維持する。また、この構造は、ほぼ同時に書き込まれた情報を索引するための自然な方法を供給する。回収を容易にするために取り付けられている余分な情報を含むジャーナル・フレームとしてすべてのデータを書き込むことにより、またオンディスク・ログの構造を一定なものにすることにより、システムを故障からもっと容易に、もっと高い信頼性で回復することができる。
図8は、データ・ストアの好ましい実施態様が使用するディスク構造である。情報を索引するセグメントは、図の場合はそれぞれ64MBであるディスク上の予測できる一定の間隔を有する位置からスタートする。これにより、任意の格納している情報の助けを借りなくても、いつでも索引を発見することができる。1つの索引セグメントの終わりから次の索引セグメントの始まりまでのスペースは、名前が付いているデータのブロックおよび他の永続性の情報を格納するために使用される。そこに格納しているデータはすべてある時間内に書き込まれたものであるという事実を反映するために、記憶スペースのセグメントは年代と呼ばれ、索引セグメントは年代索引と呼ばれる。
年代索引は、すでに説明した第2のレベルの索引のセグメントである。これらの年代索引は、ファイル・システム内でディレクトリが行う役割と類似の役割を行う。ある年代からある名前が付いているブロックがアクセスされると、その年代索引がチェックされ、キャッシュされる。その索引がRAM内に残っている場合に同じ年代から他の名前が付いているブロックが読み出されると、キャッシュした年代索引からディスク上のそのすべての位置を知ることができるので、これらブロックすべては、名前が付いているブロック当たり1回のディスク・アクセスで読み出される。1つの年代内のブロックは相互に接近しているので、それらの任意のサブセットには迅速にほとんど捜索を行わないでアクセスすることができる。
ハード・ディスクまたはRAIDアレイに対応するデータ・ストアを有することには1つの利点がある。何故なら、書込み動作を行うことができるディスクまたはアレイ当たりせいぜい1つの前部境界しかないからである。注釈内の年代索引数は一定の大きさなので、記憶デバイスの容量が大きくなると、年代数をコード化するために使用するビットに数または年代の大きさも大きくしなければならない。
ジャーナル・フレーム
クラッシュからの回復を容易にするために、ディスクに書き込まれている各項目は、ジャーナル・フレーム内に入っている。図9は、好ましい実施態様で使用しているジャーナル・フレーム構造の一例である。ジャーナル・フレームは、各フレームのスタートをマークするために使用する一定の値からスタートする。ディスクがフォーマットされる度にそれをマークするために異なる疑似乱数の値が選択される。格納している記録のスタートを示すのを助けるこのような一定の値は、「マジック番号」と呼ばれる場合がある。この後には、すべてのフレームが同じ年代に属することを確認する仮想年代数が続く(仮想年代数は、実際の年代数より多くの他のビットを有する)。この後に、どのジャーナル・フレームも喪失していないことの保証を容易にするシーケンス数、どのタイプの情報がジャーナルされたのかを反映するフレーム・タイプが続き、その後に現在保護されている情報のペイロードの長さ(名前が付いているブロックの長さは可変であり、最高64KBである)が続き、その後にペイロード自身が続く。ジャーナル・フレームの最後には32ビットのチェックサムが位置していて、データのエラーを容易に検出することができる。
ペイロードが内容名のブロックである場合には、ペイロードは、(第1のレベルの索引内のエントリ注釈から入手した)それが最後に書き込まれた時点でのブロックに対する参照カウントのような追加情報を含む。ログにシーケンシャルに書き込まれるので、可変長である場合でも、ジャーナル・フレームの間のディスク上にスペースを残しておく必要は全然ない。唯一の例外はある年代の終わりの部分である。その場合、あるスペースが未使用のままになるので、(現在の年代に対する年代索引である)次の年代の第1のジャーナル・フレームはいつでも64MBの境界のところからスタートする。
クラッシュ回復シナリオの場合には、年代索引は冗長のものになっている。何故なら、これら年代索引は、他のジャーナル・フレームから再生することができるからである。RAM内に格納している第1のレベルの索引も冗長なものである。何故なら、この索引はジャーナル内の情報から再生することができるからである。
入手装置
情報がディスクの追加ログの頭に不明確に追加された場合には、最終的にディスクは満杯になる。入手装置(reaper)は、背景タスクとして稼働し、ディスク上の解放できるスペースを再生し、保持データをコンパクトにするプログラムである。
入手装置は、ディスクを円形のバッファとして処理する。この場合、ディスク上の最高のアドレスは最低のアドレスに隣接している。ジャーナルが使用するスペースの少なくとも1%が、(オブジェクトが削除されたために)解放できる場合にはいつでも、(同様に何か他の状況の下で)入手装置は稼働する。
入手装置は、まだ処理されていない最も古い年代のところからスタートし、その年代内のすべてのジャーナル・フレームをチェックする。入手装置は、各ジャーナル・フレームのチェックサムを確認し、不良のフレームを発見した場合には、回復手順をスタートする。依然として関連を有するすべてのペイロードは頭のところの新しいジャーナル・フレームにコピーされ、第1のレベルの索引内の対応する年代数は、新しい位置をポイントするように更新される。依然として関連を有さないすべてのペイロードは排除される。第1のレベルの索引によりポイントされていない名前が付いているブロックを含んでいるフレームを発見した場合には、もはや関連を有するものとは見なされず、除去される。これが名前が付いているブロックの修正方法である。頭のところのその年代に置換ブロックが書き込まれ、その第1のレベルの索引エントリが新しい位置をポイントする。入手装置は、古いバージョンを横切る時のこの古いバージョンを一掃する。年代が入手されるそのスペースは、利用できる自由なスペースに追加される。
図10は、入手装置の参照カウントによる処理方法を示す。「前に位置する」図面の場合には、ブロックAは、内容名のブロックであり、ジャーナルの最も古い部分の近くに位置する。ブロックAが書き込まれたので、その参照カウントは2回変更され、これらの変更を記録するために、ジャーナル・フレームがディスクに書き込まれている。(RAM内の)第1のレベルの索引内の参照カウントは、これらの増減要求を受信した場合に更新され、現在の参照カウントになっている。
入手装置は、新しいジャーナル・フレーム内の現在の参照カウントを含むブロックAを、頭のところの年代にコピーする。ブロックAの古いコピーは、それを含む年代が入手するのを終了するや否やディスク上の自由スペースに追加することができる。入手される前に起こったブロックAの参照カウント内の変更の記録は、関連性を持たず、ブロックAの新しいコピーと一緒に記録した参照カウントは、更新され、クラッシュが起こった場合、第1のレベルの索引を再構成するために使用することができる。入手装置がそれらを含む年代を処理すると、図の2つの参照カウントのジャーナル・フレームが除去され、その時点でそのスペースが解放される。
多重データ・ストア
すでに説明したように、データ・リポジトリは、それぞれが多数のデータ・ストアを備える多数の記憶装置サーバを備えることができる。ブロック名の最下位ビットのうちのいくつかは、異なるデータ・ストアに割り当てられたアドレス範囲を指定するために使用することができる。この目的のためのアドレス範囲を使用すると、スケーラブルな方法でデータ・ストア間に索引問題を分散することができるという利点がある。
ブロック名はランダムに分布しているので、各データ・ストアに割り当てられた全記憶容量の一部は、それに割り当てられた全アドレス範囲の全量に非常に密接に比例する。同じアドレス範囲を、障害の許容範囲(例えば、写し)スキームの一部として複数のデータ・ストアに割り当てることができる。
図11は、一組の4つのデータ・ストアへのアドレス範囲の割当ての一例である。この図においては、データ・ストアへのアドレス範囲の割当てに関連する名前ビットだけを示す。この例の場合、すべてのデータの2倍のコピーを行うシステム内でのように、2つのデータ・ストアに各アドレス範囲が割り当てられることに留意されたい。同様に、図12は、8つのデータ・ストアへのアドレス範囲の割当てを示す。
図13は、第1の列に焦点を当てている図12の詳細図である。この図の場合には、4つのデータ・ストアにアドレス範囲が割り当てられる。この場合、第1の関連する名前ビットは両方ともゼロである。このような場合、場合によっては、それぞれが異なる役割を行う、ある範囲に割り当てられるデータ・ストアを区別する必要がある場合がある。このことは一定の順序で行うことができるが、ある役割がより多くの計算上のネットワークまたは記憶装置負荷である場合には(例えば、ある記憶装置が主要なコピー源であり、いくつかのブロック・タイプが1回だけコピーされる)、余分の負荷がいつでも同じ記憶装置に課せられるという欠点がある。
図13は、公平な方法でデータ・ストア役割番号を割り当てる方法である。最初に、各アドレス範囲内の記憶装置に一定の順番が割り当てられ、その後でどのデータ・ストアが役割番号0を演じるのかを(本質的にランダムに)選択するために、ブロック名の未使用の低次の部分を使用する。次に、他の役割が周期的に割り当てられる。
読取りエラーの許容
ハード・ディスクは、ディスク・セクタがハードウェアの問題を許容し、データを正しく読み出すことができるように、ディスク・セクタのレベルで冗長コード化を使用する。データ記憶が使用することができるスペースからディスク基板上に冗長な情報を追加すると、ディスク・メーカは、必要なだけのエラー修正情報だけを追加する。通常の現在のディスクは、1014ビットを読み出す度に1回程度、ディスク上の1つのセクタを読み出すことができないと指定している。
上記入手機構は、データを連続的にコピーし、書き換える。これにより潜在的なエラーが蓄積するのが防止されるが、ディスク上のデータが何回も読み出されることになる。25,500GBのディスクがそれぞれ完全に1回読み出されると、最高1014ビットが追加される。連続的に入手される多くの大型のディスクを含む記憶システムの場合には、1014ビットの読取り中に1つの読み出すことができないセクタがあると故障が頻繁に起こる。
RAIDシステムの場合には、D個のディスクのグループが結合され、ディスクのD−1上の対応するセクタに対するパリティ情報(すなわち、すべての対応するビットの合計モジューロ2)が、D番目のディスクの対応するセクタ上に記録される。1つのディスク上で1つの読取りエラーが発生すると、他のディスク上の情報からその読み出すことができないセクタを再構成することができる。
本発明のオンディスク・ジャーナル内の読み出すことができないセクタを処理するために類似の技術を使用することができる。図14は、その技術を示す。この図の場合、各年代は、E+1の同じ大きさのチャンクに分配される。Eチャンクはデータを含み、1つのチャンクはパリティ情報を含む。パリティ・チャンクCの各ビットは、すべてのデータ・チャンクCの対応するビットの合計モジューロ2(XOR)である。あるチャンクが読み出すことができないデータを含んでいる場合には、それらを一緒にXORすることにより、その年代の他のチャンクから、そのチャンクを再構成することができる。
読み出すことができないセクタがランダムに発生したと仮定した場合、同じ年代内で2つの不良セクタが発生する可能性は非常に小さい。1つの年代が64MBであり、1014ビットの読取り中に読み出すことができないセクタが1回発生した場合には、すでに1つの読み出すことができないセクタを含んでいる年代内で第2の読み出すことができないセクタと遭遇する可能性は約40,000回に1回である。それ故、100万個の500GBディスクを完全に読み出して始めて、同じ年代内で2つの読み出すことができないセクタに遭遇することになる。
ある空間的な相関関係がある場合には、他の不良セクタに直接隣接する不良セクタが存在する可能性が高い。これにはチャンクの大きさを小さくすることにより対応することができる。ある年代内の1つ程度のチャンクが1つのエラーを含んでいる限りは、エラーを回復することができる。実際には、そのエラーを含んでいるバイトのシーケンスが(2つのチャンクに跨っていても)1つのチャンクより短い場合には、依然としてそのエラーを回復することができる。図15はそれを示す。この図は、その最後のものが最初の3つのビット毎のXORである、丁度4つのチャンクを含むある年代の一例である。BおよびAを含む陰を付けた領域が読み出すことができない領域である場合には、これを回復することができる。Bは、他の3つのチャンク(すなわち、B、BおよびB)の対応する領域を一緒にXORすることにより回復することができ、一方、Aは、A、AおよびAを一緒にXORすることにより類似の方法で回復することができる。
エラーを含む領域がチャンクの一部に局所化することができる場合には、この技術を直接適用することができる。好ましい実施態様の場合には、チャンクの大きさはオペレーティング・システムのバッファのサイズに関連し、全チャンクへのオペレーティング・システムによってだけエラーが局所化される。この場合、読み出すことができないセクタ(図15のBおよびA)を含む領域を、ジャーナル・フレーム内のチェックサムにより依然として識別することができる(図9参照)。読み出すことができないセクタを含んでいる2つの隣接するチャンクを識別した場合には、2つのチャンクに跨っているチャンク・サイズの領域の可能な各整合が順次仮定され、この仮定に基づいてデータが仮修正される。すべてのジャーナル・フレーム内で正しいチェックサムを生成する第1の整合が、決定修正として使用される。
ディスク・トラックを横切る局所化した相関関係を処理するために、この技術を拡張することができる。図16は、トラックとセクタとを示すディスクの略図である。ディスク上のトラックは、読み/書きヘッドを半径方向に移動しないで(すなわち、シーク動作を行わないで)アクセスすることができるすべてのデータからなる。ディスク上のデータのトラックが隣接している場合には、異なるトラック上に位置しているが、半径方向に相互に隣接しているセクタが、相関関係のある故障を有している場合がある。
このことは、年代サイズを任意の1つのトラックの記憶容量より小さくすることにより処理することができるので、各年代内のパリティ情報を、セクタ・エラーを別々に処理するために使用することができる。これにより不便な小さい年代ができた場合には、それを別の方法により、年代をそれぞれが任意の1つのトラックより小さいセクタに分割することにより処理することができる。図17はこのアプローチを示す。交互に位置するAにおいて、各セクションはデータのブロックおよびパリティ・ブロックを含む。好適な交互に位置するBにおいては、パリティ・ブロックはすべて最後のセクションに置かれるので、本質的には図14のもとのスキームのように見えるが、追加構造を有する年代の終わりにパリティ情報が位置する。
他の実施態様
ディスク上の第1のレベルの索引:ブロック位置への非常に低速で偽陽性および直接ポインタを含むオンディスクの第1のレベルの索引は、ディスク上の全ハッシュ・テーブルへの非常にコンパクトな代案として機能することができ、ほとんど常に1つのディスク・アクセスを含むブロック名へのポインタを供給する。索引エントリをキャッシュするためにあるメモリ内スキームをオンディスク第1のレベルの索引と一緒に使用する場合には、メモリ内のキャッシュに対して行った更新をオンディスク索引に併合する際に、オンディスク索引がコンパクトであることが貴重になる。全オンディスク構造を超えた更新のために読取りおよび書込みを行う必要があるデータの量は、大きな要因により低減される。
ハッシュ・バケットを使用する第1のレベルの索引:必要な時にだけ、スペースを割り当てること、満杯になった場合にはいつでも索引の一定のサイズのセグメントを2つの新しい一定のサイズのセグメントに分割することを含む好ましい実施態様の第1のレベルの索引のための構造について説明する。多くの他の構造も使用することができる。例えば、それぞれが索引のセグメントを含む、一定のサイズのハッシュ・バケットは簡単な他の構造である。このアプローチは、索引に対する全スペースを予備割当てすることを含む。ハッシュ・バケットの充填の際の統計的変動を考慮に入れる目的で、所望の平均充填を収容するために、各ハッシュ・バケットに余分なスペースの少ない一部を割り当てる必要がある。
ランドマークを含むアレイを使用する第1のレベルの索引:第1のレベルの索引のための論理的に可能なもう1つの別の構造は、1つの長いアレイ、1つのセグメントだけを含む第1のレベルの索引である。この速度は非常に遅い。何故なら、デルタがいつでもスタートから横断しなければならないからである。しかし、可能な名前の範囲内に一定間隔で一組のランドマーク・エントリを挿入し、これらランドマーク・エントリの位置を追跡する外部ポインタを維持することにより、これをスピードアップすることができる。索引がサポートする最大数のエントリのためのサイズのアレイ内部にランドマーク・エントリが最初等間隔で位置している場合には、これはハッシュ・バケット・アプローチに非常によく似ているが、異なるハッシュ・バケットの充填の際の統計的変動を許容するために、余分なスペースを割り当てる必要がないという利点がある。バケットが溢れた場合には、(ランドマークを含む)その後のエントリを、余裕を作るために1ビット下方に移動することができる。そうすることにより(充填の際に同時にもっと大きな統計的変動の場合)遥かに小さなハッシュ・バケットを使用することができるので、各参照のための(デルタのリストを横切る)線形探索の量が低減する。
スペース使用統計の累積:使用中の(すなわち、解放することができない)スペースおよび共有記憶装置の量に関するデータ・ストアの統計を蓄積できることは興味のあることである。このような蓄積は、ゼロでない参照カウントを含むブロックが占拠するスペースの現在の全量、および参照したバイトの個々の全数(すなわち、ブロック・サイズに参照カウントを掛けたものの合計)を維持することにより行うことができる。対応するブロックのサイズが分かっている限り、参照カウントを増減する場合にこれらの全量を更新することができる。これらの情報へのアクセスをもっと効率的にするために、ブロック・サイズのコピーを、図6の年代索引エントリに追加することができる。
参照カウント・デルタ:ブロックを最後に入手した場合に、現在の参照カウントがブロックと一緒に記録される。この値に関連する変更だけを第1のレベルの索引内に記録する必要があり、ブロックが入手され、その参照カウントがディスク上に記録される度に、第1のレベルの索引内に記録した値は、ゼロにリセットすることができる。この場合、あるブロックに対する全参照カウントは、ブロックと一緒に格納した基線値および第1のレベルの索引内に格納した参照カウント・デルタの合計である。最後に入手した時から変化していない参照カウントを含むすべてのブロックは、第1のレベルの索引内にゼロの参照カウント・デルタを有する。スペース使用統計の入手および蓄積を効率的に行うために、ブロックと一緒に記録した参照カウントの基線値のコピーを図6の年代索引エントリに追加することができる。
ブロック当たりの多重参照カウント:複数のソース(例えば、物理的位置、管理領域またはファイル・システム)からのデータがデータ・ストア内に収容された場合には、正しい参照カウントを有するもう1つのデータ・ストアにコピーするために、後で特定のソースからデータを効率的に分離することができることが望ましい場合がある。例えば、複数のデータ・リポジトリからのデータが、1つのデータ・リポジトリにコピーされ、ソース・リポジトリのうちの1つのところのいくつかのデータ・ストアの喪失により、ある一組のアドレス範囲内のそのソースに属するすべてのブロックを回復しなければならないデータ回復シナリオの際に、このようなニーズが発生する場合がある。ソースにより効率的な分離を行うことができるように、別々の参照カウントをそれを参照する定義した各データ・ソースに対する各ブロックと一緒に格納することができる。参照カウント・デルタだけを第1のレベルの索引内に格納した場合には、それらが入手された最後の時点から参照されなかったブロックは、すべてゼロのデルタを有し、この状態をデフォルト状態として第1のレベルの索引内で効率的にコード化することができる。所与のデータ・ブロックに関連するソースの識別子のリストは、そのブロックと一緒に格納することができ、そのブロックの第1のレベルの索引エントリ内の参照カウント・デルタは、効率的なコード化を行うためにリスト内の序数を参照することができる。ソースが最初にデータ・ブロックを参照した場合には、第1のレベルの索引エントリ内の参照カウント・デルタにラベルを付けるために、ソース識別子を直接使用することができる。効率化のために、あるブロックに関連するソースのリストのコピー、および(ブロックを最後に入手した時点からの)対応する参照カウントを、図6の年代索引エントリに追加することができる。
デフォルト値を有する第1のレベルの索引:図18は、第1のレベルの索引のためのもう1つのバイト指向エントリ・フォーマットの3つの例を示す。図4は、好ましい実施態様で使用するフォーマットを示す。もう1つのフォーマットAは、図4のフォーマットよりも年代番号に対して多くのビットを使用し、他の情報のために1つのビットだけを予約する。名前が付いているブロックに関連している場合がある1つ置きの情報にはデフォルト値が割り当てられ、特定のエントリに関連するすべての情報がそのデフォルト値を有している場合には、他の情報をはっきりと表示する必要はない。例えば、図4のフォーマットの場合のように、通常、大部分のブロックは最近収容されず、そのためリースを持たず、そのためリース情報用の大部分のエントリ内にビットを予約する必要がない。すべての余分な情報がそのデフォルト値を有している場合には、フォーマットAエントリの長さは3バイトである。
第2のレベルの索引へのポインタを持たない第1のレベルの索引:図18は、第2の他のエントリ・フォーマットBを示す。このフォーマットは、フォーマットAよりも衝突抵抗のためのビットの数が1つ少なく、同じ余分な情報フラッグおよびデフォルト協定を使用する。このフォーマットの場合には、第2のレベルの索引に関する情報は、第1のレベルの索引内には格納されないので、第1のレベルの索引のサイズが最小になる。このフォーマットを使用する第1のレベルの索引は、依然として新しいブロック名を効率的に識別し、年代索引情報のキャッシュは、現在のブロック名を効率的に識別するのに十分である。新しいブロックの位置を記録する情報は、(恐らく注釈として)メモリ内にキャッシュされるので、(年代索引から分離した)オンディスクの第2のレベルの索引への更新を一括することができる。
近似的なディスク位置を含む第1のレベルの索引:第3の別のエントリ・フォーマットCは、この節内ですでに説明したタイプのオンディスク第1のレベルの索引内で役に立つ。この別のフォーマットの場合には、注釈は、名前が付いているブロックの全ディスク位置を含む。この場合、約2倍の長さのデルタを生成し、衝突保護のための7のビットをさらに追加するので、(不必要なディスク読取りとなる)偽の正の一致の可能性は2−13である。名前が付いているブロックの頭を含む64KBのチャンクをポインティングするだけで、位置情報から2バイトがセーブされる。(最大の長さが64KBである)全ブロックを確実に読み出すために、すべての読取りの長さは130KBである。ある余分な情報は、その頭を示す一定の値(マジック番号)を走査するだけで、領域読取り内の第1のジャーナル・フレームを発見できない希なケース内の注釈に内蔵されている。
非バイト整合エントリを含む第1のレベルの索引:もちろん、非バイト指向エントリ・フォーマットも使用することができる。可変長Golombコードは、ここで説明し、いくつかのタイプの幾何学的に分布しているデルタを格納するために正確に設計されていて、必要なビットの正確な数を含む表示注釈はメモリの使用を若干低減することができる。(別の問題である)衝突を処理するためのオーバーヘッドを無視すると、このコンテキストにおけるコードの理論的制限は、各デルタ(但し、r=log(M/N))を表示するための(r+loge)ビットの平均であり、Golombコードは、この制限に非常に近くなる。好ましい実施態様で使用するコード化は、理論的最小値より1ビット少なく、デルタ当たり約(γ+2.3)ビットを使用する。
より多いまたはより少ない圧縮を含む第1のレベルの索引:第1のレベルの索引内で使用する圧縮の量は、サイズ対速度および簡単さ間の実際の折り合いである。例えば、非バイト整合エントリを使用すれば、さらに複雑にはなるがスペースをさらに節約することができる。非常に簡単な実施態様は、隣接するソートした名前の間の差が一定のサイズのデルタ表示に対して余りに大きいか、余りに小さいすべての場合に対して別々のハッシュ・テーブルを使用することもできるし、またはそのような場合、デルタのリスト内にすべての名前を直接埋め込むことができる。新しい名前がその切り捨て点までの第1のレベルの索引内の現在の名前と一致する場合には、新しい名前が第1のレベルの索引内でせいぜい1つの現在の名前と衝突する恐れがある特性を保存するために、実際には、名前のうちの1つだけを追加の解像度と一緒に第1のレベルの索引内に表示するだけでよい。もう1つの簡単な他の実施態様は、デルタではなく、第1のレベルの索引内の切り捨てた名前を使用し、切り捨てた各名前を一意の最初のセグメントにし、実際に能動的にアクセスされていない場合に、そのサイズを小さくするために、第1のレベルの索引のセグメントに適用される別々の圧縮プロセスに依存する。
索引内への他のタイプの情報の内蔵:いくつかのタイプの情報を、第1のレベルの索引エントリの注釈内に内蔵させるのに役に立つものとして説明してきた。リース、参照カウント、ディスク上のブロックの位置、および追加索引情報のディスク上の位置である。個々の名前が付いているブロックに関連する他の情報をはっきりと取り付けることができる完全なコンパクトな索引構造の存在は多くの他の用途を有する。固定情報、ある場所にコピーしなければならないまたは移動しなければならないブロックに対する一時的なマーカ、キャッシュされる全ブロック名、キャッシュされるディスク位置、キャッシュされるオブジェクトメタデータ、年齢または活動情報、他の位置情報(どのディスク、どのテープ等)、セキュリティまたは許可情報、および時間関連の情報のような、索引エントリに取り付けることができる他の情報も含む。ほとんどすべてのブロックが、それを許可するオプションとしての情報に対してそのデフォルト値を有している限りは、索引のサイズは目で見てわかるほどには増大しない。さらに、上記の参照カウント・デルタおよびスペース使用の例のところで説明したように、第1のレベルの索引エントリに最初に取り付けられる情報は、ブロックが入手された場合、第2のレベルの索引エントリに移動することができる。
入手中のデータのシュレッディングまたは移動:入手装置は、ある種のタイプのブロックを削除している時に、特種な処理を行うことができる。例えば、政府の規制要件のためにある期間保持したブロックは、最終的に削除する場合、特種なシュレッディング(ランダムなデータによる多重上書き)を必要とする場合がある。またシュレッディングは、ノルマであってもよい。また入手装置は、データ移動に関与することもでき、最近アクセスされていない(そのためすぐにアクセスが行われるとは思われない)データ、または長期間保持しなければならない(そのためすぐには変化しない)データを、オフにすることができるディスクまたはオフライン媒体に移動する。この場合、少なくとも第1のレベルの索引情報は、依然としてアクセスすることができる媒体上に保持する必要がある。もっと一般的に言うと、データは、次にデータが必要になる時間または次に変更しなければならない時間の予測に基づいて適当な目標(記憶デバイスまたは記憶デバイスの一部)に移動することができる。ある期間変化してはならないデータは、記憶リソースにより保持期間制限が強制される記憶リソース上に統合することもできる。
バイト範囲の保持リース:(例えば、記憶エリア・ネットワーク内で起こるように)、記憶リソースへのアクセスが2つ以上のデータ・ストアにより共有される場合には、共有記憶リソースに、あるデータ・ストアが、他のデータ・ストアが書き込んだジャーナル・フレームを修正しないようにさせることが望ましい。また、データ・ストアのソフトウェア内のソフトウェア・バグが、完全に書き込まれ、それ以上修正できないようになっているジャーナル・フレームをダメにできないようにすることが望ましい。これら両方の目標は、バイト範囲の保持リースにより達成することができる。保持リースは、格納位置のある範囲を読み出すことができるが、短縮することができないある指定の期間の間(最初にそこにデータを書き込んだデータ・ストア・プロセスを含む)いかなるプロセスによっても修正できないことを指定する。バイトの範囲は、あるプロセスによるアクセスのために予約させず、プロセでないものによるアクセスに対して予約される。ジャーナルの一部である範囲に対するリースは周期的に更新されるので、ジャーナルは依然として修正することはできない。入手され、自由スペース・ストップに追加されたジャーナル・フレームは、その更新されたリースを有し、これらリースは最終的に期限切れになり、スペースは再使用のために使用できるようになる。保持リースは、通常のハードウェアの再ブートおよびリセットがあっても継続する。典型的なデータ・ストアの使用シナリオの場合には、リースは、解放されなかったジャーナル・フレーム上のリースが時間切れになるのに十分長い期間の間、システムの保守が更新を妨害する恐れがない十分長い数日または数週間持続する。図19は、保持リースの使用例を示す。領域Aは、前はジャーナルの一部だったものであるが、現在は、リースがまだ時間切れになっていない自由スペースである。領域Bは、完全に書き込まれ、もう修正できない年代である。領域Cは、ある特定のデータ・ストア・プロセスにより排他的に書き込むことができるスペースである。領域Dは、任意のプロセスにより読取りまたは書込みを行うことができる自由スペースである。この例の場合、保持リースは、個々のジャーナル・フレーム中ではなく、全年代中スタートされ、延長され、解放される。
ブロックの統一アドレス指定:説明を分かり易くするために、多重データ・ストア・システムにおいては、異なるデータ・ストア間でブロックを分配するために使用するブロック名から入手したビットは、第1のレベルの索引のセグメント間でデータを分配するために使用するビットとは異なるものであると仮定する。このように仮定することにより、本発明のランダムさはもっと簡単になるが、このことは第1のレベルの索引内に格納している切り捨てた名前は、データ・ストア間分配のために使用したアドレス範囲に関する情報を含んでいなかったことを意味する。この仮定が成立しないで、各ブロック名の最初の部分が両方のタイプの分配に使用された場合には、変化する主要なことは、特定のデータ・ストアが保持するブロック名は、もっと小さな全領域と結合され、切り捨てた名前もそのように結合される。各領域内においては、名前は依然としてランダムに分配される。これにより、ブロック名を切り捨てる適切な点が変化する。何故なら、平均分離は使用できる全領域、および索引および格納中のブロックの最大数に依存するからである。データ・ストアへの範囲の割当てが時間ともに変化するが、データ・ストアが索引することができる名前が付いているブロックの全数が変化しない場合には、エントリ間の平均分離(それ故、第1のレベルの索引内でエントリを形成するために、ブロック名の切り捨てなければならない点)が変化する。これにより幾分複雑になる。異なる位置で切り捨てたエントリを含む第1のレベルの索引の再生は、入手装置により、増分的に最善の方法で行うことができる。何故なら、通常、全ブロック名を、ディスクから再度読み出さなければならないからである。
ランダムさおよびブロック名:ブロック名は、ほぼランダムなものであればよいし(高エントロピー確率分布を特徴とするものであってもよいし)、またはブロック名の一部だけがほぼランダムなものであればよい。ソートした名前の長いリスト内には、隣接する名前間の差を合理的に予測することができる十分なランダムさが存在する。そのような場合には、通常、差をコンパクトにするのに十分な小さい値により表示することができるように、名前のどこで切り捨てればよいのかを知ることができるが、ほとんどゼロになることはなく(それ故、名前をはっきり表示するために追加情報を必要とする場合はほとんどない。)もちろん、索引用に使用するには十分にランダムである一部を入手するために、ブロック名をランダムにまたは疑似ランダムに生成する必要はない。例えば、生成された場合に、ブロックが長いタイムスタンプにより命名された場合には、タイムスタンプの最下位部分を全くランダムなものにすることができる。
他の機能の変化:説明を分かり易くするために、好ましい実施態様を非常に特異的に説明してきたが、多くの機能を変更することができる。例えば、異なる暗号ハッシュ機能を使用することもできるし、ディスクは、仮想ディスク(例えば、記憶エリア・ネットワーク内)であってもよいし、他のタイプの媒体であってもよい。すべての記憶をRAM内に入れることもできる。オンディスク構造は、年代のサイズおよび構造が異なる年代索引の構造および設置が異なる、または他のタイプの第2のレベルの索引のために年代索引(それ故、年代)を含んでいない非常に異なるものであってもよいし、もっと直接的なブロック位置情報をRAM内に入れることもできる。追加ログ構造は、変化しなかった情報のコピーが少なくてすむように、ディスク・データのセグメントへのポインタをもっと使用するもっと精巧なものであってもよい。ログ構造を、一時的な位置またはある他の方法で使用する一時的な位置からなる使用を行わないで、ある他の構造のために放棄することができる。同じ(または緊密に結合している)物理ハードウェア上で複数のデータ・ストア・インスタンスが稼働している場合には、これらのデータ・ストアはいくつかのリソースを共有することができる。例えば、その中のいくつかは、1つの共通の第1のレベルの索引を共有することができる。あるデータ・ストアは、2組以上の記憶リソースを管理することができ、名前が付いているブロックを異なるリソースに割り当て、格納および移動ポリシー、アクセス・パターンおよび数、利用度またはリソースの性質の変化に基づいてその間でデータを移動する。
他のタイプの索引:参照は、ブロックおよびブロック名全体を通して行われるが、ブロックは、索引することができる関連する記録名を含む、可能な記録タイプの単にあるものにしか過ぎない。本明細書に記載する索引技術は、他のコンテキストにも適用することができる。例えば、(衝突の処理を含むまたは含まない)圧縮した第1のレベルの索引は、ブルーム・フィルタが現在使用されている、特にコンパクトな表示が重要な場所で役に立つ場合がある(例えば、ネットワークを横切るウェブ・キャッシュに関する情報の共有)。また、第1のレベルの索引は、一定の組のランダムに命名したレコードのためのコンパクトな索引を提供するためにそれ自身使用することができる。
上記説明は、本発明のいくつかの可能な実施態様を説明するためのものであることを理解されたい。これらの実施態様および非常に多くの他の実施態様も添付の特許請求の範囲に含まれる。
疎セットのランダムに分布している記録番号を索引のリストにコード化する際に使用する変換を示す図。 索引リスト内で使用するためにブロック名の切捨ての一例を示す図。 索引セグメントに分割した第1のレベルの索引を示す図。 第1のレベルの索引のバイト指向エントリ・フォーマットを示す図。 切り捨てた際に異なるブロック名が一致する(衝突する)場合に使用する索引エントリ用のフォーマット。 第2のレベルの索引(年代索引)のセグメントの索引エントリ用のフォーマット。 第1のレベルの索引エントリに取り付けられている注釈内のリースおよび参照カウント情報のコード化を示す図。 ジャーナル・フレームの付属ログとして組織化されているディスク記憶フォーマット。 ディスク・ジャーナル・フレーム構造。 記憶装置の共有ブロックに関連して、スペースを解放し、ディスク上で記憶装置をコンパクトにする(入手する)プロセス。 (この例の場合には、4である)複数のデータ・ストアへのある名前ビットに基づくブロック名のある範囲の割当て方法を示す図。 (この例の場合には、8である)複数のデータ・ストアへのブロック名のある範囲の割当て方法を示す図。 所与のアドレス範囲に割り当てられたデータ・ストアのブロック名の他の部分に基づく配列方法を示す図。 ディスク読取りエラーから回復することができるようにする年代へのパリティ情報の追加を示す図。 エラーが2つの隣接する年代のチャンクに重複している領域を含む場合の読取りエラーの回復を示す図。 ディスク上で半径方向に隣接する2つのセクタ。 半径方向に隣接するセクタ上のエラーが相関する場合の、読取りエラー回復のためのパリティ情報を組織化するための2つの他の方法を示す図。 第1のレベルの索引内のエントリ用の3つの他のバイト指向フォーマット。 データ・ストア・ジャーナルを修正できないようにするためのバイト範囲保持リースの使用を示す図。

Claims (42)

  1. 長い全体的にランダムに分布している記録名により識別された大きな一組の記録を索引し、前記一組の記録についてのメンバシップ問合せに応答するのに適している索引を構成するための方法であって、
    前記一組の記録に新しい記録を追加し、各名前の少なくとも一部が少なくともほぼランダムになっている名前を生成するように設計されたプロセスにより、前記新しい記録に新しい記録名を割り当てること、
    第1のレベルの索引をチェックすることにより、前記索引内に前記新しい記録名がまだ存在しないと判定すること、
    前記新しい記録名よりも短い結合記録名を形成するために、前記新しい記録名に前記索引内にすでに存在する記録名情報を結合すること、
    前記新しい記録を表す新しい第1のレベルの索引エントリを形成するために、前記結合記録名を前記第1のレベルの索引に追加すること、
    前記一組の記録に第2の新しい記録を追加し、前記第2の新しい記録に、前記新しい記録名とは異なる第2の新しい記録名を割り当てること、
    前記第2の新しい記録名が前記第1の新しい記録名と異なるものであるかどうかを判定するために、前記第1のレベルの索引が十分な情報を含んでいないと判定すること、
    前記第2の新しい記録名を表し、前記第2の新しい記録名より短い前記第1のレベルの索引にエントリを追加すること、
    を含み、前記第1のレベルの索引が、前記新しい記録名が前記索引に追加されたと結論するのに十分な情報を含んではおらず、
    前記一組の記録内の異なる各記録が異なる記録名に割り当てられ、
    前記第1のレベルの索引の少なくとも一部が、記録名に基づいて配列される、方法。
  2. 請求項1に記載の方法において、前記一組の記録内の異なる各記録が、前記第1のレベルの索引内に異なるエントリを有する、方法。
  3. 請求項1に記載の方法において、前記新しい記録名を結合するために使用する前記プロセスが、それを前記索引内にすでに存在する記録名から区別するのに十分な前記新しい記録名から入手した情報の一部を決定することを含む、方法。
  4. 請求項1に記載の方法であって、さらに、
    新しいエントリを、前記完全な新しい記録名またはそれを再構成するのに十分な情報を含む第2のレベルの索引に追加すること、
    最初に、問合せを受けた記録名が前記新しい第1のレベルの索引エントリにより表示されていると判定し、次に、前記問合せを受けた記録名が新しい第2のレベルの索引エントリにより表示されていると判定することにより、問合せを受けた記録名が索引内にすでに存在すると判定すること、
    を含む方法。
  5. 請求項4に記載の方法において、前記第1のレベルの索引が、RAM内に格納され、前記第2のレベルの索引がディスク上に格納される、方法。
  6. 請求項3に記載の方法において、前記新しい記録名から入手した情報の一部が、前記新しい記録名を表示する2進値のビットのあるサブセットを除去することにより入手される、方法。
  7. 請求項1に記載の方法において、前記結合することが、2つの記録名の少なくとも一部の算術差を計算すること、または2つの記録名の少なくとも一部を含むある他の演算または有限体算術演算を計算することを含む、方法。
  8. 請求項1に記載の方法において、前記新しい記録名を割り当てる前記プロセスが、疑似乱数を生成することか、または一意であることが分かっている記録識別情報のある組合せの暗号ハッシュを計算することを含む、方法。
  9. 請求項1に記載の方法において、前記索引の一部が、前記新しい記録が追加された時間内に記録名が前記索引に追加された一組の記録を表し、前記新しい記録に関する追加情報、および前記時間がRAM内にキャッシュされる間に追加された他の記録の情報を入手するために、前記一部が一組の単位として検索される、方法。
  10. 請求項1に記載の方法において、記録または索引情報がディスク上のシーケンシャルなログ構造内に格納され、前記シーケンシャルなログ構造のセグメントを含む一組のピースのビット毎のXORを記録する余分な情報が、ディスク上の読み出すことができないセクタを再構成することができるように、ディスクに書き込まれる、方法。
  11. 請求項1に記載の方法において、可能な記録名のスペースが、一組のばらばらのサブスペースに分割され、その各サブスペースが、前記索引の複数の例の1つまたは複数に関連する、方法。
  12. 請求項11に記載の方法において、前記同じサブスペースに関連する異なる索引に、前記記録名の一部に基づいて異なる役割が割り当てられる、方法。
  13. 請求項1に記載の方法において、前記新しい記録が内容の1つのブロックであり、前記新しい記録名が内容の前記ブロックの暗号ハッシュであり、内容の前記ブロックの反復送信および反復格納を避けるために前記索引に対して問合せが行われる、方法。
  14. 請求項1に記載の方法において、前記新しい記録名が前記索引に2回目が追加され、前記新しい記録名に関連する参照カウントが、前記新しい記録が2回追加されたことを示す、方法。
  15. 請求項1に記載の方法において、注釈が、前記新しい記録に関連する情報、または追加情報を発見することができる表示を含む前記第1のレベルの索引内の前記新しいエントリに取り付けられる、方法。
  16. 請求項15に記載の方法において、前記新しいエントリに取り付けられている前記注釈内に格納されている情報が、後で他の場所に表示され、前記第1のレベルの索引内の前記エントリから除去される、方法。
  17. 請求項1に記載の方法において、前記索引の少なくとも一部が、記録が前記索引に追加された時点に基づいて組織される、方法。
  18. 請求項3に記載の方法において、前記索引内にすでに存在する記録名からそれを区別するのに十分な前記新しい記録名から入手した情報の前記一部が、前記第1のレベルの索引内に表示される、方法。
  19. 請求項1に記載の方法において、前記索引内に表示された前記記録名の長さの合計が、前記第1のレベルの索引内の前記エントリの長さの合計より長い、方法。
  20. 請求項1に記載の方法において、前記第1のレベルの索引が、すべての可能な記録名間の一定のおよび所定の順序に基づいてばらばらのセグメントに分割される、方法。
  21. 請求項1に記載の方法において、記録または索引情報がディスク上のシーケンシャルなログ構造内に格納され、入手プログラムが、ディスク上の他の場所にこのログ構造のセグメントをコピーし、前記情報のあるものを除去し、再使用のために前記セグメントを解放する、方法。
  22. 請求項21に記載の方法において、前記新しい記録に関連する情報が前記セグメントに内蔵され、前記新しい記録に関連する参照カウントが、ゼロにデクリメントされ、前記入手プログラムが、再使用のために前記セグメントを解放する前に、前記新しい記録に関連する前記情報をコピーしない、方法。
  23. 請求項1に記載の方法において、記録または索引情報がディスク上のシーケンシャルなログ構造内に格納され、このログ構造のバイトのある範囲が、ある時間内に変更することができないものとしてマークが付けられ、この変更することができない状態が、データ・ストアの基礎をなす記憶リソースにより強制される、方法。
  24. 請求項1に記載の方法において、前記索引がその設計容量を超えて充填されない限りは、前記第1のレベルの索引だけをチェックして、ランダムに選択した記録名が前記索引内に存在しないと判定することの可能性が98%以上である、方法。
  25. 請求項24に記載の方法において、前記索引の容量が、使用できる記憶スペースだけにより制限される、方法。
  26. 請求項1に記載の方法において、ある時間内に記録名が前記索引に追加された一組の記録が、記憶デバイスのある局所化した領域内にすべて格納され、前記一組の記録を表す前記索引の一部が前記一組の記録と一緒に格納される、方法。
  27. 請求項1に記載の方法において、前記新しい第1のレベルの索引エントリがディスクに書き込まれ、RAMから除去され、問合せを受けた記録名が前記索引内にすでに存在すると判定することが、ディスク上の前記新しい第1のレベルの索引エントリにアクセスすることを含む、方法。
  28. 請求項15に記載の方法において、前記新しいエントリに取り付けられている前記注釈内の情報が、ディスク上に表示され、前記注釈から除去される、方法。
  29. 請求項1に記載の方法において、前記新しい第1のレベルの索引エントリが、ディスク上のデータの位置に関する情報を含んでいない、方法。
  30. 請求項1に記載の方法において、前記第1のレベルの索引エントリが、前記エントリが記録名情報以外の情報を含んでいるのかどうかについての表示を含む、方法。
  31. 請求項1に記載の方法において、コピー・プロセスが、情報を第1のレベルの索引エントリからディスクにコピーし、前記第1のレベルの索引から前記情報を除去する、方法。
  32. 請求項1に記載の方法において、注釈が、近似的なディスク位置を含む前記第1のレベルの索引内の前記新しいエントリに取り付けられる、方法。
  33. 請求項1に記載の方法において、注釈が、前記新しい記録に関する近似的なディスク位置を含むディスク上に格納している第2のレベルの索引内の新しいエントリに取り付けられる、方法。
  34. 請求項14に記載の方法において、複数の参照カウントが前記新しい記録名に関連していて、前記複数の参照カウントの合計が、前記記録が前記索引に追加された全回数を反映している、方法。
  35. 請求項14に記載の方法において、前記新しい記録名に関連する前記参照カウントが、ディスク上の参照カウント構成要素と、前記第1のレベルの索引内の参照カウント構成要素とを含み、前記新しい記録に属する参照カウント構成要素の合計が、前記新しい記録名が前記索引に追加された回数を反映している、方法。
  36. 請求項1に記載の方法において、入手装置プログラムが記録または索引をディスク上の古い位置からディスク上の新しい位置にコピーし、前記コピーからある情報を除去し、前記入手装置プログラムが、少なくとも前記除去したデータを分からなくし、読み出せなくするために、前記古い位置にデータのパターンを上書きする、方法。
  37. 請求項1に記載の方法において、入手装置プログラムが、記録または索引データをソース記憶デバイス上のソース位置から宛先記憶デバイス上の宛先位置にコピーし、前記コピーからある情報を除去し、前記ソース位置に自由スペースのマークを付け、宛先記憶デバイスの選択が前記コピーしたデータが次にアクセスまたは変更される時間の予測に基づいて行われる、方法。
  38. 請求項20に記載の方法において、前記新しい記録名に関連する前記第1のレベルの索引のセグメントが、一定のサイズおよび位置を有する、方法。
  39. 請求項20に記載の方法において、前記新しい記録名に関連する前記第1のレベルの索引のセグメントが、可変のサイズおよび位置を有する、方法。
  40. 請求項20に記載の方法において、前記第1のレベルの索引の複数のセグメントが、アレイ構造内に格納され、前記アレイ構造内のある位置へのポインタが、前記新しい記録名に関連するセグメントの頭を指定する、方法。
  41. 長い全体的にランダムに分布している記録名により識別された大きな一組の記録を索引し、前記一組の記録についてのメンバシップ問合せに応答するのに適している索引を構成するための方法であって、
    前記一組の記録に新しい記録を追加し、各名前の少なくとも一部が少なくともほぼランダムになっている名前を生成するように設計されたプロセスにより、前記新しい記録に新しい記録名を割り当てること、
    すでに前記索引に追加された記録の完全な記録名を再構成するのに十分な情報を含んでいない第1のレベルの索引をチェックすることにより、前記索引内に前記新しい記録名が存在しないと判定すること、
    前記新しい記録名より短いが、すでに前記索引内に含まれている記録名からそれを区別するのに十分な新しい省略名を形成するために前記新しい記録名を短縮すること、
    前記新しい記録を表す新しい第1のレベルの索引エントリを形成するために、前記短縮記録名の表示を前記第1のレベルの索引に追加すること、
    前記一組の記録に第2の新しい記録を追加し、前記第2の新しい記録に、前記新しい記録名とは異なる第2の新しい記録名を割り当てること、
    第2の新しい記録名が前記第1の新しい記録名と異なるものであるかどうかを判定するために、前記第1のレベルの索引が十分な情報を含んでいないと判定すること、
    前記第2の新しい記録名を表し、前記第2の新しい記録名より短い前記第1のレベルの索引にエントリを追加すること、
    を含み、前記一組の記録内の異なる各記録には異なる記録名が割り当てられ、
    前記第1のレベルの索引が、短縮した記録名に基づいて配列され、
    前記第1のレベルの索引のセグメントが、その中に含まれる前記短縮した記録名の長さの合計より短いコンパクトな形で格納される、方法。
  42. 請求項41に記載の方法であって、さらに、
    新しいエントリを、前記完全な新しい記録名またはそれを再構成するのに十分な情報を含む第2のレベルの索引に追加すること、
    最初に、問合せを受けた記録名が新しい第1のレベルの索引エントリにより表示されていると判定し、次に問合せを受けた記録名が新しい第2のレベルの索引エントリにより表示されていると判定することにより、問合せを受けた記録名が索引内にすでに存在すると判定すること、
    を含み、前記一組の記録内の異なる各記録が、前記第1のレベルの索引内に異なるエントリを有する、方法。
JP2007535813A 2004-10-06 2005-10-06 データのランダムに命名したブロック用の記憶システム Active JP4932726B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US61665304P 2004-10-06 2004-10-06
US60/616,653 2004-10-06
PCT/US2005/035994 WO2006042019A2 (en) 2004-10-06 2005-10-06 A storage system for randomly named blocks of data

Publications (2)

Publication Number Publication Date
JP2008516342A true JP2008516342A (ja) 2008-05-15
JP4932726B2 JP4932726B2 (ja) 2012-05-16

Family

ID=36148914

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007535813A Active JP4932726B2 (ja) 2004-10-06 2005-10-06 データのランダムに命名したブロック用の記憶システム

Country Status (4)

Country Link
US (3) US7457800B2 (ja)
EP (1) EP1797510A2 (ja)
JP (1) JP4932726B2 (ja)
WO (1) WO2006042019A2 (ja)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8364891B2 (en) * 2006-04-04 2013-01-29 Permabit Technology Corporation Storage assignment technique for scalable and fault tolerant storage system
JP5204099B2 (ja) 2006-05-05 2013-06-05 ハイバー インコーポレイテッド グループ・ベースの完全および増分コンピュータ・ファイル・バックアップ・システム、処理および装置
KR100817562B1 (ko) * 2007-03-22 2008-03-27 주식회사 이너버스 대용량 로그파일의 인덱싱 방법, 이를 내장한 컴퓨터가판독 가능한 기록매체 및 이를 수행하기 위한 인덱싱시스템
US8768895B2 (en) * 2007-04-11 2014-07-01 Emc Corporation Subsegmenting for efficient storage, resemblance determination, and transmission
DE112007003645B4 (de) 2007-10-25 2011-06-16 Hewlett-Packard Development Co., L.P., Houston Datenverarbeitungsvorrichtung und Verfahren zur Datenverarbeitung
US8140637B2 (en) 2007-10-25 2012-03-20 Hewlett-Packard Development Company, L.P. Communicating chunks between devices
US8782368B2 (en) * 2007-10-25 2014-07-15 Hewlett-Packard Development Company, L.P. Storing chunks in containers
WO2009054827A1 (en) * 2007-10-25 2009-04-30 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
US8209334B1 (en) * 2007-12-28 2012-06-26 Don Doerner Method to direct data to a specific one of several repositories
JP5132339B2 (ja) * 2008-01-31 2013-01-30 キヤノン株式会社 情報処理装置及びその制御方法、及びコンピュータプログラム
US9021068B2 (en) * 2008-02-13 2015-04-28 International Business Machines Corporation Managing a networked storage configuration
US8028000B2 (en) * 2008-02-28 2011-09-27 Microsoft Corporation Data storage structure
US8959089B2 (en) 2008-04-25 2015-02-17 Hewlett-Packard Development Company, L.P. Data processing apparatus and method of processing data
US8108446B1 (en) * 2008-06-27 2012-01-31 Symantec Corporation Methods and systems for managing deduplicated data using unilateral referencing
US8359318B2 (en) * 2008-10-13 2013-01-22 Wolf Garbe System and method for distributed index searching of electronic content
US20100174968A1 (en) * 2009-01-02 2010-07-08 Microsoft Corporation Heirarchical erasure coding
US8397051B2 (en) 2009-02-23 2013-03-12 Autonomy, Inc. Hybrid hash tables
US8145598B2 (en) * 2009-02-23 2012-03-27 Iron Mountain Incorporated Methods and systems for single instance storage of asset parts
US8396873B2 (en) * 2010-03-10 2013-03-12 Emc Corporation Index searching using a bloom filter
US9053032B2 (en) 2010-05-05 2015-06-09 Microsoft Technology Licensing, Llc Fast and low-RAM-footprint indexing for data deduplication
US20110276744A1 (en) * 2010-05-05 2011-11-10 Microsoft Corporation Flash memory cache including for use with persistent key-value store
US8935487B2 (en) 2010-05-05 2015-01-13 Microsoft Corporation Fast and low-RAM-footprint indexing for data deduplication
US8463742B1 (en) 2010-09-17 2013-06-11 Permabit Technology Corp. Managing deduplication of stored data
US9110936B2 (en) 2010-12-28 2015-08-18 Microsoft Technology Licensing, Llc Using index partitioning and reconciliation for data deduplication
US8904128B2 (en) 2011-06-08 2014-12-02 Hewlett-Packard Development Company, L.P. Processing a request to restore deduplicated data
CN103890763B (zh) * 2011-10-26 2017-09-12 国际商业机器公司 信息处理装置、数据存取方法以及计算机可读存储介质
US9069707B1 (en) 2011-11-03 2015-06-30 Permabit Technology Corp. Indexing deduplicated data
US9817728B2 (en) 2013-02-01 2017-11-14 Symbolic Io Corporation Fast system state cloning
US9304703B1 (en) 2015-04-15 2016-04-05 Symbolic Io Corporation Method and apparatus for dense hyper IO digital retention
US9467294B2 (en) 2013-02-01 2016-10-11 Symbolic Io Corporation Methods and systems for storing and retrieving data
US10133636B2 (en) 2013-03-12 2018-11-20 Formulus Black Corporation Data storage and retrieval mediation system and methods for using same
US9628108B2 (en) 2013-02-01 2017-04-18 Symbolic Io Corporation Method and apparatus for dense hyper IO digital retention
US9953042B1 (en) 2013-03-01 2018-04-24 Red Hat, Inc. Managing a deduplicated data index
US9639577B1 (en) * 2013-03-27 2017-05-02 Symantec Corporation Systems and methods for determining membership of an element within a set using a minimum of resources
US9451578B2 (en) * 2014-06-03 2016-09-20 Intel Corporation Temporal and spatial bounding of personal information
US9854436B2 (en) 2014-09-25 2017-12-26 Intel Corporation Location and proximity beacon technology to enhance privacy and security
US10061514B2 (en) 2015-04-15 2018-08-28 Formulus Black Corporation Method and apparatus for dense hyper IO digital retention
US10216748B1 (en) 2015-09-30 2019-02-26 EMC IP Holding Company LLC Segment index access management in a de-duplication system
WO2019126072A1 (en) 2017-12-18 2019-06-27 Formulus Black Corporation Random access memory (ram)-based computer systems, devices, and methods
US10942909B2 (en) * 2018-09-25 2021-03-09 Salesforce.Com, Inc. Efficient production and consumption for data changes in a database under high concurrency
US10725853B2 (en) 2019-01-02 2020-07-28 Formulus Black Corporation Systems and methods for memory failure prevention, management, and mitigation
US20210056085A1 (en) * 2019-08-19 2021-02-25 Gsi Technology Inc. Deduplication of data via associative similarity search
US20230334022A1 (en) * 2022-04-14 2023-10-19 The Hospital For Sick Children System and method for processing and storage of a time-series data stream

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3668647A (en) 1970-06-12 1972-06-06 Ibm File access system
DE2941452C2 (de) * 1979-10-12 1982-06-24 Polygram Gmbh, 2000 Hamburg Verfahren zur Codierung von Analogsignalen
US5450553A (en) 1990-06-15 1995-09-12 Kabushiki Kaisha Toshiba Digital signal processor including address generation by execute/stop instruction designated
US5717908A (en) 1993-02-25 1998-02-10 Intel Corporation Pattern recognition system using a four address arithmetic logic unit
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
US5870747A (en) * 1996-07-09 1999-02-09 Informix Software, Inc. Generalized key indexes
US5813008A (en) * 1996-07-12 1998-09-22 Microsoft Corporation Single instance storage of information
US5963956A (en) * 1997-02-27 1999-10-05 Telcontar System and method of optimizing database queries in two or more dimensions
US6119133A (en) 1998-04-16 2000-09-12 International Business Machines Corporation Extensible method and apparatus for retrieving files having unique record identifiers as file names during program execution
US6070164A (en) 1998-05-09 2000-05-30 Information Systems Corporation Database method and apparatus using hierarchical bit vector index structure
US6374266B1 (en) * 1998-07-28 2002-04-16 Ralph Shnelvar Method and apparatus for storing information in a data processing system
US6496830B1 (en) 1999-06-11 2002-12-17 Oracle Corp. Implementing descending indexes with a descend function
US6366900B1 (en) 1999-07-23 2002-04-02 Unisys Corporation Method for analyzing the conditional status of specialized files
US7412462B2 (en) 2000-02-18 2008-08-12 Burnside Acquisition, Llc Data repository and method for promoting network storage of data
US6625591B1 (en) * 2000-09-29 2003-09-23 Emc Corporation Very efficient in-memory representation of large file system directories
US6654855B1 (en) * 2000-10-26 2003-11-25 Emc Corporation Method and apparatus for improving the efficiency of cache memories using chained metrics
US7007141B2 (en) 2001-01-30 2006-02-28 Data Domain, Inc. Archival data storage system and method
SG103289A1 (en) * 2001-05-25 2004-04-29 Meng Soon Cheo System for indexing textual and non-textual files
EP1407386A2 (en) 2001-06-21 2004-04-14 ISC, Inc. Database indexing method and apparatus
US6912645B2 (en) 2001-07-19 2005-06-28 Lucent Technologies Inc. Method and apparatus for archival data storage
US6871263B2 (en) * 2001-08-28 2005-03-22 Sedna Patent Services, Llc Method and apparatus for striping data onto a plurality of disk drives
GB2379526A (en) * 2001-09-10 2003-03-12 Simon Alan Spacey A method and apparatus for indexing and searching data
US6782452B2 (en) 2001-12-11 2004-08-24 Arm Limited Apparatus and method for processing data using a merging cache line fill to allow access to cache entries before a line fill is completed
US6928526B1 (en) * 2002-12-20 2005-08-09 Datadomain, Inc. Efficient data storage system
JP4991283B2 (ja) 2003-02-21 2012-08-01 カリンゴ・インコーポレーテッド コンテンツベースのアドレシングにおける追加ハッシュ関数
US7676390B2 (en) * 2003-09-04 2010-03-09 General Electric Company Techniques for performing business analysis based on incomplete and/or stage-based data
US7107416B2 (en) * 2003-09-08 2006-09-12 International Business Machines Corporation Method, system, and program for implementing retention policies to archive records
US20050138031A1 (en) 2003-12-05 2005-06-23 Wefers Wolfgang M. Systems and methods for assigning task-oriented roles to users
US20050210028A1 (en) * 2004-03-18 2005-09-22 Shoji Kodama Data write protection in a storage area network and network attached storage mixed environment

Also Published As

Publication number Publication date
US20060112112A1 (en) 2006-05-25
EP1797510A2 (en) 2007-06-20
JP4932726B2 (ja) 2012-05-16
WO2006042019A2 (en) 2006-04-20
US7457813B2 (en) 2008-11-25
US7457800B2 (en) 2008-11-25
WO2006042019A3 (en) 2006-08-31
US20060116990A1 (en) 2006-06-01
USRE45350E1 (en) 2015-01-20

Similar Documents

Publication Publication Date Title
JP4932726B2 (ja) データのランダムに命名したブロック用の記憶システム
US8843454B2 (en) Elimination of duplicate objects in storage clusters
US9880746B1 (en) Method to increase random I/O performance with low memory overheads
US9043334B2 (en) Method and system for accessing files on a storage system
Hong et al. Duplicate data elimination in a SAN file system
US7814149B1 (en) Client side data deduplication
US8468320B1 (en) Scalability of data deduplication through the use of a locality table
TWI472935B (zh) 漸進式備份之基于片段的高延展的去複本系統與方法
US9798754B1 (en) Method to efficiently track I/O access history using efficient memory data structures
JP6200886B2 (ja) フラッシュストレージアレイにおける論理セクタマッピング
US7725437B2 (en) Providing an index for a data store
US9367557B1 (en) System and method for improving data compression
KR100622801B1 (ko) 파일 시스템 액세스 방법, 파일 시스템 복원 방법, 컴퓨터 판독 가능 기록 매체 및 데이터 처리 시스템
US9367448B1 (en) Method and system for determining data integrity for garbage collection of data storage systems
US10503445B2 (en) Data structure store and data management
US20070255758A1 (en) System and method for sampling based elimination of duplicate data
US20200249860A1 (en) Optmizing metadata management in data deduplication
US20210224236A1 (en) Primary storage with deduplication
US10078648B1 (en) Indexing deduplicated data
JP6807395B2 (ja) プロセッサ・グリッド内の分散データ重複排除
US11372576B2 (en) Data processing apparatus, non-transitory computer-readable storage medium, and data processing method
US20030115408A1 (en) Cache storage system and method
US20100010996A1 (en) Method for the allocation of data on physical media by a file system that eliminates duplicate data
US11645333B1 (en) Garbage collection integrated with physical file verification
CN117519576A (zh) 去重存储系统的数据收纳缓冲区

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20080123

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080925

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20100412

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110524

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110817

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110824

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111213

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111221

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

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

R150 Certificate of patent or registration of utility model

Ref document number: 4932726

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

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

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