(57)【要約】【課題】データ構造に含まれるオブジェクト単位の冗長性を考慮した圧縮処理及び直列化を行うことによりデータサイズを縮小する。【解決手段】データ保存装置１０は、一以上のレコードを直列化単位として決定する直列化単位決定部１４と、直列化単位に複数の同等なオブジェクトが存在する場合には、該同等なオブジェクト毎に、該オブジェクトのデータ長よりも短く且つ他のオブジェクトに割り当てた辞書ＩＤと重複しない辞書ＩＤを割り当て、該オブジェクト及び該辞書ＩＤを対応付けて格納した辞書テーブル１５Ａを生成する辞書テーブル生成部１５と、辞書テーブル１５Ａを参照して、直列化単位に含まれるオブジェクトを、対応する辞書ＩＤに置き換えることによりデータを圧縮する辞書式圧縮処理部１６と、直列化単位を直列化する直列化処理部１７とを備えることを特徴とする。【選択図】図１
2013257767.tif 000002
【特許請求の範囲】
【請求項１】
一又は複数のレコードからなるデータを保存するデータ保存装置であって、
一以上のレコードを直列化単位として決定する直列化単位決定部と、
前記直列化単位に複数の同等なオブジェクトが存在するか否かを判断し、複数の同等なオブジェクトが存在する場合には、該同等なオブジェクト毎に、該オブジェクトのデータ長よりも短く且つ他のオブジェクトに割り当てた辞書ＩＤと重複しない辞書ＩＤを割り当て、該オブジェクト及び該辞書ＩＤを対応付けて格納した辞書テーブルを生成する辞書テーブル生成部と、
前記辞書テーブルを参照して、前記直列化単位に含まれるオブジェクトを、対応する辞書ＩＤに置き換えることによりデータを圧縮する辞書式圧縮処理部と、
前記直列化単位を直列化する直列化処理部と、
を備えるデータ保存装置。
【請求項２】
前記辞書ＩＤがバイト単位に整列されている、請求項１に記載のデータ保存装置。
【請求項３】
前記辞書テーブル生成部が、子要素にオブジェクトを含まないオブジェクト同士については、各オブジェクトの型及び値が一致する場合に同等なオブジェクトであると判断する、請求項１又は２に記載のデータ保存装置。
【請求項４】
前記辞書テーブル生成部が、子要素にオブジェクトを含むオブジェクト同士については、各オブジェクトの子要素のオブジェクトの数、順序、型、及び値が全て一致する場合に同等なオブジェクトであると判断する、請求項１〜３の何れか１項に記載のデータ保存装置。
【請求項５】
前記辞書テーブル生成部が、子要素にオブジェクトを再帰的に含むオブジェクト同士については、各オブジェクトに再帰的に含まれるオブジェクトの全てが同等であると判断される場合に同等なオブジェクトであると判断する、請求項１〜４の何れか１項に記載のデータ保存装置。
【請求項６】
前記直列化単位決定部が、レコード数、又は、前記一以上のレコードに再帰的に含まれるオブジェクトの総数に基づいて直列化単位を決定する、請求項１〜５の何れか１項に記載のデータ保存装置。
【請求項７】
前記直列化処理部により直列化された、一の直列化単位又は直列化単位を複数連結したデータに対して従来のデータ圧縮を行う従来圧縮処理部をさらに備える、請求項１〜６の何れか１項に記載のデータ保存装置。
【請求項８】
一又は複数のレコードからなるデータを保存するデータ保存方法であって、
一以上のレコードを直列化単位として決定する直列化単位決定ステップと、
前記直列化単位に複数の同等なオブジェクトが存在するか否かを判断し、複数の同等なオブジェクトが存在する場合には、該同等なオブジェクト毎に、該オブジェクトのデータ長よりも短く且つ他のオブジェクトに割り当てた辞書ＩＤと重複しない辞書ＩＤを割り当て、該オブジェクト及び該辞書ＩＤを対応付けて格納した辞書テーブルを生成する辞書テーブル生成ステップと、
前記辞書テーブルを参照して、前記直列化単位に含まれるオブジェクトを、対応する辞書ＩＤに置き換えることによりデータを圧縮する辞書式圧縮処理ステップと、
前記直列化単位を直列化する直列化処理ステップと、
を含むデータ保存方法。
【請求項９】
一又は複数のレコードからなるデータを保存するデータ保存プログラムであって、
コンピュータを、
一以上のレコードを直列化単位として決定する直列化単位決定部と、
前記直列化単位に複数の同等なオブジェクトが存在するか否かを判断し、複数の同等なオブジェクトが存在する場合には、該同等なオブジェクト毎に、該オブジェクトのデータ長よりも短く且つ他のオブジェクトに割り当てた辞書ＩＤと重複しない辞書ＩＤを割り当て、該オブジェクト及び該辞書ＩＤを対応付けて格納した辞書テーブルを生成する辞書テーブル生成部と、
前記辞書テーブルを参照して、前記直列化単位に含まれるオブジェクトを、対応する辞書ＩＤに置き換えることによりデータを圧縮する辞書式圧縮処理部と、
前記直列化単位を直列化する直列化処理部、
として機能させるためのデータ保存プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ保存装置、及びデータ保存方法に関する。
【背景技術】
【０００２】
近年、ビッグデータというキーワードが注目を集め、多数のレコードからなる大量のデータを処理・保存する大規模データ処理システムが、至るところで開発・運用されている。そのようなシステムを構築するための基盤技術として、例えば、Google（登録商標）社が提唱するMapReduce技術や、そのオープンソース実装であるHadoopが、広く普及している。
【０００３】
大規模データ処理システムでは、大量のデータを保存する必要があるため、ストレージ容量を大量に消費する。そのため、個々のレコードのデータサイズを縮小することで、全体のデータサイズを縮小し、ストレージ容量の消費を抑える仕組みが要請される。そのための技術として、例えば、Sequence  File（下記非特許文献１参照）やProtocol  Buffers（下記非特許文献２参照）などの直列化・非直列化（シリアライズ／デシリアライズ）技術が知られている。
【０００４】
これらの従来の直列化・非直列化技術では、データをバイナリ形式等に直列化するため、テキスト形式よりもデータサイズを縮小できる。更に、バイナリ形式等に直列化したデータに対して、Gzipなどの従来圧縮技術を適用することで、更にデータサイズを縮小できる。
【０００５】
大規模データ処理システムでは目的に応じた様々な処理を行うことができ、処理の内容に応じて扱うデータの内容も様々である。例えば、何らかの科学技術計算（流体力学計算、天体シミュレーションなど）では、多数の実数値（Double型）オブジェクトを扱うが、データの内容によっては同じ値の実数値が何度も出現する場合もある。またライフログ（http://www.ntt.co.jp/cclab/special/vol_3/）では、ユーザ位置の測位結果である緯度及び経度（いずれもDouble型オブジェクト）の組を、時系列に並べたものを大量に保存するが、測位時間間隔及びユーザの行動パターンによっては、同じ緯度及び経度の組が何度も繰り返し出現する場合もある。
【０００６】
また企業等においては、日々の注文情報を、例えば顧客情報／商品名／単価／注文数の組として保存し、後々のマーケティング分析に利用する。このとき、同じ単価や販売数を表す整数値（Integer型）オブジェクトや、同姓同名の顧客名や都道府県名を表す文字列（String型）オブジェクトが繰り返し出現する場合がある。
【０００７】
このように、大規模データ処理システムが扱うデータには、オブジェクト単位の冗長性が非常に多く含まれる場合がある。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Tom  White著、“Hadoop:  The  Definitive  Guide”、O'Reilly  Media、２００９年５月発行、ｐ.１１１
【非特許文献２】Google、“Protocol  Buffers”、［ｏｎｌｉｎｅ］、インターネット＜ＵＲＬ：http://code.google.com/p/protobuf/＞
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、従来の方法は、データ構造に含まれるオブジェクト単位の冗長性を考慮した圧縮処理及び直列化を行っていない。そのため、従来の方法では、データ構造中にオブジェクト単位の冗長性があったとしても、その冗長性を利用したデータ圧縮を行うことによりデータサイズを縮小することができないという問題がある。
【００１０】
そこで、本発明は、データ構造に含まれるオブジェクト単位の冗長性を考慮した圧縮処理及び直列化を行うことによりデータサイズを縮小することを目的とする。
【課題を解決するための手段】
【００１１】
本発明に係るデータ保存装置は、一又は複数のレコードからなるデータを保存するデータ保存装置であって、一以上のレコードを直列化単位として決定する直列化単位決定部と、直列化単位に複数の同等なオブジェクトが存在するか否かを判断し、複数の同等なオブジェクトが存在する場合には、該同等なオブジェクト毎に、該オブジェクトのデータ長よりも短く且つ他のオブジェクトに割り当てた辞書ＩＤと重複しない辞書ＩＤを割り当て、該オブジェクト及び該辞書ＩＤを対応付けて格納した辞書テーブルを生成する辞書テーブル生成部と、前記辞書テーブルを参照して、直列化単位に含まれるオブジェクトを、対応する辞書ＩＤに置き換えることによりデータを圧縮する辞書式圧縮処理部と、直列化単位を直列化する直列化処理部とを備える。
【００１２】
本発明に係るデータ保存方法は、一又は複数のレコードからなるデータを保存するデータ保存方法であって、一以上のレコードを直列化単位として決定する直列化単位決定ステップと、直列化単位に複数の同等なオブジェクトが存在するか否かを判断し、複数の同等なオブジェクトが存在する場合には、該同等なオブジェクト毎に、該オブジェクトのデータ長よりも短く且つ他のオブジェクトに割り当てた辞書ＩＤと重複しない辞書ＩＤを割り当て、該オブジェクト及び該辞書ＩＤを対応付けて格納した辞書テーブルを生成する辞書テーブル生成ステップと、辞書テーブルを参照して、直列化単位に含まれるオブジェクトを、対応する辞書ＩＤに置き換えることによりデータを圧縮する辞書式圧縮処理ステップと、直列化単位を直列化する直列化処理ステップとを含む。
【００１３】
本発明に係るデータ保存プログラムは、一又は複数のレコードからなるデータを保存するデータ保存プログラムであって、コンピュータを、一以上のレコードを直列化単位として決定する直列化単位決定部と、直列化単位に複数の同等なオブジェクトが存在するか否かを判断し、複数の同等なオブジェクトが存在する場合には、該同等なオブジェクト毎に、該オブジェクトのデータ長よりも短く且つ他のオブジェクトに割り当てた辞書ＩＤと重複しない辞書ＩＤを割り当て、該オブジェクト及び該辞書ＩＤを対応付けて格納した辞書テーブルを生成する辞書テーブル生成部と、辞書テーブルを参照して、直列化単位に含まれるオブジェクトを、対応する辞書ＩＤに置き換えることによりデータを圧縮する辞書式圧縮処理部と、直列化単位を直列化する直列化処理部、として機能させる。
【００１４】
このような形態によれば、一以上のレコードからなる直列化単位を決定し、該直列化単位について、同等なオブジェクト毎にオブジェクトのデータ長よりも短いユニークな辞書ＩＤを割り当てることができる。その後、直列化単位に含まれるオブジェクトを対応する辞書ＩＤに置き換えることによりデータを圧縮し、直列化処理を行うことができる。このように、データ構造に含まれるオブジェクト単位の冗長性を考慮した圧縮処理及び直列化を行うことにより、データサイズを縮小することができる。
【００１５】
上記のデータ保存装置では、更に、辞書ＩＤがバイト単位に整列されていてもよい。このように、辞書ＩＤが昇順又は降順に整列されていることにより、辞書式圧縮処理部は辞書ＩＤがバイト単位に整列されていない場合よりも速く辞書テーブルにアクセスすることができる。
【００１６】
上記のデータ保存装置では、更に、辞書テーブル生成部が、子要素にオブジェクトを含まないオブジェクト同士について、各オブジェクトの型及び値が一致する場合に同等なオブジェクトであると判断してもよい。これにより、辞書テーブル生成部は、子要素にオブジェクトを含まないオブジェクト同士の同等性を判断し、同等なオブジェクトに対して同値の辞書ＩＤを割り当てることができる。
【００１７】
上記のデータ保存装置では、更に、辞書テーブル生成部が、子要素にオブジェクトを含むオブジェクト同士について、各オブジェクトの子要素のオブジェクトの数、順序、型、及び値が全て一致する場合に同等なオブジェクトであると判断してもよい。これにより、辞書テーブル生成部は、子要素にオブジェクトを含むオブジェクト同士の同等性を判断し、同等なオブジェクトに対して同値の辞書ＩＤを割り当てることができる。
【００１８】
上記のデータ保存装置では、更に、辞書テーブル生成部が、子要素にオブジェクトを再帰的に含むオブジェクト同士については、各オブジェクトに再帰的に含まれるオブジェクトの全てが同等であると判断される場合に同等なオブジェクトであると判断してもよい。これにより、辞書テーブル生成部は、子要素にオブジェクトを再帰的に含むオブジェクト同士の同等性を判断し、同等なオブジェクトに対して同値の辞書ＩＤを割り当てることができる。
【００１９】
上記のデータ保存装置では、更に、直列化単位決定部が、レコード数、又は、前記一以上のレコードに再帰的に含まれるオブジェクトの総数に基づいて直列化単位を決定してもよい。これにより、直列化単位決定部は、処理するレコード数やデータに含まれるオブジェクト数などに基づいて、圧縮効率の観点等から適切な大きさの直列化単位を決定することができる。
【００２０】
上記のデータ保存装置では、直列化処理部により直列化された、一の直列化単位又は直列化単位を複数連結したデータに対して従来のデータ圧縮を行う従来圧縮処理部をさらに備えてもよい。これにより、データ保存装置は、オブジェクトの冗長性を利用した辞書式圧縮を行うとともに、辞書ＩＤの冗長性を利用した従来の圧縮を行うことができ、データの圧縮効率を高めることが期待できる。また、複数の直列化単位を連結して冗長性を増やした上で、従来の圧縮を行うことにより、データの圧縮効率をさらに高めることが期待できる。
【発明の効果】
【００２１】
本発明によれば、データ構造に含まれるオブジェクト単位の冗長性を考慮した圧縮処理及び直列化を行うことにより、データサイズを縮小することができる。
【図面の簡単な説明】
【００２２】
【図１】実施形態に係るデータ保存装置の機能構成を示すブロック図である。
【図２】実施形態に係るデータ保存装置のハードウェア構成を示す図である。
【図３】図１に示すデータ保存装置の動作を示すフロー図である。
【図４】第１の例に係る辞書式圧縮の説明のために用いる図である。
【図５】第１の例に係る辞書テーブルを示す図である。
【図６】第２の例に係る辞書式圧縮の説明のために用いる図である。
【図７】第２の例に係る辞書テーブルを示す図である。
【図８】第３の例に係る辞書式圧縮の説明のために用いる図である。
【図９】第３の例に係る辞書テーブルを示す図である。
【図１０】実施形態に係るデータ保存プログラムの機能構成を示すブロック図である。
【発明を実施するための形態】
【００２３】
以下、添付図面を参照しながら本発明の実施形態を詳細に説明する。なお、図面の説明において同一又は同等の要素には同一の符号を付し、重複する説明を省略する。
【００２４】
まず、実施形態に係るデータ保存装置１０の機能要素について、図１を用いて説明する。データ保存装置１０は、データ保存部１１、データ読込部１２、レコード処理部１３、直列化単位決定部１４、辞書テーブル生成部１５、辞書式圧縮処理部１６、直列化処理部１７、従来圧縮処理部１８、データ書込部１９を備える。
【００２５】
次に、データ保存装置１０のハードウェア構成を図２に示す。図２に示すように、データ保存装置１０は、オペレーティングシステムやアプリケーションプログラムなどを実行するＣＰＵ１０１と、ＲＯＭ及びＲＡＭで構成される主記憶部１０２と、ハードディスクメモリなどで構成される補助記憶部１０３と、データ通信を行う通信制御部１０４と、液晶モニタなどで構成される出力部１０５と、入力デバイスであるキーボード及びマウス等で構成される操作部１０６と、ＣＤ−ＲＯＭやＤＶＤなどの記録媒体１０７を読み取る記録媒体読取部１０８とを備える。
【００２６】
図１に示すデータ保存装置１０の各機能は、ＣＰＵ１０１の制御の下で、主記憶部１０２に所定のソフトウェアプログラムを読み込ませて実行することにより実現される。その際、ＣＰＵ１０１は、ソフトウェアプログラムの処理手順に従い、主記憶部１０２及び補助記憶部１０３におけるデータの読み出し及び書き込み動作を制御し、操作部１０６、出力部１０５及び通信制御部１０４の動作を制御する。
【００２７】
図１に示すデータ保存装置１０の各機能の概要について、データの流れに沿って説明する。
【００２８】
データ保存部１１は、大規模データ処理システムにおいて扱うデータを保存する機能要素である。データ読込部１２は、データ保存部１１に記憶されたデータを読み込む機能要素である。レコード処理部１３は、データ読込部１２が読み込んだデータを受け取り、当該データに含まれる個々のレコードを処理する機能要素である。
【００２９】
直列化単位決定部１４は、レコード処理部１３が処理したレコードを何件まとめたものを直列化単位とするかを決定する機能要素である。直列化単位決定部１４は、予め指定された、レコード数又は一以上のレコードに再帰的に含まれるオブジェクトの総数が所定の範囲にあるか又は所定の数以上であるか等の判断基準に基づいて、直列化単位を決定してもよい。ただし、直列化単位を決定する方法は、これに限定されない。
【００３０】
辞書テーブル生成部１５は、直列化単位決定部１４が決定した直列化単位について、当該直列化単位に含まれる同等なオブジェクト毎にユニークな辞書ＩＤを割り当てることで、オブジェクト毎の辞書テーブル１５Ａを生成する機能要素である。ここで、辞書テーブル１５Ａは直列化単位毎に生成されるため、辞書テーブル生成部１５は、直列化単位間で、型や値等が異なる互いに同等でないオブジェクトに対して、同一の辞書ＩＤを割り当てることができる。これにより、直列化単位を連結した際に、直列化単位に跨る冗長性が発生する。
【００３１】
辞書式圧縮処理部１６は、辞書テーブル１５Ａを参照して、直列化単位に対して辞書式圧縮を行う機能要素である。具体的には、辞書式圧縮処理部１６は、直列化単位に含まれるオブジェクトを、対応する辞書ＩＤに置き換えることによりデータを圧縮する。ここで、後述する直列化処理がされた直列化単位（以下、「直列化結果」という。）から元のデータを復元するには、直列化結果を直列化前の状態に戻した上で（以下、直列化結果を直列化前の状態に戻すことを「非直列化する」という。）、辞書ＩＤに置き換えられているオブジェクトを元のオブジェクトに戻す必要がある。そのための方法として、辞書テーブル１５Ａを直列化結果に含める方法がある。具体的には、直列化結果をヘッダ部とボディ部とで構成し、ヘッダ部に当該直列化単位に対応する辞書テーブル１５Ａを直列化して格納し、ボディ部に辞書式圧縮がされたデータを直列化して格納する方法が考えられる。ただし、辞書テーブル１５Ａを直列化結果に含める方法はこれに限定されない。また、辞書ＩＤに置き換えられているオブジェクトを元のオブジェクトに戻す方法についても、上記に述べた方法に限定されるものではない。
【００３２】
直列化処理部１７は、辞書式圧縮された直列化単位をバイナリ形式等に直列化する機能要素である。
【００３３】
従来圧縮処理部１８は、直列化された、一の直列化単位又は直列化結果を複数連結したデータに対してGzip等の従来圧縮を行う機能要素である。これにより、辞書ＩＤの冗長性を利用してデータサイズを縮小できる。上述したように、辞書テーブル１５Ａは直列化単位毎に生成されるため、直列化単位間で、型や値が異なるオブジェクトに対して同一の辞書ＩＤを割り当てることができる。このように複数の直列化単位に対して同一の辞書ＩＤを用いることにより、直列化結果を連結したデータに、直列化結果に跨る冗長性を持たせることができる。従って、直列化結果を複数連結したデータに対して従来の圧縮を行うことにより、当該冗長性を利用してデータサイズを更に縮小できる。なお、直列化結果を連結する際には、後で非直列化することにより個々の直列化結果を取り出せるように、何らかの目印（セパレータ）を設ける必要がある。このような処理については、Hadoop等の従来の大規模データ処理基板技術において実装されている機能を用いてもよい。
【００３４】
データ書込部１９は、従来圧縮処理が行われた後の一の直列化結果又は複数の連結した直列化結果を、データ保存部１１に保存する機能要素である。
【００３５】
次に、図３〜図９を用いて、データ保存装置１０の動作を説明するとともに、辞書テーブル生成及び辞書式圧縮処理の詳細について説明する。
【００３６】
データ保存装置１０の処理の流れを図３に示す。レコード処理部１３は、データ読込部１２を介してデータ保存部１１からレコードを１件読み込み（ステップＳ１）、当該レコードを処理する（ステップＳ２）。直列化単位決定部１４は、処理されたレコードの数又は処理された一以上のレコードに再帰的に含まれるオブジェクト総数が所定の数以上であるか否かに基づいて、直列化単位の基準を満たすか否かを判定する（ステップＳ３、直列化単位決定ステップ）。直列化単位の基準を満たしていない場合（ステップＳ３；ＮＯ）は、次のレコードを読み込み、直列化単位の基準を満たしている場合（ステップＳ３；ＹＥＳ）は、それまでに処理されたレコードを直列化単位として決定する（ステップＳ４、直列化単位決定ステップ）。
【００３７】
辞書テーブル生成部１５は、直列化単位に含まれるオブジェクト同士を比較し、複数の同等なオブジェクトが存在するか否かを判断し、複数の同等なオブジェクトが存在する場合には、当該同等なオブジェクト毎に当該オブジェクトのデータ長よりも短く且つユニークな辞書ＩＤを割り当て、当該オブジェクト及び当該辞書ＩＤを対応付けて格納した辞書テーブル１５Ａを生成する（ステップＳ５、辞書テーブル生成ステップ）。その後、辞書式圧縮処理部１６は、当該辞書テーブル１５Ａを参照して、直列化単位に含まれるオブジェクトを、対応する辞書ＩＤに置き換えることによりデータを圧縮する（ステップＳ６、辞書式圧縮処理ステップ）。
【００３８】
ここで、オブジェクトの同等性判断、辞書テーブル生成及び辞書式圧縮処理の詳細について説明する。
【００３９】
［第１の例］
まず、図４及び図５を用いて、子要素にオブジェクトを含まないオブジェクト（以下、子要素にオブジェクトを含まないオブジェクトを「単純オブジェクト」という。）同士の同等性判断、辞書テーブル生成及び辞書式圧縮処理について説明する。ここで、直列化単位は「１レコード」とし、オブジェクトに割り当てられる辞書ＩＤの長さはすべて「１バイト長」であるとする。
【００４０】
辞書テーブル生成部１５は、単純オブジェクト同士については、オブジェクトの型及び値が一致する場合に同等なオブジェクトであると判断する。例えば、図４（ａ）において、レコード４０１には、値が「１．２３４」である８バイト長の実数値（Double型）オブジェクトが３つ含まれる。これらのオブジェクト同士は型（Double型）及び値（「１．２３４」）が一致するため、同等なオブジェクトであると判断される。従って、辞書テーブル生成部１５は、当該オブジェクトに対して同一の辞書ＩＤ（ＩＤ１）を割り当てる（図５（ａ）参照）。レコード４０２及びレコード４０３についても同様である（図５（ｂ）、（ｃ）参照）。
【００４１】
図４（ｂ）は、辞書式圧縮処理部１６が各辞書テーブル１５Ａ（図５）を参照して、図４（ａ）に示す各レコードに対して辞書式圧縮処理を行った後の状態の各レコードを示す。例えばレコード４０１については、辞書式圧縮処理部１６が、８バイト長の実数型オブジェクト「１．２３４」を１バイト長の辞書ＩＤ（ＩＤ１）に置き換えたことにより、オブジェクト１つにつき７バイト長のデータ量を縮小できる。また、この例においては、異なる直列化単位である各レコードに対して、同一の辞書ＩＤ（ＩＤ１）を割り当てている。これにより、直列化単位を跨いで冗長性を持たせることができる。
【００４２】
［第２の例］
次に、図６及び図７を用いて、子要素にオブジェクトを含むオブジェクト（以下、子要素にオブジェクトを含むオブジェクトを「コンテナオブジェクト」という。）同士の同等性判断、辞書テーブル生成及び辞書式圧縮処理について説明する。ここでも、直列化単位は「１レコード」とし、オブジェクトに割り当てられる辞書ＩＤの長さはすべて「１バイト長」であるとする。
【００４３】
辞書テーブル生成部１５は、コンテナオブジェクト同士については、コンテナオブジェクトの子要素のオブジェクトの数、順序、型、及び値が全て一致する場合に同等なオブジェクトであると判断する。例えば、図６（ａ）において、レコード６０１及び６０２は、緯度・経度の組に見立てた２つの実数（Double）型オブジェクトを４つ並べて１つのレコードを形成したものである。ここで、レコード６０１は、オブジェクト「（３４．１２３，１３０．２３４）」を２つ含む。これらのオブジェクト同士は、子要素のオブジェクト（「３４．１２３」と「１３０．２３４」）の数、順序、型、及び値が全て一致する。従って、辞書テーブル生成部１５は、当該オブジェクトに対して同一の辞書ＩＤ（ＩＤ１）を割り当てる（図７（ａ）参照）。レコード６０２についても同様である（図７（ｂ）参照）。
【００４４】
図６（ｂ）は、辞書式圧縮処理部１６が各辞書テーブル１５Ａ（図７）を参照して、図６（ａ）に示す各レコードに対して辞書式圧縮を行った後の状態の各レコードを示す。例えばレコード６０１については、辞書式圧縮処理部１６が、８バイト長の実数型オブジェクトを２つ含むため少なくとも１６バイト長以上であるオブジェクト「（３４．１２３，１３０．２３４）」を１バイト長の辞書ＩＤ（ＩＤ１）に置き換えたことにより、オブジェクト１つにつき１５バイト長以上のデータ量を縮小できる。これにより、図４に示す場合よりも効率的にデータサイズを縮小できる。また、この例においても、異なる直列化単位である各レコードに対して、同一の辞書ＩＤ（ＩＤ１）を割り当てている。これにより、直列化単位を跨いで冗長性を持たせることができる。
【００４５】
［第３の例］
次に、図８及び図９を用いて、複数のレコードを直列化単位とする場合における辞書テーブル生成及び辞書式圧縮処理について説明する。ここでは、直列化単位は「４レコード」とし、オブジェクトに割り当てられる辞書ＩＤの長さはすべて「１バイト長」であるとする。
【００４６】
辞書テーブル生成部１５は、図８（ａ）に示す４レコード（レコード８０１〜８０４）からなる直列化単位に対して、同等なオブジェクトが含まれるか否かを判定する。ここで、当該直列化単位は、１レコードに相当するデータを示すオブジェクト「（１．２３４，２．３４５，３．４５６，４．５６７）」を２つ含む。辞書テーブル生成部１５は、これらのオブジェクト同士は同等であると判断し、当該オブジェクトに対して同一の辞書ＩＤ（ＩＤ１）を割り当てる（図９）。さらに、残りのレコード８０２及び８０４に含まれる冗長なオブジェクト（「１．２３４」、「２．３４５」、「３．４５６」）についても、辞書テーブル生成部１５は、これらのオブジェクトに対して辞書ＩＤ（ＩＤ２、ＩＤ３、ＩＤ４）を割り当てる。
【００４７】
図８（ｂ）は、辞書式圧縮処理部１６が辞書テーブル１５Ａ（図９）を参照して、図８（ａ）に示す直列化単位（レコード８０１〜８０４）に対して辞書式圧縮を行った後の状態の各レコードを示す。辞書式圧縮処理部１６が、８バイト長の実数型オブジェクトを４つ含む少なくとも３２バイト長以上のオブジェクト「（１．２３４，２．３４５，３．４５６，４．５６７）」を１バイト長の辞書ＩＤ（ＩＤ１）に置き換えたことにより、オブジェクト１つにつき少なくとも１３１バイト長のデータ量を縮小できる。これにより、図４及び図６に示す場合よりもさらに効率的にデータサイズを縮小できる。
【００４８】
再び図３の説明に戻る。直列化処理部１７は、辞書式圧縮された直列化単位を直列化する（ステップＳ７、直列化処理ステップ）。従来圧縮処理部１８は、直列化された、一の直列化単位又は直列化単位を複数連結したデータに対してGzip等の従来の圧縮処理を行う（ステップＳ８、従来圧縮処理ステップ）。これにより、辞書ＩＤの冗長性を利用してデータサイズを縮小できる。また、複数の直列化単位を連結した上で、従来の圧縮処理を行うことにより、直列化単位に跨って存在する冗長性を利用して、データサイズを更に縮小できる。データ書込部１９は、辞書式圧縮処理、直列化処理、及び従来圧縮処理を経てデータサイズが縮小されたデータをデータ保存部１１に保存する（ステップＳ９）。その後、データ保存装置１０は、入力レコードが残っているか否かを判定し（ステップＳ１０）、入力レコードが残っている場合（ステップＳ１０；ＹＥＳ）は、ステップＳ１に戻って次のレコードを読み込み、入力レコードが残っていない場合（ステップＳ１０；ＮＯ）は、処理を終了する。
【００４９】
次に、図１０を用いて、コンピュータをデータ保存装置１０として機能させるためのデータ保存プログラムＰ１０について説明する。
【００５０】
図１０は、データ保存方法を実行することができるデータ保存プログラムＰ１０のモジュールを示すブロック図である。図１０に示すように、データ保存プログラムＰ１０は、直列化単位決定モジュールＰ１４、辞書テーブル生成モジュールＰ１５、辞書式圧縮処理モジュールＰ１６及び直列化処理モジュールＰ１７を備えている。上記各モジュールが実行されることにより実現される機能は、上述したデータ保存装置１０における対応する構成部の機能と同じである。すなわち、直列化単位決定モジュールＰ１４、辞書テーブル生成モジュールＰ１５、辞書式圧縮処理モジュールＰ１６及び直列化処理モジュールＰ１７の機能はそれぞれ、直列化単位決定部１４、辞書テーブル生成部１５、辞書式圧縮処理部１６及び直列化処理部１７の機能と同様である。
【００５１】
このように構成されたデータ保存プログラムＰ１０は、図２に示す記録媒体１０７に記憶され、データ保存装置１０として用いられるコンピュータにより実行される。当該コンピュータは、記録媒体１０７が記録媒体読取装置１０８に挿入されると、記録媒体読取装置１０８から記録媒体１０７に格納されたデータ保存プログラムＰ１０にアクセス可能となり、当該データ保存プログラムＰ１０を実行することによって、本実施形態に係るデータ保存装置１０として動作することが可能となる。
【００５２】
データ保存プログラムＰ１０は、搬送波に重畳されたコンピュータデータ信号としてネットワークを介して提供されるものであってもよい。この場合、データ保存装置１０として用いられるコンピュータは、通信制御部１０４によって受信したデータ保存プログラムＰ１０を主記憶部１０２に格納することにより、当該データ保存プログラムＰ１０を実行することができる。
【００５３】
以上説明したように、本実施形態によれば、直列化単位にオブジェクト単位の冗長性が含まれる場合に、オブジェクト単位の辞書式圧縮処理により、直列化単位のデータサイズを縮小できる。また、一の直列化単位に含まれる辞書ＩＤには冗長性が含まれ得る。さらに、辞書テーブルは直列化単位毎に生成されるので、直列化単位間で、型や値が異なるオブジェクトに対して同一の辞書ＩＤを割り当てることができ、直列化単位を跨いで冗長性を持たせることができる。従って、一の直列化単位又は直列化単位を複数連結したデータに対して従来の圧縮処理を行うことにより、これらの冗長性を利用してデータサイズをさらに縮小できる。また、直列化単位は一以上のレコードから任意に決定することができるため、直列化単位を複数のレコードから構成し、適切な大きさとすることにより、直列化単位に含まれるオブジェクト単位の冗長性を増やすことができ、辞書式圧縮処理による圧縮効率を高めることができる。
【００５４】
以上、本発明に係る実施形態について詳細に説明した。しかし、本発明は、上記実施形態に限定されるものではない。本発明は、その要旨を逸脱しない範囲において様々な変形が可能である。
【符号の説明】
【００５５】
１０…データ保存装置、１１…データ保存部、１２…データ読込部、１３…レコード処理部、１４…直列化単位決定部、１５…辞書テーブル生成部、１５Ａ…辞書テーブル、１６…辞書式圧縮処理部、１７…直列化処理部、１８…従来圧縮処理部、１９…データ書込部、Ｐ１０…データ保存プログラム、Ｐ１４…直列化単位決定モジュール、Ｐ１５…辞書テーブル生成モジュール、Ｐ１６…辞書式圧縮処理モジュール、Ｐ１７…直列化処理モジュール。
【図１】
2013257767.tif 000003
【図２】
2013257767.tif 000004
【図３】
2013257767.tif 000005
【図４】
2013257767.tif 000006
【図５】
2013257767.tif 000007
【図６】
2013257767.tif 000008
【図７】
2013257767.tif 000009
【図８】
2013257767.tif 000010
【図９】
2013257767.tif 000011
【図１０】
2013257767.tif 000012