ストリーム処理の概要
ストリームベースの計算およびストリームベースのデータベース計算が、データベース・システム用の発達中の技術として現れている。ストリーミング・データがデータベース・ファイルに到達する前に、そのストリーミング・データを処理および照会するアプリケーションをユーザが作成できるようにする製品が、利用可能である。ユーザは、この新たに出現した技術を使用して、インバウンド・データ・レコードが、結果を使用できる時間が極めて短い(多くの場合、1秒未満である)「イン・フライト」であるときに、インバウンド・データ・レコードに適用される処理論理を指定することができる。このタイプの処理を使用してアプリケーションを構築することによって、広範囲のさまざまな革新的アプリケーション、システム、およびプロセスの開発を可能にすると共に、アプリケーション・プログラマーおよびデータベース開発者にとっての新しい課題を提示する、新しいプログラミング・パラダイムが切り開かれた。
ストリーム・コンピューティング・アプリケーションでは、データが1つのストリーム・オペレータ(stream operator)から次のストリーム・オペレータへ(例えば、TCP/IPソケットを経由して)流れるように、ストリーム・オペレータが互いに接続される。ストリーム・オペレータは、データを受信したときに、属性を追加するか、または差し引くことによって、あるいはタプル内の既存の属性の値を更新することによって、タプルを変更することができる、解析論理などの動作を実行してよい。解析論理が完了した後に、新しいタプルが次のストリーム・オペレータに送信される。実行ファイル(すなわち、処理要素)を作成し、処理要素を複数のノード上で複製し、ノード間で負荷バランスを調整することによって、ノード間でアプリケーションを分散して、拡張性が実現される。ストリーム・コンピューティング・アプリケーション内のストリーム・オペレータは、一緒に融合されて、実行ファイルである処理要素を形成することができる。これを行うことによって、処理要素は、共通のプロセス空間を共有できるようになり、ストリーム・オペレータ間の通信速度が、プロセス間通信技術を使用して(例えば、TCP/IPソケットを使用して)利用可能な通信速度よりも非常に速くなる。さらに、ストリーム・コンピューティング・アプリケーションを介して、処理要素を、データのフローを表すオペレータ・グラフに動的に挿入するか、またはそのオペレータ・グラフから動的に削除することができる。特定のストリーム・オペレータは、他のストリーム・オペレータと同じオペレーティング・システム・プロセス内に存在しても、存在しなくてもよい。加えて、同じオペレータ・グラフ内のストリーム・オペレータは、異なるノード上(例えば、異なる計算ノード上または計算ノードの異なるコア上)でホストされてよい。
データは、「タプル」の形態で、あるストリーム・オペレータから別のストリーム・オペレータに流れる。タプルは、実体に関連付けられた1つまたは複数の属性のシーケンスである。属性は、さまざまなタイプ(例えば、整数、浮動小数、ブール、文字列など)のいずれかであってよい。属性は、順序付けられてよい。タプルは、実体に関連付けられた属性に加えて、メタデータ(すなわち、タプルに関するデータ)を含んでよい。タプルは、1つまたは複数の追加の属性またはメタデータをタプルに追加することによって、拡張されてよい。本明細書において使用されるとき、「ストリーム」または「データ・ストリーム」は、タプルのシーケンスを指す。通常、ストリームは、タプルの擬似無限のシーケンスであると考えられてよい。
タプルは、ストリーム・オペレータおよび処理要素によって受信され、出力されてよい。ただし、あるストリーム・オペレータまたは処理要素によって受信される特定の実体と一致する入力タプルは、出力タプルが入力タプルと同じ実体またはデータと一致する場合でも、通常、このストリーム・オペレータまたは処理要素によって出力されるタプルと同じタプルであるとは考えられない。出力タプルは、何らかの方法で入力タプルから変更される必要はない。
それでも、出力タプルは、ストリーム・オペレータまたは処理要素によって何らかの方法で変更されてよい。属性またはメタデータは、追加、削除、または変更されてよい。例えばタプルは、多くの場合、2つ以上の属性を含む。ストリーム・オペレータまたは処理要素は、複数の属性を含んでいるタプルを受信し、入力タプルと一致するタプルを出力してよい。ストリーム・オペレータまたは処理要素は、1つの属性を除く出力タプルのすべての属性が入力タプルの属性と同じになるように、属性のうちの1つのみを変更してよい。
通常、ストリーム・オペレータまたは処理要素によって出力される特定のタプルは、入力タプルが処理要素によって変更されない場合でも、対応する入力タプルと同じタプルであると考えられなくてよい。ただし、本説明および特許請求の範囲を簡略化するために、対応する入力タプルと同じデータ属性を含んでいるか、または対応する入力タプルと同じ実体に関連付けられている出力タプルは、特に文脈で示されるか、または明示的に示されない限り、本明細書では同じタプルであると見なされる。
ストリーム・コンピューティング・アプリケーションは、効率的にリアルタイムに処理される必要のある大量のデータを処理する。例えば、ストリーム・コンピューティング・アプリケーションは、1秒当たり数十万のメッセージ、および1日当たり最大数ペタバイトのデータを、継続的に取り込んで解析することができる。したがって、ストリーム・コンピューティング・アプリケーション内の各ストリーム・オペレータは、受信されたタプルを1秒未満で処理する必要があることがある。複数のストリーム・オペレータが同じ処理要素に配置されない限り、タプルがあるストリーム・オペレータから別のストリーム・オペレータへ送信されるたびに、プロセス間通信経路を使用する必要がある。プロセス間通信経路は、ストリーム・コンピューティング・アプリケーションにおいて極めて重要なリソースになり得る。さまざまな実施形態によれば、1つまたは複数のプロセス間通信経路で利用可能な帯域幅を節約することができる。プロセス間通信の帯域幅を効率的に使用することによって、処理を高速化できる。
図1は、一部の実施形態に従って、ストリーム・コンピューティング・アプリケーションを実行するように構成することができる1つの例示的なコンピューティング・インフラストラクチャ100を示している。コンピューティング・インフラストラクチャ100は、管理システム105および2つ以上の計算ノード110A〜110D(本明細書では、総称して特徴110と呼ばれる)(すなわち、ホスト)を含んでおり、これらは、1つまたは複数の通信ネットワーク120を使用して、通信によって互いに結合される。通信ネットワーク120は、1つまたは複数のサーバ、ネットワーク、またはデータベースを含んでよく、特定の通信プロトコルを使用して計算ノード110間でデータを転送してよい。コンパイラ・システム102は、管理システム105および計算ノード110に、直接的または通信ネットワーク120を介して、通信によって結合されてよい。さらに、データベース140を含んでいるデータベース・システム115は、管理システム105または計算ノード110あるいはその両方との通信のために、ネットワーク120に通信によって結合されてよい。
通信ネットワーク120は、さまざまなタイプの物理通信チャネルまたは「リンク」を含んでよい。それらのリンクは、有線、無線、光学的、または任意のその他の適切な媒体であってよい。加えて、通信ネットワーク120は、ルータ、スイッチ、またはブリッジなどの、ルーティング、スイッチング、およびその他の機能を実行するためのさまざまなネットワーク・ハードウェアおよびネットワーク・ソフトウェアを含んでよい。通信ネットワーク120は、ストリーム・コンピューティング・アプリケーション専用であるか、または他のアプリケーションおよびユーザと共有されてよい。通信ネットワーク120は、任意の大きさであってよい。例えば、通信ネットワーク120は、単一のローカル・エリア・ネットワーク、またはインターネットなどの大きい地理的領域に広がる広域ネットワークを含んでよい。それらのリンクは、特定の速度でデータを転送するために、異なるレベルの帯域幅および容量を提供してよい。特定のリンクが提供する帯域幅は、通信媒体のタイプ、および特定のネットワーク・ハードウェアまたはネットワーク・ソフトウェアが正常に、または最大の能力で機能しているかどうかを含む、さまざまな要因に応じて、変化することがある。加えて、特定のリンクがストリーム・コンピューティング・アプリケーションに提供する帯域幅は、そのリンクが他のアプリケーションおよびユーザと共有されている場合、変化することがある。利用可能な帯域幅は、他のアプリケーションおよびユーザによってリンクに与えられる負荷に応じて変化することがある。特定のリンクが提供する帯域幅は、時刻、曜日、月の特定の日、または季節などの、時間的な要因に応じて変化することもある。
コンピュータ・システムのハードウェア・コンポーネント
図2は、代表的な汎用コンピュータ・システム200の主要ハードウェア・コンポーネントの上位のブロック図である。1つまたは複数の実施形態では、コンパイラ・システム102、管理システム105、計算ノード110、およびデータベース・システム115はそれぞれ、各1つまたは複数の汎用コンピュータ・システムとして物理的に具現化され、システム200は、そのような汎用コンピュータ・システムを表している。
コンピュータ・システム200は、メイン・メモリ202からの命令を実行し、データを処理する、1つまたは複数の汎用プログラマブル・プロセッサ(CPU)201を含んでいる。メイン・メモリ202は、さまざまなメモリ技術のいずれかを使用する少なくとも1つ(通常は複数)の半導体集積回路チップ・モジュールを備えている揮発性ランダム・アクセス・メモリであるのが好ましく、メイン・メモリ202内のデータは、CPU201によって処理するために、ストレージから、またはその他の方法で読み込まれる。
1つまたは複数の通信バス205が、CPU201、メイン・メモリ202、およびさまざまなインターフェイス・ユニット211、212、213(I/Oプロセッサ(IOP:I/O processors)またはI/Oアダプタ(IOA:I/O adapters)と呼ばれることもある)の間でデータを転送するためのデータ通信経路を提供する。インターフェイス・ユニットは、さまざまなストレージ、I/Oデバイス、またはネットワーク、あるいはその組み合わせとの通信をサポートする。例えば、ストレージ・インターフェイス・ユニット211は、必要に応じてメモリに読み込むことができるデータの不揮発性ストレージを提供する1つまたは複数のストレージ・デバイス221〜223の取り付けをサポートする。そのようなストレージ・デバイスは、周知の回転磁気ハード・ディスク・ドライブ・ストレージ・デバイス、半導体デバイス(SSD:solid state devices)、取り外し可能なメモリ・カード、光ストレージ、フラッシュ・メモリなどを含んでよく、ネットワーク接続ストレージ(NAS:network attached storage)、ストレージ・エリア・ネットワーク(SAN:storage area network)を介して取り付けられたデバイス、またはディスク・ドライブのアレイ、またはホストには単一の大規模なストレージ・デバイスのように見えるように構成されたその他のストレージ・デバイス、あるいはその組み合わせをさらに含むことができる。ストレージは、1つまたは複数のネットワークを介してアクセスできるクラウド・ストレージ・デバイスをさらに含んでよい。I/Oデバイス・インターフェイス・ユニット212は、ユーザ端末、ディスプレイ、キーボードまたはその他の入力デバイス、プリンタなどのさまざまなその他のタイプのI/Oデバイスのいずれかの取り付けをサポートしてよく、その他のタイプまたは追加のタイプのI/Oデバイスが使用され得るということが理解されている。ネットワーク・インターフェイス・アダプタ213は、1つまたは複数の他のデジタル・デバイスと通信するために、1つまたは複数の外部ネットワークへの接続をサポートしてよく、具体的には、図1において表されたデバイスと通信するために、ネットワーク120への接続をサポートしてよい。ネットワーク・アダプタ213は、単一のネットワークへの冗長な接続をサポートすることができ、または互いに通信してもしなくてもよい別々のネットワークに結合され得る。そのような外部ネットワークは、インターネットを含むのが好ましく、ローカル・エリア・ネットワークなどの1つまたは複数の中間ネットワークを含んでよく、この中間ネットワークを介してインターネットとの通信が実現される。
図2が、汎用コンピュータ・システム200の代表的な上位の主要コンポーネントを表すよう意図されているということ、個々のコンポーネントが、図2において表されたものよりも複雑であってよいということ、図2に示されたコンポーネント以外のコンポーネント、または追加のコンポーネントが存在してよいということ、そのようなコンポーネントの数、タイプ、および構成が変化してよいということ、および複雑なコンピュータ・システムが、図2において表されたコンポーネントより多くのコンポーネントを通常は含んでいるということが、理解されるべきである。そのような追加の複雑さまたは追加の変形の複数の特定の例が本明細書において開示されており、それらが単なる例であり、そのような変形に必ずしも限定されないということが理解されている。
図2では、例示の目的で1つのCPU201のみが示されているが、コンピュータ・システム200は、従来技術において知られているように、複数のCPUを含んでよい。図2では、メイン・メモリ202が単一のモノリシックな実体として示されているが、実際には、メモリ202は、従来技術において知られているように、分散されること、または階層的であること、あるいはその両方であることができる。例えば、メモリは、キャッシュの複数のレベルに存在してよく、それらのキャッシュは、あるキャッシュが命令を保持している間に、別のキャッシュが、1つまたは複数のプロセッサによって使用される、命令以外のデータを保持するように、機能別にさらに分割されてよい。メモリは、さまざまな、いわゆる不均等メモリ・アクセス(NUMA:non-uniform memory access)コンピュータ・アーキテクチャのいずれかにおいて知られているように、異なるCPUまたはCPUのセットにさらに分散され、関連付けられてよい。図2では、通信バス205が単一の実体として示されているが、実際には、さまざまなシステム・コンポーネント間の通信は、通常、バス、インターフェイスなどの複雑な階層によって実現され、この階層内では、高速な経路がCPU201とメモリ202の間の通信に使用され、低速な経路がI/Oインターフェイス・ユニット211〜213との通信に使用される。バス205は、階層的構成、星形構成、またはWeb構成におけるポイントツーポイント・リンク、複数の階層的バス、並列で冗長な経路などの、さまざまな形態のいずれかで配置されてよい。例えば、NUMAアーキテクチャにおいて知られているように、通信経路はノードを基準にして配置される。バスは、例えば、業界標準のPCIバスまたは任意のその他の適切なバス技術を使用してよい。バス205を、さまざまなI/Oデバイスに達するさまざまな通信経路から分離する複数のI/Oインターフェイス・ユニットが示されているが、I/Oデバイスの一部または全部を1つまたは複数のシステム・バスに直接接続することが、代替的に可能である。図1は、ネットワーク120を単一の実体として表しているが、1つまたは複数の実施形態では、1つまたは複数の共有ストレージ・サーバと通信するために、別のネットワークまたはストレージ・バスが存在してよく、そのような通信は、汎用ネットワーク・アダプタ213から分離した専用の1つまたは複数のストレージ・インターフェイス・ユニット211によって駆動されてよい。
図2に示されているコンピュータ・システム200は、複数ユーザの「メインフレーム」コンピュータ・システムなどにおいてよくあるように、複数の取り付けられた端末を含んでよい。コンピュータ・システム200が、リモート・クライアントの代わりに作業を実行するために、計算ノード110またはその他のサーバとして排他的に使用される場合、コンピュータ・システム200は、例えばシステム管理者などによる保守用のインターフェイスとして使用するために、限られた数の端末のみ、または1つの端末のみを含んでよく、場合によっては、全く端末を含まず、管理機能がリモートから実行されてよい。さらに、本明細書では、例示の目的で、特定の機能が単一のコンピュータ・システムにおいて具現化されるとして説明されているが、それらの機能の一部または全部を、互いに通信するコンピュータ・システムの分散ネットワークを使用して代替的に実装することができ、この分散ネットワーク内で、本明細書に記載された異なる機能またはステップが、異なるコンピュータ・システム上で実行される。
図1〜2では、計算ノード110、管理システム105、コンパイラ・システム102、およびデータベース・システム115が独立したシステムとして表されているが、これらの実体のいずれかまたは全部が、1つまたは複数の論理的に分割されたコンピュータ・システムの対応する論理パーティションとして実装されてよい。例えば、CPU210のいずれかは、実際には、対応する論理パーティションに割り当てられた、より大きい論理的に分割されたコンピュータ・システムの処理リソース能力の対応する一部であってよく、メモリ202は、実際には、対応する論理パーティションに割り当てられた、より大きい論理的に分割されたコンピュータ・システムのメモリ容量の対応する一部であってよい。
さまざまなシステム・コンポーネントが上位で示され、説明されたが、標準的なコンピュータ・システムが、本発明を理解することにおいて本質的ではない、示されていない多くのその他のコンポーネントを含んでいるということが、理解されるべきである。
ストリーム・コンピューティング・コンポーネント
図3は、さまざまな実施形態に従って、計算ノード110のメモリ300内の特定のソフトウェア・コンポーネントを詳細に示す概念図であり、計算ノード110は、図1の計算ノード110A〜110Dのうちの1つと同じであってよい。図3に示されているように、代表的な計算ノードのメモリは、オペレーティング・システム・カーネル301、1つまたは複数の処理要素311、およびバッファ313を含んでいる。
オペレーティング・システム・カーネル301は、従来技術においてよく知られているように、デバイス・インターフェイス、メモリ・ページの管理、複数のタスクの管理およびディスパッチ、アプリケーション・プログラム用の共通サービスなどの、さまざまな低レベルのソフトウェア機能を提供する実行コードおよび状態データである。特に、OSカーネル301は、ネットワーク・インターフェイス213を介したネットワーク120を含む1つまたは複数のネットワークとの通信を処理するために、1つまたは複数のネットワーク・アダプタ・ドライバ302を含むのが好ましい。
1つまたは複数の処理要素311はそれぞれ、各機能をデータ・ストリーム・コンピューティング・アプリケーションの一部として実行するためのコードおよび状態データを含む。ストリーム・コンピューティング・アプリケーションは、「処理要素」コンテナ311内にコンパイルされてよい1つまたは複数のストリーム・オペレータ312を含んでよい。メモリ300は、2つ以上の処理要素311を含んでよく、各処理要素は、1つまたは複数のストリーム・オペレータ312を含んでいる。各ストリーム・オペレータ312は、ストリーム・コンピューティング・アプリケーションにおいて、処理要素に流れ込むタプルを処理し、同じ処理要素、他の処理要素、または同じ処理要素と他の処理要素の両方に含まれる他のストリーム・オペレータ312にタプルを出力する、コードの一部を含んでよい。処理要素311は、同じ計算ノード110上にあるか、または通信ネットワーク120を介してアクセスできる他の計算ノード上にある、他の処理要素にタプルを渡してよい。例えば、計算ノード110A上の処理要素311は、計算ノード110B上の処理要素311にタプルを出力してよい。一実施形態では、処理要素311が、1つのCPUのみによって実行されるように割り当てられるが、他の実施形態では、処理要素311のストリーム・オペレータ312が、異なる各CPU上で実行できる複数のスレッドを含んでよい。
バッファ313は、ストリーム・コンピューティング・アプリケーションの一部としてストリーミングされているデータを保持するため、特にデータ・タプルを保持するための、メモリ300の一部である。バッファ313は、単一の実体であってよいが、1つまたは複数の実施形態では、ウィンドウとも呼ばれるローカル・バッファ314、データ・ストリーミング・アプリケーションのさまざまな実体間でメッセージを渡すための1つまたは複数のTCPIPバッファ315、および各1つまたは複数のスレッドによって処理されるデータをキューに入れるための1つまたは複数のスレッド・ポート316を含む、複数のバッファが存在する。
図4は、さまざまな実施形態に従う、ストリーミング・データ・アプリケーション・バッファ313内のタプルのセットの概念的表現である。バッファ314〜316のいずれかが、1つまたは複数のタプルを保持してよい。図4に示されているように、タプルのセットは1つまたは複数のタプル401を含み、各タプルは、複数のフィールドまたは属性402〜404として論理的に編成される。タプルのセットは、テーブルとして概念的に表されてよく、このテーブル内で、各タプル401はテーブルの各行に対応し、タプルの各属性またはフィールドはテーブルの各列に対応する。テーブルとして概念的に表されているが、メモリ内のタプルのセットの実際の構造は変化してよく、異なるバッファ314〜316のそれぞれにおいて異なってよく、このセットは不連続なメモリ・アドレス領域を占めてよく、タプルのサイズは変化してよく、一部の属性はタプルのサブセット内にのみ存在してよい、などとなる。さまざまな実施形態では、データ・ストリーミング・アプリケーションは、データベースのテーブルに追加されるタプルを生成するが、データ・ストリーミング・アプリケーション内のタプル401の構造および属性は、リレーショナル・データベースのテーブル内のタプルの構造および属性と必ずしも同一ではない。バッファ313に格納されるタプル401は、すべて単一のタイプ(すなわち、すべてが同じ属性および構造を有する)であってよく、または異なるタイプのタプルであってよい。1つまたは複数の実施形態では、タプルは、オペレータ・グラフ内のタプルの現在の状態に応じて、別々のセット内または異なるバッファ内で、別々にグループ化されてよい。例えば、あるタプルのセットは、計算ノード内の特定の処理要素311による処理を待っているタプル401を含んでよく、一方、別のセットは、特定の処理要素によってすでに処理されているタプル401を含んでいる。
1つまたは複数の実施形態では、計算ノードのメモリ300は、データ・ストリーミング・アプリケーションの動作をトレースする(具体的には、オペレータ・グラフを通るタプルの進行をトレースする)トレース・データ318をさらに含んでよい。このトレース・データは、オペレータ・グラフ内の下流のデータ検索動作を予測することに使用するためのオペレータ・グラフ・プロファイル・データ(operator graph profile data)の構築に使用されてよい。
1つまたは複数の実施形態では、処理要素311内の状態データは、検索マスク321および1つまたは複数のトリガー・パラメータ・データセット322をさらに含む。検索マスク321は、先行する検索予測事象(lookup predictive event)を検出することに応答して先行検索動作(anticipatory lookup operation)をトリガーすることがある、1つまたは複数の処理要素、オペレータ、またはその他のコード部分ごとに、先行検索が有効化されているかどうかを示す、ビット・マスクまたは同様の構造である。トリガー・パラメータ・データセット322は、各処理要素、オペレータ、またはその他の場所にそれぞれ対応する、1つまたは複数のデータセットを含んでおり、検索事象のトリガーおよびその結果生じる検索事象自体を制御するパラメータを含んでいる。本明細書では、データ・ストリーミング・アプリケーションの実行中の検索マスク321およびトリガー・パラメータ・データセット322の使用が詳細に説明される。
図5は、さまざまな実施形態に従って図1の管理システム105のメモリ500内の特定のソフトウェア・コンポーネントを詳細に示す概念図である。図5に示されているように、代表的な管理システムのメモリは、オペレーティング・システム・カーネル501、ストリーム・マネージャ134、オペレータ・グラフ132、プロファイル・データ・アナライザ523、およびオペレータ・グラフ・プロファイル・データ525を含んでいる。
オペレーティング・システム・カーネル501は、従来技術においてよく知られているように、デバイス・インターフェイス、メモリ・ページの管理、複数のタスクの管理およびディスパッチ、アプリケーション・プログラム用の共通サービスなどの、さまざまな低レベルのソフトウェア機能を提供する実行コードおよび状態データである。特に、OSカーネル501は、ネットワーク・インターフェイス213を介したネットワーク120を含む1つまたは複数のネットワークとの通信を処理するために、1つまたは複数のネットワーク・アダプタ・ドライバ502を含むのが好ましい。
ストリーム・マネージャ134は、データ・ストリーミング・アプリケーションの動作を管理し、特に、オペレータ・グラフ132を維持する。オペレータ・グラフ132は、タプルを処理するために処理要素311にルーティングする方法を定義するデータ構造である。
1つまたは複数の実施形態では、ストリーム・マネージャ内の状態データは、検索マスク521および1つまたは複数のトリガー・パラメータ・データセット522をさらに含む。状態データは、計算ノード110のメモリ300内の検索マスク321のローカル・コピーおよびトリガー・パラメータ・データセット322のローカル・コピーに類似しているが、ストリーム・マネージャは、データ・ストリーミング・アプリケーション全体に関する全体的な状態データを含み、一方、計算ノードのメモリ300内のこのデータのローカル・コピーは、通常、その計算ノード内の処理要素に適用できる状態データのみを保持する。本明細書では、データ・ストリーミング・アプリケーションの実行中の検索マスク521およびトリガー・パラメータ・データセット522の使用が詳細に説明される。
プロファイル・データ・アナライザ523は、トレース・データをさまざまな計算ノードから収集し、そのデータを解析してオペレータ・グラフ・プロファイル・データ525を構築し、維持する、実行コードおよび状態データである。オペレータ・グラフ・プロファイル・データ525は、検索事象サマリー・レコード526およびトレース・データ527を含む。トレース・データ527は、さまざまな計算ノードからのトレース・データ318のすべてまたは選択的部分の集合であり、検索事象サマリー・レコード526を生成するためにプロファイル・データ・アナライザによって使用される。検索事象サマリー・レコードは、過去の検索事象のパターンを表す。例えば、検索事象サマリー・レコードは、さまざまな先行する検索予測事象ごとに、予測されたその後発生する各検索事象を要約することができ、必要に応じて、先行する各事象に関連付けられた1つまたは複数の確率、または先行する事象と検索事象の間の時間遅延の測定値、あるいはその両方を含むことができる。先行する事象は、特定の属性値を含み、特定の処理要素で発生する、特定のタイプの各タプルであってよい。例示的な検索事象サマリー・データ(lookup event summary data)526が図11に示されており、本明細書において詳細に説明される。
図6は、さまざまな実施形態に従って図1のコンパイラ・システム102のメモリ600内の特定のソフトウェア・コンポーネントを詳細に示す概念図である。図6に示されているように、代表的なコンパイラ・システムのメモリは、オペレーティング・システム・カーネル601、コンパイラ136、ならびにソース・モジュール611、中間コード・モジュール612、およびオブジェクト・コード・モジュール613の形態でのコンパイラの入力および出力を含んでいる。
オペレーティング・システム・カーネル601は、従来技術においてよく知られているように、デバイス・インターフェイス、メモリ・ページの管理、複数のタスクの管理およびディスパッチ、アプリケーション・プログラム用の共通サービスなどの、さまざまな低レベルのソフトウェア機能を提供する実行コードおよび状態データである。特に、OSカーネル601は、ネットワーク・インターフェイス213を介したネットワーク120を含む1つまたは複数のネットワークとの通信を処理するために、1つまたは複数のネットワーク・アダプタ・ドライバ602を含むのが好ましい。
コンパイラ136は、ソース・コードまたはステートメント611を含んでいるモジュールを、プロセッサ上で実行される機械命令を含んでいるオブジェクト・コード613にコンパイルする、実行コードおよびデータ構造である。一実施形態では、コンパイラ136は、モジュールを中間形態612に変換してから、この中間形態をオブジェクト・コードに変換してよい。コンパイラ136は、処理要素のセット、およびストリーム・コンピューティング・アプリケーションを記述する構成ファイルであるアプリケーション記述言語ファイル(ADLファイル:application description language file)を含むことができる、配置可能な中間生成物のセットを出力してよい。一部の実施形態では、コンパイラ136は、インタープリタの一部として実行されるジャストインタイム・コンパイラであってよい。他の実施形態では、コンパイラ136は、最適化コンパイラであってよい。さまざまな実施形態では、コンパイラ136は、ピープホール最適化、局所的最適化、ループ最適化、手続き間またはプログラム全体の最適化、機械語の最適化、あるいはオブジェクト・コードを実行するために必要な時間を減らすか、もしくはオブジェクト・コードを実行するために必要なメモリ量を減らすか、またはその両方を減らす、任意のその他の最適化を実行してよい。コンパイラ136の出力は、オペレータ・グラフ(例えば、オペレータ・グラフ132)によって表されてよい。
コンパイラ136は、アプリケーション管理者に、プロファイル駆動型融合最適化(profile-driven fusion optimization)によって性能を最適化する能力を提供してもよい。オペレータを融合することによって、トランスポートの呼び出し回数を減らして、性能を向上することができる。ストリーム・オペレータを融合することによって、プロセス間通信技術を使用して利用できるよりも高速なオペレータ間の通信を実現できるが、オペレータを融合することを決定する場合、複数の計算ノード間で処理を分散することの効果と、より高速なオペレータ間通信の効果との間のバランスを調整する必要がある。コンパイラ136は、ユーザによって指定された制約を順守しながら、1つまたは複数の処理要素によってホストされるオペレータを最適に融合する方法を決定するように、融合プロセスを自動化してよい。このプロセスは、プロファイリング・モードでアプリケーションをコンパイルし、アプリケーションを実行すること、次に再コンパイルし、このその後のコンパイル中にオプティマイザを使用することを含む、二段階のプロセスであってよい。しかし、最終的な結果は、アプリケーション構成が最適化された、コンパイラによって提供される配置可能なアプリケーションである。
コンパイラ・システムのメモリ600は、共通実行時コード(common run-time code)614をさらに含む。共通実行時コードは、ソース・コード、中間コード、またはオブジェクト・コードのいずれかであることができる。共通実行時コード614は、すべてまたは多くの処理要素に共通する機能を実行するために、各処理要素311のコードに含まれている共通コードである。共通実行時コードは、例えば、さまざまな処理要素間でメッセージを渡すこと、バッファ313にアクセスすること、エラーまたはその他の状態を報告することなどのための機能を含んでよい。1つまたは複数の実施形態では、共通実行時コードは、データ・ストリーミング・アプリケーションの動作をトレースするトレース・データ318を収集するためのトレース命令615、および検索予測事象に応答して先行検索動作を開始するための先行検索命令616を含む。トレース命令615を実行することによって収集されたトレース・データ318は、オペレータ・グラフ・プロファイル・データ525を構築するために使用されてよい。トレース命令615または先行検索命令616あるいはその両方は、必要に応じて含まれる命令であってよく、すなわち、必要に応じてコンパイラ136が、コンパイル時にコンパイラに与えられる設定または指示に応じて処理要素のコードに含める命令であってよい。
図7は、一部の実施形態に従って、1つまたは複数のソース702から開始して1つまたは複数のシンク704、706で終了する、ストリーム・コンピューティング・アプリケーションの例示的なオペレータ・グラフ700を示している。本明細書では、通常は、このソースからシンクまでのフローが実行経路と呼ばれてもよい。加えて、さまざまな文脈において、ある処理要素から別の処理要素までのフローが実行経路と呼ばれてよい。図7は、接続された処理要素PE1〜PE10を示すように抽象化されているが、オペレータ・グラフ700は、同じまたは異なる処理要素内のストリーム・オペレータ312(図3)間のデータ・フローを含んでよい。通常、処理要素311(図3)などの処理要素は、タプルをストリームから受信し、タプルをストリームに出力する(ただし、ストリームが終了するシンク、またはストリームが開始するソースを除く)。オペレータ・グラフ700は比較的少ない数のコンポーネントを含んでいるが、オペレータ・グラフは、これよりはるかに複雑であってよく、静的または動的に一緒にリンクできる多くの個別のオペレータ・グラフを含んでよい。
図7に示されている例示的なオペレータ・グラフは、計算ノード110A〜110D上で実行される10個の処理要素(PE1〜PE10のラベルが付けられている)を含んでいる。処理要素は、それ自身のプロセスID(PID:process ID)およびメモリ空間を持ち、独立して実行されるプロセスを形成するために、一緒に融合された1つまたは複数のストリーム・オペレータを含んでよい。2つ(または3つ以上)の処理要素が独立して実行されている場合、プロセス間通信は、「トランスポート」(例えば、ネットワーク・ソケット、TCP/IPソケット、または共有メモリ)を使用して発生してよい。プロセス間通信に使用されるプロセス間通信経路は、ストリーム・コンピューティング・アプリケーションにおいて極めて重要なリソースになり得る。しかし、ストリーム・オペレータが一緒に融合された場合、融合されたストリーム・オペレータは、各処理要素内のストリーム・オペレータ間でタプルを渡すための、さらに高速な通信技術を使用できる。
オペレータ・グラフ700は、ソース702で開始し、シンク704、706で終了する。計算ノード110Aは、処理要素PE1、PE2、およびPE3を含んでいる。ソース702は処理要素PE1に流れ込み、次に処理要素PE1が、PE2およびPE3によって受信されるタプルを出力する。例えば、PE1は、タプル内の受信されたデータ属性を分割し、新しいタプル内の一部のデータ属性をPE2に渡してよく、一方、別の新しいタプル内の他のデータ属性をPE3に渡してよい。第2の例として、PE1は、一部の受信されたタプルをPE2に渡してよく、一方、他のタプルをPE3に渡してよい。PE2に流れるタプルは、PE2に含まれているストリーム・オペレータによって処理され、その結果得られたタプルが、計算ノード110B上のPE4に出力される。同様に、PE4によって出力されたタプルが、シンクPE6 704内のオペレータに流れ込む。同様に、PE3からPE5に流れるタプルも、シンクPE6 704内のオペレータに到達する。したがって、この例示的なオペレータ・グラフの場合、PE6は、シンクであることに加えて、PE4およびPE5から受信されたタプルを結合する結合動作を実行するように構成され得る。この例示的なオペレータ・グラフは、PE3から計算ノード110C上のPE7に流れるタプルも示しており、ノード110C自体は、PE8に流れ、折り返してPE7に戻るタプルを示している。PE8から出力されたタプルは、計算ノード110D上のPE9に流れ、次にPE9は、シンク処理要素(例えば、PE10 706)内のオペレータによって処理されるタプルを出力する。通常、シンク704、706が、データ・ストリーミング・アプリケーションの外部(例えば、データベース、ストレージ・ファイル、またはその他の出力先)にデータ(例えば、タプル)を出力するが、処理要素のいずれかがデータを外部に出力することも可能である。
処理要素311(図3)は、さまざまな形式でタプルを受信または出力するように構成されてよく、例えば、処理要素またはストリーム・オペレータは、XMLドキュメントとしてマークアップされたデータを交換できる。さらに、処理要素311内の各ストリーム・オペレータ312は、任意の形態のデータ処理機能を受信されたタプルに対して実行するように構成されてよく、例えば、それらのデータ処理機能は、データベースのテーブルに書き込むこと、またはデータの結合、分割、読み取りなどのその他のデータベース操作を実行すること、あるいはその他のデータ解析機能または動作を実行することを含む。
ストリーム・マネージャ134は、計算ノード(例えば、計算ノード110A〜110D)上で実行されているストリーム・コンピューティング・アプリケーションを監視すること、およびオペレータ・グラフ(例えば、オペレータ・グラフ132)の配置を変更することを実行するように構成されてよい。ストリーム・マネージャ134は、例えば、コンピューティング・インフラストラクチャ100内の計算ノード110A〜110Dの処理負荷を管理するために、処理要素を、ある計算ノード110から別の計算ノード110に移動してよい。さらに、ストリーム・マネージャ134は、計算ノード110A〜110D上で実行されている処理要素およびストリーム・オペレータ(または、処理要素に流れるタプル)を挿入する、削除する、融合する、融合解除する、またはその他の方法で変更することによって、ストリーム・コンピューティング・アプリケーションを制御してよい。
処理要素は、融合されたストリーム・オペレータの集合であるため、特定のストリーム・オペレータ間の1つまたは複数の実行経路と同様にオペレータ・グラフを正しく表し、同じ処理要素内の異なるストリーム・オペレータへの実行経路を含むことができる。図7は、明確にするために、処理要素間の実行経路を示している。
データベース・コンポーネント
1つまたは複数の実施形態に従って、シンク704、706のうちの1つからか、またはその他の処理要素からかに関わらず、オペレータ・グラフ700によって出力されたタプルが、構造化リレーショナル・データベース140の1つまたは複数のテーブルに入力される。図8は、さまざまな実施形態に従う、構造化リレーショナル・データベース140にアクセスするための、図1のデータベース・サーバ・コンピュータ・システム115のメモリ800内の主要ソフトウェア・コンポーネントの概念図である。図8に示されているように、データベース・サーバ・コンピュータ・システムのメモリは、オペレーティング・システム・カーネル801、ならびにデータベース・マネージャ811、1つまたは複数のデータベース・テーブル821〜823、および1つまたは複数のメタデータ構造824〜832を含んでいる構造化データベース140を含む。
オペレーティング・システム・カーネル801は、従来技術においてよく知られているように、デバイス・インターフェイス、メモリ・ページの管理、複数のタスクの管理およびディスパッチ、アプリケーション・プログラム用の共通サービスなどの、さまざまな低レベルのソフトウェア機能を提供する実行コードおよび状態データである。特に、OSカーネル801は、ネットワーク・インターフェイス213を介したネットワーク120を含む1つまたは複数のネットワークとの通信を処理するために、1つまたは複数のネットワーク・アダプタ・ドライバ802を含むのが好ましい。
データベース・テーブルおよびメタデータ820は、1つまたは複数のテーブル821〜823を含む(図8では、それらのテーブルのうちの3つが例示の目的で示されており、テーブルの数が変化してよいということが理解されている)。データベース技術において知られているように、データベース・テーブルは、複数のレコード(エントリまたはタプルとも呼ばれる)をテーブルの形態で論理的に含んでいるデータ構造であり、各レコードは、少なくとも1つの(通常は複数の)フィールド(属性とも呼ばれる)を含んでいる。テーブルの「行」はレコードに対応し、「列」はフィールドに対応する。テーブル821〜823は、論理的にテーブルと同等のデータ構造であるが、データベース技術において知られている任意の適切な構造で配置されてよい。データベース・テーブル821〜823は、コンピュータ・システムのユーザにとって役立つほぼすべてのタイプのデータを含んでよい。
データベース・テーブルには、メタデータと呼ばれることもある1つまたは複数の補助データ構造824〜832が関連付けられている(図8では、それらの補助データ構造のうちの9つが表されており、それらの構造の数およびタイプが変化してよいということが理解されている)。補助データ構造は、データベースおよびデータベース内のデータの構造を特徴付け、データベース管理に関わるさまざまなタスクにおいて役立ち、特に、データベースに対して照会を実行することにおいて役立つ。補助データ構造の例としては、データベース・インデックス824〜827、ヒストグラム828〜829、およびマテリアライズ照会テーブル(MQT:materialized query tables)830〜831が挙げられる。補助データ構造は、照会キャッシュ832をさらに含んでよく、照会キャッシュ832には、以前に実行された照会(照会自体、照会実行計画または照会実行戦略、実行からの実行時間統計値など)に関するデータが格納される。図8では、特定の数およびタイプの補助データベース構造が示されているが、それらの構造の数およびタイプが変化してよいということ、示されている構造の一部が存在しなくてよいということ、または示されていない追加の構造が存在してよいということ、あるいはその組み合わせが理解されるであろう。
データベース・マネージャ811は、データベース・サーバ・システム115のCPU201上で実行されて、データベース140の管理のための基本機能を提供する、実行可能なコンピュータ・プログラミング・コードを含む。データベース・マネージャ811は、理論上は、関連する情報を含んでいてもいなくてもよい任意の数のデータベース・テーブルをサポートできるが、図8では3つのテーブルのみが示されている。データベース・マネージャ811は、データベースを管理するための特定の機能を自動的に実行するか、または許可されたユーザがデータベースに対して基本的な管理上の操作を実行できるようにするか、あるいはその両方を実行する、管理保守機能812を含むのが好ましく、例えば管理保守機能812には、データベース・テーブル定義を定義および編集すること、データベース内のレコードを作成、編集、および削除すること、データベース内のレコードを表示すること、ならびにインデックスおよびマテリアライズ照会テーブル、ビューなどのデータベースの補助データ構造を定義することなどがある。管理機能は、データベース・トランザクションのロギング、データの回復などをさらに含んでよい。それらの機能のうちのいくつかは、システム管理者などのみが利用可能であってよく、他の機能はクライアントが利用可能である。
データベース・マネージャ811は、データベース・テーブル821〜823内のデータに対して照会を実行するための照会エンジン813、および実行中の照会において照会エンジン813で使用するように最適化された照会実行計画を生成するための照会オプティマイザ814をさらに含むのが好ましい。データベース・マネージャ811は、1つまたは複数のアプリケーション・プログラミング・インターフェイス(API:application programming interfaces)を含んでいる外部インターフェイス815をさらに含むのが好ましく、外部インターフェイス815によって、外部アプリケーションは、照会エンジン813を呼び出すか、またはその他の手段を使用して、データベース140内のデータにアクセスすることができる。データベース・マネージャ811は、従来技術において知られている、さまざまなさらに高度なデータベース機能のいずれかをさらに含んでよい。データベース・マネージャは、構造化照会言語(SQL:structured query language)照会プロトコルを実装するデータベース管理システムなどの、一般的なデータベース管理システムであることができるが、何らかのその他のプロトコルに従って代替的にデータを照会および構造化してよく、またはカスタム設計されたデータベース管理システムであってよく、あるいはその両方であってよい。データベース・マネージャ811は、本明細書では、オペレーティング・システム・カーネル801から分離した実体として示され、説明されているが、一部のコンピュータ・アーキテクチャでは、さまざまなデータベース管理機能がオペレーティング・システムと統合されているということが理解されるであろう。
図8では、3つのデータベース・テーブル821〜823および9つの補助構造824〜832を含んでいる1つのデータベース140が示されているが、それらの実体の数は変化してよく、はるかに多くなることができる。コンピュータ・システムまたはコンピュータ・システムのグループは、複数のデータベースを含んでよく、各データベースは複数のテーブルを含んでよく、各データベースには、複数のインデックス、MQT、ヒストグラム、ビュー、変動性記録(volatility records)、または示されていないその他の補助データ構造、あるいはその組み合わせが関連付けられてよい。代替として、図8で表されている一部の実体は、一部のデータベースには存在しないことがある。さらに、データベース140は、複数のコンピュータ・システムに格納されたより大きい分散型データベースに論理的に含まれてよい。図8では、データベース・マネージャ811はデータベース140の一部として表されているが、実行コードであるデータベース・マネージャは、「データベース」(すなわち、データ820)から分離した実体であると見なされることがある。
データベース・システム800のメモリは、オペレーティング・システム801およびデータベース140に加えて、1つまたは複数のユーザ・アプリケーション804〜805のすべてまたは選択的部分を含んでよい。ユーザ・アプリケーション804〜805は、CPU201上で実行されるアプリケーションであり、データベース140内のデータにアクセスして、1人または複数のユーザの代わりにタスクを実行してよい。そのようなユーザ・アプリケーションは、例えば売買取引、在庫管理、人事記録、会計処理、コードの開発およびコンパイル、メール、カレンダー、または多数のユーザ・アプリケーションのいずれかを含んでよく、Webベースである(すなわち、クライアントのブラウザに描画するために、Webページをリモート・クライアントに提示する)か、またはユーザ・インターフェイスのその他の形態を提供してよい。それらのアプリケーションの一部は、読み取り専用の方法でデータベースのデータにアクセスすることができ、その他のアプリケーションは、データを更新する能力を有する。さまざまなタイプの読み取りまたは書き込みデータベース・アクセス・タスクが存在することがあり、それらの各タスクは、異なるデータにアクセスするか、またはデータに対する異なる操作を要求する。例えば、あるタスクは、特定の既知のレコードからのデータにアクセスし、必要に応じてデータを更新することがあるが、別のタスクは、照会を呼び出すことがあり、その照会において、データベース内のすべてのレコードが何らかの指定された検索基準と照合され、一致したレコードからのデータが返され、必要に応じて更新される。さらに、データの読み取りまたは書き込みが、データベース・テーブル811〜813に対して直接行われることがあり、またはデータの操作が必要になることがあり、あるいはユーザによって提供されたか、別のデータベースまたはその他のソースから取得された、他のデータとのデータの結合が必要になることがある。通常、アプリケーション804〜805は、外部API815を介してデータベース・マネージャ811への関数呼び出しを使用してデータベース内のデータにアクセスし、特に、データベース内のデータに対する照会を実行するが、一部のシステムでは、アプリケーションからデータベース内のデータに、独立して直接アクセスすることが可能であってよい。図8では、例示の目的で2つのアプリケーション804〜805が示されているが、それらのアプリケーションの数は変化してよい。
図3〜8では、さまざまなソフトウェアの実体が、本明細書に記載されたさまざまなシステムまたはデバイスのいずれかの各メモリに含まれているとして概念的に表されている。しかし、よく知られているように、コンピュータまたはその他のデジタル・デバイスのメモリは、一般的に、すべてのソフトウェアの実体およびその他のデータを同時に保持するには不十分であり、通常はソフトウェアの実体またはその他のデータの選択的部分が、必要に応じてストレージからメモリに読み込まれる。さらに、図3〜8では、さまざまなソフトウェアの実体は、別々の実体であるか、または他の実体に含まれているとして表されている。しかし、この表現が単に例示を目的としていること、および特定のモジュールまたはデータ実体が別々の実体であるか、あるいは共通モジュールまたはモジュールのパッケージの一部であることができるということが、理解されるであろう。さらに、図3〜8では、特定の数およびタイプのソフトウェアの実体が概念的表現で示されているが、それらの実体の実際の数が変化してよいということ、特に、複雑なデータ・ストリーミングまたはデータベース環境あるいはその両方においては、それらの実体の数および複雑さが通常、はるかに大きくなるということが、理解されるであろう。さらに、表現の完全性のために、特定のソフトウェア・コンポーネントが、それぞれ単一のシステム内で示されているが、すべてのプログラム、機能、およびデータが単一のシステム内に存在するというのは必ずしも真実ではなく、それらは、同じコンピュータ・システム上の別の部分または異なるコンピュータ・システムに存在してよい。例えば、APIを呼び出してデータベースにアクセスするユーザ・アプリケーション804〜805は、データベースの定義、メタデータ構造の追加または削除などの特定の保守機能から分離したシステム上にあってよい。最後に、図3〜8の概念的表現が、どの特定のメモリ編成モデル(memory organizational model)も意味するよう意図されていないということ、およびデータ・ストリーミング・アプリケーションまたはデータベースをホストするコンピュータ・システムが、単一アドレス空間の仮想メモリを採用するか、または重複する複数の仮想アドレス空間を採用してよいということが、理解されるであろう。
データ・ストリーミング・プロファイル・データ(Data Streaming Profile Data)の収集
1つまたは複数の実施形態に従って、データ・ストリーミング・アプリケーションの動作を特徴付けるプロファイル・データが収集される。次に、このプロファイル・データが、オペレータ・グラフ内の処理要素による外部データ取得(検索事象)のインスタンスを、以前に発生した事象/条件(先行する検索予測事象)と相関付けるために使用される。具体的には、1つまたは複数の実施形態に従って、これらの先行する事象は、外部データ取得を引き起こす処理要素の上流のタプル内の特定のデータを含む。先行する事象は、時刻/曜日などの、外部状態変数の特定の値を含んでもよい。その後、これらの先行する事象を使用して、その後、処理要素がデータを取得することが必要になるということを予測できる。すなわち、データ・ストリーミング・アプリケーションのその後の実行中に、特定の外部データに対するその後の必要性に関連付けられた先行する事象の発生が、その外部データを必要とする処理要素によるその外部データに対する実際の要求に先立って、その外部データの取得を引き起こす。
1つまたは複数の実施形態では、プロファイル・データは、データ・ストリーミング・アプリケーションの1つまたは複数の実行インスタンスの実行をトレースすることによって取得されるが、入力データおよび出力データまたはソース・コードの解析から取得されたデータなどの、プロファイル・データのその他の形態または追加の形態が使用されてよい。トレースは周知の技術であり、トレースでは、コンピュータ・プログラムの実行中の事前に定義されたトレース可能な事象の発生が、コンピュータに、トレース可能な事象が発生した時点でのコンピュータの状態を示す特定の状態データを保存させる。トレースは、通常、コンピュータ・プログラム・コードの開発中に、エラーをデバッグすること、頻繁に使用されるコード・パスを決定すること、性能ボトルネックを識別することなどのために使用される。
トレースは、トレースされるコードを「インストルメントする」ことによって、すなわち、コンピュータ・プログラムの実行中に発生した場合に望ましい状態データの保存を引き起こすトレース命令(「インストルメンテーション」)を、さまざまなコード位置に配置することによって、実現されてよい。トレース命令は、データの保存を(命令が発生するたびに)無条件で引き起こすか、または何らかの状態値に基づいて、条件付きで引き起こすことができる。状態データが保存される正確なメカニズムは、変化してよい。トレース・インストルメンテーションは、コード内のインライン命令であるか、あるいは割り込みをトリガーする別個のルーチンまたは命令への呼び出しであることができる。
1つまたは複数の実施形態では、トレース命令615(インストルメンテーション)は、データ・ストリーミング・プログラムを生成するためにコンピュータ136によって使用される共通実行時コード614の少なくとも1つのバージョンに含まれる。実際、インストルメンテーションを含んでいない共通実行時コードを含む、共通実行時コードの複数のバージョンが存在することができる。異なるタイプのプロファイル・データを収集するために、複数の異なるインストルメントされたバージョンが存在することができる。共通実行時コード内のインストルメンテーションは、異なる各データ・ストリーミング・アプリケーションの開発者が独自のインストルメンテーションを作成する必要性をなくすことによって、データ・ストリーミング・アプリケーションを開発するプロセスを簡略化し、プロファイル・データの収集および解析を標準化する。
共通実行時コード614は、通常、トレース可能な事象が発生するルーチンを含んでいる。具体的には、1つまたは複数の実施形態では、共通実行時コード614は、データ・ストリーミング・アプリケーション内で新しいタプルを割り当てるためのルーチン、タプルを1つの処理要素から次の処理要素に送信するためのルーチン、データ・ストリームの外部のデータにアクセスするためのルーチン(検索事象を含んでもよい)、およびタプルをデータベースに出力するためのルーチンを含む。1つまたは複数の実施形態に従ってタプルをトレースすることにおいて対象となることのある追加のルーチンは、タプルをコピーまたは複製するためのルーチン、タプルを削除するためのルーチン、タプルの(フィールド、フィールド長などの)定義を変更するためのルーチンなどを含んでよい。1つまたは複数の実施形態では、これらの事象のいずれかまたはすべては、トレース・データの収集を引き起こすトレース可能な事象であってよく、適切なインストルメンテーションが、動作を実行する対応するルーチンに配置される。
1つまたは複数の実施形態では、共通実行時コード614のインストルメントされたバージョンは、トレース解析において役立つ追加データを追加することによって、データ・ストリーミング・アプリケーションで使用されるタプルの構造を変更する。図9は、さまざまな実施形態に従う、トレース・データのプロファイル解析をサポートするために変更された、データ・ストリーミング・アプリケーションの変更されたタプル901の概念的表現である。図9を参照すると、タプル901は、タプル・タイプ903、一意のタプル識別子904、および可変数の親の対905を含んでいるヘッダー902を含んでおり、各親の対は、各親タプル・タイプ906および親タプル識別子907を含んでいる。このヘッダーは、その他のデータを含んでよい。タプルは、データ・ストリーミング・アプリケーションによって定義された可変数のユーザ・データ・フィールド909〜911を含んでいる本体部分908をさらに含んでおり、ユーザ・データ・フィールドのうちの3つが図9に示されており、それらのユーザ・データ・フィールドの数が変化してよいということが、理解されている。タプル・タイプ903は、共通の定義済み構造を有するタプルのセットの名前であり、概ね、複数のタプル(レコードまたは行とも呼ばれる)を含んでいるデータベース・テーブルのテーブル名に対応している。タプル識別子904および親の対905は、共通実行時コード614のインストルメントされたバージョンによって追加された追加のフィールドである。これらのフィールドは、データ・ストリーミング・アプリケーションによって、トレース解析またはその他の目的あるいはその両方のために内部で使用され、アプリケーションのユーザにとって可視である必要はない。
共通実行時コードのインストルメントされたバージョンでは、新しいタプルを作成するルーチンが、新しく作成されたタプルに、前述のフィールドを自動的に割り当て、一意の通し番号に似ている一意のタプル識別子904を割り当てる。新しく作成されたタプルが既存のタプル(親タプル)から作成されたか、またはコピーされた場合、親タプルのタプル・タイプおよび一意のタプル識別子が、それぞれ親タプル・タイプ906および親タプル識別子907として、新しいタプルの親の対905にコピーされる。複数の親のチェーンが存在する可能性があるため、直近の親のすべての親の対905も、新しく作成されたタプルの各親の対905にコピーされる。
図10は、さまざまな実施形態に従う、データ・ストリーミング・アプリケーションのプロファイル・データを収集するプロセスを上位で示すフロー図である。図10を参照すると、インストルメントされたコードが、コンパイラ136によってコンパイルされる(ブロック1001)。ブロック1001で表されたコンパイルは、静的コンパイルまたは動的コンパイルのいずれかであることができる。静的にコンパイルされる場合、ユーザは、共通実行時コードの適切なインストルメントされたバージョンの使用を指定することによって、またはサポートされている場合は、インストルメントされたバージョンを使用するための特殊なコンパイラ指示文またはオプションによって、コンパイル時にインストルメンテーションを含むコンパイルを指示する。実行時に動的にコンパイルされる場合、データ・ストリーミング・アプリケーションの実行を呼び出しているユーザが、共通実行時コードのいずれかのインストルメントされたバージョンを含んでいるコード・ファイル(例えば、ソース・コードまたは中間コード)を指定する。コンパイラ136は、適切な指示文に応答して、データ・ストリーミング・アプリケーションを(場合によって、静的または動的に)コンパイルし、トレース命令を組み込む。
データ・ストリーミング・アプリケーションは、トレースが有効化されて、実行のために呼び出され、オプションのトレース・パラメータが指定される(ブロック1002)。図10では、ブロック1002がブロック1001の次に来るように表されているが、特定の動的コンパイル環境では、データ・ストリーミング・アプリケーションが実行のために呼び出された後に、コンパイルが発生してよいということが、理解されるであろう。
1つまたは複数の実施形態では、共通実行時コード内に存在しているインストルメンテーション命令は、特定のデータ・ストリーミング・アプリケーションに固有ではないため、タプルの特定のタイプまたはタプル・タイプの特定のセットに固有ではない。例えば、タプルを1つの処理要素から次の処理要素に送信する共通実行時ルーチンは、(任意のタイプの)タプルが送信されるときに常にトリガーされるトレース命令を含むことができる。ユーザがタプルの特定のタイプまたはタプル・タイプの特定のセットをトレースしたい場合、ユーザは、データ・ストリーミング・アプリケーションが呼び出されるときに、トレースされるタプルをオプションのトレース・パラメータとして指定する。トレース命令がトリガーされたときに、コードは、対応する共通実行時ルーチンによって処理されているタプルが、トレースされるべきタイプであるかどうかを判定し、それに応じてトレース・データを保存する。追加の実行時トレース・オプション(run-time tracing options)が可能である。例えば、オペレータ・グラフを通る、可能性のあるトレース可能な事象または経路の一部のみをトレースすることが望ましいことがある。オペレータ・グラフを通るすべての経路をトレースすることを可能にする全体的なトレース命令が共通実行時コードに存在してよいが、ユーザは、トレースされる特定の経路を指定するか、またはその他の方法で、トレースされる事象を制限してよい。
したがって、ブロック1002で、データ・ストリーミング・アプリケーションが実行のために呼び出されるときに、ユーザは、任意のトレース・パラメータを指定してよい。ユーザは、性能上の理由のため、トレースを完全に無効化するオプションを保有してよい。データ・ストリーミング・アプリケーションの実行プロファイルを解析すること、およびプロファイル検索事象データ(profile lookup event data)526を含んでいるオペレータ・グラフ・プロファイル・データ525を生成することにおいて使用するためのトレース・データを収集するために、トレースが有効化されており、検索事象が発生したときに常に対象の1つまたは複数のタプル・タイプに関するトレース・データが保存され、対応するタイプのタプルが作成されて、ある処理要素から別の処理要素に送信されるか、またはデータベースに出力されるのが好ましい。必要に応じて、追加の事象がトレースされてよい。少なくとも最初に、通常は、対応するタプルの作成または送信と共に、すべての検索事象がトレースされることが期待されるであろう。しかし、データ・ストリーミング・アプリケーションがすでにプロファイルされた後に、ユーザは、対象となることが分かっている特定の検索事象をトレースしたいことがある。
ストリーム・マネージャ134は、さまざまな計算ノード110で実行を開始し、トレースを制御する環境パラメータを含む、いずれかの環境パラメータを初期化することによって応答する(ブロック1003)。例えば、トレース有効化フラグ(trace enable flag)が設定されてよく、ビット・マスクまたはその他のデータ構造が、トレースされるべき望ましい事象、収集されるべきトレース・データなどに関して、トレースを制御するように初期化されてよい。
データ・ストリーミング・アプリケーションは、各計算ノード110および管理システム105において同時に実行され、それが図10のブロック1004A〜Dとして表されている。各ノードまたは管理システム内の動作は、表現を明確にするために、ブロック1004Aのみに示されており、それらの動作がブロック1004B〜Dにおいても同様であることが理解されている。各ノード(または管理システム)内で、データ・ストリーミング・アプリケーション・コードが、場合によっては複数の同時スレッド(ブロック1005として簡略化された形態で表されている)内で、トレース命令が発生するまで実行される。トレース命令は、トレースが有効化されているかどうかのチェックを引き起こす(ブロック1006)。トレースが有効化されていない場合、ブロック1006で「いいえ」の分岐が選択されて、実行が再開される。トレースが有効化されている場合、トレース・コードが、事象および現在の状態データが、実行が呼び出されたときに指定されたトレース・パラメータに一致するかどうかを判定する(ブロック1007)。例えば、検索動作、タプルの作成、またはある処理要素から別の処理要素へのタプルの送信、あるいはその組み合わせなどの特定の事象の場合、トレース・コードは、実行中に一時停止を引き起こすトレース命令がそれらの事象のうちの1つから発生したかどうか検証し、特定のタプル・タイプのトレースが指定された場合、トレース・コードは、トレース事象に関連付けられたタプルが指定されたタイプであることを検証する、などとなる。事象/状態データが指定されたトレース・パラメータに一致しない場合、ブロック1007で「いいえ」の分岐が選択されて、実行が再開され、一致する場合、「はい」の分岐が選択され、トレース・コードが、保存されるトレース・データの範囲を決定する(ブロック1008)。トレースでは、ほとんどすべてのデータを保存できるが、1つまたは複数の実施形態では、保存されたトレース・データは、トレース可能な事象に関連付けられたタプルのコピー、およびトレース可能な事象の時点でタプルが存在したオペレータ・グラフ内の位置を含む。次に、このデータは、ローカルのトレース・データ318に保存されるか、またはトレース命令が管理ノードで実行されている場合は、管理ノードのトレース・データ527に保存される(ブロック1009)。
実行中のある時点で、終了条件が発生し、終了ブロックへのフロー・ラインによって示されているように、プログラムの実行の終了を引き起こす。そのような終了条件は、例えば、すべてのデータの処理の完了、割り込み、エラー条件、またはその他の終了条件であることができる。
プロファイル・トレース・データ(profile trace data)は、データ・ストリーミング・アプリケーションの1つまたは複数の実行インスタンスの間、または1回の実行中の複数の時間間隔の間、あるいはその両方の間にトレースすることによって、収集することができ、データ・ストリーミング・アプリケーションの挙動に関してより多くのことが学習されたき、あるいはアプリケーション・コードまたはアプリケーション・コードが通常処理するデータに対する変更が、アプリケーションの挙動に対する変更を引き起こしたときに、時間と共に改善されるか、または定期的に更新されてよい。
検索事象サマリー・データの生成
1つまたは複数の実施形態に従って、管理システム105でプロファイル・データ・アナライザ523を使用して、収集されたプロファイル・データが解析され、検索事象サマリー・レコード526のセットを生成する。検索事象サマリー・レコードは、特定のタプル・タイプ、またはタプルの属性値、またはオペレータ・グラフ内の特定の位置で発生するその他の状態変数、あるいはその組み合わせなどの、先行する検索予測事象を、その後発生する検索事象と相関付け、その後の検索事象が実際に発生する確率または可能性、または先行する検索予測事象の発生とその後の検索事象の間の時間遅延の何らかの測定値をさらに指定することができる。
本明細書において使用されるとき、「検索事象」は、データ・ストリーミング・アプリケーションのバッファおよびキャッシュの外部でのデータの取得、すなわち、データ・ストリーミング・アプリケーションの実行中の処理要素によるデータに対する現在の必要性の結果としての、ストレージまたはリモート・デバイスからの取得である。検索事象は、従来のコンピュータ・プログラムの実行中のページ・フォールトに類似しているが、ネットワークを経由してアクセスされるデータを含むことができるという意味では、さらに広い。検索事象は、必然的に、必要なデータを取得するためにかなりの時間を要し、データ・ストリーミング・アプリケーションの性能に影響を与えることがある。ストリーミングされたデータがさまざまなバッファに保持されるため、ストリーミングされたデータ・タプル自体は、自動的に処理要素によって使用可能になり、検索事象では取得されない。検索事象は、処理要素においてタプルを処理するために何らかの形で必要になるその他のデータを取得するために、必要になることがある。したがって、検索事象はタプル(具体的には、検索事象をトリガーした処理要素によって処理されているタプル)に関連付けられるが、関連付けられたタプル自体を検索事象において取得する必要はない。
図11は、さまざまな実施形態に従う、例示的な検索事象サマリー・レコード526のセットの構造の概念図である。これらのレコードは、データ・ストリーミング・アプリケーション内の先行する検索予測事象を、その後発生する検索動作と相関付け、特に、実行中のデータ・ストリームにおいて、検索されたデータに対する実際の必要性が発生する前に、検索動作を予測する先行する事象に応答して検索動作の開始をトリガーするために、使用されてよい。
図11を参照すると、検索事象サマリー・データ526は複数のレコード1101を含んでおり、各レコードは、先行する検索予測事象および結果として生じる検索動作の1つの対に対応している。先行する事象は、指定されたタイプの、必要に応じて1つまたは複数の指定された属性値を含み、オペレータ・グラフ内の指定された位置で発生し、必要に応じて1つまたは複数の指定された外部状態変数値に従う、タプルとして表される。検索事象サマリー・データ内の各レコード1101は、先行する事象(すなわち、特定のタプルの存在)が発生するオペレータ・グラフ内の位置を指定するトリガー位置フィールド1102、先行する事象を構成するためにオペレータ・グラフ内の対応する位置で一時的に保持されるタプルのタイプを指定する内部タプル・タイプ・フィールド1103、トリガー位置1102で指定されたトリガー位置で、トレース・データ内で検出された、タイプ・フィールド1103で指定されたタイプの内部タプルの数を指定する内部タプル・カウント・フィールド1104、および検索事象サマリー・レコードに対応する検索事象のグループ内の検索事象の数を指定する検索事象数フィールド1105を含む。
1つまたは複数の実施形態では、各レコード1101は、検索動作が発生するオペレータ・グラフ内の位置(すなわち、検索されたデータが読み込まれる位置)を指定する検索位置フィールド1106、および結果として生じる検索事象を定義する検索事象記述子(lookup event descriptor)1108をさらに含む。検索事象記述子は、対応する先行する事象から生じる特定の検索動作を定義するために必要な任意のデータを含んでよく、ネットワーク経路、デバイス経路、デバイス識別子またはストレージ・デバイスを識別する同様のもの、ネットワークの位置、あるいは検索されたデータが取得される他の実体と、ファイル名、アドレス、または検索されたデータが取得される実体内の検索対象のデータの位置を指定するその他のデータ、あるいはその組み合わせと、ページ数または取得されるデータ量のその他の測定値と、検索されたデータが読み込まれる位置のアドレスまたはその他の指定子を指定する読み込み先と、検索動作を定義するために必要になることがある任意のその他のデータとを含んでよいが、必ずしもこれらに限定されない。
各レコード1101は、必要に応じて、検索事象に関する特定の時間遅延をまとめて指定する遅延パラメータ1107をさらに含んでよく、適切な場合、先行する検索予測事象の検出後の実行中に、データ検索動作の開始を遅延させるために使用されてよい。遅延パラメータ1107は、先行する事象の発生と、データ・ストリーミング・アプリケーションによる、指定されたデータ検索動作の対象であるデータに対する必要性との間の経過時間を指定する1つまたは複数の値、およびデータ検索動作の開始から、取得されたデータがデータ・ストリーミング・アプリケーションで使用可能になるまでの経過時間を指定する1つまたは複数の値を含んでよい。代替として、遅延パラメータは、検索予測事象の検出とデータ検索動作の開始の間の遅延時間を表すために、これらの数値の両方が組み合わせられた複合値であることができる。遅延パラメータ1107内のこれらの数値のいずれかは、単一の値または複数の値(例えば、平均時間間隔およびその平均値からの標準偏差)であることができ、単一の値の場合は、平均経過時間、最小経過時間、検索動作の既定の部分の最小経過時間、またはその他の時間の測定値を表すことができる。
1つまたは複数の実施形態では、レコードは、1つまたは複数のキー・フィールド識別子1109(キー・フィールド識別子1109のうちの1つが、図11に示されている)であって、それぞれ、フィールド1103内で指定された内部タプル・タイプ内のキー・フィールドを指定する、キー・フィールド識別子1109と、各キー・フィールド識別子に対応する可変数のキー・フィールド仕様1110であって、各仕様が、対応する最小値1111、対応する最大値1112、および対応する確率値1113を指定する、キー・フィールド仕様1110とをさらに含む。確率値1113は、先行する検索予測事象が発生することを前提として、その後発生する検索事象が発生する確率を表し、先行する事象は、内部タプル・タイプ・フィールド1103で指定されたタイプのタプルが、グラフ位置1102で、最小値1111および最大値1112によって指定された範囲内のキー・フィールド値を、キー・フィールド1109に含んでいることである。確率値は、0〜1の範囲内の浮動小数点値として表されてよい。代替として、確率値は値の対として格納されてよく、この確率値は、これらの値の対の商として得られる。例えば、値の対は、その後の検索事象の数のカウントおよび対象のグラフ位置で検出されたITタイプの(必要に応じて、特定のパラメータを含んでいる)タプルの数のカウントを表す、2つの整数であってよい。
1つまたは複数のさらに別の実施形態では、レコード1101は、1つまたは複数の外部状態変数識別子1114(外部状態変数識別子1114のうちの1つが、図11に示されている)であって、外部状態変数(すなわち、タプルの外部の変数)をそれぞれ指定する、外部状態変数識別子1114と、各外部状態変数に対応する可変数の外部状態変数仕様1115であって、それらの各仕様が、対応する最小値1116、対応する最大値1117、および対応する確率値1118を指定する、外部状態変数仕様1115とをさらに含んでよい。確率値1118は、確率値1113に類似しており、先行する検索予測事象が発生することを前提として、その後発生する検索事象が発生する確率を表し、すなわち、内部タプル・タイプ・フィールド1103で指定されたタイプのタプルが、グラフ位置1102で発生し、指定された外部状態変数識別子1114が、最小値1116および最大値1117によって指定された範囲内の値を含んでいる確率を表す。確率値は、確率値1113に関して前述されたいずれかの方法で表されてよい。
1つまたは複数の代替の実施形態では、キー・フィールド1109およびキー・フィールド仕様1110、または外部状態変数識別子1114および外部状態変数仕様1115、あるいはその両方は任意選択的であるか、または使用されなくてよい。単一の確率値は、先行する内部タプル・タイプおよびグラフ位置に対して指定されてよい(すなわち、単一の確率値は、対応するタプル内のどのデータの値にも関係しない)。1つまたは複数のさらに別の代替の実施形態では、確率値が使用されず、先行する事象が発生した場合に、その後の検索事象も必要になるということが仮定される。
トレースによって収集されたデータは、検索事象サマリー・レコード526を生成するためのさまざまな方法のいずれかで解析されてよい。概念的に、解析とは、その後発生する検索事象ごと、オペレータ・グラフ内を通過する、検索を引き起こすタプルまたは検索を引き起こすタプルの親タプルがオペレータ・グラフ内を通過した位置ごと、およびその位置での内部タプル(または親タプル)ごとに、その位置でのそのようなタプル(先行する事象)の数およびその後発生する検索事象の数を決定することである。さらに、1つまたは複数のキー・フィールドまたは外部状態変数あるいはその両方が識別された場合、それらの数が、対応するキー・フィールドまたは外部状態変数の値の範囲別に分けられる。さらに、先行する事象およびその後の検索事象が識別された後に、先行する事象の発生と検索事象の発生の間の遅延時間(平均値、最小値など)の1つまたは複数の測定値が決定され得る。
図12は、さまざまな実施形態に従う、検索事象サマリー・レコード526のセットを生成するためのプロファイル・データを解析するプロセスを上位で示すフロー図である。管理システム105で、プロファイル・データ・アナライザ523によって、またはプロファイル・データ・アナライザ523の制御下で、解析が実行される。
図12を参照すると、さまざまなノードで収集されて、計算ノード110の各ローカル・ノード・トレース・データ・キャッシュ(local node trace data caches)318に格納されたトレース・データが、解析のために管理システム105に送信される(ブロック1201)。管理システムでのトレース・データの収集は、表現を簡単にするために、単一のブロックとして示されている。実際に、図12で表されているように、解析の開始時に、すべてのトレース・データを管理システムに送信することが可能である。代替として、管理システム105のプロファイル・データ・アナライザ532は、解析が実行されるときに、さまざまな計算ノード110に対して、増加的にトレース・データを要求してよい。後者のアプローチは、予備選別作業の一部を計算ノードにオフロードする。例えば、管理システムは、特定の位置で発生する特定の検索事象のみが対象であることを決定してよく、それにより、それらの検索事象のみに関する要求データに従って、解析中のネットワーク帯域幅の利用を削減し、最終的に使用されない大量のトレース・データをスキャンする管理システムの負担を低減する。
トレース・データ内の検索事象が識別され、データ・ストリーミング・アプリケーション内での発生理由および検索されたデータのソースに従って、グループに分類される(ブロック1202)。1つまたは複数の実施形態では、これは、同じタプル・タイプの代わりに、同じ処理要素の実行によって生成された、同じ外部データ・ソースにアクセスしている検索事象が、一緒にグループ化されるということを意味する。同じ「外部データ・ソース」は、必ずしも正確に同じデータを意味しておらず、厳密には、通常、同じデータは何らかのキャッシュ内で維持されるため、同じデータが繰り返し検索される可能性は低い。例えば、外部データ・ソースは、外部データベースなどの非常に大きいデータ実体であることがあり、その場合、各処理要素によって処理されているタプルの1つまたは複数の属性が、外部データ・ソースからのどのデータがアクセスされるかを決定するために使用される。特に、外部データ・ソースは、データベース140またはその特定のテーブル821〜823であることができ、あるいは何らかの他のデータベースまたはそのテーブルであることができ、あるいは管理システム105、計算ノード110のいずれか、またはコンパイラ・システム102内の配列またはその他のデータ構造、あるいはローカルに、またはネットワーク120を経由してアクセスできる任意のその他のデータであることができる。処理されているタプルの1つまたは複数の属性が、アドレス、キー値、配列インデックス、または検索動作によって取得されるより大きい外部データ・ソース(データベース、配列、またはその他のデータ構造)内の特定のデータの識別に使用される何らかのその他の値を決定するために、使用されてよい。
1つまたは複数の任意選択的な実施形態では、検索事象のグループが、優先順位付けされ、解析のために選択される(ブロック1203)。検索事象グループは、検索動作の対応するカテゴリに起因する、データ・ストリーミング・アプリケーションの性能に対する悪影響の適切な測定値に従って、優先順位付けされてよい。例えば、グループは、各グループ内の検索動作の総数、または各グループ内の検索動作を実行するために必要な合計累積時間、あるいは性能に対する影響の何らかのその他の測定値に従って優先順位付けされてよい。1つまたは複数のグループが、解析のために選択される。一実施形態では、既定のしきい値を超える性能への影響を有するすべてのグループが選択される。別の実施形態では、性能への影響の平均値からある偏差以上の性能への影響を有するグループが選択される。別の実施形態では、性能に対して最大の影響を有するグループのみが選択される。
性能に対する悪影響の何らかの測定値に従う検索事象のグループの解析は、性能に対する影響が少ないか、影響がない検索事象のカテゴリに関する解析およびその後の是正処置を防ぐよう意図されている。例えば、検索事象の一部のタイプは、一部のエラー条件が発生する場合のように、まれにしか発生しないことがある。そのようなまれに発生する検索事象を予測しようとする試みは、かなりの不正確さの影響を受けることがあり、それを実行するオーバーヘッドが、性能上のメリットを上回ることがある。しかし、1つまたは複数の実施形態では、任意選択的なブロック1203が実行されず、検索事象のすべてのグループが解析される。
次に、解析のために優先順位付けされたグループのうちから、次のグループが、解析される現在のグループとして選択される(ブロック1204)。オペレータ・グラフ内の位置ごとに、トレース・データが解析され、解析用に選択された検索事象のグループに対応する1つまたは複数の検索事象サマリー・レコード1101のセットを生成する。これが、図12においてブロック1205〜1210として表されている。「位置」は、データ・ストリーミング・アプリケーション内のオペレータ・グラフの任意のサブセットであることができ、この位置でタプルが一時的に保持されてよく、この位置でタプルがトレースされる。1つまたは複数の実施形態では、「位置」は、オペレータ・グラフ内の処理要素であり、本明細書ではそのように説明されており、位置の粒度が計算ノード、オペレータ、または何らかのその他の実体であることができるということが理解されている。
各グループは検索事象の特定のカテゴリに対応しているため、対応する検索事象は、特定のタプル・タイプの代わりに、データ・ストリーミング・アプリケーション内の特定の処理要素で必然的に発生する。プロファイル・データ・アナライザが、オペレータ・グラフのデータにアクセスし、検索事象を引き起こしたタプル・タイプ(または、このタプル・タイプの親)を生成した、オペレータ・グラフ内の先行する処理要素を決定する(ブロック1205)。すなわち、プロファイル・データ・アナライザは、オペレータ・グラフを後方にトラバースする。そのような先行する処理要素が存在する場合(ブロック1206からの「はい」の分岐)、その処理要素が、解析用の現在の処理要素として選択される。説明を簡単にするために、本明細書では、そのようなタプル・タイプが存在する処理要素ごとに、唯一のそのような先行する処理要素が存在するということが仮定されるが、実際は、複数の先行する処理要素が存在することが可能であり、その場合、そのような各処理要素が順番に解析される。
プロファイル・データ・アナライザが、トレースをスキャンして、現在の処理要素内の対応するタプル・タイプ(または、このタプル・タイプの親)のすべての発生を識別し(ブロック1207)、これらのタプルが、内部タプルの現在のセットを形成する。現在の処理要素および検索事象グループに対応する検索事象サマリー・レコード1101が生成される(ブロック1208)。検索事象サマリー・レコードのトリガー位置1102は、現在の処理要素であり、内部タプル・タイプ1103は、現在の処理要素内の対応するタプル・タイプ(または、このタプル・タイプの親)であり、内部タプル・カウント1104は、トレースにおいて検出されたタプルの数であり、検索事象数1105は、検索動作の現在のグループ内の検索動作の数であり、検索位置1106は、現在のグループ内の検索が発生した処理要素であり、検索事象記述子1108は、現在のグループの検索の識別パラメータを含んでいる記述子である。検索事象数(フィールド1105)に対する内部タプル数(フィールド1104)の比率によって、実行中にトリガー位置で指定されたタイプのタプルが発生したときに、検索事象の現在のグループを形成する検索事象のカテゴリのその後の検索事象が必要になる近似的な確率が得られる。
1つまたは複数の実施形態では、トレース・データが解析されて、1つまたは複数の遅延パラメータ1107を決定し、それらの遅延パラメータ1107が検索事象サマリー・レコード1101に追加される(ブロック1209)。遅延パラメータは、適切な状況において、実行中の先行する検索予測事象の検出後に、検索事象の開始を遅延させるために使用されてよい。先行する検索予測事象の検出後の遅延時間は、検索されたデータを、検索位置の処理要素によって必要とされる直前に使用可能にするために、ちょうど足りる長さになるのが理想的である。この遅延時間は、先行する検索事象(すなわち、適用可能なトリガー位置でトレースされたタプル)の発生と(データの必要性を示す)検索動作の開始の間の時間間隔に応じて決定することができ、検索動作を実行するために必要な時間よりも短い。多くの場合、後者の時間は、前者の時間間隔よりも長く、先行する検索予測事象が検出されたときに、すぐにデータ検索動作を開始するべきであるということを示している。これらの時間間隔は必ずしも均一でないため、平均時間間隔およびその標準偏差などの、標準的挙動または平均的挙動の何らかの測定値を決定するために、トレース・データが解析されてよく、先行する事象と検索事象の間の間隔、およびデータ検索に必要な時間の両方が、別々に測定されてよい。性能監視統計値などの、何らかの他のソースから平均検索動作時間の測定値を取得することが、代替的に可能であってよい。
1つまたは複数の実施形態では、タプル内の特定の属性値または外部状態変数値あるいはその両方と、その同じタプルに関するその後の検索事象との間の相関関係を識別するために、トレース・データが解析される(ブロック1210)。タプル内の属性値とその後の検索事象の間で相関関係が検出された場合、キー・フィールド1109および1つまたは複数の関連付けられたキー・フィールド仕様1110が、ブロック1208で生成された検索事象サマリー・レコードに追加されてよい。同様に、外部状態変数値とその後の検索事象の間で相関関係が検出された場合、外部状態変数識別子1114および1つまたは複数の関連付けられた外部状態変数仕様が、検索事象サマリー・レコードに追加されてよい。
具体的には、対応する内部タプル・タイプの内部タプル内のいずれかのキー属性フィールドのいずれかの値に関する、またはいずれかの外部状態変数値に関する、実行されている検索動作の現在のグループ内のその後の検索動作の確率が、同じタプル・タイプの内部タプルのセットに関する確率(すなわち、検索事象数フィールド1105に対するタプル数フィールド1104の比率)と全体的に大幅に異なるかどうかを知ることが望ましい。キー・フィールドまたは外部状態変数あるいはその両方は、ストリーム・マネージャへの何らかの外部コマンドによって指定することができ、またはプロファイル・データ・アナライザ523でトレース・データを解析することによって決定することができる。具体的には、さまざまな解析技術または解析ツールのいずれかを使用して、データ内の相関関係を検出することができる。
そのようなキー・フィールドまたは外部状態変数および対応する値の範囲が識別された場合、キー・フィールド/外部状態変数がキー・フィールド1109または外部状態変数ID1114として検索事象サマリー・レコード1101に保存され、対象の各値または値の範囲、およびそれらに対応する検索事象の確率が、各最小値1111または1116、各最大値1112または1117、および各検索事象の確率1113または1118を含んでいる各キー・フィールド仕様1110または外部状態変数仕様1115として保存される。この確率は、タプルがトリガー位置で発生しており、対応する範囲内のキー・フィールド値を含んでいる(または、外部状態変数が対応する範囲内にある場合の条件下にある)ことを前提として、検索事象の現在のグループの検索事象が、その後、同じタプルに必要になる確率を反映する。
一実施形態では、キー・フィールド1109または外部状態変数ID1114は、対応する検索事象の確率が、同じタプル・タイプの内部タプルのセットに関する検索事象の確率よりも全体的に大幅に大きい値の場合にのみ、(対応するキー・フィールド仕様1110または外部状態変数仕様1115と共に)検索事象サマリー・レコード1101に保存される。代替の実施形態では、キー・フィールド1109または外部状態変数ID1114は、対応する検索事象の確率が、同じタプル・タイプの内部タプルのセットに関する検索事象の確率と全体的に大幅に異なる(大きいか、または小さい)値の場合に、(対応するキー・フィールド仕様1110または外部状態変数仕様1115と共に)検索事象サマリー・レコード1101に保存される。別の代替の実施形態では、同じタプル・タイプの内部タプルのセットに関する検索事象の確率が全体的に十分に大きく、タプルがトリガー位置で発生したときに対応するデータが常に検索されるはずであるということを示している場合、ブロック1210がスキップされてよく、キー・フィールド1109も外部状態変数ID1114も、(対応するキー・フィールド仕様1110または外部状態変数仕様1115と共に)検索事象サマリー・レコード1101に追加されない。
遅延パラメータが計算され(ブロック1209)、特定の属性/外部変数値と、その後の検索の間の相関関係に関してトレース・データが解析された(ブロック1210)後に、アナライザがブロック1205に戻り、グラフ内の別の先行する位置を決定する。
ブロック1206で、先行する処理要素が存在しない場合、オペレータ・グラフが対応するタプルの作成まで遡ってトラバースされており、ブロック1206から「いいえ」の分岐が選択され、検索事象の対応するグループが解析されたことを示す。この場合、解析されるべき検索事象の選択されたグループがまだ残っている場合、ブロック1211から「はい」の分岐が選択され、ブロック1204で次のグループが選択される。このようにして、すべてのグループが解析された場合、ブロック1211から「いいえ」の分岐が選択され、プロファイル・データの解析が完了する。
上記の説明および図12の図では、理解しやすくするために、さまざまな動作が、連続して実行されているように示され、説明されているということが、理解されるであろう。しかし、システム効率をさらに向上するために、トレース・データの複数のスキャンを単一のスキャンに結合することによって、これらの動作のうちの多くを同時に実行することが可能であってよい。プロファイル・サマリー・レコード(profile summary record)の生成結果に影響を与えずに、特定の動作の順序を変更できるということが、さらに理解されるであろう。最後に、検索事象および先行する検索予測事象の解析に使用されるプロファイル・データの形態における多くの変形が可能であるということ、および本明細書に記載された検索事象サマリー・レコードが、使用できるプロファイル・データの可能性のある形態の一部のみを表しているということが、理解されるであろう。プロファイル・レコードは、その他のフィールドまたは追加のフィールドを含んでよく、トレース・データ以外のデータまたはトレース・データに加えたデータに基づいてよく、異なる方法でデータ・ストリーミング・アプリケーションの挙動を特徴付けてよい、などであってよい。
実行中の初期検索動作
1つまたは複数の実施形態に従って、各トリガーが、対応する検索事象サマリー・レコードによってそれぞれ識別される1つまたは複数のトリガー位置に挿入される。実行中のトリガーの発生は、検索予測事象であるか、あるいは適用可能な検索事象サマリー・レコードで指定されたパラメータに従う検索予測事象またはこの検索予測事象から得られたデータあるいはその両方の検証を引き起こす。検索予測事象を検出することに応答して、検索されたデータに対する実際の要求に先立って、検索動作が実行され、検索されたデータが、このデータを必要とすると予測された処理要素によってアクセスできるバッファまたはキャッシュに提供される。検索動作は、検索されたデータを必要とすると予測された処理要素がこのデータを待つことを引き起こさずに遅延が実行可能であることを、遅延時間データが示している場合に、検索予測事象の第1の指示を超えて遅延されてよい。
1つまたは複数の実施形態では、データ・ストリーミング・アプリケーションの開始時またはその後の時々あるいはその両方の時点で、管理システム105内のストリーム・マネージャ134は、検索事象サマリー・レコード526にアクセスして、検索マスク521および1つまたは複数のトリガー・パラメータ・データセット522を生成する。検索マスクのローカル・コピーが検索された後に、トリガー・パラメータ・データセットがさまざまな計算ノード110に送信される。これらのデータ構造のローカル・コピーは、計算ノードのメモリ300内で維持され、計算ノード110内のさまざまな処理要素311の実行を制御する、状態データ構造になるよう意図されている。
図13は、さまざまな実施形態に従う、実行中の検索動作を制御する状態データ構造を生成または更新するプロセスを上位で示すフロー図である。図13を参照すると、ストリーム・マネージャ134が、データ・ストリーミング・アプリケーションの実行中に先行検索動作を制御する状態データを初期化/更新するための条件を検出する(ブロック1301)。この条件は、データ・ストリーミング・アプリケーションの初期化であってよい。代替として、システム構成に対する変更、ワークロードの変化、性能調整などを考慮するために、状態データが時々更新されてよい。この更新は、固定されたスケジュールに従って、または更新の必要性を示すことのある特定の事象(システム構成の変更など)が検出されたとき、あるいはその両方の時点で実行され得る。ストリーム・マネージャは、そのような条件自体を必ずしも検出せず、検索状態データをリセットするか、または更新するための外部コマンドを単に受信してよい。
適切な条件の検出時に、ストリーム・マネージャは、オペレータ・グラフ132にアクセスして検索マスク521を初期化する(ブロック1302)。検索マスクは、すべての処理要素またはその他の実体が無効化されて、初期化される。1つまたは複数の実施形態では、本明細書に記載されているように、検索マスクおよび検索事象サマリー・レコードの両方が、処理要素の粒度を有しており、すなわち、処理要素ごとに個別のマスク・ビットが存在し、1つまたは複数の処理要素に対して個別の検索事象サマリー・レコードが存在する。ただし、マスクまたは検索事象サマリー・レコードあるいはその両方の粒度が異なることが可能であるということが、理解されるであろう。例えば、処理要素内のオペレータごとに個別のマスク・ビット、またはオペレータの少なくとも一部に対して個別の検索事象サマリー・レコード、あるいはその両方が存在できる。
どの検索事象サマリー・レコード526も選択されていない場合(ブロック1303からの「はい」の分岐)、ストリーム・マネージャは、次の検索事象サマリー・レコードを選択して取得する(ブロック1304)。
ストリーム・マネージャ134は、現在の検索事象サマリー・レコードに関して、先行検索を実行するかどうかの判定に使用される予測検索確率しきい値(predictive lookup probability threshold)を決定する(ブロック1305)。データに対する必要性の予測された確率がこのしきい値を超えた場合、検索動作が実行されるべきである。1つまたは複数の実施形態では、このしきい値は、複数の動的要因に応じて変化することができ、したがって、実行時に決定される。それらの要因は、次のいずれかまたはすべてを含んでよい。(a)活動、特に、検索で使用されるI/Oチャネルに対するI/O活動の現在のレベル。活動の現在のレベルが高いほど、先行検索動作のオーバーヘッド・コストが高くなり、したがってしきい値が高いことを示す。(b)検索によって取得されるデータ量。やはり、検索のオーバーヘッド・コストに関連し、データ量が大きいほど、しきい値が高いことを示す。(c)検索されたデータを受信するためのバッファ内のバッファ・メモリのサイズ。バッファのサイズが小さいほど、バッファの競合の可能性が大きくなることに起因して、しきい値が高いことを示す。(d)検索動作を実行する時間の長さ。検索時間が長いほど、実際に必要とされるデータの検索に失敗することによるコストが大きくなり、したがってしきい値が低いことを示す。その他の要因または追加の要因が使用され得る。これらの動的要因に起因して、確率しきい値が、異なる検索動作では異なってよく、同じ検索動作では、時間と共に変化してよいということが、観察されるであろう。ただし、1つまたは複数の代替の実施形態では、固定された確率しきい値が使用され、ブロック1305を不要にする。
次に、ストリーム・マネージャが、選択された検索事象サマリー・レコード1101に関して、検索確率しきい値が満たされているかどうかを判定する(ブロック1306)。この場合、このレコードに関する検索確率は、内部タプル数1104に対する検索事象数1105の比率であり、この比率は、トリガー位置1102での対応する内部タプル・タイプ1103の内部タプルの発生を前提として、その後の検索動作が必要になる近似的な確率を表す。この比率が、以前に決定された検索確率しきい値を超えた場合、ブロック1306から「はい」の分岐が選択され、対応するトリガー・パラメータ・データセットが作成される(ブロック1308)。
ブロック1308で作成されたトリガー・パラメータ・データセットは、検索事象サマリー・レコード1101内のデータの省略されたバージョンであり、実行中に先行検索動作を管理するために必要なもののみを含んでいる。ストリーム・マネージャが、確率しきい値が満たされていることをすでに決定しているため、ブロック1308で作成されたトリガー・パラメータ・データセットが、確率データ、キー・フィールドまたはキー・フィールド仕様、外部状態変数IDまたは外部状態変数仕様を含む必要はない。このデータセットの存在は、対応する先行検索動作が実行されるべきであるということを示す。次にストリーム・マネージャは、ブロック1310に進む。
ブロック1306で、このレコードの検索確率が検索確率しきい値を超えていない場合、ブロック1306から「いいえ」の分岐が選択される。その場合、検索事象サマリー・レコード1101内のキー・フィールド仕様1110または外部状態変数仕様1115が調べられ、対応する確率1110または1115がしきい値を超えているかどうかを判定する。検索確率しきい値を超えているそのような確率は、トリガー位置1102での内部タイプ・フィールド1103で指定されたタイプのランダムなタプルの発生がその後の検索事象の十分に高い確率を示していないが、キー・フィールドまたは外部状態変数あるいはその両方が、適用可能なキー・フィールド仕様1110または外部状態変数仕様1115で指定された範囲内の対応する値を含んでいる場合、その後の検索事象の確率が確かにしきい値を満たしており、先行検索動作が実行されるべきであるということを示す。それに応じて、ブロック1307から「はい」の分岐が選択され、対応するトリガー・パラメータ・データセットが作成される(ブロック1309)。
一実施形態では、1つのキー・フィールドも、外部状態変数仕様も、検索確率しきい値を満たしていない場合、ブロック1306で、複合条件が評価されてよい。例えば、異なるキー・フィールドまたは外部状態変数それぞれの2つの個別の条件が、検索確率しきい値を個々に満たしていない場合でも、個別の確率データ(例えば、先行する事象の数および必要なその後の検索の数のカウント)から、2つの条件の論理積に関して検索確率の推定を実行し、検索確率しきい値と比較できる。
ブロック1309で作成されたトリガー・パラメータ・データセットは、ブロック1308で作成されたトリガー・パラメータ・データセットに類似しているが、適用可能なキー・フィールドまたは外部状態変数あるいはその両方の1つまたは複数の条件を指定するための追加データを含んでいる。ブロック1308で作成されたトリガー・パラメータ・データセットの場合のように、トリガー・パラメータ・データセット内の実際の確率を指定する必要はなく、検索確率しきい値を満たす条件のみを指定する必要がある。複数の条件が存在することができ、複数の論理和として指定することができ、それらの各論理的条件は、1つまたは複数の論理積が取られた条件を含んでよい。次にストリーム・マネージャは、ブロック1310に進む。
次に、ブロック1310で、検索マスク521内の対応するマスク・ビットが、選択された検索事象レコード1101のトリガー位置フィールド1102で識別された位置に関して有効化される。このマスク・ビットは、実行中に検索動作のトリガーを有効化する。
1つまたは複数の実施形態では、ストリーム・マネージャは、遅延パラメータ1107をさらに使用して、内部タプル・フィールド1103で識別されたタイプのタプルがトリガー位置1102で発生する(先行する検索予測事象の)時間と、検索動作が実行されるためのその後の検索動作との間に十分な遅延時間間隔が存在するかどうかを判定する(ブロック1311)。すなわち、トリガー位置でタプルを検出した直後に先行検索動作が開始されると仮定して、検索動作が、そのタプルがフィールド1106で識別された検索位置で検索されたデータを必要とするときまでに完了するかどうかを判定する。過去の検索時間およびストリーミング遅延時間が変化するため、遅延パラメータが、望ましい信頼度で予測を行うための十分なデータを提供することが好ましい。例えば、検索動作のあるパーセンテージ(例えば、90%)が時間通りに完了する場合に、遅延時間間隔が「十分」であると見なされるように、遅延時間および検索時間の平均値および標準偏差が提供されてよい。遅延時間が十分であると見なされる場合、トリガー・パラメータ・レコード(trigger parameter record)が、そのようにマーク付けされる。この決定は、下でブロック1312〜1319に関して説明されているように、特定の早すぎるトリガー・パラメータ・データセットを取り除くために使用される。ストリーム・マネージャはブロック1303に戻り、次のレコードを選択する。
ブロック1307で、どのキー・フィールド仕様または外部状態変数仕様(あるいはその組み合わせ)も、検索確率しきい値を超える検索確率を示していない場合、ブロック1307から「いいえ」の分岐が選択される。その場合、検索マスクは変更されず(すなわち、対応するトリガー位置に関して無効化されたままになる)、対応するトリガー・パラメータ・データセットが作成されない。その結果、実行中に、現在のトリガー位置1102から検索は実行されない。次に、ストリーム・マネージャはブロック1303に戻り、次の検索事象レコードを検討する。
このようにして、すべての検索事象レコードが調べられて処理されたときに、ブロック1303から「いいえ」の分岐が選択される。その後、ストリーム・マネージャは、冗長であるか、または早すぎる特定のトリガー・パラメータ・データセットを取り除き、対応するマスク・ビットを無効化する(ブロック1312〜1319に示されている)。
この取り除きは、検索動作のトリガーを削減することによって実行効率を改善するために実行される。特定のタイプの内部タプルが、データの検索を要求する前に、複数の処理要素を通過する場合、それらの処理要素のうちの2つ以上(場合によっては、すべて)が、検索確率しきい値を満たす対応する検索事象レコードを含んでいる可能性があり、したがって、トリガー・マスク内の対応するビットが有効化され、トリガー・パラメータ・データセットが作成される。取り除きが存在しない場合、実行中の複数の処理要素のそれぞれで先行検索がトリガーされる結果になるであろう(ただし、I/O動作キューなどの他のメカニズムは、重複する動作が実行されるのを回避することがある)。これには、次の2つの望ましくない影響がある。第1に、場合によっては、タプルが第1の処理要素の下流の第2の処理要素に到達するまで待つことが、(タプルの変化/削除に起因して)検索動作の数を減らすか、または検索されたデータをより新しくするか、あるいはその両方を行うことができる場合に、検索動作が、第1の処理要素で必要とされる時点よりも早くトリガーされることがある。第2に、同じデータに関して、異なる処理要素内で、検索が複数回トリガーされることがある。
ストリーム・マネージャは、取り除きの可能性について、トリガー・パラメータ・データセットを再調査する。この再調査は任意の順序で実行できるが、ある順序(例えば、オペレータ・グラフを後方にトラバースする)が、より効率的であることがある。取り除きの解析のために選択されていないトリガー・パラメータ・データセットがまだ存在する場合(ブロック1312からの「はい」の分岐)、ストリーム・マネージャは次のデータセットを選択する(ブロック1313)。
オペレータ・グラフ内の選択されたデータセットの直近の後続処理要素(successor(s) processing element)が識別される(ブロック1314)。「直近の後続処理要素」は、選択されたデータセット内で識別されるタイプの内部タプルを次に受信する処理要素である。多くの場合、1つの直近の後続処理要素のみが存在するが、オペレータ・グラフのデータ・フローにおける分岐を示す複数の後続処理要素が存在することができる。すべての直近の後続処理要素に関して、対応する処理要素での検索予測タプルの発生と、その後の検索事象との間の遅延時間間隔が、検索を実行するために必要な時間よりも大きいか(ブロック1311ですでに決定されている)、または対応するトリガー・パラメータ・データセットが存在しない場合(特定の経路の検索の確率が低いことを示す)、ブロック1315から「はい」の分岐が選択され、現在選択されているトリガー・パラメータ・データセットが取り除かれ、トリガー・マスク(trigger mask)521内の対応するマスク・ビットが無効化される(ブロック1316)。後続処理要素において、検索動作が実行されるのを待つことができるため、取り除きは適切である。取り除いた後に、ストリーム・マネージャはブロック1312に戻り、次のトリガー・パラメータ・データセットを選択する。
ブロック1315で、直近の後続処理要素が、検索動作を実行するための十分な遅延時間間隔を有していない場合、「いいえ」の分岐が選択される。その場合、検索が、現在選択されているデータセットに対応する処理要素と少なくとも同じくらい早く処理されるべきであるため、現在選択されているデータセットは取り除かれない。直近の後続処理要素のトリガー・パラメータ・データセットが、現在選択されているトリガー・パラメータ・データセットの条件に含まれている条件を含んでいない場合(すなわち、必ずしも現在のトリガー・パラメータ・データセットによってトリガーされない新しい条件を含んでいる場合)、ブロック1317から「いいえ」の分岐が選択され、ブロック1312で次のトリガー・パラメータ・データセットが選択される。直近の後続処理要素のトリガー・パラメータ・データセットが、現在選択されているトリガー・パラメータ・データセットの条件に含まれている条件を含んでいる場合、ブロック1317から「はい」の分岐が選択され、後続処理要素のトリガー・パラメータ・データセットが取り除かれ、トリガー・マスク521内の対応するマスク・ビットが無効化される(ブロック1318)。これを実行する理由は、後続処理要素によって実行されるすべての検索が、現在選択されているトリガー・パラメータ・データセットによって実行される検索と重複するからである。取り除かれた直近の後続処理要素の下流の後続処理要素がすべて識別され、それらの後続処理要素が、現在選択されているトリガー・パラメータ・データセットの条件に含まれている条件を同様に含んでいる場合、それらの後続処理要素が同様に取り除かれ、トリガー・マスク521内の対応するマスク・ビットも同様に無効化される(ブロック1319)。次に、ストリーム・マネージャがブロック1312に戻り、次のトリガー・パラメータ・データセットを選択する。
このようにして、すべてのトリガー・パラメータ・データセットが再調査され、必要に応じて取り除かれたときに、ブロック1312から「いいえ」の分岐が選択される。その後、ストリーム・マネージャはトリガー・マスク521およびトリガー・パラメータ・データセット522のローカル・コピーを各計算ノードに送信し(ブロック1320)、これらのローカル・コピーが、ローカルのトリガー・マスク321およびローカルのトリガー・パラメータ・データセット322として、それぞれ格納される。マスク・ビット/データセットのみを含んでいるローカル・コピーは、受信側計算ノードによって必要とされる。その後、実行時に検索動作を制御する状態データ構造を生成/更新するプロセスが終了する。
初期化後に、データが(タプルの形態で)処理要素に到着したときに、各処理要素でデータ・ストリーミング・アプリケーションが実行され、ローカルのトリガー・マスク321およびローカルのトリガー・パラメータ・データセット322を使用して、先行検索動作をトリガーするのに適した条件を識別する。図14は、さまざまな実施形態に従う、データ・ストリーミング・アプリケーションの例示的な処理要素311の実行プロセスを示すフロー図であり、このフロー図では、処理要素は、適切な場合に、ローカルのトリガー・マスク321およびローカルのトリガー・パラメータ・データセットを使用して先行検索動作をトリガーしてよい。
図14を参照すると、オペレータ・グラフをトラバースするタプルが、処理のために例示的な処理要素に到着する(ブロック1401)。処理要素への入力時に実行される共通実行時コード614内の先行検索命令616が、ローカルのトリガー・マスク321をチェックする(ブロック1402)。このチェックは、処理要素への入力時に実行されるように図14に示され、本明細書において説明されているが、代替として、必ず実行される処理要素のコード内の終了または任意の位置で実行され得るということが、理解されるであろう。
対応するトリガー・ビットが設定されている場合、ブロック1402から「はい」の分岐が選択され、検索命令616がローカルのトリガー・パラメータ・データセット322にアクセスして、トリガー位置が現在の処理要素であるデータセットを検出する(ブロック1403)。そのような2つ以上のデータセット(すなわち、同じ処理要素からトリガーされた2つ以上の検索動作)が存在できる可能性がある。トリガー・パラメータ・データセットは、トリガーの1つまたは複数の条件を指定する。条件のいずれかが満たされた場合、ブロック1404から「はい」の分岐が選択され、検索命令616が、トリガー・パラメータ・データセット内の検索記述子データまたは(例えば、タプルからの)使用可能な追加データあるいはその両方を使用して、検索動作を開始する(ブロック1405)。この検索動作は、例えば、検索記述子によって定義されたストレージ内のアドレスを指定することによるか、検索記述子によって定義されたデータに対する要求を、検索記述子によって定義された実体に、ネットワークを経由して送信することによるか、またはその他の方法によるものであってよい。どの条件も満たされない場合、ブロック1404から「いいえ」の分岐が選択され、ブロック1405が回避される。
次に、処理要素が引き続きタプルに対して実行される。この実施形態例では、処理要素が、ブロック1406〜1408として示されているオペレータA、B、およびCを呼び出す。これらのオペレータは、逐次的に、または並列に実行することができ、オペレータの数は変化してよい。すべてのオペレータの実行が完了したときに、タプルの処理が完了する。
前述のさまざまな実施形態では、実際の必要性が生じる前に、同じデータに対して同じ検索動作が複数回実行される可能性がある。図13に関して、冗長な検索動作を引き起こすことがある冗長なトリガー・パラメータ・データセットを取り除こうとする試みが説明されたが、取り除きが、冗長な検索がなくなることを常に保証できるとは限らない。本開示の範囲を超える他のメカニズムが、冗長な検索動作の数を削減してよい。例えば、オペレーティング・システムが、進行中のストレージ・アクセス動作の記録を維持してよく、それによってオペレーティング・システムは、同じストレージ位置への冗長なアクセスを防ぐことができる。最悪の場合、ストレージ・チャネル、ネットワーク帯域幅などの少量の追加の使用を引き起こす、ある程度の冗長な検索動作が存在することがある。
代替の検索予測事象
前述のさまざまな実施形態では、検索予測事象は、オペレータ・グラフ内の指定された位置での、指定されたタイプのタプルの発生である。場合によっては、このタプルの発生のみが、検索動作をトリガーするための十分な条件になる。その他の場合、このタプルの発生に加えて、1つまたは複数のタプルの属性または外部状態変数あるいはその両方が、検索動作をトリガーするための指定された条件を満たさなければならない。
しかし、1つまたは複数の代替の実施形態では、検索動作は、オペレータ・グラフの特定の位置で、特定のタプル・タイプによってトリガーされる必要はなく、実行中に検出されることのあるその他の条件によってトリガーされる。例えば、データに対する必要性の予測は、データ・ストリーミング・アプリケーションの過去データの取得パターンに少なくとも部分的に基づいてよい。そのような過去のパターンは、(a)通常はデータ要素が取得される時刻/週、(b)特定の事象の発生後の時間、(c)特定の条件の存在、または(d)他のデータの取得との相関関係のいずれか、あるいはすべてを含むことができる。これらの過去データのパターンのいずれか、またはすべてが、プロファイル・データの解析によって検出されてよく、適切なデータ構造またはトリガーのメカニズムあるいはその両方を使用して、先行する検索予測事象に応答して検索動作をトリガーすることができる。
その他の変形
上では、一連のステップが、1つまたは複数の好ましい実施形態または代替の実施形態あるいはその両方として説明されたが、検索動作に起因するデータ・ストリーミング・アプリケーションにおける遅延時間を削減するための技術の多くの変形が可能であるということが、理解されるであろう。具体的には、本明細書に記載された機能を実行するために、一部のステップが異なる順序で実行されてよく、異なるデータ構造が使用されてよく、あるいは異なるハードウェア・リソースまたはソフトウェア・リソースが採用されてよく、あるいはその組み合わせが行われてよい。さらに、特定の方式、しきい値、論理的条件などが、1つまたは複数の実施形態として開示されていることがあるが、これらの方式、しきい値、論理的条件など、およびこれらの変形が、可能性のある実施形態の一部に過ぎないということ、および他の技術が代替として使用され得るということが、理解されるであろう。
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるための(非一過性の)コンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
コンピュータ可読記憶媒体は、命令実行デバイスで使用するための命令を保持および格納できる有形のデバイスにすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。コンピュータ可読記憶媒体の例が、図2に、システム・メモリ202およびデータ・ストレージ・デバイス225〜227として示されている。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一時的信号であると解釈されるべきではない。
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
本発明と矛盾するか、またはその他の方法で本明細書において制限されない限り、本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide area network)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施するように、コンピュータ実装プロセスを生成すべく、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれ、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
本発明の特定の実施形態が特定の代替手段と共に開示されたが、形態および詳細における追加の変形が以下の特許請求の範囲内で行われてよいということが、当業者によって認識されるであろう。