(57)【特許請求の範囲】
【請求項１】
イベントのデータストリームを処理するためのシステムであって、前記システムは、
複数の命令を格納するメモリと、
前記メモリに結合されたプロセッサとを備え、前記プロセッサは、
連続イベント処理（ＣＥＰ）クエリの複数の部分がイベントストリームにおけるイベントに対して同時に実行可能であるということを判定するように、前記複数の命令を実行するように構成されており、
前記判定することは、
前記ＣＥＰクエリを複数の別個の演算子に分割することと、
前記複数の別個の演算子内の各特定の演算子について別個の順序付け制約を判定することと、
前記プロセッサが前記複数の別個の演算子について判定した前記順序付け制約に少なくとも部分的に基づいて、前記ＣＥＰクエリについての順序付け制約を判定することと、
前記ＣＥＰクエリについての前記順序付け制約に基づいて、前記ＣＥＰクエリの複数の部分が同時に実行可能であるかどうかを判定することとを含み、
前記プロセッサは、前記イベントストリームを介して受信された第１のイベントに対して前記ＣＥＰクエリの前記複数の部分を同時に実行するように、前記複数の命令を実行するように構成されており、
前記複数の部分を同時に実行することは、
前記ＣＥＰクエリの複数の部分が同時に実行可能であると判定したことに応じて、前記イベントストリームを介して受信された前記第１のイベントに対して前記ＣＥＰクエリの前記複数の部分を同時に処理する複数の実行のスレッドを生成することを含む、システム。
【請求項２】
前記プロセッサは、前記イベントストリームと関連付けられる順序付け制約に少なくとも部分的に基づいて、前記ＣＥＰクエリについての前記順序付け制約を判定するように構成されている、請求項１に記載のシステム。
【請求項３】
前記プロセッサは、前記特定の演算子がそれから入力を受ける１つ以上の他の演算子の１つ以上の順序付け制約に少なくとも部分的に基づいて前記特定の演算子についての順序付け制約を判定することによって、少なくとも部分的に、前記複数の別個の演算子内の各特定の演算子について前記別個の順序付け制約を判定するように構成されている、請求項１または２に記載のシステム。
【請求項４】
前記プロセッサは、前記特定の演算子のオペレーションタイプがフィルタリングオペレーションタイプであるかどうかに少なくとも部分的に基づいて前記特定の演算子についての順序付け制約を判定することによって、少なくとも部分的に、前記複数の別個の演算子内の各特定の演算子について前記別個の順序付け制約を判定するように構成されている、請求項１〜３のいずれか１項に記載のシステム。
【請求項５】
前記プロセッサは、（ａ）前記特定の演算子がそれらから入力を受けるすべての他の演算子の順序付け制約、および（ｂ）前記特定の演算子のオペレーションタイプと関連付けられる順序付け制約を含む順序付け制約のセット内のうち、最も制約された順序付け制約を判定することによって前記特定の演算子についての順序付け制約を判定することによって、少なくとも部分的に、前記複数の別個の演算子内の各特定の演算子について前記別個の順序付け制約を判定するように構成されている、請求項１〜４のいずれか１項に記載のシステム。
【請求項６】
前記プロセッサは、（ａ）前記イベントストリームにおけるイベントを処理する第１のＣＥＰクエリによって用いられる第１の演算子と、（ｂ）前記イベントストリームにおけるイベントを同様に処理する第２のＣＥＰクエリによって用いられる第２の演算子とを、前記第１の演算子および前記第２の演算子の両方が特定のタイプのオペレーションを行なうと判定したことに応じて、単一の共有演算子にマージするように構成されている、請求項１〜５のいずれか１項に記載のシステム。
【請求項７】
前記プロセッサは、（ａ）前記イベントストリームにおけるイベントを処理する第１のＣＥＰクエリによって用いられる第１の演算子と、（ｂ）前記イベントストリームにおけるイベントを同様に処理する第２のＣＥＰクエリによって用いられる第２の演算子とを、前記第１の演算子および前記第２の演算子の両方が特定のタイプのオペレーションを行なうと判定したことに応じて、単一の共有演算子にマージするように構成され、
前記プロセッサは、前記共有演算子の順序付け制約に少なくとも部分的に基づいて、前記共有演算子から入力を受ける第３の演算子についての順序付け制約を判定するように構成され、
前記プロセッサは、前記共有演算子の前記順序付け制約に少なくとも部分的に基づいて、前記共有演算子から入力を受ける第４の演算子についての順序付け制約を判定するように構成され、
前記第３の演算子は、前記第１のＣＥＰクエリによって用いられ、前記第２のＣＥＰクエリによっては用いられず、
前記第４の演算子は、前記第２のＣＥＰクエリによって用いられ、前記第１のＣＥＰクエリによっては用いられない、請求項１〜５のいずれか１項に記載のシステム。
【請求項８】
イベントのデータストリームを処理するための方法であって、前記方法は、
連続イベント処理（ＣＥＰ）クエリの複数の部分がイベントストリームにおけるイベントに対して同時に実行可能であるということを判定するステップを含み、
前記判定するステップは、
前記ＣＥＰクエリを複数の別個の演算子に分割するステップと、
前記複数の別個の演算子内の各特定の演算子について別個の順序付け制約を判定するステップと、
プロセッサが、前記複数の別個の演算子について判定した前記順序付け制約に少なくとも部分的に基づいて、前記ＣＥＰクエリについての順序付け制約を判定するステップと、
前記ＣＥＰクエリについての前記順序付け制約に基づいて、前記ＣＥＰクエリの複数の部分が同時に実行可能であるかどうかを判定するステップとを含み、
前記方法は、前記イベントストリームを介して受信された第１のイベントに対して前記ＣＥＰクエリの前記複数の部分を同時に実行するステップをさらに含み、
前記実行するステップは、
前記ＣＥＰクエリの複数の部分が同時に実行可能であると判定したことに応じて、前記イベントストリームを介して受信された前記第１のイベントに対して前記ＣＥＰクエリの前記複数の部分を同時に処理する複数の実行のスレッドを生成するステップを含む、方法。
【請求項９】
前記イベントストリームと関連付けられる順序付け制約に少なくとも部分的に基づいて、前記ＣＥＰクエリについての順序付け制約を判定するステップをさらに含む、請求項８に記載の方法。
【請求項１０】
前記複数の別個の演算子内の各特定の演算子について別個の順序付け制約を判定するステップは、前記特定の演算子がそれから入力を受ける１つ以上の他の演算子の１つ以上の順序付け制約に少なくとも部分的に基づいて、前記特定の演算子についての順序付け制約を判定するステップを含む、請求項８または９に記載の方法。
【請求項１１】
前記複数の別個の演算子内の各特定の演算子について別個の順序付け制約を判定するステップは、前記特定の演算子のオペレーションタイプがフィルタリングオペレーションタイプであるかどうかに少なくとも部分的に基づいて、前記特定の演算子についての順序付け制約を判定するステップを含む、請求項８〜１０のいずれか１項に記載の方法。
【請求項１２】
（ａ）前記イベントストリームにおけるイベントを処理する第１のＣＥＰクエリによって用いられる第１の演算子と、（ｂ）前記イベントストリームにおけるイベントを同様に処理する第２のＣＥＰクエリによって用いられる第２の演算子とを、前記第１の演算子および前記第２の演算子の両方が特定のタイプのオペレーションを行なうと判定したことに応じて、単一の共有演算子にマージさせるステップをさらに含む、請求項８〜１１のいずれか１項に記載の方法。
【請求項１３】
（ａ）前記イベントストリームにおけるイベントを処理する第１のＣＥＰクエリによって用いられる第１の演算子と、（ｂ）前記イベントストリームにおけるイベントを同様に処理する第２のＣＥＰクエリによって用いられる第２の演算子とを、前記第１の演算子および前記第２の演算子の両方が特定のタイプのオペレーションを行なうと判定したことに応じて、単一の共有演算子にマージするステップをさらに含み、
前記複数の別個の演算子内の各特定の演算子について別個の順序付け制約を判定するステップは、前記共有演算子の順序付け制約に少なくとも部分的に基づいて、前記共有演算子から入力を受ける第３の演算子についての順序付け制約を判定するステップを含み、
前記複数の別個の演算子内の各特定の演算子について別個の順序付け制約を判定するステップは、前記共有演算子の前記順序付け制約に少なくとも部分的に基づいて、前記共有演算子から入力を受ける第４の演算子についての順序付け制約を判定するステップを含み、
前記第３の演算子は、前記第１のＣＥＰクエリによって用いられ、前記第２のＣＥＰクエリによっては用いられず、
前記第４の演算子は、前記第２のＣＥＰクエリによって用いられ、前記第１のＣＥＰクエリによっては用いられない、請求項８〜１１のいずれか１項に記載の方法。
【請求項１４】
プロセッサにオペレーションを行なわせるための複数の命令を含むコンピュータ読取可能プログラムであって、前記複数の命令は、
前記プロセッサに、連続イベント処理（ＣＥＰ）クエリの複数の部分がイベントストリームにおけるイベントに対して同時に実行可能であるということを判定させる命令を含み、
前記判定させる命令は、
前記プロセッサに、前記ＣＥＰクエリを複数の別個の演算子に分割させる命令と、
前記プロセッサに、前記複数の別個の演算子内の各特定の演算子について別個の順序付け制約を判定させる命令と、
前記プロセッサに、前記プロセッサが前記複数の別個の演算子について判定した前記順序付け制約に少なくとも部分的に基づいて、前記ＣＥＰクエリについての順序付け制約を判定させる命令と、
前記プロセッサに、前記ＣＥＰクエリについての前記順序付け制約に基づいて、前記ＣＥＰクエリの複数の部分が同時に実行可能であるかどうかを判定させる命令とを含み、
前記複数の命令は、前記プロセッサに、前記イベントストリームを介して受信された第１のイベントに対して前記ＣＥＰクエリの前記複数の部分を同時に実行させる命令を含み、
前記実行させる命令は、
前記プロセッサに、前記ＣＥＰクエリの複数の部分が同時に実行可能であると判定したことに応じて、前記イベントストリームを介して受信された前記第１のイベントに対して前記ＣＥＰクエリの前記複数の部分を同時に処理する複数の実行のスレッドを生成させる命令を含む、コンピュータ読取可能プログラム。
【請求項１５】
請求項８〜１３のいずれか１項に記載の方法をコンピュータに実行させるためのコンピュータ読取可能プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
本出願は、連続イベント処理（ＣＥＰ：continuous event processing）クエリの処理
に関する。
【背景技術】
【０００２】
従来、データベースは、データの格納および格納されたデータに対する問合せ機能を必要とするアプリケーションにおいて用いられてきた。そのため、既存のデータベースは、格納されている有限のデータセットにわたってクエリを実行するように最善に備えられている。しかしながら、従来のデータベースモデルは、データが制限されたデータセットとしてではなくデータイベントのストリームとして受けられる、ますます増えつつある現代のアプリケーションには好適でない。イベントストリームとも称されるデータストリームは、リアルタイムの、場合によっては連続的なイベントのシーケンスによって特徴付けられる。したがって、データまたはイベントストリームは、制限のないデータのセットを表わす。データストリームを生成するソースの例としては、センサ測定値のシーケンスを送るように構成されたセンサおよびプローブ（たとえば、ＲＦＩＤセンサ、温度センサ等）、金融ティッカー（financial tickers）、ネットワークステータス更新を送るネットワ
ーク監視およびトラフィック管理アプリケーション、クリックストリーム分析ツール等が含まれる。
【０００３】
ＣＥＰは、イベントストリームにおけるデータを処理するために有用な技術である。ＣＥＰは高度にステートフルである。ＣＥＰは、イベントを連続的に受け、それらのイベントのうち何らかのパターンを探すことを要する。そのため、ＣＥＰにはかなりの量の状態維持が関与している。ＣＥＰはこのように多くの状態の維持を要するため、ＣＥＰクエリをイベントストリーム内のデータに適用するプロセスは、常にシングルスレッド化されていた。コンピュータプログラミングにおいては、シングルスレッディングは、一度に１つのコマンドの処理である。
【０００４】
一般的に、ＣＥＰクエリ処理は、イベントストリーム内の特定されるイベントに対するクエリの連続的な実行を要する。たとえば、ＣＥＰクエリ処理は、最新時間にわたる平均株価を連続的に観察するために用いられる可能性もある。このような状況下では、ＣＥＰクエリ処理は、各々がさまざまな時点での現在の株価を示すイベントを含むイベントストリームに対して行なわれ得る。クエリは、前の１時間にわたる株価を集約し、それらの株価の平均を計算し得る。クエリは、計算された平均の各々を出力し得る。株価の１時間単位のウインドウが移動するにつれてクエリは連続的に実行されることができ、クエリはさまざまな異なる平均株価を出力し得る。
【０００５】
このようなＣＥＰクエリ処理は、常にシングルスレッド内で行なわれてきたため、ＣＥＰクエリ処理のスケーリングが問題となり得る。計算機がオペレーションを同時に行なうことの可能な複数のプロセッサを有する場合、またはコンピュータシステムがオペレーションを同時に行なうことの可能な多くのノードを有する場合、ＣＥＰクエリ処理が行なわれるときにこのような機械およびシステムの同時処理能力が無駄になってしまうおそれがある。
【０００６】
さらに、ＣＥＰクエリの実行中、エラーが生じることもある。従来、ＣＥＰクエリの実行中にエラーが生じると、このエラーは単純にＣＥＰクエリに実行を止めさせていた。連続クエリ言語（ＣＱＬ）が構造化照会言語（ＳＱＬ）から発達した。ＳＱＬでは、典型的
には、クエリは、連続イベントストリームにおけるイベントに対して連続的にではなく、１つのデータのセットに対して一度実行される。典型的には、ＳＱＬクエリは１度だけ実行されているため、ＳＱＬクエリの障害は、通常、データベース管理者にこの問題を手動で調査してもらい、その後、問題を解決するためにデータベース管理者に必要に応じてデータベースまたはクエリに手動で変更を行なってもらい、その後、データベース管理者にクエリを再実行してもらうことによって対処されていた。反対に、ＣＱＬクエリは、イベントストリームにおけるイベントに対して連続的に実行可能である。ＣＱＬクエリに実行を停止させるエラーは、単にイベントストリーム内の１つの無効なイベントによるものである可能性もあった。残念ながら、イベントストリームにおける残りのイベントが有効であっても、ＣＱＬクエリが停止されたままである限りそれらのイベントはＣＱＬクエリによって処理されない。代わりに、それらのイベントは、イベントストリームが時間とともに流れ続けるにつれて単に失われてしまう可能性がある。ＣＱＬクエリは、管理者がＣＱＬクエリを手動で再開させない限り再開されない。管理者は、エラーが無効なイベントによるものであることを認識しながら、ＣＱＬクエリを全く変更せずにＣＱＬクエリを単に再開させてしまうことが多い。このような状況下で、ＣＱＬクエリの停止と、それに伴う結果的なイベントデータの損失は残念であり、不要であった。
【発明の概要】
【課題を解決するための手段】
【０００７】
簡単な概要
発明のある実施形態は、複数の実行のスレッドが、ＣＥＰクエリのオペレーションの少なくとも一部を互いに同時に行なうことができるように、ＣＥＰクエリをいつどのように同時に処理できるか判定するための技術に関する。ある技術に従うと、ユーザは、ＣＥＰクエリプロセッサに、ＣＥＰクエリを同時に実行する試行を行なうように命令し得る。ＣＥＰクエリプロセッサはこれに応じて、ＣＥＰクエリの実行またはその一部が同時に行なわれ得るかどうか、継承およびオペレーションタイプに依存し得るある制約に基づいて判定する。この判定に基づいて、ＣＥＰクエリプロセッサは、イベントストリーム内の同一イベントに対してＣＥＰクエリの少なくともある部分を並列に実行し得る。
【０００８】
発明のある実施形態は、障害および障害ハンドリング（fault handling）の概念をＣＥＰクエリの実行に追加するための技術に関する。障害ハンドリング技術をＣＥＰクエリ（ＣＱＬクエリはＣＥＰクエリの一種である）の処理に導入することによって、ユーザは、ＣＥＰクエリプロセッサに、それに対して障害が生じたＣＥＰクエリの停止を必ずしも伴わないカスタマイズされた方法で障害に対応するように命令することが可能となる。たとえば、障害は、一時的な問題によるものである可能性もある。このような状況下では、ＣＥＰクエリプロセッサは、障害を無視して、イベントストリームの残りに対してはＣＥＰクエリの実行が継続できるように命令またはプログラミングされ得る。代替的には、障害がＣＥＰクエリ自体の問題によるものである場合には、ＣＥＰクエリプロセッサは、この障害が問題となっているＣＥＰクエリを最終的に停止させるまで、障害をクエリ処理システムに伝搬させるように命令またはプログラミングされ得る。
【０００９】
発明のある実施形態は、イベントのデータストリームを処理するための装置に関し、当該装置は、連続イベント処理（ＣＥＰ）クエリを複数の別個の演算子に分割するための手段と、複数の別個の演算子内の各特定の演算子について別個の制約を判定するための手段と、複数の別個の演算子について判定した制約の少なくとも一部に基づいて、ＣＥＰクエリについての制約を判定するための手段と、ＣＥＰクエリについての制約に基づいて、ＣＥＰクエリの少なくとも一部が同時に実行可能であるかどうかを判定するための手段と、ＣＥＰクエリの少なくとも一部が同時に実行可能であると判定したことに応じて、イベントストリームからのイベントを同時に処理する複数の実行のスレッドを生成するための手段とを含む。
【００１０】
一例では、装置はさらに、イベントストリームと関連付けられる制約の少なくとも一部に基づいて、ＣＥＰクエリについての制約を判定するための手段を含む。
【００１１】
一例では、複数の別個の演算子内の各特定の演算子について別個の制約を判定するための手段は、特定の演算子がそれから入力を受ける１つ以上の他の演算子の１つ以上の制約の少なくとも一部に基づいて、特定の演算子についての制約を判定するための手段を含む。
【００１２】
一例では、複数の別個の演算子内の各特定の演算子について別個の制約を判定するための手段は、特定の演算子のオペレーションタイプがフィルタリングオペレーションタイプであるかどうかの少なくとも一部に基づいて、特定の演算子についての制約を判定するための手段を含む。
【００１３】
一例では、複数の別個の演算子内の各特定の演算子について別個の制約を判定させるための手段は、（ａ）特定の演算子がそれらから入力を受けるすべての他の演算子の制約、および（ｂ）特定の演算子のオペレーションタイプと関連付けられる制約を含む制約のセット内のうち、最も制約された制約を判定することによって、特定の演算子についての制約を判定させるための手段を含む。
【００１４】
一例では、装置はさらに、（ａ）イベントストリームにおけるイベントを処理する第１のＣＥＰクエリによって用いられる第１の演算子と、（ｂ）イベントストリームにおけるイベントを同様に処理する第２のＣＥＰクエリによって用いられる第２の演算子とを、第１の演算子および第２の演算子の両方が特定のタイプのオペレーションを行なうと判定したことに応じて、単一の共有演算子にマージするための手段を含む。
【００１５】
一例では、装置はさらに、（ａ）イベントストリームにおけるイベントを処理する第１のＣＥＰクエリによって用いられる第１の演算子と、（ｂ）イベントストリームにおけるイベントを同様に処理する第２のＣＥＰクエリによって用いられる第２の演算子とを、第１の演算子および第２の演算子の両方が特定のタイプのオペレーションを行なうと判定したことに応じて、単一の共有演算子にマージするための手段をさらに含み、複数の別個の演算子内の各特定の演算子について別個の制約を判定するための手段は、共有演算子の制約の少なくとも一部に基づいて、共有演算子から入力を受ける第３の演算子についての制約を判定するための手段を含み、複数の別個の演算子内の各特定の演算子について別個の制約を判定するための手段は、共有演算子の制約の少なくとも一部に基づいて、共有演算子から入力を受ける第４の演算子についての制約を判定するための手段を含み、第３の演算子は、第１のＣＥＰクエリによって用いられ、第２のＣＥＰクエリによっては用いられず、第４の演算子は、第２のＣＥＰクエリによって用いられ、第１のＣＥＰクエリによっては用いられない。
【００１６】
イベントのデータストリームを処理するためのシステムであって、当該システムは、連続イベント処理（ＣＥＰ）クエリを複数の別個の演算子に分割するように構成されたクエリ分割ユニットと、複数の別個の演算子内の各特定の演算子について別個の制約を判定するように構成された第１の制約判定ユニットと、第１の制約判定ユニットが複数の別個の演算子について判定した制約の少なくとも一部に基づいて、ＣＥＰクエリについての制約を判定するように構成された第２の制約判定ユニットと、ＣＥＰクエリについての制約に基づいて、ＣＥＰクエリの少なくとも一部が同時に実行可能であるかどうかを判定するように構成された実行判定ユニットと、ＣＥＰクエリの少なくとも一部が同時に実行可能であると判定したことに応じて、イベントストリームからのイベントを同時に処理する複数の実行のスレッドを生成するように構成されたスレッド生成ユニットとを含む。
【００１７】
一例では、システムはさらに、イベントストリームと関連付けられる制約の少なくとも一部に基づいて、ＣＥＰクエリについての制約を判定するように構成された第３の制約判定ユニットを含む。
【００１８】
一例では、第１の制約判定ユニットは、少なくとも一部は、特定の演算子がそれから入力を受ける１つ以上の他の演算子の１つ以上の制約の少なくとも一部に基づいて特定の演算子についての制約を判定することによって、複数の別個の演算子内の各特定の演算子について別個の制約を判定するように構成されている。
【００１９】
一例では、第１の制約判定ユニットは、少なくとも一部は、特定の演算子のオペレーションタイプがフィルタリングオペレーションタイプであるかどうかの少なくとも一部に基づいて特定の演算子についての制約を判定することによって、複数の別個の演算子内の各特定の演算子について別個の制約を判定するように構成されている。
【００２０】
一例では、第１の制約判定ユニットは、少なくとも一部は、（ａ）特定の演算子がそれらから入力を受けるすべての他の演算子の制約、および（ｂ）特定の演算子のオペレーションタイプと関連付けられる制約を含む制約のセット内のうち、最も制約された制約を判定することによって特定の演算子についての制約を判定することによって、複数の別個の演算子内の各特定の演算子について別個の制約を判定するように構成されている。
【００２１】
一例では、システムはさらに、（ａ）イベントストリームにおけるイベントを処理する第１のＣＥＰクエリによって用いられる第１の演算子と、（ｂ）イベントストリームにおけるイベントを同様に処理する第２のＣＥＰクエリによって用いられる第２の演算子とを、第１の演算子および第２の演算子の両方が特定のタイプのオペレーションを行なうと判定したことに応じて、単一の共有演算子にマージするように構成されたマージユニットを含む。
【００２２】
一例では、システムはさらに、（ａ）イベントストリームにおけるイベントを処理する第１のＣＥＰクエリによって用いられる第１の演算子と、（ｂ）イベントストリームにおけるイベントを同様に処理する第２のＣＥＰクエリによって用いられる第２の演算子とを、第１の演算子および第２の演算子の両方が特定のタイプのオペレーションを行なうと判定したことに応じて、単一の共有演算子にマージするように構成されたマージユニットをさらに含み、第１の制約判定ユニットは、共有演算子の制約の少なくとも一部に基づいて、共有演算子から入力を受ける第３の演算子についての制約を判定するように構成された第１のサブユニットと、共有演算子の制約の少なくとも一部に基づいて、共有演算子から入力を受ける第４の演算子についての制約を判定するように構成された第２のサブユニットとを含み、第３の演算子は、第１のＣＥＰクエリによって用いられ、第２のＣＥＰクエリによっては用いられず、第４の演算子は、第２のＣＥＰクエリによって用いられ、第１のＣＥＰクエリによっては用いられない。
【００２３】
ここまで述べてきたことは、以下の明細書、請求項、および添付の図面を参照すると、他の特徴および実施形態とともに、より明らかになるであろう。
【図面の簡単な説明】
【００２４】
【図１】本発明のある実施形態に従って、ＣＥＰクエリが同時に実行可能であるかどうかを当該ＣＥＰクエリの演算子に基づいて判定するための例示的な技術を示すフローチャートである。
【図２】本発明のある実施形態に従って、演算子の誘導グラフ（directed graph of operators）における特定の演算子について同時処理制約を判定するための例示的な技術を示すフローチャートである。
【図３】本発明のある実施形態に従って、ＣＥＰクエリの実行において最大許容同時処理（maximum permissible concurrency）を可能にするまたは実施するために、当該ＣＥＰクエリの開始に演算子を追加するための例示的な技術を示すフローチャートである。
【図４】本発明のある実施形態に従って、ＣＥＰクエリプロセッサのユーザ登録障害ハンドラ（user-registered fault handlers）が、ＣＥＰクエリの演算子によってスローされた障害をハンドリングできる例示的な技術を示すフローチャートである。
【図５】本発明のある実施の形態に従い使用し得るシステム環境の構成要素を示す簡略ブロック図である。
【図６】本発明の実施の形態に従い使用し得るコンピュータシステムの簡略ブロック図である。
【図７】本発明の実施形態に従うシステムの機能ブロック図である。
【発明を実施するための形態】
【００２５】
詳細な説明
以下の説明では、説明の目的のために、本発明の実施形態が完全に理解されるように特定の詳細が記載される。しかしながら、本発明はこれらの特定の詳細なしに実施され得ることが明らかであろう。
【００２６】
発明の一実施形態では、ＣＥＰクエリプロセッサは、ＣＥＰクエリのさまざまな構成要素を評価し得る。この評価に基づいて、ＣＥＰクエリプロセッサは、ＣＥＰクエリを別個の断片（pieces）に分ける。次に、ＣＥＰクエリプロセッサは、その断片が同時に処理可能であるかどうかを判定するために、ＣＥＰクエリのこのような断片の各々を評価し得る。この評価の結果に基づいて、ＣＥＰクエリのある断片は同時に処理可能であるため、ＣＥＰクエリのそれらの断片がイベントストリームからの複数のイベントに同時に適用可能であり、一方で、ＣＥＰクエリの他の断片は、非同時に、逐次に処理可能である。
【００２７】
イベントストリームにおけるイベントは、時間によって順序付けられ得るため、クエリプロセッサは、そのイベントストリームにおける最新のイベントを受ける前にイベントストリームにおける最も古いイベントを受け得る。発明のある実施形態に従うと、ＣＥＰクエリプロセッサは、ユーザから、特定されるＣＥＰクエリのすべてまたは少なくとも一部が、または特定のＣＥＰクエリのいずれも、同時に、すなわち、並列に、処理可能である、または処理可能でないことを示す指令を受け得る。たとえば、ユーザは、ＣＥＰクエリプロセッサにこの特定されるＣＥＰクエリが完全に順序付けられている（completely ordered）と通知し得る。このような状況下では、ＣＥＰクエリプロセッサは、特定されるＣＥＰクエリのいずれの部分も同時に処理可能でないと判定し得る。なぜなら、完全に順序付けられたＣＥＰクエリの同時処理によって、処理されたイベントがそれらの順序を失ってしまうおそれがあるためである。別の例として、ユーザは、ＣＥＰクエリプロセッサに、特定されるＣＥＰクエリが順序付けられていない（unordered）と通知し得る。ＣＥＰ
クエリがイベントストリームからのイベントを処理し、出力する順序がユーザにとって重要でない場合、当該ＣＥＰクエリは順序付けられていない。さらに別の例として、ユーザは、ＣＥＰクエリプロセッサに、特定されるＣＥＰクエリがパーティションで順序付けられている（partition-ordered）と通知し得る。ＣＥＰクエリのパーティションの各々に
ついて、そのパーティション内のイベントが互いに対して順に処理される必要があるものの、他のパーティション内のイベントに対しては必ずしも順に処理されなくてよい場合、当該ＣＥＰクエリはパーティションで順序付けられている。ユーザの指令に基づいて、ＣＥＰクエリプロセッサは、同時に処理可能なＣＥＰクエリの断片があれば、それはどの断片であるかを判定し得る。パーティションベースの処理に関わる各パーティションは、異なるカテゴリからのイベントを含む可能性もある。たとえば、パーティションベースの処理は、同一のイベントストリーム内に表わされる株価イベントを有する各別個の会社につ
いて、別個の平均株価を演算することを要し得る。このような状況下では、ＣＥＰクエリは、株式銘柄によって概念的にパーティション化される。ＣＥＰクエリは、「グループ毎」という節を含むことによって、パーティションベースの処理を要することを示してもよい。
【００２８】
ある実施形態では、ＣＥＰクエリの同時処理は、イベントストリームにおける複数のイベントを同時に処理させない。代わりに、ＣＥＰクエリの同時処理は、そのＣＥＰクエリの複数の部分、またはオペレーションを、イベントストリーム内の特定のイベントに対して同時に行なわせ得る。イベントストリームにおけるこのような特定のイベントの各々について、ＣＥＰクエリのそれらの複数の部分は、その特定のイベントに対して同時に行なわれ得る。発明のある実施形態では、ＣＥＰクエリプロセッサは、複数のスレッドを実行することによって同時にイベントに対するＣＥＰクエリの一部を処理することができ、これらの複数のスレッドの各々は、そのイベントに対するＣＥＰクエリのオペレーションを同時に行なうことができる。これが起きるとき、複数のスレッドのどのスレッドがそのオペレーションを初めに実行終了するかに関する保証は一切ない。イベントが意図せずアウトオブオーダーになってしまうことを防止するために、イベントストリームからこれらのイベントを抽出することにシングルスレッドを充てることができる。
【００２９】
ある実施形態では、ＣＥＰクエリプロセッサは、ユーザのアプリケーションによって所有されるある制約を示す当該ユーザからの入力を受け得る。たとえば、ユーザは、ダッシュボード上に株価を表示するアプリケーションを有し得る。株価は、イベントストリームから測定され得る。ユーザは、イベントストリームからの株価が厳密に時間順に表示されているかどうかを気にしない場合もあり得る。このような状況下では、ユーザのアプリケーションは、順序付けられていないイベントに対処可能である。他の場合には、ユーザのアプリケーションは、イベントが順序付けられたままとなることを要求することもあり得る。たとえば、アプリケーションは、株価が特定されるしきい値を下回ったという判定に応じて、株の自動売却を要し得る。このような状況下では、株価イベントの順序が順に処理されることが重要となり得る。そのアプリケーションが所属するところのユーザは、アプリケーションがこの点において所有する順序付け制約（ordering constraints）があれば、それらをＣＥＰクエリプロセッサに通知し得る。
【００３０】
ある実施形態では、ＣＥＰクエリプロセッサは、ユーザからこのような制約情報を受けた後、ＣＥＰクエリのどの断片、またはどのオペレーションが、それらの制約を依然として支持しながら同時に実施可能であるかを判定し得る。ある実施形態では、ＣＥＰプロセッサは、この判定を行なうために特定の「計算法（calculus）」を適用し得る。このような判定を行なう際に、ＣＥＰプロセッサは、当該制約を依然として遵守しながら、ＣＥＰクエリを実行するためにマシンの中央処理ユニット、および／またはシステムのノードが最大限に使用可能となる方法を判定し得る。
【００３１】
場合によっては、複数の異なるＣＥＰクエリは、同一のイベントストリームに対して実行可能である。ＣＥＰシステムにおいては、複数の異なるＣＥＰクエリがＣＥＰシステムに登録され、その後イベントストリームに対して連続的に実行され得る。このようなＣＥＰクエリの各々は、それぞれがオペレーションタイプを有する演算子のツリーとして概念的に想定され得る。発明のある実施形態では、ＣＥＰクエリプロセッサは、同一のイベントストリームに対して実行されるべきすべてのＣＥＰクエリを、それらのＣＥＰクエリについての演算子ツリーをともに概念的にメッシング（mesh）することによって、ともにメッシングし得る。ＣＥＰクエリプロセッサは、まず、各ＣＥＰクエリをそのＣＥＰクエリを構成するローレベル演算子に細分化することによって、このメッシングを行ない得る。このようなＣＥＰクエリは、いずれにせよ他の理由からこのように細分化されることが多いため、こうしてＣＥＰクエリを細分化することによって、必ずしもＣＥＰクエリ処理シ
ステムに任意の追加費用が発生するとは限らない。発明のある実施形態では、ＣＥＰクエリプロセッサがＣＥＰクエリを細分化し得る種類のオペレーションには、（１）フィルタリングオペレーション、（２）選択オペレーション、（３）プロジェクション（projection）オペレーション、および（４）ジョイン（join）オペレーションが含まれるが、場合によっては他の種類のオペレーションも含まれ得る。これらのオペレーションは、データベースシステムに対して行なわれ得るクエリに典型的に存在する、同じ種類のオペレーションである。次に、ＣＥＰクエリプロセッサは、これらのローレベル演算子のオペレーションタイプに基づいて、場合によっては別個のＣＥＰクエリからの、これらのローレベル演算子のどれが共有可能であるかを判定し得る。
【００３２】
たとえば、複数のＣＥＰクエリは、フィルタリングオペレーションを行なう可能性もある。フィルタリングオペレーションは、イベントストリームから受けられるすべてのイベントよりも少ないイベントを選択的に出力し得る。フィルタリングオペレーションは、当該イベントストリームから、オペレーション特定フィルタリング基準（operation-specified filtering criteria）を満たさない他のイベントを排除するため、フィルタリングオペレーションはそれらのイベントを他のクエリオペレーションに渡さない。ある実施形態では、ＣＥＰクエリのセットのうち複数のＣＥＰクエリが、あるイベントストリームに対してフィルタリングオペレーションを行なう場合、これらのフィルタリングオペレーションについてのフィルタリング基準が異なっていたとしても、ＣＥＰクエリプロセッサは、これらのＣＥＰクエリにおけるフィルタリングオペレーションのすべてが同一のフィルタリング演算子を共有可能であると判定し得る。ある実施形態では、グループ毎のオペレーションおよび集約オペレーション等のある他のタイプのオペレーションは、あるイベントストリームに対して実行中の複数のＣＥＰクエリがそれらのタイプのオペレーションを行なうとしても、演算子を共有することは許されない。したがって、発明のある実施形態に従うと、フィルタリングオペレーション等のある特定のタイプのオペレーションのみが演算子を共有可能となる。発明のある実施形態では、ＣＥＰクエリプロセッサは、同じイベントストリームに対して実行中の複数のＣＥＰクエリによって共有可能なすべての演算子をともにメッシングし、すべての他の演算子をメッシングされないままにし得る。したがって、複数のＣＥＰクエリからの複数のフィルタリングオペレーションは、それらのフィルタリングオペレーションに単一のフィルタリング演算子を共有させることによってともにメッシングされることができ、一方、グループ毎のオペレーション、集約オペレーション、および他の種類の共有不可能なオペレーションは、別個の演算子を保持することができる。発明のある実施形態では、ＣＥＰクエリプロセッサは、上述のオペレーションタイプの検討事項によって限定される、できる限り多くのオペレーションに同一の演算子を共有させる試行を行ない得る。
【００３３】
発明のある実施形態では、ＣＥＰクエリプロセッサは、このように判定され、作成される演算子のセットを、場合によっては一部共有させつつ、ともに結び付けて演算子の誘導グラフを形成し得る。このグラフでは、演算子は、それらの入力および出力に基づいてともに結び付けられ得る。イベントを他の演算子に出力する演算子は、グラフにおいて、それらの他の演算子に出力されるリンクを有し得る。他の演算子からイベントを受ける演算子は、グラフにおいて、それらの他の演算子から入力されるリンクを有し得る。特定の演算子は、グラフにおいて、他の演算子に対して複数の入力および／または出力されるリンクを有し得る。このことは特に、特定の演算子が、イベントストリームに対して実行中の複数の別個のＣＥＰクエリによって共有される演算子である場合に生じる可能性が高い。したがって、第１のＣＥＰクエリからの演算子および第２のＣＥＰクエリからの演算子の両方は、第１および第２のＣＥＰクエリによって共有される特定のフィルタリング演算子にイベントを出力し得る。このように共有される特定のフィルタリング演算子は、第１のＣＥＰクエリからの別の演算子および第２のＣＥＰクエリからの別の演算子にイベントを出力し得る。
【００３４】
そのため、全体として、演算子の誘導グラフは、（各ＣＥＰクエリに１つの）複数のルート演算子、複数の仲介演算子、および複数のリーフ演算子を有し得る。各ルート演算子は、イベントストリームから入力としてイベントを直接受け、それらのイベントを他の演算子に出力し得る。リーフ演算子は、他の演算子からイベントを受け、それらのイベントに対するオペレーションを行ない、その後、それらのイベントに基づいて出力を表示するアプリケーション構成要素等のアプリケーションのイベントコンシューマーにそれらのイベントを出力し得る。ＣＥＰクエリプロセッサは、これらの演算子を、それらのオペレーションタイプに基づいて、互いに対して誘導グラフ内に組織化し得る。したがって、たとえば、ＣＥＰクエリプロセッサは、あるイベントストリームからイベントを抽出する演算子が、当該イベントをフィルタリングするフィルタリング演算子の前にくること、または当該フィルタリング演算子に出力を送ることを確実にし得る。同様に、たとえば、ＣＥＰクエリプロセッサは、このようなフィルタリング演算子が、当該イベントによって特定されるデータを集約する（たとえば、平均を計算する）集約演算子の前にくること、または当該集約演算子に出力を送ることを確実にし得る。この組織は、集約が適切に行なわれるためには、集約の前にフィルタリングが行なわれるべきであるということに基づき得るが、このことは、場合によっては、ＣＥＰクエリの特定のシンタックスに依存して変わり得る。
【００３５】
発明のある実施形態では、ＣＥＰクエリプロセッサは、演算子の誘導グラフにおける演算子に対して再帰技術（recursive technique）を行ない、グラフ中のどの演算子がその
グラフ中の他の演算子と並列してそのオペレーションを行なうことができるかを判定し得る。より特定的には、ＣＥＰプロセッサは、グラフ中の各演算子がそのグラフ中の他の演算子と並列してそのオペレーションを行なうことのできる程度を判定するために、この技術を行ない得る。上述のように、演算子の誘導グラフにおける演算子の一部は、イベントストリーム自体からグラフにおいて最も離れているリーフ演算子である（ルート演算子は、イベントストリームに最も近い）。一実施形態に従うと、ＣＥＰクエリプロセッサは、演算子の誘導グラフにおける各リーフ演算子に対して再帰技術を行なうことによって開始し得る。再帰技術は、当該技術がそれに対して行なわれている特定の演算子が、他の演算子と同時に実行可能である程度を判定することを要し得る。この判定は、次に、演算子の誘導グラフにおいて特定の演算子がそれらから入力されるリンクを有する他の演算子のすべてに対して、再帰的に、まず同じ技術を行なうことを要し得る。再帰技術がそれに対して行なわれている演算子が、イベントストリームからイベントを直接受けるルート演算子である場合、この技術は、イベントストリーム自体に対して再帰的に行なわれ得る。イベントストリームは、ある特性を有している。これらの特性は、イベントストリームが、何らかの特定されるパーティショニングに基づいて完全に順序付けられている、順序付けられていない、またはパーティションで順序付けられているかどうかを示す。ある実施形態では、上述のように、これらの特性は、イベントストリームからイベントを受けるアプリケーションのユーザによって特定され得る。
【００３６】
発明のある実施形態に従うと、演算子の誘導グラフにおける特定の演算子に対する再帰技術の実施中に、その特定の演算子が他の演算子と同時に実行可能である程度を示す制約が、以下の方法で特定の演算子について判定され得る。まず、特定の演算子についての「継承される」制約が、誘導グラフにおけるその「親」（特定の演算子がそれらから入力されるリンクを有するか、またはそれらから入力を受ける演算子）の制約に基づいて判定され得る。その後、特定の演算子自体のオペレーションタイプに基づく別のタイプベースの制約が、特定の演算子について判定され得る。特定の演算子の最終的な制約は、その継承された制約およびそのタイプベースの制約に基づき得る。たとえば、特定の演算子の最終的な制約は、その継承された、タイプベースの制約のうち最も制約されているものであり得る。
【００３７】
特定の演算子の継承される制約を判定するためには、まず、再帰技術に従って、特定の演算子がグラフにおいてそれらから入力されるリンクを有する他の演算子の各々の最終的な制約が判定され得る。次に、特定の演算子の継承される制約は、それらの他の演算子の最も制約された最終的な制約となり得る。ある実施形態では、完全に順序付けられているのは、最も制約された制約である。ある実施形態では、パーティションで順序付けられているのは、完全に順序付けられているよりも制約されていないが、順序付けられていないよりも制約された制約である。ある実施形態では、順序付けられていないのは、最も制約されていない制約である。
【００３８】
したがって、たとえば、特定の演算子が、演算子の誘導グラフにおいて３つの他の演算子から入力されるリンクを有する場合、さらに、これらの他の演算子の最終的な制約が完全に順序付けられている、パーティションで順序付けられている、および順序付けられていない場合、特定の演算子の継承される制約は、完全に順序付けられている（特定の演算子がそれらから入力されるリンクを有する他の演算子の制約のうち最も制約された）ものとなり得る。すなわち、特定の演算子は、他の演算子と一切同時に実施できない。別の例として、特定の演算子が、演算子の誘導グラフにおいて２つの他の演算子から入力されるリンクを有する場合、さらに、これらの他の演算子の最終的な制約がいずれも順序付けられていない場合、特定の演算子の継承される制約は、同様に順序付けられていないものとなり得る。イベントストリーム自体の制約は、その特性に基づいて判定され得る。
【００３９】
特定の演算子についての継承される制約が、特定の演算子がそれらから入力されるリンクを有する他の演算子の制約に基づいて判定された後、特定の演算子についての最終的な制約は、特定の演算子のタイプベースの制約がその継承される制約よりもより制約されていない限り、その継承される制約となり得る。各演算子は、オペレーションタイプを有し得、各オペレーションタイプは、完全に順序付けられている、パーティションで順序付けられている、または順序付けられていない制約を有し得る。たとえば、フィルタリングオペレーションタイプは、順序付けられていない制約を有し得、フィルタリングが行なわれる順序は重要でない。しかしながら、別の例として、標準偏差オペレーションタイプは、完全に順序付けられた制約を有し得る。したがって、標準偏差演算子の継承される制約が順序付けられていないまたはパーティションで順序付けられているとしても、標準偏差演算子の最終的な制約は、完全に順序付けられているものであり得る。なぜなら、演算子のタイプベースの制約は、演算子の継承される制約よりも制約されているためである。したがって、発明の一実施形態では、特定の演算子の最終的な制約は、（ａ）特定の演算子が、演算子の誘導グラフにおいてそれらから入力されるリンクを有する演算子の制約と、（ｂ）特定の演算子自体のタイプベースの制約とのうち最も制約されたものとなり得る。特定の演算子が、演算子の誘導グラフにおいて他の演算子に出力されるリンクを有する場合、それらの他の演算子の継承される制約を少なくとも一部判定するために用いられるのは、この特定の演算子の最終的な制約であり得る。
【００４０】
このように再帰的な方法で、演算子の誘導グラフにおける演算子の各々は、その演算子が演算子の誘導グラフにおける他の演算子と同時に実行可能となる程度を示す特性を入手することができ、その特性は、完全に順序付けられている、パーティションで順序付けられている、または順序付けられていない、のうちの１つであり得る最終的な制約である。最終的に、演算子の誘導グラフにおけるルート演算子の各々は、このような特性を入手することができる。このようなルート演算子の各々は、別個のＣＥＰクエリに対応し得るため、そのルート演算子についての特性は、対応するＣＥＰクエリ全体についての特性となり得る。
【００４１】
発明のある実施形態に従うと、ＣＥＰクエリの各々が上述の方法で制約特性を入手した
後、ＣＥＰクエリプロセッサは、順序付けられていない制約を有するこのような各ＣＥＰクエリについて複数の別個の実行のスレッドを生成し得る。特定のＣＥＰクエリについてのクエリ実行プランを作成する際に、ＣＥＰクエリプロセッサは、これらのスレッドの各々が、イベントストリームから同一のイベントを並列に受けることを確実にし得る。次に、これらのスレッドは、それらのイベントを並列に処理し、それらの処理されたイベントをコンシューマーに出力し得る。一実施形態では、これらの実行のスレッドを生成させるために、特定のＣＥＰクエリの実行前に、ＣＥＰクエリプロセッサは、そのＣＥＰクエリの実行の開始時に実行されるべき特定のＣＥＰクエリの開始時に、スレッド生成演算子を配置し得る。
【００４２】
同様に、発明の一実施形態では、ＣＥＰクエリプロセッサは、パーティションで順序付けられている制約を有する各ＣＥＰクエリについて複数の別個の実行のスレッドを生成し得る。これらのスレッドによって行なわれるこれらのオペレーションは、各スレッドがそのスレッドのみに対応する異なるパーティションの演算子をハンドリングするように、かつ、あるスレッド内で、イベントが逐次に処理されるように、特定されるパーティションに基づいて特別に隔離される。特定のＣＥＰクエリについてのクエリ実行プランを作成する際に、ＣＥＰクエリプロセッサは、これらのスレッドの各々がそのパーティションに関するイベントのみを受ける（たとえば、特定の会社についての株価をフィルタリングする）ものの、これらのスレッドがイベントストリームからの（異なるパーティションについての）異なるイベント上で並列に動作可能となることを確実にし得る。一実施形態では、これらの実行のスレッドを生成させるために、特定のＣＥＰクエリの実行の前に、ＣＥＰクエリプロセッサは、そのＣＥＰクエリの実行の開始時に実行されるべき特定のＣＥＰクエリの開始時にスレッド生成演算子を配置し得る。
【００４３】
発明の一実施形態では、完全に順序付けられた制約を有する各ＣＥＰクエリについて、そのＣＥＰクエリの実行前に、ＣＥＰクエリプロセッサは、当該ＣＥＰクエリに関与する各演算子のオペレーションが、シングルスレッド内で、並列でなく逐次に行なわれることを確実にするために、当該ＣＥＰクエリの実行の開始時に実行されるべき当該ＣＥＰクエリの開始時にロッキング演算子を配置し得る。
【００４４】
図１は、本発明のある実施形態に従って、ＣＥＰクエリが同時に実行可能であるかどうかを当該ＣＥＰクエリの演算子に基づいて判定するための例示的な技術１００を示すフローチャートである。図１ではあるブロックが例示的に示されているが、発明の代替的な実施形態は、より多い、より少ない、もしくは異なるブロック、および／または異なる順序で起きるブロックを含んでいてもよい。ブロック１０２では、ＣＥＰクエリプロセッサは、ユーザから、ＣＥＰクエリのグループを含むアプリケーションに課されるべき同時処理制約を示す入力を受け得る。ブロック１０４では、ＣＥＰクエリプロセッサは、当該グループにおける各ＣＥＰクエリを演算子の別個のツリーに分け得る。ブロック１０６では、ＣＥＰクエリプロセッサは、いくつかの演算子をツリー間で共有することによって演算子のツリーをともにメッシングし、これにより、演算子の誘導グラフを形成し得る。ブロック１０８では、ＣＥＰクエリプロセッサは、誘導グラフにおける各演算子について同時処理制約を判定し得る。ブロック１１０では、ＣＥＰクエリプロセッサは、そのグループにおける各ＣＥＰクエリについての同時処理制約を、そのＣＥＰクエリの演算子についての同時処理制約に基づいて判定し得る。ブロック１１２では、ＣＥＰクエリプロセッサは、ＣＥＰクエリの開始に演算子を追加して、それらのＣＥＰクエリについての同時処理制約に基づいてそれらのＣＥＰクエリの同時実行を可能にするまたは防止することができる。
【００４５】
図２は、本発明のある実施形態に従って、演算子の誘導グラフにおける特定の演算子について同時処理制約を判定するための例示的な技術２００を示すフローチャートである。技術２００は、たとえば、図１のブロック１０６のメッシングが行なわれた後、演算子の
誘導グラフにおける演算子の各々に対して行なわれ得る。図２においては、あるブロックが例示的に示されているが、発明の代替的な実施形態は、より多くの、より少ない、もしくは異なるブロック、および／または異なる順序で起きるブロックを含んでいてもよい。ブロック２０２では、ＣＥＰクエリプロセッサは、特定の演算子がそれからイベントを受ける他の演算子の各々の最終的な同時処理制約を判定し得る。たとえば、ＣＥＰクエリプロセッサは、技術２００を再帰的に用いて、このような他の演算子の各々について最終的な同時処理制約を判定し得る。ブロック２０４では、ＣＥＰクエリプロセッサは、特定の演算子の継承される同時処理制約を、特定の演算子がそれらからイベントを受ける他の演算子の最終的な同時処理制約のうち最も制約されたものとして設定し得る。ブロック２０６においては、ＣＥＰクエリプロセッサは、特定の演算子のタイプベースの同時処理制約を、当該演算子によって行なわれるオペレーションのタイプに基づいて設定し得る。ブロック２０８では、ＣＥＰクエリプロセッサは、特定の演算子の最終的な同時処理制約を、（ａ）特定の演算子の継承される同時処理制約、および（ｂ）特定の演算子のタイプベースの同時処理制約のうち最も制約されたものとして設定し得る。
【００４６】
図３は、本発明のある実施形態に従って、ＣＥＰクエリの実行において最大許容同時処理を可能にするまたは実施するために、当該ＣＥＰクエリの開始に演算子を追加するための例示的な技術３００を示すフローチャートである。技術３００は、たとえば、図２の技術２００の適用が、演算子の誘導グラフにおける演算子のすべてに対して行なわれた後に、アプリケーションに関与するＣＥＰクエリのグループにおけるＣＥＰクエリの各々に対して行なわれ得る。図３においては、あるブロックが例示によって示されているが、発明の代替的な実施形態は、より多くの、より少ない、もしくは異なるブロック、および／または異なる順序で起きるブロックを含んでいてもよい。ブロック３０２では、ＣＥＰクエリプロセッサは、演算子の誘導グラフにおけるＣＥＰクエリのルート演算子の最終的な同時処理制約が、順序付けられていない、パーティションで順序付けられている、または完全に順序付けられているかどうかを判定し得る。最終的な同時処理制約が順序付けられていない場合、制御はブロック３０６に進む。最終的な同時処理制約がパーティションで順序付けられている場合、制御はブロック３０８に進む。最終的な同時処理制約が完全に順序付けられている場合、制御はブロック３１０に進む。
【００４７】
ブロック３０６では、ＣＥＰクエリプロセッサは、ＣＥＰクエリの開始に、複数の実行のスレッドを生成させる演算子を追加して、ＣＥＰクエリの実行を同時に可能にすることができる。代替的には、ブロック３０８では、ＣＥＰクエリプロセッサは、ＣＥＰクエリの開始に、ＣＥＰクエリが処理するイベントパーティションの各々について別個の実行のスレッドを生成させる演算子を追加し得る。代替的には、ブロック３１０では、ＣＥＰクエリプロセッサは、ＣＥＰクエリの開始に、ＣＥＰクエリのオペレーションが並列でなく逐次に行なわれることを確実にするロッキング演算子を追加し得る。
【００４８】
発明のある実施形態に従って、ＣＥＰクエリプロセッサは、障害ハンドリング機構をＣＥＰクエリプロセッサ内に導入するように改良され得る。一実施形態では、これらの機構は、上述の演算子の誘導グラフの分析を要する。この分析は、誘導グラフにおける特定の演算子が複数の実行中のＣＥＰクエリによって共有されるか否かについての判定を要し得る。
【００４９】
発明のある実施形態では、イベントストリームに対する複数のＣＥＰクエリの実行中、ＣＥＰクエリプロセッサは、障害の発生を検出し得る。この障害は、上述の演算子の誘導グラフ内の演算子の１つによって発生され得る。たとえば、特定の演算子は、その特定の演算子がそのオペレーションを行なおうと試行しているイベントの際に、当該イベントが無効のデータを特定すると判定したことに応じて、障害を発生し得る。障害の発生を検出したことに応じて、ＣＥＰクエリプロセッサは、演算子の誘導グラフにおける演算子のう
ちどの演算子が当該障害を発生したかを判定し得る。障害を発生した演算子は、イベントストリームにおけるイベントに対してフィルタリングオペレーションを行なうフィルタリング演算子である可能性もあり、または、障害を発生した演算子は、ジョインオペレーションを行なう結合演算子等、何らかの他のより複雑なタイプの演算子である可能性もある。
【００５０】
発明のある実施形態では、ＣＥＰクエリプロセッサは、ＣＥＰクエリプロセッサのユーザが、それによってユーザ自体の仕様のカスタマイズされた障害ハンドラを登録することのできる登録機能（registration facility）を含み得る。この障害ハンドラは、ＣＥＰ
クエリプロセッサによって実行されている任意のＣＥＰクエリの演算子によって発生される障害がその障害ハンドラによってハンドリングされ得るように、ＣＥＰクエリプロセッサが実行するＣＥＰクエリのすべてにその範囲において関連し得る。複数の別個かつ異なる障害ハンドラが同一のＣＥＰクエリプロセッサに登録可能であり、この場合、これらの障害ハンドラのすべては、ＣＥＰクエリプロセッサの実行しているＣＥＰクエリのいずれかによって発生される障害をハンドリングすることができる。
【００５１】
発明の実施形態に従って、任意の実行中のＣＥＰクエリの任意の演算子が障害を発生したことに応じて、ＣＥＰクエリプロセッサに登録された障害ハンドラは、それらの障害ハンドラの登録の順に応答して呼出され得る。ＣＥＰクエリプロセッサは、障害に関連する何らかのコンテキスト情報（contextual information）をこのような障害ハンドラの各々に提供し得る。このコンテキスト情報は、障害自体のアイデンティティの他、障害を発生した（演算子の誘導グラフからの）演算子のアイデンティティを含み得る。各障害ハンドラが呼出されると、その障害ハンドラは、その内部命令に基づいて、その障害をキャッチする（catch）かまたはその障害をスローし直す（re-throw）かどうかを判定し得る。一
部の登録された障害ハンドラは、他の登録された障害ハンドラがキャッチするようにカスタマイズされていないタイプの障害をキャッチするようにカスタマイズされ得る。たとえば、特定の障害ハンドラは、フィルタリング演算子によって発生された障害はキャッチするものの、結合演算子によって発生された障害はキャッチしないようにカスタマイズされてもよい。別の例として、特定の障害ハンドラは、イベントデータにおけるタイムスタンプエラーから生じる障害はキャッチするものの、イベントデータにおける他の種類のエラーにより生じる障害はキャッチしないようにカスタマイズされてもよい。
【００５２】
発明のある実施形態では、障害ハンドラが障害をキャッチする決断をすると、障害ハンドラは、障害のタイプの障害に関連するその内部の命令に基づく方法で障害をハンドリングし得る。これらの内部命令は、障害ハンドラの作成者によってカスタマイズされ得る。このような状況下で、障害はその後、障害が起きなかったかのように扱われることができ、障害の存在はシステムから排除されることができる。ＣＥＰクエリプロセッサは、ＣＥＰクエリを実行し続けることができ、ＣＥＰクエリが任意のＣＥＰクエリを停止させずに、イベントストリームからの追加のイベントを処理することが可能となる。発明のある実施形態では、同一の障害に応答して次に呼出される任意の他の登録された障害ハンドラは、それらがキャッチできる障害を一切検出しない。
【００５３】
代替的には、発明のある実施形態では、特定の障害ハンドラがその障害をスローし直すことを決断した場合、すなわち、その特定の障害ハンドラが障害をハンドリングしないことを決断した場合（おそらく、特定の障害ハンドラが、障害の特定のタイプの障害をハンドリングするための命令を一切含まないため）、ＣＥＰクエリプロセッサは、次の登録された障害ハンドラがあれば、それを登録の順に呼出し得る。その次の障害ハンドラは、ここでもそれ自体の内部命令に基づいて、障害をキャッチするか障害をスローし直すかどうかを同様に決断し得る。このようなアプローチは繰返し継続され、ＣＥＰクエリプロセッサは、登録された障害ハンドラの１つが障害をキャッチし、ハンドリングすることによっ
てシステムから障害の存在を排除するまで、または、ＣＥＰクエリプロセッサが呼出すさらなるユーザ登録障害ハンドラが存在しなくなるまで、次に登録された障害ハンドラをそれらの登録の順に呼出し得る。
【００５４】
発明のある実施形態に従うと、ＣＥＰクエリプロセッサは、任意のユーザによって登録され、ユーザによってカスタマイズされた障害ハンドラに加えて、デフォルト障害ハンドラを含み得る。障害が、当該ユーザ登録障害ハンドラのいずれによってもキャッチされない場合、デフォルト障害ハンドラがその障害をキャッチし得る。発明のある実施形態では、デフォルト障害ハンドラは、如何なる障害もスローし直さず、ユーザ登録障害ハンドラのすべてによってスローし直される障害をすべてキャッチする。障害をキャッチしたことに応じて、デフォルト障害ハンドラは、障害を発生した演算子を含んでいた各ＣＥＰクエリの実行を停止し得る。一部の演算子は複数のＣＥＰクエリによって共有可能であるため、デフォルト障害ハンドラは、一部の状況下においては、複数のＣＥＰクエリの実行を、それらのＣＥＰクエリのすべてによって共有される演算子によって発生された単一の障害をキャッチしたことに応じて停止し得る。
【００５５】
上述のように、発明の一実施形態では、ＣＥＰクエリプロセッサのデフォルト障害ハンドラは、障害をキャッチしたことに応じてＣＥＰクエリの実行を停止し得る。しかしながら、発明の代替的な実施形態では、デフォルト障害ハンドラは、障害をキャッチしたことに応じてＣＥＰクエリの実行を停止する代わりに、イベントストリームのイベントをＣＥＰクエリプロセッサに供給しているＪＡＶＡ（登録商標）アダプタの障害ハンドラによってキャッチされ得るＪＡＶＡ例外として、障害をスローし得る。したがって、このような状況下では、イベントストリームソースまたはプロデューサであるＪＡＶＡアダプタは、ＣＥＰクエリプロセッサのデフォルト障害ハンドラからＪＡＶＡ例外として障害を受け得る。ＪＡＶＡアダプタがこの例外をハンドリングする方法は、ＪＡＶＡアダプタの内部命令およびプログラミングに基づいて変わり得る。たとえば、ＪＡＶＡアダプタがＪＡＶＡメッセージングシステム（ＪＭＳ）アダプタである場合、ＪＡＶＡアダプタは、イベントが無効であるかどうかを判定することができ、イベントが無効であると判定したことに応じて、ＪＡＶＡアダプタは、ＪＡＶＡアダプタがどこからそのイベントを入手したのかをメッセージングシステムに尋ね、そのイベントの有効なバージョンをＪＡＶＡアダプタに再送することができる。代替的には、ＪＡＶＡアダプタは、当該イベントをロールバックすることができる、および／または、当該イベントを無視して、イベントストリームにおける他のイベントがＣＥＰクエリプロセッサに進めるようにできる。
【００５６】
場合によっては、シングルイベントは、演算子の誘導グラフにおける複数の別個の演算子に、そのイベントに応じて障害を発生させる可能性がある。たとえば、イベントを結合演算子に出力するフィルタリング演算子および結合演算子自体の両方が、特定のイベントに応じて障害を発生する可能性もある。この発生は特に、ＣＥＰクエリプロセッサが同時にイベントを処理している状況下で起きる可能性が高い。発明の一実施形態では、複数の障害が同一のイベントに応じて発生すると、ＣＥＰクエリプロセッサはこれらの障害をともにグループ化して、まとめて（unified manner）ハンドリングし得る。ＣＥＰクエリプロセッサは、「イベント処理障害」と呼ばれる「親」障害を作成することによってこのグループ化を達成し得る。この親障害は、親障害内のコンテキストとして、障害を発生させたイベントのアイデンティティおよびイベントに応じて障害を発生した各演算子のアイデンティティの両方を特定し得る。ある実施形態では、複数の障害が同一のイベントに応じて発生したということが、障害発生演算子からの入力としてイベントを受ける「親」演算子によって検出され得、グループ化は、この親演算子において行なわれ得る。親障害は、上述の方法で障害ハンドラによってキャッチまたはスローし直され得、一方で、親障害内でともにグループ化された他の障害は、任意の障害ハンドラによって別個にキャッチされないようにシステムから排除され得る。グループ化の結果として、障害ハンドラは、同一
のイベントから生じる障害のための不要な反復性の障害ハンドリングを回避することができる。発明の一実施形態では、障害ハンドラは、これらの「複合的な」グループ化された障害を、それらの障害ハンドラが「単純な」障害をハンドリングする方法と異なる方法でハンドリングするようにカスタマイズされ得る。
【００５７】
図４は、本発明のある実施形態に従って、ＣＥＰクエリプロセッサのユーザ登録障害ハンドラが、ＣＥＰクエリの演算子によってスローされた障害をハンドリングできる例示的な技術４００を示すフローチャートである。図４においては、あるブロックが例示によって示されているが、発明の代替的な実施形態は、より多くの、より少ない、もしくは異なるブロック、および／または異なる順序で起きるブロックを含んでいてもよい。ブロック４０２では、現在実行中のＣＥＰクエリを表わす演算子の誘導グラフ内の演算子が、当該演算子によって処理されているイベントに対する障害を発生し得る。ブロック４０３では、この障害が発生されたのを検出したことに応じて、ＣＥＰクエリプロセッサは、その障害をハンドリングするために任意のユーザ障害ハンドラがユーザによって登録されているかどうかを判定し得る。そうである場合、制御はブロック４０４に進む。そうでなければ、制御はブロック４１２に進む。ブロック４０４では、ＣＥＰクエリプロセッサは、ユーザ登録障害ハンドラのいずれかが障害に対して未だ呼出されていないかどうかを判定する。少なくとも１つのユーザ登録障害ハンドラが障害に対して未だ呼出されていない場合、制御はブロック４０６に進む。そうでなければ、技術４００は終了する。
【００５８】
ブロック４０６では、ＣＥＰクエリプロセッサは、次のユーザ登録障害ハンドラを、障害をハンドリングするために、登録順に呼出し得る。ブロック４０８では、最も直近に呼出されたユーザ登録障害ハンドラが障害をキャッチしてハンドリングするか、または障害をスローし直され得る。ブロック４１０では、最も直近に呼出されたユーザ登録障害ハンドラが障害をキャッチしたまたはスローし直されたかどうかに関する判定が行なわれ得る。障害がキャッチされた場合、技術４００は終了される。代替的には、障害がスローし直された場合、制御はブロック４０４に戻る。
【００５９】
代替的には、ブロック４１２では、ＣＥＰクエリプロセッサは、障害をハンドリングするために（ユーザによって登録されていない）デフォルト障害ハンドラを呼出し得る。ブロック４１４では、デフォルト障害ハンドラは障害をキャッチし、これに応じてＪＡＶＡ例外を発生し得る。ブロック４１６では、ブロック４０２において障害を発生させたイベントを含んでいたイベントストリームのソースであるＪＡＶＡアダプタの例外ハンドラがＪＡＶＡ例外をキャッチし、イベントの訂正されたバージョンをＣＥＰクエリプロセッサへと再発行させる。次に、制御はブロック４０２に戻るが、ブロック４０２では、別のイベントに関連する別の障害が、場合によっては別の演算子によって発生されることもある。
【００６０】
図５は、本発明のある実施形態に従い使用し得るシステム環境５００の構成要素を示す簡略ブロック図である。図に示されるように、システム環境５００は、１つ以上のクライアントコンピューティング装置５０２、５０４、５０６、５０８を含み、これら装置は、ウェブブラウザ、専用のクライアント（たとえばOracle Forms）等のクライアントアプリケーションを操作するように構成されている。さまざまな実施形態において、クライアントコンピューティング装置５０２、５０４、５０６、および５０８は、サーバコンピュータ５１２とやり取りしてもよい。
【００６１】
クライアントコンピューティング装置５０２、５０４、５０６、５０８は、汎用のパーソナルコンピュータ（例として、さまざまなバージョンのMicrosoft Windows（登録商標
）および／またはApple Macintoshオペレーティングシステムを実行するパーソナルコン
ピュータおよび／またはラップトップコンピュータを含む）、携帯電話もしくはＰＤＡ（
Microsoft Windows Mobile等のソフトウェアを実行し、インターネット、電子メール、ＳＭＳ、ブラックベリー（Blackberry）、またはその他の通信プロトコルを使用可能）、および／またはさまざまな市販のＵＮＩＸ（登録商標）もしくはＵＮＩＸのようなオペレーティングシステム（さまざまなＧＮＵ／Ｌｉｎｕｘ（登録商標）オペレーティングシステムを含むがこれに限定されない）のいずれかを実行するワークステーションコンピュータであってもよい。これに代えて、クライアントコンピューティング装置５０２、５０４、５０６、および５０８は、ネットワーク（たとえば以下で説明するネットワーク５１０）を通して通信可能なシンクライアントコンピュータ、インターネットを使用可能なゲームシステム、および／またはパーソナルメッセージングデバイス等のその他の電子デバイスであってもよい。典型的なシステム環境５００が４つのクライアントコンピューティング装置とともに示されているが、クライアントコンピューティング装置の数はいくつであってもそれらをサポートし得る。センサ等を有する装置のような他の装置が、サーバコンピュータ５１２とやり取りしてもよい。
【００６２】
システム環境５００はネットワーク５１０を含んでいてもよい。ネットワーク５１０は、ＴＣＰ／ＩＰ、ＳＮＡ、ＩＰＸ、ＡｐｐｌｅＴａｌｋ等を含むがこれらに限定されないさまざまな市販のプロトコルのいずれかを用いたデータ通信をサポートできる、当業者によく知られているネットワークであれば、どのような種類のネットワークであってもよい。単なる例として、ネットワーク５１０は、イーサネット（登録商標）ネットワーク、トークンリングネットワーク等のローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク、バーチャルプライベートネットワーク（ＶＰＮ）を含むがこれに限定されないバーチャルネットワーク、インターネット、イントラネット、エクストラネット、公衆電話交換回線網（ＰＳＴＮ）、赤外線ネットワーク、ワイヤレスネットワーク（たとえば、IEEE 802.11プロトコル群のいずれかの下で動作するネットワーク、当該技術分野にお
いて公知のＢｌｕｅｔｏｏｔｈ（登録商標）プロトコル、および／またはその他のワイヤレスプロトコル）、および／または、これらおよび／または他のネットワークの任意の組合わせであってもよい。
【００６３】
システム環境５００はまた、１つ以上のサーバコンピュータ５１２を含み、このサーバコンピュータは、汎用コンピュータ、専用のサーバコンピュータ（例として、ＰＣサーバ、ＵＮＩＸサーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウント式（rack-mounted）のサーバ等を含む）、サーバファーム、サーバクラスタ、またはその他の適切な配置および／または組み合わせであってもよい。さまざまな実施形態において、サーバコンピュータ５１２は、これまでの開示において説明された１つ以上のサービスまたはソフトウェアアプリケーションを実行するようにされていてもよい。たとえば、サーバコンピュータ５１２は、連続イベント処理サーバに相当するものであってもよい。
【００６４】
サーバコンピュータ５１２は、上述したオペレーティングシステムのうちのいずれかおよび任意の市販のサーバオペレーティングシステムを含むオペレーティングシステムを実行してもよい。また、サーバコンピュータ５１２は、ＨＴＴＰサーバ、ＦＴＰサーバ、ＣＧＩサーバ、Ｊａｖａサーバ、およびデータベースサーバ等を含むさまざまなその他のサーバアプリケーション、および／またはミッドティア（mid-tier）アプリケーションのうちのいずれかを実行してもよい。典型的なデータベースサーバは、Ｏｒａｃｌｅ、Ｍｉｃｒｏｓｏｆｔ、Ｓｙｂａｓｅ、ＩＢＭ等から市販されているものを含むが、これらに限定されない。
【００６５】
また、システム環境５００は１つ以上のデータベース５１４、５１６を含んでいてもよい。データベース５１４、５１６は、さまざまな場所に存在していてもよい。例として、データベース５１４、５１６のうちの１つ以上は、サーバコンピュータ５１２に対してローカルな（および／またはサーバコンピュータ５１２内に常駐している）記憶媒体に存在
していてもよい。これに代えて、データベース５１４、５１６は、サーバコンピュータ５１２から離れていてネットワークベースまたは専用回線を介してサーバコンピュータ５１２と通信してもよい。一組の実施形態において、データベース５１４、５１６は、当業者によく知られているストレージエリアネットワーク（ＳＡＮ）に存在していてもよい。同様に、サーバコンピュータ５１２による機能を実行するために必要なファイルは、必要に応じて、サーバコンピュータ５１２に対してローカルにおよび／または遠隔で格納されてもよい。一組の実施形態において、データベース５１４、５１６は、ＳＱＬフォーマットのコマンドに応答してデータを格納し、更新し、取出すようにされている、Oracle 10g等のリレーショナルデータベースを含んでいてもよい。
【００６６】
図６は、本発明の実施形態に従い使用し得るコンピュータシステム６００の簡略ブロック図である。たとえば、連続イベント処理サーバを、コンピュータシステム６００のようなシステムを用いて実装してもよい。バス６２４を介して電気的に結合し得るハードウェア構成要素を含むコンピュータシステム６００が示されている。このハードウェア構成要素は、１つ以上の中央処理装置（ＣＰＵ）６０２と、１つ以上の入力装置６０４（たとえばマウス、キーボード等）と、１つ以上の出力装置６０６（たとえばディスプレイ装置、プリンタ等）とを含んでいてもよい。また、コンピュータシステム６００は、１つ以上の記憶装置６０８を含んでいてもよい。例として、記憶装置６０８は、ディスクドライブ、光学式記憶装置等の装置、ならびに、プログラム可能で、一瞬で更新可能で（flash-updateable）、および／またはそれと同じようなことが可能であるランダムアクセスメモリ（ＲＡＭ）および／または読出専用メモリ（ＲＯＭ）等のソリッドステート記憶装置を含んでいてもよい。
【００６７】
コンピュータシステム６００は、さらに、コンピュータ読取可能記憶媒体リーダ６１２と、通信サブシステム６１４（たとえばモデム、ネットワークカード（無線または有線）、赤外線通信装置等）と、ワーキングメモリ６１８とを含んでいてもよい。ワーキングメモリ６１８は、上記ＲＡＭおよびＲＯＭ装置を含んでいてもよい。いくつかの実施形態において、コンピュータシステム６００は、デジタル信号プロセッサ（ＤＳＰ）、専用プロセッサ、および／またはそれと同様のものを含み得る処理加速部６１６を含んでいてもよい。
【００６８】
コンピュータ読取可能記憶媒体リーダ６１２は、さらに、コンピュータ読取可能な記憶媒体６１０に接続し得、これらはともに、（任意に、記憶装置６０８と組み合わせて）リモート式、ローカル式、固定式および／または着脱交換式の記憶装置、および、一時的および／またはより永続的にコンピュータ読取可能な情報を収容するための記憶媒体を総合的に意味している。通信システム６１４によって、ネットワーク１６１０および／またはシステム環境１６００に関連する上述のその他のコンピュータと、データをやり取りすることが可能であってもよい。
【００６９】
また、コンピュータシステム６００は、ワーキングメモリ６１８内に現在位置しているものとして示されているソフトウェア構成要素を含んでいてもよい。このソフトウェア構成要素は、オペレーティングシステム６２０、および／または、アプリケーションプログラム（クライアントアプリケーション、ウェブブラウザ、ミッドティアアプリケーション、ＲＤＢＭＳ等であってもよい）等のその他のコード６２２を含む。典型的な実施形態において、ワーキングメモリ６１８は、上述の技術のために使用される実行可能なコードおよび関連のデータ構造（キャッシュ等）を含んでいてもよい。コンピュータシステム６００の代替の実施形態には、上述のものの多くの変形例があり得ることが理解されるはずである。たとえば、カスタマイズされたハードウェアが用いられてもよく、および／または特定の構成要素が、ハードウェア、ソフトウェア（アプレット等のポータブルソフトウェアを含む）またはそれら両方において実装されてもよい。さらに、ネットワーク入出力装
置等の他のコンピューティング装置への接続を用いてもよい。
【００７０】
図７は、上記のような本発明の原理に従って構成されたイベントのデータストリームを処理するためのシステムの機能ブロック図を示す。システムの機能ブロックは、本発明の原理を実施するためにハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせによって実現されてもよい。当業者であれば、図７に示される機能ブロックは、上述のように本発明の原理を実現するために組み合わせされてもよい、またはサブブロックに分離されてもよいことが理解される。したがって、本明細書の記載は、本明細書に記載される機能ブロックの任意の可能な組み合わせまたは分離またはさらなる規定をサポートし得る。
【００７１】
図７を参照して、イベントのデータストリームを処理するためのシステム７００が示される。システム７００は、クエリ分割ユニット７１０を含んでいてもよい。クエリ分割ユニット７１０は、連続イベント処理（ＣＥＰ）クエリを複数の別個の演算子に分割するように構成されている。次に、システム７００の第１の制約判定ユニット７２０は、複数の別個の演算子内の各特定の演算子について別個の制約を判定してもよい。第１の制約判定ユニット７２０が複数の別個の演算子について判定した制約の少なくとも一部に基づいて、システム７００の第２の制約判定ユニット７３０は、ＣＥＰクエリについての制約を判定してもよい。システム７００はさらに、ＣＥＰクエリについての制約に基づいて、ＣＥＰクエリの少なくとも一部が同時に実行可能であるかどうかを判定するように構成された実行判定ユニット７４０を含んでいてもよい。ＣＥＰクエリの少なくとも一部が同時に実行可能であるという判定に応じて、システム７００のスレッド生成ユニット７５０は、イベントストリームからのイベントを同時に処理する複数の実行のスレッドを生成してもよい。
【００７２】
一例では、システム７００はさらに、イベントストリームと関連付けられる制約の少なくとも一部に基づいてＣＥＰクエリについての制約を判定するように構成された第３の制約判定ユニット７６０を含んでいてもよい。
【００７３】
一例では、第１の制約判定ユニット７２０は、少なくとも一部は、特定の演算子がそれから入力を受ける１つ以上の他の演算子の１つ以上の制約の少なくとも一部に基づいて特定の演算子についての制約を判定することによって、複数の別個の演算子内の各特定の演算子について別個の制約を判定するように構成されていてもよい。
【００７４】
一例では、第１の制約判定ユニット７２０は、少なくとも一部は、特定の演算子のオペレーションタイプがフィルタリングオペレーションタイプであるかどうかの少なくとも一部に基づいて特定の演算子についての制約を判定することによって、複数の別個の演算子内の各特定の演算子について別個の制約を判定するように構成されていてもよい。
【００７５】
一例では、第１の制約判定ユニット７２０は、少なくとも一部は、（ａ）特定の演算子がそれらから入力を受けるすべての他の演算子の制約、および（ｂ）特定の演算子のオペレーションタイプと関連付けられる制約を含む制約のセット内のうち、最も制約された制約を判定することによって特定の演算子についての制約を判定することによって、複数の別個の演算子内の各特定の演算子について別個の制約を判定するように構成されていてもよい。
【００７６】
一例では、システム７００は、マージングユニット７７０をさらに含んでいてもよく、マージングユニット７７０は、（ａ）イベントストリームにおけるイベントを処理する第１のＣＥＰクエリによって用いられる第１の演算子と、（ｂ）イベントストリームにおけるイベントを同様に処理する第２のＣＥＰクエリによって用いられる第２の演算子とを、
第１の演算子および第２の演算子の両方が特定のタイプのオペレーションを行なうと判定したことに応じて、単一の共有演算子にマージするように構成されている。
【００７７】
マージングユニット７７０の場合、一例では、第１の制約判定ユニット７２０はさらに、共有演算子の制約の少なくとも一部に基づいて、共有演算子から入力を受ける第３の演算子についての制約を判定するように構成された第１のサブユニット７２２と、共有演算子の制約の少なくとも一部に基づいて、共有演算子から入力を受ける第４の演算子についての制約を判定するように構成された第２のサブユニット７２４とを含んでいてもよい。第３の演算子は、第１のＣＥＰクエリによって用いられ、第２のＣＥＰクエリによっては用いられず、第４の演算子は、第２のＣＥＰクエリによって用いられ、第１のＣＥＰクエリによっては用いられない。
【００７８】
コードまたはコードの一部を収容するための記憶媒体およびコンピュータ読取可能な媒体は、当該技術において公知のまたは使用されているあらゆる適切な媒体を含み得る。上記適切な媒体は記憶媒体および通信媒体を含み、これら記憶媒体および通信媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくはその他のメモリ技術、ＣＤ−ＲＯＭ、デジタル汎用ディスク（ＤＶＤ）もしくはその他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくはその他の磁気記憶装置、データ信号、データ伝送、または、所望の情報を格納もしくは伝送するために使用することができコンピュータによってアクセス可能なその他の媒体を含む、コンピュータ読取可能な命令、データ構造、プログラムモジュール、またはその他のデータ等の情報の、格納および／または伝送のための何等かの方法または技術において実装される、揮発性および不揮発性の着脱可能および着脱不能な媒体等であるが、これらに限定されない。
【００７９】
本発明の特定の実施形態について説明してきたが、さまざまな修正、変更、代替構成、および均等物も、本発明の範囲に包含される。本発明の実施形態は、ある特定のデータ処理環境内でのオペレーションに限定されるものではなく、複数のデータ処理環境内で任意に機能することが可能である。加えて、本発明の実施形態について、特定の一連のトランザクションおよびステップを用いて説明してきたが、本発明の範囲が、記載されている一連のトランザクションおよびステップに限定されないことは、当業者には明らかなはずである。
【００８０】
さらに、本発明の実施形態について、ハードウェアとソフトウェアの特定の組み合わせを用いて説明してきたが、ハードウェアとソフトウェアの他の組み合わせも本発明の範囲内であることが認識されるはずである。本発明の実施形態は、ハードウェアのみで実装されてもよく、ソフトウェアのみで実装されてもよく、これらの組み合わせを用いて実装されてもよい。
【００８１】
したがって、明細書および図面は、限定的な意味ではなく例示的な意味で考慮されねばならない。しかしながら、これに対し、追加、控除、削除、およびその他の修正および変更を、特許請求の範囲に記載されるのより広い精神および範囲から逸脱することなく行ない得ることは明らかであろう。米国特許出願連続番号第１２／５４８，１８７号；第１２／３９６，００８号；第１２／３９６，４６４号；第１２／３９５，８７１号；第１２／５０６，８９１号；第１２／５４８，２０９号；第１２／５０６，９０５号；第１２／５３４，３８４号；第１２／５４８，２２２号；第１２／５３４，３９８号；第１２／５４８，２８１号；および第１２／５４８，２９０号が、本明細書中に参照によって援用される。
【図１】
0006602435.tif 000002
【図２】
0006602435.tif 000003
【図３】
0006602435.tif 000004
【図４】
0006602435.tif 000005
【図５】
0006602435.tif 000006
【図６】
0006602435.tif 000007
【図７】
0006602435.tif 000008