(58)【調査した分野】(Int.Cl.,DB名)
前記記憶制御部は、取得された前記クエリが、前記1以上のテーブルからフィールドを抽出する抽出クエリである場合に、当該テーブルを示す情報を含む参照履歴情報を前記記憶部に記憶させ、
前記特定部は、取得された前記クエリが前記挿入クエリであって、前記1以上のテーブルから抽出したフィールドを挿入するクエリである場合に、当該挿入クエリに含まれている挿入対象のフィールドと、前記1以上のテーブルのそれぞれを構成するフィールドを示す情報を含む定義情報と、前記記憶部に記憶されている前記参照履歴情報と、に基づいて、前記作成クエリが示すテーブルを作成する前記データベースを特定する、
請求項1に記載のクエリ実行装置。
前記記憶制御部は、取得された前記クエリが前記抽出クエリである場合に、当該抽出クエリに含まれる、当該抽出クエリが参照するテーブルを示す情報を含む前記参照履歴情報を前記記憶部に記憶させる、
請求項2に記載のクエリ実行装置。
前記記憶制御部は、取得された前記クエリが前記抽出クエリであって、テーブルの結合条件を示す結合条件情報を含むクエリである場合に、当該結合条件情報を含む前記参照履歴情報を前記記憶部に記憶させ、
前記特定部は、前記挿入クエリに含まれている挿入対象のフィールドと、当該フィールドに対応するテーブルと、前記定義情報と、前記結合条件情報とに基づいて、前記作成クエリが示すテーブルを作成する前記データベースを特定する、
請求項2又は3に記載のクエリ実行装置。
前記特定部は、前記挿入クエリに含まれている挿入対象のフィールドのうち、前記記憶部に記憶されている前記結合条件情報において指定されているフィールドを特定し、当該フィールドとの結合回数が相対的に多いフィールドに対応するテーブルが格納されている前記データベースを、前記作成クエリが示すテーブルを作成する前記データベースとして特定する、
請求項4に記載のクエリ実行装置。
前記特定部は、前記参照履歴情報に基づいて、前記挿入クエリに含まれる挿入対象のフィールドに対応する複数のテーブルのうち、過去の参照回数が相対的に多いテーブルが格納されている前記データベースを、前記作成クエリが示すテーブルを作成する前記データベースとして特定する、
請求項2から5のいずれか1項に記載のクエリ実行装置。
前記特定部は、前記挿入クエリに含まれる挿入対象のフィールドに対応する複数のテーブルのうち、過去の参照回数が最も多いテーブルが複数存在する場合には、当該テーブルの容量に基づいて一のテーブルを特定し、当該テーブルが格納されている前記データベースを、前記作成クエリが示すテーブルを作成する前記データベースとして特定する、
請求項6に記載のクエリ実行装置。
【発明の概要】
【発明が解決しようとする課題】
【0004】
データ仮想化システムでは、クライアントがデータベースの物理的な位置を意識することなくデータを参照することができるものの、新たにテーブルを作成する場合に、当該テーブルをどのデータベースに作成すると効率的であるのか考慮されていない。例えば、使用頻度が高いテーブルが格納されているデータベースと異なるデータベースに新たにテーブルが作成されると、クライアントから受け付けたクエリを異なるデータベースに分配する頻度が高くなり、クエリの実行が非効率になるおそれがある。
【0005】
そこで、本発明はこれらの点に鑑みてなされたものであり、効率よくクエリを実行することができるクエリ実行装置、クエリ実行方法及びクエリ実行プログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明の第1の態様に係るクエリ実行装置は、1以上の記憶装置に物理的に格納されている複数のデータベースの少なくともいずれかに対応するクエリを取得するクエリ取得部と、クエリを記憶する記憶部と、取得された前記クエリがテーブルを作成する作成クエリである場合に、当該クエリを前記記憶部に記憶させる記憶制御部と、取得された前記クエリが、前記記憶部に記憶されている前記作成クエリが示すテーブルにレコードを挿入する挿入クエリであって、前記データベースに格納されている1以上のテーブルから抽出したフィールドを挿入するクエリである場合に、当該挿入クエリに含まれている、挿入対象のフィールドが格納されているテーブルを示す情報に基づいて、当該作成クエリが示すテーブルを作成する前記データベースを特定する特定部と、特定された前記データベースに前記作成クエリに基づいてテーブルを作成するとともに、前記挿入クエリに基づいてレコードを挿入するクエリ実行部と、を備える。
【0007】
前記記憶制御部は、取得された前記クエリが、前記1以上のテーブルからフィールドを抽出する抽出クエリである場合に、当該テーブルを示す情報を含む参照履歴情報を前記記憶部に記憶させ、前記特定部は、取得された前記クエリが前記挿入クエリであって、前記1以上のテーブルから抽出したフィールドを挿入するクエリである場合に、当該挿入クエリに含まれている挿入対象のフィールドと、前記1以上のテーブルのそれぞれを構成するフィールドを示す情報を含む定義情報と、前記記憶部に記憶されている前記参照履歴情報と、に基づいて、前記作成クエリが示すテーブルを作成する前記データベースを特定してもよい。
【0008】
前記記憶制御部は、取得された前記クエリが前記抽出クエリである場合に、当該抽出クエリに含まれる、当該抽出クエリが参照するテーブルを示す情報を含む前記参照履歴情報を前記記憶部に記憶させてもよい。
【0009】
前記記憶制御部は、取得された前記クエリが前記抽出クエリであって、テーブルの結合条件を示す結合条件情報を含むクエリである場合に、当該結合条件情報を含む前記参照履歴情報を前記記憶部に記憶させ、前記特定部は、前記挿入クエリに含まれている挿入対象のフィールドと、当該フィールドに対応するテーブルと、前記定義情報と、前記結合条件情報とに基づいて、前記作成クエリが示すテーブルを作成する前記データベースを特定してもよい。
【0010】
前記特定部は、前記挿入クエリに含まれている挿入対象のフィールドのうち、前記記憶部に記憶されている前記結合条件情報において指定されているフィールドを特定し、当該フィールドとの結合回数が相対的に多いフィールドに対応するテーブルが格納されている前記データベースを、前記作成クエリが示すテーブルを作成する前記データベースとして特定してもよい。
【0011】
前記特定部は、前記参照履歴情報に基づいて、前記挿入クエリに含まれる挿入対象のフィールドに対応する複数のテーブルのうち、過去の参照回数が相対的に多いテーブルが格納されている前記データベースを、前記作成クエリが示すテーブルを作成する前記データベースとして特定してもよい。
【0012】
前記特定部は、前記挿入クエリに含まれる挿入対象のフィールドに対応する複数のテーブルのうち、過去の参照回数が最も多いテーブルが複数存在する場合には、当該テーブルの容量に基づいて一のテーブルを特定し、当該テーブルが格納されている前記データベースを、前記作成クエリが示すテーブルを作成する前記データベースとして特定してもよい。
【0013】
前記クエリ取得部は、前記クエリを取得するとともに、前記クエリを入力したユーザを識別するユーザ識別情報を取得し、前記記憶制御部は、取得された前記クエリが前記作成クエリである場合に、前記作成クエリと、当該作成クエリを入力したユーザの前記ユーザ識別情報とを関連付けて記憶し、取得された前記クエリが前記抽出クエリである場合に、前記参照履歴情報と、当該参照履歴情報に対応する前記抽出クエリを入力したユーザの前記ユーザ識別情報とを関連付けて記憶し、前記特定部は、前記挿入クエリに対応する前記作成クエリに関連付けられている前記ユーザ識別情報を特定し、当該ユーザ識別情報に関連付けられている前記参照履歴情報に基づいて、当該作成クエリが示すテーブルを作成する前記データベースを特定してもよい。
【0014】
前記記憶制御部は、前記抽出クエリを取得した時間を含む前記参照履歴情報を前記記憶部に記憶させ、前記特定部は、前記挿入クエリが取得された時間から所定範囲の時間に前記記憶部に記憶された前記参照履歴情報に基づいて、前記作成クエリが示すテーブルを作成する前記データベースを特定してもよい。
【0015】
前記記憶制御部は、前記抽出クエリを取得した時間を含む前記参照履歴情報を前記記憶部に記憶させ、前記クエリ実行部は、前記作成クエリによってテーブルが作成された後に前記記憶部に記憶された前記参照履歴情報に基づいて、当該テーブルを格納する前記データベースを変更してもよい。
【0016】
本発明の第2の態様に係るクエリ実行方法は、コンピュータが実行する、1以上の記憶装置に物理的に格納されている複数のデータベースの少なくともいずれかに対応するクエリを取得するステップと、取得された前記クエリがテーブルを作成する作成クエリである場合に、当該クエリを記憶部に記憶させるステップと、取得された前記クエリが、前記記憶部に記憶されている前記作成クエリが示すテーブルにレコードを挿入する挿入クエリであって、前記データベースに格納されている1以上のテーブルから抽出したフィールドを挿入するクエリである場合に、当該挿入クエリに含まれている、挿入対象のフィールドが格納されているテーブルを示す情報に基づいて、当該作成クエリが示すテーブルを作成する前記データベースを特定するステップと、特定された前記データベースに前記作成クエリに基づいてテーブルを作成するとともに、前記挿入クエリに基づいてレコードを挿入するステップと、を備える。
【0017】
本発明の第3の態様に係るクエリ実行プログラムは、コンピュータを、1以上の記憶装置に物理的に格納されている複数のデータベースの少なくともいずれかに対応するクエリを取得するクエリ取得部、取得された前記クエリがテーブルを作成する作成クエリである場合に、当該クエリを記憶部に記憶させる記憶制御部、取得された前記クエリが、前記記憶部に記憶されている前記作成クエリが示すテーブルにレコードを挿入する挿入クエリであって、前記データベースに格納されている1以上のテーブルから抽出したフィールドを挿入するクエリである場合に、当該挿入クエリに含まれている、挿入対象のフィールドが格納されているテーブルを示す情報に基づいて、当該作成クエリが示すテーブルを作成する前記データベースを特定する特定部、及び、特定された前記データベースに前記作成クエリに基づいてテーブルを作成するとともに、前記挿入クエリに基づいてレコードを挿入するクエリ実行部、として機能させる。
【発明の効果】
【0018】
本発明によれば、効率よくクエリを実行することができるという効果を奏する。
【発明を実施するための形態】
【0020】
<第1実施形態>
[仮想データベースシステムSの概要]
図1は、第1実施形態に係る仮想データベースシステムSの構成を示す図である。仮想データベースシステムSは、クエリ実行装置1と、データベース21を物理的に格納する複数の記憶装置2と、ユーザ端末3とを備え、複数のデータベース21を仮想的に統合するシステムである。
【0021】
クエリ実行装置1はサーバであり、LAN(Local Area Network)等を介して、ユーザ端末3と、複数の記憶装置2とに通信可能に接続されている。なお、
図1において、ユーザ端末3は1台のみ示されているが、複数のユーザ端末3がクエリ実行装置1に接続されているものとする。クエリ実行装置1は、ユーザ端末3からクエリを取得すると、当該クエリに対応する1以上のデータベース21を特定する。クエリ実行装置1は、特定したデータベース21においてクエリを実行し、実行結果をユーザ端末3に出力する。これにより、ユーザは、データベース21の物理的な位置を意識することなく複数のデータベース21に格納されているデータを参照することができる。
【0022】
また、クエリ実行装置1は、取得したクエリに基づいて、複数のデータベース21のいずれかに新たなテーブルを作成する場合に、当該クエリの実行を保留する。その後、クエリ実行装置1は、当該新たなテーブルにレコードを挿入するクエリを取得すると、挿入対象のフィールドが格納されているテーブルを示す情報に基づいて、新たなテーブルを作成するデータベース21を特定する。クエリ実行装置1は、実行を保留していたクエリを実行して特定したデータベース21に新たなテーブルを作成する。このようにすることで、クエリ実行装置1は、新たなテーブルと関連して使用するテーブルが格納されているデータベース21に新たなテーブルを作成することができる。
【0023】
その後、クエリ実行装置1は、新たなテーブルにレコードを挿入するクエリを実行することにより、新たに作成されたテーブルにレコードを挿入する。このようにすることで、クエリ実行装置1は、新たなテーブルに対応するクエリを効率的に実行することができる。
続いて、クエリ実行装置1の構成について説明する。
【0024】
[クエリ実行装置1の構成例]
図2は、第1実施形態に係るクエリ実行装置1の構成を示す図である。
クエリ実行装置1は、記憶部11と、制御部12とを備える。
【0025】
記憶部11は、例えば、ROM(Read Only Memory)及びRAM(Random Access Memory)等である。記憶部11は、クエリ実行装置1を機能させるための各種プログラムを記憶する。例えば、記憶部11は、クエリ実行装置1の制御部12を、後述するクエリ取得部121、クエリ実行部122、記憶制御部123、及び特定部124として機能させるクエリ実行プログラムを記憶する。また、記憶部11は、テーブル定義情報111と、保留リスト情報112と、参照履歴情報113とを記憶する。
【0026】
テーブル定義情報111は、複数のデータベース21のそれぞれに格納されている1以上のテーブルの構成を示す情報である。
図3は、第1実施形態に係るテーブル定義情報111の一例を示す図である。
図3に示すように、テーブル定義情報111には、データベース21の識別情報と、当該データベース21に格納されているテーブルを構成するフィールドを示す情報が含まれている。
図3に示す例では、第1データベースにテーブル「employeeTable」が格納されており、第2データベースにテーブル「deptTable」が格納されていることが確認できる。
【0027】
保留リスト情報112は、制御部12によって実行が保留されているクエリを含む情報である。ここで、実行が保留されるクエリは、テーブルを作成する作成クエリである。
図4は、第1実施形態に係る保留リスト情報112の一例を示す図である。
図4に示す例では、実行が保留されている作成クエリが複数格納されていることが確認できる。
【0028】
参照履歴情報113は、クエリがどのテーブルを参照したのかを示す情報である。参照履歴情報113には、ユーザ端末3から取得したクエリが参照したテーブルを示す情報が含まれている。ここで、クエリは、1以上のテーブルからフィールドを抽出する抽出クエリや、抽出クエリによって1以上のテーブルから抽出したフィールドを指定されたテーブルに挿入するクエリである。抽出クエリは、SQL(Structured Query Language)におけるSELECT文である。
【0029】
図5は、第1実施形態に係る参照履歴情報113の一例を示す図である。
図5に示すように、参照履歴情報113には、抽出クエリが参照するテーブルと、抽出クエリが取得された日時とを示す参照テーブル情報が含まれている。また、
図5に示すように、参照履歴情報113には、抽出クエリに含まれているテーブルの結合条件と、抽出クエリが取得された日時とを示す結合条件情報が含まれている。なお、
図5に示す例では、参照テーブル名又は結合条件に、抽出クエリの取得日時を関連付けているが、これに限らない。例えば、参照テーブル名又は結合条件に抽出クエリの実行日時を関連付けてもよい。
【0030】
制御部12は、例えばCPU(Central Processing Unit)である。制御部12は、記憶部11に記憶されている各種プログラムを実行することにより、クエリ実行装置1に係る機能を制御する。制御部12は、クエリ実行プログラムを実行することにより、クエリ取得部121、クエリ実行部122、記憶制御部123、及び特定部124として機能する。
【0031】
以下に、クエリ実行装置1がクエリを取得したときの処理の流れを示すフローチャートを参照しながら、制御部12の各機能の詳細について説明する。
図6は、第1実施形態に係るクエリ実行装置1がクエリを取得したときの処理の流れを示すフローチャートである。
【0032】
まず、クエリ取得部121は、ユーザ端末3から、1以上の記憶装置2に物理的に格納されている複数のデータベース21の少なくともいずれかに対応するクエリを取得する(S10)。
【0033】
続いて、クエリ実行部122は、取得されたクエリがテーブルを作成する作成クエリであるか否かを判定する(S20)。作成クエリは、例えば、SQLにおけるCREATE文である。クエリ実行部122は、取得されたクエリが作成クエリであると判定すると、S30に処理を移し、作成クエリではないと判定すると、S40に処理を移す。
【0034】
記憶制御部123は、取得されたクエリが作成クエリであるとクエリ実行部122が判定すると、当該クエリを記憶部11の保留リスト情報112に記憶させる(S30)。この処理が終了すると、クエリ実行部122は、本フローチャートに示す処理を終了する。クエリ実行部122は、取得されたクエリが作成クエリである場合には、クエリを取得したタイミングで作成クエリを実行しない。
【0035】
クエリ実行部122は、取得されたクエリが作成クエリではない場合、取得されたクエリが、テーブルにレコードを挿入する挿入クエリであるか否かを判定する(S40)。ここで、挿入クエリは、挿入先のテーブルに、データベース21に格納されている1以上のテーブルから抽出したフィールドを挿入するクエリであるものとする。
図7は、第1実施形態に係る挿入クエリの例を示す図である。
図7に示すように、挿入クエリは、例えば、SQLにおけるSELECT文を含むINSERT文である。クエリ実行部122は、取得されたクエリが挿入クエリであると判定すると、S50に処理を移し、挿入クエリではないと判定すると、S90に処理を移す。
【0036】
続いて、クエリ実行部122は、挿入クエリに対応する挿入先のテーブルが保留中か否かを判定する(S50)。具体的には、クエリ実行部122は、挿入クエリにおいて指定されているデータの挿入先を示すテーブルが、保留リスト情報112に含まれている作成クエリによって作成されるテーブルであるか否かを判定する。クエリ実行部122は、挿入クエリに対応する挿入先のテーブルが保留中であると判定すると、S60に処理を移し、保留中ではないと判定すると、S90に処理を移す。
【0037】
S60において、特定部124は、取得したクエリが、保留リスト情報112に含まれている作成クエリが示すテーブルにレコードを挿入する挿入クエリである場合に、当該作成クエリが示すテーブルを作成するデータベース21を特定する。特定部124は、当該挿入クエリに含まれている挿入対象のフィールドが格納されているテーブルを示す情報に基づいて、当該作成クエリが示すテーブルを作成するデータベース21を特定する。
【0038】
具体的には、特定部124は、当該挿入クエリに含まれている挿入対象のフィールドと、記憶部11に記憶されている参照履歴情報113と、記憶部11に記憶されているテーブル定義情報111とに基づいて、作成クエリが示すテーブルを作成するデータベース21を特定する。
【0039】
例えば、挿入クエリが
図7(A)に示すように、一のテーブルに対応するフィールドのみを挿入するものであったとする。特定部124は、当該挿入クエリに含まれている挿入対象のフィールドとして、empid、deptid、nameを特定する。続いて、特定部124は、テーブル定義情報111に基づいて、特定したフィールドと同じフィールド名であるフィールドの少なくとも一部を含むテーブルとして、第1データベースに格納されているemployeeTableと、第2データベースに格納されているdeptTableとを特定する。
【0040】
特定部124は、参照履歴情報113に含まれている参照テーブル情報に基づいて、挿入クエリに含まれる挿入対象のフィールドと同じフィールド名のフィールドの少なくとも一部を含む複数のテーブルのうち、過去の参照回数が相対的に多いテーブルが格納されているデータベース21を、作成クエリが示すテーブルを作成するデータベースとして特定する。
【0041】
図7(A)に示す例では、特定部124は、参照履歴情報113を参照し、employeeTableと、deptTableとのうち、参照回数が相対的に多いテーブルを特定する。ここでは、deptTableの参照回数が相対的に多いものとする。特定部124は、deptTableが格納されている第2データベースを、作成クエリが示すテーブルを作成するデータベースに特定する。
【0042】
なお、特定部124は、挿入クエリが
図7(A)に示すように、一のテーブルに対応するフィールドのみを挿入するものである場合に、参照履歴情報113に含まれる結合条件情報と、テーブル定義情報111とを参照し、当該テーブルと結合される回数が相対的に多いテーブルを特定してもよい。そして、特定部124は、特定したテーブルが格納されているデータベース21を作成クエリが示すテーブルを作成するデータベースとして特定してもよい。
【0043】
この場合、
図7(A)に示す例では、挿入クエリにおけるデータの取得元となるテーブルはemployeeTableである。このため、特定部124は、結合条件情報と、テーブル定義情報111を参照し、employeeTableを構成するフィールドを結合条件として含んでいる結合条件情報を特定する。そして、特定部124は、テーブル定義情報111を参照し、特定した結合条件情報において、employeeTableを構成するフィールドと連結されるフィールドに対応するテーブルを特定し、当該テーブルが格納されているデータベース21を作成クエリが示すテーブルを作成するデータベースとして特定する。
【0044】
また、特定部124は、挿入クエリに含まれる挿入対象のフィールドに対応する複数のテーブルのうち、過去の参照回数が最も多いテーブルが複数存在する場合には、当該テーブルの容量に基づいて一のテーブルを特定してもよい。そして、特定部124は、特定した一のテーブルが格納されているデータベース21を、作成クエリが示すテーブルを作成するデータベースに特定してもよい。
【0045】
また、挿入クエリが
図7(B)に示すように、複数のテーブルに対応するフィールドを挿入するものであったとする。この場合、特定部124は、挿入クエリに含まれている挿入対象のフィールドと、当該フィールドに対応するテーブルと、テーブル定義情報111と、参照履歴情報113に含まれている結合条件情報とに基づいて、作成クエリが示すテーブルを作成するデータベース21を特定する。具体的には、特定部124は、挿入クエリに含まれているフィールド情報が示すフィールドのうち、参照履歴情報113に含まれている結合条件情報において指定されているフィールドを特定し、当該フィールドに連結される可能性が高いフィールドに対応するテーブルが格納されているデータベース21を、作成クエリが示すテーブルを作成するデータベースとして特定する。
【0046】
図7(B)に示す例では、挿入対象のフィールドは、l_orderkeyと、l_shipdateである。特定部124は、結合条件情報に含まれる結合条件ごとに、結合条件の出現回数を集計する。結合条件情報として、
図5に示す結合条件が記憶されているものとすると、特定部124は、「l_orderkey=o_orderkey」の出現回数を2回、「l_suppley=s_suppkey」の出現回数を1回、「o_custkey=c_custkey」の出現回数を1回と集計する。特定部124は、テーブル定義情報111を参照し、挿入対象のフィールドに対応するテーブルを特定する。そして、特定部124は、挿入対象のフィールドに対応するテーブルごとに、当該フィールドの出現回数を集計する。
【0047】
特定部124は、複数の挿入対象のフィールドのうち、出現回数が最も多いフィールドを特定する。
図5に示される結合条件情報において、挿入対象のフィールドであるl_orderkeyの出現回数は2回、l_shipdateの出現回数は0回であることから、特定部124は、l_orderkeyを、出現回数が最も多いフィールドとして特定する。そして、特定部124は、特定されたフィールドと連結される可能性が最も高いフィールドをさらに特定する。ここでは、特定部124は、o_orderkeyを、連結される可能性が最も高いフィールドと特定する。特定部124は、特定したフィールド(o_orderkey)を含むテーブルと、テーブル定義情報111とに基づいて、当該テーブルが格納されているデータベース21を、作成クエリが示すテーブルを作成するデータベースに特定する。
【0048】
ここで、特定部124は、出現回数が最も多いフィールドが複数存在する場合には、当該フィールドに対応するテーブルの容量に基づいて一のテーブルを特定してもよい。例えば、特定部124は、容量が多いテーブルを、一のテーブルとして特定してもよい。そして、特定部124は、特定した一のテーブルが格納されているデータベース21を、作成クエリが示すテーブルを作成するデータベースに特定してもよい。データの容量が多いテーブルが格納されているデータベースと同じデータベースに新たなテーブルを作成することによって、クエリ実行装置1は、これらのテーブルの連結時におけるクエリ実行装置1の負荷を軽くすることができる。
【0049】
なお、特定部124は、挿入クエリが取得された時間から所定範囲の時間に記憶部11に記憶された参照履歴情報に基づいて、作成クエリが示すテーブルを作成するデータベースを特定してもよい。このようにすることで、挿入クエリが取得された時間と近い時間において作成クエリが示すテーブルとの関連性が高く、当該テーブルと連結される可能性が高いテーブルが格納されているデータベースに、作成クエリが示すテーブルを作成することができる。
【0050】
図6に説明を戻す。続いて、クエリ実行部122は、挿入クエリにおいてレコードの挿入先として指定されているテーブルに対応し、保留リスト情報112に含まれている作成クエリを実行することにより、テーブルを作成する(S70)。これにより、クエリ取得部121が取得した挿入クエリにおいて指定されている挿入先のテーブルがデータベース21に記憶されていない場合に、当該テーブルが作成される。
クエリ実行部122は、保留リスト情報から実行された作成クエリを消去する(S80)。
【0051】
クエリ実行部122は、テーブル定義情報111に基づいて、S10において取得したクエリを実行する(S90)。クエリ実行部122は、S70からS90の処理を実行することにより、特定部124によって特定された作成クエリに基づいて1つのデータベース21にテーブルを作成するとともに、挿入クエリに基づいて当該テーブルにレコードを挿入する。
【0052】
続いて、記憶制御部123は、参照履歴情報113を記憶部11に記憶させる(S100)。記憶制御部123は、S10において取得されたクエリが1以上のテーブルからフィールドを抽出する抽出クエリである場合に、当該テーブルを示す情報を含む参照履歴情報113を記憶部11に記憶させる。具体的には、記憶制御部123は、当該抽出クエリのFROM句に含まれる、当該抽出クエリが参照するテーブルを示す情報と、当該抽出クエリが取得された時刻を示す情報とを関連付けた参照テーブル情報を記憶部11に記憶させる。
【0053】
また、記憶制御部123は、取得されたクエリが抽出クエリであって、テーブルの結合条件を示す結合条件情報を含むクエリである場合に、当該結合条件情報と、当該抽出クエリが取得された時刻を示す情報とを関連付けた結合条件情報を記憶部11に記憶させる。
【0054】
なお、クエリ実行部122は、作成クエリによってテーブルが作成された後に記憶部11に新たに記憶された参照履歴情報113に基づいて、当該テーブルを格納するデータベース21を変更してもよい。具体的には、クエリ実行部122は、テーブルが作成された後に記憶部11に新たに記憶された参照履歴情報113に基づいて、作成されたテーブルと同時に参照されるテーブルの参照頻度を特定する。そして、クエリ実行部122は、参照頻度が相対的に高いテーブルが格納されているデータベースと、作成されたテーブルが格納されているデータベースとが異なる場合に、作成されたテーブルを格納するデータベースを、参照頻度が相対的に高いテーブルが格納されているデータベースに変更する。このようにすることで、クエリ実行装置1は、新たに作成されたテーブルが格納されるデータベースを、当該テーブルを参照するクエリの実行に適したデータベースに変更することができる。
【0055】
[第1実施形態における効果]
以上のとおり、第1実施形態に係る仮想データベースシステムSでは、クエリ実行装置1は、取得されたクエリが作成クエリである場合に、当該クエリを記憶部11に記憶させる。また、クエリ実行装置1は、取得されたクエリが、記憶部11に記憶されている作成クエリが示すテーブルにレコードを挿入する挿入クエリであって、データベース21に格納されている1以上のテーブルから抽出したフィールドを挿入するクエリである場合に、当該挿入クエリに含まれている、挿入対象のフィールドが格納されているテーブルを示す情報に基づいて、当該作成クエリが示すテーブルを作成するデータベース21を特定する。そして、クエリ実行装置1は、特定されたデータベース21に作成クエリに基づいてテーブルを作成するとともに、挿入クエリに基づいてレコードを挿入する。
【0056】
このようにすることで、クエリ実行装置1は、新たなテーブルと関連して使用する可能性が高いテーブルが格納されているデータベース21に新たなテーブルを作成することができるので、新たなテーブルに対応するクエリを効率的に実行することができる。
【0057】
<第2実施形態>
[作成クエリを入力したユーザに対応する参照履歴情報に基づいて、作成クエリに対応するテーブルの格納先を特定する]
続いて、第2実施形態について説明する。第1実施形態において説明したように、クエリ実行装置1は、複数のユーザからクエリを受け付ける。このため、作成クエリを入力したユーザが、当該作成クエリと結合しようとしているテーブルの格納先とは異なる格納先に、作成クエリに対応するテーブルが格納されてしまうことがある。この場合には、作成クエリに対応するテーブルの格納先が不適切となってしまう。
【0058】
これに対し、第2実施形態に係るクエリ実行装置1は、作成クエリを入力したユーザに対応する参照履歴情報に基づいて、作成クエリに対応するテーブルの格納先を特定する。以下、第2実施形態に係る仮想データベースシステムSについて説明する。なお、第1実施形態と同じ部分については適宜説明を省略する。
【0059】
第2実施形態において、クエリ取得部121は、クエリを取得するとともに、当該クエリを入力したユーザを識別するユーザ識別情報を取得する。ここで、ユーザ識別情報は、例えば、ユーザ端末3を識別する端末識別情報であってもよい。
【0060】
記憶制御部123は、取得されたクエリが作成クエリである場合に、当該作成クエリと、当該作成クエリを入力したユーザのユーザ識別情報とを関連付けて記憶する。また、記憶制御部123は、取得されたクエリが抽出クエリ又は抽出クエリを含む挿入クエリである場合に、参照履歴情報113と、当該参照履歴情報113に対応する抽出クエリを入力したユーザのユーザ識別情報とを関連付けて記憶部14に記憶させる。
【0061】
特定部124は、挿入クエリに対応する作成クエリに関連付けられているユーザ識別情報を特定する。そして、特定部124は、特定したユーザ識別情報に関連付けられている参照履歴情報113に基づいて、当該作成クエリが示すテーブルを作成するデータベース21を特定する。
【0062】
[第2実施形態における効果]
以上のとおり、第2実施形態に係る仮想データベースシステムSでは、クエリ実行装置1は、作成クエリを入力したユーザに対応する参照履歴情報に基づいて、作成クエリに対応するテーブルの格納先を特定する。このようにすることで、クエリ実行装置1は、作成クエリを入力したユーザが、当該作成クエリと結合しようとしているテーブルの格納先と同じ格納先に、作成クエリに対応するテーブルが格納される可能性を高めることができる。これにより、クエリ実行装置1は、当該ユーザが入力したクエリを効率的に実行することができる。
【0063】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更又は改良を加えることが可能であることが当業者に明らかである。例えば、上述の複数の実施形態を組み合わせてもよい。また、特に、装置の分散・統合の具体的な実施形態は以上に図示するものに限られず、その全部又は一部について、種々の付加等に応じて、又は、機能負荷に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。