(57)【要約】【課題】組込機器におけるデータベース処理を好適に行わせることができる情報処理装置、組込機器、情報処理方法、およびプログラムを提供することである。【解決手段】実施形態の情報処理装置は、第１生成部と、評価部とを持つ。第１生成部は、一群のクエリに基づいて、データソースの検索処理の規則を、第１言語によって規定する、実行計画を生成する。評価部は、前記実行計画の少なくとも一部を、前記第１言語よりも解釈負荷が小さい第２言語に変換した際の性能向上度合を示す評価値を導出する。【選択図】図１
2019101813.tif 000002
【特許請求の範囲】
【請求項１】
一群のクエリに基づいて、処理の規則を第１言語によって規定する実行計画を生成する第１生成部と、
前記実行計画の少なくとも一部を、前記第１言語よりも解釈負荷が小さい第２言語に変換した際の性能向上度合を示す評価値を導出する評価部と、
を備える情報処理装置。
【請求項２】
前記実行計画に含まれる前記評価値の高い処理単位を優先的に前記第２言語に変換することで、前記第１言語と前記第２言語の組合せであるハイブリッドプランを生成する第２生成部を更に備える
請求項１記載の情報処理装置。
【請求項３】
前記ハイブリッドプランは、
前記第２言語で記述された辞書ファイルと、
前記第１言語で記述され、前記辞書ファイルの呼び出し情報を含む前記実行計画と
を含む、
請求項２記載の情報処理装置。
【請求項４】
前記第２生成部は、前記第２言語に変換する際に、前記実行計画に含まれる少なくとも一つの処理単位が関数の呼び出しを行う場合に、前記関数と等価なソースコードで呼び出し元の処理単位を置換する
請求項２または３記載の情報処理装置。
【請求項５】
前記第２言語は、記述するのに前記第１言語よりも多くのメモリ領域を消費する言語であり、
前記第２生成部は、使用可能なメモリ領域の上限を超えないように、前記実行計画に含まれる処理単位を前記第２言語に変換する、
請求項２から４のうちいずれか１項記載の情報処理装置。
【請求項６】
前記実行計画は、木構造で生成され、
前記評価部は、前記一群のクエリに含まれるクエリに対して設定された重み付け係数と、前記第２言語に変換される前記実行計画の一部を通過するパス数とに基づいて、前記評価値を導出する、
請求項１から５のうちいずれか１項に記載の情報処理装置。
【請求項７】
前記評価部は、
前記実行計画内の処理単位が判定に利用される回数である評価回数と、前記クエリに対して設定された重み付け係数との積に基づいて、前記評価値を導出する
請求項１から５のうちいずれか１項記載の情報処理装置。
【請求項８】
前記評価部は、前記一群のクエリを構成する個々のクエリの処理時間を前記評価値として導出する、
請求項１から５のうちいずれか１項記載の情報処理装置。
【請求項９】
前記実行計画に含まれる前記評価値の高い処理単位を優先的に前記第２言語に変換することで、前記第１言語と前記第２言語の組合せであるハイブリッドプランを生成する第２生成部を更に備え、
前記第２生成部は、前記個々のクエリに対して予め設定された最大実行時間よりも、前記評価値として導出される処理時間が短くなるように前記第２言語に変換する
請求項８記載の情報処理装置。
【請求項１０】
前記実行計画は、木構造で生成され、
前記実行計画における異なるパスにおける内容が一致する処理単位を抽出し、前記内容が一致する処理単位を統合する共通化部を更に備え、
前記評価部は、前記共通化部により前記内容が一致する処理単位が統合された前記実行計画に対して、前記評価値を導出する、
請求項１から９のうちいずれか１項に記載の情報処理装置。
【請求項１１】
入力されたクエリに基づいて、記憶部に記憶され、第１言語によって規定された実行計画と前記第１言語よりも解釈負荷が小さい第２言語で記述された処理単位とを含む一以上のハイブリッドプランの中から、一以上のハイブリッドプランを選択する選択部と、
前記選択部により選択されたハイブリッドプランを解釈してデータベースを検索する解釈実行部と、
を備える組込機器。
【請求項１２】
コンピュータが、
一群のクエリに基づいて、処理の規則を第１言語によって規定する実行計画を生成し、
前記実行計画の少なくとも一部を、前記第１言語よりも解釈負荷が小さい第２言語に変換した際の性能向上度合を示す評価値を導出する、
情報処理方法。
【請求項１３】
コンピュータに、
一群のクエリに基づいて、処理の規則を第１言語によって規定する実行計画を生成させ、
前記実行計画の少なくとも一部を、前記第１言語よりも解釈負荷が小さい第２言語に変換した際の性能向上度合を示す評価値を導出させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置、組込機器、情報処理方法、およびプログラムに関する。
【背景技術】
【０００２】
一般に、ＤＢＭＳ（Database Management System）では、クエリの実行リクエストが入力されたときにクエリに基づく実行計画を作成し、実行計画を作成した後、クエリに応じた処理を実行している。ここでいうクエリとは、ＤＢＭＳに保存されているデータに対する操作を表す命令である。クエリは、例えば、ＳＱＬ（Structured Query Language）で記述されたコマンドである。実行計画とは、クエリを元に、データソースから高速かつ効率的に、クエリにより指定された条件を満たすデータを取得するための計画を規定する情報である。クエリの数が増加すると、実行計画のサイズが多くなり、実行計画を格納するファイルサイズが肥大化する傾向がある。クエリがＳＱＬである場合、例えば、処理条件を示すＷＨＥＲＥ句の式の解釈に、比較的大きな負荷がかかる場合がある。これらに対応し、利用頻度の低い実行計画を圧縮したり、複数の実行計画に共通する処理単位を共通化してサイズ削減を図る場合がある。
【０００３】
ＤＢＭＳのうち、組込機器向けに構築されるＤＢＭＳは、使用できるメモリ容量が限られており、受信するクエリのパターンが予め想定可能であるという環境で構築される。このため、組込機器内で実行計画を作成することはせず、組込機器に搭載するシステムの開発環境において、予めクエリに基づく実行計画を作成しておき、組込機器に搭載するシステムと一緒に組込機器のＲＯＭ（Read Only Memory）等に保存する場合がある。
【０００４】
実行計画は、例えば木構造で保存される。木構造で保存される実行計画をツリープランと称する場合がある。ＤＢＭＳでクエリが実行される際は、まずその実行計画が解釈された後に、データソースからデータを取得するための処理が行われる。
【０００５】
また、実行計画は、ＣＰＵ（Central Processing Unit）によって迅速に実行可能な機械語に変換される場合もある。機械語は、実行計画を構成する抽象的な記述に比べて、ＣＰＵでの解釈に要する時間が短い。そのため、機械語に変換された実行計画は、機械語に変換しない実行計画に比して、解釈に要する時間が削減される。しかしながら、実行計画を機械語に変換した場合、実行計画に比べて大きなメモリ容量を要する。機械語は、抽象化された言語に比べて、記述するためのデータ量が多いためである。
【０００６】
このように、従来の組込機器向けＤＢＭＳでは、実施の態様に合った実行計画を柔軟に取得することができない場合があった。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許第８９４９２２２号明細書
【非特許文献】
【０００８】
【非特許文献１】Dmitry Melnik著、“Speeding up query execution in PostgreSQL using LLVM JIT compiler”、［online］、［平成２９年１０月３１日検索］、インターネット〈URL：https://llvm.org/devmtg/2016-09/slides/Melnik-PostgreSQLLLVM.pdf)
【非特許文献２】Surajit Chaudhuri著、“An overview of query optimization in relational systems”、［online］、［平成２９年１２月１日検索］、インターネット〈URL：https://dl.acm.org/citation.cfm?id=275492)
【非特許文献３】A. Rosenthal著、他１名、“Anatomy of a Modular Multiple Query Optimizer”、（米国） Proceedings of the 14th International Conference on Very Large Databases (VLDB), IEEE, Long Beach, CA、1988年8月、p230-239
【非特許文献４】Dmitry Melnik著、他３名、“JIT-Compiling SQL Queries in PostgreSQL Using LLVM(PGCon 2017)”、［online］、［平成２９年１０月３１日検索］、インターネット〈URL：https://www.pgcon.org/2017/schedule/attachments/467_PGCon%202017-05-26%2015-00%20ISPRAS%20Dynamic%20Compilation%20of%20SQL%20Queries%20in%20PostgreSQL%20Using%20LLVM%20JIT.pdf)
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明が解決しようとする課題は、組込機器におけるデータベース処理を好適に行わせることができる情報処理装置、組込機器、情報処理方法、およびプログラムを提供することである。
【課題を解決するための手段】
【００１０】
実施形態の情報処理装置は、第１生成部と、評価部とを持つ。前記第１生成部は、一群のクエリに基づいて、データソースの検索処理の規則を、第１言語によって規定する、実行計画を生成する。前記評価部は、前記実行計画の少なくとも一部を、前記第１言語よりも解釈負荷が小さい第２言語に変換した場合の性能向上度合を評価する評価値を導出する。
【図面の簡単な説明】
【００１１】
【図１】第１の実施形態に係る情報処理装置１００の構成を示す図。
【図２】第１の実施形態に係る情報処理装置１００に入力されるクエリを例示した図。
【図３】第１の実施形態に係る情報処理装置１００に入力されるクエリに基づく実行計画を、共通化部１２０にて共通化処理することについて説明するための図。
【図４】第１の実施形態に係る情報処理装置１００の共通化部１２０での共通化処理を示すフローチャート。
【図５】第１の実施形態に係る情報処理装置１００に入力されるクエリを例示した図。
【図６】第１の実施形態に係る情報処理装置１００に入力されるクエリに基づく実行計画を、共通化部１２０にて共通化処理する過程を例示した図。
【図７】第１の実施形態に係る情報処理装置１００に入力されるクエリに基づく実行計画を、共通化部１２０にて共通化処理する過程を例示した図。
【図８】第１の実施形態に係る情報処理装置１００に入力されるクエリに基づく実行計画を、共通化部１２０にて共通化処理する過程を例示した図。
【図９】第１の実施形態に係る情報処理装置１００に入力されるクエリに基づく実行計画を、共通化部１２０にて共通化処理する過程を例示した図。
【図１０】第１の実施形態に係る情報処理装置１００に入力されるクエリを例示した図。
【図１１】第１の実施形態に係る情報処理装置１００に入力されるクエリに基づく実行計画を示した図。
【図１２】第１の実施形態に係る情報処理装置１００の評価部１３０での評価値導出例を示す図。
【図１３】第１の実施形態に係る情報処理装置１００の第２生成部１４０での処理の流れの一例を示すフローチャート。
【図１４】第１の実施形態に係る情報処理装置１００の第２生成部１４０での処理の流れの一例を示す図。
【図１５】第１の実施形態に係る情報処理装置１００の評価部１３０での評価値導出の一例を示す図。
【図１６】第１の実施形態に係る情報処理装置１００の評価部１３０での評価値導出の具体例を示す図。
【図１７】第１の実施形態に係る情報処理装置１００の評価部１３０での評価値導出の一例を示す図。
【図１８】第１の実施形態に係る情報処理装置１００の評価部１３０での評価値導出の一例を示す図。
【図１９】第１の実施形態に係る情報処理装置１００の第２生成部１４０での処理の流れの一例を示すフローチャート。
【図２０】第１の実施形態に係る情報処理装置１００の第２生成部１４０での処理の流れの一例を示す図。
【図２１】第２の実施形態に係る組込機器２００の構成を示す図。
【発明を実施するための形態】
【００１２】
以下、実施形態の情報処理装置、およびプログラムを、図面を参照して説明する。
【００１３】
（第１の実施形態）
［構成］
以下、第１の実施形態について説明する。図１は、第１の実施形態の情報処理装置１００の構成図である。図１に示すように、情報処理装置１００は、入力装置１に対して入力された指示を取得して動作する。情報処理装置１００は、例えば、第１生成部１１０と、共通化部１２０と、評価部１３０と、第２生成部１４０とを備える。これらの構成要素は、例えば、ＣＰＵなどのハードウェアプロセッサがプログラム（ソフトウェア）を実行することにより実現される。また、これらの構成要素のうち一部または全部は、ＬＳＩ（Large Scale Integration）やＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field-Programmable Gate Array）、ＧＰＵ（Graphics Processing Unit）などのハードウェア（回路部；circuitryを含む）によって実現されてもよいし、ソフトウェアとハードウェアの協働によって実現されてもよい。情報処理装置１００は、組込システムを搭載する組込機器２００の開発環境を提供する装置（開発装置）である。なお、第１の実施形態において共通化部１２０は省略されてもよい。
【００１４】
第１生成部１１０には、入力装置１からクエリ群が入力される。このクエリ群は、組込機器２００で実行されることが予め想定されているデータ処理を規定するものである。第１生成部１１０は、入力されたクエリ群の解釈に必要であるデータベースのメタ情報を呼び出し、実行計画を作成する。データベースのメタ情報とは、組込機器２００に搭載されたデータベースの構造に関する情報である。データベースの構造に関する情報とは、例えば、テーブルを構成するカラムや、データ型や、最大データレコード数等である。実行計画とは、入力されたクエリ群を解釈した処理結果を、第１言語で記述（規定）したものである。実行計画とは、例えば、“ＳＱＬクエリのＷＨＥＲＥ句で指定した条件を満たすデータを、テーブルＴ１の索引を用いて検索した後、テーブルＴ１とテーブルＴ２の選択処理を行う”といった処理の内容や順序を表現する。実行計画は、実際には言語で記述されるものであるが、以下の説明では抽象化された木構造で表されるものとして説明する。
【００１５】
共通化部１２０には、第１生成部１１０から、実行計画が入力される。共通化部１２０は、実行計画を分解し、実行計画を構成するノードを解釈する。ノードとは、実行計画の処理単位のうち、情報処理装置１００が一つの処理単位として扱う命令または式である。具体的に、ノードとは、例えば、テーブル結合命令や、“テーブルＴ１のカラムＡと、テーブルＴ２のカラムＢが一致するとき“といった条件式である。共通化部１２０は、実行計画を構成するすべてのノードを解釈し、内容が一致するノードがある場合、必要に応じて共通化する処理を行う。なお、ノードの内容が一致するとは、検索対象が同じテーブルであること、他のノードと内容が一致するノードがあること、結合条件が共通すること等が含まれる。
【００１６】
評価部１３０には、共通化部１２０から実行計画が入力される。評価部１３０は、入力装置１から取得した所定の条件に基づき、実行計画に含まれる各ノードを第２言語に変換した場合の性能向上度合を評価した、評価値を導出する。第２言語とは、第１言語に比べて、ＣＰＵが解釈する際の処理負荷が小さい記述である。第２言語は、例えば、機械語やバイトコードである。
【００１７】
第２生成部１４０には、共通化部１２０から実行計画が入力され、更に、評価部１３０から、評価値が入力される。第２生成部１４０は、入力装置１から取得した制約条件を満たす範囲で、評価値の高いノードを選択し、選択したノード（実行計画の一部）を第２言語に変換することで、ハイブリッドプランを生成する。なお、第２生成部１４０は自動化された処理によって第２言語に変換してもよいし、情報処理装置１００を用いる開発者が、評価部１３０により導出された評価値を参照しながら実行計画の一部を第２言語に変換する操作を受け付けながら変換を行ってもよい。
【００１８】
［共通化］
以下、第１の実施形態の情報処理装置１００の共通化部１２０によって行われる共通化処理について説明する。
【００１９】
図２は、情報処理装置１００に入力されるクエリ群の一例を示す図である。図２に示すクエリ１は、テーブルＴ１およびテーブルＴ２から、テーブルＴ１とテーブルＴ２に共通するカラムＡの示す値が一致するレコードのうち、テーブルＴ１におけるカラムＣが０より大きい値であるレコードと、テーブルＴ２におけるカラムＢの値が０であるレコードとを抽出し、値が一致するカラムＡを共通化して、少なくともカラムＡ、カラムＢおよびカラムＣを含むレコードを構成して出力することを命令している。図２に示すクエリ２は、テーブルＴ２から、テーブルＴ２のカラムＢの値が０であるレコードを構成して、少なくともカラムＡを含むレコードを出力することを命令している。
【００２０】
図３（Ａ）は、図２で示すクエリ１およびクエリ２の内容に基づく実行計画を示す図であり、図３（Ｂ）は、クエリ１およびクエリ２の内容に基づく実行計画の一部のノードが、共通化部１２０によって共通化された結果を表した図である。図３（Ａ）に示すクエリ１は、ノードＮ１１〜Ｎ１５を含む。図３（Ａ）に示すクエリ２は、ノードＮ２１およびノードＮ２２を含む。共通化部１２０は、ノードＮ１１〜Ｎ１５、およびノードＮ２１〜Ｎ２２から、２つの任意のノードを選択し、選択した２つのノードの内容が一致し、かつ、その子ノードがすべて共通する場合に、２つのノードを共通化する。子ノードとは、着目するノードに対応付き、着目するノードから木構造の基点とは逆の方向に一ステップ分離れたノードをいう。以下、着目するノードから木構造の基点の方向を「上位」、着目するノードから木構造の基点とは逆の方向を「下位」と称する。例えば、実行計画において、下位のノードほど、実際の処理としては先に行われるものである。なお、子ノードよりも下位のノードに関して、この実施形態では最下位から順に共通化するため、子ノードが共通する場合、それよりも下位のノードも共通化されていると考えられる。図３（Ａ）では、ノードＮ１４およびノードＮ１５と、ノードＮ２１およびノードＮ２２は、共通化部１２０によって、共通化の対象であると判断される。そのため図３（Ｂ）では、これらはノードＮ１４およびノードＮ１５に統合されている。
【００２１】
図４は、第１の実施形態の情報処理装置１００の共通化部１２０により実行される共通化処理の流れの一例を示すフローチャートである。
【００２２】
共通化部１２０は、実行計画全体に含まれる最下位の階層のノードから順に以下の処理を行う。まず、共通化部１２０は、着目する階層のノードについて、ノードの内容が一致し、かつすべての子ノードが共通する（既に共通化されている）ノードの組ｐ１およびｐ２が存在するか否かを判定する。（ステップＳ１００）。ノードの組ｐ１およびｐ２が存在すると判定した場合、共通化部１２０は、ｐ１とｐ２の共通化を行う。（ステップＳ１１０）。次に、共通化部１２０は、次の判定対象を１階層上のノードに移す（ステップＳ１２０）。次に、共通化部１２０は、次の判定対象がノードを構成する最上位の階層である第１階層であるか否かを判定する（ステップＳ１３０）。次の判定対象が第１階層でない場合、Ｓ１００に処理を戻す。次の判定対象が第１階層である場合、本フローチャートの処理が終了する。
【００２３】
以下、第１の実施形態の情報処理装置１００の共通化部１２０によって、図５に示すＳＱＬ文を含むクエリ１、クエリ２およびクエリ３に対して共通化処理が行われる例を示す。図５は、情報処理装置１００に入力されるクエリ群の一例を示す図である。図５に示すクエリ１は、テーブルＴ１から、テーブルＴ１のカラムＡの値が０であるレコードのうち、テーブルＴ１におけるカラムＢが０より大きい値であるレコードを抽出し、少なくともカラムＡおよびカラムＢを含むレコードを構成して出力することを命令している。図５に示すクエリ２は、テーブルＴ１およびテーブルＴ２から、テーブルＴ１とテーブルＴ２に共通するカラムＡの示す値が一致するレコードのうち、テーブルＴ２におけるカラムＢが０より大きい値であるレコードとを抽出し、中身が一致するカラムＡを共通化して、少なくともカラムＡおよびカラムＢを含むレコードを構成して出力することを命令している。図５に示すクエリ３は、テーブルＴ３とクエリ２の副問い合わせを行った結果から、テーブルＴ２とテーブルＴ３に共通するカラムＡの示す値が一致するレコードを抽出し、少なくともカラムＡを含むレコードを構成して出力することを命令している。
【００２４】
図図６〜９は、図５で示すクエリ１、クエリ２およびクエリ３に基づく実行計画のノードが、共通化部１２０によって、共通化される過程の一例を、段階を追って示す図である。図６は、クエリ１、クエリ２およびクエリ３に基づく実行計画を示す図である。図６に示すクエリ１は、ノードＮ１１〜Ｎ１４を含む。図６に示すクエリ２は、ノードＮ２１〜Ｎ２４を含む。図６に示すクエリ３は、ノードＮ３１〜Ｎ３６を含む。
【００２５】
図７は、共通化部１２０によって、図６の状態から、共通化処理が１段階行われた様子を示す図である。図７の状態では、図６のノードＮ１４、ノードＮ２３およびノードＮ３４は、共通化部１２０によって、ノードＮ１４に統合されている。また、図７の状態では、図６のノードＮ２４およびノードＮ３５は、共通化部１２０によって、ノードの内容が一致していると判定され、ノードＮ２４に統合されている。これに伴って、ノードＮ１４に統合された各ノード（ノードＮ１４を含む）の上位ノードであったノードＮ１３、ノードＮ２２、およびノードＮ３３がノードＮ１４に対応付けられ、ノードＮ２４に統合された各ノード（ノードＮ２４を含む）の上位ノードであったノードＮ２１およびノードＮ３２がノードＮ２４に対応付けられる。
【００２６】
図８は、共通化部１２０によって、図７の状態から、共通化処理が更に１段階行われた様子を示す図である。図８の状態では、図７のノードＮ１３、ノードＮ２２およびノードＮ３３は、共通化部１２０によって、ノードＮ１３に統合されている。これに伴って、ノードＮ１３に統合された各ノード（ノード１３を含む）の上位ノードであったノードＮ２１およびノードＮ３図９３がノードＮ１３に対応付けられる。
【００２７】
図９は、共通化部１２０によって、図８の状態から、共通化処理が更に１段階行われた様子を示す図である。図９の状態では、図８のノードＮ２１およびノードＮ３２は、共通化部１２０によって、ノードＮ２１に統合されている。これに伴って、ノードＮ３２に統合された各ノード（ノード１３を含む）の上位ノードであったノードＮ３１がノードＮ２１に対応付けられる。以上、図５に示すＳＱＬ文を含むクエリ１、クエリ２およびクエリ３に対して共通化処理が行われる過程の例の説明を終了する。
【００２８】
［評価手法とハイブリットプラン作成手法］
以下、評価部１３０による評価手法および第２生成部１４０によるハイブリッドプラン生成手法について第１例、第２例、および第３例を挙げて説明する。第１例は、所定の条件として重み付け係数が設定され、評価部１３０により評価値を導出し、第２生成部１４０により評価値を基にハイブリッドプランを作成する例である。第２例は、所定の条件として重み付け係数と評価回数が設定され、評価部１３０により評価値を導出し、第２生成部１４０により、制約条件としてハイブリッドプランの最大許容サイズが設定され、評価値と最大許容サイズを基にハイブリッドプランを作成する例である。第３例は、所定の条件としてそれぞれのクエリの最大実行時間が設定される例である。
【００２９】
［評価手法およびハイブリッドプラン生成手法の第１例］
評価部１３０は、あるノードの評価値を、そのノードを通過する実行計画のパスの基点となったクエリに付与された重み付け係数の和として求める。後述するように重み付け係数が一定であるとすると、あるノードの評価値は、そのノードを通過する実行計画のパスに基づく値となる。以下の説明では、情報処理装置１００の利用者によって、クエリ毎に任意の重み付け係数が予め設定されているものとする。
【００３０】
図１０は、入力されるクエリ群の他の一例を示す図である。図１０に示すクエリ１は、テーブルＴ１から、テーブルＴ１におけるカラムＡの値が０であるレコードを抽出し、更にテーブルＴ１のカラムＢが０より大きい値であるレコードを抽出して、少なくともカラムＡおよびカラムＢを含むレコードを構成して出力することを命令している。図１０に示すクエリ２は、テーブルＴ１から、テーブルＴ１におけるカラムＢの値が０より大きい値であるレコードを抽出し、更にテーブルＴ１のカラムＣの値が０であるレコードを抽出して、少なくともカラムＢおよびカラムＣを含むレコードを構成して出力することを命令している。
【００３１】
図１１は、図１０に示すクエリ１およびクエリ２に基づく実行計画を示す図である。なお実行計画のうちクエリ１に起因する部分と、クエリ２に起因する部分とは、共通化部１２０により一部のノードが共通化されている。ノードＮ１３およびノードＮ１４が共通化された部分に相当する。図１２は、図１０で示すクエリ１およびクエリ２に付与された重み付け係数と、ノード毎に導出される評価値と、を例示した図である。図１２の上図に示す通り、クエリ１およびクエリ２にはそれぞれ所定の条件として、重み付け係数Ｗ１、Ｗ２が設定されている。ここで、重み付け係数Ｗ１＝Ｗ２＝１であっても構わない。この場合、重み付け係数を設定する手順自体が省略されてもよい。
【００３２】
図１２の下図に示すように、評価部１３０は、ノードＮ１１の評価値として、クエリ１に対して設定された重み付け係数のＷ１を導出する。また評価部１３０は、ノードＮ１２の評価値として、クエリ１に対して設定された重み付け係数のＷ１を導出する。また評価部１３０は、ノードＮ２１の評価値として、クエリ２に対して設定された重み付け係数であるＷ２を導出する。また評価部１３０は、ノードＮ２２の評価値として、クエリ２に対して設定された重み付け係数であるＷ２を導出する。また評価部１３０は、ノードＮ１３の評価値として、クエリ１およびクエリ２に対して設定された重み付け係数の和であるＷ１＋Ｗ２を導出する。また評価部１３０は、ノードＮ１４の評価値として、クエリ１およびクエリ２に対して設定された重み付け係数の和であるＷ１＋Ｗ２を導出する。
【００３３】
この場合、第２生成部１４０は、評価部１３０の導出した評価値を基に、以下のような処理を行う。なお、第２生成部１４０は、ノードを第２言語に変換する規則である制約条件として、ハイブリッドプラン全体の最大許容サイズを基に判定を行うものとする。
【００３４】
まず、第２生成部１４０は、入力された実行計画の全体サイズを求める。第２生成部１４０は、実行計画の合計サイズを想定メモリとして一時的に記憶する。第２生成部１４０は、評価値の高いノードから、優先的に、第２言語に変換する対象として認識する。第２生成部１４０は、対象のノードを第２言語に変換した場合に増加するサイズを想定メモリに追加する。第２生成部１４０は、想定メモリが最大許容サイズを超過する直前まで、次に評価値の高いノードを第２言語に変換する対象として認識し、想定メモリを算出する上記の処理を繰り返す。
【００３５】
図１３は、評価部１３０によって第１例の手法でノードの評価値の導出が行われ、所定の条件がハイブリッドプラン全体の最大許容サイズである場合に、評価部１３０および第２生成部１４０により行われる処理の流れを表すフローチャートである。
【００３６】
まず、評価部１３０は、ノードの評価値を導出する（ステップＳ２００）。次に、第２生成部１４０は、実行計画全体の想定メモリを導出する（ステップＳ２１０）。次に、第２生成部１４０は、導出した想定メモリが、情報処理装置１００の利用者が設定した最大許容サイズ以内か否かを判定する（ステップＳ２２０）。第２生成部１４０は、想定メモリが最大許容サイズ以内であると判定した場合、第２言語への変換が行われていないノードのうち、最も評価値の高いノードを第２言語への変換し、第２言語に変換した結果、増加するサイズを想定メモリに加算する（ステップＳ２３０）。第２生成部１４０は、想定メモリが最大許容サイズを超過するまで、Ｓ２２０からＳ２３０の処理を繰り返し実行する。想定メモリが最大許容サイズを超過すると判定した場合、第２生成部１４０は、一連の処理を終了する（ステップＳ２４０）。これにより本フローチャートの処理は終了する。
【００３７】
以下、このハイブリッドプランの生成例について具体例を用いて説明する。第２生成部１４０のハイブリッドプランの選択方法について、図１４を用いて説明する。図１４は、図２で示すクエリ１およびクエリ２に、制約条件として最大許容サイズと、ノードのサイズを例示した図である。図１４の上図に示す通り、情報処理装置１００の利用者があらかじめ設定したハイブリッドプランの最大許容サイズは２００バイトであるとする。また、ノードの評価値は予め導出されており、ノードＮ１１の評価値＝１００、ノードＮ１２の評価値＝５０、ノードＮ１３の評価値＝５０、ノードＮ１４の評価値＝１０、ノードＮ１５の評価値＝１０であるとする。また、ノードが第１言語で記述される場合のサイズは、ノードＮ１１が８バイト、ノードＮ１２が４バイト、ノードＮ１３が４バイト、ノードＮ１４が４バイト、ノードＮ１５が５バイトであるとする。また、ノードが第２言語で記述される場合に増加するサイズは、ノードＮ１１が５０バイト、ノードＮ１２が６０バイト、ノードＮ１３が６０バイト、ノードＮ１４が６０バイト、ノードＮ１５が６０バイトであるとする。第２生成部１４０は、図１４の下図に示す通り、まず、すべてのノードが第１言語である場合の想定メモリの演算を行う。第２生成部１４０は、想定メモリが２５バイトであり、予め設定された最大許容サイズの２００バイトより小さいため、次に、最も評価値の高いノードＮ１１を第２言語に変換する場合の想定メモリの演算を行う。第２生成部１４０は、想定メモリが１９５バイトであり、予め設定された最大許容サイズの２００バイトより小さいため、ノードＮ１１を第２言語に変換する。第２生成部１４０は、更に、次に最も評価値の高いノードＮ１４とノードＮ１５を第２言語に変換する場合の想定メモリの演算を行う。第２生成部１４０は、想定メモリが３１５バイトであり、予め設定された最大許容サイズの２００バイトを超過するため、ノードＮ１４とノードＮ１５を第２言語に変換しないと判定し、一連の処理を終了する。
【００３８】
このように、評価部１３０は、あるノードの評価値を、そのノードを通過する実行計画のパスの基点となったクエリに付与された重み付け係数の和として求める。評価部１３０は、重み付け係数が一定である場合、あるノードの評価値を、そのノードを通過する実行計画のパスの数に基づく値として求める。また、第２生成部１４０は、所定条件として設定されたハイブリッドプラン全体の最大許容サイズと、評価値とに基づいて、一部または全部のノードを第２言語に変換する。
【００３９】
［評価手法およびハイブリッドプラン生成手法の第２例］
第２例において、評価部１３０は、あるノードの評価値を、そのノードを通過する実行計画のパスの基点となったクエリに付与された重み付け係数の和と、実行計画内の評価回数との積として求める。ここでいう評価回数とは、実行計画のノードの判定が実行される回数のことをいう。評価回数は、事前に測定されてもよい。また、評価回数は、所定の演算方法を設けて推定してもよい。また、評価回数は、実行計画の最下位のノードで呼び出すテーブルレコードが全件呼び出された場合の数と同値とみなし、最下位のノードで呼び出すテーブルに格納できる最大レコード数としてもよい。以下の説明では、情報処理装置１００の利用者によって、クエリ毎に任意の重み付け係数が予め設定されているものとする。
【００４０】
図１５は、図２で示すクエリ１およびクエリ２に付与された重み付け係数と、図２で示すクエリ１およびクエリ２によって参照されるテーブルＴ１およびテーブルＴ２の最大レコード数と、ノード毎の導出される評価値を例示した図である。図１５の上図に示す通り、図２に示すクエリ１およびクエリ２にはそれぞれ所定の条件として、重み付け係数Ｗ１、Ｗ２が設定されている。ここで、重み付け係数Ｗ１＝Ｗ２＝１であっても構わない。また、図１５の上図に示す通り、図２で示すクエリ１およびクエリ２によって参照されるテーブルＴ１およびテーブルＴ２の最大レコード数Ｒ（Ｔ１）およびＲ（Ｔ２）は、予め測定されている。ここで、最大レコード数Ｒ（Ｔ１）＝Ｒ（Ｔ２）であっても構わない。
【００４１】
図１５の下図に示すように、評価部１３０は、ノードＮ１１の評価値として、クエリ１に対して設定された重み付け係数のＷ１と、テーブルＴ１の最大レコード数Ｒ（Ｔ１）と、テーブルＴ２の最大レコード数Ｒ（Ｔ２）との積を導出する。また評価部１３０は、ノードＮ１２の評価値として、クエリ１に対して設定された重み付け係数のＷ１と、テーブルＴ２の最大レコード数Ｒ（Ｔ２）と、係数Ｆとの積を導出する。係数Ｆは、テーブルＴ１に対してノードＮ１４を実行した場合に、どの程度のレコードが抽出されるかの推定値が得られるような定数としてよい。また、評価部１３０は、ノードＮ１４の評価値として、クエリ１とクエリ２に対して設定された重み付け係数の和であるＷ１＋Ｗ２と、テーブルＴ１の最大レコード数Ｒ（Ｔ１）と、係数Ｆとの積を導出する。
【００４２】
図１６に示すように、評価部１３０の評価処理内容を、更に具体的に説明する。図１６は、図１５の重み付け係数、評価回数に具体的な値を設定し、評価値を算出した例である。図１６に示すように、クエリ１の重み付け係数Ｗ１＝１０、クエリ２の重み付け係数Ｗ２＝１、テーブルＴ１の最大レコード数Ｒ（Ｔ１）＝１００、テーブルＴ２のＲ（Ｔ２）＝２００、係数Ｆ＝１とした場合の、ノードＮ１１〜Ｎ１４の評価値を算出する。評価部１３０は、ノードＮ１１の評価値を２００，０００、ノードＮ１２の評価値を２，０００、ノードＮ１４の評価値を１，１００と算出する。第２生成部１４０、または情報処理装置１００を用いる開発者は、ノードＮ１１、ノードＮ１２、ノードＮ１４の順に、第１言語から第２言語に変換する。このように、評価部１３０は、あるノードの評価値を、そのノードを通過する実行計画のパスの基点となったクエリに付与された重み付け係数の和と、評価回数との積として求める。また、第２生成部１４０は、評価値を基に、ノードを第２言語に変換する。
【００４３】
［評価手法およびハイブリッドプラン生成手法の第３例］
第３例において、評価部１３０は、あるノードを、それぞれのクエリの実行時間を基に評価する。この場合、評価部１３０は、評価値の代替として、クエリの実行時間を用いて評価を行う。以下の説明では、情報処理装置１００の利用者によって、クエリ毎に最大実行時間が任意に設定されているものとする。
【００４４】
図１７は、評価部１３０で、クエリの実行時間の推定を行う処理の一例を示す図である。図１７は、上述の図２に示すクエリ１およびクエリ２に基づく実行計画のノードを示す図３（Ｂ）を用いて説明する。図１７は、図２に示すクエリ１およびクエリ２に、所定の条件に含まれる最大実行時間を例示した図である。図１７の上図に示す通り、図２に示すクエリ１およびクエリ２にはそれぞれ所定の条件として、最大実行時間ｔｍａｘ（１）およびｔｍａｘ（２）が設定されている。ここで、ｔｍａｘ（１）＝ｔｍａｘ（２）であっても構わない。また、図１７の上図に示す通り、図２で示すクエリ１およびクエリ２によって参照されるテーブルＴ１およびテーブルＴ２の最大レコード数Ｒ（Ｔ１）およびＲ（Ｔ２）は、予め測定されている。ここで、最大レコード数Ｒ（Ｔ１）＝Ｒ（Ｔ２）であっても構わない。
【００４５】
図１７の下図に示すように、評価部１３０は、ノードＮ１１の評価回数として、テーブルＴ１の最大レコード数Ｒ（Ｔ１）と、テーブルＴ２の最大レコード数Ｒ（Ｔ２）との積を導出する。また評価部１３０は、ノードＮ１２の評価回数として、テーブルＴ２の最大レコード数Ｒ（Ｔ２）を導出する。また評価部１３０は、ノードＮ１４の評価回数として、テーブルＴ１の最大レコード数Ｒ（Ｔ１）を導出する。
【００４６】
ここで、単一のノードが評価されるのに要する時間を単位実行時間ｔとする。ここでいうノードの評価とは、後述する組込機器２００の選択部２４０が、ノードを解釈し、データソースがノードを満たすか否かを検証することを指す。図１７の上図に示す通り、クエリ１の実行時間は、ノードＮ１１、ノードＮ１２およびノードＮ１４の評価に要する時間の和である、｛Ｒ（Ｔ１）×Ｒ（Ｔ２）｝＋Ｒ（Ｔ１）＋Ｒ（Ｔ２）と、単位実行時間ｔとの積である。また図１７の上図に示す通り、クエリ２の実行時間は、ノードＮ１２の評価に要する時間である、Ｒ（Ｔ１）と単位実行時間ｔとの積である。
【００４７】
評価部１３０は、あるクエリの実行時間が、情報処理装置１００の利用者により設定されたクエリの最大実行時間ｔｍａｘを上回る場合、評価回数が多いノードから優先的に第２言語に変換対象に指定する。第２生成部は、評価部１３０から変換対象に指定されたノードを第２言語に変換する。ここで、クエリを第２言語に変換した場合のクエリ高速化率をｓとすると、第２言語に変換されたノードの１回あたりの実行時間は、元の実行時間を高速化率ｓで除した値となる。例えば、評価部１３０は、評価回数の最も多いノードＮ１１を第２言語への変換対象と指定する。ノードＮ１１の実行時間は、第２言語に変更された結果、｛Ｒ（Ｔ１）＋Ｒ（Ｔ２）｝／ｓとなる。評価部１３０は、実行時間がクエリ１の最大実行時間ｔｍａｘ（１）を下回るまで、第２言語への変換対象とするノードの判定を繰り返す。
【００４８】
図１８に示す通り、評価部１３０の評価処理内容を、更に具体的に説明する。図１８は、図１７の最大実行時間および最大レコード数に具体的な値を設定し、さらに単位実行時間ｔおよびクエリ高速化率ｓに具体的な値を設定して評価した例である。評価部１３０は、図１８に示す通り、クエリ１の最大実行時間ｔｍａｘ（１）＝５０、クエリ２の最大実行時間ｔｍａｘ（２）＝１０、テーブルＴ１の最大レコード数Ｒ（Ｔ１）＝１００、テーブルＴ２のＲ（Ｔ２）＝２００、単位実行時間ｔ＝０．０１、高速化率ｓ＝１０とし、クエリ１およびクエリ２の実行時間を導出する。評価部１３０は、ノードＮ１１の評価回数を２０，０００、ノードＮ１２の評価回数を２００、ノードＮ１４の評価回数を１００と導出する。また評価部１３０は、クエリ１の実行時間を２０３、クエリ２の実行時間は１と導出する。評価部１３０は、クエリ１の実行時間が、クエリ１の最大実行時間ｔｍａｘ（１）を超過しているため、クエリ１の、最も評価回数の多いノードＮ１１を第２言語への変換対象と指定する。第２生成部１４０は、ノードＮ１１を、第１言語から第２言語に変換する。クエリ１の実行時間は、第２言語に変更された結果、２３となる。評価部１３０は、クエリ１の実行時間がクエリ１の最大実行時間ｔｍａｘ（１）を下回ったため、第２言語への変換対象とするノードの判定を終了する。
【００４９】
図１９は、第１の実施形態の情報処理装置１００の評価部１３０および第２生成部１４０により、所定の条件として実行時間で評価したクエリを第２言語に変換する処理の流れの一例を示すフローチャートである。
【００５０】
まず、評価部１３０は、実行計画のすべてのノードの評価回数を導出する（ステップＳ３００）。次に、評価部１３０は、ノードの評価回数を用いてクエリの実行時間を導出する。（ステップＳ３１０）。次に、評価部１３０は、クエリの実行時間が、予め設定された最大実行時間を超過するか否かを判定する（ステップＳ３２０）。最大実行時間を超過すると判定した場合、第２生成部１４０は、クエリを構成するノードから最も評価回数の多いノードを、第２言語に変換する（ステップＳ３３０）。次に、評価部１３０は、Ｓ３３０で第２言語に変換されたノードの評価回数を高速化率ｓで除した値を用いて、実行時間を再計算する（ステップＳ３４０）。評価部１３０は、再計算した実行時間が最大実行時間を超過しなくなるまで、Ｓ３２０からＳ３３０の処理を繰り返し実行する。最大実行時間を超過しないと判定した場合、評価部１３０は、一連の処理を終了する。これにより本フローチャートの処理は終了する。
【００５１】
このように、評価部１３０は、それぞれのクエリの実行時間を基にノードを評価する。また、第２生成部１４０は、それぞれのクエリの実行時間を基に、ノードを第２言語に変換する。
【００５２】
［ハイブリッドプランの生成結果例］
図２０は、第２生成部１４０が、評価値の導出の後に、実行計画をハイブリッドプランに変換した結果の一例を示す図である。第２生成部１４０は、図２０の左図で示すように、ノードＮ１４を第２言語に変換したものとする。ノードＮ１４に対応する第２言語は、実行計画を格納するファイルとは別のファイルに保存される。別途保存するファイルを辞書ファイルと称する。ノードＮ１４に対応する第２言語は、キー値Ｋ１と対応付けて辞書ファイルに保存される。ノードＮ１４が実行される場合には、キー値Ｋ１を用いて、専用の関数で辞書ファイルから第２言語の呼び出しが行われる。
【００５３】
また、第２生成部１４０は、変換対象であるノードに関数を呼び出す記述がある場合、関数を呼び出す部分をインライン展開してもよい。インライン展開とは、呼び出し元のノードの関数を呼び出す部分に、関数と等価なソースコードを展開して置換するものである。第２生成部１４０は、インライン展開によって、関数を呼び出す際のオーバーヘッド・タイムを節約することができ、インライン展開しない場合よりも高速処理が可能な実行計画を生成できる。
【００５４】
このような構成によって、情報処理装置１００は、評価値に応じて、実行計画を少なくとも部分的に第１言語から第２言語に変換した、ハイブリッドプランの生成ができる。
【００５５】
［まとめ］
以上説明した第１の実施形態の情報処理装置１００によれば、一群のクエリに基づいて、処理の規則を第１言語によって規定する実行計画を生成する第１生成部１１０と、実行計画の少なくとも一部を、第１言語よりも解釈負荷が小さい第２言語に変換した場合の性能向上度合を評価する、評価値を導出する評価部１３０と、を備えることにより、組込機器２００におけるデータベース処理を好適に行わせることができる。
【００５６】
また、第１の実施形態の情報処理装置１００によれば、第２生成部１４０を更に備えることにより、評価値の高い実行計画の処理単位が優先的に第２言語に変換され、組込機器２００におけるデータベース処理を好適に行わせる実行計画である、第１言語と第２言語の組合せであるハイブリッドプランが生成できる。
【００５７】
（第２の実施形態）
以下、第２の実施形態について説明する。第２の実施形態は、組込システムを搭載する組込機器２００に、第１の実施形態における情報処理装置１００の生成物（ハイブリッドプラン）を搭載したものである。図２１は、第２の実施形態の組込機器２００の構成図である。図２１に示すように、組込機器２００は、例えば、組込アプリケーション２１０と、選択部２４０と、ハイブリッドプラン解釈実行部２５０と、実行計画解釈実行部２６０と、組込データベース２７０と、記憶部２８０とを持つ。
【００５８】
組込機器２００は、他の情報処理装置とは接続されていない、組込システムを搭載した機器である。組込機器２００には予め、開発環境である情報処理装置１００から、実行計画を構成するファイルと、ハイブリッドプランを構成するファイルが複写されている。
【００５９】
組込機器２００の組込アプリケーション２１０は、例えば、クエリ送信部２２０と、クエリ受信部２３０とを備える。クエリ送信部２２０には、組込アプリケーション２１０から、組込機器２００の利用者の操作に基づいた既知のクエリの実行が依頼される。選択部２４０には、クエリ送信部２２０から、既知のクエリの実行の依頼が入力される。
【００６０】
また、選択部２４０は、既知のクエリを識別し、実行計画の呼び出しがあるか、ハイブリッドプランの呼び出しがあるかを判定する。ハイブリッドプラン解釈実行部２５０には、選択部２４０から、既知のクエリに対応するハイブリッドプランの呼び出しの指示が入力される。また、実行計画解釈実行部２６０には、既知のクエリに対応する実行計画の呼び出しの指示が入力される。
【００６１】
ハイブリッドプラン解釈実行部２５０は、記憶部２８０から、ハイブリッドプランを呼び出し、辞書ファイルを呼び出す関数を含むか否かを判定する。ハイブリッドプラン解釈実行部２５０は、解釈対象のノードが辞書ファイルを呼び出す関数を含む場合、対応する第２言語を辞書ファイルから呼び出し、対応する第２言語をノードの解釈に利用する。ハイブリッドプラン解釈実行部２５０には、解釈したハイブリッドプランを基に、組込データベース２７０から条件を満たす処理結果が入力される。
【００６２】
また、実行計画解釈実行部２６０には、記憶部２８０から、第２言語を含まない実行計画を呼び出し、解釈する。実行計画解釈実行部２６０は、解釈した実行計画を基に、組込データベース２７０から条件を満たす処理結果が入力される。実行計画解釈実行部２６０については、当業者によく知られたものであるので詳細な説明は省略する。
【００６３】
このような構成によって、組込機器２００は、ハイブリッドプラン解釈実行部２５０によりハイブリッドプランを読み取り実行できるため、組込機器における実行計画のファイルサイズ上限の制約がある中で実現可能な範囲で、高速なクエリ実行ができる。
【００６４】
以上説明した第２の実施形態の組込機器２００によれば、ハイブリッドプラン解釈実行部２５０にて、実行計画の一部が第２言語に変換されたハイブリッドプランを解釈し、選択部２４０にて、ハイブリッドプランに基づいてデータソースから検索することで、クエリ実行処理時間を好適に高速化できる。
【００６５】
以上説明した少なくとも一つの実施形態によれば、一群のクエリに基づいて、処理の規則を第１言語によって規定する実行計画を生成する第１生成部１１０と、実行計画の少なくとも一部を、第１言語よりも解釈負荷が小さい第２言語に変換した場合の性能向上度合を示す評価値を導出する評価部１３０と、を備えることにより、組込機器２００におけるデータベース処理を好適に行わせることができる。
【００６６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００６７】
１…入力装置、１００…情報処理装置（開発装置）、１１０…第１生成部、１２０…共通化部、１３０…評価部、１４０…第２生成部、２００…組込機器、２１０…組込アプリケーション、２２０…クエリ送信部、２３０…クエリ受信部、２４０…選択部、２５０…ハイブリッドプラン解釈実行部、２６０…実行計画解釈実行部、２７０…組込データベース、２８０…記憶部
【図１】
2019101813.tif 000003
【図２】
2019101813.tif 000004
【図３】
2019101813.tif 000005
【図４】
2019101813.tif 000006
【図５】
2019101813.tif 000007
【図６】
2019101813.tif 000008
【図７】
2019101813.tif 000009
【図８】
2019101813.tif 000010
【図９】
2019101813.tif 000011
【図１０】
2019101813.tif 000012
【図１１】
2019101813.tif 000013
【図１２】
2019101813.tif 000014
【図１３】
2019101813.tif 000015
【図１４】
2019101813.tif 000016
【図１５】
2019101813.tif 000017
【図１６】
2019101813.tif 000018
【図１７】
2019101813.tif 000019
【図１８】
2019101813.tif 000020
【図１９】
2019101813.tif 000021
【図２０】
2019101813.tif 000022
【図２１】
2019101813.tif 000023