(57)【特許請求の範囲】
【請求項１】
クエリをコンパイルする場合にシリアライザ及び／又はデシリアライザを生成する装置で実行することが可能な方法において、
前記装置は、
前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する第一のステップと、
推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する第二のステップと、
前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする第三のステップと
を含み、
前記第一のステップは、
前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行するステップと、
推論された型とシリアライズに用いられる型とを再帰的に比較するステップと
を含む方法。
【請求項２】
前記第二のステップは、
オプショナル領域を有するレコード型のシリアライザを生成する場合、
第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃで要求済みであると判断したときには、ビット‘１’を出力するコードを生成するステップと、
第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃに存在しないと判断したときには、ビット‘０’を出力するコードを生成するステップと、
第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃでもオプショナル領域であるときには、データ値が存在すればビット‘１’を出力するコードを、存在しなければビット‘０’を出力するコードを、それぞれ生成するステップと
を含む請求項１に記載の方法。
【請求項３】
前記第二のステップは、
第一の型をＴ０乃至Ｔｎ（ｎは自然数）の複数の型から選択する選択型のシリアライザを生成する場合、
第二の型Ｔｃが、選択された第一の型Ｔｉ（ｉは１〜ｎのいずれか）のみのサブタイプであると判断したときには、数値‘ｉ’を出力するコードを生成するステップと、
第二の型Ｔｃと選択された第一の型Ｔｉとに基づいて、データ値をシリアライズするコードを生成するステップと
を含む請求項１に記載の方法。
【請求項４】
クエリをコンパイルする場合にシリアライザ及び／又はデシリアライザを生成する装置において、
前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する型推論手段と、
推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する特化手段と、
前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする手段と
を備え、
前記型推論手段は、
前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行する手段と、
推論された型とシリアライズに用いられる型とを再帰的に比較する手段と
を備える装置。
【請求項５】
前記特化手段は、
オプショナル領域を有するレコード型のシリアライザを生成する場合、
第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃで要求済みであると判断したときには、ビット‘１’を出力するコードを生成する手段と、
第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃに存在しないと判断したときには、ビット‘０’を出力するコードを生成する手段と、
第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃでもオプショナル領域であるときには、データ値が存在すればビット‘１’を出力するコードを、存在しなければビット‘０’を出力するコードを、それぞれ生成する手段と
を備える請求項４に記載の装置。
【請求項６】
前記特化手段は、
第一の型をＴ０乃至Ｔｎ（ｎは自然数）の複数の型から選択する選択型のシリアライザを生成する場合、
第二の型Ｔｃが、選択された第一の型Ｔｉ（ｉは１〜ｎのいずれか）のみのサブタイプであると判断したときには、数値‘ｉ’を出力するコードを生成する手段と、
第二の型Ｔｃと選択された第一の型Ｔｉとに基づいて、データ値をシリアライズするコードを生成する手段と
を備える請求項４に記載の装置。
【請求項７】
クエリをコンパイルする場合にシリアライザ及び／又はデシリアライザを生成する装置で実行することが可能なコンピュータプログラムにおいて、
前記装置を、
前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する型推論手段、
推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する特化手段、及び
前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする手段
として機能させ、
前記型推論手段を、
前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行する手段、及び
推論された型とシリアライズに用いられる型とを再帰的に比較する手段
として機能させるコンピュータプログラム。
【請求項８】
前記特化手段を、
オプショナル領域を有するレコード型のシリアライザを生成する場合、
第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃで要求済みであると判断したときには、ビット‘１’を出力するコードを生成する手段、
第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃに存在しないと判断したときには、ビット‘０’を出力するコードを生成する手段、及び
第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃでもオプショナル領域であるときには、データ値が存在すればビット‘１’を出力するコードを、存在しなければビット‘０’を出力するコードを、それぞれ生成する手段
として機能させる請求項７に記載のコンピュータプログラム。
【請求項９】
前記特化手段を、
第一の型をＴ０乃至Ｔｎ（ｎは自然数）の複数の型から選択する選択型のシリアライザを生成する場合、
第二の型Ｔｃが、選択された第一の型Ｔｉ（ｉは１〜ｎのいずれか）のみのサブタイプであると判断したときには、数値‘ｉ’を出力するコードを生成する手段、及び
第二の型Ｔｃと選択された第一の型Ｔｉとに基づいて、データ値をシリアライズするコードを生成する手段
として機能させる請求項７に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生成サイトごとにシリアライズの型推論を行い、生成サイトごとにシリアライザを特化する方法、装置及びコンピュータプログラムに関する。
【背景技術】
【０００２】
昨今のインターネット環境の普及、あるいは各種コンピュータの演算処理速度の向上等に伴い、大容量のデジタルデータであるビッグデータが注目されている。ビッグデータは、単に大容量であるだけでなく、非定型であり、しかもリアルタイム性が高い。従来のデータベース管理システムでは、データを定型化して蓄積し、その後で処理分析するため、従来のデータベースとは相反する性質を持つビッグデータを扱うことは困難とされていた。
【０００３】
ＪＳＯＮのような半構造データを扱うＮｏＳＱＬ言語、例えばＪａｑｌ等を利用してデータ解析する場合、大量のデータ通信による入出力コストがボトルネックとなり、適正なレスポンスを得ることができない。そこで、型（スキーマ）を用いてデータ処理を統一化するとともに、データを圧縮することによりデータサイズを小さくしてから解析する等、様々な工夫がなされている。
【０００４】
例えば特許文献１乃至８には、大容量のデジタルデータを処理する場合にシリアライズ及び／又はデシリアライズを実行する技術が開示されている。特許文献１乃至８に開示されているシリアライズ及び／又はデシリアライズは、型と値とを確認しつつ、動的に実行するものがほとんどである。
【０００５】
また、特許文献９、１０には、型（スキーマ）を推定する型推論を用いるシステムが開示されている。例えば値と名前（識別子）とを有するレコードの型を推論することにより、ビッグデータを実際に取り扱うことができるデータにデシリアライズすることができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−１２２７３０号公報
【特許文献２】特開２００３−１２２７７３号公報
【特許文献３】特開２００３−２４９９６１号公報
【特許文献４】特開２００５−０５６０８５号公報
【特許文献５】特開２００５−１５７７１８号公報
【特許文献６】特開２００５−２０９０４８号公報
【特許文献７】特表２００７−５２２５５８号公報
【特許文献８】国際公開第２０１１／１１１５３２号
【特許文献９】特表２００７−５１９０７８号公報
【特許文献１０】特開２０１０−２３７８６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、動的に型と値とを確認しながらシリアライズ及び／又はデシリアライズを実行する場合、演算処理負荷が過大となるおそれがあるという問題点があった。例えば、クエリをコンパイルする場合、クエリ中の制御フローの合流により汎化された型が推論されるが、このとき、既存のシリアライザを用いるのでは、型と値とを確認する手間及びコストが膨大となる。
【０００８】
本発明は斯かる事情に鑑みてなされたものであり、生成サイトごとにシリアライズの型推論を行い、生成サイトごとにシリアライザを特化する方法、装置及びコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために第１発明に係る方法は、クエリをコンパイルする場合にシリアライザ及び／又はデシリアライザを生成する装置で実行することが可能な方法において、前記装置は、前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する第一のステップと、推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する第二のステップと、前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする第三のステップとを含み、前記第一のステップは、前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行するステップと、推論された型とシリアライズに用いられる型とを再帰的に比較するステップとを含む。
【００１１】
また、第２発明に係る方法は、第１発明において、前記第二のステップは、オプショナル領域を有するレコード型のシリアライザを生成する場合、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃで要求済みであると判断したときには、ビット‘１’を出力するコードを生成するステップと、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃに存在しないと判断したときには、ビット‘０’を出力するコードを生成するステップと、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃでもオプショナル領域であるときには、データ値が存在すればビット‘１’を出力するコードを、存在しなければビット‘０’を出力するコードを、それぞれ生成するステップとを含む。
【００１２】
また、第３発明に係る方法は、第１発明において、前記第二のステップは、第一の型をＴ０乃至Ｔｎ（ｎは自然数）の複数の型から選択する選択型のシリアライザを生成する場合、第二の型Ｔｃが、選択された第一の型Ｔｉ（ｉは１〜ｎのいずれか）のみのサブタイプであると判断したときには、数値‘ｉ’を出力するコードを生成するステップと、第二の型Ｔｃと選択された第一の型Ｔｉとに基づいて、データ値をシリアライズするコードを生成するステップとを含む。
【００１３】
次に、上記目的を達成するために第４発明に係る装置は、クエリをコンパイルする場合にシリアライザ及び／又はデシリアライザを生成する装置において、前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する型推論手段と、推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する特化手段と、前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする手段とを備え、前記型推論手段は、前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行する手段と、推論された型とシリアライズに用いられる型とを再帰的に比較する手段とを備える。
【００１５】
また、第５発明に係る装置は、第４発明において、前記特化手段は、オプショナル領域を有するレコード型のシリアライザを生成する場合、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃで要求済みであると判断したときには、ビット‘１’を出力するコードを生成する手段と、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃに存在しないと判断したときには、ビット‘０’を出力するコードを生成する手段と、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃでもオプショナル領域であるときには、データ値が存在すればビット‘１’を出力するコードを、存在しなければビット‘０’を出力するコードを、それぞれ生成する手段とを備える。
【００１６】
また、第６発明に係る装置は、第４発明において、前記特化手段は、第一の型をＴ０乃至Ｔｎ（ｎは自然数）の複数の型から選択する選択型のシリアライザを生成する場合、第二の型Ｔｃが、選択された第一の型Ｔｉ（ｉは１〜ｎのいずれか）のみのサブタイプであると判断したときには、数値‘ｉ’を出力するコードを生成する手段と、第二の型Ｔｃと選択された第一の型Ｔｉとに基づいて、データ値をシリアライズするコードを生成する手段とを備える。
【００１７】
次に、上記目的を達成するために第７発明に係るコンピュータプログラムは、クエリをコンパイルする場合にシリアライザ及び／又はデシリアライザを生成する装置で実行することが可能なコンピュータプログラムにおいて、前記装置を、前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する型推論手段、推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する特化手段、及び前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする手段として機能させ、前記型推論手段を、前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行する手段、及び推論された型とシリアライズに用いられる型とを再帰的に比較する手段として機能させる。
【００１９】
また、第８発明に係るコンピュータプログラムは、第７発明において、前記特化手段を、オプショナル領域を有するレコード型のシリアライザを生成する場合、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃで要求済みであると判断したときには、ビット‘１’を出力するコードを生成する手段、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃに存在しないと判断したときには、ビット‘０’を出力するコードを生成する手段、及び第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃでもオプショナル領域であるときには、データ値が存在すればビット‘１’を出力するコードを、存在しなければビット‘０’を出力するコードを、それぞれ生成する手段として機能させる。
【００２０】
また、第９発明に係るコンピュータプログラムは、第７発明において、前記特化手段を、第一の型をＴ０乃至Ｔｎ（ｎは自然数）の複数の型から選択する選択型のシリアライザを生成する場合、第二の型Ｔｃが、選択された第一の型Ｔｉ（ｉは１〜ｎのいずれか）のみのサブタイプであると判断したときには、数値‘ｉ’を出力するコードを生成する手段、及び第二の型Ｔｃと選択された第一の型Ｔｉとに基づいて、データ値をシリアライズするコードを生成する手段として機能させる。
【発明の効果】
【００２１】
本発明によれば、生成サイトごとに専用のシリアライザ及び／又はデシリアライザを生成することができるので、動的にオブジェクトであるシリアライザの型を推論するのではなく、生成サイトごとのシリアライズに用いる型を確実に推論することができ、全体として演算処理時間を短縮することが可能となる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施の形態に係る生成装置の構成を模式的に示すブロック図である。
【図２】本発明の実施の形態に係る生成装置の機能ブロック図である。
【図３】本発明の実施の形態に係る生成装置のデータ値部分のみを取り出した型を算出するための述語の例示図である。
【図４】本発明の実施の形態に係る生成装置のレコード型である場合の規則の例示図である。
【図５】本発明の実施の形態に係る生成装置の配列型である場合の規則の例示図である。
【図６】本発明の実施の形態に係る生成装置の和集合型である場合の規則の例示図である。
【図７】本発明の実施の形態に係る生成装置のプリミティブ型である場合の規則の例示図である。
【図８】本発明の実施の形態に係る生成装置の和集合型が右辺に現れる場合の規則の例示図である。
【図９】本発明の実施の形態に係る生成装置のＣＰＵの処理手順を示すフローチャートである。
【図１０】本発明の実施の形態に係る生成装置のＣＰＵのシリアライザ特化の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００２３】
以下、本発明の実施の形態に係る、クエリをコンパイルする場合に、シリアライザ及び／又はデシリアライザを生成する装置（生成装置）について、図面に基づいて具体的に説明する。以下の実施の形態は、特許請求の範囲に記載された発明を限定するものではなく、実施の形態の中で説明されている特徴的事項の組み合わせの全てが解決手段の必須事項であるとは限らないことは言うまでもない。
【００２４】
また、本発明は多くの異なる態様にて実施することが可能であり、実施の形態の記載内容に限定して解釈されるべきものではない。実施の形態を通じて同じ要素には同一の符号を付している。
【００２５】
以下の実施の形態では、コンピュータシステムにコンピュータプログラムを導入した装置について説明するが、当業者であれば明らかな通り、本発明はその一部をコンピュータで実行することが可能なコンピュータプログラムとして実施することができる。したがって、本発明は、クエリをコンパイルする場合にシリアライザ及び／又はデシリアライザを生成する装置（生成装置）というハードウェアとしての実施の形態、ソフトウェアとしての実施の形態、又はソトウェアとハードウェアとの組み合わせの実施の形態をとることができる。コンピュータプログラムは、ハードディスク、ＤＶＤ、ＣＤ、光記憶装置、磁気記憶装置等の任意のコンピュータで読み取ることが可能な記録媒体に記録することができる。
【００２６】
本発明の実施の形態によれば、生成サイトごとに専用のシリアライザ及び／又はデシリアライザを生成することができるので、データ処理時に動的にオブジェクトの値を調べてシリアライズに用いる型を判定するのではなく、クエリコンパイル時に静的に生成サイトごとのシリアライズに用いる型を確実に推論することができ、全体として演算処理時間を短縮することが可能となる。
【００２７】
図１は、本発明の実施の形態に係る生成装置の構成を模式的に示すブロック図である。本発明の実施の形態に係る生成装置１は、少なくともＣＰＵ（中央演算装置）１１、メモリ１２、記憶装置１３、Ｉ／Ｏインタフェース１４、ビデオインタフェース１５、可搬型ディスクドライブ１６、通信インタフェース１７及び上述したハードウェアを接続する内部バス１８で構成されている。
【００２８】
ＣＰＵ１１は、内部バス１８を介して生成装置１の上述したようなハードウェア各部と接続されており、上述したハードウェア各部の動作を制御するとともに、記憶装置１３に記憶されたコンピュータプログラム１００に従って、種々のソフトウェア的機能を実行する。メモリ１２は、ＳＲＡＭ、ＳＤＲＡＭ等の揮発性メモリで構成され、コンピュータプログラム１００の実行時にロードモジュールが展開され、コンピュータプログラム１００の実行時に発生する一時的なデータ等を記憶する。
【００２９】
記憶装置１３は、内蔵される固定型記憶装置（ハードディスク）、ＲＯＭ等で構成されている。記憶装置１３に記憶されたコンピュータプログラム１００は、プログラム及びデータ等の情報を記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体９０から、可搬型ディスクドライブ１６によりダウンロードされ、実行時には記憶装置１３からメモリ１２へ展開して実行される。もちろん、通信インタフェース１７を介して接続されている外部コンピュータからダウンロードされたコンピュータプログラムであっても良い。
【００３０】
記憶装置１３は、型を比較する規則を記憶してある型比較規則記憶部１３１を備えている。型比較規則記憶部１３１には、生成サイトごとに、推論された型とシリアライズに用いられる型とを、再帰的に比較するための規則（ルール）が記憶されている。
【００３１】
例えばレコード型、和集合型、プリミティブ型等の型の種類に応じて、それぞれ述語を計算する規則が記憶されている。ＣＰＵ１１は、記憶されている規則に従って述語を計算し、推論された型と実際にシリアライズに用いられる型とを比較する。
【００３２】
通信インタフェース１７は内部バス１８に接続されており、インターネット、ＬＡＮ、ＷＡＮ等の外部のネットワークに接続されることにより、外部コンピュータ等とデータ送受信を行うことが可能となっている。
【００３３】
Ｉ／Ｏインタフェース１４は、キーボード２１、マウス２２等の入力装置と接続され、データの入力を受け付ける。ビデオインタフェース１５は、ＣＲＴディスプレイ、液晶ディスプレイ等の表示装置２３と接続され、所定の画像を表示する。
【００３４】
図２は、本発明の実施の形態に係る生成装置１の機能ブロック図である。図２において、生成装置１のアノテーション付加部２０１は、クエリの部分式に生成サイトを識別するアノテーションを付加する。
【００３５】
例えば、２つのテーブル＄ｔ０と＄ｔ１に対するクエリが、それぞれ（式１）に示すマップ関数で表されると仮定する。
【００３６】
【数１】
0006044960.tif 000002
【００３７】
そして、（式１）の右辺（部分式）に、生成サイトごとに割り当てられ、互いに識別するアノテーションを付加する。例えばテーブル＄ｔ０について、アノテーションを付加することで、（式２）を得る。
【００３８】
【数２】
0006044960.tif 000003
【００３９】
そして、型推論部２０２は、クエリをコンパイルする生成サイトごとにシリアライズの型を推論する。
【００４０】
実際には、型推論部２０２は、生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行する実行部２０３と、推論された型とシリアライズに用いられる型とを再帰的に比較する比較部２０４とを備えている。
【００４１】
実行部２０３は、型推論を実行する場合に、生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写することにより（式３）を得る。これが型推論されたアノテーション付きの型Ｔｃである。
【００４２】
【数３】
0006044960.tif 000004
【００４３】
より具体的には、部分式に応じて型推論の規則が変動する。例えばＮｏＳＱＬ式の部分式が、（式２）のような「ｔｒａｎｓｆｏｒｍ」式である場合、再帰的に左辺の型を推論する。推論結果が可変長配列型［ｔ＊］であるとき、変数＄ｘの型がｔであるという仮定を環境Γに追加して、部分式である［3 ＄ｘ5， 4 ｉｄ6 ，｛7 “ｘ”8 ：＄ｘ9 ｝］の型を推論する。  
【００４４】
部分式の型推論の結果が型ｕであるとき、［l ｕ＊］という配列型を推論する。式に表すと（式４）のようになる。（式４）において、ｅは（式２）の左辺を、ｅ２は（式２）の大括弧［］内を、ｌ（エルの小文字）はアノテーションの数値を、ｕは部分式ｅ２を型推論した結果を、それぞれ示している。
【００４５】
【数４】
0006044960.tif 000005
【００４６】
また、ＮｏＳＱＬ式の部分式が、「ｉｆ  ｅ  ｔｈｅｎ  ｅ１  ｅｌｓｅ  ｅ２」のようなｉｆ形式である場合、再帰的に部分式ｅ、ｅ１、ｅ２の型を推論する。型推論の結果がそれぞれＢｏｏｌ、ｓ、ｔであるとき、ｓ｜ｔという和集合型を推論して、（式５）を得る。  
【００４７】
【数５】
0006044960.tif 000006
【００４８】
さらに、ＮｏＳＱＬ式の部分式が、［lｅ１，ｅ２，・・・］という定数長配列の生成式である場合、再帰的に部分式ｅ１、ｅ２の型を推論する。型推論の結果がそれぞれｔ１、ｔ２、・・・であるとき、［lｅ１、ｅ２、・・・］に対して［lｔ１、ｔ２、・・・］という定数長配列型を推論して、（式６）を得る。  
【００４９】
【数６】
0006044960.tif 000007
【００５０】
また、ＮｏＳＱＬ式の部分式が、｛lｃ１：ｅ１、ｃ２：ｅ２、・・・｝というレコード型の生成式である場合、再帰的に部分式ｅ１、ｅ２の型を推論する。推論結果がそれぞれｔ１，ｔ２，・・・であるとき、｛lｃ１：ｅ１，ｃ２：ｅ２，・・・｝に対して｛lｃ１：ｔ１，ｃ２：ｔ２，・・・｝というレコード型を推論して、（式７）を得る。  
【００５１】
【数７】
0006044960.tif 000008
【００５２】
また、ＮｏＳＱＬ式の部分式が、変数＄ｘである場合、環境に＄ｘ：ｔが存在するときには変数＄ｘに対して型ｔを推論して、（式８）を得る。  
【００５３】
【数８】
0006044960.tif 000009
【００５４】
上述した型推論を組み合わせることにより、アノテーション付きの型Ｔｃを推論することができる。
【００５５】
比較部２０４は、推論された型Ｔｃ（第二の型）とシリアライズに用いられる型Ｔ０（第一の型）とを再帰的に比較する。シリアライズに用いられる型Ｔ０とは、例えば（式９）のようなマップ出力の値の型である。比較部２０４では、シリアライズに用いられる型Ｔ０と、（式３）で推論されたアノテーション付きの型Ｔｃとを再帰的に比較する。
【００５６】
【数９】
0006044960.tif 000010
【００５７】
具体的には、記憶装置１３の型比較規則記憶部１３１に記憶されている、生成サイトごとにシリアライズに用いられる型を再帰的に比較するための規則（ルール）に従って述語を計算し、シリアライズするための型を生成サイトごとに特定する。
【００５８】
本実施の形態では、推論された型Ｔｃは配列を用いたキー情報とデータ値との両方を含んでいる。そこで、まずデータ値部分のみを取り出した型Ｔｃ’を算出するための述語を定義する。図３は、本発明の実施の形態に係る生成装置１のデータ値部分のみを取り出した型Ｔｃ’を算出するための述語の例示図である。生成装置１は、図３に示すように、規則に従って述語を定義する。
【００５９】
（式３）に例示した型Ｔｃに対して図３に示す述語を適用した場合、（式１０）の中括弧内として、型Ｔｃ’を求めることができる。
【００６０】
【数１０】
0006044960.tif 000011
【００６１】
そこで、次に、求めた型Ｔｃ’と型Ｔ０とを再帰的に比較する。ここでも同様に、型比較規則記憶部１３１に記憶してある規則に基づいて述語を計算する。図４は、本発明の実施の形態に係る生成装置１のレコード型である場合の規則の例示図である。生成装置１は、型の種類がレコード型である場合、図４に示す（規則１）に従って述語を計算する。
【００６２】
もちろん、レコード型以外の型であっても、記憶装置１３の型比較規則記憶部１３１に記憶されている規則に従って述語を計算することができる。図５は、本発明の実施の形態に係る生成装置１の配列型である場合の規則の例示図である。生成装置１は、配列型である場合、図５に示す（規則２）に従って述語を計算する。
【００６３】
以下、同様に、型の種類に応じて規則が相違する。図６は、本発明の実施の形態に係る生成装置１の和集合型である場合の規則の例示図である。図７は、本発明の実施の形態に係る生成装置１のプリミティブ型である場合の規則の例示図である。図８は、本発明の実施の形態に係る生成装置１の和集合型が右辺に現れる場合の規則の例示図である。生成装置１は、それぞれの型に応じて（規則１）〜（規則５）のいずれか１つを選択して述語を計算する。
【００６４】
これらの規則を（式３）に対して適用すると、（式１１）に示すように述語を計算することができる。
【００６５】
【数１１】
0006044960.tif 000012
【００６６】
つまり、（式１１）の計算結果より、（式２）のレコードの生成式｛7 “ｘ”8 ：＄ｘ9 ｝で作られたレコード（データ値）は、型｛“ｘ”？：｛“ｉｄ”：ｌｏｎｇ，“ｎａｍｅ”：ｓｔｒｉｎｇ｝，“ｙ”？：｛“ｉｄ”：ｌｏｎｇ，“ｓｃｏｒｅ”：ｄｏｕｂｌｅ｝｝によりシリアライズされ、（式１）の入力＄ｔ０の中に含まれるレコードは、型｛“ｉｄ”：ｌｏｎｇ，“ｎａｍｅ”：ｓｔｒｉｎｇ｝によってシリアライズされると確認することができる。
【００６７】
図２に戻って、特化部２０５は、生成サイトごとに計算された型に基づいてシリアライザを特化する。シリアライズ部２０６は、生成サイトごとに、それぞれ特化されたシリアライザを用いてレコード（データ値）をシリアライズするコードを生成する。
【００６８】
特化部２０５は、型に応じて、第一のコード生成部２０７及び第二のコード生成部２０８を備えている。第一のコード生成部２０７は、オプショナル領域を有するレコード型のシリアライザを生成する場合に、第二のコード生成部２０８は、Ｔ０乃至Ｔｎ（ｎは自然数）の複数の型から選択する選択型のシリアライザを生成する場合に、それぞれ選択されて実行される。
【００６９】
まず、オプショナル領域を有するレコード型のシリアライザを生成する場合には、ビットベクタのシリアライズのコードの生成を開始する。第一のコード生成部２０７は、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃで要求済みであると判断した場合、ビット‘１’を出力するコードを生成する。
【００７０】
第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃに存在しないと判断した場合、ビット‘０’を出力するコードを生成する。第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃでもオプショナル領域である場合、データ値が存在すればビット‘１’を出力し、存在しなければビット‘０’を出力する。そして、ビットコードに続く領域について、シリアライズするコードを生成することにより全体をシリアライズする。
【００７１】
また、第二のコード生成部２０８は、第二の型Ｔｃが、選択された第一の型Ｔｉ（ｉは１〜ｎのいずれか）のみのサブタイプであると判断した場合、数値‘ｉ’を出力するコードを生成し、第二の型Ｔｃと選択された第一の型Ｔｉとに基づいて、データ値をシリアライズするコードを生成する。ビットコードに続く領域について、同様にシリアライズするコードを生成することにより全体をシリアライズする。
【００７２】
そして、第一の型Ｔ０がその他の型である場合には、既存の方法でシリアライズするコードを生成する。ビットコードに続く領域について、同様にシリアライズするコードを生成することにより全体をシリアライズする。
【００７３】
図９は、本発明の実施の形態に係る生成装置１のＣＰＵ１１の処理手順を示すフローチャートである。図９において、生成装置１のＣＰＵ１１は、クエリの部分式に生成サイトを識別するアノテーションを付加する（ステップＳ９０１）。
【００７４】
ＣＰＵ１１は、クエリをコンパイルする生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写し（ステップＳ９０２）、型の推論を実行する（ステップＳ９０３）。ＣＰＵ１１は、推論されたアノテーション付きの型（第二の型）Ｔｃとシリアライズに用いられる型（第一の型）Ｔ０とを再帰的に比較する（ステップＳ９０４）。
【００７５】
ＣＰＵ１１は、生成サイトごとに比較された型に基づいてシリアライザを特化し（ステップＳ９０５）、生成サイトごとに、それぞれ特化されたシリアライザを用いてレコード（データ値）をシリアライズするコードを生成する（ステップＳ９０６）。そして、ＣＰＵ１１は、ビットコードに続く領域について、同様にシリアライズするコードを生成することにより全体をシリアライズする（ステップＳ９０７）。
【００７６】
図１０は、本発明の実施の形態に係る生成装置１のＣＰＵ１１のシリアライザ特化の処理手順を示すフローチャートである。図１０において、生成装置１のＣＰＵ１１は、シリアライザを生成する型の種類を判断する（ステップＳ１００１）。
【００７７】
ＣＰＵ１１が、オプショナル領域を有するレコード型であると判断した場合（ステップＳ１００１：レコード型）。ＣＰＵ１１は、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃで要求済みであるか否かを判断する（ステップＳ１００２）。ＣＰＵ１１が、要求済みであると判断した場合（ステップＳ１００２：ＹＥＳ）、ＣＰＵ１１は、ビット‘１’を出力するコードを生成する（ステップＳ１００３）。
【００７８】
ＣＰＵ１１が、要求済みではないと判断した場合（ステップＳ１００２：ＮＯ）、ＣＰＵ１１は、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃに存在するか否かを判断する（ステップＳ１００４）。ＣＰＵ１１が、存在しないと判断した場合（ステップＳ１００４：ＮＯ）、ＣＰＵ１１は、ビット‘０’を出力するコードを生成する（ステップＳ１００５）。
【００７９】
ＣＰＵ１１が、存在すると判断した場合（ステップＳ１００４：ＹＥＳ）、ＣＰＵ１１は、第一の型Ｔ０におけるオプショナル領域が、第二の型Ｔｃでもオプショナル領域であるか否かを判断する（ステップＳ１００６）。ＣＰＵ１１が、オプショナル領域ではないと判断した場合（ステップＳ１００６：ＮＯ）、ＣＰＵ１１は、ステップＳ１００７乃至Ｓ１００９をスキップする。ＣＰＵ１１が、両方の型でオプショナル領域であると判断した場合（ステップＳ１００６：ＹＥＳ）、ＣＰＵ１１は、オプショナル領域にデータ値が存在するか否かを判断する（ステップＳ１００７）。
【００８０】
ＣＰＵ１１が、データ値が存在すると判断した場合（ステップＳ１００７：ＹＥＳ）、ＣＰＵ１１は、ビット‘１’を出力するコードを生成する（ステップＳ１００８）。ＣＰＵ１１が、データ値が存在しないと判断した場合（ステップＳ１００７：ＮＯ）、ＣＰＵ１１は、ビット‘０’を出力するコードを生成する（ステップＳ１００９）。ＣＰＵ１１は、ビットコードに続く領域について、同様にシリアライズするコードを生成することにより全体をシリアライズする（ステップＳ１０１０）。
【００８１】
ＣＰＵ１１が、シリアライザを生成する型が第一の型Ｔ０乃至Ｔｎ（ｎは自然数）の複数の型から選択する選択型であると判断した場合（ステップＳ１００１：選択型）、ＣＰＵ１１は、型Ｔｃが型Ｔｉのみのサブタイプであるか否かを判断する（ステップＳ１０１１）。ＣＰＵ１１が、サブタイプではないと判断した場合（ステップＳ１０１１：ＮＯ）、ＣＰＵ１１は、ステップＳ１０１２をスキップし、ＣＰＵ１１が、サブタイプであると判断した場合（ステップＳ１０１１：ＹＥＳ）、数値‘ｉ’（ｉは１〜ｎのいずれか）を出力するコードを生成し（ステップＳ１０１２）、第二の型Ｔｃと選択された第一の型Ｔｉとに基づいて、データ値をシリアライズするコードを生成する（ステップＳ１０１０）。
【００８２】
そして、ＣＰＵ１１が、シリアライザを生成するがその他の型であると判断した場合（ステップＳ１００１：その他の型）、ＣＰＵ１１は、既存の方法でシリアライズするコードを生成する（ステップＳ１０１３）。
【００８３】
以上のように本実施の形態によれば、生成サイトごとに専用のシリアライザ及び／又はデシリアライザを生成することができるのでデータ処理時に動的にオブジェクトの値を調べてシリアライズに用いる型を判定するのではなく、クエリコンパイル時に静的に生成サイトごとのシリアライズに用いる型を確実に推論することができ、全体として演算処理時間を短縮することが可能となる。
【００８４】
なお、本発明は上記実施例に限定されるものではなく、本発明の趣旨の範囲内であれば多種の変更、改良等が可能である。また、上記実施例ではシリアライズを例に挙げて説明しているが、生成サイトごとに特定された型を用いてデシリアライズすることで演算処理負荷が軽減されることは言うまでもない。
【符号の説明】
【００８５】
１  生成装置
１１  ＣＰＵ
１２  メモリ
１３  記憶装置
１４  Ｉ／Ｏインタフェース
１５  ビデオインタフェース
１６  可搬型ディスクドライブ
１７  通信インタフェース
１８  内部バス
【図１】
0006044960.tif 000013
【図２】
0006044960.tif 000014
【図３】
0006044960.tif 000015
【図４】
0006044960.tif 000016
【図５】
0006044960.tif 000017
【図６】
0006044960.tif 000018
【図７】
0006044960.tif 000019
【図８】
0006044960.tif 000020
【図９】
0006044960.tif 000021
【図１０】
0006044960.tif 000022