(57)【特許請求の範囲】
【請求項１】
データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータ処理システム内のデータを処理するための方法であって、
それぞれが１つまたは複数の作業要素を含む複数の作業単位を受信する工程と、
前記作業単位の第１のものを受信する工程に応じて、前記データ処理システムにロードされた第１のコンパイル済みのデータフローグラフを使用して前記第１の作業単位を処理する工程とを含み、前記第１のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第１のデータフローグラフを表す１つまたは複数のデータ構造にコンパイルされており、前記処理する工程は、
（ａ）前記第１の作業単位を分析して前記第１の作業単位の特性を決定する工程と、
（ｂ）前記決定された前記第１の作業単位の特性を有する作業単位を処理するために、前記第１の作業単位を受信する前にコンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含む前記データ格納システムに格納された複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
（ｃ）前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして、前記第１の作業単位を受信する前に前記データ処理システムで実行していた第２のデータフローグラフにロードする工程と、
（ｄ）前記第１のデータフローグラフを使用して前記第１の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む、方法。
【請求項２】
前記ロードする工程は、前記第１のコンパイル済みのデータフローグラフから前記第１のデータフローグラフを表すデータ構造を取得し、前記取得したデータ構造を第２のデータフローグラフにロードする工程をさらに含む、請求項１に記載の方法。
【請求項３】
前記取得したデータ構造を前記第２のデータフローグラフにロードする工程は、前記第１のデータフローグラフ内の前記データ処理コンポーネントを実行するための第１のプロセスを提供するよう構成された前記第２のデータフローグラフの包含コンポーネント内に前記第１のデータフローグラフを埋め込む工程を含む、請求項２に記載の方法。
【請求項４】
前記取得したデータ構造を前記第２のデータフローグラフにロードする工程は、前記第１のデータフローグラフを前記第２のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記埋め込む工程は、
前記包含コンポーネントの入力と接続されたリンクから受信した入力作業要素のフローを前記第１のデータフローグラフの入力と接続する工程と、
前記生成された１つまたは複数の出力作業要素を前記包含コンポーネントの出力と接続されたリンクと接続する工程とを含む、請求項２に記載の方法。
【請求項５】
前記１つまたは複数の出力作業要素を生成した後に、前記第２のデータフローグラフから、前記取得した前記第１のデータフローグラフを表すデータ構造をアンロードする工程と、前記第１の作業単位が到着した後かつ前記取得した前記第１のデータフローグラフを表すデータ構造を前記アンロードする工程の前に到着する作業単位内に存在する作業要素をバッファリングする工程とをさらに含む、請求項２に記載の方法。
【請求項６】
第２のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程をさらに含み、前記第２のコンパイル済みのデータフローグラフは、第２のデータフローグラフを表すデータ構造にコンパイルされており、
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第１のデータフローグラフを第３のデータフローグラフの第１の包含コンポーネント内に埋め込む工程を含み、前記第２のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程は、前記第２のデータフローグラフを前記第３のデータフローグラフの第２の包含コンポーネント内に埋め込む工程を含む、請求項１に記載の方法。
【請求項７】
第２の作業単位を受信する工程に応じて前記データ処理システムにロードされた第２のコンパイル済みのデータフローグラフを使用して、前記第１の作業単位を処理した後に前記第２の作業単位を処理する工程をさらに含み、前記第２のコンパイル済みのデータフローグラフは、第２のデータフローグラフを表すデータ構造にコンパイルされており、前記処理する工程は、
前記第２の作業単位を分析して前記第２の作業単位の特性を決定する工程と、
前記決定された前記第２の作業単位の特性を有する作業単位を処理するために、前記第２の作業単位を受信する前に、コンパイルされた前記データ格納システムに格納された前記複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第２のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程と、
前記第２のデータフローグラフを使用して前記第２の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む、請求項１に記載の方法。
【請求項８】
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第１のデータフローグラフを第３のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第２のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第２のデータフローグラフを前記第３のデータフローグラフの前記包含コンポーネント内に埋め込む工程を含む、請求項７に記載の方法。
【請求項９】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素内に含まれるコンパイル済みのデータフローグラフ用の識別子を読み取る工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記識別子を、前記１つまたは複数のコンパイル済みのデータフローグラフに関連する１つまたは複数の識別子と一致させる工程を含む、請求項１に記載の方法。
【請求項１０】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素を特徴付ける複数の既定のタイプの１つを特定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記１つまたは複数のコンパイル済みのデータフローグラフに対応する１つまたは複数のデータフローグラフが、前記特定されたタイプによって特徴付けられた作業要素を処理するよう構成されているかを判断する工程を含む、請求項１に記載の方法。
【請求項１１】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素内に含まれるコンテンツの特性を特定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記１つまたは複数のコンパイル済みのデータフローグラフに対応する１つまたは複数のデータフローグラフが、前記特定された特性を有するコンテンツを含む作業要素を処理するよう構成されているかを判断する工程を含む、請求項１に記載の方法。
【請求項１２】
前記第１の作業単位を分析する工程は、前記第１のデータフローグラフの１つまたは複数のパラメータの第１のセット用の値として指定された前記第１の作業単位に関連する１つまたは複数の値を決定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記特定された１つまたは複数のコンパイル済みのデータフローグラフが、前記決定された前記第１の作業単位に関連する１つまたは複数の値と一致するそれぞれの値にバインドされた１つまたは複数のパラメータの第１のセットを用いて前記第１のデータフローグラフを表すデータ構造にコンパイルされたかを判断する工程を含む、請求項１に記載の方法。
【請求項１３】
データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータを処理するためのデータ処理システムであって、
それぞれが１つまたは複数の作業要素を含む複数の作業単位を受信するよう構成された入力デバイスまたはポートと、
第１の作業単位を受信する工程に応じて、前記データ処理システムにロードされた第１のコンパイル済みのデータフローグラフを使用して前記第１の作業単位を処理するよう構成された少なくとも１つのプロセッサとを含み、前記第１のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第１のデータフローグラフを表す１つまたは複数のデータ構造にコンパイルされており、前記処理する工程は、
前記第１の作業単位を分析して前記第１の作業単位の特性を決定する工程と、
前記決定された前記第１の作業単位の特性を有する作業単位を処理するために、前記第１の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含む前記データ格納システムに格納された複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして、前記第１の作業単位を受信する前に前記データ処理システムで実行していた第２のデータフローグラフにロードする工程と、
前記第１のデータフローグラフを使用して前記第１の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む、データ処理システム。
【請求項１４】
データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータを処理するためのデータ処理システムであって、
それぞれが１つまたは複数の作業要素を含む複数の作業単位を受信するための手段と、
前記作業単位の第１のものを受信する工程に応じて、前記データ処理システムにロードされた第１のコンパイル済みのデータフローグラフを使用して、前記第１の作業単位を処理するための手段とを含み、前記第１のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第１のデータフローグラフを表す１つまたは複数のデータ構造にコンパイルされており、前記処理する工程は、
前記第１の作業単位を分析して前記第１の作業単位の特性を決定する工程と、
前記決定された前記第１の作業単位の特性を有する作業単位を処理するために、前記第１の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含む前記データ格納システムに格納された複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして、前記第１の作業単位を受信する前に前記データ処理システムで実行していた第２のデータフローグラフにロードする工程と、
前記第１のデータフローグラフを使用して前記第１の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む、データ処理システム。
【請求項１５】
データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータ処理システム内のデータを処理するためのコンピュータプログラムを格納するコンピュータ可読媒体であって、前記コンピュータプログラムは、コンピュータに、
それぞれが１つまたは複数の作業要素を含む複数の作業単位を受信させ、
前記作業単位の第１のものを受信する工程に応じて、前記データ処理システムにロードされた第１のコンパイル済みのデータフローグラフを使用して、前記第１の作業単位を処理させるための命令を含み、前記第１のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第１のデータフローグラフを表す１つまたは複数のデータ構造にコンパイルされており、前記処理する工程は、
前記第１の作業単位を分析して前記第１の作業単位の特性を決定する工程と、
前記決定された前記第１の作業単位の特性を有する作業単位を処理するために、前記第１の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含む前記データ格納システムに格納された複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして、前記第１の作業単位を受信する前に前記データ処理システムで実行していた第２のデータフローグラフにロードする工程と、
前記第１のデータフローグラフを使用して前記第１の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む、コンピュータ可読媒体。
【請求項１６】
前記ロードする工程は、前記第１のコンパイル済みのデータフローグラフから前記第１のデータフローグラフを表すデータ構造を取得し、前記取得したデータ構造を前記第２のデータフローグラフにロードする工程をさらに含む、請求項１３に記載のシステム。
【請求項１７】
前記取得したデータ構造を前記第２のデータフローグラフにロードする工程は、前記第１のデータフローグラフ内の前記データ処理コンポーネントを実行するための第１のプロセスを提供するよう構成された前記第２のデータフローグラフの包含コンポーネント内に前記第１のデータフローグラフを埋め込む工程を含む、請求項１６に記載のシステム。
【請求項１８】
前記取得したデータ構造を前記第２のデータフローグラフにロードする工程は、前記第１のデータフローグラフを前記第２のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記埋め込む工程は、
前記包含コンポーネントの入力と接続されたリンクから受信した入力作業要素のフローを前記第１のデータフローグラフの入力と接続する工程と、
前記生成された１つまたは複数の出力作業要素を前記包含コンポーネントの出力と接続されたリンクと接続する工程とを含む、請求項１６に記載のシステム。
【請求項１９】
前記処理する工程は、前記１つまたは複数の出力作業要素を生成した後で、前記第２のデータフローグラフから前記取得した前記第１のデータフローグラフを表すデータ構造をアンロードする工程をさらに含み、
前記処理する工程は、前記第１の作業単位が到着した後かつ前記取得した前記第１のデータフローグラフを表すデータ構造を前記アンロードする工程の前に到着する作業単位内に存在する作業要素をバッファリングする工程をさらに含む、請求項１６に記載のシステム。
【請求項２０】
前記処理する工程は、第２のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程をさらに含み、前記第２のコンパイル済みのデータフローグラフは、第２のデータフローグラフを表すデータ構造にコンパイルされており、
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第１のデータフローグラフを第３のデータフローグラフの第１の包含コンポーネント内に埋め込む工程を含み、前記第２のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程は、前記第２のデータフローグラフを前記第３のデータフローグラフの第２の包含コンポーネント内に埋め込む工程を含む、請求項１３に記載のシステム。
【請求項２１】
前記処理する工程は、第２の作業単位を受信する工程に応じて、前記データ処理システムにロードされた第２のコンパイル済みのデータフローグラフを使用して、前記第１の作業単位を処理した後で前記第２の作業単位を処理する工程をさらに含み、前記第２のコンパイル済みのデータフローグラフは、第２のデータフローグラフを表すデータ構造にコンパイルされており、前記処理する工程は、
前記第２の作業単位を分析して前記第２の作業単位の特性を決定する工程と、
前記決定された前記第２の作業単位の特性を有する作業単位を処理するために、前記第２の作業単位を受信する前に、コンパイルされた前記データ格納システムに格納された前記複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第２のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程と、
前記第２のデータフローグラフを使用して前記第２の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む、請求項１３に記載のシステム。
【請求項２２】
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第１のデータフローグラフを第３のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第２のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第２のデータフローグラフを前記第３のデータフローグラフの前記包含コンポーネント内に埋め込む工程を含む、請求項２１に記載のシステム。
【請求項２３】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素内に含まれるコンパイル済みのデータフローグラフ用の識別子を読み取る工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記識別子を、前記１つまたは複数のコンパイル済みのデータフローグラフに関連する識別子と一致させる工程を含む、請求項１３に記載のシステム。
【請求項２４】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素を特徴付ける複数の既定のタイプの１つを特定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記１つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定されたタイプによって特徴付けられた作業要素を処理するよう構成されているかを判断する工程を含む、請求項１３に記載のシステム。
【請求項２５】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素内に含まれるコンテンツの特性を特定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記１つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定された特性を有するコンテンツを含む作業要素を処理するよう構成されているかを判断する工程を含む、請求項１３に記載のシステム。
【請求項２６】
前記第１の作業単位を分析する工程は、前記第１のデータフローグラフの１つまたは複数のパラメータの第１のセット用の値として指定された前記第１の作業単位に関連する１つまたは複数の値を決定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記特定された１つまたは複数のコンパイル済みのデータフローグラフが、前記決定された前記第１の作業単位に関連する１つまたは複数の値と一致するそれぞれの値にバインドされた前記１つまたは複数のパラメータの第１のセットを用いて前記第１のデータフローグラフを表すデータ構造にコンパイルされたかを判断する工程を含む、請求項１３に記載のシステム。
【請求項２７】
前記ロードする工程は、前記第１のコンパイル済みのデータフローグラフから前記第１のデータフローグラフを表すデータ構造を取得し、前記取得したデータ構造を前記第２のデータフローグラフにロードする工程をさらに含む、請求項１４に記載のシステム。
【請求項２８】
前記取得したデータ構造を前記第２のデータフローグラフにロードする工程は、前記第１のデータフローグラフ内の前記データ処理コンポーネントを実行するための第１のプロセスを提供するよう構成された前記第２のデータフローグラフの包含コンポーネント内に前記第１のデータフローグラフを埋め込む工程を含む、請求項２７に記載のシステム。
【請求項２９】
前記取得したデータ構造を前記第２のデータフローグラフにロードする工程は、前記第１のデータフローグラフを前記第２のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記埋め込む工程は、
前記包含コンポーネントの入力と接続されたリンクから受信した入力作業要素のフローを前記第１のデータフローグラフの入力と接続する工程と、
前記生成された１つまたは複数の出力作業要素を前記包含コンポーネントの出力と接続されたリンクと接続する工程とを含む、請求項２７に記載のシステム。
【請求項３０】
前記１つまたは複数の出力作業要素を生成した後で、前記第２のデータフローグラフから前記取得した前記第１のデータフローグラフを表すデータ構造をアンロードする手段と、
前記第１の作業単位が到着した後かつ前記取得した前記第１のデータフローグラフを表すデータ構造を前記アンロードする工程の前に到着する作業単位内に存在する作業要素をバッファリングする手段とをさらに含む、請求項２７に記載のシステム。
【請求項３１】
第２のコンパイル済みのデータフローグラフを前記データ処理システムにロードする手段をさらに含み、前記第２のコンパイル済みのデータフローグラフは、第２のデータフローグラフを表すデータ構造にコンパイルされており、
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第１のデータフローグラフを第３のデータフローグラフの第１の包含コンポーネント内に埋め込む工程を含み、前記第２のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程は、前記第２のデータフローグラフを前記第３のデータフローグラフの第２の包含コンポーネント内に埋め込む工程を含む、請求項１４に記載のシステム。
【請求項３２】
第２の作業単位を受信する工程に応じて、前記データ処理システムにロードされた第２のコンパイル済みのデータフローグラフを使用して、前記第１の作業単位を処理した後で前記第２の作業単位を処理する手段をさらに含み、前記第２のコンパイル済みのデータフローグラフは、第２のデータフローグラフを表すデータ構造にコンパイルされており、前記処理する工程は、
前記第２の作業単位を分析して前記第２の作業単位の特性を決定する工程と、
前記決定された前記第２の作業単位の特性を有する作業単位を処理するために、前記第２の作業単位を受信する前に、コンパイルされた前記データ格納システムに格納された前記複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第２のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程と、
前記第２のデータフローグラフを使用して前記第２の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む、請求項１４に記載のシステム。
【請求項３３】
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第１のデータフローグラフを第３のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第２のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第２のデータフローグラフを前記第３のデータフローグラフの前記包含コンポーネント内に埋め込む工程を含む、請求項３２に記載のシステム。
【請求項３４】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素内に含まれるコンパイル済みのデータフローグラフ用の識別子を読み取る工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記識別子を、前記１つまたは複数のコンパイル済みのデータフローグラフに関連する識別子と一致させる工程を含む、請求項１４に記載のシステム。
【請求項３５】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素を特徴付ける複数の既定のタイプの１つを特定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記１つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定されたタイプによって特徴付けられた作業要素を処理するよう構成されているかを判断する工程を含む、請求項１４に記載のシステム。
【請求項３６】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素内に含まれるコンテンツの特性を特定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記１つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定された特性を有するコンテンツを含む作業要素を処理するよう構成されているかを判断する工程を含む、請求項１４に記載のシステム。
【請求項３７】
前記第１の作業単位を分析する工程は、前記第１のデータフローグラフの１つまたは複数のパラメータの第１のセット用の値として指定された前記第１の作業単位に関連する１つまたは複数の値を決定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記特定された１つまたは複数のコンパイル済みのデータフローグラフが、前記決定された前記第１の作業単位に関連する１つまたは複数の値と一致するそれぞれの値にバインドされた前記１つまたは複数のパラメータの第１のセットを用いて前記第１のデータフローグラフを表すデータ構造にコンパイルされたかを判断する工程を含む、請求項１４に記載のシステム。
【請求項３８】
前記ロードする工程は、前記第１のコンパイル済みのデータフローグラフから前記第１のデータフローグラフを表すデータ構造を取得し、前記取得したデータ構造を前記第２のデータフローグラフにロードする工程をさらに含む、請求項１５に記載の媒体。
【請求項３９】
前記取得したデータ構造を前記第２のデータフローグラフにロードする工程は、前記第１のデータフローグラフ内の前記データ処理コンポーネントを実行するための第１のプロセスを提供するよう構成された前記第２のデータフローグラフの包含コンポーネント内に前記第１のデータフローグラフを埋め込む工程を含む、請求項３８に記載の媒体。
【請求項４０】
前記取得したデータ構造を前記第２のデータフローグラフにロードする工程は、前記第１のデータフローグラフを前記第２のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記埋め込む工程は、
前記包含コンポーネントの入力と接続されたリンクから受信した入力作業要素のフローを前記第１のデータフローグラフの入力と接続する工程と、
前記生成された１つまたは複数の出力作業要素を前記包含コンポーネントの出力と接続されたリンクと接続する工程とを含む、請求項３８に記載の媒体。
【請求項４１】
前記命令は、前記コンピュータにさらに、前記１つまたは複数の出力作業要素を生成した後で、前記第２のデータフローグラフから前記取得した前記第１のデータフローグラフを表すデータ構造をアンロードさせ、
前記命令は、前記コンピュータにさらに、前記第１の作業単位が到着した後かつ前記取得した前記第１のデータフローグラフを表すデータ構造を前記アンロードする工程の前に到着する作業単位内に存在する作業要素をバッファリングさせる、請求項３８に記載の媒体。
【請求項４２】
前記命令は、前記コンピュータにさらに、第２のコンパイル済みのデータフローグラフを前記データ処理システムにロードさせ、前記第２のコンパイル済みのデータフローグラフは、第２のデータフローグラフを表すデータ構造にコンパイルされており、
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第１のデータフローグラフを第３のデータフローグラフの第１の包含コンポーネント内に埋め込む工程を含み、前記第２のコンパイル済みのデータフローグラフを前記データ処理システムにロードする工程は、前記第２のデータフローグラフを前記第３のデータフローグラフの第２の包含コンポーネント内に埋め込む工程を含む、請求項１５に記載の媒体。
【請求項４３】
前記命令は、前記コンピュータにさらに、第２の作業単位を受信する工程に応じて、前記データ処理システムにロードされた第２のコンパイル済みのデータフローグラフを使用して、前記第１の作業単位を処理した後で前記第２の作業単位を処理させ、前記第２のコンパイル済みのデータフローグラフは、第２のデータフローグラフを表すデータ構造にコンパイルされており、前記処理する工程は、
前記第２の作業単位を分析して前記第２の作業単位の特性を決定する工程と、
前記決定された前記第２の作業単位の特性を有する作業単位を処理するために、前記第２の作業単位を受信する前に、コンパイルされた前記データ格納システムに格納された前記複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第２のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程と、
前記第２のデータフローグラフを使用して前記第２の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む、請求項１５に記載の媒体。
【請求項４４】
前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第１のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第１のデータフローグラフを第３のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、前記特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、前記第２のコンパイル済みのデータフローグラフとして前記データ処理システムにロードする工程は、前記第２のデータフローグラフを前記第３のデータフローグラフの前記包含コンポーネント内に埋め込む工程を含む、請求項４３に記載の媒体。
【請求項４５】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素内に含まれるコンパイル済みのデータフローグラフ用の識別子を読み取る工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記識別子を、前記１つまたは複数のコンパイル済みのデータフローグラフに関連する識別子と一致させる工程を含む、請求項１５に記載の媒体。
【請求項４６】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素を特徴付ける複数の既定のタイプの１つを特定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記１つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定されたタイプによって特徴付けられた作業要素を処理するよう構成されているかを判断する工程を含む、請求項１５に記載の媒体。
【請求項４７】
前記第１の作業単位を分析する工程は、前記第１の作業単位の作業要素内に含まれるコンテンツの特性を特定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記１つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、前記特定された特性を有するコンテンツを含む作業要素を処理するよう構成されているかを判断する工程を含む、請求項１５に記載の媒体。
【請求項４８】
前記第１の作業単位を分析する工程は、前記第１のデータフローグラフの１つまたは複数のパラメータの第１のセット用の値として指定された前記第１の作業単位に関連する１つまたは複数の値を決定する工程を含み、
前記１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、前記特定された１つまたは複数のコンパイル済みのデータフローグラフが、前記決定された前記第１の作業単位に関連する１つまたは複数の値と一致するそれぞれの値にバインドされた前記１つまたは複数のパラメータの第１のセットを用いて前記第１のデータフローグラフを表すデータ構造にコンパイルされたかを判断する工程を含む、請求項１５に記載の媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願は、２０１０年６月１５日に出願された米国特許出願第６１／３５５，１２９号の優先権を主張し、同特許は参照により本明細書に組み込まれる。
【０００２】
背景
この説明は、グラフに基づく計算の動的ロードに関する。
【背景技術】
【０００３】
複雑な計算は、有向グラフ（「データフローグラフ」と呼ばれる）を通じてデータフローとして表すことができる場合が多く、計算のコンポーネントはグラフの頂点に関連し、コンポーネント間のデータフローはグラフのリンク（弧、辺）に相当する。コンポーネントは、１つまたは複数の入力ポートでデータを受信し、データを処理し、１つまたは複数の出力ポートからデータを提供するデータ処理コンポーネントと、データフローのソースまたはシンクとして機能するデータセットコンポーネントとを含み得る。そのようなグラフに基づく計算を実施するシステムについては、米国特許第５，９６６，０７２号「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」に記載されている。
【発明の概要】
【課題を解決するための手段】
【０００４】
要約
一般的な態様では、データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータ処理システム内のデータを処理するための方法は、それぞれが１つまたは複数の作業要素を含む複数の作業単位を受信する工程と、第１の作業単位を受信する工程に応じて、データ処理システムにロードされた第１のコンパイル済みのデータフローグラフを使用して第１の作業単位を処理する工程とを含む。第１のコンパイル済みのデータフローグラフは、データ処理コンポーネントの間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第１のデータフローグラフを表すデータ構造にコンパイルされている。処理する工程は、第１の作業単位を分析して第１の作業単位の特性を決定する工程と、決定された第１の作業単位の特性を有する作業単位を処理するために、第１の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含むデータ格納システムに格納された複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、第１のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程と、第１のデータフローグラフを使用して第１の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む。
【０００５】
態様は、以下の特徴の１つまたは複数を含み得る。
【０００６】
複数の作業単位は、受信された作業要素のフロー内の１つまたは複数の作業要素の異なる連続セットに相当する。
【０００７】
複数の作業単位は、それぞれの受信された異なるファイル内の１つまたは複数の作業要素の異なるバッチに相当する。
【０００８】
ロードする工程は、第１のコンパイル済みのデータフローグラフから第１のデータフローグラフを表すデータ構造を取得し、取得したデータ構造を第２のデータフローグラフにロードする工程をさらに含む。
【０００９】
第２のデータフローグラフは、第１の作業単位が受信される前に実行していた。
【００１０】
取得したデータ構造を第２のデータフローグラフにロードする工程は、第１のデータフローグラフ内のデータ処理コンポーネントを実行するための第１のプロセスを提供するよう構成された第２のデータフローグラフの包含コンポーネント内に第１のデータフローグラフを埋め込む工程を含む。
【００１１】
第２のデータフローグラフの包含コンポーネントは、さらに、第１のデータフローグラフ内のデータ処理コンポーネントの実行をモニタするための第２のプロセスを提供するように構成される。
【００１２】
第１のデータフローグラフ内の少なくとも１つのデータ処理コンポーネントの障害を検出して所定の作業要素を適正に処理する工程に応じて、第２のプロセスは、第２のデータフローグラフの実行を中断することなく、第１のデータフローグラフの実行を中断する。
【００１３】
第１の作業単位を処理する際に第１のデータフローグラフ内の少なくとも１つのデータ処理コンポーネントの遅延を検出する工程に応じて、第２のプロセスは、第２のデータフローグラフの実行を中断することなく、第１のデータフローグラフの実行を一時停止し、第３のデータフローグラフを第２のデータフローグラフの包含コンポーネント内に埋め込み、第１の作業単位の後に受信した第２の作業単位を処理する。
【００１４】
第２のデータフローグラフの包含コンポーネントは、さらに、第１のリモートデータベース用のライブラリにアクセスする第２のプロセスと通信するために第１のプロセスが使用する第１のアプリケーションプログラミングインターフェースを提供するように構成される。
【００１５】
第２のデータフローグラフの包含コンポーネントは、さらに、第１のリモートデータベース用のライブラリとは異なる第２のリモートデータベース用のライブラリにアクセスする第３のプロセスと通信するために第１のプロセスが使用する第２のアプリケーションプログラミングインターフェースを提供するように構成される。
【００１６】
第２のデータフローグラフの包含コンポーネントは、さらに、第２のデータフローグラフの複数のコンポーネントとの互換性を有する第３のアプリケーションプログラミングインターフェースを提供するように構成される。
【００１７】
第２のデータフローグラフの包含コンポーネントは、さらに、第１または第２のリモートデータベースのどちらにアクセスしているかに基づいて、第３のアプリケーションプログラミングインターフェースを使用するアプリケーション呼出しを、第１または第２のアプリケーションプログラミングインターフェースのいずれか選択したものを使用するアプリケーション呼出しに変換するように構成される。
【００１８】
取得したデータ構造を第２のデータフローグラフにロードする工程は、第１のデータフローグラフを第２のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、埋め込む工程は、包含コンポーネントの入力と接続されたリンクから受信した入力作業要素のフローを第１のデータフローグラフの入力と接続する工程と、生成された１つまたは複数の出力作業要素を包含コンポーネントの出力と接続されたリンクと接続する工程とを含む。
【００１９】
第１のデータフローグラフは、第１のコンポーネントを含み、第１のコンポーネントは、第２のコンポーネントの入力と接続された少なくとも１つの出力リンクと、第１のデータフローグラフが包含コンポーネント内に埋め込まれている場合は、第２のコンポーネントに入力作業要素を提供するための命令と、第１のデータフローグラフが包含コンポーネント内に埋め込まれていない場合は、格納場所から第２のコンポーネントに作業要素を提供するための命令とを含む。
【００２０】
第１のデータフローグラフは、第３のコンポーネントを含み、第３のコンポーネントは、第４のコンポーネントの出力と接続された少なくとも１つの入力リンクと、第１のデータフローグラフが包含コンポーネント内に埋め込まれている場合は、生成された１つまたは複数の出力作業要素を第４のコンポーネントの出力から包含コンポーネントの出力に提供するための命令と、第１のデータフローグラフが包含コンポーネント内に埋め込まれていない場合は、生成された１つまたは複数の出力作業要素を第４のコンポーネントの出力から格納場所に提供するための命令とを含む。
【００２１】
第１のデータフローグラフは、複数のインターフェースコンポーネントを含み、複数のインターフェースコンポーネントはそれぞれ、第１のデータフローグラフが包含コンポーネント内に埋め込まれている場合は、第１のデータフローグラフと包含コンポーネントとの間で作業要素を送信するための命令と、第１のデータフローグラフが包含コンポーネント内に埋め込まれていない場合は、第１のデータフローグラフと格納場所との間で作業要素を送信するための命令とを含む。
【００２２】
インターフェースコンポーネントのそれぞれは、第１のデータフローグラフが包含コンポーネント内に埋め込まれている場合は、第１のデータフローグラフが接続される包含コンポーネントの対応する異なる入力または出力ポートを特定する。
【００２３】
本方法は、１つまたは複数の出力作業要素を生成した後に、第２のデータフローグラフから、取得した第１のデータフローグラフを表すデータ構造をアンロードする工程をさらに含む。
【００２４】
本方法は、第１の作業単位が到着した後かつ取得した第１のデータフローグラフを表すデータ構造をアンロードする前に到着する作業単位内に存在する作業要素をバッファリングする工程をさらに含む。
【００２５】
本方法は、データ処理システムにロードされた第２のコンパイル済みのデータフローグラフをロードする工程をさらに含み、第２のコンパイル済みのデータフローグラフは、第２のデータフローグラフを表すデータ構造にコンパイルされている。
【００２６】
特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、第１のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程は、第１のデータフローグラフを第３のデータフローグラフの第１の包含コンポーネント内に埋め込む工程を含み、第２のコンパイル済みのデータフローグラフをデータ処理システムにロードする工程は、第２のデータフローグラフを第３のデータフローグラフの第２の包含コンポーネント内に埋め込む工程を含む。
【００２７】
第２のコンパイル済みのデータフローグラフは、第１の作業単位を受信する工程に応じて、データ処理システムにロードされる。
【００２８】
第２のコンパイル済みのデータフローグラフは、第１の作業単位の後に第２の作業単位を受信する工程に応じて、データ処理システムにロードされる。
【００２９】
本方法は、第２の作業単位を受信する工程に応じてデータ処理システムにロードされた第２のコンパイル済みのデータフローグラフを使用して、第１の作業単位を処理した後に第２の作業単位を処理する工程をさらに含み、第２のコンパイル済みのデータフローグラフは、第２のデータフローグラフを表すデータ構造にコンパイルされており、処理する工程は、第２の作業単位を分析して第２の作業単位の特性を決定する工程と、決定された第２の作業単位の特性を有する作業単位を処理するために、第２の作業単位を受信する前に、コンパイルされたデータ格納システムに格納された複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、第２のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程と、第２のデータフローグラフを使用して第２の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む。
【００３０】
特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、第１のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程は、第１のデータフローグラフを第３のデータフローグラフの包含コンポーネント内に埋め込む工程を含み、特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、第２のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程は、第２のデータフローグラフを第３のデータフローグラフの包含コンポーネント内に埋め込む工程を含む。
【００３１】
第１の作業単位を分析する工程は、第１の作業単位の作業要素内に含まれるコンパイル済みのデータフローグラフ用の識別子を読み取る工程を含む。
【００３２】
１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、識別子を、１つまたは複数のコンパイル済みのデータフローグラフに関連する識別子と一致させる工程を含む。
【００３３】
第１の作業単位を分析する工程は、第１の作業単位の作業要素を特徴付ける複数の既定のタイプの１つを特定する工程を含む。
【００３４】
１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、１つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、特定されたタイプによって特徴付けられた作業要素を処理するよう構成されているかを判断する工程を含む。
【００３５】
第１の作業単位を分析する工程は、第１の作業単位の作業要素内に含まれるコンテンツの特性を特定する工程を含む。
【００３６】
１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、１つまたは複数のコンパイル済みのデータフローグラフに対応するデータフローグラフが、特定された特性を有するコンテンツを含む作業要素を処理するよう構成されているかを判断する工程を含む。
【００３７】
第１の作業単位を分析する工程は、第１のデータフローグラフの１つまたは複数のパラメータの第１のセット用の値として指定された第１の作業単位に関連する１つまたは複数の値を決定する工程を含む。
【００３８】
１つまたは複数のコンパイル済みのデータフローグラフを特定する工程は、特定された１つまたは複数のコンパイル済みのデータフローグラフが、決定された第１の作業単位に関連する１つまたは複数の値と一致するそれぞれの値にバインドされた１つまたは複数のパラメータの第１のセットを用いて第１のデータフローグラフを表すデータ構造にコンパイルされたかを判断する工程を含む。
【００３９】
特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、第１のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程は、１つまたは複数のパラメータの第２のセットを、第１の作業単位に少なくとも部分的に基づいて決定されたそれぞれの値にバインドする工程を含む。
【００４０】
１つまたは複数のパラメータの第２のセットは、少なくとも１つのパラメータを含み、その値は、入力作業要素を提供するための入力ソースまたは出力作業要素を受信するための出力ソースの名前を含む。
【００４１】
１つまたは複数のパラメータの第１のセットは、少なくとも１つのパラメータを含み、その値は、データ構造が第１のコンパイル済みのデータフローグラフにコンパイルされている場合に、第１のデータフローグラフを表すデータ構造に１つまたは複数のコンポーネントを含めるべきかどうかを判断する。
【００４２】
１つまたは複数のパラメータの第１のセットは、少なくとも１つのパラメータを含み、その値は、データ構造が第１のコンパイル済みのデータフローグラフにコンパイルされている場合に、第１のデータフローグラフを表すデータ構造内に含まれるコンポーネントによって処理される作業要素に変換を適用すべきかを判断する。
【００４３】
本方法は、第１の作業単位を受信する前に、それぞれの値にバインドされた１つまたは複数のパラメータの第１のセットを用いて第１のデータフローグラフを表すデータ構造から第１のコンパイル済みのデータフローグラフをコンパイルする工程をさらに含む。
【００４４】
本方法は、第１のコンパイル済みのデータフローグラフをデータ格納システムに格納し、格納した第１のコンパイル済みのデータフローグラフを１つまたは複数のパラメータの第１のセットにバインドされたそれぞれの値を示す情報と関連付ける工程をさらに含む。
【００４５】
別の態様では、一般に、データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータを処理するためのデータ処理システムは、それぞれが１つまたは複数の作業要素を含む複数の作業単位を受信するよう構成された入力デバイスまたはポートと、第１の作業単位を受信する工程に応じて、データ処理システムにロードされた第１のコンパイル済みのデータフローグラフを使用して第１の作業単位を処理するよう構成された少なくとも１つのプロセッサとを含む。第１のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第１のデータフローグラフを表すデータ構造にコンパイルされている。処理する工程は、第１の作業単位を分析して第１の作業単位の特性を決定する工程と、決定された第１の作業単位の特性を有する作業単位を処理するために、第１の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含むデータ格納システムに格納された複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、第１のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程と、第１のデータフローグラフを使用して第１の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む。
【００４６】
別の態様では、一般に、データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータを処理するためのデータ処理システムは、それぞれが１つまたは複数の作業要素を含む複数の作業単位を受信するための手段と、第１の作業単位を受信する工程に応じて、データ処理システムにロードされた第１のコンパイル済みのデータフローグラフを使用して、第１の作業単位を処理するための手段とを含む。第１のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第１のデータフローグラフを表すデータ構造にコンパイルされている。処理する工程は、第１の作業単位を分析して第１の作業単位の特性を決定する工程と、決定された第１の作業単位の特性を有する作業単位を処理するために、第１の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含むデータ格納システムに格納された複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、第１のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程と、第１のデータフローグラフを使用して第１の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む。
【００４７】
別の態様では、一般に、コンピュータ可読媒体は、データ格納システムに格納されたコンパイル済みのデータフローグラフを使用してデータ処理システム内のデータを処理するためのコンピュータプログラムを格納する。コンピュータプログラムは、コンピュータに、それぞれが１つまたは複数の作業要素を含む複数の作業単位を受信させ、第１の作業単位を受信する工程に応じて、データ処理システムにロードされた第１のコンパイル済みのデータフローグラフを使用して、第１の作業単位を処理させるための命令を含む。第１のコンパイル済みのデータフローグラフは、データ処理コンポーネント間の作業要素のフローを表すリンクによって接続されたデータ処理コンポーネントを表すノードを含む第１のデータフローグラフを表すデータ構造にコンパイルされている。処理する工程は、第１の作業単位を分析して第１の作業単位の特性を決定する工程と、決定された第１の作業単位の特性を有する作業単位を処理するために、第１の作業単位を受信する前に、コンパイルされた少なくともいくつかのコンパイル済みのデータフローグラフを含むデータ格納システムに格納された複数のコンパイル済みのデータフローグラフから１つまたは複数のコンパイル済みのデータフローグラフを特定する工程と、特定された１つまたは複数のコンパイル済みのデータフローグラフの１つを、第１のコンパイル済みのデータフローグラフとしてデータ処理システムにロードする工程と、第１のデータフローグラフを使用して第１の作業単位内の少なくとも１つの作業要素から１つまたは複数の出力作業要素を生成する工程とを含む。
【００４８】
本発明の態様は、以下の利点の１つまたは複数を含み得る。
【００４９】
データフローグラフを使用するデータ処理システムは、個別の作業要素で構成されるデータの入力フローを処理する異なる方法で構成することができる。それぞれの作業要素が別々の作業単位を表すことも、一連の複数の作業要素が１つの作業単位を表すことも可能である。本明細書に記載される技法は、そのようなシステムのさまざまな構成に使用することができる。一部の構成は、ある特定の特性を有するデータフロー内の作業単位に対してより適切である場合がある。いくつかの事例では、作業単位内の１つまたは複数の作業要素は、バッチ（例えば、同じ入力ファイル内の記録からなる作業要素のバッチ）として処理するためのデータフローグラフに提供され、そこでは、データフローグラフは、一度に単一バッチで、１つまたは複数の入力ポートから１つまたは複数の出力ポートに作業要素のデータフローを渡す。下流コンポーネントの出力ポートから提供された一連の「出力作業要素」（および、場合により、データセットコンポーネントに格納された）は、入力ポートに提供された一連の「入力作業要素」を処理した結果を表す。バッチ処理の一形態では、データフローグラフは、バッチの第１の入力作業要素が準備されると開始し、最後の出力作業要素を提供した後に終了する。バッチ処理の別の形態では、データフローグラフは、前のバッチからの最後の出力作業要素が次のバッチからの最初の入力作業要素を処理する前に出力されていることを確認する間、次から次へとバッチを実行し続ける。この後者のバッチ処理の形態では、それぞれがバッチを表す１つまたは複数の作業要素からなる作業単位に分割された作業要素の連続ストリームが存在し得る。本明細書に記載される技法の一部は、受信した作業単位に関連する既定の特性を検出する工程に応じて、所定のデータフローグラフを動的にロードする方法を示す。以下でさらに詳細に説明されるように、いくつかの事例では、特性は、作業単位のコンテンツ（例えば、ファイルの形式）に基づき、いくつかの事例では、特性は、作業単位に関連するパラメータ値（例えば、特定の条件付きコンポーネントを含めるべきかどうかを判断するパラメータ）に基づく。
【００５０】
いくつかの構成では、データ処理システムは、データフローグラフを比較的短い期間（例えば、数秒程度）の間実行して所定のデータのバッチを処理するように、データフローグラフを実行してデータのバッチを処理することができる。選択したデータフローグラフ（例えば、データフローグラフの収集体から選択した）で小容量のバッチを多く処理する場合、選択したデータフローグラフの実行時間が「開始時間」（グラフの開始から、グラフをロードしてデータのバッチの処理を開始する準備ができるまでに要する時間）で占められていなければ、大幅に性能を向上させることができる。例えば、データフローグラフの開始時間が約５秒で、データのバッチの処理に約５秒要する場合は、有用なデータ処理には実行時間の半分のみが使用される。いくつかの事例では、処理時間と実行時間のこの低比率は、それほど頻繁にバッチが到着しない場合（例えば、この例では数分ごとに）は、全体の効率に影響を与えることはない。しかし、比較的頻繁にバッチが到着する場合（例えば、この例では数秒ごとに）は、開始時間は全体の効率に多大な影響を与えることがある。本明細書に記載されるように、性能は、開始時間の間に実行されるであろうタスクの一部を早期のコンパイル段階に移動することによって向上させることができる。
【００５１】
いくつかの構成では、データ処理システムは、データフローグラフを実行してデータのフロー内の一連の作業要素を連続して処理するように、データフローグラフを実行してデータの連続フローを処理することができる。作業要素は、作業要素の１つまたは複数からなる作業単位に分割することができ、各作業単位は、バッチとして異なるデータフローグラフで処理する必要がある場合がある。性能は、異なるデータフローグラフを、要求に応じて実行中のコンテナグラフに動的にロードする場合（例えば、異なるデータフローグラフのすべてを独立して実行している状態に保つこと、または、それらを単一の大容量のデータフローグラフに組み合わせることとは対照的に）、大幅に向上させることができる。例えば、作業単位は、所定のタイプの単一のメッセージからなるものであってもよい。一部のタイプのメッセージは、他のものより頻繁であり得る。したがって、適切なデータフローグラフをロードして所定のタイプのメッセージを取り扱うことによって（すべての異なるタイプのメッセージに対するすべてのデータフローグラフを同時に実行する代わりに）、よりまれに使用されるデータフローグラフの実行の維持に使用されたであろうリソースを他の目的のために解放することができる。それに加えて、データフローグラフを大容量のデータフローグラフに組み合わせる代わりにデータフローグラフを別々に維持することにより、異なるタイプのメッセージに対するカスタムデータフローグラフの容易な設計を可能にするモジュール方式が提供され、コンテナグラフの検査時に全システムに対する開発者の理解を助長させる。開発者は、対応するデータフローグラフを変更することによって一部のタイプのメッセージを取り扱う方法を容易に変更することができ、メッセージタイプを追加または取り除く際にデータフローグラフを容易に追加または取り除くことができる。
【００５２】
本明細書に記載される技法を使用して、受信したデータのバッチを処理するため適切なパラメータ値でランタイム時に動的にロードできるカスタマイズされた異なるバージョンのデータフローグラフをコンパイルすることができる。いくつかの実装形態では、コンパイル済みのデータフローグラフは、包含データフローグラフを実行している間、包含データフローグラフに（および包含データフローグラフから）動的にロードできる（およびアンロードできる）「マイクログラフ」として使用することができる。マイクログラフは、データフローグラフでデータの連続フローを処理する間、バッチとしてデータの連続フロー内の異なる作業単位を処理する効果的な方法を提供する。いくつかの事例では、マイクログラフは、以下でさらに詳細に説明されるように、マイクログラフをロードするための特殊コンポーネントを使用して、サブグラフとして包含データフローグラフ内にロードされる。データフローグラフ（マイクログラフを含む）をコンパイルするための技法は、受信したデータのバッチ（データフロー内の作業単位を含む）に応じて、データフローグラフのコンパイル済みの異なるバージョンの間で選択することによってランタイム時の柔軟性を依然として可能にする一方で、一部の開始手順の事前実行を可能にする。
【００５３】
本発明の他の特徴および利点は、以下の説明および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００５４】
【図１】データフローグラフを実行するシステムの例示的な構成のブロック図である。
【図２】マイクログラフを含む例示的なデータフローグラフの図である。
【図３Ａ】例示的な特殊コンポーネントの図である。
【図３Ｂ】例示的なマイクログラフの図である。
【図４】メモリ内に複数のマイクログラフを備えた例示的な特殊コンポーネントの図である。
【図５Ａ】複数のマイクログラフ処理データフローを備えた例示的な特殊コンポーネントの図である。
【図５Ｂ】複数の特殊コンポーネントを備えた例示的なデータフローグラフの図である。
【図６】前処理および後処理コンポーネントを含む例示的な特殊コンポーネントのブロック図である。
【図７】複数のデータフローコンポーネントの一例を示す図であり、それぞれは単一のデータベースと相互作用する。
【図８】複数のデータベースと相互作用する例示的なデータフローコンポーネントの図である。
【図９Ａ】複数のデータベースと相互作用する例示的なデータフローコンポーネントの図である。
【図９Ｂ】共通のプロトコル層を使用して複数のデータベースと相互作用する例示的なデータフローコンポーネントの図である。
【図１０】ランタイム前にデータフローグラフをコンパイルするシステムの例示的な構成のブロック図である。
【発明を実施するための形態】
【００５５】
説明
１．概要
図１は、動的ロード技法を使用できる例示的なデータ処理システム１００を示す。システム１００は、記憶装置またはオンラインデータストリームとの接続部などの１つまたは複数のデータソースを含み得るデータソース１０１を含み、データソースのそれぞれは、さまざまな格納形式のいずれかの形式（例えば、メインフレームによって使用されるデータベース表、スプレッドシートファイル、フラットテキストファイルまたはネイティブ形式）でデータを格納することができる。実行環境１０４は、事前実行モジュール１０５と、実行モジュール１０６とを含む。実行環境１０４は、ＵＮＩＸ（登録商標）オペレーティングシステムなどの適切なオペレーティングシステムの制御下で、１つまたは複数の汎用コンピュータをホストとすることができる。例えば、実行環境１０４は、ローカルで接続された（例えば、ＳＭＰコンピュータなどのマルチプロセッサシステム）もしくはローカルで分散された（例えば、クラスタもしくはＭＰＰとして結合された複数のプロセッサ）、または、リモートで接続されたもしくはリモートで分散された（例えば、ローカルエリアネットワーク（ＬＡＮ）および／もしくは広域ネットワーク（ＷＡＮ）を介して結合された複数のプロセッサ）、あるいは、それらの任意の組合せの、複数の中央演算処理装置（ＣＰＵ）を使用したコンピュータシステムの構成を含む複数ノード並列演算環境を含み得る。
【００５６】
事前実行モジュール１０５は、データフローグラフをコンパイルする、実行環境１０４にアクセス可能なデータ格納システム１０７へ／からコンパイル済みのデータフローグラフを格納／ロードする、または、パラメータ値を分解して、分解した値をパラメータにバインドするなど、データフローグラフおよび他の実行可能プログラムの実行に備えてさまざまなタスクを実行するよう構成される。いくつかの事例では、事前実行モジュール１０５は、データソース１０１からのデータに応じてタスク（例えば、コンパイル済みのデータフローグラフをロードする）を実行する。データソース１０１を提供する記憶装置は、実行環境１０４とローカルで接続する、例えば、実行環境１０４を実行しているコンピュータに接続された記憶媒体（例えば、ハードドライブ１０２）に格納することも、実行環境１０４とリモートで接続する、例えば、リモート接続上で、実行環境１０４を実行しているコンピュータと連通するリモートシステム（例えば、メインフレーム１０３）をホストとすることもできる。
【００５７】
実行モジュール１０６は、事前実行モジュール１０５によって生成されたコンパイル済みのデータフローグラフを使用して出力データを生成し、出力データは、データソース１０１に戻すおよび／またはデータ格納システム１０７に格納することができる。また、データ格納システム１０７は、開発環境１０８にアクセスすることができ、開発環境１０８では、開発者１０９は、データフローグラフを設計することができる。データフローグラフを表すデータ構造は、シリアライズしてデータ格納システム１０７に格納することができる。
【００５８】
実行モジュール１０６は、異なる形式のデータベースシステムを含むデータソース１０１のさまざまなタイプのシステムからデータを受信することができる。データは、恐らくヌル値を含む、それぞれのフィールド（「属性」または「列」とも呼ばれる）に対する値を有する記録として組織化することができる。データソースからデータを読み取る際、実行中のデータフローグラフは、そのデータソース内の記録についての初期形式情報を取り扱うコンポーネントを含み得る。状況次第では、データソースの記録構造は、初めは知られていない場合があり、代わりに、データソースの分析後に決定される場合がある。記録についての初期情報は、異なる値を表すビット数と、記録内のフィールドの順番と、ビットによって表される値のタイプ（例えば、ストリング、符号付き／符号なし整数）とを含み得る。
【００５９】
図２を参照すると、実行モジュール１０６によって実行されたデータフローグラフ１５５の一例により、入力データソース１１０からのデータを読み取り、離散的な作業要素のフローとして処理することが可能になる。作業要素の処理に伴う計算の異なる部分は、グラフの頂点（または、ノード）として表されるコンポーネント１２０、１３０で、ならびに、コンポーネント１２０および１３０を接続するリンク１２５などのグラフのリンク（または、弧、辺）によって表されるコンポーネント間のデータフローで実行される。そのようなグラフに基づく計算を実施するシステムについては、参照により本明細書に組み込まれる米国特許第５，５６６，０７２号「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」に記載されている。このシステムに従って作成されたデータフローグラフは、グラフコンポーネントによって表される個別のプロセスに情報を持ち込むおよび個別のプロセスから情報を引き出すための方法、プロセス間で情報を移動するための方法、ならびに、プロセスに対する実行順番を定義するための方法を提供する。このシステムは、プロセス間通信方法（例えば、グラフのリンクに従った通信経路は、ＴＣＰ／ＩＰもしくはＵＮＩＸドメインソケットを使用するか、または、共有メモリを使用して、プロセス間でデータを渡すことができる）を選択するアルゴリズムを含む。
【００６０】
実行用に未コンパイルのデータフローグラフを準備するプロセスは、さまざまな段階を伴う。データフローグラフの未コンパイルの表現は、コンパイルプロセスで使用される値を提供するデータフローグラフに関連する任意のパラメータとともに取得される。静的パラメータ分解段階の間、静的パラメータ（それらの値はランタイム前に分解用に指定される）を分解して、分解した値を静的パラメータにバインドする。いくつかの事例では、静的パラメータの値を分解するため、計算を実行してある特定の値（例えば、参照により本明細書に組み込まれる「MANAGING METADATA FOR GRAPH-BASED COMPUTATIONS」と称する米国特許出願公開第２００６／０２９４１５０号に記載されるようなメタデータ値）を導出する。一部のパラメータは、未分解のまま残して後のランタイム時またはランタイム直前に分解する動的パラメータとして指定することができる。条件付きコンポーネントとして指定されたコンポーネントは、既定の条件が満たされない場合（または満たされる場合）は、例えば、静的パラメータ値に基づいて、グラフから取り除く（例えば、データフローリンクと交換することによって）。コンパイル段階の間、実行中に使用される、そのコンポーネントおよびリンクを含むデータフローグラフを表すデータ構造を生成する。また、コンパイルする工程は、スクリプト言語で埋め込まれたスクリプトをバイトコードまたはマシンコードにコンパイルする工程も含み得る。ランタイム時、データフローグラフと関連するいかなる動的パラメータも分解した値とバインドさせ、コンパイル済みのデータフローグラフのデータ構造を１つまたは複数のプロセスを開始することによって着手し、必要なあらゆるファイル（例えば、動的パラメータによって特定されたファイル）を開き、および／または、あらゆる動的ライブラリをリンクする。また、プロセスは、リンクによって表されるデータフローを設定するタスク（例えば、共有メモリを割り当てる、または、ＴＣＰ／ＩＰストリームを開く）も実行する。いくつかの事例では、データ構造は、参照により本明細書に組み込まれる「MANAGING COMPUTING RESOURCES IN GRAPH-BASED COMPUTATIONS」と称する米国特許出願公開第２００７／０２７１３８１号に記載されているように、単一のプロセス内で複数のコンポーネントを実行するよう構成される。
【００６１】
データフローグラフは、さまざまなレベルの抽象化によって指定することができる。それ自体がコンポーネントおよびリンクを含むデータフローグラフである「サブグラフ」は、単一のコンポーネントとして別の包含データフローグラフ内で表すことができ、サブグラフを包含データフローグラフに接続するそれらのリンクのみを示す。いくつかの事例では、サブグラフを使用して、開発環境１０８内の包含データフローグラフのコンポーネントおよびリンクを隠すが、コンポーネントおよびリンクを表すデータは、包含データフローグラフ内で既に統合されている。いくつかの実施形態では、以下でさらに詳細に説明されるように、サブグラフは、初めは包含データフローグラフ内に含まれていないが、後に、包含データフローグラフにロードされるコンポーネントおよびリンクを表すデータ構造を含む、コンパイル済みのデータフローグラフとして開始する「マイクログラフ」から導出される。
【００６２】
再度図２を参照すると、データフローグラフ１５５は、データソースから入力データの連続フローを受入することができ、この例では、データソースは、データセットコンポーネント１１０で表される。データのフローは、データフローグラフ１５５のオペレーション中に増減したとしても、データのフローは、例えば、エントリシステム内で受信されたクレジットカードトランザクションまたは注文のフローなど、必ずしも区別可能な始まりまたは終わりを有するとは限らないという意味では連続的なものである。それに加えて、データフローグラフ１５５は、出力データの連続フローを出力データリポジトリに提供することができ、この例では、出力データリポジトリは、データセットコンポーネント１４０で表される。一部のデータフローグラフは、無期限にデータの連続フローを処理する連続データフローグラフとして実行するよう設計され、一部のデータフローグラフは、データの離散的なバッチを処理するための実行を開始し、次いで、バッチを処理してから実行を終了するバッチデータフローグラフとして実行するよう設計される。データフローグラフのデータ処理コンポーネント１２０および１３０は、一連の命令、サブグラフまたはそれらのいくつかの組合せを含み得る。
【００６３】
いくつかの構成では、特殊コンポーネント１３０は、マイクログラフ１６０をロードすることができ、マイクログラフは、動的に取得し、包含データフローグラフ内に埋め込むよう構成された特殊な種類のサブグラフである。マイクログラフは、特殊コンポーネント１３０などの包含データフローグラフの包含コンポーネントに動的に埋め込むことができる。いくつかの構成では、マイクログラフ１６０は、以前にコンパイルされ、データ格納システム１０７に格納されたデータフローグラフから導出される。いくつかの構成では、マイクログラフ１６０は、データ格納システム１０７からロードする際、未コンパイルの形式のまま残る。例えば、コンパイル済みのデータフローグラフをロードする代わりに、特殊コンポーネント１３０は、グラフコンパイル手順を開始し、特殊コンポーネント１３０を含むデータフローグラフが、使用直前にコンパイルされたマイクログラフを実行できるようにすることができる。グラフコンパイル手順は、特殊コンポーネント１３０の外部で実行しても、特殊コンポーネント１３０の内部で実行してもよい。いくつかの構成では、マイクログラフ１６０は、データ格納システム１０７に格納する前にシリアライズする。一般に、シリアライゼーションは、コンパイル済みまたは未コンパイルの表現のデータフローグラフを０と１のバイナリストリームに変換し、その結果、データフローグラフを永続的なメモリまたはメモリバッファに容易に格納できる形式にするためのプロセスである。マイクログラフの迅速なロードが望ましい実装形態では、通常、データフローグラフは、データ構造とともにコンパイル済みの表現でシリアライズし、データ格納システム１０７に格納し、その結果、シリアライズしたコンパイル済みのデータフローグラフを容易に取得することができ、データ構造は、ランタイム時に非シリアライズし、動的にロードする。コンパイルは、データフローグラフとして表されるプログラムを含むコンピュータプログラムをコンピュータで実行するよう準備するためのプロセスである。コンパイルは、コンピュータ上で実行する準備ができているマシンコードもしくは命令、または、コンピュータ上で実行している仮想マシンによって実行される中間コード、例えば、Ｊａｖａ（登録商標）バイトコードの生成をもたらす場合がある。データフローグラフの事例では、コンパイルは、コンピュータ上で実行する準備ができている形式でデータフローグラフのコンポーネントおよびリンクを表すデータ構造の生成を含む。
【００６４】
特殊コンポーネント１３０の受信リンク１２５に沿ってデータフローグラフ１５５中を流れるデータは、特殊コンポーネント１３０がマイクログラフ１６０をロードしてマイクログラフ１６０をデータフローグラフ１５５と統合する間、バッファに一時的に格納される。同様に、データフローは、マイクログラフを切り離してデータフローグラフ１５５からアンロードする間、バッファに蓄積することができる。いくつかの構成では、切り離したマイクログラフをメモリ内にロードしたまま残し、後にアクセスすることができる（例えば、キャッシュメカニズムを使用する）。
【００６５】
バッファリングは、コンポーネントに作業要素の入力フローを提供するリンクに対する入力キューを使用して実装されるフロー制御メカニズムを使用するよう構成することができる。このフロー制御メカニズムにより、データは、通常大容量だが低速のディスクドライブなどの不揮発性ローカル記憶装置に必ずしも書き込まれることなく、データフローグラフのコンポーネント間を流れることができる。入力キューは、作業要素を揮発性メモリに保持できるほど十分に小容量に保つことができ、通常、不揮発性メモリより小容量で高速である。格納スペースおよび時間の節約の可能性は、非常に大容量のデータセットにも存在する。コンポーネントは、入力キューの代わりにまたは入力キューに加えて、出力バッファを使用することができる。２つのコンポーネントがフローによって接続されると、上流コンポーネントは、下流コンポーネントが作業要素を消費し続ける限り、下流コンポーネントに作業要素を送信する。下流コンポーネントに遅れが出る場合は、上流コンポーネントは、下流コンポーネントの入力キューを埋めて、再度入力キューがクリアされるまで作業を停止する。
【００６６】
いくつかの構成では、マイクログラフ１６０は、バッチデータフローグラフの一部として、または、コマンドラインから、スケジューリングプロセスによって予定に基づいて実行され、必ずしも包含データフローグラフの特殊コンポーネントにロードする必要はない。あるいは、スケジューラは、特殊コンポーネントを使用して、キューからのメッセージに応じて適切なマイクログラフをロードする特殊コンポーネントを含む実行中のデータフローグラフへメッセージの連続フローを提供するキューへメッセージを送信することによって、バッチ処理用のマイクログラフに着手することができる。
【００６７】
２．特殊コンポーネント
図３Ａを参照すると、一実施形態では、特殊コンポーネント２００は、複数の入力２０５、２１０、２１５を受入し、複数の出力２２０、２２５、２３０および２３５に送達するよう構成される。入力は、データ入力２０５、２１０と、制御入力２１５とを含む。出力は、データ出力２２０、２２５、２３０と、状態出力２３５とを含む。制御入力２１５は、マイクログラフ２４０を実行するための識別子（例えば、受信された制御要素内の）および場合によりマイクログラフ２４０の実行に使用されるパラメータセットを受入する。一般に、特殊コンポーネント２００は、データ入力２０５、２１０などのそれぞれのデータ入力ポート上で入力作業要素のゼロ以上のフローを受入することができる。状態出力２３５は、マイクログラフ２４０の実行からの出口状態および追跡情報を含む状態記録を生成する。それに加えて、特殊コンポーネントは、データ出力２２０、２２５および２３０などのそれぞれのデータ出力ポート上で出力作業要素のゼロ以上のフローを生成する。一実施形態では、特殊コンポーネント２００は、正常な実行の間、１つの状態記録を生成し、１つの制御記録を受入する。
【００６８】
制御入力２１５は、それぞれがロードすべき対応するマイクログラフを特定する一連の複数の制御要素を受信することができる。それぞれの制御入力要素は、特定したマイクログラフによって処理すべき作業単位を表すデータ入力上で受信する作業要素のフロー内の作業要素の異なるサブセットに関連する。いくつかの事例では、マイクログラフを特定する制御要素は、作業単位内の１つまたは複数の作業要素を分析して適切なマイクログラフを選択し、その作業単位を処理する工程に基づいて生成される。いくつかの事例では、マイクログラフを特定する制御要素および特定したマイクログラフによって処理すべき作業単位を表す作業要素は、独立して受信され、さまざまな技法のいずれかを使用して互いに一致させる。例えば、マイクログラフを特定する制御要素を最初に受信し、作業単位の少なくとも１つの作業要素内に現れるキー値を対応する制御要素（例えば、単に作業単位内の第１の作業要素または作業単位内のあらゆる作業要素）と一致させることによって、特定したマイクログラフによって処理すべき作業単位を表す作業要素を決定する。あるいは、「デリミタ作業要素」と呼ばれる作業要素は、同じ作業単位に属する作業要素の異なるシーケンスを分離するデリミタとして機能し得る。あるいは、特殊コンポーネント２００は、既定数の作業要素を受信して、それぞれの制御要素と関連付ける連続的な作業単位に属するよう構成される。
【００６９】
マイクログラフ２４０は、特殊コンポーネント２００との互換性を有するよう設計されてきたマイクログラフの収集体から選択することができる。例えば、マイクログラフ２４０の入力ポートおよび出力ポートの数は、特殊コンポーネント２００の入力ポートおよび出力ポートの数と一致し得る。この例では、マイクログラフ２４０は、２つの入力ポートおよび３つの出力ポートを有し、これらのポートは、入力フローを受信するよう構成されたマイクログラフ２４０の２つの異なるコンポーネント上および出力フローを提供するよう構成されたマイクログラフ２４０の３つの異なるコンポーネント上に位置する場合がある。あるいは、マイクログラフ２４０の複数の入力または出力ポートは、同じコンポーネント上に位置する場合がある。
【００７０】
いくつかの実施形態では、特殊コンポーネント２００は、事前に定義された条件に対してマイクログラフ２４０をモニタし、これらの条件に応じることができる。例えば、特殊コンポーネント２００は、マイクログラフ２４０のコンポーネントを実行するプロセスをモニタする別々のプロセスを使用して、マイクログラフ２４０の実行中の待ち時間がタイムアウト条件に対する最大閾値を超えるかどうかを判断することができる。それに応じて、特殊コンポーネント２００は、例えば、マイクログラフ２４０の第２のインスタンスをロードすることによって条件に応じることができる。同様に、エラー条件をモニタする。エラー条件を検出する工程に応じて、特殊コンポーネント２００は、エラーを記録し、エラー条件に基づいて作業単位をリダイレクトし、必要ならば、マイクログラフ２４０を再開し、状態出力２３５を介してエラーを報告することができる。マイクログラフ２４０の再開では、特殊コンポーネント２００が含まれている包含データフローグラフの他のいかなるコンポーネントも中断する必要はない。
【００７１】
いくつかの実施形態では、特殊コンポーネント２００は、入力ポート上のデータフローを分析して、どのマイクログラフ２４０を実行するかを判断する。他の実施形態では、マイクログラフ２４０を実行するための名前または他の識別情報は、データフローの一部として特殊コンポーネント２００に供給される。さらなる他の実施形態では、マイクログラフ２４０を特定する情報は、特殊コンポーネント２００の制御入力２１５を通じて供給される。
【００７２】
特殊コンポーネント２００は、以下でさらに詳細に説明されるように、データ格納システム１０７からマイクログラフ２４０をロードし、特殊コンポーネント２００を含むデータフローグラフにマイクログラフ２４０を埋め込み、マイクログラフ２４０がデータフローを処理できるようにする。
【００７３】
オペレーションが完了すると、特殊コンポーネント２００は、マイクログラフ２４０を取り除く。いくつかの実施形態では、特殊コンポーネント２００は、後にアクセスするため、データ格納システム１０７からよりも比較的容易にアクセスできる格納場所に格納されたマイクログラフキャッシュにマイクログラフ２４０を格納することができる。いくつかの実施形態では、特殊コンポーネント２００は、マイクログラフ２４０をロードし、統合し、取り除く間、受信データをバッファリングすることができる。
【００７４】
３．マイクログラフ構造
図３Ｂを参照すると、マイクログラフ２４０の一例は、データ処理コンポーネント３０５、３１０、３１５および３２０を含み、データ処理コンポーネントは、上流コンポーネントにリンクされた１つまたは複数の入力ポートに到着するデータフロー内の入力作業要素に対するオペレーションを実行し、下流コンポーネントにリンクされた１つまたは複数の出力ポートを出るデータフロー内の出力作業要素を生成する。また、マイクログラフ２４０は、マイクログラフ２４０を特殊コンポーネント２００に埋め込むプロセスを容易にするよう構成されたコンポーネント３００Ａ、３００Ｂおよび３０２Ａ、３０２Ｂ、３０２Ｃも含み、これらは、「インターフェースコンポーネント」と呼ばれる。インターフェースコンポーネントは、マイクログラフを、実行すべき特殊コンポーネントに埋め込む必要のない独立したデータフローグラフとして実行することも可能にする。
【００７５】
インターフェースコンポーネントを使用して、マイクログラフを包含特殊コンポーネントのポートに接続する。マイクログラフを特殊コンポーネントに埋め込む工程は、各インターフェースコンポーネントと特殊コンポーネントの適正なポートとの対を形成する方法を決定する工程を伴う。入力インターフェースコンポーネント（３００Ａ、３００Ｂ）は出力ポートを有し、出力インターフェースコンポーネント（３０２Ａ、３０２Ｂ、３０２Ｃ）は入力ポートを有する。入力インターフェースコンポーネントと特殊コンポーネントの入力ポートとの対を形成すると、その入力ポートと入力インターフェースコンポーネントの出力ポートがリンクされているポートとの間でデータフローリンクが生成される。同様に、出力インターフェースコンポーネントと特殊コンポーネントの出力ポートとの対を形成すると、出力インターフェースコンポーネントの入力ポートがリンクされているポートとその出力ポートとの間でデータフローリンクが生成される。
【００７６】
インターフェースコンポーネントとそれらのそれぞれの特殊コンポーネントの入出力ポートとの適正な対形成は、以下のように決定することができる。インターフェースコンポーネントおよび特殊コンポーネントのポートは、場合により、識別子でラベル付けすることができる。特殊コンポーネントの入力／出力ポートに割り当てられた識別子と入力／出力インターフェースコンポーネントに割り当てられた識別子が一致すれば、そのポートとそのインターフェースコンポーネントは対形成される。識別子間での一致は、正確なものでも、不正確なものでもよい（例えば、識別子の一部の接頭語または接尾語間の一致を見出す）。ある対形成手順では、正確な一致と判断されると、数値接尾語を有するインターフェースコンポーネントは、一致する数値接尾語を有するポートと一致する（例えば、特殊コンポーネントの「出力１」ポートは「マイクログラフ出力−１」インターフェースコンポーネントと対形成される）。
【００７７】
マイクログラフを特殊コンポーネントの外部で実行すると（例えば、テスト目的のための開発環境１０８からのコマンドに応じて）、インターフェースコンポーネントは、データセットコンポーネントの機能性を提供し、インターフェースコンポーネントの出力または入力ポートに接続されたリンク上のデータフロー内の作業要素のソースまたはシンクを提供する。適切な機能性は、マイクログラフが特殊コンポーネント内に埋め込まれているかどうかに基づいて決定される。インターフェースコンポーネントはそれぞれ、マイクログラフが特殊コンポーネント内に埋め込まれている場合は、マイクログラフと特殊コンポーネントとの間で作業要素を送信するための命令を含み、マイクログラフが特殊コンポーネント内に埋め込まれていない場合は、マイクログラフと格納場所との間で作業要素を送信するための命令とを含む。格納場所は、入力作業要素を提供するために読み取られるか、または、出力作業要素を受信するために書き込まれるファイルであり得る。
【００７８】
いくつかの実施形態では、マイクログラフ２４０は、マイクログラフに含めることができるデータ処理コンポーネント（この例では、コンポーネント３０５、３１０、３１５および３２０）の機能性に対してある特定の制約を設定することによって構成される。例えば、いくつかの実施形態では、マイクログラフ２４０のデータ処理コンポーネント３０５、３１０、３１５および３２０は、単一のプロセス内で実行できる必要がある場合がある（例えば、参照により本明細書に組み込まれる米国特許出願公開第２００７／０２７１３８１号にさらに詳細に説明されているように単一プロセスに組み込むことによって）。いくつかの実施形態では、マイクログラフは、加入ソース（キューなど）からデータを受信する加入者コンポーネントをサポートしない。いくつかの実施形態では、マイクログラフは、バッチデータフローグラフとして構成する必要がある場合がある。いくつかの実施形態では、マイクログラフ２４０によって実行されたいかなるトランザクションオペレーションも、単一のトランザクションに収まらなければならない。他の実施形態では、マイクログラフ２４０のトランザクション態様、例えば、チェックポイント、トランザクションのコンテキストおよびマルチフェーズコミットは、制御入力２１５を通じて制御される。
【００７９】
データフローグラフ処理では、データの連続フローは、従来のトランザクションの動作に影響を及ぼし得る。チェックポイントオペレーションは、データフロー内のポイントで十分な状態情報を格納し、データフロー内のそのポイントからデータフローグラフを再開できるようにする工程を伴う。かなり頻繁にチェックポイントを取れば、性能は低下する。かなりまれにチェックポイントを取れば、トランザクションの障害の事例におけるリカバリ手順は、より複雑なリソース集約型となる。トランザクションのコンテキストを使用して、そのオペレーションがより大容量のトランザクションの一部であることをマイクログラフに通知することができる。このトランザクションは、単一のデータソースに対して動作する複数のコンポーネントを包含する、より大容量のトランザクションであっても、複数のデータソースにわたって、例えば、２フェーズコミットオペレーションでトランザクションを調整するのに必要な情報を含んでもよい。
【００８０】
４．マイクログラフ管理
図４を参照すると、一実施形態では、特殊コンポーネント４０５は、特殊コンポーネントがアクセス可能なキャッシュ（例えば、ローカルメモリに格納）に一度に２つ以上のマイクログラフをロードしている場合がある。この例では、１つのマイクログラフ４３０は、特殊コンポーネント４０５を含むデータフローグラフに接続される。特殊コンポーネント４０５の入力４４０は、マイクログラフ４３０の入力４４５へのリンクによって接続され、マイクログラフ４３０の出力４５０は、特殊コンポーネント４０５の出力４５５へのリンクによって接続される。マイクログラフ４３０の入力４４０および出力４５０は、例えば、入力および出力インターフェースコンポーネント、または、マイクログラフを特殊コンポーネントに埋め込むための他の任意のメカニズムを表す。
【００８１】
他のマイクログラフ４１０、４１５、４２０および４２５を格納するキャッシュは、マイクログラフ４３０を格納する同じメモリ内に位置し得る。いくつかの実施形態では、マイクログラフ４１０、４１５、４２０、４２５および４３０は、特殊コンポーネント４０５を実行する同じプロセス内のスレッドとして、または、そのプロセスの子プロセスとして実行することができる。あるいは、マイクログラフ４１０、４１５、４２０、４２５および４３０は、そのプロセスの同じメインスレッド内で実行することができる。いくつかの実施形態では、特殊コンポーネント４０５は、マイクログラフ４１０、４１５、４２０、４２５および４３０の複数のコピーを実行する。いくつかの実施形態では、特殊コンポーネント４０５は、そのコピーが「不正（dirty）」（オリジナルのマイクログラフに変更があったことを示す）としてマーキングされない限り、データ格納システム１０７に格納されたオリジナルのマイクログラフにアクセスする前に、キャッシュに格納された選択されたマイクログラフのコピーを使用する。選択されたマイクログラフのコピーがキャッシュにない場合、特殊コンポーネント４０５は、データ格納システム１０７からマイクログラフをロードする。いくつかの実施形態では、選択されたマイクログラフは、「オフライン」の状態にあるものとして示され（例えば、キャッシュへ登録することによって）、これは、選択されたマイクログラフが現時点で利用不可能である（例えば、開発者がマイクログラフを変更している最中であり得る）ことを示す。それに応じて、特殊コンポーネントは、選択されたマイクログラフをロードする際にエラーを示すことも、代わりのマイクログラフ（例えば、同様の能力を有する異なるマイクログラフ）をロードすることもできる。
【００８２】
図５Ａを参照すると、一シナリオでは、単一の特殊コンポーネント５０５は、同時にデータフローと統合された複数のマイクログラフ５１０、５１５および５２０を有する。特殊コンポーネント５０５の入力ポート５２５は、入力データフローからの作業要素を複数のデータフローにパーティションで区切るパーティションコンポーネント５５７を使用して、マイクログラフ５２０、５１５および５１０の入力５３０、５４５、５５５のそれぞれに接続される。マイクログラフの出力５３５、５５０および５６０は、複数のデータフローから作業要素を集め、それらを単一の出力データフローにマージするコンポーネント５６２（「収集コンポーネント」と呼ばれる）を使用して、特殊コンポーネント５０５の出力５４０ポートに接続される。この構成では、特殊コンポーネント５０５は、受信データをマイクログラフ５１０、５１５および５２０にルーティングすることができる。例えば、コンポーネントが同一のマイクログラフの別々のコピーである場合、特殊コンポーネント５０５は、パーティションで区切る際に、ロードバランスアルゴリズム（例えば、ラウンドロビン、最小利用など）を利用することができる。
【００８３】
図５Ｂを参照すると、別のシナリオでは、データフローグラフ５６５は複数の特殊コンポーネントを含み、それにより、高度にカスタマイズ可能なコンテナデータフローグラフにおける柔軟な組合せのマイクログラフの構成が可能になる。この例では、データセットコンポーネント５７０からの作業要素（入力データのバッチまたは入力データの連続ストリームを表し得る）は、最初にデータ処理コンポーネント５７２によって処理され（例えば、作業要素を再フォーマットする）、次いで、リンク５７４上で第１の特殊コンポーネント５７６に送信される。特定のタイプの作業要素を検出する工程に応じて、コンポーネント５７６は、検出されたタイプの作業要素を処理するよう構成されたマイクログラフ５７８をロードする。次いで、第１の特殊コンポーネント５７６からの処理された出力作業要素は、第２の特殊コンポーネント５８０に送信され、第２の特殊コンポーネント５８０は、マイクログラフ５８２をロードする。この構成では、第２の特殊コンポーネント５８０にロードするために選択されたマイクログラフ５８２は、第１の選択されたマイクログラフ５７８の結果に依存する。結果として得られた出力作業要素は、データセットコンポーネント５８４に送信される。異なるマイクログラフの多数の組合せは、データフローグラフ内の戦略上の場所で特殊コンポーネントを使用して動的にロードすることができる。この簡単な例では、第１の特殊コンポーネント５７６にロードできる１０個の異なる潜在的マイクログラフ、および、第２の特殊コンポーネント５８０にロードできる１０個の異なる潜在的マイクログラフが存在すれば、データフローを処理している間に、要求に応じて動的に構築できる１００個もの異なるデータフローグラフが存在し、データフローを１００個の異なる実行中のデータフローグラフにパーティションで区切ることと比べると、潜在的にはるかに少ないリソースが必要とされ、各作業単位に対して１００個の異なるデータフローグラフの１つを開始することと比べると、待ち時間は潜在的にはるかに短い。
【００８４】
５．前処理および後処理
特殊コンポーネントは、ロードされたマイクログラフ内のコンポーネントに加えて他のコンポーネントも含むことができる。図６を参照すると、一実施形態では、特殊コンポーネント６０５は、マイクログラフを実行する前に前処理を含み、マイクログラフを実行した後に後処理を含む（図では、前処理コンポーネント６１０および後処理コンポーネント６２０をマイクログラフ６１５の周囲に表す）。前処理および後処理機能は、例えば、トランザクション管理に関連し得る。いくつかの実施形態では、各マイクログラフ６１５は別々のトランザクションを表し、その事例では、前処理はトランザクションを開始し、後処理はトランザクションを終了することができる。他の実施形態では、マイクログラフ６１５は、より長いトランザクションにおけるチェックポイントを表し得る。例えば、マイクログラフ６１５は、２フェーズコミットプロトコルを使用するより長いトランザクションの一部であり得る。そのようなトランザクションは、複数の異なるマイクログラフまたは同じマイクログラフの複数の実行を使用して処理することができる。
【００８５】
前処理コンポーネント６１０は、データストア（図示せず）からマイクログラフ６１５をロードして、後にアクセスするため、マイクログラフキャッシュにロードしたマイクログラフを潜在的に格納する、または、メモリキャッシュ（図示せず）からロードしたマイクログラフバージョンにアクセスして、特殊コンポーネント６０５に統合することができる。後処理コンポーネント６２０は、特殊コンポーネント６０５のデータフローとのその統合からロードしたマイクログラフ６１５を取り除くことができる。さまざまな他の前処理および後処理機能を実行することができ、それには、例えば、マイクログラフ６１５での処理用にデータフロー内の記録を準備することによる前処理（例えば、記録の再フォーマット）、および、特殊コンポーネント６０５の出力に接続されたコンポーネントでの処理用にマイクログラフ６１５から受信した記録を準備することによる後処理（例えば、記録の再フォーマットによる）が含まれる。
【００８６】
６．データベース接続管理
図７を参照すると、いくつかのシナリオでは、コンポーネントが異なれば、異なるタイプのデータベースにアクセスできる必要がある。例えば、コンポーネント７０２は、あるベンダーによって提供されるデータベース７０６にアクセスする必要がある一方で、別のコンポーネント７０４は、別のベンダーによって提供されるデータベース７０４にアクセスする必要がある。一般に、コンポーネント７０２は、コンポーネントに統合されたライブラリ７１０、例えば、データベース７０６のベンダーによって供給されるライブラリにアクセスすることによってデータベース７０６にアクセスする。同様に、コンポーネント７０４は、コンポーネントに統合された別のライブラリ７１２、例えば、データベース７０８のベンダーによって供給されるライブラリにアクセスすることによってデータベース７０８にアクセスする。ライブラリは、特定のコンポーネントにコンパイルすることも、特定のコンポーネントに動的にリンクすることもできる。
【００８７】
図８を参照すると、特殊コンポーネント８０２は、複数の異なるマイクログラフ８０４、８０６および８０８を含み得る。この例では、マイクログラフ８０８は、特殊コンポーネント８０２内に埋め込まれており、マイクログラフ８０４および８０６は、必要に応じて動的に埋め込まれるアクセス可能なキャッシュにロードされる。いくつかのマイクログラフは、あるデータベース７０６にアクセスすることができ、他のマイクログラフは、別のデータベース７０８にアクセスすることができる。伝統的には、２つのデータベースへのアクセスには、ライブラリ７１０が第１のデータベース７０６をサポートし、別のライブラリ７１２が他のデータベース７０８をサポートして、特殊コンポーネント８０２と統合する必要がある場合がある。複数の異なるデータベースライブラリの統合は、特殊コンポーネント８０２に関連するバイナリサイズの増加をもたらし、ベンダーによって供給されるあるライブラリ７１０が異なるベンダーによって供給される別のライブラリ７１２との互換性を有さない場合は、予測不能の挙動をもたらす。例えば、非互換性は、識別名の不一致または異なるコンパイルモデルを含み得る。
【００８８】
非互換性を回避するおよび／またはバイナリサイズを削減する一方法は、特殊コンポーネントからライブラリを取り除き、代わりに、特殊コンポーネントを実行するプロセスからライブラリへ別々のコンピュータプロセスにアクセスさせることである。図９Ａを参照すると、データベースライブラリ７１０および７１２は、特殊コンポーネント９０２から取り除かれている（例えば、コンポーネント９０２に、コンパイルも、動的リンクもされていない）。マイクログラフコンポーネント９０４、９０６および９０８は、クライアント／サーバインターフェース上でライブラリ７１０、７１２にアクセスすることによって、データベース７０６、７０８にアクセスする。ライブラリ７１０、７１２にアクセスするため、特殊コンポーネント９０２は、プロセス間通信を使用して外部プロセスで実行している対形成されたサーバスタブ９１２と通信する統合クライアントスタブ９１０を使用する。例えば、外部プロセスおよび特殊コンポーネント９０２は、共有メモリセグメントにアクセスすることによってデータを交換することができる。同様に、サーバスタブ９２０を実行している外部プロセスにアクセスするため、特殊コンポーネント９０２は、プロセス間通信を使用して外部プロセスで実行しているサーバスタブ９２０と通信する別の統合クライアントスタブ９１８を使用する。
【００８９】
サーバスタブ９１２は、データベース７０６へのアクセスを提供するためにデータベースライブラリ７１０と統合する。同様に、サーバスタブ９２０は、データベース７０８へのアクセスを提供するためにデータベースライブラリ７１２と統合する。一般に、クライアントスタブ９１０、９１８は、データベースライブラリ７１０、７１２より小容量のメモリフットプリントを有し、したがって、特殊コンポーネントは、より少ないメモリリソースを使用することができる。それに加えて、データベースライブラリが特殊コンポーネント９０２から移し出されているため、データベースライブラリ７１０、７１２間での非互換性のリスクがない。
【００９０】
図９Ｂを参照すると、いくつかの実施形態では、クライアントスタブ９１０、９１８およびサーバスタブ９１２、９２０は、データベースライブラリ７１０、７１２のそれぞれのアプリケーションプログラミングインターフェース（ＡＰＩ）を密接に反映するよう構成される。ライブラリＡＰＩの違いからマイクログラフ９０４、９０６および９０８を隔離するため、抽象化層９３０を特殊コンポーネント９０２に統合する。抽象化層９３０は、それらのデータベースに対するデータベースライブラリ間の違いに関わらず標準データベース動作を実行するための単一のＡＰＩを備えた異なるデータベースにアクセスする必要があり得る複数の異なるコンポーネントをマイクログラフ内に提供する。いくつかの実施形態では、抽象化層９３０は、マイクログラフのコンポーネントからの要求をクライアントスタブ９１０、９１８のライブラリ特有のＡＰＩへの特定の呼出しに変換する。いくつかの実施形態では、抽象化層９３０は、マイクログラフコンポーネントからの要求を一般的な呼出しとして渡し、それぞれのクライアントスタブは、一般的な呼出しからそのそれぞれのサーバスタブのＡＰＩへのライブラリ特有の呼出しへの変換を実行するよう構成される。
【００９１】
７．コンパイルおよびパラメータ
図１０を参照すると、一実施形態では、データフローグラフコンパイルおよび実行システム１０００は、データフローグラフコンパイラ１０１５と、パラメータ分析器１０３０と、データフローグラフローダ１０３５と、データフローグラフ実行エンジン１０４０とを含む。コンパイラ１０１５は、パラメータセットデータストア１００５からのパラメータセット内のパラメータに基づいて、未コンパイルのデータフローグラフデータストア１０１０からの、マイクログラフを含む未コンパイルのデータフローグラフを処理する。所定のパラメータに関連する値は、データフローグラフのさまざまな特性のいずれも決定することができる。コンパイラ１０１５は、パラメータセットからの値を使用してデータフローグラフをコンパイルし、コンパイル済みのデータフローグラフを生成する。コンパイル済みのデータフローグラフは、コンパイル済みのデータフローグラフデータストア１０２０に格納される。データストア１０１０および１０２０は、例えば、データ格納システム１０７内でホストされ得る。コンパイラ１０１５、パラメータ分析器１０３０およびローダ１０３５は、例えば、事前実行モジュール１０５の一部として実装することができる。実行エンジン１０４０は、実行モジュール１０６の一部として実装することができる。
【００９２】
パラメータセットデータストア１００５は、パラメータのセットを含み、それぞれのパラメータセットは、データフローグラフに関連し得る。パラメータセットは、パラメータ要素群を含む。これらの要素はパラメータ名および式を含み、評価の際（例えば、計算を実行することによって、および、いくつかの事例では、他の参照されたパラメータの値を見出すことによって）、パラメータにバインドされる値に分解される。それぞれの未コンパイルのデータフローグラフは、１つまたは複数のパラメータセットに関連し得る。いくつかのパラメータは、コンパイルプロセスに影響を及ぼし得る。例えば、いくつかのパラメータは、ある特定の条件付きコンポーネントがデータフローグラフのコンパイル済みのバージョンに含まれているかどうかという点に影響を及ぼし得る。いくつかのパラメータは、コンパイル済みのデータフローグラフのロードおよび着手に影響を及ぼし得る。例えば、パラメータの値は、コンピュータ上に格納されたファイルへの経路、または、入力データを含むかもしくは出力データのターゲットであるデータセットコンポーネントに関連する格納場所（例えば、データベース内の表を表す格納場所）の名前であり得る。パラメータの値は、所定のコンポーネントが実行する必要がある並行方法の数を決定することができる。パラメータの値は、コンポーネントの間のリンクのデータフローが、リンクされたコンポーネントを実行する異なるプロセッサ間および／またはコンピュータ間の境界を超えるかどうかを決定することができ、超える場合は、共有メモリフローよりむしろＴＣＰ／ＩＰフローを割り当てるようにすることができる。いくつかのシナリオでは、パラメータの値は、他のパラメータに依存し得る。例えば、通貨換算ルックアップファイルの名前は、日付を指定するパラメータに依存し得る。
【００９３】
一般に、パラメータは、コンテキストに基づくパラメータスコーピングの規則に従って値にバインドする。所定のパラメータは、第１のコンテキスト内に１つの値を有し、別のコンテキスト内に異なる値を有し得る。パラメータは、コンパイル中（例えば、パラメータがコンパイルプロセスに影響を及ぼす恐れがある場合は、コンパイラ１０１５により）、ランタイム時（例えば、ローダ１０３５がコンパイル済みのデータフローグラフデータ構造を実行エンジン１０４０用のメモリにロードする際）、データフローグラフを実行する間（例えば、ファイルの読み取りまたは書き込み直前まで、ファイル名を提供するパラメータの分解を遅延する）、または、いくつかの事例では、異なる時間の組合せで、値にバインドすることができる。パラメータの値は、例えば、ユーザがユーザインターフェース上で定義しても（例えば、プロンプトに応じて）、データソースに含まれるファイルから定義しても、同じコンテキストまたは異なるコンテキスト内の別のパラメータの面から定義してもよい。例えば、パラメータは、パラメータに別のパラメータに対して「同じ」関係を有するように指定することによって、異なるコンテキストからインポートすることができる（例えば、異なるコンポーネントのコンテキストにおいて評価されたパラメータ）。
【００９４】
データフローグラフ用のパラメータは、コンパイル中（例えば、コンパイラ１０１５により）など、いかなる入力データも受信する前にバインドすることができる。データフローグラフのコンパイル前またはコンパイル中にバインドされるそのようなパラメータは、「静的パラメータ」と呼ばれる。データフローグラフ用のパラメータは、ランタイム直前（例えば、ローダ１０３５により、データフロー内の新しいデータバッチまたは初期の作業単位を受信する工程に応じて）またはランタイム中（例えば、実行エンジン１０４０により、新しいマイクログラフをロードして、データフロー内の新しい作業単位を取り扱う工程に応じて）など、新しい入力データを受信する工程に応じてバインドすることもできる。データフローグラフのコンパイル後およびランタイム前後にバインドされるそのようなパラメータは、「動的パラメータ」と呼ばれる。いくつかの事例では、動的パラメータは、データフロー内のそれぞれの新しいデータバッチまたは作業単位を再評価する必要はない。静的パラメータは、通常、グラフをコンパイルする間に評価され、コンパイル済みのデータフローグラフに影響を及ぼす恐れがある。しかし、静的パラメータは、例えば、ランタイムまでコンパイルが起こらなければ、ランタイム時に評価することも可能である。動的パラメータはランタイム時に評価され、データフローグラフの開始の全体的な待ち時間に貢献することができるため、動的パラメータ評価は、いくつかの実施形態では、動的パラメータの能力を制限することによって最適化することができる。例えば、動的パラメータは、特定のデータタイプ（例えば、ストリング）に制限することができ、ある特定の式では動的パラメータを参照しない場合があり、より制限された結合を有し得る（例えば、「同じ」結合によって直接的または間接的に参照されない）。しかし、他の実施形態では、動的パラメータは、それらの機能性において制限されない場合があり、他のパラメータと同じように利用される。
【００９５】
コンパイラ１０１５がコンパイルプロセス中に静的パラメータと動的パラメータを区別することを可能にするさまざまな方法がある。一技法は、パラメータセット内の動的パラメータに対するフラグまたは特別な構文を使用し、動的パラメータをバインドしないままにすべきであることをコンパイラに信号伝達する。別の技法は、パラメータセットの静的パラメータと動的パラメータを異なるサブセットに分離し、静的パラメータのサブセットのみをコンパイラ１０１５に提供する。次いで、動的パラメータのサブセットをランタイム時にローダ１０３５に提供する。コンパイラ１０１５は、動的パラメータを分解した値にバインドすることはしないが、コンパイラ１０１５は、依然として、コンパイル中に動的パラメータをチェックする（例えば、不法な構文または他のエラーに対して）よう構成することができる。所定の式は、静的パラメータと動的パラメータの両方のリファレンスを含み得る。例えば、静的ディレクトリ名パラメータは、コンパイラ１０１５によって分解できるが、動的ファイル名パラメータは、未分解のまま残すことができ、コンパイラ１０１５は、コンパイルプロセスの間、未分解動的パラメータリファレンスを保存することができるが、その理由は、動的パラメータとして認識されるためである。
【００９６】
いくつかのシナリオでは、パラメータの存在または値は、データフローグラフ内のコンポーネントのトポロジおよび／または接続性に影響を及ぼす恐れがある。パラメータは、１つまたは複数のコンポーネントによって実行されるオペレーションが、グラフの特定の実行の間は実行すべきではないことを示す場合がある。これは、同じデータフローグラフが２つの異なるデータソース上で使用される場合に特に関連し得る。例えば、一方のデータソースは、第１の形式（例えば、ＵＴＦ−８）であり得、他方のソースは、少なくとも一部の文字に対して異なるエンコードを使用する第２の形式のテキストを含み得る。両方のデータソースを処理するデータフローグラフは、第２の形式のテキストをＵＴＦ−８形式に変換する必要がある場合がある。しかし、ＵＴＦ−８データソースにアクセスする際、いかなる変換も必要とされないであろう。パラメータを使用して、データは既にＵＴＦ−８形式であること、および、変換コンポーネントを擦り抜けられることをデータフローグラフに通知することも可能である。いくつかの構成では、パラメータ値に基づく条件付きコンポーネントの除外により、条件付きコンポーネントを取り外し、コンパイル済みのデータフローグラフ内のデータフローと置き換えることができる。条件付きコンポーネントの追加の説明については、参照により本明細書に組み込まれる米国特許第７，１６４，４２２号に記載されている。
【００９７】
図１０を再度参照すると、コンパイラ１０１５は、未コンパイルのデータフローグラフデータストア１０１０から未コンパイルのデータフローグラフを入手する。コンパイラ１０１５は、パラメータセットデータストア１００５からデータフローグラフをコンパイルするために使用されるパラメータセットを入手する。いくつかの事例では、複数の異なるパラメータセットを所定のデータフローグラフに使用することができ、それぞれのパラメータセットに対して、グラフコンパイラ１０１５は、未コンパイルのデータフローグラフの対応するバージョンをコンパイルすることができる。データフローグラフのそれぞれのコンパイル済みのバージョンは、パラメータセット内のパラメータの値に基づいて、いくつかのコンポーネントまたは他の実行可能なステートメントを含んでも除外してもよい。コンパイル済みのデータフローグラフは、例えば、コンパイル済みのデータフローグラフがシリアライズされる場合、コンパイル済みのデータフローグラフの生成に使用されたパラメータセットからのバインドされたパラメータ値と関連付けられる。コンパイル済みのデータフローグラフは、多くの異なるメカニズム（例えば、ルックアップ表、データベースにおける外部キーと主キーとの関係など）を使用して、関連するパラメータセットからのパラメータ値と関連付けられる。コンパイル済みのデータフローグラフデータストア１０２０は、例えば、読み取りおよび書き込み操作が可能な任意のファイルシステムまたはデータベースを使用して実装することができる。
【００９８】
データフローグラフ実行中（「ランタイム」時）、データは、入力データソース１０２５からシステムに入る。入力データソース１０２５は、さまざまな個別のデータソースを含み得、それぞれが独自の格納形式およびインターフェース（例えば、メインフレームによって使用されるデータベース表、スプレッドシートファイル、フラットテキストファイルまたはネイティブ形式）を有し得る。個別のデータソースは、システム１０００とローカルで接続する、例えば、同じコンピュータシステム（例えば、ファイル）をホストとすることも、システム１０００とリモートで接続する、例えば、ローカルまたは広域データネットワーク上でアクセスされるリモートコンピュータをホストとすることもできる。
【００９９】
パラメータ分析器１０３０およびローダ１０３５は、格納されたコンパイル済みのデータフローグラフからデータフローグラフを迅速にロードし、潜在的に長時間のコンパイルプロセスを回避することを可能にする一方で、受信した入力データに応じて、データフローグラフのコンパイル済みの異なるバージョンの間で選択することによってランタイム時の柔軟性を依然として可能にする。パラメータ分析器１０３０は、入力データソース１０２５から入力データを受信する工程に応じて、入力データおよび潜在的にランタイム時まで知られていな可能性がある他の値を分析し、ターゲットデータフローグラフで使用される１つまたは複数のパラメータ（潜在的に静的パラメータと動的パラメータの両方を含む）に対する値を決定する。ターゲットデータフローグラフは、異なるそれぞれのパラメータセットを使用して、コンパイル済みのデータフローグラフデータストア１０２０に格納された異なるバージョンにコンパイルされている未コンパイルのデータフローグラフである。ローダ１０３５は、パラメータ分析器１０３０によって提供される静的パラメータの任意の値をターゲットデータフローグラフのコンパイル済みのバージョンのいずれかを生成するのに使用された可能性のあるそれらの同じパラメータの任意の値と比較して一致するものを見出す。ローダ１０３５が静的パラメータ内で一致するものを見出せば、ローダ１０３５は、動的パラメータを分解しバインドすることができ、実行エンジン１０４０によって着手される結果として得られるデータフローグラフをロードする。ローダ１０３５が静的パラメータ内で一致するものを見出さなければ、ローダ１０３５は、入力データをエラープロセッサ（図示せず）にルーティングすることができるか、または、ローダ１０３５は、非最適化されたデフォルトとして異なる潜在的なパラメータ値を取り扱うことができる利用可能なターゲットデータフローグラフのバージョンを有し得る。あるいは、ローダは、適切な静的パラメータ値を備えたターゲットデータフローグラフの新しいバージョンをコンパイルするよう、コンパイラ１０１５を開始することができる。これらの事例では、必要に応じて、オンザフライでコンパイルすることができる。最初にターゲットデータフローグラフを実行する際は、ランタイム時にコンパイルし、バインドされた静的パラメータを備えた結果として得られたコンパイル済みのデータフローグラフを保存する。次いで、次にターゲットデータフローグラフを実行する際は、所望の静的パラメータ値を備えたコンパイル済みのバージョンが見出せなければ、再コンパイルするのみである。
【０１００】
例えば、パラメータＡ、Ｂ、Ｃ（ＡおよびＢは静的、Ｃは動的）を含むパラメータセットに対し、Ａ＝真およびＢ＝偽を使用してコンパイルされているターゲットデータフローグラフの第１のコンパイル済みのバージョン、ならびに、Ａ＝真およびＢ＝真を使用してコンパイルされている同じターゲットデータフローグラフの第２のコンパイル済みのバージョンについて考慮する。パラメータ分析器１０３０が、受信した作業単位をＡ＝真、Ｂ＝真およびＣ＝真のターゲットデータフローグラフを使用して処理すると判断すれば、第２のコンパイル済みのバージョンをロードすることができ、動的パラメータＣは、ローダ１０３５によってバインドされる。パラメータ分析器１０３０が、受信した作業単位をＡ＝偽、Ｂ＝真およびＣ＝真のターゲットデータフローグラフを使用して処理すると判断すれば、ターゲットデータフローグラフの新しいバージョンを、Ａ＝偽、Ｂ＝真を用い、動的パラメータＣがローダ１０３５によってバインドされた状態で、コンパイラ１０１５でコンパイルする。新たなコンパイル済みのバージョンもまた、後に使用するため、コンパイル済みのデータフローグラフデータストア１０２０に格納することができる。
【０１０１】
ローダ１０３５は、選択されたコンパイル済みのデータフローグラフを、実行されるグラフ実行エンジン１０４０にアクセス可能なメモリにロードし、入力データソース１０２５からの入力データのフローを処理する。いくつかの実施形態では、ローダ１０３５の機能は、実行中のデータフローグラフ内の特殊コンポーネントによって実行され、ロードされたデータフローグラフは、特殊コンポーネントに埋め込まれたマイクログラフである。ローダ１０３５は、必ずしもコンパイル済みのデータフローグラフデータストア１０２０へのアクセスを必要としなくとも、メモリのキャッシュに格納されたまま（適切な静的パラメータ値が使用されたと判断した後）の選択されたコンパイル済みのデータフローグラフの以前にロードされたバージョンにアクセスすることができる。次いで、ロードされたデータフローグラフは、実行エンジン１０４０によって実行される。一旦ターゲットデータフローグラフによって入力データが処理されれば、データフローグラフをシステムからアンロードすることも、後にアクセスするためにキャッシュに格納することもできる。
【０１０２】
一般に、データフローグラフのコンパイルは、グラフを実行可能な形式に変換するプロセスである。実行可能な形式は、プラットホーム特有の形式（例えば、マシンコード）でも、中間形式（例えば、バイトコード）でもあり得る。いくつかの実施形態では、コンパイラ１０１５は、静的パラメータを分解し、データフローグラフを横断し、実行するよう準備した一連のデータ構造に低減する。頂点およびリンクとして表されるデータフローグラフからマシンコードへの変換は、いくつかの工程を含み得る。これらの工程の１つは、データフローグラフを第三世代のプログラミング言語（例えば、Ｃ、Ｃ＃、Ｃ＋＋、Ｊａｖａなど）に変換する動的コードの生成を含み得る。第三世代の言語から、標準コンパイラを使用して、機械可読コードまたはバイトコードを生成することができる。
【０１０３】
いくつかの実施形態では、パラメータを静的パラメータとして取り扱うかまたは動的パラメータとして取り扱うかどうかは、コンパイル時まで決定されない。静的パラメータとして取り扱われる、評価されたパラメータおよびコンパイル済みのデータフローグラフエリアにハードコードされたそれらの値。一方、動的パラメータは、一般に、コンパイル時には評価されないが、代わりに、グラフのロードまたは実行の間に評価される。上記で説明されるように、パラメータセットによって決定された値は、ランタイム時の高速ロードおよび実行のためのデータフローグラフの異なるコンパイル済みのバージョンを準備する目的で使用される。パラメータセットからのパラメータの値がコンパイル済みのグラフに有効な唯一の可能な値を確実に定義する事例では、値はコンパイル済みのデータフローグラフにコード化され、パラメータは静的パラメータとして取り扱われる。パラメータセットからのパラメータの値が可能な値の範囲を提供する他の事例では、パラメータは、コンパイル時には静的パラメータとして評価されない場合があるが、代わりに、ロード時またはランタイム時に動的パラメータとして評価される場合がある。
【０１０４】
また、コンパイルプロセスの間、コンパイラは、例えば、不要な実行可能ステートメントを排除することによって、データフローグラフを最適化することができる。例えば、データフローグラフは、条件付きコンポーネントを含み得る。条件付きコンポーネントは、１つまたは複数のパラメータの値に基づいて、コンパイル済みのデータフローグラフに含まれるかまたは同データフローグラフから除外される一連の実行可能ステートメントを含み得る。条件付きコンポーネントは、グラフの最適化または特殊化など、さまざまな目的のために使用することができる。グラフの最適化に対し、データセットからの値を使用しない場合は、アプリケーションはデータセットの処理または作成を省略することができ、したがって、グラフをより効果的に実行することができる。グラフの特殊化に対し、アプリケーションは、所望の詳細レベルに基づいて、いくつかの異なる出力データセットの生成を条件付ける場合も、グラフのいくつかの任意選択の部分の１つの実行を可能にする場合もある。
【０１０５】
上記で説明される手法は、コンピュータ上で実行するためのソフトウェアを使用して実施することができる。例えば、ソフトウェアは、１つまたは複数のプログラムされたまたはプログラム可能なコンピュータシステム（それは、分散型、クライアント／サーバまたは格子などのさまざまなアーキテクチャのものである）上で実行する１つまたは複数のコンピュータプログラムの手順を形成する。コンピュータシステムはそれぞれ、少なくとも１つのプロセッサと、少なくとも１つのデータ格納システム（揮発性および不揮発性、持続性メモリ、ならびに／または、格納要素を含む）と、少なくとも１つの入力デバイスまたはポートと、少なくとも１つの出力デバイスまたはポートとを含む。ソフトウェアは、例えば、計算グラフの設計および構成に関連する他のサービスを提供する大規模なプログラムの１つまたは複数のモジュールを形成することができる。グラフのノードおよび要素は、コンピュータ可読媒体に格納されたデータ構造、または、データリポジトリに格納されたデータモデルに適合する他の組織化されたデータとして実装することができる。
【０１０６】
ソフトウェアは、汎用もしくは特殊用途のプログラム可能なコンピュータによる読み取りが可能なＣＤ−ＲＯＭなどの記憶媒体上で提供されるか、または、ネットワークの通信媒体上で、ソフトウェアが実行されるコンピュータに送達される（伝播信号で符号化される）。機能のすべては、特殊用途のコンピュータ上か、または、コプロセッサなどの特殊用途のハードウェアを使用して実行される。ソフトウェアは、ソフトウェアによって指定される計算の異なる部分は異なるコンピュータによって実行される分散様式で実施される。それぞれのそのようなコンピュータプログラムは、好ましくは、汎用もしくは特殊用途のプログラム可能なコンピュータによる読み取りが可能な記憶媒体もしくはデバイス（例えば、ソリッドステートメモリもしくは媒体、または、磁気もしくは光媒体）上に格納されるか、または、同記憶媒体もしくはデバイスにダウンロードされるが、それは、コンピュータシステムで記憶媒体もしくはデバイスを読み取り、本明細書に記載される手順を実行する際にコンピュータを構成および動作するためである。また、本発明のシステムは、コンピュータ可読記憶媒体として実装され、コンピュータプログラムを用いて構成されるものと考慮され得、そのように構成された記憶媒体は、特定の事前に定義された様式でコンピュータシステムを動作させ、本明細書に記載される機能を実行する。
【０１０７】
本発明の多くの実施形態について説明してきた。それにもかかわらず、本発明の精神および範囲から逸脱することなく、さまざまな変更が行われることが理解されよう。例えば、上記で説明された工程のいくつかは、順番に依存しないものであり得、したがって、説明されている順番とは異なる順番で実行することができる。
【０１０８】
前述の説明は、例示を意図するものであり、本発明の範囲を限定するものではなく、本発明の範囲は、添付の特許請求の範囲によって定義されることを理解されたい。他の実施形態は、以下の特許請求の範囲内にある。
【図１】
0005898188.tif 000002
【図２】
0005898188.tif 000003
【図３Ａ】
0005898188.tif 000004
【図３Ｂ】
0005898188.tif 000005
【図４】
0005898188.tif 000006
【図５Ａ】
0005898188.tif 000007
【図５Ｂ】
0005898188.tif 000008
【図６】
0005898188.tif 000009
【図７】
0005898188.tif 000010
【図８】
0005898188.tif 000011
【図９Ａ】
0005898188.tif 000012
【図９Ｂ】
0005898188.tif 000013
【図１０】
0005898188.tif 000014