JP5639011B2 - Data storage device, data storage method, and program - Google Patents
Data storage device, data storage method, and program Download PDFInfo
- Publication number
- JP5639011B2 JP5639011B2 JP2011142884A JP2011142884A JP5639011B2 JP 5639011 B2 JP5639011 B2 JP 5639011B2 JP 2011142884 A JP2011142884 A JP 2011142884A JP 2011142884 A JP2011142884 A JP 2011142884A JP 5639011 B2 JP5639011 B2 JP 5639011B2
- Authority
- JP
- Japan
- Prior art keywords
- bit
- offset
- data
- compression
- bits
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
本発明は、二次記憶装置へデータを蓄積するデータ蓄積装置、データ蓄積方法、及びそのプログラムに関するものである。 The present invention relates to a data storage device that stores data in a secondary storage device, a data storage method, and a program thereof.
二次記憶装置へのデータ蓄積方法では、レコードといういくつかの情報を1つにまとめたデータを、データを格納する際の最小単位として扱っている。また、二次記憶装置への最小アクセス単位として物理ブロックがあり、これをシステム上で仮想的に扱えるようにしたものを論理ブロックと呼ぶ。ファイルは複数の論理ブロックから成り立ち、論理ブロックは複数のレコードを含むことが多い。 In the method for accumulating data in the secondary storage device, data obtained by combining several pieces of information called records is handled as a minimum unit for storing data. Further, there is a physical block as a minimum access unit to the secondary storage device, and a block that can be virtually handled on the system is called a logical block. A file is composed of a plurality of logical blocks, and the logical block often includes a plurality of records.
また、特定のレコードを効率的に検索するために、索引が用いられている。索引はレコードが持つ任意の属性の値について作成することができる。このときこの索引を作成する任意の属性の値のことをキー値と呼ぶ。この索引付け方法のうち、範囲検索を行える方法として、デンスインデックス(dense index)とスパースインデックス(sparse index)がある(例えば、非特許文献1を参照。)。dense indexはデータの入力順に左右されず、入力された全てのレコードについて索引を作成する。これに対しsparse indexではデータの入力順を利用して、入力されたレコードのうち一部のレコードについてのみ索引を作成する。索引が作成されないレコードに関しては、入力順がキー値についてソートされているという前提の元で探索を行う。このため、sparse indexはデータの入力順がキー値についてソートされているときに限り使うことのできる方法である。 An index is used to efficiently search for a specific record. An index can be created for any attribute value a record has. At this time, the value of an arbitrary attribute that creates this index is called a key value. Among the indexing methods, there are a dense index and a sparse index as methods for performing a range search (see, for example, Non-Patent Document 1). The dense index does not depend on the data input order, but creates an index for all the input records. On the other hand, in the sparse index, an index is created only for some of the input records using the data input order. For records for which no index is created, a search is performed on the assumption that the input order is sorted by key value. Therefore, the sparse index is a method that can be used only when the data input order is sorted with respect to the key value.
一方、センサネットワークを通じて集められる大量の時系列センサデータなどを時刻をキー値として範囲検索可能な形でリアルタイムに二次記憶装置へ蓄積しようとする場合、データ書き込みの高速性が求められる。従来の索引付け方法のうちdense indexを用いる場合、入力される各レコードに索引を作成する必要があるため、データ書き込み時のコストがsparse indexに比べて高く、データ書き込み速度がデータの発生に追いつかない恐れがある。一方で、sparse indexを用いるためには入力されるデータがキー値(この場合、時刻)についてソートされた状態で入力される必要がある。しかし、センサネットワークを通じて集められる大量の時系列データはネットワークの遅延やセンサ等データソース側の接続断などによって、時刻データの入力順が時刻のとおりに一定ではなく、順序逆転することが考えられる。このため、時刻をキー値とすると、キー値によっておおよそ整列しているが、部分的に遅延による順序逆転が起きているデータとなるためsparse indexを用いることができない。 On the other hand, when a large amount of time-series sensor data collected through the sensor network is to be stored in the secondary storage device in real time in a form in which a range search is possible using the time as a key value, high speed data writing is required. When using a dense index among the conventional indexing methods, it is necessary to create an index for each input record. Therefore, the cost of writing data is higher than that of the sparce index, and the data writing speed catches up with the generation of data. There is no fear. On the other hand, in order to use the sparse index, it is necessary to input the input data in a state where the key values (in this case, time) are sorted. However, it is conceivable that a large amount of time-series data collected through the sensor network does not have a constant time data input order according to the time and is reversed due to a network delay or disconnection of the data source side such as a sensor. For this reason, if the time is a key value, the data is roughly aligned according to the key value, but cannot be used with a sparse index because the data is partially reversed in order due to delay.
この問題に対して、sparse index に、新たなオフセットデータというビットマップで順序逆転したデータの格納位置を表すデータを加え、データの順序逆転に対応する方法が提案されている(例えば、非特許文献2参照。)。本方法では、ビットマップを用い、オフセット数に対応したビット番号のビットを1にすることで、オフセット数を表現することで、遅延データの位置を指し示し、高速な索引付けと順序逆転データへの対応を両立している。 In order to deal with this problem, a method has been proposed in which data representing the storage position of data whose order has been reversed by a bitmap called new offset data is added to sparse index to cope with the data order reversal (for example, non-patent literature). 2). In this method, a bit map is used and the bit of the bit number corresponding to the offset number is set to 1. By expressing the offset number, the position of the delayed data is indicated, and high-speed indexing and order reversal data are converted. It is compatible.
従来のデータの順序逆転に高速に対応する方法では、ビットマップを用い、オフセット数に対応したビット番号のビットを1にすることで、オフセット数を表現する方法をとっている。しかし、この場合、連続して発生する小さな遅延を効率的に表現することは可能だが、センサ等データソース側の接続断などにより発生する突発的な大きな遅延に対しては、そのオフセット数と同じ数のビット数という多くのビット数が必要となり、空間効率が悪いという課題があった。 In the conventional method of dealing with data reversal at high speed, a method is used in which the number of offsets is expressed by using a bit map and setting the bit of the bit number corresponding to the number of offsets to 1. However, in this case, it is possible to efficiently express the small delay that occurs continuously, but for the sudden large delay that occurs due to disconnection on the data source side such as a sensor, it is the same as the number of offsets. A large number of bits, the number of bits, is required, and there is a problem that the space efficiency is poor.
そこで、前記課題を解決するために、本発明は、データを二次記憶装置へ蓄積する際に、キー値についてデータの順序がある程度逆転して入力されたとしても逐次書き込みファイルに近い速度を維持することが可能、キー値による完全一致検索が可能、範囲検索による効率的なデータの読み込みが可能、且つ突発的な大きな遅延によりデータ順序が大きく逆転したとしても、これを空間効率良く表現可能なデータ構造を実現できるデータ蓄積装置、データ蓄積方法、及びプログラムを提供することを目的とする。 Therefore, in order to solve the above-described problem, the present invention maintains a speed close to that of a sequentially written file even when the data order is reversed to some extent when the data is stored in the secondary storage device. It is possible to search exactly by key value, to efficiently read data by range search, and even if the data order is greatly reversed due to sudden large delay, this can be expressed efficiently in space An object of the present invention is to provide a data storage device, a data storage method, and a program capable of realizing a data structure.
上記課題の解決のため、本発明は、レコードの特定の値をキー値としてsparse indexによる索引付けを行い、一の論理ブロックが受け持つキー値の範囲に含まれるキー値のレコードが他の論理ブロックにある場合には、一の論理ブロックから別の論理ブロックへのオフセット数をビット列で表現して圧縮したオフセットデータをオフセットファイルとして二次記憶装置に記録させることとした。 In order to solve the above-mentioned problem, the present invention performs indexing by a sparse index using a specific value of a record as a key value, and a record of a key value included in a range of key values that one logical block handles is another logical block. In this case, offset data obtained by compressing the number of offsets from one logical block to another logical block as a bit string is recorded in the secondary storage device as an offset file.
具体的には、本発明に係るデータ蓄積装置は、レコードを最小単位として連続して入力されるデータを、論理ブロックを単位として逐次蓄積する二次記憶装置と、前記レコードの特定の値をキー値としてスパースインデックス(sparse index)による索引付けを行い、一の論理ブロックが受け持つキー値の範囲に含まれる前記キー値を持つ前記レコードが他の論理ブロックにある場合には、前記一の論理ブロックから前記他の論理ブロックへのオフセット数をビット列で表現して圧縮したオフセットデータをオフセットファイルとして前記二次記憶装置に記録させるシステム制御手段と、を備える。 Specifically, the data storage device according to the present invention includes a secondary storage device that sequentially stores data continuously input with a record as a minimum unit, and a specific value of the record as a key. When indexing with a sparse index as a value and the record having the key value included in the range of the key value that one logical block handles is in another logical block, the one logical block System control means for causing the secondary storage device to record the offset data compressed by expressing the number of offsets to the other logical block as a bit string as an offset file.
具体的には、本発明に係るデータ蓄積方法は、レコードを最小単位として連続して入力されるデータを、論理ブロックを単位として二次記憶装置に逐次蓄積する際に、前記レコードの特定の値をキー値としてスパースインデックス(sparse index)による索引付けを行い、一の論理ブロックが受け持つキー値の範囲に含まれる前記キー値を持つ前記レコードが他の論理ブロックにある場合には、前記一の論理ブロックから前記他の論理ブロックへのオフセット数をビット列で表現して圧縮したオフセットデータをオフセットファイルとして前記二次記憶装置に記録させるシステム制御手順を行う。 Specifically, in the data storage method according to the present invention, when data that is continuously input with a record as a minimum unit is sequentially stored in a secondary storage device with a logical block as a unit, a specific value of the record is stored. Is indexed using a sparse index as a key value, and if the record having the key value included in the range of key values that one logical block handles is in another logical block, the one A system control procedure is performed for causing the secondary storage device to record offset data compressed by expressing the number of offsets from the logical block to the other logical block as a bit string.
本発明に係るデータ蓄積装置及びデータ蓄積方法は、sparse indexとオフセットデータを組み合わせているため、順序逆転したデータに対して検索可能となる。さらに、オフセットデータを圧縮することでネットワークの接続断による突発的な大きな遅延をより効率的に表現できる。 Since the data storage device and the data storage method according to the present invention combine sparse index and offset data, it is possible to search for data whose order has been reversed. Furthermore, by compressing the offset data, it is possible to more efficiently represent a sudden large delay due to the disconnection of the network.
従って、本発明は、データを二次記憶装置へ蓄積する際に、キー値についてデータの順序がある程度逆転して入力されたとしても逐次書き込みファイルに近い速度を維持することが可能、キー値による完全一致検索が可能、範囲検索による効率的なデータの読み込みが可能、且つ突発的な大きな遅延によりデータ順序が大きく逆転したとしても、これを空間効率良く表現可能なデータ構造を実現できるデータ蓄積装置及びデータ蓄積方法を提供することができる。 Therefore, according to the present invention, when data is stored in the secondary storage device, it is possible to maintain a speed close to that of a sequentially written file even if the order of data is reversed to some extent for key values. Data storage device that can perform exact match search, can efficiently read data by range search, and can realize a data structure that can express this even if the data order is greatly reversed due to a sudden large delay And a data storage method can be provided.
オフセットデータの圧縮には、以下の3つの手法がある。 There are the following three methods for compressing the offset data.
(1)Run Length圧縮
Run Length圧縮は、ある値が一定以上の個数連続して現れた場合に、これをそのまま表現する代わりに、連続したビットの個数を表して圧縮する手法である。
(1) Run Length Compression Run Length compression is a technique in which when a certain value appears continuously for a certain number or more, it represents the number of consecutive bits instead of expressing it as it is.
本データ蓄積装置の前記システム制御手段は、前記オフセットデータを、コード長記憶部、圧縮回数記憶部、圧縮位置及び圧縮ビット数記憶部、並びにコード部で構成し、前記コード部において、前記オフセット数と等しいビット位置のビットを「1」とし、前記コード部のビット列が予め設定したしきい値以上同一のビットが連続する連続ビット部を含む場合に、前記連続ビット部のビット数を数え上げ、前記連続ビット部の先頭の位置と前記連続ビット部のビット数を前記圧縮位置及び圧縮ビット数記憶部に記録し、前記連続ビット部の先頭のビットを残して前記連続ビット部の他のビットを削除するオフセット圧縮部を有することを特徴とする。 The system control means of the data storage apparatus comprises the offset data as a code length storage unit, a compression count storage unit, a compression position and compression bit number storage unit, and a code unit, and in the code unit, the offset number If the bit string of the bit part of the code part includes a continuous bit part in which the bit string of the code part includes the same bit more than a preset threshold value, the number of bits of the continuous bit part is counted up, Record the start position of the continuous bit part and the number of bits of the continuous bit part in the compressed position and the compressed bit number storage part, and delete the other bits of the continuous bit part, leaving the first bit of the continuous bit part An offset compression unit is provided.
本データ蓄積方法の前記システム制御手順は、前記オフセットデータを、コード長記憶部、圧縮回数記憶部、圧縮位置及び圧縮ビット数記憶部、並びにコード部で構成し、前記コード部において、前記オフセット数と等しいビット位置のビットを「1」とし、前記コード部のビット列が予め設定したしきい値以上同一のビットが連続する連続ビット部を含む場合に、前記連続ビット部のビット数を数え上げ、前記連続ビット部の先頭の位置と前記連続ビット部のビット数を前記圧縮位置及び圧縮ビット数記憶部に記録し、前記連続ビット部の先頭のビットを残して前記連続ビット部の他のビットを削除することを特徴とする。 The system control procedure of the data storage method includes the offset data including a code length storage unit, a compression count storage unit, a compression position and compression bit number storage unit, and a code unit, and the code unit includes the offset number. If the bit string of the bit part of the code part includes a continuous bit part in which the bit string of the code part includes the same bit more than a preset threshold value, the number of bits of the continuous bit part is counted up, Record the start position of the continuous bit part and the number of bits of the continuous bit part in the compressed position and the compressed bit number storage part, and delete the other bits of the continuous bit part, leaving the first bit of the continuous bit part It is characterized by doing.
本圧縮方法では、ビットマップを用いたオフセット表現方法へ応用するに際して、オフセットデータの構造として、コード長記憶部、圧縮回数記憶部、圧縮位置および圧縮ビット数記憶部、並びにコード部を用意する。 In this compression method, when applied to an offset expression method using a bitmap, a code length storage unit, a compression count storage unit, a compression position and compression bit number storage unit, and a code unit are prepared as the offset data structure.
このとき、コード部では、前記提案方法と同様にビットマップを用いて、オフセット数と等しいビット番号のビットを1にすることで、オフセット数を表現するが、0もしくは1のビットが、あらかじめ定めた一定数以上連続する場合、これをRun Length圧縮する。このとき、圧縮に際して、圧縮したビットの位置および連続したビットの個数を表現する必要があるが、これを圧縮位置および圧縮ビット数記憶部に格納する。この圧縮位置および圧縮ビット数記憶部は、Run Length圧縮を行った回数分の個数だけ、都度準備する。この圧縮を行った回数は、圧縮回数記憶部に記憶する。また、コード部に格納されたビットマップのサイズをコード長記憶部に格納する。 At this time, the code part expresses the number of offsets by setting the bit having the bit number equal to the number of offsets to 1 by using a bitmap in the same manner as in the proposed method, but the bit of 0 or 1 is predetermined. If more than a certain number of consecutive, this is compressed into Run Length. At this time, in the compression, it is necessary to express the position of the compressed bit and the number of consecutive bits, which are stored in the compressed position and compressed bit number storage unit. This compression position and compression bit number storage unit prepares for each number of times the Run Length compression has been performed. The number of times this compression is performed is stored in the compression number storage unit. The size of the bitmap stored in the code part is stored in the code length storage part.
本データ構造を用いることで、ビットマップによる表現を行いつつも、Run Length圧縮可能な場合はこれを行うことにより、より効率的なオフセット表現が可能となる。また、圧縮位置および圧縮ビット数部分をコード部と分離させているため、新たなオフセットの追加が、コード部を参照して全てのオフセットをデコードすることなく行え、効率的なオフセット追加処理が可能となる。 By using this data structure, it is possible to perform more efficient offset expression by performing this when the Run Length compression is possible while performing the expression by the bitmap. In addition, since the compression position and the number of compression bits are separated from the code part, a new offset can be added without referring to the code part to decode all offsets, enabling efficient offset addition processing. It becomes.
(2)Simple9
4バイト(32ビット)を1つの符号として扱い、1つの符号に、できるだけ多くの整数値を詰め込もうとする方法で、整数値の大きさに合わせて、使用するビット数を1〜28ビットに変化させる手法である(例えば、非特許文献4を参照。)。
(2) Simple9
4 bytes (32 bits) are handled as one code, and as many integer values as possible are packed into one code, the number of bits to be used is 1 to 28 bits according to the size of the integer value. (For example, refer nonpatent literature 4).
本データ蓄積装置の前記システム制御手段は、一の論理ブロックが受け持つ前記キー値の範囲に含まれる前記キー値を持つ前記レコードが他の複数の論理ブロックにある場合、前記一の論理ブロックから前記他の複数の論理ブロックへの前記オフセット数をそれぞれ求め、前記他の複数の論理ブロックのうち最もブロック位置が近い論理ブロック同士について、求めた前記オフセット数からそれぞれの論理ブロックへのオフセット数の差を求め、これを差分オフセット数とし、前記オフセットデータを、ヘッダ部並びにコード部で構成し、前記コード部に、単数の前記オフセット数もしくは複数の前記差分オフセット数を前記オフセット数もしくは前記差分オフセット数に応じたビット数で表現したオフセットビット列、及び前記オフセットビット列のビット数を記載した一定ビット数の符号ヘッダ、で形成される符号を格納し、前記ヘッダ部に、前記符号の個数及び前記オフセット数の個数を表示するオフセット圧縮部を有することを特徴とする。 When the record having the key value included in the range of the key value handled by one logical block is in a plurality of other logical blocks, the system control unit of the data storage device starts from the one logical block. The number of offsets to each of a plurality of other logical blocks is obtained, and the difference in the number of offsets from the obtained number of offsets to each logical block is determined for the logical blocks having the closest block position among the plurality of other logical blocks. The offset data is composed of a header part and a code part, and the code part includes the single offset number or a plurality of differential offset numbers as the offset number or the differential offset number. Offset bit string expressed by the number of bits according to the offset, and the offset A code header having a fixed number of bits describing the number of bits of a code string, and an offset compression unit for displaying the number of codes and the number of offsets in the header unit Features.
本データ蓄積方法の前記システム制御手順は、一の論理ブロックが受け持つ前記キー値の範囲に含まれる前記キー値を持つ前記レコードが他の複数の論理ブロックにある場合、前記一の論理ブロックから前記他の複数の論理ブロックへの前記オフセット数をそれぞれ求め、前記他の複数の論理ブロックのうち最もブロック位置が近い論理ブロック同士について、求めた前記オフセット数からそれぞれの論理ブロックへのオフセット数の差を求め、これを差分オフセット数とし、前記オフセットデータを、ヘッダ部並びにコード部で構成し、前記コード部に、単数の前記オフセット数もしくは複数の前記差分オフセット数を前記オフセット数もしくは前記差分オフセット数に応じたビット数で表現したオフセットビット列、及び前記オフセットビット列のビット数を記載した一定ビット数の符号ヘッダ、で形成される符号を格納し、前記ヘッダ部に、前記符号の個数及び前記オフセット数の個数を表示することを特徴とする。 When the record having the key value included in the range of the key value handled by one logical block is in a plurality of other logical blocks, the system control procedure of the present data storage method starts from the one logical block. The number of offsets to each of a plurality of other logical blocks is obtained, and the difference in the number of offsets from the obtained number of offsets to each logical block is determined for the logical blocks having the closest block position among the plurality of other logical blocks. The offset data is composed of a header part and a code part, and the code part includes the single offset number or a plurality of differential offset numbers as the offset number or the differential offset number. Offset bit string expressed by the number of bits according to the offset, and the offset Stores Tsu preparative column fixed number of bits of the code header that describes the number of bits of, in the code to be formed, in the header portion, and displaying the number and the number of the offset number of the code.
本圧縮方法をオフセットデータへ応用するに際して、オフセットデータの構造として、ヘッダ部とコード部を用意する。このとき、コード部はSimple9で圧縮された整数値列を格納し、ヘッダ部はSimple9で圧縮された整数値の個数とSimple9の符号の個数とを格納する。本データ構造を用いることで、Simple9の符号の伸長時に、このヘッダ部のデータを用いることで余分なデータの処理が抑えられ、効率的な処理が可能となる。
When applying this compression method to offset data, a header part and a code part are prepared as the structure of the offset data. At this time, the code part stores an integer value sequence compressed by Simple9, and the header part stores the number of integer values compressed by Simple9 and the number of codes of Simple9. By using this data structure, when the code of
(3)Variable Byte Code
通常4バイトで表す整数値を、整数値の大きさに合わせて使用するバイト数を1〜4バイトに変化させる方法である(例えば、非特許文献3を参照。)。
(3) Variable Byte Code
In this method, an integer value represented by 4 bytes is usually changed to 1 to 4 bytes according to the size of the integer value (see
本データ蓄積装置の前記システム制御手段は、前記オフセットデータを複数のバイトで構成し、前記オフセット数に応じたバイト数で前記オフセット数を表現する際に、前記オフセット数を表現する各バイトの一定数のビットをヘッダとし、前記オフセット数を表現したバイト数を前記ヘッダで表示するオフセット圧縮部を有することを特徴とする。 The system control means of the data storage device comprises a plurality of bytes of the offset data, and when the offset number is expressed by the number of bytes corresponding to the offset number, a fixed number of each byte expressing the offset number It is characterized by having an offset compression section that uses a number of bits as a header and displays the number of bytes expressing the number of offsets in the header.
本データ蓄積方法の前記システム制御手順は、前記オフセットデータを複数のバイトで構成し、前記オフセット数に応じたバイト数で前記オフセット数を表現する際に、前記オフセット数を表現する各バイトの一定数のビットをヘッダとし、前記オフセット数を表現したバイト数を前記ヘッダで表示することを特徴とする。 The system control procedure of the data storage method is configured such that when the offset data is composed of a plurality of bytes and the offset number is expressed by the number of bytes corresponding to the offset number, each byte expressing the offset number is fixed. The number of bits is used as a header, and the number of bytes expressing the number of offsets is displayed in the header.
また、本発明に係るプログラムは、コンピュータに、前記データ蓄積方法の前記システム制御手順を実行させる。 A program according to the present invention causes a computer to execute the system control procedure of the data storage method.
本発明は、データを二次記憶装置へ蓄積する際に、キー値についてデータの順序がある程度逆転して入力されたとしても逐次書き込みファイルに近い速度を維持することが可能、キー値による完全一致検索が可能、範囲検索による効率的なデータの読み込みが可能、且つ突発的な大きな遅延によりデータ順序が大きく逆転したとしても、これを空間効率良く表現可能なデータ構造を実現できるデータ蓄積装置、データ蓄積方法、及びプログラムを提供することができる。 In the present invention, when data is stored in the secondary storage device, it is possible to maintain a speed close to that of a sequentially written file even if the order of data is reversed to some extent for key values. Data storage device and data that can be searched, data can be efficiently read by range search, and even if the data order is greatly reversed due to an unexpectedly large delay An accumulation method and a program can be provided.
以下、具体的に実施形態を示して本発明を詳細に説明するが、本願の発明は以下の記載に限定して解釈されない。なお、本明細書及び図面において符号が同じ構成要素は、相互に同一のものを示すものとする。 Hereinafter, the present invention will be described in detail with specific embodiments, but the present invention is not construed as being limited to the following description. In the present specification and drawings, the same reference numerals denote the same components.
(実施形態1)
実施形態1はオフセット数の表現にVariable Byte Codeを用いる形態である。
(Embodiment 1)
The first embodiment uses a variable byte code for expressing the number of offsets.
図1は、実施形態1のデータ蓄積装置10の構成を説明する図である。データ蓄積装置10は、システム制御部300、インタフェース110、バッファメモリ120、二次記憶装置330を備える。インタフェース110はバッファメモリ120と、バッファメモリ120はインタフェース110と二次記憶装置330とそれぞれデータのやり取りを行う。システム制御部300は、インタフェース110の入力データについて、それが書き込み要求なのか読み出し要求なのかを解析する。システム制御部300は、バッファメモリ120に対して入出力データをバッファさせるためのメモリ管理を行う。システム制御部300は、二次記憶装置に対してデータ入力におけるファイルへのデータ書き込みなどのファイル操作を行う。二次記憶装置内には索引ファイル331とデータファイル332とオフセットファイル333の3つのファイルが存在する。
FIG. 1 is a diagram illustrating the configuration of the
図2は、データ蓄積装置10のデータ構造を説明する図である。データファイル332の各論理ブロックは入力されたレコードから構成される。
FIG. 2 is a diagram for explaining the data structure of the
オフセットファイル333における各レコードであるオフセットデータは、固定長Wビットのデータである。各オフセットデータは、ファイル上での位置を用いて、データファイルの各論理ブロックに一対一で対応している。オフセットデータは圧縮したオフセット数値列を格納するコード部のみから構成される。オフセット数値列の圧縮はVariable Byte Codeを用いて行う。
The offset data that is each record in the offset
図3及び図4はデータ蓄積装置10におけるデータ追加処理を示すフローチャートである。
3 and 4 are flowcharts showing data addition processing in the
データ追加処理では、まず入力レコードをバッファメモリ上に蓄積する(ステップS701)。入力レコードが論理ブロックサイズ分だけ蓄積されるまで入力レコードをバッファメモリに蓄積し続ける(ステップS702)。 In the data addition process, first, the input record is accumulated in the buffer memory (step S701). The input record is continuously accumulated in the buffer memory until the input record is accumulated for the logical block size (step S702).
入力レコードがバッファメモリ内に論理ブロックサイズ分だけ蓄積されたならば、バッファメモリ内のレコードをキー値について昇順にソートする(ステップS703)。その後、バッファメモリ内のレコードを、データファイルの末尾に論理ブロック分書き込む(ステップS704)。この書き込んだ論理ブロックをB1とする。また、オフセットデータの初期値として全ビットを0にしたビット列を、オフセットファイルに書き込む(ステップS705)。 If the input records are accumulated in the buffer memory by the logical block size, the records in the buffer memory are sorted in ascending order with respect to the key values (step S703). After that, the records in the buffer memory are written for the logical block at the end of the data file (step S704). This written logical block is designated as B1. Further, a bit string with all bits set to 0 is written in the offset file as an initial value of the offset data (step S705).
次に、索引ファイルを参照して索引ファイル内の最大のキー値を探し、その値を今書き込んだ論理ブロックであるB1が扱うキー値の下限値Lとして一時的に記憶する(ステップS706)。その後、書き込んだ論理ブロック内で最大のキー値を持つ末尾のレコードに対して索引を作成し、索引ファイルを更新する(ステップS707)。 Next, the index file is referred to find the maximum key value in the index file, and the value is temporarily stored as the lower limit value L of the key value handled by the logical block B1 that has just written (step S706). Thereafter, an index is created for the last record having the largest key value in the written logical block, and the index file is updated (step S707).
さらに、バッファメモリ内のレコードを参照し(ステップS708)、先頭のレコードから順にレコードのキー値が下限値L以下となるレコードを探す(ステップS709)。参照したレコードが下限値Lよりも大きい場合、そこで探索を終了し、書き込み処理を終了する。参照したレコードが下限値L以下の場合、索引ファイルを調べそのキー値以上でもっとも値が小さいキー値を探す(ステップS710)。ここで、探索したキー値が指す論理ブロックであるB2がすでに更新済みであれば(ステップS711)、その論理ブロックB2の更新処理は取りやめ、バッファメモリ上で次のレコードがあれば、次のレコードを参照し、同様の処理を行う(ステップS720、ステップS721)。なければ、そこで探索終了とし、書き込み処理を終了する。探索したキー値が指す論理ブロックB2が更新済みでなければ、その論理ブロックB2を読み込む(ステップS712、ステップS713)。 Further, the record in the buffer memory is referred to (step S708), and the record in which the key value of the record becomes the lower limit value L or less is searched in order from the first record (step S709). If the referenced record is larger than the lower limit value L, the search ends there and the writing process ends. If the referenced record is less than or equal to the lower limit value L, the index file is examined to find a key value that is equal to or greater than the key value (step S710). Here, if B2 which is the logical block pointed to by the searched key value has already been updated (step S711), the update processing of the logical block B2 is canceled, and if there is a next record on the buffer memory, the next record The same processing is performed with reference to (Step S720, Step S721). If not, the search is terminated and the writing process is terminated. If the logical block B2 indicated by the searched key value has not been updated, the logical block B2 is read (steps S712 and S713).
次に、読み込んだ論理ブロックB2と書き込んだ論理ブロックB1とのブロック位置を比較し、論理ブロック数がいくつ離れているかを計算し、これをオフセットXとする(ステップS714)。このオフセットXと、論理ブロックB2に対応したオフセットデータを入力として(ステップS715)、「オフセットデータ更新」処理を行う(ステップS716)。本処理については後述するが、これにより、オフセットデータにオフセットXを追加して更新したオフセットデータを得ることができる。この更新したオフセットデータにより、元のオフセットデータを更新し、オフセットファイルを更新する(ステップS719)。 Next, the block positions of the read logical block B2 and the written logical block B1 are compared to calculate how many logical blocks are separated, and this is set as an offset X (step S714). With the offset X and offset data corresponding to the logical block B2 as inputs (step S715), an “offset data update” process is performed (step S716). Although this processing will be described later, offset data updated by adding the offset X to the offset data can be obtained. The original offset data is updated with the updated offset data, and the offset file is updated (step S719).
バッファメモリ上の次のレコードがあれば、それを参照し、同様の処理を行う(ステップS720、ステップS721)。次のレコードがなければ、データ追加処理を終了する。 If there is a next record on the buffer memory, it is referred to and the same processing is performed (step S720, step S721). If there is no next record, the data addition process is terminated.
図5は、図4のオフセットデータ更新処理S716を説明するフローチャートである。 FIG. 5 is a flowchart for explaining the offset data update process S716 of FIG.
オフセットデータ更新処理S716では、入力として、オフセットデータとオフセットを受け取る。例として、オフセットデータとして“10,11,12”の整数値列をVariable Byte Codeで圧縮したもの、オフセットとして129が入力されたとする。このとき、ループ(ステップS812)に入り、オフセットの129を2進数で表現するのに、どれだけのビット数が必要かのチェックを行う(ステップS813)。このとき、129は規定値の一つである128よりも大きく、16384よりも小さいため、ビット数14で表現できることがわかる。この14ビットで129を表現し(00000010000001)このビット列をPとする(ステップS815)。Pについて、先頭から順にビット7つごとに、ヘッダとして1ビットを追加し、1バイトひとまとまりで扱う。このため、Pは(00000001 00000001)となる。さらに、その1バイトが数値を表現する最下位バイトだった場合、ヘッダの1ビットを1とする(ステップS816)。このため、Pは(00000001 10000001)となる。これをオフセットデータの末尾に追加し(ステップS817)、オフセットデータを“10,11,12,129”を圧縮したものとする。このとき、オフセットデータを表すのに必要なビット長が、あらかじめオフセットデータについて設定した固定ビット長W以下であれば(ステップS818)、更新したオフセットデータを出力して更新処理を終了する(ステップS819)。W以上であった場合、追加したオフセットの129は格納不可であるため(ステップS814)、エラーを出力してオフセットデータを更新せずに処理を終了する。 In the offset data update process S716, offset data and an offset are received as inputs. As an example, it is assumed that an integer value string of “10, 11, 12” is compressed with Variable Byte Code as offset data, and 129 is input as an offset. At this time, a loop (step S812) is entered to check how many bits are required to represent the offset 129 in binary (step S813). At this time, 129 is larger than 128, which is one of the specified values, and smaller than 16384, so that it can be expressed by 14 bits. The 14 bits represent 129 (00000010000001), and this bit string is set to P (step S815). For P, one bit is added as a header for every seven bits in order from the top, and a single byte is handled. For this reason, P becomes (00000001 00000001). Further, if the 1 byte is the least significant byte representing a numerical value, 1 bit of the header is set to 1 (step S816). Therefore, P becomes (00000001 10000001). This is added to the end of the offset data (step S817), and it is assumed that the offset data is compressed "10, 11, 12, 129". At this time, if the bit length necessary for representing the offset data is equal to or smaller than the fixed bit length W set in advance for the offset data (step S818), the updated offset data is output and the updating process is terminated (step S819). ). If it is greater than or equal to W, the added offset 129 cannot be stored (step S814), so an error is output and the process ends without updating the offset data.
図6は、データ蓄積装置のキー値によるデータの完全一致検索処理を説明するフローチャートである。 FIG. 6 is a flowchart for explaining the complete match search processing of data by the key value of the data storage device.
まず、探索したいキー値Xが入力される(ステップS911)。索引ファイルから探索キー値X以上でもっとも値が小さいキー値Aを捜し、その値Aが指すレコードを含む論理ブロックD1を読み込む(ステップS912)。次に、読み込んだ論理ブロックD1内のレコード部から二分探索を用いて探索キー値Xを持つレコードを探す(ステップS913)。 First, the key value X to be searched is input (step S911). A key value A having the smallest value equal to or greater than the search key value X is searched from the index file, and the logical block D1 including the record pointed to by the value A is read (step S912). Next, a record having a search key value X is searched using a binary search from the record portion in the read logical block D1 (step S913).
このとき、探索キー値Xを持つレコードが見つかったのであれば(ステップS914)、探索キー値Xを持つレコードを出力して終了する(ステップS921)。探索キー値Xを持つレコードが見つからなかった場合、別の論理ブロックにあるレコードを調べるため、読み込んだ論理ブロックD1に対応したオフセットデータをオフセットファイルから読み込む(ステップS915)。その後、読み込んだオフセットデータを入力として、「オフセットデータ参照」処理を行う(ステップS916)。本処理の詳細は後述するが、これにより、オフセット整数値列Fを得ることができる。そのあと、オフセット整数値列Fの要素すべてについて(ステップS917)、その要素が示すオフセット数をGとして、論理ブロックD1のGブロック先の論理ブロックD2を読み込み(ステップS918)、D2が探索キー値Xを持つかどうかを二分探索を用いてチェックする(ステップS919)。探索キー値Xを持つレコードが見つかれば(ステップS920)、そのレコードを出力し、処理を終了する(ステップS921)。もし、オフセット整数値列Fのすべての要素をチェックしても探索キー値Xを持つレコードが見つからなければ、該当レコードは無しと出力し、処理を終了する(ステップS922)。 At this time, if a record having the search key value X is found (step S914), the record having the search key value X is output and the process ends (step S921). If a record having the search key value X is not found, offset data corresponding to the read logical block D1 is read from the offset file in order to examine a record in another logical block (step S915). Thereafter, “offset data reference” processing is performed using the read offset data as input (step S916). Although details of this processing will be described later, an offset integer value sequence F can be obtained. After that, for all elements of the offset integer value sequence F (step S917), the number of offsets indicated by the element is set to G, and the logical block D2 that is the G block destination of the logical block D1 is read (step S918), and D2 is the search key value. Whether or not X is present is checked using a binary search (step S919). If a record having the search key value X is found (step S920), the record is output and the process ends (step S921). If no record having the search key value X is found even after checking all the elements of the offset integer value sequence F, it is output that there is no corresponding record, and the process is terminated (step S922).
図7は、図6のオフセットデータ参照処理S916を説明するフローチャートである。 FIG. 7 is a flowchart for explaining the offset data reference process S916 of FIG.
オフセットデータ参照処理S916では、入力としてオフセットデータを受け取る。例として、“10,11,12,129”の整数値列を圧縮したものが入力されたオフセットデータだとする。このオフセットデータを元の整数値列に戻す処理を行う。先頭から順に1バイトずつ読み込み(ステップS953)、バイトのヘッダ先頭1ビットが1かどうかを確認する(ステップS954)。このとき、先頭1ビットが0であれば(ステップS954)、続く次の1バイトも同数値を表現するためのバイトとみなし(ステップS955)、それをチェックする(ステップS953)。先頭1ビットが1であれば(ステップS954)、そこまで読み込んできたバイトをまとめて1つの整数値を表現しているとみなし、各バイトの先頭1ビットのヘッダを削除する処理を行う(ステップS957)。例ではこのとき、オフセットデータが(10001010 10001011 10001100 00000001 10000001)となっているので、1バイトの数値が3個“10,11,12”、2バイトの数値が1個“129”であることがわかる。このようにしてすべてのバイトを10進数に変換し(ステップS958)、これを出力して処理を終了する。 In the offset data reference process S916, offset data is received as an input. As an example, it is assumed that the input offset data is a compressed integer value string of “10, 11, 12, 129”. The offset data is returned to the original integer value sequence. One byte is read sequentially from the beginning (step S953), and it is checked whether the first header bit of the byte is 1 (step S954). At this time, if the first 1 bit is 0 (step S954), the subsequent 1 byte is regarded as a byte for expressing the same numerical value (step S955), and it is checked (step S953). If the first 1 bit is 1 (step S954), the bytes read up to that point are considered to represent one integer value, and the process of deleting the header of the first 1 bit of each byte is performed (step S954). S957). In the example, at this time, the offset data is (10001010 10001011 100001100 00000001 10000001), so that the numerical value of 1 byte is “10, 11, 12” and the numerical value of 1 byte is “129”. Recognize. In this way, all the bytes are converted into decimal numbers (step S958), which is output and the process is terminated.
図8及び図9はデータ蓄積装置10のキー値による範囲検索処理を示すフローチャートである。
FIG. 8 and FIG. 9 are flowcharts showing range search processing by the key value of the
まず、入力として下限キー値以上、上限キー値未満という検索条件が与えられるとする(ステップS1101)。索引ファイルから下限キー値以上でもっとも値が小さいキー値を捜してその値が指すレコードを含む論理ブロックをデータファイルから読み込む(ステップS1102)。続いて、読み込んだ論理ブロックに対応したオフセットデータを、オフセットファイルから読み込む(ステップS1103)。この読み込んだオフセットデータを入力として、「オフセットデータ参照」処理を行い(ステップS916)、出力として、オフセット整数値列Fを得る。このオフセット整数値列Fの各要素に、読み込んだ論理ブロックのブロック位置を加算し、これらをブロック位置集合Uとして一時的に記録する(ステップS1105)。 First, it is assumed that a search condition of not less than the lower limit key value and less than the upper limit key value is given as an input (step S1101). A key value that is not less than the lower limit key value and has the smallest value is searched from the index file, and a logical block including a record indicated by the value is read from the data file (step S1102). Subsequently, offset data corresponding to the read logical block is read from the offset file (step S1103). Using this read offset data as an input, an “offset data reference” process is performed (step S916), and an offset integer value sequence F is obtained as an output. The block position of the read logical block is added to each element of this offset integer value sequence F, and these are temporarily recorded as a block position set U (step S1105).
次に、論理ブロックのレコード部の先頭のレコードから順番にレコードのキー値が下限キー値以上かどうか調べていく(ステップS1107)。下限キー値以上のレコードが見つかったら、まず論理ブロック内で最大のキー値を持つ末尾のレコードを参照し、そのキー値が上限キー値以上かどうかを調べる(ステップS1109)。このとき、上限キー値以上でなければ、この論理ブロックの現在参照しているレコードから末尾のレコードまでのすべてのレコードは検索条件を満たすとして、検索条件を満たすレコード集合Rに追加する(ステップS1116)。その後、データファイル内に次の論理ブロックがあれば(ステップS1117)それを読み込み同様の処理を行う(ステップS1118)。論理ブロックがなければ、そこで検索終了となり、レコード集合Rを出力して終了する(ステップS1125)。 Next, in order from the first record in the record portion of the logical block, it is checked whether the key value of the record is equal to or greater than the lower limit key value (step S1107). When a record that is equal to or higher than the lower limit key value is found, first, the last record having the maximum key value in the logical block is referred to and it is checked whether the key value is equal to or higher than the upper limit key value (step S1109). At this time, if it is not equal to or greater than the upper limit key value, all records from the currently referenced record of this logical block to the last record are added to the record set R satisfying the search condition as satisfying the search condition (step S1116). ). Thereafter, if there is a next logical block in the data file (step S1117), it is read and the same processing is performed (step S1118). If there is no logical block, the search ends there, the record set R is output, and the processing ends (step S1125).
末尾のレコードのキー値が上限キー値以上だった場合(ステップS1109)は、参照しているレコードから末尾のレコードまで順番にキー値が上限値未満かどうかの比較を行っていく(ステップS1110)。もし参照しているレコードのキー値が上限キー値未満であれば、そのレコードを検索条件を満たすレコード集合Rに追加する(ステップS1111)。上限キー値未満でないレコードを見つけたら、次はオフセットデータが指している論理ブロックのレコードについて検索を行う(ステップS1113)。 If the key value of the last record is greater than or equal to the upper limit key value (step S1109), it is compared in order from the referring record to the last record whether the key value is less than the upper limit value (step S1110). . If the key value of the record being referred to is less than the upper limit key value, the record is added to the record set R that satisfies the search condition (step S1111). If a record that is not less than the upper limit key value is found, the next search is performed for the record of the logical block pointed to by the offset data (step S1113).
ブロック位置集合Uが持つ全てのブロック位置の論理ブロックを参照し(ステップS1114)、そのうちのまだ探索していないブロックのレコードから下限キー値以上、上限キー値未満になるレコードを順番に見つけ、検索条件を満たすレコード集合Rに追加していく(ステップS1123)。ブロック位置集合Uが持つ全てのアドレスが指す論理ブロックの探索が終わったら、検索終了となり、レコード集合Rを出力して終了する(ステップS1125)。 Reference is made to logical blocks at all block positions of the block position set U (step S1114), and records that are lower than the upper limit key value and lower than the upper limit key value are sequentially found and searched from the records of the blocks that have not been searched yet. The records are added to the record set R that satisfies the conditions (step S1123). When the search for the logical block pointed to by all addresses in the block position set U is completed, the search is terminated, and the record set R is output and the process is terminated (step S1125).
データ蓄積装置10の利点は、より効率的に大きなデータ到着遅延を表すオフセットに対応可能であることである。従来は、オフセットの表現にビット番号を使用しているため、オフセットデータのビット列長であるWが、記録可能な最大のオフセットとなる。一方、データ蓄積装置10は、最大28ビットを用いて1つの数値を表すことができるため、より効率的に大きなオフセットを示すことが可能である。上記例において、オフセットとして“10,11,12,129”を格納するが、従来では129ビットが必要になるのと比べ、データ蓄積装置10は、40ビットで格納することができる。このため、突発的な要因で発生する怖れのある大きな到着遅延に効率的に対応することができる。
The advantage of the
(実施形態2)
実施形態2は、オフセットの表現にSimple9で圧縮した整数値を用いる形態である。実施形態2のデータ蓄積装置の構成は図1のデータ蓄積装置10と同様である。
(Embodiment 2)
In the second embodiment, an integer value compressed by
図10は、実施形態2のデータ蓄積装置のデータ構造を説明する図である。 FIG. 10 is a diagram illustrating the data structure of the data storage device according to the second embodiment.
オフセットファイル333’における各レコードであるオフセットデータは、固定長Wビットのデータである。ファイル上での位置を用いて、データファイルの各論理ブロックに一対一で対応している。オフセットデータは圧縮したオフセット数値列を格納するコード部と、コード部に格納したオフセット数値列の要素数およびコード部の4バイトの符号の数を表すヘッダ部から構成される。オフセット数値列の圧縮はSimple9を用いて行う。Simple9は1つの整数値を通常4バイト(32ビット)で表現するところを、その大きさに合わせて1〜28ビットで表現してデータを圧縮する。
The offset data, which is each record in the offset file 333 ', is fixed-length W-bit data. The position on the file is used to correspond to each logical block of the data file on a one-to-one basis. The offset data includes a code part that stores a compressed offset numerical sequence, and a header part that represents the number of elements of the offset numerical sequence stored in the code part and the number of 4-byte codes in the code part. The offset numerical value sequence is compressed using Simple9. In
図11及び図12は実施形態2のデータ蓄積装置におけるデータ追加処理を示すフローチャートである。図3及び図4のフローチャートとの違いはオフセットデータ更新処理がステップS716’である点である。 11 and 12 are flowcharts showing data addition processing in the data storage device of the second embodiment. 3 and 4 is that the offset data update process is step S716 '.
図13は、実施形態2におけるオフセットデータ更新処理S716’を説明するフローチャートである。 FIG. 13 is a flowchart for explaining offset data update processing S716 'in the second embodiment.
オフセットデータ更新処理S716’では、入力としてオフセットとオフセットデータを受け取る。例として、入力されるオフセットデータは“10,11,12”の数値列をエンコードしたもの、オフセットは129だとする。 In the offset data update process S716 ', an offset and offset data are received as inputs. As an example, it is assumed that the input offset data is an encoded numeric string of “10, 11, 12” and the offset is 129.
オフセットデータ更新処理S716’では、オフセットデータのSimple9のデコード(ステップS831)、デコードしたオフセットデータへのオフセットの追加(ステップS832)、オフセットデータのSimple9へのエンコード(ステップS833)という順で処理が行われる。 In the offset data update process S716 ′, the process is performed in the order of decoding the offset data into Simple9 (step S831), adding an offset to the decoded offset data (step S832), and encoding the offset data into Simple9 (step S833). Is called.
本例では、まずSimple9でエンコード済みの“10,11,12”をデコードし、デコードした数値列に129を追加し、“10,11,12,129”の数値列をSimple9でエンコードして、そのエンコードしたビット列が固定長Wビットに収まるかどうかを判定し(ステップS834)、収まっていたのであれば、更新したオフセットデータを出力して処理を終了する。
In this example, first, “10, 11, 12” encoded with
図14は、図13のSimple9エンコード処理(ステップS833)を説明するフローチャートである。 FIG. 14 is a flowchart for explaining the Simple9 encoding process (step S833) of FIG.
Simple9エンコード処理S833では、入力として、非負の整数値列を受け取る。エンコード処理では、まず、入力された整数値列の要素順に、要素とその1つ後の要素との差を計算し(ステップS1004)、記録していく(ステップS1003〜ステップS1005)。例として挙げた“10,11,12,129”の数値列は、計算後、“10,1,1,117”となる。この計算後の数値列に対して、Simple9によるエンコードを行っていく。先頭から数値列の要素をチェックして行き、数値が何ビットで表現できるかどうかをチェックする(ステップS1011〜ステップS1013)。“10,1,1,117”をエンコードする場合、最初の3要素である“10,1,1”は4ビットでエンコード可能だが、その後に続く117はエンコードに7ビットが必要なので、これらの数値列のエンコードは全て7ビット用いて行う。このとき、ビット列のヘッダとして、4ビットのヘッダ(0101)を付加することで、続く28ビットが7ビット単位で数値を表現することを示す(ステップS1012)。続く28ビットは、“10,1,1,117”をそれぞれ7ビットで表し、ビット列(0001010 0000001 0000001 1110101)を得る。この結果“10,1,1,117”をエンコードした32ビットの符号は(0101 0001010 0000001 0000001 1110101)となり、これをSimple9の1つの符号として記録する(ステップS1018)。最後にオフセットデータのヘッダ部にエンコードした数値の数N=4とSimple9の符号の個数T=1を記入し(ステップS1020)、オフセットデータを出力し処理を終了する。 In the Simple 9 encoding process S833, a non-negative integer value sequence is received as an input. In the encoding process, first, the difference between an element and the next element is calculated in the order of elements in the input integer value sequence (step S1004) and recorded (steps S1003 to S1005). The numerical sequence of “10, 11, 12, 129” given as an example becomes “10, 1, 1, 117” after calculation. The numerical sequence after this calculation is encoded by Simple9. The elements of the numeric string are checked from the beginning, and it is checked how many bits the numeric value can be expressed (steps S1011 to S1013). When encoding “10, 1, 1, 117”, the first three elements “10, 1, 1” can be encoded with 4 bits, but the subsequent 117 requires 7 bits for encoding. All numeric string encoding is performed using 7 bits. At this time, by adding a 4-bit header (0101) as the header of the bit string, it indicates that the subsequent 28 bits represent a numerical value in units of 7 bits (step S1012). The following 28 bits represent “10, 1, 1, 117” with 7 bits, respectively, to obtain a bit string (0001010 00000001 0000001 1110101). As a result, the 32-bit code obtained by encoding “10, 1, 1, 117” is (0101 0101010 00000001 0000001 1110101), and this is recorded as one code of Simple 9 (step S1018). Finally, the number of encoded values N = 4 and the number of simple 9 codes T = 1 are entered in the header portion of the offset data (step S1020), the offset data is output, and the process ends.
図15は、図13のSimple9デコード処理(ステップS831)を示すフローチャートである。 FIG. 15 is a flowchart showing the Simple 9 decoding process (step S831) of FIG.
Simple9デコード処理S831では、入力としてオフセットデータを受け取る。例として、入力されるオフセットデータは“10,11,12,129”の数値列をエンコードした(0101 0001010 0000001 0000001 1110101)とする。まず、オフセットデータのヘッダ部を参照して、32ビットのSimple9符号の個数T=1とエンコードされた整数値の合計N=4を取得する(ステップS1031)。その後、T個のすべてのSimple9符号について先頭から順に復号処理を行っていく(ステップS1033〜ステップS1038)。復号処理では、各符号のヘッダである上位4ビットを参照することで、そのあとに続く28ビットを何ビットずつに区切って10進数の整数値に変換すればよいのかを得る。本例の(0101 0001010 0000001 0000001 1110101)では、先頭4ビットが(0101)であり、これは続く28ビットを7ビットずつに区切ることを示すので、(0001010,0000001,0000001,1110101)を10進数に変換した数列“10,1,1,117”が得られる。さらに、この得られた数列に対して、先頭から順番に、要素とその一つ前の要素との和を計算し、その和を新しい要素として、数列の更新を行う(ステップS1041)。これを数列の末尾の要素まで繰り返す(ステップS1040〜ステップS1042)。本例では、“10,1,1,117”であるので、ここから計算し得られる数列は“10,11,12,129”となる。Simple9デコード処理S831は、この数列をデコード結果として出力し、処理を終了する。 In the Simple 9 decoding process S831, offset data is received as an input. As an example, it is assumed that the input offset data is an encoded numerical sequence of “10, 11, 12, 129” (0101 0101010 0000001 0000001 1110101). First, referring to the header portion of the offset data, the number of 32-bit Simple9 codes T = 1 and the encoded integer value N = 4 are obtained (step S1031). After that, decoding processing is performed in order from the top for all T Simple9 codes (steps S1033 to S1038). In the decoding process, by referring to the upper 4 bits which are the headers of the respective codes, it is obtained how many bits following the 28 bits are divided and converted into decimal integer values. In this example (0101 01010 0000001 0000001 1110101), the first 4 bits are (0101), which indicates that the following 28 bits are divided into 7 bits each, so (00010100000000001,0000001,1110101) is a decimal number. The numerical sequence “10, 1, 1, 117” converted into the above is obtained. Further, the sum of the element and the previous element is calculated in order from the top of the obtained number sequence, and the number sequence is updated using the sum as a new element (step S1041). This is repeated up to the last element of the sequence (steps S1040 to S1042). In this example, since it is “10, 1, 1, 117”, the numerical sequence that can be calculated from this is “10, 11, 12, 129”. The Simple9 decoding process S831 outputs this sequence as a decoding result, and ends the process.
図16は実施形態2のデータ蓄積装置におけるキー値による完全一致検索処理を説明するフローチャートである。 FIG. 16 is a flowchart for explaining complete match search processing using key values in the data storage apparatus according to the second embodiment.
完全一致検索処理は、図6で説明した実施形態1の完全一致検索処理と同様の処理を行っているが、図6のオフセットデータ参照処理S916がSimple9デコード処理S831となる点が異なる。 The exact match search process is the same as the exact match search process of the first embodiment described with reference to FIG. 6 except that the offset data reference process S916 in FIG. 6 becomes the Simple 9 decode process S831.
図17及び図18は実施形態2のデータ蓄積装置におけるキー値による範囲検索処理を説明するフローチャートである。 17 and 18 are flowcharts for explaining range search processing by key values in the data storage device of the second embodiment.
範囲検索処理は、図8及び図9で説明した実施形態1の範囲検索処理と同様の処理を行っているが、オフセットデータ参照処理S1104がSimple9デコード処理S831となる点が異なる。 The range search process is the same as the range search process of the first embodiment described with reference to FIGS. 8 and 9 except that the offset data reference process S1104 is a Simple9 decode process S831.
実施形態2のデータ蓄積装置の利点は、実施形態1のデータ蓄積装置10と同様に大きなオフセットを効率的に表現できるだけでなく、さらに小さなオフセットに対しても最小で1ビットで表現でき、小さいオフセットも効率良く表現できる点である。実施例で挙げた例では、オフセットとして、“10,11,12,129”を格納するが、従来の方法では、129ビットが必要になるのと比べ、実施形態2では、32ビットにヘッダ分のビット数、例えば32ビット、を加えた64ビットで格納することができる。
The advantage of the data storage device according to the second embodiment is that not only can a large offset be efficiently expressed as in the
(実施形態3)
実施の形態3は、オフセットの表現にビット番号を用い、0もしくは1のビットが連続した場合にRun Length圧縮を用いる方法である。実施形態3のデータ蓄積装置の構成は図1のデータ蓄積装置10と同様である。
(Embodiment 3)
The third embodiment is a method in which a bit number is used to express an offset, and Run Length compression is used when 0 or 1 bits are consecutive. The configuration of the data storage device of the third embodiment is the same as that of the
図19は、実施形態3のデータ蓄積装置のデータ構造を説明する図である。 FIG. 19 is a diagram illustrating a data structure of the data storage device according to the third embodiment.
オフセットファイル333”における各レコードであるオフセットデータは、固定長Wビットのデータである。ファイル上での位置を用いて、データファイルの各論理ブロックに一対一で対応している。オフセットデータは、1つのコード長記憶部、1つの圧縮回数記憶部、複数の圧縮位置および圧縮ビット数記憶部、1つのコード部で構成される。コード長記憶部は、コード部で利用されているビット数を保持する。圧縮回数記憶部は、続く圧縮位置および圧縮ビット数記憶部の個数を保持する。圧縮位置および圧縮ビット数記憶部は、続くコード部において、圧縮が行われているビット位置とそこで圧縮されたビット数を保持する。コード部では圧縮処理後のビット列が保持される。
The offset data that is each record in the offset
コード部のビット列において、1となるビットのビット位置が基本的にデータの遅れブロック数を示す。ただし、このとき、コード部において、ビットの1もしくは0が、しきい値k個以上続く場合には、これをRun Length圧縮する。このとき、圧縮位置および圧縮ビット数記憶部として、Run Length圧縮を開始した位置と、圧縮したビット数を記入したものを作成し、オフセットデータに追加する。この追加した圧縮位置および圧縮ビット数記憶部の個数は、圧縮回数記憶部に記入し随時加算していく。 In the bit string of the code part, the bit position of 1 bit basically indicates the number of delayed blocks of data. At this time, however, if 1 or 0 of the bit continues in the code part for more than k threshold values, this is subjected to Run Length compression. At this time, as the compression position and compression bit number storage unit, a position in which the Run Length compression is started and the number of compressed bits are created and added to the offset data. The added compression position and the number of compression bit number storage units are entered in the compression number storage unit and added as needed.
図20及び図21は実施形態3のデータ蓄積装置におけるデータ追加処理を示すフローチャートである。図3及び図4のフローチャートとの違いはオフセットデータ更新処理がステップS716”である点である。 20 and 21 are flowcharts showing data addition processing in the data storage device of the third embodiment. The difference from the flowcharts of FIGS. 3 and 4 is that the offset data update process is step S716 ″.
図22は実施形態3のオフセットデータ更新処理S716”を説明するフローチャートである。 FIG. 22 is a flowchart illustrating the offset data update process S716 ″ according to the third embodiment.
オフセットデータ更新処理S716”では、入力としてオフセットデータXと追加するオフセットYを受け取る。例として、入力するオフセットデータXは“10,11,12”の数値列をオフセットデータ圧縮処理によって圧縮したもの、追加するオフセットYは129だとする。 In the offset data update process S716 ", the offset data X and the offset Y to be added are received as inputs. As an example, the input offset data X is a numerical string of" 10, 11, 12 "compressed by the offset data compression process. Assume that the offset Y to be added is 129.
オフセット更新処理S716”では、まず、圧縮回数記憶部を参照し、圧縮位置および圧縮ビット数記憶部の個数Mを得る(ステップS851)。次に、M個の圧縮位置および圧縮ビット数記憶部を読み込み、M個の圧縮位置P[1..M]と圧縮ビット数S[1..M]を記憶する(ステップS852)。次に、M個の圧縮ビット数S[1..M] をすべて足し合わせ、これに最後の分割位置P[M]を足すことで、オフセットデータが記録する圧縮部分を伸長した場合の末尾のビット位置を得、この値をLast_Pとする(ステップS853〜ステップS857、ステップS860)。次に、追加するオフセットYとLast_Pの値を比較し、YとLast_Pを1増加させた値が等しければ(ステップS858)、M番目の圧縮ビット数が1増えたとみなし、圧縮ビット数S[M]を1増加させる(ステップS859)。YとLast_Pを1増加させた値が等しくなければ、オフセットデータXのコード部において、YからLast_Pを引いた値の位置のビットを1にする(ステップS861)。また、コード長記憶部Nの値をYからLast_Pを引いたものとして更新する(ステップS862)。このようにして更新されたオフセットデータXをオフセット圧縮処理(ステップS863)に入力し、その結果出力として、圧縮されたオフセットデータZを得る。その後、オフセットデータZがあらかじめ決められた固定長Wビットに収まるかどうかを判定し(ステップS864)、オフセットデータ更新処理を終了する。 In the offset update process S716 ″, first, the compression count storage unit is referred to obtain the number M of compressed position and compression bit number storage units (step S851). Next, the M compression position and compression bit number storage units are stored. The M compression positions P [1..M] and the number of compression bits S [1..M] are stored (step S852), and the number of M compression bits S [1..M] is then stored. All are added, and the last division position P [M] is added to this to obtain the last bit position when the compressed portion recorded by the offset data is expanded, and this value is set as Last_P (steps S853 to S857). Next, the offset Y to be added and the value of Last_P are compared, and if the value obtained by incrementing Y and Last_P by 1 is equal (step S858), the Mth compression is performed. The number of compressed bits S [M] is incremented by 1 (step S859) If Y and Last_P are not equal to each other in the code portion of the offset data X, the Y to Last_P The bit at the position of the value obtained by subtracting 1 is set to 1 (step S861), and the value of the code length storage unit N is updated by subtracting Last_P from Y (step S862). The data X is input to the offset compression process (step S863), and as a result, compressed offset data Z is obtained, and then it is determined whether the offset data Z can fit within a predetermined fixed length W bits ( Step S864) and the offset data update process are terminated.
例では、オフセットデータは“10,11,12”をオフセット圧縮処理によって圧縮したものであり、これをビット列で表すと10番目、11番目、12番目のビットが1となったビット列(00000000 0111)となる。これにオフセットである“129”を加えた場合、これをビット列で表せば、“12”と“129”との間には、116個の0が存在することになる。この116個の0ビットをRun Length圧縮すると、圧縮回数は1、圧縮位置と圧縮ビット数はそれぞれ“13,115”となり、コード部のビット列は(00000000 011101)となる。また、別の例として、“11,12,13,・・・,98,99,100”と数字が連続しているオフセットデータがあるとし、これに新たなオフセット101を加えるとする。このデータはRun Length圧縮により、圧縮位置と圧縮ビット数が“11,89”、コード部が(00000000 001)となる。これにオフセット101を追加する場合、最後の数値よりも1だけ大きいので、圧縮ビット数のみを更新して、圧縮位置と圧縮ビット数を“11,90”とすれば、オフセット101を加えたこととなる。 In the example, the offset data is obtained by compressing “10, 11, 12” by the offset compression process. When this is represented by a bit string, the bit string (00000000 0111) in which the 10th, 11th, and 12th bits are set to 1. It becomes. When “129” which is an offset is added to this, if this is represented by a bit string, 116 0s exist between “12” and “129”. When the 116 0 bits are subjected to Run Length compression, the number of compressions is 1, the compression position and the number of compression bits are “13,115”, and the bit string of the code part is (00000000 011001). As another example, it is assumed that there is offset data in which numerals “11, 12, 13,..., 98, 99, 100” are continuous, and a new offset 101 is added thereto. This data is subjected to Run Length compression, the compression position and the number of compression bits are “11,89”, and the code part is (00000000 001). When offset 101 is added to this, since it is larger by 1 than the last numerical value, if only the compression bit number is updated and the compression position and the compression bit number are “11, 90”, the offset 101 is added. It becomes.
図23は、図22のオフセットデータ圧縮処理S863を説明するフローチャートである。 FIG. 23 is a flowchart for explaining the offset data compression processing S863 in FIG.
オフセットデータ圧縮処理S863では、入力としてオフセットデータを受ける。このオフセットデータに対して、圧縮可能な部分を探索し、Run Length圧縮を行っていく。まず、オフセットデータのコード長記憶部、圧縮回数記憶部をそれぞれ参照し、コード部のビット数Nと圧縮位置および圧縮ビット数記憶部の個数Mを得る(ステップS1051、ステップS1052)。次に、Mが0よりも大きいかどうかの判定を行う(ステップS1055)。Mが0よりも大きい場合、オフセットデータに対して圧縮が行われているため、すでに圧縮が行われている部分をスキップするため、i=P[M]+1とし(ステップS1056)、圧縮が行われた末尾のビットの次のビットから圧縮可能な部分の探索を始める。Mが0以下である場合、オフセットデータに対して圧縮が行われていないため、i=1とし、コード部の先頭のビットから圧縮可能な部分の探索を始める(ステップS1057)。圧縮可能な部分の探索には、iを1ずつ増加させながら(ステップS1058)、X[i]とX[i−1]の比較を行うことで(ステップS1059)、0もしくは1のビットが連続しているかどうかを判定し、連続していれば、counterを1ずつ増加することで、連続した数を数え上げていく(ステップS1060)。X[i]とX[i−1]が異なる場合、0もしくは1のビットの連続が途切れたとみなし、連続したビットの数を示すcounterがしきい値Kを超えるかどうかにより(ステップS1068)、これを圧縮するかどうかの判定を行う。counterがK以上であれば、圧縮処理を行う。圧縮処理では、まず、圧縮回数を示すMを1増加させる(ステップS1069)。次に、圧縮ビット数を示すS[M]をcounterとする(ステップS1070)。続いて、圧縮位置を示すP[M]は、iから1を引き、さらにcounter を引いた値とする(ステップS1071)。次に、圧縮したビット数の分だけビットを前に詰める処理を行う(ステップS1073〜ステップS1076)。さらに、コード部の有効なビットの長さを示すNも圧縮にあわせてcounterだけ減らす(ステップS1077)。最後に、現在チェックしているビットの位置を示すiをi=P[M]+1とし、圧縮が行われたビットの次のビットの位置とする(ステップS1078)。 In the offset data compression process S863, offset data is received as an input. The offset data is searched for a compressible portion, and Run Length compression is performed. First, the code length storage unit and the compression count storage unit of the offset data are respectively referred to, and the bit number N of the code unit, the compression position, and the number M of the compression bit number storage units are obtained (steps S1051 and S1052). Next, it is determined whether M is larger than 0 (step S1055). When M is larger than 0, since the offset data is compressed, i = P [M] +1 is set in order to skip the already compressed portion (step S1056), and the compression is performed. The search for the compressible part is started from the bit following the last bit. If M is equal to or less than 0, since the offset data is not compressed, i = 1 is set, and a search for a compressible portion is started from the first bit of the code portion (step S1057). In the search for a compressible portion, i is incremented by 1 (step S1058), and X [i] and X [i-1] are compared (step S1059), so that 0 or 1 bits are consecutive. If it is continuous, the counter is incremented by 1 to count up the continuous number (step S1060). If X [i] and X [i-1] are different, it is considered that the continuation of 0 or 1 bits is interrupted, and whether or not the counter indicating the number of consecutive bits exceeds the threshold value K (step S1068). It is determined whether or not to compress this. If counter is equal to or greater than K, compression processing is performed. In the compression process, first, M indicating the number of compressions is incremented by 1 (step S1069). Next, S [M] indicating the number of compressed bits is set as a counter (step S1070). Subsequently, P [M] indicating the compression position is a value obtained by subtracting 1 from i and further subtracting counter (step S1071). Next, processing is performed to prepend bits by the number of compressed bits (steps S1073 to S1076). Further, N indicating the effective bit length of the code part is also reduced by the counter in accordance with the compression (step S1077). Finally, i indicating the position of the currently checked bit is set to i = P [M] +1 and is set to the position of the bit next to the compressed bit (step S1078).
一方、0もしくは1のビットが連続したまま、すべてのコード部のビットの末尾まで到達した場合にも、その連続した数がしきい値Kを超えて入れば、圧縮処理を行う(ステップS1062)。この圧縮処理では、まず、圧縮回数を示すMを1増加させ(ステップS1063)、圧縮ビット数を示すS[M]をcounterとするが(ステップS1064)、圧縮位置を示すP[M]は、iからcounterを引いた値とする(ステップS1065)。次に、コード部の有効なビットの長さを示すNも圧縮に合わせてcounterだけ減らす(ステップS1066)。最後に、N,M,P,S,Xをそれぞれオフセットデータのコード長記憶部、圧縮回数記憶部、圧縮位置および圧縮ビット数記憶部、コード部に反映し、オフセットデータを更新する(ステップS1067)。更新したオフセットデータを出力して、圧縮処理を終了する。 On the other hand, even when the 0 or 1 bit continues and reaches the end of the bits of all code parts, if the consecutive number exceeds the threshold value K, compression processing is performed (step S1062). . In this compression processing, first, M indicating the number of compressions is incremented by 1 (step S1063), and S [M] indicating the number of compression bits is used as a counter (step S1064), but P [M] indicating the compression position is A value obtained by subtracting counter from i is set (step S1065). Next, N indicating the effective bit length of the code part is also reduced by the counter in accordance with the compression (step S1066). Finally, N, M, P, S, and X are respectively reflected in the offset data code length storage unit, compression count storage unit, compression position and compression bit number storage unit, and code unit to update the offset data (step S1067). ). The updated offset data is output and the compression process is terminated.
例として、図22で示したオフセットデータ更新処理S716”において、オフセットデータXが“10,11,12”の数値列をオフセットデータ圧縮処理によって圧縮したもの、追加するオフセットYが129、しきい値Kが32である場合を考える。オフセットデータXはコード長N=12、圧縮回数M=0、コード部が(000000000111)となったデータである。M=0であり、圧縮位置および圧縮ビット数記憶部は存在しないため、P[1]=0、S[1]=0とする。このため、Sum_SおよびLast_Pも0となる。Yは129であり、これはLast_Pに1加えたものと等しくないため、オフセットデータXのコード部の129番目のビットを1にし、間のビットは0で埋める。Nも同様に129とし、オフセットデータXを更新する。次に、更新したオフセットデータXを入力として、図23に示すオフセットデータ圧縮処理S863を行う。
As an example, in the offset data update process S716 "shown in FIG. 22, a numerical string whose offset data X is" 10, 11, 12 "is compressed by the offset data compression process, the offset Y to be added is 129, and the threshold value Consider the case where K is 32. The offset data X is data in which the code length N = 12, the number of compressions M = 0, and the code part is (000000000111), where M = 0, the compression position and the number of compression bits. Since there is no storage unit, P [1] = 0 and S [1] = 0, so that Sum_S and Last_P are also 0. Y is 129, which is equal to
オフセットデータ圧縮処理S863では、まず、コード長記憶部、圧縮回数記憶部を参照し、コード長N=129,圧縮回数M=0を得る。また、M=0であり、圧縮位置および圧縮ビット数記憶部が存在しないため、P[1]=0、S[1]=0とする。コード部を読み込み、これをX[1...129]とする。M=0であるので、i=1とし、Xの先頭ビットから同じビットが連続しているかどうかのチェックを行う。Xは、(000000000111000・・・0001)であるので、最初の9ビットは0が連続している。しかし、9個の連続ビットでは、counterは8となり、しきい値Kの32を超えないため、圧縮は行われない。続く(111)についても同様に3ビットのみの連続で、counterは2となり、しきい値Kよりも小さいため、圧縮を行わない。続く0は116ビット連続しており、counterは115となり、しきい値Kよりも大きいため、圧縮を行う。まず、圧縮回数であるMを1増加させ、M=1とする。次に、S[M]にcounterの値を代入し、S[M]=115とする。また、P[M]については、i=129から1とcounter=115を引いた値となり、13となる。続いて、圧縮したビットの数だけ、圧縮した位置よりも後方のビットを前に詰める処理を行う。その後、コード長N=129から圧縮した分であるcounter=115だけ減らし、N=14とする。最後に、次にチェックするビットの位置であるiを圧縮したビットの次の位置であるP[M]+1=14とし、counterを0にセットしてループへ戻る。この時点で、iはNよりも小さくなくなったので、ループを抜け、コード長N=14、圧縮回数M=1、圧縮位置P[1]=13、圧縮ビット数S[1]=115、X=(00000000011101)をオフセットデータに反映させてこれを更新し、出力して処理を終了し、図22のオフセットデータ更新処理S716”に戻る。 In the offset data compression processing S863, first, the code length storage unit and the compression count storage unit are referred to, and the code length N = 129 and the compression count M = 0 are obtained. Since M = 0 and there is no compression position and compression bit number storage unit, P [1] = 0 and S [1] = 0. Read the code part and replace it with X [1. . . 129]. Since M = 0, i = 1 is set, and it is checked whether the same bits are consecutive from the first bit of X. Since X is (000000000111000... 0001), 0s are consecutive in the first 9 bits. However, with 9 consecutive bits, the counter is 8, and the threshold value K of 32 is not exceeded, so compression is not performed. Similarly, the following (111) is also continuous with only 3 bits, and the counter is 2, which is smaller than the threshold value K, so that compression is not performed. The following 0 is 116 bits continuous, and the counter is 115, which is larger than the threshold value K, so compression is performed. First, M, which is the number of compressions, is increased by 1, and M = 1. Next, the value of counter is substituted into S [M], and S [M] = 115. P [M] is 13 which is obtained by subtracting 1 and counter = 115 from i = 129. Subsequently, a process is performed in which the bits behind the compressed position are prepended by the number of compressed bits. Thereafter, the code length N = 129 is reduced by counter = 115, which is the amount compressed, and N = 14. Finally, i, which is the position of the next bit to be checked, is set to P [M] + 1 = 14, which is the next position of the compressed bit, counter is set to 0, and the process returns to the loop. At this time, since i is no smaller than N, the loop exits, the code length N = 14, the number of compressions M = 1, the compression position P [1] = 13, the number of compression bits S [1] = 115, X = (00000000011101) is reflected in the offset data and updated, and the process ends, and the process returns to the offset data update process S716 ″ of FIG.
ここで、得られたオフセットデータZがあらかじめ決められたオフセットデータの固定長であるWを超えるかどうかを判定し、越えなければ、オフセットデータ更新を終了する。もし、越えてしまうのであれば、オフセットYは格納不可だったとして、その旨を出力する。その際、オフセットデータ更新は行われず、更新前のオフセットデータのままとする。 Here, it is determined whether or not the obtained offset data Z exceeds W, which is a predetermined fixed length of offset data. If not, offset data updating is terminated. If it exceeds, it is determined that the offset Y cannot be stored, and a message to that effect is output. At that time, the offset data is not updated, and the offset data before the update is left as it is.
図24は実施形態3のデータ蓄積装置におけるキー値による完全一致検索処理を説明するフローチャートである。 FIG. 24 is a flowchart for explaining complete match search processing using key values in the data storage apparatus of the third embodiment.
完全一致検索処理では、図6で説明した実施形態1の完全一致検索処理と同様の処理を行っていくが、図6のオフセットデータ参照処理S916がオフセットデータ参照処理S916”となる。 In the exact match search process, the same process as the complete match search process of the first embodiment described with reference to FIG. 6 is performed, but the offset data reference process S916 in FIG. 6 becomes the offset data reference process S916 ″.
図25は、図24のオフセットデータ参照処理S916”を説明するフローチャートである。 FIG. 25 is a flowchart for explaining the offset data reference process S916 ″ of FIG.
オフセットデータ参照処理では、入力としてオフセットデータを受ける。まず、オフセットデータの圧縮回数記憶部を参照し、圧縮位置および圧縮ビット数記憶部の個数Mを得る(ステップS960)。続いて、M個の圧縮位置および圧縮ビット数記憶部を読み込み、圧縮位置P[1..M]と、圧縮ビット数S[1..M]を得る(ステップS961)。次に、オフセットデータのコード長記憶部を参照し、コード長Nを得(ステップS962)、オフセットデータのコード部の各ビットをX[1..N]に記憶する(ステップS963)。次に、オフセットを整数列として一時的に記憶する領域を用意して、これをFとする(ステップS964)。iをビット位置を示すカウンタ、jを圧縮位置および圧縮ビット数記憶部の位置を示すカウンタ、skipを圧縮したビット数の合計として、処理を進めていく(ステップS965)。まず、P[j]をiと比較し、X[i]が圧縮されたビットかどうかの確認を行う(ステップS966)。X[i]が圧縮されたビットでなければ、そのビットが0か1かを確認する(ステップS973)。もし1であれば、それが示すオフセットをiとskipを足し合わせることで求め(ステップS974)、これをFに記憶する(ステップS975)。もし0であれば(ステップS973)、これはオフセットを示さないので計算を行わない。この後、iとNを比較し(ステップS971)、iがNよりも小さければ、iを1増やし(ステップS972)、iとP[j]の比較へ戻る。iがN以上であれば、Fを出力して終了する。 In the offset data reference process, offset data is received as an input. First, the number M of compression position and compression bit number storage units is obtained by referring to the compression number storage unit of offset data (step S960). Subsequently, the M compressed positions and the compressed bit number storage unit are read, and the compressed positions P [1. . M] and the number of compression bits S [1. . M] is obtained (step S961). Next, the code length storage unit of the offset data is referred to obtain the code length N (step S962), and each bit of the code unit of the offset data is set to X [1. . N] (step S963). Next, an area for temporarily storing the offset as an integer string is prepared, and this is set as F (step S964). The process proceeds with i being a counter indicating the bit position, j being a counter indicating the compressed position and the position of the compressed bit number storage unit, and skip being the total number of compressed bits (step S965). First, P [j] is compared with i to check whether X [i] is a compressed bit (step S966). If X [i] is not a compressed bit, it is confirmed whether the bit is 0 or 1 (step S973). If it is 1, the offset indicated by it is obtained by adding i and skip (step S974), and this is stored in F (step S975). If it is 0 (step S973), this does not indicate an offset and no calculation is performed. Thereafter, i and N are compared (step S971). If i is smaller than N, i is increased by 1 (step S972), and the process returns to the comparison between i and P [j]. If i is greater than or equal to N, F is output and the process ends.
X[i]が圧縮されたビットである場合も同様に、そのビットが0か1かを確認する(ステップS967)。もし、1であれば、X[i]が示すオフセットすべてを求めるため、counter=0とし(ステップS976)、offset=i+skip+counterとして、オフセットを計算し(ステップS977)、Fに記憶する(ステップS978)。これを、counterがS[j]と等しくなるまで、1ずつ増加させて繰り返すことで(ステップS979、ステップS980)、X[i]が示す全てのオフセットをFに記憶する。その後、skipにS[i]を加算してskipを更新する(ステップS968)。X[i]が0の場合は、オフセットの計算および記憶は行わず、skipの更新のみを行う(ステップS968)。skipの更新を行ったら、jとMを比較し(ステップS969)、jがMよりも小さければjを1増やす(ステップS970)。その後、先のiとNの比較に移り(ステップS971)、同様の処理を行う。 Similarly, when X [i] is a compressed bit, it is confirmed whether the bit is 0 or 1 (step S967). If it is 1, in order to obtain all offsets indicated by X [i], counter = 0 is set (step S976), offset is calculated as offset = i + skip + counter (step S977), and stored in F (step S978). . This is repeated by incrementing by 1 until the counter becomes equal to S [j] (steps S979 and S980), and all offsets indicated by X [i] are stored in F. Thereafter, S [i] is added to skip to update skip (step S968). If X [i] is 0, the offset is not calculated and stored, and only the skip is updated (step S968). When skip is updated, j and M are compared (step S969). If j is smaller than M, j is incremented by 1 (step S970). Thereafter, the process proceeds to the comparison of i and N (step S971), and the same processing is performed.
例として、図25で示したオフセットデータ参照処理S916”において、入力するオフセットデータを先の図22で示したオフセットデータ更新処理S716”によって圧縮した“10,11,12,129”とした場合を考える。このとき、M=1,P[1]=13,S[1]=115,N=14,X=(00000000011101)となる。 As an example, in the offset data reference process S916 "shown in FIG. 25, the input offset data is" 10, 11, 12, 129 "compressed by the offset data update process S716" shown in FIG. Think. At this time, M = 1, P [1] = 13, S [1] = 115, N = 14, and X = (00000000011101).
i=1からi=9では、P[1]=13,かつX[i]=0となるため、オフセット整数列のFは更新されない。i=10,11,12では、X[i]=1であるので、offsetを計算しFに記憶し、F=“10,11,12”となる。i=13のときi=P[1]=13であるため、X[13]が圧縮されたビットであることがわかる。このとき、X[13]=0なので、skipの更新のみを行い、skip=115となる。j=1,M=1であるので、jは更新せず、iのみ1増加させi=14とする。X[14]=1であるので、offsetをoffset=i+skipと計算し、offset=129を得、Fを更新し、F=“10,11,12,129”となる。i=N=14となったため、Fを出力し、これでオフセットデータ参照処理を終了する。 When i = 1 to i = 9, P [1] = 13 and X [i] = 0, so that F in the offset integer string is not updated. When i = 10, 11, 12 and X [i] = 1, offset is calculated and stored in F, and F = “10, 11, 12”. Since i = P [1] = 13 when i = 13, it can be seen that X [13] is a compressed bit. At this time, since X [13] = 0, only the update of skip is performed, and skip = 115. Since j = 1 and M = 1, j is not updated, only i is incremented by 1, and i = 14. Since X [14] = 1, offset is calculated as offset = i + skip, offset = 129 is obtained, F is updated, and F = “10, 11, 12, 129”. Since i = N = 14, F is output, and the offset data reference processing is completed.
図26及び図27は実施形態3のデータ蓄積装置におけるキー値による範囲検索処理を説明するフローチャートである。 26 and 27 are flowcharts for explaining range search processing based on key values in the data storage apparatus according to the third embodiment.
範囲検索処理は、図8及び図9で示した実施形態1の範囲検索処理と同様の処理を行っていくが、オフセットデータ参照処理S1104が図25で説明したオフセットデータ参照処理S916”となる点が異なる。 The range search process is the same as the range search process of the first embodiment shown in FIGS. 8 and 9, except that the offset data reference process S1104 becomes the offset data reference process S916 ″ described in FIG. Is different.
実施形態3のデータ蓄積装置は、データ到着遅延が連続して発生するようなデータに特化した方法を採用している。データソース側の回線切断などにより、出力バッファに溜まったデータが回線復旧後にまとめて送られてくる場合など、大きなオフセットの値が連続して続く場合に効率的にオフセットを表現することができる。実施例で挙げた例では、オフセットとして、“10,11,12,129”を格納するが、従来の方法では、129ビットが必要になるのと比べ、実施形態3では、コード長記憶部のサイズH1を16ビット、圧縮回数記憶部のサイズH2を8ビット、圧縮位置及び圧縮ビット数記憶部のサイズH3を32ビットとすると、コード部は14ビットのため、合計70ビットで格納することができる。 The data storage device according to the third embodiment employs a method specialized for data such that data arrival delays occur continuously. An offset can be efficiently expressed when a large offset value continues continuously, such as when data accumulated in the output buffer is sent together after the line is restored due to line disconnection on the data source side or the like. In the example given in the embodiment, “10, 11, 12, 129” is stored as an offset, but in the third embodiment, 129 bits are required in the conventional method. If the size H1 is 16 bits, the compression count storage unit size H2 is 8 bits, and the compression position and compression bit number storage unit size H3 is 32 bits, the code part is 14 bits, so it can be stored in a total of 70 bits. it can.
(圧縮の効果)
次に、本発明の各圧縮方法によるビット効率向上の例をグラフで示す。以下の例では、Simple9のオフセットデータにおけるヘッダ部の大きさを32ビット、Run Length圧縮のオフセットデータにおけるコード長記憶部の大きさを16ビット、圧縮回数記憶部の大きさを8ビット、圧縮位置および圧縮ビット数記憶部のサイズを32ビットとして計算を行っている。
(Compression effect)
Next, an example of improving bit efficiency by each compression method of the present invention is shown in a graph. In the following example, the size of the header portion in the offset data of
図28は、あるオフセット数をオフセットデータに格納する場合に、必要となるビット数の圧縮方法による違いを示すグラフである。従来の方式であるBitmapと、本実施形態の各方式であるVariable Byte Code、Simple9、Run Length圧縮について比較を行っている。横軸は表現するオフセット数、縦軸は横軸に対応するオフセット数を格納するために必要なビット数を、それぞれ対数軸で表している。グラフより、本実施形態の各方式は、従来の方式であるBitmapに比べて、必要となるビット数の増加が、オフセット数の増加に対して、よりゆるやかであることが確認できる。 FIG. 28 is a graph showing the difference in the required number of bits depending on the compression method when a certain number of offsets is stored in the offset data. A comparison is made between Bitmap, which is a conventional method, and Variable Byte Code, Simple9, and Run Length compression, which are each method of this embodiment. The horizontal axis represents the number of offsets to be expressed, and the vertical axis represents the number of bits necessary to store the number of offsets corresponding to the horizontal axis on the logarithmic axis. From the graph, it can be confirmed that each method of the present embodiment has a more gradual increase in the required number of bits with respect to the increase in the number of offsets than the conventional Bitmap.
図29はある範囲で連続しているオフセット数をオフセットデータに格納する場合に、必要なビット数の圧縮方法による違いを示すグラフである。従来の方式であるBitmapと、本実施形態の各方式であるVariable Byte Code、Simple9、Run Length圧縮について比較を行っている。横軸は連続したオフセット数の範囲を示しており、“1−10”は“1,2,3,4,5,6,7,8,9,10”のオフセット数値列を表している。縦軸は横軸で示されたオフセット数値列をオフセットデータに格納するために必要となるビット数を対数軸で示している。グラフより、オフセット数が連続して並ぶ場合、従来の方法であるBitmapのビット効率が良いことがわかるが、Run Lengthは“1−70”以上の場合にBitmapを超えるビット効率を持つことがわかる。 FIG. 29 is a graph showing the difference in the required number of bits depending on the compression method when the number of offsets continuous in a certain range is stored in the offset data. A comparison is made between Bitmap, which is a conventional method, and Variable Byte Code, Simple9, and Run Length compression, which are each method of this embodiment. The horizontal axis indicates a range of consecutive offset numbers, and “1-10” represents an offset numerical value sequence of “1, 2, 3, 4, 5, 6, 7, 8, 9, 10”. The vertical axis indicates the number of bits necessary for storing the offset numerical value sequence indicated by the horizontal axis in the offset data, on the logarithmic axis. From the graph, it can be seen that the bit efficiency of Bitmap, which is the conventional method, is good when the number of offsets is continuously arranged, but that Run Length has a bit efficiency exceeding Bitmap when “1-70” or more. .
図30は、1から10の連続したオフセット数値列に加えて、100、200、300、400、500、600、700、800のいずれかのオフセット数をオフセットデータとして格納する場合に、必要となるビット数の圧縮方法による違いを示すグラフである。従来の方式であるBitmapと、本実施形態の各方式であるVariable Byte Code、Simple9、Run Length圧縮について比較を行っている。横軸は加えて格納するオフセット数を示し、縦軸は横軸で示されたオフセット数を加えた場合に、これをオフセットデータとして格納するために必要となるビット数を示している。グラフより、従来の方法であるBitmapでは、必要となるビット数が追加して格納するオフセット数の大きさに対応して線形に増加していることに対して、本実施形態の各方式ではほぼ必要となるビット数に変化がなく、高いビット効率でオフセット数を格納できていることがわかる。 FIG. 30 is necessary when the offset number of any one of 100, 200, 300, 400, 500, 600, 700, and 800 is stored as offset data in addition to the continuous offset numerical value sequence from 1 to 10. It is a graph which shows the difference by the compression method of bit number. A comparison is made between Bitmap, which is a conventional method, and Variable Byte Code, Simple9, and Run Length compression, which are each method of this embodiment. In addition, the horizontal axis indicates the number of offsets to be stored, and the vertical axis indicates the number of bits required to store this as offset data when the number of offsets indicated by the horizontal axis is added. From the graph, in the Bitmap which is the conventional method, the required number of bits increases linearly according to the size of the offset number to be stored additionally, whereas in each method of this embodiment, it is almost It can be seen that there is no change in the required number of bits and that the number of offsets can be stored with high bit efficiency.
図31は1から64の連続したオフセット数値列に加えて、100、200、300、400、500、600、700、800のいずれかのオフセット数をオフセットデータとして格納する場合に、必要となるビット数の圧縮方法による違いを示すグラフである。従来の方式であるBitmapと、本実施形態の各方式であるVariable Byte Code、Simple9、Run Length圧縮について比較を行っている。横軸は加えて格納するオフセット数を示し、縦軸は横軸で示されたオフセット数を加えた場合に、これをオフセットデータとして格納するために必要となるビット数を示している。グラフより、従来の方法であるBitmapでは、必要となるビット数が追加して格納するオフセット数の大きさに対応して線形に増加していることに対して、本実施形態の各方式では必要となるビット数にほぼ変化がなく、特に、Run Length圧縮がどのようなオフセット数値列を加えた場合でも、Bitmap以上のビット効率を持つことがわかる。 FIG. 31 shows bits required when offset numbers of any one of 100, 200, 300, 400, 500, 600, 700, and 800 are stored as offset data in addition to 1 to 64 consecutive offset numerical sequences. It is a graph which shows the difference by the compression method of a number. A comparison is made between Bitmap, which is a conventional method, and Variable Byte Code, Simple9, and Run Length compression, which are each method of this embodiment. In addition, the horizontal axis indicates the number of offsets to be stored, and the vertical axis indicates the number of bits required to store this as offset data when the number of offsets indicated by the horizontal axis is added. From the graph, in the conventional method Bitmap, the required number of bits increases linearly corresponding to the size of the offset number to be stored additionally, whereas in each system of this embodiment, it is necessary. It can be seen that there is almost no change in the number of bits, and in particular, whatever length numerical value sequence is added to Run Length compression, the bit efficiency is equal to or higher than Bitmap.
(他の実施形態)
上述した各データ蓄積装置はコンピュータとプログラムによっても実現できる。上述した各データ蓄積装置の動作をコンピュータで実行可能なプログラムとし、これをコンピュータが読み取り可能な記録媒体に記録することも、ネットワークを通してコンピュータに提供することも可能である。
(Other embodiments)
Each data storage device described above can also be realized by a computer and a program. The operation of each data storage device described above can be a computer-executable program, which can be recorded on a computer-readable recording medium or provided to the computer via a network.
10:データ蓄積装置
110:インタフェース
120:バッファメモリ
300:システム制御部
301:入力データ解析部
302:メモリ管理部
303:ファイル操作部
304:オフセット圧縮部
330:二次記憶装置
331:索引ファイル
332:データファイル
333、333’、333”:オフセットファイル
10: Data storage device 110: Interface 120: Buffer memory 300: System control unit 301: Input data analysis unit 302: Memory management unit 303: File operation unit 304: Offset compression unit 330: Secondary storage device 331: Index file 332: Data file 333, 333 ', 333 ": offset file
Claims (3)
前記レコードの特定の値をキー値としてスパースインデックス(sparse index)による索引付けを行い、一の論理ブロックが受け持つキー値の範囲に含まれる前記キー値を持つ前記レコードが他の論理ブロックにある場合には、前記一の論理ブロックから前記他の論理ブロックへのオフセット数をビット列で表現して圧縮したオフセットデータをオフセットファイルとして前記二次記憶装置に記録させるシステム制御手段と、
を備え、
前記システム制御手段は、
前記オフセットデータを、コード長記憶部、圧縮回数記憶部、圧縮位置及び圧縮ビット数記憶部からなるヘッダ部、並びにコード部で構成し、
前記コード部において、前記オフセット数と等しいビット位置のビットを「1」とし、
前記コード部のビット列が予め設定したしきい値以上同一のビットが連続する連続ビット部を含む場合に、前記連続ビット部のビット数を数え上げ、前記連続ビット部の先頭の位置及び前記連続ビット部のビット数をそれぞれ前記圧縮位置及び圧縮ビット数記憶部に記録し、
前記連続ビット部の先頭のビットを残して前記連続ビット部の他のビットを削除し、
ビット削除後の前記コード部で利用されているビット数を前記コード長記憶部に記録し、
前記圧縮位置及び圧縮ビット数記憶部の個数を前記圧縮回数記憶部に記録する
オフセット圧縮部を有することを特徴とするデータ蓄積装置。 A secondary storage device that sequentially stores data continuously input in units of records, in units of logical blocks;
When a specific value of the record is used as a key value and indexing is performed using a sparse index, and the record having the key value included in the range of key values handled by one logical block is in another logical block Includes a system control unit that records the offset number of the offset from the one logical block to the other logical block as a bit string, and records the compressed offset data as an offset file in the secondary storage device;
Equipped with a,
The system control means includes
The offset data is composed of a code length storage unit, a compression number storage unit, a header unit consisting of a compression position and a compression bit number storage unit, and a code unit,
In the code part, the bit at the bit position equal to the offset number is set to “1”,
When the bit string of the code part includes a continuous bit part in which the same bit is continuous over a preset threshold value, the number of bits of the continuous bit part is counted, and the leading position of the continuous bit part and the continuous bit part Are recorded in the compressed position and the compressed bit number storage unit,
Deleting the other bits of the continuous bit part leaving the first bit of the continuous bit part,
Record the number of bits used in the code part after bit deletion in the code length storage part,
Record the compression position and the number of compressed bit number storage units in the compression count storage unit
A data storage device comprising an offset compression unit .
前記レコードの特定の値をキー値としてスパースインデックス(sparse index)による索引付けを行い、一の論理ブロックが受け持つキー値の範囲に含まれる前記キー値を持つ前記レコードが他の論理ブロックにある場合には、前記一の論理ブロックから前記他の論理ブロックへのオフセット数をビット列で表現して圧縮したオフセットデータをオフセットファイルとして前記二次記憶装置に記録させるシステム制御手順を行い、
前記システム制御手順では、
前記オフセットデータを、コード長記憶部、圧縮回数記憶部、圧縮位置及び圧縮ビット数記憶部からなるヘッダ部、並びにコード部で構成し、
前記コード部において、前記オフセット数と等しいビット位置のビットを「1」とし、
前記コード部のビット列が予め設定したしきい値以上同一のビットが連続する連続ビット部を含む場合に、前記連続ビット部のビット数を数え上げ、前記連続ビット部の先頭の位置及び前記連続ビット部のビット数をそれぞれ前記圧縮位置及び圧縮ビット数記憶部に記録し、
前記連続ビット部の先頭のビットを残して前記連続ビット部の他のビットを削除し、
ビット削除後の前記コード部で利用されているビット数を前記コード長記憶部に記録し、
前記圧縮位置及び圧縮ビット数記憶部の個数を前記圧縮回数記憶部に記録する
ことを特徴とするデータ蓄積方法。 When sequentially storing data that is continuously input in units of records in a secondary storage device in units of logical blocks,
When a specific value of the record is used as a key value and indexing is performed using a sparse index, and the record having the key value included in the range of key values handled by one logical block is in another logical block the, have row system control procedure for recording in the secondary storage device the offset data compressed to express offset number to said separate logical blocks in the bit string from said one logical blocks as an offset file,
In the system control procedure,
The offset data is composed of a code length storage unit, a compression number storage unit, a header unit consisting of a compression position and a compression bit number storage unit, and a code unit,
In the code part, the bit at the bit position equal to the offset number is set to “1”,
When the bit string of the code part includes a continuous bit part in which the same bit is continuous over a preset threshold value, the number of bits of the continuous bit part is counted, and the leading position of the continuous bit part and the continuous bit part Are recorded in the compressed position and the compressed bit number storage unit,
Deleting the other bits of the continuous bit part leaving the first bit of the continuous bit part,
Record the number of bits used in the code part after bit deletion in the code length storage part,
Record the compression position and the number of compressed bit number storage units in the compression count storage unit
A data storage method characterized by the above .
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011142884A JP5639011B2 (en) | 2011-06-28 | 2011-06-28 | Data storage device, data storage method, and program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011142884A JP5639011B2 (en) | 2011-06-28 | 2011-06-28 | Data storage device, data storage method, and program |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013011946A JP2013011946A (en) | 2013-01-17 |
JP5639011B2 true JP5639011B2 (en) | 2014-12-10 |
Family
ID=47685795
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011142884A Expired - Fee Related JP5639011B2 (en) | 2011-06-28 | 2011-06-28 | Data storage device, data storage method, and program |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5639011B2 (en) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101575015B1 (en) * | 2013-07-01 | 2015-12-07 | (주) 솔텍시스템 | Apparatus, method and computer readable recording medium for compressing time series processing data |
WO2016132430A1 (en) | 2015-02-16 | 2016-08-25 | 三菱電機株式会社 | Data compression apparatus, data decompression apparatus, data compression method, data decompression method, and program |
CN111566627B (en) * | 2017-11-09 | 2023-07-21 | 日本电信电话株式会社 | Information accumulation device, data processing system, and recording medium |
CN112784271B (en) * | 2021-01-21 | 2022-07-22 | 国网河南省电力公司电力科学研究院 | Reverse analysis method for control software of power engineering control system |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007088962A (en) * | 2005-09-26 | 2007-04-05 | Nippon Telegr & Teleph Corp <Ntt> | Ordinal data compressing method, ordinal data decompressing method, ordinal data processing program, ordinal data compressing apparatus, ordinal data decompressing apparatus, and ordinal data processing system |
-
2011
- 2011-06-28 JP JP2011142884A patent/JP5639011B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2013011946A (en) | 2013-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5639011B2 (en) | Data storage device, data storage method, and program | |
US10359939B2 (en) | Data object processing method and apparatus | |
US9405790B2 (en) | System, method and data structure for fast loading, storing and access to huge data sets in real time | |
CN110299187B (en) | Parallelization gene data compression method based on Hadoop | |
US8543555B2 (en) | Dictionary for data deduplication | |
US10977315B2 (en) | System and method for statistics-based pattern searching of compressed data and encrypted data | |
CN101894115B (en) | Image data processing method of electronic document and device thereof | |
CN101620617B (en) | Method and device for searching and processing log file | |
WO2013163813A1 (en) | Data deduplication method and device | |
JP2011523152A (en) | Search index format optimization | |
CN102782643A (en) | Index searching using a bloom filter | |
EP2821924A1 (en) | Method, device and system for querying data index | |
US7430509B2 (en) | Lattice encoding | |
WO2009097710A1 (en) | Method for organizing and retrieving files, module and system for organizing files and storage media thereof | |
CA2770348A1 (en) | Compression of bitmaps and values | |
CN108780455A (en) | A kind of compressed index method and device of character string sequence | |
CN111078652A (en) | Filing and compressing method and device for logistics box codes | |
JP6252489B2 (en) | Compression device, compression method, compression program, decompression device, decompression method, decompression program, and compression / decompression system | |
WO2014030180A1 (en) | Storage program, storage method, storage device, decompression program, decompression method, and decompression device | |
CN111061428B (en) | Data compression method and device | |
KR20180014124A (en) | Information processing apparatus, and data management method | |
JP6032291B2 (en) | Compression program, compression apparatus, decompression program, decompression apparatus, and system | |
CN107026652B (en) | Partition-based positive integer sequence compression method | |
CN109271463A (en) | A method of restoring the innodb compressed data of MySQL database | |
CN106708831B (en) | FAT (file allocation table) image file processing method and device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20130730 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20140213 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20140225 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20140425 |
|
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: 20141021 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20141023 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5639011 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |