特許第6116721号(P6116721)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アビニシオ テクノロジー エルエルシーの特許一覧

<>
  • 特許6116721-グラフに基づく計算の動的ロード 図000002
  • 特許6116721-グラフに基づく計算の動的ロード 図000003
  • 特許6116721-グラフに基づく計算の動的ロード 図000004
  • 特許6116721-グラフに基づく計算の動的ロード 図000005
  • 特許6116721-グラフに基づく計算の動的ロード 図000006
  • 特許6116721-グラフに基づく計算の動的ロード 図000007
  • 特許6116721-グラフに基づく計算の動的ロード 図000008
  • 特許6116721-グラフに基づく計算の動的ロード 図000009
  • 特許6116721-グラフに基づく計算の動的ロード 図000010
  • 特許6116721-グラフに基づく計算の動的ロード 図000011
  • 特許6116721-グラフに基づく計算の動的ロード 図000012
  • 特許6116721-グラフに基づく計算の動的ロード 図000013
  • 特許6116721-グラフに基づく計算の動的ロード 図000014
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6116721
(24)【登録日】2017年3月31日
(45)【発行日】2017年4月19日
(54)【発明の名称】グラフに基づく計算の動的ロード
(51)【国際特許分類】
   G06F 9/54 20060101AFI20170410BHJP
【FI】
   G06F9/06 640B
