説明

インデックス生成装置及び方法

【課題】圧縮後ファイルから必要なレコードを読み出すために、圧縮後ファイルを部分的に解凍するための情報を生成するインデックス生成装置及び方法を提供すること。
【解決手段】インデックス生成装置10は、圧縮前ファイル51を構成する複数のレコードをファイル圧縮装置60に順次引き渡し、引き渡すレコードのインデックスを付与しインデックスファイル31に順次記憶する。次に、インデックス生成装置10は、ファイル圧縮装置60における圧縮処理状態を監視し、1ブロックの圧縮処理の終了を検知したことに応じて、圧縮後の1ブロックのブロックサイズをファイル圧縮装置60から取得し、取得した圧縮後の1ブロックのブロックサイズに基づいて、圧縮後の1ブロックの、圧縮後ファイル61の先頭からのブロック位置を算出し、インデックスファイル31にさらに記憶する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、インデックス生成装置及び方法に関する。
【背景技術】
【0002】
従来、ファイルシステムは、ファイルを保存する際に、保存するデータ量を削減するために、ファイルを圧縮して保存することがある。保存された圧縮後ファイルは、解凍されることによって、元のファイルに復元される。ここで、圧縮処理は、ファイルの全体を一括して処理するので、通常、圧縮後ファイルの一部だけを解凍することはできない。
【0003】
このような圧縮及び解凍処理において、ファイルの一部を変更した場合、変更前の原ファイルの圧縮ファイルと、変更した部分のみを圧縮した圧縮ファイルとを保存し、解凍の際に変更前の原ファイルと組み合わせる技術を開示する特許文献1が知られている。
【0004】
特許文献1に開示された技術において、制御部は、原ファイルを圧縮した圧縮ファイルを圧縮ファイル格納領域に保持し、原ファイルが変更された際に、その変更部分を示すポインタをポインタ格納領域に保持し、原ファイルの変更部分を部分圧縮した変更圧縮ファイルを変更圧縮ファイル格納領域に保持する。そして、制御部は、変更前のファイルが必要な場合、圧縮/伸張処理部を通じて圧縮ファイル格納領域の圧縮ファイルを伸張して変更前のファイルを復元し、変更後のファイルが必要な場合、圧縮/伸張処理部を通じて変更圧縮ファイル格納領域の変更圧縮ファイルを伸張し、そのファイルをポインタ格納領域のポインタに従って変更前のファイルに組み込み、変更後のファイルを復元する。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平07−141234号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1に開示された技術は、変更後のファイルを変更前のファイルに戻す場合に備えて、変更前のファイルの圧縮後ファイルと、変更した部分のみの圧縮後ファイルとを保持しているだけである。すなわち、特許文献1に開示された技術であっても、圧縮後ファイルから必要なデータを取得するためには、圧縮後ファイルを全て解凍する必要がある。
【0007】
そこで、圧縮後ファイルから必要なレコードを読み出すために、圧縮後ファイルを部分的に解凍するための情報を生成する装置及び方法が求められている。
【0008】
本発明は、圧縮後ファイルから必要なレコードを読み出すために、圧縮後ファイルを部分的に解凍するための情報を生成するインデックス生成装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
本発明では、以下のような解決手段を提供する。
【0010】
(1) ファイルをブロックごとに圧縮・解凍するファイル圧縮装置と通信可能なインデックス生成装置であって、圧縮対象のファイルを構成する複数のレコードを前記ファイル圧縮装置に順次引き渡すレコード引渡手段と、前記引き渡すレコードのインデックスを付与しインデックス記憶手段に順次記憶するレコード情報取得手段と、前記ファイル圧縮装置における圧縮処理状態を監視し、1ブロックの圧縮処理の終了を検知する圧縮処理状態監視手段と、前記圧縮処理状態監視手段が前記1ブロックの圧縮処理の終了を検知したことに応じて、圧縮後の前記1ブロックに係る情報を前記ファイル圧縮装置から取得して、取得した圧縮後の前記1ブロックに係る情報に基づいて、圧縮後の前記1ブロックを特定するための情報を生成して前記インデックス記憶手段にさらに記憶するブロック情報取得手段と、を備えるインデックス生成装置。
【0011】
(1)の構成によれば、本発明に係るインデックス生成装置は、圧縮対象のファイルを構成する複数のレコードをファイル圧縮装置に順次引き渡し、引き渡すレコードのインデックスを付与しインデックス記憶手段に順次記憶する。次に、インデックス生成装置は、ファイル圧縮装置における圧縮処理状態を監視し、1ブロックの圧縮処理の終了を検知したことに応じて、圧縮後の1ブロックに係る情報をファイル圧縮装置から取得して、取得した圧縮後の1ブロックに係る情報に基づいて、圧縮後の1ブロックを特定するための情報を生成してインデックス記憶手段にさらに記憶する。
【0012】
すなわち、本発明に係るインデックス生成装置は、ファイル圧縮装置に圧縮対象のファイルをレコードごとに引き渡し、引き渡すレコードのインデックスをインデックス記憶手段に順次記憶し、ファイル圧縮装置から、圧縮後の1ブロックに係る情報を取得し、圧縮後の1ブロックを特定するための情報を生成してインデックス記憶手段にさらに記憶する。したがって、本発明に係るインデックス生成装置は、圧縮後ファイルから必要なレコードを読み出すために、圧縮のために引き渡したレコードのインデックスを順次記憶し、圧縮後の1ブロックを特定するための情報をさらに記憶するので、圧縮後ファイルを部分的に解凍するための情報を生成することができる。
【0013】
(2) 前記レコード情報取得手段は、前記引き渡すレコードのレコードサイズに基づいて、前記引き渡すレコードを含む圧縮前ファイルのブロックであって前記引き渡すレコードを含む圧縮後のブロックに対応する圧縮前ファイルのブロックの先頭からの、前記引き渡すレコードのオフセットを算出して、レコードサイズと共に前記引き渡すレコードに関連付けて前記インデックス記憶手段にさらに記憶する、(1)に記載のインデックス生成装置。
【0014】
(2)の構成によれば、(2)に係るインデックス生成装置は、(1)において、引き渡すレコードを含む圧縮前ファイルのブロックであって引き渡すレコードを含む圧縮後のブロックに対応する圧縮前ファイルのブロックの先頭からの、引き渡すレコードのオフセットを算出して、レコードサイズと共に引き渡すレコードに関連付けてインデックス記憶手段にさらに記憶する。したがって、(2)に係るインデックス生成装置は、圧縮後ファイルから必要なレコードを読み出すために、圧縮のために引き渡すレコードのインデックスを順次記憶し、圧縮後のブロックに対応する圧縮前ファイルのブロックの先頭からのオフセットとレコードサイズとを共に記憶するので、圧縮後ファイルの該当する1ブロックのうち引き渡したレコードまでを解凍するための情報を生成することができる。
【0015】
(3) ファイルをブロックごとに圧縮・解凍するファイル圧縮装置と通信可能なインデックス生成装置が実行する方法であって、圧縮対象のファイルを構成する複数のレコードを前記ファイル圧縮装置に順次引き渡すレコード引渡ステップと、前記引き渡すレコードのインデックスを付与しインデックス記憶手段に順次記憶するレコード情報取得ステップと、前記ファイル圧縮装置における圧縮処理状態を監視し、1ブロックの圧縮処理の終了を検知する圧縮処理状態監視ステップと、前記圧縮処理状態監視ステップが前記1ブロックの圧縮処理の終了を検知したことに応じて、圧縮後の前記1ブロックに係る情報を前記ファイル圧縮装置から取得して、取得した圧縮後の前記1ブロックに係る情報に基づいて、圧縮後の前記1ブロックを特定するための情報を生成して前記インデックス記憶手段にさらに記憶するブロック情報取得ステップと、を備える方法。
【0016】
したがって、本発明に係る方法は、(1)と同様に、圧縮後ファイルから必要なレコードを読み出すために、圧縮のために引き渡すレコードのインデックスを順次記憶し、圧縮後の1ブロックを特定するための情報をさらに記憶するので、圧縮後ファイルを部分的に解凍するための情報を生成することができる。
【発明の効果】
【0017】
本発明によれば、ファイルをブロックごとに圧縮・解凍するファイル圧縮装置と連携して動作し、圧縮後ファイル中のブロックを特定可能な情報を生成して記憶するインデックス生成装置を提供することができる。その結果、ユーザは、圧縮後ファイルから所定のレコードを読み出す際に、解凍すべきブロックを特定することができる。
【図面の簡単な説明】
【0018】
【図1】本発明の一実施形態に係るインデックス生成装置の機能構成を示す機能ブロック図である。
【図2】本発明の一実施形態に係るインデックス生成装置の機能を説明するための説明図である。
【図3】本発明の実施形態1に係るインデックスファイルの一例を示す図である。
【図4】本発明の実施形態1に係るインデックス生成装置のインデックス生成処理を示すフローチャートである。
【図5】本発明の実施形態1に係るインデックス生成装置によって生成されたインデックスファイルを利用して検索する検索処理を示すフローチャートである。
【図6】本発明の実施形態2に係るインデックスファイルの一例を示す図である。
【図7】本発明の実施形態2に係るインデックス生成装置のインデックス生成処理を示すフローチャートである。
【図8】本発明の実施形態2に係るインデックス生成装置によって生成されたインデックスファイルを利用して検索する検索処理を示すフローチャートである。
【発明を実施するための形態】
【0019】
以下、本発明の実施形態について図を参照しながら説明する。
【0020】
本実施形態のインデックス生成装置10は、コンピュータ及びその周辺装置に適用される。本実施形態における各部は、コンピュータ及びその周辺装置が備えるハードウェア並びに該ハードウェアを制御するソフトウェアによって構成される。
【0021】
上記ハードウェアには、制御部としてのCPU(Central Processing Unit)の他、記憶部、通信装置、表示装置及び入力装置が含まれる。記憶部としては、例えば、メモリ(RAM:Random Access Memory、ROM:Read Only Memory等)、ハードディスクドライブ(HDD:Hard Disk Drive)及び光ディスク(CD:Compact Disk、DVD:Digital Versatile Disk等)ドライブが挙げられる。通信装置としては、例えば、ファイル圧縮装置60と通信するための各種有線及び無線インターフェース装置が挙げられる。表示装置としては、例えば、液晶ディスプレイやプラズマディスプレイ等の各種ディスプレイが挙げられる。入力装置としては、例えば、キーボード及びポインティング・デバイス(マウス、トラッキングボール等)が挙げられる。
【0022】
上記ソフトウェアには、上記ハードウェアを制御するコンピュータ・プログラムやデータが含まれる。コンピュータ・プログラムやデータは、記憶部により記憶され、制御部により適宜実行、参照される。また、コンピュータ・プログラムやデータは、通信回線を介して配布されることも可能であり、CD−ROM等のコンピュータ可読媒体に記録して配布されることも可能である。
【0023】
[実施形態1]
図1は、本発明の一実施形態に係るインデックス生成装置10の機能構成を示す機能ブロック図である。図1において、インデックス生成装置10の説明のためにファイル圧縮装置60の構成を示す。図2は、本発明の一実施形態に係るインデックス生成装置10の機能を説明するための説明図である。図3は、本発明の実施形態1に係るインデックスファイル31の一例を示す図である。図3(1)は、インデックスファイル31の一例を示し、図3(2)は、圧縮前ファイル51と、圧縮後ファイル61と、圧縮後ファイル61から部分解凍された解凍ブロック52との一例を示している。
【0024】
インデックス生成装置10は、ファイルをブロックごとに圧縮・解凍するファイル圧縮装置60と通信可能に接続されている。インデックス生成装置10は、インデックス記憶手段してのインデックスファイル31と、レコード引渡手段としてのレコード引渡部11と、レコード情報取得手段としてのレコード情報取得部12と、圧縮処理状態監視手段としての圧縮処理状態監視部13と、ブロック情報取得手段としてのブロック情報取得部14と、を備えている。以下、図1において、図2及び図3を参照しながら各部ごとに詳述する。
【0025】
レコード引渡部11は、圧縮対象のファイル(圧縮前ファイル51)を構成する複数のレコードをファイル圧縮装置60に順次引き渡す。具体的には、レコード引渡部11は、圧縮前ファイル51を構成するレコードを、1レコードずつ取得し、順次、ファイル圧縮装置60に引き渡す。例えば、レコード引渡部11は、レコード長が可変の場合、レコードの開始コードから終了コードまでを1レコードとして取得し、レコード長が固定の場合、固定長の1レコードを取得し、取得したレコードをファイル圧縮装置60とのインターフェースに従い、引き渡す。
【0026】
ファイル圧縮装置60において、対象レコード受付部71は、引き渡された1レコードを、圧縮用バッファ62に順次、格納する。ファイル情報更新部72は、ファイル情報テーブル63を更新する。ファイル情報テーブル63は、例えば、圧縮を完了するごとに作成される番号であるブロック番号と、引き渡されたレコードを格納する圧縮用バッファ62の残りサイズであるバッファサイズと、圧縮したブロックのサイズである圧縮後ブロックサイズとをメモリ上に記憶する。バッファサイズ監視部73は、圧縮用バッファ62のバッファサイズを監視する。ブロック圧縮部74は、圧縮用バッファ62が所定の条件になると、圧縮用バッファ62内のデータを圧縮し、圧縮後のブロックを順次生成する。さらに、圧縮後ブロックサイズ記録部75は、圧縮後ブロックサイズをファイル情報テーブル63に記録する。
すなわち、図2に示すように、圧縮前ファイル51を構成するレコードが引き渡されて、圧縮用バッファ62が所定の条件になると、圧縮後ファイル61の1ブロック(例えば、ブロック61i)が生成される。
【0027】
ここで、所定の条件は、圧縮用バッファ62のバッファサイズが0又は負になった場合である。例えば、引き渡された1レコードを格納し、圧縮用バッファ62のバッファサイズが0になった場合に、ファイル圧縮装置60は、1ブロックの圧縮データを生成する。あるいは、引き渡された1レコードを格納し、圧縮用バッファ62のバッファサイズが負になった場合に、ファイル圧縮装置60は、1ブロックの圧縮データを生成し、最後に受け付けた1レコードを、クリアした圧縮用バッファ62に格納する。
さらに、ファイル圧縮装置60は、圧縮を完了するごとに圧縮後の1ブロックにブロック番号を対応付ける。圧縮後の1ブロックのサイズは、ブロックを構成する最初のデータから最後のデータまでの長さをバイト(8ビット)数で表したものであり、ブロックごとに異なる。
【0028】
レコード情報取得部12は、レコード引渡部11が引き渡すレコードのインデックスを付与しインデックスファイル31に順次記憶する。レコードのインデックスは、予め作成されているとしてもよいし、圧縮前ファイル51のフォーマット情報により取得するとしてもよい。具体的には、レコード情報取得部12は、図3(1)において「key1」等で示されるレコードのインデックスを、レコードに対応付けて予め作成されているインデックス情報から取得する。あるいは、レコード情報取得部12は、読み出したレコードから、レコード中のインデックスの相対位置及び長さによってインデックス(例えば、ログファイルにおける時刻情報)を読み出して取得する。そして、レコード情報取得部12は、取得したインデックスをインデックスファイル31に図3(1)のように順次記憶する。
【0029】
圧縮処理状態監視部13は、ファイル圧縮装置60における圧縮処理状態を監視し、1ブロックの圧縮処理の終了を検知する。具体的には、圧縮処理状態監視部13は、ファイル圧縮装置60とのインターフェースに従い、ファイル圧縮装置60における圧縮処理状態を示すファイル情報テーブル63を監視する。すなわち、圧縮処理状態監視部13は、例えば、圧縮処理状態を示すファイル情報テーブル63のブロック番号が増加(+1)したことによって圧縮処理の終了を検知する。
【0030】
圧縮処理状態監視部13は、バッファサイズから、圧縮処理の終了を検知するとしてもよい。例えば、ファイル圧縮装置60が引き渡された1レコードを格納すると、圧縮用バッファ62のバッファサイズは減少し、ファイル圧縮装置60が圧縮後に圧縮用バッファ62をクリアすると、バッファサイズは増加する。
【0031】
ブロック情報取得部14は、圧縮処理状態監視部13が1ブロックの圧縮処理の終了を検知したことに応じて、圧縮後の1ブロックに係る情報をファイル圧縮装置60から取得して、取得した圧縮後の1ブロックに係る情報に基づいて、圧縮後の1ブロックを特定するための情報を生成してインデックスファイル31にさらに記憶する。
【0032】
すなわち、ブロック情報取得部14は、圧縮後の1ブロックのブロックサイズをファイル圧縮装置60から取得し、取得した圧縮後の1ブロックのブロックサイズに基づいて、圧縮後ファイル61の先頭からのブロック位置を算出する。具体的には、ブロック情報取得部14は、ファイル圧縮装置60とのインターフェースに従い、圧縮後の1ブロックのブロックサイズを、圧縮処理の終了ごとに取得し、取得したブロックサイズを加算して、圧縮後ファイル61の先頭からのブロック位置を算出する。図3(2)のblock_pos_1〜block_pos_nは、このようにして算出されたブロック位置を示している。
【0033】
次に、ブロック情報取得部14は、算出した圧縮後ファイル61の先頭からのブロック位置をインデックスファイル31にさらに記憶する。具体的には、ブロック情報取得部14は、図3(1)に示すように、インデックス(例えば、key1)に対応付けて、インデックスに対応するレコードを含むブロック(例えば、ブロック61i)のブロック位置(例えば、block_pos_i)をインデックスファイル31にさらに記憶する。
【0034】
インデックスファイル31は、図3(1)に示すように、順次記憶されたインデックス(例えば、key1)と、区切りコード(例えば、¥t)と、インデックスに対応するレコードを含む圧縮後のブロックのブロック位置(例えば、block_pos_i)と、から構成される。圧縮後ファイル61を解凍する場合、検索すべきインデックスに対応するレコードを含む圧縮後のブロックのブロック位置(例えば、図3(2)において「key1」に対応するレコード1を含む圧縮後のブロック61iのblock_pos_i)を指定すると、指定したブロック位置のブロックのみが部分解凍され、解凍ブロック52が生成される。
【0035】
図4は、本発明の実施形態1に係るインデックス生成装置10のインデックス生成処理を示すフローチャートである。ファイル圧縮装置60のファイル圧縮処理と関連させて説明する。
【0036】
ステップS100において、インデックス生成装置10のCPU(以下、単にCPUという)は、圧縮後ファイル61の先頭からのブロック位置の値を初期化する。その後、CPUは、処理をステップS101に移す。
【0037】
ステップS101において、CPU(レコード引渡部11)は、圧縮前ファイル51の1レコードを読み込む。より具体的には、CPUは、ファイル処理関数によりオープンした圧縮前ファイル51から、レコード取得関数により、1レコードを読み込む。CPUは、処理をステップS102に移す。
【0038】
ステップS102において、CPU(レコード引渡部11)は、ファイル圧縮装置60とのインターフェースに従い、ステップS101で読み込んだ1レコードをファイル圧縮装置60に送信する。その後、CPUは、処理をステップS103に移す。
一方、ファイル圧縮装置60は、ステップS201において、インデックス生成装置10から1レコードを受信する。次に、ファイル圧縮装置60は、ステップS202において、インデックス生成装置10から受信した1レコードを圧縮用バッファ62に記憶し、圧縮用バッファ62のバッファサイズを監視する。
【0039】
ステップS103において、CPU(レコード情報取得部12)は、レコードのインデックスを付与しインデックスファイル31に記憶する。より具体的には、CPUは、ステップS102において送信したレコードのインデックスを、レコード内の相対位置及びインデックスの長さにより取得し、取得したインデックスを圧縮後のブロックのブロック位置と関連付けてインデックスファイル31に記憶する。その後、CPUは、処理をステップS104に移す。
【0040】
ステップS104において、CPU(圧縮処理状態監視部13)は、圧縮処理状態を監視する。より具体的には、CPUは、ファイル圧縮装置60とのインターフェースに従い、ファイル圧縮装置60におけるファイル情報テーブル63のバッファサイズを監視する。その後、CPUは、処理をステップS105に移す。
一方、ファイル圧縮装置60は、ステップS203において、ステップS202における圧縮用バッファ62のバッファサイズの監視によって、バッファサイズがオーバーした(バッファサイズが0以下になった)か否かを判断し、0以下になったと判断した場合(YESの場合)、ファイル圧縮装置60は、制御をステップS204に移し、0以下ではないと判断した場合(NOの場合)、ファイル圧縮装置60は、制御をステップS201に移す。次に、ファイル圧縮装置60は、ステップS204において、圧縮用バッファ62の圧縮を開始し、圧縮を完了して圧縮後の1ブロックを作成し、圧縮後ファイル61のブロック番号を増加(+1)する。次に、ファイル圧縮装置60は、ステップS205において、終了か否かを判断し、終了でない(例えば、一定時間内に1レコードを受信した)と判断した場合、処理をステップS201に移し、終了である(例えば、一定時間内に1レコードを受信しない)と判断した場合、処理を終了する。
【0041】
ステップS105において、CPU(圧縮処理状態監視部13)は、1ブロック分の圧縮完了か否かを判断する。より具体的には、CPUは、ステップS104において監視したブロック番号が、増加(+1)したか否かを判断する。この判断がYESの場合、CPUは、処理をステップS106に移し、この判断がNOの場合、CPUは、処理をステップS101に移す。
【0042】
ステップS106において、CPU(ブロック情報取得部14)は、圧縮後のブロックサイズを取得する。より具体的には、CPUは、ファイル圧縮装置60とのインターフェースに従い、ファイル圧縮装置60から圧縮後のブロックサイズを取得する。その後、CPUは、処理をステップS107に移す。
【0043】
ステップS107において、CPU(ブロック情報取得部14)は、圧縮後のブロックサイズをブロック位置に加算する。その後、CPUは、処理をステップS108に移す。
【0044】
ステップS108において、CPU(レコード引渡部11)は、圧縮終了か否かを判断する。より具体的には、CPUは、圧縮前ファイル51の最後のレコードを含むブロックが圧縮完了した(ステップS101においてファイル終了であった)か否かを判断する。この判断がYESの場合、CPUは、処理を終了し、この判断がNOの場合、CPUは、処理をステップS101に移す。
【0045】
図5は、本発明の実施形態1に係るインデックス生成装置10によって生成されたインデックスファイル31を利用して検索する検索処理を示すフローチャートである。検索処理は、インデックス生成装置10とは別の、例えば、検索装置(図示せず)によって実行される処理として説明するが、インデックス生成装置10によって実行されてもよい。
【0046】
検索装置は、ステップS301において、検索すべきレコードに含まれるインデックスにより、インデックスファイル31を検索する。次に、検索装置は、ステップS302において、検索したインデックスに対応するブロック位置を取得する。次に、検索装置は、ステップS303において、圧縮後ファイル61を構成するブロックのうち、取得したブロック位置から始まるブロックのみを解凍する。次に、検索装置は、ステップS304において、解凍したブロックのファイルから、インデックスにより検索し、検索すべきレコードを取得する。なお、検索装置は、検索すべきレコードがブロックに跨っている場合、次のブロックも解凍し、検索すべきレコードを取得する。
このように、インデックス生成装置10は、圧縮後ファイル61を構成するブロックのうち、検索装置が検索すべきレコードを含むブロックのみを部分解凍して検索すべきレコードを検索できるようなインデックスファイル31を生成することができる。
【0047】
[実施形態2]
実施形態2におけるインデックス生成装置10の機能を、図1、図2及び図6を参照しながら説明する。図6は、本発明の実施形態2に係るインデックスファイル31の一例を示す図である。図6(1)は、インデックスファイル31の一例を示し、図6(2)は、圧縮前ファイル51と、圧縮後ファイル61と、圧縮後ファイル61から部分解凍された解凍ブロック53との一例を示している。
【0048】
図1におけるレコード情報取得部12は、レコード引渡部11が引き渡すレコードのレコードサイズに基づいて、引き渡すレコードを含む圧縮前ファイル51のブロックであって引き渡すレコードを含む圧縮後のブロックに対応する圧縮前ファイル51のブロックの先頭からの、引き渡すレコードのオフセット(以後、レコードオフセットという)を算出して、レコードサイズと共に引き渡すレコードに関連付けてインデックスファイル31にさらに記憶する。
【0049】
インデックスファイル31は、図6(1)に示すように、順次記憶されたインデックス(例えば、key1)と、区切りコード(例えば、¥t)と、インデックスに対応するレコードを含む圧縮後のブロック位置(例えば、block_pos_i)と、区切りコード(例えば、¥t)と、インデックスに対応するレコードを含む圧縮前ファイル51のレコードオフセット(例えば、引き渡すレコード1を含む圧縮後のブロック61iに対応する圧縮前ファイル51のブロック51iの先頭からのレコードオフセット、すなわち、解凍ブロック53のoffset_1)と、区切りコード(例えば、¥t)と、インデックスに対応するレコードを含む圧縮前ファイル51のレコードサイズ(例えば、引き渡すレコード1を含む圧縮後のブロック61iに対応する圧縮前ファイル51のレコードサイズ、すなわち、解凍ブロック53のlength_1)とから構成される。
【0050】
具体的には、図6(2)において、レコード情報取得部12は、引き渡すレコードを含む圧縮後のブロック(例えば、ブロック61i)に対応する圧縮前ファイル51のブロック(例えば、ブロック51i)の先頭からのレコードオフセットを、引き渡すレコードのレコードサイズに基づいて算出する。すなわち、レコード情報取得部12は、圧縮されるごとにレコードオフセットの初期値を圧縮バッファからあふれたサイズ(例えば、最初のブロックは0、レコードがブロックに跨って記憶される場合に次のブロックにあふれたサイズ)にし、引き渡すレコードのレコードサイズをレコードオフセットに加算して、圧縮前ファイル51のブロックの先頭からの、引き渡すレコードのレコードオフセットを算出する。そして、レコード情報取得部12は、図6(1)に示すように、レコードオフセット(例えば、offset_1)とレコードサイズ(例えば、length_1)とを共に、引き渡すレコードのインデックス(例えば、key1)に関連付けてインデックスファイル31にさらに記憶する。このように記憶されたレコードオフセットを利用すると、検索装置(図示せず)は、圧縮後のブロック61iのうち先頭から検索すべきレコードを含んだ部分までを解凍した解凍ブロック53を生成し、検索することができる。検索装置(図示せず)は、圧縮後のブロック(例えば、ブロック61i)のうち先頭から検索すべきレコードを含んだ部分までを解凍した解凍ブロック53を生成し、解凍ブロック53の中を検索せずに、解凍ブロック53の最後からレコードサイズ分のレコードを容易に抽出して検索結果とすることができる。
【0051】
図7は、本発明の実施形態2に係るインデックス生成装置10のインデックス生成処理を示すフローチャートである。ファイル圧縮装置60のファイル圧縮処理と関連させて説明する。
【0052】
ステップS110は、実施形態1のステップS100と同様であるので、省略する。
【0053】
ステップS111において、CPU(レコード引渡部11)は、圧縮前ファイル51の1レコードを読み込む。より具体的には、CPUは、ファイル処理関数によりオープンした圧縮前ファイル51から、レコード取得関数により、1レコードを読み込み、レコードサイズを取得する。そして、CPUは、処理をステップS112に移す。
【0054】
ステップS112において、CPU(レコード引渡部11)は、ファイル圧縮装置60とのインターフェースに従い、ステップS111で読み込んだ1レコードをファイル圧縮装置60に送信する。その後、CPUは、処理をステップS113に移す。
【0055】
ステップS113において、CPU(レコード情報取得部12)は、レコードのインデックス、ブロック位置、レコードオフセット及びレコードサイズをインデックスファイル31に記憶する。より具体的には、CPUは、ステップS112において送信したレコードのインデックスを、レコード内の相対位置及びインデックスの長さにより取得する。次に、CPUは、ブロック位置、レコードオフセット及びレコードサイズをレコードのインデックスに対応付けてインデックスファイル31に記憶する。次に、CPUは、ステップS111で取得したレコードサイズをレコードオフセットに加算し、記憶する。その後、CPUは、処理をステップS114に移す。
【0056】
ステップS114〜S116は、実施形態1のステップS104〜S106と同様であるので省略する。実施形態1のステップS107に対応するステップS117において、CPUは、圧縮後のブロックサイズをブロック位置に加算すると共に、レコードオフセットの初期値をセットする。S118は、実施形態1のステップS108と同様であるので省略する。
【0057】
図8は、本発明の実施形態2に係るインデックス生成装置10によって生成されたインデックスファイル31を利用して検索する検索処理を示すフローチャートである。検索処理は、インデックス生成装置10とは別の、例えば、検索装置(図示せず)によって実行される処理として説明するが、インデックス生成装置10によって実行されてもよい。
【0058】
検索装置は、ステップS311において、検索すべきレコードに含まれるインデックスにより、インデックスファイル31を検索する。次に、検索装置は、ステップS312において、検索したインデックスに対応するブロック位置、レコードオフセット、及びレコードサイズを取得する。次に、検索装置は、ステップS313において、圧縮後ファイル61を構成するブロックのうち、取得したブロック位置の圧縮後のブロックについて、検索すべきレコードを含む部分までを、レコードオフセットとレコードサイズとを利用して、解凍する。次に、検索装置は、ステップS314において、解凍したブロックのファイルから、インデックスにより検索し、検索すべきレコードを取得する。なお、検索装置は、ステップS314において、解凍したブロックの最後のレコードを検索すべきレコードとして取得するとしてもよい。検索すべきレコードがブロックに跨っている場合、検索装置は、レコードサイズを利用して次のブロックも解凍する。
このように、インデックス生成装置10は、圧縮後ファイル61を構成するブロックのうち、検索装置が検索すべきレコードを含むブロックのみを、検索すべきレコードを含む部分まで解凍して検索できるようなインデックスファイル31を生成することができる。
【0059】
本実施形態1によれば、インデックス生成装置10は、圧縮前ファイル51を構成する複数のレコードをファイル圧縮装置60に順次引き渡し、引き渡すレコードのインデックスを付与しインデックスファイル31に順次記憶する。次に、インデックス生成装置10は、ファイル圧縮装置60における圧縮処理状態を監視し、1ブロックの圧縮処理の終了を検知したことに応じて、圧縮後の1ブロックのブロックサイズをファイル圧縮装置60から取得し、取得した圧縮後の1ブロックのブロックサイズに基づいて、圧縮後の1ブロックの、圧縮後ファイル61の先頭からのブロック位置を算出し、インデックスファイル31にさらに記憶する。したがって、インデックス生成装置10は、圧縮後ファイル61から必要なレコードを読み出すために、圧縮のために引き渡すレコードのインデックスを順次記憶し、圧縮後の1ブロックの、圧縮後ファイル61の先頭からのブロック位置をさらに記憶して、圧縮後ファイル61を部分的に解凍するための情報を生成する。その結果、インデックス生成装置10は、圧縮後ファイル61から所定のレコードを読み出す際に、解凍すべきブロックを特定することができる情報を提供することができる。
【0060】
本実施形態2によれば、インデックス生成装置10は、引き渡すレコードを含む圧縮前ファイル51のブロックであって引き渡すレコードを含む圧縮後のブロックに対応する圧縮前ファイル51のブロックの先頭からの、引き渡すレコードのオフセットを算出して、レコードサイズと共に引き渡すレコードに関連付けてインデックスファイル31にさらに記憶する。したがって、インデックス生成装置10は、圧縮後ファイル61から必要なレコードを読み出すために、圧縮のために引き渡すレコードのインデックスを順次記憶し、圧縮後の1ブロックの、圧縮後ファイル61の先頭からのブロック位置を記憶し、圧縮前ファイル51のブロックの先頭からの、引き渡すレコードのレコードオフセットとレコードサイズとをさらに記憶して、圧縮後ファイル61の該当する1ブロックのうち必要なレコードまでを解凍するための情報を生成する。その結果、インデックス生成装置10は、圧縮後ファイル61から所定のレコードを読み出す際に、解凍すべきブロックと解凍すべきデータ量とを特定することができる情報を提供することができる。
【0061】
なお、本実施形態では、インデックス生成装置10として構成したが、この構成に限られない。例えば、ファイル圧縮装置60に組み込まれて、ファイル圧縮装置60のプログラムとのインターフェースに従い、インデックス生成装置10と同様の機能を実現させるコンピュータ・プログラムとして構成してもよい。
【0062】
以上、本発明の実施形態について説明したが、本発明は上述した実施形態に限るものではない。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態に記載されたものに限定されるものではない。
【符号の説明】
【0063】
10 インデックス生成装置
11 レコード引渡部
12 レコード情報取得部
13 圧縮処理状態監視部
14 ブロック情報取得部
31 インデックスファイル
51 圧縮前ファイル
61 圧縮後ファイル


