JP6393193B2 - データ仮想化装置及び大規模データ処理プログラム - Google Patents

データ仮想化装置及び大規模データ処理プログラム Download PDF

Info

Publication number
JP6393193B2
JP6393193B2 JP2015002291A JP2015002291A JP6393193B2 JP 6393193 B2 JP6393193 B2 JP 6393193B2 JP 2015002291 A JP2015002291 A JP 2015002291A JP 2015002291 A JP2015002291 A JP 2015002291A JP 6393193 B2 JP6393193 B2 JP 6393193B2
Authority
JP
Japan
Prior art keywords
data
query
processing
divided
unit
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
JP2015002291A
Other languages
English (en)
Other versions
JP2016071837A (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.)
KDDI Corp
Original Assignee
KDDI 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 KDDI Corp filed Critical KDDI Corp
Publication of JP2016071837A publication Critical patent/JP2016071837A/ja
Application granted granted Critical
Publication of JP6393193B2 publication Critical patent/JP6393193B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、複数のデータソースの論理的な統合データモデルを提供するデータ仮想化システムにおいて、限られたリソースの環境下で、大規模データに対するクエリを確実に実行可能とするデータ仮想化装置及び大規模データ処理プログラムに関する。
データ仮想化システム(又はマルチデータベースシステム)は、インタフェースやデータ管理方式が異なる複数のデータソースを仮想的に一つのデータベースシステムに見せるために、各データソースが持つデータを論理的に統合して管理し、ユーザのクエリに対応するデータソースにクエリを投稿する。
代表的なデータ仮想化システムは、例えば特許文献1に示されるように、複数の階層的なデータベースシステムを、データマッピングにより仮想スキーマ(実際の物理テーブルをユーザに提供する論理テーブルに変換する処理を定義したもの)に統合し、クエリ実行時において処理対象となるデータを保持するデータベースシステムにクエリを分配するよう構成されている。各データベースシステムで実行されたクエリの結果は中央に収集され、仮想スキーマに従って一つに統合して結果を出力するシステムとなっている。
特開平07−141399号公報
特許文献1のように、複数のデータソースを跨がるクエリの統合処理は、データ仮想化システム上で実行する必要がある。このとき、一つ以上のデータベースシステムから得られるデータと処理後の結果データサイズが、物理メモリサイズを超えるほど大規模であった場合、実行できずにエラー終了してしまう可能性がある。
このような場合、OSのスワップ機構によって対応可能であると考えられるが、クエリ処理に最適化されておらず、遅延は非常に大きい。また、サイズがスワップ領域を超えてしまった場合にも、同様にエラー終了してしまうという問題がある。
データ仮想化システムは、対象の複数のデータソースが持つデータの規模や想定されるクエリの種類から、適切な物理メモリサイズを想定することで構築される。しかし事業環境の変化などから生成されるデータ量やクエリの種類が変化することで、想定した物理メモリサイズを超えるメモリが必要となる場合がある。そのような変化に対応するためにリソースを増設することは、多くの時間を必要とし、事業分析等のスピードが要求される用途で利用するユーザであったとしても、増設が完了するまで必要なクエリを実行することができない。
本発明は上記実情に鑑みて提案されたものであり、データ仮想化システムにおいて、限られたリソース環境においても確実にクエリを実行できるデータ仮想化装置及び大規模データ処理プログラムを提供することを目的としている。
上記目的を達成するため本発明は、データ仮想化装置において、限られたリソースの範囲内で実行可能なデータサイズとなるようにクエリ処理を分割して実行することで、大規模データに対するクエリ処理を確実に実行する。
すなわち、請求項1のデータ仮想化装置は、クエリ処理要求と結果受信を行うクライアントに対して、1つ以上のデータソースを利用してクエリ処理を行うデータ仮想化装置であって、
データ仮想化対象となる前記データソースの論理的な結合データモデルを記憶する仮想スキーマ情報部と、
前記各データソース及び前記データ仮想化装置のリソース情報、及び、前記データソースに保管された各データに関するデータサイズ、データ属性、データ範囲を含むデータ仮想化装置が処理するデータのサイズ推定に利用可能な統計情報を記憶する統計情報部と、
前記データソースに保管された各データに対する処理を提供するエンジンのインタフェース仕様を含む前記エンジン接続に関するインタフェース仕様を含むインタフェース情報を記憶するインタフェース情報部と、
前記統合データモデルを利用してユーザが投稿したクエリを実行するためのクエリプランを生成するクエリ評価部と、
前記クエリプランと前記統計情報を利用して前記リソース容量で処理可能となるクエリプランに再構築するクエリ分割部と、
再構築したクエリプランと前記インタフェース情報を基に前記データソースに投稿する投稿クエリ及びデータ仮想化装置上で実行するクエリプランを生成するクエリ生成部と、
前記再構築したクエリプランに従って前記投稿クエリ及びデータ仮想化装置上で実行する処理を順序通りに実行するための制御を行うクエリ実行制御部と、
を備えることを特徴としている。
請求項2は、請求項1のデータ仮想化装置において、
前記データソースに前記投稿クエリを投稿するクエリ投稿部と、
前記投稿クエリの結果を受信するデータ受信部と、
前記データ仮想化装置上で実行する処理で生成される中間データを一時的に保存する一時ストレージと、
前記データ受信部が受信したデータや前記一時ストレージに保存された中間データを利用して、前記クエリ実行制御部より指示された処理を実行し、その結果を前記一時ストレージ又は前記クライアントに送信するデータ処理部と、
を備えることを特徴としている。
請求項3は、請求項1のデータ仮想化装置において、
前記クエリ分割部は、
前記統計情報部の各データソースの統計情報から、前記クエリ評価部で生成したクエリプランのうち、各データソースがデータ仮想化装置に対して出力するデータサイズを計算する機能と、
データ仮想化装置上での処理毎に必要な中間データサイズを計算する機能と、
前記計算の結果から、処理対象データの統計情報を利用して、前記リソース容量で実行可能なデータサイズとするためのクエリ分割数と、分割のための条件を前記クエリプランに追加する機能と、を含むことを特徴としている。
請求項4は、請求項1のデータ仮想化装置において、
前記クエリ生成部は、
前記クエリ分割部で生成した前記クエリプランを利用して、処理毎に実行するためのクエリを抽出する機能と、
前記クエリプラン上から前記リソース容量での処理が不可であることを発見した場合に、当該処理の演算種別及び利用リソース容量に応じて分割数及び分割条件を決定し分割した、データ仮想化装置上で実行するクエリプラン及び前記投稿クエリを生成する機能と、
当該処理の入力データがデータソースの場合は、分割数、分割条件及びインタフェース情報を利用して、対象のデータソース用のクエリを生成する機能と、を含むことを特徴としている。
請求項5は、請求項2のデータ仮想化装置において、
前記クエリ実行制御部は、
前記クエリプランの各処理について、前記データソース上へのクエリ投稿、又は、前記一時ストレージから入力データを取得して実行する機能と、
前記処理を実行した後に、未実行の処理がある場合、前記処理の結果を前記一時ストレージに維持する機能と、を含むことを特徴としている。
請求項6の大規模データ処理プログラムは、請求項1乃至請求項4のいずれか1項に記載の各部をコンピュータ上に構築し、データ仮想化装置で実行可能となるように大規模データに対するクエリを分割して処理することを特徴としている。
請求項7は、請求項4のデータ仮想化装置において、
前記クエリ生成部におけるデータ仮想化装置上で実行するクエリプラン及び投稿クエリを生成する機能は、
分割対象となるデータが二項演算である場合、
同一範囲を含む二つの分割データを対象としたクエリのみを生成する機能を含むことを特徴としている。
請求項8は、請求項7のデータ仮想化装置において、
二つの分割データを対象としたクエリの生成は、
分割基準の属性と分割範囲を基に、一方の分割データからブロックを取得し、他方の分割データからブロックを取得して、ブロック間で演算処理を実施する一方、
前記一方の分割データの分割範囲の上限が、他方の分割データの分割範囲の上限より大きい場合に、他方のブロックを破棄し、次の分割範囲のブロックを取得し、一方の分割データの元のブロックと演算処理を実施し、
前記一方の分割データの分割範囲の上限が、他方の分割データの分割範囲の上限より小さい場合、一方のブロックを破棄し、次の分割範囲のブロックを取得して、他方の分割データの元のブロックと演算処理を実施し、
両分割データの分割範囲の上限が一致する場合は、両分割データの両ブロックを破棄して、両分割データで次のブロックを取得することで行うことを特徴としている。
本発明によれば、データ仮想化装置が保持するリソース容量で実行可能なデータサイズとなるようにクエリ分割部でクエリを分割し、分割クエリが実行されるので、データ仮想化装置において、一つのクエリで利用するデータ仮想化装置上のリソース量を制限することが可能となるとともに、分割処理することで、リソース容量を超える大規模データ処理に対応するクエリ処理を可能とすることができる。
また、二項演算である場合に、同一範囲を含む二つの分割データを対象としたクエリのみを生成し、結果を発生させない余計なクエリを排除することで、データ仮想化システムにおける大規模データ処理の高速化を実現することができる。
本発明のデータ仮想化装置の構成を示すブロック図である。 クエリ分割部における処理手順を示すフローチャート図である。 クエリ生成部における処理手順を示すフローチャート図である。 クエリ実行制御部及びデータ処理部における処理手順を示すフローチャート図である。 クエリ実行制御部における単項演算によるクエリ実行の処理手順を示すフローチャート図である。 クエリ実行制御部における二項演算によるクエリ実行の処理手順を示すフローチャート図である。 投稿されるサンプルクエリの例である。 サンプルクエリのクエリプランを示すモデル図である。 テーブルに関する統計情報を示す表である。 サンプルクエリにおける出力データサイズの計算結果が示されたモデル図である。 サンプルクエリにおける実行不可マークと分割情報が示されたモデル図である。 サンプルクエリの最終的なクエリプランを示すモデル図である。 クエリ生成部における他の処理手順を示すフローチャート図である。 図13におけるマージ型の二項演算処理方式のフローチャート図である。
本発明のデータ仮想化装置の実施形態について、図1を参照して説明する。
本発明のデータ仮想化装置は、データ仮想化システムにおいて、限られたリソースの範囲内で実行可能なデータサイズとなるようにクエリ処理を分割して実行することで、大規模データに対するクエリ処理を確実に実行するシステムであり、図1に示すように、システムを利用するクライアント1と、データ仮想化装置2と、データ仮想化装置2が利用する1つ以上のデータソース3から構成されている。クライアント1、データ仮想化装置2及びデータソース3は、ネットワークを介して接続されている。
クライアント1、データ仮想化装置2及び各データソース3は、それぞれ、基本プログラムや各種の基本デバイスが記憶されたROMと、各種のプログラムやデータが記憶されるハードディスクドライブ装置(HDD)と、CR−ROMやDVD等の記憶媒体からプログラムやデータを読み出すメディアドライブ装置と、プログラムを実行するCPUと、このCPUにワークエリアを提供するRAMと、外部装置と通信するパラレル/シリアルI/Fとを主要部分とする一般的な構成を備えたコンピュータ上に構築されている。
例えば、上述した構成を有する各コンピュータにおいて、クエリ処理を実行するための大規模データ処理プログラムがメディアドライブ装置を介してHDDにインストールされることでデータ仮想化装置が構築される。
クライアント1は、データ仮想化装置2が提供する統合データモデルを利用したクエリを投稿することで、透過的に複数のデータソース3に対するクエリ処理結果を取得する。
データソース3は、実際にデータを保管するストレージ32と、データに対する処理を提供するエンジン31からなり、エンジン31が持つインタフェース経由でストレージ32上のデータに対する処理を提供する。
データ仮想化装置2は、仮想スキーマ情報を管理する仮想スキーマ情報部21と、データソース3に保管されたデータに関する統計情報を記憶する統計情報部22と、データソース3のエンジン31に関するインタフェース情報を記憶するインタフェース情報部23と、クエリプランを生成するクエリ評価部24と、リソース容量に応じたクエリプランを再構築するクエリ分割部25と、各クエリを生成するクエリ生成部26と、各クエリ処理を実行するクエリ実行制御部27と、データソース3へクエリを投稿するクエリ投稿部28と、データソース3からクエリ結果を受信するデータ受信部29と、クエリ処理の結果を一時的に保存する一時ストレージ30と、処理結果を出力するデータ処理部40とを備えて構成されている。
仮想スキーマ情報部21は、接続されたデータ仮想化対象のデータソース3の論理的な統合データモデルを記憶し、クライアント1から投稿されるクエリに対して、どのデータソース3上のテーブル情報を使用するかについての仮想スキーマ情報が管理されている。
統計情報部22は、データソース3に保管された各データに関するデータサイズ、データ属性、データ範囲を含む前記データのサイズ推定に利用可能な統計情報を記憶する。統計情報には、属性ごとに出現するデータの種類の数(ヒストグラム)や、各属性の平均や分散値等の属性の特徴を表示する値が含まれる。また、統計情報部22には、各データソース3及びデータ仮想化装置2のリソース容量が記憶されている。
これらの統計情報は、後述するクエリの中間データサイズの計算や、クエリ分割に際して必要な情報となる。
インタフェース情報部23は、データソース3に保管された各データに対する処理を提供するエンジン31のインタフェース仕様を含むエンジン接続に関するインタフェース情報を記憶する。インタフェース仕様は、クエリの生成方法(SQL等)や、アクセス方法(JDBC等)を示す。また、インタフェース情報には、上記以外のエンジン接続に関わる情報として、エンジンが出力するデータ形式や、エンジンの制限(実行不可の処理等)等が含まれる。インタフェース情報は、各データソース3が実行可能なクエリを生成するために必要な情報となる。
クエリ評価部24はクエリを受け取り、クエリの処理対象となるテーブルに対応する仮想スキーマ情報を仮想スキーマ情報部21から呼び出し、ユーザが投稿したクエリに仮想スキーマの処理を適用した形でクエリプランを生成する。
クエリ分割部25は、クエリ評価部24が生成したクエリプランと統計情報部22の統計情報を利用してデータ仮想化装置2が実行可能となるクエリプランに再構築する。
クエリ生成部26は、再構築したクエリプランを基に実際にデータソース3に投稿する投稿クエリ及びデータ仮想化装置2上で実行する処理に関するクエリプランを生成する。投稿クエリは、インタフェース情報部23のインタフェース情報を基に、投稿するデータソース3のエンジン31のインタフェース仕様に合わせて生成される。
クエリ実行制御部27は、再構築されたクエリプランに従って生成した投稿クエリ及びデータ仮想化装置2の処理を順序通りに実行するための制御を行う。
クエリ投稿部28は、実際にデータソース3に投稿クエリを投稿する。
データ受信部29は、クエリ投稿部28が投稿した投稿クエリの結果を待ち、その結果を受信する。
一時ストレージ30は、データ仮想化装置2上の処理で生成される中間データを一時的に保存する。
データ処理部40は、データ受信部29が受信したデータや一時ストレージ30に保存されたデータを利用して、クエリ実行制御部27より指示された処理を実行し、結果を一時ストレージ30又はクライアント1に送信する。
次に、クエリ分割部25における処理フローについて、図2を参照して説明する。
クエリ分割部25では、限られたリソースの範囲内で実行可能なデータサイズとなるように処理を分割するための情報を付与する。
先ず、統計情報部22に記憶された各データソース3の統計情報から、クエリ評価部24で生成したクエリプランのうち、各データソース3がデータ仮想化装置2に対して出力するデータサイズを計算する(ステップ101)。
同様にして、データ仮想化装置2上での処理について、それぞれの処理の中間データサイズを計算する(ステップ102)。
これらの計算結果とデータ仮想化装置2のリソース情報から、処理毎にデータ仮想化装置2上で処理可能かどうかを判断し(ステップ103)、処理可能でないと判断した場合には(ステップ104)、実行不可マークをつける(ステップ105)。
このとき、処理対象データの統計情報を利用して、実行可能なデータサイズとなるためのクエリ分割数と、分割のための条件(分割条件)をクエリプランに追加し(ステップ106)、クエリ分割処理を完了する(ステップ107)。この分割条件には、分割の対象となる属性(分割基準の属性)と、分割数分の属性の範囲(分割範囲)が指定される。
クエリ生成部26における処理フローについて、図3を参照して説明する。
クエリ生成部26では、クエリ分割部25で生成した分割条件付きのクエリプランを利用して、分割したクエリプランとデータソースに投稿するためのクエリが生成される。
クエリプラン上をツリー探索で各処理の抽出を行う(ステップ201)。
クエリプラン上の各処理から実行不可マークの有無を検知する(ステップ202)。
クエリプラン上の各処理に実行不可マークが無ければ、分割することなく対象処理のクエリを生成する(ステップ203)。
実行不可マークのついた処理を発見した場合、当該処理の演算種別に応じて(ステップ204)、分割数及び分割条件を利用した単項演算のクエリ処理方式(ステップ205)、又は、二項演算のクエリ処理方式(ステップ206)により分割したクエリプランを生成する。
続いて、クエリ処理の入力データがデータ仮想装置にあるのかデータソース3にあるのかを判断する(ステップ207)。
当該処理の入力データがデータソース3の場合は、分割数、分割条件及びインタフェース情報を利用して、対象のデータソース用のクエリ(投稿クエリ)を生成する(ステップ208)。
以上の処理をクエリプラン上の全処理分行うことで(ステップ209)、クエリ生成は完了する(ステップ210)。
クエリ実行制御部27及びデータ処理部40における処理フローについて、図4を参照して説明する。
クエリ生成部26で生成した分割したクエリプランとデータソースに投稿するためのクエリを利用して、クエリ間の依存関係を考慮したクエリ実行を行うために、まずクエリプラン上において、未実行、かつデータ仮想化装置2上の処理で最も深い処理を抽出する(ステップ301)。
続いて、当該処理を処理方式に従って、入力データを取得し、処理を実行する(ステップ302)。入力データの取得は、データソース3上へのクエリ投稿、もしくはデータ仮想化装置上の一時ストレージ30から取得する。
これをクエリプランにおけるデータ仮想化装置2上の全処理で行う。すなわち、クエリプランにおける未実行処理の有無を検出し(ステップ303)、未実行処理が有る場合は、結果を中間データとして一時ストレージ30に維持し(ステップ304)、ステップ301からの処理を繰り返す。
ステップ303において、未実行処理が無い場合は、データ処理部40が最終結果を一時ストレージ30から取得し、クライアント1に送信する(ステップ305)。
その後、利用した一時ストレージ30上の中間データと最終結果を削除してクエリ実行は終了となる(ステップ306)。
次に、クエリ生成部26における単項演算による分割クエリの実行方式(図3のステップ205における処理)について、図5を参照して説明する。
単項演算は、選択処理(WHERE, HAVING, ON)、射影処理(SELECT)、集約処理(GROUP BY)、並び替え処理(ORDER BY)を含み、単体のテーブルデータに対する演算を表す。単体のテーブルデータに対して予め決められた分割条件を元に、ブロック単位に分割して処理を行う。
先ず、対象のテーブルAの分割数N及び分割条件を決定し(ステップ401)、テーブルAのブロックAiを取得する(ステップ402)。このiは0≦i<Nとなり、ブロックは0から順に取得する。また、ここでブロックを取得する先は、データソース3又は一時ストレージ30となる。
各データにおける分割基準の属性は、例えば、処理毎のキー属性が設定される。
次に、取得したブロックAiに対して単項演算を実行し(ステップ403)、結果を一時ストレージ30に退避する(ステップ404)。
その後、テーブルAの残りのブロックを確認し(ステップ405)、ブロックがあれば(i<N−1)、当該ブロックを破棄し(ステップ406)、次のブロックを選択し(ステップ407)、ステップ402からの処理を繰り返す。
ステップ405においてブロックがなければ、最終結果を出力する(ステップ408)。
続いて、クエリ生成部26における二項演算による分割クエリの実行方式(図3のステップ206における処理)について、図6を参照して説明する。
二項演算は、結合処理(JOIN)と集合処理(UNION, MINUS, INTERSECT)を含み、二つのテーブルデータに対する演算を表す。この処理においては、予め決められた分割条件を基に、各テーブルデータをブロック単位に分割して処理を行う。
先ず、対象のテーブルA,Bの分割数N及び分割条件を決定し(ステップ501)、二つのテーブルのうち、テーブルサイズの小さいテーブルAのブロックAiを取得する(ステップ502)。次に、テーブルサイズの大きい方のテーブルBのブロックBjを取得する(ステップ503)。ここで、i及びjは0≦i,j<Nとなり、各ブロックは0から順に取得される。また、ここでブロックを取得する先は、データソース3又は一時ストレージ30となる。
次に、取得した二つのブロックAi及びブロックBjに対して二項演算を実行し(ステップ504)、結果を一時ストレージ30に退避する(ステップ505)。
その後、テーブルBの残りのブロックを確認し(ステップ506)、ブロックがあれば(j<N−1)、現在のブロックを一時ストレージ30に退避し(ステップ507)、次のブロックを選択し(ステップ508)、ステップ503からの処理を繰り返す。
ステップ506においてブロックがない場合(j=N−1)は、同様にテーブルAの残りのブロックを確認する(ステップ509)。テーブルAの残ブロックがある場合(i<N−1)、ブロックAiを破棄し(ステップ510)、ブロックBjを一時ストレージ30に退避し(ステップ511)、テーブルBの残りのブロックをリセット(J=0)し(ステップ512)、再度テーブルAのブロックの選択から実行する(ステップ502)。
なお、テーブルBのブロックの一時ストレージ30への退避は、当該ブロックの取得元がデータソース3だった場合に限られ、一時ストレージ30から取得した場合は当該ブロックを破棄する。
クエリ生成部26においては、これらの二つの実行方式を実現するためのクエリ又はクエリプランを生成し、クエリ実行制御部27はこれらに従って処理を実行する。
次に、データ仮想化装置2における具体的なクエリ処理の流れについて、図7のSQLクエリをクライアントが投稿した場合を例に説明する。
なお、テーブルuserはデータソース(DB1)3に、テーブルlogはデータソース(DB2)3に保存されているとし、DB1及びDB2のインタフェースはSQLとする。また、データ仮想化装置2の物理メモリは64GBを上限とする。つまり、1回に処理できるサイズは、入力データサイズと出力データサイズの合計が64GB以下の場合のみとなる。
クライアント1が図7のSQLクエリをデータ仮想化装置2に投稿すると、クエリ評価部24は、図8に示すクエリプランを生成する。点線で囲まれている範囲が、それぞれ各データソース3及びデータ仮想化装置2上で実行される範囲を示している。すなわち、データ仮想化装置2では、並び替え処理(ORDER BY)、Π(user.age,COUNT(*))、集約処理(GROUP BY)、結合処理(JOIN)の4つのクエリ処理が、データソース(DB1)3に対してΠ(user_id,age)の1つのクエリ処理が、データソース(DB2)3に対してΠ(user_id)の1つのクエリ処理が行われるクエリプランとなっている。
クエリ分割部25は、図8のクエリプランと図9に示すテーブルの統計情報から図10で示すような中間データサイズを計算する。ここでは、事前に統計情報として図10のように処理毎の入出力の中間データサイズが計算されていたものとしている。すなわち、図10の例では、ORDER BY処理に対して入力10KB及び出力10KB、Π処理に対して入力50KB及び出力10KB、GROUP BY処理に対して入力150GB及び出力50KB、JOIN処理に対して入力100MB、100GB及び出力150GBとなっている。
次に、図10の中間データサイズを利用して、物理メモリを超えていて実行できない処理を抽出し、図11のように実行不可マークを付与する。図11では、GROUPBY処理とJOIN処理について、複数のクエリに分割する必要がある。実行不可マークが付与された処理では、図9の統計情報のうちテーブルごとのkeyとなる属性と、その最大・最小値を利用して、分割数及び分割条件を付与する。
具体的には、図11では、実行不可マークがつけられたGROUPBY処理を属性log_idの値を条件に3個に分割し、JOIN処理を属性log_idの値を条件に4個に分割する。
すなわち、GROUPBY処理では、入力150GB、出力50KBなので、メモリ容量の64GBで割ると((150GB+50KB)/64GB)、3分割が必要となる。
同様に、JOIN処理では、入力100MB、100GB、出力150GBなので、メモリ容量の64GBで割ると((100MB+100GB+150GB)/64GB)、4分割が必要となる。
分割は、各処理の入力側で行われ、入力が二つある時には、どちらか又は両方を分割する。
クエリ生成部26は、図11の分割情報付きのクエリプランを利用して、図12のようにデータ仮想化装置2上で実行するクエリプランと、データソース(DB1)3及びデータソース(DB2)3に投稿するSQLクエリを生成する。
クエリ実行制御部27では、図12のクエリプランに従ってデータソース3にSQLクエリを投稿し、データ仮想化装置2上で順々に処理を実行していく。
上述したデータ仮想化装置及び大規模データ処理プログラムによれば、クエリ分割部25においてクエリを分割してクエリプランを再構築し、クエリ実行制御部27において分割クエリを順次実行する制御を行うことで、一つのクエリで利用するデータ仮想化装置2上のリソース量を制限することが可能となるので、データ仮想化装置2のリソース容量を超える大規模データ処理に対応することができる。
なお、上述したデータ仮想化装置では、二項演算において、処理対象の二つのデータをそれぞれ分割したデータ(分割データ)のうち、どの組み合わせの処理において結果が出力されるかを考慮していない。そのため、分割データの全組み合わせで処理を実行するクエリ分割実行方式をとっている。
しかし実際には、例えば内部結合処理(Inner Join)のように、ある特定の分割データ同士の処理でのみ結果を出力する処理がある。このような場合、上述の実行方式では、本来であれば不要である分割データの転送及び処理が何度も行われ、効率が悪くなる場合がある。
一方、データ仮想化システムにおいては、従来のデータベースシステムがHDD等のストレージに直接アクセスし、ストレージのアクセス方式(ページ等)に従ったデータアクセスを行うのに対して、SQLクエリを前提としていることから、実際の値の範囲を基にデータを取得することが容易にできる。
この点を活用し、クエリ生成部26における処理について、図13及び図14に示した処理フローでは、データ仮想化システムで生成したクエリプラン及び処理データサイズに応じて生成した分割条件を基に、実際に実行する分割クエリを生成することで、クエリ処理の効率を上げるようにしている。
図13中、図3と同じ符号を付したステップは、図3と同一の処理を行うことを意味する。以下、図1〜図3のデータ仮想化装置と異なる処理フローを中心に説明する。
先ず、図1のデータ仮想化装置と同様に、クエリ生成部26において、クエリ分割部25で作成した分割条件付きのクエリプランを利用して、処理毎に実行するためのクエリを生成する。
クエリプラン上から実行不可マークのついた処理を発見した場合(ステップ202)、当該処理の演算種別に応じて(ステップ204)、分割数及び分割条件を利用して分割したクエリプランを生成する(ステップ205、ステップ211、ステップ212)。
単項演算の場合は、図3の処理と同様に、単項演算処理方式を基に分割したクエリプランを生成する(ステップ205)。
また、二項演算のうち、直積処理(Cross Join)に関しては、図3のステップ206と同様の二項演算処理方式(総当り型二項演算処理方式)を基に分割したクエリプランを生成する(ステップ211)。
一方で、直積処理以外の二項演算(内部結合処理(Inner Join)、外部結合処理(Outer Join)、集合処理(Union, Minus, Intersection))に関しては、マージ型二項演算処理方式を基に分割したクエリプランを生成する(ステップ212)。マージ型二項演算処理方式の詳細については後述する。
続いて、クエリ処理の入力データがデータ仮想装置にあるのかデータソース3にあるのかを判断する(ステップ207)。
当該処理の入力データがデータソース3の場合は、分割数、分割条件及びインタフェース情報を利用して、対象のデータソース用のクエリ(投稿クエリ)を生成する(ステップ208)。
以上の処理をクエリプラン上の全処理分行うことで(ステップ209)、クエリ生成は完了する(ステップ210)。
図14は、マージ型二項演算処理方式(図13のステップ212)の処理フローを示し、クエリ生成部26においては、この処理方式を実現するためのクエリ又はクエリプランを生成し、クエリ実行制御部27はこれに従って処理を実行する。
先ず、各入力データA,Bの分割数AN,BN,分割基準の属性attrA,attrB,分割範囲conda[AN],condB[BN]について、図1のクエリ分割部25で再構築したクエリプランにより取得し、AのブロックA[i]及びBのブロックB[j]を初期化(i=0,j=0)する(ステップ601)。
次に、分割基準の属性と分割範囲を基に、片方のデータAからブロックA[i]を取得する(ステップ602)。
同様に、もう一方のデータBからブロックB[j]を取得する(ステップ603)。
これらのブロック間で演算処理joinを実施し(ステップ604)、演算結果を一時的に記憶する(ステップ605)。
次に、Aの分割範囲の上限が、Bの分割範囲の上限より大きかった場合(ステップ606)、データAには演算処理が可能な範囲が残っていることから、BのブロックB[j]を破棄し(ステップ607)、Bの次の分割範囲のブロックB[j]を取得し(ステップ603)、元からあるAのブロックA[i]と演算処理を実施する(ステップ604)。
一方で、Aの分割範囲の上限が、Bの分割範囲の上限より小さかった場合(ステップ608)、AのブロックA[i]を破棄し(ステップ609)、Aの次の分割範囲のブロックA[i]を取得し(ステップ610)、元からあるBのブロックB[j]と演算処理を実施する(ステップ604)。
また、AのブロックA[i]が終了し(i<AN)、且つ、BのブロックB[j]も終了(j=BN-1)している場合も、AのブロックA[i]を破棄し(ステップ609)、Aの次の分割範囲のブロックA[i]を取得し(ステップ610)、元からあるBのブロックB[j]と演算処理を実施する(ステップ604)。
なお、AとBの分割範囲の上限が一致する場合は(ステップ608)、AとBの両ブロックを破棄して(ステップ611)、両方共に次のブロックA[i],B[j]を取得する(ステップ602、603)。
なお、AのブロックA[i]が終了(i≧AN)し、且つBのブロックB[j]が終了(j≧BN)した場合(AとBの両方の分割範囲がなくなった時点)(ステップ612)、全てのjoin結果を結合して出力する(ステップ613)。
上述した方式によれば、クエリの分割範囲を利用して、出力結果が生成されないブロック間での演算処理を行わない。そのために、レコード間である属性の値が一致しない場合には、必ず特定の結果が生成されるという特徴を利用している。
結合処理(内部結合、外部結合)の場合、このような属性はJoinキーであり、結果が出力されないか、もしくは当該レコードを1レコードのみ出力する、という動作となる。したがって、結合処理(内部結合、外部結合)の場合、分割基準の属性にJoinキーを選択する必要がある。
一方、集合処理に関しては、一つでも一致しない属性があれば、出力結果が特定されるため、分割基準の属性を指定する必要がない。また、分割範囲を順番に一致させるために、分割範囲は同一順序(昇順又は降順)でソートされている必要がある。
上述したクエリ分割(二項演算の一部処理方式において、処理の特徴を考慮したクエリ分割)の処理フローを実行することで、余計な通信及び処理を省くことができ、二項演算の処理性能を向上させること(データ仮想化システムにおけるクエリ分割実行処理の高速化)が可能となる。
1…クライアント、 2…データ仮想化装置、 3…データソース、 21…仮想スキーマ情報部、 22…統計情報部、 23…インタフェース情報部、 24…クエリ評価部、 25…クエリ分割部、 26…クエリ生成部、 27…クエリ実行制御部、 28…クエリ投稿部、 29…データ受信部、 30…一時ストレージ、 31…エンジン、 32…ストレージ、 40…データ処理部。

