JP6619724B2 - クエリ処理システム及びクエリ処理方法 - Google Patents
クエリ処理システム及びクエリ処理方法 Download PDFInfo
- Publication number
- JP6619724B2 JP6619724B2 JP2016246872A JP2016246872A JP6619724B2 JP 6619724 B2 JP6619724 B2 JP 6619724B2 JP 2016246872 A JP2016246872 A JP 2016246872A JP 2016246872 A JP2016246872 A JP 2016246872A JP 6619724 B2 JP6619724 B2 JP 6619724B2
- Authority
- JP
- Japan
- Prior art keywords
- query processing
- query
- buffer
- execution
- executed
- 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
Links
Images
Landscapes
- Memory System (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
本発明は、データベースに対応するクエリを処理するクエリ処理システム及びクエリ処理方法に関する。
従来、データベースに対応するクエリを解析し、クエリに対応する複数の処理を分散して処理することにより、効率的にクエリを処理する分散データベースシステムが知られている。例えば、特許文献1には、データベースを複数のクエリ処理エンジンが共有する環境において、クエリの内容に応じてクエリを分割し、クエリ処理エンジンに自動的に分配するシステムが開示されている。
データベースシステムは、データの操作や定義を行うための言語に従って記述されたクエリを解釈することによって、データに対する処理を示す演算を抽出し、各演算の処理順序を決定する。各演算の処理順序は、関係代数式として木構造をしたクエリ実行計画で表現される。分散データベースシステムでは、第1クエリ処理装置(マスター装置)がクエリを解釈することによりクエリ実行計画を作成し、複数の第2クエリ処理装置(スレーブ装置)が当該クエリ実行計画に従ってデータ処理を並列に実行する。
ところで、演算の中には、結合演算や集合演算等の複数のデータを組み合わせる演算や、集計演算のように、入力されるデータのデータサイズに比べて、演算時のデータサイズが大きくなる演算が存在する。
第2クエリ処理装置は、データ処理を自身に実装されているメモリ上で行う。メモリは有限であることから、複数のデータ処理を同時に実行する場合には、複数のデータ処理のそれぞれに割り当てられるメモリが小さく制限されることがある。このような場合において、大規模なデータのデータ処理を実行したり、演算時のデータサイズが大きくなる演算を実行したりすると、割り当てられたメモリ上でデータ処理ができなくなり、OSのスワップ機構の利用によって大幅な遅延が発生したり、クエリ実行に失敗したりするという問題がある。
そこで、本発明はこれらの点に鑑みてなされたものであり、大規模データを対象とするクエリ処理を高速かつ確実に実行することができるクエリ処理システムを提供することを目的とする。
本発明の第1の態様に係るクエリ処理システムは、第1クエリ処理装置と、複数の第2クエリ処理装置とを備え、データベースに対応するクエリを処理するクエリ処理システムであって、前記第1クエリ処理装置は、前記クエリを取得するクエリ取得部と、取得した前記クエリに基づいて前記複数の第2クエリ処理装置のそれぞれに実行させる複数の演算を特定し、当該演算の実行を指示する演算指示情報を含む実行計画情報を生成するクエリ計画部と、前記複数の第2クエリ処理装置のそれぞれで実行された前記演算の結果に基づく前記クエリの実行結果を取得し、当該実行結果を出力する出力部とを有し、前記複数の第2クエリ処理装置のそれぞれは、前記第2クエリ処理装置において実行される複数の演算のそれぞれにメモリ領域を割り当てるとともに、当該メモリ領域の利用状況に基づいて前記複数の演算のそれぞれに割り当てられているメモリ領域のサイズを動的に更新するメモリ管理部と、前記実行計画情報に含まれる前記演算指示情報に基づいて、前記複数の演算のそれぞれを、当該演算に割り当てられたメモリ領域上で実行する演算実行部とを有する。
前記メモリ管理部は、前記演算実行部が実行中の演算において新たにメモリ領域を利用する場合に、複数の演算に割り当てられているメモリ領域のうち、利用されていないメモリ領域を解放するとともに、当該実行中の演算に対してメモリ領域を新たに割り当ててもよい。
前記クエリ計画部は、演算の実行順序を示す順序情報を含む前記実行計画情報を生成し、前記演算実行部は、前記順序情報と、前記演算指示情報と、前記演算指示情報に対応する演算に対して割り当てられているメモリ領域の利用状況とに基づいて、最上位の演算から順に要求駆動方式に従った演算を実行し、前記メモリ管理部は、前記演算実行部が実行中の演算において新たにメモリ領域を利用する場合に、前記実行順序に基づいて当該演算の下位の演算を特定し、当該下位の演算に割り当てられているメモリ領域の利用状況に基づいて、当該下位の演算に割り当てられているメモリ領域を解放するとともに、当該実行中の演算に対してメモリ領域を新たに割り当ててもよい。
前記クエリ計画部は、演算の実行順序を示す順序情報を含む前記実行計画情報を生成し、前記演算実行部は、前記順序情報と、前記演算指示情報と、前記演算指示情報に対応する演算に対して割り当てられているメモリ領域の利用状況とに基づいて、最上位の演算から順に要求駆動方式に従った演算を実行し、前記メモリ管理部は、前記演算実行部が実行中の演算において新たにメモリ領域を利用する場合に、前記実行順序に基づいて当該演算の下位の演算を特定し、当該下位の演算に割り当てられているメモリ領域の利用状況に基づいて、当該下位の演算に割り当てられているメモリ領域を解放するとともに、当該実行中の演算に対してメモリ領域を新たに割り当ててもよい。
前記メモリ管理部は、前記演算実行部が当該実行中の演算において新たにメモリ領域を利用する場合に、前記下位の演算のうち、実行が完了している演算に割り当てられているメモリ領域を解放するとともに、当該実行中の演算に対して当該メモリ領域を新たに割り当ててもよい。
前記クエリ計画部は、取得した前記クエリに基づいて複数の演算指示情報を含むタスクを生成し、当該タスクの実行を指示するタスク実行指示情報を含む前記実行計画情報を生成し、前記演算実行部は、前記実行計画情報に含まれる前記タスク実行指示情報に基づいて、タスクに含まれる前記複数の演算を、当該演算に割り当てられたメモリ領域上で実行してもよい。
前記メモリ管理部は、前記第2クエリ処理装置において利用可能なメモリ領域のサイズと、前記第2クエリ処理装置において実行される演算の数とに基づいて、前記第2クエリ処理装置において実行される前記複数の演算のそれぞれにメモリ領域を割り当ててもよい。
前記メモリ管理部は、前記第2クエリ処理装置において利用可能なメモリ領域のサイズと、前記第2クエリ処理装置において実行される演算の数と、当該演算の内容とに基づいて、前記第2クエリ処理装置において実行される前記複数の演算のそれぞれにメモリ領域を割り当ててもよい。
前記メモリ管理部は、前記第2クエリ処理装置において利用可能なメモリ領域のサイズと、前記第2クエリ処理装置で実行されるタスクの数とに基づいて、複数のタスクのそれぞれに割り当てるメモリ領域のサイズを特定し、当該タスクに割り当てるメモリ領域のサイズと、当該タスクに含まれる演算の数とに基づいて、前記第2クエリ処理装置において実行される前記複数の演算のそれぞれにメモリ領域を割り当ててもよい。
前記クエリ計画部は、複数の前記タスクのうち、同一の演算を行うタスク群を特定し、当該タスク群に含まれる複数のタスクのそれぞれに割り当てられるメモリ領域のサイズに基づいて当該複数のタスクのそれぞれに入力されるデータの比率を特定し、当該データの比率に対応する情報を出力する演算を示す前記演算指示情報を、当該タスク群にデータを提供するタスクに挿入してもよい。
本発明の第2の態様に係るクエリ処理方法は、第1クエリ処理装置と、複数の第2クエリ処理装置とを備え、データベースに対応するクエリを処理するクエリ処理システムが実行するクエリ処理方法であって、前記第1クエリ処理装置が、前記クエリを取得するステップと、前記第1クエリ処理装置が、取得した前記クエリに基づいて前記複数の第2クエリ処理装置のそれぞれに実行させる複数の演算を特定し、当該演算の実行を指示する演算指示情報を含む実行計画情報を生成するステップと、前記複数の第2クエリ処理装置のそれぞれが、前記第2クエリ処理装置において実行される複数の演算のそれぞれにメモリ領域を割り当てるステップと、前記複数の第2クエリ処理装置のそれぞれが、前記実行計画情報に含まれる前記演算指示情報に基づいて、前記複数の演算のそれぞれを、当該演算に割り当てられたメモリ領域上で実行するステップと、前記複数の第2クエリ処理装置のそれぞれが、前記メモリ領域の利用状況に基づいて前記複数の演算のそれぞれに割り当てられているメモリ領域のサイズを動的に更新するステップと、前記第1クエリ処理装置が、前記複数の第2クエリ処理装置のそれぞれで実行された前記演算の結果に基づく前記クエリの実行結果を取得し、当該実行結果を出力するステップと、を有する。
本発明によれば、大規模データを対象とするクエリ処理を高速かつ確実に実行することができるという効果を奏する。
[仮想データベースシステムVDSの概要]
図1は、本実施形態に係る仮想データベースシステムVDSの構成を示す図である。仮想データベースシステムVDSは、クエリ処理システムSと、データベース31を物理的に格納する複数の記憶装置3と、ユーザ端末4とを備え、複数のデータベース31を仮想的に統合するシステムである。なお、図1において、ユーザ端末4は1台のみ示されているが、複数のユーザ端末4がクエリ処理システムSに接続されているものとする。
図1は、本実施形態に係る仮想データベースシステムVDSの構成を示す図である。仮想データベースシステムVDSは、クエリ処理システムSと、データベース31を物理的に格納する複数の記憶装置3と、ユーザ端末4とを備え、複数のデータベース31を仮想的に統合するシステムである。なお、図1において、ユーザ端末4は1台のみ示されているが、複数のユーザ端末4がクエリ処理システムSに接続されているものとする。
クエリ処理システムSは、ユーザ端末4からクエリを取得すると、当該クエリに対応する1以上のデータベース31を特定する。クエリ処理システムSは、当該クエリに基づいて、特定したデータベース31からデータを取得して演算を実行し、当該クエリに対応する実行結果をユーザ端末4に出力する。これにより、ユーザは、データベース31の物理的な位置を意識することなく複数のデータベース31に格納されているデータを参照することができる。
図2は、本実施形態に係るクエリ処理システムSの構成を示す図である。図2に示すように、クエリ処理システムSは、第1クエリ処理装置1と、複数の第2クエリ処理装置2とを備える。第1クエリ処理装置1は、コンピュータであり、LAN(Local Area Network)等を介して、ユーザ端末4と、複数の第2クエリ処理装置2とに通信可能に接続されている。第2クエリ処理装置2は、コンピュータであり、LAN等を介して、第1クエリ処理装置1と、複数の記憶装置3とに接続されている。
第1クエリ処理装置1は、ユーザ端末4からクエリを取得すると、取得したクエリに基づいて複数の第2クエリ処理装置2のそれぞれに実行させる複数の演算を特定する。第1クエリ処理装置1は、第2クエリ処理装置2に、特定した演算の実行を指示する。
複数の第2クエリ処理装置2のそれぞれは、自身が実行する複数の演算のそれぞれにメモリを割り当てる。複数の第2クエリ処理装置2のそれぞれは、データベース31又は他の第2クエリ処理装置2からデータを取得し、演算に割り当てられたメモリ上で、当該演算を実行する。複数の第2クエリ処理装置2のそれぞれは、メモリの利用状況に基づいて複数の演算のそれぞれに割り当てられるメモリの量を動的に更新する。
第1クエリ処理装置1は、複数の第2クエリ処理装置2のそれぞれで実行された演算の結果に基づくクエリの実行結果を取得し、当該実行結果をユーザ端末4に出力する。このように、クエリ処理システムSは、複数の第2クエリ処理装置2においてクエリに対応する演算を分散して実行し、さらに第2クエリ処理装置2において、演算に割り当てられるメモリの量を動的に変更することにより、大規模データを対象とするクエリ処理を高速かつ確実に実行することができる。
続いて、第1クエリ処理装置1と、第2クエリ処理装置2との構成について説明する。なお、以下の説明において、演算に割り当てられるメモリ領域をバッファともいう。また、以下の説明において、「バッファ管理部」を「メモリ管理部」と読み替えてもよい。
続いて、第1クエリ処理装置1と、第2クエリ処理装置2との構成について説明する。なお、以下の説明において、演算に割り当てられるメモリ領域をバッファともいう。また、以下の説明において、「バッファ管理部」を「メモリ管理部」と読み替えてもよい。
[第1クエリ処理装置1の構成例]
第1クエリ処理装置1は、図2に示すように、記憶部11と、制御部12とを備える。
記憶部11は、例えば、ROM(Read Only Memory)及びRAM(Random Access Memory)等である。記憶部11は、第1クエリ処理装置1を機能させるための各種プログラムを記憶する。例えば、記憶部11は、第1クエリ処理装置1の制御部12を、後述するクエリ取得部121、クエリ計画部122、及び出力部123として機能させる第1クエリ実行プログラムを記憶する。
第1クエリ処理装置1は、図2に示すように、記憶部11と、制御部12とを備える。
記憶部11は、例えば、ROM(Read Only Memory)及びRAM(Random Access Memory)等である。記憶部11は、第1クエリ処理装置1を機能させるための各種プログラムを記憶する。例えば、記憶部11は、第1クエリ処理装置1の制御部12を、後述するクエリ取得部121、クエリ計画部122、及び出力部123として機能させる第1クエリ実行プログラムを記憶する。
また、記憶部11は、演算実装情報111と、利用可能メモリ情報112とを記憶する。
演算実装情報111は、クエリが示す操作を実行するための複数の演算を示す演算情報と、演算に必要とされるバッファの種類とを関連付けた情報である。操作の種類は、例えば、射影、結合、グループ化等である。バッファの種類は、後述する出力バッファ、制御バッファ、及び共有バッファを示す情報である。
利用可能メモリ情報112は、複数の第2クエリ処理装置2のそれぞれにおいて利用可能なメモリ211のサイズを示す情報を記憶する。
演算実装情報111は、クエリが示す操作を実行するための複数の演算を示す演算情報と、演算に必要とされるバッファの種類とを関連付けた情報である。操作の種類は、例えば、射影、結合、グループ化等である。バッファの種類は、後述する出力バッファ、制御バッファ、及び共有バッファを示す情報である。
利用可能メモリ情報112は、複数の第2クエリ処理装置2のそれぞれにおいて利用可能なメモリ211のサイズを示す情報を記憶する。
制御部12は、例えばCPU(Central Processing Unit)である。制御部12は、記憶部11に記憶されている各種プログラムを実行することにより、第1クエリ処理装置1に係る機能を制御する。制御部12は、第1クエリ実行プログラムを実行することにより、クエリ取得部121、クエリ計画部122、及び出力部123として機能する。
クエリ取得部121は、ユーザ端末4から複数のデータベース31の少なくともいずれかに対応するクエリを取得する。
クエリ計画部122は、取得されたクエリに基づいて複数の第2クエリ処理装置2のそれぞれに実行させる複数の演算を特定し、特定した複数の演算の実行を指示する演算指示情報と、複数の演算の実行順序を示すツリー構造の順序情報と含む実行計画情報を生成する。
クエリ計画部122は、取得されたクエリに基づいて複数の第2クエリ処理装置2のそれぞれに実行させる複数の演算を特定し、特定した複数の演算の実行を指示する演算指示情報と、複数の演算の実行順序を示すツリー構造の順序情報と含む実行計画情報を生成する。
具体的には、クエリ計画部122は、以下の手順により実行計画情報を生成する。まず、クエリ計画部122は、取得されたクエリを解析し、クエリが示す1以上の操作の種類を特定する。クエリ計画部122は、特定した操作の種類に対応し、複数の演算の実行を指示する演算指示情報を含むタスクを特定することにより、取得されたクエリに対応する複数のタスクを生成する。ここで、タスクには、複数の演算の実行順序を示す順序情報と、複数の演算の実行を指示する演算指示情報とが含まれている。
クエリ計画部122は、生成したタスクの実行を指示するタスク実行指示情報を含む実行計画情報を生成する。クエリ計画部122は、タスクを実行する1以上の第2クエリ処理装置2のそれぞれに対応する実行計画情報を生成する。
また、クエリ計画部122は、タスクに含まれる複数の演算の内容及び実行順序と、演算実装情報111とに基づいて、複数の演算のそれぞれに割り当てられるバッファのサイズを示すバッファ情報をタスクごとに生成する。図3は、本実施形態に係る演算とバッファとの関係の一例を示す図である。
図3において、「op」は、タスクTに含まれている演算を示し、「B」はバッファを示している。「B」に対して大括弧で設けられている添え字は、バッファに関連する演算の実行順序に対応している。図3に示すように、バッファは複数の演算のそれぞれに割り当てられる。また、バッファには、出力バッファと、制御バッファと、共有バッファとが含まれている。
出力バッファは、演算の実行結果を示すデータを格納する。出力バッファは、当該演算の上流の演算に実行結果を示すデータを受け渡すために用いられる。
制御バッファは、演算を実行する途中で生成される中間結果を示すデータを格納するバッファである。制御バッファは、他の演算によって参照されないバッファである。また、制御バッファは、演算の種類によっては設けられないことがある。制御バッファの有無は、演算実装情報111において演算ごとに規定されている。例えば、結合演算の場合には、第1のテーブルのデータと、第2のテーブルのデータとの突合せを行うため、制御バッファが必要となる。また、射影演算のように、一時的にデータを保存する必要のない演算の場合には、制御バッファは不要となる。
制御バッファは、演算を実行する途中で生成される中間結果を示すデータを格納するバッファである。制御バッファは、他の演算によって参照されないバッファである。また、制御バッファは、演算の種類によっては設けられないことがある。制御バッファの有無は、演算実装情報111において演算ごとに規定されている。例えば、結合演算の場合には、第1のテーブルのデータと、第2のテーブルのデータとの突合せを行うため、制御バッファが必要となる。また、射影演算のように、一時的にデータを保存する必要のない演算の場合には、制御バッファは不要となる。
共有バッファは、タスクの実行結果を格納するバッファである。共有バッファは、他のタスク又は第1クエリ処理装置1が参照するバッファである。共有バッファには、タスクの実行結果を共有バッファに格納するOutput演算によって、データが格納される。Output演算は、タスクに含まれる複数の演算のうち最上流の演算として指定される。
第2クエリ処理装置2は、複数の演算のそれぞれについて、直前に実行される演算に割り当てられている出力バッファと、自身に割り当てられている制御バッファとからデータを取得して演算を実行する。第2クエリ処理装置2は、当該演算の実行結果を示すデータを、当該演算に割り当てられている出力バッファに格納する。
図3に示す例において、第2クエリ処理装置2は、演算op[i]を実行する場合に、直前に実行される演算op[i−1]に割り当てられているバッファB[i−1]を構成する出力バッファからデータを取得する。第2クエリ処理装置2は、演算op[i]が示す演算の内容に基づいて演算を実行する。第2クエリ処理装置2は、演算の途中で発生する中間結果を示すデータを、演算op[i]に割り当てられているバッファB[i]を構成する制御バッファに格納する。また、第2クエリ処理装置2は、演算op[i]の実行結果を示すデータを、バッファB[i]を構成する出力バッファに格納する。
また、タスクTには、データベース31に格納されているデータ、又は他のタスクの実行結果を示すデータを、他のタスクの共有バッファから取得するための演算としてのScan演算又はExchange演算が含まれている。Scan演算は、データベース31からデータを取得する演算である。Exchange演算は、他のタスクの共有バッファからデータを取得する演算である。これらの演算は、タスクに含まれる複数の演算のうち、最下流の演算として指定される。
図4は、本実施形態に係るクエリに対して生成された複数のタスクに含まれる演算とバッファとの関係の一例を示す図である。図4に示す例は、以下のクエリに対応しているものとする。
SELECT a.name, b.value
FROM a, b
WHERE a.id = b.id
SELECT a.name, b.value
FROM a, b
WHERE a.id = b.id
タスクT[0]は、テーブル「a」が格納されているデータベース31からデータを取得し、当該データを上流のタスクT[2]に受け渡すための共有バッファB[1]にデータを格納する。タスクT[1]は、テーブル「b」が格納されているデータベース31からデータを取得し、当該データを上流のタスクT[2]に受け渡すための共有バッファB[3]にデータを格納する。タスクT[2]は、タスクT[0]、T[1]のそれぞれの共有バッファB[1]、B[3]からデータを取得し、これらのデータの結合を行う。タスクT[2]は、結合結果を示すデータを第1クエリ処理装置1に受け渡すため共有バッファB[7]に当該データを格納する。
図2に説明を戻す。クエリ計画部122は、複数の第2クエリ処理装置2のそれぞれにおいて実行されるタスクの数を特定する。クエリ計画部122は、タスクの数と、利用可能メモリ情報112に含まれている第2クエリ処理装置2において利用可能なメモリ211のサイズを示す情報とに基づいて、複数のタスクのそれぞれに割り当てるメモリのサイズを特定する。例えば、クエリ計画部122は、利用可能なメモリのサイズを、タスクの数で除算することによって、複数のタスクのそれぞれに割り当てるメモリのサイズを特定する。
クエリ計画部122は、複数のタスクのそれぞれについて、特定されたメモリのサイズと、タスクに含まれる複数の演算の数とに基づいて、複数の演算のバッファサイズを特定する。クエリ計画部122は、演算に出力バッファ及び制御バッファが割り当てられる場合、例えば、演算に対応するバッファサイズの半分のサイズを、当該出力バッファ及び制御バッファのサイズとする。クエリ計画部122は、特定したバッファサイズを示す情報を含むバッファ情報を生成する。
ここで、クエリ計画部122は、第2クエリ処理装置2において利用可能なバッファのサイズと、第2クエリ処理装置2において実行される演算の数と、当該演算の内容とに基づいて、第2クエリ処理装置2において実行される複数の演算のそれぞれに割り当てるバッファのサイズを特定してもよい。このようにすることで、第1クエリ処理装置1は、第2クエリ処理装置2に、例えば、データの参照量や参照回数が多い演算に対して、相対的に多くのバッファを割り当てさせることができる。
なお、クエリ計画部122は、複数のタスクを生成する際に、相対的に処理負荷が大きいデータ操作については、複数のタスクを生成する。そして、クエリ計画部122は、複数の第2クエリ処理装置2に当該複数のタスクを並列して実行させることによって、分散処理を行わせる。
図4に示す例では、タスクT[2]は、テーブルの結合に係る処理であり、処理負荷が大きいことから、クエリ計画部122は、タスクT[2]を複数生成し、複数の第2クエリ処理装置2において分散処理させる。クエリ計画部122は、バッファ情報を生成した後、複数のタスクのうち、同一の演算を行うタスク群を特定する。クエリ計画部122は、生成したバッファ情報に基づいて、当該タスク群に含まれる複数のタスクT[2]のそれぞれに割り当てられるバッファのサイズを特定する。クエリ計画部122は、特定したサイズに基づいて当該複数のタスクのそれぞれに入力されるデータの比率を特定し、当該データの比率に対応する情報を出力する演算を示す演算指示情報を、当該タスク群にデータを提供するタスクに挿入する。
例えば、第2クエリ処理装置2として、3台の第2クエリ処理装置2(第2クエリ処理装置2A、第2クエリ処理装置2B、第2クエリ処理装置2C)が存在し、それぞれにおける利用可能なメモリのサイズが30GBであるものとする。クエリ計画部122は、図4に対応するクエリを実行する場合、第2クエリ処理装置2AにタスクT[0]とT[2]とを実行させ、第2クエリ処理装置2BにT[1]とT[2]とを実行させ、第2クエリ処理装置2Cが、T[2]を実行させるものとする。
さらに、クエリ計画部122は、それぞれの第2クエリ処理装置2において利用可能なメモリのサイズを、実行するタスクの数で除算することにより、バッファのサイズを特定する。ここで、クエリ計画部122は、第2クエリ処理装置2A、第2クエリ処理装置2Bが実行するT[2]のバッファのサイズを15GB、第2クエリ処理装置2Cが実行するT[2]のバッファのサイズを30GBとする。この場合において、バッファのサイズの比率は、1:1:2となる。
T[0]及びT[1]においてハッシュ化するデータが一様に分布すると仮定すると、クエリ計画部122は、3台の第2クエリ処理装置2におけるバッファのサイズの比率に対応するようにハッシュ値を生成するハッシュ関数を生成する。例えば、クエリ計画部122は、ハッシュ値として0、1、2、3を生成するハッシュ関数を生成し、当該ハッシュ関数をT[0]及びT[1]におけるOutput演算に挿入する。タスクT[1]、タスクT[0]を実行する第2クエリ処理装置2A、2Bは、Output演算において、複数のタスクT[2]にデータを振り分けるために、ハッシュ関数によって、取得したデータのハッシュ値を生成する。第2クエリ処理装置2A、2Bは、取得したデータとハッシュ値とを関連付けて共有バッファに記憶させる。
そして、クエリ計画部122は、第2クエリ処理装置2AがタスクT[2]を実行する際に、タスクT[0]、T[1]から、ハッシュ値「0」に関連付けられているデータを取得するものとする。また、クエリ計画部122は、第2クエリ処理装置2BがタスクT[2]を実行する際に、タスクT[0]、T[1]から、ハッシュ値「2」に関連付けられているデータを取得するものとする。また、クエリ計画部122は、第2クエリ処理装置2CがタスクT[2]を実行する際に、タスクT[0]、T[1]から、ハッシュ値「1」、[3]に関連付けられているデータを取得するものとする。このようにすることで、第1クエリ処理装置1は、処理負荷が大きいタスクT[2]を複数の第2クエリ処理装置2に分散実行させて実行結果を高速に取得することができる。
図2に説明を戻す。クエリ計画部122は、生成した実行計画情報と、バッファ情報とを、タスクを実行する1以上の第2クエリ処理装置2に送信する。
出力部123は、複数の第2クエリ処理装置2のそれぞれで実行された演算の結果に基づくクエリの実行結果を取得し、当該実行結果をユーザ端末4に出力する。図4に示す例では、出力部123は、複数の第2クエリ処理装置2において実行される複数のタスクT[2]の共有バッファから実行結果を示すデータを取得し、これらのデータをユーザ端末4に出力する。
出力部123は、複数の第2クエリ処理装置2のそれぞれで実行された演算の結果に基づくクエリの実行結果を取得し、当該実行結果をユーザ端末4に出力する。図4に示す例では、出力部123は、複数の第2クエリ処理装置2において実行される複数のタスクT[2]の共有バッファから実行結果を示すデータを取得し、これらのデータをユーザ端末4に出力する。
[第2クエリ処理装置2の構成例]
第2クエリ処理装置2は、図2に示すように、記憶部21と、制御部22とを備える。
記憶部21は、例えば、ROM及びRAM等である。記憶部21は、メモリ211と、データストレージ212とを備える。メモリ211は、演算に対応するデータを一時的に記憶する。データストレージ212は、例えばハードディスクであり、演算に対応するデータのうち、メモリ211の記憶容量の上限を超えるデータを一時的に記憶する。メモリ211へのデータの書込速度及び読取速度は、データストレージ212へのデータの書込速度及び読取速度に比べて速いものとする。
第2クエリ処理装置2は、図2に示すように、記憶部21と、制御部22とを備える。
記憶部21は、例えば、ROM及びRAM等である。記憶部21は、メモリ211と、データストレージ212とを備える。メモリ211は、演算に対応するデータを一時的に記憶する。データストレージ212は、例えばハードディスクであり、演算に対応するデータのうち、メモリ211の記憶容量の上限を超えるデータを一時的に記憶する。メモリ211へのデータの書込速度及び読取速度は、データストレージ212へのデータの書込速度及び読取速度に比べて速いものとする。
記憶部21は、第2クエリ処理装置2を機能させるための各種プログラムを記憶する。例えば、記憶部21は、第2クエリ処理装置2の制御部22を、後述するバッファ管理部221及び演算実行部222として機能させる第2クエリ実行プログラムを記憶する。
制御部22は、例えばCPUである。制御部22は、記憶部21に記憶されている各種プログラムを実行することにより、第2クエリ処理装置2に係る機能を制御する。制御部22は、第2クエリ実行プログラムを実行することにより、バッファ管理部221及び演算実行部222として機能する。
バッファ管理部221は、第2クエリ処理装置2において実行される複数の演算のそれぞれにバッファを割り当てるとともに、当該バッファの利用状況に基づいて複数の演算のそれぞれに割り当てられているバッファのサイズを動的に更新する。
まず、バッファ管理部221は、初期処理として、第1クエリ処理装置1から取得したバッファ情報に基づいて、実行される複数のタスクのそれぞれにバッファを割り当てる。具体的には、バッファ管理部221は、第1クエリ処理装置1から取得したバッファ情報を記憶部21に記憶させる。バッファ管理部221は、記憶部21に記憶されているバッファ情報に基づいて、第2クエリ処理装置2において実行されるタスクに含まれている複数の演算のそれぞれにバッファを割り当てる。
すなわち、バッファ管理部221は、第1クエリ処理装置1から取得したバッファ情報に基づいて、第2クエリ処理装置2において実行されるタスクの数と、第2クエリ処理装置2において利用可能なバッファのサイズとに対応する、複数のタスクのそれぞれに割り当てるバッファのサイズを特定する。バッファ管理部221は、第2クエリ処理装置2において実行される複数の演算のそれぞれに、タスクに割り当てるバッファのサイズと、当該タスクに含まれる演算の数とに基づいて算出されたサイズのバッファを割り当てる。
また、バッファ管理部221は、演算実行部222が実行中の演算に割り当てられているバッファの利用状況を特定する。例えば、バッファ管理部221は、選択した演算に対応するバッファの利用状況を示す情報を演算実行部222から取得する。バッファの利用状況を示す情報には、入力元のバッファのサイズと、当該バッファに格納されているデータのサイズと、出力先のバッファのサイズと、当該バッファに格納されているデータのサイズとを示す情報が含まれている。
バッファ管理部221は、入力元のバッファのサイズから、当該バッファに格納されているデータのサイズを減算することにより、入力元のバッファの空き領域のサイズを特定する。ここで、入力元のバッファは、直下の演算に割り当てられている出力バッファ、又は実行中の演算に割り当てられている制御バッファである。また、バッファ管理部221は、出力先のバッファのサイズから、当該バッファに格納されているデータのサイズを減算することにより、出力先のバッファの空き領域のサイズを特定する。ここで、出力先のバッファは、実行中の演算の出力バッファ、制御バッファ、又は共有バッファである。バッファ管理部221は、空き領域のサイズを特定したことに応じて、実行中の演算と、直下の演算とに対応するバッファのバッファ情報を更新する。
また、バッファ管理部221は、タスクに含まれる複数の演算のそれぞれについて、処理が完了しているか否かを示す処理完了フラグ、制御バッファへのデータの格納が完了しているか否かを示す格納完了フラグを取得することにより、タスクに含まれる複数の演算の完了状況を示す情報を更新する。
演算実行部222が実行中の演算に割り当てられている複数のバッファのいずれかにおいて全ての領域が利用されており、演算実行部222が当該実行中の演算において新たに当該メモリを利用する場合、バッファ管理部221は、演算実行部222からバッファの増加依頼を受け付ける。
バッファ管理部221は、演算実行部222が実行中の演算において新たにメモリ領域を利用する場合に、複数の演算に割り当てられているバッファのうち、利用されていないバッファを解放するとともに、当該実行中の演算に対してメモリ領域を新たに割り当てる。例えば、バッファ管理部221は、演算の実行順序に基づいて実行中の演算の下位の演算を特定し、当該下位の演算に割り当てられているバッファの利用状況に基づいて、当該下位の演算に割り当てられているバッファを解放するとともに、実行中の演算に対してバッファを新たに割り当てる。バッファ管理部221は、演算実行部222が当該実行中の演算において新たに当該バッファを利用する場合に、下位の演算のうち、実行が完了している演算に割り当てられているバッファを解放するとともに、当該実行中の演算に対して、解放されたバッファを新たに割り当てる。
図5は、本実施形態に係るバッファの増加依頼を受け付けた場合におけるバッファ管理部221の処理の流れを示す図である。なお、以下の説明において、増加依頼に対応するバッファを、増加対象バッファという。
まず、バッファ管理部221は、実行中の演算を含んでいるタスクに割り当てられているバッファから空き領域を探索する(S10)。バッファ管理部221は、複数の演算の完了状況を示す情報に基づいて、演算実行部222による処理が完了しているバッファ(出力バッファ、制御バッファ及び共有バッファ)の未使用領域を空き領域として探索する。
まず、バッファ管理部221は、実行中の演算を含んでいるタスクに割り当てられているバッファから空き領域を探索する(S10)。バッファ管理部221は、複数の演算の完了状況を示す情報に基づいて、演算実行部222による処理が完了しているバッファ(出力バッファ、制御バッファ及び共有バッファ)の未使用領域を空き領域として探索する。
例えば、バッファ管理部221は、増加対象バッファが出力バッファの場合、実行中の演算に割り当てられている制御バッファの未使用領域を空き領域として探索する。この場合、バッファ管理部221は、制御バッファへのデータの格納が完了している場合に、当該制御バッファの未使用領域を空き領域として探索する。
また、バッファ管理部221は、増加対象バッファが制御バッファの場合、実行中の演算に割り当てられている出力バッファの未使用領域を空き領域として探索する。この場合、当該出力バッファは、まだ利用される可能性がある。このため、バッファ管理部221は、全ての領域を増加対象バッファに割り当てないように、出力バッファのサイズの所定割合のサイズを空き領域のサイズとして算出する。例えば、バッファ管理部221は、出力バッファの未使用領域の半分を空き領域として探索する。
また、バッファ管理部221は、演算の実行順序に基づいて、実行中の演算の下位の演算に割り当てられ、当該下位の演算によるデータの格納が完了している制御バッファの未使用領域を空き領域として探索する。
また、バッファ管理部221は、演算の実行順序に基づいて、実行中の演算の下位の演算に割り当てられているバッファの未使用領域を空き領域として探索する。この場合、当該バッファには新たにデータが格納される可能性がある。このため、バッファ管理部221は、当該バッファのサイズの所定割合のサイズを空き領域のサイズとして算出する。例えば、バッファ管理部221は、当該バッファの未使用領域の半分を空き領域として探索する。
また、バッファ管理部221は、演算実行部222による処理が完了しているタスクに対応するバッファを空き領域として探索してもよい。
また、バッファ管理部221は、演算実行部222による処理が完了しているタスクに対応するバッファを空き領域として探索してもよい。
続いて、バッファ管理部221は、空き領域が探索できたか否かを判定する(S20)。バッファ管理部221は、空き領域が探索できたと判定すると、S30に処理を移す。S30において、バッファ管理部221は、探索された空き領域を解放するとともに、増加対象バッファに対して当該空き領域を割り当てる。
バッファ管理部221は、S20において空き領域が探索できなかったと判定すると、増加対象バッファが制御バッファであるか否かを判定する(S40)。バッファ管理部221は、増加対象バッファが制御バッファであると判定すると、S50に処理を移す。S50において、バッファ管理部221は、増加対象バッファに対してデータストレージ212の領域を割り当てる。
バッファ管理部221は、S30又はS50において増加対象バッファに領域を割り当てた後、バッファ情報を更新し、更新後のバッファ情報を演算実行部222に通知する(S60)。
また、バッファ管理部221は、S40において、増加対象バッファが制御バッファではなく、出力バッファ又は共有バッファであると判定すると、増加不可を示す情報を演算実行部222に通知する(S70)。出力バッファと共有バッファとのバッファのサイズを増加させなくても第2クエリ処理装置2における処理が止まることはないため、バッファ管理部221は、相対的に読取速度及び書込速度が遅いデータストレージ212の領域を付与しない。
また、バッファ管理部221は、S40において、増加対象バッファが制御バッファではなく、出力バッファ又は共有バッファであると判定すると、増加不可を示す情報を演算実行部222に通知する(S70)。出力バッファと共有バッファとのバッファのサイズを増加させなくても第2クエリ処理装置2における処理が止まることはないため、バッファ管理部221は、相対的に読取速度及び書込速度が遅いデータストレージ212の領域を付与しない。
図2に説明を戻す。演算実行部222は、実行計画情報に含まれるタスク指示情報に基づいて、複数のタスクのそれぞれに含まれる複数の演算を特定する。演算実行部222は、タスクに含まれる複数の演算のそれぞれを、当該演算に割り当てられたバッファ上で実行する。
具体的には、演算実行部222は、実行計画情報に含まれている1以上のタスク実行指示情報を特定する。そして、演算実行部222は、タスク実行指示情報に含まれる順序情報と、演算指示情報と、演算指示情報に対応する演算に対して割り当てられているバッファの利用状況とに基づいて、最上位の演算から順に要求駆動方式に従った演算を実行する。
図6は、本実施形態に係る演算実行部222が実行する処理の流れを示すフローチャートである。図6に示すように、演算実行部222は、第1クエリ処理装置1から実行計画情報を取得する(S110)。
続いて、演算実行部222は、実行計画情報に基づいて、実行対象の複数の演算のうち、最上位の演算を選択する(S120)。ここで、最上位の演算は原則としてOutput演算である。
続いて、演算実行部222は、選択した演算と直下の演算とのバッファ情報を取得する(S130)。なお、演算実行部222は、後述するS260から遷移した結果、Scan演算を選択した場合には、直下の演算が存在しないことから、直下の演算のバッファ情報を取得しない。
続いて、演算実行部222は、実行計画情報に基づいて、実行対象の複数の演算のうち、最上位の演算を選択する(S120)。ここで、最上位の演算は原則としてOutput演算である。
続いて、演算実行部222は、選択した演算と直下の演算とのバッファ情報を取得する(S130)。なお、演算実行部222は、後述するS260から遷移した結果、Scan演算を選択した場合には、直下の演算が存在しないことから、直下の演算のバッファ情報を取得しない。
続いて、演算実行部222は、取得したバッファ情報に基づいて、選択した演算を実行可能か否かを判定する(S140)。例えば、演算実行部222は、出力先の出力バッファ又は共有バッファに格納されているデータのサイズが、これらのバッファのサイズの上限未満の場合に、以下の第1条件から第3条件のいずれかを満たす場合に、選択した演算を実行可能と判定する。第1条件は、入力元の出力バッファにデータが格納されていることである。第2条件は、入力元のデータベース31に未取得のデータが存在していることである。第3条件は、入力元の他のタスクの共有バッファに未取得のデータが存在していることである。ここで、出力先の出力バッファは、選択した演算に割り当てられているバッファであり、入力元の出力バッファは、選択した演算の直下の演算に割り当てられている出力バッファである。
演算実行部222は、選択した演算を実行可能と判定すると、S160に処理を移す。また、演算実行部222は、選択した演算を実行不可能と判定すると、S150に処理を移す。演算実行部222は、S150において実行対象の演算を直下の演算に移行させ、その後、S130に処理を移す。
S160において、演算実行部222は、選択した演算を実行する。具体的には、演算実行部222は、演算の種類に対応する処理を実行する。演算実行部222は、直下の演算に割り当てられている出力バッファからデータを取得し、演算の種類に対応する処理を実行し、演算結果を、選択した演算に割り当てられている出力バッファに格納する。ここで、選択した演算に制御バッファが割り当てられている場合には、演算を実行する途中で生成される中間結果を示すデータを制御バッファに格納する。演算実行部222は、選択した演算に割り当てられている出力バッファに、出力バッファのサイズ分のデータが格納されるか、直下の演算に割り当てられている出力バッファが空になるかのいずれかを満たすまで、演算の実行を継続する。演算実行部222は、選択した演算の実行が中断又は終了すると、選択した演算に対応するバッファの利用状況を示す情報をバッファ管理部221に通知する。
続いて、演算実行部222は、選択した演算の実行後における、選択した演算と直下の演算とのバッファ情報を取得する(S170)。
続いて、演算実行部222は、S170において取得したバッファ情報に基づいて、選択した演算の制御バッファのサイズ、選択した演算の出力先の共有バッファのサイズ、直下の演算の出力バッファのサイズとの少なくともいずれかを増加させるか否かを判定する(S180)。
続いて、演算実行部222は、S170において取得したバッファ情報に基づいて、選択した演算の制御バッファのサイズ、選択した演算の出力先の共有バッファのサイズ、直下の演算の出力バッファのサイズとの少なくともいずれかを増加させるか否かを判定する(S180)。
具体的には、演算実行部222は、選択した演算に割り当てられている制御バッファに、当該制御バッファのサイズ分のデータが格納されているとともに、直下の演算に割り当てられている出力バッファにデータが格納されている場合に、当該制御バッファのサイズを増加させると判定する。
また、演算実行部222は、選択した演算に対応する共有バッファに、当該共有バッファのサイズ分のデータが格納されているとともに、直下の演算に割り当てられている出力バッファにデータが格納されている場合に、当該共有バッファのサイズを増加させると判定する。
また、演算実行部222は、選択した演算の出力先のバッファ(出力バッファ、制御バッファ、又は共有バッファ)に、当該バッファのサイズ分のデータが格納されておらず、直下の演算の実行が終了しておらず、入力元が別のタスクの共有バッファではない場合、直下の演算の出力バッファを増量させると判定する。
演算実行部222は、バッファのサイズを増加させると判定すると、S190に処理を移し、バッファのサイズを増加させないと判定すると、S230に処理を移す。
演算実行部222は、バッファのサイズを増加させると判定すると、S190に処理を移し、バッファのサイズを増加させないと判定すると、S230に処理を移す。
演算実行部222は、S180において増加すると判定されたバッファについて、バッファ管理部221にバッファの増加を依頼し、バッファ管理部221から、当該依頼に対応する結果を示す情報を取得する(S190)。依頼に対応する結果を示す情報は、図5のS70に対応する増加不可を示す情報、又は図5のS60に対応するバッファ情報のいずれかである。
続いて、演算実行部222は、バッファの増加を依頼した結果、選択した演算に割り当てられている制御バッファが増加したか否かを判定する(S200)。バッファ管理部221は、制御バッファが増加したと判定すると、S160に処理を移し、選択した演算の実行を行わせる。
S210において、演算実行部222は、バッファの増加を依頼した結果、選択した演算に対応する共有バッファ、又は選択した演算の直下の演算に割り当てられている出力バッファのいずれかが増加したか否かを判定する。演算実行部222は、共有バッファ又は出力バッファが増加したと判定すると、S250に処理を移し、共有バッファ及び出力バッファが増加していないと判定すると、S220に処理を移す。
演算実行部222は、実行対象の演算を直上の演算に移行させ、その後、S130に処理を移す(S220)。
演算実行部222は、実行対象の演算を直上の演算に移行させ、その後、S130に処理を移す(S220)。
S230において、演算実行部222は、選択した演算を終了させるか否かを判定する。具体的には、演算実行部222は、選択した演算がデータを取得できず、制御バッファからデータを取得できない場合に、選択した演算を終了させると判定する。ここで、選択した演算がデータを取得できない場合とは、データの取得元となる直下の演算が終了しているとともに直下の演算に割り当てられている出力バッファが空である場合、又はデータの取得元がデータベース31であるとともに、データベース31から読み込んでいないデータが存在しない場合のいずれかである。演算実行部222は、選択した演算を終了させると判定すると、S240に処理を移し、選択した演算を終了させないと判定すると、S250に処理を移す。
S240において、演算実行部222は、最上位の演算、すなわち、Output演算が終了したか否かを判定する。演算実行部222は、最上位の演算が終了したと判定すると、本フローチャートに係る処理を終了し、最上位の演算が終了していないと判定すると、S250に処理を移す。
なお、演算実行部222は、選択した演算の直下の演算の処理が完了している場合には、選択した演算の処理が完了したと判定し、選択した演算の処理が完了した旨を示す処理完了フラグをバッファ管理部221に通知する。また、演算実行部222は、選択した演算に制御バッファが割り当てられている場合において、選択した演算の直下の演算の処理が完了しているとともに制御バッファが空である場合には、制御バッファの利用が完了した旨を示す格納完了フラグをバッファ管理部221に通知する。また、演算実行部222は、選択した演算がScan演算であり、データベース31から読み込んでいないデータが存在しない場合には、Scan演算の処理が完了したと判定し、完了した旨を示す処理完了フラグをバッファ管理部221に通知する。
S250において、演算実行部222は、直上の演算に移行可能か否かを判定する。演算実行部222は、以下の第1条件から第3条件の少なくともいずれかを満たす場合、直上の演算に移行可能と判定する。第1条件は、選択した演算がExchange演算であることである。第2条件は、選択した演算に割り当てられている出力バッファに格納されているデータのサイズが当該バッファのサイズの上限であることである。第3条件は、直下の演算が終了しているとともに、直下の演算に割り当てられている出力バッファが空であることである。演算実行部222は、直上の演算に移行可能と判定すると、S220に処理を移し、実行対象の演算を直上の演算に移行させる。また、演算実行部222は、直上の演算に移行可能ではないと判定すると、S260に処理を移し、実行対象の演算を直下の演算に移行させる。
[本実施形態における効果]
以上のとおり、本実施形態に係るクエリ処理システムSでは、第1クエリ処理装置1が、取得したクエリに基づいて複数の第2クエリ処理装置2のそれぞれに実行させる複数の演算を特定し、当該演算の実行を指示する演算指示情報を含む実行計画情報を生成し、複数の第2クエリ処理装置2のそれぞれが、第2クエリ処理装置2において実行される複数の演算のそれぞれにバッファを割り当て、実行計画情報に含まれる演算指示情報に基づいて、複数の演算のそれぞれを、当該演算に割り当てられたバッファ上で実行し、当該バッファの利用状況に基づいて複数の演算のそれぞれに割り当てられているバッファの量を動的に更新する。
以上のとおり、本実施形態に係るクエリ処理システムSでは、第1クエリ処理装置1が、取得したクエリに基づいて複数の第2クエリ処理装置2のそれぞれに実行させる複数の演算を特定し、当該演算の実行を指示する演算指示情報を含む実行計画情報を生成し、複数の第2クエリ処理装置2のそれぞれが、第2クエリ処理装置2において実行される複数の演算のそれぞれにバッファを割り当て、実行計画情報に含まれる演算指示情報に基づいて、複数の演算のそれぞれを、当該演算に割り当てられたバッファ上で実行し、当該バッファの利用状況に基づいて複数の演算のそれぞれに割り当てられているバッファの量を動的に更新する。
このようにすることで、クエリ処理システムSは、第2クエリ処理装置2が演算に割り当てられるメモリの量を動的に変更することにより、大規模データを対象とするクエリ処理を高速かつ確実に実行することができる。また、クエリ処理システムSは、タスクのそれぞれに割り当てるバッファのサイズの比率を変えることにより、分散処理の並列性を向上させて、クエリ処理を高速に実行することができる。
また、第2クエリ処理装置2は、演算に対して割り当てられているバッファの利用状況に基づいて、最上位の演算から順に要求駆動方式に従った演算を実行し、実行中の演算において新たにバッファを利用する場合に、当該演算の下位の演算を特定し、当該下位の演算に割り当てられているバッファの利用状況に基づいて、当該下位の演算に割り当てられているバッファの空き領域を解放するとともに、当該実行中の演算に対して当該バッファの空き領域を新たに割り当てる。このようにすることで、第2クエリ処理装置2は、演算の切替を最小限にすることができる。また、第2クエリ処理装置2は、バッファの再利用を行うことにより、データストレージ212の利用を最小限にして、クエリの実行を高速化することができる。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更又は改良を加えることが可能であることが当業者に明らかである。例えば、上述の複数の実施形態を組み合わせてもよい。また、特に、装置の分散・統合の具体的な実施形態は以上に図示するものに限られず、その全部又は一部について、種々の付加等に応じて、又は、機能負荷に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、第1クエリ処理装置1が、バッファ情報を生成することとしたが、これに限らず、バッファ情報を生成するサーバが別途設けられていてもよい。また、本実施形態では、仮想データベースシステムVDSにおいて、クエリ処理システムSが、記憶装置3に記憶されているデータベース31からデータを取得して演算を実行し、当該クエリに対応する実行結果をユーザ端末4に出力したが、クエリ処理システムSを、一般的な分散データベースに適用してもよい。この場合、第2クエリ処理装置2のデータストレージ212に、処理対象のデータベース31が含まれていてもよい。
1・・・第1クエリ処理装置、11・・・記憶部、12・・・制御部、121・・・クエリ取得部、122・・・クエリ計画部、123・・・出力部、2・・・第2クエリ処理装置、21・・・記憶部、22・・・制御部、221・・・バッファ管理部、222・・・演算実行部、3・・・記憶装置、31・・・データベース、4・・・ユーザ端末、S・・・クエリ処理システム、VDS・・・仮想データベースシステム
Claims (10)
- 第1クエリ処理装置と、複数の第2クエリ処理装置とを備え、データベースに対応するクエリを処理するクエリ処理システムであって、
前記第1クエリ処理装置は、
前記クエリを取得するクエリ取得部と、
取得した前記クエリに基づいて前記複数の第2クエリ処理装置のそれぞれに実行させる複数の演算を特定し、当該演算の実行を指示する演算指示情報を含む実行計画情報を生成するクエリ計画部と、
前記複数の第2クエリ処理装置のそれぞれで実行された前記演算の結果に基づく前記クエリの実行結果を取得し、当該実行結果を出力する出力部とを有し、
前記複数の第2クエリ処理装置のそれぞれは、
前記第2クエリ処理装置において実行される複数の演算のそれぞれにメモリ領域を割り当てるとともに、当該メモリ領域の利用状況に基づいて前記複数の演算のそれぞれに割り当てられているメモリ領域のサイズを動的に更新するメモリ管理部と、
前記実行計画情報に含まれる前記演算指示情報に基づいて、前記複数の演算のそれぞれを、当該演算に割り当てられたメモリ領域上で実行する演算実行部とを有する、
クエリ処理システム。 - 前記メモリ管理部は、前記演算実行部が実行中の演算において新たにメモリ領域を利用する場合に、複数の演算に割り当てられているメモリ領域のうち、利用されていないメモリ領域を解放するとともに、当該実行中の演算に対してメモリ領域を新たに割り当てる、
請求項1に記載のクエリ処理システム。 - 前記クエリ計画部は、演算の実行順序を示す順序情報を含む前記実行計画情報を生成し、
前記演算実行部は、前記順序情報と、前記演算指示情報と、前記演算指示情報に対応する演算に対して割り当てられているメモリ領域の利用状況とに基づいて、最上位の演算から順に要求駆動方式に従った演算を実行し、
前記メモリ管理部は、前記演算実行部が実行中の演算において新たにメモリ領域を利用する場合に、前記実行順序に基づいて当該演算の下位の演算を特定し、当該下位の演算に割り当てられているメモリ領域の利用状況に基づいて、当該下位の演算に割り当てられているメモリ領域を解放するとともに、当該実行中の演算に対してメモリ領域を新たに割り当てる、
請求項1又は2に記載のクエリ処理システム。 - 前記メモリ管理部は、前記演算実行部が当該実行中の演算において新たにメモリ領域を利用する場合に、前記下位の演算のうち、実行が完了している演算に割り当てられているメモリ領域を解放するとともに、当該実行中の演算に対して当該メモリ領域を新たに割り当てる、
請求項3に記載のクエリ処理システム。 - 前記クエリ計画部は、取得した前記クエリに基づいて複数の演算指示情報を含むタスクを生成し、当該タスクの実行を指示するタスク実行指示情報を含む前記実行計画情報を生成し、
前記演算実行部は、前記実行計画情報に含まれる前記タスク実行指示情報に基づいて、タスクに含まれる前記複数の演算を、当該演算に割り当てられたメモリ領域上で実行する、
請求項1から4のいずれか1項に記載のクエリ処理システム。 - 前記メモリ管理部は、前記第2クエリ処理装置において利用可能なメモリ領域のサイズと、前記第2クエリ処理装置において実行される演算の数とに基づいて、前記第2クエリ処理装置において実行される前記複数の演算のそれぞれにメモリ領域を割り当てる、
請求項5に記載のクエリ処理システム。 - 前記メモリ管理部は、前記第2クエリ処理装置において利用可能なメモリ領域のサイズと、前記第2クエリ処理装置において実行される演算の数と、当該演算の内容とに基づいて、前記第2クエリ処理装置において実行される前記複数の演算のそれぞれにメモリ領域を割り当てる、
請求項6に記載のクエリ処理システム。 - 前記メモリ管理部は、前記第2クエリ処理装置において利用可能なメモリ領域のサイズと、前記第2クエリ処理装置で実行されるタスクの数とに基づいて、複数のタスクのそれぞれに割り当てるメモリ領域のサイズを特定し、当該タスクに割り当てるメモリ領域のサイズと、当該タスクに含まれる演算の数とに基づいて、前記第2クエリ処理装置において実行される前記複数の演算のそれぞれにメモリ領域を割り当てる、
請求項5から7のいずれか1項に記載のクエリ処理システム。 - 前記クエリ計画部は、複数の前記タスクのうち、同一の演算を行うタスク群を特定し、当該タスク群に含まれる複数のタスクのそれぞれに割り当てられるメモリ領域のサイズに基づいて当該複数のタスクのそれぞれに入力されるデータの比率を特定し、当該データの比率に対応する情報を出力する演算を示す前記演算指示情報を、当該タスク群にデータを提供するタスクに挿入する、
請求項8に記載のクエリ処理システム。 - 第1クエリ処理装置と、複数の第2クエリ処理装置とを備え、データベースに対応するクエリを処理するクエリ処理システムが実行するクエリ処理方法であって、
前記第1クエリ処理装置が、前記クエリを取得するステップと、
前記第1クエリ処理装置が、取得した前記クエリに基づいて前記複数の第2クエリ処理装置のそれぞれに実行させる複数の演算を特定し、当該演算の実行を指示する演算指示情報を含む実行計画情報を生成するステップと、
前記複数の第2クエリ処理装置のそれぞれが、前記第2クエリ処理装置において実行される複数の演算のそれぞれにメモリ領域を割り当てるステップと、
前記複数の第2クエリ処理装置のそれぞれが、前記実行計画情報に含まれる前記演算指示情報に基づいて、前記複数の演算のそれぞれを、当該演算に割り当てられたメモリ領域上で実行するステップと、
前記複数の第2クエリ処理装置のそれぞれが、前記メモリ領域の利用状況に基づいて前記複数の演算のそれぞれに割り当てられているメモリ領域のサイズを動的に更新するステップと、
前記第1クエリ処理装置が、前記複数の第2クエリ処理装置のそれぞれで実行された前記演算の結果に基づく前記クエリの実行結果を取得し、当該実行結果を出力するステップと、
を有するクエリ処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016246872A JP6619724B2 (ja) | 2016-12-20 | 2016-12-20 | クエリ処理システム及びクエリ処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016246872A JP6619724B2 (ja) | 2016-12-20 | 2016-12-20 | クエリ処理システム及びクエリ処理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2018101280A JP2018101280A (ja) | 2018-06-28 |
JP6619724B2 true JP6619724B2 (ja) | 2019-12-11 |
Family
ID=62714381
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016246872A Active JP6619724B2 (ja) | 2016-12-20 | 2016-12-20 | クエリ処理システム及びクエリ処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6619724B2 (ja) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10240753A (ja) * | 1997-02-26 | 1998-09-11 | Hitachi Ltd | データベース管理システムおよびそれに用いられる記憶媒体 |
WO2010098034A1 (ja) * | 2009-02-24 | 2010-09-02 | 日本電気株式会社 | 分散データベース管理システムおよび分散データベース管理方法 |
JP6401617B2 (ja) * | 2015-01-07 | 2018-10-10 | Kddi株式会社 | データ処理装置、データ処理方法及び大規模データ処理プログラム |
-
2016
- 2016-12-20 JP JP2016246872A patent/JP6619724B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2018101280A (ja) | 2018-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11238061B2 (en) | Adaptive distribution method for hash operations | |
US10394847B2 (en) | Processing data in a distributed database across a plurality of clusters | |
CN109075994B (zh) | 多集群仓库 | |
JP5929196B2 (ja) | 分散処理管理サーバ、分散システム、分散処理管理プログラム及び分散処理管理方法 | |
JP2014123365A (ja) | MapReduceフレームワークにおけるデータ処理の最適化のためのデバイスおよび方法 | |
US20210049146A1 (en) | Reconfigurable distributed processing | |
JP2005196602A (ja) | 無共有型データベース管理システムにおけるシステム構成変更方法 | |
US20170228422A1 (en) | Flexible task scheduler for multiple parallel processing of database data | |
TWI605340B (zh) | 用於s列表分配之系統與方法 | |
WO2017185285A1 (zh) | 图形处理器任务的分配方法和装置 | |
JP6619724B2 (ja) | クエリ処理システム及びクエリ処理方法 | |
CN110196879B (zh) | 数据处理方法、装置、计算设备及存储介质 | |
KR102026333B1 (ko) | 분산 파일 시스템에 대한 태스크 처리 방법 | |
JP6506773B2 (ja) | 情報処理装置、方法およびプログラム | |
Morvan et al. | Dynamic memory allocation strategies for parallel query execution | |
KR20150093979A (ko) | 가상화 클러스터 환경에서 네임 노드를 할당하는 방법 및 장치 | |
EP4312133A1 (en) | Image scaling cloud database | |
JP5690287B2 (ja) | 負荷分散プログラムおよび負荷分散装置 | |
CN110297799B (en) | Data management system and method | |
CN114398105A (zh) | 一种计算引擎从分布式数据库加载数据的方法及装置 | |
Aziz et al. | Evaluation of Multicore Query Execution Techniques for Linked Open Data | |
JP2017174290A (ja) | クエリ処理制御装置、制御方法及び制御プログラム | |
JP2010033599A (ja) | 無共有型データベース管理システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20181220 |
|
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: 20191029 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20191115 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6619724 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |