(57)【要約】      （修正有）【課題】結合検索結果のクライアント側への転送をより高速化することのできるデータベースシステムを提供する。【解決手段】サーバは、クライアントから受信したクエリを解析して、結合検索の条件判定に必要な列と検索結果生成に必要な列を抽出し、１件のデータに相当するテーブルの行を一意に特定する識別子であるrowidも含めて問い合わせるためのクエリをデータベース毎に生成して、データベースに実行させるクエリ解析実行部と、各データベースからrowidも含む検索結果を受け取り、結合検索の最終結果の生成に必要な行と列から成るテーブルを構成する中間結果と、各行を順に参照し、検索条件に合う各テーブルのrowidをまとめたrowidの組みを生成する中間結果生成部とを備え、クライアントは、中間結果とrowidの組みをサーバから受信し、rowidの組みを元にアプリケーションの要求に応じた最終結果を生成する。【選択図】図１
2014211679.tif 000002
【特許請求の範囲】
【請求項１】
異種のリレーショナルデータベースに対して結合検索を実行するクライアント・サーバ型のデータベースシステムであって、
前記サーバは、
前記クライアントから受信したクエリを解析して、結合検索の条件判定に必要な列と検索結果生成に必要な列を抽出し、１件のデータに相当するテーブルの行を一意に特定する識別子であるrowidも含めて問い合わせるためのクエリを前記データベース毎に生成して、前記データベースに実行させるクエリ解析実行部と、
前記各データベースから前記rowid も含む検索結果を受け取り、結合検索の最終結果の生成に必要な行と列から成るテーブルを構成する中間結果と、各行を順に参照し、検索条件に合う各テーブルの前記rowid をまとめたrowid の組みを生成する中間結果生成部とを備え、
前記クライアントは、
アプリケーションから前記クエリを受け取り、前記サーバに前記クエリを送信するクエリ受信部と、
前記中間結果と前記rowid の組みを前記サーバから受信し、前記rowid の組みを元にアプリケーションの要求に応じた最終結果を生成し、アプリケーションに返却する結果生成返却部とを備えるデータベースシステム。
【請求項２】
前記rowid の組みは、結合検索の最終結果の生成のために使用した行と使用していない行を区別する請求項１記載のデータベースシステム。
【請求項３】
前記クライアントは、さらに各データベースの検索結果、中間結果及び最終結果を記録する結果記録部を備える請求項１又は請求項２記載のデータベースシステム。
【請求項４】
前記サーバと各データベース間及び前記サーバと前記クライアント間はネットワークを介して接続され、
前記サーバは、前記データベースとの間及び前記クライアントとの間で通信を行う通信手段を備え、
前記クライアントは、前記サーバとの間で通信を行う通信手段を備える請求項１乃至請求項３のいずれか１項に記載のデータベースシステム。
【請求項５】
前記クライアントから前記サーバに対する要求はＳＱＬ文で送信される請求項１乃至請求項４のいずれか１項に記載のデータベースシステム。
【請求項６】
前記クライアントでの結合検索の最終結果は、前記rowid の組みを元に、前記中間結果を内部結合形式で演算する請求項１乃至請求項５のいずれか１項に記載のデータベースシステム。
【請求項７】
前記クライアントでの結合検索の最終結果は、前記rowid の組みを元に、前記中間結果を直積形式で演算する請求項１乃至請求項５のいずれか１項に記載のデータベースシステム。
【請求項８】
前記クライアントでの結合検索の最終結果は、前記rowid の組みを元に、前記中間結果を外部結合形式で演算する請求項１乃至請求項５のいずれか１項に記載のデータベースシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データベースシステムに関する。
【背景技術】
【０００２】
一般に、異種のデータベースを利用する結合検索においては、各データベースの検索結果をサーバにおいて結合して、クライアント側に転送している。
【０００３】
その際、検索結果をクライアント側に速やかに転送することが求められる。
【０００４】
データは各データベースに分散されているので、検索結果の転送をデータベースに任せることはできない。
【０００５】
従来、結合検索による検索結果の転送を高速化するため、検索結果から同一データや部分的に同一なデータの圧縮等が提案されているが、十分といえるものではなかった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第３６３０５４７号公報
【特許文献２】特開２００８−６５７２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明が解決しようとする課題は、結合検索結果のクライアント側への転送をより高速化することのできるデータベースシステムを提供することである。
【課題を解決するための手段】
【０００８】
実施形態のデータベースシステムは、異種のリレーショナルデータベースに対して結合検索を実行するクライアント・サーバ型のデータベースシステムであって、前記サーバは、前記クライアントから受信したクエリを解析して、結合検索の条件判定に必要な列と検索結果生成に必要な列を抽出し、１件のデータに相当するテーブルの行を一意に特定する識別子であるrowidも含めて問い合わせるためのクエリを前記データベース毎に生成して、前記データベースに実行させるクエリ解析実行部と、前記各データベースから前記rowid も含む検索結果を受け取り、結合検索の最終結果の生成に必要な行と列から成るテーブルを構成する中間結果と、各行を順に参照し、検索条件に合う各テーブルの前記rowid をまとめたrowid の組みを生成する中間結果生成部とを備え、前記クライアントは、アプリケーションから前記クエリを受け取り、前記サーバに前記クエリを送信するクエリ受信部と、前記中間結果と前記rowid の組みを前記サーバから受信し、前記rowid の組みを元にアプリケーションの要求に応じた最終結果を生成し、アプリケーションに返却する結果生成返却部とを備えるデータベースシステムを備える。
【図面の簡単な説明】
【０００９】
【図１】本実施形態に係るデータベースシステムの概略構成を示すブロック図である。
【図２】検索結果、中間結果、rowidの一例を示す図である。
【図３】実施形態に係るデータベースシステムのサーバにおける処理の流れを示すフローチャートである。
【図４】実施形態に係るデータベースシステムにおける結果生成返却部における処理の流れを示すフローチャートである。
【図５】データベースＡ、Ｂ上の表（テーブル）の一例を示す図である。
【図６】本実施形態による効果をINNER JOIN（内部結合）の例で説明する図である。
【図７】本実施形態による効果をCROSS JOIN（直積）の例で説明する図である。
【図８】本実施形態による効果をLEFT JOIN（左外部結合）の例で説明する図である。
【発明を実施するための形態】
【００１０】
以下、本発明の一実施の形態について、図面を参照して説明する。尚、各図において同一箇所については同一の符号を付すとともに、重複した説明は省略する。
【００１１】
本実施形態において、「クエリ」とは、データが格納された表（テーブル）から検索結果としてのデータを取り出すための“問い合わせ”をいう。
【００１２】
本実施形態においては、結合検索による検索結果の統合をクライアント側で行わせることにより、サーバとクライアント間のデータ転送量を軽減させるものである。
【００１３】
図１は、本実施形態に係るデータベースシステムの概略構成を示すブロック図である。図１に示すように、本実施形態に係るデータベースシステム１００は、大別すると、クライアント１０、サーバ２０、各データベース３０，４０がネットワーク５０を介して接続して構成されている。
【００１４】
各データベース３０，４０は、それぞれが異なるデータが集合して成るデータベースであって、あるデータは各データベース３０，４０に分散している。データの格納形式は、例えばリレーショナルデータベース（ＲＤＢ）ではテーブルあるいは表と呼ぶ２次元表によってデータが管理される。
【００１５】
テーブルは、データ項目を表す“列（カラム）”と１件のデータを表す“行（レコード）”から成る。データの読み書きは、行単位で行う。データベース３０，４０は、例えばハードディスクで構築することができる。
【００１６】
サーバ２０は、データベースを管理してデータの読み書き等を制御するものである。サーバ２０は、クライアント１０から要求を受け取り、当該要求に応じた処理を実行する。サーバ２０は、汎用のコンピュータ（例えばパーソナルコンピュータ（ＰＣ）等）と、同コンピュータ上で動作するソフトウェアとを用いて実現される。コンピュータとしては、ＣＡＤ（Computer Aided Design）やＣＡＥ（Computer Aided Engineering）に好適なエンジニアリングワークステーション（ＥＷＳ）等も含む。
【００１７】
サーバ２０は、主として、クエリ解析実行部２１、中間結果生成部２２、通信手段２３から構成されている。
【００１８】
通信手段２３は、ネットワーク５０に接続し、サーバ２０とデータベース３０，４０間で通信を行う。
【００１９】
クエリ解析実行部２１は、通信手段２３を介してネットワーク５０に接続し、クライアント１０からクエリを受信する。クエリ解析実行部２１は、受信した１つのクエリをパースして、それぞれのデータベース３０，４０に対応した２つのクエリを生成する。生成した個々のクエリは該当するデータベース３０またはデータベース４０に対して問い合わせする。本実施形態では、結合検索の条件判定に必要な列（カラム）と検索結果生成に必要な列（カラム）を抽出しrowidも含めて問い合わせるクエリを生成して、各データベース３０，４０に実行させる。ここで、rowid は、１件のデータに相当するテーブルの行（レコード）を一意に特定する識別子である。
【００２０】
例えば、クエリ解析実行部２１で、以下のSELECT文をパースする。
【００２１】
SELECT a2, b2 FROM A, B WHERE a1=b1
クエリ解析実行部２１は、各データベース３０，４０に対する以下のSELECT文を生成する。
【００２２】
SELECT rowid, a1, a2 FROM A
SELECT rowid, b1, b2 FROM B
中間結果生成部２２は、各データベース３０，４０からrowid も含む検索結果を、通信手段２３を介して受け取る。図２（ａ）は、データベースＡから受け取ったrowid も含む検索結果の一例を示し、図２（ｂ）は、データベースＢから受け取ったrowid も含む検索結果の一例を示している。
【００２３】
中間結果生成部２２は、受け取った検索結果を結合して、中間結果を生成する。さらに、受け取った検索結果を加工せずに、中間結果に対応する“rowid の組み”を生成する。ここで、中間結果とは、最終結果の生成に必要な行と列から成るテーブルである。“rowid の組み”とは、各行（レコード）を順に参照し、検索条件（ここの例では、a1=b1）に合う各テーブルのrowid をまとめたものである。“rowid の組み”は、最終結果の生成のために使用した行と使用していない行を、区別できるようにする。
【００２４】
図２（ｃ）は、データベースＡの検索結果を元にした中間結果の一例を示し、図２（ｄ）は、データベースＢの検索結果を元にした中間結果の一例を示し、図２（ｅ）は、中間結果に対応する“rowid の組み”の一例を示している。
【００２５】
中間結果生成部２２は、通信手段２３を介して中間結果と“rowid の組み”をクライアント１０に送信する。
【００２６】
クライアント１０は、サーバ２０に要求を出すプログラムがインストールされたコンピュータである。
【００２７】
本実施形態では、クライアント１０は、主として、クエリ受信部１１、結果生成返却部１２、結果記録部１３、通信手段１４から構成されている。クライアント１０は、アプリケーションからの要求を受け付けて処理を実行する。クライアント１０からサーバ２０に対する要求は、例えばデータベース操作用言語であるＳＱＬで書かれたＳＱＬ文が送信される。
【００２８】
クエリ受信部１１は、アプリケーションからクエリを受け取り、通信手段１４を介してサーバ２０にクエリを送信する。ここでのクエリは、例えば表（テーブル）から行を検索するSELECT文を用いる。
【００２９】
結果生成返却部１２は、各データベース３０，４０の検索結果と中間結果をサーバ２０から受信する。結果生成返却部１２は、“rowid の組み”を元にアプリケーションの要求に応じた最終結果を生成し、アプリケーションに返却する。最終結果の生成の際、“rowid の組み”を元に中間結果を加工する。
【００３０】
結果記録部１３は、各データベース３０，４０の検索結果、中間結果及び最終結果を記録するものである。
【００３１】
通信手段１４は、ネットワーク５０に接続し、クライアント１０とサーバ２０間で通信を行う。
【００３２】
＜サーバにおける処理の流れ＞
次に、以上のように構成されたデータベースシステムのサーバにおける処理の流れについて説明する。ここでは、２つのデータベースＡ，Ｂを対象とする結合検索を例にとり説明する。
【００３３】
実施形態のデータベースシステムでは、まず、クライアント１０のクエリ受信部１１が、アプリケーションからクエリを受け付け、次に、クエリ受信部１１が通信手段１４を介して、クエリをサーバ２０に送信する。
【００３４】
図３は、実施形態に係るデータベースシステムのサーバにおける処理の流れを示すフローチャートである。
【００３５】
まず、クエリ解析実行部２１で、受け付けたクエリから結合検索の条件判定に使われる列（カラム）と検索結果生成に使われる列（カラム）を抽出する（ステップＳ３１）。
【００３６】
次に、クエリ解析実行部２１で、それぞれのデータベースに対応したクエリを生成する（ステップＳ３２）。ここでのクエリは、rowidと上記列（カラム）を問い合わせるものである。
【００３７】
次に、クエリ解析実行部２１は、通信手段２３を介して各データベースに問い合わせる（ステップＳ３３）。
【００３８】
次いで、中間結果生成部２２は、通信手段２３を介して各データベースからrowidを含んだ検索結果を受信する（ステップＳ３４）。
【００３９】
次に、中間結果生成部２２は、２つのデータベースを対象としているので、２つのカーソルを初期化する（ステップＳ３５）。ここで、カーソルは、検索結果のある１行を指し示すポインタである。
【００４０】
次いで、２つのカーソルが両方共、テーブルの末尾の行を指しているか否かを判定する（ステップＳ３６）。
【００４１】
２つのカーソルが両方共、テーブルの末尾の行を指していなければ（ステップＳ３６でＮｏ）、各カーソルが指すデータが検索条件に合致するか否かを判定する（ステップＳ３７）。
【００４２】
ステップＳ３７でＹｅｓであれば、２つのカーソルが指す“rowidの組み”を中間結果に追記する（ステップＳ３８）。
【００４３】
次いで、各カーソルが指す行（レコード）に、最終結果生成に必要なものであることを示すフラグを立てる（ステップＳ３９）。
【００４４】
次いで、カーソルを移動させ（ステップＳ３１０）、ステップＳ３６に戻る。カーソルの移動は、例えば１つのカーソルをテーブルの先頭位置に固定し、別のカーソルを順次移動させるようにして各行（レコード）を順に参照する。ステップＳ３７でＮｏであれば、すなわち、各カーソルが指すデータが検索条件に合致しないのであれば、ステップＳ３１０に移行する。
【００４５】
ステップＳ３６でＹｅｓ、すなわち、２つのカーソルが両方共、テーブルの末尾の行を指していれば、上記フラグを利用して中間結果と各データベースからの結果（ここでは、最終結果生成に必要な部分のみである）を、通信手段２３を介してクライアントに送信（ステップＳ３１１）して、サーバ側の処理を終了する。
【００４６】
＜結果生成返却部における処理の流れ＞
次に、以上のように構成されたデータベースシステムにおける結果生成返却部における処理の流れについて説明する。
【００４７】
図４は、実施形態に係るデータベースシステムにおける結果生成返却部における処理の流れを示すフローチャートである。
【００４８】
まず、通信手段１４を介して、サーバ２０から各データベースからの結果と中間結果を受信する（ステップＳ４１）。
【００４９】
次に、データベースからの結果と中間結果を結果記録部１３に記録する（ステップＳ４２）。ここでの記録は、一時的に保持するものである。
【００５０】
次いで、中間結果の先頭にカーソルを指す（ステップＳ４３）。カーソルは、中間結果のある１行を指し示すポインタである。
【００５１】
次に、カーソルが中間結果の末尾行を指しているか否かを判定する（ステップＳ４４）。
【００５２】
カーソルが中間結果の末尾行を指していなければ（ステップＳ４４でＮｏ）、カーソルが指すrowidの中間結果を最終結果に加工（ステップＳ４５）する。
【００５３】
次いで、カーソルを１つ移動（ステップＳ４６）し、ステップＳ４４に戻る。
【００５４】
カーソルが中間結果の末尾行を指していれば（ステップＳ４４でＹｅｓ）、最終結果をアプリケーションに返して（ステップＳ４７）、結果生成返却部１２における処理を終了する。
【００５５】
アプリケーションは、SQL文の実行と結果取得という２つの命令を経て、SELECT結果を取得する。アプリケーションがデータベース管理システムに対してSELECT文を実行させると、最終結果がクライアント上に蓄えられる。最終結果に対して「最終結果のxx行目を要求する」という要求をして、アプリケーションはSELECT結果を取得する。その要求のたびに、rowidのセットをもとに、必要な行と列から成るテーブルにデータを読みに行く。
【００５６】
＜効果＞
本実施形態による効果を、INNER JOIN（内部結合）、CROSS JOIN（直積）、LEFT JOIN（左外部結合）を例にとり、従来手法と特許文献１で提案されている手法（以下、特許文献手法という）と対比して説明する。
【００５７】
図５は、データベースＡ、Ｂ上の表（テーブル）の一例を示す図である。図５に示す例では、表A「名簿」と表B「組織表」がある。表Aは、フィールド名「名前」をa1、フィールド名「組織ＩＤ」をa2とし、さらに別フィールドとしてrowidが設けられている。各フィールドは４バイトのデータ長を持っている。一方、表Bは、フィールド名「組織ＩＤ」をb1、フィールド名「組織名」をb2とし、さらに別フィールドとしてrowidが設けられている。フィールドb1、rowidは４バイトのデータ長を持ち、フィールドb2は５０バイトのデータ長を持っている。
【００５８】
図６は、本実施形態による効果をINNER JOIN（内部結合）の例で説明する図である。SELECT文において複数の表（テーブル）を結合するときはWHERE句で結合条件を指定するほかにFROM句でINNER JOINを指定して表を列方向に結合することもできる。INNER JOIN（内部結合）は、テーブルの内部だけから情報を持ってくる結合である。
【００５９】
図６に示すSELECT文は、INNER JOIN（内部結合）形式の記述の一例である。
【００６０】
SELECT  a1, b2 FROM  A, B  WHERE  a2 = b1
SELECT  a1, b2 FROM  A  INNER JOIN  B ON a2 = b1
表示させる列名はa1, b2、抽出条件はa2 = b1、結合条件は表名Aのフィールド名a2 = 表名B のフィールド名b1を満たすように表A，Bを列方向に結合するものである。
【００６１】
図６に示す例では、従来の手法では検索結果は４３２バイトであるのに対し、特許文献手法では３３２バイトであり、本実施形態によれば、２２８バイトに圧縮できている。本実施形態では、従来手法あるいは特許文献手法に比べて、rowidを余分に生成している。しかし、一般的に実データ（例えば、図５では、“組織名”）に比べてデータ量は小さいので、データの重複を圧縮する効果が現れている。
【００６２】
図７は、本実施形態による効果をCROSS JOIN（直積）の例で説明する図である。CROSS JOIN（直積）は、２個の表（テーブル）を単純に結合するもので、一方の表の1行について他方の表の全ての行を対応付けた行を返すものである。
【００６３】
SELECT  a1, b2  FROM  A  CROSS JOIN  B
FROM句に２個の表（テーブル）を指定し全ての列を選択する様にSELECT文を指定している。
【００６４】
図７に示す例では、従来の手法では検索結果は２９７０バイトであるのに対し、特許文献手法では２７９４バイトであり、本実施形態によれば、５７８バイトに圧縮できている。
【００６５】
図８は、本実施形態による効果をLEFT JOIN（左外部結合）の例で説明する図である。外部結合は、テーブルの外部から情報を結果に持ってくる。表結合を指定するときにLEFT JOINで表（テーブル）を結合することができ、表を結合したときに指定された左の表をマスタとして表示を行うものである。
【００６６】
SELECT  a1, b2 FROM  A  LEFT JOIN  B  ON a2 = b1
表示させる列名はa1, b2、抽出条件はa2 = b1である。
【００６７】
図８に示す例では、従来の手法では検索結果は４８８バイトであるのに対し、特許文献手法では４３８バイトであり、本実施形態によれば、２８４バイトに圧縮できている。
【００６８】
同様に、RIGHT JOIN（右外部結合）、FULL JOINでも本実施形態によれば、検索結果が圧縮できる。
【００６９】
以上説明したように、本実施形態によれば、データテーブルが正規化されており、最終結果生成のための加工を、クライアント上で行うようにしたので、高速化が図られる。
【００７０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７１】
１００・・・データベースシステム
１０・・・クライアント
１１・・・クエリ受信部
１２・・・結果生成返却部
１３・・・結果記録部
１４・・・通信手段
２０・・・サーバ
２１・・・クエリ解析実行部
２２・・・中間結果生成部
２３・・・通信手段
３０，４０・・・データベース
５０・・・ネットワーク
【図１】
2014211679.tif 000003
【図２】
2014211679.tif 000004
【図３】
2014211679.tif 000005
【図４】
2014211679.tif 000006
【図５】
2014211679.tif 000007
【図６】
2014211679.tif 000008
【図７】
2014211679.tif 000009
【図８】
2014211679.tif 000010