"レコードを最小単位として連続して入力されるデータを、論理ブロックを単位として逐次蓄積する二次記憶装置と、前記レコードの特定の値をキー値としてスパースインデックスsparseindexによる索引付けを行い、一の論理ブロックが受け持つキー値の範囲に含まれる前記キー値を持つ前記レコードが他の論理ブロックにある場合には、前記一の論理ブロックから前記他の論理ブロックへのオフセット数をビット列で表現して圧縮したオフセットデータをオフセットファイルとして前記二次記憶装置に記録させるシステム制御手段と、を備えるデータ蓄積装置。前記システム制御手段は、前記オフセットデータを、コード長記憶部、圧縮回数記憶部、圧縮位置及び圧縮ビット数記憶部、並びにコード部で構成し、前記コード部において、前記オフセット数と等しいビット位置のビットを1とし、前記コード部のビット列が予め設定したしきい値以上同一のビットが連続する連続ビット部を含む場合に、前記連続ビット部のビット数を数え上げ、前記連続ビット部の先頭の位置と前記連続ビット部のビット数を前記圧縮位置及び圧縮ビット数記憶部に記録し、前記連続ビット部の先頭のビットを残して前記連続ビット部の他のビットを削除するオフセット圧縮部を有することを特徴とする請求項1に記載のデータ蓄積装置。前記システム制御手段は、一の論理ブロックが受け持つ前記キー値の範囲に含まれる前記キー値を持つ前記レコードが他の複数の論理ブロックにある場合、前記一の論理ブロックから前記他の複数の論理ブロックへの前記オフセット数をそれぞれ求め、前記他の複数の論理ブロックのうち最もブロック位置が近い論理ブロック同士について、求めた前記オフセット数からそれぞれの論理ブロックへのオフセット数の差を求め、これを差分オフセット数とし、前記オフセットデータを、ヘッダ部並びにコード部で構成し、前記コード部に、単数の前記オフセット数もしくは複数の前記差分オフセット数を前記オフセット数もしくは前記差分オフセット数に応じたビット数で表現したオフセットビット列、及び前記オフセットビット列のビット数を記載した一定ビット数の符号ヘッダ、で形成される符号を格納し、前記ヘッダ部に、前記符号の個数及び前記オフセット数の個数を表示するオフセット圧縮部を有することを特徴とする請求項1に記載のデータ蓄積装置。前記システム制御手段は、前記オフセットデータを複数のバイトで構成し、前記オフセット数に応じたバイト数で前記オフセット数を表現する際に、前記オフセット数を表現する各バイトの一定数のビットをヘッダとし、前記オフセット数を表現したバイト数を前記ヘッダで表示するオフセット圧縮部を有することを特徴とする請求項1に記載のデータ蓄積装置。レコードを最小単位として連続して入力されるデータを、論理ブロックを単位として二次記憶装置に逐次蓄積する際に、前記レコードの特定の値をキー値としてスパースインデックスsparseindexによる索引付けを行い、一の論理ブロックが受け持つキー値の範囲に含まれる前記キー値を持つ前記レコードが他の論理ブロックにある場合には、前記一の論理ブロックから前記他の論理ブロックへのオフセット数をビット列で表現して圧縮したオフセットデータをオフセットファイルとして前記二次記憶装置に記録させるシステム制御手順を行うデータ蓄積方法。前記システム制御手順は、前記オフセットデータを、コード長記憶部、圧縮回数記憶部、圧縮位置及び圧縮ビット数記憶部、並びにコード部で構成し、前記コード部において、前記オフセット数と等しいビット位置のビットを1とし、前記コード部のビット列が予め設定したしきい値以上同一のビットが連続する連続ビット部を含む場合に、前記連続ビット部のビット数を数え上げ、前記連続ビット部の先頭の位置と前記連続ビット部のビット数を前記圧縮位置及び圧縮ビット数記憶部に記録し、前記連続ビット部の先頭のビットを残して前記連続ビット部の他のビットを削除することを特徴とする請求項5に記載のデータ蓄積方法。前記システム制御手順は、一の論理ブロックが受け持つ前記キー値の範囲に含まれる前記キー値を持つ前記レコードが他の複数の論理ブロックにある場合、前記一の論理ブロックから前記他の複数の論理ブロックへの前記オフセット数をそれぞれ求め、前記他の複数の論理ブロックのうち最もブロック位置が近い論理ブロック同士について、求めた前記オフセット数からそれぞれの論理ブロックへのオフセット数の差を求め、これを差分オフセット数とし、前記オフセットデータを、ヘッダ部並びにコード部で構成し、前記コード部に、単数の前記オフセット数もしくは複数の前記差分オフセット数を前記オフセット数もしくは前記差分オフセット数に応じたビット数で表現したオフセットビット列、及び前記オフセットビット列のビット数を記載した一定ビット数の符号ヘッダ、で形成される符号を格納し、前記ヘッダ部に、前記符号の個数及び前記オフセット数の個数を表示することを特徴とする請求項5に記載のデータ蓄積方法。前記システム制御手順は、前記オフセットデータを複数のバイトで構成し、前記オフセット数に応じたバイト数で前記オフセット数を表現する際に、前記オフセット数を表現する各バイトの一定数のビットをヘッダとし、前記オフセット数を表現したバイト数を前記ヘッダで表示することを特徴とする請求項5に記載のデータ蓄積方法。コンピュータに、請求項5から8のいずれかに記載のデータ蓄積方法の前記システム制御手順を実行させるためのプログラム。従来のデータの順序逆転に高速に対応する方法では、ビットマップを用い、オフセット数に対応したビット番号のビットを1にすることで、オフセット数を表現する方法をとっている。しかし、この場合、連続して発生する小さな遅延を効率的に表現することは可能だが、センサ等データソース側の接続断などにより発生する突発的な大きな遅延に対しては、そのオフセット数と同じ数のビット数という多くのビット数が必要となり、空間効率が悪いという課題があった。そこで、前記課題を解決するために、本発明は、データを二次記憶装置へ蓄積する際に、キー値についてデータの順序がある程度逆転して入力されたとしても逐次書き込みファイルに近い速度を維持することが可能、キー値による完全一致検索が可能、範囲検索による効率的なデータの読み込みが可能、且つ突発的な大きな遅延によりデータ順序が大きく逆転したとしても、これを空間効率良く表現可能なデータ構造を実現できるデータ蓄積装置、データ蓄積方法、及びプログラムを提供することを目的とする。上記課題の解決のため、本発明は、レコードの特定の値をキー値としてsparseindexによる索引付けを行い、一の論理ブロックが受け持つキー値の範囲に含まれるキー値のレコードが他の論理ブロックにある場合には、一の論理ブロックから別の論理ブロックへのオフセット数をビット列で表現して圧縮したオフセットデータをオフセットファイルとして二次記憶装置に記録させることとした。具体的には、本発明に係るデータ蓄積装置は、レコードを最小単位として連続して入力されるデータを、論理ブロックを単位として逐次蓄積する二次記憶装置と、前記レコードの特定の値をキー値としてスパースインデックスsparseindexによる索引付けを行い、一の論理ブロックが受け持つキー値の範囲に含まれる前記キー値を持つ前記レコードが他の論理ブロックにある場合には、前記一の論理ブロックから前記他の論理ブロックへのオフセット数をビット列で表現して圧縮したオフセットデータをオフセットファイルとして前記二次記憶装置に記録させるシステム制御手段と、を備える。具体的には、本発明に係るデータ蓄積方法は、レコードを最小単位として連続して入力されるデータを、論理ブロックを単位として二次記憶装置に逐次蓄積する際に、前記レコードの特定の値をキー値としてスパースインデックスsparseindexによる索引付けを行い、一の論理ブロックが受け持つキー値の範囲に含まれる前記キー値を持つ前記レコードが他の論理ブロックにある場合には、前記一の論理ブロックから前記他の論理ブロックへのオフセット数をビット列で表現して圧縮したオフセットデータをオフセットファイルとして前記二次記憶装置に記録させるシステム制御手順を行う。本発明に係るデータ蓄積装置及びデータ蓄積方法は、sparseindexとオフセットデータを組み合わせているため、順序逆転したデータに対して検索可能となる。さらに、オフセットデータを圧縮することでネットワークの接続断による突発的な大きな遅延をより効率的に表現できる。従って、本発明は、データを二次記憶装置へ蓄積する際に、キー値についてデータの順序がある程度逆転して入力されたとしても逐次書き込みファイルに近い速度を維持することが可能、キー値による完全一致検索が可能、範囲検索による効率的なデータの読み込みが可能、且つ突発的な大きな遅延によりデータ順序が大きく逆転したとしても、これを空間効率良く表現可能なデータ構造を実現できるデータ蓄積装置及びデータ蓄積方法を提供することができる。オフセットデータの圧縮には、以下の3つの手法がある。1RunLength圧縮RunLength圧縮は、ある値が一定以上の個数連続して現れた場合に、これをそのまま表現する代わりに、連続したビットの個数を表して圧縮する手法である。本データ蓄積装置の前記システム制御手段は、前記オフセットデータを、コード長記憶部、圧縮回数記憶部、圧縮位置及び圧縮ビット数記憶部、並びにコード部で構成し、前記コード部において、前記オフセット数と等しいビット位置のビットを1とし、前記コード部のビット列が予め設定したしきい値以上同一のビットが連続する連続ビット部を含む場合に、前記連続ビット部のビット数を数え上げ、前記連続ビット部の先頭の位置と前記連続ビット部のビット数を前記圧縮位置及び圧縮ビット数記憶部に記録し、前記連続ビット部の先頭のビットを残して前記連続ビット部の他のビットを削除するオフセット圧縮部を有することを特徴とする。本データ蓄積方法の前記システム制御手順は、前記オフセットデータを、コード長記憶部、圧縮回数記憶部、圧縮位置及び圧縮ビット数記憶部、並びにコード部で構成し、前記コード部において、前記オフセット数と等しいビット位置のビットを1とし、前記コード部のビット列が予め設定したしきい値以上同一のビットが連続する連続ビット部を含む場合に、前記連続ビット部のビット数を数え上げ、前記連続ビット部の先頭の位置と前記連続ビット部のビット数を前記圧縮位置及び圧縮ビット数記憶部に記録し、前記連続ビット部の先頭のビットを残して前記連続ビット部の他のビットを削除することを特徴とする。本圧縮方法では、ビットマップを用いたオフセット表現方法へ応用するに際して、オフセットデータの構造として、コード長記憶部、圧縮回数記憶部、圧縮位置および圧縮ビット数記憶部、並びにコード部を用意する。このとき、コード部では、前記提案方法と同様にビットマップを用いて、オフセット数と等しいビット番号のビットを1にすることで、オフセット数を表現するが、0もしくは1のビットが、あらかじめ定めた一定数以上連続する場合、これをRunLength圧縮する。このとき、圧縮に際して、圧縮したビットの位置および連続したビットの個数を表現する必要があるが、これを圧縮位置および圧縮ビット数記憶部に格納する。この圧縮位置および圧縮ビット数記憶部は、RunLength圧縮を行った回数分の個数だけ、都度準備する。この圧縮を行った回数は、圧縮回数記憶部に記憶する。また、コード部に格納されたビットマップのサイズをコード長記憶部に格納する。本データ構造を用いることで、ビットマップによる表現を行いつつも、RunLength圧縮可能な場合はこれを行うことにより、より効率的なオフセット表現が可能となる。また、圧縮位置および圧縮ビット数部分をコード部と分離させているため、新たなオフセットの追加が、コード部を参照して全てのオフセットをデコードすることなく行え、効率的なオフセット追加処理が可能となる。2Simple94バイト32ビットを1つの符号として扱い、1つの符号に、できるだけ多くの整数値を詰め込もうとする方法で、整数値の大きさに合わせて、使用するビット数を1~28ビットに変化させる手法である例えば、非特許文献4を参照。。本データ蓄積装置の前記システム制御手段は、一の論理ブロックが受け持つ前記キー値の範囲に含まれる前記キー値を持つ前記レコードが他の複数の論理ブロックにある場合、前記一の論理ブロックから前記他の複数の論理ブロックへの前記オフセット数をそれぞれ求め、前記他の複数の論理ブロックのうち最もブロック位置が近い論理ブロック同士について、求めた前記オフセット数からそれぞれの論理ブロックへのオフセット数の差を求め、これを差分オフセット数とし、前記オフセットデータを、ヘッダ部並びにコード部で構成し、前記コード部に、単数の前記オフセット数もしくは複数の前記差分オフセット数を前記オフセット数もしくは前記差分オフセット数に応じたビット数で表現したオフセットビット列、及び前記オフセットビット列のビット数を記載した一定ビット数の符号ヘッダ、で形成される符号を格納し、前記ヘッダ部に、前記符号の個数及び前記オフセット数の個数を表示するオフセット圧縮部を有することを特徴とする。本データ蓄積方法の前記システム制御手順は、一の論理ブロックが受け持つ前記キー値の範囲に含まれる前記キー値を持つ前記レコードが他の複数の論理ブロックにある場合、前記一の論理ブロックから前記他の複数の論理ブロックへの前記オフセット数をそれぞれ求め、前記他の複数の論理ブロックのうち最もブロック位置が近い論理ブロック同士について、求めた前記オフセット数からそれぞれの論理ブロックへのオフセット数の差を求め、これを差分オフセット数とし、前記オフセットデータを、ヘッダ部並びにコード部で構成し、前記コード部に、単数の前記オフセット数もしくは複数の前記差分オフセット数を前記オフセット数もしくは前記差分オフセット数に応じたビット数で表現したオフセットビット列、及び前記オフセットビット列のビット数を記載した一定ビット数の符号ヘッダ、で形成される符号を格納し、前記ヘッダ部に、前記符号の個数及び前記オフセット数の個数を表示することを特徴とする。本圧縮方法をオフセットデータへ応用するに際して、オフセットデータの構造として、ヘッダ部とコード部を用意する。このとき、コード部はSimple9で圧縮された整数値列を格納し、ヘッダ部はSimple9で圧縮された整数値の個数とSimple9の符号の個数とを格納する。本データ構造を用いることで、Simple9の符号の伸長時に、このヘッダ部のデータを用いることで余分なデータの処理が抑えられ、効率的な処理が可能となる。3VariableByteCode通常4バイトで表す整数値を、整数値の大きさに合わせて使用するバイト数を1~4バイトに変化させる方法である例えば、非特許文献3を参照。。本データ蓄積装置の前記システム制御手段は、前記オフセットデータを複数のバイトで構成し、前記オフセット数に応じたバイト数で前記オフセット数を表現する際に、前記オフセット数を表現する各バイトの一定数のビットをヘッダとし、前記オフセット数を表現したバイト数を前記ヘッダで表示するオフセット圧縮部を有することを特徴とする。本データ蓄積方法の前記システム制御手順は、前記オフセットデータを複数のバイトで構成し、前記オフセット数に応じたバイト数で前記オフセット数を表現する際に、前記オフセット数を表現する各バイトの一定数のビットをヘッダとし、前記オフセット数を表現したバイト数を前記ヘッダで表示することを特徴とする。また、本発明に係るプログラムは、コンピュータに、前記データ蓄積方法の前記システム制御手順を実行させる。本発明は、データを二次記憶装置へ蓄積する際に、キー値についてデータの順序がある程度逆転して入力されたとしても逐次書き込みファイルに近い速度を維持することが可能、キー値による完全一致検索が可能、範囲検索による効率的なデータの読み込みが可能、且つ突発的な大きな遅延によりデータ順序が大きく逆転したとしても、これを空間効率良く表現可能なデータ構造を実現できるデータ蓄積装置、データ蓄積方法、及びプログラムを提供することができる。以下、具体的に実施形態を示して本発明を詳細に説明するが、本願の発明は以下の記載に限定して解釈されない。なお、本明細書及び図面において符号が同じ構成要素は、相互に同一のものを示すものとする。実施形態1実施形態1はオフセット数の表現にVariableByteCodeを用いる形態である。図1は、実施形態1のデータ蓄積装置10の構成を説明する図である。データ蓄積装置10は、システム制御部300、インタフェース110、バッファメモリ120、二次記憶装置330を備える。インタフェース110はバッファメモリ120と、バッファメモリ120はインタフェース110と二次記憶装置330とそれぞれデータのやり取りを行う。システム制御部300は、インタフェース110の入力データについて、それが書き込み要求なのか読み出し要求なのかを解析する。システム制御部300は、バッファメモリ120に対して入出力データをバッファさせるためのメモリ管理を行う。システム制御部300は、二次記憶装置に対してデータ入力におけるファイルへのデータ書き込みなどのファイル操作を行う。二次記憶装置内には索引ファイル331とデータファイル332とオフセットファイル333の3つのファイルが存在する。図2は、データ蓄積装置10のデータ構造を説明する図である。データファイル332の各論理ブロックは入力されたレコードから構成される。オフセットファイル333における各レコードであるオフセットデータは、固定長Wビットのデータである。各オフセットデータは、ファイル上での位置を用いて、データファイルの各論理ブロックに一対一で対応している。オフセットデータは圧縮したオフセット数値列を格納するコード部のみから構成される。オフセット数値列の圧縮はVariableByteCodeを用いて行う。図3及び図4はデータ蓄積装置10におけるデータ追加処理を示すフローチャートである。データ追加処理では、まず入力レコードをバッファメモリ上に蓄積するステップS701。入力レコードが論理ブロックサイズ分だけ蓄積されるまで入力レコードをバッファメモリに蓄積し続けるステップS702。入力レコードがバッファメモリ内に論理ブロックサイズ分だけ蓄積されたならば、バッファメモリ内のレコードをキー値について昇順にソートするステップS703。その後、バッファメモリ内のレコードを、データファイルの末尾に論理ブロック分書き込むステップS704。この書き込んだ論理ブロックをB1とする。また、オフセットデータの初期値として全ビットを0にしたビット列を、オフセットファイルに書き込むステップS705。次に、索引ファイルを参照して索引ファイル内の最大のキー値を探し、その値を今書き込んだ論理ブロックであるB1が扱うキー値の下限値Lとして一時的に記憶するステップS706。その後、書き込んだ論理ブロック内で最大のキー値を持つ末尾のレコードに対して索引を作成し、索引ファイルを更新するステップS707。さらに、バッファメモリ内のレコードを参照しステップS708、先頭のレコードから順にレコードのキー値が下限値L以下となるレコードを探すステップS709。参照したレコードが下限値Lよりも大きい場合、そこで探索を終了し、書き込み処理を終了する。参照したレコードが下限値L以下の場合、索引ファイルを調べそのキー値以上でもっとも値が小さいキー値を探すステップS710。ここで、探索したキー値が指す論理ブロックであるB2がすでに更新済みであればステップS711、その論理ブロックB2の更新処理は取りやめ、バッファメモリ上で次のレコードがあれば、次のレコードを参照し、同様の処理を行うステップS720、ステップS721。なければ、そこで探索終了とし、書き込み処理を終了する。探索したキー値が指す論理ブロックB2が更新済みでなければ、その論理ブロックB2を読み込むステップS712、ステップS713。次に、読み込んだ論理ブロックB2と書き込んだ論理ブロックB1とのブロック位置を比較し、論理ブロック数がいくつ離れているかを計算し、これをオフセットXとするステップS714。このオフセットXと、論理ブロックB2に対応したオフセットデータを入力としてステップS715、オフセットデータ更新処理を行うステップS716。本処理については後述するが、これにより、オフセットデータにオフセットXを追加して更新したオフセットデータを得ることができる。この更新したオフセットデータにより、元のオフセットデータを更新し、オフセットファイルを更新するステップS719。バッファメモリ上の次のレコードがあれば、それを参照し、同様の処理を行うステップS720、ステップS721。次のレコードがなければ、データ追加処理を終了する。図5は、図4のオフセットデータ更新処理S716を説明するフローチャートである。オフセットデータ更新処理S716では、入力として、オフセットデータとオフセットを受け取る。例として、オフセットデータとして10,11,12の整数値列をVariableByteCodeで圧縮したもの、オフセットとして129が入力されたとする。このとき、ループステップS812に入り、オフセットの129を2進数で表現するのに、どれだけのビット数が必要かのチェックを行うステップS813。このとき、129は規定値の一つである128よりも大きく、16384よりも小さいため、ビット数14で表現できることがわかる。この14ビットで129を表現し00000010000001このビット列をPとするステップS815。Pについて、先頭から順にビット7つごとに、ヘッダとして1ビットを追加し、1バイトひとまとまりで扱う。このため、Pは0000000100000001となる。さらに、その1バイトが数値を表現する最下位バイトだった場合、ヘッダの1ビットを1とするステップS816。このため、Pは0000000110000001となる。これをオフセットデータの末尾に追加しステップS817、オフセットデータを10,11,12,129を圧縮したものとする。このとき、オフセットデータを表すのに必要なビット長が、あらかじめオフセットデータについて設定した固定ビット長W以下であればステップS818、更新したオフセットデータを出力して更新処理を終了するステップS819。W以上であった場合、追加したオフセットの129は格納不可であるためステップS814、エラーを出力してオフセットデータを更新せずに処理を終了する。図6は、データ蓄積装置のキー値によるデータの完全一致検索処理を説明するフローチャートである。まず、探索したいキー値Xが入力されるステップS911。索引ファイルから探索キー値X以上でもっとも値が小さいキー値Aを捜し、その値Aが指すレコードを含む論理ブロックD1を読み込むステップS912。次に、読み込んだ論理ブロックD1内のレコード部から二分探索を用いて探索キー値Xを持つレコードを探すステップ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。図7は、図6のオフセットデータ参照処理S916を説明するフローチャートである。オフセットデータ参照処理S916では、入力としてオフセットデータを受け取る。例として、10,11,12,129の整数値列を圧縮したものが入力されたオフセットデータだとする。このオフセットデータを元の整数値列に戻す処理を行う。先頭から順に1バイトずつ読み込みステップS953、バイトのヘッダ先頭1ビットが1かどうかを確認するステップS954。このとき、先頭1ビットが0であればステップS954、続く次の1バイトも同数値を表現するためのバイトとみなしステップS955、それをチェックするステップS953。先頭1ビットが1であればステップS954、そこまで読み込んできたバイトをまとめて1つの整数値を表現しているとみなし、各バイトの先頭1ビットのヘッダを削除する処理を行うステップS957。例ではこのとき、オフセットデータが1000101010001011100011000000000110000001となっているので、1バイトの数値が3個10,11,12、2バイトの数値が1個129であることがわかる。このようにしてすべてのバイトを10進数に変換しステップS958、これを出力して処理を終了する。図8及び図9はデータ蓄積装置10のキー値による範囲検索処理を示すフローチャートである。まず、入力として下限キー値以上、上限キー値未満という検索条件が与えられるとするステップS1101。索引ファイルから下限キー値以上でもっとも値が小さいキー値を捜してその値が指すレコードを含む論理ブロックをデータファイルから読み込むステップS1102。続いて、読み込んだ論理ブロックに対応したオフセットデータを、オフセットファイルから読み込むステップS1103。この読み込んだオフセットデータを入力として、オフセットデータ参照処理を行いステップS916、出力として、オフセット整数値列Fを得る。このオフセット整数値列Fの各要素に、読み込んだ論理ブロックのブロック位置を加算し、これらをブロック位置集合Uとして一時的に記録するステップS1105。次に、論理ブロックのレコード部の先頭のレコードから順番にレコードのキー値が下限キー値以上かどうか調べていくステップS1107。下限キー値以上のレコードが見つかったら、まず論理ブロック内で最大のキー値を持つ末尾のレコードを参照し、そのキー値が上限キー値以上かどうかを調べるステップS1109。このとき、上限キー値以上でなければ、この論理ブロックの現在参照しているレコードから末尾のレコードまでのすべてのレコードは検索条件を満たすとして、検索条件を満たすレコード集合Rに追加するステップS1116。その後、データファイル内に次の論理ブロックがあればステップS1117それを読み込み同様の処理を行うステップS1118。論理ブロックがなければ、そこで検索終了となり、レコード集合Rを出力して終了するステップS1125。末尾のレコードのキー値が上限キー値以上だった場合ステップS1109は、参照しているレコードから末尾のレコードまで順番にキー値が上限値未満かどうかの比較を行っていくステップS1110。もし参照しているレコードのキー値が上限キー値未満であれば、そのレコードを検索条件を満たすレコード集合Rに追加するステップS1111。上限キー値未満でないレコードを見つけたら、次はオフセットデータが指している論理ブロックのレコードについて検索を行うステップS1113。ブロック位置集合Uが持つ全てのブロック位置の論理ブロックを参照しステップS1114、そのうちのまだ探索していないブロックのレコードから下限キー値以上、上限キー値未満になるレコードを順番に見つけ、検索条件を満たすレコード集合Rに追加していくステップS1123。ブロック位置集合Uが持つ全てのアドレスが指す論理ブロックの探索が終わったら、検索終了となり、レコード集合Rを出力して終了するステップS1125。データ蓄積装置10の利点は、より効率的に大きなデータ到着遅延を表すオフセットに対応可能であることである。従来は、オフセットの表現にビット番号を使用しているため、オフセットデータのビット列長であるWが、記録可能な最大のオフセットとなる。一方、データ蓄積装置10は、最大28ビットを用いて1つの数値を表すことができるため、より効率的に大きなオフセットを示すことが可能である。上記例において、オフセットとして10,11,12,129を格納するが、従来では129ビットが必要になるのと比べ、データ蓄積装置10は、40ビットで格納することができる。このため、突発的な要因で発生する怖れのある大きな到着遅延に効率的に対応することができる。実施形態2実施形態2は、オフセットの表現にSimple9で圧縮した整数値を用いる形態である。実施形態2のデータ蓄積装置の構成は図1のデータ蓄積装置10と同様である。図10は、実施形態2のデータ蓄積装置のデータ構造を説明する図である。オフセットファイル333’における各レコードであるオフセットデータは、固定長Wビットのデータである。ファイル上での位置を用いて、データファイルの各論理ブロックに一対一で対応している。オフセットデータは圧縮したオフセット数値列を格納するコード部と、コード部に格納したオフセット数値列の要素数およびコード部の4バイトの符号の数を表すヘッダ部から構成される。オフセット数値列の圧縮はSimple9を用いて行う。Simple9は1つの整数値を通常4バイト32ビットで表現するところを、その大きさに合わせて1~28ビットで表現してデータを圧縮する。図11及び図12は実施形態2のデータ蓄積装置におけるデータ追加処理を示すフローチャートである。図3及び図4のフローチャートとの違いはオフセットデータ更新処理がステップS716’である点である。図13は、実施形態2におけるオフセットデータ更新処理S716’を説明するフローチャートである。オフセットデータ更新処理S716’では、入力としてオフセットとオフセットデータを受け取る。例として、入力されるオフセットデータは10,11,12の数値列をエンコードしたもの、オフセットは129だとする。オフセットデータ更新処理S716’では、オフセットデータのSimple9のデコードステップS831、デコードしたオフセットデータへのオフセットの追加ステップS832、オフセットデータのSimple9へのエンコードステップS833という順で処理が行われる。本例では、まずSimple9でエンコード済みの10,11,12をデコードし、デコードした数値列に129を追加し、10,11,12,129の数値列をSimple9でエンコードして、そのエンコードしたビット列が固定長Wビットに収まるかどうかを判定しステップS834、収まっていたのであれば、更新したオフセットデータを出力して処理を終了する。図14は、図13のSimple9エンコード処理ステップS833を説明するフローチャートである。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ビットで表し、ビット列0001010000000100000011110101を得る。この結果10,1,1,117をエンコードした32ビットの符号は01010001010000000100000011110101となり、これをSimple9の1つの符号として記録するステップS1018。最後にオフセットデータのヘッダ部にエンコードした数値の数N=4とSimple9の符号の個数T=1を記入しステップS1020、オフセットデータを出力し処理を終了する。図15は、図13のSimple9デコード処理ステップS831を示すフローチャートである。Simple9デコード処理S831では、入力としてオフセットデータを受け取る。例として、入力されるオフセットデータは10,11,12,129の数値列をエンコードした01010001010000000100000011110101とする。まず、オフセットデータのヘッダ部を参照して、32ビットのSimple9符号の個数T=1とエンコードされた整数値の合計N=4を取得するステップS1031。その後、T個のすべてのSimple9符号について先頭から順に復号処理を行っていくステップS1033~ステップS1038。復号処理では、各符号のヘッダである上位4ビットを参照することで、そのあとに続く28ビットを何ビットずつに区切って10進数の整数値に変換すればよいのかを得る。本例の01010001010000000100000011110101では、先頭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は、この数列をデコード結果として出力し、処理を終了する。図16は実施形態2のデータ蓄積装置におけるキー値による完全一致検索処理を説明するフローチャートである。完全一致検索処理は、図6で説明した実施形態1の完全一致検索処理と同様の処理を行っているが、図6のオフセットデータ参照処理S916がSimple9デコード処理S831となる点が異なる。図17及び図18は実施形態2のデータ蓄積装置におけるキー値による範囲検索処理を説明するフローチャートである。範囲検索処理は、図8及び図9で説明した実施形態1の範囲検索処理と同様の処理を行っているが、オフセットデータ参照処理S1104がSimple9デコード処理S831となる点が異なる。実施形態2のデータ蓄積装置の利点は、実施形態1のデータ蓄積装置10と同様に大きなオフセットを効率的に表現できるだけでなく、さらに小さなオフセットに対しても最小で1ビットで表現でき、小さいオフセットも効率良く表現できる点である。実施例で挙げた例では、オフセットとして、10,11,12,129を格納するが、従来の方法では、129ビットが必要になるのと比べ、実施形態2では、32ビットにヘッダ分のビット数、例えば32ビット、を加えた64ビットで格納することができる。実施形態3実施の形態3は、オフセットの表現にビット番号を用い、0もしくは1のビットが連続した場合にRunLength圧縮を用いる方法である。実施形態3のデータ蓄積装置の構成は図1のデータ蓄積装置10と同様である。図19は、実施形態3のデータ蓄積装置のデータ構造を説明する図である。オフセットファイル333における各レコードであるオフセットデータは、固定長Wビットのデータである。ファイル上での位置を用いて、データファイルの各論理ブロックに一対一で対応している。オフセットデータは、1つのコード長記憶部、1つの圧縮回数記憶部、複数の圧縮位置および圧縮ビット数記憶部、1つのコード部で構成される。コード長記憶部は、コード部で利用されているビット数を保持する。圧縮回数記憶部は、続く圧縮位置および圧縮ビット数記憶部の個数を保持する。圧縮位置および圧縮ビット数記憶部は、続くコード部において、圧縮が行われているビット位置とそこで圧縮されたビット数を保持する。コード部では圧縮処理後のビット列が保持される。コード部のビット列において、1となるビットのビット位置が基本的にデータの遅れブロック数を示す。ただし、このとき、コード部において、ビットの1もしくは0が、しきい値k個以上続く場合には、これをRunLength圧縮する。このとき、圧縮位置および圧縮ビット数記憶部として、RunLength圧縮を開始した位置と、圧縮したビット数を記入したものを作成し、オフセットデータに追加する。この追加した圧縮位置および圧縮ビット数記憶部の個数は、圧縮回数記憶部に記入し随時加算していく。図20及び図21は実施形態3のデータ蓄積装置におけるデータ追加処理を示すフローチャートである。図3及び図4のフローチャートとの違いはオフセットデータ更新処理がステップS716である点である。図22は実施形態3のオフセットデータ更新処理S716を説明するフローチャートである。オフセットデータ更新処理S716では、入力としてオフセットデータXと追加するオフセットYを受け取る。例として、入力するオフセットデータXは10,11,12の数値列をオフセットデータ圧縮処理によって圧縮したもの、追加するオフセットYは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、オフセットデータ更新処理を終了する。例では、オフセットデータは10,11,12をオフセット圧縮処理によって圧縮したものであり、これをビット列で表すと10番目、11番目、12番目のビットが1となったビット列000000000111となる。これにオフセットである129を加えた場合、これをビット列で表せば、12と129との間には、116個の0が存在することになる。この116個の0ビットをRunLength圧縮すると、圧縮回数は1、圧縮位置と圧縮ビット数はそれぞれ13,115となり、コード部のビット列は00000000011101となる。また、別の例として、11,12,13,,98,99,100と数字が連続しているオフセットデータがあるとし、これに新たなオフセット101を加えるとする。このデータはRunLength圧縮により、圧縮位置と圧縮ビット数が11,89、コード部が00000000001となる。これにオフセット101を追加する場合、最後の数値よりも1だけ大きいので、圧縮ビット数のみを更新して、圧縮位置と圧縮ビット数を11,90とすれば、オフセット101を加えたこととなる。図23は、図22のオフセットデータ圧縮処理S863を説明するフローチャートである。オフセットデータ圧縮処理S863では、入力としてオフセットデータを受ける。このオフセットデータに対して、圧縮可能な部分を探索し、RunLength圧縮を行っていく。まず、オフセットデータのコード長記憶部、圧縮回数記憶部をそれぞれ参照し、コード部のビット数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。一方、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。更新したオフセットデータを出力して、圧縮処理を終了する。例として、図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を行う。オフセットデータ圧縮処理S863では、まず、コード長記憶部、圧縮回数記憶部を参照し、コード長N=129,圧縮回数M=0を得る。また、M=0であり、圧縮位置および圧縮ビット数記憶部が存在しないため、P[1]=0、S[1]=0とする。コード部を読み込み、これをX[1...129]とする。M=0であるので、i=1とし、Xの先頭ビットから同じビットが連続しているかどうかのチェックを行う。Xは、0000000001110000001であるので、最初の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に戻る。ここで、得られたオフセットデータZがあらかじめ決められたオフセットデータの固定長であるWを超えるかどうかを判定し、越えなければ、オフセットデータ更新を終了する。もし、越えてしまうのであれば、オフセットYは格納不可だったとして、その旨を出力する。その際、オフセットデータ更新は行われず、更新前のオフセットデータのままとする。図24は実施形態3のデータ蓄積装置におけるキー値による完全一致検索処理を説明するフローチャートである。完全一致検索処理では、図6で説明した実施形態1の完全一致検索処理と同様の処理を行っていくが、図6のオフセットデータ参照処理S916がオフセットデータ参照処理S916となる。図25は、図24のオフセットデータ参照処理S916を説明するフローチャートである。オフセットデータ参照処理では、入力としてオフセットデータを受ける。まず、オフセットデータの圧縮回数記憶部を参照し、圧縮位置および圧縮ビット数記憶部の個数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を出力して終了する。X[i]が圧縮されたビットである場合も同様に、そのビットが0か1かを確認するステップS967。もし、1であれば、X[i]が示すオフセットすべてを求めるため、counter=0としステップS976、offset=iskipcounterとして、オフセットを計算しステップ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、同様の処理を行う。例として、図25で示したオフセットデータ参照処理S916において、入力するオフセットデータを先の図22で示したオフセットデータ更新処理S716によって圧縮した10,11,12,129とした場合を考える。このとき、M=1,P[1]=13,S[1]=115,N=14,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=iskipと計算し、offset=129を得、Fを更新し、F=10,11,12,129となる。i=N=14となったため、Fを出力し、これでオフセットデータ参照処理を終了する。図26及び図27は実施形態3のデータ蓄積装置におけるキー値による範囲検索処理を説明するフローチャートである。範囲検索処理は、図8及び図9で示した実施形態1の範囲検索処理と同様の処理を行っていくが、オフセットデータ参照処理S1104が図25で説明したオフセットデータ参照処理S916となる点が異なる。実施形態3のデータ蓄積装置は、データ到着遅延が連続して発生するようなデータに特化した方法を採用している。データソース側の回線切断などにより、出力バッファに溜まったデータが回線復旧後にまとめて送られてくる場合など、大きなオフセットの値が連続して続く場合に効率的にオフセットを表現することができる。実施例で挙げた例では、オフセットとして、10,11,12,129を格納するが、従来の方法では、129ビットが必要になるのと比べ、実施形態3では、コード長記憶部のサイズH1を16ビット、圧縮回数記憶部のサイズH2を8ビット、圧縮位置及び圧縮ビット数記憶部のサイズH3を32ビットとすると、コード部は14ビットのため、合計70ビットで格納することができる。圧縮の効果次に、本発明の各圧縮方法によるビット効率向上の例をグラフで示す。以下の例では、Simple9のオフセットデータにおけるヘッダ部の大きさを32ビット、RunLength圧縮のオフセットデータにおけるコード長記憶部の大きさを16ビット、圧縮回数記憶部の大きさを8ビット、圧縮位置および圧縮ビット数記憶部のサイズを32ビットとして計算を行っている。図28は、あるオフセット数をオフセットデータに格納する場合に、必要となるビット数の圧縮方法による違いを示すグラフである。従来の方式であるBitmapと、本実施形態の各方式であるVariableByteCode、Simple9、RunLength圧縮について比較を行っている。横軸は表現するオフセット数、縦軸は横軸に対応するオフセット数を格納するために必要なビット数を、それぞれ対数軸で表している。グラフより、本実施形態の各方式は、従来の方式であるBitmapに比べて、必要となるビット数の増加が、オフセット数の増加に対して、よりゆるやかであることが確認できる。図29はある範囲で連続しているオフセット数をオフセットデータに格納する場合に、必要なビット数の圧縮方法による違いを示すグラフである。従来の方式であるBitmapと、本実施形態の各方式であるVariableByteCode、Simple9、RunLength圧縮について比較を行っている。横軸は連続したオフセット数の範囲を示しており、1-10は1,2,3,4,5,6,7,8,9,10のオフセット数値列を表している。縦軸は横軸で示されたオフセット数値列をオフセットデータに格納するために必要となるビット数を対数軸で示している。グラフより、オフセット数が連続して並ぶ場合、従来の方法であるBitmapのビット効率が良いことがわかるが、RunLengthは1-70以上の場合にBitmapを超えるビット効率を持つことがわかる。図30は、1から10の連続したオフセット数値列に加えて、100、200、300、400、500、600、700、800のいずれかのオフセット数をオフセットデータとして格納する場合に、必要となるビット数の圧縮方法による違いを示すグラフである。従来の方式であるBitmapと、本実施形態の各方式であるVariableByteCode、Simple9、RunLength圧縮について比較を行っている。横軸は加えて格納するオフセット数を示し、縦軸は横軸で示されたオフセット数を加えた場合に、これをオフセットデータとして格納するために必要となるビット数を示している。グラフより、従来の方法であるBitmapでは、必要となるビット数が追加して格納するオフセット数の大きさに対応して線形に増加していることに対して、本実施形態の各方式ではほぼ必要となるビット数に変化がなく、高いビット効率でオフセット数を格納できていることがわかる。図31は1から64の連続したオフセット数値列に加えて、100、200、300、400、500、600、700、800のいずれかのオフセット数をオフセットデータとして格納する場合に、必要となるビット数の圧縮方法による違いを示すグラフである。従来の方式であるBitmapと、本実施形態の各方式であるVariableByteCode、Simple9、RunLength圧縮について比較を行っている。横軸は加えて格納するオフセット数を示し、縦軸は横軸で示されたオフセット数を加えた場合に、これをオフセットデータとして格納するために必要となるビット数を示している。グラフより、従来の方法であるBitmapでは、必要となるビット数が追加して格納するオフセット数の大きさに対応して線形に増加していることに対して、本実施形態の各方式では必要となるビット数にほぼ変化がなく、特に、RunLength圧縮がどのようなオフセット数値列を加えた場合でも、Bitmap以上のビット効率を持つことがわかる。他の実施形態上述した各データ蓄積装置はコンピュータとプログラムによっても実現できる。上述した各データ蓄積装置の動作をコンピュータで実行可能なプログラムとし、これをコンピュータが読み取り可能な記録媒体に記録することも、ネットワークを通してコンピュータに提供することも可能である。"