説明

データベース管理方法、データベース管理装置およびプログラム

【課題】構造化データの検索時間を短縮することができるデータベース管理方法、データベース管理装置及びプログラムを提供する。
【解決手段】構造化データを記憶した補助記憶部40と、構造化データの管理を行うデータベース管理部100とを備えたデータベース管理装置1が、構造化データを処理するためのSQL文から、処理対象となる構造化データの格納位置を示すパスの全てを抽出し、パスが複数抽出された場合に、それぞれのパスを比較して共通部分を共通パスとして抽出し、その共通パスが示す格納位置以降の構造化データについてSQLによる処理を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベース管理技術に関する。
【背景技術】
【0002】
現在、企業間の電子商取引や電子申請システム、電子カルテシステムなどで、様々な情報を共有する手段の1つとして、利便性、拡張性に特徴があるXML(eXtensible Markup Language)データをデータベースに格納する機会が増えてきている。また、そのXMLにおいて、W3C(World Wide Web Consortium)勧告で公開されたXPathは、XMLデータの特定部分を指し示すパス言語であり、XMLデータに対する問い合わせ等において重要な役割を果たしている。
【0003】
このXPathを処理するには、ルートノードから順に木構造のノードを辿って行う。従って、木構造を辿る処理では、インデクス等でノードを特定できる場合を除き、全ノードを順に辿るため、XPathおよび木構造の指定によっては、検索に非常に時間がかかってしまう。
【0004】
また、データベース管理システム(DBMS:DataBase Management System)にXMLデータをそのまま列データとして格納し、従来資産のRDBMS(Relational DBMS)を活用する動きも広まってきている。そして、このRDBMSのXML列を検索する際には、SQL/XMLを用いる技術がある(例えば、非特許文献1参照)。
【0005】
従来のRDBMSの検索の仕組みでは、まず、入力されるSQL文を、選択式、表式および探索条件に分解する。そして、表式に示された表にアクセスして構造化データの表を指定し、探索条件でこの構造化データに所定の要素が含まれているか否かを判断し、所定の要素が含まれている構造化データについて選択式に指定された処理を実行し、得られた結果を検索を要求したアプリケーションに返却する。
【非特許文献1】Jim Melton and Stephen Buxton, “Querying XML-XQuery, XPath, and SQL/XML in Context”,Morgan Kaufmann Pablishers,523-582,2006
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、同じXMLデータに対してXPathをSQL文中に複数指定している場合、複数のXPathの中に関連性をもつものが含まれることが多い。例えば、探索条件のXPathで表式中の特定行のデータを絞り込み、絞り込んだデータの中から選択式のXPathで特定の一部分を射影する場合などにおいては、探索条件のXPath、表式のXPath、および選択式のXPathには関連性がある。
【0007】
従来のRDBMSの技術では、選択式、表式および探索条件に関連性のあるXPathが存在する場合でも、選択式、表式および探索条件のそれぞれの処理が別ステップで行われるため、共通のXPathを複数回評価しなければならない。そのため、XPathが複雑で評価に時間がかかるほど、検索に時間がかかってしまう。
【0008】
このような背景に鑑みて本発明がなされたのであり、本発明は、構造化データの検索時間を短縮することができるデータベース管理方法、データベース管理装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
前記課題を解決するため、本発明のデータベース管理方法、データベース管理装置およびプログラムは、構造化データを処理するためのSQL文から、処理対象となるデータの格納位置を示すパスの全てを抽出し、パスが複数抽出された場合に、それぞれのパスを比較して共通部分を共通パスとして抽出し、その共通パスが示す格納位置以降のデータについてSQL文に基づく処理を行うことを特徴とする。
【発明の効果】
【0010】
本発明によれば、ルートノードから共通パスに示されるノードまで辿る処理を排除し、構造化データの検索時間を短縮することができるデータベース管理方法、データベース管理装置およびプログラムを提供することができる。
【発明を実施するための最良の形態】
【0011】
次に、本発明を実施するための最良の形態(「実施形態」という)について、適宜図面を参照しながら詳細に説明する。
【0012】
なお、本発明において、構造化データは、XMLデータ、SGML(Standard Generalized Markup Language)データ等を含むが、本実施形態においては、XMLデータを例として説明する。
【0013】
図1は、本実施形態に係るデータベース管理システムの構成例を示す機能ブロック図である。図1に示すように、データベース管理システム7は、情報処理装置5と、ネットワーク6を介して情報処理装置5に通信可能に接続されているデータベース管理装置1とを含んで構成される。
【0014】
ここで、情報処理装置5は、メインメモリ50と、CPU(Central Processing Unit)51と、通信部52とを含んで構成される。メインメモリ50上にはアプリケーションプログラムを制御するアプリケーション処理部55がプログラムとして読み込まれ、CPU51を介して処理が実行される。このアプリケーション処理部55が、データベース管理装置1にXMLデータの問い合わせを行うと、通信部52を介してネットワーク6経由で問い合わせ要求がデータベース管理装置1へ送られる。
【0015】
データベース管理装置1は、メインメモリ10と、CPU20と、通信部30と、補助記憶部40とを含んで構成される。
【0016】
CPU20は、データベース管理装置1の全体の制御および演算を行う。また、通信部30は、ネットワーク6を介して情報処理装置5から、SQL文等のデータを受信する。
【0017】
補助記憶部40は、フラッシュメモリ、ハードディスク等の記憶手段からなり、後記するXMLデータ700、XMLスキーマ300、インデクス構成情報400等を記憶する。
【0018】
メインメモリ10はRAM(Random Access Memory)等の一次記憶装置からなり、メインメモリ10上にはデータベース管理部100がプログラムとして読み込まれている。また、メインメモリ10は、データベース管理部100が処理する、共通XPath250、データ格納位置情報600等(詳細は後記する)を一時的に保存する。
【0019】
データベース管理部100は、記憶部40に記憶されたXMLデータ700の処理に関する制御を行い、SQL解析部110と、定義情報解析部120と、SQL最適化部130と、SQL実行部140と、制御部150とを含んで構成される。なお、このデータベース管理部100は、例えばデータベース管理装置1の補助記憶部40に記憶されたプログラムを、CPU20がメインメモリ10に展開し実行することで実現される。
【0020】
SQL解析部110は、通信部30を介して情報処理装置5のアプリケーション処理部55から取得したSQL文を解析する。このSQL解析部110は、SQL分解部111と、ヒント情報解析部112とを含んで構成される。
【0021】
SQL分解部111は、取得したSQL文を、選択式、表式および探索条件に分解する。なお、XMLデータ700の検索処理に用いられるSQL文には、XMLデータ700の表を指定する表式およびXMLデータ700を所定の要素の中から射影する選択式を少なくとも含み、さらに対象となるXMLデータ700の中から特定の行を取り出す探索条件を含むことができる。
【0022】
図2は、図1の情報処理装置のアプリケーション処理部からネットワークを介してSQL解析部が取得する、SQL文の一例を示す図である。図2に示すように、SQL文200は、SELECT句で指定される選択式201と、FROM句で指定される表式202と、WHERE句で指定される探索条件203とを含んでいる。また、SQL文200は、選択式201、表式202および探索条件203の他に、後記するヒント情報を含むことができる。なお、このヒント情報は、共通XPath250を使用してSQL文の処理を行うか否かを指定する情報であり、詳細は後記する(図8参照)。
【0023】
図1に戻り、ヒント情報解析部112は、後記する共通XPath250を用いて処理を行うか否かを指定するヒント情報がSQL文に含まれているか否かを解析し、ヒント情報が含まれている場合には、その指示に従い、共通XPath250を用いてXMLデータ700の処理を行うか否かを判断する。
【0024】
次に、定義情報解析部120は、SQL分解部111で分解されたSQL文から、処理対象となるデータの格納位置を指定するXPathを示す文字列を切り出す。そして、定義情報解析部120は、後記するXMLスキーマ300またはインデクス構成情報400に基づき、ルートノードから処理対象となるデータの格納位置までの最短経路のXPathを取得する。本例では、最短経路を例にしているが、必ずしも最短経路に限定されるものではなく、より短い経路の方が効果は高くなるが、経路を記憶して利用することで検索実行時間は短縮される。この定義情報解析部120は、XMLスキーマ解析部121と、インデクス構成情報解析部122とを含んで構成される。
【0025】
XMLスキーマ解析部121は、SQL文からXPathを示す文字列を切り出し、切り出したXPathを示す文字列それぞれが、省略記法で指定されている場合には、フルパス記法に変換し、逆文書順の記法で指定されている場合には、文書順の記法に変換する。そして、XMLスキーマ解析部121は、変換したXPathを示す文字列と、補助記憶部40に記憶されたXMLスキーマ300とを、ルートノードからXPathで指定されるノードまで順に突き合せ、選択式から取得した最短経路のXPath210、表式から取得した最短経路のXPath220および探索条件から取得した最短経路のXPath230を取得し、メインメモリ10上に保持する。
【0026】
図3は、図1の補助記憶部に記憶されるXMLスキーマの一例を示す図である。図3(a)に示すように、XMLスキーマ300によりXML文書の構造が定義される。例えば、符号301に示す定義文は、ルートノードの要素が「book_info」であることを宣言し、符号302に示す定義文は、子要素として「title」「price」「author」「contents」があることを宣言する。また、「contents」の要素をさらにref属性で宣言し、その参照先として符号303に示す定義文が記述され、「contents」の子要素として、「foreword」「chapter」があることを宣言する。そして、さらに「chapter」の子要素として、符号304に示す定義文が記述され「introduction」「section」「summery」があることを宣言する。
【0027】
図3(b)は、図3(a)のXMLスキーマで定義された内容を木構造として表現した図である。XMLスキーマ300をメインメモリ10上に展開すると、ルートノードからXPathで指定されているノードまでを探索することができる。従って、XMLスキーマ解析部121は、選択式、表式および探索条件に含まれるXPathを示す文字列とXMLスキーマ300とを、ルートノードからXPathで指定されるノードまで文書順に突き合せ、最短経路のXPathを特定することができる。
【0028】
図1に戻り、インデクス構成情報解析部122は、SQL文からXPathを示す文字列を切り出し、切り出されたXPathを示す文字列それぞれが、省略記法で指定されている場合には、フルパス記法に変換し、逆文書順の記法で指定されている場合には、文書順の記法に変換する。そして、インデクス構成情報解析部122は、変換したXPathを示す文字列と、補助記憶部40に記憶されたインデクス構成情報400とを、ルートノードからXPathで指定されるノードまで順に突き合せ、選択式から取得した最短経路のXPath210、表式から取得した最短経路のXPath220および探索条件から取得した最短経路のXPath230を取得し、メインメモリ10上に保持する。
【0029】
図4は、図1の補助記憶部に記憶されるインデクス構成情報の一例を示す図である。図4(a)は、本実施形態に係るインデクス構成情報の一例を示す図である。図4(b)は、図4(a)に示したインデクス構成情報の一例を木構造で表現した図である。図4(a)に示すように、インデクス定義が指定されると、データベース管理部100は、インデクス定義410からインデクス管理情報420を生成する。このインデクス管理情報420は、インデクス名(INDX_NAME)、表名(TBL_NAME)、列名(COL_NAME)、データ型(DATA_TYPE)と共に、インデクス定義時に指定したキーを特定するXPath(以下、インデクス構成情報400という)を含み、補助記憶部40に記憶される。
【0030】
図4(b)は、例えば、インデクス構成情報400が‘/book_info/contents’の場合に、インデクスキーを特定するXPathの内容を木構造で表現した図である。インデクス構成情報400を図1のメインメモリ10上に展開すると、ルートノードからXPathで指定されるノードまで探索することができる。従って、XMLスキーマ300が補助記憶部40に記憶されていない場合においても、インデクス構成情報解析部122は、選択式、表式および探索条件のXPathを示す文字列とインデクス構成情報400で定義される木構造とを、ルートノードからXPathで指定されるノードまで文書順に突き合せ、最短経路のXPathを特定することができる。
【0031】
図1に戻り、SQL最適化部130は、定義情報解析部120で抽出された選択式、表式および探索条件それぞれの最短経路のXPathを示す文字列から、共通部分を共通XPath250として抽出し、抽出した共通XPath250を用いて、アクセスプランを決定する。このSQL最適化部130は、共通XPath抽出部131とアクセスプラン決定部132とを含んで構成される。
【0032】
共通XPath抽出部131は、メインメモリ10上に保持した探索条件から取得した最短経路のXPath230、選択式から取得した最短経路のXPath210および表式から取得した最短経路のXPath220を読み出し、XPathを下位のノードからルートノードに向かって突き合せる。なお、このとき、XPathをルートノードから順に突き合せるようにしてもよい。共通XPath抽出部131は、突き合せた結果、一致したXPathを共通XPath250としてメインメモリ10上に保持する。
【0033】
アクセスプラン決定部132は、共通XPath抽出部131が抽出した共通XPath250を用いて、アクセスコストが最小となるものをアクセスプランとして決定する。なお、本実施形態におけるアクセスプラン(「クエリプラン」ともいう)とは、表式の評価、探索条件の評価、行ID返却、共通XPath250が示すデータ格納位置情報返却、行IDに基づきデータ取得、データ格納位置情報600に基づき共通XPath250が示すノード以下のデータ取得、そして選択式のXPath評価を行う手順をいう。また、本実施形態において、表式の評価とは、SQL文中の表式に基づいて、構造化データの表にアクセスすることをいう。また、探索条件の評価とは、探索条件に示される所定の要素が条件を満たすか否かの「真」「偽」を判断することをいう。そして、選択式のXPath評価とは、メインメモリ上に展開されている構造化データから、選択式に示される所定の要素が含まれているか否かを判断することをいう。
【0034】
図5は、本実施形態における各処理のアクセスコストを示すアクセスコスト設定情報の一例を示す図である。図5に示すように、このアクセスコスト設定情報500で示される各アクセスコストは、例えば当該処理内容の実行に要する処理時間に応じた相対値で予め設定しておくものである。例えば、表式のXPath評価およびルートノード以降の探索条件のXPath評価に要するアクセスコストは、補助記憶部40にアクセスし条件評価を行うため、「2000」と比較的大きい値が設定される。一方、探索条件のXPath評価に要するアクセスコストおよび選択式のXPath評価のアクセスコストは、共通XPath250が示すノード以降を評価する場合は、ルートノード以降を評価する場合に比べて、小さく設定される。これは、共通XPath250を使用することにより、評価を省略することができるノード数に応じて、アクセスコストが低減できる可能性があるからである。また、選択式のXPath評価のアクセスコストは、メインメモリ10上に格納されているデータを用いて行うため、表式のXPath評価および探索条件のXPath評価のアクセスコストに比べて小さく設定される。行ID返却および共通XPath250が示すノードのデータ格納位置情報返却に要するアクセスコストは、行IDからのデータ取得に比べてデータ長が短いため、極めて小さい値となる。位置情報から共通XPath250が示すノードのデータ取得では、メインメモリ10上に格納されたデータを用いるため、アクセスコストを小さく設定している。アクセスコストは、このようにそれぞれに設定されたアクセスコストを合算して求められ、共通XPath250の組合わせのうち、アクセスコストが最小となるものに、アクセスプランを決定する。
【0035】
図1に戻り、SQL実行部140は、アクセスプラン決定部132で決定したアクセスプランに基づいて、SQLを実行するものであり、データベースアクセス部141と、探索条件評価部142と、選択式実行部143とを含んで構成される。
【0036】
データベースアクセス部141は、補助記憶部40に記憶されているXMLデータ700のうち操作の対象となる表を指定する(例えば図2の表式202で指定される‘BOOK_TBL’)。また、探索条件評価部142は、表で示されるデータの探索条件の評価を行い、探索条件の評価が真となった行の行IDおよび共通XPath250が示すノードの位置情報を取得し、共通XPath250が示すデータ格納位置情報600(詳細は後記する図6参照)をメインメモリ10上に保持する処理を行う。
【0037】
選択式実行部143は、データ格納位置情報600に格納されている行IDからデータを取得し、メインメモリ10上にデータを保持する。そして、選択式実行部143は、データ格納位置情報600に格納されている位置情報を用いて、メインメモリ10上に展開されているデータから、共通XPath250が示すノード以降のデータを取得する処理を行う。そして、ルートノードから、共通XPath250で示されるノードまでの評価を行わず、選択式のXPathを共通XPath250で示すノード以降のデータに対して評価を行う。
【0038】
図6は、本実施形態におけるデータ格納位置情報の例を示す図である。図6(a)は、列情報、行IDおよび位置情報がデータ格納位置情報として含まれる例を示す。図6(b)は、さらに子孫ノード情報とノードテスト情報とがデータ格納位置情報として含まれる例を示す。図6(a)に示すように、データ格納位置情報600は、共通XPath250が指定されている列を特定するための列情報610と、探索条件の評価が真になった行を特定するための行ID620と、共通XPath250が示すデータの位置情報630とを有する。また、表式のXPath評価時に取得する場合のデータ格納位置情報600も同様に、共通XPath250が指定されている列を特定するための列情報610と、探索条件が真になった行を特定するための行ID620と、共通XPath250が示すデータの位置情報630とを有する。
【0039】
また、図6(b)に示すように、このデータ格納位置情報600は、列情報610、行ID620、データの位置情報630に加えて、共通XPath250の示すノードの子孫ノードの有無を識別する情報である子孫ノード情報640およびノードテストに合致したか否かを示す情報であるノードテスト情報650を含むことができる。
【0040】
この子孫ノード情報640を用いることで、探索条件評価部142および選択式実行部143は、共通XPath250が示すノードに子孫ノードが存在する場合のみ、XPathの評価を行う。従って、子孫ノードが存在しないと判断できる場合は、探索条件評価部142および選択式実行部143は、XPath評価を行わない。すなわち、探索条件評価部142は、条件判定を偽とする処理を行い、選択式実行部143はNULLを返却する処理を行う。
【0041】
また、共通XPath250の示すノードがノードテストに合致したか否かを示すノードテスト情報650を用いることにより、ノードテストに合致した場合にのみ探索条件評価部142および選択式実行部143はXPathの評価を行う。ノードテストに合致しない場合は、探索条件評価部は、条件判定を偽とする処理を行い、選択式実行部143は、NULLを返却する処理を行う。
【0042】
次に、図1を参照しつつ、図7に沿って、本実施形態に係るデータベース管理方法の処理を説明する。図7は、入力されたSQL文からアクセスコストが最小となるアクセスプランを作成するまでの例を示している。なお、図7においては、図2に示すSQL文200がデータベース管理装置1に入力されたものとして説明する。
【0043】
まず、情報処理装置5(図1参照)のアプリケーション処理部55を介してネットワーク6経由で、データベース管理装置1にSQL文200が入力される(ステップS701)。SQL文200が入力されると、まず、ヒント情報解析部112の処理により、SQL文200の中に「共通XPath使用不可」のヒント情報が含まれているか否かを判断する(ステップS702)。そして、SQL文200の中に「共通XPath使用不可」のヒント情報は含まれていなければ(ステップS702→No)、ステップS703へ進む。一方、SQL文の中に「共通XPath使用不可」のヒント情報が含まれていれば(ステップS702→Yes)、ステップS707へ進み、アクセスプランを決定処理を行う。
【0044】
図8は、共通XPathの使用の可否を指定するヒント情報が含まれているSQL文の例を示す図である。図8(a)は、共通XPathを使用することを指示するヒント情報を含む例である。また、図8(b)は、共通XPathを使用しないこと指示するヒント情報を含む例である。
【0045】
図8(a)に示すSQL文の中には、ヒント情報800として、「WITH XPATH句」が指定されている。この「WITH XPATH句」は、このヒント情報800で予め指定した共通XPath250を使用してアクセスプランを作成することを指示するものである。図8(a)の例においては、‘book_info/contents/chapter1’が共通XPath250として指定される。このようにヒント情報800で共通XPath250を使用することが指示されると、アクセスプラン決定部132は、アクセスコストが最小でなくても、指定された共通XPath250を用いてアクセスプランを決定する。
【0046】
このようにすることで、予め共通XPath250が分かっている場合に、SQL実行部140(図1参照)は、ヒント情報800で指定した共通XPath250を用いてXMLデータ700の検索をすることが可能となる。
【0047】
また、図8(b)に示すSQL文の中には、ヒント情報800として、「WITHOUT XPATH句」が指定されている。この「WITHOUT WPATH句」は、共通XPath250を使用しないことを指示するものである。このヒント情報800の指示により、アクセスプラン決定部132は、アクセスコストが最小でなくても、共通XPath250を使用しないアクセスプランを決定する。
【0048】
なお、図8に示すヒント情報800である「WITH XPATH句」および「WITHOUT XPATH句」は、共通XPath250の使用可否を指定する一例であり、その他の記法で使用可否を指定することも可能である。
また、図8に示すヒント情報800は、SQL文単位で共通XPath250の使用可否をユーザが指定できるものであるが、例えば、情報処理装置5のアプリケーション処理部55から、アプリケーション単位またはデータベース管理システム単位のヒント情報をデータベース管理部100が取得し、XMLデータ700の問い合わせが行なわれる際に、ヒント情報解析部112が、そのヒント情報に従い共通XPath250を用いて処理を行うか否かを判断することもできる。ここで、アプリケーション単位のヒント情報およびデータベース単位のヒント情報は、データベース管理部100内のヒント情報解析部112において、共通XPath250の使用可否の設定を行うことができる。そして、この設定によりアクセスプラン決定部132は、アクセスコストが最小でなくても、共通XPath250を用いてアクセスプランを決定することができ、また、アクセスコストが最小でなくても、共通XPath250を使用しないアクセスプランを決定することができる。
【0049】
このようにすることで、共通XPath250を使う必要がない場合や、共通XPath250を用いても、アクセスコストが低減しないことが明らかな場合において、ユーザはヒント情報800を用いて、共通XPath250を使用しない処理を設定することができる。
【0050】
図7に戻り、ステップS702において、SQL文200中に「共通XPath使用不可」のヒント情報800が含まれていなかった場合(ステップS702→No)、SQL分解部111は、入力されたSQL文200を、選択式201、表式202、探索条件203に分解する(ステップS703)。「共通XPath使用」のヒント情報800が含まれる場合、またはヒント情報自体がない場合もステップS702→Noの処理を行う。
【0051】
次に、XMLスキーマ解析部121は、SQL分解部111が分解した、選択式201、表式202、探索条件203から、処理対象となるデータの格納位置を指定するXPathを示す文字列を切り出す(ステップS704)。続いて、XMLスキーマ解析部121は、ステップS704で切り出した文字列により示されるXPathから、最短経路を示すXPathを取得する処理を行う(ステップS705)(詳細は後記する図11〜図12参照)。XMLスキーマ解析部121は、切り出した文字列が省略記法で指定されている場合には、フルパス記法に変換し、逆文書順の記法で指定されている場合には、文書順の記法に変換した上で、それぞれの文字列を補助記憶部40に記憶されたXMLスキーマ300と突き合せる。XMLスキーマ解析部121は、突き合せた結果一致したXPathを、選択式から取得した最短経路のXPath210、表式から取得した最短経路のXPath220、探索条件から取得した最短経路のXPath230としてメインメモリ10上に保持する。なお、図7において入力されたSQL文200(図2参照)の例においては、表式202にXPathを示す文字列がないため、XMLスキーマ解析部121は、表式202からはXPathを示す文字列の切り出しを行わない。
【0052】
また、XMLスキーマ300がない場合は、インデクス構成情報解析部122が、補助記憶部40に記憶されたインデクス構成情報400を用いて、XPathの切り出しを行う(詳細は後記する図13〜図14参照)。
【0053】
続いて、共通XPath抽出部131は、共通XPath250の抽出処理を行う(ステップS706)(詳細は後記する図15参照)。共通XPath抽出部131は、XMLスキーマ解析部121またはインデクス構成情報解析部122の処理により取得した最短経路のXPathそれぞれを下位のノードからルートノードへ向かって突き合せる。そして、共通XPath抽出部131は、突き合せた結果、一致したXPathを共通XPath250としてメインメモリ10上に保持する。図7の例においては、選択式から取得した最短経路のXPath210と、探索条件から取得した最短経路のXPath230とを突き合せ、共通XPath250として‘book_info/contents/chapter1’が、共通XPath抽出部131により抽出される。
【0054】
図9は、図7に示した例において、共通XPath抽出部が抽出した共通XPathを木構造で表現した図である。図9に示すように、共通XPath250として‘book_info/contents/chapter1’が、ルートノードである「book_info」から「chapter1」までのパスとして、共通XPath抽出部131により抽出される。
【0055】
図7に戻り、アクセスプラン決定部132は、アクセスプラン決定処理を行う(ステップS707)(詳細は後記する図16参照)。ここでアクセスプラン決定部132は、抽出した共通XPath250を使用するアクセスプランと、共通XPath250を使用しないアクセスプランとを比較し、アクセスコストが最小となるアクセスプランを決定する。
【0056】
図10は、共通XPathを使用してアクセスコストの合計値を算出したアクセスプランと、共通XPathを使用しないでアクセスコストの合計値を算出したアクセスプランとを、比較した例を示す図である。アクセスプラン決定部132は、図5に示したアクセスコスト設定情報500で設定された各処理ごとのアクセスコストに基づき、共通XPath250を使用した場合のアクセスコストの合計値と、共通XPath250を使用しない場合のアクセスコストの合計値とを算出する。図10に示す例においては、共通XPath250を使用する場合(プラン1)のアクセスコストの合計値は「3530」であり、共通XPath250を使用しない場合(プラン2)のアクセスコストの合計値は「4010」であるため、アクセスプラン決定部132は、アクセスコストが最小となる方である共通XPath250を使用するアクセスプラン(プラン1)に、アクセスプランを決定する。
【0057】
図7に戻り、アクセスプラン決定部132により決定されたアクセスプランに基づき、SQL実行部140は、アクセスプランの実行処理を行う(ステップS708)(詳細は後記する図17〜図20参照)。
【0058】
(最短経路を示すXPath取得処理)
次に、XMLスキーマ解析部121による最短経路を示すXPathの取得処理について詳細に説明する。なお、図7に示すステップにおいては、ステップS704およびステップS705の処理に該当する。
【0059】
図11および図12は、図1に示すXMLスキーマ解析部が、切り出された選択式、表式および探索条件それぞれから、最短経路を示すXPathの取得する際の流れを示すフローチャートである。
【0060】
図11に示すように、まず、XMLスキーマ解析部121は、補助記憶部40(図1参照)にXMLスキーマ300があるか否か判定する(ステップS1101)。XMLスキーマ300があれば(ステップS1101→Yes)、XMLスキーマ解析部121は、探索条件203からXPathを示す文字列を切り出す(ステップS1110)。次に、XMLスキーマ解析部121は、切り出した文字列が省略記法の場合、フルパスの記法に変換する(ステップS1111)。続いてXMLスキーマ解析部121は、切り出した文字列が逆文書順の記法の場合、文書順の記法に変換する(ステップS1112)。そしてXMLスキーマ解析部121は、変換したXPathとXMLスキーマ300とをルートノードから文書順に突き合せる(ステップS1113)。続いてXMLスキーマ解析部121は、突き合せで一致したXPathを探索条件から取得した最短経路のXPath230としてメインメモリ10上に保持する(ステップS1114)。次に、XMLスキーマ解析部121は、探索条件203中のXPathの全てを突き合せたか否かを判断する(ステップS1115)。まだ突き合せていないXPathがある場合には(ステップS1115→No)、ステップS1110に戻り処理を続ける。一方、探索条件203中のXPathの全てを突き合せた場合には(ステップS1115→Yes)、ステップS1116の処理へ進む。そして、XMLスキーマ解析部121は、探索条件から取得した最短経路のXPath230のうち、重複しているXPathがあれば、メインメモリ10上から削除する(ステップS1116)。なお、ステップS1101において、補助記憶部40にXMLスキーマ300がなければ(ステップS1101→No)、後記する図13のインデクス構成情報解析部122によるステップS1301へ進む。
【0061】
次にXMLスキーマ解析部121は、選択式201からXPathを示す文字列を切り出す(ステップS1120)。そして、XMLスキーマ解析部121は、選択式201から切り出したXPathを示す文字列について、探索条件203におけるステップS1111〜S1116までの処理と同様の処理(ステップS1121〜S1126)を行って、突き合せで一致したXPathを選択式から取得した最短経路のXPath210としてメインメモリ10上に保持する。
【0062】
続いて、XMLスキーマ解析部121は、図12のステップS1130に進み、表式202からXPathを示す文字列を切り出す。XMLスキーマ解析部121は、表式202から切り出したXPathを示す文字列について、探索条件203におけるステップS1111〜S1116までの処理と同様の処理(ステップS1131〜S1136)を行って、突き合せで一致したXPathを表式から取得した最短経路のXPath220としてメインメモリ10上に保持する。
【0063】
また、補助記憶部40にインデクス構成情報400が記憶されている場合、インデクス構成情報解析部122は、インデクス構成情報400を用いて、最短経路を示すXPathを取得する処理を行う。図13および図14は、インデクス構成情報解析部が、切り出された選択式、表式および探索条件それぞれから、最短経路を示すXPathを取得する際の流れを示すフローチャートである。
【0064】
まず、インデクス構成情報解析部122は、補助記憶部40(図1参照)にインデクス構成情報400があるか否かを判定する(ステップS1301)。インデクス構成情報400があれば(ステップS1301→Yes)、インデクス構成情報解析部122は、探索条件203からXPathを示す文字列を切り出す(ステップS1310)。次に、インデクス構成情報解析部122は、切り出した文字列が省略記法の場合、フルパスの記法に変換する(ステップS1311)。続いてインデクス構成情報解析部112は、切り出した文字列が逆文書順の記法の場合、文書順の記法に変換する(ステップS1312)。そしてインデクス構成情報解析部122は、変換したXPathとインデクス構成情報400とをルートノードから文書順に突き合せる(ステップS1313)。続いてインデクス構成情報解析部122は、突き合せで一致したXPathを探索条件から取得した最短経路のXPath230としてメインメモリ10上に保持する(ステップS1314)。次に、インデクス構成情報解析部122は、探索条件203中のXPathの全てを突き合せたか否かを判断する(ステップS1315)。まだ突き合せていないXPathがある場合には(ステップS1315→No)、ステップS1310に戻り処理を続ける。一方、探索条件203中のXPathの全てを突き合せた場合には(ステップS1315→Yes)、ステップS1316の処理へ進む。そして、インデクス構成情報解析部122は、探索条件から取得した最短経路のXPath230のうち、重複しているXPathがあれば、メインメモリ10上から削除する(ステップS1316)。なお、ステップS1301において、補助記憶部40にインデクス構成情報400がなければ(ステップS1301→No)、処理を終える。
【0065】
次にインデクス構成情報解析部122は、選択式201からXPathを示す文字列を切り出す(ステップS1320)。そして、インデクス構成情報解析部122は、選択式201から切り出したXPathを示す文字列について、探索条件203におけるステップS1311〜S1316までの処理と同様の処理(ステップS1321〜S1326)を行って、突き合せで一致したXPathを選択式から取得した最短経路のXPath210としてメインメモリ10上に保持する。
【0066】
続いて、インデクス構成情報解析部112は、図14のステップS1330に進み、表式202からXPathを示す文字列を切り出す。インデクス構成情報解析部122は、表式202から切り出したXPathを示す文字列について、探索条件203におけるステップS1311〜S1316までの処理と同様の処理(ステップS1331〜S1336)を行って、突き合せで一致したXPathを表式から取得した最短経路のXPath220としてメインメモリ10上に保持する。
【0067】
(共通XPath抽出処理)
次に、図7のステップS706の処理である、共通XPath抽出部131が共通XPath250を抽出する流れを具体的に説明する。図15は、共通XPath抽出部が共通XPathを抽出する流れを示すフローチャートである。
【0068】
図15に示すように、まず、共通XPath抽出部131は、メインメモリ10上に保持した探索条件から取得した最短経路のXPath230があるか否か判定する(ステップS1501)。共通XPath抽出部131は、探索条件から取得した最短経路のXPath230があれば(ステップS1501→Yes)、探索条件から取得した最短経路のXPath230を読み込む(ステップS1502)。探索条件から取得した最短経路のXPath230がなければ(ステップS1501→No)、探索条件203からXPathを示す文字列を、探索条件から取得した最短経路のXPath230として切り出す(ステップS1503)。
【0069】
次に、共通XPath抽出部131は、メインメモリ10上に保持した選択式から取得した最短経路のXPath210があるか否か判定する(ステップS1504)。選択式から取得した最短経路のXPath210があれば(ステップS1504→Yes)、共通XPath抽出部131は、選択式から取得した最短経路のXPath210を読み込む(ステップS1505)。選択式から取得した最短経路のXPath210がなければ(ステップS1504→No)、選択式201からXPathを示す文字列を、選択式から取得した最短経路のXPath210として切り出す(ステップS1506)。
【0070】
続いて、共通XPath抽出部131は、メインメモリ10上に保持した表式から取得した最短経路のXPath220があるか否かを判定する(ステップS1507)。表式から取得した最短経路のXPath220があれば(ステップS1507→Yes)、共通XPath抽出部131は、表式から取得した最短経路のXPath220を読み込む(ステップS1508)。表式から取得した最短経路のXPath220がなければ(ステップS1507→No)、表式202からXPathを示す文字列を、表式から取得した最短経路のXPath220として切り出す(ステップS1509)。
【0071】
なお、共通XPath抽出部131が行うステップS1503、ステップS1506およびステップS1509における、探索条件201、選択式202および表式203からXPathを示す文字列を切り出す処理は、補助記憶部40に、XMLスキーマ300およびインデクス構成情報400が記憶されていない場合に行われる処理である。ただし、このステップS1503、ステップS1506およびステップS1509における処理は、共通XPath抽出部131に予め設定することにより、これらのステップを行わないことも可能である。その場合、例えば、共通XPath抽出部131は、ステップS1501において、メインメモリ10上に保持した探索条件から取得した最短経路のXPath210がなければ(ステップS1501→No)、探索条件から取得したXPathの読み込みを行わず、次のステップS1504へ進む。同様に、選択式からXPathを示す文字列を最短経路の文字列として切り出すステップS1506が設定されていない場合には、次のステップS1507へ進む。また、表式からXPathを示す文字列を最短経路の文字列として切り出すステップS1509が設定されていない場合には、次のステップS1510へ進む。
【0072】
次に、共通XPath抽出部131は、読み込んだ探索条件から取得したXPath230、選択式から取得したXPath210および表式から取得したXPath220それぞれを、下位ノードからルートノードへ向かって突き合せる(ステップS1510)。そして、共通XPath抽出部131は、一致したXPathを共通XPath250としてメインメモリ10上に保持する(ステップS1511)。続いて共通XPath抽出部131は、最短経路のXPathの全てを突き合せたか否かを判断する(ステップS1512)。そして、突き合せていない最短経路のXPathがある場合には(ステップS1512→No)、ステップS1510に戻り処理を続ける。一方、全てのXPathの突き合せが終わっている場合には(ステップS1512→Yes)、ステップS1513へ進み、抽出した共通XPath250のうち、重複している共通XPath250をメインメモリ10から削除する。
【0073】
なお、この共通XPath250は一度処理したパスの評価を複数回行わないために使用する。従って、表式から取得した共通XPath250は、表式の評価後に行う探索条件または選択式の処理で使用する(詳細は図19、図20で説明する)。探索条件から取得した共通XPath250は、探索条件評価後に行う選択式の評価で使用する(詳細は図20で説明する)。
【0074】
(XPathの文字列比較)
ここまでは、XMLスキーマ300またはインデクス構成情報400を用いて共通XPath250を取得する場合を述べた。しかし、XMLスキーマ300、インデクス構成情報400がない場合は、SQL文中からXPathを示す文字列を切り出し、文字列比較を行うことにより共通XPath250を取得することも可能である。
【0075】
(アクセスプラン決定処理)
次に、図7のステップS707に示すアクセスプラン決定処理について具体的に説明する。図16はアクセスプラン決定部が共通XPathを利用したアクセスプランを決定する際の流れを示したフローチャートである。アクセスプラン決定部132は共通XPath250およびSQL文200を分解した選択式201、表式202、探索条件203を取得とする。なお、ここでは表式の評価、探索条件評価、行ID返却、共通XPath250が示すデータ格納位置情報返却、行IDに基づきデータ取得、データ格納位置情報600に基づき共通XPath250が示すノード以下のデータ取得、および選択式のXPath評価を行う手順をアクセスプランとする。
【0076】
図16に示すように、まず、アクセスプラン決定部132は、表式を評価するアクセスコストを計算し(ステップS1601)、探索条件を評価するアクセスコストを計算し(ステップS1602)、選択式を評価するアクセスコストを計算する(ステップS1603)。そして、アクセスプラン決定部132は、ステップS1601〜S1603で求めた全アクセスコストを合計し、アクセスプラン全体のアクセスコストを計算する(ステップS1604)。
【0077】
次に、アクセスプラン決定部132は、メインメモリ10上に保持した共通XPath250があるか否かを判定する(ステップS1605)。共通XPath250があれば(ステップS1605→Yes)、アクセスプラン決定部132は、共通XPath250を読み出す(ステップS1606)。続いて、アクセスプラン決定部132は、共通XPath250に含まれるノード数をカウントする(ステップS1607)。そして、アクセスプラン決定部132は、選択式および探索条件の評価時に評価を省略できるノード数に応じたアクセスコストを計算する(ステップS1608)。続いて、アクセスプラン決定部132は、共通XPath250が示すデータ格納位置情報を取得するアクセスコストを計算する(ステップS1609)。次に、アクセスプラン決定部132は、共通XPathが示すデータを取得するアクセスコストを計算する(ステップS1610)。続いて、アクセスプラン決定部132は、表式を評価するアクセスコストを計算し(ステップS1611)、探索条件を評価するアクセスコストを計算し(ステップS1612)、選択式を評価するアクセスコストを計算する(ステップS1613)。
【0078】
次に、アクセスプラン決定部132は、ステップS1608〜ステップS1613で求めた全アクセスコストを合計し、アクセスプラン全体のアクセスコストを計算する(ステップS1614)。続いて、アクセスプラン決定部132は、全ての共通XPath250についてステップS1607〜S1614までの処理を行ったか否かを判断する(ステップS1615)。まだ処理していない共通XPath250がある場合には(ステップS1615→No)、ステップ1607に戻り処理を続ける。一方、全ての共通XPathについてのアクセスコストが計算済みであれば(ステップS1615→Yes)、次のステップS1616へ進む。
【0079】
一方、ステップS1605において、メインメモリ10上に保持した共通XPath250がない場合は(ステップS1605→No)、次のステップS1616へ進む。次に、アクセスプラン決定部132は、ステップS1604およびステップS1614で算出したアクセスプランそれぞれのアクセスコストの内、アクセスコストが最小のものをアクセスプランとして決定する(ステップS1616)。そして、アクセスプラン決定部132は、決定したアクセスプランを、インタプリタが実行できる中間コードに変換する(ステップS1617)。
【0080】
図10のアクセスコストを比較した例を用いて、具体的に説明する。アクセスプラン決定部132は、例えば、図5で定められたアクセスコストをもとに計算するものとする。図10に示すように、共通XPath250を使用してアクセスプランを設定する場合(プラン1)、アクセスプラン決定部132は、探索条件のXPath評価「2000」、行ID返却「10」、共通XPath250が示すノードのデータ格納位置情報返却「10」、行IDからデータ取得「1000」、データ格納位置情報を用いて共通XPath250が示すノード以降のデータ取得「10」、共通XPath250が示すノード以降の選択式のXPath評価「500」を行うので、全体のアクセスコストは全てを合算して「3530」と算出する。一方、共通XPath250を使用しない場合(プラン2)、アクセスプラン決定部132は、探索条件のXPath評価「2000」、行ID返却「10」、行IDからのデータ取得「1000」、ルートノード以降の選択式のXPath評価「1000」を行うので、全体のアクセスコストは全てを合算して「4010」となる。アクセスプラン決定部132は、このように、共通XPath250を用いたアクセスプランのアクセスコストの合計値と、共通XPath250を使用しないアクセスプランのアクセスコストの合計値とを比較した上で、アクセスコストの合計値が最小のものアクセスプランとして決定する。
【0081】
(アクセスプラン実行処理)
図7のステップS708に示すアクセスプラン実行処理について具体的に説明する。
図17は、図1に示すアクセスプラン決定部で決定したアクセスプランに基づいて、SQL実行部がSQL文の処理を実行する全体の処理の流れを示す概念図である。なお、図17(a)は、データベースアクセス部、探索条件評価部、選択式実行部が行う処理の流れを示すフローチャートである。また、図17(b)は、図17(a)に対応した実際のデータに基づいた処理を説明するための概念図である。なお、ここでは図2に示すSQL文200がデータベース管理装置1に入力され、共通XPath250として、‘book_info/contents/chapter1’が抽出された場合として説明する。
【0082】
図17(a)に示すように、まずデータベースアクセス部141(図1参照)は、補助記憶装置40に記憶されているXMLデータ700のうち、表(BOOK_TBL)にアクセスする(ステップS1701)。次に、探索条件評価部142は、探索条件の評価を行う(ステップS1702)。そして、探索条件の評価が真となった行の行ID620(#1,#3,…)を取得し(ステップS1703)、共通XPath250が示すノードの位置情報630を取得する(ステップS1704)。そして、取得した行ID620と位置情報630とを示すデータ格納位置情報600をメインメモリ10上に保持する。
【0083】
次に、選択式実行部143は、データ格納位置情報600に格納されている行ID620からデータを取得し(ステップS1705)、メインメモリ10上に展開する。そして、選択式実行部143は、データ格納位置情報600に格納されている位置情報630を用いて、メインメモリ10上に展開されているデータから、共通XPath250が示すノード以降のデータを取得する処理を行う(ステップS1706)。そして、選択式実行部143は、ルートノードから共通XPath250が示すノードまでの評価を行わず、選択式のXPathを共通XPath250で示すノード以降のデータに対して評価する(ステップS1707)。
【0084】
次に、アクセスプラン実行処理において、データベースアクセス部141、探索条件評価部142、選択式実行部143のそれぞれが行う詳細な処理の流れを具体的に説明する。
【0085】
(データベースアクセス処理)
図18は、アクセスプランに基づき、図1のデータベースアクセス部がデータベースにアクセスする際の流れを示したフローチャートである。データベースアクセス部141には、アクセスプラン決定部132が作成した中間コードが入力される。
【0086】
図18に示すように、まずデータベースアクセス部141は、表式202に示される表にアクセスする(ステップS1801)。次に、データベースアクセス部141は、表式に含まれるXPathを評価する(ステップS1802)。そして、データベースアクセス部141は、共通XPath250によるデータ格納位置情報600の取得指示があるか否かを判定する(ステップS1803)。共通XPath250によるデータ格納位置情報600の取得指示があれば(ステップS1803→Yes)、データベースアクセス部141は、共通XPath250が示すデータ格納位置情報600を取得し、メインメモリ10上に保持する(ステップS1804)。一方、データ格納位置情報600の取得指示がなければ(ステップS1803→No)、共通XPath250が示すデータ格納位置情報600を取得せず、ステップS1805へ進む。そして、データベースアクセス部141は、表式202中の全てのXPathを評価したか否かを判断する(ステップS1805)。表式202中のXPathにおいて評価していないXPathがあれば(ステップS1805→No)、ステップS1802に戻り処理を続ける。表式202中の全てのXPathを評価していれば(ステップS1805→Yes)、データベースアクセス部140での処理を終える。なお、表式202中にXPathがない場合は、データベースアクセス部141は、ステップS1801のみを行う。
【0087】
データベースアクセス部141がステップS1804において取得する共通XPath250が示すデータ格納位置情報600は、探索条件評価部142または選択式実行部143で使用する。また、探索条件評価部142が取得する共通XPath250が示すデータ格納位置情報600(後記する図19のステップS1907またはステップS1911)は、選択式実行部143で使用する。探索条件評価部142と選択式実行部143で使用するデータ格納位置情報600は同じである必要はなく、アクセスコストが最小となるようにアクセスプラン決定部132により決定される。
【0088】
(探索条件評価処理)
図19は、アクセスプランに基づき、図1の探索条件評価部が探索条件を評価する際の流れを示したフローチャートである。探索条件評価部142は、データベースアクセス部141がアクセスしたデータ、およびメインメモリ10上に保持したデータ格納位置情報600が入力されている。
【0089】
図19に示すように、まず探索条件評価部142は、データベースアクセス部141で取得した共通XPath250が示すデータ格納位置情報600(図6参照)があるか否かを判定する(ステップS1901)。ここで、データ格納位置情報600がある場合(ステップS1901→Yes)とは、表式にXPathを含み、そのXPathと探索条件のXPathから共通XPath250が抽出できる場合である。ただし、共通XPath250を抽出しても、アクセスコストが最小にならなければ、データ格納位置情報600を取得しないアクセスプランとなることがある。
【0090】
探索条件評価部142は、データ格納位置情報600があれば(ステップS1901→Yes)、次にデータ格納位置情報600に子孫ノード情報640(図6(b)参照)が設定されているか否かを判断する(ステップS1902)。そして、子孫ノード情報640が設定されていない場合は(ステップS1902→No)、ステップS1904へ進む。一方、子孫ノード情報640が設定されている場合には(ステップS1902→Yes)、ステップS1903へ進み、子孫ノード情報640に基づき、子孫ノードが存在するか否かを判断する(ステップS1903)。ここで、子孫ノード情報640により子孫ノードが存在しないと判断した場合は(ステップS1903→No)、データの読み込みを行わずステップS1908へ進む。一方、子孫ノード情報640により子孫ノードが存在すると判断した場合には(ステップS1903→Yes)、ステップS1904へ進む。
【0091】
このように、子孫ノード情報640をデータ格納位置情報600として設定することにより、子孫ノード情報640で子孫ノードが存在しない場合は(ステップS1903→No)、探索条件の処理において、共通XPath250で指定されたノード以降の子孫ノードのデータを読み込まないため、探索時間を短縮することができる。
【0092】
次に、探索条件評価部142は、データ格納位置情報600にノードテスト情報650(図6(b)参照)が設定されているか否かを判断する(ステップS1904)。そして、ノードテスト情報650が設定されていない場合には(ステップS1904→No)、ステップS1906へ進む。一方、ノードテスト情報650が設定されている場合には(ステップS1904→Yes)、ステップS1905へ進み、ノードテスト情報650に基づき、ノードテストに合致するか否かを判断する(ステップS1905)。ここで、ノードテスト情報650によりノードテストに合致しないと判断された場合は(ステップS1905→No)、データの読み込みを行わずステップS1908へ進む。一方、ノードテスト情報650により、ノードテストに合致すると判断された場合には(ステップS1905→Yes)、ステップS1906の処理へ進む。
【0093】
このように、ノードテスト情報650をデータ格納位置情報600として設定することにより、共通XPath250が示すノードがノードテスト650に合致しない場合は(ステップS1905→No)、探索条件の処理において、そのノードが示すデータを読み込まないため、探索時間を短縮することができる。
【0094】
次に、ステップS1906において、探索条件評価部142は、データ格納位置情報600から共通XPath250が示すノード以降のデータを読み込む(ステップS1906)。そして、読み込んだデータを用いて、探索条件評価部142が探索条件を評価する(ステップS1907)。続いて、探索条件評価部142は、共通XPath250によるデータ格納位置情報600の取得指示があるか否かを判定する(ステップS1908)。データ格納位置情報600の取得指示があれば(ステップS1908→Yes)、探索条件評価部142は、データ格納位置情報600を取得し、メインメモリ10上に保持する(ステップS1909)。一方、データ格納位置情報600の取得指示がなければ(ステップS1908→No)、ステップS1910へ進む。続いて、探索条件評価部142は、全ての探索条件を評価したか否かを判断する(ステップS1910)。そして、評価していない探索条件がある場合には(ステップS1910→No)、ステップS1902へ戻り処理を続ける。一方、全ての探索条件を評価していれば(ステップS1910→Yes)、処理を終える。
【0095】
一方、ステップS1901において、データベースアクセス部141で取得した共通XPath250が示すデータ格納位置情報600がなければ(ステップS1901→No)、探索条件評価部142は、共通XPath250を用いずに、探索条件の評価を行う(ステップS1911)。次に、探索条件評価部142は、共通XPath250によるデータ格納位置情報600の取得指示があるか否かを判定する(ステップS1912)。データ格納位置情報600の取得指示があれば(ステップS1912→Yes)、探索条件評価部142は、データ格納位置情報600を取得し、メインメモリ10上に保持する(ステップS1913)。一方、データ格納位置情報600の取得指示がなければ(ステップS1912→No)、ステップS1914へ進む。続いて、探索条件評価部142は、全ての探索条件を評価したか否かを判断する(ステップS1914)。そして、評価していない探索条件がある場合には(ステップS1914→No)、ステップS1911へ戻り処理を続ける。一方、全ての探索条件を評価していれば(ステップS1914→Yes)、処理を終える。
【0096】
(選択式評価処理)
図20はアクセスプランに基づき、図1の選択式実行部が選択式のXPathを評価する際の流れを示すフローチャートである。選択式実行部143は、データベースアクセス部141または探索条件評価部142でメインメモリ700上に保持したデータ格納位置情報600が入力されている。
【0097】
図20に示すように、まず選択式実行部143は、データベースアクセス部141または探索条件評価部142で取得した共通XPath250が示すデータ格納位置情報600があるか否かを判定する(ステップS2001)。
【0098】
ここで、データ格納位置情報600がある場合(ステップS2001→Yes)とは、次の3つの場合がある。(1) 表式202にXPathを含み、そのXPathと選択式201のXPathとから共通XPath250が抽出できる場合。(2)探索条件203にXPathを含み、そのXPathと選択式201のXPathとから共通XPath250が抽出できる場合。(3)表式202にXPathを含み、探索条件203にもXPathを含み、それらのXPathと選択式201のXPathとから共通XPath250が抽出できる場合である。この3つの場合の中で、どの共通XPath250を使用するかは、アクセスプラン決定部132により決定されたアクセスプランに基づく。従って、共通XPath250を抽出しても、アクセスコストが最小にならなければ、データ格納位置情報600を取得しないアクセスプランとなることがある。
【0099】
図20に戻り、選択式実行部143は、共通XPath250が示すデータ格納位置情報600があれば(ステップS2001→Yes)、次にデータ格納位置情報600に子孫ノード情報640(図6(b)参照)が設定されているか否かを判断する(ステップS2002)。そして、子孫ノード情報640が設定されていない場合は(ステップS2002→No)、ステップS2004へ進む。一方、子孫ノード情報640が設定されている場合には(ステップS2002→Yes)、ステップS2003へ進み、子孫ノード情報640に基づき、子孫ノードが存在するか否かを判断する(ステップS2003)。ここで、子孫ノード情報640により子孫ノードが存在しないと判断した場合は(ステップS2003→No)、データの読み込みを行わずステップS2008へ進む。一方、子孫ノード情報640により子孫ノードが存在すると判断した場合には(ステップS2003→Yes)、ステップS2004へ進む。
【0100】
このように、子孫ノード情報640をデータ格納位置情報600として設定することにより、子孫ノード情報640で子孫ノードが存在しない場合は(ステップS2003→No)、選択式の処理において、共通XPath250で指定されたノード以降の子孫ノードのデータを読み込まないため、探索時間を短縮することができる。
【0101】
次に、選択式実行部143は、データ格納位置情報600にノードテスト情報650(図6(b)参照)が設定されているか否かを判断する(ステップS2004)。そして、ノードテスト情報650が設定されていない場合には(ステップS2004→No)、ステップS2006へ進む。一方、ノードテスト情報650が設定されている場合には(ステップS2004→Yes)、ステップS2005へ進み、ノードテスト情報650に基づき、ノードテストに合致するか否かを判断する(ステップS2005)。ここで、ノードテスト情報650によりノードテストに合致しないと判断された場合は(ステップS2005→No)、データの読み込みを行わずステップS2008へ進む。一方、ノードテスト情報650により、ノードテストに合致すると判断された場合には(ステップS2005→Yes)、ステップS2006の処理へ進む。
【0102】
このように、ノードテスト情報650をデータ格納位置情報600として設定することにより、共通XPath250が示すノードがノードテスト650に合致しない場合は(ステップS2005→No)、選択式の処理において、そのノードが示すデータを読み込まないため、探索時間を短縮することができる。
【0103】
次に、ステップS2006において、選択式実行部143は、データ格納位置情報600から共通XPath250が示すノード以降のデータを読み込む(ステップS2006)。次に、読み込んだデータを用いて選択式実行部143は、共通XPath250が示すノード以降の選択式のXPathを評価する(ステップS2007)。続いて、選択式実行部143は、全ての選択式を評価したか否かを判断する(ステップS2008)。そして、評価していない選択式がある場合には(ステップS2008→No)、ステップS2002へ戻り処理を続ける。一方、全ての選択式を評価していれば(ステップS2008→Yes)、処理を終える。
【0104】
一方、ステップS2001において、データベースアクセス部141または探索条件評価部142で取得した共通XPath250が示すデータ格納位置情報600がなければ(ステップS2001→No)、選択式実行部143は、補助記憶部40からXMLデータ700を読み込む(ステップS2009)。続いて、選択式実行部143は、読み込んだデータを用いて選択式のXPathを評価する(ステップS2010)。次に、選択式実行部143は、全ての選択式を評価したか否かを判断する(ステップS2011)。そして、評価していない選択式がある場合には(ステップS2011→No)、ステップS2010へ戻り処理を続ける。一方、全ての選択式を評価していれば(ステップS2011→Yes)、処理を終える。
【0105】
このようにすることで、本実施形態に係るデータベース管理方法、データベース管理装置およびプログラムは、ルートノードから共通パスに示されるノードまで辿る処理を排除し、構造化データの検索時間を短縮することができる。
【図面の簡単な説明】
【0106】
【図1】本実施形態に係るデータベース管理システムの構成を示す機能ブロック図である。
【図2】実施形態に係るデータベース管理装置に入力されるSQLの一例を示す図である。
【図3】本実施形態に係るXMLスキーマの一例を示す図である。
【図4】本実施形態に係るインデクス構成情報の一例を示す図である。
【図5】本実施形態に係るアクセスコスト設定情報の一例を示す図である。
【図6】本実施形態に係るデータ格納位置情報の一例を示す図である。
【図7】本実施形態に係るデータベース管理方法の処理の流れを示すフローチャートである。
【図8】本実施形態に係るデータベース管理装置に入力されるSQL文中にヒント情報が含まれている例を示す図である。
【図9】本実施形態に係る共通XPathを木構造で表現した図である。
【図10】本実施形態に係るデータベース管理方法においてアクセスコストが最小のアクセスプランの決定を説明するための図である。
【図11】本実施形態に係るデータベース管理方法において、XMLスキーマを用いて、探索条件および選択式中のXPathの処理の流れを示すフローチャートである。
【図12】本実施形態に係るデータベース管理方法において、XMLスキーマを用いて、表式中のXPathの処理の流れを示すフローチャートである。
【図13】本実施形態に係るデータベース管理方法において、インデクス構成情報を用いて、探索条件および選択式中のXPathの処理の流れを示すフローチャートである。
【図14】本実施形態に係るデータベース管理装置において、インデクス構成情報を用いて、表式中のXPathの処理の流れを示すフローチャートである。
【図15】本実施形態に係るデータベース管理方法において、共通XPathを抽出する処理の流れを示すフローチャートである。
【図16】本実施形態に係るデータベース管理方法において、共通XPathを利用したアクセスプランを決定する際の流れを示すフローチャートである。
【図17】本実施形態に係るデータベース管理方法において、アクセスプランに従い、SQLを実行する概念を説明するための図である。
【図18】本実施形態に係るデータベース管理方法において、データベースにアクセスする際の流れを示したフローチャートである。
【図19】本実施形態に係るデータベース管理方法において、探索条件を評価する際の流れを示したフローチャートである。
【図20】本実施形態に係るデータベース管理方法において、選択式のXPathを評価する際の流れを示すフローチャートである。
【符号の説明】
【0107】
1 データベース管理装置
5 情報処理装置
6 ネットワーク
7 データベース管理システム
10,50 メインメモリ
20,51 CPU
30,52 通信部
40 補助記憶部
55 アプリケーション処理部
100 データベース管理部
110 SQL解析部
111 SQL分解部
112 ヒント情報解析部
120 定義情報解析部
121 XMLスキーマ解析部
122 インデクス構成情報解析部
130 SQL最適化部
131 共通XPath抽出部
132 アクセスプラン決定部
140 SQL実行部
141 データベースアクセス部
142 探索条件評価部
143 選択式実行部
200 SQL文
210 選択式から取得した最短経路のXPath
220 表式から取得した最短経路のXPath
230 探索条件から取得した最短経路のXPath
250 共通XPath
300 XMLスキーマ
400 インデクス構成情報
500 アクセスコスト設定情報
600 データ格納位置情報
700 XMLデータ
800 ヒント情報

【特許請求の範囲】
【請求項1】
構造化データを格納する1つ以上のデータベースが記憶される記憶部と、前記記憶部に記憶されるデータベースの管理を行うデータベース管理部と、を備えたデータベース管理装置が、SQL(Structured Query Language)を用いて前記構造化データの処理を行うデータベース管理方法であって、
前記データベース管理部は、
前記構造化データを処理するためのSQL文を取得し、
前記取得したSQL文から、前記構造化データのうち処理対象となるデータの格納位置を示すパス全てを抽出し、
前記パスが複数抽出された場合に、
前記抽出されたパスそれぞれと、前記記憶部に記憶された前記構造化データのスキーマとを、ルートノードから前記抽出されたパスそれぞれが示す前記処理対象となるデータの格納位置まで順に比較して、前記抽出されたパスそれぞれにおける前記ルートノードから当該処理対象となるデータの格納位置までの経路のパスを取得し、
前記取得した経路のパスそれぞれを比較して、当該経路のパス同士の共通部分を、共通パスとして抽出し、
前記記憶部に記憶される構造化データにおける前記抽出された共通パスが示す格納位置以降のノードのデータについて、前記SQLを用いて処理を行うことを特徴とするデータベース管理方法。
【請求項2】
前記データベース管理部は、
前記抽出されたパスそれぞれが、省略記法で指定されている場合には、フルパス記法に変換し、
前記フルパス記法で指定された前記パスそれぞれが、逆文書順の記法で指定されている場合には、文書順の記法に変換すること
を特徴とする請求項1に記載のデータベース管理方法。
【請求項3】
前記SQL文は、処理の対象となる前記構造化データを指定する表式と、前記表式で指定された前記構造化データのうち所定の要素が含まれるデータを射影する選択式とを、少なくとも含んでおり、
前記データベース管理部は、
前記SQL文を、少なくとも前記表式と、前記選択式とに分解し、
前記分解した表式および前記分解した選択式それぞれから、前記処理対象となるデータの格納位置を示すパスを抽出し、
前記パスが複数抽出された場合に、
前記抽出されたパスそれぞれと、前記記憶部に記憶された前記構造化データのスキーマとを、前記ルートノードから前記抽出されたパスそれぞれが示す前記処理対象となるデータの格納位置まで順に比較して、少なくとも前記表式および前記選択式それぞれにおける前記ルートノードからの経路のパスを取得し、
前記取得した、少なくとも前記表式の前記経路のパスと前記選択式の前記経路のパスとを比較して、当該経路のパスの共通部分を、前記共通パスとして抽出すること
を特徴とする請求項2に記載のデータベース管理方法。
【請求項4】
前記データベース管理部は、
前記抽出された1つ以上の共通パスそれぞれに含まれるノード数をカウントし、少なくとも前記表式および前記選択式それぞれにおいて前記構造化データの処理を行うときに省略できるノード数に応じたアクセスコストを計算し、前記アクセスコストが最小となるようにアクセスプランを決定し、
前記決定したアクセスプランに従い、前記表式で指定される前記構造化データにアクセスし、前記共通パスが示す前記処理対象となる格納位置以降のノードのデータについて、前記選択式に合致する前記データを射影すること
を特徴とする請求項3に記載のデータベース管理方法。
【請求項5】
前記データベース管理部は、
前記共通パスが示す前記処理対象となるデータの格納位置と、前記共通パスで示されるノードの前記構造化データにおける下位のノードである子孫ノードの有無を示す情報とを含むデータ格納位置情報を前記記憶部に記憶し、
前記データ格納位置情報に基づいて前記子孫ノードが存在しないと判断した場合に、
前記共通パスが示す前記処理対象となる格納位置以降のノードのデータについて処理を行わないこと
を特徴とする請求項4に記載のデータベース管理方法。
【請求項6】
前記データ格納位置情報は、少なくとも前記選択式における前記処理対象となるデータの格納位置を示すパスで示されるノードが、所定のノードテストに合致するか否かを示す情報をさらに含み、
前記データベース管理部は、
当該ノードが、前記所定のノードテストに合致しない場合に、当該ノードのデータについて処理を行わないこと
を特徴とする請求項5に記載のデータベース管理方法。
【請求項7】
前記データベース管理部は、
前記SQL文に、前記共通パスを用いて処理を行うか否かを指定するヒント情報が含まれているときに、前記ヒント情報に従い、前記共通パスを用いて処理を行うか否かを判断すること
を特徴とする請求項1ないし請求項6のいずれか1項に記載のデータベース管理方法。
【請求項8】
前記データベース管理部は、
アプリケーション単位で共通パスを用いて処理を行うか否かを指定するヒント情報、またはデータベース管理システム単位で共通パスを用いて処理を行うか否かを指定するヒント情報を取得し、前記ヒント情報に従い、前記共通パスを用いて処理を行うか否かを判断すること
を特徴とする請求項1ないし請求項6のいずれか1項に記載のデータベース管理方法。
【請求項9】
前記データベース管理部は、
前記記憶部に、前記構造化データの格納位置を指定するインデクスのインデクス定義情報が記憶されている場合には、
前記処理対象となるデータの格納位置を示すパスそれぞれと、前記記憶部に記憶された前記インデクス定義情報に示されるインデクスキーにより指定される前記構造化データの格納位置を示すパスとを、前記ルートノードから前記インデクスキーにより指定される前記構造化データの格納位置まで順に比較して、前記処理対象となるデータの格納位置を示すパスそれぞれにおける前記ルートノードからの経路の文字列を取得すること
を特徴とする請求項1ないし請求項8のいずれか1項に記載のデータベース管理方法。
【請求項10】
前記データベース管理部は、
前記記憶部に、前記構造化データのスキーマも、前記構造化データの格納位置を指定するインデクス定義情報も記憶されていない場合に、
前記取得したSQL文から、前記構造化データのうち処理対象となるデータの格納位置を示すパスの全てを抽出し、前記抽出したパスそれぞれを比較して共通部分を、前記共通パスとして抽出すること
を特徴とする請求項1ないし請求項9のいずれか1項に記載のデータベース管理方法。
【請求項11】
外部からの処理要求を通信回線を介して受け付ける通信部と、構造化データを格納する1つ以上のデータベースが記憶される記憶部と、前記データベースを管理するデータベース管理部と、を含んで構成されるデータベース管理装置であって、
前記データベース管理部は、
前記通信部を介して、前記記憶部に記憶された前記構造化データを処理するためのSQL文を取得し、
前記取得したSQL文から、前記構造化データのうち処理対象となるデータの格納位置を示すパス全てを抽出し、
前記パスが複数抽出された場合に、
前記抽出されたパスそれぞれと、前記記憶部に記憶された前記構造化データのスキーマとを、ルートノードから前記抽出されたパスそれぞれが示す前記処理対象となるデータの格納位置まで順に比較して、前記抽出されたパスそれぞれにおける前記ルートノードから当該処理対象となるデータの格納位置までの経路のパスを取得し、
前記取得した経路のパスそれぞれを比較して、当該経路のパス同士の共通部分を、共通パスとして抽出し、
前記記憶部に記憶される構造化データにおける前記抽出された共通パスが示す格納位置以降のノードのデータについて、前記SQLを用いて処理を行うこと
を特徴とするデータベース管理装置。
【請求項12】
請求項1ないし請求項10のいずれか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

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate


【公開番号】特開2009−295013(P2009−295013A)
【公開日】平成21年12月17日(2009.12.17)
【国際特許分類】
【出願番号】特願2008−149405(P2008−149405)
【出願日】平成20年6月6日(2008.6.6)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】