Claims (8)

  1. クエリ処理要求と結果受信を行うクライアントに対して、1つ以上のデータソースを利用してクエリ処理を行うデータ仮想化装置であって、
    データ仮想化対象となる前記データソースの論理的な結合データモデルを記憶する仮想スキーマ情報部と、
    前記各データソース及び前記データ仮想化装置のリソース容量、及び、前記データソースに保管された各データに関するデータサイズ、データ属性、データ範囲を含むデータ仮想化装置が処理するデータのサイズ推定に利用可能な統計情報を記憶する統計情報部と、
    前記データソースに保管された各データに対する処理を提供するエンジンのインタフェース仕様を含む前記エンジン接続に関するインタフェース情報を記憶するインタフェース情報部と、
    前記統合データモデルを利用してユーザが投稿したクエリを実行するためのクエリプランを生成するクエリ評価部と、
    前記クエリプランと前記統計情報を利用して前記リソース容量で処理可能となるクエリプランに再構築するクエリ分割部と、
    再構築したクエリプランと前記インタフェース情報を基に前記データソースに投稿する投稿クエリ及びデータ仮想化装置上で実行するクエリプランを生成するクエリ生成部と、
    前記再構築したクエリプランに従って前記投稿クエリ及びデータ仮想化装置上で実行する処理を順序通りに実行するための制御を行うクエリ実行制御部と、
    を備えることを特徴とするデータ仮想化装置。
  2. 前記データソースに前記投稿クエリを投稿するクエリ投稿部と、
    前記投稿クエリの結果を受信するデータ受信部と、
    前記データ仮想化装置上で実行する処理で生成される中間データを一時的に保存する一時ストレージと、
    前記データ受信部が受信したデータや前記一時ストレージに保存された中間データを利用して、前記クエリ実行制御部より指示された処理を実行し、その結果を前記一時ストレージ又は前記クライアントに送信するデータ処理部と、
    を備えた請求項1に記載のデータ仮想化装置。
  3. 前記クエリ分割部は、
    前記統計情報部の各データソースの統計情報から、前記クエリ評価部で生成したクエリプランのうち、各データソースがデータ仮想化装置に対して出力するデータサイズを計算する機能と、
    データ仮想化装置上での処理毎に必要な中間データサイズを計算する機能と、
    前記計算の結果から、処理対象データの統計情報を利用して、前記リソース容量で実行可能なデータサイズとするためのクエリ分割数と、分割のための条件を前記クエリプランに追加する機能と、
    を含む請求項1に記載のデータ仮想化装置。
  4. 前記クエリ生成部は、
    前記クエリ分割部で生成した前記クエリプランを利用して、処理毎に実行するためのクエリを抽出する機能と、
    前記クエリプラン上から前記リソース容量での処理が不可であることを発見した場合に、当該処理の演算種別及び利用リソース容量に応じて分割数及び分割条件を決定し分割した、データ仮想化装置上で実行するクエリプラン及び前記投稿クエリを生成する機能と、
    当該処理の入力データがデータソースの場合は、分割数、分割条件及びインタフェース情報を利用して、対象のデータソース用のクエリを生成する機能と、
    を含む請求項1に記載のデータ仮想化装置。
  5. 前記クエリ実行制御部は、
    前記クエリプランの各処理について、前記データソース上へのクエリ投稿、又は、前記一時ストレージから入力データを取得して実行する機能と、
    前記処理を実行した後に、未実行の処理がある場合、前記処理の結果を前記一時ストレージに維持する機能と、
    を含む請求項2に記載のデータ仮想化装置。
  6. 請求項1乃至請求項4のいずれか1項に記載の各部をコンピュータ上に構築し、データ仮想化装置で実行可能となるように大規模データに対するクエリを分割して処理する大規模データ処理プログラム。
  7. 前記クエリ生成部におけるデータ仮想化装置上で実行するクエリプラン及び投稿クエリを生成する機能は、
    分割対象となるデータが二項演算である場合、
    同一範囲を含む二つの分割データを対象としたクエリのみを生成する機能
    を含む請求項4に記載のデータ仮想化装置。
  8. 二つの分割データを対象としたクエリの生成は、
    分割基準の属性と分割範囲を基に、一方の分割データからブロックを取得し、他方の分割データからブロックを取得して、ブロック間で演算処理を実施する一方、
    前記一方の分割データの分割範囲の上限が、他方の分割データの分割範囲の上限より大きい場合に、他方のブロックを破棄し、次の分割範囲のブロックを取得し、一方の分割データの元のブロックと演算処理を実施し、
    前記一方の分割データの分割範囲の上限が、他方の分割データの分割範囲の上限より小さい場合、一方のブロックを破棄し、次の分割範囲のブロックを取得して、他方の分割データの元のブロックと演算処理を実施し、
    両分割データの分割範囲の上限が一致する場合は、両分割データの両ブロックを破棄して、両分割データで次のブロックを取得する
    ことで行う請求項7に記載のデータ仮想化装置。
