(57)【特許請求の範囲】
【請求項１】
ストリームデータ入力情報を一次情報として受信し、かつ当該受信した一次情報から所定期間内の一次情報を取得することによって二次情報を生成する、ストリームデータ処理方法を実行するための命令を格納するための非一過性コンピュータ可読媒体であって、
前記命令は、
複数のターゲット関数の各々が、複数の第１タイプの処理関数からの第１タイプの処理関数を、複数の第２タイプの処理関数からの第２タイプの処理関数に関連付ける、前記複数のターゲット関数を管理することと、
クエリに基づいて前記複数のターゲット関数からターゲット関数を選択することと、
前記選択されたターゲット関数に基づいて、前記二次情報を生成するために前記取得された一次情報に対して前記第１タイプの処理関数及び前記第２タイプの処理関数を実行することとを含み、
前記命令が、前記選択されたターゲット関数に基づいて、前記第１タイプの処理関数及び前記第２タイプの処理関数を実行するための複数の演算子から成るクエリ実行モジュールを生成することをさらに含み、
前記クエリ実行モジュールを前記生成することは、
コピーされたセットの演算子として、スライディングウィンドウ演算子から前記複数の演算子の射影演算子に演算子をコピーすることと、
前記複数の演算子のスキャン演算子を、前記コピーされたセットの演算子のコピーされたスライディングウィンドウ演算子に接続することと、
前記射影演算子の前に結合演算子を生成し、かつ前記結合演算子を、前記コピーされたセットの演算子のコピーされた射影演算子に接続することと、
前記コピーされたスライディングウィンドウ演算子をジャンピングウィンドウ演算子で置換することと、
前記コピーされた射影演算子を前記第２タイプの処理関数に関連付けることと、
前記射影演算子を前記第１タイプの処理関数に関連付けることと
を含む、非一過性コンピュータ可読媒体。
【請求項２】
前記第１タイプの処理関数がリアルタイム処理関数である、請求項１に記載の非一過性コンピュータ可読媒体。
【請求項３】
前記第２タイプの処理関数がバッチ処理関数である、請求項２に記載の非一過性コンピュータ可読媒体。
【請求項４】
前記ターゲット関数が、スライディングウィンドウを実行するための関数と、ジャンピングウィンドウを実行するための関数と、スライディングウィンドウ及びジャンピングウィンドウを実行するための関数とから選択される、請求項３に記載の非一過性コンピュータ可読媒体。
【請求項５】
前記命令が、中央処理装置（ＣＰＵ）利用率に基づいてジャンピングウィンドウ間隔を調整することをさらに含む、請求項１に記載された非一過性コンピュータ可読媒体。
【請求項６】
ストリームデータ入力情報を一次情報として受信し、かつ当該受信した一次情報から所定期間内の一次情報を取得することによって二次情報を生成する、ストリームデータ処理方法を実行するための命令を格納するための非一過性コンピュータ可読媒体であって、
前記命令は、
複数のターゲット関数の各々が、複数の第１タイプの処理関数からの第１タイプの処理関数を、複数の第２タイプの処理関数からの第２タイプの処理関数に関連付ける、前記複数のターゲット関数を管理することと、
クエリに基づいて前記複数のターゲット関数からターゲット関数を選択することと、
前記選択されたターゲット関数に基づいて、前記二次情報を生成するために前記取得された一次情報に対して前記第１タイプの処理関数及び前記第２タイプの処理関数を実行することとを含み、
前記命令は、
ターゲット関数登録コマンドのための入力コマンドを構文解析し、かつ前記入力コマンドが前記ターゲット関数登録コマンドを含む場合に、前記入力コマンドに基づいたターゲット関数を前記複数のターゲット関数に追加することと、
ジャンピングウィンドウ間隔登録コマンドのための前記入力コマンドを構文解析し、かつ前記入力コマンドが前記ジャンピングウィンドウ間隔登録コマンドを含む場合に、前記入力コマンドに基づいてジャンピングウィンドウ間隔を調整することと、
クエリ登録コマンドのための前記入力コマンドを構文解析し、かつ前記入力コマンドが前記クエリ登録コマンドを含む場合に、前記クエリのために前記入力コマンドを構文解析することと
をさらに含む、非一過性コンピュータ可読媒体。
【請求項７】
ストリームデータ入力情報を一次情報として受信し、当該受信した一次情報から所定期間内の一次情報を取得することによって、二次情報を生成するように構成されたサーバであって、
複数のターゲット関数の各々が、複数の第１タイプの処理関数からの第１タイプの処理関数を複数の第２タイプの処理関数からの第２タイプの処理関数に関連付ける、前記複数のターゲット関数を管理するように構成されたメモリと、
クエリに基づいて前記複数のターゲット関数からターゲット関数を選択し、かつ
前記選択されたターゲット関数に基づいて前記二次情報を生成するために、前記取得された一次情報に対して前記第１タイプの処理関数及び前記第２タイプの処理関数を実行するように構成された中央処理装置（ＣＰＵ）と
を備え、
前記メモリはさらに、前記選択されたターゲット関数に基づいて、前記第１タイプの処理関数及び前記第２タイプの処理関数を実行するための複数の演算子から成るクエリ実行モジュールを管理するように構成され、
前記ＣＰＵは、
コピーされたセットの演算子として、スライディングウィンドウ演算子から前記複数の演算子の射影演算子に演算子をコピーすることと、
前記複数の演算子のスキャン演算子を、前記コピーされたセットの演算子のコピーされたスライディングウィンドウ演算子に接続することと、
前記射影演算子の前に結合演算子を生成し、かつ前記結合演算子を、前記コピーされたセットの演算子のコピーされた射影演算子に接続することと、
前記コピーされたスライディングウィンドウ演算子をジャンピングウィンドウ演算子で置換することと、
前記コピーされた射影演算子を前記第２タイプの処理関数に関連付けることと、
前記射影演算子を前記第１タイプの処理関数に関連付けることと
によって前記クエリ実行モジュールを構成するように構成される、サーバ。
【請求項８】
前記第１タイプの処理関数がリアルタイム処理関数である、請求項７に記載のサーバ。
【請求項９】
前記第２タイプの処理関数がバッチ処理関数である、請求項８に記載のサーバ。
【請求項１０】
前記ＣＰＵは、スライディングウィンドウを実行するための関数と、ジャンピングウィンドウを実行するための関数と、スライディングウィンドウ及びジャンピングウィンドウを実行するための関数とから前記ターゲット関数を選択するように構成される、
請求項９に記載のサーバ。
【請求項１１】
前記ＣＰＵがさらに、ＣＰＵ利用率に基づいてジャンピングウィンドウサイズを調整するために構成される、請求項７に記載のサーバ。
【請求項１２】
ストリームデータ入力情報を一次情報として受信し、当該受信した一次情報から所定期間内の一次情報を取得することによって、二次情報を生成するように構成されたサーバであって、
複数のターゲット関数の各々が、複数の第１タイプの処理関数からの第１タイプの処理関数を複数の第２タイプの処理関数からの第２タイプの処理関数に関連付ける、前記複数のターゲット関数を管理するように構成されたメモリと、
クエリに基づいて前記複数のターゲット関数からターゲット関数を選択し、かつ
前記選択されたターゲット関数に基づいて前記二次情報を生成するために、前記取得された一次情報に対して前記第１タイプの処理関数及び前記第２タイプの処理関数を実行するように構成された中央処理装置（ＣＰＵ）と
を備え、
前記ＣＰＵはさらに、
ターゲット関数登録コマンドのための入力コマンドを構文解析し、かつ前記入力コマンドが前記ターゲット関数登録コマンドを含む場合に、前記入力コマンドに基づいたターゲット関数を前記複数のターゲット関数に追加することと、
ジャンピングウィンドウ間隔登録コマンドのための前記入力コマンドを構文解析し、かつ前記入力コマンドが前記ジャンピングウィンドウ間隔登録コマンドを含む場合に、前記入力コマンドに基づいてジャンピングウィンドウ間隔を調整することと、
クエリ登録コマンドのための前記入力コマンドを構文解析し、かつ前記入力コマンドが前記クエリ登録コマンドを含む場合に、前記クエリのために前記入力コマンドを構文解析することと
を行うように構成される、サーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
０１    例示的実施形態は、概してコンピュータシステムに関し、特に、シングルストリームの複数ウィンドウでのストリームデータ処理方法に関する。
【背景技術】
【０００２】
０２    ストリームデータ処理は広く用いられている。データベース管理システム（以下、「ＤＢＭＳ」という）に連続して到着するデータのリアルタイム処理を実行するデータ処理システムの需要が増えている。ＤＢＭＳは、ストレージシステムに格納されたデータの処理を実行する。
【０００３】
０３    例えば、株取引システムでは、株価の変化に関する応答時間は、システムのユーザにとって決定的な要因である。株のデータがストレージシステムだけに格納されている関連技術のストレージシステムでは、格納されたデータを検索する関連技術のＤＢＭＳ方法の応答時間は、株価の変化の実際のスピードに関して十分に速くないかもしれず、ビジネスの機会を失う結果となり得る。関連技術のプロセスの一例では、格納されたクエリを周期的に発行する仕組みを用いている。従って、株価のようなデータが受信された直後にクエリを実行することが必要である場合、このような関連技術の仕組みをリアルタイムデータ処理に適用することは困難である。
【０００４】
０４    連続的に到着するデータは、関連技術では「ストリームデータ」として知られ、ストリームデータのリアルタイム処理を扱うために関連技術のストリームデータ処理システムが開発されてきた。
【０００５】
０５    関連技術のストリームデータ処理システムでは、クエリは、最初にシステムに登録され、データが到着した際に連続的に実行されるが、これは、上述の周期的な関連技術ＤＢＭＳ方法とは異なる。関連技術のストリームデータ処理システムは、スライディングウィンドウを用いているが、これは、ストリームデータを部分的にカットし、ストリームデータの構文解析された各部分の寿命を分け与え、よってストリームデータを効率的に処理する。スライディングウィンドウの仕様を含む関連技術クエリ記述言語の一例は、連続的クエリ言語（ＣＱＬ）である。
【０００６】
０６    ＣＱＬは、構造化クエリ言語（ＳＱＬ）のＦＲＯＭ文節におけるストリーム名の後にカッコを使用することによってスライディングウィンドウを特定する拡張を含み、これは、関連技術のＤＢＭＳで幅広く使用されている。スライディングウィンドウを特定するための関連技術の２つのタイプの方法がある。つまり、（１）カットするデータ行の数を特定する方法と、（２）カットするデータ行を含む時間間隔を特定する方法である。方法（１）の関連技術の例は、５０行に対応するデータがカットされて処理されるプロセスを含む。方法（２）の関連技術の例は、１５分間の時間間隔のデータがカットされて処理されるプロセスを含む。（１）の関連技術の例では、データの寿命は、５０個のデータが到着するまで続くと定義される。（２）の関連技術の例では、データの寿命は、１５分間続くと定義される。スライディングウィンドウによってカットされるストリームデータは、メモリ上に保持され、かつクエリ処理のために使用される。
【発明の概要】
【０００７】
０７    例示的実施形態の態様は、ストリームデータ入力情報を一次情報として受信し、かつ当該受信した一次情報から所定期間内の一次情報を取得することによって二次情報を生成するストリームデータ処理方法を含み、この方法は、複数のターゲット関数の各々が、複数の第１タイプの処理関数からの第１タイプの処理関数を、複数の第２タイプの処理関数からの第２タイプの処理関数に関連付ける、前記複数のターゲット関数を管理することと、クエリに基づいて前記複数のターゲット関数からターゲット関数を選択することと、前記選択されたターゲット関数に基づいて、前記二次情報を生成するために前記取得された一次情報に対して前記第１タイプの処理関数及び前記第２タイプの処理関数を実行することとを含む。
【０００８】
０８    例示的実施形態の追加の態様は、ストリームデータ入力情報を一次情報として受信し、当該受信した一次情報から所定期間内の一次情報を取得することによって、二次情報を生成するように構成されたサーバを含み、このサーバは、複数のターゲット関数の各々が、複数の第１タイプの処理関数からの第１タイプの処理関数を複数の第２タイプの処理関数からの第２タイプの処理関数に関連付ける、前記複数のターゲット関数を管理するように構成されたメモリと、クエリに基づいて前記複数のターゲット関数からターゲット関数を選択し、かつ前記選択されたターゲット関数に基づいて前記第１タイプの処理関数及び前記第２タイプの処理関数を実行するように構成された中央処理装置（ＣＰＵ）とを備える。
【０００９】
０９    例示的実施形態の追加の態様は、ストリームデータ入力情報を一次情報として受信し、かつ当該受信した一次情報から所定期間内の一次情報を取得することによって二次情報を生成するストリームデータ処理方法を実行するための命令を格納するための非一過性コンピュータ可読媒体を含む。前記命令は、複数のターゲット関数の各々が、複数の第１タイプの処理関数からの第１タイプの処理関数を、複数の第２タイプの処理関数からの第２タイプの処理関数に関連付ける、前記複数のターゲット関数を管理することと、クエリに基づいて前記複数のターゲット関数からターゲット関数を選択することと、選択されたターゲット関数に基づいて第１タイプの処理関数及び第２タイプの処理関数を実行することとを含む。
【図面の簡単な説明】
【００１０】
１０    上記及びその他の態様は、添付の図面と共に以下の実施形態の説明から、より容易に認められるであろう。
【００１１】
【図１】１１    図１は、例示的なクラスタリング方法に基づいた新入力データからのクラスタの変化を示す。
【図２】１２    図２は、例示的実施形態に従った新入力データによるクラスタの変化を示す。
【図３】１３    図３は、例示的実施形態が実装され得る例示的なハードウェア構成を示す。
【図４】１４    図４は、例示的実施形態に従ったクエリの一例を示す。
【図５】１５    図５は、例示的実施形態に従ったバッチ関数、リアルタイム関数、及びターゲット関数登録を示す。
【図６】１６    図６は、例示的実施形態に従ったターゲット関数定義テーブルを示す。
【図７】１７    図７は、例示的実施形態に従ったジャンピングウィンドウ間隔テーブルを示す。
【図８】１８    図８は、例示的実施形態に従ったクエリ実行モジュールを示す。
【図９】１９    図９は、例示的実施形態に従って、クエリがクエリパーサで構文解析される場合のクエリ実行モジュールの例を示す。
【図１０】２０    図１０は、例示的実施形態に従って入力コマンドを処理するためのフローチャートを示す。
【図１１】２１    図１１は、例示的実施形態に従ってクエリを処理するためのフローチャートを示す。
【図１２】２２    図１２は、例示的実施形態に従ったハードウェア構成を示す。
【図１３】２３    図１３は、例示的実施形態に従ったウィンドウ間隔調整定義テーブルを示す。
【図１４】２４    図１４は、例示的実施形態に従ったＣＰＵ利用率監視テーブルを示す。
【図１５】２５    図１５は、例示的実施形態に従ったクエリパーサのフローチャートを示す。
【図１６】２６    図１６は、例示的実施形態に従ってウィンドウサイズを調整するためのフローチャートを示す。
【図１７】２７    図１７は、例示的実施形態に従ったストリームデータ処理サーバのハードウェア構成を示す。
【図１８】２８    図１８は、例示的実施形態に従ったストリームデータ処理サーバのフローチャートを示す。
【図１９】２９    図１９は、例示的実施形態に従った、クエリトランスレータのフローチャートを示す。
【図２０】３０    図２０は、例示的実施形態に従った、変換されたクエリ例を示す。
【図２１】３１    図２１は、例示的実施形態に従った、生成されたクエリ実行モジュールを示す。
【発明を実施するための形態】
【００１２】
３２    上述の関連技術のプロセスは、いくつかの問題に遭遇し得る。例えば、関連技術のいくつかの統計又はデータマイニングの方法は、再帰的方法を使用する。関連技術ストリームデータ処理エンジンがこのような再帰的方法を使用すると、新しいデータが入力される度にエンジンが再計算を行う必要があるかもしれないので、処理費用が非常に高くなり得る。
【００１３】
３３    図１は、例示的な関連技術のクラスタリング方法に基づいた新入力データからのクラスタの変化を示す。
【００１４】
３４    例示的なクラスタリング方法は、データ点の観測をkクラスタに区分化するクラスタリング方法であるK-meansを含む。各観測は、最も近い中央値を有するクラスタに属する。K-meansは、初期k点を設定し、データ点がkクラスタに処理されるまで割当ステップ及び更新ステップを繰り返す。
【００１５】
３５    割当ステップでは、各データ点は、最も近い中央値を有するクラスタに割り当てられる。更新ステップでは、クラスタのデータ点の新しい中央値が計算される。
【００１６】
３６    図１で示されるように、初期状態１０１では、データ１０２は、境界線１０４によって分割された３つのクラスタに区分化される。各データは、最も近い中央値１０３を有するクラスタに属する。新入力データ１１２は、初期状態１０１で入力されると仮定される。新データ入力状態１１１では、ストリームデータ処理エンジンは、結果状態１２１を生み出すために現在の中央値から割当ステップ及び更新ステップを繰り返す。
【００１７】
３７    K-meansの処理費用は、データが入力される毎にエンジンが再計算するので、非常に高くなり得る。よって、ストリームデータ処理の処理費用を削減するために、多様な関連技術のプロセスが試行されてきた。
【００１８】
３８    関連技術の例では、処理費用を減らすために、ストリームデータに対してジャンピングウィンドウが使用される。タプルベースのウィンドウ、時間ベースのウィンドウ、又はパーティションベースのウィンドウなどのスライディングウィンドウが、各データをスライドさせるために使用される。例えば、タプルベースのウィンドウは、ウィンドウにｎ個のタプルを保持する。新しいデータがウィンドウに入力されると、最も古いデータがそのウィンドウから取り除かれる。他方、ジャンピングウィンドウは、サブウィンドウサイズのジャンプでスライドする。例えば、ｎ／４データがタプルベースのジャンピングウィンドウに入力されると、最も古いｎ／４データがウィンドウから取り除かれる（サブウィンドウサイズはｎ／４である）。
【００１９】
３９    しかし、この関連技術の例は、待ち時間が増加し得る。上記の例では、新しい結果は、ｎ／４データが入力された後で入力される。関連技術の例は、待ち時間のためにリアルタイムで処理できないかもしれない。
【００２０】
４０    例示的実施形態は、処理費用を削減しながらリアルタイム処理を組み合わせることに関する。例示的実施形態は、リアルタイム処理（速度のために正確度を犠牲にし得る）とバッチ処理（高い正確度を有し得る）を組み合わせるプロセスに関する。例示的実施形態は、ストリームデータ入力情報を一次情報として受信し、受信した一次情報から所定期間内の一次情報を取得することによって二次情報を生成するストリームデータ処理のシステム及び方法に関する。一次情報又は取得された一次情報は、二次情報を生成するための例示的実施形態によって構築されたクエリ実行モジュールによって処理され得る。
【００２１】
４１    例示的実施形態のリアルタイム処理は、リアルタイムで処理できるスライディングウィンドウを使用する。例示的実施形態のバッチ処理は、ジャンピングウィンドウ及びデータマイニングのアルゴリズムを使用することによって、周期的にリアルタイム処理によって起こるエラーを訂正することができる。
【００２２】
４２    関連技術の例と対照的に、関連技術の１つの関数の代わりに、２つの関数、すなわちバッチ関数及びリアルタイム関数が定義され使用される。この２つの関数は、ユーザによって定義され得る。例示的実施形態は、複数のターゲット関数を管理する。複数のターゲット関数の各々は、グループ化されるか、又はいくつかの異なるタイプの処理関数に関連し得る。ターゲット関数は、クエリに基づいて選択され、かつ複数のターゲット関数のうちの１つ以上のターゲット関数を使用することによって実行され得る。例えば、第１タイプの処理関数は、リアルタイム関数、すなわちデータストリームをリアルタイムで処理する関数を含み得る。複数のターゲット関数のうちの１つ以上のターゲット関数は、リアルタイム関数としてグループ化され得る。第２タイプの処理関数は、バッチ処理関数、すなわちデータストリームに対してバッチ処理を行う関数を含み得る。選択されたターゲット関数は、第１タイプの処理関数及び第２タイプの処理関数から選択された処理関数の組み合わせに基づいて形成され実行され得る。これらの関数については、以下でさらに説明する。
【００２３】
４３    クエリは１つの関数だけを含み得るが、ストリームデータ処理エンジンのクエリパーサは、例示的実施形態に従って、実行ツリーでリアルタイム関数及びバッチ関数のための２つの演算子を生成する。次に、リアルタイム処理関数は、スライディングウィンドウを使用することによって実行され、バッチ処理関数は、ジャンピングウィンドウを使用することによって実行される。
【００２４】
４４    図２は、例示的実施形態に従った新入力データによるクラスタの変化を示す。図２で示される例では、２つのk-means 関数が使用される。第１タイプのk-means関数、すなわちバッチ関数は、クラスタの中央値を計算する。第２タイプのk-means関数、すなわちリアルタイム関数は、割当ステップを一度実行することによって各中央値への距離を計算する。図２で示されるように、ｔ＝１０分の状態を示す状態２０１では、新しいデータ２０２が入力される。新しいデータ２０２と中央値２０３の間の距離は、新しい中央値に最も近い距離であると仮定される。従って、新しいデータ２０２は、中央値２０３を有するクラスタに区分化される。
【００２５】
４５    中央値は、新しいデータ２０３によって変更され、中央値が変更される場合にパーティションを変更し得るが、これは、前述の区分化とは異なり得る。例示的実施形態は、リアルタイム処理のこの矛盾を無視し、バッチ時間処理における矛盾を訂正する。例えば、ｔ＝１１分である状態２１１では、ジャンピングウィンドウは、中央値のパーティションを解決するために実行され、これは、状態２２１に変化する。
【００２６】
４６    例示的実施形態については、以下でさらに詳細に説明する。
【００２７】
４７    第一の例示的実施形態
【００２８】
４８    第一の例示的実施形態では、ジャンピングウィンドウ間隔は、ユーザによって設定される。
【００２９】
４９    図３は、例示的実施形態が実装され得る例示的なハードウェア構成を示す。図３は、１つ以上の中央処理装置（ＣＰＵ）３０１、ネットワークインタフェースコントローラ（ＮＩＣ）３０３、ホストバスアダプタ（ＨＢＡ）３０４、ハードディスクドライブ（ＨＤＤ）３０５、及びメモリ３０２を含み得るストリームデータ処理サーバ３００を示す。ストリームデータ処理サーバ３００はまた、関数登録モジュール３１１、ジャンピングウィンドウ間隔設定モジュール３１２、クエリパーサ３１３、ターゲット関数検出モジュール３１４、複数ウィンドウ生成モジュール３１５、及び複数関数生成モジュール３１６を含み得る。メモリはまた、ターゲット関数定義テーブル３２１、ジャンピングウィンドウ間隔テーブル３２２、及びクエリ実行モジュール３１７を含み得る。
【００３０】
５０    関数登録モジュール３１１は、ターゲット関数、バッチ関数、及びリアルタイム関数を含むが、これらに限定されない関数を登録する。ターゲット関数、バッチ関数、及びリアルタイム関数は、ターゲット関数定義テーブル３２１に格納される。関数登録モジュール３１１及びターゲット関数定義テーブル３２１に関するさらなる詳細は、図６及び図１０に関して説明する。
【００３１】
５１    ジャンピングウィンドウ間隔設定モジュール３１２は、ジャンピングウィンドウ間隔を登録し、ジャンピングウィンドウ間隔テーブル３２２を更新する。ジャンピングウィンドウ間隔設定モジュール３１２及びジャンピングウィンドウ間隔テーブル３２２に関するさらなる詳細は、図７及び図１０に関して説明する。
【００３２】
５２    クエリパーサ３１３は、システムに入力されたクエリを構文解析し、クエリ３５１に基づいてクエリ実行モジュール３１７を作成する。クエリパーサ３１３は、クエリ実行モジュール３１７の関数を作成するために、ターゲット関数検出モジュール３１４、複数生成モジュール３１５、及び複数関数生成モジュール３１６を使用し得る。クエリパーサ３１３に関するさらなる詳細は、図１０及び図１１に関して説明する。
【００３３】
５３    クエリパーサ３１３は、ターゲット関数検出モジュール３１４、複数生成モジュール３１５、及び複数関数生成モジュール３１６を呼び出す。ターゲット関数検出モジュール３１４は、クエリがターゲット関数定義テーブル３２１で定義されたターゲット関数を使用するか否かをチェックする。ターゲット関数検出モジュール３１４のさらなる詳細は、図１１に関連して開示される。複数ウィンドウ生成モジュール３１５は、クエリ実行モジュール３１７から受信した命令に基づいて、スライディングウィンドウ３３１及び／又はジャンピングウィンドウ３３２を生成する。複数関数生成モジュール３１６は、クエリ実行モジュール３１７から受信した命令に基づいて、リアルタイム関数３３３及び／又はバッチ関数３３４を生成する。ターゲット関数検出モジュール３１４、複数生成モジュール３１５、及び複数関数生成モジュール３１６に関するさらなる詳細は、図１１に関して説明する。
【００３４】
５４    クエリ実行モジュール３１７は、クエリパーサ３１３によってランタイムで作られるクエリを実行し、実行ツリーを生成する。実行ツリーは、スライディングウィンドウ３３１、ジャンピングウィンドウ３３２、リアルタイム関数３３３、及びバッチ関数３３４などの操作を含み得る。これら操作は、クエリによって接続され、演算子スケジューラによって実行される。クエリ実行モジュール３１７に関するさらなる説明は、図８及び図９に関して説明する。
【００３５】
５５    図３で示されるように、スライディングウィンドウ３３１及びジャンピングウィンドウ３３２は、所定時間の間、入力データ３４１を保持する。リアルタイム関数演算子３３３は、リアルタイムで関数を処理するためにスライディングウィンドウデータ３４２とバッチ関数出力データ３４４を組み合わせる。バッチ関数演算子３３４は、ジャンピングウィンドウデータ３４４を処理する。結果のデータ３４５が出力される。
【００３６】
５６    図４は、例示的実施形態に従った例のクエリを示す。
【００３７】
５７    クエリ４０１の例では、クエリ名は、Ｑ１である（register query Q1）。クエリ４０１の例は、また、過去１０分間の範囲内（FROM Stream [range 10 minute] as S）のストリームのタプル（「Stream」と呼ばれる）を保持するための変数を含む。クエリ４０１の例は、また、val3 > 5を満たす（WHERE S.val3 > 5）タプルをフィルタし、Kmeans（3, S.val1, S.val2）を計算するが、これは、val1及びval2に基づいた３つのクラスタに区分化し、関数出力をクラス（Kmeans 3, S.val1, S.val2）としてリネームする。クエリ４０１の例はまた、複数の行ＩＤであるval1、val2、val3、及びクラス（SELECT S.id, S.val1, S.val2, S.val3, KMeans (3, S.val1, S.val2) as class）を抽出し、新しいデータ入力（ISTREAM）による新しい結果を出力する。
【００３８】
５８    図５は、例示的実施形態に従ったバッチ関数、リアルタイム関数、及びターゲット関数登録を示す。
【００３９】
５９    例示的実施形態は、バッチ関数５０１、リアルタイム関数５０２、及びターゲット関数登録５０３などの１つ以上の関数を使用し得る。バッチ関数５０１は、２つのリスト、すなわちval1リスト及びval2リストを使用し、これらは、ウィンドウにタプルを保持するために使用される。バッチ関数５０１はまた、中央値を計算するために関数（例えば、中央値計算）を使用し得る。バッチ関数５０１で示される例では、中央値計算関数は、各パーティションの３つの中央値を返す。リアルタイム関数５０２は、入力データ（val1、val2）とバッチ関数５０１から計算された中央値の間の距離を計算する。リアルタイム関数５０２は、入力データと中央値の間の最小の距離を示し得るクラスタＩＤを返す。
【００４０】
６０    ターゲット関数登録５０３は、例示的実施形態のための関数を登録する。ターゲット関数５０３に示される例では、ターゲット関数名はKmeansとして登録され、バッチ関数名はBatchKmeansとして登録され、リアルタイム関数名はRealtimeKmeansとして登録される。
【００４１】
６１    図６は、例示的実施形態に従った、図３に示されるターゲット関数定義テーブル３２１を示す。
【００４２】
６２    ターゲット関数定義テーブル３２１は、ターゲット関数６０１、バッチ関数６０２、及びリアルタイム関数６０３のエントリを含み得る。ターゲット関数の欄６０１は、クエリ５０３に登録された関数を示す。バッチ関数の欄６０２は、バッチ関数定義５０１に登録された関数を示す。リアルタイム関数の欄６０３は、リアルタイム関数定義５０２に登録された関数を示す。
【００４３】
６３    エントリ６１１の例では、ターゲット関数登録５０３は、ターゲット関数定義テーブル関数Kmeansで登録される。エントリ６１１の例で示されるように、ターゲット関数はKmeansとして登録され、バッチ関数はBatchKmeansとして登録され、リアルタイム関数はRealtimeKmeansとして登録される。
【００４４】
６４    図７は、例示的実施形態に従った、図３に示されるジャンピングウィンドウ間隔テーブル３２２を示す。
【００４５】
６５    図７の例では、ジャンピングウィンドウ間隔テーブル３２２は、クエリ名７０１及び間隔７０２の欄を含む。クエリ名７０１は、クエリ名を示し、一方、間隔の欄７０２は、対応するクエリのためのジャンピングウィンドウ間隔を示す。エントリ７１１の例では、ジャンピングウィンドウ間隔は、クエリ名Ｑ１では１分である。
【００４６】
６６    図８は、例示的実施形態に従ったクエリ実行モジュールを示す。
【００４７】
６７    図８の例では、図３で示されるクエリ実行モジュール３１７は、クエリ４０１が構文解析される場合に構成される。クエリ実行モジュール３１７の構成は、クエリ登録コマンド４０１（図４で示される）が実行される場合にクエリパーサ３１３（図３で示される）によって生成される。クエリ実行モジュール３１７は、１つ以上の演算子を含み得るものであり、各演算子が、プロセスを実行するための実行モジュールとして作用する。キュー８１２は、必要に応じて演算子を相互に接続し得る。
【００４８】
６８    図８で示される例では、ストリームされたデータ８１１は、クエリ実行モジュール３１７に入力タプルとして入力される。クエリ実行モジュール３１７の演算子からのクエリの処理結果は、リアルタイム出力結果８１３として出力される。クエリ実行モジュール３１７で使用される演算子は、使用されるプロセスによってタイプが異なり得る。例えば、スキャン演算子８０１は、入力タプル８１１にタイムスタンプを追加するように動作する。スライディングウィンドウ演算子８０２は、データ行をカットアウトするために時間間隔を特定することによって、データストリーム８１１からデータ行をカットアウトするように動作する。スライディングウィンドウ演算子８０２は、ストリームデータ８１１をタプルセット（FROM Stream [Range 10 minute] as S）に変換するプロセスを実行するために動作可能である。フィルタ演算子８０３は、所定の条件（例えば、WHERE S.vaI13 > 51）に基づいて、タプルが出力されるか否かを決定するためのプロセスを実行するために動作可能である。射影演算子８０４は、少なくとも一部の欄を出力するためのプロセスを実行するために動作可能であり、さらに、登録された関数(SELECT S.id, S.val1, S.vaI2, S.val3, KMeans(3, S.val1, S.val2) as class)を計算するために動作可能であり得る。ストリーミング演算子８０５は、タプルセットをストリームデータ２０１(ISTREAM)に変換するためのプロセスを実行するために動作可能である。
【００４９】
６９    図８で示される演算子に加えて、他の演算子もまた、クエリ実行モジュール３１７で使用され得る。例えば、結合演算子は、所定の条件又は指定条件下で２つ以上のデータストリームを結合するプロセスを実行するために使用することができる。集合演算子は、集合プロセスを実行するために使用され得るものであり、これは、合計、平均値、最大値、最小値、カウント値、分散、標準偏差、中央値などの導出によって示され得る。
【００５０】
７０    図９は、クエリ４０１が例示的実施形態に従ってクエリパーサ４１３で構文解析される場合のクエリ実行モジュール３１７の例を示す。スキャン演算子８０１、スライディングウィンドウ演算子８０２、フィルタ演算子８０３、及びiStream演算子８０５は、図８で示されるものと同じである。フィルタ演算子９０４は、フィルタ演算子８０３と同じである。
【００５１】
７１    結合演算子９０１は、所定の条件下で２つ以上のストリームデータを結合するプロセスを実行する。図９の例では、結合演算子９０１は、フィルタ演算子８０３の結果と射影演算子９０５の結果を結合する。射影演算子９０２は、図８の射影演算子８０４と類似しているが、関数がターゲット関数からリアルタイム関数に変わっている。射影演算子９０５も、図８の射影演算子８０４に類似しているが、関数がターゲット関数からバッチ関数に変わっている。
【００５２】
７２    図１０は、例示的実施形態に従って入力コマンドを処理するためのフローチャートを示す。１００２では、入力コマンドは、関数登録モジュール３１１（図３で示される）によって処理され、これが、入力コマンドが図５で示されるようなターゲット関数登録コマンドであるか否かを決定する。入力コマンドがターゲット関数登録コマンドである場合は、関数登録モジュール３１１は、１００３でターゲット関数定義テーブル３２１を更新する。１００４では、入力コマンドは、ジャンピングウィンドウ間隔設定モジュール３１２（図３で示されるように）によって処理され、これは、入力コマンドがジャンピングウィンドウ間隔設定コマンド（図７で示されるように）を含むか否かを決定する。入力コマンドがジャンピングウィンドウ間隔設定コマンドを含む場合は、ジャンピングウィンドウ間隔設定モジュール３１２は、ステップ１００５でジャンピングウィンドウ間隔テーブル３２２を更新する。１００６では、クエリパーサ３１３（図３で示されるように）は、入力コマンドがクエリ登録コマンド（図４で示されるように）を含むか否かを決定する。クエリパーサ３１３が、入力コマンドがクエリ登録コマンドを含むと決定した場合、クエリパーサ３１３は、１００７でクエリを構文解析する（例えば図１１で示されるように）。１００８では、ストリームデータ処理システム３００（図３で示されるように）は、入力がシステム終了コマンドを含むか否かを決定する。入力コマンドがシステム終了コマンドを含む場合は、ストリームデータ処理システム３００は、１００９で入力コマンドのための処理を終了する。それ以外の場合は、手順は１００２に戻る。
【００５３】
７３    図１１は、例示的実施形態に従ってクエリを処理するためのフローチャートを示す。１１０１では、クエリパーサ３１３（図３で示されるように）は、構文解析のためのクエリを受信する。１１０２では、クエリ実行モジュール３１７は、クエリの構文解析に基づいて生成される。１１０３では、ターゲット関数検出モジュール３１４（図３で示されるように）は、クエリをさらに処理するためにターゲット関数定義テーブル３２１を参照する。１１０４では、ターゲット関数定義テーブル３２１への参照に基づいて、ターゲット関数検出モジュール３１４は、登録済みのクエリがターゲット関数定義テーブル３２１からのターゲット関数を含むか否かを決定する。
【００５４】
７４    クエリ内にターゲット関数が見つからない場合は、手順は１１１１に進んで終了する。ターゲット関数が見つかった場合は、手順は１１０５に進む。１１０５では、複数ウィンドウ生成モジュール３１５（図３で示されるように）は、スライディングウィンドウ演算子から射影演算子に演算子をコピーし、スライディングウィンドウ演算子をスキャン演算子に接続する。１１０６では、複数ウィンドウ生成モジュール３１５は、結合演算子を生成し、元の射影演算子の前に結合演算子を設定する。複数ウィンドウ生成モジュール３１５は、結合演算子を、コピーされた射影演算子に接続する。１１０７では、複数ウィンドウ生成モジュール３１５は、登録済みのクエリをさらに処理するためにジャンピングウィンドウ間隔テーブル３２２を参照する。１１０８では、ジャンピングウィンドウ間隔テーブル３２２への参照に基づいて、複数ウィンドウ生成モジュール３１５は、コピーされたスライディングウィンドウをジャンピングウィンドウで置換し、ジャンピングウィンドウ間隔テーブル３２２の値に対応するようにジャンピングウィンドウサイズを設定する。１１０９では、複数関数生成モジュール３１６（図３に示される）は、コピーされた射影演算子のターゲット関数をバッチ関数で置き換える。１１１０では、複数関数生成モジュール３１６は、元の射影演算子のターゲット関数をリアルタイム関数で置換する。
【００５５】
７５    例えば、図４で示されるクエリが１１０１で登録されると仮定する。１１０２では、クエリパーサ３１３は、図８で示されるクエリ実行モジュールを生成するために図４のクエリを構文解析する。１１０４では、図４のクエリがKmeans関数を含むので、処理は１１０５に進む。１１０５では、図４のクエリに基づいて、スライディングウィンドウ演算子８０２、フィルタ演算子８０３、及び射影演算子８０４がコピーされる。コピーされた演算子（図９で示されるように）は、ジャンピングウィンドウ演算子９０３（これはスライディングウィンドウ演算子として機能する）、フィルタ演算子９０４、及び射影演算子９０５（ここで、バッチ関数がまだターゲット関数として機能する）としてコピーされる。ジャンピングウィンドウ演算子９０３は、スキャン演算子８０１に接続される。１１０６では、結合演算子９０１が作成され、フィルタ演算子８０３、射影演算子９０５、及び射影演算子９０２に接続される。上述のコピーから、射影演算子９０２（リアルタイム関数）はまだ、射影演算子８０４（ターゲット関数）と同じである。
【００５６】
７６    この例では、ステップ１１０８では、コピーされたスライディングウィンドウ演算子９０３は、ジャンピングウィンドウ演算子９０３に置換される。ジャンピングウィンドウ演算子９０３のジャンピングウィンドウ間隔は、図７に示されるように「１分」に設定される。１１０９では、コピーされた射影演算子９０５のターゲット関数（Kmeans）は、バッチ関数（BatchKmeans）で置換される。１１１０では、射影演算子８０４のターゲット関数（Kmeans）は、射影演算子９０２のリアルタイム関数（Realtimekmeans）で置換される。
【００５７】
７７    第二の例示的実施形態
【００５８】
７８    上記の第一の例示的実施形態では、ジャンピングウィンドウ間隔は、ユーザによって設定される。第二の例示的実施形態では、ストリームデータ処理エンジンは、情報（例えば、ＣＰＵ利用率）の監視に基づいてジャンピングウィンドウ間隔を調整する。ジャンピングウィンドウ間隔が短くなるにつれて、バッチ関数が実行される頻度が高まり、よって、リアルタイム処理の正確度を改良する。しかし、ジャンピングウィンドウ間隔が短くなるにつれて、ＣＰＵ利用率が上がり得る。第二の例示的実施形態では、ストリームデータ処理エンジンは、ＣＰＵ利用率に基づいてジャンピングウィンドウを調整し得る。
【００５９】
７９    図１２は、例示的実施形態に従ったハードウェア構成を示す。
【００６０】
８０    図３の第一の例示的実施形態でも使用される要素の説明は、明確にするために省略される。第二の例示的実施形態では、ジャンピングウィンドウ間隔設定モジュール３１２及びジャンピングウィンドウ間隔テーブル３２２は使用されない。
【００６１】
８１    第二の例示的実施形態では、ジャンピングウィンドウ調整設定モジュール１２０１は、監視間隔、上限閾値、初期ウィンドウ間隔、調整率、及び他の情報などの情報を格納するために使用され得る。ジャンピングウィンドウ調整情報は、ユーザによって構成され得る。ジャンピングウィンドウ調整設定モジュール１２０１のさらなる詳細は、図１３で提供される。
【００６２】
８２    ＣＰＵ利用率監視モジュール１２０２は、ジャンピングウィンドウ調整設定モジュール１２０１からのジャンピングウィンドウ調整情報に基づいて更新される。ＣＰＵ利用率監視モジュール１２０２は、ＣＰＵ利用率を監視し、かつ監視されたＣＰＵ利用率に基づいてＣＰＵ利用率監視テーブル１２１２を更新する。ＣＰＵ利用率監視モジュール１２０２のさらなる詳細は、図１４で提供される。
【００６３】
８３    ジャンピングウィンドウ間隔調整モジュール１２０３は、ジャンピングウィンドウ間隔を調整するために、ＣＰＵ利用率監視モジュール１２０２からの情報及びＣＰＵ利用率監視テーブル１２１２からの情報を参照する。ジャンピングウィンドウ間隔は、ＣＰＵ利用率に基づいてジャンピングウィンドウ間隔調整モジュール１２０３によって調整され得る。
【００６４】
８４    ウィンドウ間隔調整定義テーブル１２１１は、ウィンドウ間隔を調整するための情報を格納する。ウィンドウ間隔調整定義テーブル１２１１のさらなる詳細が、図１３で提供される。
【００６５】
８５    ＣＰＵ利用率監視テーブル１２１２は、システムのＣＰＵ利用率に関する情報を含む。ＣＰＵ利用率監視テーブル１２１２のさらなる詳細が、図１４で提供される。
【００６６】
８６    図１３は、例示的実施形態に従ったウィンドウ間隔調整定義テーブルを示す。
【００６７】
８７    ウィンドウ間隔調整定義テーブルは、いくつかの変数を含み得る。例えば、調整間隔の欄１３０１は、ジャンピングウィンドウ間隔が調整される頻度を示す。エントリ１３１１の例では、ジャンピングウィンドウ間隔は、ジャンピングウィンドウ間隔調整モジュール１２０３によって毎分調整される。
【００６８】
８８     上限閾値の欄１３０２は、ＣＰＵ利用率の上限閾値を示す。エントリ１３１１の例では、ＣＰＵ利用率の上限閾値は、８０％に設定される。ＣＰＵ利用率が８０％以下である場合は、ジャンピングウィンドウ間隔は短くなる。一方、ＣＰＵ利用率が８０％を上回る場合は、ジャンピング間隔は長くなる。上限閾値は、必要に応じて調整することができ、エントリ１３１１の例の８０％の例に限定されない。
【００６９】
８９    初期ジャンピングウィンドウ間隔の欄１３０３は、ジャンピングウィンドウ間隔の初期値を示す。エントリ１３１１の例では、ジャンピングウィンドウ間隔の初期値は、６０秒である。
【００７０】
９０    調整率の欄１３０４は、調整間隔及び上限閾値に基づいて、ジャンピングウィンドウ間隔が調整される程度を示す。エントリ１３１１の例では、ジャンピングウィンドウ間隔は、一回に５％短くなる／長くなる。ジャンピングウィンドウが調整される程度は、必要に応じて調整され得るものであり、エントリ１３１１の例の５％の例に限定されない。
【００７１】
９１    図１４は、第二の例示的実施形態に従ったＣＰＵ利用率監視テーブルを示す。
【００７２】
９２    ＣＰＵ利用率監視テーブルは、ＣＰＵ利用率に関する情報を格納し得るものであり、時刻の欄１４０１、ＣＰＵ利用率の欄１４０２、及びウィンドウ間隔の欄１４０３を含むことができる。時刻の欄１４０１は、情報が記録された場合を示すタイムスタンプである。ＣＰＵ利用率１４０２は、時刻１４０１におけるシステムによるＣＰＵ利用率のレベルを示す。ウィンドウ間隔の欄１４０３は、ジャンピングウィンドウ間隔の長さを示す。例示的なエントリ１４０４は、図１３のウィンドウ間隔調整定義テーブルからの情報に基づく。例示的なエントリ１４０４では、ＣＰＵ利用率１４０２が閾値（８０％）未満であると示されたので、ウィンドウ間隔は時刻１０:００から１０:０３に５％（３秒）だけ短くなった。しかし、時刻Ｔ：０３からＴ：０４では、ＣＰＵ利用率が時刻１０:０３で８０％の閾値を超えたので、ウィンドウ間隔は５％（３秒）だけ長くなった。
【００７３】
９３    図１５は、例示的実施形態に従ったクエリサーバーのフローチャートを示す。図１５では、プロセス要素１５０１、１５０２、及び１５０３は、図１０のプロセス要素１００１、１００２、及び１００３とそれぞれ同じである。よって説明は、明確さのために省略される。
【００７４】
９４    １５０４では、ジャンピングウィンドウ調整設定モジュール１２０１（図１２に示されるように）は、入力コマンドが図１３で示されるジャンピングウィンドウ調整設定コマンドであるか否かを決定する。１５０５では、入力コマンドがジャンピングウィンドウ調整設定コマンドである場合は、ジャンピングウィンドウ調整設定モジュール１２０１は、ウィンドウ間隔調整定義テーブルを更新する。
【００７５】
９５    プロセス要素１５０６及び１５０７は、図１０で示される１００６及び１００７とそれぞれ同じである。初期ジャンピングウィンドウ間隔は、ウィンドウ間隔調整定義テーブル１２１１で構成される。１５０８では、ジャンピングウィンドウサイズは、タイマ間隔に基づいて調整される（プロセス要素１５０９で示されるように）。調整のさらなる詳細は、図１６で提供される。プロセス要素１５１０及び１５１１は、図１０で示されるプロセス要素１００８及び１００９とそれぞれ同じである。
【００７６】
９６    図１６は、例示的実施形態に従ってウィンドウサイズを調整するためのフローチャートを示す。具体的には、図１６は、図１５のプロセス要素１５０９のフローチャートを示す。１６０１でプロセスが開始する。１６０２では、ＣＰＵ利用率監視モジュール１２０２は、ＣＰＵ利用率を監視し、ＣＰＵ利用率テーブル１２１２を更新する。１６０３では、ジャンピングウィンドウ間隔調整モジュール１２０３は、ＣＰＵ利用率テーブル１２１２を参照する。１６０４では、ジャンピングウィンドウ間隔調整モジュール１２０３は、ＣＰＵ利用率テーブル１２１２のＣＰＵ利用率の欄１４０２の値がウィンドウ間隔調整定義テーブル１２１１の上限閾値の欄１３０２の値より小さいか否かを決定する。１６０５では、ジャンピングウィンドウ間隔調整モジュール１２０３は、新しいジャンピングウィンドウを「古いジャンピングウィンドウ間隔−（初期ウィンドウ間隔＊調整率）」に設定する。１６０６では、ジャンピングウィンドウ間隔調整モジュール１２０３は、新しいジャンピングウィンドウを「古いジャンピングウィンドウ間隔＋（初期ウィンドウ間隔＊調整率）」に設定する。１６０７では、プロセスが終了する。
【００７７】
９７    例えば、図１４で示されるように１０:００のＣＰＵ利用率が６０％であること仮定する。よって、１６０４では、ジャンピングウィンドウ間隔調整モジュール１２０３は、ＣＰＵ利用率の値が上限閾値の欄より小さいと決定する。新しいジャンピングウィンドウ間隔＝古いジャンピングウィンドウ間隔（６０秒）−（初期ウィンドウ間隔（６０秒）＊調整率（０.０５））＝５７秒。その結果、ＣＰＵ利用率が１０:００で６０％であるので、ウィンドウ間隔は１０:０１で１分から５７秒に短くなる。しかし、１０:０３のＣＰＵ利用率は８６％である。従って、１６０４では、ジャンピングウィンドウ間隔調整モジュール１２０３は、ＣＰＵ利用率の値が上限閾値の欄より大きいと決定する。新しいジャンピングウィンドウ間隔＝古いジャンピングウィンドウ間隔（５１秒）＋（初期ウィンドウ間隔（６０秒）＊調整率（０.０５））＝ ５４秒。その結果、ＣＰＵ利用率が１０:０３で８６％であるので、ウィンドウ間隔は１０:０４で５１秒から５４秒に長くなる。
【００７８】
９８  第三の例示的実施形態
【００７９】
９９    説明された第一及び第二の例示的実施形態では、クエリパーサは、クエリに基づいてクエリ実行モジュールを作る。第三の例示的実施形態では、クエリトランスレータは、登録済みのクエリから新しいクエリを出力する。クエリ実行モジュールは、ストリームデータ処理エンジンが新しいクエリを構文解析する場合に生成される。
【００８０】
１００    図１７は、第三の例示的実施形態に従って、ストリームデータ処理サーバの例示的なハードウェア構成を示す。図１７に示される構成では、クエリトランスレータ
１７１３は、登録済みのクエリから２つのクエリを作るために使用される。クエリトランスレータは、ターゲット関数検出モジュール１７１４、複数ウィンドウ生成モジュール１７１５、及び複数関数生成モジュール１７１６を呼び出す。ターゲット関数検出モジュール１７１４は、図３のターゲット関数検出モジュール３１４と同様に機能する。複数ウィンドウ生成モジュール１７１５は、ジャンピングウィンドウ及びスライディングウィンドウを含む新しいクエリを生成する。複数関数生成モジュール１７１６は、バッチ関数及びリアルタイム関数を含み得る新しいクエリを生成する。
【００８１】
１０１    図１８は、例示的実施形態に従って、ストリームデータ処理サーバのためのフローチャートを示す。図１８では、プロセス要素１８０１〜１８０６、及び１８０８〜１８０９は、図１０のプロセス要素１００１〜１００６及び１００８〜１００９と同じである。１８０７では、クエリトランスレータは、クエリを変換する。クエリ変換のさらなる詳細は、図１９で提供される。
【００８２】
１０２    図１９は、例示的実施形態に従って、クエリトランスレータのためのフローチャートを示す。１９０１でプロセスが開始する。１９０２では、ターゲット関数検出モジュール１７１４は、ターゲット関数定義テーブル３２１を参照する。１９０３では、ターゲット関数検出モジュール１７１４は、登録済みのクエリが、ターゲット関数定義テーブル３２１からのターゲット関数を含むか否かを決定する。１９０４では、複数ウィンドウ生成モジュール１７１５は、登録済みのクエリを一時的なクエリにコピーし、元のクエリの前に一時的なクエリを設定し、クエリ名を一時的なクエリとしてリネームする。１９０５では、複数ウィンドウ生成モジュール１７１５は、ジャンピングウィンドウ間隔テーブル３２２を参照する。１９０６では、複数ウィンドウ生成モジュール１７１５は、一時的なクエリのスライディングウィンドウをジャンピングウィンドウに置換し、ジャンピングウィンドウ間隔をジャンピングウィンドウ間隔テーブル３２２の対応する値に設定する。１９０７では、複数ウィンドウ生成モジュール１７１５は、一時的なクエリ名を元のクエリの「From」センテンスに追加し、スライディング行ウィンドウを一時的なクエリ名（サイズ１）に設定する。１９０８では、複数関数生成モジュール１７１６は、一時的なクエリのターゲット関数をバッチ関数で置換し、出力を一時的な名前としてリネームする。１９０９では、複数関数生成モジュール１７１６は、元のクエリのターゲット関数をリアルタイム関数で置換し、一時的なクエリの出力をリアルタイム関数の引数として追加する。１９１０で、プロセスは終了する。
【００８３】
１０３    図２０は、例示的実施形態に従った変換されたクエリ例を示す。図２０で提供される例では、登録された元のクエリは、図４のものである。図１９のフローチャートによると、プロセス要素１９０３から、ターゲット関数検出モジュール１７１４は、クエリがKmeans関数を含むので、登録済みのクエリがターゲット関数定義テーブル３２１からのターゲット関数を含むと決定する。１９０４では、元のクエリが一時的なクエリにコピーされる。クエリ２００１は一時的なクエリであり、クエリ２００２は元のクエリである。一時的なクエリ名は、Q1からTemp(register query Temp)に変更される。１９０６では、一時的なクエリの範囲スライディングウィンドウは、ジャンピングウィンドウに変更される。ジャンピングウィンドウ間隔は、１分に設定される(FROM Stream [range 10 minute] as S -> FROM Stream [range 10 minute jumped every 1 minute])。１９０７では、一時的なクエリ名Tempは、元のクエリの「From」ステートメントに追加される。スライディング行ウィンドウは、一時的なクエリ名（このサイズは１である）に設定される(Stream [range 10 minute] as S -> Stream [range 10 minute] as S, Temp [rows 1] as G)。１９０８では、一時的なクエリのKmeans 関数はBatchKmeansに変更され、出力はgravityとリネームされる(KMeans(3, S.val1, S.val2) as class -> BatchKMeans(3, S.val1, S.val2) as gravity)。１９０９では、元のクエリのKmeans 関数は、RealtimeKmeansに変更される。一時的なクエリの出力は、リアルタイム関数の引数として追加される(KMeans(3, S.val1, S.val2) as class -> RealtimeKMeans(3, S.val1, S.val2, G.gravity) as class)。
【００８４】
１０４    図２１は、例示的実施形態に従った生成されたクエリ実行モジュールを示す。ストリームデータ処理エンジンが図２０で示されるクエリを構文解析する場合に、図２１で示されるクエリ実行モジュールが生成される。図２１で示されるクエリ実行モジュールは、図９で示されるクエリ実行モジュールに類似している。これらの違いは、要素２１０１、２１０２、及び２１０３が新たに追加されることである。要素２１０１はスキャン演算子であり、要素２１０２はistream演算子であり、かつ要素２１０３はスライディングウィンドウ演算子である。結合演算子９０１は、フィルタ演算子８０３及びスライディングウィンドウ演算子２１０３の出力を組み合わせる。
【００８５】
１０５    数件の例示的実施形態が示され説明されてきたが、この分野に精通した人々に対して本明細書で説明している内容について知らせるために、これらの例示的実施形態は提供される。本明細書で説明している内容が、説明された例示的実施形態に制限されることなしに、多様な形態で具現化され得ることが、理解されるべきである。本明細書で説明している内容は、特段に定義されもしくは説明される事項なしに、又は説明されていない異なる要素もしくは事項を伴って、実行することができる。添付の請求項及びその同等物で定義される本明細書で説明される内容から逸脱することなしに、これらの例示的実施形態に変更がなされる得ることが、当該分野に精通した人々によって認められるであろう。
【００８６】
１０６    詳細な説明の一部は、コンピュータ内のオペレーションのアルゴリズム及び象徴的な態様に関して示されている。これらのアルゴリズム記述及び象徴的な態様は、データ処理分野の当業者がその新しいアイディアのエッセンスを最も効果的に他の当業者に伝えるために使用する手段である。アルゴリズムとは、望ましい最終状態又は結果へと導く一連の定義されたステップである。例示的実施形態において、実施されるステップは、具体的な結果を達成するための相当量の物理的操作を必要とする。
【００８７】
１０７    別段の記載がない限り、以下の解説から明らかなように、当然のことながら説明全体を通して、「処理」、「演算」、「計算」、「判断」、「表示」等の用語を用いた解説は、コンピュータシステムのレジスタ及びメモリ内の物理的（電子的）数量として表わされるデータを、コンピュータシステムのメモリもしくはレジスタ又はその他の情報記憶、送信もしくは表示装置の中の物理的数量として同様に表わされるその他のデータに操作しかつ変換する、コンピュータシステム又はその他の情報処理装置の動作又はプロセスを含み得る。
【００８８】
１０８    例示的実施形態は、本明細書における動作を実施する装置にも関する。この装置は、必要とされる目的のために特別に構築してもよく、又は一つ以上のコンピュータプログラムによって選択的に起動又は再構成された一つ以上の汎用コンピュータを含み得る。当該コンピュータプログラムは、光ディスク、磁気ディスク、読取専用記憶装置（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ソリッドステート装置及びドライブ、又は電子情報の格納に適したその他の種類の媒体等（但し、これらに限定されない）の非一過性コンピュータ読取可能媒体又はコンピュータ読取可能記憶媒体に格納され得る。本明細書において示されるアルゴリズム及び（情報）提示は、特定のコンピュータ又はその他の装置に本質的に関係しているわけではない。
【００８９】
１０９    様々な汎用システムを、本明細書における教示に従ってプログラム及びモジュールと共に使用してもよく、又は望ましい方法ステップを実施するためにより特化した装置を構築することが都合がよいということが判明するかもしれない。さらに、例示的実施形態は、特定のプログラミング言語を参照して説明されてはいない。当然のことながら、本明細書に記載されている通りに本発明の教示を実施するために、様々なプログラミング言語を使用してもよい。プログラミング言語の命令は、一つ以上の処理装置、例えば中央処理装置（ＣＰＵ）、プロセッサ、又はコントローラによって実行され得る。
【００９０】
１１０    当技術分野では周知であるように、上述の動作は、ハードウェア、ソフトウェア、又はソフトウェアとハードウェアの組み合わせによって実行することができる。例示的実施形態の様々な態様は、回路や論理装置（ハードウェア）を用いて実施してよく、その一方で、その他の態様は、機械読み取り可能媒体（ソフトウェア）上に記憶された命令を用いて実施してもよく、これがプロセッサによって実行された場合には、例示的実施形態を実行する方法をプロセッサに実施させるものである。さらに、いくつかの例示的実施形態は、ハードウェアのみにおいて実施されてよく、その他の例示的実施形態は、ソフトウェアのみで実施されてよい。さらに、説明された様々な機能は、一つのユニットで実施することができ、又はあらゆる方法によって多くの構成要素に分散することができる。ソフトウェアによって実施された場合、上記の方法は、コンピュータ読取可能媒体に記憶された命令に基づいて、汎用コンピュータなどのプロセッサによって実行され得る。望ましい場合には、圧縮及び／又は暗号化形式で命令を媒体に記憶することができる。
【００９１】
１１１    さらに、例示的実施形態の他の実施は、本明細書及び本明細書に開示される発明の実行を考慮することで、当業者にとって明らかなものとなるであろう。説明された実施形態の多様な態様及び／又は構成要素は、単独で又はあらゆる組み合わせで使用してもよい。本明細書及び実施例は単に例示的なものとして考慮されることが意図されており、本発明の真の範囲及び精神は、以下の請求項によって示される。
【図１】
0005906161.tif 000002
【図２】
0005906161.tif 000003
【図４】
0005906161.tif 000004
【図５】
0005906161.tif 000005
【図６】
0005906161.tif 000006
【図７】
0005906161.tif 000007
【図８】
0005906161.tif 000008
【図９】
0005906161.tif 000009
【図１０】
0005906161.tif 000010
【図１１】
0005906161.tif 000011
【図１３】
0005906161.tif 000012
【図１４】
0005906161.tif 000013
【図１５】
0005906161.tif 000014
【図１６】
0005906161.tif 000015
【図１７】
0005906161.tif 000016
【図１８】
0005906161.tif 000017
【図１９】
0005906161.tif 000018
【図２０】
0005906161.tif 000019
【図２１】
0005906161.tif 000020
【図３】
0005906161.tif 000021
【図１２】
0005906161.tif 000022