特許第6044960号(P6044960)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧
特許6044960シリアライザを特化する方法、装置及びコンピュータプログラム
<>
  • 特許6044960-シリアライザを特化する方法、装置及びコンピュータプログラム 図000013
  • 特許6044960-シリアライザを特化する方法、装置及びコンピュータプログラム 図000014
  • 特許6044960-シリアライザを特化する方法、装置及びコンピュータプログラム 図000015
  • 特許6044960-シリアライザを特化する方法、装置及びコンピュータプログラム 図000016
  • 特許6044960-シリアライザを特化する方法、装置及びコンピュータプログラム 図000017
  • 特許6044960-シリアライザを特化する方法、装置及びコンピュータプログラム 図000018
  • 特許6044960-シリアライザを特化する方法、装置及びコンピュータプログラム 図000019
  • 特許6044960-シリアライザを特化する方法、装置及びコンピュータプログラム 図000020
  • 特許6044960-シリアライザを特化する方法、装置及びコンピュータプログラム 図000021
  • 特許6044960-シリアライザを特化する方法、装置及びコンピュータプログラム 図000022
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6044960
(24)【登録日】2016年11月25日
(45)【発行日】2016年12月14日
(54)【発明の名称】シリアライザを特化する方法、装置及びコンピュータプログラム
(51)【国際特許分類】
   G06F 9/44 20060101AFI20161206BHJP
【FI】
   G06F9/44 530M
