(57)【特許請求の範囲】
【請求項１】
クライアントから投稿されたユーザクエリに対し、複数のデータソースに分割配置されたデータセットを利用してクエリ処理を行うデータ仮想化サーバであって、
前記クライアントに対して提供するスキーマと物理モデルのマッチング情報である仮想スキーマ情報を記憶する仮想スキーマ情報記憶部と、
該仮想スキーマ情報と前記ユーザクエリを利用して前記データソースへ投稿するクエリの原型とデータ仮想化サーバ上で処理するクエリを生成するクエリ評価部と、
前記各データソースに分割配置されているデータセットの分割条件に関する分割情報を記憶する分割情報記憶部と、
該分割情報を利用して前記クエリ評価部で生成した各データソースへのクエリの原型を選択又は修正する分割条件適用部と、
前記各データソースへの接続に関する接続情報を記憶するデータソース情報記憶部と、
分割条件が適用された前記クエリの原型を、前記接続情報を利用して修正することで、前記各データソースでそれぞれ実行可能となるクエリを作成し、各データソースに投稿した後に、その結果を受信して結合した上で、前記ユーザクエリに対する応答として前記クライアントに送信するクエリ実行部と
を具備することを特徴とするデータ仮想化サーバ。
【請求項２】
前記複数のデータソースは、データ読み出し速度や記憶容量の性質やユーザインタフェースが異なる複数のデータベースを含んで構成される請求項１に記載のデータ仮想化サーバ。
【請求項３】
コンピュータ・ソフトウエアによる情報処理方法であって、
ユーザクエリの評価によって得られた各データソースで実行されるクエリの情報を基に、対象となるデータソースの分割条件を分割情報より取得する手順と、
前記ユーザクエリに分割基準となる属性が含まれているかを判断する手順と、
前記ユーザクエリに分割基準となる属性が含まれていた場合に、対象のデータソースへのクエリに対して分割条件を適用して対象データソース数を判断する手順と、
前記クエリを前記データソースに投稿するに際して、前記クエリを投稿するデータソースが複数である場合は、データソース情報を適用した各クエリをそれぞれのデータソース毎に生成する手順と、
前記クエリの投稿対象となる複数のデータソースに各クエリを投稿する手順と、
各データソースからの結果を結合する手順と
を含む一方、
前記ユーザクエリに分割基準となる属性が含まれていない場合は、分割条件を適用することなくデータソース情報に基づいてクエリを生成・投稿する
ことを特徴とするクエリ処理方法。
【請求項４】
請求項３に記載された各手順をコンピュータに実行させることを特徴とするクエリ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、異なる複数のデータソースを仮想的に一つのデータベースシステムに見せるデータ仮想化システムにおいて、特定の条件下で複数のデータソースに分割配置されたデータを効率的にクエリ処理するデータ仮想化サーバ、データ仮想化サーバにおけるクエリ処理方法及びクエリ処理プログラムに関する。
【背景技術】
【０００２】
データベースシステムにおいては、大規模なデータを効率的に管理するために、様々な種類のデータソースが利用される。このデータソースには、一般的に利用されるデータベースシステムだけでなく、大規模データを蓄積するための分散ファイルシステムや、時系列データの利用を目的としたデータウェアハウスなど、特徴に応じて様々なシステムが存在する。
各システムにはそれぞれ特徴が有り、用途やコスト等に応じて使い分けることが可能である。特に、大規模なデータを管理する上では、コストと性能がトレードオフ関係となるため、複数の異なるデータソースを組み合わせて利用することも少なくない。
【０００３】
データベースシステムにおいて、複数の異なるデータソースを組み合わす例として高速検索を目的とした高速なデータソースと、大容量保存が可能なデータソースの併用が考えられる。
前者の高速なデータソースは、オンメモリデータベースシステムや、専用ハードウェアを利用した超並列処理データベースシステムなど、データ処理速度が高速であるが、データ容量に比例してコストが大きく上昇する。
一方、後者のデータソースは、例えば分散ファイルシステムやテープストレージなど、前者のデータソースと比較して低コストで大容量化を容易とするシステムである。
【０００４】
このような環境下でデータソースを併用した場合、対象データセットの利用頻度の高い部分データを前者の高速なデータソースに保存し、利用頻度の低い大規模データを後者の大容量なデータソースに保存することで、コストを抑えつつ高速利用が可能となる。
このような複数のデータソースを使い分ける上で、これらを利用するユーザやアプリケーションに対して余計な手間を発生させることから、仮想的に単一のデータソースに見せるためにデータ仮想化システムが利用できる。
【０００５】
データベースシステムを対象としたデータ仮想化システムに関しては、特許文献１に示すように、複数の階層的なデータベースシステムを、データマッピングにより仮想的なスキーマに統合し、クエリ実行時において処理対象となるデータを保持するデータベースシステムにクエリを分配するシステムが提案されている。このシステムによれば、各データベースシステムで実行されたクエリの結果は中央に収集され、一つに統合して結果を出力することが行われる。
【０００６】
データ仮想化システムを用いて、複数データソースに一定の条件下で分割配置されたデータセットに対するクエリ処理を実行する場合、ユーザのクエリ処理要求を各データソースに分配し、結果をデータ仮想化システム上で結合することで分割されたデータセットを仮想的に一つのデータセットとすることが可能である。
【０００７】
また、特許文献２に記載されるように，通常の分散データベースシステムは、ユーザクエリを受け取るマスターサーバがクエリを処理する各スレーブノードの情報を保持していることから、分割されたデータセットがどのノードに存在するかを把握することができる。そのため、分散データベースシステムが利用しているクエリ処理手法を適用することで、分割配置されたデータセットに対する効率的なクエリ処理が可能であると考えられる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平０７−１４１３９９号公報
【特許文献２】特開２０１３−００３６９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１に記載のデータ仮想化システムは、全てのデータセットの中身を理解していないため、データセットの分割条件を意識したクエリの分配をすることができない。例えば、高速なデータソース側にのみ保持されたデータセットへのクエリでああっても、データ仮想化システムでは何れのデータソースに当該データセットが記憶されているかを把握していないため、全てのデータソースに対してクエリ処理が行われる。
その結果、例え高速なデータソース側にのみ保持されたデータセットへのクエリであったとしても、低速なデータソースのクエリ処理完了を待つ必要があり、性能の異なる複数のデータソースを複合的に利用する利点を享受できないという課題が存在した。
【００１０】
また、特許文献２に記載の分散データベースシステムは、予め決められたインタフェース（XML等で作られたクエリ実行プラン情報）を利用してスレーブノードにクエリ実行の指示を出すため、異なるデータベースシステムを組み合わせた環境において、そのままでは利用できないという課題が存在した。
【００１１】
本発明は上記実情に鑑みて提案されたものであり、異なる複数のデータソースを仮想的に一つのデータベースシステムに見せるデータ仮想化システムおいて、特定の条件下で複数のデータソースに分割配置されたデータセットに対して効率的にクエリ処理するデータ仮想化サーバ、データ仮想化サーバにおけるクエリ処理方法及びクエリ処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【００１２】
上記目的を達成するため本発明の請求項１は、クライアントから投稿されたユーザクエリに対し、複数のデータソースに分割配置されたデータセットを利用してクエリ処理を行うデータ仮想化サーバであって、次の構成を含むことを特徴としている。
前記クライアントに対して提供するスキーマと物理モデルのマッチング情報である仮想スキーマ情報を記憶する仮想スキーマ情報記憶部。
該仮想スキーマ情報と前記ユーザクエリを利用して前記データソースへ投稿するクエリの原型とデータ仮想化サーバ上で処理するクエリを生成するクエリ評価部。
前記各データソースに分割配置されているデータセットの分割条件に関する分割情報を記憶する分割情報記憶部。
該分割情報を利用して前記クエリ評価部で生成した各データソースへのクエリの原型を選択又は修正する分割条件適用部。
前記各データソースへの接続に関する接続情報を記憶するデータソース情報記憶部。
分割条件が適用された前記クエリの原型を、前記接続情報を利用して修正することで、前記各データソースでそれぞれ実行可能となるクエリを作成し、各データソースに投稿した後に、その結果を受信して結合した上で、前記ユーザクエリに対する応答として前記クライアントに送信するクエリ実行部。
【００１３】
請求項２は、請求項１のデータ仮想化サーバにおいて、 前記複数のデータソースは、データ読み出し速度や記憶容量の性質やユーザインタフェースが異なる複数のデータベースを含んで構成されることを特徴としている。
【００１４】
請求項３は、コンピュータ・ソフトウエアによる情報処理方法であるクエリ処理方法あって、
ユーザクエリの評価によって得られた各データソースで実行されるクエリの情報を基に、対象となるデータソースの分割条件を分割情報より取得する手順と、
前記ユーザクエリに分割基準となる属性が含まれているかを判断する手順と、
前記ユーザクエリに分割基準となる属性が含まれていた場合に、対象のデータソースへのクエリに対して分割条件を適用して対象データソース数を判断する手順と、
前記クエリを前記データソースに投稿するに際して、前記クエリを投稿するデータソースが複数である場合は、データソース情報を適用した各クエリをそれぞれのデータソース毎に生成する手順と、
前記クエリの投稿対象となる複数のデータソースに各クエリを投稿する手順と、
各データソースからの結果を結合する手順と
を含む一方、
前記ユーザクエリに分割基準となる属性が含まれていない場合は、分割条件を適用することなくデータソース情報に基づいてクエリを生成・投稿する
ことを特徴している。
【００１５】
請求項４は、データ仮想化サーバにおけるクエリ処理プログラムであり、請求項３に記載された各手順をコンピュータに実行させることを特徴としている。
【発明の効果】
【００１６】
本発明によれば、一つのデータセットを分割して複数の異なるデータソースに配置されている場合のクエリ処理において、異なる複数のデータソースに分割配置されたデータセットの配置条件をデータ仮想化システム上で定義し、物理モデル及び配置条件をユーザクエリに適用し、クエリ実行先の物理モデルを適切に選択するので、従来のデータ仮想化システムに比較して効率的なクエリ処理を実現することが可能となる。
そして、複数のデータソースについて、データ読み出しの高速化が図れる高速データベース、記憶容量が大きい大容量データベースを含んだ種類の異なるデータソースで構成することで、各データソースに適したデータをそれぞれ記憶させてクエリ処理を行うことができる。
また、分割したデータセットの配置を一元的に管理することができ、データセットの活用及び保守を容易にすることができる。
【図面の簡単な説明】
【００１７】
【図１】データ仮想化システムにおける複数のデータソースに対する分割配置を実現するモデル構成図である
【図２】複数のデータソースに対して特定の条件下で分散配置されたデータセットに対するクエリ処理を実現するための物理構成図である。
【図３】データ仮想化システムにおける分割条件適用部及びクエリ実行部のクエリ処理を示すフローチャートである。
【図４】データセット例のスキーマ構成を示すデータ表である。
【図５】データソースＡにおける分割情報の登録例を示すデータ表である。
【図６】クエリとデータソースに分割配置されたデータの関係を示すモデル図である。
【発明を実施するための形態】
【００１８】
本発明の実施形態に係るデータ仮想化システムにおけるデータ仮想化サーバについて、図面を参照しながら説明する。図１は、データ仮想化システムにおいて、複数のデータソースに対する分割配置を実現するモデル構成図である。
【００１９】
データ仮想化システムは、データ仮想化サーバ１を利用する一つ以上のクライアント２が存在し、かつ複数のデータソース３に接続されている。クライアント２は、データ仮想化サーバ１に対して、クエリ処理を要求するソフトウエア及びこれを実装したハードウェアを指している。
図１は、ある一つのデータセットをＸ及びＹという条件で２つのデータソースＡ、Ｂに分割配置した場合のモデルを表している。この例の場合、データソースＡ及びデータソースＢが対象のデータセットを表す共通のスキーマＳを持ち、データソースＡはＸという条件のデータセットを、データソースＢはＹの条件のデータセットをそれぞれ保持している。
【００２０】
データ仮想化サーバ上では、データソースＡ及びデータソースＢが持つスキーマＳを物理モデルとして表し、それぞれを結合（Union）することでユーザには仮想的に一つのデータセット（仮想スキーマＳ）として提供する。
ここで、各データソース３が持つデータセットの条件を分割条件として仮想スキーマＳ上に持たせることで、データ仮想サーバ１が分割条件に対応したクエリ処理を選択することが可能となる。
【００２１】
図２は、複数のデータソース３に対して特定の条件下で分散配置されたデータセットに対するクエリ処理を実現するためのデータ仮想化システムの物理構成図を示している。
本発明に係るデータ仮想化システムは、分割配置されたデータセットの効率的利用を実現するデータ仮想化サーバ１と、ユーザクエリを投稿する一つ以上のクライアント２と、分割されたデータセットを持つ複数のデータソース３から構成されている。データ仮想化サーバ１は、クライアント２及び各データソース３に対して、ネットワークを介して接続されている。
また、各データソース３は、データを記憶するためのストレージ４をそれぞれ備え、データ読み出しの高速化が図れる高速データベース、記憶容量が大きい大容量データベースなど、性質が異なる複数種のデータソースから構成されうる。複数のデータソース３について、種類の異なるデータソースで構成することで、各データソースに適したデータをそれぞれ記憶させてクエリ処理を行うことができ、より効率的なクエリ処理が可能となる。
【００２２】
データ仮想化サーバ１は、記録媒体に格納されたクエリ処理プログラムや、インターネットを介したソフトウエアのダウンロードによるインストールが行われることで、コンピュータ上に構築されている。
データ仮想化サーバ１が構築されるコンピュータは、オペレーティングシステム（ＯＳ）を含む基本プログラムや各種の基本デバイスが記憶されたＲＯＭと、各種のプログラムションやデータが記憶されるハードディスクドライブ装置（ＨＤＤ）と、ＣＲ−ＲＯＭやＤＶＤ等の記憶媒体からプログラムやデータを読み出すメディアドライブ装置と、プログラムを実行するＣＰＵと、このＣＰＵにワークエリアを提供するＲＡＭと、入出力インターフェース（Ｉ／Ｆ）を介して接続されたディスプレイ、キーボードおよびマウス等のポインティングデバイスと、外部装置と通信するパラレル／シリアルＩ／Ｆとを主要部分とする一般的な構成を備えている。
【００２３】
データ仮想化サーバ１は、各種の情報が予め記憶される仮想スキーマ情報記憶部１１、分割情報記憶部１３及びデータソース情報記憶部１５と、これらの情報を使用してクエリ処理を行うためのクエリ評価部１２、分割条件適用部１４及びクエリ実行部１６とから構成されている。
【００２４】
仮想スキーマ情報記憶部１１は、仮想スキーマを構成する物理モデル及び当該物理モデルが持つデータに対する加工処理に関する情報を含む仮想スキーマ情報を保持している。
クエリ評価部１２は、仮想スキーマ情報とクライアント２から投稿されたユーザクエリを利用してデータソース３へ投稿するクエリの原型とデータ仮想化システム上で処理するクエリを生成する。例えば、最新データを利用するクエリ処理である場合には、最新データが記憶されているデータソース３のみへのクエリを作成する。
【００２５】
分割情報記憶部１３は、各データソース３に分割配置されているデータセットの分割条件に関する情報を保持している。
分割条件適用部１４は、分割情報を利用してクエリ評価部１２で生成した各データソース３へのクエリの原型を選択（生成）する。また、各データソース３側に分割配置されているデータ同士が、データセットの分割条件で重複して存在するような場合は、クエリの原型の修正（分割条件の修正）が行われる。
【００２６】
データソース情報記憶部１５は、接続されているデータソース３への接続に関する情報を保持している。
クエリ実行部１６は、データソース情報を利用して各データソース３で実行可能となる各クエリを生成し、各データソース３に投稿後、その結果を受信及び仮想スキーマに従った処理を実行する。すなわち、クエリ実行部１６は、生成した各クエリを各データソース３に投稿した結果を受信し、それらを結合した上で、ユーザクエリに対する応答としてクライアント２に送信する。
【００２７】
仮想スキーマ情報記憶部１１に記憶される仮想スキーマ情報は、クライアント２に対して提供する仮想スキーマと物理モデル同士のマッピングを提供する情報であり、ユーザクエリを各物理モデル向けに変換して当該データソースに投稿するクエリと、データ仮想化システム上で処理するクエリを生成するために必要な情報となる。これには、仮想スキーマを構成する一つ以上の物理モデル又は仮想スキーマ、物理モデル又は仮想スキーマに対する変換／集計処理、物理モデル又は仮想スキーマ間の結合処理、これらの処理と処理対象となる物理モデル又は仮想スキーマの一連の流れを表すトポロジ、出力する属性を含んでいる。
【００２８】
分割情報記憶部１３に記憶される分割情報は、各データソース３に分割配置されたデータセットに対するクエリの投稿条件を適用し、投稿先を選択するために必要な情報となる。これには、対象となる仮想スキーマ及び物理モデル（テーブル情報、データベースシステム情報等）、元のデータセットに対する分割方法（水平分割、垂直分割、範囲分割、ハッシュ分割等）、分割基準となる条件（対象の属性等）、対象データソースが持つデータセットの条件（値の範囲、ハッシュキー、優先度等）を含んでいる。
【００２９】
データソース情報記憶部１５に記憶されるデータソース情報は、データソース３が持つインタフェースの情報、インタフェースに合わせたクエリ変換に関する情報、データソース３の持つスキーマ情報、データソース３のリソース情報を含んでいる。
【００３０】
データソース３は、接続されたクライアント２又はデータベースシステムに対して要求されたデータをそのまま又は加工して提供するシステムであり、実際のデータセットを保持するストレージ４と、接続されたクライアント２またはデータベースシステムに対してインタフェースを提供し、インタフェースに沿った処理を行うエンジン５を含んでいる。
エンジン５は、データベースシステムにおけるDBMS（Data Base Management System）６、データセットをファイルとして提供するFTP（File Transfer Protocl）サーバ７、XML等の標準化された形式でデータセットを提供するNoSQLサーバ、HTML等のWebページを提供するWebサーバなどの、ネットワークを経由してデータセットを提供するインタフェースを含んでいる。
【００３１】
次に、データ仮想化システムのデータ仮想化サーバ１における分割条件適用部１４及びクエリ実行部１６のクエリ処理について、図３を参照して説明する。
分割対象であるか否かの判断を行うユーザクエリの評価（ステップ３０）によって得られた各データソース３で実行されるクエリの情報を基に、対象となるデータソース３の分割条件を分割情報より取得する（ステップ３１）。
次に、ユーザクエリにおける分割対象属性（日付、ＩＤ等）への選択処理の有無を確認し（ステップ３２）、ユーザクエリに分割対象属性が含まれていない場合は、従来のデータ仮想化システム同様に、対象のデータソース情報に基づいてクエリを生成し、クエリを投稿する（ステップ３７〜３９）。
【００３２】
ステップ３２においてユーザクエリに分割対象となる属性が含まれていた場合、対象のデータソース３へのクエリに対して分割条件を適用し（ステップ３３）、対象となるデータが含まれている対象データソースの数を検出する（ステップ３４）。
【００３３】
対象データソース数の検出する（ステップ３４）において、クエリを投稿するデータソース３が一つのみの場合、対象データソースのデータソース情報に従ってクエリを生成（必要に応じて修正）し（ステップ３５）、対象データソースに投稿する（ステップ３６）。
クエリを投稿するデータソース３が複数存在する場合は、データソース情報を適用したクエリをそれぞれのデータソース毎に生成（必要に応じて修正）する（ステップ３７）。そして、各データソース３にそれぞれクエリを投稿後（ステップ３８）、各データソース３での結果を結合（Union処理）する（ステップ３９）。
対象データソースが無い場合は、データソース情報に従ったクエリを生成せず、該当がないことを結果とする。
【００３４】
以上の最終結果を、クライアント２又はデータ仮想化サーバ１上での別のスキーマとの処理に利用するために渡すことで、クエリ処理が終了となる（ステップ４０）。
【００３５】
具体例として、図４で示すデータセットに関し、SQLのインタフェースを持つ３つのデータソース３に分割配置した環境におけるクエリ処理について説明する。
図４に示すデータセットのスキーマ構成について、仮想スキーマtable_xに対してdate列の値を条件に、分割配置されている例を考える。データソースＡに対して「2012/12/31以前」の部分データが、データソースＢに対して「2013/1/1から2014/12/31まで」の部分データが、データソースＣに対して「2014/1/1以降」の部分データが分割配置されているとする。
このときのデータソースＡにおける分割情報の登録例を図５に示す。すなわち、図５の登録例では、分割情報に関して、対象となる仮想スキーマがtable_xであり、対象の物理モデルがtable_aであり、分割方法としては水平分割及び範囲分割であり、分割基準となる属性がdate（日付）であり、分割条件式が「2013/1/1」までであることが示されている。
【００３６】
ここで、以下のユーザクエリ（２０１３年１０月１日までのデータをtable_xから選択する）が投稿された場合を想定する。
ユーザクエリ：SELECT * FROM table_x WHERE date ＜'2013/10/1'
このクエリと各データソース３に分割配置されたデータの関係が図６に示すような場合、データ仮想化サーバ１は、ユーザクエリから対象となる分割条件であるWHERE句の対象属性（date）とその条件（＜'2013/10/1'）を抽出し、この条件に含まれる部分データを３つのデータソース（物理モデル）３の分割情報から検索し、これにマッチしたデータソース３に対するクエリを選択／修正して作成する。
【００３７】
この場合、データソースＡは、２０１３年１月１日までのデータを保持し、データソースＢは、２０１４年１月１日までのデータを保持しているので、データソースＡ及びデータソースＢに対して、以下の２つのクエリが生成される。
（１）データソースＡに対するクエリ（２０１３年１月１日（１月１日は含まず）までのデータをtable_aから選択する）：
SELECT * FROM table_a WHERE date ＜ '2013/1/1'
（２）データソースＢに対するクエリ（２０１３年１月１日から２０１３年１０月１日までのデータをtable_bから選択する）：
SELECT * FROM table_b WHERE date ≧ '2013/1/1' AND date ＜ '2013/10/1'
【００３８】
なお、table_aは、データソースＡが持つ実際のテーブル名で、table_bは、同様にデータソースＢが持つテーブル名であり、仮想スキーマtable_xと同じスキーマ情報を持っている。
また、ユーザクエリの条件が「２０１３年１０月１日まで」であるので、２０１４年１月１日以降のデータを保持しているデータソースＣは範囲対象外となるため、クエリは生成されない。
【００３９】
次に、データ仮想化サーバ１は、これらのクエリを各データソース３に投稿し、結果を結合した上でクライアント２に返すことで、クエリ処理を完了する。
【００４０】
上述したデータ仮想化サーバ１によれば、複数の各データソース３に記憶されているデータについて分割情報記憶部１３が把握しているので、分割条件適用部１４において、クエリ評価部１２で生成した各データソースへのクエリの原型を選択又は修正するに際して、データセットの分割条件を意識した各データソース３へのクエリの分配を行うことができる。
そのため、一つのデータセットを分割して複数のデータソースに配置されている場合のクエリ処理において、効率的なクエリ処理を実現することが可能となる。
また、複数のデータソース３について、種類の異なるデータソース（高速データベース、大容量データベース）で構成することで、各データソースに適したデータをそれぞれ記憶させてクエリ処理を行うことができ、より効率的なクエリ処理が可能となる。
また、データ仮想化サーバ１において、分割したデータセットの配置を一元的に管理することができ、データセットの活用及び保守を容易にすることができる。
【符号の説明】
【００４１】
１…データ仮想化サーバ、  ２…クライアント、  ３…データソース、  １１…仮想スキーマ情報記憶部、  １２…クエリ評価部、  １３…分割情報記憶部、  １４…分割条件適用部、  １５…データソース情報記憶部、  １６…クエリ実行部。
【図１】
0006371136.tif 000002
【図２】
0006371136.tif 000003
【図３】
0006371136.tif 000004
【図４】
0006371136.tif 000005
【図５】
0006371136.tif 000006
【図６】
0006371136.tif 000007