JP2015002291A 2014-09-30 2015-01-08 データ仮想化装置及び大規模データ処理プログラム Active JP6393193B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2014200596 2014-09-30
JP2014200596 2014-09-30

Publications (2)

Publication Number Publication Date
JP2016071837A JP2016071837A (ja) 2016-05-09
JP6393193B2 true JP6393193B2 (ja) 2018-09-19

Family

ID=55864801

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015002291A Active JP6393193B2 (ja) 2014-09-30 2015-01-08 データ仮想化装置及び大規模データ処理プログラム

Country Status (1)

Country Link
JP (1) JP6393193B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6799501B2 (ja) * 2017-06-06 2020-12-16 株式会社日立製作所 計算機システム及びデータの分析方法
US11829362B2 (en) 2018-05-15 2023-11-28 Oracle International Corporation Automatic database query load assessment and adaptive handling

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100701104B1 (ko) * 2004-12-22 2007-03-28 한국전자통신연구원 분산된 정보들의 통합 뷰 생성을 위한 데이터베이스스키마 생성 방법 및 정보 통합 시스템
US9081826B2 (en) * 2013-01-07 2015-07-14 Facebook, Inc. System and method for distributed database query engines

Also Published As

Publication number Publication date
JP2016071837A (ja) 2016-05-09

