(57)【特許請求の範囲】
【請求項１】
データベースを管理するデータベース管理手段と、
前記データベースに対するクエリに係る処理に用いられるテーブルについて、前記処理に用いるバージョンを決定するバージョン決定手段と、
前記テーブルに含まれる複数の部分の夫々を、複数の他の情報処理装置の夫々による担当部分として割り当てる割当手段と、
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令に基づいて前記テーブルを更新した場合の更新履歴を作成する更新履歴作成手段と、
前記更新履歴を、前記更新命令に係る担当部分が割り当てられた前記他の情報処理装置に通知する更新履歴通知手段と、
前記割り当てを受けた前記複数の他の情報処理装置の夫々に対して、前記他の情報処理装置によって管理されている、前記データベースに同期された他のデータベースを参照して、前記担当部分について前記処理を行うよう指示することで、前記処理を複数の他の情報処理装置に分散実行させる、指示手段と、
前記更新履歴の通知及び前記指示を受けた前記複数の他の情報処理装置から、前記担当部分についての前記処理の実行の結果を受信する結果受信手段と、
前記結果受信手段によって受信された前記結果を合成することで、前記テーブルについての前記処理の実行結果を取得する合成手段と、を備え、
前記指示手段は、前記処理に用いるバージョンとして、前記バージョン決定手段によって決定されたバージョンを用いて前記処理を行うように、前記複数の他の情報処理装置に指示する、
情報処理装置。
【請求項２】
データベースを管理するデータベース管理手段と、
前記データベースに対するクエリに係る処理に用いられるテーブルに含まれる複数の部分の夫々を、複数の他の情報処理装置の夫々による担当部分として割り当てる割当手段と、
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令を識別可能な情報を、該更新命令に係る担当部分が割り当てられた他の情報処理装置に通知する更新命令識別情報通知手段と、
前記割り当てを受けた前記複数の他の情報処理装置の夫々に対して、前記他の情報処理装置によって管理されている、前記データベースに同期された他のデータベースを参照して、前記担当部分について前記処理を行うよう指示することで、前記処理を複数の他の情報処理装置に分散実行させる、指示手段と、
前記更新命令識別情報の通知及び前記指示を受けた前記複数の他の情報処理装置から、前記担当部分についての前記処理の実行の結果を受信する結果受信手段と、
前記結果受信手段によって受信された前記結果を合成することで、前記テーブルについての前記処理の実行結果を取得する合成手段と、
を備える情報処理装置。
【請求項３】
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令による更新が行われたバージョンを、前記テーブルについての前記処理に用いるバージョンとして決定するバージョン決定手段と、を更に備え、
前記指示手段は、前記処理に用いるバージョンとして、前記バージョン決定手段によって決定されたバージョンを用いて前記処理を行うように、前記複数の他の情報処理装置に指示する、
請求項２に記載の情報処理装置。
【請求項４】
データベースを管理するデータベース管理手段と、
前記データベースに対するクエリに含まれる処理の夫々を表すノードが、処理されるべき順序に従ってツリー状に配置されたプランツリーを作成するプランツリー作成手段と、
前記プランツリーに含まれる各ノードによって表される処理について、複数の他の情報処理装置による分散実行の可能性を判定する可能性判定手段と、
前記可能性判定手段によって分散実行可能と判定された処理を、前記分散実行の対象として決定する対象決定手段と、
前記分散実行の対象として決定された処理に用いられるテーブルに含まれる複数の部分の夫々を、複数の他の情報処理装置の夫々による担当部分として割り当てる割当手段と、
前記割り当てを受けた前記複数の他の情報処理装置の夫々に対して、前記他の情報処理装置によって管理されている、前記データベースに同期された他のデータベースを参照して、前記担当部分について前記処理を行うよう指示することで、前記処理を複数の他の情報処理装置に分散実行させる、指示手段と、
前記指示を受けた前記複数の他の情報処理装置から、前記担当部分についての前記処理の実行の結果を受信する結果受信手段と、
前記結果受信手段によって受信された前記結果を合成することで、前記テーブルについての前記処理の実行結果を取得する合成手段と、
を備える情報処理装置。
【請求項５】
前記可能性判定手段によって分散実行不可能と判定された処理と前記プランツリーにおいて該処理より上位に接続された処理とを、前記分散実行の対象から除外する不可処理除外手段を更に備える、
請求項４に記載の情報処理装置。
【請求項６】
前記可能性判定手段は、前記プランツリーにおける下位ノードから上位ノードに向けて順に判定を行う、
請求項４または５に記載の情報処理装置。
【請求項７】
前記プランツリーに含まれる各ノードによって表される処理について、前記分散実行の適性を判定する適性判定手段と、
前記適性判定手段によって前記分散実行に適さない処理であると判定された処理と前記プランツリーにおいて該処理より下位に接続された処理とを、前記分散実行の対象から除外する不適処理除外手段と、
を更に備える、請求項４から６の何れか一項に記載の情報処理装置。
【請求項８】
前記適性判定手段は、前記プランツリーにおける上位ノードから下位ノードに向けて順に判定を行う、
請求項７に記載の情報処理装置。
【請求項９】
前記クエリを、ユーザー端末から受け付けるクエリ受付手段と、
前記合成手段による合成によって得られた、前記テーブル全体についての前記処理の実行結果に基づいて、前記クエリへの応答を前記ユーザー端末に対して返す応答手段と、
を更に備える、請求項１から８の何れか一項に記載の情報処理装置。
【請求項１０】
前記他の情報処理装置が管理する前記他のデータベースは、該他の情報処理装置からのアクセス速度が、部分によって異なるデータベースであり、
前記割当手段は、前記クエリに係る処理に用いられるテーブルに含まれる複数の部分のうち、該当する部分が他の部分に比べて高速にアクセス可能な前記他の情報処理装置に対して、該部分を担当部分として優先的に割り当てる、
請求項１から９の何れか一項に記載の情報処理装置。
【請求項１１】
他の情報処理装置によって管理される他のデータベースに同期されたデータベースを管理するデータベース管理手段と、
前記他の情報処理装置が受け付けたクエリに係る処理に用いられるテーブルにおける、該情報処理装置の担当部分についての、該処理の実行指示を、前記他の情報処理装置から受け付ける指示受付手段と、
前記テーブルについて、前記処理に用いるバージョンを前記他の情報処理装置から取得するバージョン取得手段と、
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令に基づいて前記テーブルを更新した場合の更新履歴を、前記他の情報処理装置から取得する更新履歴取得手段と、
前記指示が受け付けられた場合に、前記データベース管理手段によって管理されるデータベースを参照して、前記担当部分について前記処理を実行する処理実行手段と、
前記担当部分についての前記処理の実行の結果を、前記他の情報処理装置に対して送信する結果送信手段と、を備え、
前記処理実行手段は、前記バージョン取得手段によって取得されたバージョンのテーブルに前記更新履歴を反映した情報を参照して、前記処理を行う、
情報処理装置。
【請求項１２】
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令を識別可能な情報を、前記他の情報処理装置から取得する更新命令識別情報取得手段と、
前記更新命令を識別可能な情報に基づいて、該更新命令に基づいて更新された内容を特定する更新内容特定手段と、を更に備え、
前記処理実行手段は、前記更新内容特定手段によって特定された更新内容を更に参照して、前記処理を実行する、
請求項１１に記載の情報処理装置。
【請求項１３】
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令による更新が行われたバージョンを、前記他の情報処理装置から、前記テーブルについて前記処理に用いるバージョンとして取得するバージョン取得手段を更に備え、
前記処理実行手段は、前記バージョンのテーブルに基づいて、前記処理を実行する、
請求項１２に記載の情報処理装置。
【請求項１４】
コンピューターが、
データベースを管理するデータベース管理ステップと、
前記データベースに対するクエリに係る処理に用いられるテーブルについて、該処理に用いるバージョンを決定するバージョン決定ステップと、
前記テーブルに含まれる複数の部分の夫々を、複数の他の情報処理装置の夫々による担当部分として割り当てる割当ステップと、
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令に基づいて前記テーブルを更新した場合の更新履歴を作成する更新履歴作成ステップと、
前記更新履歴を、前記更新命令に係る担当部分が割り当てられた前記他の情報処理装置に通知する更新履歴通知ステップと、
前記割り当てを受けた前記複数の他の情報処理装置の夫々に対して、前記他の情報処理装置によって管理されている、前記データベースに同期された他のデータベースを参照して、前記担当部分について前記処理を行うよう指示することで、前記処理を複数の他の情報処理装置に分散実行させる、指示ステップと、
前記更新履歴の通知及び前記指示を受けた前記複数の他の情報処理装置から、前記担当部分についての前記処理の実行の結果を受信する結果受信ステップと、
前記結果受信ステップにおいて受信された前記結果を合成することで、前記テーブルについての前記処理の実行結果を取得する合成ステップと、を実行し、
前記指示ステップでは、前記処理に用いるバージョンとして、前記バージョン決定ステップで決定されたバージョンを用いて前記処理を行うように、前記複数の他の情報処理装置に指示する、
方法。
【請求項１５】
コンピューターが、
データベースを管理するデータベース管理ステップと、
前記データベースに対するクエリに係る処理に用いられるテーブルに含まれる複数の部分の夫々を、複数の他の情報処理装置の夫々による担当部分として割り当てる割当ステップと、
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令を識別可能な情報を、該更新命令に係る担当部分が割り当てられた他の情報処理装置に通知する更新命令識別情報通知ステップと、
前記割り当てを受けた前記複数の他の情報処理装置の夫々に対して、前記他の情報処理装置によって管理されている、前記データベースに同期された他のデータベースを参照して、前記担当部分について前記処理を行うよう指示することで、前記処理を複数の他の情報処理装置に分散実行させる、指示ステップと、
前記更新命令識別情報の通知及び前記指示を受けた前記複数の他の情報処理装置から、前記担当部分についての前記処理の実行の結果を受信する結果受信ステップと、
前記結果受信ステップにおいて受信された前記結果を合成することで、前記テーブルについての前記処理の実行結果を取得する合成ステップと、
を実行する方法。
【請求項１６】
コンピューターが、
データベースを管理するデータベース管理ステップと、
前記データベースに対するクエリに含まれる処理の夫々を表すノードが、処理されるべき順序に従ってツリー状に配置されたプランツリーを作成するプランツリー作成ステップと、
前記プランツリーに含まれる各ノードによって表される処理について、複数の他の情報処理装置による分散実行の可能性を判定する可能性判定ステップと、
前記可能性判定ステップで分散実行可能と判定された処理を、前記分散実行の対象として決定する対象決定ステップと、
前記分散実行の対象として決定された処理に用いられるテーブルに含まれる複数の部分の夫々を、複数の他の情報処理装置の夫々による担当部分として割り当てる割当ステップと、
前記割り当てを受けた前記複数の他の情報処理装置の夫々に対して、前記他の情報処理装置によって管理されている、前記データベースに同期された他のデータベースを参照して、前記担当部分について前記処理を行うよう指示することで、前記処理を複数の他の情報処理装置に分散実行させる、指示ステップと、
前記指示を受けた前記複数の他の情報処理装置から、前記担当部分についての前記処理の実行の結果を受信する結果受信ステップと、
前記結果受信ステップにおいて受信された前記結果を合成することで、前記テーブルについての前記処理の実行結果を取得する合成ステップと、
を実行する方法。
【請求項１７】
コンピューターが、
他の情報処理装置によって管理される他のデータベースに同期されたデータベースを管理するデータベース管理ステップと、
前記他の情報処理装置が受け付けたクエリに係る処理に用いられるテーブルにおける、該情報処理装置の担当部分についての、該処理の実行指示を、前記他の情報処理装置から受け付ける指示受付ステップと、
前記テーブルについて、前記処理に用いるバージョンを前記他の情報処理装置から取得するバージョン取得ステップと、
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令に基づいて前記テーブルを更新した場合の更新履歴を、前記他の情報処理装置から取得する更新履歴取得ステップと、
前記指示が受け付けられた場合に、前記データベース管理ステップにおいて管理されるデータベースを参照して、前記担当部分について前記処理を実行する処理実行ステップと、
前記担当部分についての前記処理の実行の結果を、前記他の情報処理装置に対して送信する結果送信ステップと、を実行し、
前記処理実行ステップでは、前記バージョン取得ステップで取得されたバージョンのテーブルに前記更新履歴を反映した情報を参照して、前記処理を行う、
方法。
【請求項１８】
コンピューターに、
データベースを管理するデータベース管理ステップと、
前記データベースに対するクエリに係る処理に用いられるテーブルについて、該処理に用いるバージョンを決定するバージョン決定ステップと、
前記テーブルに含まれる複数の部分の夫々を、複数の他の情報処理装置の夫々による担当部分として割り当てる割当ステップと、
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令に基づいて前記テーブルを更新した場合の更新履歴を作成する更新履歴作成ステップと、
前記更新履歴を、前記更新命令に係る担当部分が割り当てられた前記他の情報処理装置に通知する更新履歴通知ステップと、
前記割り当てを受けた前記複数の他の情報処理装置の夫々に対して、前記他の情報処理装置によって管理されている、前記データベースに同期された他のデータベースを参照して、前記担当部分について前記処理を行うよう指示することで、前記処理を複数の他の情報処理装置に分散実行させる、指示ステップと、
前記更新履歴の通知及び前記指示を受けた前記複数の他の情報処理装置から、前記担当部分についての前記処理の実行の結果を受信する結果受信ステップと、
前記結果受信ステップにおいて受信された前記結果を合成することで、前記テーブルについての前記処理の実行結果を取得する合成ステップと、を実行させ、
前記指示ステップでは、前記処理に用いるバージョンとして、前記バージョン決定ステップで決定されたバージョンを用いて前記処理を行うように、前記複数の他の情報処理装置に指示する、
プログラム。
【請求項１９】
コンピューターに、
データベースを管理するデータベース管理ステップと、
前記データベースに対するクエリに係る処理に用いられるテーブルに含まれる複数の部分の夫々を、複数の他の情報処理装置の夫々による担当部分として割り当てる割当ステップと、
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令を識別可能な情報を、該更新命令に係る担当部分が割り当てられた他の情報処理装置に通知する更新命令識別情報通知ステップと、
前記割り当てを受けた前記複数の他の情報処理装置の夫々に対して、前記他の情報処理装置によって管理されている、前記データベースに同期された他のデータベースを参照して、前記担当部分について前記処理を行うよう指示することで、前記処理を複数の他の情報処理装置に分散実行させる、指示ステップと、
前記更新命令識別情報の通知及び前記指示を受けた前記複数の他の情報処理装置から、前記担当部分についての前記処理の実行の結果を受信する結果受信ステップと、
前記結果受信ステップにおいて受信された前記結果を合成することで、前記テーブルについての前記処理の実行結果を取得する合成ステップと、
を実行させるためのプログラム。
【請求項２０】
コンピューターに、
データベースを管理するデータベース管理ステップと、
前記データベースに対するクエリに含まれる処理の夫々を表すノードが、処理されるべき順序に従ってツリー状に配置されたプランツリーを作成するプランツリー作成ステップと、
前記プランツリーに含まれる各ノードによって表される処理について、複数の他の情報処理装置による分散実行の可能性を判定する可能性判定ステップと、
前記可能性判定ステップで分散実行可能と判定された処理を、前記分散実行の対象として決定する対象決定ステップと、
前記分散実行の対象として決定された処理に用いられるテーブルに含まれる複数の部分の夫々を、複数の他の情報処理装置の夫々による担当部分として割り当てる割当ステップと、
前記割り当てを受けた前記複数の他の情報処理装置の夫々に対して、前記他の情報処理装置によって管理されている、前記データベースに同期された他のデータベースを参照して、前記担当部分について前記処理を行うよう指示することで、前記処理を複数の他の情報処理装置に分散実行させる、指示ステップと、
前記指示を受けた前記複数の他の情報処理装置から、前記担当部分についての前記処理の実行の結果を受信する結果受信ステップと、
前記結果受信ステップにおいて受信された前記結果を合成することで、前記テーブルについての前記処理の実行結果を取得する合成ステップと、
を実行させるためのプログラム。
【請求項２１】
コンピューターに、
他の情報処理装置によって管理される他のデータベースに同期されたデータベースを管理するデータベース管理ステップと、
前記他の情報処理装置が受け付けたクエリに係る処理に用いられるテーブルにおける、該情報処理装置の担当部分についての、該処理の実行指示を、前記他の情報処理装置から受け付ける指示受付ステップと、
前記テーブルについて、前記処理に用いるバージョンを前記他の情報処理装置から取得するバージョン取得ステップと、
前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令に基づいて前記テーブルを更新した場合の更新履歴を、前記他の情報処理装置から取得する更新履歴取得ステップと、
前記指示が受け付けられた場合に、前記データベース管理ステップにおいて管理されるデータベースを参照して、前記担当部分について前記処理を実行する処理実行ステップと、
前記担当部分についての前記処理の実行の結果を、前記他の情報処理装置に対して送信する結果送信ステップと、を実行させ、
前記処理実行ステップでは、前記バージョン取得ステップで取得されたバージョンのテーブルに前記更新履歴を反映した情報を参照して、前記処理を行う、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、負荷分散のための技術に関する。
【背景技術】
【０００２】
従来、情報の検索範囲を分担する分散検索装置であって、情報の検索を求める検索依頼を受け付ける第１の受付手段と、前記第１の受付手段によって受け付けられた検索依頼によって検索が求められている情報を、自分が担当する検索範囲内で検索する情報検索手段と、前記第１の受付手段によって受け付けられた検索依頼が求めている検索を、ネットワーク上の他の分散検索装置に依頼する第１の検索依頼手段と、前記第１の検索依頼手段が検索を依頼する他の分散検索装置を特定する装置情報を記憶する装置情報記憶手段と、前記装置情報記憶手段に記憶されている装置情報を更新する更新手段とを備え、前記第１の検索依頼手段が、他の分散検索装置に検索を依頼するに当たり、前記装置情報記憶手段に記憶されている装置情報によって特定される他の分散検索装置に検索を依頼することを特徴とする分散検索装置が提案されている（特許文献１を参照）。【０００３】
また、探索対象を複数の装置で分担し、並行して処理する技術や（特許文献２を参照）、検索クエリを受け取った管理コンピューターが、各客室システムの旋律検索手段に適宜な検索範囲を指示して検索処理を分担させ、前記客室システムの前記旋律検索手段から報告された検索結果を統合して全検索範囲における検索結果を示す検索レポートを作成する技術（特許文献３を参照）、等が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−００５８２７号公報
【特許文献２】特開２０００−２５９６７２号公報
【特許文献３】特開２００３−１０８１６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来、システム全体の負荷を分散するために、クエリを受け付けて実行することが可能な情報処理装置を複数備えるシステムが用いられている。このようなシステムによれば、多数のクエリを並行して処理する場合にも、比較的処理負荷の小さいクエリであれば、複数の情報処理装置にクエリを振り分けることで、処理負荷を分散することが出来る。【０００６】
しかし、従来のシステムでは、夫々のクエリの処理については、比較的処理負荷の大きいクエリであっても、１の情報処理装置で実行せざるを得ず、処理負荷を分散することができない。【０００７】
本開示にかかる技術は、上記した問題に鑑み、１のクエリに係る処理負荷を複数の情報処理装置に分散させることを課題とする。
【課題を解決するための手段】
【０００８】
本開示では、上記した課題を解決するために、以下の手段を採用した。即ち、本開示に係る情報処理装置は、データベースを管理するデータベース管理手段と、前記データベースに対するクエリに係る処理に用いられるテーブルに含まれる複数の部分の夫々を、複数の他の情報処理装置の夫々による担当部分として割り当てる割当手段と、前記複数の他の情報処理装置の夫々に対して、前記他の情報処理装置によって管理されている、前記データベースに同期された他のデータベースを参照して、前記担当部分について前記処理を行うよう指示することで、前記処理を複数の他の情報処理装置に分散実行させる、指示手段と、前記複数の他の情報処理装置から、前記担当部分についての前記処理の実行の結果を受信する結果受信手段と、前記結果受信手段によって受信された前記結果を合成することで、前記テーブルについての前記処理の実行結果を取得する合成手段と、を備える情報処理装置である。【０００９】
また、前記情報処理装置は、前記テーブルについて、前記処理に用いるバージョンを決定するバージョン決定手段を更に備え、前記指示手段は、前記処理に用いるバージョンとして、前記バージョン決定手段によって決定されたバージョンを用いて前記処理を行うように、前記複数の他の情報処理装置に指示してもよい。【００１０】
また、前記情報処理装置は、前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令に基づいて前記テーブルを更新した場合の更新履歴を作成する更新履歴作成手段と、前記更新履歴を、前記更新命令に係る担当部分が割り当てられた前記他の情報処理装置に通知する更新履歴通知手段と、を更に備えてもよい。【００１１】
また、前記情報処理装置は、前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令を識別可能な情報を、該更新命令に係る担当部分が割り当てられた他の情報処理装置に通知する更新命令識別情報通知手段を更に備えてもよい。【００１２】
また、前記情報処理装置は、前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令を識別可能な情報を、該更新命令に係る担当部分が割り当てられた他の情報処理装置に通知する更新命令識別情報通知手段と、前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令による更新が行われたバージョンを、前記テーブルについての前記処理に用いるバージョンとして決定するバージョン決定手段と、を更に備え、前記指示手段は、前記処理に用いるバージョンとして、前記バージョン決定手段によって決定されたバージョンを用いて前記処理を行うように、前記複数の他の情報処理装置に指示してもよい。【００１３】
また、前記情報処理装置は、前記クエリを、ユーザー端末から受け付けるクエリ受付手段と、前記合成手段による合成によって得られた、前記テーブル全体についての前記処理の実行結果に基づいて、前記クエリへの応答を前記ユーザー端末に対して返す応答手段と、を更に備えてもよい。【００１４】
また、前記情報処理装置は、前記クエリに含まれる処理の夫々を表すノードが、処理されるべき順序に従ってツリー状に配置されたプランツリーを作成するプランツリー作成手段と、前記プランツリーの解析結果に従って、前記分散実行の対象となる処理を決定する対象決定手段と、
を更に備えてもよい。【００１５】
また、前記情報処理装置は、前記プランツリーに含まれる各ノードによって表される処理について、前記分散実行の可能性を判定する可能性判定手段を更に備え、前記対象決定手段は、前記可能性判定手段によって分散実行可能と判定された処理を、前記分散実行の対象として決定してもよい。【００１６】
また、前記情報処理装置は、前記可能性判定手段によって分散実行不可能と判定された処理と前記プランツリーにおいて該処理より上位に接続された処理とを、前記分散実行の対象から除外する不可処理除外手段を更に備えてもよい。【００１７】
また、前記可能性判定手段は、前記プランツリーにおける下位ノードから上位ノードに向けて順に判定を行ってもよい。【００１８】
また、前記情報処理装置は、前記プランツリーに含まれる各ノードによって表される処理について、前記分散実行の適性を判定する適性判定手段と、前記適性判定手段によって前記分散実行に適さない処理であると判定された処理と前記プランツリーにおいて該処理より下位に接続された処理とを、前記分散実行の対象から除外する不適処理除外手段と、を更に備えてもよい。【００１９】
また、前記適性判定手段は、前記プランツリーにおける上位ノードから下位ノードに向けて順に判定を行ってもよい。【００２０】
また、本開示は、次のように把握することも可能である。即ち、本開示に係る情報処理装置は、他の情報処理装置によって管理される他のデータベースに同期されたデータベースを管理するデータベース管理手段と、前記他の情報処理装置が受け付けたクエリに係る処理に用いられるテーブルにおける、該情報処理装置の担当部分についての、該処理の実行指示を、前記他の情報処理装置から受け付ける指示受付手段と、前記データベース管理手段によって管理されるデータベースを参照して、前記担当部分について前記処理を実行する処理実行手段と、前記担当部分についての前記処理の実行の結果を、前記他の情報処理装置に対して送信する結果送信手段と、を備える情報処理装置である。【００２１】
また、前記情報処理装置は、前記テーブルについて、前記処理に用いるバージョンを前記他の情報処理装置から取得するバージョン取得手段を更に備え、前記処理実行手段は、前記バージョンのテーブルに基づいて、前記処理を実行してもよい。【００２２】
また、前記情報処理装置は、前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令に基づいて前記テーブルを更新した場合の更新履歴を、前記他の情報処理装置から取得する更新履歴取得手段を更に備え、前記処理実行手段は、前記バージョン取得手段によって取得されたバージョンのテーブルに前記更新履歴を反映した情報を参照して、前記処理を行ってもよい。【００２３】
また、前記情報処理装置は、前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令を識別可能な情報を、前記他の情報処理装置から取得する更新命令識別情報取得手段と、前記更新命令を識別可能な情報に基づいて、該更新命令に基づいて更新された内容を特定する更新内容特定手段と、を更に備え、前記処理実行手段は、前記更新内容特定手段によって特定された更新内容を更に参照して、前記処理を実行してもよい。【００２４】
また、前記情報処理装置は、前記クエリを含むトランザクションに、前記テーブルに係る更新命令が含まれる場合に、該更新命令による更新が行われたバージョンを、前記他の情報処理装置から、前記テーブルについて前記処理に用いるバージョンとして取得するバージョン取得手段を更に備え、前記処理実行手段は、前記バージョンのテーブルに基づいて、前記処理を実行してもよい。【００２５】
なお、本開示は、コンピューターシステム、情報処理装置、コンピューターによって実行される方法、またはコンピューターに実行させるプログラムとして把握することが可能である。また、本開示は、そのようなプログラムをコンピューターその他の装置、機械等が読み取り可能な記録媒体に記録したものとしても把握できる。ここで、コンピューター等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピューター等から読み取ることができる記録媒体をいう。
【発明の効果】
【００２６】
本開示に係る技術によれば、１のクエリに係る処理負荷を複数の情報処理装置に分散させることが可能となる。
【図面の簡単な説明】
【００２７】
【図１】実施形態に係るシステムのハードウェア構成の概略を示す図である。
【図２】実施形態に係るノードの機能構成の概略を示す図である。
【図３】実施形態において、ノードによって実行される分散実行指示処理の流れを示すフローチャートである。
【図４】実施形態において、ノードによって実行される分散実行処理の流れを示すフローチャートである。
【図５】実施形態において、ノードによって実行されるクエリ解析処理の流れを示すフローチャートである。
【図６】実施形態において作成されるプランツリーを例示する図である。
【図７】実施形態に係るノードの機能構成の概略を示す図Ｂである。
【図８】実施形態において、ノードによって実行される分散実行指示処理の流れを示すフローチャートＢである。
【図９】実施形態において、ノードによって実行される分散実行処理の流れを示すフローチャートＢである。
【発明を実施するための形態】
【００２８】
以下、本開示に係るシステム、情報処理装置、方法およびプログラムの実施の形態を、図面に基づいて説明する。但し、以下に説明する実施の形態は、実施形態を例示するものであって、本開示に係るシステム、情報処理装置、方法およびプログラムを以下に説明する具体的構成に限定するものではない。実施にあたっては、実施形態に応じた具体的構成が適宜採用され、また、種々の改良や変形が行われてよい。
【００２９】
本開示に係るシステムでは、複数の情報処理装置（ノード）が互いに通信可能に接続されている。これら複数のノードは、何れも、クエリを受け付けて実行することが可能なノードである。また、これら複数のノードは、夫々、自身が管理するデータベースを有しており、これらのデータベースは、レプリケーション技術によって同期されている。データベース同期のためのレプリケーション技術としては、例えば、トランザクションログを順次反映していくようなログベースのレプリケーション技術が採用されてよい。
【００３０】
ここで、例えば、大きなテーブルおよび複数の小さなテーブルを用いるＪＯＩＮ構文の実行では、大きなテーブルに係る処理が比較的重い処理となる。このため、本開示では、大きなテーブルに含まれる複数の部分（これら複数の部分は、テーブルが等分されたものであってもよいし、異なるサイズに分割されたものであってもよい）の夫々について、処理を担当するノードを決定し、決定された複数のノードに処理を分散実行させる。
【００３１】
より具体的には、クエリを受け付けたノードは、分散実行の指示を行う分散実行指示ノードとして動作することで、テーブルの分割方法および担当等を決定し、他のノードに、クエリの内容、および各ノードの担当等を通知し、担当部分についての処理実行を指示する。指示を受けたノードは、命令実行ノードとして、担当部分についての処理を実行し、実行結果を、指示を発したノードに対して送信する。分散実行指示ノードは、分散実行を行った各命令実行ノードから送信された実行結果を受信して集計する。
【００３２】
＜第一の実施形態＞
はじめに、第一の実施形態について説明する。第一の実施形態では、分散実行の対象となっているクエリが含まれるトランザクション中の更新を考慮した分散実行を行う場合について説明する。
【００３３】
＜＜システムの構成＞＞
図１は、本実施形態に係るシステムのハードウェア構成の概略を示す図である。本実施形態に係るシステムは、ユーザー端末９からの検索要求（クエリ）に応答するための複数のノード（情報処理装置）１を備える。複数のノード１は、ネットワークを介して互いに通信可能に接続される。
【００３４】
各ノード１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２およびＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１３等からなる制御部１０と、補助記憶装置１４と、通信インターフェース１５と、を備えるコンピューターである。但し、ノード１の具体的なハードウェア構成に関しては、実施の形態に応じて適宜省略や置換、追加が可能である。また、ノード１は、単一の装置に限定されない。ノード１は、所謂クラウドや分散コンピューティングの技術等を用いた、複数の装置によって実現されてよい。
【００３５】
本実施形態では、システムに属するノードが、分散実行指示ノード（分散実行を指示するノード）および命令実行ノード（分散実行の指示を受けて処理を分散実行するノード）の何れにも成り得る構成について説明する。このため、何れのノードも、分散実行の指示のための分散実行指示機能と、分散処理の対象範囲を決定するためのクエリ解析機能と、分散実行の指示を受けて処理を実行するための命令実行機能と、を備える。
【００３６】
但し、分散実行指示ノードと命令実行ノードは予め決定されていてもよい。この場合、分散実行指示ノードにしかならないノードは、分散実行のための命令実行機能を有さなくてもよいし、命令実行ノードにしかならないノードは、指示のための分散実行指示機能を有さなくてもよい。
【００３７】
なお、本実施形態では、ノードを区別することなくノード一般について述べる場合には「ノード１」と記載し、ノードを区別して述べる場合には「分散実行指示ノード１」、「命令実行ノード１」のように記載する。また、本開示に係るシステムは、階層構造を有するデータベースシステムや、マルチマスターのデータベースシステムに適用可能であるが、この際、データベースシステムにおけるマスターノードおよびスレーブノードの何れであっても、分散実行指示ノード１または命令実行ノード１とすることが出来る。
【００３８】
図２は、本実施形態に係るノード１の機能構成の概略を示す図である。本実施形態に係るノード１は、ＣＰＵ１１が、ＲＡＭ１２に展開された各種プログラムを解釈および実行して、ノード１に備えられた各種ハードウェアを制御することで、データベース管理部２１、クエリ受付部２２、割当部２３、バージョン決定部２４、更新履歴作成部２５、更新履歴通知部２６、指示部２７、結果受信部２８、合成部２９、応答部３０、プランツリー作成部３１、適性判定部３２、不適処理除外部３３、可能性判定部３４、不可処理除外部３５、対象決定部３６、指示受付部３７、バージョン取得部３８、更新履歴取得部３９、処理実行部４０および結果送信部４１を備えるコンピューターとして機能する。
【００３９】
本実施形態では、ノード１の機能が汎用のＣＰＵ１１によって実行される例について説明しているが、これらの機能は、その一部または全部が、１または複数の専用のプロセッサによって実現されてもよい。
【００４０】
データベース管理部２１は、データベースを管理する。当該データベースは、データベース管理部２１によって、他のノードによって管理される他のデータベースに同期されている。即ち、データベース管理部２１は、レプリケーション技術によって、ネットワークを介して接続された、他のノードが管理するデータベースと、当該データベース管理部２１が管理するデータベースとを同期する。
【００４１】
処理実行部４０は、データベース管理部２１によって管理されるデータベースを参照して、担当部分について処理を実行する。なお、命令実行ノードが分散実行指示ノードによる命令を受けて処理を実行する場合には、当該命令実行ノードの処理実行部４０は、後述するバージョン取得部３８によって取得されたバージョンのテーブルに更新履歴を反映した情報を参照して、処理を行う。
【００４２】
分散実行指示機能は、以下に説明するクエリ受付部２２、割当部２３、バージョン決定部２４、更新履歴作成部２５、更新履歴通知部２６、指示部２７、結果受信部２８、合成部２９および応答部３０によって実現される。
【００４３】
クエリ受付部２２は、ユーザー端末から送信されたクエリを受け付ける。
【００４４】
割当部２３は、データベースに対するクエリに係る処理に用いられるテーブルに含まれる複数の部分の夫々を、複数の命令実行ノードの夫々による担当部分として割り当てる。具体的には、割当部２３は、システムに属するノードから、分散実行の指示を行う複数のノードを選定する。そして、割当部２３は、選定されたノードが分割読み出しの対象となるテーブルの何れの部分を担当するかを決定する。但し、先にテーブルを分割する数を決定し、テーブルが分割される数だけのノードを選定することとしてもよい。
【００４５】
バージョン決定部２４は、命令実行ノード間で処理の対象となるデータに相違が生じないようにするため、テーブルについて、処理に用いるバージョンを決定する。ここで、バージョンとは、ある時点におけるデータベースの内容および状態を特定するための情報である。
【００４６】
更新履歴作成部２５は、クエリを含むトランザクションに、テーブルに係る更新命令が含まれる場合に、当該更新命令に基づいてテーブルを更新した場合の更新履歴を作成する。更新履歴作成部２５は、テーブル中の更新されたレコードを識別可能な情報と、具体的な更新の内容と、が関連づけられた情報を、更新履歴として作成する。
【００４７】
更新履歴通知部２６は、更新履歴を、更新命令に係る担当部分が割り当てられた命令実行ノードに通知する。
【００４８】
本実施形態では、分散実行中のノードが更新された場合、更新履歴作成部２５が更新履歴を作成し、更新履歴通知部２６が更新履歴を命令実行ノードに送信することで、分散処理を行う命令実行ノードに、当該他のノードが管理するテーブルと更新履歴とを組み合わせて処理を行わせることとしている。このため、本開示に係る仕組みは、トランザクション実行中に発行された更新命令に係る更新内容に従って、当該トランザクションがコミットされる前にデータベースの実体が変更されるようなデータベースシステムに対しても、当該トランザクションがコミットされた後にデータベースの実体が変更されるようなデータベースシステムに対しても、適用することが出来る。
【００４９】
例えば、分散実行指示ノードにおいて実行中のトランザクションにテーブルＢの更新命令（ＩＮＳＥＲＴやＤＥＬＥＴＥ等）が含まれており、更にテーブルＡとテーブルＢとのＪＯＩＮ構文が含まれている場合を想定する。
【００５０】
このとき、トランザクションがコミットされた後にデータベースの実体が変更されるようなデータベースシステムでは、例えば「テーブルＢを分散実行指示ノードがどのように更新したかという情報」は、分散実行指示ノードのメモリ上のみに存在しており、分散実行を行う命令実行ノードは、この情報を有していない。そこで、本実施形態では、分散実行の指示を送信する際に、テーブルのバージョン情報と併せて当該更新命令に係る更新履歴を送信することとしている。即ち、本実施形態において、分散実行指示ノードは、分散処理の対象となっているクエリに関連する更新履歴を、分散処理を行わせる命令実行ノードに対して優先的に送信する。命令実行ノードは、バージョン情報に示されたテーブル本体と更新履歴とを組み合わせることで得られたデータに基づいて、担当分のクエリを実行する。命令実行ノード側の処理については、更新履歴取得部３９および処理実行部４０による処理として改めて後述する。
【００５１】
一方、トランザクションがコミットされる前にデータベースの実体が変更されるようなデータベースシステムでは、命令実行ノードが処理を実行する時点において、トランザクションの更新情報は命令実行ノードに既に反映されているため、上記のような処理は必須ではない。但し、このようなデータベースシステムにおいても、本実施形態に係る処理が採用されてよい。本実施形態に係る処理を採用した場合には、仮に命令実行ノードによる処理実行時点までにデータベースの実体変更が間に合わないような状況が発生しても、問題なくクエリを処理することが出来る。
【００５２】
指示部２７は、複数の命令実行ノードの夫々に対して、担当部分について処理を行うよう指示することで、処理を複数の命令実行ノードに分散実行させる。この際、指示部２７は、各命令実行ノードによって管理されているデータベースを参照して、処理を行うよう指示する。ここで、上述の通り、各命令実行ノードによって管理されているデータベースは、分散実行指示ノードのデータベースに同期されている。また、指示部２７は、処理に用いるバージョンとして、バージョン決定部２４によって決定されたバージョンを用いて処理を行うように、複数の命令実行ノードに指示する。
【００５３】
結果受信部２８は、複数の命令実行ノードから、担当部分についての処理の実行の結果を受信する。
【００５４】
合成部２９は、結果受信部２８によって受信された結果を合成することで、テーブルについての処理の実行結果を取得する。
【００５５】
応答部３０は、合成部２９による合成によって得られた、テーブル全体についての処理の実行結果に基づいて、クエリへの応答をユーザー端末に対して返す。
【００５６】
クエリ解析機能は、以下に説明するプランツリー作成部３１、適性判定部３２、不適処理除外部３３、可能性判定部３４、不可処理除外部３５および対象決定部３６によって実現される。
【００５７】
プランツリー作成部３１は、プランツリーを作成する。ここで、プランツリーとは、クエリに含まれる処理の夫々を表すプランノード（情報処理装置を示すノードとの混同を避けるため、「プランノード」と記載する）が、処理されるべき順序に従ってツリー状に配置されたものである。
【００５８】
適性判定部３２は、プランツリーに含まれる各プランノードによって表される処理について、処理によって発生する負荷に基づいて、分散実行の適性を判定する。即ち、適性判定部３２は、プランノードに示された処理を分散実行した場合に発生する負荷を予測し、この負荷が所定以上であると予測されるような場合に、当該処理に係るプランノードを分散実行に不適なプランノードであると判定する。この際、適性判定部３２は、プランツリーにおける上位プランノードから下位プランノードに向けて順に判定を行う。
【００５９】
不適処理除外部３３は、適性判定部３２によって分散実行に適さない処理であると判定された処理と、プランツリーにおいて当該処理より下位に接続された処理とを、分散実行の対象から除外する。
【００６０】
可能性判定部３４は、プランツリーに含まれる各プランノードによって表される処理について、処理の内容に基づいて、分散実行の可能性を判定する。即ち、可能性判定部３４は、プランノードに示された処理の内容が、当該システムにおいて分散実行可能な内容の処理であるか否かを判定することで、分散実行の可能性を判定する。ここで、「分散実行の可能性」は、当該システムの持つ機能や設定内容に基づいて、当該システムによって分散実行が可能か否かを示す可能性である。このため、プランノードが示す処理の内容が同一（例えば、ＡＶＥＲＡＧＥ構文）であっても、システムによって分散実行可能な処理と分散実行不可能な処理とが異なることがある。この際、可能性判定部３４は、プランツリーにおける下位プランノードから上位プランノードに向けて順に判定を行う。
【００６１】
不可処理除外部３５は、可能性判定部３４によって分散実行不可能と判定された処理と、プランツリーにおいて当該処理より上位に接続された処理とを、分散実行の対象から除外する。
【００６２】
対象決定部３６は、プランツリーの解析結果に従って、分散実行の対象となる処理を決定する。本実施形態では、対象決定部３６は、可能性判定部３４によって分散実行可能と判定された処理を、分散実行の対象として決定する。
【００６３】
命令実行機能は、以下に説明する指示受付部３７、バージョン取得部３８、更新履歴取得部３９および結果送信部４１によって実現される。
【００６４】
指示受付部３７は、分散実行指示ノードが受け付けたクエリに係る処理に用いられるテーブルにおける、当該情報処理装置の担当部分についての、当該処理の実行指示を、分散実行指示ノードから受け付ける。
【００６５】
バージョン取得部３８は、分散処理の対象となっているテーブルについて、処理に用いるバージョンを分散実行指示ノードから取得する。
【００６６】
更新履歴取得部３９は、クエリを含むトランザクションに、テーブルに係る更新命令が含まれる場合に、当該更新命令に基づいてテーブルを更新した場合の更新履歴を、分散実行指示ノードから取得する。
【００６７】
結果送信部４１は、担当部分についての処理の実行の結果を、分散実行指示ノードに対して送信する。
【００６８】
なお、上述の通り、第一の実施形態では、分散実行の対象となっているクエリが含まれるトランザクション実行中の更新を考慮する実施形態を説明している。しかし、分散実行の対象となっているクエリを実行するにあたって、当該クエリに係るトランザクション実行中のデータベースの更新を考慮しないような実施形態、換言すれば、分散実行において、当該クエリを含むトランザクションによる更新内容を無視するような実施形態では、更新履歴作成部２５、更新履歴通知部２６および更新履歴取得部３９は省略されてよい。
【００６９】
＜＜処理の流れ＞＞
次に、本実施形態に係る処理の詳細を説明する。なお、本実施形態において説明される処理の具体的な内容および順序等は、本開示を実施する上での一例である。具体的な処理内容および順序等は、実施の態様に応じて適宜選択されてよい。
【００７０】
図３は、本実施形態において、ノード１によって実行される分散実行指示処理の流れを示すフローチャートである。本フローチャートに示された処理は、ノード１において、クエリが受け付けられたことを契機として開始される。
【００７１】
ステップＳ１０１からステップＳ１０３では、クエリが受信され、当該クエリを分散実行の対象とするか否かが決定される。クエリ受付部２２は、ユーザー端末９から送信されたクエリを受け付ける（ステップＳ１０１）。受け付けられたクエリは、受信ノードが備えるクエリ解析機能（プランツリー作成部３１、適性判定部３２、不適処理除外部３３、可能性判定部３４、不可処理除外部３５および対象決定部３６）によって解析される（ステップＳ１０２）。
【００７２】
なお、クエリ解析機能によるクエリ解析処理（ステップＳ１０２）では、クエリに係る処理の内容が解析され、分散実行される範囲が決定される。具体的には、クエリ解析機能は、プランツリーを作成してこれを解析し、プランツリーの解析結果に従って、分散実行の対象となる処理を決定する。クエリ解析処理の具体例については、図５に示すフローチャートを用いて後述する。
【００７３】
クエリを受信したノードは、クエリ解析処理の結果に従って、受け付けたクエリを、自身で処理するか、または他のノードに分散実行させるかを決定する（ステップＳ１０３）。クエリ解析の結果、クエリに係る処理の一部でも分散実行の対象となった場合、処理はステップＳ１０５へ進み、以降、クエリを受信したノードは、分散実行指示ノードとして動作する。一方、クエリ解析の結果、クエリに係る処理に分散実行の対象となる部分が無かった場合、処理はステップＳ１０４へ進む。
【００７４】
ステップＳ１０４では、ユーザー端末９からクエリを受け付けたノード自身によって、クエリに係る処理が実行される。処理実行部４０は、ステップＳ１０２で作成されたプランツリーに従って、クエリを受け付けたノードのデータベース管理部２１によって管理されるデータベースを参照して、データベースに対するクエリに係る処理を実行する。即ち、この場合には分散実行は行われない。その後、処理はステップＳ１１３へ進む。
【００７５】
ステップＳ１０５では、処理に用いられるバージョンが決定される。バージョン決定部２４は、テーブルについて、処理に用いるバージョンを決定する。その後、処理はステップＳ１０６へ進む。
【００７６】
ステップＳ１０６では、処理に用いられるテーブルの分割方法、および分割された各部分を担当するノードが決定される。割当部２３は、クエリに係る処理に用いられるテーブルに含まれる複数の部分の夫々を、複数の命令実行ノードの夫々による担当部分として割り当てる。例えば、割当部２３は、システムに属するノードから、命令実行ノードとして、複数（例えば、５つ）のノードを選定する。選定に際しては、各ノードの現在の稼働状態等が参照され、負荷がより少ないノードが選定されてよい。ノードが選定されると、割当部２３は、選定された複数のノードの何れのノードがテーブルの何れの部分を担当するかを決定する。ここで、テーブルは、ノード数で等分（例えば、５等分）されてもよいし、ノードの処理能力に応じて分割されてもよい。その後、処理はステップＳ１０７へ進む。
【００７７】
なお、分散処理の対象となる処理が複数テーブルのＪＯＩＮである場合、ステップＳ１０６では、複数のテーブルのうち何れのテーブルを分割の対象とするか決定し、決定されたテーブルが分割される。例えば、比較的大きなテーブルが１つで他のテーブルが比較的小さい場合には、通常、最も大きなテーブルを分割対象とする。
【００７８】
但し、分割の対象とするテーブルは１つに限定されなくてもよい。例えば、大きなテーブルが複数有り、且つ十分な数の命令実行ノードが確保できるような場合には、複数テーブルを分割対象とし、分割された異なるテーブルの部分の組み合わせを各命令実行ノードに割り当てることで、ＪＯＩＮ命令に係る複数のテーブルを分割読み出しの対象とすることが出来る。具体的には、例えばテーブルＸをｘ個に分割し、テーブルＹをｙ個に分割した場合、分割されたテーブルＸの部分とテーブルＹの部分との組み合わせがｘ＊ｙ個出来る。このため、ｘ＊ｙ個の組み合わせの夫々について担当する命令実行ノードを決定することで、ＪＯＩＮ命令の分散処理において２つのテーブルを分割読み出しの対象とすることが出来る。同様の方法で、３以上のテーブルについても分割読み出しの対象とすることが可能である。
【００７９】
ステップＳ１０７およびステップＳ１０８では、受信クエリに係るトランザクションに当該ノードが管理するデータベースの更新命令が含まれている場合に、この更新が適用された場合の更新履歴を作成する。更新履歴作成部２５は、クエリを含むトランザクションに、テーブルに係る更新命令が含まれるか否かを判定し（ステップＳ１０７）、更新命令が含まれる場合に、当該更新命令に基づいてテーブルを更新した場合の更新履歴を作成する（ステップＳ１０８）。具体的な更新履歴の作成方法は、更新履歴作成部２５の説明において上述した通りである。その後、処理はステップＳ１０９へ進む。
【００８０】
ステップＳ１０９では、命令実行ノードに対する指示が送信される。指示部２７は、ステップＳ１０６で選定された複数の命令実行ノードの夫々に対して、各々の命令実行ノードによって管理されているデータベース（これらのデータベースは、互いに同期されている）を参照して、担当部分について処理を行うよう指示することで、処理を複数の命令実行ノードに分散実行させる。この際、指示部２７は、各命令実行ノードに対して、分散処理の対象となっているクエリの内容を通知し、更に、処理に用いるバージョンとして、バージョン決定部２４によって決定されたバージョンを用いて処理を行うように、命令実行ノードに指示する。ここで、実施形態に係るシステムにおいてログベースのレプリケーション技術が採用されている場合には、指定されたバージョンに対応するトランザクションログを特定可能なように、指示部２７は、決定されたバージョンに対応するトランザクションシーケンス番号（ＬＳＮ）を通知する。
【００８１】
また、上記ステップＳ１０８において更新履歴が作成されている場合、更新履歴通知部２６は、更新履歴を、更新命令に係る担当部分が割り当てられた命令実行ノードに通知する。その後、処理はステップＳ１１０へ進む。
【００８２】
ステップＳ１０９における指示が行われると、指示を受けた複数のノードは、命令実行ノードとして動作し、分散実行指示ノードからの指示に従って、各々が担当する部分について、クエリに係る処理を実行する。
【００８３】
図４は、本実施形態において、ノード１によって実行される分散実行処理の流れを示すフローチャートである。本フローチャートに示された処理は、ノード１において、分散実行指示ノードより送信された（図３のステップＳ１０９を参照）分散実行の指示が受け付けられたことを契機として開始される。即ち、本フローチャートは、ノードが命令実行ノードとして動作する場合のフローチャートである。
【００８４】
ステップＳ２０１では、分散実行指示ノードより送信された分散実行の指示が受け付けられる。具体的には、指示受付部３７は、当該ノードの担当部分（分散実行指示ノードが受け付けたクエリに係る処理に用いられるテーブルにおける担当部分）についての、当該処理の実行指示を、分散実行指示ノードから受け付ける。また、バージョン取得部３８は、テーブルについて、処理に用いるバージョンを分散実行指示ノードから取得する。
【００８５】
上述の通り、クエリを含むトランザクションに、テーブルに係る更新命令が含まれる場合には、この更新が適用された場合の更新履歴が作成され、作成された更新履歴が、更新命令に係る担当部分が割り当てられた命令実行ノードに通知される（ステップＳ１０８およびステップＳ１０９を参照）。このため、クエリを含むトランザクションに、テーブルに係る更新命令が含まれる場合、更新履歴取得部３９は、当該更新命令に基づいてテーブルを更新した場合の更新履歴を、分散実行指示ノードから取得する。その後、処理はステップＳ２０２へ進む。
【００８６】
ステップＳ２０２では、指定されたバージョンのテーブルが揃うまでの待機処理が行われる。具体的には、命令実行ノードは、ステップＳ２０１でバージョン取得部３８によって取得されたバージョンのテーブルが当該命令実行ノードに存在することが確認されるまで、待機する。例えば、実施形態に係るシステムにおいてログベースのレプリケーション技術が採用されている場合には、指定されたバージョンに対応するトランザクションログが反映されるまで待機すればよい。ここで、トランザクションログの反映有無は、例えば、分散実行指示ノードより通知されたトランザクションシーケンス番号（ＬＳＮ）を参照することで知ることが可能である。その後、処理はステップＳ２０３へ進む。
【００８７】
ステップＳ２０３およびステップＳ２０４では、更新履歴が取得されている場合に、更新履歴を反映した情報が作成される。命令実行ノードの夫々は、ステップＳ２０１において更新履歴取得部３９によって更新履歴が取得されたか否かを判定し（ステップＳ２０３）、更新履歴が取得されている場合、分散実行指示ノードから取得された更新履歴を、バージョン取得部３８によって取得されたバージョンのテーブルに反映した情報を作成する（ステップＳ２０４）。より具体的には、命令実行ノードは、データベース内のレコードを１行ずつ読み出し、読み出した行のうち更新履歴が存在しない行については、データベース内のレコードを検索対象とし、読み出した行のうち更新履歴が存在する行については、データベース内のレコードに代えて、更新履歴の行を検索対象とする。但し、ここで得られたデータは検索に用いられるのみであり、当該レコードについて実際に更新が行われるのは、当該データベースが備えるレプリケーション機能によって決定されるタイミング（例えば、同期されたコミットのタイミング）である。即ち、命令実行ノードは、分散処理においては自身のデータベースを更新しなくてもよい。一方、更新履歴が取得されてない場合、ステップＳ２０４に示された処理は省略される。その後、処理はステップＳ２０５へ進む。
【００８８】
ステップＳ２０５では、担当する範囲に応じて実行すべき分散実行用クエリが作成される。はじめに、分散実行の指示を受けた命令実行ノードは、受信したクエリに基づいて、自身が担当する部分についての処理が実行出来るようにカスタマイズされた、分散実行用クエリを作成する。具体的には、オリジナルのクエリがテーブル全体を検索の対象としているが、当該命令実行ノードが担当する範囲が当該テーブルの一部であるような場合、オリジナルのクエリに基づいて、当該命令実行ノードが担当するテーブルのブロックを指定した分散実行用クエリを作成する。なお、本実施形態では、各命令実行ノードが、自身が実行する分散実行用クエリを作成することとしているが、各命令実行ノードが実行する分散実行用クエリを、分散実行指示ノードが予め作成して、指示に含めて命令実行ノードに通知することとしてもよい。その後、処理はステップＳ２０６へ進む。
【００８９】
ステップＳ２０６では、分散実行用のプランツリーが作成される。プランツリー作成部３１は、分散実行用クエリに含まれる命令の夫々を表すプランノードが、実行されるべき順序に従ってツリー状に配置された、分散実行用のプランツリーを作成する。
【００９０】
ステップＳ２０７では、作成された分散実行用クエリが実行される。処理実行部４０は、ステップＳ２０６で作成された分散実行用のプランツリーに従って、分散実行用クエリを実行する。これによって、データベース管理部２１によって管理されるデータベースを参照して、担当部分についての処理が実行される。この際、処理実行部４０は、ステップＳ２０４で作成された、バージョン取得部３８によって取得されたバージョンのテーブルに更新履歴を反映した情報を参照して、処理を行う。その後、処理はステップＳ２０８へ進む。
【００９１】
ステップＳ２０８では、分散実行用クエリの実行結果が送信される。結果送信部４１は、担当部分についての処理の実行の結果を、ステップＳ２０１で受信した指示の送信元である分散実行指示ノードに対して送信する。その後、図３のフローチャートに示された処理は終了する。
【００９２】
なお、本実施形態では、本開示の理解を容易にするために、命令実行ノードが、自身が担当する部分についての処理を実行するための分散実行用クエリを作成し、これを実行する実施例を説明しているが、各命令実行ノードによる分散実行は、本実施形態に説明するような分散実行用クエリに拠らなくてもよい。例えば、命令実行ノードは、分散実行指示ノードがステップＳ１０２で作成したプランツリーの全部または一部を受け取ることで、分散実行用クエリを作成すること無く、受け取ったプランツリーに基づいて当該命令実行ノードが担当するテーブル内のブロック等が指定された分散実行用のプランツリーを作成することが出来る。後述するプランツリー上のノードのうち、自身が担当するノードの構文を、直接、テーブルのうち自身が担当する部分に対して実行することが出来る。
【００９３】
次に、図３に戻り、分散実行指示ノードによる処理の続きを説明する。
【００９４】
ステップＳ１１０およびステップＳ１１１では、分散実行の指示を受けた命令実行ノードから送信された処理の実行結果が受信され、集計される。結果受信部２８は、複数の命令実行ノードから、担当部分についての処理の実行の結果を受信する（ステップＳ１１０）。そして、合成部２９は、結果受信部２８によって複数の命令実行ノードから受信された結果、およびステップＳ１１０における自身による実行結果を合成することで、テーブルについての処理の実行結果を取得する（ステップＳ１１１）。その後、処理はステップＳ１１２へ進む。
【００９５】
ステップＳ１１２では、ユーザー端末９からクエリを受け付けたノード自身が担当する処理が実行される。処理実行部４０は、ステップＳ１０２で作成されたプランツリーに従って、クエリを受け付けたノードのデータベース管理部２１によって管理されるデータベースを参照して、データベースに対するクエリに係る処理のうち、分散実行の範囲外となった処理を実行する。この際、処理実行部４０は、必要に応じて、ステップＳ１１１において得られた分散実行の結果を利用する。その後、処理はステップＳ１１３へ進む。
【００９６】
ステップＳ１１３では、ステップＳ１１０からステップＳ１１２までの処理で得られたクエリの実行結果、またはステップＳ１０４において自ノードで実行されることで得られたクエリの実行結果が、ユーザー端末に対して送信される。応答部３０は、クエリの実行結果がステップＳ１１０からステップＳ１１２までの処理によって得られている場合には、合成部２９による合成によって得られた、テーブル全体についての処理の実行結果に基づいて、クエリへの応答をユーザー端末に対して返す。一方、応答部３０は、クエリの実行結果がステップＳ１０４において得られている場合には、この実行結果をユーザー端末に対して返す。その後、図４のフローチャートに示された処理は終了する。
【００９７】
本実施形態に係るシステムによれば、図３および図４を用いて上記説明した分散実行指示処理および分散実行処理が、システムに所属する複数のノードのうち、クエリを受信したノード（分散実行指示ノード）および分散実行指示を受けたノード（命令実行ノード）によって処理されることによって、クエリの分散実行が実現され、１のクエリに係る処理負荷を複数の情報処理装置に分散させることが出来る。
【００９８】
また、本開示の技術によれば、複数のノードの各々が互いに同期されたデータベースを管理しているため、分散実行するか否か、および分散する場合の担当を自由に決定することが可能である。更に、本開示の技術によれば、例えば、先述したＪＯＩＮ構文のような構文を実行する際の処理も分散することが可能である。加えて、分割の態様（分割される数や分割される部分のサイズ等）も、各ノードの負荷に応じて適宜変更することが可能である。
【００９９】
次に、分散実行の範囲を決定するためのクエリ解析処理の流れについて説明する。但し、本実施形態において説明するクエリ解析処理は、分散実行される範囲を決定するための処理の一例である。分散実行される範囲を決定するための処理には、他のアルゴリズムが採用されてもよい。
【０１００】
図５は、本実施形態において、ノード１によって実行されるクエリ解析処理の流れを示すフローチャートである。本フローチャートに示された処理は、図３に示した分散実行指示処理における、ステップＳ１０２の処理に相当する。
【０１０１】
ステップＳ３０１では、プランツリーが作成される。プランツリー作成部３１は、クエリに含まれる命令の夫々を表すプランノードが、実行されるべき順序に従ってツリー状に配置されたプランツリーを作成する。
【０１０２】
図６は、本実施形態において作成されるプランツリーを例示する図である。本開示に係る分散実行を行う場合、プランツリーを作成してこれを解析し、クエリに含まれる何れの命令を分散実行の対象とするか決定する。解析では、ツリーの根から末端、そして末端から根に向けて分散実行の適否や可否を判定しながら、分散実行の対象とする範囲を決定していく。
【０１０３】
生成されたプランツリーの各プランノードは、クエリに含まれる各命令（構文）を示す。プランツリーには、ツリーの葉（即ち、最下位のプランノード）に示された命令から実行が開始された後、命令の実行が終わると実行結果が上位のプランノード（親プランノード）に渡され、実行結果を受けたプランノードに示された命令が実行されることが繰り返されることでクエリが処理される流れが示されている。プランツリーが作成されると、処理はステップＳ３０２へ進む。
【０１０４】
ステップＳ３０２からステップＳ３０５では、プランツリー上のプランノードについて、分散実行に適しているか否かが判定される。適性判定部３２は、プランツリーに含まれる各プランノードによって表される命令について、分散実行の適性を判定する（ステップＳ３０３）。そして、不適処理除外部３３は、適性判定部３２によって分散実行に適さないと判定された命令とプランツリーにおいて当該命令より下位に接続された命令とを、分散実行の対象から除外する（ステップＳ３０４）。
【０１０５】
図６に示されたプランツリーでは、クエリ中にＲＥＰＥＡＴ構文等が存在する。ここで、ＲＥＰＥＡＴ構文を実行するための分散実行の指示と実行結果の取得とがネットワークを介して複数回に亘って行われた場合、命令実行ノードから分散実行指示ノードへの通信におけるネットワークが飽和してしまう可能性がある。また、ＲＥＰＥＡＴ構文が先の命令の結果を再帰的に利用するものであった場合、実行結果を得た分散実行指示ノードが命令実行ノードに対して繰り返し処理の都度実行結果に基づく値を指示する必要がある等、処理が煩雑になる可能性がある。このため、適性判定部３２は、ＲＥＰＥＡＴ構文に係るプランノードの命令を、分散実行に適さない命令として判定し、不適処理除外部３３は、当該プランノードおよびその下位のプランノードに係る命令を、分散実行の対象から除外する。
【０１０６】
上記処理では、分散実行に適さないと判定された命令およびその下位の命令が分散実行の対象から除外されるため、プランツリーにおける上位プランノードから順に判定していくことが効率的である。このため、適性判定部３２による判定は、プランツリーにおける上位プランノードから下位プランノードに向けて順に行われる（ステップＳ３０２）。全てのプランノードについて判定または除外が完了すると（ステップＳ３０５）、処理はステップＳ３０６へ進む。なお、分散実行に適していない命令であっても、分散実行が不可能ということではない。このため、ステップＳ３０２からステップＳ３０５に示した処理は、省略されてもよい。
【０１０７】
ステップＳ３０６からステップＳ３０９では、プランツリー上のプランノードについて、分散実行が可能であるか否かが判定される。可能性判定部３４は、プランツリーに含まれる各プランノードのうち、ステップＳ３０４で除外されなかったプランノードによって表される命令について、分散実行の可能性を判定する（ステップＳ３０７）。本実施形態において、可能性判定部３４は、以下に説明する方法で、プランノードに係る命令の分散実行可能性を判定する。具体的には、可能性判定部３４は、
（１）プランノードに示された命令が予め用意されたリストにあり、且つ
（２）当該命令の実行時点において、命令実行ノードが当該命令の実行のために必要なテーブル等の情報を有することとなる
場合、当該プランノードに示された命令を、分散実行可能な命令であると判定する。
【０１０８】
（１）の条件は、プランノードに係る命令自体が、分散実行が出来る種類の命令であることを確認するためのものであり、分散実行指示ノードは、予め分散実行が可能な種類の命令（構文）を列挙したリストを有している。本実施形態では、例えば、ＲＥＡＤ命令やＪＯＩＮ命令が、分散実行が可能な種類の命令としてリストに保持されている。但し、分散実行が可能／不可能な命令の種類は、本実施形態における例示に限定されず、実施形態に係るシステムが備える分散実行機能や設定内容に基づいて決定される。
【０１０９】
（２）の条件は、上記（１）の条件を満たすプランノードであっても、当該プランノードを実行する命令実行ノードが、命令の実行のために必要なテーブル等の情報を有していない場合には分散実行が不可能となるため、これを判定するための条件である。例えば、判定対象のプランノードが示す命令が、「当該プランノードの下位プランノードを処理する際に、当該命令実行ノードが処理結果として得た部分」、および／または「当該プランノードを実行する命令実行ノードが管理しているテーブル」のみを参照して実行可能な命令であれば、上記（２）の条件を満たすため、分散実行を指示されたノードが、指示された分散実行に必要な情報を全て把握可能であるといえる。「当該プランノードの下位プランノードを処理する際に、当該命令実行ノードが処理結果として得た部分」としては、例えば、当該プランノードがＪＯＩＮ命令のプランノードである場合に、当該命令実行ノードが、下位のＲＥＡＤ命令プランノードの処理で読み出したテーブルの部分や、当該命令実行ノードが、下位のＪＯＩＮ命令プランノードの処理で得た処理結果、等が挙げられる。一方、他のノードによる命令の実行結果から得られる情報のような、命令実行ノードが有していない情報が必要となるプランノードの命令は、分散実行出来ない。そして、分散実行出来ないプランノードの実行結果も、当該命令実行ノードは有することが出来ないため、分散実行出来ないプランノードより上位のプランノードも、同様に分散実行出来ない。
【０１１０】
図６に示されたＲＥＡＤ命令について検討する。判定対象のプランノードが示す命令がＲＥＡＤ命令である場合、上述の通りＲＥＡＤ命令は前記リストに保持されており、またデータ中のテーブルは全てのノードにレプリケーションされているため、当該ＲＥＡＤ命令のプランノードは上記（１）および（２）の条件を満たし、分散実行可能であると判定される。即ち、最も下位のＲＥＡＤ命令プランノードは、何れも分散実行可能である。図６に示した例では、テーブルＡ、ＢおよびＣのＲＥＡＤ処理を示すプランノードが、分散実行可能と判定される。なお、テーブルＤおよびＥのＲＥＡＤ処理を示すプランノードは、ステップＳ３０２からステップＳ３０５の処理で分散実行に適さないと判定されたプランノードに従属しており、可能性判定部３４による分散実行可能性の判定対象から既に除かれている。
【０１１１】
次に、図６に示されたＪＯＩＮ命令について検討する。上述の通り、ＪＯＩＮ命令は分散実行が可能な種類の命令としてリストに保持されているため、（１）の条件は満たされる。ここで、上位のプランノードでは、各命令実行ノードが、自身が分割読み出しを担当して読み出した部分の情報しか有していない可能性がある。これは、分散実行可能な、より下位のＲＥＡＤ命令プランノードが、テーブルを分割して読み出す可能性があるためである。但し、より下位のＲＥＡＤ命令プランノードにおいてテーブルの分割読み出しが行われた場合でも、各命令実行ノードに処理させるＪＯＩＮ処理の対象部分を、分割読み出しにおいて当該命令実行ノードが読み出した部分とすれば、上記（２）の条件を満たすことが出来る。
【０１１２】
なお、図６に示した例では、テーブルＡ、ＢおよびＣのＲＥＡＤ処理を示すプランノードが、分散実行可能と判定されるが、ＪＯＩＮ命令プランノードの下位プランノードにおいて複数テーブルを分割読み出しの対象とすることも可能であるのは、ステップＳ１０６の説明において上述した通りである。但し、本実施形態では、複数のテーブルについてＲＥＡＤ処理が分散実行可能であると判定された場合、最も大きいテーブル（ＲＥＡＤ処理の負荷が最も高いテーブル）のみを分割読み出しの対象とする。
【０１１３】
一方、プランツリーの途中に、例えばＪＯＩＮ構文の実行によって結合されたテーブルの平均値を計算するプランノード（ＡＶＥＲＡＧＥ構文）がある場合、分散実行指示ノード以外のノード（命令実行ノード）は、ＪＯＩＮ構文の実行によって得られた結果の全体を有していないため、（２）の条件を満たさず、本実施形態に係るシステムでは、当該プランノードを分散実行可能ではないと判定される（ステップＳ３０７を参照）。このため、本実施形態において、このプランノードは分散実行指示ノードが自身によって実行される。なお、本実施形態では、上記リストにＡＶＥＲＡＧＥ命令は保持されておらず、当該プランノードは、（１）の条件も満たさない。但し、分散実行の可能／不可能は、上述の通り、実施形態に係るシステムが備える分散実行機能や設定内容に基づいて判定される。例えば、本実施形態では、ＡＶＥＲＡＧＥ構文を分散実行するための機能を備えない実施形態について説明したが、ＡＶＥＲＡＧＥ構文を分散実行するための機能を備えるシステムにおいては、ＡＶＥＲＡＧＥ命令が前記リストに保持されてよい。ＡＶＥＲＡＧＥ命令が前記リストに保持される実施形態では、下位プランノードが単純なＲＥＡＤ命令である等の理由で（２）の条件を満たせば、ＡＶＥＲＡＧＥ命令のプランノードは分散実行可能である。
【０１１４】
図６に示されたプランツリーでは、最下位のプランノードから順に見ていくと、「ＲＥＡＤ  Ａ」のプランノード、「ＲＥＡＤ  Ｂ」のプランノード、「ＪＯＩＮ  ＡＢ」のプランノード、「ＲＥＡＤ  Ｃ」のプランノード、および「ＪＯＩＮ  ＡＢＣ」のプランノードが分散実行可能である。
【０１１５】
プランノードに示された命令が分散実行可能な命令であると判定された場合、処理はステップＳ３０９へ進む。一方、プランノードに示された命令が分散実行可能な命令でないと判定された場合、処理はステップＳ３０８へ進む。不可処理除外部３５は、可能性判定部３４によって分散実行不可能と判定された命令とプランツリーにおいて当該命令より上位に接続された命令とを、分散実行の対象から除外する（ステップＳ３０８）。
【０１１６】
上記処理では、分散実行が不可能であると判定された命令およびその上位の命令が分散実行の対象から除外されるため、プランツリーにおける下位プランノードから順に判定していくことが効率的である。このため、可能性判定部３４による判定は、プランツリーにおける下位プランノードから上位プランノードに向けて順に行われる（ステップＳ３０６）。全てのプランノードについて判定または除外が完了すると（ステップＳ３０９）、処理はステップＳ３１０へ進む。
【０１１７】
ステップＳ３１０では、分散実行の対象となる命令が決定される。対象決定部３６は、プランツリーの解析結果に従って、分散実行の対象となる命令を決定する。本実施形態では、対象決定部３６は、可能性判定部３４によって分散実行可能と判定された命令を、分散実行の対象として決定する。図６に示されたプランツリーでは、「ＲＥＡＤ  Ａ」のプランノード、「ＲＥＡＤ  Ｂ」のプランノード、「ＪＯＩＮ  ＡＢ」のプランノード、「ＲＥＡＤ  Ｃ」のプランノード、および「ＪＯＩＮ  ＡＢＣ」のプランノードが分散実行の対象として決定される。その後、本フローチャートに示された処理は終了する。
【０１１８】
本実施形態では、このようなクエリ解析処理が実行されることで、本実施形態に係る環境において分散実行に適した命令を適切に判定し、分散実行の対象とすることが出来る。
【０１１９】
＜第二の実施形態＞
次に、第二の実施形態について説明する。第二の実施形態においても、第一の実施形態と同様、分散実行の対象となっているクエリが含まれるトランザクション中の更新を考慮した分散実行を行う場合について説明する。なお、以下の説明および図７以降の図面において、第一の実施形態と共通する構成については、同一の符号をもって示し、説明を省略する。
【０１２０】
＜＜システムの構成＞＞
第二の実施形態に係るシステムのハードウェア構成は、第一の実施形態に係るシステムのハードウェア構成と概略同様であるため、説明を省略する（図１を参照）。
【０１２１】
図７は、本実施形態に係るノード１の機能構成の概略を示す図である。本実施形態に係るノード１は、ＣＰＵ１１が、ＲＡＭ１２に展開された各種プログラムを解釈および実行して、ノード１に備えられた各種ハードウェアを制御することで、データベース管理部２１、クエリ受付部２２、割当部２３、バージョン決定部２４、更新命令識別情報通知部２６ｂ、指示部２７、結果受信部２８、合成部２９、応答部３０、プランツリー作成部３１、適性判定部３２、不適処理除外部３３、可能性判定部３４、不可処理除外部３５、対象決定部３６、指示受付部３７、バージョン取得部３８、更新命令識別情報取得部３９ｂ、更新内容特定部３９ｃ、処理実行部４０および結果送信部４１を備えるコンピューターとして機能する。
【０１２２】
即ち、本実施形態に係るノード１は、更新履歴作成部２５および更新履歴通知部２６に代えて更新命令識別情報通知部２６ｂが採用され、更新履歴取得部３９に代えて更新命令識別情報取得部３９ｂおよび更新内容特定部３９ｃが採用されている点で、第一の実施形態に係るノード１と異なる。また、本実施形態においても、ノード１の機能が汎用のＣＰＵ１１によって実行される例について説明しているが、これらの機能は、その一部または全部が、１または複数の専用のプロセッサによって実現されてよい。
【０１２３】
更新命令識別情報通知部２６ｂは、クエリを含むトランザクションに、テーブルに係る更新命令が含まれる場合に、当該更新命令を識別するための情報を、当該更新命令に係る担当部分が割り当てられた命令実行ノードに通知する。同期されている複数のデータベース間で同一のトランザクションＩＤが用いられるシステムである場合には、当該更新命令が含まれるトランザクションのトランザクションＩＤを通知することで、トランザクションＩＤの通知を受けた命令実行ノードは、更新命令に係るトランザクションを特定し、更新内容を参照することが出来る。なお、本実施形態に係るシステムでは、複数のデータベース間で同一のトランザクションＩＤが用いられるため、更新命令を識別するための情報としてトランザクションＩＤが用いられるが、用いられる情報はトランザクションＩＤに限定されず、更新命令を識別可能な情報であればよい。
【０１２４】
更新命令識別情報取得部３９ｂは、分散実行指示ノードの更新命令識別情報通知部２６ｂによって通知されるトランザクションＩＤ（更新命令を識別可能な情報）を取得する。
【０１２５】
更新内容特定部３９ｃは、更新命令識別情報取得部３９ｂによって取得されたトランザクションＩＤに基づいて、当該更新命令に基づいて更新された内容を特定する。
【０１２６】
即ち、第二の実施形態では、第一の実施形態で採用された更新履歴の送受信に代えて、更新命令を識別可能な情報（トランザクションＩＤ）の送受信を採用することで、分散実行の対象となっているクエリが含まれるトランザクション中の更新を考慮した分散実行を可能としている。
【０１２７】
＜＜処理の流れ＞＞
次に、本実施形態に係る処理の詳細を説明する。なお、本実施形態において説明される処理の具体的な内容および順序等は、本開示を実施する上での一例である。具体的な処理内容および順序等は、実施の態様に応じて適宜選択されてよい。
【０１２８】
図８は、本実施形態において、ノード１によって実行される分散実行指示処理の流れを示すフローチャートである。本フローチャートに示された処理は、ノード１において、クエリが受け付けられたことを契機として開始される。
【０１２９】
ステップＳ４０１からステップＳ４０４の処理は、第一の実施形態において図３を用いて説明したステップＳ１０１からステップＳ１０４の処理と概略同様であるため、説明を省略する。
【０１３０】
ステップＳ４０５では、処理に用いられるバージョンが決定される。バージョン決定部２４は、テーブルについて、処理に用いるバージョンを決定する。なお、本実施形態では、レプリケーションにおいてデータベースの実体が変更されるデータベースが採用されており、当該クエリを含むトランザクションに更新命令が含まれる場合、ここで決定されるバージョンは、当該更新命令によってデータベースの実体が変更されたバージョンである（第一の実施形態と異なる）。その後、処理はステップＳ４０６へ進む。
【０１３１】
ステップＳ４０６では、処理に用いられるテーブルの分割方法、および分割された各部分を担当するノードが決定される。ステップＳ４０６の処理は、第一の実施形態におけるステップＳ１０６の処理と概略同様であるため、説明を省略する。
【０１３２】
ステップＳ４０７およびステップＳ４０８では、受信クエリに係るトランザクションに当該ノードが管理するデータベースの更新命令が含まれている場合に、この更新命令を識別するためのトランザクションＩＤが特定される。更新命令識別情報通知部２６ｂは、クエリを含むトランザクションに、テーブルに係る更新命令が含まれるか否かを判定し（ステップＳ４０７）、更新命令が含まれる場合に、当該更新命令が含まれるトランザクションのトランザクションＩＤを特定する（ステップＳ４０８）。その後、処理はステップＳ４０９へ進む。
【０１３３】
ステップＳ４０９では、命令実行ノードに対する指示が送信される。指示部２７は、ステップＳ４０６で選定された複数の命令実行ノードの夫々に対して、各々の命令実行ノードによって管理されているデータベース（これらのデータベースは、互いに同期されている）を参照して、担当部分について処理を行うよう指示することで、処理を複数の命令実行ノードに分散実行させる。この際、指示部２７は、各命令実行ノードに対して、分散処理の対象となっているクエリの内容を通知し、更に、処理に用いるバージョンとして、バージョン決定部２４によって決定されたバージョンを用いて処理を行うように、命令実行ノードに指示する。ここで、実施形態に係るシステムにおいてログベースのレプリケーション技術が採用されている場合には、指定されたバージョンに対応するトランザクションログを特定可能なように、指示部２７は、決定されたバージョンに対応するトランザクションシーケンス番号（ＬＳＮ）を通知する。
【０１３４】
また、上記ステップＳ４０８においてトランザクションＩＤが特定されている場合、更新命令識別情報通知部２６ｂは、特定されたトランザクションＩＤを、更新命令に係る担当部分が割り当てられた命令実行ノードに通知する。その後、処理はステップＳ４１０へ進む。
【０１３５】
ステップＳ４０９における指示が行われると、指示を受けた複数のノードは、命令実行ノードとして動作し、分散実行指示ノードからの指示に従って、各々が担当する部分について、クエリに係る処理を実行する。
【０１３６】
図９は、本実施形態において、ノード１によって実行される分散実行処理の流れを示すフローチャートである。本フローチャートに示された処理は、ノード１において、分散実行指示ノードより送信された（図８のステップＳ４０９を参照）分散実行の指示が受け付けられたことを契機として開始される。即ち、本フローチャートは、ノードが命令実行ノードとして動作する場合のフローチャートである。
【０１３７】
ステップＳ５０１からステップＳ５０２の処理は、第一の実施形態において図４を用いて説明したステップＳ２０１からステップＳ２０２の処理と概略同様であるため、説明を省略する。但し、上述の通り、クエリを含むトランザクションに、テーブルに係る更新命令が含まれる場合には、この更新命令に対応するトランザクションＩＤが特定され、更新命令に係る担当部分が割り当てられた命令実行ノードに通知される（ステップＳ４０８およびステップＳ４０９を参照）。このため、クエリを含むトランザクションに、テーブルに係る更新命令が含まれる場合、更新命令識別情報取得部３９ｂは、当該更新命令に対応するトランザクションＩＤを、分散実行指示ノードから取得する。
【０１３８】
ステップＳ５０３およびステップＳ５０４では、トランザクションＩＤが取得されている場合に、トランザクションＩＤに対応する更新内容が特定される。命令実行ノードの夫々は、ステップＳ５０１において更新命令識別情報取得部３９ｂによってトランザクションＩＤが取得されたか否かを判定する（ステップＳ５０３）。そして、トランザクションＩＤが取得されている場合、更新内容特定部３９ｃは、分散実行指示ノードから取得されたトランザクションＩＤに基づいて、当該更新命令に基づいて変更された内容を特定する（ステップＳ５０４）。本実施形態では、レプリケーションにおいてデータベースの実体が変更されるデータベースが採用されているため、トランザクションＩＤに基づいて、更新命令に対応する変更内容が特定出来る。一方、トランザクションＩＤが取得されてない場合、ステップＳ５０４に示された処理は省略される。その後、処理はステップＳ５０５へ進む。
【０１３９】
ステップＳ５０５からステップＳ５０６の処理は、第一の実施形態において図４を用いて説明したステップＳ２０５からステップＳ２０６の処理と概略同様であるため、説明を省略する。
【０１４０】
ステップＳ５０７では、作成された分散実行用クエリが実行される。処理実行部４０は、ステップＳ５０６で作成された分散実行用のプランツリーに従って、分散実行用クエリを実行する。これによって、データベース管理部２１によって管理されるデータベースを参照して、担当部分についての処理が実行される。この際、処理実行部４０は、バージョン取得部３８によって取得されたバージョンのテーブルを参照して、処理を行う。このバージョンは、ステップＳ４０５において説明した通り、オリジナルのクエリを含むトランザクションに更新命令が含まれる場合、当該更新命令によってデータベースの実体が変更されたバージョンである。
【０１４１】
また、この際、データベース間のレプリケーションが行われてデータが同期されていても、一般的には、当該トランザクションの実行中には、命令実行ノードにおいて当該トランザクションに係る（コミットされていない）更新内容を参照することが出来ない。本実施形態では、命令実行ノードは、分散実行指示ノードから通知されたトランザクションＩＤに基づいて、データベースの変更済みの実体を参照することで、実行中のトランザクションに係る（コミットされていない）更新内容を参照する。このため、本実施形態に係るシステムによれば、分散実行の対象となっているクエリが含まれるトランザクション中の更新を考慮した分散実行を行うことが出来る。その後、処理はステップＳ５０８へ進む。
【０１４２】
ステップＳ５０８では、分散実行用クエリの実行結果が送信される。ステップＳ５０８の処理は、第一の実施形態におけるステップＳ２０８の処理と概略同様であるため、説明を省略する。また、各命令実行ノードによる分散実行において分散実行用クエリの作成を省略してもよいことは、第一の実施形態と同様である。
【０１４３】
次に、図８に戻り、分散実行指示ノードによる処理の続きを説明する。
【０１４４】
ステップＳ４１０からステップＳ４１３の処理は、第一の実施形態において図３を用いて説明したステップＳ１１０からステップＳ１１３の処理と概略同様であるため、説明を省略する。
【０１４５】
また、分散実行の範囲を決定するためのクエリ解析処理の流れについては、第一の実施形態において図５を用いて説明した処理の流れと同様であるため、説明を省略する。
【０１４６】
上記説明した第二の実施形態によれば、トランザクション実行中の更新結果が同期されている保証がないデータベースシステムであっても、分散実行の対象となっているクエリが含まれるトランザクション中の更新を考慮した分散実行を行うことが出来る。また、第二の実施形態によれば、トランザクションＩＤを用いて更新内容が特定されるため、分散実行指示ノードと命令実行ノードとの間で更新履歴を送受信する必要がない。
【０１４７】
＜第三の実施形態＞
第三の実施形態では、トランザクション実行中の更新結果まで完全に同期されるようなデータベースシステムにおいて採用可能な実施形態について説明する。このようなデータベースシステムが用いられている場合には、上記第二の実施形態において説明した、バージョンの決定および待機に係る処理が不要となる。
【０１４８】
より具体的には、第三の実施形態では、図７を用いて説明したノード１の機能構成のうち、バージョン決定部２４およびバージョン取得部３８が省略されてよい（図示は省略する）。また、図８および図９を用いて説明した処理の流れのうち、バージョンの決定および待機に関連するステップＳ４０５、ステップＳ５０２が不要となり、また、ステップＳ４０９およびステップＳ５０１においても、バージョンに係る情報を送受信しなくてよい（図示は省略する）。
【０１４９】
また、ステップＳ５０７における分散実行用クエリの実行においては、処理実行部４０は、テーブルのバージョンを意識することなく、分散実行用のプランツリーに従って、分散実行用クエリを実行すればよい。この際、命令実行ノードは、分散実行指示ノードから通知されたトランザクションＩＤに基づいて、実行中のトランザクションに係る更新内容を参照し、トランザクション中の更新を考慮した分散実行を行う。
【０１５０】
＜バリエーション＞
なお、本開示では、処理の分散方法および担当はクエリを受けたノードが決定し、他のノードに分散するが、分散実行の指示を受けたノードが、自身に割り当てられた担当部分を更に分散させて、その他のノードに分散実行指示可能であってもよい。例えば、システム上のノードがツリー上の親子関係をもって接続されている場合、親ノードから命令実行の指示を受けた子ノードは、更に下位のノード（孫ノード）に対して、分散実行の指示を行うことが出来る。この場合、当該子ノードは、前記親ノードから見て命令実行ノードとなるが、前記孫ノードに対しては分散実行指示ノードとなる。
【０１５１】
また、システム上のノードは、分散実行指示や実行結果を中継するプロキシノードとして動作してもよい。この場合、プロキシノードは、分散実行の指示を受信すると、この指示を他のノードに転送する。転送を受けたノードは、命令実行ノードとして動作し、実行結果をプロキシノードに送信する。実行結果を受信したプロキシノードは、これを分散実行の指示送信元のノードに転送する。
【０１５２】
また、本実施形態では、レプリケーション技術によって複数のノード間でデータベースの内容が同期されるデータベースシステムに基づいて説明したが、レプリケーション技術によってノード間で同期される内容は、データベースの全体ではなく、データベースの一部であってもよい。即ち、本開示は、各ノードが自身の担当するデータベースの一部のみをレプリケーション技術によって同期するような、部分レプリケーションに係るデータベースシステムに適用されてもよい。
【０１５３】
このようなデータベースシステムにおいて本開示に係る分散実行を行う場合、各命令実行ノードは、データベースのうち当該命令実行ノードに部分レプリケーションされている部分を、分散実行指示ノードに通知する。分散実行指示ノードは、このような通知を受けることで、各命令実行ノードに部分レプリケーションされている部分を把握することが出来る。但し、分散実行指示ノードが、各命令実行ノードに部分レプリケーションされている部分を把握するための方法には、分散実行指示ノードが部分レプリケーションの設定情報を参照する方法や、分散実行指示ノードが各命令実行ノードに問い合わせる方法等、その他の方法が採用されてもよい。
【０１５４】
各命令実行ノードに部分レプリケーションされている部分を把握した分散実行指示ノードにおいて、割当部２３は、クエリに係る処理に用いられるテーブルに含まれる複数の部分のうち、該当する部分がレプリケーションされているデータベースを管理する命令実行ノードに対して、当該部分を担当部分として優先的に割り当てる。このようにすることで、指示部２７は、各命令実行ノードに部分レプリケーションされている部分が、当該命令実行ノードによる分散実行の担当部分となるように、分散実行の指示を行う。
【０１５５】
上記説明したバリエーションでは、本開示に係る分散実行技術と、部分レプリケーション技術とを組み合わせることで、データベース全体を全てのノードにレプリケーションすることなく、全てのノードがデータベース全体を保持しているかのようにクエリを処理することが出来る。即ち、このようなバリエーションによれば、ストレージやネットワーク、プロセッサ等のリソースを節約しつつ、負荷を分散することが出来る。
【０１５６】
また、本開示に係る技術は、各ノードがデータベースの全体にアクセス出来るが、各ノードが比較的高速にアクセスできる部分がデータベースの一部に限られているために、当該部分以外へのアクセスが比較的低速になってしまうようなデータベースシステム（即ち、データベース中の各部分によってアクセス速度が異なるデータベース）に適用されても良い。このようなデータベースは、例えば、データベースの全体は比較的低速のストレージに保持され、各ノードがデータベースの一部のみを比較的高速のストレージに保持するようなデータベースシステムである。
【０１５７】
このようなデータベースシステムにおいて本開示に係る分散実行を行う場合、各命令実行ノードは、データベースのうち自身が高速にアクセス出来る部分を、分散実行指示ノードに通知する。分散実行指示ノードは、このような通知を受けることで、各命令実行ノードが高速にアクセス出来る部分を把握することが出来る。但し、分散実行指示ノードが、各命令実行ノードが高速にアクセス出来る部分を把握するための方法には、分散実行指示ノードが各命令実行ノードの設定情報を参照する方法や、分散実行指示ノードが各命令実行ノードに問い合わせる方法等、その他の方法が採用されてもよい。
【０１５８】
各命令実行ノードが高速にアクセス出来る部分を把握した分散実行指示ノードにおいて、割当部２３は、クエリに係る処理に用いられるテーブルに含まれる複数の部分のうち、該当する部分に高速にアクセス出来る命令実行ノードに対して、当該部分を担当部分として優先的に割り当てる。このようにすることで、指示部２７は、各命令実行ノードが高速にアクセス出来る部分が、当該命令実行ノードによる分散実行の担当部分となるように、分散実行の指示を行う。
【０１５９】
上記説明したバリエーションによれば、本開示に係る分散実行技術を用いて、各ノードが高速にアクセス出来る部分を組み合わせることで、データベース全体に対して高速なアクセスを実現することが出来る。
【図１】
0006506773.tif 000002
【図２】
0006506773.tif 000003
【図３】
0006506773.tif 000004
【図４】
0006506773.tif 000005
【図５】
0006506773.tif 000006
【図６】
0006506773.tif 000007
【図７】
0006506773.tif 000008
【図８】
0006506773.tif 000009
【図９】
0006506773.tif 000010