JP5196924B2 - データベース処理装置、方法及びプログラム - Google Patents

データベース処理装置、方法及びプログラム Download PDF

Info

Publication number
JP5196924B2
JP5196924B2 JP2007235723A JP2007235723A JP5196924B2 JP 5196924 B2 JP5196924 B2 JP 5196924B2 JP 2007235723 A JP2007235723 A JP 2007235723A JP 2007235723 A JP2007235723 A JP 2007235723A JP 5196924 B2 JP5196924 B2 JP 5196924B2
Authority
JP
Japan
Prior art keywords
loop
unit
xquery
join
direct product
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2007235723A
Other languages
English (en)
Other versions
JP2009069988A (ja
Inventor
雅一 服部
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2007235723A priority Critical patent/JP5196924B2/ja
Priority to EP08015924A priority patent/EP2040181A2/en
Priority to US12/207,752 priority patent/US8001110B2/en
Priority to CN2008101608381A priority patent/CN101388034B/zh
Publication of JP2009069988A publication Critical patent/JP2009069988A/ja
Application granted granted Critical
Publication of JP5196924B2 publication Critical patent/JP5196924B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/83Querying
    • G06F16/835Query processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Document Processing Apparatus (AREA)

Description

この発明は、階層構造を持った構造化文書に対して処理を行うデータベース処理装置、方法及びプログラムに関するものである。
近年、XML等の構造化文書の普及に伴い、構造化文書を格納するデータベース(例えばXMLデータベース)も利用される傾向になる。そして、このようなデータベースに対して問い合わせを行うための言語として、XQuery等が提案されている。
XQueryは、XML問い合わせのための関数型言語であり、FLWR構文が特徴となっている。このFLWR構文は、for節、let節、where節、return節からなる構文をいう。このXQueryを用いた処理は、例えば非特許文献1に記載されている。
そして、XQueryのFLWR構文において、for節はシーケンス内の各項目を変数にバインドする。これに対して、let節はシーケンスをまるごと変数にバインドする。このfor節とlet節を組み合わせることで、XMLに相応しい高度な問い合わせが行える(なお、XML再構成や集計はlet節無しでは表現できない)。
ところで、XQueryにおいては、複数のfor節を用いて入れ子構造にした問い合わせもlet節を用いて呼び出すことができる。
ところで、現在のデータベース製品では、let節は関数系言語の処理系に準じた実装をしていることが多い。関数系言語の処理系に準じた実装では、上述したような入れ子構造で問い合わせを行った場合、入れ子構造のうち外側のXQueryと、内側のXQueryとの間に入出力関係があるとみなされ、外側のXQueryの処理が終了した後に、当該処理結果を、それぞれ変数として内側のXQueryに渡して処理が行われることになる。
M. Fernandez, J. Simeon, B. Choi, A. Marian, G. Sur. Implementing XQuery1.0: The Galax Experience. VLDB 2003.
しかしながら、XQueryの高度な問い合わせを行うには、上述したような入れ子構造が不可欠であるが、関数型言語の処理系に準じたものである場合、2重以上の入れ子構造では計算量が増大するという問題が生ずる。
つまり、関数型言語の処理系の場合、外側の多重ループを処理してから内側の処理を行うので、多重ループの回数だけ内部のXQueryによる処理が呼び出されることになる。これにより、入れ子の数を一つ増加させるだけで計算量が膨大になる。
本発明は、上記に鑑みてなされたものであって、問い合わせが行われた場合における計算量を抑止するデータベース処理装置、方法及びプログラムを提供する。
上述した課題を解決し、目的を達成するために、本発明にかかるデータベース処理装置は、論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付部と、前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加部と、前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合部と、前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得部と、前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成部と、前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成部と、前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付部と、を備える。
また、本発明にかかるデータベース処理方法は、論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付ステップと、前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加ステップと、前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合ステップと、前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得ステップと、前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成ステップと、前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成ステップと、前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付ステップと、を有することを特徴とする。
また、本発明は、論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付ステップと、前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加ステップと、前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合ステップと、前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得ステップと、前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成ステップと、前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成ステップと、前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付ステップと、をコンピュータに実行させることを特徴とする。
本発明によれば、構造化データベースに対する処理で計算量を低減させるという効果を奏する。
以下に添付図面を参照して、この発明にかかるデータベース処理装置、方法及びプログラムの最良な実施の形態を詳細に説明する。
(第1の実施の形態)
図1に示すように、第1の実施の形態にかかるデータベース処理装置100は、問合受付部101と、入れ子XQueryプラン生成部102と、単一XQueryプラン生成部103と、XQueryプラン実行部104と、直積結合オペレータ部105と、自然結合オペレータ部106と、リンク更新オペレータ部107と、テストオペレータ部108と、データ取得オペレータ部109と、索引取得オペレータ部110と、出力部112と、階層テーブル記憶部111と、XMLデータベース113とを備える。
XMLデータベース113は、複数の階層構造を持った構造化文書であるXMLデータが格納されているデータベースである。XMLデータでは、構造化文書を構成する個々のパーツを「要素」(エレメント:Element)と呼ぶ。この要素はタグ(Tag)を使って記述される。具体的には、要素の始まりを示すタグ(以下、開始タグと呼ぶ)と、終わりを示すタグ(以下、終了タグと呼ぶ)の2つのタグでデータを挟み込んで、1つの要素を表現している。このような開始タグと終了タグで挟み込まれたテキストデータは、1つの要素に含まれるテキスト要素(テキストノード)となる。
図2に示す例では、開始タグ<ROOT>及び終了タグ</ROOT>で挟み込まれた複数の部分的なXMLデータで構成されている。部分的なXMLデータとしては、開始タグ<所属データ>及び終了タグ</所属データ>で挟み込まれた会社の所属部門名に関するデータ、開始タグ<年代データ>及び終了タグ</年代データ>で挟み込まれた西暦年代に関するデータ、開始タグ<従業員データ>及び終了タグ</従業員データ>で挟み込まれた従業員に関するデータとを含んでいる。このように、図2で示されたXMLデータでは、異なる部分構文木毎に、及び異なる階層毎に、種類が異なるデータを保持するように構成されている。これにより、1つのXMLデータで様々な種類のデータを保持することができる。
図2に示したXMLデータは、図3に示すような構文木で表現することができる。XMLデータは、DOM(Document Object Model)に似た形式でオブジェクトとリンクで表現される。これらオブジェクトは、上述した各要素を表現している。
例えばオブジェクトE1は、<ROOT>を示す要素を示している。つまり、<ROOT>オブジェクトの直下に、1件の<所属データ>オブジェクトが存在し、<ROOT>オブジェクトから親子関係を示すリンクで結合されていることが表現されている。
また、構文木の一部を部分構文木と呼ぶこととする。図3に示す構文木では、所属データE2以下の部分構文木、年代データE7以下の部分構文木、及び従業員データE12以下の部分構文木で構成されていることになる。これら部分構文木は、さらに細かい部分構文木から構成されている。例えば所属データE2以下の部分構文木は、所属E3以下の部分構文木、及び所属E5以下の部分構文木で構成されている。
また、当該オブジェクトの最下層には、上述したテキストノードを表現するテキストオブジェクトが存在している。これらテキストオブジェクトは、図3においては矩形で表されている。例えばオブジェクトE4は、テキスト要素として「分散」が格納されたテキストノードとなる。
階層テーブル記憶部111は、XQueryの実行中に作成される階層テーブルを複数記憶する。このテーブル間の階層関係は、XQueryの入れ子構造に応じて形成されるものとし、後で詳細に説明する。
また、階層テーブル記憶部111においては、階層性をリンクで表現している。このようにテーブル間の階層性を表現する技術は、RDBにおけるリレーションと等価な技術として説明を省略する。なお、階層テーブルは、従来のRDBと同様に、カラム、レコードという要素から構成される。
上述したXMLデータベース113及び階層テーブル記憶部111は、HDD(Hard Disk Drive)、光ディスク、メモリカード、RAM(Random Access Memory)などの一般的に利用されているあらゆる記憶手段により構成することができる。また、本実施の形態においてはHDDを用いて永続的に記憶するが、必要に応じてRAMに一時的に記憶しても良い。
図1に戻り、問合受付部101は、XMLデータベース113に対してXQueryによる問い合わせ要求の入力を受け付ける。
次に、XQueryの言語仕様について、手続き的な観点で説明する。XQueryは、上述したようにfor節、let節、where節、return節で構成されている。for節の構文は、「for 変数 in 式」で表される。for節の構文は、式を満足する値を変数に代入してループさせるという命令を示している。
let節の構文は、「let 変数 := 式」で表される。let節の構文は、式を満足する値を集約してシーケンスとして変数に代入させるという命令を示している。なお、シーケンスとは、フラットなリストを示している。
where節の構文は、「where 式」で表される。where節は、式に応じて繰り返されるループを制限するものである。つまり、where節を含む命令文では、式で表された条件を満足する場合にループ処理を行い、式で表された条件を満たしていない場合にループをスキップさせるという命令を示している。
return節の構文は、「return 式」で表される。return節は、XQueryを処理した結果をフォーマット化して出力するためのものである。このため、return節に含まれている式などには、変数を含む任意のXMLデータを記述することができる。
これらFLWR構文で用いられる変数は、「$文字列」の形で定義する。この定義された変数は、主問い合わせ及び副問い合わせなどの入れ子構造により2重宣言された場合を除き、同じ文字列を持つ変数は同一のものと見なされる。
また、XMLデータの要素間の階層条件を指定するパス演算子は、XQueryでは以下のようなものがある。パス演算子の例について3種類説明する。まず、“/”は要素間の親子関係を表す。具体的には、“/”の右側にある要素が、“/”の左側にある要素の子に該当することを示す。
次に、“//”は要素間が先祖子孫関係を表す。具体的には、“/”の右側にある要素が、“/”の左側にある要素の子孫に該当することを示す。最後に、“.”は任意の要素を表す。なお、パス演算子はこれらに制限するものではなく、他の演算子による処理を含んでいても良い。
このように、XQueryは、XMLへの問い合わせのための関数型言語である。ところで、従来からRDBに対して問い合わせを行う言語としては、SQLが存在しているが、SQLは宣言的な言語であるのに対して、XQueryは関数型言語としての特徴を有する。
そして、問合受付部101は、上述した構文やパス演算子を含むXQueryデータの入力を受け付ける。このXQueryデータは、ユーザ又は他システム等から入力されたものとする。本実施の形態にかかるデータベース処理装置100では、入れ子構造を有するXQueryデータの処理に特徴がある。次に、入れ子構造を有するXQueryについて説明する。
図4に示したXQueryデータは、「XMLデータベースのルートの子孫にある所属($x)とルートの子孫にある年代($y)の組合せを作りなさい。各組合せについてその組合せ(所属と入社年代)に合致するルートの子孫にある従業員($w)を取り出して、そのテキスト(従業員名)をシーケンスにして返しなさい」という要求を意味している。
言い換えると、図4に示したXQueryデータは、XMLデータベースに対して、当該XMLデータベースに含まれている部分構文木に格納された各要素の組合せを作成した後、当該組合せに合致する情報を別の部分構文木から取得する処理を、2重ループの各ループで変数として各要素を使用して要求することを意味する。なお、当該XQueryにおいて、2重ループとは、“for $x in //所属”によるループと、“for $y in //年代”によるループと、で構成されている。
図4に示したXQueryで、図2に示したXMLデータを処理した場合、データベース処理装置100は、図5に示すXMLデータを作成する。つまり、図4に示したfor節、let節及びwhere節に従って取得したデータを用いて、return節で定義されたフォーマットに従ったXMLデータを作成される。
次に、XQueryによるXMLデータの処理を、従来からの処理手順で行った例について、図6−1及び図6―2を用いて説明する。従来のXQueryの処理では、入れ子構造の内部にlet節がある場合、当該入れ子構造の外側と、内側との間には入出力関係があるとみなされる。つまり、入れ子構造の外側のXQuery処理が終了した後に、処理結果を入力変数の組に設定し、内側のXQueryに渡して処理を行うことになる。次に詳細な例について説明する。
まずは、従来のデータベース処理装置では、データ取得オペレータを用いて、$xに対応するデータ列をXMLデータから取得して、テーブルT1を作成する(ステップS601)と共に、$yに対応するデータ列をXMLデータから取得して、テーブルT2を作成する(ステップS602)。これらステップS601及びステップS602の処理は、図4に示すXQueryの“//”という演算子に対応している。
このようにして作成されたテーブルT1は、1カラム、2レコードで構成される。図6−1に示すように、テーブルT1の各レコードには、XQueryの“//所属”に対応する“分散”と“軽量”とがそれぞれ格納されている。
テーブルT2も同様に1カラム、2レコードで構成され、XQueryの“//年代”に対応する“1990”と“2000”とがそれぞれ格納されている。
次に、従来のデータベース処理装置では、直積結合オペレータを用いて、テーブルT1とテーブルT2との直積結合の演算を行い、テーブルT3を作成する(ステップS603)。図6−1に示すように、作成されたテーブルT3は、2カラム、4レコードで構成されている。
上述したステップS601〜S603までの処理が、入れ子構造の外側の処理に該当する。上述した外側のXQuery処理が終了した後、テーブルT3に格納された各レコードの情報を入力変数の組としてセットし、内側のXQueryに渡して処理が行われる。
まず、従来のデータベース処理装置は、テーブルT3のレコード毎に複製を行う。具体的にはテーブルT3の1レコード目を複製して、1レコードだけで構成されたテーブルT4を作成する(ステップS604)。他のレコードについても同様に、テーブルT3の2レコード目を複製して、テーブルT5を作成し(ステップS605)、テーブルT3の3レコード目を複製して、テーブルT6を作成し(ステップS606)、テーブルT3の4レコード目を複製して、テーブルT7を作成する(ステップS607)。
ところで、図2に示したXMLデータベースには、予め2種類の索引データが付与されているものとする。一方は、所属/text()をキーにして従業員/text()の集合を返す索引1であり、もう一方は、入社年代/text()をキーにして従業員/text()の集合を返す索引2とする。
そして、従来のデータベース処理装置は、索引取得オペレータを用いて、テーブルT4の第1カラムを検索キーとして上述した索引1にアクセスする。つまり、テーブルT4は、[“分散”, “1990”]という1つのレコードで構成されているため、索引取得オペレータ部を用いて第1カラム“分散”を検索キーとして索引1にアクセスし、当該検索キーの条件に該当する集合を取得する(ステップS608)。当該処理により取得した集合は、テーブルT8の第3カラムに展開される。図6−1に示すように、取得した集合“服部”、 “金井”、 “黒川”は、それぞれ別レコードとしてテーブルT8に格納される。
さらに、テーブルT5に対しても第1カラム“分散”を検索キーとして索引1にアクセスして、集合を取得した後、テーブルT9を作成する(ステップS609)。また、テーブルT6及びテーブルT7においても同様の処理を行う(ステップS610〜S611)。
次に、従来のデータベース処理装置は、データ取得オペレータを用いて、テーブルT8の第3カラムの従業員の名前を検索キーとして、XMLデータベースから当該従業員の名前と対応付けられている入社年代を取得する(ステップS612)。そして、取得した入社年代を第4カラムに設定したテーブルT12を作成する。
また、テーブルT9、T10、T11についても同様に、第3カラムの従業員の名前を検索キーとして取得した入社年代で、テーブルT13、T14、T15を作成する(ステップS613〜S615)。
そして、従来のデータベース処理装置は、テストオペレータを用いて、テーブルT12に対して、第2カラムと第4カラムが等しいという比較条件でテストし、図6−2に示すテーブルT16を作成する(ステップS616)。
また、テーブルT13、T14についても同様に、第2カラムと第4カラムが等しいという比較条件でテストし、図6−2に示すテーブルT17、T18を作成する(ステップS617〜S618)。さらに、また、テーブルT15についても同様に、第2カラムと第4カラムが等しいという比較条件でテストするが、一致するレコードが無いため、最終的なテーブルは空レコードとなり、テーブルは作成されない(ステップS619)。
次に、従来のデータベース処理装置では、テーブルT3に対して、作成したテーブルT16〜T18を関連付ける処理を行う(ステップS620)。当該処理により、テーブルT19からテーブルT16、T17、T18に対して片方向リンクを張り付けることができる。
これらテーブルT19、T16、T17、T18に格納された情報を、図4に示すXQueryのreturn節で記述されたフォーマットで整形することで、図5に示すXMLデータを得ることができる。上述した従来のデータベース処理装置の処理では、直積結合で生成されたテーブルのレコード毎に処理を行うため、計算量が膨大になるという問題が生じていた。これに対して、本実施の形態にかかるデータベース処理装置100では、後述する構成を備えることで、計算量の増加を抑止できる。
入れ子XQueryプラン生成部102は、識別子付加部121と、対応付部122と、テーブル作成部123と、直積結合部124と、索引情報取得部128と、を備え、問合受付部101が入力を受け付けたXQueryデータが入れ子構造を有している場合に、当該入れ子構造の一部をなすXQueryデータを抽出し、入れ子を処理するためのプランを出力する。なお、抽出されるXQueryデータについては後述する。
単一XQueryプラン生成部103は、問合受付部101が入力を受け付けたXQueryデータが入れ子構造を有していない場合に、当該XQueryデータを処理するためのプランを出力する。
また、問合受付部101が入力を受け付けたXQueryデータから入れ子XQueryプラン生成部102が入れ子構造の一部をなすXQueryデータを抽出した場合、単一XQueryプラン生成部103は、抽出したXQueryデータ毎に、当該XQueryデータを処理するためのプランを出力する。当該出力されるプランは後述する各オペレータ部による処理の系列で表される。なお、単一XQueryプラン生成部103で生成されたプランは、入れ子XQueryプラン生成部102に出力される。次に、XQueryデータを処理するためプランを作成する構成要素について説明する。
テーブル作成部123は、要素テーブル作成部124と、単一ループテーブル作成部125と、結合テーブル作成部126と、直積結合部127と、を備え、テーブルを作成するプランを生成する。これにより、XQueryプラン実行部104を介してテーブルが作成される。なお、テーブル作成の詳細な処理については後述する。以下に各構成が作成するテーブル生成プランについて説明する。
要素テーブル作成部124は、XQueryの入れ子構造による多重ループのループ毎に、当該ループで変数で示された要素毎に別レコードとして格納されている要素テーブルを作成するプランを生成する。これにより、XQueryプラン実行部104を介し、後述する複数のオペレータ部により、要素テーブルが作成される。
単一ループテーブル作成部125は、XQueryの入れ子構造による多重ループのループ単位で、要素テーブルに格納された要素と、後述する識別子付加部121が付与するIDと、後述する索引情報取得部128が取得した索引情報と、を対応付けたレコードを保持する単一ループテーブルを作成するプランを生成する。これにより、XQueryプラン実行部104を介して単一ループテーブルが作成される。
直積結合部127は、識別子付加部121のプランに従ってIDが付加された要素テーブル間を直積結合して、レコード毎に複数のIDが付加された上位テーブル(直積結合テーブル)を作成するプランを生成する。これにより、XQueryプラン実行部104を介して上位テーブルが作成される。なお、上位テーブルについては後述する。
結合テーブル作成部126は、単一ループテーブル作成部125でループ毎に作成された単一ループテーブルを結合し、複数のカラムのそれぞれに、識別子付加部121により付加された別のIDが格納されたループ間結合テーブルを作成するプランを生成する。これにより、XQueryプラン実行部104を介してループ間結合テーブルが作成される。
識別子付加部121は、ループ毎に作成された要素テーブルの各レコードに対して、ユニークなIDを付加するプランを生成する。これにより、XQueryプラン実行部104を介して各レコードに対してユニークなIDが付加される。なお、具体的なIDの付加については後述する。
索引情報取得部128は、下位テーブル毎の各要素(レコード)に従って、XQuery問合要求で取得対象となっている情報を、索引情報として取得するプランを生成する。さらに生成したプランにおいては、取得した索引情報を、下位テーブルの各レコードに追加する処理が含まれている。これにより、XQueryプラン実行部104を介して、下位テーブルのレコード毎に、対応する索引情報を取得して、下位テーブルの各レコードに追加される。
対応付部122は、ユニークなIDが付加された要素テーブルを直積結合したテーブルと、結合テーブル作成部126が作成したループ間結合テーブルとのレコード間を対応付けるプランを作成することで、XQueryプラン実行部104を介してループ間結合テーブルとのレコード間を対応付ける。このレコード間の対応付には、それぞれのテーブルが保持するIDを用いる。そして、当該テーブルの対応付けに従って、後述するXQueryプラン実行部104でプランが実行される。なお、詳細な処理については後述する。
このようにして、入れ子XQueryプラン生成部102及び単一XQueryプラン生成部103で生成されたプランは、入れ子XQueryプラン生成部102がまとめてXQueryプラン実行部104に出力する。
XQueryプラン実行部104は、入れ子XQueryプラン生成部102から入力されたプラン(テーブル作成、識別子付加、対応付け等を含む)通りに処理を実行する。また、XQueryプラン実行部104は、入力されたプラン通りに処理を実行するため、後述する各種オペレータ部のオペレータを呼び出すこととする。
XQueryプラン実行部104が使用する、直積結合、自然結合又はリンク更新などの基本機能を持った命令をオペレータと呼ぶ。オペレータの例としては、階層テーブル記憶部111に記憶されているテーブルを更新するオペレータなどが存在する。なお、オペレータ間の入出力は、階層テーブルのポインタやID等を用いて行われる。
直積結合オペレータ部105は、階層テーブル間の直積演算を行う。この直積演算は、RDBにおける直積演算と等価である。例えば、直積結合部127で作成されたプランに従って要素テーブル間の直積結合を行う。
自然結合オペレータ部106は、階層テーブル間の自然結合演算を行う。この自然結合演算は、RDBにおける自然結合演算と等価である。
リンク更新オペレータ部107は、階層が異なる複数のテーブル間をリンクさせるためのIDを更新する演算を行う。本実施の形態にかかるリンク更新オペレータ部107は、直積結合等で結合されたテーブルで複数のカラムそれぞれIDが格納されている場合に、これらIDの組合せに対してユニークなリンクIDで更新する処理を行う。
テストオペレータ部108は、等号や不等号など比較演算を行う。RDBにおける選択演算と等価である。
データ取得オペレータ部109は、XMLデータベース113に格納されているXMLデータの各要素を接続するリンクに従って、階層を先祖に遡る、子孫の下る、テキストを取得するなどの操作を行って、必要なデータを取得する。
索引取得オペレータ部110は、XMLデータベース113のXMLデータに付加された索引データにアクセスして、当該索引データとして格納されている情報を取得する。このように索引取得オペレータとデータ取得オペレータを組み合わせることで、XMLデータベース113から必要なデータを高速に取得することができる。
出力部112は、XQueryプラン実行部104による実行結果として、問い合わせ要求として入力されたXQueryデータに合致するXMLデータを出力する。
次に、データベース処理装置100の全体的な処理手順について、図7を用いて説明する。
まず、問合受付部101が、ユーザ等からXQueryデータの入力を受け付ける(ステップS701)。
次に、入れ子XQueryプラン生成部102及び単一XQueryプラン生成部103が、入力されたXQueryデータに従って実行するプランを生成する(ステップS702)。なお、詳細な処理手順については後述する。
そして、XQueryプラン実行部104は、各種オペレータ部を用いて、生成されたプランを実行する(ステップS703)。なお、詳細な処理手順については後述する。
最後に、出力部112が、XQueryプラン実行部104のプランの実行により生成されたXMLデータを出力する(ステップS704)。
上述した処理手順により、ユーザ等から入力を受け付けたXQueryデータに対応するXMLデータの出力が可能となる。
次に、図7のステップS702で示した入れ子XQueryプラン生成部102及び単一XQueryプラン生成部103のプランの生成手順について、図8を用いて説明する。
まず、入れ子XQueryプラン生成部102は、入力されたXQueryデータの構文解析を行う(ステップS801)。この構文解析は、例えばYacc&Lexなどのコンパイラコンパイラツールを用いることで容易に構文解析できる。
次に、入れ子XQueryプラン生成部102は、構文解析結果より入れ子構造を含んでいるか否か判断する(ステップS802)。
そして、入れ子XQueryプラン生成部102が入れ子構造を含んでいないと判断した場合(ステップS802:No)、構文解析結果を単一XQueryプラン生成部103に出力する。これにより、単一XQueryプラン生成部103が、入力されたXQueryデータに従った処理を行うための単一プランを生成する(ステップS803)。入れ子無しのXQueryデータの構文木を使ってプランを生成する手法については、従来技術、例えば、特開2001−147933号公報「構造化文書検索方法、構造化文書検索装置及び構造化文書検索システム」を使うことで実現される。
一方、入れ子XQueryプラン生成部102が入れ子構造を含んでいると判断した場合(ステップS802:Yes)、入力されたXQueryデータの分解処理を行う(ステップS803)。
この分解処理は、図4に示すXQueryデータを、図9及び図10のそれぞれに示すXQueryデータに分解する処理とする。図4に示すXQueryデータは、当該XQueryデータに含まれるパス演算子を辿ることで2つに分解される。すなわち、“for $x in //所属”から始まるXQueryデータと、“for $y in //年代”から始まるXQueryデータとが、入れ子を経由して繋がっているため、これらを分解する処理を行う。これにより、図9に示すXQueryデータと、図10に示すXQueryデータとが生成される。なお、実際の処理としては、このようなXQueryデータではなく、構文木または分解要素としてもよい。
この分解された入れ子構造を含まないXQueryデータを、単一XQueryデータと呼ぶ。また、分解された単一XQueryデータ間には等号などの比較条件があるので、その情報を記憶しておく。なお、当該分解の処理手法は、従来から用いられた手法により実行可能なので説明を省略する。
次に、入れ子XQueryプラン生成部102は、分解された単一XQueryデータの処理を実行する全ての単一プランを生成したか否か判断する(ステップS805)。全ての単一プランを生成していないと判断した場合(ステップS805:No)、単一プラン生成部103が、分解された単一XQueryデータに従った処理を行うための単一プランを生成する(ステップS806)。その後、再度ステップS805でプランを生成したか判断する。
そして、入れ子XQueryプラン生成部102が単一XQueryデータの処理を実行する全てのプランを生成したと判断した場合(ステップS805:Yes)、先ほど記憶した分解された単一XQueryデータ間の比較条件を考慮して、生成された単一プランを結合するように入れ子結合プランを生成し、すでに生成された単一プラン群と、当該入れ子結合プランとを組み合わせた詳細なプランを生成して(ステップS807)、処理を終了する。
入れ子結合プランとは、直積結合オペレータ、自然結合オペレータ、リンク更新オペレータの3オペレータのうちいずれか一つ以上を用いて、上述した複数の単一プランによる処理結果を結合するプランを示している。そして、ステップS807やステップS803で生成されたプランに従って、XQueryプラン実行部104が処理を行うことになる。次に、ステップS807におけるプランの生成の詳細について説明する。
次に、図8のステップS807で示されるプランの生成手順について、図11を用いて説明する。なお、作成されるテーブルなどの詳細については図12で詳細に説明する。
まず、入れ子XQueryプラン生成部102の要素テーブル作成部124が、単一プランでループに用いる要素のデータを取得して、要素テーブルを作成するプランを生成する(ステップS1101)。なお、当該プランの実行時において、要素のデータの取得には、データ取得オペレータ部109を用いる。例えば、図9に示した単一XQueryデータに対応する単一プランの場合、図3に示す所属データ以下から、“分散”、“軽量”を取得して、1カラム、2レコードの要素テーブルを作成する。この処理を単一プラン毎に行う。
次に、識別子付加部121が、作成された各要素テーブルのレコード毎に、ユニークなIDを付加するプランを生成する(ステップS1102)。これにより、上述した要素テーブルでは、2カラム、2レコードの要素テーブルとなる。
そして、テーブル作成部123の直積結合部124が、ユニークなIDが付加された後の要素テーブル間を直積結合して、上位テーブルを作成するプランを生成する(ステップS1103)。
なお、本実施の形態では、XQueryデータの入れ子構造の階層に従ってテーブルを作成するが、当該階層の上位に該当するテーブルを上位テーブルとし、当該テーブルの下位に該当するテーブルを下位テーブルと呼ぶ。この上位テーブルは主問い合わせに相当するテーブルとなり、下位テーブルは副問い合わせに相当するテーブルとなる。なお、これら上位下位に制限するものではなく、入力されたXQueryデータがさらに多くの入れ子構造を有している場合、当該入れ子構造に従ってさらに多くの階層のテーブルを作成しても良い。
そして、単一ループテーブル作成部125が、各要素テーブルを複製して、下位テーブルを作成するプランを生成する(ステップS1104)。
その後、索引情報取得部128が、索引取得オペレータ部110が各下位テーブルのレコード毎に、対応する索引情報を取得して、下位テーブルの各レコードに追加するプランを生成する(ステップS1105)。
そして、結合テーブル作成部126が、下位テーブル間を結合して、下位結合テーブルを作成するプランを生成する(ステップS1106)。なお、当該結合は入れ子XQueryプラン生成部102の上述した単一プランの結合手法により求められる。
次に、対応付部122の指示により、リンク更新オペレータ部107が、上位テーブルと、下位結合テーブルとに対してリンク更新を行うことで、これらテーブルのレコード間を対応付けるプランを生成する(ステップS1107)。なお、詳細な処理手順については後述する。
上述した処理で生成されたプランが実行された場合には、入れ子構造のXQueryデータの入力を受け付けた場合に、従来の処理より計算量を低減させることができる。次に、計算量が低減されることを明確にするために、上述した処理で生成されたプランの実行手順を、図12を用いて、生成されるテーブルの例と共に説明する。なお、処理対象となるXMLデータは、図2で示したものを用いる。
まず、要素テーブル作成部124で生成されたプランに従って、データ取得オペレータ部109が、図9の$xに対応するデータ列を取得する(ステップS1201)。これにより、要素テーブル作成部124が要素テーブルHT1を作成する。
また、データ取得オペレータ部109が、図10の$yに対応するデータ列を取得する(ステップS1202)。これにより、XQueryプラン実行部104が、要素テーブルHT2を作成する。これら作成された要素テーブルHT1及びHT2は、階層テーブル記憶部111に記憶される。なお、ステップS1201及びステップS1202の処理は、XQueryでの、“/”という演算子に対応している。
次に、XQueryプラン実行部104が、識別子付加部121が生成したプランに従って、作成された要素テーブルHT1の各レコードにユニークなID“A1”、“A2”を、第2カラムに付加し(ステップS1203)、要素テーブルHT3を作成する。
また、XQueryプラン実行部104が、識別子付加部121が生成したプランに従って、さらに作成された要素テーブルHT2の各レコードにユニークなID“B1”、“B2”を、第2カラムに付加し(ステップS1204)、要素テーブルHT4を作成する。
次に、直積結合部125が生成したプランに従って、直積結合オペレータ部105が、要素テーブルHT3と要素テーブルHT4とを直積結合して、上位テーブルHT5を作成する(ステップS1205)。
そして、XQueryプラン実行部104は、単一ループテーブル作成部125が生成したプランに従って、要素テーブルHT3を複製して、下位テーブルHT6を作成する(ステップS1206)。また、XQueryプラン実行部104は、単一ループテーブル作成部125が生成したプランに従って、要素テーブルHT4を複製して、下位テーブルHT7を作成する(ステップS1207)。
このように下位テーブルHT6は、[“A1”,“分散”],[“A2”,”軽量”]という2レコードで構成されている。ここで、索引情報取得部128が生成したプランに従って、索引取得オペレータ部110は、第2カラムである所属を検索キーにして、索引情報の取得処理を行う(ステップS1208)。この索引取得には、従来技術として説明した索引1を用いる。そして、XQueryプラン実行部104は、単一ループテーブル作成部125が生成したプランに従って、取得した索引情報の集合を下位テーブルHT6の第3カラムとして付加し、下位テーブルHT8を作成する。
また、同様の処理を下位テーブルHT7に対して行うこととして、下位テーブルHT9を作成する(ステップS1209)。
なお、要素テーブルHT1から、要素テーブルHT3、下位テーブルHT6を介して下位テーブルHT8の作成までの処理は、図9の単一XQueryデータに対応する単一プランで実行される。また、要素テーブルHT2から、要素テーブルHT4、下位テーブルHT7を介して下位テーブルHT9の作成までの処理は、図10の単一XQueryデータに対応する単一プランで実行される。あとの処理、つまりステップS1205の直接結合、ステップS1210の自然結合及びステップS1211のリンク更新は、図8のステップS807で示した入れ子結合プラン追加で作られたオペレータとなる。
その後、XQueryプラン実行部104は、結合テーブル作成部126が生成したプランに従って、下位テーブルHT8と下位テーブルHT9とを結合して、下位結合テーブルHT10を作成する(ステップS1210)。当該結合処理では、自然結合オペレータ部106による自然結合を用いる。
そして、対応付部122が生成したプランに従って、リンク更新オペレータ部107が、上位テーブルHT5と、下位結合テーブルHT10とに対してリンク更新を行うことで、上位テーブルHT11と下位テーブルHT12とを作成し、これらテーブルのレコード間を対応付ける(ステップS1211)。つまり、上位テーブルHT5の第3カラム及び第4カラム(複合リンクカラムと呼ぶ)、及び下位結合テーブルHT10の第1カラム及び第2カラム(同様に複合リンクカラムと呼ぶ)のそれぞれに対して、“A1”及び“B1”の組合せに、単一カラム(単一リンクカラム)としてユニークなID“C1”で更新する。他の複合リンクカラムについても同様にIDの組合せ毎に、単一カラムとしてユニークなリンクIDで更新する。これによりレコード毎の対応関係が明確となり、処理を終了する。このユニークなリンクIDはどのような値でも良く、C1、C2以外の例としては、1,2,3…といった昇順に並んだ自然数を割り当てても良い。このような処理には、ハッシュテーブルなど高速にアクセスできるメモリデータ構造を使って実装してもよい。なお、詳細な処理手順については後述する。
その後、XQueryプラン実行部104は、作成された上位テーブルHT11と、下位結合テーブルHT12を用いて、return節で記述されたフォーマットでXMLデータとして整形する。これにより、図5で示したXMLデータが得られる。
つまり、従来の処理手順では、外側のXQuery処理が終了した後、終了結果を入力変数の組として内側のXQueryに相当する処理に渡して処理した。これに対して上述した処理手順では、内側のXQueryに相当する処理に渡す点では同じであるが、直積結合オペレータの出力結果を複製しない点、及び直積結合オペレータにより作成されたテーブルのレコード毎に複製して、テーブルを作成していない点で異なる。
つまり、図6−1及び図6−2で示した従来の処理手順では、上位の多重ループの回数だけ入れ子処理を行っているが、図12で示した処理手順ではこのような繰り返しが存在しない。これにより、図6−1及び図6−2の処理回数と、図12の処理回数とを比較すれば、実行されたオペレータの回数に違いあることは明確である。また、上述した処理の違いを鑑みれば、上位の多重ループがさらに増加すれば、性能差はさらに大きなものになる。
次に、対応付部122が生成したプランに従って、リンク更新オペレータ部107がリンク更新を行う処理手順を、図13を用いて説明する。
まず、リンク更新オペレータ部107は、上位テーブルの全てのレコードについて全てスキャンしたか否か判断する(ステップS1301)。スキャンしていないと判断した場合(ステップS1301:No)、スキャンしていないレコードにおける複合リンクカラムに格納されているIDの組合せに対して、ユニークなリンクIDで更新する(ステップS1302)。
そして、リンク更新オペレータ部107は、更新情報をハッシュテーブルに保存する(ステップS1303)。
一方、リンク更新オペレータ部107は、上位テーブルの全てのレコードについて全てスキャンしたと判断した場合(ステップS1301:Yes)、下位結合テーブルの全てのレコードに対してスキャンしたか否か判断する(ステップS1304)。全てのレコードに対してスキャンしていないと判断した場合(ステップS1304:No)、ハッシュテーブルを参照して、スキャンしていないレコードにおける複合リンクカラムに格納されているIDの組合せに対して、ユニークなリンクIDで更新する(ステップS1305)。
また、リンク更新オペレータ部107は、全てのレコードに対してスキャンしたと判断した場合(ステップS1304:Yes)、処理を終了する。
上述した処理手順を行うことで、上位テーブルのレコードと、下位結合テーブルのレコードとの間で対応付けを行うことができる。
また、上述した実施の形態に限定されるものではなく、以下に例示するような種々の変形が可能である。
(変形例1)
上述した第1の実施の形態において、下位テーブル間の結合として自然結合のみで結合する場合について説明した。しかしながら、このような下位テーブル間の結合を自然結合のみに制限するものではない。
そこで、変形例1では、自然結合に加えてテスト処理を行う場合について説明する。なお、データベース処理装置100の構成は第1の実施の形態と同様として説明を省略する。
本変形例では、問合受付部101は、図14に示すXQueryデータの入力を受け付けたこととする。この図14に示すXQueryデータは、行1401において“and $x/@id != $y/@id”が追加された点で、図4のXQueryデータと異なる。
このような場合に生成されるプランに従って実行される処理手順を、図15を用いて説明する。
まず、第1の実施形態の図12に示すステップS1201〜S1210までの処理と同様に、生成されたプランに従って上位テーブルHT’5の作成と、下位テーブルHT’8及びHT’9を自然結合する(ステップS1501〜S1510)。
そして、本変形例にかかるデータベース処理装置100では、下位テーブル間を自然結合して生成されたテーブルに対して、テストオペレータ部108がテスト処理を行う(ステップS1511)。当該テスト処理では、自然結合して生成されたテーブルの各レコードから、“and $x/@id != $y/@id”の条件に一致するレコードのみ抽出する。これにより、下位結合テーブルHT’10が作成される。
そして、対応付部122が生成したプランに従って、リンク更新オペレータ部107が、上位テーブルHT’5と、下位結合テーブルHT’10とに対してリンク更新を行うことで、上位テーブルHT’11と下位テーブルHT’12とを作成し、これらテーブルのレコード間を対応付ける(ステップS1512)。
本変形例に示すように、下位テーブル間の結合処理において、自然結合に加えてテスト処理を行ってもよい。このように、下位テーブル間の結合処理は、入力されるXQueryデータに応じて変更されるものとする。つまり、入力されるXQueryデータによっては、下位テーブル間を自然結合以外の結合処理で行ってもよい。
(変形例2)
上述した第1の実施の形態において、入れ子構造により2重ループを含むXQueryデータの場合の処理について説明した。しかしながら、上述した実施形態は2重ループのみに制限するものではない。そこで、3重以上のループに適用する例について説明する。なお、データベース処理装置100の構成は第1の実施の形態と同様として説明を省略する。
本変形例では、データベース処理装置100の問合受付部101は、図16に示すXQueryデータの入力を受け付けたものとする。図16に示したXQueryデータは、図4に示したXQueryデータと比べて、行1601に記載されている“for $d in(男性,女性)”というループが追加されている。
これにより、入れ子XQueryプラン生成部102は、図16に示したXQueryデータから、図17〜図19に示す単一XQueryデータを抽出し、単一XQueryプラン生成部103が、これら単一XQueryデータに対応するプランを作成する。
そして、XQueryプラン実行部104が、図17〜図19に示す単一XQueryデータに対応するプランを実行する。図17に示す単一XQueryデータに対応する処理を図20に示し、図18に示す単一XQueryデータに対応する処理を図21に示し、図19に示す単一XQueryデータに対応する処理を図22に示す。
図20に示す処理については、第1の実施形態と同様に、所属データに関する要素テーブルHA.1を作成した後に、当該要素テーブルを複製して階層テーブルHA.2を作成し、索引取得などの処理を行って階層テーブルHA.3が作成されたものとする。
図21に示す処理については、第1の実施形態と同様に、年代データに関する要素テーブルHB.1を作成した後に、当該要素テーブルを複製して階層テーブルHB.2を作成し、索引取得などの処理を行って階層テーブルHB.3が作成されたものとする。
図22に示す処理については、男性、女性に関する要素はXMLデータに含まれていないので、空のテーブルHC.1を作成する。その後、索引取得などに対応する処理として、男性、女性が別のレコードとして追加すると共に、ユニークなIDのカラムを付与して階層テーブルHC.2を作成した後に、当該階層テーブルを複製してHC.3を作成する。
図20〜図22により作成された各テーブルを用いて対応付ける処理を、図23に示す。図23に示すように、2つの直積結合と、1つの(自然)結合と、2つのリンク更新とを、XQueryデータ内部の入れ子構造によるループ回数から1回減じた回数を繰り返すことで、XQueryデータにより要求された処理を実現することができる。これにより3重以上のループの入れ子構造を有するXQueryデータに対しても適用できる。
つまり、図20で示した要素テーブルHA.1と階層テーブルHA.2と階層テーブルHA.3と、図21で示した要素テーブルHB.1と階層テーブルHB.2と階層テーブルHB.3と、をそれぞれ直積結合、直積結合及び自然結合した後、結合した結果作成されたテーブル間のリンク更新を行うことで、直積結合テーブルHAB.1’、 直積結合テーブルHAB.2’’及び自然結合テーブルHAB.3’を作成する。
その後、図22で示した要素テーブルHC.1(本変形例では空のテーブル)と階層テーブルHC.2と階層テーブルHC.3と、上述した処理で作成された直積結合テーブルHAB.1’と直積結合テーブルHAB.2’’と自然結合テーブルHAB.3’とをそれぞれ直積結合、直積結合及び自然結合した後、結合した結果作成されたテーブル間のリンク更新を行うことで、直積結合テーブルHABC.1’、直積結合テーブルHABC2’’、自然結合テーブルHABC3’とを作成する。
上述した処理においては、例えば直積結合オペレータ部109が、リンク更新まで終了した直積結合テーブルHAB.1と、要素テーブルHC.1とを直積結合した直積結合テーブルHABC.1を作成し、リンク更新まで終了した直積結合テーブルHAB.2と、結合処理を行っていない階層テーブルHC.2とを直積結合したテーブルHABC.2を作成する。なお、当該処理で、HC.1は空のテーブルのため、直積結合テーブルHAB.1が、直積結合テーブルHABC.1となる。
また、結合テーブル作成部126は、結行処理が行われていないHC.3と、リンク更新まで終了した自然結合テーブルHABC3’とを自然結合した自然結合テーブルHABC.3を作成するプランを生成する。
対応付部122は、さらに、直積結合テーブルHABC.1と直積結合テーブルHAB.2とをリンク更新を行うことで対応付けると共に、対応付け済みの直積結合テーブルHAB.2’と自然結合テーブルHABC.3とをリンク更新を行うことで対応付けるプランを生成している。これにより以下に示す対応関係が生成される。
図24に示すように、上述した処理で作成されたHABC.1’及びHABC2’’間は、ユニークな識別子“K1”〜“K4”で対応付けられている。また、HABC2’’及びHABC3’間は、ユニークな識別子“J1”〜“J5”で対応付けられている。
本変形例にかかるデータベース処理装置100においては、上述した手順で処理を行うことで、入れ子構造で3重以上の多重ループを有するXQueryデータに従ってXMLデータに対して処理を行う場合であっても計算量を削減することが出来る。
図25に示すように、上述したデータベース処理装置100は、ハードウェア構成として、上述した処理を行うデータベース処理プログラムなどが格納されているROM2502と、ROM2502内のプログラムに従ってデータベース処理装置100の各部を制御するCPU2501と、必要な種々のデータを記憶するRAM2503と、ネットワークに接続して通信を行う通信I/F2504と、各部を接続するバス2505とを備えている。
データベース処理プログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、フロッピー(登録商標)ディスク(FD)、DVD等のコンピュータで読み取り可能な記録媒体に記録されて提供されてもよい。
この場合には、プログラムは、データベース処理装置100において上記記録媒体から読み出して実行することにより主記憶装置(例えばRAM2503)上にロードされ、上記ソフトウェア構成で説明した各部が主記憶装置上に生成されるようになっている。
また、本実施の形態のプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。
以上、本発明を実施の形態を用いて説明したが、上記実施の形態に多様な変更または改良を加えることができる。
第1の実施の形態にかかるデータベース処理装置の全体構成を示す図である。 階層構造を持った構造化文書であるXMLデータの一例を示した図である。 図2のXMLデータを木構造で示した概念図である。 XQueryデータの第1の例を示した図である。 図4に示すXQueryデータの処理結果となるXMLデータの例を示した図である。 図4のXQueryデータが入力された場合に、従来の処理手順で行った第1の例を示した説明図である。 図4のXQueryデータが入力された場合に、従来の処理手順で行った第2の例を示した説明図である。 データベース処理装置の全体的な処理手順を示したフローチャートである。 入れ子XQueryプラン生成部及び単一XQueryプラン生成部によるプランの生成手順を示したフローチャートである。 図4に示すXQueryデータを分解して得られた単一XQueryデータの第1の例を示した図である。 図4に示すXQueryデータを分解して得られた単一XQueryデータの第2の例を示した図である。 入れ子XQueryプランを実現するプランの生成手順を示したフローチャートである。 XQueryプラン実行部により行われるプランの実行処理の第1の例を、作成されるテーブルと共に示した説明図である。 リンク更新オペレータ部によるリンク更新を行う処理手順を示したフローチャートである。 XQueryデータの第2の例を示した図である。 XQueryプラン実行部により行われるプランの実行処理の第2の例を、作成されるテーブルと共に示した説明図である。 XQueryデータの第3の例を示した図である。 図16に示すXQueryデータを分解して得られた単一XQueryデータの第1の例を示した図である。 図16に示すXQueryデータを分解して得られた単一XQueryデータの第2の例を示した図である。 図16に示すXQueryデータを分解して得られた単一XQueryデータの第3の例を示した図である。 図17に示した単一XQueryデータに対応するプランでテーブルを作成する処理手順を示した説明図である。 図18に示した単一XQueryデータに対応するプランでテーブルを作成する処理手順を示した説明図である。 図19に示した単一XQueryデータに対応するプランでテーブルを作成する処理手順を示した説明図である。 図20〜図22で作成されたテーブル群に対して直積結合、自然結合及びリンク更新を行うことで、図16に示したXQueryデータによる処理結果を取得する処理手順を示した説明図である。 変形例3にかかるデータベース処理装置で、図16に示したXQueryデータに応じて作成されたテーブルを示した図である。 データベース処理装置のハードウェア構成を示す図である。
符号の説明
100 データベース処理装置
101 問合受付部
102 入れ子XQueryプラン生成部
103 単一XQueryプラン生成部
104 XQueryプラン実行部
105 直積結合オペレータ部
106 自然結合オペレータ部
107 リンク更新オペレータ部
108 テストオペレータ部
109 データ取得オペレータ部
110 索引取得オペレータ部
111 階層テーブル記憶部
112 出力部
113 XMLデータベース
121 識別子付加部
122 対応付部
123 テーブル作成部
124 要素テーブル作成部
125 単一ループテーブル作成部
126 結合テーブル作成部
127 直積結合部
128 索引情報取得部
2501 CPU
2502 ROM
2503 RAM
2504 通信I/F
2505 バス

Claims (7)

  1. 論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付部と、
    前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加部と、
    前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合部と、
    前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得部と、
    前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成部と、
    前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成部と、
    前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付部と、
    を備えるデータベース処理装置。
  2. 前記入力受付部は、前記構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、さらに、入れ子構造による3重以上のループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付け、
    前記直積結合部は、さらに、前記対応付部により対応付けられた前記直積結合テーブルと、前記対応付部による対応付が行われていない前記単一ループテーブルと、直積結合しした多重直積結合テーブルを作成し、
    前記結合テーブル作成部は、さらに、前記対応付部による対応付が行われていない前記単一ループテーブルと、前記対応付部により対応付けられた前記ループ間結テーブルとを結合した多重ループ間結合テーブルを作成し、
    前記対応付部は、さらに、前記直積結合テーブルと前記多重直積結合テーブルとを対応付けると共に、対応付けられた前記多重直積結合テーブルと前記多重ループ間結合テーブルとを対応付けること、
    を特徴とする請求項1に記載のデータベース処理装置。
  3. 複数の識別子の組合せ毎に、ユニークなリンク識別子で更新する更新部をさらに備えることを特徴とする請求項1に記載のデータベース処理装置。
  4. 前記結合テーブル作成部は、複数の前記単一ループテーブルを結合したあと、前記問合要求の入れ子構造内部に示された結合条件に応じた所定の演算を行うことを特徴とする請求項1乃至3のいずれか一つに記載のデータベース処理装置。
  5. 前記入力受付部は、XML形式の前記構造化データベースに対して、XQuery形式による前記取得要求の入力を受け付けること、
    を特徴とする請求項1乃至4のいずれか一つに記載のデータベース処理装置。
  6. 論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付ステップと、
    前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加ステップと、
    前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合ステップと、
    前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得ステップと、
    前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成ステップと、
    前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成ステップと、
    前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付ステップと、
    を有することを特徴とするデータベース処理方法。
  7. 論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付ステップと、
    前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加ステップと、
    前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合ステップと、
    前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得ステップと、
    前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成ステップと、
    前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成ステップと、
    前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付ステップと、
    をコンピュータに実行させることを特徴とするプログラム。
JP2007235723A 2007-09-11 2007-09-11 データベース処理装置、方法及びプログラム Active JP5196924B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2007235723A JP5196924B2 (ja) 2007-09-11 2007-09-11 データベース処理装置、方法及びプログラム
EP08015924A EP2040181A2 (en) 2007-09-11 2008-09-10 Apparatus, method and computer program product for processing database
US12/207,752 US8001110B2 (en) 2007-09-11 2008-09-10 Apparatus, method, and computer program product for processing databases
CN2008101608381A CN101388034B (zh) 2007-09-11 2008-09-11 用于处理数据库的设备和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007235723A JP5196924B2 (ja) 2007-09-11 2007-09-11 データベース処理装置、方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2009069988A JP2009069988A (ja) 2009-04-02
JP5196924B2 true JP5196924B2 (ja) 2013-05-15

Family

ID=39942062

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007235723A Active JP5196924B2 (ja) 2007-09-11 2007-09-11 データベース処理装置、方法及びプログラム

Country Status (4)

Country Link
US (1) US8001110B2 (ja)
EP (1) EP2040181A2 (ja)
JP (1) JP5196924B2 (ja)
CN (1) CN101388034B (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5060345B2 (ja) * 2008-02-29 2012-10-31 株式会社東芝 データベース処理装置、情報処理方法及びプログラム
CN102867045A (zh) * 2012-09-05 2013-01-09 武汉达梦数据库有限公司 基于驱动层实现的异构数据库保留字兼容方法及系统
US9665633B2 (en) * 2014-02-19 2017-05-30 Snowflake Computing, Inc. Data management systems and methods
US10394786B2 (en) * 2015-04-20 2019-08-27 Futurewei Technologies, Inc. Serialization scheme for storing data and lightweight indices on devices with append-only bands
CN114637759B (zh) * 2020-12-16 2023-04-18 金篆信科有限责任公司 数据查询方法、电子设备、存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03189742A (ja) * 1989-12-19 1991-08-19 Hitachi Ltd データベース処理方法
US5592663A (en) * 1993-12-17 1997-01-07 Nagamori; Nobuhiko Graphing method and apparatus for data base retrieval
US5717924A (en) * 1995-07-07 1998-02-10 Wall Data Incorporated Method and apparatus for modifying existing relational database schemas to reflect changes made in a corresponding object model
JP3754253B2 (ja) * 1999-11-19 2006-03-08 株式会社東芝 構造化文書検索方法、構造化文書検索装置及び構造化文書検索システム
JP5121146B2 (ja) * 2006-02-22 2013-01-16 株式会社東芝 構造化文書管理装置、構造化文書管理プログラムおよび構造化文書管理方法
JP4847161B2 (ja) 2006-03-02 2011-12-28 キヤノン株式会社 画像送信装置および撮像装置
US7680782B2 (en) * 2006-10-18 2010-03-16 International Business Machines Corporation Method to generate semantically valid queries in the XQuery language

Also Published As

Publication number Publication date
US8001110B2 (en) 2011-08-16
US20090132473A1 (en) 2009-05-21
EP2040181A2 (en) 2009-03-25
CN101388034B (zh) 2011-05-18
CN101388034A (zh) 2009-03-18
JP2009069988A (ja) 2009-04-02

Similar Documents

Publication Publication Date Title
US7756904B2 (en) Nested conditional relations (NCR) model and algebra
JP3754253B2 (ja) 構造化文書検索方法、構造化文書検索装置及び構造化文書検索システム
JP3842577B2 (ja) 構造化文書検索方法および構造化文書検索装置およびプログラム
CN101427249B (zh) 具有对丰富数据类型的支持的可扩展查询语言
JP4256416B2 (ja) データ構造変換システム及びプログラム
US20130006968A1 (en) Data integration system
JPH06290102A (ja) 情報にアクセスする装置および方法
US20060007464A1 (en) Structured data update and transformation system
US7668888B2 (en) Converting object structures for search engines
JP2004086782A (ja) 異種データベース統合支援装置
JP5060345B2 (ja) データベース処理装置、情報処理方法及びプログラム
CA2517130A1 (en) Conversion of structured information
JP5196924B2 (ja) データベース処理装置、方法及びプログラム
JP4247135B2 (ja) 構造化文書記憶方法、構造化文書記憶装置、構造化文書検索方法
US20060161525A1 (en) Method and system for supporting structured aggregation operations on semi-structured data
JP2008171181A (ja) 構造化データ検索装置
JP4207438B2 (ja) Xml文書格納/検索装置及びそれに用いるxml文書格納/検索方法並びにそのプログラム
JPH06282576A (ja) ネットワーク型データベースのリレーショナルアクセス方式
US20090327253A1 (en) Indexing and querying xml documents stored in a relational database
Zoghlami et al. Using a SKOS engine to create, share and transfer terminology data sets
Pal et al. XML support in Microsoft SQL Server 2005
JP2005056085A (ja) データ構造変換プログラム
JP4649339B2 (ja) XPath処理装置、XPath処理方法、XPath処理プログラム、および、記憶媒体
Maatuk Migrating relational databases into object-based and XML databases
JP2010267081A (ja) 情報検索方法及び装置及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100901

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120927

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121016

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121210

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130108

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130205

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160215

Year of fee payment: 3

R151 Written notification of patent or utility model registration

Ref document number: 5196924

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160215

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

Free format text: JAPANESE INTERMEDIATE CODE: R313114

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350