【請求項の数】48
【外国語出願】
【全頁数】37
(21)【出願番号】特願2016-40815(P2016-40815)
(22)【出願日】2016年3月3日
(62)【分割の表示】特願2013-515468(P2013-515468)の分割
【原出願日】2011年6月15日
(65)【公開番号】特開2016-129059(P2016-129059A)
(43)【公開日】2016年7月14日
【審査請求日】2016年3月10日
(31)【優先権主張番号】61/355,129
(32)【優先日】2010年6月15日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【弁理士】
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【弁理士】
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【弁理士】
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】アターバリー,マシュー ダーシー
(72)【発明者】
【氏名】ブロムレー,エイチ.マーク
(72)【発明者】
【氏名】メサード,ウェイン
(72)【発明者】
【氏名】ポポフ,アルカディ
(72)【発明者】
【氏名】シュミット,ステフェン
(72)【発明者】
【氏名】スタンフィル,クレイグ ダブリュー.
(72)【発明者】
【氏名】ホーリー,ジョセフ スケフィントン,ザ サード
【審査官】 坂庭 剛史
(56)【参考文献】
【文献】 国際公開第2009/015342(WO,A1)
【文献】 国際公開第2008/124319(WO,A1)
【文献】 国際公開第2004/034322(WO,A1)
【文献】 特開2007−128343(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/445
G06F 9/54
(57)【特許請求の範囲】
【請求項1】
データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータ処理システム内のデータを処理するための方法であって、
それぞれが1つまたは複数の作業要素を含む複数の作業単位を受信する工程と、
前記作業単位の第1のものを受信する工程に応じて、前記データ処理システムにロードされた第1のコンパイル済みのデータフローグラフを使用して前記第1の作業単位を処理する工程とを含み、前記第1のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第1のデータフローグラフを表す1つまたは複数のデータ構造にコンパイルされており、前記処理する工程は、
(a)前記第1の作業単位を分析して前記第1の作業単位の特性を決定する工程と、
(b)前記決定された前記第1の作業単位の特性を有する作業単位を処理するために、前記第1の作業単位を受信する前にコンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含む前記データ格納システムに格納された複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
(c)前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1の作業単位の受信前に前記データ処理システムで実行しているデータ処理プログラムにロードする工程と、
(d)前記第1のデータフローグラフを使用して前記第1の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む、方法。
【請求項2】
前記ロードする工程は、前記第1のコンパイル済みのデータフローグラフから前記第1のデータフローグラフを表すデータ構造を取得し、前記取得したデータ構造を前記データ処理プログラムにロードする工程をさらに含む、請求項1に記載の方法。
【請求項3】
前記データ処理プログラムは第2のデータフローグラフを含み、前記取得したデータ構造をロードする工程は、前記第1のデータフローグラフ内の前記データ処理コンポーネントを実行するための第1のプロセスを提供するよう構成された前記第2のデータフローグラフの包含コンポーネント内に前記第1のデータフローグラフを埋め込む工程を含む、請求項2に記載の方法。
【請求項4】
前記データ処理プログラムは第2のデータフローグラフを含み、前記取得したデータ構造をロードする工程は、前記第1のデータフローグラフを前記第2のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記埋め込む工程は、
前記包含コンポーネントの入力と接続されたリンクから受信した入力作業要素のフローを前記第1のデータフローグラフの入力と接続する工程と、
前記生成された1つまたは複数の出力作業要素を前記包含コンポーネントの出力と接続されたリンクと接続する工程とを含む、請求項2に記載の方法。
【請求項5】
前記1つまたは複数の出力作業要素を生成した後に、前記取得した前記第1のデータフローグラフを表すデータ構造をアンロードする工程と、前記第1の作業単位が到着した後かつ前記取得した前記第1のデータフローグラフを表すデータ構造を前記アンロードする工程の前に到着する作業単位内に存在する作業要素をバッファリングする工程とをさらに含む、請求項2に記載の方法。
【請求項6】
第2のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程をさらに含み、前記第2のコンパイル済みのデータフローグラフは、第2のデータフローグラフを表すデータ構造にコンパイルされており、
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第1のデータフローグラフを第3のデータフローグラフの第1の包含コンポーネント内に埋め込む工程を含み、前記第2のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程は、前記第2のデータフローグラフを前記第3のデータフローグラフの第2の包含コンポーネント内に埋め込む工程を含む、請求項1に記載の方法。
【請求項7】
第2の作業単位を受信する工程に応じて前記データ処理システムにロードされた第2のコンパイル済みのデータフローグラフを使用して、前記第1の作業単位を処理した後に前記第2の作業単位を処理する工程をさらに含み、前記第2のコンパイル済みのデータフローグラフは、第2のデータフローグラフを表すデータ構造にコンパイルされており、前記処理する工程は、
前記第2の作業単位を分析して前記第2の作業単位の特性を決定する工程と、
前記決定された前記第2の作業単位の特性を有する作業単位を処理するために、前記第2の作業単位を受信する前に、コンパイルされた前記データ格納システムに格納された前記複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第2のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程と、
前記第2のデータフローグラフを使用して前記第2の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む、請求項1に記載の方法。
【請求項8】
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第1のデータフローグラフを第3のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第2のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第2のデータフローグラフを前記第3のデータフローグラフの前記包含コンポーネント内に埋め込む工程を含む、請求項7に記載の方法。
【請求項9】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素内に含まれるコンパイル済みのデータフローグラフ用の識別子を読み取る工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記識別子を、前記1つまたは複数のコンパイル済みのデータフローグラフに関連する1つまたは複数の識別子と一致させる工程を含む、請求項1に記載の方法。
【請求項10】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素を特徴付ける複数の既定のタイプの1つを特定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記1つまたは複数のコンパイル済みのデータフローグラフに対応する1つまたは複数のデータフローグラフが、前記特定されたタイプによって特徴付けられた作業要素を処理するよう構成されているかを判断する工程を含む、請求項1に記載の方法。
【請求項11】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素内に含まれるコンテンツの特性を特定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記1つまたは複数のコンパイル済みのデータフローグラフに対応する1つまたは複数のデータフローグラフが、前記特定された特性を有するコンテンツを含む作業要素を処理するよう構成されているかを判断する工程を含む、請求項1に記載の方法。
【請求項12】
前記第1の作業単位を分析する工程は、前記第1のデータフローグラフの1つまたは複数のパラメータの第1のセット用の値として指定された前記第1の作業単位に関連する1つまたは複数の値を決定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記特定された1つまたは複数のコンパイル済みのデータフローグラフが、前記決定された前記第1の作業単位に関連する1つまたは複数の値と一致するそれぞれの値にバインドされた1つまたは複数のパラメータの第1のセットを用いて前記第1のデータフローグラフを表すデータ構造にコンパイルされたかを判断する工程を含む、請求項1に記載の方法。
【請求項13】
データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータを処理するためのデータ処理システムであって、
それぞれが1つまたは複数の作業要素を含む複数の作業単位を受信するよう構成された入力デバイスまたはポートと、
第1の作業単位を受信する工程に応じて、前記データ処理システムにロードされた第1のコンパイル済みのデータフローグラフを使用して前記第1の作業単位を処理するよう構成された少なくとも1つのプロセッサとを含み、前記第1のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第1のデータフローグラフを表す1つまたは複数のデータ構造にコンパイルされており、前記処理する工程は、
前記第1の作業単位を分析して前記第1の作業単位の特性を決定する工程と、
前記決定された前記第1の作業単位の特性を有する作業単位を処理するために、前記第1の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含む前記データ格納システムに格納された複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1の作業単位の受信前に前記データ処理システムで実行しているデータ処理プログラムにロードする工程と、
前記第1のデータフローグラフを使用して前記第1の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む、データ処理システム。
【請求項14】
データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータを処理するためのデータ処理システムであって、
それぞれが1つまたは複数の作業要素を含む複数の作業単位を受信するための手段と、
前記作業単位の第1のものを受信する工程に応じて、前記データ処理システムにロードされた第1のコンパイル済みのデータフローグラフを使用して、前記第1の作業単位を処理するための手段とを含み、前記第1のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第1のデータフローグラフを表す1つまたは複数のデータ構造にコンパイルされており、前記処理する工程は、
前記第1の作業単位を分析して前記第1の作業単位の特性を決定する工程と、
前記決定された前記第1の作業単位の特性を有する作業単位を処理するために、前記第1の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含む前記データ格納システムに格納された複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1の作業単位の受信前に前記データ処理システムで実行しているデータ処理プログラムにロードする工程と、
前記第1のデータフローグラフを使用して前記第1の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む、データ処理システム。
【請求項15】
データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータ処理システム内のデータを処理するためのコンピュータプログラムを格納するコンピュータ可読媒体であって、前記コンピュータプログラムは、コンピュータに、
それぞれが1つまたは複数の作業要素を含む複数の作業単位を受信させ、
前記作業単位の第1のものを受信する工程に応じて、前記データ処理システムにロードされた第1のコンパイル済みのデータフローグラフを使用して、前記第1の作業単位を処理させるための命令を含み、前記第1のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第1のデータフローグラフを表す1つまたは複数のデータ構造にコンパイルされており、前記処理する工程は、
前記第1の作業単位を分析して前記第1の作業単位の特性を決定する工程と、
前記決定された前記第1の作業単位の特性を有する作業単位を処理するために、前記第1の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含む前記データ格納システムに格納された複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1の作業単位の受信前に前記データ処理システムで実行しているデータ処理プログラムにロードする工程と、
前記第1のデータフローグラフを使用して前記第1の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む、コンピュータ可読媒体。
【請求項16】
前記ロードする工程は、前記第1のコンパイル済みのデータフローグラフから前記第1のデータフローグラフを表すデータ構造を取得し、前記取得したデータ構造を前記データ処理プログラムにロードする工程をさらに含む、請求項13に記載のシステム。
【請求項17】
前記データ処理プログラムは第2のデータフローグラフを含み、前記取得したデータ構造をロードする工程は、前記第1のデータフローグラフ内の前記データ処理コンポーネントを実行するための第1のプロセスを提供するよう構成された前記第2のデータフローグラフの包含コンポーネント内に前記第1のデータフローグラフを埋め込む工程を含む、請求項16に記載のシステム。
【請求項18】
前記データ処理プログラムは第2のデータフローグラフを含み、前記取得したデータ構造をロードする工程は、前記第1のデータフローグラフを前記第2のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記埋め込む工程は、
前記包含コンポーネントの入力と接続されたリンクから受信した入力作業要素のフローを前記第1のデータフローグラフの入力と接続する工程と、
前記生成された1つまたは複数の出力作業要素を前記包含コンポーネントの出力と接続されたリンクと接続する工程とを含む、請求項16に記載のシステム。
【請求項19】
前記処理する工程は、前記1つまたは複数の出力作業要素を生成した後に、前記取得した前記第1のデータフローグラフを表すデータ構造をアンロードする工程をさらに含み、
前記処理する工程は、前記第1の作業単位が到着した後かつ前記取得した前記第1のデータフローグラフを表すデータ構造を前記アンロードする工程の前に到着する作業単位内に存在する作業要素をバッファリングする工程をさらに含む、請求項16に記載のシステム。
【請求項20】
前記処理する工程は、第2のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程をさらに含み、前記第2のコンパイル済みのデータフローグラフは、第2のデータフローグラフを表すデータ構造にコンパイルされており、
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第1のデータフローグラフを第3のデータフローグラフの第1の包含コンポーネント内に埋め込む工程を含み、前記第2のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程は、前記第2のデータフローグラフを前記第3のデータフローグラフの第2の包含コンポーネント内に埋め込む工程を含む、請求項13に記載のシステム。
【請求項21】
前記処理する工程は、第2の作業単位を受信する工程に応じて、前記データ処理システムにロードされた第2のコンパイル済みのデータフローグラフを使用して、前記第1の作業単位を処理した後に前記第2の作業単位を処理する工程をさらに含み、前記第2のコンパイル済みのデータフローグラフは、第2のデータフローグラフを表すデータ構造にコンパイルされており、前記処理する工程は、
前記第2の作業単位を分析して前記第2の作業単位の特性を決定する工程と、
前記決定された前記第2の作業単位の特性を有する作業単位を処理するために、前記第2の作業単位を受信する前に、コンパイルされた前記データ格納システムに格納された前記複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第2のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程と、
前記第2のデータフローグラフを使用して前記第2の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む、請求項13に記載のシステム。
【請求項22】
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第1のデータフローグラフを第3のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第2のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第2のデータフローグラフを前記第3のデータフローグラフの前記包含コンポーネント内に埋め込む工程を含む、請求項21に記載のシステム。
【請求項23】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素内に含まれるコンパイル済みのデータフローグラフ用の識別子を読み取る工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記識別子を、前記1つまたは複数のコンパイル済みのデータフローグラフに関連する識別子と一致させる工程を含む、請求項13に記載のシステム。
【請求項24】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素を特徴付ける複数の既定のタイプの1つを特定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記1つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定されたタイプによって特徴付けられた作業要素を処理するよう構成されているかを判断する工程を含む、請求項13に記載のシステム。
【請求項25】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素内に含まれるコンテンツの特性を特定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記1つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定された特性を有するコンテンツを含む作業要素を処理するよう構成されているかを判断する工程を含む、請求項13に記載のシステム。
【請求項26】
前記第1の作業単位を分析する工程は、前記第1のデータフローグラフの1つまたは複数のパラメータの第1のセット用の値として指定された前記第1の作業単位に関連する1つまたは複数の値を決定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記特定された1つまたは複数のコンパイル済みのデータフローグラフが、前記決定された前記第1の作業単位に関連する1つまたは複数の値と一致するそれぞれの値にバインドされた前記1つまたは複数のパラメータの第1のセットを用いて前記第1のデータフローグラフを表すデータ構造にコンパイルされたかを判断する工程を含む、請求項13に記載のシステム。
【請求項27】
前記ロードする工程は、前記第1のコンパイル済みのデータフローグラフから前記第1のデータフローグラフを表すデータ構造を取得し、前記取得したデータ構造を前記データ処理プログラムにロードする工程をさらに含む、請求項14に記載のシステム。
【請求項28】
前記データ処理プログラムは第2のデータフローグラフを含み、前記取得したデータ構造をロードする工程は、前記第1のデータフローグラフ内の前記データ処理コンポーネントを実行するための第1のプロセスを提供するよう構成された前記第2のデータフローグラフの包含コンポーネント内に前記第1のデータフローグラフを埋め込む工程を含む、請求項27に記載のシステム。
【請求項29】
前記データ処理プログラムは第2のデータフローグラフを含み、前記取得したデータ構造をロードする工程は、前記第1のデータフローグラフを前記第2のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記埋め込む工程は、
前記包含コンポーネントの入力と接続されたリンクから受信した入力作業要素のフローを前記第1のデータフローグラフの入力と接続する工程と、
前記生成された1つまたは複数の出力作業要素を前記包含コンポーネントの出力と接続されたリンクと接続する工程とを含む、請求項27に記載のシステム。
【請求項30】
前記1つまたは複数の出力作業要素を生成した後に、前記取得した前記第1のデータフローグラフを表すデータ構造をアンロードする手段と、
前記第1の作業単位が到着した後かつ前記取得した前記第1のデータフローグラフを表すデータ構造を前記アンロードする工程の前に到着する作業単位内に存在する作業要素をバッファリングする手段とをさらに含む、請求項27に記載のシステム。
【請求項31】
第2のコンパイル済みのデータフローグラフを前記データ処理システムにロードする手段をさらに含み、前記第2のコンパイル済みのデータフローグラフは、第2のデータフローグラフを表すデータ構造にコンパイルされており、
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第1のデータフローグラフを第3のデータフローグラフの第1の包含コンポーネント内に埋め込む工程を含み、前記第2のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程は、前記第2のデータフローグラフを前記第3のデータフローグラフの第2の包含コンポーネント内に埋め込む工程を含む、請求項14に記載のシステム。
【請求項32】
第2の作業単位を受信する工程に応じて、前記データ処理システムにロードされた第2のコンパイル済みのデータフローグラフを使用して、前記第1の作業単位を処理した後に前記第2の作業単位を処理する手段をさらに含み、前記第2のコンパイル済みのデータフローグラフは、第2のデータフローグラフを表すデータ構造にコンパイルされており、前記処理する工程は、
前記第2の作業単位を分析して前記第2の作業単位の特性を決定する工程と、
前記決定された前記第2の作業単位の特性を有する作業単位を処理するために、前記第2の作業単位を受信する前に、コンパイルされた前記データ格納システムに格納された前記複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第2のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程と、
前記第2のデータフローグラフを使用して前記第2の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む、請求項14に記載のシステム。
【請求項33】
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第1のデータフローグラフを第3のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第2のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第2のデータフローグラフを前記第3のデータフローグラフの前記包含コンポーネント内に埋め込む工程を含む、請求項32に記載のシステム。
【請求項34】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素内に含まれるコンパイル済みのデータフローグラフ用の識別子を読み取る工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記識別子を、前記1つまたは複数のコンパイル済みのデータフローグラフに関連する識別子と一致させる工程を含む、請求項14に記載のシステム。
【請求項35】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素を特徴付ける複数の既定のタイプの1つを特定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記1つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定されたタイプによって特徴付けられた作業要素を処理するよう構成されているかを判断する工程を含む、請求項14に記載のシステム。
【請求項36】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素内に含まれるコンテンツの特性を特定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記1つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定された特性を有するコンテンツを含む作業要素を処理するよう構成されているかを判断する工程を含む、請求項14に記載のシステム。
【請求項37】
前記第1の作業単位を分析する工程は、前記第1のデータフローグラフの1つまたは複数のパラメータの第1のセット用の値として指定された前記第1の作業単位に関連する1つまたは複数の値を決定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記特定された1つまたは複数のコンパイル済みのデータフローグラフが、前記決定された前記第1の作業単位に関連する1つまたは複数の値と一致するそれぞれの値にバインドされた前記1つまたは複数のパラメータの第1のセットを用いて前記第1のデータフローグラフを表すデータ構造にコンパイルされたかを判断する工程を含む、請求項14に記載のシステム。
【請求項38】
前記ロードする工程は、前記第1のコンパイル済みのデータフローグラフから前記第1のデータフローグラフを表すデータ構造を取得し、前記取得したデータ構造を前記データ処理プログラムにロードする工程をさらに含む、請求項15に記載の媒体。
【請求項39】
前記データ処理プログラムは第2のデータフローグラフを含み、前記取得したデータ構造をロードする工程は、前記第1のデータフローグラフ内の前記データ処理コンポーネントを実行するための第1のプロセスを提供するよう構成された前記第2のデータフローグラフの包含コンポーネント内に前記第1のデータフローグラフを埋め込む工程を含む、請求項38に記載の媒体。
【請求項40】
前記データ処理プログラムは第2のデータフローグラフを含み、前記取得したデータ構造をロードする工程は、前記第1のデータフローグラフを前記第2のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記埋め込む工程は、
前記包含コンポーネントの入力と接続されたリンクから受信した入力作業要素のフローを前記第1のデータフローグラフの入力と接続する工程と、
前記生成された1つまたは複数の出力作業要素を前記包含コンポーネントの出力と接続されたリンクと接続する工程とを含む、請求項38に記載の媒体。
【請求項41】
前記命令は、前記コンピュータにさらに、前記1つまたは複数の出力作業要素を生成した後に、前記取得した前記第1のデータフローグラフを表すデータ構造をアンロードさせ、
前記命令は、前記コンピュータにさらに、前記第1の作業単位が到着した後かつ前記取得した前記第1のデータフローグラフを表すデータ構造を前記アンロードする工程の前に到着する作業単位内に存在する作業要素をバッファリングさせる、請求項38に記載の媒体。
【請求項42】
前記命令は、前記コンピュータにさらに、第2のコンパイル済みのデータフローグラフを前記データ処理システムにロードさせ、前記第2のコンパイル済みのデータフローグラフは、第2のデータフローグラフを表すデータ構造にコンパイルされており、
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第1のデータフローグラフを第3のデータフローグラフの第1の包含コンポーネント内に埋め込む工程を含み、前記第2のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程は、前記第2のデータフローグラフを前記第3のデータフローグラフの第2の包含コンポーネント内に埋め込む工程を含む、請求項15に記載の媒体。
【請求項43】
前記命令は、前記コンピュータにさらに、第2の作業単位を受信する工程に応じて、前記データ処理システムにロードされた第2のコンパイル済みのデータフローグラフを使用して、前記第1の作業単位を処理した後に前記第2の作業単位を処理させ、前記第2のコンパイル済みのデータフローグラフは、第2のデータフローグラフを表すデータ構造にコンパイルされており、前記処理する工程は、
前記第2の作業単位を分析して前記第2の作業単位の特性を決定する工程と、
前記決定された前記第2の作業単位の特性を有する作業単位を処理するために、前記第2の作業単位を受信する前に、コンパイルされた前記データ格納システムに格納された前記複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第2のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程と、
前記第2のデータフローグラフを使用して前記第2の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む、請求項15に記載の媒体。
【請求項44】
前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第1のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第1のデータフローグラフを第3のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、前記第2のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第2のデータフローグラフを前記第3のデータフローグラフの前記包含コンポーネント内に埋め込む工程を含む、請求項43に記載の媒体。
【請求項45】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素内に含まれるコンパイル済みのデータフローグラフ用の識別子を読み取る工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記識別子を、前記1つまたは複数のコンパイル済みのデータフローグラフに関連する識別子と一致させる工程を含む、請求項15に記載の媒体。
【請求項46】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素を特徴付ける複数の既定のタイプの1つを特定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記1つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定されたタイプによって特徴付けられた作業要素を処理するよう構成されているかを判断する工程を含む、請求項15に記載の媒体。
【請求項47】
前記第1の作業単位を分析する工程は、前記第1の作業単位の作業要素内に含まれるコンテンツの特性を特定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記1つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定された特性を有するコンテンツを含む作業要素を処理するよう構成されているかを判断する工程を含む、請求項15に記載の媒体。
【請求項48】
前記第1の作業単位を分析する工程は、前記第1のデータフローグラフの1つまたは複数のパラメータの第1のセット用の値として指定された前記第1の作業単位に関連する1つまたは複数の値を決定する工程を含み、
前記1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記特定された1つまたは複数のコンパイル済みのデータフローグラフが、前記決定された前記第1の作業単位に関連する1つまたは複数の値と一致するそれぞれの値にバインドされた前記1つまたは複数のパラメータの第1のセットを用いて前記第1のデータフローグラフを表すデータ構造にコンパイルされたかを判断する工程を含む、請求項15に記載の媒体。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本願は、2010年6月15日に出願された米国特許出願第61/355,129号の優先権を主張し、同特許は参照により本明細書に組み込まれる。
【0002】
背景
この説明は、グラフに基づく計算の動的ロードに関する。
【背景技術】
【0003】
複雑な計算は、有向グラフ(「データフローグラフ」と呼ばれる)を通じてデータフローとして表すことができる場合が多く、計算のコンポーネントはグラフの頂点に関連し、コンポーネント間のデータフローはグラフのリンク(弧、辺)に相当する。コンポーネントは、1つまたは複数の入力ポートでデータを受信し、データを処理し、1つまたは複数の出力ポートからデータを提供するデータ処理コンポーネントと、データフローのソースまたはシンクとして機能するデータセットコンポーネントとを含み得る。そのようなグラフに基づく計算を実施するシステムについては、米国特許第5,966,072号「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」に記載されている。
【発明の概要】
【課題を解決するための手段】
【0004】
要約
一般的な態様では、データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータ処理システム内のデータを処理するための方法は、それぞれが1つまたは複数の作業要素を含む複数の作業単位を受信する工程と、第1の作業単位を受信する工程に応じて、データ処理システムにロードされた第1のコンパイル済みのデータフローグラフを使用して第1の作業単位を処理する工程とを含む。第1のコンパイル済みのデータフローグラフは、データ処理コンポーネントの間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第1のデータフローグラフを表すデータ構造にコンパイルされている。処理する工程は、第1の作業単位を分析して第1の作業単位の特性を決定する工程と、決定された第1の作業単位の特性を有する作業単位を処理するために、第1の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含むデータ格納システムに格納された複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、第1のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程と、第1のデータフローグラフを使用して第1の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む。
【0005】
態様は、以下の特徴の1つまたは複数を含み得る。
【0006】
複数の作業単位は、受信された作業要素のフロー内の1つまたは複数の作業要素の異なる連続セットに相当する。
【0007】
複数の作業単位は、それぞれの受信された異なるファイル内の1つまたは複数の作業要素の異なるバッチに相当する。
【0008】
ロードする工程は、第1のコンパイル済みのデータフローグラフから第1のデータフローグラフを表すデータ構造を取得し、取得したデータ構造を第2のデータフローグラフにロードする工程をさらに含む。
【0009】
第2のデータフローグラフは、第1の作業単位が受信される前に実行していた。
【0010】
取得したデータ構造を第2のデータフローグラフにロードする工程は、第1のデータフローグラフ内のデータ処理コンポーネントを実行するための第1のプロセスを提供するよう構成された第2のデータフローグラフの包含コンポーネント内に第1のデータフローグラフを埋め込む工程を含む。
【0011】
第2のデータフローグラフの包含コンポーネントは、さらに、第1のデータフローグラフ内のデータ処理コンポーネントの実行をモニタするための第2のプロセスを提供するように構成される。
【0012】
第1のデータフローグラフ内の少なくとも1つのデータ処理コンポーネントの障害を検出して所定の作業要素を適正に処理する工程に応じて、第2のプロセスは、第2のデータフローグラフの実行を中断することなく、第1のデータフローグラフの実行を中断する。
【0013】
第1の作業単位を処理する際に第1のデータフローグラフ内の少なくとも1つのデータ処理コンポーネントの遅延を検出する工程に応じて、第2のプロセスは、第2のデータフローグラフの実行を中断することなく、第1のデータフローグラフの実行を一時停止し、第3のデータフローグラフを第2のデータフローグラフの包含コンポーネント内に埋め込み、第1の作業単位の後に受信した第2の作業単位を処理する。
【0014】
第2のデータフローグラフの包含コンポーネントは、さらに、第1のリモートデータベース用のライブラリにアクセスする第2のプロセスと通信するために第1のプロセスが使用する第1のアプリケーションプログラミングインターフェースを提供するように構成される。
【0015】
第2のデータフローグラフの包含コンポーネントは、さらに、第1のリモートデータベース用のライブラリとは異なる第2のリモートデータベース用のライブラリにアクセスする第3のプロセスと通信するために第1のプロセスが使用する第2のアプリケーションプログラミングインターフェースを提供するように構成される。
【0016】
第2のデータフローグラフの包含コンポーネントは、さらに、第2のデータフローグラフの複数のコンポーネントとの互換性を有する第3のアプリケーションプログラミングインターフェースを提供するように構成される。
【0017】
第2のデータフローグラフの包含コンポーネントは、さらに、第1または第2のリモートデータベースのどちらにアクセスしているかに基づいて、第3のアプリケーションプログラミングインターフェースを使用するアプリケーション呼出しを、第1または第2のアプリケーションプログラミングインターフェースのいずれか選択したものを使用するアプリケーション呼出しに変換するように構成される。
【0018】
取得したデータ構造を第2のデータフローグラフにロードする工程は、第1のデータフローグラフを第2のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、埋め込む工程は、包含コンポーネントの入力と接続されたリンクから受信した入力作業要素のフローを第1のデータフローグラフの入力と接続する工程と、生成された1つまたは複数の出力作業要素を包含コンポーネントの出力と接続されたリンクと接続する工程とを含む。
【0019】
第1のデータフローグラフは、第1のコンポーネントを含み、第1のコンポーネントは、第2のコンポーネントの入力と接続された少なくとも1つの出力リンクと、第1のデータフローグラフが包含コンポーネント内に埋め込まれている場合は、第2のコンポーネントに入力作業要素を提供するための命令と、第1のデータフローグラフが包含コンポーネント内に埋め込まれていない場合は、格納場所から第2のコンポーネントに作業要素を提供するための命令とを含む。
【0020】
第1のデータフローグラフは、第3のコンポーネントを含み、第3のコンポーネントは、第4のコンポーネントの出力と接続された少なくとも1つの入力リンクと、第1のデータフローグラフが包含コンポーネント内に埋め込まれている場合は、生成された1つまたは複数の出力作業要素を第4のコンポーネントの出力から包含コンポーネントの出力に提供するための命令と、第1のデータフローグラフが包含コンポーネント内に埋め込まれていない場合は、生成された1つまたは複数の出力作業要素を第4のコンポーネントの出力から格納場所に提供するための命令とを含む。
【0021】
第1のデータフローグラフは、複数のインターフェースコンポーネントを含み、複数のインターフェースコンポーネントはそれぞれ、第1のデータフローグラフが包含コンポーネント内に埋め込まれている場合は、第1のデータフローグラフと包含コンポーネントとの間で作業要素を送信するための命令と、第1のデータフローグラフが包含コンポーネント内に埋め込まれていない場合は、第1のデータフローグラフと格納場所との間で作業要素を送信するための命令とを含む。
【0022】
インターフェースコンポーネントのそれぞれは、第1のデータフローグラフが包含コンポーネント内に埋め込まれている場合は、第1のデータフローグラフが接続される包含コンポーネントの対応する異なる入力または出力ポートを特定する。
【0023】
本方法は、1つまたは複数の出力作業要素を生成した後に、第2のデータフローグラフから、取得した第1のデータフローグラフを表すデータ構造をアンロードする工程をさらに含む。
【0024】
本方法は、第1の作業単位が到着した後かつ取得した第1のデータフローグラフを表すデータ構造をアンロードする前に到着する作業単位内に存在する作業要素をバッファリングする工程をさらに含む。
【0025】
本方法は、データ処理システムにロードされた第2のコンパイル済みのデータフローグラフをロードする工程をさらに含み、第2のコンパイル済みのデータフローグラフは、第2のデータフローグラフを表すデータ構造にコンパイルされている。
【0026】
特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、第1のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程は、第1のデータフローグラフを第3のデータフローグラフの第1の包含コンポーネント内に埋め込む工程を含み、第2のコンパイル済みのデータフローグラフをデータ処理システムにロードする工程は、第2のデータフローグラフを第3のデータフローグラフの第2の包含コンポーネント内に埋め込む工程を含む。
【0027】
第2のコンパイル済みのデータフローグラフは、第1の作業単位を受信する工程に応じて、データ処理システムにロードされる。
【0028】
第2のコンパイル済みのデータフローグラフは、第1の作業単位の後に第2の作業単位を受信する工程に応じて、データ処理システムにロードされる。
【0029】
本方法は、第2の作業単位を受信する工程に応じてデータ処理システムにロードされた第2のコンパイル済みのデータフローグラフを使用して、第1の作業単位を処理した後に第2の作業単位を処理する工程をさらに含み、第2のコンパイル済みのデータフローグラフは、第2のデータフローグラフを表すデータ構造にコンパイルされており、処理する工程は、第2の作業単位を分析して第2の作業単位の特性を決定する工程と、決定された第2の作業単位の特性を有する作業単位を処理するために、第2の作業単位を受信する前に、コンパイルされたデータ格納システムに格納された複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、第2のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程と、第2のデータフローグラフを使用して第2の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む。
【0030】
特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、第1のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程は、第1のデータフローグラフを第3のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、第2のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程は、第2のデータフローグラフを第3のデータフローグラフの包含コンポーネント内に埋め込む工程を含む。
【0031】
第1の作業単位を分析する工程は、第1の作業単位の作業要素内に含まれるコンパイル済みのデータフローグラフ用の識別子を読み取る工程を含む。
【0032】
1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、識別子を、1つまたは複数のコンパイル済みのデータフローグラフに関連する識別子と一致させる工程を含む。
【0033】
第1の作業単位を分析する工程は、第1の作業単位の作業要素を特徴付ける複数の既定のタイプの1つを特定する工程を含む。
【0034】
1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、1つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、特定されたタイプによって特徴付けられた作業要素を処理するよう構成されているかを判断する工程を含む。
【0035】
第1の作業単位を分析する工程は、第1の作業単位の作業要素内に含まれるコンテンツの特性を特定する工程を含む。
【0036】
1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、1つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、特定された特性を有するコンテンツを含む作業要素を処理するよう構成されているかを判断する工程を含む。
【0037】
第1の作業単位を分析する工程は、第1のデータフローグラフの1つまたは複数のパラメータの第1のセット用の値として指定された第1の作業単位に関連する1つまたは複数の値を決定する工程を含む。
【0038】
1つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、特定された1つまたは複数のコンパイル済みのデータフローグラフが、決定された第1の作業単位に関連する1つまたは複数の値と一致するそれぞれの値にバインドされた1つまたは複数のパラメータの第1のセットを用いて第1のデータフローグラフを表すデータ構造にコンパイルされたかを判断する工程を含む。
【0039】
特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、第1のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程は、1つまたは複数のパラメータの第2のセットを、第1の作業単位に少なくとも部分的に基づいて決定されたそれぞれの値にバインドする工程を含む。
【0040】
1つまたは複数のパラメータの第2のセットは、少なくとも1つのパラメータを含み、その値は、入力作業要素を提供するための入力ソースまたは出力作業要素を受信するための出力ソースの名前を含む。
【0041】
1つまたは複数のパラメータの第1のセットは、少なくとも1つのパラメータを含み、その値は、データ構造が第1のコンパイル済みのデータフローグラフにコンパイルされている場合に、第1のデータフローグラフを表すデータ構造に1つまたは複数のコンポーネントを含めるべきかどうかを判断する。
【0042】
1つまたは複数のパラメータの第1のセットは、少なくとも1つのパラメータを含み、その値は、データ構造が第1のコンパイル済みのデータフローグラフにコンパイルされている場合に、第1のデータフローグラフを表すデータ構造内に含まれるコンポーネントによって処理される作業要素に変換を適用すべきかを判断する。
【0043】
本方法は、第1の作業単位を受信する前に、それぞれの値にバインドされた1つまたは複数のパラメータの第1のセットを用いて第1のデータフローグラフを表すデータ構造から第1のコンパイル済みのデータフローグラフをコンパイルする工程をさらに含む。
【0044】
本方法は、第1のコンパイル済みのデータフローグラフをデータ格納システムに格納し、格納した第1のコンパイル済みのデータフローグラフを1つまたは複数のパラメータの第1のセットにバインドされたそれぞれの値を示す情報と関連付ける工程をさらに含む。
【0045】
別の態様では、一般に、データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータを処理するためのデータ処理システムは、それぞれが1つまたは複数の作業要素を含む複数の作業単位を受信するよう構成された入力デバイスまたはポートと、第1の作業単位を受信する工程に応じて、データ処理システムにロードされた第1のコンパイル済みのデータフローグラフを使用して第1の作業単位を処理するよう構成された少なくとも1つのプロセッサとを含む。第1のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第1のデータフローグラフを表すデータ構造にコンパイルされている。処理する工程は、第1の作業単位を分析して第1の作業単位の特性を決定する工程と、決定された第1の作業単位の特性を有する作業単位を処理するために、第1の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含むデータ格納システムに格納された複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、第1のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程と、第1のデータフローグラフを使用して第1の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む。
【0046】
別の態様では、一般に、データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータを処理するためのデータ処理システムは、それぞれが1つまたは複数の作業要素を含む複数の作業単位を受信するための手段と、第1の作業単位を受信する工程に応じて、データ処理システムにロードされた第1のコンパイル済みのデータフローグラフを使用して、第1の作業単位を処理するための手段とを含む。第1のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第1のデータフローグラフを表すデータ構造にコンパイルされている。処理する工程は、第1の作業単位を分析して第1の作業単位の特性を決定する工程と、決定された第1の作業単位の特性を有する作業単位を処理するために、第1の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含むデータ格納システムに格納された複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、第1のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程と、第1のデータフローグラフを使用して第1の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む。
【0047】
別の態様では、一般に、コンピュータ可読媒体は、データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータ処理システム内のデータを処理するためのコンピュータプログラムを格納する。コンピュータプログラムは、コンピュータに、それぞれが1つまたは複数の作業要素を含む複数の作業単位を受信させ、第1の作業単位を受信する工程に応じて、データ処理システムにロードされた第1のコンパイル済みのデータフローグラフを使用して、第1の作業単位を処理させるための命令を含む。第1のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第1のデータフローグラフを表すデータ構造にコンパイルされている。処理する工程は、第1の作業単位を分析して第1の作業単位の特性を決定する工程と、決定された第1の作業単位の特性を有する作業単位を処理するために、第1の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含むデータ格納システムに格納された複数のコンパイル済みのデータフローグラフから1つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、特定された1つまたは複数のコンパイル済みのデータフローグラフの1つを、第1のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程と、第1のデータフローグラフを使用して第1の作業単位内の少なくとも1つの作業要素から1つまたは複数の出力作業要素を生成する工程とを含む。
【0048】
本発明の態様は、以下の利点の1つまたは複数を含み得る。
【0049】
データフローグラフを使用するデータ処理システムは、個別の作業要素で構成されるデータの入力フローを処理する異なる方法で構成することができる。それぞれの作業要素が別々の作業単位を表すことも、一連の複数の作業要素が1つの作業単位を表すことも可能である。本明細書に記載される技法は、そのようなシステムのさまざまな構成に使用することができる。一部の構成は、ある特定の特性を有するデータフロー内の作業単位に対してより適切である場合がある。いくつかの事例では、作業単位内の1つまたは複数の作業要素は、バッチ(例えば、同じ入力ファイル内の記録からなる作業要素のバッチ)として処理するためのデータフローグラフに提供され、そこでは、データフローグラフは、一度に単一バッチで、1つまたは複数の入力ポートから1つまたは複数の出力ポートに作業要素のデータフローを渡す。下流コンポーネントの出力ポートから提供された一連の「出力作業要素」(および、場合により、データセットコンポーネントに格納された)は、入力ポートに提供された一連の「入力作業要素」を処理した結果を表す。バッチ処理の一形態では、データフローグラフは、バッチの第1の入力作業要素が準備されると開始し、最後の出力作業要素を提供した後に終了する。バッチ処理の別の形態では、データフローグラフは、前のバッチからの最後の出力作業要素が次のバッチからの最初の入力作業要素を処理する前に出力されていることを確認する間、次から次へとバッチを実行し続ける。この後者のバッチ処理の形態では、それぞれがバッチを表す1つまたは複数の作業要素からなる作業単位に分割された作業要素の連続ストリームが存在し得る。本明細書に記載される技法の一部は、受信した作業単位に関連する既定の特性を検出する工程に応じて、所定のデータフローグラフを動的にロードする方法を示す。以下でさらに詳細に説明されるように、いくつかの事例では、特性は、作業単位のコンテンツ(例えば、ファイルの形式)に基づき、いくつかの事例では、特性は、作業単位に関連するパラメータ値(例えば、特定の条件付きコンポーネントを含めるべきかどうかを判断するパラメータ)に基づく。
【0050】
いくつかの構成では、データ処理システムは、データフローグラフを比較的短い期間(例えば、数秒程度)の間実行して所定のデータのバッチを処理するように、データフローグラフを実行してデータのバッチを処理することができる。選択したデータフローグラフ(例えば、データフローグラフの収集体から選択した)で小容量のバッチを多く処理する場合、選択したデータフローグラフの実行時間が「開始時間」(グラフの開始から、グラフをロードしてデータのバッチの処理を開始する準備ができるまでに要する時間)で占められていなければ、大幅に性能を向上させることができる。例えば、データフローグラフの開始時間が約5秒で、データのバッチの処理に約5秒要する場合は、有用なデータ処理には実行時間の半分のみが使用される。いくつかの事例では、処理時間と実行時間のこの低比率は、それほど頻繁にバッチが到着しない場合(例えば、この例では数分ごとに)は、全体の効率に影響を与えることはない。しかし、比較的頻繁にバッチが到着する場合(例えば、この例では数秒ごとに)は、開始時間は全体の効率に多大な影響を与えることがある。本明細書に記載されるように、性能は、開始時間の間に実行されるであろうタスクの一部を早期のコンパイル段階に移動することによって向上させることができる。
【0051】
いくつかの構成では、データ処理システムは、データフローグラフを実行してデータのフロー内の一連の作業要素を連続して処理するように、データフローグラフを実行してデータの連続フローを処理することができる。作業要素は、作業要素の1つまたは複数からなる作業単位に分割することができ、各作業単位は、バッチとして異なるデータフローグラフで処理する必要がある場合がある。性能は、異なるデータフローグラフを、要求に応じて実行中のコンテナグラフに動的にロードする場合(例えば、異なるデータフローグラフのすべてを独立して実行している状態に保つこと、または、それらを単一の大容量のデータフローグラフに組み合わせることとは対照的に)、大幅に向上させることができる。例えば、作業単位は、所定のタイプの単一のメッセージからなるものであってもよい。一部のタイプのメッセージは、他のものより頻繁であり得る。したがって、適切なデータフローグラフをロードして所定のタイプのメッセージを取り扱うことによって(すべての異なるタイプのメッセージに対するすべてのデータフローグラフを同時に実行する代わりに)、よりまれに使用されるデータフローグラフの実行の維持に使用されたであろうリソースを他の目的のために解放することができる。それに加えて、データフローグラフを大容量のデータフローグラフに組み合わせる代わりにデータフローグラフを別々に維持することにより、異なるタイプのメッセージに対するカスタムデータフローグラフの容易な設計を可能にするモジュール方式が提供され、コンテナグラフの検査時に全システムに対する開発者の理解を助長させる。開発者は、対応するデータフローグラフを変更することによって一部のタイプのメッセージを取り扱う方法を容易に変更することができ、メッセージタイプを追加または取り除く際にデータフローグラフを容易に追加または取り除くことができる。
【0052】
本明細書に記載される技法を使用して、受信したデータのバッチを処理するため適切なパラメータ値でランタイム時に動的にロードできるカスタマイズされた異なるバージョンのデータフローグラフをコンパイルすることができる。いくつかの実装形態では、コンパイル済みのデータフローグラフは、包含データフローグラフを実行している間、包含データフローグラフに(および包含データフローグラフから)動的にロードできる(およびアンロードできる)「マイクログラフ」として使用することができる。マイクログラフは、データフローグラフでデータの連続フローを処理する間、バッチとしてデータの連続フロー内の異なる作業単位を処理する効果的な方法を提供する。いくつかの事例では、マイクログラフは、以下でさらに詳細に説明されるように、マイクログラフをロードするための特殊コンポーネントを使用して、サブグラフとして包含データフローグラフ内にロードされる。データフローグラフ(マイクログラフを含む)をコンパイルするための技法は、受信したデータのバッチ(データフロー内の作業単位を含む)に応じて、データフローグラフのコンパイル済みの異なるバージョンの間で選択することによってランタイム時の柔軟性を依然として可能にする一方で、一部の開始手順の事前実行を可能にする。
【0053】
本発明の他の特徴および利点は、以下の説明および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0054】
図1】データフローグラフを実行するシステムの例示的な構成のブロック図である。
図2】マイクログラフを含む例示的なデータフローグラフの図である。
図3A】例示的な特殊コンポーネントの図である。
図3B】例示的なマイクログラフの図である。
図4】メモリ内に複数のマイクログラフを備えた例示的な特殊コンポーネントの図である。
図5A】複数のマイクログラフ処理データフローを備えた例示的な特殊コンポーネントの図である。
図5B】複数の特殊コンポーネントを備えた例示的なデータフローグラフの図である。
図6】前処理および後処理コンポーネントを含む例示的な特殊コンポーネントのブロック図である。
図7】複数のデータフローコンポーネントの一例を示す図であり、それぞれは単一のデータベースと相互作用する。
図8】複数のデータベースと相互作用する例示的なデータフローコンポーネントの図である。
図9A】複数のデータベースと相互作用する例示的なデータフローコンポーネントの図である。
図9B】共通のプロトコル層を使用して複数のデータベースと相互作用する例示的なデータフローコンポーネントの図である。
図10】ランタイム前にデータフローグラフをコンパイルするシステムの例示的な構成のブロック図である。
【発明を実施するための形態】
【0055】
説明
1.概要
図1は、動的ロード技法を使用できる例示的なデータ処理システム100を示す。システム100は、記憶装置またはオンラインデータストリームとの接続部などの1つまたは複数のデータソースを含み得るデータソース101を含み、データソースのそれぞれは、さまざまな格納形式のいずれかの形式(例えば、メインフレームによって使用されるデータベース表、スプレッドシートファイル、フラットテキストファイルまたはネイティブ形式)でデータを格納することができる。実行環境104は、事前実行モジュール105と、実行モジュール106とを含む。実行環境104は、UNIX(登録商標)オペレーティングシステムなどの適切なオペレーティングシステムの制御下で、1つまたは複数の汎用コンピュータをホストとすることができる。例えば、実行環境104は、ローカルで接続された(例えば、SMPコンピュータなどのマルチプロセッサシステム)もしくはローカルで分散された(例えば、クラスタもしくはMPPとして結合された複数のプロセッサ)、または、リモートで接続されたもしくはリモートで分散された(例えば、ローカルエリアネットワーク(LAN)および/もしくは広域ネットワーク(WAN)を介して結合された複数のプロセッサ)、あるいは、それらの任意の組合せの、複数の中央演算処理装置(CPU)を使用したコンピュータシステムの構成を含む複数ノード並列演算環境を含み得る。
【0056】
事前実行モジュール105は、データフローグラフをコンパイルする、実行環境104にアクセス可能なデータ格納システム107へ/からコンパイル済みのデータフローグラフを格納/ロードする、または、パラメータ値を分解して、分解した値をパラメータにバインドするなど、データフローグラフおよび他の実行可能プログラムの実行に備えてさまざまなタスクを実行するよう構成される。いくつかの事例では、事前実行モジュール105は、データソース101からのデータに応じてタスク(例えば、コンパイル済みのデータフローグラフをロードする)を実行する。データソース101を提供する記憶装置は、実行環境104とローカルで接続する、例えば、実行環境104を実行しているコンピュータに接続された記憶媒体(例えば、ハードドライブ102)に格納することも、実行環境104とリモートで接続する、例えば、リモート接続上で、実行環境104を実行しているコンピュータと連通するリモートシステム(例えば、メインフレーム103)をホストとすることもできる。
【0057】
実行モジュール106は、事前実行モジュール105によって生成されたコンパイル済みのデータフローグラフを使用して出力データを生成し、出力データは、データソース101に戻すおよび/またはデータ格納システム107に格納することができる。また、データ格納システム107は、開発環境108にアクセスすることができ、開発環境108では、開発者109は、データフローグラフを設計することができる。データフローグラフを表すデータ構造は、シリアライズしてデータ格納システム107に格納することができる。
【0058】
実行モジュール106は、異なる形式のデータベースシステムを含むデータソース101のさまざまなタイプのシステムからデータを受信することができる。データは、恐らくヌル値を含む、それぞれのフィールド(「属性」または「列」とも呼ばれる)に対する値を有する記録として組織化することができる。データソースからデータを読み取る際、実行中のデータフローグラフは、そのデータソース内の記録についての初期形式情報を取り扱うコンポーネントを含み得る。状況次第では、データソースの記録構造は、初めは知られていない場合があり、代わりに、データソースの分析後に決定される場合がある。記録についての初期情報は、異なる値を表すビット数と、記録内のフィールドの順番と、ビットによって表される値のタイプ(例えば、ストリング、符号付き/符号なし整数)とを含み得る。
【0059】
図2を参照すると、実行モジュール106によって実行されたデータフローグラフ155の一例により、入力データソース110からのデータを読み取り、離散的な作業要素のフローとして処理することが可能になる。作業要素の処理に伴う計算の異なる部分は、グラフの頂点(または、ノード)として表されるコンポーネント120、130で、ならびに、コンポーネント120および130を接続するリンク125などのグラフのリンク(または、弧、辺)によって表されるコンポーネント間のデータフローで実行される。そのようなグラフに基づく計算を実施するシステムについては、参照により本明細書に組み込まれる米国特許第5,566,072号「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」に記載されている。このシステムに従って作成されたデータフローグラフは、グラフコンポーネントによって表される個別のプロセスに情報を持ち込むおよび個別のプロセスから情報を引き出すための方法、プロセス間で情報を移動するための方法、ならびに、プロセスに対する実行順番を定義するための方法を提供する。このシステムは、プロセス間通信方法(例えば、グラフのリンクに従った通信経路は、TCP/IPもしくはUNIXドメインソケットを使用するか、または、共有メモリを使用して、プロセス間でデータを渡すことができる)を選択するアルゴリズムを含む。
【0060】
実行用に未コンパイルのデータフローグラフを準備するプロセスは、さまざまな段階を伴う。データフローグラフの未コンパイルの表現は、コンパイルプロセスで使用される値を提供するデータフローグラフに関連する任意のパラメータとともに取得される。静的パラメータ分解段階の間、静的パラメータ(それらの値はランタイム前に分解用に指定される)を分解して、分解した値を静的パラメータにバインドする。いくつかの事例では、静的パラメータの値を分解するため、計算を実行してある特定の値(例えば、参照により本明細書に組み込まれる「MANAGING METADATA FOR GRAPH-BASED COMPUTATIONS」と称する米国特許出願公開第2006/0294150号に記載されるようなメタデータ値)を導出する。一部のパラメータは、未分解のまま残して後のランタイム時またはランタイム直前に分解する動的パラメータとして指定することができる。条件付きコンポーネントとして指定されたコンポーネントは、既定の条件が満たされない場合(または満たされる場合)は、例えば、静的パラメータ値に基づいて、グラフから取り除く(例えば、データフローリンクと交換することによって)。コンパイル段階の間、実行中に使用される、そのコンポーネントおよびリンクを含むデータフローグラフを表すデータ構造を生成する。また、コンパイルする工程は、スクリプト言語で埋め込まれたスクリプトをバイトコードまたはマシンコードにコンパイルする工程も含み得る。ランタイム時、データフローグラフと関連するいかなる動的パラメータも分解した値とバインドさせ、コンパイル済みのデータフローグラフのデータ構造を1つまたは複数のプロセスを開始することによって着手し、必要なあらゆるファイル(例えば、動的パラメータによって特定されたファイル)を開き、および/または、あらゆる動的ライブラリをリンクする。また、プロセスは、リンクによって表されるデータフローを設定するタスク(例えば、共有メモリを割り当てる、または、TCP/IPストリームを開く)も実行する。いくつかの事例では、データ構造は、参照により本明細書に組み込まれる「MANAGING COMPUTING RESOURCES IN GRAPH-BASED COMPUTATIONS」と称する米国特許出願公開第2007/0271381号に記載されているように、単一のプロセス内で複数のコンポーネントを実行するよう構成される。
【0061】
データフローグラフは、さまざまなレベルの抽象化によって指定することができる。それ自体がコンポーネントおよびリンクを含むデータフローグラフである「サブグラフ」は、単一のコンポーネントとして別の包含データフローグラフ内で表すことができ、サブグラフを包含データフローグラフに接続するそれらのリンクのみを示す。いくつかの事例では、サブグラフを使用して、開発環境108内の包含データフローグラフのコンポーネントおよびリンクを隠すが、コンポーネントおよびリンクを表すデータは、包含データフローグラフ内で既に統合されている。いくつかの実施形態では、以下でさらに詳細に説明されるように、サブグラフは、初めは包含データフローグラフ内に含まれていないが、後に、包含データフローグラフにロードされるコンポーネントおよびリンクを表すデータ構造を含む、コンパイル済みのデータフローグラフとして開始する「マイクログラフ」から導出される。
【0062】
再度図2を参照すると、データフローグラフ155は、データソースから入力データの連続フローを受入することができ、この例では、データソースは、データセットコンポーネント110で表される。データのフローは、データフローグラフ155のオペレーション中に増減したとしても、データのフローは、例えば、エントリシステム内で受信されたクレジットカードトランザクションまたは注文のフローなど、必ずしも区別可能な始まりまたは終わりを有するとは限らないという意味では連続的なものである。それに加えて、データフローグラフ155は、出力データの連続フローを出力データリポジトリに提供することができ、この例では、出力データリポジトリは、データセットコンポーネント140で表される。一部のデータフローグラフは、無期限にデータの連続フローを処理する連続データフローグラフとして実行するよう設計され、一部のデータフローグラフは、データの離散的なバッチを処理するための実行を開始し、次いで、バッチを処理してから実行を終了するバッチデータフローグラフとして実行するよう設計される。データフローグラフのデータ処理コンポーネント120および130は、一連の命令、サブグラフまたはそれらのいくつかの組合せを含み得る。
【0063】
いくつかの構成では、特殊コンポーネント130は、マイクログラフ160をロードすることができ、マイクログラフは、動的に取得し、包含データフローグラフ内に埋め込むよう構成された特殊な種類のサブグラフである。マイクログラフは、特殊コンポーネント130などの包含データフローグラフの包含コンポーネントに動的に埋め込むことができる。いくつかの構成では、マイクログラフ160は、以前にコンパイルされ、データ格納システム107に格納されたデータフローグラフから導出される。いくつかの構成では、マイクログラフ160は、データ格納システム107からロードする際、未コンパイルの形式のまま残る。例えば、コンパイル済みのデータフローグラフをロードする代わりに、特殊コンポーネント130は、グラフコンパイル手順を開始し、特殊コンポーネント130を含むデータフローグラフが、使用直前にコンパイルされたマイクログラフを実行できるようにすることができる。グラフコンパイル手順は、特殊コンポーネント130の外部で実行しても、特殊コンポーネント130の内部で実行してもよい。いくつかの構成では、マイクログラフ160は、データ格納システム107に格納する前にシリアライズする。一般に、シリアライゼーションは、コンパイル済みまたは未コンパイルの表現のデータフローグラフを0と1のバイナリストリームに変換し、その結果、データフローグラフを永続的なメモリまたはメモリバッファに容易に格納できる形式にするためのプロセスである。マイクログラフの迅速なロードが望ましい実装形態では、通常、データフローグラフは、データ構造とともにコンパイル済みの表現でシリアライズし、データ格納システム107に格納し、その結果、シリアライズしたコンパイル済みのデータフローグラフを容易に取得することができ、データ構造は、ランタイム時に非シリアライズし、動的にロードする。コンパイルは、データフローグラフとして表されるプログラムを含むコンピュータプログラムをコンピュータで実行するよう準備するためのプロセスである。コンパイルは、コンピュータ上で実行する準備ができているマシンコードもしくは命令、または、コンピュータ上で実行している仮想マシンによって実行される中間コード、例えば、Java(登録商標)バイトコードの生成をもたらす場合がある。データフローグラフの事例では、コンパイルは、コンピュータ上で実行する準備ができている形式でデータフローグラフのコンポーネントおよびリンクを表すデータ構造の生成を含む。
【0064】
特殊コンポーネント130の受信リンク125に沿ってデータフローグラフ155中を流れるデータは、特殊コンポーネント130がマイクログラフ160をロードしてマイクログラフ160をデータフローグラフ155と統合する間、バッファに一時的に格納される。同様に、データフローは、マイクログラフを切り離してデータフローグラフ155からアンロードする間、バッファに蓄積することができる。いくつかの構成では、切り離したマイクログラフをメモリ内にロードしたまま残し、後にアクセスすることができる(例えば、キャッシュメカニズムを使用する)。
【0065】
バッファリングは、コンポーネントに作業要素の入力フローを提供するリンクに対する入力キューを使用して実装されるフロー制御メカニズムを使用するよう構成することができる。このフロー制御メカニズムにより、データは、通常大容量だが低速のディスクドライブなどの不揮発性ローカル記憶装置に必ずしも書き込まれることなく、データフローグラフのコンポーネント間を流れることができる。入力キューは、作業要素を揮発性メモリに保持できるほど十分に小容量に保つことができ、通常、不揮発性メモリより小容量で高速である。格納スペースおよび時間の節約の可能性は、非常に大容量のデータセットにも存在する。コンポーネントは、入力キューの代わりにまたは入力キューに加えて、出力バッファを使用することができる。2つのコンポーネントがフローによって接続されると、上流コンポーネントは、下流コンポーネントが作業要素を消費し続ける限り、下流コンポーネントに作業要素を送信する。下流コンポーネントに遅れが出る場合は、上流コンポーネントは、下流コンポーネントの入力キューを埋めて、再度入力キューがクリアされるまで作業を停止する。
【0066】
いくつかの構成では、マイクログラフ160は、バッチデータフローグラフの一部として、または、コマンドラインから、スケジューリングプロセスによって予定に基づいて実行され、必ずしも包含データフローグラフの特殊コンポーネントにロードする必要はない。あるいは、スケジューラは、特殊コンポーネントを使用して、キューからのメッセージに応じて適切なマイクログラフをロードする特殊コンポーネントを含む実行中のデータフローグラフへメッセージの連続フローを提供するキューへメッセージを送信することによって、バッチ処理用のマイクログラフに着手することができる。
【0067】
2.特殊コンポーネント
図3Aを参照すると、一実施形態では、特殊コンポーネント200は、複数の入力205、210、215を受入し、複数の出力220、225、230および235に送達するよう構成される。入力は、データ入力205、210と、制御入力215とを含む。出力は、データ出力220、225、230と、状態出力235とを含む。制御入力215は、マイクログラフ240を実行するための識別子(例えば、受信された制御要素内の)および場合によりマイクログラフ240の実行に使用されるパラメータセットを受入する。一般に、特殊コンポーネント200は、データ入力205、210などのそれぞれのデータ入力ポート上で入力作業要素のゼロ以上のフローを受入することができる。状態出力235は、マイクログラフ240の実行からの出口状態および追跡情報を含む状態記録を生成する。それに加えて、特殊コンポーネントは、データ出力220、225および230などのそれぞれのデータ出力ポート上で出力作業要素のゼロ以上のフローを生成する。一実施形態では、特殊コンポーネント200は、正常な実行の間、1つの状態記録を生成し、1つの制御記録を受入する。
【0068】
制御入力215は、それぞれがロードすべき対応するマイクログラフを特定する一連の複数の制御要素を受信することができる。それぞれの制御入力要素は、特定したマイクログラフによって処理すべき作業単位を表すデータ入力上で受信する作業要素のフロー内の作業要素の異なるサブセットに関連する。いくつかの事例では、マイクログラフを特定する制御要素は、作業単位内の1つまたは複数の作業要素を分析して適切なマイクログラフを選択し、その作業単位を処理する工程に基づいて生成される。いくつかの事例では、マイクログラフを特定する制御要素および特定したマイクログラフによって処理すべき作業単位を表す作業要素は、独立して受信され、さまざまな技法のいずれかを使用して互いに一致させる。例えば、マイクログラフを特定する制御要素を最初に受信し、作業単位の少なくとも1つの作業要素内に現れるキー値を対応する制御要素(例えば、単に作業単位内の第1の作業要素または作業単位内のあらゆる作業要素)と一致させることによって、特定したマイクログラフによって処理すべき作業単位を表す作業要素を決定する。あるいは、「デリミタ作業要素」と呼ばれる作業要素は、同じ作業単位に属する作業要素の異なるシーケンスを分離するデリミタとして機能し得る。あるいは、特殊コンポーネント200は、既定数の作業要素を受信して、それぞれの制御要素と関連付ける連続的な作業単位に属するよう構成される。
【0069】
マイクログラフ240は、特殊コンポーネント200との互換性を有するよう設計されてきたマイクログラフの収集体から選択することができる。例えば、マイクログラフ240の入力ポートおよび出力ポートの数は、特殊コンポーネント200の入力ポートおよび出力ポートの数と一致し得る。この例では、マイクログラフ240は、2つの入力ポートおよび3つの出力ポートを有し、これらのポートは、入力フローを受信するよう構成されたマイクログラフ240の2つの異なるコンポーネント上および出力フローを提供するよう構成されたマイクログラフ240の3つの異なるコンポーネント上に位置する場合がある。あるいは、マイクログラフ240の複数の入力または出力ポートは、同じコンポーネント上に位置する場合がある。
【0070】
いくつかの実施形態では、特殊コンポーネント200は、事前に定義された条件に対してマイクログラフ240をモニタし、これらの条件に応じることができる。例えば、特殊コンポーネント200は、マイクログラフ240のコンポーネントを実行するプロセスをモニタする別々のプロセスを使用して、マイクログラフ240の実行中の待ち時間がタイムアウト条件に対する最大閾値を超えるかどうかを判断することができる。それに応じて、特殊コンポーネント200は、例えば、マイクログラフ240の第2のインスタンスをロードすることによって条件に応じることができる。同様に、エラー条件をモニタする。エラー条件を検出する工程に応じて、特殊コンポーネント200は、エラーを記録し、エラー条件に基づいて作業単位をリダイレクトし、必要ならば、マイクログラフ240を再開し、状態出力235を介してエラーを報告することができる。マイクログラフ240の再開では、特殊コンポーネント200が含まれている包含データフローグラフの他のいかなるコンポーネントも中断する必要はない。
【0071】
いくつかの実施形態では、特殊コンポーネント200は、入力ポート上のデータフローを分析して、どのマイクログラフ240を実行するかを判断する。他の実施形態では、マイクログラフ240を実行するための名前または他の識別情報は、データフローの一部として特殊コンポーネント200に供給される。さらなる他の実施形態では、マイクログラフ240を特定する情報は、特殊コンポーネント200の制御入力215を通じて供給される。
【0072】
特殊コンポーネント200は、以下でさらに詳細に説明されるように、データ格納システム107からマイクログラフ240をロードし、特殊コンポーネント200を含むデータフローグラフにマイクログラフ240を埋め込み、マイクログラフ240がデータフローを処理できるようにする。
【0073】
オペレーションが完了すると、特殊コンポーネント200は、マイクログラフ240を取り除く。いくつかの実施形態では、特殊コンポーネント200は、後にアクセスするため、データ格納システム107からよりも比較的容易にアクセスできる格納場所に格納されたマイクログラフキャッシュにマイクログラフ240を格納することができる。いくつかの実施形態では、特殊コンポーネント200は、マイクログラフ240をロードし、統合し、取り除く間、受信データをバッファリングすることができる。
【0074】
3.マイクログラフ構造
図3Bを参照すると、マイクログラフ240の一例は、データ処理コンポーネント305、310、315および320を含み、データ処理コンポーネントは、上流コンポーネントにリンクされた1つまたは複数の入力ポートに到着するデータフロー内の入力作業要素に対するオペレーションを実行し、下流コンポーネントにリンクされた1つまたは複数の出力ポートを出るデータフロー内の出力作業要素を生成する。また、マイクログラフ240は、マイクログラフ240を特殊コンポーネント200に埋め込むプロセスを容易にするよう構成されたコンポーネント300A、300Bおよび302A、302B、302Cも含み、これらは、「インターフェースコンポーネント」と呼ばれる。インターフェースコンポーネントは、マイクログラフを、実行すべき特殊コンポーネントに埋め込む必要のない独立したデータフローグラフとして実行することも可能にする。
【0075】
インターフェースコンポーネントを使用して、マイクログラフを包含特殊コンポーネントのポートに接続する。マイクログラフを特殊コンポーネントに埋め込む工程は、各インターフェースコンポーネントと特殊コンポーネントの適正なポートとの対を形成する方法を決定する工程を伴う。入力インターフェースコンポーネント(300A、300B)は出力ポートを有し、出力インターフェースコンポーネント(302A、302B、302C)は入力ポートを有する。入力インターフェースコンポーネントと特殊コンポーネントの入力ポートとの対を形成すると、その入力ポートと入力インターフェースコンポーネントの出力ポートがリンクされているポートとの間でデータフローリンクが生成される。同様に、出力インターフェースコンポーネントと特殊コンポーネントの出力ポートとの対を形成すると、出力インターフェースコンポーネントの入力ポートがリンクされているポートとその出力ポートとの間でデータフローリンクが生成される。
【0076】
インターフェースコンポーネントとそれらのそれぞれの特殊コンポーネントの入出力ポートとの適正な対形成は、以下のように決定することができる。インターフェースコンポーネントおよび特殊コンポーネントのポートは、場合により、識別子でラベル付けすることができる。特殊コンポーネントの入力/出力ポートに割り当てられた識別子と入力/出力インターフェースコンポーネントに割り当てられた識別子が一致すれば、そのポートとそのインターフェースコンポーネントは対形成される。識別子間での一致は、正確なものでも、不正確なものでもよい(例えば、識別子の一部の接頭語または接尾語間の一致を見出す)。ある対形成手順では、正確な一致と判断されると、数値接尾語を有するインターフェースコンポーネントは、一致する数値接尾語を有するポートと一致する(例えば、特殊コンポーネントの「出力1」ポートは「マイクログラフ出力−1」インターフェースコンポーネントと対形成される)。
【0077】
マイクログラフを特殊コンポーネントの外部で実行すると(例えば、テスト目的のための開発環境108からのコマンドに応じて)、インターフェースコンポーネントは、データセットコンポーネントの機能性を提供し、インターフェースコンポーネントの出力または入力ポートに接続されたリンク上のデータフロー内の作業要素のソースまたはシンクを提供する。適切な機能性は、マイクログラフが特殊コンポーネント内に埋め込まれているかどうかに基づいて決定される。インターフェースコンポーネントはそれぞれ、マイクログラフが特殊コンポーネント内に埋め込まれている場合は、マイクログラフと特殊コンポーネントとの間で作業要素を送信するための命令を含み、マイクログラフが特殊コンポーネント内に埋め込まれていない場合は、マイクログラフと格納場所との間で作業要素を送信するための命令とを含む。格納場所は、入力作業要素を提供するために読み取られるか、または、出力作業要素を受信するために書き込まれるファイルであり得る。
【0078】
いくつかの実施形態では、マイクログラフ240は、マイクログラフに含めることができるデータ処理コンポーネント(この例では、コンポーネント305、310、315および320)の機能性に対してある特定の制約を設定することによって構成される。例えば、いくつかの実施形態では、マイクログラフ240のデータ処理コンポーネント305、310、315および320は、単一のプロセス内で実行できる必要がある場合がある(例えば、参照により本明細書に組み込まれる米国特許出願公開第2007/0271381号にさらに詳細に説明されているように単一プロセスに組み込むことによって)。いくつかの実施形態では、マイクログラフは、加入ソース(キューなど)からデータを受信する加入者コンポーネントをサポートしない。いくつかの実施形態では、マイクログラフは、バッチデータフローグラフとして構成する必要がある場合がある。いくつかの実施形態では、マイクログラフ240によって実行されたいかなるトランザクションオペレーションも、単一のトランザクションに収まらなければならない。他の実施形態では、マイクログラフ240のトランザクション態様、例えば、チェックポイント、トランザクションのコンテキストおよびマルチフェーズコミットは、制御入力215を通じて制御される。
【0079】
データフローグラフ処理では、データの連続フローは、従来のトランザクションの動作に影響を及ぼし得る。チェックポイントオペレーションは、データフロー内のポイントで十分な状態情報を格納し、データフロー内のそのポイントからデータフローグラフを再開できるようにする工程を伴う。かなり頻繁にチェックポイントを取れば、性能は低下する。かなりまれにチェックポイントを取れば、トランザクションの障害の事例におけるリカバリ手順は、より複雑なリソース集約型となる。トランザクションのコンテキストを使用して、そのオペレーションがより大容量のトランザクションの一部であることをマイクログラフに通知することができる。このトランザクションは、単一のデータソースに対して動作する複数のコンポーネントを包含する、より大容量のトランザクションであっても、複数のデータソースにわたって、例えば、2フェーズコミットオペレーションでトランザクションを調整するのに必要な情報を含んでもよい。
【0080】
4.マイクログラフ管理
図4を参照すると、一実施形態では、特殊コンポーネント405は、特殊コンポーネントがアクセス可能なキャッシュ(例えば、ローカルメモリに格納)に一度に2つ以上のマイクログラフをロードしている場合がある。この例では、1つのマイクログラフ430は、特殊コンポーネント405を含むデータフローグラフに接続される。特殊コンポーネント405の入力440は、マイクログラフ430の入力445へのリンクによって接続され、マイクログラフ430の出力450は、特殊コンポーネント405の出力455へのリンクによって接続される。マイクログラフ430の入力440および出力450は、例えば、入力および出力インターフェースコンポーネント、または、マイクログラフを特殊コンポーネントに埋め込むための他の任意のメカニズムを表す。
【0081】
他のマイクログラフ410、415、420および425を格納するキャッシュは、マイクログラフ430を格納する同じメモリ内に位置し得る。いくつかの実施形態では、マイクログラフ410、415、420、425および430は、特殊コンポーネント405を実行する同じプロセス内のスレッドとして、または、そのプロセスの子プロセスとして実行することができる。あるいは、マイクログラフ410、415、420、425および430は、そのプロセスの同じメインスレッド内で実行することができる。いくつかの実施形態では、特殊コンポーネント405は、マイクログラフ410、415、420、425および430の複数のコピーを実行する。いくつかの実施形態では、特殊コンポーネント405は、そのコピーが「不正(dirty)」(オリジナルのマイクログラフに変更があったことを示す)としてマーキングされない限り、データ格納システム107に格納されたオリジナルのマイクログラフにアクセスする前に、キャッシュに格納された選択されたマイクログラフのコピーを使用する。選択されたマイクログラフのコピーがキャッシュにない場合、特殊コンポーネント405は、データ格納システム107からマイクログラフをロードする。いくつかの実施形態では、選択されたマイクログラフは、「オフライン」の状態にあるものとして示され(例えば、キャッシュへ登録することによって)、これは、選択されたマイクログラフが現時点で利用不可能である(例えば、開発者がマイクログラフを変更している最中であり得る)ことを示す。それに応じて、特殊コンポーネントは、選択されたマイクログラフをロードする際にエラーを示すことも、代わりのマイクログラフ(例えば、同様の能力を有する異なるマイクログラフ)をロードすることもできる。
【0082】
図5Aを参照すると、一シナリオでは、単一の特殊コンポーネント505は、同時にデータフローと統合された複数のマイクログラフ510、515および520を有する。特殊コンポーネント505の入力ポート525は、入力データフローからの作業要素を複数のデータフローにパーティションで区切るパーティションコンポーネント557を使用して、マイクログラフ520、515および510の入力530、545、555のそれぞれに接続される。マイクログラフの出力535、550および560は、複数のデータフローから作業要素を集め、それらを単一の出力データフローにマージするコンポーネント562(「収集コンポーネント」と呼ばれる)を使用して、特殊コンポーネント505の出力540ポートに接続される。この構成では、特殊コンポーネント505は、受信データをマイクログラフ510、515および520にルーティングすることができる。例えば、コンポーネントが同一のマイクログラフの別々のコピーである場合、特殊コンポーネント505は、パーティションで区切る際に、ロードバランスアルゴリズム(例えば、ラウンドロビン、最小利用など)を利用することができる。
【0083】
図5Bを参照すると、別のシナリオでは、データフローグラフ565は複数の特殊コンポーネントを含み、それにより、高度にカスタマイズ可能なコンテナデータフローグラフにおける柔軟な組合せのマイクログラフの構成が可能になる。この例では、データセットコンポーネント570からの作業要素(入力データのバッチまたは入力データの連続ストリームを表し得る)は、最初にデータ処理コンポーネント572によって処理され(例えば、作業要素を再フォーマットする)、次いで、リンク574上で第1の特殊コンポーネント576に送信される。特定のタイプの作業要素を検出する工程に応じて、コンポーネント576は、検出されたタイプの作業要素を処理するよう構成されたマイクログラフ578をロードする。次いで、第1の特殊コンポーネント576からの処理された出力作業要素は、第2の特殊コンポーネント580に送信され、第2の特殊コンポーネント580は、マイクログラフ582をロードする。この構成では、第2の特殊コンポーネント580にロードするために選択されたマイクログラフ582は、第1の選択されたマイクログラフ578の結果に依存する。結果として得られた出力作業要素は、データセットコンポーネント584に送信される。異なるマイクログラフの多数の組合せは、データフローグラフ内の戦略上の場所で特殊コンポーネントを使用して動的にロードすることができる。この簡単な例では、第1の特殊コンポーネント576にロードできる10個の異なる潜在的マイクログラフ、および、第2の特殊コンポーネント580にロードできる10個の異なる潜在的マイクログラフが存在すれば、データフローを処理している間に、要求に応じて動的に構築できる100個もの異なるデータフローグラフが存在し、データフローを100個の異なる実行中のデータフローグラフにパーティションで区切ることと比べると、潜在的にはるかに少ないリソースが必要とされ、各作業単位に対して100個の異なるデータフローグラフの1つを開始することと比べると、待ち時間は潜在的にはるかに短い。
【0084】
5.前処理および後処理
特殊コンポーネントは、ロードされたマイクログラフ内のコンポーネントに加えて他のコンポーネントも含むことができる。図6を参照すると、一実施形態では、特殊コンポーネント605は、マイクログラフを実行する前に前処理を含み、マイクログラフを実行した後に後処理を含む(図では、前処理コンポーネント610および後処理コンポーネント620をマイクログラフ615の周囲に表す)。前処理および後処理機能は、例えば、トランザクション管理に関連し得る。いくつかの実施形態では、各マイクログラフ615は別々のトランザクションを表し、その事例では、前処理はトランザクションを開始し、後処理はトランザクションを終了することができる。他の実施形態では、マイクログラフ615は、より長いトランザクションにおけるチェックポイントを表し得る。例えば、マイクログラフ615は、2フェーズコミットプロトコルを使用するより長いトランザクションの一部であり得る。そのようなトランザクションは、複数の異なるマイクログラフまたは同じマイクログラフの複数の実行を使用して処理することができる。
【0085】
前処理コンポーネント610は、データストア(図示せず)からマイクログラフ615をロードして、後にアクセスするため、マイクログラフキャッシュにロードしたマイクログラフを潜在的に格納する、または、メモリキャッシュ(図示せず)からロードしたマイクログラフバージョンにアクセスして、特殊コンポーネント605に統合することができる。後処理コンポーネント620は、特殊コンポーネント605のデータフローとのその統合からロードしたマイクログラフ615を取り除くことができる。さまざまな他の前処理および後処理機能を実行することができ、それには、例えば、マイクログラフ615での処理用にデータフロー内の記録を準備することによる前処理(例えば、記録の再フォーマット)、および、特殊コンポーネント605の出力に接続されたコンポーネントでの処理用にマイクログラフ615から受信した記録を準備することによる後処理(例えば、記録の再フォーマットによる)が含まれる。
【0086】
6.データベース接続管理
図7を参照すると、いくつかのシナリオでは、コンポーネントが異なれば、異なるタイプのデータベースにアクセスできる必要がある。例えば、コンポーネント702は、あるベンダーによって提供されるデータベース706にアクセスする必要がある一方で、別のコンポーネント704は、別のベンダーによって提供されるデータベース704にアクセスする必要がある。一般に、コンポーネント702は、コンポーネントに統合されたライブラリ710、例えば、データベース706のベンダーによって供給されるライブラリにアクセスすることによってデータベース706にアクセスする。同様に、コンポーネント704は、コンポーネントに統合された別のライブラリ712、例えば、データベース708のベンダーによって供給されるライブラリにアクセスすることによってデータベース708にアクセスする。ライブラリは、特定のコンポーネントにコンパイルすることも、特定のコンポーネントに動的にリンクすることもできる。
【0087】
図8を参照すると、特殊コンポーネント802は、複数の異なるマイクログラフ804、806および808を含み得る。この例では、マイクログラフ808は、特殊コンポーネント802内に埋め込まれており、マイクログラフ804および806は、必要に応じて動的に埋め込まれるアクセス可能なキャッシュにロードされる。いくつかのマイクログラフは、あるデータベース706にアクセスすることができ、他のマイクログラフは、別のデータベース708にアクセスすることができる。伝統的には、2つのデータベースへのアクセスには、ライブラリ710が第1のデータベース706をサポートし、別のライブラリ712が他のデータベース708をサポートして、特殊コンポーネント802と統合する必要がある場合がある。複数の異なるデータベースライブラリの統合は、特殊コンポーネント802に関連するバイナリサイズの増加をもたらし、ベンダーによって供給されるあるライブラリ710が異なるベンダーによって供給される別のライブラリ712との互換性を有さない場合は、予測不能の挙動をもたらす。例えば、非互換性は、識別名の不一致または異なるコンパイルモデルを含み得る。
【0088】
非互換性を回避するおよび/またはバイナリサイズを削減する一方法は、特殊コンポーネントからライブラリを取り除き、代わりに、特殊コンポーネントを実行するプロセスからライブラリへ別々のコンピュータプロセスにアクセスさせることである。図9Aを参照すると、データベースライブラリ710および712は、特殊コンポーネント902から取り除かれている(例えば、コンポーネント902に、コンパイルも、動的リンクもされていない)。マイクログラフコンポーネント904、906および908は、クライアント/サーバインターフェース上でライブラリ710、712にアクセスすることによって、データベース706、708にアクセスする。ライブラリ710、712にアクセスするため、特殊コンポーネント902は、プロセス間通信を使用して外部プロセスで実行している対形成されたサーバスタブ912と通信する統合クライアントスタブ910を使用する。例えば、外部プロセスおよび特殊コンポーネント902は、共有メモリセグメントにアクセスすることによってデータを交換することができる。同様に、サーバスタブ920を実行している外部プロセスにアクセスするため、特殊コンポーネント902は、プロセス間通信を使用して外部プロセスで実行しているサーバスタブ920と通信する別の統合クライアントスタブ918を使用する。
【0089】
サーバスタブ912は、データベース706へのアクセスを提供するためにデータベースライブラリ710と統合する。同様に、サーバスタブ920は、データベース708へのアクセスを提供するためにデータベースライブラリ712と統合する。一般に、クライアントスタブ910、918は、データベースライブラリ710、712より小容量のメモリフットプリントを有し、したがって、特殊コンポーネントは、より少ないメモリリソースを使用することができる。それに加えて、データベースライブラリが特殊コンポーネント902から移し出されているため、データベースライブラリ710、712間での非互換性のリスクがない。
【0090】
図9Bを参照すると、いくつかの実施形態では、クライアントスタブ910、918およびサーバスタブ912、920は、データベースライブラリ710、712のそれぞれのアプリケーションプログラミングインターフェース(API)を密接に反映するよう構成される。ライブラリAPIの違いからマイクログラフ904、906および908を隔離するため、抽象化層930を特殊コンポーネント902に統合する。抽象化層930は、それらのデータベースに対するデータベースライブラリ間の違いに関わらず標準データベース動作を実行するための単一のAPIを備えた異なるデータベースにアクセスする必要があり得る複数の異なるコンポーネントをマイクログラフ内に提供する。いくつかの実施形態では、抽象化層930は、マイクログラフのコンポーネントからの要求をクライアントスタブ910、918のライブラリ特有のAPIへの特定の呼出しに変換する。いくつかの実施形態では、抽象化層930は、マイクログラフコンポーネントからの要求を一般的な呼出しとして渡し、それぞれのクライアントスタブは、一般的な呼出しからそのそれぞれのサーバスタブのAPIへのライブラリ特有の呼出しへの変換を実行するよう構成される。
【0091】
7.コンパイルおよびパラメータ
図10を参照すると、一実施形態では、データフローグラフコンパイルおよび実行システム1000は、データフローグラフコンパイラ1015と、パラメータ分析器1030と、データフローグラフローダ1035と、データフローグラフ実行エンジン1040とを含む。コンパイラ1015は、パラメータセットデータストア1005からのパラメータセット内のパラメータに基づいて、未コンパイルのデータフローグラフデータストア1010からの、マイクログラフを含む未コンパイルのデータフローグラフを処理する。所定のパラメータに関連する値は、データフローグラフのさまざまな特性のいずれも決定することができる。コンパイラ1015は、パラメータセットからの値を使用してデータフローグラフをコンパイルし、コンパイル済みのデータフローグラフを生成する。コンパイル済みのデータフローグラフは、コンパイル済みのデータフローグラフデータストア1020に格納される。データストア1010および1020は、例えば、データ格納システム107内でホストされ得る。コンパイラ1015、パラメータ分析器1030およびローダ1035は、例えば、事前実行モジュール105の一部として実装することができる。実行エンジン1040は、実行モジュール106の一部として実装することができる。
【0092】
パラメータセットデータストア1005は、パラメータのセットを含み、それぞれのパラメータセットは、データフローグラフに関連し得る。パラメータセットは、パラメータ要素群を含む。これらの要素はパラメータ名および式を含み、評価の際(例えば、計算を実行することによって、および、いくつかの事例では、他の参照されたパラメータの値を見出すことによって)、パラメータにバインドされる値に分解される。それぞれの未コンパイルのデータフローグラフは、1つまたは複数のパラメータセットに関連し得る。いくつかのパラメータは、コンパイルプロセスに影響を及ぼし得る。例えば、いくつかのパラメータは、ある特定の条件付きコンポーネントがデータフローグラフのコンパイル済みのバージョンに含まれているかどうかという点に影響を及ぼし得る。いくつかのパラメータは、コンパイル済みのデータフローグラフのロードおよび着手に影響を及ぼし得る。例えば、パラメータの値は、コンピュータ上に格納されたファイルへの経路、または、入力データを含むかもしくは出力データのターゲットであるデータセットコンポーネントに関連する格納場所(例えば、データベース内の表を表す格納場所)の名前であり得る。パラメータの値は、所定のコンポーネントが実行する必要がある並行方法の数を決定することができる。パラメータの値は、コンポーネントの間のリンクのデータフローが、リンクされたコンポーネントを実行する異なるプロセッサ間および/またはコンピュータ間の境界を超えるかどうかを決定することができ、超える場合は、共有メモリフローよりむしろTCP/IPフローを割り当てるようにすることができる。いくつかのシナリオでは、パラメータの値は、他のパラメータに依存し得る。例えば、通貨換算ルックアップファイルの名前は、日付を指定するパラメータに依存し得る。
【0093】
一般に、パラメータは、コンテキストに基づくパラメータスコーピングの規則に従って値にバインドする。所定のパラメータは、第1のコンテキスト内に1つの値を有し、別のコンテキスト内に異なる値を有し得る。パラメータは、コンパイル中(例えば、パラメータがコンパイルプロセスに影響を及ぼす恐れがある場合は、コンパイラ1015により)、ランタイム時(例えば、ローダ1035がコンパイル済みのデータフローグラフデータ構造を実行エンジン1040用のメモリにロードする際)、データフローグラフを実行する間(例えば、ファイルの読み取りまたは書き込み直前まで、ファイル名を提供するパラメータの分解を遅延する)、または、いくつかの事例では、異なる時間の組合せで、値にバインドすることができる。パラメータの値は、例えば、ユーザがユーザインターフェース上で定義しても(例えば、プロンプトに応じて)、データソースに含まれるファイルから定義しても、同じコンテキストまたは異なるコンテキスト内の別のパラメータの面から定義してもよい。例えば、パラメータは、パラメータに別のパラメータに対して「同じ」関係を有するように指定することによって、異なるコンテキストからインポートすることができる(例えば、異なるコンポーネントのコンテキストにおいて評価されたパラメータ)。
【0094】
データフローグラフ用のパラメータは、コンパイル中(例えば、コンパイラ1015により)など、いかなる入力データも受信する前にバインドすることができる。データフローグラフのコンパイル前またはコンパイル中にバインドされるそのようなパラメータは、「静的パラメータ」と呼ばれる。データフローグラフ用のパラメータは、ランタイム直前(例えば、ローダ1035により、データフロー内の新しいデータバッチまたは初期の作業単位を受信する工程に応じて)またはランタイム中(例えば、実行エンジン1040により、新しいマイクログラフをロードして、データフロー内の新しい作業単位を取り扱う工程に応じて)など、新しい入力データを受信する工程に応じてバインドすることもできる。データフローグラフのコンパイル後およびランタイム前後にバインドされるそのようなパラメータは、「動的パラメータ」と呼ばれる。いくつかの事例では、動的パラメータは、データフロー内のそれぞれの新しいデータバッチまたは作業単位を再評価する必要はない。静的パラメータは、通常、グラフをコンパイルする間に評価され、コンパイル済みのデータフローグラフに影響を及ぼす恐れがある。しかし、静的パラメータは、例えば、ランタイムまでコンパイルが起こらなければ、ランタイム時に評価することも可能である。動的パラメータはランタイム時に評価され、データフローグラフの開始の全体的な待ち時間に貢献することができるため、動的パラメータ評価は、いくつかの実施形態では、動的パラメータの能力を制限することによって最適化することができる。例えば、動的パラメータは、特定のデータタイプ(例えば、ストリング)に制限することができ、ある特定の式では動的パラメータを参照しない場合があり、より制限された結合を有し得る(例えば、「同じ」結合によって直接的または間接的に参照されない)。しかし、他の実施形態では、動的パラメータは、それらの機能性において制限されない場合があり、他のパラメータと同じように利用される。
【0095】
コンパイラ1015がコンパイルプロセス中に静的パラメータと動的パラメータを区別することを可能にするさまざまな方法がある。一技法は、パラメータセット内の動的パラメータに対するフラグまたは特別な構文を使用し、動的パラメータをバインドしないままにすべきであることをコンパイラに信号伝達する。別の技法は、パラメータセットの静的パラメータと動的パラメータを異なるサブセットに分離し、静的パラメータのサブセットのみをコンパイラ1015に提供する。次いで、動的パラメータのサブセットをランタイム時にローダ1035に提供する。コンパイラ1015は、動的パラメータを分解した値にバインドすることはしないが、コンパイラ1015は、依然として、コンパイル中に動的パラメータをチェックする(例えば、不法な構文または他のエラーに対して)よう構成することができる。所定の式は、静的パラメータと動的パラメータの両方のリファレンスを含み得る。例えば、静的ディレクトリ名パラメータは、コンパイラ1015によって分解できるが、動的ファイル名パラメータは、未分解のまま残すことができ、コンパイラ1015は、コンパイルプロセスの間、未分解動的パラメータリファレンスを保存することができるが、その理由は、動的パラメータとして認識されるためである。
【0096】
いくつかのシナリオでは、パラメータの存在または値は、データフローグラフ内のコンポーネントのトポロジおよび/または接続性に影響を及ぼす恐れがある。パラメータは、1つまたは複数のコンポーネントによって実行されるオペレーションが、グラフの特定の実行の間は実行すべきではないことを示す場合がある。これは、同じデータフローグラフが2つの異なるデータソース上で使用される場合に特に関連し得る。例えば、一方のデータソースは、第1の形式(例えば、UTF−8)であり得、他方のソースは、少なくとも一部の文字に対して異なるエンコードを使用する第2の形式のテキストを含み得る。両方のデータソースを処理するデータフローグラフは、第2の形式のテキストをUTF−8形式に変換する必要がある場合がある。しかし、UTF−8データソースにアクセスする際、いかなる変換も必要とされないであろう。パラメータを使用して、データは既にUTF−8形式であること、および、変換コンポーネントを擦り抜けられることをデータフローグラフに通知することも可能である。いくつかの構成では、パラメータ値に基づく条件付きコンポーネントの除外により、条件付きコンポーネントを取り外し、コンパイル済みのデータフローグラフ内のデータフローと置き換えることができる。条件付きコンポーネントの追加の説明については、参照により本明細書に組み込まれる米国特許第7,164,422号に記載されている。
【0097】
図10を再度参照すると、コンパイラ1015は、未コンパイルのデータフローグラフデータストア1010から未コンパイルのデータフローグラフを入手する。コンパイラ1015は、パラメータセットデータストア1005からデータフローグラフをコンパイルするために使用されるパラメータセットを入手する。いくつかの事例では、複数の異なるパラメータセットを所定のデータフローグラフに使用することができ、それぞれのパラメータセットに対して、グラフコンパイラ1015は、未コンパイルのデータフローグラフの対応するバージョンをコンパイルすることができる。データフローグラフのそれぞれのコンパイル済みのバージョンは、パラメータセット内のパラメータの値に基づいて、いくつかのコンポーネントまたは他の実行可能なステートメントを含んでも除外してもよい。コンパイル済みのデータフローグラフは、例えば、コンパイル済みのデータフローグラフがシリアライズされる場合、コンパイル済みのデータフローグラフの生成に使用されたパラメータセットからのバインドされたパラメータ値と関連付けられる。コンパイル済みのデータフローグラフは、多くの異なるメカニズム(例えば、ルックアップ表、データベースにおける外部キーと主キーとの関係など)を使用して、関連するパラメータセットからのパラメータ値と関連付けられる。コンパイル済みのデータフローグラフデータストア1020は、例えば、読み取りおよび書き込み操作が可能な任意のファイルシステムまたはデータベースを使用して実装することができる。
【0098】
データフローグラフ実行中(「ランタイム」時)、データは、入力データソース1025からシステムに入る。入力データソース1025は、さまざまな個別のデータソースを含み得、それぞれが独自の格納形式およびインターフェース(例えば、メインフレームによって使用されるデータベース表、スプレッドシートファイル、フラットテキストファイルまたはネイティブ形式)を有し得る。個別のデータソースは、システム1000とローカルで接続する、例えば、同じコンピュータシステム(例えば、ファイル)をホストとすることも、システム1000とリモートで接続する、例えば、ローカルまたは広域データネットワーク上でアクセスされるリモートコンピュータをホストとすることもできる。
【0099】
パラメータ分析器1030およびローダ1035は、格納されたコンパイル済みのデータフローグラフからデータフローグラフを迅速にロードし、潜在的に長時間のコンパイルプロセスを回避することを可能にする一方で、受信した入力データに応じて、データフローグラフのコンパイル済みの異なるバージョンの間で選択することによってランタイム時の柔軟性を依然として可能にする。パラメータ分析器1030は、入力データソース1025から入力データを受信する工程に応じて、入力データおよび潜在的にランタイム時まで知られていな可能性がある他の値を分析し、ターゲットデータフローグラフで使用される1つまたは複数のパラメータ(潜在的に静的パラメータと動的パラメータの両方を含む)に対する値を決定する。ターゲットデータフローグラフは、異なるそれぞれのパラメータセットを使用して、コンパイル済みのデータフローグラフデータストア1020に格納された異なるバージョンにコンパイルされている未コンパイルのデータフローグラフである。ローダ1035は、パラメータ分析器1030によって提供される静的パラメータの任意の値をターゲットデータフローグラフのコンパイル済みのバージョンのいずれかを生成するのに使用された可能性のあるそれらの同じパラメータの任意の値と比較して一致するものを見出す。ローダ1035が静的パラメータ内で一致するものを見出せば、ローダ1035は、動的パラメータを分解しバインドすることができ、実行エンジン1040によって着手される結果として得られるデータフローグラフをロードする。ローダ1035が静的パラメータ内で一致するものを見出さなければ、ローダ1035は、入力データをエラープロセッサ(図示せず)にルーティングすることができるか、または、ローダ1035は、非最適化されたデフォルトとして異なる潜在的なパラメータ値を取り扱うことができる利用可能なターゲットデータフローグラフのバージョンを有し得る。あるいは、ローダは、適切な静的パラメータ値を備えたターゲットデータフローグラフの新しいバージョンをコンパイルするよう、コンパイラ1015を開始することができる。これらの事例では、必要に応じて、オンザフライでコンパイルすることができる。最初にターゲットデータフローグラフを実行する際は、ランタイム時にコンパイルし、バインドされた静的パラメータを備えた結果として得られたコンパイル済みのデータフローグラフを保存する。次いで、次にターゲットデータフローグラフを実行する際は、所望の静的パラメータ値を備えたコンパイル済みのバージョンが見出せなければ、再コンパイルするのみである。
【0100】
例えば、パラメータA、B、C(AおよびBは静的、Cは動的)を含むパラメータセットに対し、A=真およびB=偽を使用してコンパイルされているターゲットデータフローグラフの第1のコンパイル済みのバージョン、ならびに、A=真およびB=真を使用してコンパイルされている同じターゲットデータフローグラフの第2のコンパイル済みのバージョンについて考慮する。パラメータ分析器1030が、受信した作業単位をA=真、B=真およびC=真のターゲットデータフローグラフを使用して処理すると判断すれば、第2のコンパイル済みのバージョンをロードすることができ、動的パラメータCは、ローダ1035によってバインドされる。パラメータ分析器1030が、受信した作業単位をA=偽、B=真およびC=真のターゲットデータフローグラフを使用して処理すると判断すれば、ターゲットデータフローグラフの新しいバージョンを、A=偽、B=真を用い、動的パラメータCがローダ1035によってバインドされた状態で、コンパイラ1015でコンパイルする。新たなコンパイル済みのバージョンもまた、後に使用するため、コンパイル済みのデータフローグラフデータストア1020に格納することができる。
【0101】
ローダ1035は、選択されたコンパイル済みのデータフローグラフを、実行されるグラフ実行エンジン1040にアクセス可能なメモリにロードし、入力データソース1025からの入力データのフローを処理する。いくつかの実施形態では、ローダ1035の機能は、実行中のデータフローグラフ内の特殊コンポーネントによって実行され、ロードされたデータフローグラフは、特殊コンポーネントに埋め込まれたマイクログラフである。ローダ1035は、必ずしもコンパイル済みのデータフローグラフデータストア1020へのアクセスを必要としなくとも、メモリのキャッシュに格納されたまま(適切な静的パラメータ値が使用されたと判断した後)の選択されたコンパイル済みのデータフローグラフの以前にロードされたバージョンにアクセスすることができる。次いで、ロードされたデータフローグラフは、実行エンジン1040によって実行される。一旦ターゲットデータフローグラフによって入力データが処理されれば、データフローグラフをシステムからアンロードすることも、後にアクセスするためにキャッシュに格納することもできる。
【0102】
一般に、データフローグラフのコンパイルは、グラフを実行可能な形式に変換するプロセスである。実行可能な形式は、プラットホーム特有の形式(例えば、マシンコード)でも、中間形式(例えば、バイトコード)でもあり得る。いくつかの実施形態では、コンパイラ1015は、静的パラメータを分解し、データフローグラフを横断し、実行するよう準備した一連のデータ構造に低減する。頂点およびリンクとして表されるデータフローグラフからマシンコードへの変換は、いくつかの工程を含み得る。これらの工程の1つは、データフローグラフを第三世代のプログラミング言語(例えば、C、C#、C++、Javaなど)に変換する動的コードの生成を含み得る。第三世代の言語から、標準コンパイラを使用して、機械可読コードまたはバイトコードを生成することができる。
【0103】
いくつかの実施形態では、パラメータを静的パラメータとして取り扱うかまたは動的パラメータとして取り扱うかどうかは、コンパイル時まで決定されない。静的パラメータとして取り扱われる、評価されたパラメータおよびコンパイル済みのデータフローグラフエリアにハードコードされたそれらの値。一方、動的パラメータは、一般に、コンパイル時には評価されないが、代わりに、グラフのロードまたは実行の間に評価される。上記で説明されるように、パラメータセットによって決定された値は、ランタイム時の高速ロードおよび実行のためのデータフローグラフの異なるコンパイル済みのバージョンを準備する目的で使用される。パラメータセットからのパラメータの値がコンパイル済みのグラフに有効な唯一の可能な値を確実に定義する事例では、値はコンパイル済みのデータフローグラフにコード化され、パラメータは静的パラメータとして取り扱われる。パラメータセットからのパラメータの値が可能な値の範囲を提供する他の事例では、パラメータは、コンパイル時には静的パラメータとして評価されない場合があるが、代わりに、ロード時またはランタイム時に動的パラメータとして評価される場合がある。
【0104】
また、コンパイルプロセスの間、コンパイラは、例えば、不要な実行可能ステートメントを排除することによって、データフローグラフを最適化することができる。例えば、データフローグラフは、条件付きコンポーネントを含み得る。条件付きコンポーネントは、1つまたは複数のパラメータの値に基づいて、コンパイル済みのデータフローグラフに含まれるかまたは同データフローグラフから除外される一連の実行可能ステートメントを含み得る。条件付きコンポーネントは、グラフの最適化または特殊化など、さまざまな目的のために使用することができる。グラフの最適化に対し、データセットからの値を使用しない場合は、アプリケーションはデータセットの処理または作成を省略することができ、したがって、グラフをより効果的に実行することができる。グラフの特殊化に対し、アプリケーションは、所望の詳細レベルに基づいて、いくつかの異なる出力データセットの生成を条件付ける場合も、グラフのいくつかの任意選択の部分の1つの実行を可能にする場合もある。
【0105】
上記で説明される手法は、コンピュータ上で実行するためのソフトウェアを使用して実施することができる。例えば、ソフトウェアは、1つまたは複数のプログラムされたまたはプログラム可能なコンピュータシステム(それは、分散型、クライアント/サーバまたは格子などのさまざまなアーキテクチャのものである)上で実行する1つまたは複数のコンピュータプログラムの手順を形成する。コンピュータシステムはそれぞれ、少なくとも1つのプロセッサと、少なくとも1つのデータ格納システム(揮発性および不揮発性、持続性メモリ、ならびに/または、格納要素を含む)と、少なくとも1つの入力デバイスまたはポートと、少なくとも1つの出力デバイスまたはポートとを含む。ソフトウェアは、例えば、計算グラフの設計および構成に関連する他のサービスを提供する大規模なプログラムの1つまたは複数のモジュールを形成することができる。グラフのノードおよび要素は、コンピュータ可読媒体に格納されたデータ構造、または、データリポジトリに格納されたデータモデルに適合する他の組織化されたデータとして実装することができる。
【0106】
ソフトウェアは、汎用もしくは特殊用途のプログラム可能なコンピュータによる読み取りが可能なCD−ROMなどの記憶媒体上で提供されるか、または、ネットワークの通信媒体上で、ソフトウェアが実行されるコンピュータに送達される(伝播信号で符号化される)。機能のすべては、特殊用途のコンピュータ上か、または、コプロセッサなどの特殊用途のハードウェアを使用して実行される。ソフトウェアは、ソフトウェアによって指定される計算の異なる部分は異なるコンピュータによって実行される分散様式で実施される。それぞれのそのようなコンピュータプログラムは、好ましくは、汎用もしくは特殊用途のプログラム可能なコンピュータによる読み取りが可能な記憶媒体もしくはデバイス(例えば、ソリッドステートメモリもしくは媒体、または、磁気もしくは光媒体)上に格納されるか、または、同記憶媒体もしくはデバイスにダウンロードされるが、それは、コンピュータシステムで記憶媒体もしくはデバイスを読み取り、本明細書に記載される手順を実行する際にコンピュータを構成および動作するためである。また、本発明のシステムは、コンピュータ可読記憶媒体として実装され、コンピュータプログラムを用いて構成されるものと考慮され得、そのように構成された記憶媒体は、特定の事前に定義された様式でコンピュータシステムを動作させ、本明細書に記載される機能を実行する。
【0107】
本発明の多くの実施形態について説明してきた。それにもかかわらず、本発明の精神および範囲から逸脱することなく、さまざまな変更が行われることが理解されよう。例えば、上記で説明された工程のいくつかは、順番に依存しないものであり得、したがって、説明されている順番とは異なる順番で実行することができる。
【0108】
前述の説明は、例示を意図するものであり、本発明の範囲を限定するものではなく、本発明の範囲は、添付の特許請求の範囲によって定義されることを理解されたい。他の実施形態は、以下の特許請求の範囲内にある。
図1
図2
図3A
図3B
図4
図5A
図5B
図6
図7
図8
図9A
図9B
図10