【特許請求の範囲】
【請求項1】
ファイルをブロックごとに圧縮・解凍するファイル圧縮装置と通信可能なインデックス生成装置であって、
圧縮対象のファイルを構成する複数のレコードを前記ファイル圧縮装置に順次引き渡すレコード引渡手段と、
前記引き渡すレコードのインデックスを付与しインデックス記憶手段に順次記憶するレコード情報取得手段と、
前記ファイル圧縮装置における圧縮処理状態を監視し、1ブロックの圧縮処理の終了を検知する圧縮処理状態監視手段と、
前記圧縮処理状態監視手段が前記1ブロックの圧縮処理の終了を検知したことに応じて、圧縮後の前記1ブロックに係る情報を前記ファイル圧縮装置から取得して、取得した圧縮後の前記1ブロックに係る情報に基づいて、圧縮後の前記1ブロックを特定するための情報を生成して前記インデックス記憶手段にさらに記憶するブロック情報取得手段と、
を備えるインデックス生成装置。
【請求項2】
前記レコード情報取得手段は、前記引き渡すレコードのレコードサイズに基づいて、引き渡すレコードを含む圧縮前ファイルのブロックであって前記引き渡すレコードを含む圧縮後の1ブロックに対応する圧縮前ファイルのブロックの先頭からの、前記引き渡すレコードのオフセットを算出して、レコードサイズと共に前記引き渡すレコードに関連付けて前記インデックス記憶手段にさらに記憶する、請求項1に記載のインデックス生成装置。
【請求項3】
ファイルをブロックごとに圧縮・解凍するファイル圧縮装置と通信可能なインデックス生成装置が実行する方法であって、
圧縮対象のファイルを構成する複数のレコードを前記ファイル圧縮装置に順次引き渡すレコード引渡ステップと、
前記引き渡すレコードのインデックスを付与しインデックス記憶手段に順次記憶するレコード情報取得ステップと、
前記ファイル圧縮装置における圧縮処理状態を監視し、1ブロックの圧縮処理の終了を検知する圧縮処理状態監視ステップと、
前記圧縮処理状態監視ステップが前記1ブロックの圧縮処理の終了を検知したことに応じて、圧縮後の前記1ブロックに係る情報を前記ファイル圧縮装置から取得して、取得した圧縮後の前記1ブロックに係る情報に基づいて、圧縮後の前記1ブロックを特定するための情報を生成して前記インデックス記憶手段にさらに記憶するブロック情報取得ステップと、
を備える方法。



【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2012−141830(P2012−141830A)
【公開日】平成24年7月26日(2012.7.26)
【国際特許分類】
【出願番号】特願2010−294595(P2010−294595)
【出願日】平成22年12月29日(2010.12.29)
【出願人】(500257300)ヤフー株式会社 (1,128)
【Fターム(参考)】