(57)【要約】  ストリームデータによっては（例えば、センサストリーム）、ストリームデータ処理サーバに定期的に送信される性質を有する。データが定期的に到着する場合、ある期間を保持することは、ある量を保持することと同様である。記述される実施例は、ある期間のストリームデータを保持する範囲ウィンドウを、ある量のストリームデータを保持する列ウィンドウに置き換える。同様の方法により、実施例は、期間毎に結果を出力する範囲ｒｓｔｒｅａｍを、量毎に結果を出力する列ｒｓｔｒｅａｍに置き換える。【選択図】図４Ａ
2016526719.tif 000002
【特許請求の範囲】
【請求項１】
処理を実行する命令を含む計算機プログラムであって、前記命令は、
１以上のストリームデータ間隔定義を、ストリームデータ間隔情報から決定し、
ストリームデータの定期的な到着を検出する入力間隔チェック部を、前記１以上のストリームデータ間隔定義に基づいて生成し、
前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義のために、クエリ実行部を構成する、ことを含み、
前記クエリ実行部は、
前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義と関連づけられた前記クエリ実行部の１以上の範囲ウィンドウ演算子を決定し、
前記決定された１以上の範囲ウィンドウ演算子を、列スライディングウィンドウ演算子又は分割列スライディングウィンドウ演算子の一方、に変更し、
前記クエリ実行部の列ウィンドウサイズを調整する、ことにより構成される、計算機プログラム。
【請求項２】
請求項１に記載の計算機プログラムであって、
前記クエリ実行部を構成することは、
前記ストリームデータの周期的な到着が調整される場合、間隔調整タプル生成部を挿入し、前記入力間隔チェック部と接続する、ことを含み、
前記間隔調整タプル生成部は、１以上の超過タプルを受信した場合に少なくとも一つのタプルを廃棄し、タプルの省略を検出した場合に間隔調整タプルを挿入する、計算機プログラム。
【請求項３】
請求項２に記載の計算機プログラムであって、前記命令はさらに、
前記ストリームデータの周期的な到着が調整される場合、
受信されたタプルの数が受信すべき間隔より大きい場合に、前記ストリームデータの前記周期的な到着からタプルを廃棄し、
受信されたタプルの数が受信すべき間隔より小さい場合に、前記間隔調整タプル生成部における間隔調整バッファから同一グループ化値を有する前回タプルを挿入し、
前記間隔調整タプル生成部における前記間隔調整バッファから前記同一グループ化値を有する前記前回タプルを削除する、ことを含む、計算機プログラム。
【請求項４】
請求項１に記載の計算機プログラムであって、前記命令はさらに、ｒｓｔｒｅａｍ出力間隔定義コマンドを受信すると、１以上のｒｓｔｒｅａｍ出力間隔定義を更新することを含み、
前記決定された１以上の範囲ウィンドウ演算子を、前記列スライディングウィンドウ演算子又は前記分割列スライディングウィンドウ演算子の一方に変更することは、
クエリからｒｓｔｒｅａｍ演算子を決定すること、及び、
グループ化情報に基づき
前記決定された１以上の範囲ウィンドウ演算子を前記列スライディングウィンドウ演算子に置き換え、列ｒｓｔｒｅａｍサイズを範囲ｒｓｔｒｅａｍサイズと間隔値との比に基づいて設定すること、
又は
前記決定された１又は複数の範囲ウィンドウ演算子を前記分割列スライディングウィンドウ演算子に置き換え、分割列ｒｓｔｒｅａｍサイズを、範囲ｒｓｔｒｅａｍサイズと間隔値との比に基づいて設定すること、
の一方を含む、計算機プログラム。
【請求項５】
請求項４に記載の計算機プログラムであって、前記命令は、前記クエリ実行部の後に、前記クエリ実行部の出力のタイムスタンプを変更する出力タプルタイムスタンプ調整部を挿入することをさらに含む、計算機プログラム。
【請求項６】
請求項５に記載の計算機プログラムであって、前記出力タプルタイムスタンプ調整部は、前記タイムスタンプを、前記出力の間隔及び出力調整情報に基づいて、変更する、計算機プログラム。
【請求項７】
請求項１に記載の計算機プログラムであって、前記命令は、
ストリームデータ間隔定義コマンド及びｒｓｔｒｅａｍ出力間隔定義コマンドのために、クエリ登録コマンドを処理し、
前記１以上のストリームデータ間隔定義を、前記ストリームデータ間隔定義コマンドに基づいて更新し、
１以上のｒｓｔｒｅａｍ出力間隔定義を、前記ｒｓｔｒｅａｍ出力間隔定義コマンドに基づいて、更新する、ことをさらに含む、計算機プログラム。
【請求項８】
請求項１に記載の計算機プログラムであって、前記命令は、クエリ登録コマンドを受信した場合に、
クエリにおける範囲スライディングウィンドウ句を列スライディングウィンドウ句に変換し、
前記クエリにおける範囲ｒｓｔｒｅａｍ句を列ｒｓｔｒｅａｍ句に変換し、
前記クエリから実行木を生成する、ことをさらに含む、計算機プログラム。
【請求項９】
請求項１に記載の計算機プログラムであって、
前記決定された１以上の範囲ウィンドウ演算子は、１以上の範囲ストリーム句を含み、
前記決定された１以上の範囲ウィンドウ演算子を、前記列スライディングウィンドウ演算子又は前記分割列スライディングウィンドウ演算子の一方に変換することは、
グループ化情報に基づいて、
前記１以上の範囲ｒｓｔｒｅａｍ句を列ｒｓｔｒｅａｍ句に置き換え、列ｒｓｔｒｅａｍサイズを範囲ｒｓｔｒｅａｍサイズと間隔値との比に基づいて設定すること、
又は
前記１以上の範囲ｒｓｔｒｅａｍ句を分割列ｒｓｔｒｅａｍ句に置き換え、分割列ｒｓｔｒｅａｍサイズを範囲ｒｓｔｒｅａｍサイズと間隔値との比に基づいて設定する、ことの一方を含む、計算機プログラム。
【請求項１０】
１以上のストリームデータ間隔定義を、ストリームデータ間隔情報から決定し、
ストリームデータの定期的な到着を検出する入力間隔チェック部を、前記１以上のストリームデータ間隔定義に基づいて生成し、
前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義のために、クエリ実行部を構成する、ことを含み、
前記クエリ実行部を構成することは、
前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義と関連づけられた前記クエリ実行部の１以上の範囲ウィンドウ演算子を決定し、
前記決定された１以上の範囲ウィンドウ演算子を、列スライディングウィンドウ演算子又は分割列スライディングウィンドウ演算子の一方、に変更し、
前記クエリ実行部の列ウィンドウサイズを調整する、方法。
【請求項１１】
請求項１０に記載の方法であって、
前記クエリ実行部を構成することは、
前記ストリームデータの周期的な到着が調整される場合、間隔調整タプル生成部を挿入し、前記入力間隔チェック部と接続する、ことを含み、
前記間隔調整タプル生成部は、１以上の超過タプルを受信した場合に少なくとも一つのタプルを廃棄し、タプルの省略を検出した場合に間隔調整タプルを挿入する、方法。
【請求項１２】
請求項１１に記載の方法であって、
前記ストリームデータの周期的な到着が調整される場合、
受信されたタプルの数が受信すべき間隔より大きい場合に、前記ストリームデータの前記周期的な到着からタプルを廃棄し、
受信されたタプルの数が受信すべき間隔より小さい場合に、前記間隔調整タプル生成部における間隔調整バッファから同一グループ化値を有する前回タプルを挿入し、
前記間隔調整タプル生成部における前記間隔調整バッファから前記同一グループ化値を有する前記前回タプルを削除する、ことを含む、方法。
【請求項１３】
請求項１０に記載の方法であって、ｒｓｔｒｅａｍ出力間隔定義コマンドを受信すると、１以上のｒｓｔｒｅａｍ出力間隔定義を更新することを含み、
前記決定された１以上の範囲ウィンドウ演算子を、前記列スライディングウィンドウ演算子又は前記分割列スライディングウィンドウ演算子の一方に変更することは、
クエリからｒｓｔｒｅａｍ演算子を決定すること、及び、
グループ化情報に基づき
前記決定された１以上の範囲ウィンドウ演算子を前記列スライディングウィンドウ演算子に置き換え、列ｒｓｔｒｅａｍサイズを範囲ｒｓｔｒｅａｍサイズと間隔値との比に基づいて設定すること、
又は
前記決定された１又は複数の範囲ウィンドウ演算子を前記分割列スライディングウィンドウ演算子に置き換え、分割列ｒｓｔｒｅａｍサイズを、範囲ｒｓｔｒｅａｍサイズと間隔値との比に基づいて設定すること、
の一方を含む、方法。
【請求項１４】
請求項１３に記載の方法であって、前記クエリ実行部の後に、前記クエリ実行部の出力のタイムスタンプを変更する出力タプルタイムスタンプ調整部を挿入することをさらに含む、方法。
【請求項１５】
プロセッサを含むサーバであって、前記プロセッサは、
１以上のストリームデータ間隔定義を、ストリームデータ間隔情報から決定し、
ストリームデータの定期的な到着を検出する入力間隔チェック部を、前記１以上のストリームデータ間隔定義に基づいて生成し、
前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義のために、クエリ実行部を構成し、
前記クエリ実行部の構成を、
前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義と関連づけられた前記クエリ実行部の１以上の範囲ウィンドウ演算子を決定し、
前記決定された１以上の範囲ウィンドウ演算子を、列スライディングウィンドウ演算子又は分割列スライディングウィンドウ演算子の一方、に変更し、
前記クエリ実行部の列ウィンドウサイズを調整する、ことにより行う、サーバ。
【請求項１６】
請求項１５に記載のサーバであって、
前記プロセッサは、前記ストリームデータの周期的な到着が調整される場合、間隔調整タプル生成部を挿入し、前記入力間隔チェック部と接続することにより、前記クエリ実行部を構成し、
前記間隔調整タプル生成部は、１以上の超過タプルを受信した場合に少なくとも一つのタプルを廃棄し、タプルの省略を検出した場合に間隔調整タプルを挿入する、サーバ。
【請求項１７】
請求項１６に記載のサーバであって、前記プロセッサは、
前記ストリームデータの周期的な到着が調整される場合、
受信されたタプルの数が受信すべき間隔より大きい場合に、前記ストリームデータの前記周期的な到着からタプルを廃棄し、
受信されたタプルの数が受信すべき間隔より小さい場合に、前記間隔調整タプル生成部における間隔調整バッファから同一グループ化値を有する前回タプルを挿入し、
前記間隔調整タプル生成部における前記間隔調整バッファから前記同一グループ化値を有する前記前回タプルを削除する、サーバ。
【請求項１８】
請求項１５に記載のサーバであって、
前記プロセッサは、
ｒｓｔｒｅａｍ出力間隔定義コマンドを受信すると、１以上のｒｓｔｒｅａｍ出力間隔定義を更新し、
前記決定された１以上の範囲ウィンドウ演算子を、前記列スライディングウィンドウ演算子又は前記分割列スライディングウィンドウ演算子の一方に変更し、
前記一方への変更において、
クエリからｒｓｔｒｅａｍ演算子を決定し、
グループ化情報に基づき
前記決定された１以上の範囲ウィンドウ演算子を前記列スライディングウィンドウ演算子に置き換え、列ｒｓｔｒｅａｍサイズを範囲ｒｓｔｒｅａｍサイズと間隔値との比に基づいて設定すること、
又は
前記決定された１又は複数の範囲ウィンドウ演算子を前記分割列スライディングウィンドウ演算子に置き換え、分割列ｒｓｔｒｅａｍサイズを、範囲ｒｓｔｒｅａｍサイズと間隔値との比に基づいて設定すること、
の一方を実行する、サーバ。
【請求項１９】
請求項１８に記載のサーバであって、前記プロセッサは、前記クエリ実行部の後に、前記クエリ実行部の出力のタイムスタンプを変更する出力タプルタイムスタンプ調整部を挿入する、サーバ。
【請求項２０】
請求項１９に記載のサーバであって、前記出力タプルタイムスタンプ調整部は、前記タイムスタンプを、前記出力の到着間隔及び出力調整情報に基づいて変更する、サーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
開示される実施例は、計算機システムに関し、特に、時間調整を使用したストリームデータ処理方法に関する。
【背景技術】
【０００２】
ストリームデータ処理が関連技術において広く使用されている。データベース管理システム（以下ＤＢＭＳ）に連続的に到着するデータに対してリアルタイム処理を実行するデータ処理システム、に対する需要が増しており、そのようなシステムは、ストレージシステムに格納されているデータに対して処理を行う。例えば、株式取引を行うシステムにおいて、株価の変化に対していかに速く反応できるかということは最も大きな要素の一つである。従来のＤＢＭＳにより実行されるような方法では、株式データがまずはストレージシステムに格納され、その後、格納されたデータが検索されるため、株価の変化のスピードに従ってすぐに応答することができず、ビジネスチャンスを失う可能性がある。
【０００３】
例えば、関連技術は、格納されているクエリを定期的に発行する機構を含む。しかし、当該機構をリアルタイムデータ処理に適用し、株価のようなデータの入力後、すぐにクエリを実行することは困難である。
【０００４】
連続的に到着するデータはストリームデータと定義され、ストリームデータのリアルタイム処理に適したデータ処理システムとして、ストリームデータ処理システムが提案されている。
【０００５】
ストリームデータ処理システムにおいて、まず、クエリがシステムに登録され、クエリは、データが到着する度に連続的に実行される。これは、関連技術のＤＢＭＳとは異なる。関連技術の実装例は、スライディングウィンドウを備え、ストリームデータを効率的に処理するために部分的にストリームデータを切り出し、データに寿命を与える。スライディングウィンドウの仕様を含むクエリ記述言語の例として、関連技術におおけるＣＱＬ（Continuous Query Language）が存在する。ＣＱＬは、スライディングウィンドウを特定するための拡張を含み、ＳＱＬ（Structured Query Language）のＦＲＯＭ句においてストリーム名に続く括弧を使用する。これは、関連技術におけるＤＢＭＳにおいて広く使用されている。
【０００６】
スライディングウィンドウを特定するための二種類の方法が関連技術において存在する。（１）一つの方法は、切り出すデータ列の数を特定する。（２）もう一つの方法は、切り出すデータ列を含む期間を特定する。例えば、“Rows 50 Preceding”は、（１）の関連技術の例であり、５０列に相当するデータが処理のために切り出される。“Range 15 Minutes Preceding”は（２）の関連技術の例であり、１５分のデータが処理のために切り出される。（１）の場合、データ寿命は５０個のデータが到着するまでと定義される。（２）の場合、データ寿命は、１５分と定義される。スライディングウィンドウにより切り出されるストリームデータは、メモリに格納され、クエリ処理に使用される。
【０００７】
ストリームデータにおいて、ネットワークや装置等の状態によって、データの到着が遅延することがある。例えば、センサノードは、ネットワークが切れている場合には、データを送信せず、接続が再度確立したときに、まとめてデータを送信する。
【０００８】
開発者は、センサ状態を監視し、なんらかの異常点を捉えて将来の障害を予想するために、特定の期間においてストリームデータを維持するようにＣＱＬを記述する場合がある。
【０００９】
関連技術によるストリームデータ処理サーバは、ストリームデータを、データの到着タイムスタンプに基づいて処理する。データが遅延して到着した場合、到着タイムスタンプに基づく特定の期間内の集約結果は、データ送信元タイムスタンプに基づく結果と異なる。
【００１０】
いくつかの種類のストリームデータ処理サーバは、データ送信元タイムスタンプに基づいてストリームデータを処理することができる。しかし、サーバは、全てのデータがサーバに到着するまで待つ必要がある。その結果。処理のレイテンシが長くなる。
【００１１】
図１において、センサ１０１〜１０３は、ストリームデータ処理サーバ１２１に、ネットワーク（ＮＷ）１１１によって接続されている。開発クライアント１３１は、ＣＱＬで記述されたクエリ１５１をストリームデータ処理サーバ１２１に送信する。ストリームデータ処理サーバ１２１は、開発クライアント１３１に送信されたクエリに基づいて処理を行う。視覚化クライアント１３２は、ストリームデータ処理サーバ１２１における処理結果を表示する。ファイルサーバ１３３は、ストリームデータ処理サーバ１２１における処理結果を格納する。タプル１４１〜１４３は、センサ１０１により送信される。タプル１４４〜１４６は、センサ１０２により送信される。これらタプルは、処理されて、対応するタプル１７１〜１７６となる。
【００１２】
例えばセンサ１０１は、タプル１４１（ストリームデータにおける各レコード）を、タイムスタンプ“９：００：０１”と共にストリームデータ処理サーバ１２１に送信する。センサ１０２も、タプル１４４を、タイムスタンプ“９：００：０１”と共にストリームデータ処理サーバ１２１に送信する。センサ１０１の値の３秒間の和は、９：００：０３における“１＋２＋３＝６”と計算される（タプル１７３）。
【００１３】
タプル１４６が、ストリームデータ処理サーバ１２１に、ＮＷの状態による遅延で“９：００：０４”に到着すると、センサ１０２の値の３秒間の和は、“１＋２＝３”と計算されるが、開発者１６１は、“１＋２＋３＝６”の結果を予想している。
【００１４】
図２は、クエリ１５１のタイムチャート、“rstream [1 second] (select id, sum(val) from S1 [range 3 second] group by id)”、を示す。これは、ストリームデータ処理サーバ１２１が、１秒毎に、３秒間のストリームデータＳ１を維持し、各グループ“ｉｄ”においてその和を計算し、現在のｉｄと和データ（ｉｄ，ｓｕｍ（ｖａｌ））を出力する、ことを意味する。
【００１５】
タプル２０１〜２０９、２１１−２１９は、様々な時間間隔で送信され、Ｒａｎｇｅ  ３  ｓｅｃｏｎｄ関数によって処理されてタプル２２１〜２２９、２３１〜２３９となり、２４１〜２５１、２６１〜２７１でｓｕｍ（ｖａｌ）関数を経て、２８１〜２８９、２９１〜２９９でＲＳｔｒｅａｍに返される。ここで、タプル２０１は９：００：０１に到着する。タプル２０４は９：００：０４より後に到着するが、タプル２０４は９：００：０４のデータ送信元タイムスタンプを有する。
【００１６】
各黒色円、各白色円、及び二つの円をつなぐ各線は、各タプルの予め決められた寿命（本例において３秒）を示している。例えば、タプル２２１は、（データ送信元タイプスタンプ、センサＩＤ、値）＝（９：００：０１、ａ、１）の値を有し、その寿命は９：００：０１から９：００：０４までである。なお、黒色円は現在時点が含まれていることを示し、白色円は現在時点が含まれていないことを示す。
【００１７】
例えば、センサ“ａ”の９：００：０３における和は、６（タプル２４３）である。なぜなら、タプル２２１〜２２３が、その寿命において存在しているからである。９：００：０４において、タプル２２１の寿命が終了する。和は、５（タプル２４４）に変化する。タプル２０４が到着した後、和は、９に変化する。データ送信元タイムスタンプに基づけば、９：００：０４における和は９となるべきはずである。しかし、実際の結果は５である。同様に、９：００：０７における結果は２２（タプル２４８）であるが、データ送信元タイムスタンプに基づく結果は１８でとなるはずである。
【００１８】
ＲＳｔｒｅａｍ［１ｓｅｃｏｎｄ］は、１秒毎に、現在の和の結果を出力する。タプル２８３（ａ、６）は、９：００：０３に送信され、タプル２８４（ａ、５）は、９：００：０４に送信される。データ送信元タイプスタンプに基づけば、タプル２８４は（ａ、６）となるはずである。しかし、実際の結果は、遅延のために（ａ、５）である。同様に、９：００：０６における結果は、タプル２８７（ａ、２２）であるが、データ送信元タイプスタンプに基づく結果は（ａ、１８）となるべきである。結果的に、データ送信元タイムスタンプに基づく結果を、ストリームデータ処理サーバにおいて、到着タイムスタンプに基づき与えることは、困難となる。
【発明の概要】
【００１９】
本願の態様は、処理を実行する命令を含む計算機プログラムを含んでもよい。前記命令は、１以上のストリームデータ間隔定義を、ストリームデータ間隔情報から決定し、ストリームデータの定期的な到着を検出する入力間隔チェック部を、前記１以上のストリームデータ間隔定義に基づいて生成することを含んでもよい。前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義のために、前記命令は、さらに、クエリ実行部を構成する、ことを含んでもよく、前記クエリ実行部は、前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義と関連づけられた前記クエリ実行部の１以上の範囲ウィンドウ演算子を決定し、前記決定された１以上の範囲ウィンドウ演算子を、列スライディングウィンドウ演算子又は分割列スライディングウィンドウ演算子の一方、に変更し、前記クエリ実行部の列ウィンドウサイズを調整する、ことにより構成されてもよい。計算機プログラムは、計算機読み取り可能な記憶媒体又は計算機読み取り可能な信号媒体に、所望の実装に従って格納することができる。
【００２０】
本願の態様は、ある方法を含む。当該方法は、１以上のストリームデータ間隔定義を、ストリームデータ間隔情報から決定し、ストリームデータの定期的な到着を検出する入力間隔チェック部を、前記１以上のストリームデータ間隔定義に基づいて生成することを含んでもよい。当該方法は、さらに、前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義のためにクエリ実行部を構成することを含んでもよく、前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義と関連づけられた前記クエリ実行部の１以上の範囲ウィンドウ演算子を決定し、前記決定された１以上の範囲ウィンドウ演算子を、列スライディングウィンドウ演算子又は分割列スライディングウィンドウ演算子の一方、に変更し、前記クエリ実行部の列ウィンドウサイズを調整する、ことにより前記クエリ実行部を構成してもよい。
【００２１】
本願の態様は、サーバ／計算プラットフォームを含んでもよく、１以上のストリームデータ間隔定義を、ストリームデータ間隔情報から決定し、ストリームデータの定期的な到着を検出する入力間隔チェック部を、前記１以上のストリームデータ間隔定義に基づいて生成する、プロセッサを含むことができる。プロセッサは、前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義のために、さらにクエリ実行部を構成し、前記クエリ実行部は、前記１以上のストリームデータ間隔定義の各ストリームデータ間隔定義と関連づけられた前記クエリ実行部の１以上の範囲ウィンドウ演算子を決定し、前記決定された１以上の範囲ウィンドウ演算子を、列スライディングウィンドウ演算子又は分割列スライディングウィンドウ演算子の一方、に変更し、前記クエリ実行部の列ウィンドウサイズを調整してもよい。
【図面の簡単な説明】
【００２２】
【図１】ストリームデータ処理サーバを含むシステム例を示す。
【図２】ｒｓｔｒｅａｍを使用してタプルを処理する例を示す。
【図３】実施例に係る、タプルの処理例を示す。
【図４Ａ】実施例に係る、ストリームデータ処理サーバの例を示す。
【図４Ｂ】実施例に係る、パースされたクエリ実行部を示す。
【図５】実施例に係る、クエリ例を示す。
【図６】実施例に係る、ストリームデータ間隔定義テーブルを示す。
【図７】実施例に係る、ＲＳｔｒｅａｍ出力間隔定義テーブルを示す。
【図８】実施例に係る、ストリームデータ処理サーバにおいて実行される全体処理を示すフローチャート例を示す。
【図９】実施例に係る、クエリをパースするフロー図を示す。
【図１０】実施例に係る、範囲スライディングウィンドウを置き換えるフロー図を示す。
【図１１】実施例に係る、範囲ｒｓｔｒｅａｍを置き換えるフロー図を示す。
【図１２Ａ】実施例に係る、クエリを実行するフロー図を示す。
【図１２Ｂ】図１２Ａの代替フロー図例である。
【図１３】ストリームデータ処理サーバの実施例を示す。
【図１４】実施例に係る、クエリ例を示す。
【図１５】実施例に係る、ストリームデータ処理サーバにおいて実行される全体処理を示すフローチャート例を示す。
【図１６】ストリームデータ処理サーバの実施例を示す。
【図１７】実施例に係る、ストリームデータ処理サーバにおいて実行される全体処理を示すフローチャート例を示す。
【図１８】実施例に係る、範囲スライディングウィンドウを置き換えるフロー図例を示す。
【図１９】実施例に係る、範囲スライディングウィンドウを置き換えるフロー例を示す。
【図２０】実施例に係る、クエリ例を示す。
【発明を実施するための形態】
【００２３】
図面を参照していくつかの実施例が記述される。ここで説明する実施例は、本発明の概念を何ら限定するものではなく、本実施例で説明される１又は複数の要素は必ずしも本発明概念を実施するために必須ものではない。さらに、特定の要素は単数で参照されることがあるが、それら要素は必ずしも単数ではなく、所望の実装に従って、１又は複数の同様の要素と共に実装されてもよい。
【００２４】
下記において、プログラムが、処理の説明における主語とされる場合がある。プログラムはプロセッサにより実行され、プログラムは、予め決められた処理動作を行う。したがって、実行されているプログラムを、プロセッサとすることも可能である。プログラムを主語として説明されている処理は、プログラムを実行するプロセッサ又は当該プロセッサを含む装置（例えば、制御デバイス、コントローラ、又はストレージシステム）によって実行される処理でもある。さらに、プロセッサがプログラムを実行するときに実行される処理の一部又は全部は、プロセッサに代えて又は加えて、ハードウェア回路によって実行することもできる。
【００２５】
プログラムのための命令は、計算機読み取り可能な記憶媒体に格納することができ、記憶媒体は、フラッシュメモリ、ランダムアクセスメモリ（ＲＡＭ）、ハードディスクドライブ（ＨＤＤ）等の有体の記憶媒体を含む。または、命令は、計算機読み取り可能な信号媒体の形で格納することができ、信号媒体は搬送波等の他の媒体を含む。
【００２６】
ここで説明される実施例は、特定期間のストリームデータを保持する範囲ウィンドウを、特定量のストリームデータを保持する列ウィンドウに置き換える。同様に、本実施例は、特定期間毎に結果を出力する範囲ｒｓｔｒｅａｍを、特定量毎に結果を出力する列ｒｓｔｒｅａｍに置き換える。
【００２７】
図３は、実施例に係るタプルの処理例を示す。特に、図３は、クエリのタイムチャートを示す。タプル２０１〜２１９は、図２と同様である。タプル２０１〜２１９は、１秒毎に送信される。クエリは、図２に示すように、３秒データを保持する。３秒間保持すること（Range 3 second）は、３つの量を保持すること（Partition by three id rows）と同じであり、タプル３２１〜３２９、３３１〜３３９は、Partition by id Rows 3関数から得られるタプルである。タプルは、図２に示すように合計され、タプル３４１〜３４９、３６１〜３６９が与えられる。それらはＲＳｔｒｅａｍに送られ、結果としてタプル３８１〜３８９、３９１〜３９９が与えられる。
【００２８】
タプル２２１の寿命は、９：００：０４に終了する。しかし、タプル３２１の寿命は、９：００：０４の後まで続く。その結果、９：００：０４における和は、まだ６（タプル３４３）である。タプル２０４が到着した後、和は９（タプル３４４）に変更される。同様に、タプル２４８は、図３に示されていない。Ｒｏｗ  ＲＳｔｒｅａｍは、特定量毎（本例において１タプル毎）に、現在の結果を出力する。図２におけるタプル２８４（ａ、５）は、タプル３８４（ａ、６）に変更される。なお、タプル３８４は、９：００：０４より後に出力される。
【００２９】
したがって、サーバは、データ送信元タイムスタンプに基づく結果を、ストリームデータ処理サーバにおいて、到着タイムスタンプに基づいて与えることができる。これにより、データ送信元タイムスタンプに基づく方法よりも小さいレイテンシが実現される。これは、サーバが、全てのデータが当該サーバに到着するまで待つ必要がないからである。
【００３０】
＜実施例１＞
図４Ａは、実施例に係る、ストリームデータ処理サーバ１２１の例を示す。ストリームデータ処理サーバ１２１は、メモリ４０２、１又は複数の中央演算ユニット（ＣＰＵ）４０１、ネットワークインタフェースコントローラ４０３、ホストバスアダプタ（ＨＢＡ）４０４、１又は複数のＨＤＤ４０５、を含むことができる。図４Ａにおいて、ストリームデータ間隔設定部４１１は、ストリームデータ間隔設定コマンドを受信し、ストリームデータ間隔定義テーブル４１８を更新する。ＲＳｔｒｅａｍ出力間隔設定部４１２は、ｒｓｔｒｅａｍ出力間隔設定コマンドを受信し、ＲＳｔｒｅａｍ出力間隔定義テーブル４１９を更新する。クエリパーサ４１３は、クエリ１５１をパースして、クエリ実行部４３１を生成する。入力間隔チェック生成部４１４は、入力間隔チェック部４３２をクエリ実行部４３１の前に挿入し、さらに、間隔調整タプル生成部４３３を挿入して、入力間隔チェック部４３２と接続する。列ウィンドウ変換部４１５は、範囲スライディングウィンドウ演算子を、列スライディング演算子に置き換える。
【００３１】
ＲＳｔｒｅａｍ変換部４１６は、範囲ｒｓｔｒｅａｍ演算子を、列ｒｓｔｒｅａｍ演算子に置き換える。詳細は、図１０において与えられる。
【００３２】
出力タイムスタンプ調整生成部４１７は、出力タプルタイムスタンプ調整部４３４を、クエリ実行部４３１の後ろに挿入する。詳細は、図１１において与えられる。
【００３３】
クエリ実行部４３１は、スライディングウィンドウや結合等の複数の演算子を含む。演算子は、キューに接続され、キューは、演算子の実行順序を、ジョブスケジューリングアルゴリズム（ラウンドロビン、実行木における葉から根、等）を利用して管理する。クエリ実行部４３１は、入力ストリーム１４１〜１４８を受信し、出力ストリーム１７１〜１７６を出力する。
【００３４】
入力間隔チェック部４３２は、ストリームデータが定期的に到着するか確認する。ストリームデータが定期的に到着しない場合、当該ストリームデータは、間隔調整タプル生成部４３３により処理される。間隔調整タプル生成部４３３は、想定数より多くのタプルが到着している場合にタプルを廃棄し、タプルが失われている又は省略されている場合には、間隔調整タプルを挿入する。
【００３５】
出力タプルタイムスタンプ調整部４３４は、到着間隔に基づく結果のタイムスタンプを変更する。
【００３６】
列スライディングウィンドウ演算子４４１、４４４、４４５は、それぞれ、ストリームデータからデータ列を切り出し、ストリームデータをタプル集合に変換する処理を行う。２種類の、列スライディングウィンドウ演算子が存在する。一つの列スライディングウィンドウ演算子は、Ｓ１のようなデータのストリーム全体における特定量のデータを保持し、分割列スライディングウィンドウ演算子は、データストリームにおけるセンサｉｄのような各グループにおいて特定量のデータを保持する。
【００３７】
集約演算子４４２は、和、平均、最大値、最小値、個数、分散、標準偏差、中央値等の導出に代表される、集約処理を行う。
【００３８】
列ＲＳｔｒｅａｍ演算子４４３、４４８は、特定量において、タプル集合を出力ストリームに変換する処理を行う。２種類の列ＲＳｔｒｅａｍ演算子が存在する。一つの列ＲＳｔｒｅａｍ演算子は、出力全体において特定量のデータの結果を出力し、分割列ＲＳｔｒｅａｍ演算子は、データストリーム上の各グループにおいて特定量のデータの結果を出力する。
【００３９】
結合演算子４４６は、所定の条件の下で、２以上のストリームデータを結合する処理を行う。結合演算子４４６は、一時記憶を有し、一時的な結合結果を保持する。
【００４０】
射影演算子４４７は、複数のカラムのうちの一部のみを出力する処理を行う。
【００４１】
図４Ａに示す演算子に加え、タイムスタンプを入力タプルに追加するスキャン演算子、タプルが予め決められた条件に基づいて出力されているか判定する処理を行うフィルタ演算子、二つの入力の双方の出力をマージする統合演算子、特定の一つのカラム（又は複数のカラム）における順位を計算する順位演算子、さらに、他のこれらのような演算子が存在する。クエリ実行部４３１は、所望の実装に応じて、上記のような演算子を含む又は省くように構成することができる。
【００４２】
図４Ｂは、実施例に係る、パースされたクエリ実行部を示す。クエリ実行部４６１は、クエリ実行部４３１、入力間隔チェック部４３２、間隔調整タプル生成部４３３、出力タプルタイムスタンプ調整部４３４に変換される。範囲スライディングウィンドウ演算子４５１、４５４、４５５は、データをある長さの期間から切り出す。範囲ＲＳｔｒｅａｍ４５３、４５８は、特定の期間毎に、タプル集合をストリームデータに変換する処理を行う。
【００４３】
図５は、実施例に係る、クエリの例を示す。ストリーム登録コマンド５０１は、コマンドをストリームデータ処理サーバに登録することを指示する。Ｓ１は、三つのカラムを有し、タイプスタンプタイプとしてのｄｓＴｉｍｅ、ストリングタイプとしてのｉｄ、フロートタイプとしてのｖａｌを有する。５０２において、クエリ名はＱ１である（register query Q1）。当該クエリは、過去３秒間の範囲内でＳ１という名のストリームのタプルを保持する（FROM S1 [Range 3 second]）。さらに、各ｉｄにおけるｖａｌカラムの和を計算する（...sum(val)...group by id）。そして、１秒毎に現在の結果を出力する（rstream [1 second]）。５０３において、クエリ名はＱ２である（register query Q2）。当該クエリは、過去５秒間の範囲内でＳ１という名のストリームのタプルを保持し(FROM S1 [Range 5 second]）、過去１２秒間の範囲内でＳ２という名のストリームのタプルを保持する（FROM S2 [Range 12 second]）。その後、“S1.id = S2.id”の条件において（where S1.id=S2.id)、Ｓ１とＳ２とを結合し、さらに、結合結果から複数のカラム“S1.id、S1.val、S2.val”を抽出する(select S1.id, S1.val, S2.val)。現在結果は、６０秒毎に出力される（rstream [60 second]）。
【００４４】
ストリーム登録コマンド５０１〜５０３が、クエリパース方法を使用してパースされる場合、図４Ｂが生成される。範囲スライディングウィンドウ及び範囲ｒｓｔｒｅａｍが列スライディングウィンドウ及び列ｒｓｔｒｅａｍに移された後、演算子４４１〜４４８が生成される。
【００４５】
図６は、実施例に係る、ストリームデータ間隔定義テーブルを示す。ストリームデータ間隔定義テーブルは、ストリームデータ間隔情報を管理し、ストリーム欄６０１、グループ化欄６０２、間隔欄６０３、間隔調整欄６０４を含む。例示されたエントリにおいて、Ｓ１行６１１は、ストリーム名が“Ｓ１”であり、グループ化欄が“ｉｄ”であり、間隔欄が”１秒”であり、間隔調整欄が“ｎｏ”である、ことを示している。Ｓ２行６１２は、間隔欄が“３秒”であり、間隔調整欄が“ｙｅｓ”である、ことを示している。
【００４６】
図７は、実施例に係る、ＲＳｔｒｅａｍ出力間隔定義テーブルを示す。ＲＳｔｒｅａｍ出力間隔定義テーブルは、ｒｓｔｒｅａｍ出力間隔情報を管理し、クエリ欄７０１、グループ化欄７０２、間隔欄７０３、出力調整欄７０４を含む。例示されたエントリにおいて、Ｑ１行７１１は、クエリ名が“Ｑ１”であり、グループ化欄が“id”であり、出力間隔が“１秒”であり、出力調整関数が“ｎｏ”である、ことを示している。Ｑ１行７１２は、出力間隔が“３秒”であり、出力調整関数が“ｙｅｓ”である、ことを示している。
【００４７】
図８は、実施例に係る、ストリームデータ処理サーバ１２１において実行される全体的な処理を示すフローチャート、を示している。処理は、ステップ８０１において開始する。ステップ８０２において、ストリームデータ間隔設定部４１１は、入力コマンドがストリームデータ間隔定義コマンドであるか判定する。その場合（Ｙｅｓ）、ストリームデータ間隔設定部４１１は、ステップ８０３において、ストリームデータ間隔定義テーブルを更新する。ステップ８０４において、ＲＳｔｒｅａｍ出力間隔設定部４１２は、入力コマンドがｒｓｔｒｅａｍ出力間隔定義コマンドであるか判定する。その場合（Ｙｅｓ）、ＲＳｔｒｅａｍ出力間隔設定部４１２は、ステップ８０５において、ＲＳｔｒｅａｍ出力間隔定義テーブルを更新する。ステップ８０６において、クエリパーサ４１３は、入力コマンドがクエリ登録コマンドであるか判定する。その場合（Ｙｅｓ）、クエリパーサ４１３は、ステップ８０７において、クエリをパースする。ステップ８０８において、クエリ実行部４３１は、クエリを実行する。ステップ８０９において、ＲＳｔｒｅａｍ出力間隔設定部４１２は、入力コマンドがシステム終了コマンドであるか判定する。その場合（Ｙｅｓ）、処理はステップ８１０において終了し、そうでない場合、処理はステップ８０２に戻る。
【００４８】
図９は、実施例に係る、クエリをパースするステップ８０７のフロー図を示す。ステップ９０１において、クエリパーサ４１３は、図４Ｂに示すように、クエリをパースし、実行木４３１を生成する。ステップ９０２において、列ウィンドウ変換部４１５は、図１０に示すように、範囲スライディングウィンドウ演算子を、列スライディングウィンドウ演算子に置き換える。ステップ９０３において、ＲＳｔｒｅａｍ変換部４１６は、図１１に示すように、範囲ｒｓｔｒｅａｍ演算子を、列ｒｓｔｒｅａｍ演算子に置き換える。処理は、ステップ９０４で終了する。
【００４９】
図１０は、実施例に係る、範囲スライディングウィンドウを置き換えるステップ９０２のためのフロー図を示す。ステップ１００１において、列ウィンドウ変換部４１５は、図６に示すようなストリームデータ間隔定義テーブル４１８を参照する。ステップ１００２において、入力間隔チェック生成部４１４は、入力間隔チェック部４３２を、ストリームデータ入力１４１〜１４８とクエリ実行部４３１との間に挿入する。ステップ１００３において、列ウィンドウ変換部４１５は、次のストリーム定義行をストリームデータ間隔定義テーブル４１８において参照する。ステップ１００４において、列ウィンドウ変換部４１５は、ストリーム欄６０１の値を使用する範囲ウィンドウ演算子を特定する。ステップ１００５において、列ウィンドウ変換部４１５は、ストリームデータ間隔定義テーブル４１８におけるグループ化欄６０２の値が、設定されているか判定する。されていない場合（Ｎｏ）、列ウィンドウ変換部４１５は、ステップ１００６において、範囲スライディングウィンドウ演算子を、列スライディングウィンドウ演算子に置き換える。列ウィンドウ変換部４１５は、その後、列ウィンドウサイズを“（範囲ウィンドウサイズ／間隔値）”に設定する。
【００５０】
その場合（Ｙｅｓ）、ステップ１００７において、列ウィンドウ変換部４１５は、範囲スライディングウィンドウ演算子を、分割列スライディングウィンドウ演算子に置き換え、分割グループをグループ化欄６０２の値に設定し、さらに、分割列ウィンドウサイズを“（範囲ウィンドウサイズ／間隔値）”に、設定する。ステップ１００８において、入力間隔チェック生成部４１４は、４１８における間隔調整欄６０４の値が“ｙｅｓ”であるか判定する。そうである場合（Ｙｅｓ）、ステップ１００９において、入力間隔チェック生成部４１４は、間隔調整タプル生成部４３３を挿入し、入力間隔チェック部４３２と接続する。ステップ１０１０において、列ウィンドウ変換部４１５は、ストリームデータ間隔定義テーブル４１８において、最後のストリーム定義行であるか判定する。その場合（Ｙｅｓ）、処理はステップ１０１１において終了し、そうではない場合（Ｎｏ）、処理はステップ１００３から繰り返される。
【００５１】
図１１は、実施例に係る、範囲ｒｓｔｒｅａｍを置き換えるステップ９０３のためのフロー図の例を示す。ステップ１１０１において、ＲＳｔｒｅａｍ変換部４１６は、図７に示すＲＳｔｒｅａｍ出力間隔定義テーブル４１９を参照する。ステップ１１０２において、ＲＳｔｒｅａｍ変換部４１６は、ＲＳｔｒｅａｍ出力間隔定義テーブル４１９において、次のクエリ定義行を参照する。ステップ１１０３において、ＲＳｔｒｅａｍ変換部４１６は、ＲＳｔｒｅａｍ出力間隔定義テーブル４１９において、クエリにおけるｒｓｔｒｅａｍ演算子を特定する。ステップ１１０４において、ＲＳｔｒｅａｍ変換部４１６は、出力間隔定義テーブル４１９においてグループ化欄７０２の値が設定されているか判定する。
【００５２】
そうではない場合（Ｎｏ）、ステップ１１０５において、ＲＳｔｒｅａｍ変換部４１６は、範囲ｒｓｔｒｅａｍ演算子を、列ｒｓｔｒｅａｍ演算子に置き換え、列ｒｓｔｒｅａｍサイズを“（範囲ｒｓｔｒｅａｍサイズ／間隔値）”に、設定する。そうである場合（Ｙｅｓ）、ステップ１１０６において、ＲＳｔｒｅａｍ変換部４１６は、範囲ｒｓｔｒｅａｍ演算子を、分割列ｒｓｔｒｅａｍ演算子に置き換え、分割グループをグループ化欄の値に設定し、分割列ｒｓｔｒｅａｍサイズを“（範囲ｒｓｔｒｅａｍサイズ／間隔値）”に、設定する。ステップ１１０７において、出力タイムスタンプ調整生成部４１７は、Ｒｓｔｒｅａｍ出力間隔定義テーブル４１９における出力調整欄７０４の値が“ｙｅｓ”であるか判定する。そうである場合（Ｙｅｓ）、ステップ１１０８において、出力タイムスタンプ調整生成部４１７は、出力タプルタイムスタンプ調整部４３４を、クエリ実行部４３１と出力１７１〜１７６との間に挿入する。ステップ１１０９において、Ｒｓｔｒｅａｍ変換部４１６は、Ｒｓｔｒｅａｍ出力間隔定義テーブル４１９において、最後のクエリ定義行か判定する。そうである場合（Ｙｅｓ）、処理はステップ１１１０で終了する。そうでない場合（Ｎｏ）、処理はステップ１１０２に進む。
【００５３】
図１０のフロー図の実行例において、図４Ｂに示すクエリ実行部４６１は、ステップ９０１の後に生成される。図１０におけるステップ１００２において、入力間隔チェック部４３２は、ストリームデータ入力１４１〜１４６とクエリ実行部４６１との間に挿入される。ステップ１００３において、処理は、図６に示すストリームデータ間隔定義テーブル４１８においてＳ１行６１１を参照する。ステップ１００４において、図５が示すように、Ｓ１はクエリ５０２で使用されており（"from S1 [range 3 second]"）、また、クエリ５０３で使用されている（"from S1 [range 5 second], S2 [range 12 second]"）。範囲スライディングウィンドウ演算子４５１、４５４は、特定されている。ステップ１００５におけるフローがＹｅｓである場合、ステップ１００７において、処理は範囲スライディングウィンドウ演算子４５１、４５４を分割列スライディングウィンドウ演算子に移す。分割グループは、グループ化欄６０２の値（"id"）に設定され、分割列ウィンドウサイズは、（範囲ウィンドウサイズ（３秒）／間隔値（１秒）＝３）に設定される。これは、“S1 [partition by id rows 3]”と同様である。
【００５４】
ステップ１００８におけるフローがＮｏであり、さらに、ステップ１０１０におけるフローがＮｏである場合、ステップ１００３におけるフローは、ストリームデータ間隔定義テーブル４１８におけるＳ２行６１２を参照する。ステップ１００４において、Ｓ２は、図５においてクエリ５０３で使用されている（"from S1 [range 5 second], S2 [range 12 second]"）。範囲スライディングウィンドウ演算子４５５は特定されている。フローがステップ１００５においてＮｏである場合、ステップ１００６におけるフローは、範囲スライディングウィンドウ演算子４５５を列スライディングウィンドウ演算子４４４に移す。列ウィンドウサイズは、（範囲ウィンドウサイズ（１２秒）／間隔値（３秒）＝４）に設定され、これは、“S2 [rows 4]”と同様である。ステップ１００８におけるフローがＹｅｓの場合、ステップ１００９におけるフローは、間隔調整タプル生成部４３３を挿入し、入力間隔チェック部４３２に接続する。ステップ１０１０にけるフローがＹｅｓの場合、処理は終了する。
【００５５】
図１１のフロー図の実行例において、ステップ１１０２におけるフローは、図７に示すＲＳｔｒｅａｍ出力間隔定義テーブル４１９の行７１１を参照する。ステップ１１０３において、ｒｓｔｒｅａｍは、クエリ５０２に使用されており（“register query Q1 rstream [1 second]”）、範囲ｒｓｔｒｅａｍ４５３は、特定されている。ステップ１１０４におけるフローがＹｅｓである場合、ステップ１１０６におけるフローは、範囲ＲＳｔｒｅａｍ演算子４５３を分割列ＲＳｔｒｅａｍ演算子４４３に置き換え、分割グループをグループ化欄の値（“ｉｄ”）に設定し、分割列ｒｓｔｒｅａｍサイズを（範囲ｒｓｔｒｅａｍサイズ（１秒）／間隔値（１秒）＝１）に設定する。これは、“Rstream [partition by id rows 1]”と同様である。ステップ１１０７におけるフローがＮｏであり、ステップ１１０９におけるフローもＮｏである場合、ステップ１１０２におけるフローは、Ｑ２行７１２を参照する。ステップ１１０３において、ｒｓｔｒｅａｍはＱ２（５０３）において使用されている（“register query Q2 rstream [60 second]”）、そして、範囲ｒｓｔｒｅａｍ４５８は特定されている。ステップ１１４０におけるフローがＮｏである場合、ステップ１１０５におけるフローは、範囲ＲＳｔｒｅａｍ演算子４５８を列ＲＳｔｒｅａｍ演算子４４８で置き換える。列ｒｓｔｒｅａｍサイズは、（範囲ｒｓｔｒｅａｍサイズ（６０秒）／間隔値（３秒）＝２０）に設定される。これは、“Rstream [rows 20]”と同じである。ステップ１１０７におけるフローがＹｅｓの場合、ステップ１１０８におけるフローは、出力タプルタイムスタンプ調整部４３４を、クエリ実行部４３１とタプル１７１〜１７６との間に挿入する。本実施例では、フローはステップ１１０９においてＹｅｓであり、その結果、図４Ｂに示すクエリ実行部４６１は、図４Ａに示すクエリ実行部４３１に変換され、さらに、図４Ａに示す、入力間隔チェック部４３２、間隔調整タプル生成部４３３、出力タプルタイムスタンプ調整部４３４が、挿入される。
【００５６】
図１２Ａは、実施例に係る、クエリ８０８を実行するフロー図を示す。ステップ１２０１におけるフローは、図６に示すストリームデータ間隔定義テーブル４１８及び図７に示すＲＳｔｒｅａｍ出力間隔定義テーブル４１９を参照する。ステップ１２０２において、入力間隔チェック部４３２は、ストリームデータの次のタプル入力を受信する。ステップ１２０３において、入力間隔チェック部４３２は、本間隔でのタプルの量が、間隔によって計算された量よりも多いが判定する。ステップ１２０４において、入力間隔チェック部４３２は、ストリームデータ間隔定義テーブル４１８における間隔調整欄６０４の値が、“yes”であるか判定する。その場合（Ｙｅｓ）、間隔調整タプル生成部４３３は、入力タプルをステップ１２０５で廃棄し、そうでない場合は（Ｎｏ）、フローはステップ１２１０に進む。
【００５７】
ステップ１２０６において、入力間隔チェック部４３２は、本間隔におけるタプルの量が、間隔によって計算された量よりも少ないか判定する。そうである場合（Ｙｅｓ）、フローはステップ１２０７に進み、そうではない場合（Ｎｏ）、フローはステップ１２０９に進む。ステップ１２０７において、入力間隔チェック部４３２は、ストリームデータ間隔定義テーブル４１８における間隔調整欄６０４の値が、“yes”であるか判定する。そうである場合（Ｙｅｓ）、間隔調整タプル生成部４３３は、ステップ１２０８において、同一グループ化値における前回タプルを、間隔調整タプル生成部４３３における間隔調整バッファから、挿入する。そうではない場合（Ｎｏ）、フローはステップ１２１０に進む。
【００５８】
ステップ１２０９において、間隔調整タプル生成部４３３は、同一グループ化値における前回タプルを、間隔調整タプル生成部４３３における間隔調整バッファから、削除する。ステップ１２１０において、間隔調整タプル生成部４３３は、エラーを出力し、ストリームデータ処理サーバ１２１を終了する。ステップ１２１１において、クエリ実行部４３１は、入力タプルを実行する。ステップ１２１２において、出力タプルタイムスタンプ調整部４３４は、Ｒｓｔｒｅａｍ出力間隔定義テーブル４１９における出力調整欄７０４の値が“ｙｅｓ”であるか判定する。そうである場合（Ｙｅｓ）、出力タプルタイムスタンプ調整部４３４は、ステップ１２１３において、出力タプルのタイムスタンプを、Ｒｓｔｒｅａｍ出力間隔定義テーブル４１９における出力間隔欄７０３の値に基づいて、変更する。ステップ１２１４において、フローは終了する。
【００５９】
図１２Ａの実施例において、図３の入力タプル２０１〜２０９が到着する。Ｓ１行６１１は、各グループ（“ｉｄ”）における間隔が１秒であることを記述している。図３において、ステップ１２０３及びステップ１２０６におけるフローにおいて、Ｎｏが選択される。付加的なタプル（ａ、２．５）が９：００：０２．５０に入力される場合、Ｙｅｓがステップ１２０３におけるフローにおいて選択される。Ｙｅｓがステップ１２０４で選択される場合、タプル（ａ、２．５）はステップ１２０５で廃棄される。タプル２０４が９：００：０５に到着しない場合、ステップ１２０６においてＹｅｓが選択される。ステップ１２０７でＹｅｓが選択される場合、同一グループ化値における前回タプル２０３（ａ、３）が、間隔調整タプル生成部４３３における間隔調整バッファから、挿入される。出力調整欄７０４の値が、Ｑ１行７１１において“ｙｅｓ”である場合、ステップ１２１２においてＹｅｓが選択される。タイムスタンプ出力タプル３８４、３８９が、出力間隔（１秒）に基づいて変更される。タプル３８４、３９４のタイプスタンプは、９：００：０４．５０から９：００：０４．００に変更される。
【００６０】
図１２Ｂは、図１２Ａのフロー図の代替例である。ステップ１２０１〜１２０４、１２０６、１２０７、１２１０〜１２１４の処理は、図１２Ａと同様である。
【００６１】
ステップ１２２１におけるフローは、１２０５におけるフローの代替例である。間隔調整タプル生成部４３３は、入力タプルを、間隔調整タプル生成部４３３における間隔調整バッファにおいて保持する。ステップ１２２２におけるフローは、ステップ１２０８におけるフローの代替例である。間隔調整タプル生成部４３３は、同一グループ化値における平均値を有するタプルを、間隔調整タプル生成部４３３における間隔調整バッファから挿入する。ステップ１２２３におけるフローは、ステップ１２０９におけるフローの代替例である。間隔調整タプル生成部４３３は、間隔調整タプル生成部４３３における間隔調整バッファにおいて、特定期間の前に到着しているタプルを削除する。図１２Ｂに示す代替実施例は、所望の実装に応じて、必要により使用する又は省略することができる。
【００６２】
特定期間のストリームデータを保持する範囲ウィンドウを、特定量のストリームデータを保持する列ウィンドウに置き換えることによって（図４Ｂから図４Ａ）、データ送信元タイムスタンプに基づく結果をストリームデータ処理サーバにおいて到着タイムスタンプに基づき与えることができる。この処理は、データ送信元タイムスタンプに基づく処理方法よりも、レイテンシが小さい。これは、サーバが、全てのデータがサーバに到着するまで待つ必要がないからである。実施例１において、ストリームデータ間隔定義とｒｓｔｒｅａｍ出力間隔定義が、テーブルフォーマットにおいて設定されている。実施例２において、ストリームデータ間隔定義とｒｓｔｒｅａｍ出力間隔定義は、クエリフォーマットにおいて設定される。
【００６３】
＜実施例２＞
図１３は、ストリームデータ処理サーバの実施例を示し、図４Ａに類似する。クエリ１５１は、クエリ１３５１に変更されている。図１３において、ストリームデータ間隔設定部４１１は、ストリームデータ間隔設定部１３１１に変更されている。クエリ１３５１におけるストリームデータ間隔定義をパースし、ストリームデータ間隔定義テーブル４１８を更新する。ＲＳｔｒｅａｍ出力間隔設定部４１２は、ＲＳｔｒｅａｍ出力間隔設定部１３１２に変更されている。クエリ１３５１におけるｒｓｔｒｅａｍ出力間隔定義をパースし、ＲＳｔｒｅａｍ出力間隔定義テーブル４１９を更新する。
【００６４】
図１４は、実施例に係る、クエリ例を示す。ストリーム登録コマンド１４０１は、コマンド５０１と関連しており、“interval 1 second group by id”が、Ｓ１ストリーム定義から追加されており、図６におけるストリームデータ間隔定義テーブル４１８にマッピングされている。Ｓ１行６１１において、ストリーム欄６０１は、“Ｓ１”であり、グループ化欄６０２は“ｉｄ”であり、間隔欄６０３は“１秒”であり、間隔調整欄６０４は“ｎｏ”である。“Interval 3 second with interval adjust”が、ストリーム登録コマンド５０１におけるＳ２ストリーム定義から追加され、図６におけるストリームデータ間隔定義テーブル４１８にマップされる。Ｓ２行６１２において、ストリーム欄６０１は、“Ｓ２”であり、間隔欄６０３は“３秒”であり、間隔調整欄６０４は“ｙｅｓ”である。ストリーム登録コマンド１４０２は、コマンド５０２と関連しており、“interval 1 second group by id”がコマンド５０２から追加され、図７におけるＲＳｔｒｅａｍ出力間隔定義テーブル４１９にマップされる。Ｑ１行７１１において、クエリ欄７０１は“Ｑ１”であり、グループ化欄７０２は“ｉｄ”であり、間隔欄７０３は“１秒”であり、出力調整欄７０４は“ｎｏ”である。ストリーム登録コマンド１４０３は、ストリーム登録コマンド５０３と関連しており、“interval 3 second with output adjust”がコマンド５０３から追加され、図７におけるＲＳｔｒｅａｍ出力間隔定義テーブル４１９にマップされる。Ｑ２行７１２において、クエリ欄７０１は“Ｑ２”であり、間隔欄７０３は“３秒”であり、出力調整欄７０４は“ｙｅｓ”である。
【００６５】
図１５は、実施例に係る、ストリームデータ処理サーバにおいて実行される全体処理を示すフローチャート例を示す。具体的には、図１５は、図８の他の可能な実施例である。ステップ８０１、８０６〜８１０のフローは、図８と同様である。ステップ１５０１におけるフローにおいて、ストリームデータ間隔設定部１３１１は、クエリ登録コマンドが、ストリームデータ間隔定義コマンドを含むか、判定する。そうである場合（Ｙｅｓ）、フローはステップ１５０２に進み、そこで、ストリームデータ間隔設定部１３１１は、ストリームデータ間隔定義テーブル４１８を更新する。ステップ１５０３において、ＲＳｔｒｅａｍ出力間隔設定部１３１２は、クエリ登録コマンドがｒｓｔｒｅａｍ出力間隔定義コマンドを含むか、判定する。そうである場合（Ｙｅｓ）、ステップ１５０４において、ＲＳｔｒｅａｍ出力間隔設定部１３１２は、ＲＳｔｒｅａｍ出力間隔定義テーブル４１９を更新する。
【００６６】
実施例２において、クエリにおける範囲スライディングウィンドウ句と範囲ｒｓｔｒｅａｍ句とは、列スライディングウィンドウ句と列ｒｓｔｒｅａｍ句とに置き換えられ、加えて、入力間隔チェック部、間隔調整タプル生成部、出力タプルタイムスタンプ調整部が、挿入される。
【００６７】
＜実施例３＞
図１６は、ストリームデータ処理サーバの実施例を示し、図４Ａに類似する。クエリ変換部１６０１は、クエリストリングを変換し、入力間隔チェック生成部４１４、列ウィンドウ変換部１６０３、ＲＳｔｒｅａｍ変換部１６０４、出力タイムスタンプ調整生成部４１７を、呼び出す。入力間隔チェック生成部４１４と出力タイムスタンプ調整生成部４１７とは、図４Ａと同様である。
【００６８】
列ウィンドウ変換部１６０３は、ストリームデータ間隔定義テーブル４１８に基づき、クエリ１５１における範囲スライディングウィンドウ句を、列スライディングウィンドウ句に変換する。
【００６９】
ＲＳｔｒｅａｍ変換部１６０４は、ＲＳｔｒｅａｍ出力間隔定義テーブル４１９に基づき、クエリ１５１における範囲ｒｓｔｒｅａｍ句を、列ｒｓｔｒｅａｍ句に変換する。クエリパーサ４１３は、図４Ａと同様である。クエリパーサ４１３は、変換されたクエリを、従来方法を使用してパースし、クエリ実行部４３１を生成する。
【００７０】
図１７は、実施例に係る、ストリームデータ処理サーバにおいて実行される全体処理を示すフローチャート例を示し、図８に類似している。ステップ８０１〜８０６、８０８〜８１０のフローは、図８と同様である。ステップ１７０１におけるフローは、クエリ１５１において、範囲スライディングウィンドウ句を列スライディングウィンドウ句に変更し、図９のステップ９０２におけるフローに関連し、そして、図１８においてさらに説明される。ステップ１７０２のフローは、クエリ１５１において、範囲ｒｓｔｒｅａｍ句を列ｒｓｔｒｅａｍ句に変更する。このフローは、図９のステップ９０３におけるフローに関連し、そして、図１９においてさらに説明される。ステップ１７０３におけるフローは、図９のステップ９０１におけるフローと同じである。
【００７１】
図１８は、実施例に係る、範囲スライディングウィンドウを置き換えるフロー図の例を示す。図１８は、図１０に類似する。ステップ１００１、１００２、１００５、１００８、１００９、１０１１におけるフローは、図１０と同様である。ステップ１８０１におけるフローのため、列ウィンドウ変換部１６０３は、次のクエリ定義をクエリ１５１において参照する。ステップ１８０２において、列ウィンドウ変換部１６０３は、次の範囲スライディングウィンドウ句をクエリ１５１で参照する。
【００７２】
ステップ１８０３において、列ウィンドウ変換部１６０３は、範囲スライディングウィンドウ句を、列スライディングウィンドウ句に変更する。列ウィンドウ変換部１６０３は、列ウィンドウサイズを（範囲ウィンドウサイズ／間隔値）に設定する。ステップ１８０４において、列ウィンドウ変換部１６０３は、範囲スライディングウィンドウ句を、分割スライディングウィンドウ句に変更する。列ウィンドウ変換部１６０３は、分割グループをグループ化カラムの値に設定し、分割列ウィンドウサイズを（範囲ウィンドウサイズ／間隔値）に設定する。ステップ１８０５において、列ウィンドウ変換部１６０３は、範囲スライディングウィンドウがクエリにおいて最後であるか判定する。そうではない場合（Ｎｏ）、フローはステップ１８０１に戻り、次のスライディングウィンドウ句を処理し、他の場合（Ｙｅｓ）、フローはステップ１８０６に進む。ステップ１８０６において、列ウィンドウ変換部１６０３は、クエリが最後のものであるか判定する。そうではない場合（Ｎｏ）、フローはステップ１８０１に戻って、次のクエリを処理する。
【００７３】
図１９は、実施例に係る、範囲スライディングウィンドウを置き換えるフローの例を示し、図１１に関連している。ステップ１１０１、１１０４、１１０７、１１０８、１１１０におけるフローは、図１１と同様である。ステップ１９０１において、ＲＳｔｒｅａｍ変換部１６０４は、次のクエリ定義をクエリ１５１において参照する。ステップ１９０２において、ＲＳｔｒｅａｍ変換部１６０４は、クエリにおける範囲ｒｓｔｒｅａｍ句を特定する。ステップ１９０３において、ＲＳｔｒｅａｍ変換部１６０４は、範囲ｒｓｔｒｅａｍ句を列ｒｓｔｒｅａｍ句に移す。ＲＳｔｒｅａｍ変換部１６０４は、列ｒｓｔｒｅａｍサイズを（範囲ｒｓｔｒｅａｍサイズ／間隔値）に設定する。ステップ１９０４において、ＲＳｔｒｅａｍ変換部１６０４は、範囲ｒｓｔｒｅａｍ句を分割列ｒｓｔｒｅａｍ句に移す。ＲＳｔｒｅａｍ変換部１６０４は、分割グループをグループ化欄の値に設定し、分割列ｒｓｔｒｅａｍサイズを（範囲ｒｓｔｒｅａｍサイズ／間隔値）に設定する。ステップ１９０５において、ＲＳｔｒｅａｍ変換部１６０４は、クエリが最後のものであるか判定する。そうではない場合（Ｎｏ）、フローはステップ１９０１に進み、次のクエリを処理する。
【００７４】
図２０は、実施例に係る、クエリの例を示し、図５に類似する。変換されたストリーム登録コマンド２００１は、変換されたコマンド５０１と同一である。変換されたストリーム登録コマンド２００２は、５０２から変換されたコマンドと同一である。変換されたストリーム登録コマンド２００３は、５０３から変換されたコマンドと同一である。
【００７５】
図１８のフロー図の実行例において、図５に示すクエリ１５１が、登録される。変換されたクエリ５０１がパースされた後、クエリ５０２及び５０３がパースされる。ステップ１００１におけるフローは、図６に示すストリームデータ間隔定義テーブル４１８を参照する。ステップ１００２において、入力間隔チェック部４３２が、挿入される。ステップ１８０１におけるフローは、クエリ５０２を参照する。ステップ１８０２におけるフローは、クエリ５０２において“S1 [range 3 second]”を特定する。ステップ１００５におけるフローは、Ｙｅｓである。なぜなら、Ｓ１行におけるグループ化欄は、（“ｉｄ”）に設定されているからである。ステップ１８０４におけるフローは、範囲スライディングウィンドウ句を、分割列スライディングウィンドウ句に移し、分割グループをグループ化欄の値（“ｉｄ”）に設定し、分割列ウィンドウサイズを（範囲ウィンドウサイズ（３秒）／間隔値（１秒）＝３）に設定する。クエリ５０２における“S1 [range 3 second]”は、“S1 [partition by id rows 3]”に変換される。ステップ１００８におけるフローがＮｏであり、ステップ１８０５におけるフローがＹｅｓであり、さらに、ステップ１８０６におけるフローがＮｏである場合、ステップ１８０１におけるフローは、クエリ５０３を参照する。
【００７６】
ステップ１８０１におけるフローは、“S1 [range 5 second]”を特定する。ステップ１００５におけるフローがＹｅｓである場合、ステップ１８０４におけるフローは、範囲スライディングウィンドウ句を分割スライディングウィンドウ句に移し、分割グループをグループ化欄の値（“ｉｄ”）に設定し、分割列ウィンドウサイズを（範囲ウィンドウサイズ（５秒）／間隔値（１秒）＝５）に設定する。クエリ５０２における“S1 [range 5 second]”は、“S1 [partition by id rows 5]”に変換される。
【００７７】
ステップ１００８におけるフローがＮｏであり、かつ、ステップ１８０５におけるフローがＮｏである場合、ステップ１８０２におけるフローは、“S2 [range 12 second]”を特定する。ステップ１００５におけるフローがＮｏである場合、ステップ１８０３におけるフローは、範囲スライディングウィンドウ句を列スライディングウィンドウ句に移し、列ウィンドウサイズを（範囲ウィンドウサイズ（１２秒）／間隔値（３秒）＝４）に設定する。クエリ５０２における“S2 [range 12 second]”は、“S2 [rows 4]”に変換される。
【００７８】
ステップ１００８におけるフローがＹｅｓである場合、ステップ１００９におけるフローは、間隔調整タプル生成部４３３を挿入する。ステップ１８０５におけるフローがＹｅｓであり、かつ、ステップ１８０６におけるフローがＹｅｓである場合、処理は終了する。
【００７９】
図１９の実行例において、ステップ１１０１におけるフローは、図７に示すＲＳｔｒｅａｍ出力間隔定義テーブル４１９を参照する。ステップ１９０１におけるフローは、クエリ５０２を参照する。ステップ１９０２におけるフローは、“rstream [1 second]”を特定する。ステップ１１０４におけるフローはＹｅｓである。なぜなら、Ｑ１行７１１におけるグループ化欄は（“ｉｄ”）に設定されているからである。ステップ１９０４におけるフローは、範囲ｒｓｔｒｅａｍ句を分割列ｒｓｔｒｅａｍ句に移し、分割グループをグループ化欄の値（“ｉｄ”）に設定し、分割列ｒｓｔｒｅａｍサイズを（範囲ｒｓｔｒｅａｍサイズ（１秒）／間隔値（１秒）＝１）に設定する。“RStream [1 second]”は“rstream [partition by id rows 1]”に変換される。１１０７におけるフローがＮｏであり、かつ、ステップ１９０５におけるフローがＮｏである場合、１９０１におけるフローはクエリ５０３を参照する。ステップ１９０２におけるフローは、“rstream [60 second]”を特定する。
【００８０】
ステップ１１０４におけるフローがＮｏである場合、ステップ１９０３におけるフローは、範囲ｒｓｔｒｅａｍ句を列ｒｓｔｒｅａｍ句に移し、列ｒｓｔｒｅａｍサイズを（範囲ｒｓｔｒｅａｍサイズ（６０秒）／間隔値（３秒）＝２０）に設定する。“RStream [60 second]”は“rstream [rows 20]”に変換される。ステップ１１０７におけるフローがＹｅｓである場合、ステップ１１０８におけるフローは、出力タプルタイムスタンプ調整部４３４を挿入する。ステップ１９０５におけるフローがＹｅｓの場合、処理は終了する。
【００８１】
上記詳細な説明における一部は、計算機内における動作のアルゴリズム及び記号表現の観点で提示されている。これらアルゴリズムの記述及び記号表現は、データ処理技術における当業者によって、自らの創作の本質を当該技術分野の他の技術者に最も効率的に伝えるために使用される手段である。アルゴリズムは、定義された一例のステップであり、所望の終了状態又は結果を得ることができる。実施例において、実行されたステップは、有体の結果を得るために有体量の物理的な操作を必要とする。
【００８２】
さらに、本願の他の実施例は、当業者にとって、ここで記述されている実施例の詳細及びプラクティスの観点から、明らかであろう。記述された実施例の様々な態様及び／又は構成要素は、単一で又は結合して使用することができる。なお、明細書及び実施例は一例であって、本願の真の範囲と真意は、請求の範囲の記載により示される。
【図１】
2016526719.tif 000003
【図２】
2016526719.tif 000004
【図３】
2016526719.tif 000005
【図４Ａ】
2016526719.tif 000006
【図４Ｂ】
2016526719.tif 000007
【図５】
2016526719.tif 000008
【図６】
2016526719.tif 000009
【図７】
2016526719.tif 000010
【図８】
2016526719.tif 000011
【図９】
2016526719.tif 000012
【図１０】
2016526719.tif 000013
【図１１】
2016526719.tif 000014
【図１２Ａ】
2016526719.tif 000015
【図１２Ｂ】
2016526719.tif 000016
【図１３】
2016526719.tif 000017
【図１４】
2016526719.tif 000018
【図１５】
2016526719.tif 000019
【図１６】
2016526719.tif 000020
【図１７】
2016526719.tif 000021
【図１８】
2016526719.tif 000022
【図１９】
2016526719.tif 000023
【図２０】
2016526719.tif 000024
【国際調査報告】
2016526719.tif 000025