【請求項の数】9
【全頁数】17
(21)【出願番号】特願2013-269077(P2013-269077)
(22)【出願日】2013年12月26日
(65)【公開番号】特開2015-125572(P2015-125572A)
(43)【公開日】2015年7月6日
【審査請求日】2015年11月27日
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】戸澤 晶彦
【審査官】 長谷川 篤男
(56)【参考文献】
【文献】 特表2010−518516(JP,A)
【文献】 特表2007−509425(JP,A)
【文献】 米国特許出願公開第2005/0091228(US,A1)
【文献】 特開2008−171275(JP,A)
【文献】 Serge Abiteboul,XMLデータベース入門 Data on the Web,日本,共立出版株式会社,2006年 7月15日,第1版,第123-162頁
【文献】 ワグナー ビル,More Effective C#,日本,株式会社翔泳社,2009年11月30日,第1版,第24-28頁
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44
G06F 17/30
(57)【特許請求の範囲】
【請求項1】
クエリをコンパイルする場合にシリアライザ及び/又はデシリアライザを生成する装置で実行することが可能な方法において、
前記装置は、
前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する第一のステップと、
推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する第二のステップと、
前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする第三のステップと
を含み、
前記第一のステップは、
前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行するステップと、
推論された型とシリアライズに用いられる型とを再帰的に比較するステップと
を含む方法。
【請求項2】
前記第二のステップは、
オプショナル領域を有するレコード型のシリアライザを生成する場合、
第一の型T0におけるオプショナル領域が、第二の型Tcで要求済みであると判断したときには、ビット‘1’を出力するコードを生成するステップと、
第一の型T0におけるオプショナル領域が、第二の型Tcに存在しないと判断したときには、ビット‘0’を出力するコードを生成するステップと、
第一の型T0におけるオプショナル領域が、第二の型Tcでもオプショナル領域であるときには、データ値が存在すればビット‘1’を出力するコードを、存在しなければビット‘0’を出力するコードを、それぞれ生成するステップと
を含む請求項1に記載の方法。
【請求項3】
前記第二のステップは、
第一の型をT0乃至Tn(nは自然数)の複数の型から選択する選択型のシリアライザを生成する場合、
第二の型Tcが、選択された第一の型Ti(iは1〜nのいずれか)のみのサブタイプであると判断したときには、数値‘i’を出力するコードを生成するステップと、
第二の型Tcと選択された第一の型Tiとに基づいて、データ値をシリアライズするコードを生成するステップと
を含む請求項1に記載の方法。
【請求項4】
クエリをコンパイルする場合にシリアライザ及び/又はデシリアライザを生成する装置において、
前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する型推論手段と、
推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する特化手段と、
前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする手段と
を備え、
前記型推論手段は、
前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行する手段と、
推論された型とシリアライズに用いられる型とを再帰的に比較する手段と
を備える装置
【請求項5】
前記特化手段は、
プショナル領域を有するレコード型のシリアライザを生成する場合、
第一の型T0におけるオプショナル領域が、第二の型Tcで要求済みであると判断したときには、ビット‘1’を出力するコードを生成する手段と、
第一の型T0におけるオプショナル領域が、第二の型Tcに存在しないと判断したときには、ビット‘0’を出力するコードを生成する手段と、
第一の型T0におけるオプショナル領域が、第二の型Tcでもオプショナル領域であるときには、データ値が存在すればビット‘1’を出力するコードを、存在しなければビット‘0’を出力するコードを、それぞれ生成する手段と
を備える請求項4に記載の装置。
【請求項6】
前記特化手段は、
第一の型をT0乃至Tn(nは自然数)の複数の型から選択する選択型のシリアライザを生成する場合、
第二の型Tcが、選択された第一の型Ti(iは1〜nのいずれか)のみのサブタイプであると判断したときには、数値‘i’を出力するコードを生成する手段と、
第二の型Tcと選択された第一の型Tiとに基づいて、データ値をシリアライズするコードを生成する手段と
を備える請求項に記載の装置。
【請求項7】
クエリをコンパイルする場合にシリアライザ及び/又はデシリアライザを生成する装置で実行することが可能なコンピュータプログラムにおいて、
前記装置を、
前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する型推論手段、
推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する特化手段、及び
前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする手段
として機能させ、
前記型推論手段を、
前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行する手段、及び
推論された型とシリアライズに用いられる型とを再帰的に比較する手段
として機能させるコンピュータプログラム
【請求項8】
前記特化手段
オプショナル領域を有するレコード型のシリアライザを生成する場合、
第一の型T0におけるオプショナル領域が、第二の型Tcで要求済みであると判断したときには、ビット‘1’を出力するコードを生成する手段、
第一の型T0におけるオプショナル領域が、第二の型Tcに存在しないと判断したときには、ビット‘0’を出力するコードを生成する手段、及び
第一の型T0におけるオプショナル領域が、第二の型Tcでもオプショナル領域であるときには、データ値が存在すればビット‘1’を出力するコードを、存在しなければビット‘0’を出力するコードを、それぞれ生成する手段
として機能させる請求項に記載のコンピュータプログラム
【請求項9】
前記特化手段を、
第一の型をT0乃至Tn(nは自然数)の複数の型から選択する選択型のシリアライザを生成する場合、
第二の型Tcが、選択された第一の型Ti(iは1〜nのいずれか)のみのサブタイプであると判断したときには、数値‘i’を出力するコードを生成する手段、及び
第二の型Tcと選択された第一の型Tiとに基づいて、データ値をシリアライズするコードを生成する手段
として機能させる請求項7に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、生成サイトごとにシリアライズの型推論を行い、生成サイトごとにシリアライザを特化する方法、装置及びコンピュータプログラムに関する。
【背景技術】
【0002】
昨今のインターネット環境の普及、あるいは各種コンピュータの演算処理速度の向上等に伴い、大容量のデジタルデータであるビッグデータが注目されている。ビッグデータは、単に大容量であるだけでなく、非定型であり、しかもリアルタイム性が高い。従来のデータベース管理システムでは、データを定型化して蓄積し、その後で処理分析するため、従来のデータベースとは相反する性質を持つビッグデータを扱うことは困難とされていた。
【0003】
JSONのような半構造データを扱うNoSQL言語、例えばJaql等を利用してデータ解析する場合、大量のデータ通信による入出力コストがボトルネックとなり、適正なレスポンスを得ることができない。そこで、型(スキーマ)を用いてデータ処理を統一化するとともに、データを圧縮することによりデータサイズを小さくしてから解析する等、様々な工夫がなされている。
【0004】
例えば特許文献1乃至8には、大容量のデジタルデータを処理する場合にシリアライズ及び/又はデシリアライズを実行する技術が開示されている。特許文献1乃至8に開示されているシリアライズ及び/又はデシリアライズは、型と値とを確認しつつ、動的に実行するものがほとんどである。
【0005】
また、特許文献9、10には、型(スキーマ)を推定する型推論を用いるシステムが開示されている。例えば値と名前(識別子)とを有するレコードの型を推論することにより、ビッグデータを実際に取り扱うことができるデータにデシリアライズすることができる。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2003−122730号公報
【特許文献2】特開2003−122773号公報
【特許文献3】特開2003−249961号公報
【特許文献4】特開2005−056085号公報
【特許文献5】特開2005−157718号公報
【特許文献6】特開2005−209048号公報
【特許文献7】特表2007−522558号公報
【特許文献8】国際公開第2011/111532号
【特許文献9】特表2007−519078号公報
【特許文献10】特開2010−237867号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかし、動的に型と値とを確認しながらシリアライズ及び/又はデシリアライズを実行する場合、演算処理負荷が過大となるおそれがあるという問題点があった。例えば、クエリをコンパイルする場合、クエリ中の制御フローの合流により汎化された型が推論されるが、このとき、既存のシリアライザを用いるのでは、型と値とを確認する手間及びコストが膨大となる。
【0008】
本発明は斯かる事情に鑑みてなされたものであり、生成サイトごとにシリアライズの型推論を行い、生成サイトごとにシリアライザを特化する方法、装置及びコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
上記目的を達成するために第1発明に係る方法は、クエリをコンパイルする場合にシリアライザ及び/又はデシリアライザを生成する装置で実行することが可能な方法において、前記装置は、前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する第一のステップと、推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する第二のステップと、前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする第三のステップとを含み、前記第一のステップは、前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行するステップと、推論された型とシリアライズに用いられる型とを再帰的に比較するステップとを含む。
【0011】
また、第発明に係る方法は、第1発明において、前記第二のステップは、オプショナル領域を有するレコード型のシリアライザを生成する場合、第一の型T0におけるオプショナル領域が、第二の型Tcで要求済みであると判断したときには、ビット‘1’を出力するコードを生成するステップと、第一の型T0におけるオプショナル領域が、第二の型Tcに存在しないと判断したときには、ビット‘0’を出力するコードを生成するステップと、第一の型T0におけるオプショナル領域が、第二の型Tcでもオプショナル領域であるときには、データ値が存在すればビット‘1’を出力するコードを、存在しなければビット‘0’を出力するコードを、それぞれ生成するステップとを含む。
【0012】
また、第発明に係る方法は、第1発明において、前記第二のステップは、第一の型をT0乃至Tn(nは自然数)の複数の型から選択する選択型のシリアライザを生成する場合、第二の型Tcが、選択された第一の型Ti(iは1〜nのいずれか)のみのサブタイプであると判断したときには、数値‘i’を出力するコードを生成するステップと、第二の型Tcと選択された第一の型Tiとに基づいて、データ値をシリアライズするコードを生成するステップとを含む。
【0013】
次に、上記目的を達成するために第発明に係る装置は、クエリをコンパイルする場合にシリアライザ及び/又はデシリアライザを生成する装置において、前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する型推論手段と、推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する特化手段と、前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする手段とを備え、前記型推論手段は、前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行する手段と、推論された型とシリアライズに用いられる型とを再帰的に比較する手段とを備える。
【0015】
また、第発明に係る装置は、第発明において、前記特化手段は、オプショナル領域を有するレコード型のシリアライザを生成する場合、第一の型T0におけるオプショナル領域が、第二の型Tcで要求済みであると判断したときには、ビット‘1’を出力するコードを生成する手段と、第一の型T0におけるオプショナル領域が、第二の型Tcに存在しないと判断したときには、ビット‘0’を出力するコードを生成する手段と、第一の型T0におけるオプショナル領域が、第二の型Tcでもオプショナル領域であるときには、データ値が存在すればビット‘1’を出力するコードを、存在しなければビット‘0’を出力するコードを、それぞれ生成する手段とを備える。
【0016】
また、第発明に係る装置は、第発明において、前記特化手段は、第一の型をT0乃至Tn(nは自然数)の複数の型から選択する選択型のシリアライザを生成する場合、第二の型Tcが、選択された第一の型Ti(iは1〜nのいずれか)のみのサブタイプであると判断したときには、数値‘i’を出力するコードを生成する手段と、第二の型Tcと選択された第一の型Tiとに基づいて、データ値をシリアライズするコードを生成する手段とを備える。
【0017】
次に、上記目的を達成するために第発明に係るコンピュータプログラムは、クエリをコンパイルする場合にシリアライザ及び/又はデシリアライザを生成する装置で実行することが可能なコンピュータプログラムにおいて、前記装置を、前記クエリをコンパイルする生成サイトごとにシリアライズの型を推論する型推論手段、推論された型及び実際に用いられる型に基づいて、前記生成サイトごとにシリアライザを特化する特化手段、及び前記生成サイトごとに、それぞれ特化されたシリアライザを用いてデータ値をシリアライズする手段として機能させ、前記型推論手段を、前記生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行する手段、及び推論された型とシリアライズに用いられる型とを再帰的に比較する手段として機能させる。
【0019】
また、第発明に係るコンピュータプログラムは、第発明において、前記特化手段を、オプショナル領域を有するレコード型のシリアライザを生成する場合、第一の型T0におけるオプショナル領域が、第二の型Tcで要求済みであると判断したときには、ビット‘1’を出力するコードを生成する手段、第一の型T0におけるオプショナル領域が、第二の型Tcに存在しないと判断したときには、ビット‘0’を出力するコードを生成する手段、及び第一の型T0におけるオプショナル領域が、第二の型Tcでもオプショナル領域であるときには、データ値が存在すればビット‘1’を出力するコードを、存在しなければビット‘0’を出力するコードを、それぞれ生成する手段として機能させる。
【0020】
また、第発明に係るコンピュータプログラムは、第発明において、前記特化手段を、第一の型をT0乃至Tn(nは自然数)の複数の型から選択する選択型のシリアライザを生成する場合、第二の型Tcが、選択された第一の型Ti(iは1〜nのいずれか)のみのサブタイプであると判断したときには、数値‘i’を出力するコードを生成する手段、及び第二の型Tcと選択された第一の型Tiとに基づいて、データ値をシリアライズするコードを生成する手段として機能させる。
【発明の効果】
【0021】
本発明によれば、生成サイトごとに専用のシリアライザ及び/又はデシリアライザを生成することができるので、動的にオブジェクトであるシリアライザの型を推論するのではなく、生成サイトごとのシリアライズに用いる型を確実に推論することができ、全体として演算処理時間を短縮することが可能となる。
【図面の簡単な説明】
【0022】
図1】本発明の実施の形態に係る生成装置の構成を模式的に示すブロック図である。
図2】本発明の実施の形態に係る生成装置の機能ブロック図である。
図3】本発明の実施の形態に係る生成装置のデータ値部分のみを取り出した型を算出するための述語の例示図である。
図4】本発明の実施の形態に係る生成装置のレコード型である場合の規則の例示図である。
図5】本発明の実施の形態に係る生成装置の配列型である場合の規則の例示図である。
図6】本発明の実施の形態に係る生成装置の和集合型である場合の規則の例示図である。
図7】本発明の実施の形態に係る生成装置のプリミティブ型である場合の規則の例示図である。
図8】本発明の実施の形態に係る生成装置の和集合型が右辺に現れる場合の規則の例示図である。
図9】本発明の実施の形態に係る生成装置のCPUの処理手順を示すフローチャートである。
図10】本発明の実施の形態に係る生成装置のCPUのシリアライザ特化の処理手順を示すフローチャートである。
【発明を実施するための形態】
【0023】
以下、本発明の実施の形態に係る、クエリをコンパイルする場合に、シリアライザ及び/又はデシリアライザを生成する装置(生成装置)について、図面に基づいて具体的に説明する。以下の実施の形態は、特許請求の範囲に記載された発明を限定するものではなく、実施の形態の中で説明されている特徴的事項の組み合わせの全てが解決手段の必須事項であるとは限らないことは言うまでもない。
【0024】
また、本発明は多くの異なる態様にて実施することが可能であり、実施の形態の記載内容に限定して解釈されるべきものではない。実施の形態を通じて同じ要素には同一の符号を付している。
【0025】
以下の実施の形態では、コンピュータシステムにコンピュータプログラムを導入した装置について説明するが、当業者であれば明らかな通り、本発明はその一部をコンピュータで実行することが可能なコンピュータプログラムとして実施することができる。したがって、本発明は、クエリをコンパイルする場合にシリアライザ及び/又はデシリアライザを生成する装置(生成装置)というハードウェアとしての実施の形態、ソフトウェアとしての実施の形態、又はソトウェアとハードウェアとの組み合わせの実施の形態をとることができる。コンピュータプログラムは、ハードディスク、DVD、CD、光記憶装置、磁気記憶装置等の任意のコンピュータで読み取ることが可能な記録媒体に記録することができる。
【0026】
本発明の実施の形態によれば、生成サイトごとに専用のシリアライザ及び/又はデシリアライザを生成することができるので、データ処理時に動的にオブジェクトの値を調べてシリアライズに用いる型を判定するのではなく、クエリコンパイル時に静的に生成サイトごとのシリアライズに用いる型を確実に推論することができ、全体として演算処理時間を短縮することが可能となる。
【0027】
図1は、本発明の実施の形態に係る生成装置の構成を模式的に示すブロック図である。本発明の実施の形態に係る生成装置1は、少なくともCPU(中央演算装置)11、メモリ12、記憶装置13、I/Oインタフェース14、ビデオインタフェース15、可搬型ディスクドライブ16、通信インタフェース17及び上述したハードウェアを接続する内部バス18で構成されている。
【0028】
CPU11は、内部バス18を介して生成装置1の上述したようなハードウェア各部と接続されており、上述したハードウェア各部の動作を制御するとともに、記憶装置13に記憶されたコンピュータプログラム100に従って、種々のソフトウェア的機能を実行する。メモリ12は、SRAM、SDRAM等の揮発性メモリで構成され、コンピュータプログラム100の実行時にロードモジュールが展開され、コンピュータプログラム100の実行時に発生する一時的なデータ等を記憶する。
【0029】
記憶装置13は、内蔵される固定型記憶装置(ハードディスク)、ROM等で構成されている。記憶装置13に記憶されたコンピュータプログラム100は、プログラム及びデータ等の情報を記録したDVD、CD−ROM等の可搬型記録媒体90から、可搬型ディスクドライブ16によりダウンロードされ、実行時には記憶装置13からメモリ12へ展開して実行される。もちろん、通信インタフェース17を介して接続されている外部コンピュータからダウンロードされたコンピュータプログラムであっても良い。
【0030】
記憶装置13は、型を比較する規則を記憶してある型比較規則記憶部131を備えている。型比較規則記憶部131には、生成サイトごとに、推論された型とシリアライズに用いられる型とを、再帰的に比較するための規則(ルール)が記憶されている。
【0031】
例えばレコード型、和集合型、プリミティブ型等の型の種類に応じて、それぞれ述語を計算する規則が記憶されている。CPU11は、記憶されている規則に従って述語を計算し、推論された型と実際にシリアライズに用いられる型とを比較する。
【0032】
通信インタフェース17は内部バス18に接続されており、インターネット、LAN、WAN等の外部のネットワークに接続されることにより、外部コンピュータ等とデータ送受信を行うことが可能となっている。
【0033】
I/Oインタフェース14は、キーボード21、マウス22等の入力装置と接続され、データの入力を受け付ける。ビデオインタフェース15は、CRTディスプレイ、液晶ディスプレイ等の表示装置23と接続され、所定の画像を表示する。
【0034】
図2は、本発明の実施の形態に係る生成装置1の機能ブロック図である。図2において、生成装置1のアノテーション付加部201は、クエリの部分式に生成サイトを識別するアノテーションを付加する。
【0035】
例えば、2つのテーブル$t0と$t1に対するクエリが、それぞれ(式1)に示すマップ関数で表されると仮定する。
【0036】
【数1】
【0037】
そして、(式1)の右辺(部分式)に、生成サイトごとに割り当てられ、互いに識別するアノテーションを付加する。例えばテーブル$t0について、アノテーションを付加することで、(式2)を得る。
【0038】
【数2】
【0039】
そして、型推論部202は、クエリをコンパイルする生成サイトごとにシリアライズの型を推論する。
【0040】
実際には、型推論部202は、生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写しながら推論を実行する実行部203と、推論された型とシリアライズに用いられる型とを再帰的に比較する比較部204とを備えている。
【0041】
実行部203は、型推論を実行する場合に、生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写することにより(式3)を得る。これが型推論されたアノテーション付きの型Tcである。
【0042】
【数3】
【0043】
より具体的には、部分式に応じて型推論の規則が変動する。例えばNoSQL式の部分式が、(式2)のような「transform」式である場合、再帰的に左辺の型を推論する。推論結果が可変長配列型[t*]であるとき、変数$xの型がtであるという仮定を環境Γに追加して、部分式である[3 $x54 id6 ,{7 “x”8 :$x9 }]の型を推論する。
【0044】
部分式の型推論の結果が型uであるとき、[l u*]という配列型を推論する。式に表すと(式4)のようになる。(式4)において、eは(式2)の左辺を、e2は(式2)の大括弧[]内を、l(エルの小文字)はアノテーションの数値を、uは部分式e2を型推論した結果を、それぞれ示している。
【0045】
【数4】
【0046】
また、NoSQL式の部分式が、「if e then e1 else e2」のようなif形式である場合、再帰的に部分式e、e1、e2の型を推論する。型推論の結果がそれぞれBool、s、tであるとき、s|tという和集合型を推論して、(式5)を得る。
【0047】
【数5】
【0048】
さらに、NoSQL式の部分式が、[le1,e2,・・・]という定数長配列の生成式である場合、再帰的に部分式e1、e2の型を推論する。型推論の結果がそれぞれt1、t2、・・・であるとき、[le1、e2、・・・]に対して[lt1、t2、・・・]という定数長配列型を推論して、(式6)を得る。
【0049】
【数6】
【0050】
また、NoSQL式の部分式が、{lc1:e1、c2:e2、・・・}というレコード型の生成式である場合、再帰的に部分式e1、e2の型を推論する。推論結果がそれぞれt1,t2,・・・であるとき、{lc1:e1,c2:e2,・・・}に対して{lc1:t1,c2:t2,・・・}というレコード型を推論して、(式7)を得る。
【0051】
【数7】
【0052】
また、NoSQL式の部分式が、変数$xである場合、環境に$x:tが存在するときには変数$xに対して型tを推論して、(式8)を得る。
【0053】
【数8】
【0054】
上述した型推論を組み合わせることにより、アノテーション付きの型Tcを推論することができる。
【0055】
比較部204は、推論された型Tc(第二の型)とシリアライズに用いられる型T0(第一の型)とを再帰的に比較する。シリアライズに用いられる型T0とは、例えば(式9)のようなマップ出力の値の型である。比較部204では、シリアライズに用いられる型T0と、(式3)で推論されたアノテーション付きの型Tcとを再帰的に比較する。
【0056】
【数9】
【0057】
具体的には、記憶装置13の型比較規則記憶部131に記憶されている、生成サイトごとにシリアライズに用いられる型を再帰的に比較するための規則(ルール)に従って述語を計算し、シリアライズするための型を生成サイトごとに特定する。
【0058】
本実施の形態では、推論された型Tcは配列を用いたキー情報とデータ値との両方を含んでいる。そこで、まずデータ値部分のみを取り出した型Tc’を算出するための述語を定義する。図3は、本発明の実施の形態に係る生成装置1のデータ値部分のみを取り出した型Tc’を算出するための述語の例示図である。生成装置1は、図3に示すように、規則に従って述語を定義する。
【0059】
(式3)に例示した型Tcに対して図3に示す述語を適用した場合、(式10)の中括弧内として、型Tc’を求めることができる。
【0060】
【数10】
【0061】
そこで、次に、求めた型Tc’と型T0とを再帰的に比較する。ここでも同様に、型比較規則記憶部131に記憶してある規則に基づいて述語を計算する。図4は、本発明の実施の形態に係る生成装置1のレコード型である場合の規則の例示図である。生成装置1は、型の種類がレコード型である場合、図4に示す(規則1)に従って述語を計算する。
【0062】
もちろん、レコード型以外の型であっても、記憶装置13の型比較規則記憶部131に記憶されている規則に従って述語を計算することができる。図5は、本発明の実施の形態に係る生成装置1の配列型である場合の規則の例示図である。生成装置1は、配列型である場合、図5に示す(規則2)に従って述語を計算する。
【0063】
以下、同様に、型の種類に応じて規則が相違する。図6は、本発明の実施の形態に係る生成装置1の和集合型である場合の規則の例示図である。図7は、本発明の実施の形態に係る生成装置1のプリミティブ型である場合の規則の例示図である。図8は、本発明の実施の形態に係る生成装置1の和集合型が右辺に現れる場合の規則の例示図である。生成装置1は、それぞれの型に応じて(規則1)〜(規則5)のいずれか1つを選択して述語を計算する。
【0064】
これらの規則を(式3)に対して適用すると、(式11)に示すように述語を計算することができる。
【0065】
【数11】
【0066】
つまり、(式11)の計算結果より、(式2)のレコードの生成式{7 “x”8 :$x9 }で作られたレコード(データ値)は、型{“x”?:{“id”:long,“name”:string},“y”?:{“id”:long,“score”:double}}によりシリアライズされ、(式1)の入力$t0の中に含まれるレコードは、型{“id”:long,“name”:string}によってシリアライズされると確認することができる。
【0067】
図2に戻って、特化部205は、生成サイトごとに計算された型に基づいてシリアライザを特化する。シリアライズ部206は、生成サイトごとに、それぞれ特化されたシリアライザを用いてレコード(データ値)をシリアライズするコードを生成する。
【0068】
特化部205は、型に応じて、第一のコード生成部207及び第二のコード生成部208を備えている。第一のコード生成部207は、オプショナル領域を有するレコード型のシリアライザを生成する場合に、第二のコード生成部208は、T0乃至Tn(nは自然数)の複数の型から選択する選択型のシリアライザを生成する場合に、それぞれ選択されて実行される。
【0069】
まず、オプショナル領域を有するレコード型のシリアライザを生成する場合には、ビットベクタのシリアライズのコードの生成を開始する。第一のコード生成部207は、第一の型T0におけるオプショナル領域が、第二の型Tcで要求済みであると判断した場合、ビット‘1’を出力するコードを生成する。
【0070】
第一の型T0におけるオプショナル領域が、第二の型Tcに存在しないと判断した場合、ビット‘0’を出力するコードを生成する。第一の型T0におけるオプショナル領域が、第二の型Tcでもオプショナル領域である場合、データ値が存在すればビット‘1’を出力し、存在しなければビット‘0’を出力する。そして、ビットコードに続く領域について、シリアライズするコードを生成することにより全体をシリアライズする。
【0071】
また、第二のコード生成部208は、第二の型Tcが、選択された第一の型Ti(iは1〜nのいずれか)のみのサブタイプであると判断した場合、数値‘i’を出力するコードを生成し、第二の型Tcと選択された第一の型Tiとに基づいて、データ値をシリアライズするコードを生成する。ビットコードに続く領域について、同様にシリアライズするコードを生成することにより全体をシリアライズする。
【0072】
そして、第一の型T0がその他の型である場合には、既存の方法でシリアライズするコードを生成する。ビットコードに続く領域について、同様にシリアライズするコードを生成することにより全体をシリアライズする。
【0073】
図9は、本発明の実施の形態に係る生成装置1のCPU11の処理手順を示すフローチャートである。図9において、生成装置1のCPU11は、クエリの部分式に生成サイトを識別するアノテーションを付加する(ステップS901)。
【0074】
CPU11は、クエリをコンパイルする生成サイトごとに割り当てられた識別情報をアノテーションとして型に転写し(ステップS902)、型の推論を実行する(ステップS903)。CPU11は、推論されたアノテーション付きの型(第二の型)Tcとシリアライズに用いられる型(第一の型)T0とを再帰的に比較する(ステップS904)。
【0075】
CPU11は、生成サイトごとに比較された型に基づいてシリアライザを特化し(ステップS905)、生成サイトごとに、それぞれ特化されたシリアライザを用いてレコード(データ値)をシリアライズするコードを生成する(ステップS906)。そして、CPU11は、ビットコードに続く領域について、同様にシリアライズするコードを生成することにより全体をシリアライズする(ステップS907)。
【0076】
図10は、本発明の実施の形態に係る生成装置1のCPU11のシリアライザ特化の処理手順を示すフローチャートである。図10において、生成装置1のCPU11は、シリアライザを生成する型の種類を判断する(ステップS1001)。
【0077】
CPU11が、オプショナル領域を有するレコード型であると判断した場合(ステップS1001:レコード型)。CPU11は、第一の型T0におけるオプショナル領域が、第二の型Tcで要求済みであるか否かを判断する(ステップS1002)。CPU11が、要求済みであると判断した場合(ステップS1002:YES)、CPU11は、ビット‘1’を出力するコードを生成する(ステップS1003)。
【0078】
CPU11が、要求済みではないと判断した場合(ステップS1002:NO)、CPU11は、第一の型T0におけるオプショナル領域が、第二の型Tcに存在するか否かを判断する(ステップS1004)。CPU11が、存在しないと判断した場合(ステップS1004:NO)、CPU11は、ビット‘0’を出力するコードを生成する(ステップS1005)。
【0079】
CPU11が、存在すると判断した場合(ステップS1004:YES)、CPU11は、第一の型T0におけるオプショナル領域が、第二の型Tcでもオプショナル領域であるか否かを判断する(ステップS1006)。CPU11が、オプショナル領域ではないと判断した場合(ステップS1006:NO)、CPU11は、ステップS1007乃至S1009をスキップする。CPU11が、両方の型でオプショナル領域であると判断した場合(ステップS1006:YES)、CPU11は、オプショナル領域にデータ値が存在するか否かを判断する(ステップS1007)。
【0080】
CPU11が、データ値が存在すると判断した場合(ステップS1007:YES)、CPU11は、ビット‘1’を出力するコードを生成する(ステップS1008)。CPU11が、データ値が存在しないと判断した場合(ステップS1007:NO)、CPU11は、ビット‘0’を出力するコードを生成する(ステップS1009)。CPU11は、ビットコードに続く領域について、同様にシリアライズするコードを生成することにより全体をシリアライズする(ステップS1010)。
【0081】
CPU11が、シリアライザを生成する型が第一の型T0乃至Tn(nは自然数)の複数の型から選択する選択型であると判断した場合(ステップS1001:選択型)、CPU11は、型Tcが型Tiのみのサブタイプであるか否かを判断する(ステップS1011)。CPU11が、サブタイプではないと判断した場合(ステップS1011:NO)、CPU11は、ステップS1012をスキップし、CPU11が、サブタイプであると判断した場合(ステップS1011:YES)、数値‘i’(iは1〜nのいずれか)を出力するコードを生成し(ステップS1012)、第二の型Tcと選択された第一の型Tiとに基づいて、データ値をシリアライズするコードを生成する(ステップS1010)。
【0082】
そして、CPU11が、シリアライザを生成するがその他の型であると判断した場合(ステップS1001:その他の型)、CPU11は、既存の方法でシリアライズするコードを生成する(ステップS1013)。
【0083】
以上のように本実施の形態によれば、生成サイトごとに専用のシリアライザ及び/又はデシリアライザを生成することができるのでデータ処理時に動的にオブジェクトの値を調べてシリアライズに用いる型を判定するのではなく、クエリコンパイル時に静的に生成サイトごとのシリアライズに用いる型を確実に推論することができ、全体として演算処理時間を短縮することが可能となる。
【0084】
なお、本発明は上記実施例に限定されるものではなく、本発明の趣旨の範囲内であれば多種の変更、改良等が可能である。また、上記実施例ではシリアライズを例に挙げて説明しているが、生成サイトごとに特定された型を用いてデシリアライズすることで演算処理負荷が軽減されることは言うまでもない。
【符号の説明】
【0085】
1 生成装置
11 CPU
12 メモリ
13 記憶装置
14 I/Oインタフェース
15 ビデオインタフェース
16 可搬型ディスクドライブ
17 通信インタフェース
18 内部バス
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10