Similar Documents

Publication Publication Date Title
JP6697392B2 (ja) 半構造データスキーマのトランスペアレントディスカバリ
US10521427B2 (en) Managing data queries
US10838940B1 (en) Balanced key range based retrieval of key-value database
EP2752779B1 (en) System and method for distributed database query engines
US10127275B2 (en) Mapping query operations in database systems to hardware based query accelerators
WO2017096892A1 (zh) 索引构建方法、查询方法及对应装置、设备、计算机存储介质
CA2897338A1 (en) Data stream splitting for low-latency data access
AU2015369723A1 (en) Identifying join relationships based on transactional access patterns
JP6159908B1 (ja) 異種データソース混在環境におけるフィールド間の関係性の自動的発見のための方法、プログラム、および、システム
CN104063501A (zh) 基于hdfs的副本平衡方法
Al-Khasawneh et al. MapReduce a comprehensive review
JP6262505B2 (ja) 分散型データ仮想化システム、クエリ処理方法及びクエリ処理プログラム
CN108073641B (zh) 查询数据表的方法和装置
JP6204753B2 (ja) 分散クエリ処理装置、処理方法及び処理プログラム
JP6393193B2 (ja) データ仮想化装置及び大規模データ処理プログラム
CN106575296B (zh) 用于托管的分析的动态n维立方体
US20190364109A1 (en) Scale out data storage and query filtering using storage pools
JP6523823B2 (ja) 仮想データベースシステム管理装置、管理方法及び管理プログラム
JP7211255B2 (ja) 検索処理プログラム、検索処理方法及び情報処理装置
JP6371136B2 (ja) データ仮想化サーバ、データ仮想化サーバにおけるクエリ処理方法及びクエリ処理プログラム
CN113297252A (zh) 一种模式无感知的数据查询服务方法
JP6401617B2 (ja) データ処理装置、データ処理方法及び大規模データ処理プログラム
CN109344216A (zh) 一种面向大数据的k近邻连接查询方法
AU2017202899B2 (en) Managing data queries
Mandilaras Transforming into RDF and Interlinking Βig Geospatial Data

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20160823

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170906

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180629

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: 20180808

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180824

R150 Certificate of patent or registration of utility model

Ref document number: 6393193

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150