JP4768009B2 - How to store less redundant data using a data cluster - Google Patents
How to store less redundant data using a data cluster Download PDFInfo
- Publication number
- JP4768009B2 JP4768009B2 JP2008500011A JP2008500011A JP4768009B2 JP 4768009 B2 JP4768009 B2 JP 4768009B2 JP 2008500011 A JP2008500011 A JP 2008500011A JP 2008500011 A JP2008500011 A JP 2008500011A JP 4768009 B2 JP4768009 B2 JP 4768009B2
- Authority
- JP
- Japan
- Prior art keywords
- sub
- block
- cluster
- blob
- blocks
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
本発明は、コンピュータ・システムにおいて記憶空間が少なくてすむ形式でデータを格納する方法および装置に関する。 The present invention relates to a method and apparatus for storing data in a form that requires less storage space in a computer system.
従来のコンピュータ記憶システムは、通常、ファイル・システム内に名前付きファイルとしてバイトのシーケンスを格納している。多くのファイルは相互に非常に似ている場合があり、データの大部分130、132を共有している場合がある(図13)のに、これらのシステムはこの冗長性を除去することができない。それどころか、これらのシステムは、同じデータの多数のコピー130、132を保持しながら各ファイル140、142を別々に格納していることもある(図14)。
Conventional computer storage systems typically store a sequence of bytes as a named file in the file system. Many files may be very similar to each other and may share most of the
従来のファイル・システムの中には、個々のファイルを圧縮するために、(GZipのような)従来の損失を起こさないテキスト圧縮アルゴリズムを組み込んでいるものがあるが、これは「鍵穴」冗長除去技術と見なすことができる。何故なら、この技術は、ファイル・システムを全体として分析するのではなく、ある時点で1つのファイルの冗長性を分析するからである。これらの従来のテキスト圧縮アルゴリズムは、ファイル・システムの異なる部分の2つの類似しているファイル130、132のような遠く離れているデータ150、152間の類似性を見つけることができない場合がある(図15)。
Some traditional file systems incorporate non-lossy text compression algorithms (such as GZip) to compress individual files, but this eliminates "keyhole" redundancy It can be regarded as technology. Because this technique does not analyze the file system as a whole, it analyzes the redundancy of a single file at some point. These conventional text compression algorithms may not be able to find similarities between
そこで、データのその反復シーケンスのいくつかを識別し、格納しているこの反復データのコピーの数を低減することができる形式でデータを表示する方法および装置が求められている。 Accordingly, there is a need for a method and apparatus for identifying some of that repetitive sequence of data and displaying the data in a format that can reduce the number of stored copies of this repetitive data.
データの反復シーケンスのコピーの数を低減するような方法で、いくつかの異なるバイナリ・ラージ・オブジェクト(BLOB)10、12を表示するために、2つ以上のBLOB表示により各反復シーケンスを参照することができる表示を使用することができる。図16は、このことを達成することができる1つの方法を示す。この実施形態の場合には、各BLOB160、162はサブブロックと呼ばれる部分A、B、C、D、E、F、Gに分割され、サブブロックの複製164、166は識別され、1回だけ格納される。このフレームワークにおいては、下記の問題が解決される。すなわち、BLOBをサブ分割する方法、結果として得られるサブブロックを格納する方法、およびサブブロックの複製を識別するための方法。
Reference each repeated sequence with two or more BLOB displays to display several different binary large objects (BLOBs) 10, 12 in such a way as to reduce the number of copies of the repeated sequence of data. A display that can be used. FIG. 16 shows one way in which this can be achieved. In this embodiment, each
本発明のある態様によれば、格納するデータの各BLOB10、12は、分割方法によりサブブロックA〜Jに分割される(図1)。種々の分割方法を使用することができるが、特に、データを固定長のサブブロック60〜65に分割する固定長分割方法を使用することもできるし(図6)、またはデータ自身により定めた位置で(図1)、データを可変長のサブブロックE、F、G、A、B、C、Dに分割する可変長分割方法を使用することもできる(図10)。本発明者と同じ発明者であるWilliamsの米国特許第5,990,810号に、この後者の方法の一例が開示されている。この米国特許は、参照により本明細書に組み込まれ、図37に示す。
According to an aspect of the present invention, each
サブブロックは、冗長除去の単位になり、ある実施形態の場合には、システムは、せいぜい一度だけ一意の各サブブロックを格納する。他の実施形態の場合には、一意の各サブブロックのコピーの数は低減するが、2以上の場合がある。 A sub-block is a unit of redundancy elimination, and in one embodiment, the system stores each unique sub-block at most once. In other embodiments, the number of copies of each unique sub-block is reduced, but may be two or more.
例示的実施形態の場合には、BLOBのサブブロックは、サブブロック・クラスタ20、22、24と呼ばれるグループ内に格納される(図2)。各BLOBは、それぞれが1つのクラスタ20、22、24内のサブブロックの隣接シーケンスを識別するレコード(「スパン・レコード」)30、31、32の順序付きリスト(またはツリー)により表示することができる(図3および図4)。BLOB10は、スパン30、31、32のリストにより識別されたシーケンスの連結として表示することができ(図3および図4)、各スパンが参照したサブブロック内のサブブロック・コンテンツを検索するスパンのBLOBのリストを順次チェックすることにより、記憶装置から検索することができる。
In the exemplary embodiment, the BLOB sub-blocks are stored in groups called
例示的実施形態においては、クラスタ20、22、24は、2つ以上のBLOB XおよびYからのサブブロックを含むこともできるし(図4)、BLOBのサブブロックは、2つ以上のクラスタ内に常駐することもできる(図3)。例示的実施形態において、BLOBのサブブロックを1つまたは複数のクラスタ内に順次格納することができる(図2)。これによりBLOB検索の効率が改善される。何故なら、BLOB内のサブブロックの全シーケンスを、1回の順次読出動作でディスクから読み出すことができるからである。このことは、各サブブロックを探してランダム・アクセス・ディスク・シークを行うよりも遥かに効率的である。
In the exemplary embodiment,
例示的実施形態においては、同じまたは異なるBLOB内の異なるスパンは、同じサブブロックを含む(図4)。これにより冗長性を低減することができる。何故なら、同じサブブロックを含むBLOBは、(クラスタ内の)同じサブブロックを指すスパンにより表示することができるからである。 In the exemplary embodiment, different spans in the same or different BLOBs include the same sub-block (FIG. 4). Thereby, redundancy can be reduced. This is because BLOBs containing the same sub-block can be represented by spans pointing to the same sub-block (within a cluster).
本発明のさらに他の態様によれば、各クラスタは、クラスタが使用するスペースの大きさを低減するためにデータ圧縮方法により圧縮される。これを行う最も簡単な方法は、全クラスタを圧縮することである。いくつかの実施形態(特に大きなクラスタを使用する実施形態の場合には)においては、全クラスタ(またはサブブロックを読み出す前のクラスタの少なくとも一部)を圧縮解除しなくても、クラスタ内のサブブロックにアクセスすることができるように、クラスタの各部分(例えば、個々のサブブロックまたはサブブロックの一続きの部分)を圧縮することが望ましい場合がある。 According to yet another aspect of the invention, each cluster is compressed by a data compression method to reduce the amount of space used by the cluster. The simplest way to do this is to compress the entire cluster. In some embodiments (especially in the case of using large clusters), the entire cluster (or at least a portion of the cluster prior to reading the sub-block) may be decompressed without subcompression. It may be desirable to compress each part of the cluster (eg, an individual sub-block or a series of sub-blocks) so that the block can be accessed.
本発明のさらに他の態様によれば、各クラスタ内のサブブロックのディレクトリ70が各クラスタに対して生成され、(通常は開始のところの)クラスタ内に格納されるか(図7)、または別々に80、82(図8)内に格納される。ディレクトリは、例えば、サブブロックの前に各サブブロックのメタデータを格納することにより、クラスタ全体に分配することもできる(図9)。ディレクトリは、そのハッシュ、長さ、サブブロック識別子、およびクラスタ内のその位置のような、各サブブロックに対する種々のメタデータを含むことができる。
According to yet another aspect of the invention, a
本発明のさらに他の態様によれば、2つ以上のBLOBが共有するサブブロックが識別される。例示的実施形態においては、サブブロックのコンテンツまたはサブブロック・ハッシュ(サブブロックのコンテンツのハッシュ)をクラスタ52、54、56にマッピングする(または関連付ける)サブブロック・インデックス50が維持される。格納動作中、格納される各サブブロックが、サブブロック・インデックス内で参照される。存在する場合には、サブブロックは再度格納されない。サブブロックが存在しない場合には、サブブロックはクラスタ内に格納され、それに対するエントリがサブブロック・インデックスに追加される。いずれの場合も、新しいサブブロックがスパン58により参照される。
According to yet another aspect of the invention, sub-blocks shared by two or more BLOBs are identified. In the exemplary embodiment, a
本発明のある態様によれば、特定のサブブロックが記憶装置内にすでに存在していることをインデックスが示す場合には、一致するサブブロックのクラスタがアクセスされ、クラスタ内の一致するサブブロックの後のサブブロックが、格納するBLOB内の一致するサブブロックの後のサブブロックと比較される(図10)。この比較はインデックスにアクセスしないで行うことができ、実際には、サブブロックを含んでいるクラスタが、サブブロック・ハッシュを含むサブブロック・ディレクトリを有している限り、実際のサブブロック・コンテンツ・データにアクセスしないで行うことができる。
用語
欠落サブブロック:記憶装置内に存在していないサブブロック
BLOB(バイナリ・ラージ・オブジェクト):データのゼロまたはそれ以上のバイト(またはビット)の有限シーケンス。その名前にも関わらず、BLOBは必ずしも大きくはない。BLOBは、数ビットまたはバイトのように小さいものであってもよいし、またはギガバイトのように大きいものであってもよい。
According to one aspect of the invention, if the index indicates that a particular sub-block already exists in the storage device, the cluster of matching sub-blocks is accessed and the matching sub-block in the cluster is accessed. The later sub-block is compared with the subsequent sub-block after the matching sub-block in the BLOB to store (FIG. 10). This comparison can be done without accessing the index; in fact, as long as the cluster containing the subblock has a subblock directory containing the subblock hash, the actual subblock content This can be done without accessing the data.
Term Missing Subblock: A subblock that does not exist in storage BLOB (Binary Large Object): A finite sequence of zero or more bytes (or bits) of data. Despite its name, BLOB is not necessarily large. A BLOB may be as small as a few bits or bytes, or as large as a gigabyte.
BLOBレコード:特定のBLOBについての情報を記録している記憶装置内に維持されているレコード。また、BLOBレコードは、BLOBコンテンツを定義するスパンのリスト(またはツリー)を含むこともできるし、または参照することもできる。 BLOB record: A record maintained in a storage device that records information about a particular BLOB. A BLOB record can also include or reference a list (or tree) of spans that define BLOB content.
BLOBテーブル:BLOB識別子(例えば、制限なしに、BLOBハッシュ)をBLOBレコードに関連付けるデータ構造
クラスタ:「サブブロック・クラスタ」の短縮語。関連するサブブロックのグループ。クラスタは、クラスタ内のサブブロックについての情報を提供する関連サブブロック・ディレクトリを有することができる。
BLOB table: A data structure that associates a BLOB identifier (eg, BLOB hash, without limitation) with a BLOB record. A group of related sub-blocks. A cluster can have an associated subblock directory that provides information about the subblocks in the cluster.
クラスタ・サブブロック・ディレクトリ:クラスタ内のサブブロックについての情報を提供するメタデータの集合体。サブブロックのメタデータは、サブブロックの長さ、ハッシュ、識別子および基準カウントを含むことができる(しかし、含むことができるものはこれらに限定されない)。 Cluster subblock directory: A collection of metadata that provides information about subblocks in a cluster. Sub-block metadata may include (but is not limited to) sub-block length, hash, identifier, and reference count.
隣接する:物事の順序付きグループ内の2つの物事が隣り合っている場合には、隣接するという。Nの物事が正確にN−1の隣り合った1対の物事を含んでいる場合には(すなわち、Nの物事が1つの連続している一続きの部分として表される場合には)、物事の順序付きグループ内のNという物事は隣接している。 Adjacent: Two things in an ordered group of things are said to be adjacent if they are next to each other. If N things contain exactly N-1 adjacent pairs of things (ie if N things are represented as one continuous stretch), Things N in an ordered group of things are adjacent.
隣接サブブロック:隣り合っている場合には、あるコンテキスト(例えば、BLOBまたはクラスタ)において、2つのサブブロックは隣接している。Nという物事が正確にN−1の隣り合った1対のサブブロックを含んでいる場合には(すなわち、サブブロックが1つの連続している一続きの部分となっている場合には)、あるコンテキストにおいてNのサブブロックは隣接している。 Adjacent sub-blocks: When adjacent, two sub-blocks are adjacent in a context (eg, BLOB or cluster). If N includes exactly N-1 adjacent pairs of sub-blocks (ie, if the sub-block is a single continuous sequence), In some contexts, N subblocks are adjacent.
ディレクトリ:クラスタ・サブブロック・ディレクトリ参照
ディスク:コンピュータが使用するランダム・アクセス記憶媒体。通常、ディスクという用語は、磁化したデータを保持している金属の回転円盤(ハードディスク)を意味する。本明細書においては、ディスクという用語は、メモリよりかなり遅いランダム・アクセス記憶媒体を意味するようにもっと広義に解釈することができる。
Directory: Cluster sub-block directory reference Disk: Random access storage medium used by computers. Usually, the term disk means a metal rotating disk (hard disk) holding magnetized data. As used herein, the term disk can be interpreted more broadly to mean a random access storage medium that is much slower than memory.
固定長分割方法:データを固定長サブブロックに分割するデータを分割するための方法。例えば、固定長分割方法は、BLOBを512バイトのサブブロックに分割することができる。 Fixed-length division method: A method for dividing data into data that is divided into fixed-length sub-blocks. For example, the fixed length division method can divide a BLOB into 512-byte sub-blocks.
ハッシュ:ハッシュ・アルゴリズムが生成したバイト(またはビット)の固定長シーケンス。サブブロックのハッシュは、サブブロックを索引し、比較するためのサブブロックを表すものとして使用することができる。 Hash: A fixed-length sequence of bytes (or bits) generated by a hash algorithm. A sub-block hash can be used to represent a sub-block for indexing and comparing sub-blocks.
ハッシュ・アルゴリズム:バイト(またはビット)の有限シーケンスを受け入れ、入力シーケンスに高度に依存するバイト(またはビット)の有限シーケンスを生成するアルゴリズム。通常、ハッシュ・アルゴリズムは、特定の固定長の出力を生成する。ハッシュ・アルゴリズムは、シーケンスを直接比較しなくても、データの2つのシーケンスが同じであるか否かをチェックするための試験に使用することができる。実際に暗号化ハッシュを使用すれば、そのハッシュが同じである場合、2つのサブブロックが同じであると結論することができる。ハッシュ・アルゴリズムは、BLOB識別子を生成し、サブブロックを比較し、ハッシュ・テーブル・キーを生成するために、例示的実施形態において使用することができる。 Hash algorithm: An algorithm that accepts a finite sequence of bytes (or bits) and generates a finite sequence of bytes (or bits) that is highly dependent on the input sequence. Usually, a hash algorithm produces a specific fixed length output. The hash algorithm can be used for testing to check whether two sequences of data are the same without directly comparing the sequences. In fact, if a cryptographic hash is used, it can be concluded that the two sub-blocks are the same if the hash is the same. A hash algorithm can be used in the exemplary embodiment to generate a BLOB identifier, compare sub-blocks, and generate a hash table key.
サブブロックのハッシュ:サブブロック・ハッシュ参照
インデックス:サブブロック・インデックス参照
インデックス・バケット:ハッシュ・テーブルを使用してサブブロック・インデックスを実施する実施形態の場合には、ハッシュ・テーブルを、それぞれが空であるかエントリを含み、それぞれが一定数のエントリ・スロットを含むバケットのアレイとして構成することができる。インデックス・バケットの1つの目的は、ハッシュ・テーブルを、ランダム・アクセス・ディスク動作の回数を低減するために、グループとしてディスクから読み出し、ディスクに書き込むことができる部分に構成することである。
インデックス・エントリ:サブブロック・インデックス内のレコード。ある実施形態の場合には、インデックス・レコードは、インデックス・キーおよびインデックス値を含む。ある実施形態の場合には、インデックス・レコードは、インデックス・キーの一部およびインデックス値を含む。ある実施形態の場合には、インデックス・レコードはインデックス値だけを含む。ある実施形態の場合には、インデックス・レコードは値を含まないで、キーの一部または全部を含む。
Subblock Hash: Subblock Hash Reference Index: Subblock Index Reference Index Bucket: For embodiments that implement a subblock index using a hash table, each hash table is empty Can be configured as an array of buckets, each containing a certain number of entry slots. One purpose of the index bucket is to organize the hash table into portions that can be read from and written to the disk as a group to reduce the number of random access disk operations.
Index entry: A record in a sub-block index. In some embodiments, the index record includes an index key and an index value. In some embodiments, the index record includes a portion of the index key and an index value. In some embodiments, the index record contains only the index value. In some embodiments, the index record does not contain a value and contains some or all of the key.
インデックス・キー:サブブロックについての情報を検索するために、サブブロック・インデックスに提供されるサブブロックについての情報。ある実施形態の場合には、この情報はインデックス・エントリの位置を発見し、読み出すことにより検索される。 Index key: Information about a sub-block that is provided to the sub-block index to retrieve information about the sub-block. In one embodiment, this information is retrieved by locating and reading the index entry.
インデックス値:サブブロック(またはその一例がそのハッシュであるサブブロックの派生物)をインデックスで参照した場合に、インデックスによりサブブロックについて生成された情報。ある実施形態の場合には、この値は、ディスク上のサブブロックの位置からなる。他の実施形態の場合には、インデックスの唯一の目的がキーの有無を記録することである場合には、値が存在しない場合がある。ある実施形態の場合には、この値は単にクラスタ数からなる。 Index value: Information generated about a sub-block by the index when the sub-block (or a derivative of the sub-block whose example is the hash) is referenced by the index. In some embodiments, this value consists of the location of the sub-block on the disk. In other embodiments, the value may not exist if the only purpose of the index is to record the presence or absence of a key. In some embodiments, this value simply consists of the number of clusters.
サブブロックの長さ:サブブロック・コンテンツ内のバイト(またはビット)数
線形探索:1つずつ集合体内のオブジェクトをチェックすることによる、およびチェックする次のオブジェクトの選択が前のチェックの結果により影響を受けない場合の、オブジェクトの集合体内の1つのオブジェクトに対する探索方法。
スパンのリスト:スパンの順序付きリスト。このようなリストは、BLOBのコンテンツを表示するために使用することができる。
Subblock length: the number of bytes (or bits) in the subblock content Linear search: by checking the objects in the collection one by one, and the selection of the next object to check is affected by the result of the previous check A search method for one object in a collection of objects when it is not.
List of spans: An ordered list of spans. Such a list can be used to display BLOB content.
一致する一続きの部分:(例えば、格納しているBLOB内に存在してもよい)サブブロックの他のシーケンスと一致する(クラスタ内の)サブブロックのシーケンス。ある実施形態の場合には、サブブロックのシーケンスは隣接している。 A sequence of matches: a sequence of sub-blocks (within a cluster) that matches other sequences of sub-blocks (eg, which may be present in the stored BLOB). In some embodiments, the sequence of sub-blocks is contiguous.
メモリ:通常、ランダム・アクセス・メモリ(RAM)を参照するコンピュータが使用するランダム・アクセス記憶媒体。本明細書においては、この用語は、「ディスク」よりかなり速いランダム・アクセス記憶媒体を意味するようにもっと広義に解釈することができる。 Memory: A random access storage medium typically used by computers that reference random access memory (RAM). As used herein, the term can be interpreted more broadly to mean a random access storage medium that is significantly faster than a “disk”.
分割方法:BLOB内の各バイト(またはビット)が、正確に1つのサブブロック内に入るように、BLOBを1つまたは複数のサブブロックに分割するための方法。 Dividing method: A method for dividing a BLOB into one or more sub-blocks so that each byte (or bit) in the BLOB falls within exactly one sub-block.
存在サブブロック:記憶装置内に存在するサブブロック。 Existence sub-block: A sub-block present in the storage device.
低冗長:バイト(またはビット)の同一シーケンスのコピー数の任意のタイプのデータ表示での低減である。 Low redundancy: A reduction in the number of copies of the same sequence of bytes (or bits) in any type of data display.
低冗長記憶装置:データのその表示の際に、自身が格納している一組のデータ内の複製データのいくつかを除去する記憶システム。 Low redundancy storage: A storage system that removes some of the duplicated data in the set of data it stores during its display of data.
サブブロックへの参照:サブブロックを識別する1つのデータ。例えば、制限なしで、参照は、コンテンツまたは格納位置によりサブブロックを識別することができる。 Reference to sub-block: A piece of data that identifies a sub-block. For example, without limitation, the reference can identify sub-blocks by content or storage location.
基準計数:あるエンティティがもはや必要なくなった時を判定するための方法。この方法は、エンティティに対して存在する参照の数を記録するカウンタを維持するステップを含む。基準カウントがゼロになった場合には、エンティティを削除することができる。ある実施形態の場合には、BLOBおよび/またはサブブロックは基準カウントを有する。 Reference Count: A method for determining when an entity is no longer needed. The method includes maintaining a counter that records the number of references that exist for the entity. If the reference count reaches zero, the entity can be deleted. In some embodiments, the BLOB and / or sub-block has a reference count.
スパン:クラスタ内のサブブロックのシーケンス。ある実施形態の場合には、このシーケンスは隣接している。 Span: A sequence of sub-blocks in a cluster. In some embodiments, this sequence is contiguous.
スパン・レコード:クラスタ内のスパンを識別するレコード。ある実施形態の場合には、スパン・レコードは、クラスタ番号フィールド、開始サブブロック識別子フィールド、および(サブブロックまたはバイトの)スパン長フィールドを含む。 Span record: A record that identifies a span within a cluster. In some embodiments, the span record includes a cluster number field, a starting subblock identifier field, and a span length field (in subblocks or bytes).
記憶装置:低冗長記憶装置参照。 Storage device: See low redundancy storage device.
サブブロック:索引、比較および/または冗長除去のための単位として識別されたバイト(またはビット)のシーケンス。BLOBはサブブロックに分割することができる。 Sub-block: A sequence of bytes (or bits) identified as a unit for indexing, comparison and / or redundancy removal. BLOB can be divided into sub-blocks.
サブブロック・クラスタ:一緒に格納している1つまたは複数のサブブロックのグループ。「クラスタ」とも呼ばれる。 Subblock cluster: A group of one or more subblocks stored together. Also called “cluster”.
サブブロック・コンテンツ:サブブロックのメタデータとは異なるサブブロックの実際のデータ。 Sub-block content: actual data of a sub-block different from the sub-block metadata.
サブブロック・ディレクトリ:クラスタ・サブブロック・ディレクトリ参照。 Subblock directory: Cluster subblock directory reference.
サブブロック満了日:サブブロックをユーザが必要としないことを保証された場合に、最も初期の日付を定義するサブブロックと関連する1つのメタデータ。 Subblock Expiration Date: A piece of metadata associated with the subblock that defines the earliest date when it is guaranteed that the user does not need the subblock.
サブブロック・ハッシュ:サブブロックへのハッシュ・アルゴリズムの適用結果。サブブロックのハッシュは、例えば、サブブロックを索引および/または比較するために、サブブロックを表すものとして使用することができる。 Subblock hash: The result of applying a hash algorithm to a subblock. A subblock hash may be used to represent a subblock, for example, to index and / or compare subblocks.
サブブロック識別子:サブブロックに関連する1つのメタデータ。識別子はクラスタ内のサブブロックに対して一意のものであり、それ故、そのクラスタ内のサブブロックを一義的に識別するために使用することができる。ある実施形態の場合には、異なるクラスタ内のサブブロックは、同じ識別子を有することができる。 Sub-block identifier: One piece of metadata associated with a sub-block. The identifier is unique to the sub-block in the cluster and can therefore be used to uniquely identify the sub-block in that cluster. In some embodiments, sub-blocks in different clusters can have the same identifier.
サブブロック・インデックス:サブブロックの位置(例えば、制限なしで、クラスタ番号(およびまた、おそらくサブブロック識別子))に、サブブロックのハッシュ(またはサブブロック自身)をマッピングする(または他の方法で関連付ける)データ構造。 Sub-block index: maps (or otherwise associates) a sub-block hash (or sub-block itself) to a sub-block location (eg, without limitation, cluster number (and possibly also a sub-block identifier)) )data structure.
サブブロック・メタデータ:サブブロックについての情報。サブブロックのメタデータは、(制限なしに)サブブロックの長さ、サブブロックのハッシュ、サブブロックの識別子、サブブロックの満期日付、およびサブブロックの基準カウントを含むことができる。 Sub-block metadata: information about sub-blocks. The sub-block metadata may include (without limitation) the length of the sub-block, the hash of the sub-block, the identifier of the sub-block, the expiration date of the sub-block, and the reference count of the sub-block.
サブブロック・レコード:1つのサブブロックに対するメタデータを含むクラスタ・サブブロック・ディレクトリ内のレコード。 Subblock record: A record in the cluster subblock directory that contains metadata for one subblock.
サブブロック基準カウント:サブブロックに対する参照の現在数を記録する1つのサブブロック・メタデータ。ある実施形態の場合には、これはサブブロックを含むスパンを定義するスパン・レコードの数である。 Subblock criteria count: One subblock metadata that records the current number of references to a subblock. In one embodiment, this is the number of span records that define the span that contains the subblock.
サブブロック一連番号:サブブロック識別子の形式。例えば、一連番号システムを使用するある実施形態の場合には、特定のクラスタに到着するサブブロックには、第1のサブブロックに対して1から始まり増大する一連番号が割り当てられる。ある実施形態の場合には、サブブロックを削除した場合には、一連番号は再使用されない。これらの実施形態の場合には、一連番号は、クラスタ内のサブブロックを一意に識別する方法を提供する。 Sub-block serial number: Sub-block identifier format. For example, in one embodiment using a sequence number system, a sub-block arriving at a particular cluster is assigned a sequence number starting with 1 and increasing relative to the first sub-block. In some embodiments, the sequence number is not reused when a sub-block is deleted. In these embodiments, the sequence number provides a way to uniquely identify the sub-block within the cluster.
ユーザ:記憶装置内にBLOBを格納し、検索する1つのソフトウェア。 User: A piece of software that stores and retrieves a BLOB in a storage device.
可変長分割方法:BLOBを可変長サブブロックに分割する分割方法。好ましい実施形態の場合には、可変長分割方法は、データをデータのコンテンツが決定する境界のところで分割する。例えば、制限なしに、分割方法は、前のいくつかのバイトが、特定の所定の一定値にハッシュするBLOB内の各位置のところのサブブロック境界を定義することができる。 Variable length division method: A division method for dividing a BLOB into variable length sub-blocks. In the preferred embodiment, the variable length splitting method splits the data at the boundaries determined by the data content. For example, without limitation, the partitioning method can define sub-block boundaries at each location in the BLOB where the previous few bytes hash to a certain predetermined constant value.
仮想ブロック装置:オペレーティング・システムが提供する固定長記憶ブロックのアレイからなる装置。仮想装置は、物理デバイスに直接対応することができ、または(例えば、RAIDを使用して)1つまたは複数の物理デバイスから構成することができる。 Virtual block device: A device that consists of an array of fixed-length storage blocks provided by the operating system. A virtual device can directly correspond to a physical device or can be composed of one or more physical devices (eg, using RAID).
全キー:小さな派生キーの元として使用されるキー。データ構造が成長し、派生キーが必要になるので、全キーの増大する部分を、派生キーを形成するのに使用することができる。 All keys: Keys that are used as sources for small derived keys. As the data structure grows and derived keys are required, the growing portion of the entire key can be used to form the derived key.
本明細書全体および添付の特許請求の範囲を通して、別段の指示がない限り、「備える」および「含む」という用語、および「備えている」および「含んでいる」という派生語は、「包含」および「除外しないこと」を意味する用語であると理解されたい。例えば、このような用語を記載の整数または整数のグループを参照するために使用した場合には、このような用語は、任意の他の整数または整数のグループの除外を意味しない。 Throughout this specification and the appended claims, unless otherwise indicated, the terms “comprising” and “including”, and the derivatives “comprising” and “including”, It should be understood as a term that means “do not exclude”. For example, when such terms are used to refer to the stated integer or group of integers, such terms do not imply the exclusion of any other integer or group of integers.
本明細書の添付の特許請求の範囲は、本明細書に記載する本発明の広義の記述であり、参照により本明細書に組み込まれる。 The claims appended hereto are a broad description of the invention described herein, which is incorporated herein by reference.
本明細書での任意の従来技術への参照は、このような従来技術が共通の一般的知識の一部を形成しているという容認でもなければ、任意の形式の示唆でもないし、またそのように解釈すべきでもない。 Reference to any prior art herein is neither an admission, nor an indication of any form, and such as that such prior art forms part of the common general knowledge. Should not be interpreted.
添付の図面を参照しながら、以下に本発明の特定の実施形態についてさらに詳細に説明する。これらの実施形態は、説明のためのものであって、本発明の範囲を制限するためのものではない。他の実施形態の示唆および記述を本発明の範囲内に含めることができるが、これらのものは添付の図面には示していないし、または別の方法で本発明の機能を図面には示してあるが本明細書には記述していない。 Specific embodiments of the present invention will be described in further detail below with reference to the accompanying drawings. These embodiments are illustrative and are not intended to limit the scope of the invention. Suggestions and descriptions of other embodiments may be included within the scope of the present invention, but these are not shown in the accompanying drawings, or the function of the present invention is otherwise shown in the drawings. Is not described herein.
図5は、本発明の典型的な実施形態の要素の概観である。この実施形態は、BLOBレコード51、53と、スパン・リスト58と、クラスタ52、54、56と、サブブロック・インデックス50とを含む。図38は、典型的なコンピュータ・ハードウェア上でのこれらの要素の配置を示す。すべてのデータ構造はディスク380上に常駐している。インデックス381も、いくつかのBLOBレコード382およびクラスタ383のいくつかの作業コピーを格納しているいくつかのキャッシュと一緒にメモリ内に保持されている。
6.1 ハッシュ関数の概観
すべての実施形態においてはハッシュ関数を使用していないが、ハッシュ関数は、多くの実施形態でいくつかの利点を提供する。下記の説明は、本発明の種々の実施形態に関連して使用することができる例示としてのハッシュ関数の概観である。
FIG. 5 is an overview of the elements of an exemplary embodiment of the present invention. This embodiment includes BLOB records 51, 53,
6.1 Overview of Hash Functions Although all embodiments do not use hash functions, hash functions provide several advantages in many embodiments. The following description is an overview of an exemplary hash function that can be used in connection with various embodiments of the invention.
ハッシュ関数は、ビットの可変長入力ブロックを受け入れ、入力ブロックをベースとするビットの出力ブロックを生成する。大部分のハッシュ関数は、出力ブロックが特定の長さ(例えば、16ビット)になることを保証し、入力ブロックの無限集合と出力ブロックの有限集合との間でランダムではあるが、決定論的マッピングを提供するようにする。ランダムさの特性により、「ハッシュ」と呼ばれるこれらの出力を、入力ブロックの容易に操作した表示として動作させることができる。 The hash function accepts a variable length input block of bits and generates an output block of bits based on the input block. Most hash functions guarantee that the output block will be a certain length (eg, 16 bits) and are random but deterministic between an infinite set of input blocks and a finite set of output blocks Provide a mapping. Due to the nature of randomness, these outputs, called “hash”, can be operated as an easily manipulated display of the input block.
ハッシュ関数は少なくとも4つのクラスの強度を有する。 The hash function has at least four classes of strength.
狭いハッシュ関数:狭いハッシュ関数は、最も弱いクラスのハッシュ関数であり、出力値の全スペースを妥当な時間内に探索することができるような、非常に狭い(例えば、16ビット)出力値を生成する。例えば、8ビットのハッシュ関数は、任意のデータ・ブロックを0〜255の範囲内のハッシュにマッピングする。16ビットのハッシュ関数は、0〜65535の範囲内のハッシュにマッピングする。特定のハッシュ値の場合には、単に探索する値が表れるまで、ランダム・ブロックを生成し、これらのブロックを狭いハッシュ関数に提供することにより、対応するブロックを発見することができる。狭いハッシュ関数は、一組のデータ値を少数のグループに任意に(しかし決定論的に)分類するために、通常、使用される。それ故、狭いハッシュ関数は、ハッシュ・テーブル・データ構造を構成し、ノイズの多い通信チャネルを通して送信したデータのエラーを検出するのに役に立つ。このクラスの例としては、CRC−16、CRC−32、フレッチャ・チェックサム、IPチェックサム等がある。 Narrow hash functions: Narrow hash functions are the weakest class of hash functions, producing very narrow (eg, 16-bit) output values that can search the entire space of output values in a reasonable amount of time. To do. For example, an 8-bit hash function maps an arbitrary data block to a hash in the range 0-255. A 16-bit hash function maps to a hash in the range 0-65535. In the case of a particular hash value, the corresponding block can be found by simply generating random blocks and providing these blocks to a narrow hash function until the value to search for appears. Narrow hash functions are typically used to arbitrarily (but deterministically) classify a set of data values into a small number of groups. Therefore, a narrow hash function is useful for constructing a hash table data structure and detecting errors in data transmitted over a noisy communication channel. Examples of this class include CRC-16, CRC-32, Fletcher checksum, IP checksum and the like.
広いハッシュ関数:広いハッシュ関数は、その出力値がかなり広いということを除けば、狭いハッシュ関数に類似している。ある点においては、この定量的違いは、定性的違いを意味する。広いハッシュ関数の場合には、出力値が非常に広い(例えば、128ビット)ので、同じハッシュ値を有する任意の2つのランダムに選択したブロックの確率は無視することができる(例えば、1038のうちの約1)。この特性により、これらの広いハッシュを、これらが計算されたデータのブロックの「ID(identity)」として使用することができる。例えば、エンティティE1がデータのブロックを有し、エンティティE2にブロックの広いハッシュを送った場合で、エンティティE2が同じハッシュを有するブロックを有している場合には、ブロックが実際に異なる先験的確率は無視することができる。唯一の問題は、広いハッシュ関数が非反転できるように設計されていないことである。それ故、(例えば)2128値のスペースは、狭いハッシュ関数のところで説明した方法で探索するにはあまりに広すぎるが、ハッシュ関数を分析し、特定のハッシュに対応するブロックを計算するのは容易である。それ故、E1が本当に異なるブロックである場合には、E1は、E2がE1が1つのブロックを有すると思い込ませることができる。このクラスの例としては、任意の128ビットのCRCアルゴリズムがある。 Wide hash function: A wide hash function is similar to a narrow hash function, except that its output value is fairly wide. In some respects, this quantitative difference means a qualitative difference. For a wide hash function, the output value is very wide (eg, 128 bits), so the probability of any two randomly selected blocks having the same hash value can be ignored (eg, 10 38 About 1) This property allows these wide hashes to be used as the “ID (identity)” of the block of data for which they were calculated. For example, if entity E1 has a block of data and has sent a wide hash of the block to entity E2 and entity E2 has a block with the same hash, the blocks are actually different a priori Probability can be ignored. The only problem is that the wide hash function is not designed to be non-invertible. Therefore, a space of (for example) 2 128 values is too wide to search in the way described for narrow hash functions, but it is easy to analyze the hash function and calculate the block corresponding to a particular hash It is. Therefore, if E1 is a really different block, E1 can make E2 assume that E1 has one block. An example of this class is an arbitrary 128-bit CRC algorithm.
弱一方向ハッシュ関数:弱一方向ハッシュ関数は、「ID」を提供するのに十分広いばかりでなく、特定のハッシュ値が与えられた場合、そのハッシュ値に対応するブロックを発見するのが極度に難しい暗号保証を提供する。このクラスの例としては、64ビットDESハッシュがある。 Weak one-way hash function: A weak one-way hash function is not only wide enough to provide an “ID”, but given a particular hash value, it is extremely hard to find the block corresponding to that hash value Provide difficult cryptographic guarantees. An example of this class is a 64-bit DES hash.
強一方向ハッシュ関数:強一方向ハッシュ関数は、同じハッシュ値を有する任意の2つの異なるブロックを発見するのが難しい暗号保証を提供する追加特性を有することを除けば、弱一方向ハッシュ関数と同じものである。この場合、ハッシュ値は指定されない。このクラスの例としては、MD5およびSHA−1がある。 Strong one-way hash function: A strong one-way hash function is a weak one-way hash function, except that it has the additional property of providing cryptographic guarantees that are difficult to find any two different blocks having the same hash value. The same thing. In this case, no hash value is specified. Examples of this class are MD5 and SHA-1.
これら4つのクラスのハッシュは、選択が行われるある範囲のハッシュ強度を提供する。予想されるように、ハッシュ関数の速度は、強度が増大するにつれて低減し、トレードオフを提供し、異なる用途の場合には異なる強度が適切な強度になる。しかし、違いは非常に小さいので、最もタイムクリティカルな用途以外では、強一方向ハッシュ関数を使用することができる。 These four classes of hashes provide a range of hash strengths from which selections can be made. As expected, the speed of the hash function decreases as the strength increases, providing a trade-off, with different strengths being the appropriate strength for different applications. However, the difference is so small that a strong one-way hash function can be used except for the most time critical applications.
暗号ハッシュという用語は、多くの場合、弱一方向ハッシュ関数のクラスおよび強一方向ハッシュ関数のクラス両方を含む暗号強度を提供するハッシュを指すために使用される。 The term cryptographic hash is often used to refer to a hash that provides cryptographic strength that includes both a class of weak one-way hash functions and a class of strong one-way hash functions.
本発明の例示的実施形態は、少なくとも2つの役割でハッシュ関数を使用することができる。 Exemplary embodiments of the present invention can use hash functions in at least two roles.
1.サブブロック境界を決定するために。 1. To determine sub-block boundaries.
2.サブブロックIDを生成するために。 2. To generate a sub-block ID.
用途に従って、上記4つのクラスのうちの任意のクラスからのハッシュ関数をいずれかの役割で使用することができる。しかし、サブブロック境界の決定にはIDおよび暗号強度が必要ないので、最も弱いクラス以外からのクラスからのハッシュ関数を使用するのは非効率である。同様に、IDの必要性、絶えず存在する破壊行為の脅威、および強一方向ハッシュ関数(弱一方向ハッシュ関数と比較した場合)に対する低性能というペナルティは、強一方向ハッシュ関数より弱いいかなるものもサブブロックIDの計算に使用すべきではないことを示唆している。 Depending on the application, hash functions from any of the four classes can be used in any role. However, since the ID and encryption strength are not required for determining the sub-block boundary, it is inefficient to use a hash function from a class other than the weakest class. Similarly, the penalty of low performance against the need for ID, the threat of vandalism that exists constantly, and strong one-way hash functions (as compared to weak one-way hash functions) is anything weaker than strong one-way hash functions. This suggests that it should not be used to calculate sub-block IDs.
IDを生成するために強一方向ハッシュ関数以下の何かを使用する際につきもののセキュリティの危険は、任意のこのような弱ハッシュ関数を使用する本発明を組み込む記憶システムを考慮することにより説明することができる。このようなシステムにおいては、侵入者は、修正したサブブロックが、ターゲット・システム内にすでに存在することを侵入者が知っている他のサブブロックと同じハッシュを有するように、(ターゲット・システムにより操作される)サブブロックを修正することができる。そうすると、ターゲット・システムがそれを新しいものと置き換えないで、既存のサブブロックを保持する結果になる恐れがある。(例えば)ターゲット・システムがネットワーク上で検索したセキュリティ・パッチを正しく適用するのを防止するために、このような弱点を使用することができる。 The security risks associated with using something less than a strong one-way hash function to generate an ID are explained by considering a storage system incorporating the present invention that uses any such weak hash function. be able to. In such a system, the intruder has the same hash as the other subblocks that the intruder knows that the modified subblock already exists in the target system (by the target system). The sub-block that is operated on can be modified. Doing so can result in the target system not retaining it with a new one but retaining the existing sub-block. Such weaknesses can be used to prevent (for example) the target system from correctly applying security patches retrieved on the network.
それ故、敵意を持つ人間に曝されないシステムでサブブロックを計算するのに、広いハッシュ関数を安全に使用することができるが、弱一方向ハッシュ関数が、これらのシステムでは非セキュアとなる恐れがある。 Therefore, a wide hash function can be used safely to compute sub-blocks in systems that are not exposed to hostile humans, but weak one-way hash functions can be insecure on these systems. is there.
ここで、ブロックまたはサブブロックのハッシュを実際に使用することができる方法について説明する。
6.2 暗号ハッシュの使用
暗号ハッシュ(およびここでは強一方向ハッシュ関数)の理論特性は、特に興味のある実際の特性を生成する。このようなハッシュはかなり広いので、2つのランダムに選択したサブブロックが、同じハッシュを有する確率は事実上ゼロであり(128ビット・ハッシュの場合には、1038のうちの約1であり)、同じハッシュを有する2つのサブブロックを発見するのは計算上不可能であるので、スパイがそのようなことを行うことができないことを事実上保証している。これらの特性の密接な関係は、実際の見地から見ると、特定の暗号ハッシュ・アルゴリズムに対するハッシュ値の有限集合は、有限の可変長サブブロックの無限集合に対して1対1の関係になる。これは、同じ値にハッシュする2つのサブブロックを発見するのは実際上不可能であるので、実際には、理論上不可能な特性であることは明らかである。
Here, a method that can actually use a hash of a block or sub-block will be described.
6.2 Use of cryptographic hashes The theoretical properties of cryptographic hashes (and strong one-way hash functions here) generate actual properties that are of particular interest. Since such hashes are quite wide, the probability that two randomly selected sub-blocks have the same hash is virtually zero (in the case of a 128-bit hash, it is about 1 out of 10 38 ). Since it is computationally impossible to find two sub-blocks with the same hash, it virtually guarantees that the spy cannot do that. The close relationship between these properties, from a practical standpoint, is a one-to-one relationship between a finite set of hash values for a particular cryptographic hash algorithm and an infinite set of finite variable length sub-blocks. Obviously, this is a theoretically impossible property since it is practically impossible to find two sub-blocks that hash to the same value.
この特性は、(同一であることのために)比較の目的で、計算されたサブブロックの代わりに、暗号ハッシュを安全に使用することができることを意味する。大部分の暗号ハッシュは約128ビットの長さしかないので、ハッシュは、サブブロック自身のコンテンツを直接比較しなくても、サブブロックを比較するための非常に効率的な方法を提供する。 This property means that the cryptographic hash can be used safely instead of the computed sub-block for comparison purposes (because it is identical). Since most cryptographic hashes are only about 128 bits long, hashes provide a very efficient way to compare sub-blocks without directly comparing the contents of the sub-blocks themselves.
本発明の例示的実施形態で暗号ハッシュが使用されるいくつかの方法は下記の通りである。 Some ways in which cryptographic hashes are used in an exemplary embodiment of the invention are as follows.
サブブロックの比較:暗号ハッシュHは、2つのサブブロックA、Bのコンテンツを比較しなくても、またはアクセスしなくても、2つのサブブロックA、Bを比較280するために使用することができる(図28)。 Subblock comparison: Cryptographic hash H may be used to compare 280 two subblocks A, B without comparing or accessing the contents of the two subblocks A, B Yes (FIG. 28).
サブブロックのインデックス:サブブロックA、B、C、Dの集合体を索引するために、そのキーがサブブロック292、294、296、298のハッシュであるインデックス290を構成することができる(図29)。
BLOBチェック:BLOB300のサブブロック302への分割、および再構成したBLOB304へのサブブロックの以降の再組立を確実にエラーのないものにするために、暗号ハッシュを使用することができる。このことは、元のBLOBのハッシュ306を再構成したBLOBのハッシュ308と比較309することにより行うことができる(図30)。
6.3 安全ネットとしてのハッシュの使用
本発明の実施形態は、これらの実施形態を組み込む記憶システムをさらに複雑にする場合がある。このように複雑になると、潜在的にエラーが検出されない機会が多くなる。
Sub-block index: To index a collection of sub-blocks A, B, C, D, an
BLOB check: A cryptographic hash can be used to ensure error-free partitioning of
6.3 Use of Hash as a Secure Net Embodiments of the present invention may further complicate storage systems that incorporate these embodiments. This complexity increases the chances of potentially no error being detected.
複雑さの主な機構は、BLOBのサブブロックへの分割であり、このようなサブブロックの以降の再組立である。BLOBをサブブロックに分割することにより、記憶システムが、サブブロックを間違って追加したり、削除したり、再配置したり、置換したり、複製したり、または何らかの他の方法で偶然のエラーのより大きなリスクに曝されたりする恐れがでてくる。 The main mechanism of complexity is the division of the BLOB into sub-blocks and the subsequent reassembly of such sub-blocks. By splitting the BLOB into sub-blocks, the storage system may accidentally add, delete, relocate, replace, duplicate, or some other way of accidental errors. There is a risk of exposure to greater risks.
このリスクは、サブブロックに分割される前にBLOBのハッシュ(好適には暗号ハッシュであることが好ましい)を計算し、このハッシュを全体としてBLOBに関連するエンティティと一緒に格納し、次に、格納しているハッシュを、再構成したブロックの計算したハッシュと比較することにより、低減または除去することができる。このようなチェックは、本発明を使用することによるエラーが検出されないリスクを事実上取り除く非常に強力な安全ネットを提供する(図30)。 This risk calculates a hash of the BLOB (preferably a cryptographic hash) before it is divided into sub-blocks, stores this hash together with the entity associated with the BLOB, and then By comparing the stored hash with the calculated hash of the reconstructed block, it can be reduced or eliminated. Such a check provides a very strong safety net that virtually eliminates the risk that no errors are detected by using the present invention (FIG. 30).
BLOBをチェックするもう1つの方法は、そのサブブロックのハッシュの連結をハッシュし、記憶装置からBLOBを検索した場合の値をチェックする方法である。この方法は、全体的に見てハッシュしなければならないデータが少なくてすみ、このような実施形態をより効率的にすることができるという利点を有する。
6.4 クラスタ内へのサブブロックの格納
クラスタ内にサブブロックを格納することができる方法は多数ある。「サブブロックのコンテンツ」という用語は、実際のサブブロックを形成するバイトのシーケンスを意味する。例示的実施形態においては、クラスタ74内のサブブロック72は、メタデータの介入なしで背中合わせに格納される(図7)。クラスタがそれ自身のディレクトリを持たない実施形態の場合には、背中合わせのサブブロック・コンテンツは、クラスタが含んでいなければならないすべてのものであってもよい。
Another method for checking the BLOB is to hash the concatenation of the sub-block hashes and check the value when the BLOB is retrieved from the storage device. This method has the advantage that less overall data has to be hashed and such an embodiment can be made more efficient.
6.4 Storing sub-blocks in a cluster There are many ways that a sub-block can be stored in a cluster. The term “sub-block content” means a sequence of bytes that form an actual sub-block. In the exemplary embodiment, sub-blocks 72 in
背中合わせにサブブロックを格納する利点は、サブブロックの隣接する一続きの部分を1つのシーケンシャルな動作としてクラスタから読み出すことができることであり、次に、最初に、メタデータを除去しなくても、メモリ内に保持し、1つのシーケンシャルな動作として書き出すことができることである。 The advantage of storing sub-blocks back-to-back is that adjacent runs of sub-blocks can be read from the cluster as a sequential operation, and then without first removing the metadata, It can be held in memory and written out as a single sequential operation.
サブブロックをクラスタに分割する方法を決定するために多数の方法を使用することができる。1つの方法は、少なくともS個のサブブロックを有するまでクラスタにサブブロックを書き込む方法である。ここで、Sは所定の定数である。もう1つの方法は、少なくともMメガバイトを含むまで、クラスタにサブブロックを書き込む方法である。ここで、Mは所定の定数である。
6.5 クラスタ・サブブロック・ディレクトリ
クラスタは、クラスタ内のサブブロックについての情報を提供し、クラスタ内のサブブロックの位置を迅速に発見することができるサブブロック・ディレクトリを有することができる。
A number of methods can be used to determine how to divide a sub-block into clusters. One method is to write the sub-block to the cluster until it has at least S sub-blocks. Here, S is a predetermined constant. Another method is to write sub-blocks to the cluster until it contains at least M megabytes. Here, M is a predetermined constant.
6.5 Cluster Subblock Directory A cluster can have a subblock directory that provides information about the subblocks in the cluster and can quickly locate the subblocks in the cluster.
クラスタは、ディレクトリ70を有している場合には、ディレクトリをクラスタの始めの部分(図7)またはクラスタの終わりの部分に置くことができる。もう1つの例は、サブブロック・コンテンツ92とディレクトリ90エントリをインタリーブする例である(図9)。最後に、ディレクトリ80、82は別々に格納することができる(図8)。
If the cluster has a
1つの簡単なオプションは、クラスタ内のサブブロック数上に上部限界Lを置き、クラスタ内のサブブロック数が何であれ、カウントにLディレクトリ・エントリのアレイを加えたものとしてディレクトリを表す方法である。これにより固定長ディレクトリ80、82が出来上がり、クラスタのディレクトリを、残りのクラスタのコンテンツ84、86(すなわち、サブブロックのコンテンツ)とは別々に1つのアレイを格納することができる(図8)。
6.6 クラスタ・サブブロック・ディレクトリ内のサブブロック・メタデータ
クラスタのサブブロック・ディレクトリは、各サブブロックの長さを格納することができる。通常、各サブブロックの長さの単位はバイトである。サブブロックの長さを格納した場合には、クラスタのサブブロックのコンテンツを、境界がサブブロック間にあることを決定するために、分割方法を呼び出さなくても、サブブロックに分割することができる。
One simple option is to place the upper limit L on the number of subblocks in the cluster and represent the directory as a count plus an array of L directory entries, whatever the number of subblocks in the cluster. . As a result, fixed-
6.6 Subblock Metadata in Cluster Subblock Directory The cluster subblock directory can store the length of each subblock. Usually, the unit of length of each sub-block is byte. If the length of the sub-block is stored, the contents of the sub-block of the cluster can be divided into sub-blocks without invoking the division method to determine that the boundary is between the sub-blocks .
クラスタのディレクトリは、各サブブロックのハッシュを格納することができる。例えば、ディレクトリは、クラスタ内の各サブブロックの128ビットのMD5または160ビットのSHA−1を格納することができる。各サブブロックのハッシュを格納することは役に立つ。何故なら、格納中、システムが、サブブロックXのコンテンツをサブブロックYのコンテンツと比較しなくても、新しく到着したサブブロックYがクラスタ内で発見されたことを確認することができるからである。代わりに、システムは、サブブロックYのハッシュを計算し、それを(そのクラスタのディレクトリ内で発見することができる)サブブロックXのハッシュと比較する。それ故、格納しているBLOB内のサブブロックを、記憶装置内のサブブロックのコンテンツを読み出さなくても、インデックスおよびクラスタ・ディレクトリだけを使用して、記憶装置内に存在しているか否かを試験することができる。 The cluster directory can store a hash of each sub-block. For example, the directory can store 128-bit MD5 or 160-bit SHA-1 for each sub-block in the cluster. It is useful to store a hash of each subblock. This is because during storage, the system can verify that a newly arrived sub-block Y has been found in the cluster without having to compare the content of sub-block X with the content of sub-block Y. . Instead, the system computes a hash of sub-block Y and compares it to the hash of sub-block X (which can be found in the cluster's directory). Therefore, whether or not a sub-block in the stored BLOB exists in the storage device using only the index and the cluster directory without reading the contents of the sub-block in the storage device. Can be tested.
また、クラスタのディレクトリは、各サブブロックに対するサブブロック識別子を格納することもできる。サブブロックの識別子は、クラスタ内の一組のサブブロック内で一意のものである。サブブロック識別子を実施する1つの簡単な方法は、固定幅(例えば、16ビット)を選択し、各クラスタ内の一連番号カウンタを割り当て、ゼロから開始し、次の整数を各サブブロックにその一連番号識別子として割り当てる方法である。カウンタが最大値に達した場合には、クラスタを新データに対して単に閉鎖することができる。別の方法としては、サブブロックをクラスタから削除した場合には、未使用の識別子を再度割り当てることができる。これはサブブロック識別子を実施する多くの方法のうちの1つの方法である。 The cluster directory can also store a sub-block identifier for each sub-block. The sub-block identifier is unique within a set of sub-blocks within the cluster. One simple way to implement a sub-block identifier is to select a fixed width (eg, 16 bits), assign a sequence number counter in each cluster, start at zero, and set the next integer to each sub-block in its sequence. This is a method of assigning as a number identifier. If the counter reaches the maximum value, the cluster can simply be closed for new data. Alternatively, when a sub-block is deleted from the cluster, an unused identifier can be reassigned. This is one of many ways to implement the sub-block identifier.
一連番号をサブブロック識別子として使用した場合には、その連続性をBLOB内のサブブロックの1つの一続きの部分から格納したクラスタ内のサブブロック276〜278の一続きの部分の始まりおよび終わりを示すために使用することができる。ある実施形態の場合には、このことは各格納している一続きの部分272、274の終わりのところの一連番号をスキップ(廃棄)することにより行うことができる(図27)。一連番号を使用しない場合には、クラスタ内のサブブロックの一続きの部分の(元のBLOB内のサブブロックの一続きの部分に対する)終わりを示すために、各サブブロックのメタデータに、ブール値を追加することができる。
6.7 クラスタの圧縮
システム内に圧縮(例えば、制限なしに、GZiP)を組み込むことができる方法は多数ある。1つの簡単な方法は、ディスクに書き込む前に、各クラスタに対して1つのシーケンシャルな動作として圧縮を行う方法である。もう1つの方法は、各サブブロックを個々に圧縮する方法である。もう1つの方法は、隣接する一連番号と一緒にサブブロックの各一続きの部分を圧縮する方法である。
If a sequence number is used as a subblock identifier, the beginning and end of a sequence of subblocks 276-278 in the cluster that stores its continuity from one sequence of subblocks in the BLOB. Can be used to show. In one embodiment, this can be done by skipping (discarding) the sequence number at the end of each stored
6.7 Cluster Compression There are many ways in which compression (eg, without limitation, GZiP) can be incorporated into the system. One simple method is to compress each cluster as one sequential operation before writing to disk. Another method is to compress each sub-block individually. Another method is to compress each stretch of sub-block along with adjacent sequence numbers.
クラスタは、圧縮した形式でディスク上に格納することができる。また、これらのクラスタは、圧縮した形式でメモリに格納することもできる。
6.8 スパン・サブブロック−一続きの部分の識別
各スパンは、特定のクラスタ内のサブブロックの一続きの部分を識別する。例示的実施形態の場合には、スパンは、サブブロックの一続きの部分を含むクラスタを識別する情報を含む。サブブロックの一続きの部分を識別するための広い範囲の可能性がある。そのため、一続きの部分内の最初および最後のサブブロックを識別することができ、または最初(または最後)のサブブロックを識別することができ、長さを提供することができる。長さはバイト単位またはサブブロック単位で測定することができる。
Clusters can be stored on disk in a compressed format. These clusters can also be stored in memory in a compressed format.
6.8 Span sub-block—identification of a series of parts Each span identifies a series of parts of a sub-block within a particular cluster. In the exemplary embodiment, the span includes information identifying a cluster that includes a stretch of sub-blocks. There is a wide range of possibilities for identifying a stretch of sub-blocks. As such, the first and last sub-blocks within a stretch can be identified, or the first (or last) sub-block can be identified and a length can be provided. The length can be measured in bytes or subblocks.
例示的実施形態のサブブロックを識別するために、スパンは、サブブロックのハッシュ(この場合、クラスタは(サブブロックのディレクトリを使用して(1つ有している場合))サブブロックを探索しなければならないが)、クラスタ(例えば、「第3のサブブロック」)内のサブブロックの位置、またはサブブロック識別子を使用することができる。 To identify the sub-block in the exemplary embodiment, the span is a hash of the sub-block (in this case, the cluster searches for the sub-block (if it has one (if it has one)). The location of the sub-block within the cluster (eg, “third sub-block”), or the sub-block identifier may be used.
ハッシュの幅は比較的広い。クラスタ内に(例えば)1000のサブブロックが存在する場合には、サブブロック識別子は、約10ビットの幅を有していればよいのだが、典型的なハッシュは128ビットの幅を有する。そのクラスタ内の(サブブロック単位で測定した)位置を使用すると、スペースをもっと効率的に使用することができるが、(サブブロックを含んでいるBLOBを記憶装置から削除した場合に起こるかもしれないように)サブブロックをクラスタから削除した場合、故障が起こる。これを避けるために、例示的実施形態の場合には、(クラスタ内で一意の)クラスタ内の各サブブロックに一意の識別子を割り当てることができる。この識別子は、クラスタのディレクトリ内に各サブブロックのメタデータと一緒に格納することができる。このような識別子は、(ビット単位で)十分狭いものであってもよいが、サブブロックがクラスタ内でシフトしても、サブブロックをはっきりと識別する。 The width of the hash is relatively wide. If there are (for example) 1000 sub-blocks in the cluster, the sub-block identifier need only have a width of about 10 bits, but a typical hash has a width of 128 bits. Using locations (measured in subblocks) within the cluster can use space more efficiently, but may occur if the BLOB containing the subblock is deleted from storage If a sub-block is deleted from the cluster, a failure will occur. To avoid this, in the exemplary embodiment, a unique identifier can be assigned to each sub-block in the cluster (unique within the cluster). This identifier can be stored in the cluster directory along with the metadata for each sub-block. Such an identifier may be sufficiently narrow (in bits) but clearly identifies the sub-block even if the sub-block shifts within the cluster.
もう1つのアプローチは、そのハッシュでサブブロックを参照する方法であるが、同じクラスタ内で他のすべてのサブブロックからそのサブブロックを区別するために必要なものである。スパン・レコード内の短い固定長フィールドは、記録するハッシュのバイト数を記録するために使用することができる。この方法を使用すれば、サブブロック識別子を使用する必要がなくなるし、スパン・レコードに長いハッシュによる負担がかからなくなる。この方法を使用すれば、スパン・レコードは可変長を有することができる。この方法の1つの潜在的な問題は、クラスタに追加されるサブブロックが、既存の参照を曖昧にする恐れがあることである。この問題は、このような曖昧な参照がいつでも曖昧な参照を満たす第1のサブブロックを参照するように注意することにより解決することができる。 Another approach is to reference a subblock by its hash, but is necessary to distinguish that subblock from all other subblocks in the same cluster. A short fixed length field in the spanned record can be used to record the number of bytes of hash to record. By using this method, it is not necessary to use a sub-block identifier, and the span record is not burdened by a long hash. Using this method, spanned records can have variable length. One potential problem with this method is that subblocks added to the cluster can obscure existing references. This problem can be solved by taking care that such an ambiguous reference always refers to the first sub-block that satisfies the ambiguous reference.
もう1つの方法は、サブブロックの一連番号を使用するが、これらの一連番号をスパンにより直接参照されるサブブロックだけに割り当てる方法である。実際には、スパンの第1のサブブロックは非常に少ないので、遥かに少ない数の一連番号を格納するだけですむ。
6.9 部分サブブロックの一致
BLOB170の格納中、1つまたは複数の一致するサブブロックB、Cの一続きの部分をクラスタ174内で発見した場合には、一致しているサブブロックの一続きの部分のどちらかの側面上の一致していないサブブロックのある部分が、格納しているBLOB内の対応するサブブロックの対応部分と一致する可能性がある。図17は、格納中のBLOB170および比較しているクラスタ174を示す。インデックスを使用して、サブブロックBCの一致する一続きの部分を発見した。各側面上のサブブロックは一致しない。AはEと一致しないし、DはFと一致しない。それ故、一致する一続きの部分はちょうど2つのサブブロックの長さである。しかし、BCの一致を発見した場合、周囲のサブブロックをもっと精密なレベルで比較することができる。
Another method is to use subblock sequence numbers, but assign these sequence numbers only to subblocks that are directly referenced by the span. In practice, the first sub-block of the span is so small that only a much smaller number of sequence numbers need to be stored.
6.9 Partial Subblock Matching When storing
サブブロックAの終わりとサブブロックEの終わりと比較すれば、これらのサブブロックが、同じ(例えば)123バイトの接尾部を共有していることが分かる。同様に、サブブロックDの始まりをサブブロックFの始まりと比較すると、これらのサブブロックが、同じ(例えば)1045バイトの接頭部を共有していることが分かる。これらを部分サブブロックの一致と呼ぶ。 Comparing the end of sub-block A with the end of sub-block E, it can be seen that these sub-blocks share the same (for example) 123 byte suffix. Similarly, comparing the start of sub-block D with the start of sub-block F, it can be seen that these sub-blocks share the same (for example) 1045 byte prefix. These are called partial sub-block matches.
部分サブブロックの一致を発見した場合には、多数の方法を使用することができる。図18は、スパン内の最初のサブブロックの始まりのところ、およびスパン内の最後のサブブロックの終わりのところで無視すべきバイト数を記録する余分なフィールド「開始スキップ」180および「終了スキップ」182を含むように、スパン・レコード構造を増大することができる方法を示す。もう1つの方法は、サブブロックのどちらかの終わりを延長するために、バイト数を記録する2つのフィールド「開始エクステンド」および「終了エクステンド」を使用する方法である。ある実施形態は、上記各フィールドの一方または両方の使用を選択することができる。 If a partial subblock match is found, a number of methods can be used. FIG. 18 illustrates the extra fields “Start Skip” 180 and “End Skip” 182 that record the number of bytes to be ignored at the beginning of the first subblock in the span and at the end of the last subblock in the span. We show how the spanned record structure can be increased to include Another method is to use two fields “Start Extend” and “End Extend” to record the number of bytes to extend either end of the sub-block. Some embodiments may choose to use one or both of the above fields.
サブブロックの一続きの部分内のバイトのある範囲を参照するもう1つの方法は、「終了スキップ」フィールドを、スパン内のバイトの全数である長さで置換する方法である。
6.10 フラグメンテーションの低減
格納しているBLOBがすでに格納済みの多くのサブブロックを含んでいるが、多くの異なるクラスタ全体に散乱している場合には、BLOBは、ディスク全体を指すスパンのリストの表示で終わる。要するに多数に分割される。
Another way to refer to a range of bytes in a stretch of sub-blocks is to replace the “end skip” field with a length that is the total number of bytes in the span.
6.10 Reduced Fragmentation When a stored BLOB contains many stored sub-blocks but is scattered across many different clusters, the BLOB is a list of spans that point to the entire disk. Ends with the display. In short, it is divided into a large number.
一致しないサブブロックの長い一続きの部分内の1つのサブブロックが一致する場合には、ある特に不都合な形のフラグメンテーションが起こる。図19は、BLOB1 190が記憶装置内にすでに格納されていて、BLOB2 192を格納中であり、1つの一致するサブブロックCが、BLOB2内のサブブロックF〜Mの他の方法で一致しない一続きの部分内に位置するこの一例を示す。結果としては、一致するサブブロックに対する1つのスパン・レコード194がスパン・リスト196内に生成される。このタイプのフラグメンテーションは、BLOB2の検索時間を長くする傾向がある。何故なら、ランダム・ディスク・アクセスを、第1のクラスタ198および第2のクラスタ199に対して行わなければならないからである。
One particularly inconvenient form of fragmentation occurs when one subblock in a long stretch of non-matching subblocks matches. FIG. 19 shows that
ある種の実施形態は、孤立している一致サブブロックを一致していないとして処理し、これらのサブブロックを次に格納することにより、このタイプの1つの一致サブブロック・フラグメンテーションを避けることができる。図20は、余分のスペースを使用するが、BLOB2 202のフラグメンテーションを低減することにより、サブブロックCの孤立している一致を格納させるのを無視する方法を示す。この方法は、一致するサブブロックの予め定義したしきい値Tより短いすべての一致する一続きの部分を無視することにより一般化することができる。ある実施形態の場合には、1より大きいTの任意の値はフラグメンテーションを低減する傾向がある。値2も役に立つ。
6.11 BLOBテーブル
BLOBを格納する記憶システムは、そのユーザがBLOBを検索することができるように、BLOBを参照することができるようにするある方法を提供するものでなければならない。
Certain embodiments can avoid this type of one matching sub-block fragmentation by treating isolated matching sub-blocks as not matching and storing these sub-blocks next. . FIG. 20 illustrates a method that uses extra space but ignores storing an isolated match of sub-block C by reducing the fragmentation of
6.11 BLOB Table The storage system that stores the BLOB must provide some way to allow the user to browse the BLOB so that the user can search the BLOB.
1つの方法は、BLOBのハッシュ110を識別子として使用する方法である(図11)。それ故、ユーザは、BLOBを記憶システムに提出し、BLOBのハッシュ(例えば、MD5ハッシュ)を書き留める。BLOBを検索するために、ハッシュを記憶システムに提出し、システムはBLOBを返送する。
One method is to use the
もう1つの方法は、任意の名前を各BLOBに割り当てる方法である。従来のファイル・システムはこの方法を使用する。 Another method is to assign an arbitrary name to each BLOB. Traditional file systems use this method.
どんなネーミング・スキームを採用しようとも実施しなければならない。このような実行は、本質的には、BLOB112名前空間から(スパンのリスト116を含む(または参照する)BLOBレコード114自身へのマッピングからなる(図11)。このマッピングは、デジタル探索ツリー、Bツリーおよびハッシュ・テーブルのようなすべてのタイプの従来のデータ構造を使用して行うことができる。
6.12 スパンのリストおよびツリー
BLOBテーブル112が参照する各BLOBレコード114は、BLOBの任意のメタデータを含み、スパン・レコード116の順序付きシーケンスを含んでいるかまたはポイントする(図11)。各スパン・レコードは、クラスタ内のサブブロックの(隣接する)一続きの部分を識別する。
Whatever naming scheme is adopted, it must be implemented. Such an execution consists essentially of a mapping from the
6.12 List of spans and trees Each
スパンの順序付きリスト内にスパンを維持すると、全BLOBをシーケンシャルに効率的に検索することができるが、格納しているBLOB上でランダム・アクセス読出しを行うために線形探索(またはスパン・レコードをランダムにアクセスできる場合には、二分探索)を必要とする。ランダム・アクセス読出しをスピードアップするために、BLOBのスパンをツリー構造に編成することができる。図26は、3つの分岐を含むツリーの一例である(が、任意の分岐を使用することができる)。各非葉ノードは、その子ノードが表すブロックの連結であるバイトの有限個のブロックを表す。各ノードは、その子ノードが表すブロックの長さである3つの長さを含む。各葉ノードは、クラスタ内の1つまたは複数のサブブロックのシーケンスを識別するスパン260からなる。このようなツリーが表す格納しているBLOBのバイトJ〜Kのランダム・アクセス読出しは、バイトJ〜Kを含むスパンを発見するためにツリーを下方に移動し、次にクラスタからサブブロック・コンテンツ・バイトを検索することにより行うことができる。
6.13 サブブロック・インデックス
サブブロック・インデックス(図5)を使用すれば、記憶装置内のすべてのクラスタの線形探索を行わなくても、記憶装置内に特定のサブブロックがすでに存在するか否かを判定することができる。また、インデックスは、一致するサブブロックの位置を発見する際に役に立つ情報を提供することができる。
Maintaining spans in an ordered list of spans allows efficient and efficient retrieval of all BLOBs sequentially, but does a linear search (or span record for random access reads on the stored BLOB). If it can be accessed randomly, a binary search) is required. To speed up random access reads, BLOB spans can be organized in a tree structure. FIG. 26 is an example of a tree containing three branches (although any branch can be used). Each non-leaf node represents a finite block of bytes that is a concatenation of the blocks represented by its child nodes. Each node contains three lengths that are the length of the block that the child node represents. Each leaf node consists of a
6.13 Subblock Index Using a subblock index (FIG. 5), whether or not a particular subblock already exists in the storage device without performing a linear search of all clusters in the storage device Can be determined. The index can also provide information useful in finding the location of matching sub-blocks.
インデックス50は、それぞれがインデックス・キーをインデックス値に結合しているエントリの組織した集合体として表示することができる。エントリは、エントリ・レコード(それぞれがキー・フィールドおよび値フィールドからなる)として、インデックス内に明示的に、または(例えば、インデックスが、キー上に葉ノード内に値を含むバイナリ・デジタル探索ツリーとして組織されている場合には)暗黙的に格納することができる。
インデックス・キーは、サブブロックのコンテンツであっても、サブブロックのコンテンツのハッシュであっても、またはサブブロックのコンテンツのハッシュの単なる一部であってもよい。サブブロックのコンテンツのハッシュの一部(例えば、全16バイトではなく、MD5ハッシュの最初の8バイト)だけを格納すると、時に起こる衝突を犠牲にして、インデックスのサイズを小さくすることができる。2つ以上のサブブロックが同じ部分ハッシュを有している場合には、インデックスは、両方のエントリを格納し、検索することができるものでなければならない。 The index key may be the content of the sub-block, the hash of the content of the sub-block, or just a part of the hash of the content of the sub-block. Storing only a portion of the sub-block content hash (eg, the first 8 bytes of the MD5 hash, not the entire 16 bytes) can reduce the size of the index at the expense of occasional collisions. If two or more sub-blocks have the same partial hash, the index must be able to store and retrieve both entries.
インデックス値は、記憶装置内のサブブロックの位置を発見する際に役に立つ情報でなければならない。ある極端な実施形態の場合には、この値は、クラスタ番号およびクラスタ内の特定のサブブロック(例えば、識別子、サブブロック一連番号またはサブブロック・ハッシュ)を識別する情報からなる正確な参照を提供することができる。極端な他の実施形態の場合には、インデックス値をクラスタ番号だけから構成することができる。サブブロックのクラスタ番号が分かると、存在する場合には、クラスタ内のサブブロックを発見するためにクラスタ・ディレクトリを探索することができる。インデックス内のスペースをさらに制約するために、インデックス値を、探索するのに2つ以上のクラスタを必要とするクラスタ番号の一部(例えば、クラスタ番号の最後の2つのビット)だけで構成することができる。 The index value should be information useful in finding the location of the sub-block in the storage device. In some extreme embodiments, this value provides an accurate reference consisting of the cluster number and information identifying a particular sub-block within the cluster (eg, identifier, sub-block serial number or sub-block hash) can do. In extreme other embodiments, the index value can consist only of cluster numbers. Knowing the cluster number of the sub-block, if present, can search the cluster directory to find the sub-block in the cluster. To further constrain the space in the index, the index value consists only of the part of the cluster number that requires more than one cluster to search (eg the last two bits of the cluster number) Can do.
選択の優れた組合わせは、インデックス・キーをサブブロック・ハッシュの頂部の8バイトとし、インデックス値をサブブロックを含むクラスタの数とする方法である。各クラスタに対するディレクトリが存在する限り、これらの選択は、インデックスのサイズを小さいままに維持し、依然として記憶装置の任意のサブブロックに高速でアクセスすることができる。 A good combination of choices is to have the index key as the top 8 bytes of the subblock hash and the index value as the number of clusters containing the subblock. As long as there is a directory for each cluster, these choices can keep the size of the index small and still have fast access to any sub-block of storage.
インデックスは、デジタル探索ツリー、バイナリ・ツリー、およびハッシュ・テーブルを含む種々のデータ構造により行うことができる。
6.14 インデックスの格納
インデックスは、メモリ内またはディスク上に格納することができる。インデックスのサイズの低減は、インデックスがメモリ内に保持されている場合には重要な問題である。実験の結果、ある実施形態の場合には、インデックスがメモリ内に保持されている場合には、システムの動作が遥かに速くなることが分かっている。クラスタ内の目標のサブブロックの位置を識別する情報を格納しなくてすむならば、インデックスのサイズをかなり低減することができる。それ故、典型的な実施形態の場合には、インデックス内にクラスタ番号だけを格納する。
6.15 サブブロック・インデックスのためのハッシュ・テーブルの使用
サブブロック・インデックスは、低冗長記憶システムの速度を判定する際に非常に重要なものであるので、このデータ構造を最高速でアクセスできるように設計するのは重要なことである。ハッシュ・テーブルは、0(1)時間内にアクセスを提供するので、ハッシュ・テーブルは、サブブロック・インデックスに対して非常に優れたデータ構造を提供する。しかし、このハッシュ速度アクセスは、かなり高いものにつく。以下のいくつかの節は、サブブロック・インデックスが提起する課題について説明する。
6.16 ハッシュ・テーブルの衝突
この節においては、ハッシュ・テーブルの衝突について説明するが、インデックスがハッシュ・テーブルを使用して実施される場合にだけ適用される。
Indexing can be done by various data structures including digital search trees, binary trees, and hash tables.
6.14 Storing Indexes Indexes can be stored in memory or on disk. Reducing the size of the index is an important issue when the index is held in memory. Experiments have shown that in some embodiments, the system operates much faster if the index is held in memory. If it is not necessary to store information identifying the location of the target sub-block in the cluster, the size of the index can be significantly reduced. Therefore, in the exemplary embodiment, only the cluster number is stored in the index.
6.15 Use of hash table for sub-block index Sub-block index is very important in determining the speed of low-redundant storage systems, so this data structure can be accessed at the fastest speed It is important to design so that Since the hash table provides access within 0 (1) time, the hash table provides a very good data structure for the sub-block index. However, this hash rate access is quite expensive. The following sections describe the challenges posed by the subblock index.
6.16 Hash table collisions This section describes hash table collisions, but only applies if the index is implemented using a hash table.
衝突は、2つのキー210、212が、同じ位置(スロット)216にハッシュ214した場合に、ハッシュ・テーブル内で起こる(図21)。この状況を解決する1つの方法は、第2のエントリを単に廃棄するという方法である。ある場合には、これは正しい選択である場合がある。しかし、ハッシュ・テーブルが損失を許容するものでない場合には、このオプションを使用することはできないので、この「オーバーフロー」状況を処理するために種々様々な技術のうちの1つを使用することができる。
A collision occurs in the hash table when two
衝突を処理するために昔から使用されてきた1つの技術は、「オーバーフロー」領域220と呼ぶ別の記憶領域を有する方法である。各ハッシュ・テーブル・スロットは、オーバーフロー・フィールド222を含む。スロット内で衝突が起きた場合には、オーバーフロー・エントリ224は、オーバーフロー領域内に格納され、エントリへのポインタがスロット222内に置かれる(図22)。オーバーフロー領域によりエントリはまた相互にポイントすることができ226、各オーバーフロー・スロットは、エントリのリストをポイントすることができる(図22)。(ハッシュ・テーブルがメモリ内に位置していて、メモリ・ヒープの形をしている場合のように)別々のオーバーフロー領域を使用できる場合には、この技術はうまく動作する。しかし、ハッシュ・テーブルがディスク上に位置している場合には、オーバーフロー領域内にオーバーフロー・エントリを置くと、通常、非常に遅い少なくとも1回のランダム・アクセス・シークを行うステップが関連してくる。
One technique that has been used for a long time to deal with collisions is to have a separate storage area called the “overflow”
衝突へのもっとうまいアプローチは、衝突しているエントリを、ハッシュ・テーブル自身内に格納する方法である。昔からのアプローチの場合には、衝突が起こると、第2のハッシュ関数により第2の項目キーがハッシュされ、結果として得られたスロットがチェックされる。スロットが空である場合には、エントリをそこに格納することができる。もしスロットが空でない場合には、第3のハッシュ関数を呼び出すことができ、空のスロットが発見されるまでこの手順が反復して行われる。全テーブルが満杯である場合には、テーブルを分割してからでなければ、新しいエントリを追加することはできない。一般に、ハッシュ関数H(K,X)は、Kがハッシュするキーであり、Xが、衝突しているエントリに対するハッシュ・テーブル内の連続している候補の位置を発見するために増大することができる正の整数である場合に定義することができる。キーKを探索するために、キーを含むスロットを発見するまで、または(テーブル内のハッシュ・オーバーフロー・チェーンの終わりを示す)空のスロットに遭遇するまで、X=1,2,...に対してスロットH(K,X)がチェックされる。 A better approach to collision is to store the conflicting entries in the hash table itself. In the traditional approach, when a collision occurs, the second item key is hashed by the second hash function and the resulting slot is checked. If the slot is empty, the entry can be stored there. If the slot is not empty, a third hash function can be called and this procedure is repeated until an empty slot is found. If all tables are full, new entries cannot be added until the tables are split. In general, the hash function H (K, X) is the key that K hashes, and X can be increased to find the position of consecutive candidates in the hash table for the conflicting entry. It can be defined if it is a positive integer. To search for key K, X = 1, 2,... Until a slot containing the key is found or until an empty slot is encountered (indicating the end of the hash overflow chain in the table). . . Is checked for slot H (K, X).
このアプローチの問題は、ハッシュ・テーブルが大きなもので、ディスク上に位置している場合には、衝突チェーンの後で、非常に時間がかかる一連のランダム・アクセス・シークをディスク上で行わなければならないことである。このことはH(K,X)=H(K,X−1)+1と定義することにより、すなわち、(テーブルの終わりのところを囲んでいる)次の隣接スロット230(図23)に溢れることにより避けることができる。この技術の場合には、アクセスは局部的なままである。アクセスした第1のスロットを読み出した場合には、次のSスロットも小さなSに対して読み出され、ディスク動作は、(例えば、12バイトの代わりに1Kを読み出すように)余分な時間はかからないし、オーバーフロー・スロットも提供する。新しいエントリが追加されると、複数のスロットを1つのグループとしてディスクに書戻すことができる。衝突チェーンがS個のスロットを超えて跨ることが希になるように(およびそれにより追加のディスク・アクセスが必要になるように)(おそらく動的に)値Sが調整される。
6.17 ハッシュ・テーブル・バケット
インデックスがディスク上に格納されている場合には、インデックスへのランダム・アクセス読出しおよび書込みは時間がかかるものになる場合がある。それ故、あるスロットから他のスロットに溢れるチャンスがある場合には、2つ以上のスロットを一度に読出しおよび書込みするのは理にかなっている。そうするための1つの方法は、テーブルをバケット240に分割し(図24)、エントリのかわりにバケットを読み出し、書き込む方法である。例えば、1024のスロットのテーブルを、それぞれが16のスロットを含む64のバケットのテーブルで置き換えることができる。エントリを探索するために、バケットを読み出して、バケット内で線形探索を行うことができ(またはバケット内のキーがソートされる場合、二分探索をおそらく行うことができる)。時々であるがバケットが満杯になっている場合がある。その場合には、オーバーフローは次のバケットに移動する。テーブルがあまり大きく成長できない限りは、オーバーフロー・チェーンはあまり長くすべきではない。
6.18 ハッシュ・テーブルの成長
ハッシュ・テーブルを使用した場合の1つの問題は、満杯になった場合、拡張するはっきりした方法がないことである。
The problem with this approach is that if the hash table is large and located on disk, a series of very time-consuming random access seeks must be performed on disk after the collision chain. It is not to be. This is defined by H (K, X) = H (K, X−1) +1, ie overflowing to the next adjacent slot 230 (see FIG. 23) (which surrounds the end of the table). Can be avoided. In the case of this technology, access remains local. When reading the accessed first slot, the next S slot is also read for the smaller S, and the disk operation takes no extra time (eg, reading 1K instead of 12 bytes). It also provides an overflow slot. When a new entry is added, multiple slots can be written back to the disk as a group. The value S is adjusted (possibly dynamically) so that the collision chain rarely crosses over S slots (and thus requires additional disk access).
6.17 Hash Table Bucket If the index is stored on disk, random access reads and writes to the index can be time consuming. Therefore, when there is a chance of overflowing from one slot to another, it makes sense to read and write more than one slot at a time. One way to do this is to divide the table into buckets 240 (FIG. 24) and read and write buckets instead of entries. For example, a table of 1024 slots can be replaced with a table of 64 buckets, each containing 16 slots. To search for an entry, the bucket can be read and a linear search can be performed in the bucket (or a binary search can probably be performed if the keys in the bucket are sorted). Sometimes the bucket is full. In that case, the overflow moves to the next bucket. Unless the table can grow very large, the overflow chain should not be too long.
6.18 Hash Table Growth One problem with using a hash table is that there is no clear way to extend it when it is full.
この問題に対する1つのアプローチは、テーブルがけっして満杯にならないようにすることである。このことは、最初に、特定の用途の場合にけっして満杯にならないほど大きなハッシュ・テーブルを生成することにより行うことができる。しかし、ある用途の場合には、予めハッシュ・テーブル上の負荷を予測することができない場合があり、そのため他の解決方法を発見しなければならない。 One approach to this problem is to keep the table from becoming full. This can be done by first generating a hash table that is never too full for a particular application. However, in some applications, it may not be possible to predict the load on the hash table in advance, so another solution must be found.
1つのアプローチは、新しいもっと大きなハッシュ・テーブルを生成し、旧テーブル内のすべてのエントリを新テーブルに転送することによりハッシュ・テーブルを廃棄する方法である。転送中に両方のテーブルを保持するための十分なメモリが存在する限り、このアプローチは完全に実行可能な方法である。 One approach is to create a new larger hash table and discard the hash table by transferring all entries in the old table to the new table. As long as there is enough memory to hold both tables during the transfer, this approach is a fully feasible method.
もう1つのアプローチは、満杯になったらいつでもハッシュ・テーブルのサイズを2倍にし、第1の(旧)250の半体内のエントリの(約)半体を、第2の(新)251の半体に転送する方法である。図25は、その方法を示す。最初のハッシュ・テーブルが2Kのエントリを有している場合には、全キーの下のKビットを、テーブルを索引するために使用することができる。テーブルが満杯になったら2倍に増大することができる。この新テーブルは、全キー254のK+1の最も低いビットをキーとして使用する。現在使用しているキーの余分なビット(ビットK)は、2倍にしたテーブルの旧テーブルおよび新テーブルの半体を区別する。全キーの左側の残りは未使用のままである。あとは、そのビットKが1である2倍にしたテーブルの旧半体内のエントリを新半体内の対応する位置に移動するだけでよい。実際には、オーバーフローがあるので、これより少し複雑になる。最初に、オーバーフローは、エントリがテーブルの旧半体内の「自然の」位置に位置していなくて、それ故、すべてのエントリを単に移動すると、ビットKセットがいくつかのエントリを正しくない位置に移動する。このことは、再ハッシュが必要なことを意味する。第二に、旧半体内のエントリを除去すると、いくつかのオーバーフロー・チェーンが切断する場合があり、いくつかのエントリにアクセスできなくなる恐れがある。それ故、エントリを移動した場合、そのエントリのオーバーフロー・チェーンをギャップを埋めるためにもとに戻してやらなければならない。
6.19 サブブロック・インデックス部分キーの格納
インデックスのサイズを小さくする1つの方法は、各インデックス・エントリ内にインデックスのキーのコピーを格納しない方法である。例えば、インデックス・キーが、(サブブロックの)128ビットのMD5ハッシュである場合には、インデックスのサイズを小さくする1つの方法は、インデックスのエントリ内のキーの一部だけを記録する方法である。
Another approach is to double the size of the hash table whenever it is full, and (about) half of the entries in the first (old) 250 half to half the second (new) 251 half. It is a method of transferring to the body. FIG. 25 shows the method. If the first hash table has 2K entries, the K bits under all keys can be used to index the table. When the table is full, it can be doubled. This new table uses the lowest bit of K + 1 of all
6.19 Storage of Subblock Index Partial Keys One way to reduce the size of the index is to not store a copy of the index key in each index entry. For example, if the index key is a 128-bit MD5 hash (of a sub-block), one way to reduce the size of the index is to record only a portion of the key in the index entry. .
例えば、インデックスがハッシュ・テーブル120として実施される場合には、各ハッシュ・テーブル・エントリ122は、通常、クラスタ番号124およびサブブロック・ハッシュ126のコピーを含む(図12)。これにより、インデックスのハッシュ・テーブル内の同じ位置に2つのサブブロックがハッシュされた場合には、2つのエントリを区別することができる。しかし、ハッシュが128ビット幅を有していて、各ハッシュの64ビットだけを格納する場合には、エントリは、依然として区別することができるが、スペースの半分を使用することになる。
For example, if the index is implemented as a hash table 120, each
極端な場合、ハッシュ・テーブルは、任意のキーの任意の部分を含んでいない。代わりに、各サブブロック・ハッシュは、ハッシュ・テーブル内のある位置にハッシュし、その位置で発見したすべてのクラスタを探索しなければならない。これは、依然として記憶装置内のすべてのクラスタの線形探索より遥かに優れている。 In the extreme case, the hash table does not contain any part of any key. Instead, each sub-block hash must hash to a location in the hash table and search all clusters found at that location. This is still much better than a linear search of all clusters in the storage device.
最善のアプローチは、ハッシュのある部分は格納するが、すべてのハッシュは格納しない方法である。このことは、希な場合ではあるが、ハッシュ・テーブル内に2つ以上の一致するエントリが存在する場合があり、一組の一致するエントリに参照したすべてのクラスタを探索しなければならないことを意味する。エントリ内のハッシュの一部だけを格納すれば、いくつかのクラスタをチェックしなくてもすみ、しかも依然として完全なハッシュよりかなり少ないスペースしか使用しない十分な違いを提供する。
6.20 BLOBの削除
ある用途の場合には、BLOBを削除し、またBLOBを格納しなければならない場合がある。BLOBの削除を行わなければならない場合がある。何故なら、BLOBのスパン内で参照したすべてのサブブロックを単に削除する(次に、BLOBのスパンおよびBLOBレコードを削除する)明らかなアプローチは、このような行為は、他の(削除していない)BLOBの一部でもあるサブブロックを削除する恐れがあるために失敗するからである。もっと高度なアプローチが望ましい。
The best approach is to store some part of the hash, but not all hashes. This is rare, but there may be more than one matching entry in the hash table, and all clusters referenced to a set of matching entries must be searched. means. Storing only a portion of the hashes in the entry eliminates the need to check several clusters and still provides a sufficient difference that uses much less space than the full hash.
6.20 Deleting a BLOB For some applications, it may be necessary to delete the BLOB and store the BLOB. It may be necessary to delete the BLOB. Because the obvious approach to simply delete all sub-blocks referenced within the BLOB span (and then delete the BLOB span and BLOB record) is that this action is the other (not deleted) This is because a failure occurs because there is a possibility of deleting a sub-block which is also a part of BLOB. A more advanced approach is desirable.
BLOBを削除するためのあるアプローチは、記憶装置内の各サブブロックに余分なメタデータを追加する方法である。基準カウント。サブブロックの基準カウントは、サブブロックを含む(BLOB内の)スパンの数を格納する。基準カウント・アプローチの場合には、サブブロックを含む新しいスパンが生成されると(すなわち、BLOB格納中に)サブブロックの基準カウントが増大し、このようなスパンが削除されると(すなわち、BLOB削除中に)この基準カウントが低減する。その基準カウントがゼロになった場合には、サブブロックを削除することができる。 One approach for deleting a BLOB is to add extra metadata to each sub-block in the storage device. Reference count. The subblock reference count stores the number of spans (within the BLOB) that contain the subblock. In the case of the reference count approach, when a new span containing a subblock is created (ie during BLOB storage), the subblock's reference count increases and such a span is deleted (ie BLOB). This reference count is reduced (during deletion). When the reference count reaches zero, the sub-block can be deleted.
基準カウント・アプローチを使用すれば、記憶システムは、BLOBを削除することができる。しかし、ユーザはこの機能を必要としない。基準カウントの他の方法は、満了システムである。このシステムの場合、各BLOBおよび各サブブロックは満了日を有する。BLOBを格納した場合、ユーザは満了日を提供し、BLOBが追加され、スパンの新しいリストが生成される。追加プロセスの一部として、スパン・リストが参照したサブブロックは、その前の満了日の最大値に設定したその満了日を有し、それらを新しく参照しているBLOBの日付を有する。BLOBおよびサブブロックに満了日を表示すると、背景プロセスは、満了したBLOBおよびサブブロックを自由に削除することができる。
6.21 既存のファイル・システムを使用する実施形態
本発明の実施形態は、既存のファイル・システムの頂部上で実施することができる。図31は、その構成方法を示す。
Using the reference counting approach, the storage system can delete the BLOB. However, the user does not need this function. Another method of reference counting is an expiration system. For this system, each BLOB and each sub-block has an expiration date. If the BLOB is stored, the user provides an expiration date, the BLOB is added, and a new list of spans is generated. As part of the add process, the subblock referenced by the span list has its expiration date set to the maximum of its previous expiration date and the date of the BLOB that is newly referencing them. When the expiration date is displayed in the BLOB and sub-block, the background process is free to delete the expired BLOB and sub-block.
6.21 Embodiment Using Existing File System Embodiments of the present invention can be implemented on top of an existing file system. FIG. 31 shows the configuration method.
このような実施形態の場合、各クラスタは、1つのクラスタ・ファイル340内に格納することができる。クラスタに番号が付けられている場合には、各クラスタの名前は、クラスタ番号を含むことができる。クラスタ・ファイルは、1つのディレクトリ342またはディレクトリのツリー344内に格納することができる(図34)。クラスタはそのファイル上でランダム・アクセス読出しおよび書込みを行うことにより直接修正することもできるし、またはクラスタ・ファイルをメモリ内の完全な読み出し、それを修正し、およびシーケンシャルなIO動作を使用して、全ファイルをディスクに書き戻すことにより修正することができる。
For such an embodiment, each cluster can be stored in one
もう1つの実施形態は、既存のファイル・システムを使用することができるが、1つのファイルしか使用しない。クラスタは、メモリ内に保持しているクラスタインデックス332を使用することにより、隣接して位置する1つのファイル330内に格納することができる(図33)。
Another embodiment can use an existing file system, but uses only one file. A cluster can be stored in one
固定長クラスタ・ディレクトリを使用する場合には、クラスタ・ディレクトリの一組全体を、ディレクトリを格納している1つのファイル内にアレイとして格納することができ、ファイルにランダム・アクセスを行って特定のディレクトリにランダム・アクセスすることができるようにする。 When using a fixed-length cluster directory, the entire set of cluster directories can be stored as an array in one file containing the directory, and the file can be accessed randomly Allow random access to the directory.
各BLOBは、その名前がBLOBのハッシュの名前であるファイル内に格納することができる。BLOBファイルは、BLOBディレクトリ内、またはディレクトリ(おそらくBLOBハッシュの連続しているバイトにより構成されているデジタル探索ツリー)内に格納することができる。各BLOBファイルは、BLOBを表すスパンのリストを含むことができる。ファイル・システムのファイル毎のスペース・オーバーヘッドを避けるために、複数のBLOBを1つの「BLOB」ファイル内に格納することができる。
6.22 仮想ブロック装置を使用する実施形態
本発明の実施形態は、既存のオペレーティング・システム322が提供する仮想ブロック装置を使用して実施することができる(図32)。クラスタは、メモリ内に保持しているクラスタインデックスを使用することにより、隣接して位置する仮想ブロック装置内に格納することができる。
6.23 データを格納しない実施形態
すでに説明した実施形態のいずれかと同じではあるが、任意のBLOBデータを実際に格納しない実施形態を生成することができる(図35)。このような実施形態の場合には、すべての記憶構造およびメタデータを構成することができるが、BLOB/サブブロック・コンテンツは格納されない。この実施形態のような実施形態は、前に遭遇したBLOB1に関連してBLOB2を分析しなければならない用途の際に役に立つが、その場合、BLOBを実際には格納してはならない。
Each BLOB can be stored in a file whose name is the name of the hash of the BLOB. BLOB files can be stored in a BLOB directory or in a directory (possibly a digital search tree composed of consecutive bytes of a BLOB hash). Each BLOB file can include a list of spans that represent the BLOB. To avoid space overhead per file in the file system, multiple BLOBs can be stored in one “BLOB” file.
6.22 Embodiment Using Virtual Block Device Embodiments of the present invention can be implemented using a virtual block device provided by an existing operating system 322 (FIG. 32). Clusters can be stored in adjacent virtual block devices by using a cluster index held in memory.
6.23 Embodiment not storing data An embodiment can be generated that is the same as any of the previously described embodiments but does not actually store any BLOB data (FIG. 35). In such an embodiment, all storage structures and metadata can be configured, but no BLOB / sub-block content is stored. Embodiments such as this embodiment are useful in applications where BLOB2 must be analyzed in relation to BLOB1 previously encountered, in which case the BLOB must not actually be stored.
例えば、セキュリティ環境においては、BLOBコンテンツ自身を格納しないで、前に遭遇したBLOBに関連してBLOBを分析するためにBLOBメタデータを使用する方が有利な場合がある。記憶構造および既存のBLOBを表すメタデータを使用することにより、記憶装置は、前に遭遇したBLOBにアクセスしなくても、前に遭遇したBLOBの本体に関連して文書を分析することができる。例えば、このことはセキュアなゲートウェイに適用することができる。
6.24 範囲に関する注
当業者であれば、本発明は、上記の特定の用途に限定されないことを理解することができるだろう。また、本発明は、本明細書に記載し図面に示した特定の要素および/または機能に関してその好ましい実施形態に限定されない。本発明の原理から逸脱することなしに、種々の修正を行うことができることを理解することができるだろう。それ故、本発明は、本発明の範囲内に入るすべてのこのような修正を含むものと解釈すべきである。
For example, in a security environment, it may be advantageous to use BLOB metadata to analyze a BLOB in relation to a previously encountered BLOB without storing the BLOB content itself. By using the storage structure and metadata representing an existing BLOB, the storage device can analyze the document relative to the body of the previously encountered BLOB without having to access the previously encountered BLOB. . For example, this can be applied to a secure gateway.
6.24 Range Note One skilled in the art will appreciate that the present invention is not limited to the specific applications described above. In addition, the present invention is not limited to its preferred embodiments with respect to the specific elements and / or functions described herein and illustrated in the drawings. It will be understood that various modifications can be made without departing from the principles of the invention. Accordingly, the present invention should be construed as including all such modifications that fall within the scope of the invention.
Claims (54)
前記サブブロックを複数のクラスタ内に格納するステップと、
前記BLOBに基づいて複数のスパンを生成するステップと、からなり、
前記複数のスパンは、前記BLOBを表示し、
各スパンは前記クラスタ内のサブブロックのシーケンスを特定し、少なくとも1つのサブブロックが1つの以上のスパンにより参照される、
BLOBを格納する方法。Dividing a BLOB (binary large object) into a plurality of sub-blocks;
Storing the sub-block in a plurality of clusters;
Generating a plurality of spans based on the BLOB; and
The plurality of spans display the BLOB,
Each span identifies a sequence of sub-blocks in the cluster, wherein at least one sub-block is referenced by one or more spans;
A method of storing a BLOB.
1つまたは複数のクラスタ内に前記サブブロックを格納し、そして前記BLOBに基づきBLOBを表示する、複数のスパンを生成し、該スパンの順序付きリストまたは、該スパンのツリーを格納するためのデータ記憶手段と、を備え、
前記各スパンがクラスタ内の1つまたは複数の隣接サブブロックのシーケンスを特定し、少なくとも1つのサブブロックが、1つ以上のスパンにより参照される、
BLOBを格納するためのデータ処理装置。Data processing means for dividing the BLOB into two or more sub-blocks;
Data for generating a plurality of spans storing the sub-blocks in one or more clusters and displaying a BLOB based on the BLOB , and storing an ordered list of the spans or a tree of the spans Storage means,
Each span identifies a sequence of one or more adjacent sub-blocks in the cluster, wherein at least one sub-block is referenced by one or more spans;
Data processing device for storing BLOB.
前記BLOBを2つ以上のサブブロックに分割するための、前記コンピュータ可読メモリを動作するための処理手段と、
1つまたは複数のクラスタ内に前記サブブロックを格納し、前記BLOBに基づいてBLOBを表示する複数のスパンを生成し、該スパンの順序付きリストまたは、該スパンのツリーを記憶するための、前記コンピュータ可読メモリにより使用することができるデータ記憶手段と、を備え、
各スパンが、クラスタ内の1つまたは複数の隣接サブブロックのシーケンスを特定し、少なくとも1つのサブブロックが、1つ以上のスパンにより参照される、
コンピュータ可読メモリ。A computer readable memory encoded with data representing a computer program that can be used to direct a programmable device for storing a BLOB of data,
Processing means for operating the computer readable memory to divide the BLOB into two or more sub-blocks;
Storing the sub-blocks in one or more clusters, generating a plurality of spans displaying a BLOB based on the BLOB, and storing an ordered list of the spans or a tree of the spans ; Data storage means that can be used by a computer readable memory,
Each span identifies a sequence of one or more adjacent sub-blocks in the cluster, and at least one sub-block is referenced by one or more spans;
Computer readable memory.
BLOBを複数のサブブロックに分割する第1の機能と、
前記サブブロックを複数のクラスタに格納する第2の機能と、
前記BLOBに基づいて、BLOBを表示する、関連する一群のスパンを生成する第3の機能と、
を実行させるために、データとしてのBLOBを格納するためのコンプータ・プログラムコード手段を備えるコンピュータ・プログラム要素であって、
前記各スパンが、クラスタ内の1つまたは複数の隣接サブブロックのシーケンスを識別し、少なくとも1つのサブブロックが、1つ以上のスパンにより参照される
コンピュータ・プログラム要素。To programmable devices,
A first function for dividing the BLOB into a plurality of sub-blocks;
A second function of storing the sub-block in a plurality of clusters;
A third function for generating a related group of spans based on the BLOB and displaying the BLOB;
A computer program element comprising computer program code means for storing a BLOB as data in order to execute
Wherein each span, one or more identifying sequences of adjacent sub blocks, at least one sub-block, the computer program element referenced by one or more spans in the cluster.
プログラム要素。54. The computer of claim 53 , wherein a fifth function checks for duplication of subblocks by checking the index before adding subblocks to a cluster.
Program element.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US66127305P | 2005-03-11 | 2005-03-11 | |
US60/661,273 | 2005-03-11 | ||
AU2005901175 | 2005-03-11 | ||
AU2005901175A AU2005901175A0 (en) | 2005-03-11 | Method for storing data with reduced redundancy using data clusters | |
PCT/AU2006/000326 WO2006094365A1 (en) | 2005-03-11 | 2006-03-10 | Method for storing data with reduced redundancy using data clusters |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2008537209A JP2008537209A (en) | 2008-09-11 |
JP4768009B2 true JP4768009B2 (en) | 2011-09-07 |
Family
ID=44693669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008500011A Expired - Fee Related JP4768009B2 (en) | 2005-03-11 | 2006-03-10 | How to store less redundant data using a data cluster |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4768009B2 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101747265B1 (en) * | 2016-06-20 | 2017-06-15 | 주식회사 티맥스데이터 | Method and apparatus for executing query and computer readable medium therefor |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2517238C2 (en) * | 2009-04-08 | 2014-05-27 | Интел Корпорейшн | Implementation of parallel rehashing of hash-tables for multithreaded applications |
JP6319740B2 (en) * | 2014-03-25 | 2018-05-09 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | Method for speeding up data compression, computer for speeding up data compression, and computer program therefor |
CN107430602B (en) * | 2015-12-29 | 2020-05-08 | 华为技术有限公司 | Data de-duplication method and storage equipment |
CA3026584C (en) * | 2016-06-09 | 2023-10-10 | Informatique Holistec Inc. | Data storage system and method for performing same |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63305439A (en) * | 1987-06-08 | 1988-12-13 | Nippon Steel Corp | Compressive storing method for similar data file and its restoring method |
JPH04360246A (en) * | 1991-06-06 | 1992-12-14 | Toshiba Corp | Device for compressing file |
JPH06290092A (en) * | 1991-11-04 | 1994-10-18 | American Teleph & Telegr Co <Att> | File storing device to storage device |
JPH09218877A (en) * | 1996-02-13 | 1997-08-19 | Fujitsu Ltd | Dictionary retrieval and registration method for data compression device and restoration device |
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 |
JP2002533960A (en) * | 1998-12-21 | 2002-10-08 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | Code compression by evolutionary algorithm |
JP2007521528A (en) * | 2003-08-15 | 2007-08-02 | マイクロソフト コーポレーション | Creating a volume image |
-
2006
- 2006-03-10 JP JP2008500011A patent/JP4768009B2/en not_active Expired - Fee Related
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63305439A (en) * | 1987-06-08 | 1988-12-13 | Nippon Steel Corp | Compressive storing method for similar data file and its restoring method |
JPH04360246A (en) * | 1991-06-06 | 1992-12-14 | Toshiba Corp | Device for compressing file |
JPH06290092A (en) * | 1991-11-04 | 1994-10-18 | American Teleph & Telegr Co <Att> | File storing device to storage device |
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 |
JPH09218877A (en) * | 1996-02-13 | 1997-08-19 | Fujitsu Ltd | Dictionary retrieval and registration method for data compression device and restoration device |
JP2002533960A (en) * | 1998-12-21 | 2002-10-08 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | Code compression by evolutionary algorithm |
JP2007521528A (en) * | 2003-08-15 | 2007-08-02 | マイクロソフト コーポレーション | Creating a volume image |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101747265B1 (en) * | 2016-06-20 | 2017-06-15 | 주식회사 티맥스데이터 | Method and apparatus for executing query and computer readable medium therefor |
Also Published As
Publication number | Publication date |
---|---|
JP2008537209A (en) | 2008-09-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7814129B2 (en) | Method and apparatus for storing data with reduced redundancy using data clusters | |
US9690802B2 (en) | Stream locality delta compression | |
WO2006094365A1 (en) | Method for storing data with reduced redundancy using data clusters | |
US8751462B2 (en) | Delta compression after identity deduplication | |
Shilane et al. | Wan-optimized replication of backup datasets using stream-informed delta compression | |
JP4932726B2 (en) | Storage system for randomly named blocks of data | |
JP4975724B2 (en) | Method for detecting the presence of sub-blocks in a low redundancy storage system | |
US8407382B2 (en) | Commonality factoring for removable media | |
US9367448B1 (en) | Method and system for determining data integrity for garbage collection of data storage systems | |
US20110258239A1 (en) | Method of minimizing the amount of network bandwidth needed to copy data between data deduplication storage systems | |
JP2008533570A (en) | How to index on low redundancy storage systems | |
WO2009131585A1 (en) | Data processing apparatus and method of processing data | |
Frühwirt et al. | InnoDB database forensics: Enhanced reconstruction of data manipulation queries from redo logs | |
US10496612B2 (en) | Method for reliable and efficient filesystem metadata conversion | |
JP4768009B2 (en) | How to store less redundant data using a data cluster | |
US8156126B2 (en) | Method for the allocation of data on physical media by a file system that eliminates duplicate data | |
US7685186B2 (en) | Optimized and robust in-place data transformation | |
Tomazic et al. | Fast file existence checking in archiving systems | |
Tolic et al. | Deduplication in unstructured-data storage systems | |
KR101553028B1 (en) | Variable processing file system and file variable processing method based on fixed block | |
CN118159936A (en) | Parallel deduplication mechanism on sequential storage media | |
CN111444173A (en) | Data storage method and system for data set | |
KR20080069071A (en) | Enhanced file system and method of managing file using thereof |
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: 20101102 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20110201 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20110208 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110401 |
|
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: 20110531 |
|
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: 20110615 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4768009 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: 20140624 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 |