(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-20
(45)【発行日】2024-11-28
(54)【発明の名称】データベースで実行するためのコンピュータプログラムの動作の変換
(51)【国際特許分類】
G06F 8/51 20180101AFI20241121BHJP
G06F 16/28 20190101ALI20241121BHJP
【FI】
G06F8/51
G06F16/28
(21)【出願番号】P 2023513773
(86)(22)【出願日】2021-09-03
(86)【国際出願番号】 US2021048993
(87)【国際公開番号】W WO2022051577
(87)【国際公開日】2022-03-10
【審査請求日】2024-09-03
(32)【優先日】2020-09-04
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】ディッキー,ガース
(72)【発明者】
【氏名】シェヒター,イアン
【審査官】円子 英紀
(56)【参考文献】
【文献】米国特許出願公開第2022/0035611(US,A1)
【文献】米国特許出願公開第2021/0034615(US,A1)
【文献】特表2017-535869(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/51
G06F 16/28
(57)【特許請求の範囲】
【請求項1】
データ処理システムによって、動作を指定するプログラムの1つ以上の部分を実行する方法であって、前記プログラムは第1の言語で書かれており、前記方法は、
デバイスから、前記プログラムとは異なる変換ファイルを受信することであって、前記変換ファイルは、前記プログラムの前記第1の言語をデータベースの第2の言語に変換するための1つ以上の命令を含み、前記変換ファイルは、前記データベースによってサポートされている前記プログラムの前記第1の言語での1つ以上の動作を指定し、前記データベースの前記第2の言語での前記1つ以上のサポートされている動作を更に指定する、ことと、
前記変換ファイルから、前記データベースによってサポートされていない前記プログラムの前記動作のうちの1つ以上を決定することと、
前記プログラムの前記第1の言語で書かれている前記動作のうちの決定された前記1つ以上を、実行の準備のために変換することであって、前記動作のうちの変換される前記1つ以上は、前記データベースによってサポートされていない、ことと、
前記変換ファイルから、前記データベースによってサポートされている前記プログラムの前記動作のうちの1つ以上を決定することと、
前記データベースによってサポートされている前記動作のうちの前記1つ以上について、
前記変換ファイルを使用して、前記データベースによってサポートされている前記動作のうちの前記1つ以上を表す前記プログラムの一部分を前記データベースの前記第2の言語に変換することと、
前記データ処理システムから前記データベースに、前記プログラムの前記変換された部分を送信することと、
前記データ処理システムによって前記データベースから、前記データベースによってサポートされている前記動作のうちの前記1つ以上を表す前記プログラムの前記変換された部分の、前記データベース内での実行から生じるデータを、受信することと、
前記データベースによってサポートされている前記動作のうちの前記1つ以上を表す前記プログラムの前記変換された部分の、前記データベース内での実行から生じる前記受信されたデータに従って、前記データ処理システムによって、前記データベースによってサポートされていない前記プログラムの前記変換された動作のうちの前記1つ以上を実行することと、
を含む、方法。
【請求項2】
前記データ処理システムによって、前記データベースから受信した前記データに対して、及び前記データベースによってサポートされていない前記変換された動作のうちの前記1つ以上の実行から生じたデータに対して、1つ以上の追加の動作を実行することを含む、請求項1に記載の方法。
【請求項3】
前記プログラムは、前記動作間のデータのフローを表すリンクによって接続された前記動作を表すコンポーネントを有する実行可能なデータフローグラフを含む、請求項1に記載の方法。
【請求項4】
前記データベースによってサポートされている前記動作のうちの前記1つ以上を表す前記プログラムの前記部分を変換することは、前記データベース内で、前記動作のうちの前記1つ以上を実行するために、前記データベースの言語で前記データベースへの1つ以上のクエリを生成することを含む、請求項1に記載の方法。
【請求項5】
前記プログラムの前記動作のうちの少なくとも1つはクエリ動作を含み、前記方法は、
前記データベースによってサポートされている前記1つ以上の動作を前記プログラムから除去することと、
前記クエリ動作へ、前記データベースの前記言語で前記データベースへの前記1つ以上のクエリを挿入することと、を含む、請求項4に記載の方法。
【請求項6】
前記データベースによってサポートされている前記動作のうちの前記1つ以上を決定することは、1つ以上のパターンマッチング規則を、前記プログラムの言語で指定された前記変換ファイル内の前記1つ以上の動作に適用することを含む、請求項1に記載の方法。
【請求項7】
前記変換ファイルは、前記データベースの前記言語における前記1つ以上のサポートされている動作の、データタイプ、演算子の意味、関数の意味、又は動作の意図された結果のうちの少なくとも1つを説明する、請求項1に記載の方法。
【請求項8】
前記変換ファイルは、前記プログラムにおいて符号化されない、請求項1に記載の方法。
【請求項9】
前記プログラムから、前記データベースの前記言語の指示を受信することを含む、請求項1に記載の方法。
【請求項10】
前記プログラムの前記言語はデータ操作言語を含み、前記データベースの前記言語は構造化照会言語を含む、請求項1に記載の方法。
【請求項11】
前記変換ファイルは、前記プログラムの前記言語を、前記データベースの前記言語を含む複数のデータベースの言語に変換するための1つ以上の命令を含む、請求項1に記載の方法。
【請求項12】
システムであって、
1つ以上のプロセッサと、
命令を記憶する1つ以上の記憶デバイスであって、前記命令は、前記1つ以上のプロセッサによって実行されると、前記1つ以上のプロセッサに、動作を指定するプログラムの1つ以上の部分を実行するための動作を実行させ、前記プログラムは第1の言語で書かれており、前記動作は、
デバイスから、前記プログラムとは異なる変換ファイルを受信することであって、前記変換ファイルは、前記プログラムの前記第1の言語をデータベースの第2の言語に変換するための1つ以上の命令を含み、前記変換ファイルは、前記データベースによってサポートされている前記プログラムの前記第1の言語での1つ以上の動作を指定し、前記データベースの前記第2の言語での前記1つ以上のサポートされている動作を更に指定する、ことと、
前記変換ファイルから、前記データベースによってサポートされていない前記プログラムの前記動作のうちの1つ以上を決定することと、
前記プログラムの前記第1の言語で書かれている前記動作のうちの決定された前記1つ以上を、実行の準備のために変換することであって、前記動作のうちの変換される前記1つ以上は、前記データベースによってサポートされていない、ことと、
前記変換ファイルから、前記データベースによってサポートされている前記プログラムの前記動作のうちの1つ以上を決定することと、
前記データベースによってサポートされている前記動作のうちの前記1つ以上について、
前記変換ファイルを使用して、前記データベースによってサポートされている前記動作のうちの前記1つ以上を表す前記プログラムの一部分を前記データベースの前記第2の言語に変換することと、
前記データベースに、前記プログラムの前記変換された部分を送信することと、
前記データベースから、前記データベースによってサポートされている前記動作のうちの前記1つ以上を表す前記プログラムの前記変換された部分の、前記データベース内での実行から生じるデータを、受信することと、
前記データベースによってサポートされている前記動作のうちの前記1つ以上を表す前記プログラムの前記変換された部分の、前記データベース内での実行から生じる前記受信されたデータに従って、前記データベースによってサポートされていない前記プログラムの前記変換された動作のうちの前記1つ以上を実行することと、
を含む、システム。
【請求項13】
前記1つ以上の記憶デバイスは命令を記憶し、前記命令は、前記1つ以上のプロセッサによって実行されると、前記1つ以上のプロセッサに、前記データベースから受信した前記データに対して、及び前記データベースによってサポートされていない前記変換された動作のうちの前記1つ以上の実行から生じたデータに対して、1つ以上の追加の動作を実行することを含む動作を実行させる、請求項12に記載のシステム。
【請求項14】
前記データベースによってサポートされている前記動作のうちの前記1つ以上を表す前記プログラムの前記部分を変換することは、前記データベースの言語で前記データベースへの1つ以上のクエリを生成することを含む、請求項12に記載のシステム。
【請求項15】
前記プログラムの前記動作のうちの少なくとも1つはクエリ動作を含み、前記1つ以上の記憶デバイスは命令を記憶し、前記命令は、前記1つ以上のプロセッサによって実行されると、前記1つ以上のプロセッサに、
前記データベースによってサポートされている前記1つ以上の動作を前記プログラムから除去することと、
前記クエリ動作へ、前記データベースの前記言語で前記データベースへの前記1つ以上のクエリを挿入することと、を含む、動作を実行させる、請求項14に記載のシステム。
【請求項16】
前記変換ファイルは、前記データベースの前記言語における前記1つ以上のサポートされている動作の、データタイプ、演算子の意味、関数の意味、又は動作の意図された結果のうちの少なくとも1つを説明する、請求項12に記載のシステム。
【請求項17】
命令を記憶する非一時的コンピュータ可読記憶媒体であって、前記命令が、コンピューティングシステムに、動作を指定するプログラムの1つ以上の部分を実行させ、前記プログラムは第1の言語で書かれており、前記命令が、前記コンピューティングシステムに、
デバイスから、前記プログラムとは異なる変換ファイルを受信させ、前記変換ファイルは、前記プログラムの前記第1の言語をデータベースの第2の言語に変換するための1つ以上の命令を含み、前記変換ファイルは、前記データベースによってサポートされている前記プログラムの前記第1の言語での1つ以上の動作を指定し、前記データベースの前記第2の言語での前記1つ以上のサポートされている動作を更に指定し、
前記変換ファイルから、前記データベースによってサポートされていない前記プログラムの前記動作のうちの1つ以上を決定させ、
前記プログラムの前記第1の言語で書かれている前記動作のうちの決定された前記1つ以上を、実行の準備のために変換させ、前記動作のうちの変換される前記1つ以上は、前記データベースによってサポートされておらず、
前記変換ファイルから、前記データベースによってサポートされている前記プログラムの前記動作のうちの1つ以上を決定させ、
前記データベースによってサポートされている前記動作のうちの前記1つ以上について、
前記変換ファイルを使用して、前記データベースによってサポートされている前記動作のうちの前記1つ以上を表す前記プログラムの一部分を前記データベースの前記第2の言語に変換させ、
前記データベースに、前記プログラムの前記変換された部分を送信させ、
前記データベースから、前記データベースによってサポートされている前記動作のうちの前記1つ以上を表す前記プログラムの前記変換された部分の、前記データベース内での実行から生じるデータを、受信させ、
前記データベースによってサポートされている前記動作のうちの前記1つ以上を表す前記プログラムの前記変換された部分の、前記データベース内での実行から生じる前記受信されたデータに従って、前記データベースによってサポートされていない前記プログラムの前記変換された動作のうちの前記1つ以上を実行させる、非一時的コンピュータ可読記憶媒体。
【請求項18】
前記プログラムによって、前記コンピューティングシステムに、前記データベースから受信した前記データに対して、及び前記データベースによってサポートされていない前記変換された動作のうちの前記1つ以上の前記実行から生じたデータに対して、1つ以上の追加の動作を実行させる命令を含む、請求項17に記載の非一時的コンピュータ可読記憶媒体。
【請求項19】
前記プログラムは、前記動作間のデータのフローを表すリンクによって接続された前記動作を表すコンポーネントを有する実行可能なデータフローグラフを含む、請求項17に記載の非一時的コンピュータ可読記憶媒体。
【請求項20】
前記変換ファイルは、前記データベースの前記言語における前記1つ以上のサポートされている動作の、データタイプ、演算子の意味、関数の意味、又は動作の意図された結果のうちの少なくとも1つを説明する、請求項17に記載の非一時的コンピュータ可読記憶媒体。
【請求項21】
前記デバイスは、コンピューティングデバイス若しくはメモリ又はその両方を含む、請求項1に記載の方法。
【請求項22】
前記変換ファイルを受信することは、前記変換ファイルにアクセスすることを含む、請求項1に記載の方法。
【請求項23】
前記変換ファイルは拡張可能である、請求項1に記載の方法。
【請求項24】
前記第1の言語は解釈可能な言語であり、変換することは、
前記第1の言語で書かれており、前記データベースによってサポートされていない前記プログラムの前記動作のうちの前記1つ以上を解釈することを含む、請求項1に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
(優先権の主張)
本出願は、2020年9月4日に出願された米国特許仮出願第17/012,633号に対する優先権を主張し、その全容は、参照により本明細書に組み込まれる。
【0002】
(発明の分野)
本開示は、データベースにおける実行のためにコンピュータプログラムの動作を変換するための技術に関する。
【背景技術】
【0003】
複雑な計算は、多くの場合、有向グラフを通るデータフローとして表すことができ、計算のコンポーネントは、グラフの頂点と関連付けられ、コンポーネント間のデータフローはグラフのリンク(弧、辺)に対応する。そのようなグラフベースの計算を実施するシステムは、「Executing Computations Expressed as Graphs」と題された米国特許第5,966,072号に記載されており、その全容は参照により本明細書に組み込まれる。場合によっては、頂点に関連付けられた計算は、データソースへのクエリとして表すことができる。クエリは、データソース(例えば、データベース)に提供することができ、データソースに関連付けられたデータ処理システム(例えば、データベース管理システム)は、クエリによって指定されたデータを返すことができる。
【発明の概要】
【0004】
概して、第1の態様では、データベースで実行するためにコンピュータプログラムの動作を変換する方法は、データ処理システムによって、動作を指定するプログラムを実行することであって、プログラムはある言語で書かれている、ことと、プログラムの言語をデータベースの言語に変換するための1つ以上の命令を含む変換ファイルにアクセスすることであって、変換ファイルは、データベースによってサポートされているプログラムの言語での1つ以上の動作を指定し、データベースの言語での1つ以上のサポートされている動作の意味論上の意味を更に指定する、ことと、変換ファイルから、データベースによってサポートされていないプログラムの動作のうちの1つ以上を決定することと、プログラムによって、データベースによってサポートされていない動作のうちの1つ以上を処理することと、変換ファイルから、データベースによってサポートされているプログラムの動作のうちの1つ以上を決定することと、データベースによってサポートされている動作のうちの1つ以上について、変換ファイルを使用して、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの一部分をデータベースの言語に変換することと、データベースに、プログラムの変換された部分を送信することと、プログラムによってデータベースから、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの変換された部分の、データベース内での実行から生じるデータを、受信することと、を含む。
【0005】
概して、第2の態様では、第1の態様と組み合わせ可能であり、方法は、プログラムによって、データベースから受信されたデータに対して1つ以上の追加の動作を実行することを含む。
【0006】
概して、第3の態様では、第1及び第2の態様と組み合わせ可能であり、方法は、プログラムによって、データベースによってサポートされていない動作のうちの1つ以上の処理から返されたデータに対して、1つ以上の追加の動作を実行することを含む。
【0007】
概して、第4の態様では、第1~第3の態様のうちのいずれかと組み合わせ可能であり、プログラムは、動作間のデータのフローを表すリンクによって接続された動作を表すコンポーネントを有する実行可能なデータフローグラフを含む。
【0008】
概して、第5の態様では、第1~第4の態様のうちのいずれかと組み合わせ可能であり、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの部分を変換することは、データベース内で、動作のうちの1つ以上を実行するために、データベースの言語でデータベースへの1つ以上のクエリを生成することを含む。
【0009】
概して、第6の態様では、第1~第5の態様のうちのいずれかと組み合わせ可能であり、方法は、プログラムの動作のうちの少なくとも1つはクエリ動作を含み、方法は、データベースによってサポートされている1つ以上の動作をプログラムから除去することと、クエリ動作へ、データベースの言語でデータベースへの1つ以上のクエリを挿入することと、を含む。
【0010】
概して、第7の態様では、第1~第6の態様のうちのいずれかと組み合わせ可能であり、データベースによってサポートされている動作のうちの1つ以上を決定することは、1つ以上のパターンマッチング規則を、プログラムの言語で指定された変換ファイル内の1つ以上の動作に適用することを含む。
【0011】
概して、第8の態様では、第1~第7の態様のうちのいずれかと組み合わせ可能であり、意味論上の意味は、データベースの言語における1つ以上のサポートされている動作の、データタイプ、演算子の意味、関数の意味、又は動作の意図された結果のうちの少なくとも1つを説明する。
【0012】
概して、第9の態様では、第1~第8の態様のうちのいずれかと組み合わせ可能であり、変換ファイルはプログラム内で符号化されない。
【0013】
概して、第10の態様では、第1~第9の態様のうちのいずれかと組み合わせ可能であり、方法は、プログラムから、データベースの言語の指示を受信することを含む。
【0014】
概して、第11の態様では、第1~第10の態様のうちのいずれかと組み合わせ可能であり、プログラムの言語はデータ操作言語(DML)を含み、データベースの言語は構造化照会言語(SQL)を含む。
【0015】
概して、第12の態様では、第1~第11の態様のうちのいずれかと組み合わせ可能であり、変換ファイルは、プログラムの言語を、データベースの言語を含む複数のデータベースの言語に変換するための1つ以上の命令を含む。
【0016】
概して、第13の態様では、第1~第12の態様のうちのいずれかと組み合わせ可能であり、システムは、1つ以上のプロセッサと、命令を記憶する1つ以上の記憶デバイスであって、命令は、1つ以上のプロセッサによって実行されると、1つ以上のプロセッサに、データ処理システムによって、動作を指定するプログラムを実行することであって、プログラムはある言語で書かれている、ことと、プログラムの言語をデータベースの言語に変換するための1つ以上の命令を含む変換ファイルにアクセスすることであって、変換ファイルは、データベースによってサポートされているプログラムの言語での1つ以上の動作を指定し、データベースの言語での1つ以上のサポートされている動作の意味論上の意味を更に指定する、ことと、変換ファイルから、データベースによってサポートされていないプログラムの動作のうちの1つ以上を決定することと、プログラムによって、データベースによってサポートされていない動作のうちの1つ以上を処理することと、変換ファイルから、データベースによってサポートされているプログラムの動作のうちの1つ以上を決定することと、データベースによってサポートされている動作のうちの1つ以上について、変換ファイルを使用して、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの一部分をデータベースの言語に変換することと、データベースに、プログラムの変換された部分を送信することと、プログラムによってデータベースから、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの変換された部分の、データベース内での実行から生じるデータを、受信することと、を含む動作を実行させる、1つ以上の記憶デバイスと、を含む。
【0017】
概して、第14の態様では、第1~第13の態様のうちのいずれかと組み合わせ可能であり、非一時的コンピュータ可読記憶媒体は命令を記憶し、命令は、コンピューティングシステムに、データ処理システムによって、動作を指定するプログラムを実行させ、プログラムはある言語で書かれており、プログラムの言語をデータベースの言語に変換するための1つ以上の命令を含む変換ファイルにアクセスさせ、変換ファイルは、データベースによってサポートされているプログラムの言語での1つ以上の動作を指定し、データベースの言語での1つ以上のサポートされている動作の意味論上の意味を更に指定し、変換ファイルから、データベースによってサポートされていないプログラムの動作のうちの1つ以上を決定させ、プログラムによって、データベースによってサポートされていない動作のうちの1つ以上を処理させ、変換ファイルから、データベースによってサポートされているプログラムの動作のうちの1つ以上を決定させ、データベースによってサポートされている動作のうちの1つ以上について、変換ファイルを使用して、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの一部分をデータベースの言語に変換させ、データベースに、プログラムの変換された部分を送信させ、プログラムによってデータベースから、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの変換された部分の、データベース内での実行から生じるデータを、受信させる。
【0018】
概して、第15の態様では、第1~第14の態様のうちのいずれかと組み合わせ可能であり、方法は、データ処理システムによって、動作を指定するコンピュータプログラムを実行することであって、コンピュータプログラムはあるプログラミング言語で書かれている、ことと、コンピュータプログラムのプログラミング言語をデータベースの言語に変換するための1つ以上の命令を含む変換ファイルにアクセスすることであって、変換ファイルは、データベースによってサポートされているプログラムの言語での1つ以上の動作を指定し、データベースの言語での1つ以上のサポートされている動作の意味論上の意味を更に指定する、ことと、変換ファイルから、データベースによってサポートされているプログラムの動作のうちの1つ以上を決定することと、データベースによってサポートされている動作のうちの1つ以上について、変換ファイルを使用して、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの一部分をデータベースの言語に変換することと、データベースに、プログラムの変換された部分を送信することと、プログラムによってデータベースから、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの変換された部分の、データベース内での実行から生じるデータを、受信することと、を含む。
【0019】
概して、第16の態様では、第1~第15の態様のうちのいずれかと組み合わせ可能であり、方法は、変換ファイルから、データベースによってサポートされていないプログラムの動作のうちの1つ以上を決定することと、コンピュータプログラムによって、データベースによってサポートされていない動作のうちの1つ以上を処理することと、を含む。
【0020】
概して、第17の態様では、第1~第16の態様のうちのいずれかと組み合わせ可能であり、コンピュータプログラムは、データベースによってサポートされているプログラムの動作のうちの1つ以上を処理しない。
【0021】
概して、第18態様では、第1~第17の態様のうちのいずれかと組み合わせ可能であり、コンピュータプログラムは、データベースによってサポートされていない動作のうちの1つ以上のみを処理する。
【0022】
概して、第19の態様では、第1~第18の態様のうちのいずれかと組み合わせ可能であり、データ処理システムは、データベースによってサポートされている動作のうちの1つ以上を表すコンピュータプログラムの部分を実行しない。
【0023】
上記の実装形態のうちの1つ以上は、以下の利点のうちの1つ以上を提供し得る。
【0024】
本明細書で説明される技術は、コンピュータプログラム(例えば、実行可能なデータフローグラフ)の動作が、データベース(例えば、リレーショナルデータベース)における実行のために変換されることを可能にする。特に、本明細書で説明する技術は、プログラムの言語で指定された動作をデータベースの言語に変換するための命令を指定する変換ファイルを含み、プログラムの動作の一部又は全部をデータベースへのクエリに埋め込むことができる。このようにして、変換ファイルは、プログラムを実行するデータ処理システムからデータベースへの1つ以上の動作の計算負荷を「押し下げる」ことを容易にし、それによって、データ処理システムにおける処理要件を低減し、コンピューティングリソース全体のより効率的な使用を可能にする。
【0025】
データベースは、異なる能力を有する様々な異なる言語(例えば、SQL方言)を使用し得るので、特定の言語を使用する1つのデータベースによってサポートされているプログラムの動作は、異なる言語を使用する別のデータベースによってサポートされていないことがある。ここで説明される変換ファイルは、プログラムのどの動作が、データベースによって使用され得る言語のセット内の各言語によってサポートされているかを指定する。そうすることによって、変換ファイルは、データベースが、データベースにプッシュダウンされる動作に関して、プログラムを変換するシステムと効果的に「ネゴシエート」することを可能にする。言い換えれば、システムが、変換ファイルに基づいて、データベースによって使用される言語がプログラムの特定の動作をサポートしないと判定した場合、システムは、動作をデータベース110にプッシュダウンしないことを決定することができる(又は計算工程を並べ替えるか、又は別のアクションを取ることができる)。更に、変換ファイルは実行時にアクセスされるので、基礎となるコンピュータプログラムに対する修正を必要とせずに、追加のデータベース言語によってサポートされている動作を指定するように、又は既存のデータベース言語によってサポートされている動作を更新するように、あるいはその両方を行うように拡張することができる。このようにして、プログラムを再利用することができ、その動作を事実上任意のデータベースにプッシュダウンすることができる。
【0026】
変換ファイルで指定された変換は、プログラムの言語で指定された動作の意味論上の意味を説明することもできる。そうすることによって、変換の精度が改善され、例えば、プログラムの言語で指定された動作に対応する、又は同等のデータベースの言語の動作がない可能性がある場合でも変換を可能にすることによって、追加の動作の変換をサポートすることができる。
【0027】
プログラムを実行するデータ処理システムによってプッシュダウンされた動作を実行する代わりに、1つ以上のデータベースに動作を「プッシュダウン」することによって、データベースの組込み機能を、プログラムを実行する任意のデータ処理システムに効率的に使用することができる。
【0028】
この概要は、以下の発明を実施するための形態において更に説明される概念の選択を簡略化された形態で紹介するために提供される。この概要は、特許請求される主題の主要な特徴又は本質的な特徴を特定することを意図するものではない。
【0029】
1つ以上の実装形態の詳細が、添付の図面及び以下の記載において明らかにされる。本明細書に記載のその他の特徴、目的、及び利点は、記載及び図面から、並びに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0030】
【
図1】データベースで実行されるコンピュータプログラムの動作を変換するシステムのブロック図である。
【
図2A】データベースで実行するためのコンピュータプログラムの変換動作の例のブロック図である。
【
図2B】データベースで実行するためのコンピュータプログラムの変換動作の例のブロック図である。
【
図3A】データベースで実行するためにコンピュータプログラムの動作を変換するシステムの追加の詳細を示すブロック図である。
【
図3B】データベースで実行するためにコンピュータプログラムの動作を変換するシステムの追加の詳細を示すブロック図である。
【
図3C】データベースで実行するためにコンピュータプログラムの動作を変換するシステムの追加の詳細を示すブロック図である。
【
図3D】変換エンジンの更なる詳細を示すブロック図である。
【
図3E】変換エンジンの更なる詳細を示すブロック図である。
【
図3F】変換エンジンの更なる詳細を示すブロック図である。
【
図3G】変換エンジンの更なる詳細を示すブロック図である。
【
図3H】変換エンジンの更なる詳細を示すブロック図である。
【
図3I】変換エンジンの更なる詳細を示すブロック図である。
【
図3J】変換エンジンの更なる詳細を示すブロック図である。
【
図3K】変換エンジンの更なる詳細を示すブロック図である。
【
図3L】変換エンジンの更なる詳細を示すブロック図である。
【
図3M】変換エンジンの更なる詳細を示すブロック図である。
【
図3N】変換エンジンの更なる詳細を示すブロック図である。
【
図3O】変換エンジンの更なる詳細を示すブロック図である。
【
図3P】変換エンジンの更なる詳細を示すブロック図である。
【
図3Q】データベースで実行するためにコンピュータプログラムの動作を変換するシステムの追加の詳細を示すブロック図である。
【
図3R】データベースで実行するためにコンピュータプログラムの動作を変換するシステムの追加の詳細を示すブロック図である。
【
図3S】データベースで実行するためにコンピュータプログラムの動作を変換するシステムの追加の詳細を示すブロック図である。
【
図3T】データベースで実行するためにコンピュータプログラムの動作を変換するシステムの追加の詳細を示すブロック図である。
【
図4A】データベースで実行するためのコンピュータプログラムの変換動作の例のブロック図である。
【
図4B】データベースで実行するためのコンピュータプログラムの変換動作の例のブロック図である。
【
図5】変換ファイルの拡張性の一例を示すブロック図である。
【
図6A】最適化の様々な段階における実行可能なデータフローグラフを示す。
【
図6B】最適化の様々な段階における実行可能なデータフローグラフを示す。
【
図6C】最適化の様々な段階における実行可能なデータフローグラフを示す。
【
図7】データベースでの実行のためにコンピュータプログラムの動作を変換するプロセスのフローチャートである。
【発明を実施するための形態】
【0031】
図1は、データベースで実行するためにコンピュータプログラムの動作を変換するシステム100を示す。システム100は、開発環境102、実行環境104、記憶システム106、108、及び複数の候補データベース110a、110b、...、110N(まとめて「データベース110」と呼ぶ)を含む。一般に、オプションの開発環境102は、ユーザがデータフローグラフ112などのコンピュータプログラムを作成するための手段を提供する。例えば、開発環境102は、データフローグラフ112の形式で表すことができる計算又は規則をユーザが指定することを可能にするグラフィカル開発環境又は他のユーザインターフェースを提供する。ユーザの指定に従って動作を実行するように構成されたデータフローグラフ112を生成した後、開発環境102は、コンパイル及び実行のためにデータフローグラフ112を実行環境104に渡す。一般に、本明細書で説明するデータフローグラフは、実行可能なデータフローグラフであり、「データフローグラフ」及び「実行可能なデータフローグラフ」という用語を互換的に使用することがある。実行可能なデータフローグラフは、1つ以上のコンポーネントを有し、「コンポーネント」という用語を「ノード」又は「頂点」と交換可能に使用することがある。ノード、コンポーネント、又は頂点は、参照された米国特許第5,966,072号のコラム5の下部にも示されているように、プログラムコードに対応する。例えば、ソートコンポーネントは、特定のプログラムテンプレートに対応する。同じ技術がSQLコマンドに対して使用される。各コマンドは、1つ以上の関連付けられたテンプレートを有し得る。参照された米国特許第5,966,072号の要約及びコラム1~2、5、9~11から明らかなように、当業者は、本明細書で説明される実行可能なデータフローグラフが計算を直接呼び出すために使用されることを理解する。
【0032】
実行環境104は、データフローグラフ112を実行可能なプログラム(例えば、実行可能なデータフローグラフ)にコンパイルするためのコンパイラエンジン114と、実行可能なプログラムを実行するための動作を実行するための実行エンジン116とを含む。動作中、コンパイラエンジン114は、開発環境102から(又は記憶システム106、108のうちの1つなどの別のソースから)データフローグラフ112を表すデータを受信する。場合によっては、コンパイラエンジン114は、データフローグラフ112の実行可能なバージョンによって処理されるデータ(例えば、入力データ)が、リレーショナルデータベースであり得るデータベース110のうちの1つ以上に記憶されることを決定する。例えば、実行可能なデータフローグラフ112の入力コンポーネントは、入力データが1つ以上のデータベース110に記憶されることを指定してもよい。
【0033】
言い換えれば、コンピュータシステム100は、記憶システム106などのデータストレージに結合された開発環境102であって、開発環境102は、1つ以上の入力データセットから処理グラフコンポーネントのグラフを通って1つ以上の出力データセットに流れるデータに対して実行されるグラフベースの計算を実装する実行可能なデータフローグラフ112に関連付けられたデータ処理アプリケーションを構築するように構成され、データフローグラフ112は、データストレージ内のデータ構造によって指定され、データフローグラフ112は、データ構造によって指定される複数のコンポーネントを有し、1つ以上のリンクによって接続されたグラフコンポーネントを表し、リンクは、データ構造によって指定され、グラフコンポーネント間のデータフローを表す、開発環境と、記憶システム106に結合され、1つ以上のコンピュータ上でホストされる実行環境104であって、実行環境104は、データフローグラフ112を指定する記憶されたデータ構造を読み取り、コンパイラエンジン114によってデータフローグラフに割り当てられるグラフコンポーネントの計算を実行するためのプロセスなどのコンピューティングリソースを割り振り、構成するように構成されたコンパイラエンジン114を含む、実行環境と、を含み、実行環境104は、実行可能なプログラムを実行するための動作を実行するために割り当てられたプロセスの実行をスケジューリング及び制御する実行エンジン116を含む。
【0034】
上記及び他の場合において、コンパイラエンジン114は、データフローグラフ112の動作の一部又は全部を変換するように構成された変換エンジン118を呼び出して、動作がデータベース110(又はそれぞれのデータベースに関連付けられたデータ処理システム)のうちの1つ以上によって実行され得るようにする。例えば、変換エンジン118は、データベース110へのクエリ(例えば、SQLクエリ)を生成し、このクエリは、データベースにおいて実行されると、データベースにデータフローグラフ112の1つ以上の動作を実行させ、結果を返させる。次いで、クエリは、変換されたデータフローグラフ122を生成するために、1つ以上の動作の代わりにデータフローグラフ112に挿入され、実行環境104からデータベース110への1つ以上の動作の計算負荷を効果的に「押し下げる」。
【0035】
データフローグラフ112の動作の一部又は全部をデータベース110によって実行可能な命令に変換するために、変換エンジン118は、記憶システム106に記憶された変換ファイル120を受信するように構成される。一般に、変換ファイル120は、データフローグラフ112の言語で定義された動作をデータベース110の言語に変換するための命令を含む。例えば、データフローグラフ112は、データ操作言語(DML)などの言語で動作を定義する。一方、データベース110は、SQL又はその方言(例えば、DB2、PostgreSQL、Oracleなど)などの異なる言語の命令(例えば、クエリ)を解釈するように構成される。したがって、変換エンジン118は、変換ファイル120を使用して、データフローグラフ112の言語で定義された1つ以上の動作を、それぞれのデータベース110によって解釈可能なクエリに変換する。
【0036】
データベース110は、異なる能力を有する様々な異なる言語(例えば、SQL方言)を使用し得るので、特定の言語を使用する1つのデータベース110によってサポートされている実行可能なデータフローグラフ112の動作は、異なる言語を使用する別のデータベース110によってサポートされていないことがある。したがって、変換ファイル120は、データフローグラフ112のどの動作が、データベース110によって使用され得る言語のセット内の各言語によってサポートされているかを指定する。そうすることによって、変換ファイル120は、データベース110にプッシュダウンされる動作に関して、データベース110が変換エンジン118と効果的に「ネゴシエート」することを可能にする。言い換えれば、変換エンジン118が、変換ファイル120に基づいて、データベース110によって使用される言語がデータフローグラフ112の特定の動作をサポートしないと判定した場合、変換エンジン118は、動作をデータベース110にプッシュダウンしないことを決定することができる(又は、以下で説明するように、計算工程を並べ替えるか、又は別のアクションを取ることができる)。更に、変換ファイル120は実行時にアクセスされるので、基礎となるデータフローグラフ112に対する修正を必要とせずに、追加のデータベース言語によってサポートされている動作を指定するように、又は既存のデータベース言語によってサポートされている動作を更新するように、あるいはその両方を行うように拡張することができる。このようにして、データフローグラフ112を再利用することができ、変換エンジン118は、その動作を事実上任意のデータベース110にプッシュダウンすることができる。変換ファイル120の拡張性に関する更なる詳細は、
図5を参照して以下で説明される。
【0037】
一例では、実行可能なデータフローグラフなどのコンピュータプログラムの動作は、動作(又は同等の動作)がデータベース(又はデータベース管理システム)によって実行され得るように、動作がデータベース言語で表現され得る場合、データベース(又はデータベース言語)によって「サポート」される。一例では、コンピュータプログラム(例えば、実行可能なデータフローグラフ)の動作は、その動作がデータベース言語で表現できない場合、又はその動作(又は同等の動作)がデータベース(又はデータベース管理システム)によって実行できない場合、又はその両方の場合、データベース(又はデータベース言語)によって「サポートされていない」。一例では、コンピュータプログラムの動作が特定のデータベース(又はデータベース言語)によってサポートされているかどうかが、変換ファイル120を使用して決定される。
【0038】
一部の例では、変換ファイル120において指定された変換は、データフローグラフ112の言語において指定された動作の意味論上の意味を説明する。我々は、この文脈において、変換に意味を関連付けることなく、ある言語から別の言語への単純な1対1変換を超える変換を指すために、用語「意味論上の意味」を使用する。例えば、変換ファイル120において指定された変換は、意味を関連付けるか又は単なる構文変換を超える他の変換の中でも、データタイプ(例えば、タイプセンシティビティ)、演算子若しくは関数の意味、動作の意図された結果、又はそれらの組み合わせを説明することができる。動作をデータベース110の言語に変換するときに、データフローグラフ112の言語で指定された動作の意味論上の意味を考慮することによって、変換の精度が改善され、追加の動作の変換をサポートすることができる(例えば、データフローグラフ112の言語で指定された動作に対応する、又は同等であるデータベース110の言語の動作が存在しない可能性がある場合であっても変換を可能にすることによって)。
【0039】
データフローグラフ112の動作の一部又は全部をデータベース110のうちの1つ以上へのクエリに変換した後、変換エンジン118は、変換されたデータフローグラフ122をコンパイルのためにコンパイラエンジン114に渡す。コンパイラエンジン114は、変換されたデータフローグラフ122を実行可能なプログラムにコンパイルし、実行可能なプログラムを実行エンジン116に送信する。実行エンジン116は、実行可能なプログラムを実行するための動作を実行し、記憶システム106と同じであっても異なっていてもよい記憶システム108に結果を記憶する。実行可能なプログラムを実行するために、実行エンジン116は、クエリエンジン124を呼び出して、データフローグラフの変換された部分に関連付けられたプログラムの一部分によって指定された動作を実行する。その際に、クエリエンジン124は、変換エンジン118によって生成されたクエリを適切なデータベース110に送信するようにされる。データベース110(又はデータベース管理システム(DBMS)などのそれぞれのデータベースに関連付けられたデータ処理システム)は、クエリエンジン124から受信された各クエリを実行し、結果として生じるデータを返す。クエリエンジン124は、データベース110から受信したデータを実行エンジン116に提供し、実行エンジン116は、データフローグラフの未変換部分に関連付けられたプログラムの一部分に従ってデータを処理するための動作を実行する。
【0040】
図2Aを参照すると、システム200は、データベースで実行するためにコンピュータプログラムの動作を変換する一例を示す。この例では、データフローグラフ202が、コンパイルのためにコンパイラエンジン114に提供される。データフローグラフ202は、データ入力を表す入力コンポーネント203a、203bと、データ入力又は別の動作コンポーネントから流れるデータに対して実行される動作を表す動作コンポーネント203c、203d、203e、203fと、処理されたデータの出力先(例えば、書き込み先)を表す出力コンポーネント203gとを含む。この例では、入力コンポーネント203aは、リレーショナルデータベースであるデータベース110a(「DB1」)からのデータ入力を表す。一方、入力コンポーネント203bは、リレーショナルデータベースに記憶されていないか、又は他の方法で照会することができないデータ入力を表す。
【0041】
コンパイラエンジン114は、変換エンジン118を呼び出して、入力コンポーネント203aによって指定されたデータにアクセスするためのリレーショナルデータベース110aへのクエリを生成する。変換エンジン118はまた、コンポーネント203cによって表される「動作1」(又はその一部)が、クエリを介してデータベース110aにプッシュダウンされ得るかどうかを判定する。そうするために、変換エンジン118は、まず、データベース110aによって使用される言語が「方言1」であると決定する。この情報は、例えば、入力コンポーネント203a又は入力コンポーネント203aに関連付けられたファイルから取得される。次いで、変換エンジン118は、変換ファイル204を読み出して、コンポーネント203cによって表される「動作1」を、データフローグラフ202の言語から、データベース110aによって使用される言語である「方言1」に変換することができるかどうかを判定する。
【0042】
例えば、入力コンポーネント203aによって表される入力データが、顧客の名及び姓についての別個のレコードを含み、コンポーネント203cによって表される「動作1」が、データフローグラフ202の言語における表現「First+Last」を介して、顧客の名及び姓を単一の文字列に組み合わせるように働くと仮定する。データフローグラフ202の言語で指定された「動作1」についての表現を変換ファイル204と比較することによって(例えば、以下で説明するように、パターンマッチング技術を使用して)、変換エンジン118は、表現が「方言1」言語に変換され得ると判定する。加えて、変換ファイル204は、データフローグラフ202の言語からデータベース110aの言語への変換における表現の意味論上の意味を説明するので、変換エンジン118は、表現「First+Last」が「方言1」言語における「名、姓」に変換されるべきであることを確認する(例えば、数値入力を意味するTotal(First,Last)ではなく)。
【0043】
データフローグラフ202の言語からデータベース110aの言語データベースaの言語に「動作1」を変換した後、変換エンジン118は、データベース110aへのクエリを生成して、指定された入力データにアクセスし、変換された動作を実行する。変換エンジン118は、データフローグラフ202内の入力コンポーネント203a及びコンポーネント203cをクエリコンポーネント206に置き換えて、変換されたデータフローグラフ208を生成する。次に、変換エンジン118は、変換されたデータフローグラフ208をコンパイルのためにコンパイラエンジン114に渡す。コンパイラエンジン114は、変換されたデータフローグラフ208を実行可能なプログラム210にコンパイルし、プログラム210を実行エンジン116に(又は記憶のために記憶システムに)送信する。実行エンジン116は、クエリコンポーネント206に関連付けられたプログラム210の一部分によって指定されるようにクエリ212をデータベース110aに送信するためにクエリエンジン124を呼び出すことを含む、実行可能なプログラム210を実行するための動作を実行する。データベース110aは、クエリ212を実行し、結果として生じるデータをクエリエンジン124に返す。クエリエンジン124は、受信したデータを実行エンジン116に提供し、実行エンジン116は、データフローグラフの変換されていない部分に関連付けられたプログラム210の一部分(例えば、コンポーネント203b、203d、203e、203f、203g)に従ってデータを処理するための動作を実行する。
【0044】
図2Bを参照すると、システム250は、データベースで実行するためにコンピュータプログラムの動作を変換する別の例を示す。この例では、データフローグラフ252が、コンパイルのためにコンパイラエンジン114に提供される。データフローグラフ252は、入力データが入力コンポーネント253aによって示されるようにデータベース110b(「DB2」)から受信されることを除いて、
図2Aに示されるデータフローグラフ202と同じである。データベース110bは、データベース110aと同様に、リレーショナルデータベースである。しかしながら、データベース110bは、データベース110aに対して異なる言語(「方言2」)を使用する。
【0045】
この例では、コンパイラエンジン114は、変換エンジン118を呼び出して、入力コンポーネント110bによって指定されたデータにアクセスするためのリレーショナルデータベース253aへのクエリを生成する。変換エンジン118はまた、変換ファイル204を読み出して、コンポーネント203cによって表される「動作1」が、データフローグラフ252の言語から、データベース110bによって使用される言語である「方言2」に変換され得るかどうかを判定する。前の例のように、コンポーネント203cによって表される「動作1」が、データフローグラフ252の言語における表現「First+Last」を介して、顧客の名及び姓を単一の文字列に組み合わせるように働くと仮定する。データフローグラフ252の言語における「動作1」のための表現を、変換ファイル204において指定された「方言2」のためのサポートされた動作と比較することによって、変換エンジン118は、表現が「方言2」言語に変換され得ると判定する。加えて、変換ファイル204は、データフローグラフ252の言語からデータベース110bの言語への変換における表現の意味論上の意味を説明するので、変換エンジン118は、表現「First+Last」が「方言2」言語における「名||姓」に変換されるべきであることを確認する(例えば、数値入力を意味するSum(First,Last)ではなく)。
【0046】
データフローグラフ252の言語からデータベース110bの言語データベースaの言語に「動作1」を変換した後、変換エンジン118は、データベース110bへのクエリを生成して、指定された入力データにアクセスし、変換された動作を実行する。変換エンジン118は、データフローグラフ252内の入力コンポーネント253a及びコンポーネント203cをクエリコンポーネント256に置き換えて、変換されたデータフローグラフ258を生成する。次に、変換エンジン118は、変換されたデータフローグラフ258をコンパイラエンジン114に渡し、コンパイラエンジンは、変換されたデータフローグラフ258を実行可能なプログラム260にコンパイルし、プログラム260を実行エンジン116に送信する。実行エンジン116は、クエリコンポーネント256に関連付けられたプログラム260の一部分によって指定されるように、クエリ262をデータベース110bに送信するためにクエリエンジン124を呼び出すことを含む、上述のような実行可能なプログラム260を実行するための動作を実行する。
図2A及び
図2Bの例から示されるように、本明細書で説明される技術は、基礎となるデータフローグラフに対する修正を必要とすることなく、同じデータフローグラフが最適化され、異なる言語を使用して異なるデータベース上で実行されることを可能にする。
【0047】
図3Aを参照すると、システム300は、システム100の追加の詳細を示す。この例では、実行環境104のコンパイラエンジン114は、データフローグラフ302を(例えば、開発環境102から、記憶システム106又は108から)受信する。データフローグラフ302は、データ入力を表す入力コンポーネント303a、303bと、データ入力又は他の動作コンポーネントから流れるデータに対して実行される動作を表す動作コンポーネント303c、303d、303e、303fと、処理されたデータの出力先を表す出力コンポーネント303gとを含む。この例では、入力コンポーネント303aは、データベース110a(「DB1」)から入力されたデータを表し、入力コンポーネント303bは、データベース110b(「DB2」)から入力されたデータを表し、両方ともリレーショナルデータベースである。
【0048】
データフローグラフ302は、リレーショナルデータベースからのデータにアクセスするように構成されているので、コンパイラエンジン114は、変換エンジン118を呼び出して、入力コンポーネント303a、303bによって指定されたデータにアクセスするためのリレーショナルデータベース110a、110bの各々のへのクエリを生成する。変換エンジン118はまた、変換ファイル120を読み出して、データフローグラフ302の動作の一部又は全部(例えば、コンポーネント303c、303d、303e、303fによって表される動作(又はその一部))が1つ以上のデータベースの言語に変換され得るかどうかを判定する。この例では、変換エンジン118は、コンポーネント303cによって表される少なくとも「動作1」をデータベース110aの言語に変換することができる。データフローグラフの動作を変換するためのプロセスに関する追加の詳細は、
図3D~
図3Pを参照して以下で説明される。
【0049】
動作の一部又は全部をデータフローグラフ302の言語からデータベース110a、110bのうちの1つの言語に変換した後、変換エンジン118は、データベース110a、110bへの1つ以上のクエリを生成して、指定された入力データにアクセスし、変換された動作(もしあれば)を実行する。この例では、変換エンジン118は、データフローグラフ302内の入力コンポーネント303a及びコンポーネント303cを、変換されたデータフローグラフ306内のクエリコンポーネント304aで置き換える。変換エンジン118はまた、変換されたデータフローグラフ306において、入力コンポーネント303bをクエリコンポーネント304bで置き換える。
【0050】
次に、変換エンジン118は、変換されたデータフローグラフ306をコンパイラエンジン114に渡し、コンパイラエンジンは、変換されたデータフローグラフ306を実行可能なプログラム308にコンパイルし、プログラム308を実行エンジン116に送信する。次に、実行エンジン116は、実行可能なプログラム308を実行するための動作を実行する。一般に、プログラム308の実行は、リモート実行プロセス310及びローカル実行プロセス312を含み、これらは、実装又はデータフローグラフ302、あるいはその両方に応じて、連続して又は並行して行われ得る。リモート実行プロセス310の間、実行エンジン116は、データフローグラフの変換された部分に関連付けられたプログラム308の一部分を実行する。特に、実行エンジン116は、データベース110a、110bへのクエリに対する命令を表す機械コード309a、309bを含むプログラム308の一部分を実行する。そうすることで、実行エンジン116は、クエリエンジン124に、クエリ314a、314b(例えば、生成されたクエリコンポーネント304a、304bで定義されるような)をデータベース110a、110bに送信させる。データベース110a、110bの各々は、それぞれのクエリ314a、314bを実行してクエリ結果316a、316bを生成し、クエリ結果316a、316bは、クエリエンジン124(又は実行エンジン116、又はその両方)に返される。
【0051】
この例では、実行エンジン116は、クエリ結果316a、316bをローカル実行プロセス312のための入力データとして使用する。ローカル実行プロセス312中に、実行エンジン116は、データフローグラフの変換されていない部分に関連付けられたプログラム308の一部分を実行する。具体的には、実行エンジン116は、データベース110に変換又はプッシュダウンされなかったデータフローグラフの動作を表す機械コード309c、309d、309e、309fを含むプログラム308の一部分を実行する。プログラム310の実行から生じるデータは、とりわけ、記憶されるか、ユーザに表示されるか、又はその両方であり得る。
【0052】
図3B及び
図3Cは、データベースで実行するためにコンピュータプログラムの動作を変換するシステム300の追加の詳細を示す。この例では、開発環境102は、コンパイルのためにデータフローグラフ302をコンパイラエンジン114に提供する。データフローグラフ302は、データ入力を表す入力コンポーネント303a、303bと、データ入力又は他の動作コンポーネントから流れるデータに対して実行される動作を表す動作コンポーネント303c、303d、303e、303fと、処理されたデータの出力先を表す出力コンポーネント303gとを含む。一般に、コンポーネント303c、303d、303e、303fは、とりわけ、フィルタ動作、集約動作(例えば、カウント、合計、最小、最大、平均など)、及び結合動作を含む、データフローグラフ302を流れるデータに対して実行される様々な動作を指定する。一例では、各動作は、動作全体を定義する1つ以上の表現を含む。場合によっては、表現は、コンポーネント303dによって表される動作などにおいてネストされる。「動作」及び「表現」という用語は、本開示では交換可能に使用されることがあるが、いくつかの例では、表現が動作よりも粒度が高いことに留意されたい。
【0053】
本明細書で説明される技術は、データフローグラフ302の言語からデータベース110の言語に、動作の一部又は全部(又は動作を構成する1つ以上の表現など、動作の部分)を変換するために使用され得る。特に、変換エンジン118は、変換ファイル120を活用して、データフローグラフ302の言語からデータベース110の言語へと、動作(又はその一部)を、動作の意味論上の意味と一致する方法で変換する。いくつかの例では、動作は、変換された動作の代わりにデータフローグラフ302に挿入されるデータベース110の言語のクエリに変換され、動作がデータベースに効果的にプッシュダウンされることを可能にする。変換ファイル120に関する追加の詳細を以下に示す。
【0054】
変換ファイル(「方言ファイル」と呼ばれることもある)は、以下のような一連のデータベース言語仕様(例えば、SQL方言仕様)を含む。
sql dialect「default」{...}
sql dialect「db2」{...}
sql dialect「db2eee」{...}
【0055】
データフローグラフ内の各入力データソースは、データベース名(又はDBMS名)を指定するか、又はデータベース名を提供するファイルを含む。この情報は、データベース言語又は方言をルックアップするか又は他の方法で取得するためにシステムによって使用され得る。一例では、データベース名に一致する他の方言が見つからない場合、「デフォルト」SQL方言が使用される。
【0056】
方言の継承:
一例では、方言は、基本方言を指定してもよく、次いで、そのパラメータ又は規則のうちのいくつかをオーバーライドしてもよい。
sql dialect「greenplum」{base dialect=「postgresql」;}
sql dialect「db2eee」{base dialect=「db2」;}
【0057】
基本方言が指定されない場合、「デフォルト」方言を基本として使用することができる。
【0058】
方言の規則:
一例では、SQL方言仕様は、表現の意味論上の意味を具体化する複数のパターンマッチング規則を含む。一般に、パターンマッチングは、規則(例えば、パターンマッチング規則)に従って、あるパターンの構成要素の存在について、所与の表現又は一連の表現をチェックする行為である。これらの規則は、次の形式を有することができる。
sql(...)=dml(...);
【0059】
一例では、DML表現は、関数呼び出し又は単項演算子若しくはバイナリ演算子である。
sql(a*b)=dml(a*b);
sql(ABS(num))=dml(math_abs(num));
【0060】
一例では、関数又は演算子への引数は、上記のようにシンボル名であってもよく、又は定数であってもよい。
sql(SIGN(num))=dml(compare(num,0));
【0061】
シンボルは、実際のDML内の位置に現れる部分表現が何であれ、一致することができる。部分表現がその定数に等しいと静的に評価され得る場合、定数は一致することができ、したがって、いくつかの例では、定数の形式は重要ではない。例えば、DML表現compare(foo,(int)0)は、いくつかの例において上記のパターンと一致する。
【0062】
一例では、パターンは、それらが現れる順序でマッチングされ、したがって、より特異的なパターンを一般的なパターンと組み合わせることができる。
sql(TRUNC(num))=dml(decimal_truncate(num,0));
sql(TRUNC(num,num_places)=dml(decimal_truncate(num,num_places));
【0063】
特定のDML表現に一致するパターンがない場合、その方言はそのような表現をサポートしないと判定することができる。したがって、表現は、変換又はプッシュダウンされなくてもよい。
【0064】
規則のDML側では、テキストがDML表現として構文解析され、構文解析されたDML表現に対してマッチングが行われる。一例では、実際のDMLがキー値引数を有する場合、それらは最初に結合され、マッチングのために位置を変えられる。
【0065】
規則のSQL側では、テキストは、全ての共通SQL方言からのキーワードを理解するSQLトークナイザを使用してトークン化される。規則のDML側で使用される名前と一致する非キーワード記号は、パターンが一致したときにその名前が結合されたものに書き換えられる。
【0066】
方言のパラメータ:
基本の方言に加えて、方言は、SQLの生成を制御するためにいくつかの他のパラメータを指定してもよい。例えば、1つ以上のパラメータを使用して、とりわけ、無効化可能な列のためのGROUP BY及びORDER BY句の生成、文字列連結がどのようにレンダリングされるか、レコード制限動作のプッシュダウン、列又はテーブルエイリアス内で許可される文字数、入力が必要とされない結合のプッシュダウン、又はそれらの組み合わせを制御してもよい。
【0067】
図3D~
図3Pを参照すると、変換エンジン118の追加の詳細が示されている。説明のために、変換エンジン118は、プロセス部分320及びデータ部分322を含むものとして示されている。この例では、プロセス部分320は、データベース110における実行のためにデータフローグラフ302の動作を変換するために変換118によって実行される動作のフローチャートを含む。データ部分322は、データフローグラフ302、一連のデータベース及びそれらの対応する方言を指定する方言マッピング324、並びに変換ファイル326を含む。
【0068】
この例では、プロセス部分320に示されるプロセスは、変換エンジン118がデータフローグラフ302(
図3E)を受信する(328)ことから始まる。例えば、変換エンジン118は、コンパイラエンジン114を介して開発環境102又は記憶システム106、108からデータフローグラフ302を受信する。次に、変換エンジンは、リレーショナルデータベース(
図3F)からのデータにアクセスする入力コンポーネント303a、303bに対するクエリコンポーネント304a、304bを生成する(330)。クエリコンポーネント304a、304bは、入力コンポーネント303a、303bによって指定されたデータをデータベース110から取り出すために、データベースの言語のクエリ(例えば、SELECTステートメント)を含む。データ部分322に示されるように、生成されたクエリコンポーネント304a、304bは、データフローグラフ302内の入力コンポーネント303a、303bを置き換える。
【0069】
変換エンジン118は、変換(
図3G)を検討するために、データフローグラフ302内の独立した動作又は動作のシーケンスを選択する(332)。一例では、変換エンジン118は、データフローグラフ302をトポロジカルな順序で処理し、したがって、左から右への動作及び動作のシーケンスを検討する。次に、変換エンジン118は、変換を検討する動作を選択する(334)(
図3H)。工程332での選択が単一の動作(コンポーネント303cによって表される「動作1」)をもたらしたので、変換エンジン118は、ここで検討するためにその動作を選択する。
【0070】
動作を選択した後、変換エンジン118は、動作内の表現を識別し(336)、変換ファイル326を読み取り(338)、その表現がデータベースによってサポートされているかどうか(例えば、その表現をデータフローグラフの言語からデータベースの言語に変換することができるかどうか)を判定する(340)。
図3Iに示すように、変換エンジン118は、「動作1」に対する表現「表現A(In)」を識別する。「動作1」は、データベース「DB1」(例えば、データベース110a)から受信されたデータを処理するように構成されているので、データベース「DB1」に論理的にプッシュダウンされることしかできない。したがって、変換エンジン118は、識別された表現をデータベース「DB1」の言語に変換することができるかどうかを検討する。そうするために、変換エンジン118は、方言マッピング324を使用して、データベース「DB1」が「方言1」言語を使用することを決定する。次いで、変換エンジン118は、変換ファイル326にアクセスして、表現「表現A(In)」が「方言1」を使用してデータベース「DB1」によってサポートされているかどうかを判定する。一致があるので(太い破線によって示される)、変換エンジン118は、表現を「方言1」言語のクエリに変換する(342)。加えて、変換エンジン118は、データフローグラフ302(時間T1において示される)を更新して、クエリをクエリコンポーネント304aに挿入し、「動作1」を表すコンポーネント303cを除去し、
図3Jに示されるように、変換されたデータフローグラフ306(時間T2において)を生成する。
【0071】
図3Kを参照すると、変換エンジン118は、選択された動作に追加の表現がないと判定し(344)、選択されたシーケンスに追加の動作がないと判定する(346)が、検討すべき追加のシーケンスがあると判定する(348)。したがって、変換エンジン118は、変換を検討するために、変換されたデータフローグラフ303内の新しい動作シーケンスを選択する(332)。この例では、選択された動作は、コンポーネント303dによって表される「動作2」と、コンポーネント303eによって表される「動作3」とを含む。次に、変換エンジン118は、検討する動作(
図3Lに示す「動作2」)を選択し(334)、動作内の表現を識別する(336)。「動作2」は入れ子表現を含むので、変換エンジン118は、独立表現「表現C(In)」から開始し、変換ファイル326を読み取り(338)、
図3Mに示すように、その表現がデータベースによってサポートされているかどうかを判定する(340)。「動作2」は、データベース「DB2」(例えば、データベース110b)から受信されたデータを処理するように構成されるので、変換エンジン118は、識別された表現がデータベース「DB2」の言語に変換され得るかどうかを検討する。そうするために、変換エンジン118は、方言マッピング324を使用して、データベース「DB2」が「方言2」言語を使用することを決定する。次いで、変換エンジン118は、変換ファイル326にアクセスして、表現「表現C(In)」が「方言2」を使用してデータベース「DB2」によってサポートされているかどうかを判定する。一致があるので(太い破線で示す)、変換エンジン118は、表現を「方言2」言語のクエリに変換する(342)。加えて、変換エンジン118は、変換されたデータフローグラフ306(時間T1に示される)を更新して、クエリをクエリコンポーネント304bに挿入し、「動作2」を表す表現をコンポーネント303dから除去し、
図3Nに示されるように、更新されたデータフローグラフ306を生成する(時間T2に)。
【0072】
「表現C(In)」を変換し、それに応じてデータフローグラフ306を更新した後、変換エンジン118は、選択された動作のための追加の表現があると判定する(344)。したがって、変換エンジン118は、「表現B(In)」を識別し(336)、変換ファイル326を読み取り(338)、
図3Oに示すように、表現がデータベース「DB2」によってサポートされているかどうかを判定する(340)。変換ファイル326内に「表現B(In)」に対する一致がないので、変換エンジン118は、その表現がデータベース「DB2」によって使用される「方言2」言語によってサポートされていないと判定する。結果として、変換エンジン118は、表現又は任意の従属表現を変換しない(350)。コンポーネント303eによって表される「動作3」及びコンポーネント303fによって表される「動作4」は各々、この例では「動作2」(及び「表現B(In)」)に少なくとも部分的に依存するので、変換エンジン118は、これらの動作又はそれらの対応する表現を変換又はプッシュダウンしようと試みない。その結果、変換エンジン118は、検討すべき追加のシーケンスがないと判定し(348)、
図3Pに示すように、変換されたデータフローグラフを出力する(352)。
【0073】
変換エンジン118は、上記の例ではコンポーネント303e及び303fによって表される動作を検討しなかったが、変換又はプッシュダウンすることができない動作に動作が依存しない他の例では、検討してもよいことに留意されたい。加えて、いくつかの例では、変換エンジン118は、動作又は表現をプッシュダウン可能にするために、動作又は表現を別個のコンポーネントに分解することを含めて、動作又はそれらの対応する表現を並べ替えることができる。例えば、上記の例の代替バージョンでは、変換エンジン118は、「動作2」及び「動作3」の順序を交換して、データフローグラフの意図された結果に影響を及ぼさない場合、「動作3」がプッシュダウンされることを可能にすることができる。
【0074】
図3Q~
図3Tは、データベースで実行するためにコンピュータプログラムの動作を変換するシステム300の追加の詳細を示す。データフローグラフ302の動作を変換して変換されたデータフローグラフ306を生成した後、変換エンジン118は、変換されたグラフ306をコンパイルのためにコンパイラエンジン114に渡す。コンパイラエンジン114は、変換されたデータフローグラフ306を、
図3Rに示すように、変換されたデータフローグラフ306の動作を実行するために実行することができる命令を表す機械コード309a、309b、309c、309d、309e、309fを有する実行可能なプログラム308にコンパイルする。コンパイラエンジン114は、実行のためにプログラム308を実行エンジン116に提供する。上述のように、実行エンジン116は、
図3Sに示すように、データフローグラフの変換された部分に関連付けられたプログラム308の一部分を実行することによって開始することができる。特に、実行エンジン116は、データベース110a、110bへのクエリに対する命令を表す機械コード309a、309bを含むプログラム308の一部分を実行する。そうする際に、実行エンジン116は、クエリエンジン124(又は実行エンジン自体)に、クエリされるデータベース110a、110bとの通信を確立させ、クエリ314a、314b(変換エンジン118によってクエリコンポーネント304a、304bに挿入されたクエリと同じであり得る)をそれぞれのデータベース110a、110bに送信させる。データベース110a、110bの各々は、それぞれのクエリ314a、314bを実行してクエリ結果316a、316bを生成し、クエリ結果316a、316bは、クエリエンジン124(又は実行エンジン116、又はその両方)に返される。
【0075】
クエリ結果316a、316bを受信すると、実行エンジン116は、クエリ結果316a、316bを入力として用いて、データフローグラフの未変換部分に関連付けられたプログラム308の一部分を実行する。具体的には、実行エンジン116は、データベース110に変換又はプッシュダウンされなかったデータフローグラフの動作を表す機械コード309c、309d、309e、309fを含むプログラム308の一部分を実行する。プログラム310の実行からの結果354は、とりわけ、例えば、記憶システム108に記憶され得るか、又はユーザに表示され得るか、又はその両方であり得る。
【0076】
図4Aを参照すると、環境400は、データベースで実行するためのコンピュータプログラムの動作を変換する現実世界の例を示す。この例では、変換エンジン118は、入力クエリコンポーネント403a及び動作コンポーネント403bを有するデータフローグラフ402を受信する。この例では、データフローグラフ402の一部分のみが示されていることに留意されたい。入力クエリコンポーネント403aは、データベース(例えば、データベース110)の言語でクエリを指定して、データベース内のテーブル「入力1」から全てのレコードを取り出す。動作コンポーネント403bは、入力データ内の各レコードについて、名(「fname」)フィールド及び姓(「lname」)フィールド(中間にスペースを有する)を大文字にして連結するように構成されたデータフローグラフ402の言語における動作を指定する。
【0077】
動作コンポーネント403b内の表現の一部又は全部をデータベースにプッシュダウンすることができるかどうかを判定するために、変換エンジン118は、まず、データベースによって使用される言語を(例えば、入力クエリコンポーネント403a、入力コンポーネント403aに関連付けられたファイルなどに基づいて)識別する。変換エンジン118が、データベース言語が「方言1」であると判定すると仮定すると、変換エンジン118は、変換ファイル404を読み取って、動作コンポーネント403bによって表される表現の一部又は全部が「方言1」言語によってサポートされているかどうかを判定する。動作の各表現について一致があるので、変換エンジン118は、動作をデータフローグラフ402の言語からデータベースの言語に完全に変換することができる。変換エンジン118は、動作コンポーネント403bが除去され、変換された動作が入力クエリコンポーネント403aに挿入され、動作コンポーネント403bで指定された処理をデータベースに効果的にプッシュダウンする、変換されたデータフローグラフ406を生成する。
【0078】
図4Bを参照すると、環境450は、データベースで実行するためのコンピュータプログラムの動作を変換する別の現実世界の例を示す。環境450に示される例は、入力コンポーネント403aが「方言2」言語を使用してデータベース内のテーブル「入力2」からのデータにアクセスすることを除いて、環境400に示される例と同様である。先の例と同様に、変換エンジン118は、変換ファイル404を読み取って、動作コンポーネント403bによって表される表現の一部又は全部がデータベースの言語によってサポートされているかどうかを判定する。この例では、変換エンジン118は、わずかに異なる変換ではあるが、動作の各表現について一致があることを再び見つける。その結果、変換エンジン118は、変換された動作が動作403bの代わりに入力クエリコンポーネント403aに挿入される変換されたデータフローグラフ408を生成する。環境400及び450における例から示されるように、本明細書で説明される技術は、基礎となるデータフローグラフソースコードに対する修正を必要とすることなく、同じデータフローグラフが最適化され、異なる言語を使用して異なるデータベース上で実行されることを可能にする。
【0079】
図5を参照すると、環境500は、本明細書で説明する技術による変換ファイル502の拡張性の一例を示す。この例では、変換エンジン118は、(入力クエリコンポーネント304a、304bが追加された後の)
図3 A~
図3 Tで説明したデータフローグラフ302と同じであるデータフローグラフ302を受信する。このような動作が「DB2」データベース(例えば、データベース110b)によって使用される「方言2」言語の能力内であったことを変換ファイルが示さなかったので、変換エンジン118は、コンポーネント303dにおいて指定された「表現B(In)」を変換又はプッシュダウンすることができなかったことを想起されたい。その結果、変換エンジンは、これらの動作がコンポーネント303dから出力されたデータに依存しているので、これらの動作がサポートされていることを変換ファイルが示しているにもかかわらず、コンポーネント303eによって表される動作のいずれも変換又はプッシュダウンすることができなかった。
【0080】
環境500では、変換ファイル502は、「表現B(In)」(
図5に太線で示す)のサポートを含むように拡張されている。結果として、変換エンジン118は、ここで、同じデータフローグラフ302を、コンポーネント303d及び303eにおいて指定された動作の全てがプッシュダウンされる、高度に最適化され効率的な変換されたデータフローグラフ504に変換することができる(コンポーネント303fによって表される動作は、2つの異なるデータベースからのデータに依存するので、この例ではプッシュダウンすることができないことに留意されたい)。したがって、変換ファイル502は(本明細書で説明される他の技術に加えて)、ユーザが遭遇する任意の特定のデータベースにシステムの能力を拡張する(又は既存のデータベースを更新する)ことを可能にすることによって、非常に大きな柔軟性を提供する。システムが実行時に変換ファイルをピックアップするので、変換はバイナリで符号化されず、同じソースコード(例えば、データフローグラフなどのコンピュータプログラム用)が任意のデータベース上で効率的に実行されることを可能にする。
【0081】
図6A~
図6Cを参照すると、最適化の様々な段階におけるデータフローグラフ600が示されている。
図6Aでは、データフローグラフ600は完全に最適化されておらず、その結果、計算リソースに対する実質的な非効率性及び負担が生じる。
図6Bにおいて、データフローグラフ600は、より高速で、より効率的で、より少ない計算リソースを使用するように最適化されている。データフローグラフ600は、とりわけ、デッドコンポーネント又は冗長コンポーネントの除去、早期フィルタリング、又はレコードの絞込み、又はそれらの組み合わせなどの技術を使用して最適化される。データフローグラフの追加の最適化は、米国特許出願第15/993,284号、名称「Systems and Methods for Dataflow Graph Optimization」に記載されている最適化のうちの1つ以上を含み得、その全内容は、参照により本明細書に組み込まれる。最後に、
図6Cでは、データフローグラフ600は、本明細書で説明されるプッシュダウン技術を使用して更に最適化されている。以前にローカルに(例えば、実行環境によって)実行された動作は、1つ以上のデータベースにプッシュダウンされているので、
図6Cに示されるデータフローグラフ600は、
図6A及び
図6Bに示されるデータフローグラフよりも更に高速であり、より効率的であり、より少ない計算リソースを使用する。
【0082】
図7は、データベースにおける実行のためにコンピュータプログラムの動作を変換するための例示的なプロセス700のフローチャートを示す。プロセス700は、
図1~
図6を参照して説明される技術を実装するように構成される1つ以上のコンピューティングシステムを含む、本明細書に説明されるシステム(例えば、システム100、200、250、300)及びコンポーネント(例えば、実行環境104又は変換エンジン118等のそのコンポーネント)のうちの1つ以上によって実装されることができる。
【0083】
プロセス700の動作は、データ処理システムによって、動作を指定するプログラム(例えば、コンピュータプログラム)を実行すること(702)を含み、プログラムは、ある言語(例えば、プログラミング言語)で書かれている。例えば、プログラムは、動作間のデータのフローを表すリンクによって接続された動作を表すノードを有するデータフローグラフ(例えば、データフローグラフ112、202、302など)などのコンピュータプログラムである。一例では、プログラムはデータ操作言語(DML)で書かれる。
【0084】
プロセス700の動作は、プログラムの言語をデータベースの言語に変換するための1つ以上の命令を含む変換ファイルにアクセスすること(704)を更に含む。変換ファイル(例えば、変換ファイル120)は、データベースによってサポートされているプログラムの言語で1つ以上の動作を指定し、更に、データベースの言語で1つ以上のサポートされている動作の意味論上の意味を指定する。一例では、データベースはリレーショナルデータベースであり、データベースの言語は構造化照会言語(SQL)又はSQL方言である。一例では、データベースの言語の指示がプログラムから受信される。一例では、変換ファイルは、プログラムの言語を、データベースの言語を含む複数のデータベースの言語に変換するための1つ以上の命令を含む。一例では、意味論上の意味は、データベースの言語における1つ以上のサポートされている動作の、データタイプ、演算子の意味、関数の意味、又は動作の意図された結果のうちの少なくとも1つを説明する。一例では、変換ファイルは、拡張可能であり、実行時にアクセスされ、プログラム内で符号化されない(例えば、プログラム用のバイナリ又は機械コードで符号化されず、代わりに、例えば、ストレージ内の別個のファイルとしてアクセス可能である)。
【0085】
変換ファイルに基づいて、データベースによってサポートされていないプログラムの動作のうちの1つ以上が決定される(706)。データベースによってサポートされていない動作のうちの1つ以上は、プログラムによって処理される(708)。一例では、動作706及び708は任意選択である。一例では、プログラムは、データベースによってサポートされているプログラムの動作のうちの1つ以上を処理しない(例えば、プログラムは、データベースによってサポートされていない動作のうちの1つ以上のみを処理する)。一例では、データ処理システムは、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの部分を実行しない。一例では、データベースによってサポートされていない1つ以上の動作は、データベースによってサポートされている動作のうちの1つ以上の実行から生じるデータを受信した後にプログラムによって処理され、そのような実行から生じるデータは、データベースによってサポートされていない動作のうちの1つ以上のための入力データとして使用される。
【0086】
変換ファイルを使用して、データベースによってサポートされているプログラムの動作のうちの1つ以上が決定される(710)。一例では、データベースによってサポートされている(又はサポートされていない、又はその両方である)動作のうちの1つ以上を決定することは、1つ以上のパターンマッチング規則を、プログラムの言語で指定された変換ファイル内の1つ以上の動作に適用することを含む。
【0087】
データベースによってサポートされている動作のうちの1つ以上について、プロセスの動作は、変換ファイルに基づいて、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの一部分をデータベースの言語に変換することと、プログラムの変換された部分をデータベースに送信することと、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの変換された部分の、データベース内での実行から生じるデータを、プログラムによってデータベースから受信することとを含む(712)。一例では、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの部分を変換することは、データベースの言語でデータベースに対する1つ以上のクエリを生成することを含む。一例では、データベースへのクエリは、データベースの言語で1つ以上の動作(又は1つ以上の動作の均等物)を指定する。一例では、データベース内のクエリの実行は、データベースによってサポートされている動作のうちの1つ以上を表すプログラムの変換された部分の、データベース内での実行から生じるデータを生成する。一例では、プログラムの動作のうちの少なくとも1つはクエリ動作を含み、プロセスは、データベースによってサポートされている1つ以上の動作をプログラムから除去することと、データベースの言語でデータベースへの1つ以上のクエリをクエリ動作に挿入することとを含む。一例では、データベースから受信されたデータ、及びデータベースによってサポートされていない動作のうちの1つ以上の処理から返されたデータに対して、1つ以上の追加の動作がプログラムによって実行される。
【0088】
開発環境102、実行環境104、及びそれらのコンポーネントを含む、本明細書に記載の主題及び動作の実装形態は、本明細書に開示された構造及びそれらの構造的等価物を含むデジタル電子回路、又はコンピュータソフトウェア、ファームウェア、若しくはハードウェア、又はそれらのうちの1つ以上の組み合わせで実装することができる。本明細書に記載の主題の実装形態は、1つ以上のコンピュータプログラム(データ処理プログラムとも称される)(すなわち、データ処理装置によって実行するために、又はデータ処理装置の動作を制御するためにコンピュータ記憶媒体上に符号化されたコンピュータプログラム命令の1つ以上のモジュール)として実装することができる。コンピュータ記憶媒体は、コンピュータ可読記憶デバイス、コンピュータ可読記憶基板、ランダムアクセス若しくはシリアルアクセスメモリアレイ若しくはデバイス、又はそれらのうちの1つ以上の組み合わせであってもよく、又はそれらに含まれてもよい。コンピュータ記憶媒体はまた、1つ以上の別個の物理的コンポーネント又は媒体(例えば、複数のCD、ディスク、又は他の記憶デバイス)であってもよく、又はそれらに含まれてもよい。本主題は、非一時的コンピュータ記憶媒体に記憶されたコンピュータプログラム命令に実装され得る。
【0089】
本明細書に記載の動作は、1つ以上のコンピュータ可読記憶デバイス上に記憶された、又は他のソースから受信されたデータに対してデータ処理装置によって実行される動作として実装することができる。
【0090】
「データ処理装置」という用語は、データを処理するためのあらゆる種類の装置、デバイス、及びマシンを包含し、例として、プログラマブルプロセッサ、コンピュータ、システムオンチップ、又は前述のものの複数のもの、又は組み合わせを含む。装置は、専用論理回路(例えばFPGA(Field Programmable Gate array、フィールドプログラマブルゲートアレイ)又はASIC(Application Specific Integrated Circuit、特定用途向け集積回路)を含むことができる。装置はまた、ハードウェアに加えて、問題のコンピュータプログラムの実行環境を提供するコード(例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォームランタイム環境、仮想マシン、又はそれらのうちの1つ以上の組み合わせを構成するコード)を含むことができる。装置及び実行環境は、ウェブサービス、分散コンピューティング、及びグリッドコンピューティングインフラストラクチャなどの様々な異なるコンピューティングモデルインフラストラクチャを実現することができる。
【0091】
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、又はコードとしても知られている)は、コンパイル言語若しくはインタープリタ言語、宣言型言語若しくは手続き型言語を含む任意の形式のプログラミング言語で書くことができ、スタンドアロンプログラムとして、又はモジュール、コンポーネント、サブルーチン、オブジェクト、若しくはコンピューティング環境での使用に好適な他のユニットとして含む、任意の形態で展開することができる。コンピュータプログラムは、ファイルシステム内のファイルに対応してもよいが、対応しなくてもよい。プログラムは、他のプログラム又はデータ(例えば、マークアップ言語文書に記憶された1つ以上のスクリプト)を保持するファイルの一部分、問題のプログラム専用の単一のファイル、又は複数の協調ファイル(例えば、1つ以上のモジュール、サブプログラム、又はコードの一部を記憶するファイル)に記憶することができる。コンピュータプログラムは、1つのコンピュータ上で、又は1つのサイトに位置するか、又は複数のサイトに分散され、通信ネットワークによって相互接続された複数のコンピュータ上で実行されるように展開することができる。
【0092】
本明細書に記載のプロセス及び論理フローは、入力データに対して動作し、出力を生成することによってアクションを実行するために、1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブルプロセッサによって実行することができる。プロセス及び論理フローはまた、専用論理回路(例えば、FPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路)によって実行することができ、装置は専用論理回路として実装することができる。
【0093】
コンピュータプログラムの実行に好適なプロセッサは、例として、汎用マイクロプロセッサ及び専用マイクロプロセッサの両方、並びに任意の種類のデジタルコンピュータの任意の1つ以上のプロセッサを含む。概して、プロセッサは、リードオンリーメモリ若しくはランダムアクセスメモリ又はその両方から命令及びデータを受信するであろう。コンピュータの必須要素は、命令に従ってアクションを実行するためのプロセッサと、命令及びデータを記憶するための1つ以上のメモリデバイスとを含む。一般に、コンピュータはまた、データを記憶するための1つ以上の大容量記憶デバイス(例えば、磁気ディスク、光磁気ディスク、又は光ディスク)を含むか、それらからデータを受信するか、それらにデータを転送するか、又はその両方を行うように動作可能に結合することになるが、コンピュータは、そのようなデバイスを有する必要はない。更に、コンピュータは、別のデバイス(例えば、携帯電話、携帯情報端末(Personal Digital Assistant、PDA)、モバイルオーディオ若しくはビデオプレーヤ、ゲームコンソール、全地球測位システム(Global Positioning System、GPS)受信機、又は携帯型記憶デバイス(例えば、ユニバーサルシリアルバス(Universal Serial Bus、USB)フラッシュドライブ))に組み込むことができる。コンピュータプログラム命令及びデータを記憶するのに好適なデバイスは、例として、半導体メモリデバイス(例えば、EPROM、EEPROM、及びフラッシュメモリデバイス)、磁気ディスク(例えば、内蔵ハードディスク又はリムーバブルディスク)、光磁気ディスク、並びにCD-ROM及びDVD-ROMディスクを含む、あらゆる形態の不揮発性メモリ、媒体及びメモリデバイスを含む。プロセッサ及びメモリは、専用ロジック回路によって補完され得るか、又は専用ロジック回路に組み込まれ得る。
【0094】
本明細書に記載の主題の実装形態は、バックエンドコンポーネント(例えば、データサーバとして)を含むか、又はミドルウェアコンポーネント(例えば、アプリケーションサーバ)を含むか、又はフロントエンドコンポーネント(例えば、ユーザが本明細書に記載の主題の実装形態と対話することができるグラフィカルユーザインターフェース又はWebブラウザを有するユーザコンピュータ)、又は1つ以上のそのようなバックエンドコンポーネント、ミドルウェアコンポーネント、若しくはフロントエンドコンポーネントの任意の組み合わせを含む、コンピューティングシステムに実装することができる。システムのコンポーネントは、デジタルデータ通信(例えば、通信ネットワーク)の任意の形態又は媒体によって相互接続することができる。通信ネットワークの例には、ローカルエリアネットワーク(Local Area Network、LAN)及びワイドエリアネットワーク(Wide Area Network、WAN)、インターネットワーク(例えば、インターネット)、及びピアツーピアネットワーク(例えば、アドホックピアツーピアネットワーク)が含まれる。
【0095】
コンピューティングシステムは、ユーザ及びサーバを含むことができる。ユーザ及びサーバは、一般に、互いに遠隔であり、典型的には、通信ネットワークを通して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行され、互いにクライアント-サーバ関係を有するコンピュータプログラムによって生じ得る。いくつかの実装形態では、サーバは、データ(例えば、HTMLページ)をユーザデバイスに送信する(例えば、ユーザデバイスと対話するユーザにデータを表示し、ユーザデバイスと対話するユーザからユーザ入力を受信する目的で)。ユーザデバイスにおいて生成されたデータ(例えば、ユーザ対話の結果)は、サーバにおいてユーザデバイスから受信することができる。
【0096】
本明細書は多くの特定の実装形態の詳細を含むが、これらは、任意の実装形態又は特許請求され得るものの範囲に対する限定として解釈されるべきではなく、特定の実装形態に特有の特徴の記載として解釈されるべきである。別個の実施態様の文脈において本明細書に記載されるある特定の特徴はまた、単一の実装形態において組み合わせて実装することができる。逆に、単一の実施態様の文脈において記載される様々な特徴はまた、複数の実装形態において別々に、又は任意の好適な二次組み合わせにおいて実装することができる。更に、特徴は、ある特定の組み合わせにおいて作用するものして上述され、初めにそのように特許請求され得るが、特許請求される組み合わせからの1つ以上の特徴は、場合によっては、組み合わせから切除することができ、特許請求される組み合わせは、二次組み合わせ又は二次組み合わせの変形を対象とし得る。
【0097】
同様に、動作は、特定の順序で図面に描かれているが、望ましい結果を達成するために、そのような動作が示された特定の順序で又は連続した順序で実行されるか、又は全ての例示された動作が実行されることを必要とするものとして理解されるべきではない。ある特定の状況では、マルチタスク処理及び並列処理が有利であり得る。更に、上記の実装態様における様々なシステムコンポーネントの分離は、全ての実装形態においてそのような分離を必要とするものとして理解されるべきではなく、記載されたプログラムコンポーネント及びシステムは、一般に単一のソフトウェア製品に共に統合されるか、又は複数のソフトウェア製品にパッケージ化され得ることを理解されたい。
【0098】
他の実装形態は、以下の特許請求の範囲の範囲内である。