(57)【特許請求の範囲】
【請求項１】
コンポーネント・ベースのデータ・ストリーム処理アプリケーションにおいて、複数のコンポーネント間の相互接続を動的に変更する方法であって、コンピュータが、
データ・ストリームを生成する出力ポートと、データ・ストリームを消費する入力ポートとを各々が含む複数のコンポーネントを含むアプリケーション内の複数の出力ポートの各々について、対応する前記出力ポートによって生成されるデータの特性を記述するデータ・プロデューサ・プロファイルを受け取るステップと、
前記アプリケーションの複数のコンポーネントの入力ポートの各々について、前記入力ポートによって消費されるデータの特性を記述するデータ・サブスクリプション・プロファイルを受け取るステップと、
前記受け取ったデータ・プロデューサ・プロファイルと前記受け取ったデータ・サブスクリプション・プロファイルとの比較に基づいて、前記アプリケーション内の前記複数のコンポーネントの出力ポートと入力ポートとの間に接続を確立するステップと、
１又は複数のプロセッサ上で前記データ・ストリーム処理アプリケーションを実行して、データのストリームの１又は複数を処理するステップと、
前記アプリケーションの前記実行中に、新たなデータ・プロデューサ・プロファイルまたは新たなデータ・サブスクリプション・プロファイルの一方または両方を受け取るステップと、
前記受け取った新たなデータ・プロデューサ・プロファイルと前記受け取ったデータ・サブスクリプション・プロファイルとの比較、前記受け取ったデータ・プロデューサ・プロファイルと前記受け取った新たなデータ・サブスクリプション・プロファイルとの比較、又は、前記受け取った新たなデータ・プロデューサ・プロファイルと前記受け取った新たなデータ・サブスクリプション・プロファイルとの比較に基づいて、出力ポートと入力ポートとの間に少なくとも１つの新たな接続を確立するステップと
を実行することを含む、前記方法。
【請求項２】
前記コンピュータが、
前記アプリケーションの実行中に、既存のデータ・プロファイルおよび既存のサブスクリプション表現のうちの少なくとも１つに対する変更を受け取るステップ
をさらに実行することを含む、請求項１に記載の方法。
【請求項３】
前記データ・プロデューサ・プロファイルを受け取るステップが、アプリケーション開発中のデータ・プロファイルの指定、および、複数の実行時アプリケーション・プログラミング・インターフェースを通じた実行中の前記アプリケーションによる前記データ・プロファイルのプログラム的指定のうちの少なくとも１つを含む、請求項１に記載の方法。
【請求項４】
前記データ・サブスクリプション・プロファイルを受け取るステップが、アプリケーション開発中のデータ・サブスクリプションの指定、および、複数の実行時アプリケーション・プログラミング・インターフェースを通じた実行中の前記アプリケーションによる前記データ・サブスクリプションのプログラム的指定のうちの少なくとも１つを含む、請求項１に記載の方法。
【請求項５】
前記コンピュータが、
前記データのストリームの１又は複数を処理するステップが、実行時実行ユニットをシステムの処理ノード上に配置し、前記実行時実行ユニットを実行するステップ
をさらに実行することを含む、請求項１に記載の方法。
【請求項６】
新たな接続を確立するステップが、アプリケーション配置時および実行時に、プログラミング言語構造および実行時アプリケーション・プログラミング・インターフェースをそれぞれ用いて、データ源である各プロデューサとデータ受信側である各コンシューマとの間に動的なデータ接続を確立するステップを含む、請求項１に記載の方法。
【請求項７】
新たな接続を確立するステップが、データ・プロデューサ・プロファイル特性とデータ・サブスクリプション・プロファイル特性との間の合致の判定に従って、前記アプリケーションおよび外部データ・ソース内の出力ポートを、前記アプリケーション内の入力ポートに動的に相互接続するステップをさらに含む、請求項１に記載の方法。
【請求項８】
前記コンピュータが、
実行時に前記データ・プロデューサ・プロファイルおよび前記データ・サブスクリプション・プロファイルを操作するステップ
をさらに実行することを含む、請求項７に記載の方法。
【請求項９】
前記データ・プロデューサ・プロファイルを操作するステップが、
データ・プロデューサ・プロファイル・プロパティを、前記各出力ポートによって生成される各データ項目の値の関数として動的に操作するステップと、
データ・プロデューサ・プロファイル・プロパティを、前記各出力ポートによって生成される各データ項目のボリュームの関数として動的に操作するステップと、
プロファイル・マネージャに照会するステップと
を含む、請求項８に記載の方法。
【請求項１０】
前記データ・サブスクリプション・プロファイルを操作するステップが、
ストリーム・サブスクリプション表現を変更するステップと、
サブスクリプション関数を修正するステップと
を含む、請求項８に記載の方法。
【請求項１１】
前記接続を確立するステップが、
計算されたルートをメモリ内に格納するステップと、
前記データ・プロデューサ・プロファイルおよび前記データ・サブスクリプション・プロファイルのうちの少なくとも１つに変化が生じたことに応じて、前記メモリ内に格納された情報を更新するステップと
をさらに含む、請求項１に記載の方法。
【請求項１２】
出力ポートによって生成される前記データの特性が、前記データのソースが搬送する全てのデータに適用されるプロファイルの形式で表された特性を含む、請求項１に記載の方法。
【請求項１３】
入力ポートによって消費されるデータの特性が、宣言型サブスクリプション表現、手続型サブスクリプション技法、およびデータ・ソース・プロファイル・プロパティ上で定義された論理述語のうちの少なくとも１つを含む、請求項１に記載の方法。
【請求項１４】
前記コンピュータが、
ＸＰＡＴＨベースのコンシューマ・サブスクリプション表現を動的に変更するステップ
をさらに実行することを含む、請求項１に記載の方法。
【請求項１５】
前記コンピュータが、
出力ポートによって生成されたエクスポートされたデータの特性のエクスポートされた記述を動的に変更するステップ
をさらに実行することを含む、請求項１に記載の方法。
【請求項１６】
前記コンピュータが、
データ受信側であるコンシューマに接続されるデータ源の集合に制約を課すために前記コンシューマによって利用される順位付け基準を、作成および修正するステップ
をさらに実行することを含む、請求項１に記載の方法。
【請求項１７】
前記コンピュータが、
トリガ機構を用いてストリームの合致を動的に計算するステップ
をさらに実行することを含み、
前記ストリームの合致を計算するステップは、
各サブスクリプション表現および各サブスクリプション関数を登録するステップと、
新たに登録されたストリーム上の各サブスクリプション表現および各サブスクリプション関数のうちの少なくとも１つに基づき、トリガ条件を評価するステップと、
ストリーム・プロパティにおける変化に基づき、トリガ条件を評価するステップと、
サブスクリプション表現およびサブスクリプション関数のうちの少なくとも１つにおける変化に応じて、トリガ条件を評価するステップと
を含む、請求項１に記載の方法。
【請求項１８】
コンポーネント・ベースのデータ・ストリーム処理アプリケーションにおいて、複数のコンポーネント間の相互接続を動的に変更するコンピュータ・プログラムであって、コンピュータに、請求項１〜１７のいずれか一項に記載の方法の各ステップをコンピュータに実行させる、前記コンピュータ・プログラム。
【請求項１９】
コンポーネント・ベースのデータ・ストリーム処理アプリケーションにおいて、複数のコンポーネント間の相互接続を動的に変更するシステムであって、請求項１〜１７のいずれか一項に記載の方法の各ステップを実行する手段を備えている、前記システム。
【請求項２０】
コンポーネント・ベースのデータ・ストリーム処理アプリケーションにおいて、複数のコンポーネント間の相互接続を動的に変更するためのプログラムであって、コンピュータに、
データ・ストリームを生成する出力ポートと、データ・ストリームを消費する入力ポートとを各々が含む複数のコンポーネントを含むアプリケーション内の複数の出力ポートの各々について、対応する前記出力ポートによって生成されるデータの特性を記述するデータ・プロデューサ・プロファイルを受け取るステップと、
前記アプリケーションの複数のコンポーネントの入力ポートの各々について、前記入力ポートによって消費されるデータの特性を記述するデータ・サブスクリプション・プロファイルを受け取るステップと、
前記受け取ったデータ・プロデューサ・プロファイルと前記受け取ったデータ・サブスクリプション・プロファイルとの比較に基づいて、前記アプリケーション内の前記複数のコンポーネントの出力ポートと入力ポートとの間に接続を確立するステップと、
１又は複数のプロセッサ上で前記データ・ストリーム処理アプリケーションを実行して、データのストリームの１又は複数を処理するステップと、
前記アプリケーションの前記実行中に、新たなデータ・プロデューサ・プロファイルまたは新たなデータ・サブスクリプション・プロファイルの一方または両方を受け取るステップと、
前記受け取った新たなデータ・プロデューサ・プロファイルと前記受け取ったデータ・サブスクリプション・プロファイルとの比較、前記受け取ったデータ・プロデューサ・プロファイルと前記受け取った新たなデータ・サブスクリプション・プロファイルとの比較、又は、前記受け取った新たなデータ・プロデューサ・プロファイルと前記受け取った新たなデータ・サブスクリプション・プロファイルとの比較に基づいて、出力ポートと入力ポートとの間に少なくとも１つの新たな接続を確立するステップと
を実行させる、前記プログラム。
【請求項２１】
コンポーネント・ベースのデータ・ストリーム処理アプリケーションにおいて、複数のコンポーネント間の相互接続を動的に変更するシステムであって、
１又は複数のプロセッサと、
前記１又は複数のプロセッサに結合されたメモリと、
データ・ストリームを生成する出力ポートと、データ・ストリームを消費する入力ポートとを各々が含む複数のコンポーネントを含むアプリケーション内の複数の出力ポートの各々について、対応する前記出力ポートによって生成されるデータの特性を記述するデータ・プロデューサ・プロファイルを受け取るプロファイル・マネージャと、
前記アプリケーションの複数のコンポーネントの入力ポートの各々について、前記入力ポートによって消費されるデータの特性を記述するデータ・サブスクリプション・プロファイルを受け取るサブスクリプション表現マネージャ・モジュールと
を備えており、
前記受け取ったデータ・プロデューサ・プロファイルと前記受け取ったデータ・サブスクリプション・プロファイルとの比較に基づいて、前記アプリケーション内の前記複数のコンポーネントの出力ポートと入力ポートとの間に接続を確立する、前記システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般に情報技法に関し、より具体的にはデータ・ストリーム処理に関する。
【背景技術】
【０００２】
ストリーム処理の計算パラダイムは、ソフトウェアまたはハードウェア・センサの集まりから読み取ったデータを同化してストリーム形態（すなわち、外部データ源によって生成された情報を搬送するタプルの無限の集合）とすること、そのデータを分析すること、可能な場合にアクション可能な結果をストリーム形式で生成すること、を含む。ストリーム処理アプリケーションはコンポーネントとして構成され得る。各々のコンポーネントは、アプリケーション内の他のコンポーネントによって消費され得るデータ・ストリームを生成することができる。例えば、交通管理システムにおいては、携帯電話を携帯する各運転者が、その位置および速度に関する情報を交通渋滞制御システムに供給するデータ源になると考えることができる。このような状況において、分散型交通管理プラットフォームのデータ収集部は、その渋滞予測の精度を高めるために、全ての可能なデータ源（例えば、特定の地域内で携帯電話を携帯している全ての運転者）にサブスクライブすることにその関心を示すことがある。従って、データ源の自動的なルーティングを提供する必要性が存在する。上記の事例の場合、交通事故の発生位置に加えて、運転者の速度および位置を捕捉する即時の読取値、ならびに道路補修スケジュールを、データ・コンシューマ（この例では交通および渋滞管理システム・プラットフォーム）までルーティングすることを含むことができる。
【０００３】
典型的には、ストリーム処理アプリケーションは、多数の処理ノードにわたって分散され、その他の多くの潜在的に相互接続されたストリーム・アプリケーションをホストするシステム上に配置された、数十から数百の分析演算器を含むことができる。既存の手法の場合、アプリケーションを相互接続しまたは複数のアプリケーションを統合させるフロー・グラフの実装は、アプリケーション内接続またはアプリケーション間接続をハード・コード化するか、または、スケーラビリティの問題に関わる多くの短所を有するパブリッシャ−サブスクライブもしくはエンタープライズ・バス・タイプの機構によって、通常、アドホックな方式で達成される。
【０００４】
プロデューサによるデータの生成は、アプリケーションの実行に比べて断続的なものとなる場合がある。例えば、インフラストラクチャ監視の分野（例えば、交通管理システム、エネルギー供給システム、大規模小売業サプライチェーン管理システム、分散型の不正および異常検出システム、監視システムなど）において開発されている大規模分散型アプリケーションは、周到に計画されたメンテナンスのための停止期間以外は連続的に稼動し続けるように設計される長期稼動型アプリケーションになる傾向にある。その上、このようなアプリケーションは、例えば、渋滞を減らすために、交通センサが自動化交通制御を駆動させるようにするなど、互いに協働するように設計されていることが多い。
【０００５】
多くの場合、既存のアプリケーションにデータを送る生のデータ源のうちのある種のものは一過性であるので、このようなデータ源は、様々な時間粒度（すなわち、数秒から数日までの）で連続的に使用可能状態になったり、使用不能状態になったりすることがある。このような状況において、プラットフォームのデータ収集部は、全ての可能な生のデータ源にサブスクライブすることにその関心を示すことがある。従って、データ・コンシューマまでのデータ源の自動的なルーティングを提供する必要がある。
【０００６】
既存の手法は、パブリッシュ／サブスクライブ・システムを含む。しかし、パブリッシュ／サブスクライブ・システムは、プロデューサの粒度ではなく、プロデューサによって生成された個々のデータ項目の粒度で、データ特性を記述する。このような手法は、データ源の粒度での注釈付けとは対照的な個々のデータ項目の注釈付けに関連する非効率性により、非実用的である。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Ｇｅｄｉｋ他、「ＳＰＡＤＥ：Ｔｈｅ  Ｓｙｓｔｅｍ  Ｓ  Ｄｅｃｌａｒａｔｉｖｅ  Ｓｔｒｅａｍ  Ｐｒｏｃｅｓｓｉｎｇ  Ｅｎｇｉｎｅ」、ＳＩＧＭＯＤ  Ｃｏｎｆｅｒｅｎｃｅ  ２００８、ｐ．１１２３−１１３４
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の目的は、アプリケーション内のコンポーネント間の相互接続を動的に変更するための技法を提供することにある。
【課題を解決するための手段】
【０００９】
本発明の原理および実施形態は、データ・ストリーム処理アプリケーションを動的に構成するための技法を提供する。コンポーネント・ベースのデータ・ストリーム処理アプリケーションにおいて、複数のコンポーネント間の相互接続を動的に変更するための例示的な方法（これは、コンピュータ実装することができる）は、本発明の１つの態様によれば、プロセッサ上で実行されるソフトウェア・アプリケーション内の複数の出力ポートの各々についてデータ・プロデューサ・プロファイルを受け取るステップであって、アプリケーションが、データ・ストリームを生成する出力ポートと、データ・ストリームを消費する入力ポートとを各々が含む複数のコンポーネントを含み、各データ・プロデューサ・プロファイルが、対応する出力ポートによって生成されるデータの特性を記述する、ステップと、アプリケーションの複数のコンポーネントの入力ポートの各々についてデータ・サブスクリプション・プロファイルを受け取るステップであって、各データ・サブスクリプション・プロファイルが、入力ポートによって消費されるデータの特性を記述する、ステップと、受け取ったデータ・プロデューサ・プロファイルと受け取ったデータ・サブスクリプション・プロファイルとの比較に基づいて、アプリケーション内の複数のコンポーネントの出力ポートと入力ポートとの間に接続を確立するステップと、プロセッサ上でデータ・ストリーム処理アプリケーションを実行して、データのストリームを処理するステップと、アプリケーションの実行中に新たなデータ・プロデューサ・プロファイルまたは新たなデータ・サブスクリプション・プロファイルの一方または両方を受け取るステップと、新たなデータ・プロファイルを含む受け取ったデータ・プロファイルの改訂された比較に基づいて、出力ポートと入力ポートとの間に少なくとも１つの新たな接続を確立するステップとを含むことができる。
【００１０】
本発明の実施形態、またはその要素は、指示された方法ステップを実施するためのコンピュータ使用可能プログラム・コードを有する有形のコンピュータ可読ストレージ媒体を含む、コンピュータ製品の形で実装することができる。さらに、本発明の実施形態、またはその要素は、メモリと、該メモリに結合されるとともに例示的な方法ステップを実施するように動作可能な少なくとも１つのプロセッサとを含む、装置の形で実装することができる。さらにまた、別の態様において、本発明の実施形態、またはその要素は、ここで説明される方法ステップのうちの実行するための手段の形で実装することが可能であり、その手段は、（ｉ）ハードウェア・モジュール、（ｉｉ）ソフトウェア・モジュールおよび／またはコンポーネント、または（ｉｉｉ）ハードウェアとソフトウェア・モジュール／コンポーネントとの組合せを含むことができる。（ｉ）−（ｉｉｉ）のいずれも、ここで述べられる具体的な技法を実装し、ソフトウェア・モジュール／コンポーネントは、有形のコンピュータ可読記憶媒体（または複数のそのような媒体）内に格納され得る。
【００１１】
本発明の目的、特徴、および利点は、添付の図面との関連で読まれるべき本発明の例示的な実施形態の以下の詳細な説明から明らかとなるであろう。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態による、コンポーネント・ベースのアプリケーションにおける複数のコンポーネント間の相互接続の動的な修正を示す図である。
【図２】本発明の実施形態による、ＸＰＡＴＨベースの構成機構のための例示的な構文を示す図である。
【図３】本発明の実施形態を実装するために用いられる多重コンポーネント装置の例示的な編成を示す図である。
【図４】本発明の実施形態による、プロファイル・マネージャ・コンポーネントによって保持される、アプリケーションにより生成されたストリームに関連付けられた拡張マーク付け言語（ＸＭＬ）でコード化されたプロファイルの例示的なリストを示す図である。
【図５】本発明の実施形態による、新たなアプリケーションの配置が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が作成されるものとして、どのようにフロー・グラフにおける修正をトリガするかを示す流れ図である。
【図６】本発明の実施形態による、新たなアプリケーションの終了が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が破棄されるものとして、どのようにフロー・グラフにおける修正をトリガするかを示す流れ図である。
【図７】本発明の実施形態による、ストリームに関連付けられたプロパティを記述するストリーム・プロファイルの修正が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が作成されおよび／または破棄されるものとして、どのようにフロー・グラフにおける修正をトリガするかを示す流れ図である。
【図８】本発明の実施形態による、コンポーネントの入力ポートに関連付けられたサブスクリプション表現の修正が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が作成されおよび／または破棄されるものとして、どのようにフロー・グラフにおける修正をトリガするかを示す流れ図である。
【図９】本発明の実施形態による、コンポーネントの入力ポートに関連付けられたサブスクリプション関数の修正が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が作成されおよび／または破棄されるものとして、どのようにフロー・グラフにおける修正をトリガするかを示す流れ図である。
【図１０】本発明の実施形態による、コンポーネントの入力ポートに関連付けられたサブスクリプション順位付け基準の修正が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が作成されおよび／または破棄されるものとして、どのようにフロー・グラフにおける修正をトリガするかを示す流れ図である。
【図１１】本発明の実施形態による、コンポーネント・ベースのデータ・ストリーム処理アプリケーションにおける複数のコンポーネント間の相互接続を動的に修正するための技法を示す流れ図である。
【図１２】本発明の少なくとも１つの実施形態を実装することが可能な、例示的なコンピュータ・システムのシステム図である。
【発明を実施するための形態】
【００１３】
本発明の原理は、プロファイル・ベースの動的なアプリケーション構成を含む。高性能分散コンピューティング方式のストリーム処理ミドルウェアは、各アプリケーションがデータ源（プロデューサ）として機能する幾つかのコンポーネントと、データ受信側（コンシューマ）として機能するコンポーネントとを潜在的に含む、同時に実行される複数のアプリケーションをサポートすることができる。本発明の実施形態は、そのようなアプリケーションにより生成されるデータの特性をプロデューサの粒度で記述するための技法、各コンシューマにより必要とされるデータの特性を記述するための技法、ならびに、適切なプロデューサからコンシューマへのデータの動的なマッチングおよびルーティングのための技法を提供する。
【００１４】
ここで詳述される技法は、アプリケーションの種々のコンポーネント間のデータ・フローの構造を判定し、データ交換のために必要な物理ルートおよび接続を確立することによって、分散型アプリケーションを動的に構成することを含む。さらに、本技法は、プロデューサ・レベルの特性（またはプロパティ）、プロデューサ・プロパティに基づくコンシューマ・サブスクリプション、ならびに各コンシューマに合致するプロデューサに優先順位を付ける順位付け関数を、動的に操作する（例えば、照会する、挿入する、削除する、および／または変更する）ための方法を含む。
【００１５】
大規模な分散型アプリケーションにおいて、本発明の実施形態は、論理サブスクリプション指定を可能にする、アプリケーションにとって意味のある方式（application-meaningful way）でデータ源の位置を探索することを含む。本発明の実施形態では、単にデータ源の名称（これは、典型的には配置時まで知ることができない）に依存するのではなく、よりリッチなプロパティを用いてプロデューサ／コンシューマ関係を推論し、確立することができる。
【００１６】
さらに、潜在的に大規模なデータ源の集合を扱う場合、ここで説明される技法はスケーラビリティを提供する。本発明の実施形態は、データ・プロデューサを、データ・サブスクリプション表現を満たすことができる多数のデータ源にうまく対処する組み込み機構を有するデータ・コンシューマに接続させるために用いられる、構成機構を含む。また、ここで詳述される技法は、データ・コンシューマに動的に接続されるべきデータ源を順位付けし、その数に制約を課すことを含む。このような順位付け機構は、プログラム的に記述することも可能であるので、データ消費アプリケーションは、アプリケーション特有の基準に従って、どのデータ源を用いるべきか優先順位を付けることができる。
【００１７】
また、データ・コンシューマは、例えば最大総取込みレートに従って処理されるデータ源の数を制限するために取り込むことができるデータ量の観点からの予測値（budget)を有し、また、例えばそのコンシューマ特有のノイズ・レベルまたはその他の領域特有の品質基準に従ってデータ源をフィルタリングするために処理することができるデータの質の観点からの閾値を有していることが多い。本発明の実施形態は、コンシューマをプロデューサに接続させる場合に、そのような属性にも同様に基づいて接続を確立し、順位付けするための選択肢をコンシューマに与えることを容易にする。
【００１８】
さらに、ここで説明される技法は、データ特性における変化に従う（長期稼動型）アプリケーションの挙動の自己修正を容易にする。これは、例えば、内容に関して潜在的に起こり得る（例えば、交通量の突然の減速は、交通事故が直近に発生したかどうかを評価するために特定の場所からの映像データの消費をトリガするかもしれない）。
【００１９】
アプリケーションは長期稼動し得る一方で、データ源は分散型システム内に絶え間なく導入され、かつ切り離すことができる。本発明の実施形態は、データ源と適当なコンシューマとの間で、必要な接続を自動的に確立することを含む。その上、システム内のデータ源の数は潜在的に莫大なものになり得る。それゆえ、各コンシューマにおけるデータ源の明示的な命名ではなく、論理述語ベースのデータ・サブスクリプションの方が、煩瑣な人力集約的設計に代わるスケーラブルなアプリケーション設計を可能とすることができる。
【００２０】
また、各データ源により生成されるデータの量および質は潜在的に変化し得る。本発明の実施形態は、データ特性における変化、ならびに実行されている分析における変化に従って、アプリケーションが、自身の挙動を修正することを可能にする。ここで説明される技法はまた、アプリケーションの種々のコンポーネントが分散型システム内で共存するための、共生的かつ協調的な環境も提供する。
【００２１】
本発明の実施形態は、アプリケーションのパラメータ化を行うことを含む。すなわち、アプリケーションの挙動を、データのプロパティに応じてパラメータ化することができる。例えば、データ処理の特定部分を、異なるデータ源に対して反復することかできる。
【００２２】
ここで説明されるように、本発明の実施形態は、分散型アプリケーション内のデータのプロデューサとコンシューマとを動的に相互接続するための機構を含む。データ源は、プロデューサによって生成されるデータのプロパティならびにその他のプロデューサ特有のプロパティ（例えば、プロデューサがどこにどのように配置されているかということに関するプロパティ、実行時環境から推論されるプロパティなど）に基づいて記述することができる。
【００２３】
また、これらのプロパティに対して演算を行い、最終的には真または偽として評価し、プロデューサ／コンシューマ関係を作成するかべきか否かを示す論理条件および／または手続型関数に基づいて、データ・サブスクリプションを構築することができる。例えば、サブスクリプションは、表現ベースとすることができる。すなわち、拡張マーク付け言語（ＸＭＬ）パス言語（ＸＰＡＴＨ）ベースの構文を用いてサブスクリプション述語を述べる宣言型表現の形を取ることもでき、またはプロパティに対するブール表現とすることもできる。
【００２４】
図１は、本発明の実施形態による、コンポーネント・ベースのアプリケーションにおける複数のコンポーネント間の相互接続の動的な修正を示す図である。例として、図１は、プロデューサ（データ源）１０２ならびにコンシューマ（データ受信側）１１６を示す。プロデューサ１０２は、出力ポート（例えば出力ポート１０４）と、ストリーム・プロファイル（例えばストリーム・プロファイル１０６）とを含む。プロデューサは、ストリーム・プロパティ（例えばストリーム・プロパティである「エントロピー」など）、ならびにストリーム・プロパティ値を含むこともできる。
【００２５】
コンシューマ１１６は、入力ポート（例えば入力ポート１１０）、ならびにホスト上で実行されるアプリケーション論理を実装する処理要素（例えば処理要素１１２）を含む。コンシューマは、ストリーム・サブスクリプション表現（例えば、ストリーム・サブスクリプション表現１１４の「エントロピー＜１５」など）を含むこともできる。図１は、プロデューサとコンシューマとの間のストリーム接続（例えばストリーム接続１０８）も示す。
【００２６】
図２は、本発明の実施形態による、ＸＭＬパス言語（ＸＰＡＴＨ）ベースの構成機構のための例示的な構文を示す図である。例として、図２は、３つのプロパティを有するストリーム・プロファイルを含むデータ・プロデューサ・アプリケーション２０２、ならびにＸＰＡＴＨベースのインポート・サブスクリプション表現を含むデータ・コンシューマ・アプリケーション２０４を示す。図２は、アプリケーションのデータ・フロー表現を含むブロック図を示す。さらに、本発明の実施形態は、サブスクリプションに合致する個々のデータ源の重要度を評価するために用いることができる順位付け技法を含む。このような順位付け機構は、特定のコンシューマに対して物理的に確立されるだろうプロデューサ／コンシューマ関係の最大数に制約を課すことを可能にする。
【００２７】
ここで詳述される技法は、言及されるように、アプリケーション論理を他のコンポーネントおよびアプリケーション由来のデータ・フローから切り離すことによる、アプリケーションのインクリメントな配置、ならびに、データの質、量、可用性、とりわけシステムに課せられる全体としての負荷における変化に応じた、アプリケーションの進化および動的な適合を可能にすることを含む。
【００２８】
本発明の実施形態におけるデータの各プロデューサは、データ・プロファイルに関連付けられる。例として、ストリーム計算システム内のプロファイル・ベースのアプリケーション構成の実装が考えられる（例えば、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ社により提供されるＩＮＦＯＳＰＨＥＲＥ  ＳＴＥＡＭＳミドルウェア・アプリケーション）。処理要素（ＰＥ）を含むこのようなアプリケーションにおいては、その各々が多重の入力および出力ポートを有し、各出力ポートは単一のストリームを生成し、データ・プロファイルが、各出力ポートに関連付けられる。データ・プロファイルは、自身に関連付けられたプロデューサに対する一意の識別子を含むことができ、また、プロデューサにより生成されるデータを特徴付けるプロパティの集合を含むこともできる。これらのプロパティは、幾つかの予め定義されたデータ型（単純型および複素数型の両方）のうちの１つに属し得る。例えば、ストリーム計算システムにおいて、データ・プロパティのタイプは、ｓｔｒｉｎｇ型、ｄｏｕｂｌｅ型、ｌｏｎｇ型、ｓｔｒｉｎｇｌｉｓｔ型、ｄｏｕｂｌｅｌｉｓｔ型、およびｌｏｎｇｌｉｓｔ型とすることができる（最後の３つは配列型である）。各プロファイル・プロパティは名称を有し、特定の１つのプロファイル内の２つのプロパティが同一の名称を有することはできない。
【００２９】
さらに、各コンシューマは、サブスクリプション表現を用いて、関心のあるプロデューサの集合を記述する。サブスクリプション表現は、データ・プロファイルのプロパティに対する任意のブール表現である。所与の表現を満たすプロファイル・プロパティを有する全てのプロデューサは、コンシューマにとっての潜在的な候補である。また、セキュリティ、プロデューサとコンシューマの範囲、および、それぞれ、プロデューサとコンシューマの出力形式と入力形式の互換性を含むその他の直交要件（orthogonal consideration）が、プロデューサがサブスクライバに接続される必要があるかどうかを決定することができる。例として、ストリーム計算システム（例えばＳｙｓｔｅｍ−Ｓ）においては、ＸＰＡＴＨ構文を用いてサブスクリプション表現を定義することができる。例えば、表現ストリーム［ｌｏｃａｔｉｏｎ＝“ｙｏｒｋｔｏｗｎ”］［ｔａｇｓ［ｍｅｍｅｂｅｒ＝“ｖｉｄｅｏ”］］は、値が“ｙｏｒｋｔｏｗｎ”であるｌｏｃａｔｉｏｎと呼ばれるｓｔｒｉｎｇプロパティを含み、かつ“ｖｉｄｅｏ”と呼ばれるメンバを含む、ｔａｇｓと呼ばれるｓｔｒｉｎｇｌｉｓｔプロパティを含む、全てのデータ・プロファイルに合致する。
【００３０】
さらに、本発明の実施形態は、プロデューサとコンシューマとの間の相互接続を動的に判定し確立する、３つのサブ・コンポーネントを含む論理を含む。まず、サブ・コンポーネントは、データ・プロファイルを格納するための高信頼データ構造であるプロファイル・マネージャを含むことができる。プロファイル・マネージャは、実行時にデータ・プロファイルを操作および照会するためのＡＰＩを提供する。ストリーム計算システムにおいては、プロファイル・マネージャは、データ・プロファイルを操作および照会するためのアプリケーション・プログラミング・インターフェース（ＡＰＩ）とともに、拡張マーク付け言語（ＸＭＬ）ツリー表現を用いて実装することができる。
【００３１】
第２のサブ・コンポーネントは、どのプロファイルがどのサブスクリプション表現に合致するかをチェックすることによってプロデューサとコンシューマとの間のマッチング（または接続）を計算するマッチング技法を含むことができる（可能であれば、マッチング効率を最大化するように設計され、最適化される）。この技法は、アプリケーションの起動およびプロファイルまたはサブスクリプション表現が修正された場合に実行され、ならびに処理要素（例えば、ストリーム計算システム内の実行時解析コンテナ）が行き来するときに、実行される。例えば、基底にあるＸＭＬエンジンを用いて、プロファイル・マネージャ内のプロファイルを、ＸＰＡＴＨベースのサブスクリプション表現に対してマッチングさせることができる。
【００３２】
もうひとつのサブ・コンポーネントは、プロファイルおよびサブスクリプション操作のためのＡＰＩを含むことができる。このようなＡＰＩは、実行時に、アプリケーションがプロファイル・プロパティおよびサブスクリプション表現を修正することを可能にする。本発明の実施形態においては、上記のサブ・コンポーネントは、ディスティラリ・グラフ・マネージャ（ｄｉｓｔｉｌｌｅｒｙ  ｇｒａｐｈ  ｍａｎａｇｅｒ）（ＤＧＭ）モジュール内に常駐することができる。
【００３３】
さらに、ここで詳述される技法は、アプリケーション開発時にデータ・プロファイルおよびサブスクリプション表現を定義および初期化する能力を提供する、プログラミング言語レベルの特徴も含む。プログラミング言語により初期化されたそのようなプロファイルおよびサブスクリプションは、アプリケーション起動時に有効になる。本発明の実施形態においては、プログラミング言語（例えば、ＳＰＡＤＥ）が、上述のことを達成するための特徴を提供する。ＳＰＡＤＥプログラミング・モデルは、非特許文献１において、より詳しく説明されている。ここで説明されるように、本発明の実施形態は、汎用データ・ストリーム処理ミドルウェアの一部として開発された分散型実行時インフラストラクチャおよびプログラミング・モデル（例えば、それぞれ、ＩＮＦＯＳＰＨＥＲＥ  ＳＴＲＥＡＭＳのようなデータ・ストリーム処理システム、およびＳＰＡＤＥプログラミング言語）の例示的な文脈内で、詳述することができる。このようなサポート構造化および非構造化された分散型データ・ストリーム処理アプリケーションは、多数の計算ノードにわたることができる。
【００３４】
さらに、このようなミドルウェアは、多数の長期稼動アプリケーションを１つまたは複数のアプリケーションの一部として実行することができる。アプリケーション同士は、可能であれば複合データ・フロー・グラフの形態を取る、単一のアプリケーションまたは関連付したアプリケーションの集合の一部として、対話することができる。データ・フロー・グラフは、データ・ストリームによって接続された処理要素（例えば、実行時実行ユニット）の集合を含むことができ、各データ・ストリームは、一連のタプルを搬送する。処理要素は、データ・ストリーム分析を実装する演算器をホストするコンテナであり、計算ノード上に分散される。計算ノードは、例えば、ワークステーションのシェアードナッシング・クラスタとして、または大規模スーパーコンピュータとして組織化することができる。
【００３５】
処理要素は、データ・ストリームによって接続されたその入出力ポートを介して互いに通信する。処理要素ポートならびにデータ・ストリームは、アプリケーション定義型のシステム（典型的には、８ビット整数のような数値型から基本型要素のリストのような複素型までの範囲にわたる、システムがサポートする基本型を組み合わせことによって構築される）を利用して分類することができる。処理要素は、コンパイル時に定義されるハード・コード化されたストリーム接続を用いて明示的に接続されることも可能であり、また、ここで説明される機構により、データ・ストリームのプロパティに依存したストリーム（例えば、「建物Ａ内に設置されたカメラからの監視映像を搬送するストリーム」）を通じて動的に接続されることも可能である。これらの接続は動的であり（すなわち、サブスクリプション表現に合致するストリームの可用性に応じて、実行時に作成される）、従って、ミドルウェアがインクリメントなアプリケーションの開発および配置をサポートすることを可能にすることに留意されたい。
【００３６】
例えば図２で見られるように、宣言型言語（例えば、ＳＰＡＤＥ言語）を用いて、これらのミドルウェアのためのアプリケーションをプログラムする。この言語は、複数の特徴を含む、迅速なアプリケーション開発フロントエンドを提供する。１つの特徴は、並列型および分散型のデータ・フロー・グラフのフレキシブルな構成のための言語を含むことができる。この言語は、プログラマが直接使用することができ、または、タスク特有の上位レベルのプログラミング・ツール（例えば照会用、マップ−リデュース・フローの構成用など）と、下位レベルのアプリケーション・プログラミング・インターフェース（ＡＰＩ）との間で用いることができる。宣言型言語の別の特徴は、タイプ・ジェネリックなストリーム処理演算器の新たなツールキットの追加に対するサポートに基づく、拡張性を含むことができる。また、宣言型言語のさらに別の特徴は、外部データ源からデータを取り込むため、および結果を外部コンシューマに発行するために用いられる広範囲なエッジ・アダプタを含むことができる（例えば、ネットワーク・ソケット、データベース、ファイル・システム、専用プラットフォームなど）。
【００３７】
プログラミング言語は、アプリケーションが、例えば図２に示されるようなここで説明される機構を介して他のアプリケーションからインポートしまたは他のアプリケーションにデータをエクスポートすることができる構文構造ばかりではなく、ストリーム中心の演算器ベースのプログラミング・モデルを提供することもできる。ストリーム中心の設計は、基本的なビルディング・ブロックがストリームである言語を含意する。別の言い方をすれば、アプリケーションの作成者は、単にストリーム・フローをリストし、どの演算器が個々のストリームを生成するかを記述することにより、データのフローをブロック図からアプリケーションを記述するソースコードへとすばやく翻訳することができる。演算器ベースのプログラミングは、アプリケーションが実施するように設計されている計算を果たすのに必要な、可能な限り最小のビルディング・ブロックについて推論することにより、アプリケーションを設計することに焦点を当てる。
【００３８】
ここで述べるように、本発明の実施形態においては、アプリケーション境界をまたがってストリームを消費および生成することによって、複数のアプリケーションを相互運用することができる。本アプリケーション構成は、異なるアプリケーションがおそらくは異なる時点で配置され、それらの間のプロデューサ−コンシューマ関係が実行時に確立されるような、動的なトポロジーの開発を可能にする。別の言い方をすれば、新たなアプリケーションがインスタンス化されるたびに、データ・フロー管理コンポーネントが、その新たなアプリケーションが他の実行中アプリケーションの関心の対象となり得るようななんらかのストリームを生成およびエクスポートしているかどうかを評価する。
【００３９】
同様に、データ・フロー管理コンポーネントは、既に実行中のアプリケーションを検査し、そのいずれかが新たに配置されたアプリケーションの関心の対象となるストリームを生成およびエクスポートしているかどうかを検証する。新たなプロデューサ−コンシューマ関係が見いだされると、データ・フロー管理コンポーネントは、そのプロデューサに対してコンシューマと接続するよう指示する。これらの接続は、プロデューサまたはコンシューマの一方が終了し、サブスクリプションが変更され、および／または、データ源のプロパティが変更されて潜在的にもはやサブスクリプションに合致しなくなると自動的に解除されるという意味で、一時的なものである。
【００４０】
演算器の入力ポート・サブスクリプション、ストリーム・プロファイルに関連付けられたストリーム・プロパティ、および演算器のサブスクリプションに関連付けられた順位付け基準の双方を変更するための（明確に定義されたＡＰＩを介した）プログラム的な方法を、演算器の開発者に対して提供することもできる。また、特定のＡＰＩを起動して、これらの変更を実装することによって引き起こされる変化は、新たなストリーム接続が作成されおよび／または破棄されるものとして、実行時にデータ・フロー・トポロジーの修正をトリガする。
【００４１】
図３は、本発明の実施形態を実装するために用いられる多重コンポーネント装置の例示的な編成を示す図である。例として、図３は、アプリケーション・プログラミング・インターフェース（ＡＰＩ）３０４と、プロファイル・マネージャ３０６と、サブスクリプション表現マネージャ３０８と、トリガ・マネージャ３１０と、データ・フロー・マネージャ３１２と、データ・フロー・グラフ・トポロジー表示３１４とを含む、データ・フロー管理コンポーネント３０２を示す。ＡＰＩ３０４は、出力ポートにより生成されるストリームに関連付けられたストリーム・プロファイル、入力ポートのサブスクリプション表現、入力ポートの順位付け基準、および入力ポートのサブスクリプション関数を、照会し、挿入し、削除し、および／または修正するために用いることができる。
【００４２】
プロファイル・マネージャ３０６は、各データ・ストリーム（または等価的に、データ・ストリームを生成する演算器の出力ポート）に関連付けられた質的および量的プロパティを格納するための高信頼ストアとして機能する。具体的には、各ストリームは、プロパティの集まりを含む一意のデータ・プロファイルによって特徴付けられる。これらのプロパティの各々は、型あり（typed）プロパティ名（例えば、単精度浮動小数点数として与えられる、音声ストリームに関連付けられた平均ノイズ・レベル）を有し、かつ特定の値を有する。処理システム内のプロファイル・マネージャの例示的な実装において、ストリーム・プロパティは、プログラミング言語によってサポートされるいずれかのデータ型の値を保持するように定めることができる。ストリーム・プロファイルの集まりは、ＸＭＬツリーの形で、プロファイル・マネージャによって内部的に格納することが可能であり、ツリー・ノードがプロファイル・プロパティを形成する。ストリーム・プロファイルの例、およびプロファイル・マネージャの内部の内容の例示が、図４に示される。
【００４３】
図４は、本発明の実施形態による、プロファイル・マネージャ・コンポーネントによって保持される、アプリケーションにより生成されるストリームに関連付けられたＸＭＬコード化プロファイル４０２の例示的なリストを示す図である。例として、図４は、例示的なＨｅａｌｔｈＣａｒｅＢａｒｇａｉｎｓストリーム４１０についての、プロパティ名４０４と、プロパティ型４０６と、プロパティ値４０８と、プロパティ・ベースのプロファイルとを示す。
【００４４】
サブスクリプション表現マネージャ（図３のコンポーネント３０８）は、プロファイル・マネージャに対して補完的なコンポーネントである。サブスクリプション表現マネージャは、ストリーム・コンシューマ（または等価的に、自身のサブスクリプションならびに順位付け基準に合致するデータ・ストリームを取り込むために用いられる入力ポート）のサブスクリプション表現を収容するための高信頼ストアとして機能する。具体的には、例えば表現ベースのストリーム・サブスクリプション機構を用いる各入力ポートが、一意のブール・サブスクリプション表現に関連付けられる。この表現は、ストリーム・プロファイルに含まれるプロパティが、対応する入力ポートによって消費されるために満たさなければならない論理条件を指定する。処理システム（例えば、Ｓｙｓｔｅｍ  Ｓ）におけるサブスクリプション表現マネージャの例示的な実装は、コンシューマ・サブスクリプションとして、任意のブールＸＰＡＴＨ表現（ストリーム・プロファイル・プロパティを伴う）を許容する。このような場合には、各入力ポートは、とりわけ、特定のサブスクリプションおよび順位付け方法を含むポート記述に関連付けられ、ポート記述子の集まりは、データ・フロー・マネージャ内に格納される。
【００４５】
サブスクリプション表現マネージャは、サブスクリプション関数を登録するための方法も提供する。サブスクリプション関数は、特定のコンシューマについてのマッチングを計算するための、任意に強力な、カスタマイズされた、手続き的な方法を提供する。別の言い方をすれば、出力ポートによって生成されたどのストリームがこのコンシューマへとルーティングされるかを判定するための論理は、サブスクリプション関数それ自体に内在する。これらの関数は、例えば、個々のコンシューマによって（それらがインスタンス化されたときに）サブスクリプション表現マネージャに登録することができる。
【００４６】
プロファイル・マネージャおよびサブスクリプション表現マネージャの双方が、他のコンポーネントがこれらのマネージャに対してＡＰＩを通じてプログラム的に照会することを可能にする。これらのＡＰＩは、実行時に、プログラミング言語（例えば、ＳＰＡＤＥ）によって定義されたストリーム処理演算器によって起動させることもできる。本発明の実施形態において、これらは、金融操作またはレーダ・データ処理といった特定のアプリケーション領域の要求に応える新たな演算器（例えばツールキットとして編成される）を創出することによってプログラミング言語を拡張するために用いられる、２つの機構である。これらのＡＰＩは、現在システム内に配置されている種々のストリームのプロファイルをブラウズするため、ならびに、アプリケーション開発の時点で入力ポートのサブスクリプション表現を検査するために、外部プログラムを通じてアプリケーション・プログラマによって起動させることもできる。
【００４７】
具体的には、ＡＰＩは、例えば、演算器の出力ポートにより生成される特定のストリームに関連付けられた、または現在システム内にあるアプリケーションによって配置された演算器からの全ての出力ポートに関連付けられたプロファイルを検索することを可能にすることができる。ＡＰＩは、特定の入力ポートに関連付けられた、または現在システム内にあるアプリケーションによって配置された演算器からの全ての入力ポートに関連付けられた、サブスクリプション表現または関数、ならびに随意の順位付け基準を検索することを可能にすることもできる。また、ＡＰＩは、所与のサブスクリプション表現に合致するストリーム・プロファイル、および所与のストリーム・プロファイルに合致するサブスクリプションを検索することを可能にすることもできる。照会式のＡＰＩに加えて、プロファイル・マネージャおよびサブスクリプション表現マネージャは、ストリーム・プロファイル、個々のプロファイル・プロパティ、コンシューマ・サブスクリプション表現、サブスクリプション関数、およびサブスクリプションの順位付け基準を、作成し、削除し、および修正するためのＡＰＩを含むこともできる。
【００４８】
データ・フロー・マネージャ（図３のコンポーネント３１２）は、どの出力ポートをどの入力ポートに接続させなければならないかを判定するためのマッチング技法を起動する。出力ポートにより生成されるストリームは、そのストリームに関連付けられたプロファイル・プロパティが演算器の入力ポートに関連付けられたサブスクリプション表現（または関数）を満たす場合に、その入力ポートに対して潜在的に合致するものとなる。この条件を満たすことに加えて、データ・フロー・マネージャは、出力ポートが入力ポートに接続されるためのその他の必要条件を強制することもある。例えば、入力ポートによって消費されるタプル内に存在する属性の集合が、出力ポートによって生成されるタプル内に存在する属性と正確に合致することを規定することができる。別の言い方をすれば、タプルの属性構造は、入力ポートのスキーマと合致しなければならない。
【００４９】
さらに、入力ポートは、この入力ポートからのタプルを消費するために、十分な有効範囲規則（scoping)およびセキュリティ特権を有するように規定することができる。一般に、上記の条件の後で、１つの入力ポートに複数の出力ポートをマッチングさせることができる（その逆も真である）。本発明の実施形態は、ＸＰＡＴＨベースのコンシューマ・サブスクリプションをストリーム・プロファイルに照らして評価するための機能的サポートを有するライブラリを利用するデータ・フロー・マネージャを、処理システム内に含む。
【００５０】
ここで説明される基本的な表現を評価する能力は、以下に説明されるように、データ・フロー・マネージャによって拡張することができる。例えば、データ・フロー・マネージャは、その表現評価およびマッチング機能を強化するために、意味論的エンジンおよびオントロジを起動することができる。例として、ある入力ポートのサブスクリプション表現が、「起点」プロパティが「ニューヨーク」という値を有している全てのストリームを探索するシナリオを考える。プロファイルが、「ウエストチェスター」という値を有する「出所」と呼ばれるプロパティを含むストリームが存在する場合、意味論的エンジンは、オントロジ管理フレームワークの補助の下で、ウエストチェスター郡とニューヨーク州との間のオントロジ的関係を推論することができるので、このストリームが実際にそのコンシューマに合致することを自動的に判定することであろう。
【００５１】
さらに、データ・フロー・マネージャは、サブスクリプション表現に合致するストリームの部分集合のみを選択し、この部分集合のみをコンシューマに接続する、順位付けエンジンを起動することもできる。順位付けエンジンは、種々のタイプの順位付け機構を提供することができる。例えば、ストリームの「品質」のような特定のプロファイル・プロパティの値に対して順位付けを行うことができる。順位付け機構に対して、レート、選択されるストリームの数、およびその他の関連品質に課される制約と共に、ストリームの部分集合の選択についての任意の最適化目標を与えることも可能であり、個々のコンシューマもまた任意の順位付け関数を与えることも可能である。これらを、データ・フロー・マネージャに登録し、このコンシューマの要求に合致するストリームが順位付けされるときには、いつでも適用することが可能である。
【００５２】
さらに、データ・フロー・マネージャは、任意の、カスタマイズされた、より洗練されたマッチング能力をそのコンシューマに提供するために、個々のコンシューマにより与えられたユーザ定義サブスクリプション関数を起動することもできる。
【００５３】
上記のマッチングおよび順位付け機能を提供することに加えて、データ・フロー・マネージャは、動的アプリケーション構成に関連付けられた種々のデータ・オブジェクトのための高信頼ストアとして機能することもできる。これは、例えば、そのサブスクリプション表現または関数を含む、入力ポート記述子の集まりを含むことができる。加えて、信頼性および照会の効率のために、出力ポートと入力ポートとの間に存在する現在の接続の集合をデータ・フロー・マネージャの一部として格納することもできる。
【００５４】
トリガ・マネージャ（図３のコンポーネント３１０）は、出力ポートと入力ポートとの間の接続の再計算が必要になるたびにデータ・フロー・マネージャ内でマッチングおよび順位付け技法を起動すること、ならびに、処理システム上に新たなアプリケーション（ならびにその演算器の出力および入力ポート）が配置されるたび、または既存のアプリケーション（ならびにその演算器の出力および入力ポート）が削除または修正されるたびに、プロファイル・マネージャおよびサブスクリプション表現マネージャを更新することを担当する。
【００５５】
本発明の実施形態の種々のコンポーネント間で関与する対話（またはＡＰＩ呼出しのシーケンス）は、以下のものを含むことができる。新たなアプリケーション（例えば、Ｓｙｓｔｅｍ  Ｓアプリケーション）のインスタンス化を含むことができる。このようなアプリケーションは、処理要素（ＰＥ）の集まりから構成され、その各々は、ストリームを取り込む入力ポートの集合と、出力ストリームを生成する出力ポートの集合とを含むことに留意されたい。新たなアプリケーションが、インスタンス化のためにシステム・ランタイムに対して提出されると（例えば図５に示されるように）、システム・ランタイムは、アプリケーションの登録のためにトリガ・マネージャＡＰＩを呼び出し、アプリケーションに含まれるＰＥのリストを、各ＰＥの入力および出力ポート記述子の集まりと共に、パラメータとして渡す。
【００５６】
アプリケーションに含まれる出力ポートの各々について、トリガ・マネージャは、順次、プロファイル・マネージャＡＰＩを起動して、新たなストリーム・プロファイルを作成する（そして、プロファイル・マネージャに、まだインスタンス化されていないアプリケーション内の新たなストリームについてのプロパティが正確にポピュレートされることを保証する）。同様に、アプリケーション内の入力ポートの各々について、トリガ・マネージャは、サブスクリプション表現マネージャＡＰＩを起動して、これもまたサブスクリプション表現を含む新たな入力ポート記述子、またはこの入力ポートに関連付けられたサブスクリプション関数へのポインタを作成する。また、トリガ・マネージャは、データ・フロー・マネージャ内のマッチング技法を起動し、これは、まだインスタンス化されていないアプリケーション内の演算器に属する新たな入力ポートを含む全ての入力ポートについて、潜在的に合致するストリームの集合を再計算する。この後に続けて、入力ポートの各々について合致したストリームの最終的な集合を判定する、順位付け技法を呼び出すことができる。さらに、データ・フロー・マネージャは、上記のプロセスを通じて計算された接続を物理的に確立し、かつ、上記のプロセス後に妥当な合致であることを終えた物理的接続を解除するために、ルーティング・コンポーネントに対する呼出しを発行することができる。
【００５７】
上で述べたように、図５は、本発明の実施形態による、新たなアプリケーションの配置が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が作成されるものとして、どのようにフロー・グラフにおける修正をトリガするかを示す流れ図である。ステップ５０２では、データ・フロー・マネージャを介して処理プラットフォーム（例えば、Ｓｙｓｔｅｍ  Ｓ）ランタイムに対して新たなアプリケーションを提出する。ステップ５０４では、トリガ・マネージャが、処理要素（ＰＥ）の内部でグループ化された演算器の集合を含むアプリケーションを認識する。さらに、トリガ・マネージャは、以下の動作を行うことができる。例えば、各出力ポートについて、アプリケーション内の各々のエクスポートされたストリームのプロパティに関する情報が、プロファイル・マネージャにポピュレートされる。また、各入力ポートについて、各サブスクリプション表現および／または関数ならびに順位付け基準に関する情報が、サブスクリプション表現マネージャにポピュレートされる。
【００５８】
ステップ５０６では、トリガ・マネージャがマッチング技法を起動する。トリガ・マネージャは、さらに以下の動作を行うことができる。新たなアプリケーションの各入力ポートについて、サブスクリプション表現および／または関数に合致するストリームを見つけ出すことができる。また、トリガ・マネージャは、順位付け基準を適用し、その順位付け基準によって課せられる制約を満たす最大数のストリームを含むようにリストを選抜することができる。さらに、その他のアプリケーションに属する各入力ポートについて、トリガ・マネージャは、新たなアプリケーションのエクスポートされたストリームが、順位付け基準に関して、それらのサブスクリプション表現および／または関数に合致するかどうかを評価することができる。
【００５９】
ステップ５０８では、データ・フロー・マネージャ内部トポロジー・データ・フロー・グラフが更新される。また、ステップ５１０では、データ・フロー・マネージャが、相互接続されるべきアプリケーションに対してルーティング通知を発行し、プロデューサとコンシューマとの間に物理ルートを作成する。
【００６０】
本発明の実施形態は、既存のアプリケーションがデータ・フロー・マネージャへの要求を介して終了されるときに、ここで説明される種々のコンポーネント間で関与する、一連のステップまたはＡＰＩ呼出しも含む（例えば、図６で示される）。システム・ランタイムは、アプリケーションの登録のためにトリガ・マネージャＡＰＩを呼び出し、終了されるアプリケーションをパラメータとして渡すことができる。終了されるアプリケーション内の演算器の各出力ポートについて、トリガ・マネージャは、対応するストリーム・プロファイルをプロファイル・マネージャから削除するためのＡＰＩ呼出しを発行し、これらの出力ポートからのストリームのコンシューマに、プロデューサが間もなく終了することについて通知する。終了されるアプリケーション内の演算器の入力ポートの各々について、サブスクリプション・マネージャに対して、対応するサブスクリプション表現（または関数）の解除についてのＡＰＩ呼出しが発行され、それらのプロデューサに対して、コンシューマが間もなく終了することについての通知がなされる。
【００６１】
また、データ・フロー・マネージャも、もうすぐ解除される接続の解除により、その内部データ・フロー・グラフ・トポロジーを更新することができる。さらに、上記のプロセスにおいてプロデューサを喪失した残存するコンシューマごとに、データ・フロー・マネージャは、そのコンシューマにとって最適なストリームの集合が選択されることを保証するために、順位付け技法を再適用する。
【００６２】
上記のように、図６は、本発明の実施形態による、新たなアプリケーションの終了が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が破棄されるものとして、どのようにフロー・グラフにおける修正をトリガするかを示す流れ図である。ステップ６０２では、データ・フロー・マネージャに対する要求を介して終了されるアプリケーションに照会が実行される。ステップ６０４では、トリガ・マネージャが出力ポートおよび入力ポートの動作を行う。例えば、終了されるアプリケーション内の演算器の各出力ポートについて、プロファイル・マネージャが空にされ、コンシューマは、プロデューサが間もなく終了することについて、データ・フロー・マネージャにより通知される。終了されるアプリケーション内の演算器の各入力ポートについて、サブスクリプション表現マネージャが空にされ、プロデューサは、コンシューマが間もなく終了することについて、データ・フロー・マネージャにより通知される。さらに、残りの演算器の各入力ポートについて、その入力ポートのプロデューサの集合に変化があれば、データ・フロー・マネージャは、この入力ポートのための正しいストリームの集合を再計算するために、順位付け技法を再適用する。
【００６３】
さらに、ステップ６０６では、プロデューサおよび／またはコンシューマの接続の解除により、データ・フロー・マネージャ内部トポロジー・データ・フロー・グラフが更新される。
【００６４】
本発明の実施形態は、ストリームを生成する演算器によって、その他の演算器によって、または外部の管理者によってストリーム・プロファイルが修正される（すなわち、ストリーム・プロファイル内のプロパティの追加、削除、または修正）ときに、ここで説明される種々のコンポーネントの間で関与する、一連のステップまたはＡＰＩ呼出しも含む（例えば図７によって示される）。データ・フロー・マネージャは、プロファイルが修正されている特定の出力ポートの識別子（ＩＤ）でトリガ・マネージャを起動する。トリガ・マネージャは、プロファイル・マネージャを起動し、そのストリーム・プロファイルに対する適切な修正が行われることを保証する。
【００６５】
さらに、トリガ・マネージャは、全てのコンシューマの集合に対して、修正されたストリームがそのコンシューマに潜在的に合致するかをチェックするマッチング技法を起動し、以前に（プロファイルが修正される前に）このストリームにサブスクライブしたか、または現在（マッチング技法の再適用後に）このストリームにサブスクライブしているコンシューマに対して、順位付け関数を再適用する。また、データ・フロー・マネージャは、その内部データ・フロー・グラフ・トポロジーにおける必要な更新を行うことができる。データ・フロー・マネージャは、さらに、相互接続されるべきアプリケーションに対してルーティング通知を発行し、必要に応じて、プロデューサと妥当なコンシューマとの間の物理ルートを作成しまたは解除することができる。
【００６６】
上記のように、図７は、本発明の実施形態による、ストリームに関連付けられたプロパティを記述するストリーム・プロファイルの修正が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が作成されおよび／または破棄されるものとして、どのようにフロー・グラフの修正をトリガするかを示す流れ図である。ステップ７０２では、データ・フロー・マネージャに対する（例えば、ストリームを生成する演算器、その他の演算器、または外部の管理コンソール端末による）アプリケーション・プログラミング・インターフェース（ＡＰＩ）呼出しを介して、ストリーム・プロファイルの修正（例えば、新たなプロパティ、プロパティの削除、またはプロパティの更新）が実行されるで。ステップ７０４は、トリガ・マネージャが、マッチング技法を起動し、評価動作を行う。例えば、他のアプリケーションに属する各入力ポートについて、トリガ・マネージャは、そのプロファイルが変更されたエクスポートされたストリームが、その順位付け基準に関して、現時点でそのサブスクリプション表現および／または関数に合致する（または合致しない）かどうかを評価する。
【００６７】
ステップ７０６では、データ・フロー・マネージャ内部トポロジー・データ・フロー・グラフが更新される。ステップ７０８では、データ・フロー・マネージャが、相互接続されるべきアプリケーションに対してルーティング通知を発行し、必要に応じて、このプロデューサと新たに見いだされたおよび／または解除されたコンシューマとの間の物理ルートを作成しおよび／または解除する。
【００６８】
さらに、本発明の実施形態は、入力ポートを所有する演算器によるデータ・フロー・マネージャに対するＡＰＩ呼出しを介してサブスクリプション表現が修正されるときに、ここで説明される種々のコンポーネント間で関与する、一連のステップまたはＡＰＩ呼出しを含むこともできる（例えば図８で示される）。データ・フロー・マネージャは、そのサブスクリプション表現が修正されている特定の入力ポートのＩＤでトリガ・マネージャを起動する。トリガ・マネージャは、サブスクリプション表現マネージャを起動し、そのサブスクリプション表現に対する適切な修正が行われることを保証する。
【００６９】
さらに、トリガ・マネージャは、このコンシューマに対してマッチング技法を起動して、このコンシューマに合致する全てのストリームの集合を見つけ出し、順位付け基準を適用して、コンシューマによって課せられる順位付け制約を満たすストリームの最適な部分集合を選択する。さらに、データ・フロー・マネージャは、その内部データ・フロー・グラフ・トポロジーにおける必要な更新を行うことができる。データ・フロー・マネージャは、相互接続されるべきアプリケーションに対してルーティング通知を発行し、妥当なプロデューサとコンシューマとの間の物理ルートを作成しまたは解除することもできる。
【００７０】
上記のように、図８は、本発明の実施形態による、コンポーネントの入力ポートに関連付けられたサブスクリプション表現の修正が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が作成されおよび／または破棄されるものとして、どのようにフロー・グラフにおける修正をトリガするかを示す流れ図である。ステップ８０２では、入力ポートを所有する演算器によるデータ・フロー・マネージャに対するアプリケーション・プログラミング・インターフェース（ＡＰＩ）呼出しを介して、ストリーム・サブスクリプション表現が修正される。ステップ８０４では、トリガ・マネージャが、サブスクリプション表現マネージャを起動して、サブスクリプション表現における適切な変更を作成する。
【００７１】
ステップ８０６では、トリガ・マネージャが、マッチング技法を起動し、ストリーム動作を行う。例えば、トリガ・マネージャは、新たなサブスクリプション表現に合致するストリームを見つけ出すことができる。さらに、トリガ・マネージャは順位付け基準を適用し、順位付け基準によって課せられる制約を満たすストリームの最適な部分集合を含むようにリストを選抜することができる。
【００７２】
ステップ８０８では、データ・フロー・マネージャ内部トポロジー・データ・フロー・グラフが更新される。さらに、ステップ８１０では、データ・フロー・マネージャが、相互接続されるべきアプリケーションに対してルーティング通知を発行し、新たに見いだされたおよび／または解除されたプロデューサとこのコンシューマとの間の物理ルートを作成しおよび／または解除する。
【００７３】
本発明の実施形態は、入力ポートを所有する演算器によるデータ・フロー・マネージャに対するＡＰＩ呼出しを介してサブスクリプション関数が修正されるときに、ここで説明される種々のコンポーネント間で関与する、一連のステップまたはＡＰＩ呼出しを含むこともできる（例えば図９によって示される）。データ・フロー・マネージャは、そのサブスクリプション関数が修正されている特定の入力ポートの識別子でトリガ・マネージャを起動する。トリガ・マネージャは、サブスクリプション表現マネージャを起動し、新たなサブスクリプション関数が登録されることを保証する。
【００７４】
さらに、トリガ・マネージャは、このコンシューマに対してマッチング技法を起動して、このコンシューマに合致する全てのストリームの集合を見つけ出し、順位付け基準を適用して、コンシューマによって課せられる順位付け制約を満たすストリームの最適な部分集合を選択する。データ・フロー・マネージャは、その内部データ・フロー・グラフ・トポロジーにおける必要な更新を行うことができる。また、データ・フロー・マネージャは、相互接続されるべきアプリケーションに対してルーティング通知を発行し、妥当なプロデューサとコンシューマとの間の物理ルートを作成しまたは解除することができる。
【００７５】
図９は、本発明の実施形態による、コンポーネントの入力ポートに関連付けられたサブスクリプション関数の修正が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が作成されおよび／または破棄されるものとして、どのようにフロー・グラフにおける修正をトリガするかを示す流れ図である。ステップ９０２では、入力ポートを所有する演算器によるデータ・フロー・マネージャに対するＡＰＩ呼出しを介して、ストリーム・サブスクリプション関数が修正される。ステップ９０４では、トリガ・マネージャが、マッチング技法を起動し、ストリーム動作を行う。例えば、トリガ・マネージャは、新たなサブスクリプション関数に合致するストリームを見つけ出し、順位付け基準を適用し、順位付け基準によって課せられる制約を満たす最大数のストリームを含むようにリストを選抜することができる。
【００７６】
ステップ９０６では、データ・フロー・マネージャ内部トポロジー・データ・フロー・グラフが更新される。また、ステップ９０８では、データ・フロー・マネージャが、相互接続されるべきアプリケーションに対してルーティング通知を発行し、新たに見いだされたおよび／または解除されたプロデューサとこのコンシューマとの間の物理ルートを作成しおよび／または解除する。
【００７７】
本発明の実施形態は、さらに、入力ポートを所有する演算器によるデータ・フロー・マネージャに対するＡＰＩ呼出しを介して順位付け基準が修正されるときに、ここで説明される種々のコンポーネント間で関与する、一連のステップまたはＡＰＩ呼出しを含むことができる（例えば図１０によって示される）。データ・フロー・マネージャは、新たな順位付け基準を適用して、順位付け基準によって課せられる制約を満たすストリームの最適な集合を選択する。さらに、データ・フロー・マネージャは、その内部データ・フロー・グラフにおける必要な更新を行い、相互接続されるべきアプリケーションに対してルーティング通知を発行し、妥当なプロデューサとコンシューマとの間の物理ルートを作成しまたは解除することができる。
【００７８】
上記のように、図１０は、本発明の実施形態による、コンポーネントの入力ポートに関連付けられたサブスクリプション順位付け基準の修正が、新たなプロデューサおよび／またはコンシューマ・ストリーム接続が作成されおよび／または破棄されるものとして、どのようにフロー・グラフにおける修正をトリガするかを示す流れ図である。ステップ１００２では、入力ポートを所有する演算器によるデータ・フロー・マネージャに対するＡＰＩ呼出しを介して、ストリーム・サブスクリプション順位付け基準が修正される。ステップ１００４では、データ・フロー・マネージャが、新たな順位付け基準を適用して、順位付け基準によって課せられる制約を満たすストリームの最適な集合を選択する。
【００７９】
ステップ１００６では、データ・フロー・マネージャ内部トポロジー・データ・フロー・グラフを更新する。ステップ１００８では、データ・フロー・マネージャが、相互接続されるべきアプリケーションに対してルーティング通知を発行し、新たに見いだされたおよび／または解除されたプロデューサとこのコンシューマとの間の物理ルートを作成しおよび／または解除する。
【００８０】
図１１は、本発明の実施形態による、コンポーネント・ベースのデータ・ストリーム処理アプリケーションにおける複数のコンポーネント間の相互接続を動的に修正するための技法を示す流れ図である。アプリケーションは、分散型アプリケーション（すなわち、異なるコンピュータ上で実行される異なる部分）、ならびに異なるコンポーネント（すなわち、多重コンポーネントの分散されたアイテム）から成る１つのアプリケーションを含むことができる。
【００８１】
ステップ１１０２では、プロセッサ上で実行されるソフトウェア・アプリケーション内の複数の出力ポートの各々について、データ・プロデューサ・プロファイルが受け取られる。アプリケーションは、データ・ストリームを生成する出力ポートと、データ・ストリームを消費する入力ポートとを各々が含む複数のコンポーネントを含み、各データ・プロデューサ・プロファイルは、対応する出力ポートによって生成されるデータの特性を記述する。このステップは、例えば、ここで説明される別個のソフトウェア・コンポーネントのうちの１つまたは複数を用いて遂行することができる。ソフトウェア・アプリケーション内の複数の出力ポートの各々について、データ・プロデューサ・プロファイルを受け取ることは、アプリケーション開発時の（例えば、ＳＰＡＤＥプログラミング言語で表された構造を用いた）、または実行時ＡＰＩの使用を通じた、これらのプロファイルの指定を含むことができる。また、出力ポートによって生成されるデータの特性は、例えば、データ源によって搬送される全てのデータ（例えば、ストリーム処理システムにおけるストリーム）に適用されるプロファイルの形式で表された特性を含むことができる。
【００８２】
ステップ１１０４では、アプリケーションの複数のコンポーネントの１つまたは複数の入力ポートの各々について、データ・サブスクリプション・プロファイルが受け取られる。各データ・サブスクリプション・プロファイルは、入力ポートによって消費されるデータの特性を記述する。このステップは、例えば、ここで説明される別個のソフトウェア・コンポーネントを用いて遂行することができる。アプリケーションの複数のコンポーネントの入力ポートの各々について、データ・サブスクリプション・プロファイルを受け取ることは、アプリケーション開発中の（例えば、ＳＰＡＤＥ言語で表されたＸＰＡＴＨサブスクリプション機構を用いた）、または実行時ＡＰＩの使用を通じた、サブスクリプション表現の指定を含むことができる。また、入力ポートによって消費されるデータの特性は、例えば、宣言型サブスクリプション表現、手続き型サブスクリプション技法、および／または、１つまたは複数のデータ源・プロファイル・プロパティ上で定義された論理述語（例えばコンシューマごとに１つの）を含むことができる。
【００８３】
ステップ１１０６では、受け取ったデータ・プロデューサ・プロファイルと受け取ったデータ・サブスクリプション・プロファイルとの比較に基づいて、アプリケーション内の複数のコンポーネントの出力ポートと入力ポートとの間に１つまたは複数の接続を確立する。このステップは、例えば、ここで説明される別個のソフトウェア・コンポーネントを用いて遂行することができる。本発明の実施形態では、プロファイルの照会および更新を可能にするＡＰＩを用いて、アプリケーションの相互接続の動的な物理的再構成を可能にする。
【００８４】
ステップ１１０８では、プロセッサ上でデータ・ストリーム処理アプリケーションを実行して、データのストリームを処理する。このステップは、例えば、ここで説明される別個のソフトウェア・コンポーネントを用いて遂行することができる。データのストリーム処理は、システムの種々の処理ノード上に処理要素を配置し、これらを実行することを含むことができる。
【００８５】
ステップ１１１０では、アプリケーションの実行中に、新たなデータ・プロデューサ・プロファイルまたは新たなデータ・サブスクリプション・プロファイルの一方または両方が受け取される。このステップは、例えば、ここで説明される別個のソフトウェア・コンポーネントを用いて遂行することができる。
【００８６】
ステップ１１１２では、新たなデータ・プロファイルを含む受け取ったデータ・プロファイルの改訂された比較に基づいて、出力ポートと入力ポートとの間に少なくとも１つの新たな接続が確立される。このステップは、例えば、ここで説明される別個のソフトウェア・コンポーネントを用いて遂行することができる。出力ポートと入力ポートとの間に新たな接続の確立は、アプリケーション配置時および実行時に、プログラミング言語構造および実行時アプリケーション・プログラミング・インターフェースをそれぞれ用いた各プロデューサとコンシューマとの間に動的なデータ接続の確立を含むことができる。
【００８７】
さらに、出力ポートと入力ポートとの間に新たな接続を確立することは、データ・プロデューサ・プロファイル特性とデータ・サブスクリプション・プロファイル特性との間の合致の判定に従って、アプリケーションおよび外部データ源内の出力ポートを、アプリケーション内の入力ポートに動的に相互接続することをさらに含むことができる。本発明のの実施形態は、実行時に、データ・プロデューサ・プロファイルおよびデータ・サブスクリプション・プロファイルを操作すること（例えば、プロファイル・プロパティの作成、削除、および修正を含む）を含むことができる。
【００８８】
実行時にデータ・プロデューサ・プロファイルを操作することは、例えば、データ・プロデューサ・プロファイル・プロパティを、各出力ポートによって生成される各データ項目の値の関数として動的に操作（例えば、作成、削除、および修正）すること、データ・プロデューサ・プロファイル・プロパティを、各出力ポートによって生成される各データ項目のボリュームの関数として動的に操作（例えば、作成、削除、および修正）すること、および、プロファイル・マネージャ（これは、例えば、順位付け機構およびフィルタリング機構を含むことができる）に照会することを含むことができる。実行時にデータ・サブスクリプション・プロファイルを操作することは、例えば、ストリーム・サブスクリプション表現を修正すること、およびサブスクリプション関数を修正することを含むことができる。
【００８９】
また、出力ポートと入力ポートとの間に接続を確立することは、計算されたルートをデータ・フロー・モジュール内に格納すること、および、データ・プロファイルおよび／またはデータ・サブスクリプションに変化が生じるたびに、データ・フロー・モジュール内に格納された情報を更新することをさらに含むことができる。
【００９０】
図１１に示された技法は、アプリケーションの実行中に、既存のデータ・プロファイルおよび／または既存のサブスクリプション表現に対する修正を受け取ることを含むこともできる。また、本発明の実施形態において、以下のステップのうちの１つまたは組み合わせのいずれかによって、サブスクリプション機構を実装することができる。宣言型サブスクリプション表現を、あるストリームが有するプロパティの集合に適用することによって合致を計算し、そのプロパティが述語を満たすかどうかを評価することができる。また、プロファイル・マネージャに手続き的に照会することができるサブスクリプション関数を適用することによって合致を計算し、順位付け、フィルタリングなどのような付加的な計算を実行し、どのストリームが関数を満たすかを示すブール論理結果を戻すこともできる。
【００９１】
本発明の実施形態は、さらに、コンシューマ・サブスクリプションを動的に変更すること（例えば、サブスクライバが元のデータにもはや関心をもたなくなったとき、またはサブスクライバの関心が他のものに移ったときに）、ならびに、出力ポートによって生成されたエクスポートされたデータの特性のエクスポートされた記述（すなわち、ストリーム・プロファイル）を動的に変更することを含むことができる。また、図１１に示された技法は、データ・コンシューマに接続されることになるデータ源の集合に制約を課すために該コンシューマによって利用される、順位付け基準を作成および修正することを含むことができる（例えば、この場合、サブスクライバは、ある事前定義された基準に従ってデータ源を順位付けすることができる）。
【００９２】
さらに、本発明の実施形態は、トリガ機構を用いてストリームの合致を動的に計算することを含むことができる。ストリームの合致を計算することは、例えば、各サブスクリプション表現および各サブスクリプション関数を登録すること、新たに登録されたストリーム上の各サブスクリプション表現および／または各サブスクリプション関数に基づいてトリガ条件を評価すること、ストリーム・プロパティにおける変化に基づいてトリガ条件を評価すること、ならびにサブスクリプション表現および／または各サブスクリプション関数における変化に基づいてトリガ条件を評価することを含むことができる。
【００９３】
図１１に示される技法は、ここで説明されるように、システム上で動作させることもでき、システムは、別個のソフトウェア・コンポーネントおよび／またはモジュールを含み、別個のソフトウェア・コンポーネントの各々は、有形のコンピュータ可読記録可能ストレージ媒体上で具体化される。別個のソフトウェア・コンポーネントは、ハードウェア・プロセッサ上で実行される、アプリケーション・プログラミング・インターフェース・コンポーネントと、プロファイル・マネージャ・コンポーネントと、サブスクリプション表現マネージャ・コンポーネントと、トリガ・マネージャ・コンポーネントと、およびデータ・フロー・コンポーネントとを含むことができる。
【００９４】
さらに、図１１に示される技法は、コンピュータ・プログラム製品によって実装されることが可能であり、コンピュータ・プログラム製品は、データ処理システム内のコンピュータ可読ストレージ媒体内に格納されたコンピュータ使用可能プログラム・コードを含むことができ、この場合のコンピュータ使用可能プログラム・コードは、ネットワークを介して遠隔データ処理システムからダウンロードされたものである。また、本発明の実施形態においては、コンピュータ・プログラム製品は、サーバ・データ処理システム内のコンピュータ可読ストレージ媒体内に格納されたコンピュータ使用可能プログラム・コードを含むことができ、この場合のコンピュータ使用可能プログラム・コードは、遠隔システムと共にコンピュータ可読ストレージ媒体内で使用するために、ネットワークを介して遠隔データ処理システムにダウンロードされる。
【００９５】
専用ハードウェア、汎用プロセッサ、ファームウェア、ソフトウェア、またはそれらの組み合わせを利用する種々の技法を用いて、本発明またはその構成要素を実装することができる。本発明の実施形態、またはその要素は、指示された方法ステップを実施するためのコンピュータ使用可能プログラム・コードを有するコンピュータ使用可能媒体を含む、コンピュータ製品の形で実装することができる。さらにまた、本発明の実施形態、またはその要素は、メモリと、該メモリに結合されるとともに例示的な方法ステップを実施するように動作可能な少なくとも１つのプロセッサとを含む、装置の形で実装することができる。
【００９６】
実施形態は、汎用コンピュータまたはワークステーション上で実行されるソフトウェアを用いることができる。図１２を参照すると、そのような実装は、例えば、プロセッサ１２０２と、メモリ１２０４と、例えばディスプレイ１２０６およびキーボード１２０８により形成される入力／出力インターフェースとを用いることができる。ここで用いられる「プロセッサ」という用語は、例えば、ＣＰＵ（中央処理装置）および／またはその他の形態の処理回路を含む処理装置のような、いずれかの処理装置を含むことを意図する。さらに、「プロセッサ」という用語は、１つより多くの個別のプロセッサを指すことがある。「メモリ」という用語は、プロセッサまたはＣＰＵに関連付けられたメモリ、例えば、ＲＡＭ（ランダム・アクセス・メモリ）、ＲＯＭ（読み出し専用メモリ）、固定メモリ・デバイス（例えばハードドライブ）、取り外し可能メモリ・デバイス（例えばディスケット）、フラッシュ・メモリなどを含むことを意図する。さらに、ここで用いられる「入力／出力インターフェース」という語句は、例えば、処理ユニットにデータを入力するための１つまたは複数の機構（例えば、マウス）、および処理ユニットに関連付けられた結果を提供するための１つまたは複数の機構（例えば、プリンタ）を含むことを意図する。プロセッサ１２０２と、メモリ１２０４と、ディスプレイ１２０６およびキーボード１２０８のような入力／出力インターフェースとは、例えば、データ処理ユニット１２１２の一部としてのバス１２１０を介して、相互接続することができる。例えばバス１２１０を介した適切な相互接続は、コンピュータ・ネットワークとインターフェースするために設けることができる、ネットワーク・カードのようなネットワーク・インターフェース１２１４に対して設けることもでき、媒体１２１８とインターフェースするために設けることができる、ディスケットまたはＣＤ−ＲＯＭドライブのような媒体インターフェース１２１６に対して設けることもできる。
【００９７】
したがって、本発明の方法を実施するための命令またはコードを含むコンピュータ・ソフトウェアは、ここで説明されるように、１つまたは複数の関連付けられたメモリ・デバイス（例えば、ＲＯＭ、固定または取り外し可能メモリ）内に格納することができ、そして、使用される準備ができると、一部または全体が（例えばＲＡＭに）ロードされ、ＣＰＵによって実行することができる。このようなソフトウェアは、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むことができるが、これらに限定されるものではない。
【００９８】
さらに、本発明は、コンピュータもしくはいずれかの命令実行システムによって使用すされるかまたはこれらと関連して使用されるプログラム・コードを提供する、コンピュータ使用可能媒体またはコンピュータ可読媒体（例えば、媒体１２１８）からアクセス可能なコンピュータ・プログラム製品の形態を取ることができる。この説明の目的に関して、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置もしくはデバイスによって使用されるかまたはこれらと関連して使用される、いずれかの装置とすることができる。媒体は、ここで述べられた１つまたは複数の方法ステップを実行するためのプログラム・コードを格納することができる。
【００９９】
媒体は、電子、磁気、光学、電磁気、赤外線もしくは半導体のシステム（または装置もしくはデバイス）、または伝搬媒体とすることができる。コンピュータ可読媒体の例として、半導体または固体メモリ（例えば、メモリ１２０４）、磁気テープ、取り外し可能コンピュータ・ディスケット（例えば、媒体１２１８）、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、剛性磁気ディスクおよび光ディスクが挙げられる（但し、伝搬媒体を除く）。現在の光ディスクの例として、コンパクトディスク−読み出し専用メモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−読み出し／書き込み（ＣＤ−Ｒ／Ｗ）およびＤＶＤが挙げられる。
【０１００】
プログラム・コードを格納し、および／または実行するのに適したデータ処理システムは、システム・バス１２１０を通じてメモリ要素１２０４に直接または間接に結合される少なくとも１つのプロセッサ１２０２を含む。メモリ要素は、プログラム・コードの実際の実行中に用いられるローカル・メモリと、大容量記憶デバイスと、実行中に大容量記憶デバイスからコードを取り出さなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的な記憶場所を提供するキャッシュ・メモリとを含むことができる。
【０１０１】
入出力デバイスすなわちＩ／Ｏデバイス（キーボード１２０８、ディスプレイ１２０６、ポインティング・デバイスなどを含むがこれらに限定されない）は、システムに、直接的に（バス１２１０を介するなどして）、または介在するＩ／Ｏコントローラ（分かりやすくするため省いた）を通して、結合することができる。
【０１０２】
ネットワーク・インターフェース１２１４のようなネットワーク・アダプタをシステムに結合して、データ処理システムを、介在する私設ネットワークまたは公衆ネットワークを通じて他のデータ処理システムまたは遠隔のプリンタもしくは記憶デバイスに結合できるようにすることもできる。モデム、ケーブル・モデムおよびイーサネット・カードは、現在利用可能なネットワーク・アダプタのタイプのうちのごく一部である。
【０１０３】
特許請求の範囲を含めて、ここで用いられる「サーバ」は、サーバ・プログラムを実行する物理的データ処理システム（例えば、図１２に示されるシステム１２１２）を含む。このような物理サーバは、ディスプレイおよびキーボードを含むこともあり、含まないこともあることが理解されよう。
【０１０４】
本発明の動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、ＳｍａｌｌＴａｌｋ、Ｃ＋＋などのようなオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語のいずれかの組み合わせで記述することができる。プログラム・コードは、全体をユーザのコンピュータ上で実行することもでき、スタンドアロン型のソフトウェア・パッケージとして一部をユーザのコンピュータ上で実行することもでき、一部をユーザのコンピュータ上で実行し、一部をリモート・コンピュータ上で実行することもでき、または、全体をリモート・コンピュータもしくはサーバ上で実行することもできる。後者のシナリオの場合、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、または（例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて）外部のコンピュータへの接続がなされる場合もある。
【０１０５】
本発明の実施形態を、方法、装置（システム）およびコンピュータ・プログラム製品の流れ図および／またはブロック図を参照して、ここで説明してきた。流れ図および／またはブロック図の各ブロック、ならびにフローチャート図および／またはブロック図内のブロックの組合せは、コンピュータ・プログラム命令によって実装することができることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに与えて機械を製造し、それにより、コンピュータまたは他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャートおよび／またはブロック図の１つまたは複数のブロックにおいて指定された機能／動作を実装するための手段を作り出すようにすることができる。
【０１０６】
これらのコンピュータ・プログラム命令を、コンピュータまたは他のプログラム可能データ処理装置に特定の方式で機能するように指示することができる有形のコンピュータ可読媒体に格納して、それにより、そのコンピュータ可読媒体に格納された命令が、フローチャートおよび／またはブロック図の１つまたは複数のブロックにおいて指定された機能／動作を実装する命令手段を含む製品を製造するようにさせることもできる。コンピュータ・プログラム命令を、コンピュータまたは他のプログラム可能データ処理装置にロードして、コンピュータまたは他のプログラム可能データ処理装置上で一連の動作ステップを実施させてコンピュータ実装プロセスを生成し、それにより、コンピュータまたは他のプログラム可能装置上で実行される命令が、フローチャートおよび／またはブロック図の１つまたは複数のブロックにおいて指定された機能／動作を実装するためのプロセスを提供するようにさせることもできる。
【０１０７】
図面内のフローチャートおよびブロック図は、本発明の種々の実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能および動作を示す。この点に関して、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実装するための１つまたは複数の実行可能命令を含む、コンポーネント、モジュール、セグメント、またはコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に記された機能は、図中に記された順序とは異なる順序で生じることがあることにも留意されたい。例えば、連続して図示された２つのブロックが、関与する機能に応じて、実際には実質的に同時に実行されることもあり、または、これらのブロックは、ときとして逆順で実行されることもある。ブロック図および／またはフローチャート図内の各ブロック、ならびにブロック図および／またはフローチャート図内のブロックの組合せは、指定された機能または動作を実行する専用ハードウェア・ベースのシステム、または専用のハードウェアとコンピュータ命令との組合せによって実装することができることにも留意されたい。
【０１０８】
さらにまた、ここで説明された方法のいずれもが、有形のコンピュータ可読ストレージ媒体上で具体化された別個のソフトウェア・コンポーネントを含むシステムを提供する、付加的なステップを含むことが可能であり、そのコンポーネントは、図３に示されたコンポーネントのいずれかまたは全てを含むことができることに留意されたい。次いで、その方法ステップは、上述のように、ハードウェア・プロセッサ上で実行される、システムの別個のソフトウェア・コンポーネントおよび／またはサブ・コンポーネントを用いて遂行することができる。さらに、コンピュータ・プログラム製品は、別個のソフトウェア・コンポーネントを有するシステムを提供することを含めて、ここで説明された１つまたは複数の方法ステップを遂行するように適合されたコードを有する、有形のコンピュータ可読ストレージ媒体を含むことができる。
【０１０９】
いずれの場合においても、ここで図示されたコンポーネントは、種々の形態のハードウェア、ソフトウェア、またはその組合わせで実装することができることを理解されたい。例えば、特定用途向け集積回路（ＡＳＩＣＳ）、機能回路、関連付けられたメモリを有する１つまたは複数の適切にプログラムされた汎用デジタル・コンピュータなどである。ここで提供される本発明の教示が与えられれば、当業者であれば、本発明のコンポーネントの他の実装を意図することが可能である。
【０１１０】
本発明の少なくとも１つの実施形態は、例えば、アプリケーションによって生成されるデータの特性をプロデューサの粒度で記述することのような、有利な効果を提供することができる。
【０１１１】
上述の本発明の例示的な実施形態は、多数の異なる様式で実装することができることが、認識されるはずであり、かつ理解されるべきである。ここで提供される本発明の教示が与えられれば、当業者であれば、本発明のその他の実装を意図することができる。実際、本発明の例示的な実施形態を、添付の図面を参照して説明してきたが、本発明は、これらのそのとおりの実施形態に限定されるものではなく、当業者であれば、本発明の範囲および真意から逸脱することなく、その他の種々の変更および修正を行うことができることを理解されたい。
【符号の説明】
【０１１２】
１０４：出力ポート
１０６：ストリーム・プロファイル
１０８：ストリーム接続
１１０：入力ポート
１１２：処理要素
１１４：ストリーム・サブスクリプション表現
１２１０：バス
１２１２：データ処理ユニット
【図１】
0005420065.tif 000002
【図２】
0005420065.tif 000003
【図３】
0005420065.tif 000004
【図４】
0005420065.tif 000005
【図５】
0005420065.tif 000006
【図６】
0005420065.tif 000007
【図７】
0005420065.tif 000008
【図８】
0005420065.tif 000009
【図９】
0005420065.tif 000010
【図１０】
0005420065.tif 000011
【図１１】
0005420065.tif 000012
【図１２】
0005420065.tif 000013