(57)【要約】【課題】データが発生していない期間においても時刻を進めるための時刻制御情報を必要なとき挿入する。【解決手段】ウィンドウによりストリームデータの処理対象が定義されるデータに対して処理し、時刻が進んだことを表す時刻制御情報をストリームデータに加えて挿入するストリームデータ処理方法において、受け付けたストリームデータの時刻情報を、時刻制御情報を生成する時刻制御情報生成部が時刻制御情報を挿入する時刻である発火時刻として次回発火時刻保持領域に保持し、ストリームデータの処理方法を表す問合せからストリームデータを受け付けた時刻とは異なる時刻に時刻制御情報を生成する処理モジュールを抽出し、抽出した処理モジュールとストリームデータを受け付けた時刻情報から発火時刻を求めて次回発火時刻保持領域に保持し、次回発火時刻保持領域に保持された発火時刻において時刻制御情報生成部が時刻制御情報を挿入する。【選択図】図２
2010108044.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと記憶装置を備えた計算機に入力されたストリームデータを１次情報として受け付けて、前記受け付けた１次情報のうち所定の期間の１次情報を処理対象として取得して２次情報として生成し、時刻が進んだことを表す時刻制御情報を前記１次情報に加えて発生するストリームデータ処理プログラムにおいて、
前記入力されたストリームデータを１次情報として受け付ける手順と、
前記１次情報を受け付けた時点の時刻情報を前記時刻制御情報として生成する時刻制御情報生成部が、前記時刻制御情報を発生する時刻を次回発火時刻として求め、当該次回発火時刻を前記記憶装置に設定された次回発火時刻保持領域に格納する手順と、
現在の時刻情報が前記保持領域に保持された前記次回発火時刻となったときに、前記時刻制御情報を発生する手順と、
前記発生された時刻制御情報を受け付けたときに、前記受け付けた１次情報のうち所定の期間の１次情報を処理対象として取得して２次情報として生成する手順と、
を前記計算機に実行させることを特徴とするストリームデータ処理プログラム。
【請求項２】
請求項１に記載のストリームデータ処理プログラムであって、
前記１次情報を取得して２次情報として生成する処理内容を定義した問い合わせを受け付けて登録する手順と、
前記受け付けた問い合わせで定義された処理内容を実行する処理モジュールを生成する手順と、をさらに含み、
前記１次情報を受け付けた時点の時刻情報を前記時刻制御情報として生成する時刻制御情報生成部が、前記時刻制御情報を発生する時刻を次回発火時刻として求め、当該次回発火時刻を前記記憶装置に設定された次回発火時刻保持領域に格納する手順は、
前記１次情報を受け付けた時刻とは異なる時刻に前記時刻制御情報を生成する必用のある処理モジュールを抽出する手順と、
前記抽出した処理モジュールと前記１次情報を受け付けた時刻情報から前記次回発火時刻を算出する手順と、
含むことを特長とするストリームデータ処理プログラム。
【請求項３】
請求項２に記載のストリームデータ処理プログラムであって、
前記１次情報を受け付けた時点の時刻情報を前記時刻制御情報として生成する時刻制御情報生成部が、前記時刻制御情報を発生する時刻を次回発火時刻として求め、当該次回発火時刻を前記記憶装置に設定された次回発火時刻保持領域に格納する手順は、
前記処理モジュールに接続されて前記時刻制御情報を生成する前記時刻制御情報生成部を複数生成する手順を含み、
前記時刻制御情報を発生する時刻を次回発火時刻として求め、当該次回発火時刻を前記記憶装置に設定された次回発火時刻保持領域に格納する手順は、
前記時刻制御情報生成部が前記１次情報を受け付けたか否かを判定する手順と、
前記１次情報を受け付けた前記時刻制御情報生成部とは異なる時刻制御情報生成部が保持する次回発火時刻保持領域に前記受け付けた１次情報の時刻情報を保持する手順と、
前記時刻制御情報生成部が処理した時刻情報を格納する時刻制御情報生成用データ処理時刻保持領域に、前記受け付けた１次情報の時刻情報を保持する手順と、
を含むことを特徴とするストリームデータ処理プログラム。
【請求項４】
請求項３に記載のストリームデータ処理プログラムであって、
前記現在の時刻情報が前記保持領域に保持された前記次回発火時刻となったときに、前記時刻制御情報を発生する手順は、
前記計算機の現在時刻を保持するシステム時刻保持領域から現在時刻を取得する手順と、
前記次回発火時刻保持領域に保持された前記次回発火時刻を取得する手順と、
該取得した現在時刻が前記次回発火時刻以上か否かを判定する手順と、
該取得した現在時刻が前記次回発火時刻以上の場合に、前記時刻制御情報生成部に前記１次情報が入力した最終時刻を保持する時刻制御情報生成用データ処理時刻保持領域から最終データ入力時刻を取得する手順と、
該取得した最終データ入力時刻が前記次回発火時刻より小さいか否かを判定する手順と、
該取得した最終データ入力時刻が前記次回発火時刻より小さい場合に、前記時刻制御情報生成用データ処理時刻保持領域の前記最終データ入力時刻を更新する手順と、
前記次回発火時刻における時刻制御情報を発生する手順と、
前記取得した最終データ入力時刻が前記次回発火時刻以上の場合に、前記次回発火時刻保持領域に保持された前記次回発火時刻を削除する手順と、
を含むことを特徴とするストリームデータ処理プログラム。
【請求項５】
請求項２に記載のストリームデータ処理プログラムであって、
前記１次情報を受け付けた時刻とは異なる時刻に前記時刻制御情報を生成する必用のある処理モジュールを抽出する手順は、
前記処理モジュールが前記１次情報に対して、前記問合せで指定された時間の範囲で処理対象の範囲を切り取るスライディングウィンドウ演算を行う処理モジュールであるか否かを判定し、前記判定がスライディングウィンドウ演算である場合には、前記１次情報を受け付けた時刻とは異なる時刻に前記時刻制御情報を生成する必用のある処理モジュールを管理する問合せ実行木グラフ解析結果管理テーブルに前記処理モジュールおよび時間サイズを登録する第１の手順と、
前記処理モジュールが前記１次情報に対して、前記問合せで指定された時間間隔で処理対象の範囲を切り取るジャンピングウィンドウ演算を行う処理モジュールであるか否かを判定し、前記判定がジャンピングウィンドウ演算である場合には、前記問合せ実行木グラフ解析結果管理テーブルに前記処理モジュールおよび時間間隔を登録する第２の手順と、
前記処理モジュールが問合せの処理結果を遅延させて出力する処理モジュールであるか否かを判定し、前記判定が遅延させる場合には、前記問合せ実行木グラフ解析結果管理テーブルに前記処理モジュールおよび遅延サイズを登録する第３の手順と、
前記処理モジュールが定期的な間隔で問合せの処理結果の集合を出力する処理モジュールであるか否かを判定し、前記判定が処理結果の集合を出力する場合には、前記問合せ実行木グラフ解析結果管理テーブルに前記処理モジュールおよび出力間隔を登録する第４の手順と、
前記処理モジュールが問合せの処理結果において、処理結果の前記処理対象となる時間がゼロである処理結果を除去する機能を有する処理モジュールであるか否かを判定し、前記判定がゼロである処理結果を除去する機能を有する処理モジュールである場合には、前記問合せ実行木グラフ解析結果管理テーブルに前記処理モジュールおよび最小時間単位を登録する第５の手順と、
をさらに含み、
前記登録された問合せから生成された問合せ実行木から、すべての処理モジュールに対して、前記第１の手順から第５の手順のうちの１つ、若しくは複数の手順を繰り返すことを特徴とするストリームデータ処理プログラム。
【請求項６】
請求項５に記載のストリームデータ処理プログラムであって、
前記１次情報を受け付けた時点の時刻情報を前記時刻制御情報として生成する時刻制御情報生成部が、前記時刻制御情報を発生する時刻を次回発火時刻として求め、当該次回発火時刻を前記記憶装置に設定された次回発火時刻保持領域に格納する手順は、
前記処理モジュールが前記１次情報に対して、前記問合せで指定された時間の範囲で処理対象の範囲を切り取るスライディングウィンドウ演算を行う処理モジュールであるか否かを判定し、前記判定がスライディングウィンドウ演算を行う場合には、前記次回発火時刻保持領域に入力時刻情報と前記問合せ解析結果管理テーブルに登録されている前記時間サイズとを加えた値を登録する手順と、
前記処理モジュールが前記１次情報に対して、前記問合せで指定された時間の範囲で処理対象の範囲を切り取るジャンピングウィンドウ演算を行う処理モジュールであるか否かを判定し、前記判定がジャンピングウィンドウ演算を行う場合には、前記処理モジュールが実行した時刻情報と前記問合せ解析結果管理テーブルに登録されている前記時間間隔とを加えた値を登録する手順と、
前記処理モジュールが問合せの処理結果を遅延させて出力する処理モジュールであるか否かを判定し、前記判定が遅延させて出力する場合には、前記次回発火時刻保持領域に入力時刻情報と前記問合せ解析結果管理テーブルに登録されている前記遅延サイズとを加えた値を登録する手順と、
前記処理モジュールが定期的な間隔で問合せの処理結果の集合を出力する処理モジュールであるか否かを判定し、前記判定が処理結果の集合を出力する場合には、前記処理モジュールが実行した時刻情報と前記問合せ解析結果管理テーブルに登録されている前記出力間隔とを加えた値を登録する手順と、
前記処理モジュールが問合せの処理結果において、処理結果の前記処理対象となる時間がゼロである処理結果を除去する機能を有する処理モジュールであるか否かを判定し、前記判定がゼロである処理結果を除去する機能を有する場合には、前記次回発火時刻保持領域に入力時刻情報と前記問合せ解析結果管理テーブルに登録されている前記時間サイズとを加えた値を登録する手順と、
を含むことを特徴とするストリームデータ処理プログラム。
【請求項７】
請求項５に記載のストリームデータ処理プログラムであって、
前記１次情報を受け付けた時点の時刻情報を前記時刻制御情報として生成する時刻制御情報生成部が、前記時刻制御情報を発生する時刻を次回発火時刻として求め、当該次回発火時刻を前記記憶装置に設定された次回発火時刻保持領域に格納する手順は、
すべての前記時刻制御情報生成部に対して、前記時刻制御情報生成部が前記抽出した処理モジュールと木構造となっているグラフ構造において親子関係にあるか否かを判定し、前記判定が親子関係の場合には、前記次回発火時刻を前記次回発火時刻保持領域に保持する手順と、
を含むことを特徴とするストリームデータ処理プログラム。
【請求項８】
請求項２に記載のストリームデータ処理プログラムであって、
前記計算機は、第一の計算機と第二の計算機を含み、
前記第一の計算機で生成されたストリームデータを１次情報として受け付けて、前記第一の計算機で生成された時刻情報を前記１次情報に付与して前記第二の計算機に送信し、
前記第二の計算機が前記受け付けた１次情報のうち所定の期間の１次情報を処理対象として取得して２次情報として生成する処理を実行し、前記第一の計算機が、時刻が進んだことを表す時刻制御情報を前記１次情報に加えて第二の計算機に送信し、
前記第二の計算機が前記１次情報を取得して２次情報として生成する処理内容を定義した問合せから前記１次情報を受け付けた時刻とは異なる時刻に前記時刻制御情報を生成する必用のある処理モジュールを抽出する手順と、
前記第二の計算機が前記抽出した処理モジュールおよび前記１次情報を受け付けた時刻情報から前記時刻制御情報を生成する時刻制御情報生成部が前記時刻制御情報を生成する時刻である次回発火時刻を算出し、該次回発火時刻を次回発火時刻メッセージとして前記第一の計算機に送信する手順と、
前記第一の計算機が該次回発火時刻を受け付けて、前記次回発火時刻を保持する次回発火時刻保持領域に保持する手順と、
前記第一の計算機が前記次回発火時刻保持領域に保持された次回発火時刻において、前記時刻制御情報生成部が前記時刻制御情報を前記第二の計算機に送信する手順と、
を含むことを特徴とするストリームデータ処理プログラム。
【請求項９】
請求項８に記載のストリームデータ処理プログラムであって、
前記第一の計算機が前記次回発火時刻保持領域に保持された次回発火時刻において、前記時刻制御情報生成部が前記時刻制御情報を前記第二の計算機に送信する手順は、
第一の計算機の現在時刻を保持するシステム時刻保持領域から現在時刻を取得する手順と、
前記次回発火時刻保持領域に保持された次回発火時刻を取得する手順と、
該取得した現在時刻が前記次回発火時刻以上か否かを判定する手順と、
該取得した現在時刻が前記次回発火時刻以上の場合に前記次回発火時刻における時刻制御情報を生成する手順と、
該取得した最終データ入力時刻が次回発火時刻以上の場合に、前記次回発火時刻保持領域に保持された次回発火時刻を削除する手順と、
を含むことを特徴とするストリームデータ処理プログラム。
【請求項１０】
請求項８に記載のストリームデータ処理プログラムであって、
前記第二の計算機が前記１次情報を取得して２次情報として生成する処理方法を表す問合せから前記１次情報を受け付けた時刻とは異なる時刻に前記時刻制御情報を生成する必用のある処理モジュールを抽出する手順は、
前記処理モジュールが前記１次情報に対して、前記問合せで指定された時間の範囲で処理対象の範囲を切り取るスライディングウィンドウ演算を行う処理モジュールであるか否かを判定し、前記判定がスライディングウィンドウ演算を行う場合には、前記１次情報を受け付けた時刻とは異なる時刻に前記時刻制御情報を生成する必用のある処理モジュールを管理する問合せ実行木グラフ解析結果管理テーブルに前記処理モジュールおよび時間サイズを登録する第６の手順と、
前記処理モジュールが前記１次情報に対して、前記問合せで指定された時間間隔で処理対象の範囲を切り取るジャンピングウィンドウ演算を行う処理モジュールであるか否かを判定し、前記判定がジャンピングウィンドウ演算を行う場合には、前記問合せ実行木グラフ解析結果管理テーブルに前記処理モジュールおよび時間間隔を登録する第７の手順と、
前記処理モジュールが問合せの処理結果を遅延させて出力する処理モジュールであるか否かを判定し、前記判定が遅延させて出力する場合には、前記問合せ実行木グラフ解析結果管理テーブルに前記処理モジュールおよび遅延サイズを登録する第８の手順と、
前記処理モジュールが定期的な間隔で問合せの処理結果の集合を出力する処理モジュールであるか否かを判定し、前記判定が処理結果の集合を出力する場合には、前記問合せ実行木グラフ解析結果管理テーブルに前記処理モジュールおよび出力間隔を登録する第９の手順と、
前記処理モジュールが問合せの処理結果において、処理結果の前記処理対象となる時間がゼロである処理結果を除去する機能を有する処理モジュールであるか否かを判定し、前記判定がゼロである処理結果を除去する機能を有する場合には、前記問合せ実行木グラフ解析結果管理テーブルに前記処理モジュールおよび最小時間単位を登録する第１０の手順と、
をさらに含み、
前記登録された問合せから生成された問合せ実行木から、すべての処理モジュールに対して、前記第６の手順から第１０の手順のうちの１つ、若しくは複数の手順を繰り返すことを特徴とするストリームデータ処理プログラム。
【請求項１１】
請求項１０に記載のストリームデータ処理プログラムであって、
前記第一の計算機が該次回発火時刻を受け付けて、前記次回発火時刻を保持する次回発火時刻保持領域に保持する手順は、
前記処理モジュールが前記１次情報に対して、前記問合わせで指定された時間の範囲で処理対象の範囲を切り取るスライディングウィンドウ演算を行う処理モジュールであるか否かを判定し、前記判定がスライディングウィンドウ演算を行う場合には、前記次回発火時刻保持領域に入力時刻情報と前記問合せ解析結果管理テーブルに登録されている前記時間サイズとを加えた値を登録する手順と、
前記処理モジュールが前記１次情報に対して、前記問合せで指定された時間の範囲で処理対象の範囲を切り取るジャンピングウィンドウ演算を行う処理モジュールであるか否かを判定し、前記判定がジャンピングウィンドウ演算を行う場合には、前記処理モジュールが実行した時刻情報と前記問合せ解析結果管理テーブルに登録されている前記時間間隔とを加えた値を登録する手順と、
前記処理モジュールが問合せの処理結果を遅延させて出力する処理モジュールであるか否かを判定し、前記判定が遅延させて出力する場合には、前記次回発火時刻保持領域に入力時刻情報と前記問合せ解析結果管理テーブルに登録されている前記遅延サイズとを加えた値を登録する手順と、
前記処理モジュールが定期的な間隔で問合せの処理結果の集合を出力する処理モジュールであるか否かを判定し、前記判定が処理結果の集合を出力する場合には、前記処理モジュールが実行した時刻情報と前記問合せ解析結果管理テーブルに登録されている前記出力間隔とを加えた値を登録する手順と、
前記処理モジュールが問合せの処理結果において、処理結果の前記処理対象となる時間がゼロである処理結果を除去する機能を有する処理モジュールであるか否かを判定し、前記判定がゼロである処理結果を除去する機能を有する場合には、前記次回発火時刻保持領域に入力時刻情報と前記問合せ解析結果管理テーブルに登録されている前記時間サイズとを加えた値を登録する手順と、
を含むことを特徴とするストリームデータ処理プログラム。
【請求項１２】
プロセッサと記憶装置及びインターフェースを備えて、前記記憶装置に設定されて、前記インターフェースを介して入力されたストリームデータを１次情報として取得し、該取得した１次情報のうち所定の期間の前記１次情報を取得して２次情報として生成し、時刻が進んだことを表す時刻制御情報を前記１次情報に加えて生成する計算機システムにおいて、
前記１次情報を取得して２次情報として生成する処理内容を表す問合せから前記１次情報を受け付けた時刻とは異なる時刻に前記時刻制御情報を生成する必用がある処理モジュールを抽出する問合せ実行木解析部と、
前記抽出した処理モジュールおよび前記１次情報を受け付けた時刻情報から前記時刻制御情報を生成する時刻制御情報生成部が前記時刻制御情報を生成する時刻である発火時刻を算出し、該発火時刻を前記記憶装置に設定した次回発火時刻保持領域に格納する次回発火時刻計算部と、
前記１次情報を受け付けた時点の時刻情報を前記時刻制御情報として生成する時刻制御情報生成部と、を備え、
前記時刻制御情報生成部は、
現在の時刻情報が前記次回発火時刻保持領域に保持された前記発火時刻になったときに、前記時刻制御情報を生成することを特徴とする計算機システム。
【請求項１３】
第一の計算機で生成されたストリームデータを１次情報として受け付けて、前記第一の計算機で生成された時刻情報を前記１次情報に付与して第二の計算機に送信し、
前記第二の計算機が前記受け付けた１次情報のうち所定の期間の１次情報を取得して２次情報として生成し、
前記第一の計算機が、時刻が進んだことを表す時刻制御情報を前記１次情報に加えて第二の計算機に送信する計算機システムにおいて、
前記第二の計算機が前記１次情報を取得して２次情報として生成する処理内容を表す問合せから前記１次情報を受け付けた時刻とは異なる時刻に前記時刻制御情報を生成する必用がある処理モジュールを抽出する問合せ実行木解析部と、
前記第二の計算機が前記抽出した処理モジュールおよび前記１次情報を受け付けた時刻情報から前記時刻制御情報を生成する時刻制御情報生成部が前記時刻制御情報を生成する時刻である発火時刻を算出し、該発火時刻を前記第一の計算機に送信する次回発火時刻計算部と、
前記第一の計算機が該発火時刻を受け付けて、前記発火時刻を保持する次回発火時刻保持領域に保持する次回発火時刻メッセージ受信部と、
前記第一の計算機が前記次回発火時刻保持領域に保持された発火時刻において、前記時刻制御情報生成部が前記時刻制御情報を前記第二の計算機に送信する時刻制御情報生成部と、
を備えたことを特徴とする計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストリームデータ処理システムにおけるシステム内部、およびシステム間の時刻制御情報の生成方法に関する。
【背景技術】
【０００２】
ストレージ装置に格納されたデータに対する処理を実行するデータベース管理システム（以下、ＤＢＭＳとする）に対して、時々刻々と到着するデータをリアルタイム処理するデータ処理システムに対する要求が高まっている。
【０００３】
このような時々刻々と到着するデータをストリームデータと定義し、該ストリームデータのリアルタイム処理に好適なデータ処理システムとして、ストリームデータ処理システムが提案されている。例えば、非特許文献１には、ストリームデータ処理システムＳＴＲＥＡＭが開示されている。
【０００４】
ストリームデータ処理システムでは、従来のＤＢＭＳとは異なり、まずクエリ（問い合わせ）をシステムに登録し、データの到来と共に該クエリが継続的に実行される。前記ＳＴＲＥＡＭでは、ストリームデータを効率的に処理するために、ストリームデータの一部を切り取るスライディングウィンドウと呼ばれる概念を導入し、データに対して生存期間を付与している。スライディングウィンドウ指定を含むクエリの記述言語の好適な例としては非特許文献１に開示されているＣＱＬ（Ｃｏｎｔｉｎｕｏｕｓ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）をあげることができる。ＣＱＬは、ＤＢＭＳで広く用いられているＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）のＦＲＯＭ句に、ストリーム名に続いて括弧を用いることにより、スライディングウィンドウを指定する拡張が施されている。
【０００５】
ＳＱＬに関しては、非特許文献２に開示されるものが知られている。上記スライディングウィンドウを指定する代表的な方法としては、（１）切り取るデータ列の数を指定する方法、そして（２）切り取るデータ列の時間間隔を指定する方法の２種類をあげることができる。例えば、非特許文献１の第二節に示された“Ｒｏｗｓ  ５０  Ｐｒｅｃｅｄｉｎｇ”は５０行分のデータを処理対象として切り取る（１）の好適な例であり、そして“Ｒａｎｇｅ  １５  Ｍｉｎｕｔｅｓ  Ｐｒｅｃｅｄｉｎｇ”は１５分間分のデータを処理対象として切り取る（２）の好適な例である。データの生存期間は、（１）の場合、５０個のデータが到着するまでとなり、（２）の場合、１５分間となる。スライディングウィンドウによって切り取られたストリームデータはメモリ上に保持され、クエリ処理に使用される。
【０００６】
ストリームデータ処理では、複数のデータソースを組合せた解析によるイベント抽出、あるいは一定時間内に発生したイベントの抽出といった処理を実現するために、データが発生していない期間においても時刻を進めるためのハートビートタプル（以下ではＨＢＴ（Ｈｅａｒｔ  Ｂｅａｔ  Ｔｕｐｌｅ）と省略して表記する）を、データ処理システムの内部で定期的に発生させて処理する必要があった。ＨＢＴは、ＨＢＴであることを表すＨＢＴフラグ、および発生した時刻情報を有する。
【０００７】
例えば、２入力以上の前記データソースを結合する結合演算では、２入力以上の前記データソースのうち、時刻の古い順に取得するが、第一の入力に前記データソースからの入力があり、第二の入力に前記データソースからの入力がない場合、前記第二の入力に前記第一の入力のデータソースの時刻以前のデータが入力されるかもしれないため、前記第一の入力を処理できず、処理待ちが発生してしまう。そのような場合に、前記第一の入力のデータソースの時刻以後の時刻情報を有するＨＢＴが前記第二の入力のデータソースに入力されることで、前記第一の入力を処理することができ、処理待ちは解消する。
【０００８】
公知の方法として、各クエリがｙｉｅｌｄ（出力キューにデータあり）、ｍｏｒｅ（入力キューにデータあり）という２つの状態を保持し、次の実行すべきオペレータを決定する方式が非特許文献３に開示されている。非特許文献３に開示されている方式は、実行木を入力側から実行できるところまで実行し、次の実行できるオペレータまでバックトラックする。ストリームデータの入力までバックトラックした場合に、Ｅｎａｂｌｉｎｇ  Ｔｉｍｅ−Ｓｔａｍｐｓ（ＥＴＳ、ＨＢＴ相当）を流す。
【０００９】
また、別の公知の方法として、分散する入力ソースにおける複数の物理時間に対して、１個の論理時間を与える方法であり、Ｏｕｔｐｕｔ  Ｂｏｏｋｍａｒｋという値に応じて、バッファ内で並べ替える方法が特許文献２に開示されている。
【特許文献１】米国特許第５，４９５，６００号公報
【特許文献２】US2008/0072221A1Ｅｖｅｎｔ  Ｓｔｒｅａｍ  Ｃｏｎｄｉｔｉｏｎｉｎｇ
【非特許文献１】Ｒ．  Ｍｏｔｗａｎｉ，  Ｊ．  Ｗｉｄｏｍ，  Ａ．  Ａｒａｓｕ，  Ｂ．  Ｂａｂｃｏｃｋ，  Ｓ．  Ｂａｂｕ，  Ｍ．  Ｄａｔａｒ，  Ｇ．  Ｍａｎｋｕ，  Ｃ．  Ｏｌｓｔｏｎ，  Ｊ．  Ｒｏｓｅｎｓｔｅｉｎ，  ａｎｄ  Ｒ．  Ｖａｒｍａ著：“Ｑｕｅｒｙ  Ｐｒｏｃｅｓｓｉｎｇ，  Ｒｅｓｏｕｒｃｅ  Ｍａｎａｇｅｍｅｎｔ，  ａｎｄ  Ａｐｐｒｏｘｉｍａｔｉｏｎ  ｉｎ  ａ  Ｄａｔａ  Ｓｔｒｅａｍ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ”，Ｉｎ  Ｐｒｏｃ．  ｏｆ  ｔｈｅ  ２００３  Ｃｏｎｆ．  ｏｎ  Ｉｎｎｏｖａｔｉｖｅ  Ｄａｔａ  Ｓｙｓｔｅｍｓ  Ｒｅｓｅａｒｃｈ  （ＣＩＤＲ）、［online］、２００３年１月、［平成２０年１０月１５日検索］、インターネットURL＜http://infolab.usc.edu/csci599/Fall2002/paper/DS1_datastreammanagementsystem.pdf＞
【非特許文献２】Ｃ．  Ｊ．  Ｄａｔｅ，  Ｈｕｇｈ  Ｄａｒｗｅｎ著：“Ａ  Ｇｕｉｄｅ  ｔｏ  ＳＱＬ  Ｓｔａｎｄａｒｄ  （４ｔｈ  Ｅｄｉｔｉｏｎ）”，米国、Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ  Ｐｒｏｆｅｓｓｉｏｎａｌ発行、１９９６年１１月８日発行，ＩＳＢＮ：  ０２１９６４２６０
【非特許文献３】Ｏｐｔｉｍｉｚｉｎｇ  Ｔｉｍｅｓｔａｍｐ Ｍａｎａｇｅｍｅｎｔ   ｉｎ  Ｄａｔａ  Ｓｔｒｅａｍ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍｓ，Ｙｉｊｉａｎ Ｂａｉ，Ｈｅｔａｌ  Ｔｈａｋｋａｒ，Ｈａｉｘｕｎ  Ｗａｎｇ，Ｃａｒｌｏ  Ｚａｎｉｏｌｏ，ＩＥＥＥ  ２３ｒｄ Ｉｎｔｅｒｎａｔｉｏｎａｌ Ｃｏｎｆｅｒｅｎｃｅ ｏｎ  Ｄａｔａ Ｅｎｇｉｎｅｅｒｉｎｇ，２００７．ＩＣＤＥ  ２００７，１５-２０  Ａｐｒｉｌ  ２００７  Ｐａｇｅ：１３３４ − １３３８．
【発明の開示】
【発明が解決しようとする課題】
【００１０】
例えば、株式の売買を行うシステムでは、株価の変動にいかに迅速に反応できるかがシステムの最重要の課題の一つであり、従来のＤＢＭＳのように株式のデータを一旦記憶装置に格納してから、該格納データに関して検索を行うような方法では、株価変動のスピードに即応できず、ビジネスチャンスを逃してしまうことになりかねない。例えば、特許文献１では、記憶されているクエリが周期的に実行される機構を開示しているが、株価のようにデータが入ってきた瞬間にクエリを実行することが重要なリアルタイムデータ処理には適用が困難であった。
【００１１】
非特許文献２では、ＨＢＴを内部で定期的に発生して処理するので、処理タイミングがＨＢＴに束縛されるため、ＨＢＴ送信間隔がデータ発生からイベント抽出までの平均レイテンシとして現れてしまう。レイテンシを短縮するためにはＨＢＴの生成レートを上げる必要があり、ＣＰＵ負荷上昇やスループット低下にオーバヘッドとなっていた。
【００１２】
また、複数の計算機において、第一の計算機における時刻情報を用いて第二の計算機においてストリームデータ処理を行う場合に、第一の計算機における時刻情報を第二の計算機に送信する必要があり、上述した問題と同様の問題が生じる。
【００１３】
非特許文献３でも、例えば、マイナスタプルを生成する（Ｎｅｇａｔｉｖｅ  Ｔｕｐｌｅ法）ｒａｎｇｅウィンドウオペレータ、ＲＳｔｒｅａｍオペレータなど、データ入力以外にもＨＢＴが生成される場合があり、前記文献に開示されている方法では対応できない。また、クエリが多数登録され、実行木が長くなった場合に、バックトラック回数が多くなる問題もある。
【００１４】
また、特許文献２では、ＨＢＴは定期的であるため、レイテンシを短縮するためにはＨＢＴの生成レートを上げる必要があり、ＣＰＵ負荷上昇やスループット低下にオーバヘッドとなってしまう問題が残る。
【００１５】
したがって、ストリームデータ処理システムは、ファイナンシャルアプリケーション、交通情報システム、流通システム、トレーサビリティシステム、センサモニタリングシステム、計算機システム管理に代表される、リアルタイム処理が必要とされる応用に対する適用が期待されている。
【００１６】
すなわち、ストリームデータ処理では、複数のデータソースを組合せた解析によるイベント抽出、あるいは一定時間内に発生したイベントの抽出といった処理を実現するために、データが発生していない期間においても時刻を進めるための時刻制御情報を、データ処理システムの内部で定期的に発生させて処理する必要があった。しかしながら、処理タイミングが時刻制御情報によって決定されるため、時刻制御情報送信間隔がデータ発生からイベント抽出までの平均レイテンシ（所定時間内のレイテンシ）として現れてしまう。つまり、時刻を進めるための時刻制御情報を待つ期間に、実行可能な処理がある場合では、データ処理システム内の処理開始時刻が時刻制御情報によって束縛され、この時刻制御情報を待つ時間がレイテンシとなって現れる。レイテンシを短縮するためには時刻制御情報の生成レートを上げる必要があり、ＣＰＵ負荷の上昇やスループットが低下することによりオーバヘッドとなっていた。
【００１７】
また、複数の計算機において、第一の計算機における時刻情報を用いて第二の計算機においてストリームデータ処理を行う場合に、第一の計算機における時刻情報を第二の計算機に送信する必要があり、上述した問題と同様の問題が生じる。
【００１８】
本発明は上記問題点に鑑みてなされたものであり、本発明の目的は、ストリームデータ処理において時刻制御情報を必要なとき挿入することである。
【課題を解決するための手段】
【００１９】
本発明は、計算機に入力されたストリームデータを受け付けて、ウィンドウによって前記ストリームデータの処理対象が定義されるデータに対して処理し、時刻が進んだことを表す時刻制御情報を前記ストリームデータに加えて生成するストリームデータ処理プログラムにおいて、受け付けた該ストリームデータの時刻情報を、前記時刻制御情報を生成する時刻制御情報生成部が前記時刻制御情報を生成する時刻である発火時刻として次回発火時刻保持領域に保持する。また、前記ストリームデータの処理内容を表す問合せから前記ストリームデータを受け付けた時刻とは異なる時刻に前記時刻制御情報を生成する処理モジュールを抽出し、前記抽出した処理モジュール、および前記ストリームデータを受け付けた時刻情報から前記発火時刻を算出し、前記次回発火時刻保持領域に保持する。そして、前記次回発火時刻保持領域に保持された前記発火時刻において、前記時刻制御情報生成部が前記時刻制御情報を挿入する。
【発明の効果】
【００２０】
本発明を適用することにより、時刻制御情報の量を削減しつつ、低レイテンシであるストリームデータ処理を実現できる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００２２】
図１は、ストリームデータ処理サーバ１００のハードウェア環境を示す。ストリームデータ処理サーバ１００は、ひとつの計算機で実行され、演算処理を行うＣＰＵ１１と、ストリームデータ２１やストリームデータ処理のプログラムを格納するメモリ１２と、データを格納するディスク装置１３と、ＣＰＵ１１とディスク装置１３やネットワーク１１２を接続するインターフェース１４を含んでいる。なお、ストリームデータ処理サーバ１００が複数の計算機で実行されても構わない。
【００２３】
ストリームデータ２１として入力されるデータは、温度センサノード１０１、湿度センサノード１０２、等のセンサノードがあり、ネットワーク１０５を介してセンサ基地局１０８やクレードル１０９に接続されている。また、ＲＦＩＤタグ１０３がネットワーク１０６を介してＲＦＩＤ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）リーダー１１０に接続されている。また、携帯電話１０４がネットワーク１０７を介して携帯電話基地局１１１に接続されている。また、株価情報を配信する株式提供サーバ１１８をストリームデータ２１として入力しても構わない。
【００２４】
ネットワーク１１２には、前記センサ基地局１０８、前記クレードル１０９、前記ＲＦＩＤリーダー１１０、前記携帯電話基地局１１１、前記株式提供サーバ１１８、センサネットミドルウェア、ＲＦＩＤミドルウェア等のアプリケーションを実行する中継計算機１１３、ストリームデータ処理サーバ１００に対してコマンドを入力する計算機１１５と、ストリームデータ処理サーバ１００が出力する出力結果２３を利用する計算機１１７が接続される。
【００２５】
センサ基地局１０８は、温度センサノード１０１、湿度センサノードの測定結果（例えば、温度や湿度）を出力し、ＲＦＩＤリーダー１１０は読み取ったＲＦＩＤタグ１０３の情報を出力する。携帯電話基地局１１１は、携帯電話１０４の情報を出力する。これらの出力がストリームデータ２１として、ストリームデータ処理サーバ１００へ入力される。前記センサ基地局１０８、前記クレードル１０９、前記ＲＦＩＤリーダー１１０、前記携帯電話基地局１１１、前記株式情報提供サーバ１１８はネットワーク１１２を介して直接ストリームデータ２１が前記ストリームデータ処理サーバ１００に入力されても、中継計算機１１３で処理をした後に前記ストリームデータ処理サーバ１００にストリームデータ２１が入力されても構わない。
【００２６】
また、ユーザ１１４が指令したコマンド２２、または計算機１１５により生成されたコマンド２２は、ネットワーク１１２を介して前記ストリームデータ処理サーバ１００に入力される。
前記ストリームデータ処理サーバ１００で処理された結果である出力結果２３は、ネットワーク１１２を介してユーザ１１６が利用する計算機１１７上に出力される。
【００２７】
ここで、前記ストリームデータ処理サーバ１００、前記中継計算機１１３、前記計算機１１５及び前記計算機１１７は、パーソナルコンピュータ、ワークステーションなどの任意のコンピュータシステムで構成され、同一の計算機でも良いし、異なる計算機でも構わない。また、前記ユーザ１１４、前記ユーザ１１６は同一のユーザでも良いし、異なるユーザでも構わない。また、ネットワーク１０５、１０６、１０７、１１２は、イーサネット（登録商標）、光ファイバ、ＦＤＤＩ（Ｆｉｂｅｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｄａｔａ  Ｉｎｔｅｒｆａｃｅ）、無線等で接続されるローカルエリアネットワーク（ＬＡＮ）、若しくはＬＡＮよりも低速なインターネットを含んだワイドエリアネットワーク（ＷＡＮ）、若しくは公衆電話網、若しくは将来に渡って発明される類似の技術でも差し支えない。
【００２８】
ここで、上記図１に示した記憶装置１５は、メモリ１２の所定の領域とディスク装置１３の所定の領域から構成される。ストリームデータ２１は、主にメモリ１２上の記憶装置１５に格納され、問い合わせに対して高速な検索を可能にする。時々刻々と変化するストリームデータ２１には、検索対象となるデータをメモリ１２上の記憶装置１５に格納しておき、検索の用途が済んだデータはディスク装置１３上の記憶装置１５に格納することができる。例えば、ストリームデータ２１が温度センサノード１０１の測定値（温度など）の場合、ユーザ１１４が監視したい測定値は本日の値であり、昨日以前のものは高速に検索できなくても問題は生じない。このため、本日の測定値をメモリ１２上に格納し、昨日以前の測定値をアーカイブとしてディスク装置１３上に格納することができる。ここで、記憶装置１５は、メモリ、ディスク、テープ、フラッシュメモリなどのいかなる記憶媒体で構わない。また、記憶装置１５は、複数の記憶媒体から構成される階層構造となっていてもよい。また、記憶装置１５は、将来に渡って発明される類似の技術でも差し支えない。
【００２９】
図１において、ストリームデータ処理サーバ１００は、Ｉ／Ｆ１４を介してセンサ基地局１０５、またはＲＦＩＤリーダー１１０、または中継計算機１１３上で実行されるアプリケーションからリアルタイムに送信された情報をストリームデータ２１として入力し、ユーザ１１４、または計算機１１５上で実行されるアプリケーションにより入力されたコマンド２２に基づき、入力されたストリームデータ２１を有意な情報に変換して、出力結果２３を生成し、ユーザ１１６、または計算機１１７上で実行されるアプリケーションへ提供するストリームデータ処理を実行する計算機（またはサーバ）である。ストリームデータは複数のストリームデータ２１1、２１2、・・・、２１nから構成される。
【００３０】
前記計算機１１５は、ネットワーク１１２を介してストリームデータ処理サーバ１００に接続されている。ここで、前記計算機１１５上で実行されるアプリケーション、前記計算機１１６上で実行されるアプリケーション、前記計算機１１７上で実行されるアプリケーションは、同一のアプリケーションでも良いし、異なるアプリケーションでも構わない。
【００３１】
ここで、本実施形態で扱うストリームデータ２１は、映像や音声の配信で用いられるストリームとは異なり、ひとつのストリームデータが有意な情報に対応するものである。また、ストリームデータ処理サーバ１００がセンサ基地局１０５、またはＲＦＩＤリーダー１１０、または中継計算機１１３上で実行されるアプリケーションから前記ストリームデータ処理サーバ１００が受信するストリームデータ２１は、連続的あるいは間欠的であり、ストリームデータ毎に異なる製品の情報や異なる要素が含まれる。
【００３２】
図２は本発明の一実施形態が適用されたストリームデータ処理サーバ、及び関連するシステム構成を示すブロック図である。
【００３３】
ストリームデータ処理サーバ１００は、ＣＰＵ１１、メモリ１２、ＤＩＳＫ１３、Ｉ／Ｆ１４から構成され、前記メモリ１２は、オペレーティングシステム（ＯＳ）２００、コマンド入力部２１０、ストリームデータ処理部２２０から構成される。なお、ストリームデータ処理部２２０及びコマンド入力部２１０はプログラムで構成され、ＤＩＳＫ１３等の記憶媒体に格納される。ストリームデータ処理を行う際には、ＣＰＵ１１がストリームデータ処理部２２０及びコマンド入力部２１０をメモリ１２へロードして実行する。
【００３４】
コマンド入力部２１０は、前記ユーザ１１４、または前記計算機１１５上で実行されるアプリケーションにより入力されたコマンドを受け付ける。次に、ストリームデータ処理部２２０は、前記コマンド入力部２１０で受け付けた前記ストリームデータを有意な情報に変換する処理内容を表す問合せに基づいて、ストリームデータ２１の情報を有意な情報に変換してから出力する。
【００３５】
図２において、本発明の概要を説明する。ストリームデータ処理サーバ１００は、ユーザ１１４、または計算機１１５上で実行されるアプリケーションが入力した問合せに基づいて、問合せ実行部２３０は前記ストリームデータ２１を読み出し、有意な情報に変換した後、出力結果２３を出力する。ここで、有意な情報とは、例えば、図１に示した温度センサノード１０１の測定値は、測定値のデータ系列のままではユーザ１１４、１１６が理解できないので、一定時間の温度の平均値に変換した情報である。
【００３６】
以下では、前記ストリームデータ処理サーバ１００の構成を詳細に説明する。
【００３７】
コマンド入力部２１０は、ユーザ１１４が計算機１１５から指令したコマンド２２、または計算機１１５上で実行されるアプリケーションから入力されるコマンド２２を受け付けるインターフェース（以下、Ｉ／Ｆ）を備える。前記コマンドがストリームデータに係るコマンドの場合、ストリームデータ処理部２２０は、前記コマンド入力部２１０から入力された前記ストリームデータを登録または変更するコマンドを表すストリームデータ登録・変更コマンドを受け付けて、ストリームデータを管理するテーブル（図示省略）を更新する。
【００３８】
前記コマンドが問合せに係るコマンドの場合、ストリームデータ処理部２２０は、前記コマンド入力部２１０から入力された前記問合せを登録または変更するコマンドを表す問合せ登録・変更コマンドを受け付けた場合、問合せを管理するテーブル（図示省略）を更新し、前記問合せコマンドに対応するストリームデータの処理内容を表す問合せ実行部２２６を生成または変更する。また、ストリームデータ処理部２２０は、生成した実行木２２６を問い合わせ処理部２２６に送信し、格納させる。
【００３９】
ストリームデータ処理部２２０は、ストリームデータ受信部２２１、問合せ実行木スケジューラ２２２、次回発火時刻計算部２２３、ＨＢＴ（Ｈｅａｒｔ  Ｂｅａｔ  Ｔｕｐｌｅ）生成部２２４、問合せ実行木解析部２２５、問合せ実行部２２６、入力ストリームデータ保持バッファ２３１、システム時刻保持領域２３２、ＨＢＴ生成用データ処理時刻保持領域２３３、次回発火時刻保持領域２３４、問合せ実行木解析結果管理テーブル２３５、オペレータ連結キュー２３６、出力結果保持バッファ２３７から構成される。
【００４０】
入力ストリームデータ保持バッファ２３１は、Ｉ／Ｆ１４を介して前記ストリームデータ処理サーバ１００に入力された前記ストリームデータ２１を保持するバッファである。システム時刻保持領域２３２は、システムの現在時刻を保持する領域である。なお、本実施形態では、システムの現在時刻は、前記ストリームデータ処理サーバ１００が有する絶対時刻情報（例えば、前記ＯＳ２００が管理する現在時刻）とする。また、前記システムの現在時刻は、前記ストリームデータ処理サーバ１００の外部から入力される時刻情報により更新される値でもよい。例えば、前記ストリームデータ２１に付与される時刻情報を用いて、最新の時刻情報を含む該ストリームデータ２１が入力された場合に、前記システムの現在時刻を更新してもよい。
【００４１】
ストリームデータ受信部２２１は、前記入力ストリームデータ保持バッファ２３１のデータを取得し、前記システム時刻保持領域２３２に保持されるシステムの現在時刻を前記ストリームデータ２１に付与し、ＨＢＴ生成部２２４に出力する。
【００４２】
問合せ実行部２２６は、ストリームデータ２１を処理する内容を表したもので、ウィンドウ演算、選択演算、射影演算、結合演算、集計演算等の処理モジュールが木構造になっている。以下では、該処理モジュールをオペレータ、該木構造を実行木と呼ぶ。問合せ実行部２２６中の実行木は、前記コマンド入力部２１０に問合せに係るコマンドが入力される場合に生成される。問合せ実行部２２６は、ＨＢＴ生成部２２４から出力されたデータを受信し、実行木の各オペレータが処理した結果を出力結果保持バッファ２３７に格納する。前記各オペレータが処理した途中結果は、オペレータ連結キュー２３６に格納される。なお、問合せ実行部２２６の実行木については、本願出願人が提案した特開２００８−１２３４２６に開示されるものと同様であるので、ここでは詳述しない。
【００４３】
問合せ実行木スケジューラ２２２は、ＨＢＴ生成部２２４、および問合せ実行部２２６中のオペレータの実行順序を制御する。
【００４４】
オペレータ連結キュー２３６は、前記各オペレータが処理した途中結果を保持するバッファである。出力結果保持バッファ２３７は、前記問合せ実行部２２６が出力した処理結果を格納するバッファである。出力結果保持バッファ２３７に格納される出力結果は、Ｉ／Ｆ１４を介して図１に示した前記計算機１１７に出力される。
【００４５】
問合せ実行木解析部２２５は、前記問合せ実行部２２６中の実行木を解析し、前記ストリームデータを受け付けた時刻とは異なる時刻に前記ＨＢＴを生成するオペレータを抽出し、該オペレータ、および問合せの設定情報を問合せ実行木解析結果管理テーブル２３５に格納する。問合せ実行木解析結果管理テーブル２３５は、前記問合せ実行木解析部２２５で解析した結果を格納するテーブルである。
【００４６】
次回発火時刻計算部２２３は、前記問合せ実行木解析結果管理テーブル２３５を参照し、入力ストリームデータの時刻情報、および前記問合せ実行木解析結果管理テーブル２３５に格納されている前記問合せの設定情報に基づいて前記次回発火時刻を計算し、次回発火時刻保持領域２３４に該次回発火時刻を保持する。
【００４７】
ここで、次回発火時刻とは、ストリームデータ２１の到着以外で問い合わせ実行部２２６における処理を開始する時刻である。
【００４８】
前記次回発火時刻計算部２２３は、前記問合せ実行部２２６において、前記問合せ実行木解析部２２５で抽出したオペレータが実行される場合に呼び出される。次回発火時刻保持領域２３４は、前記次回発火時刻計算部２２３で算出した該次回発火時刻を保持する領域である。
【００４９】
ＨＢＴ生成部２２４は、前記ストリームデータ２１を前記ストリームデータ受信部２２１より取得し、ＨＢＴ生成用データ処理時刻保持領域２３３に該ストリームデータ２１の受信時刻を格納し、前記問合せ実行部２２６に出力する。ＨＢＴ生成用データ処理時刻保持領域２３３は、前記ＨＢＴ生成部２２４が前記ストリームデータ２１を処理した最終時刻を保持する領域である。
【００５０】
また、ＨＢＴ生成部２２４は、前記システム時刻保持領域２３２、前記ＨＢＴ生成用データ処理時刻保持領域２３３、前記次回発火時刻保持領域２３４を参照し、詳細は後述するが、前記システム時刻保持領域２３２に保持されるシステムの現在時刻、前記次回発火時刻保持領域２３４に保持される次回発火時刻、前記ＨＢＴ生成用データ処理時刻保持領域２３３に保持されるＨＢＴ生成部が処理した最終時刻から、前記発火時刻において、前記ＨＢＴを前記問合せ実行部２２６に出力する。
【００５１】
ここで、前記ストリームデータ２１、出力結果２３、後述するＨＢＴ、オペレータが処理のために保持する一時保存データは、タプル形式（レコード形式）、ＸＭＬ形式、ＣＳＶファイル等のいかなるデータ形式でもよい。以下では、タプル形式を用いる例を説明する。
【００５２】
ここで、前記ストリームデータ２１、出力結果２３、後述するＨＢＴ、及びオペレータが処理のために保持する一時保存データは、データの実体を持つ必要はなく、データの一部、若しくは全部をデータの実体を指し示すポインタを含んでいても構わない。
【００５３】
図３ａ、図３ｂは、ストリームデータ２１の好適なデータフォーマットの例を模式的に表した図である。図示の例では、それぞれ、図３ａにおいて温度センサノード１０１が出力した温度ストリームデータ（Ｓ１）２１1、図３ｂにおいて湿度センサノード１０２が出力した湿度ストリームデータ（Ｓ２）２１2を示す。
【００５４】
図３ａの温度ストリームデータ（Ｓ１）２１1はレコード形式であり、レコードを構成する温度センサＩＤカラム３０２、機器ＩＤカラム３０３、温度カラム３０４、システムタイムスタンプカラム３０５がセグメントに相当し、前記温度センサＩＤカラム３０２、前記機器ＩＤカラム３０３、前記温度カラム３０４、前記システムタイムスタンプカラム３０５の組み合わせをタプル３０１とする。
【００５５】
ここで、前記システムタイムスタンプカラム３０５の値は、前記温度ストリームデータ（Ｓ１）２１1が前記ストリームデータ処理サーバ１００に入力された場合に、前記ストリームデータ処理サーバ１００が前記ストリームデータ処理サーバ１００に到着した時刻情報を付与する。
【００５６】
なお、前記システムタイムスタンプカラム３０５は、前記ストリームデータ処理サーバ１００に入力される前に付与された時刻情報を用いてもよい。例えば、前記システムタイムスタンプカラム３０５の値は、前記温度ストリームデータ（Ｓ１）２１1が前記ストリームデータ処理サーバ１００に入力される前に付与された時刻情報であり、前記温度センサ１０１、または前記センサ基地局１０６、または前記中継計算機１１３で実行センサネットミドルウェア等のアプリケーション上等で付与されても良い。
【００５７】
図３ｂの湿度ストリームデータ（Ｓ２）２１2はレコード形式であり、レコードを構成する湿度センサＩＤカラム３１２、機器ＩＤカラム３１３、湿度カラム３１４、システムタイムスタンプカラム３１５がセグメントに相当し、前記湿度センサＩＤカラム３１２、前記機器ＩＤカラム３１３、前記湿度カラム３１４、前記システムタイムスタンプカラム３１５の組み合わせをタプル３１１とする。
【００５８】
ここで、前記システムタイムスタンプカラム３１５の値は、前記湿度ストリームデータ（Ｓ２）２１2が前記ストリームデータ処理サーバ１００に入力された場合に、前記ストリームデータ処理サーバ１００が前記ストリームデータ処理サーバ１００に到着した時刻情報を付与する。
【００５９】
なお、前記システムタイムスタンプカラム３１５は、前記ストリームデータ処理サーバ１００に入力される前に付与された時刻情報を用いてもよい。例えば、前記システムタイムスタンプカラム３１５の値は、前記湿度ストリームデータ（Ｓ２）２１2が前記ストリームデータ処理サーバ１００に入力される前に付与された時刻情報であり、前記温度センサ１０１、または前記センサ基地局１０６、または前記中継計算機１１３で実行センサネットミドルウェア等のアプリケーション上等で付与されても良い。
【００６０】
図４は、前記コマンド入力部２１０において、前記ストリームデータ処理サーバ１００に前記ストリームデータ２１を登録・設定する際の好適なコマンドの記述例である。
【００６１】
ストリーム登録コマンド４０１は、前記ユーザ１１４が計算機１１５から指示し、または前記クライアント計算機１１５上で実行される前記アプリケーション１１６から前記コマンド入力部２１０を通して登録される。ストリーム登録コマンド４０１は、前記温度ストリームデータ（Ｓ１）２１1が整数型（ｉｎｔ型）を保持する温度センサＩＤと、整数型（ｉｎｔ型）を保持する機器ＩＤと、浮動小数点型（ｄｏｕｂｌｅ型）を保持する温度と、から構成されるストリームデータを登録するコマンドであることを表している。これらは、前記図３に示した前記温度センサＩＤカラム３０２、前記機器ＩＤカラム３０３、前記温度カラム３０４、にそれぞれ対応する。
【００６２】
また、ストリーム登録コマンド４０２は、前記湿度ストリームデータ（Ｓ２）２１2が整数型（ｉｎｔ型）を保持する湿度センサＩＤと、整数型（ｉｎｔ型）を保持する機器ＩＤと、浮動小数点型（ｄｏｕｂｌｅ型）を保持する湿度と、から構成されるストリームデータを登録するコマンドであることを表している。これらは、前記図３に示した前記湿度センサＩＤカラム３１２、前記機器ＩＤカラム３１３、前記温度カラム３１４、にそれぞれ対応する。
【００６３】
前記コマンド入力部２１０において、前記ストリームデータ処理サーバ１００に前記ストリームデータ２１を登録・設定するコマンドは、前記コマンドを管理するテーブル形式に変形し、記憶媒体に保持してもよい。
【００６４】
本実施形態では、前記システムタイムスタンプカラム３０５および前記システムタイムスタンプカラム３１５は、自動的に含まれるものとしているが、前記ストリーム登録コマンド４１１において、「ｒｅｇｉｓｔｅｒ  ｓｔｒｅａｍ  温度ストリーム  （タイムスタンプ  ｔｉｍｅｓｔａｍｐ、温度センサＩＤ  ｉｎｔ、機器ＩＤ  ｉｎｔ、温度 ｄｏｕｂｌｅ）；」のように明示的に指定してもよい。
【００６５】
また、本実施形態では、コマンドをコマンドラインインターフェース（ＣＬＩ）形式で登録した例を表したが、これに限定されるものではない。例えば、グラフィックユーザーインターフェース（ＧＵＩ）を用いて上記と同様の意味の入力をしてもよく、表形式や設定ファイル、ＸＭＬファイルによる入力でもよい。以下のコマンドにおいても同様とする。
【００６６】
また、本実施形態では、タイムスタンプを「９：００」のような時間、及び分の形式で表しているが、「２００７／９／２１  ９：００：００  ＪＳＴ」のような日付、及び
秒を含めた形式に代表される他の形式でもよい。以下の図においても、同様とする。
【００６７】
図５は、コマンド入力部２１０において、前記ストリームデータ処理サーバ１００に問合せ登録コマンドを登録・設定する際の好適なコマンドの記述例である。
【００６８】
問合せ登録コマンド５０１は、前記ユーザ１１４、または前記クライアント計算機１１５上で実行される前記アプリケーション１１６から前記コマンド入力部２１０を通して登録される。
【００６９】
問合せ登録コマンド５０１は、前記温度ストリーム（Ｓ１）２１1の過去２分間（［Ｒａｎｇｅ  ２  ｍｉｎｕｔｅ］）、及び前記湿度ストリーム（Ｓ２）２１2において湿度センサＩＤごとの最新１個（［Ｐａｒｔｉｔｉｏｎ  ｂｙ  Ｓ１  温度センサＩＤ  ｒｏｗｓ  １］）に対して、前記温度ストリーム（Ｓ１）２１1の温度が２０度以上である条件（Ｓ１．温度＞＝２０）と、前記湿度ストリーム（Ｓ２）２１2の湿度が６０％以上である条件（Ｓ２．湿度＞＝６０）とを満たし、前記温度ストリーム（Ｓ１）２１1の温度センサＩＤと、前記湿度ストリーム（Ｓ２）２１2の湿度センサＩＤとが一致する場合に、前記温度ストリーム（Ｓ１）２１1のタプルと前記湿度ストリーム（Ｓ２）２１2のタプルを結合し（ＷＨＥＲＥ  Ｓ１．温度センサＩＤ＝Ｓ２．湿度センサＩＤ）、機器ＩＤごとに（ＧＲＯＵＰ  ＢＹ  Ｓ１．機器ＩＤ）温度の平均値（Ａｖｇ（Ｓ１．温度））、及び湿度の平均値（Ａｖｇ（湿度））を計算し、温度センサＩＤ、温度の平均値、湿度の平均値のタプルの増分のみをストリーム化して（ＩＳＴＲＥＡＭ）、１分間遅延させて（＜１  ｍｉｎｕｔｅ＞）出力する処理を表す問合せであることを表している。
【００７０】
問合せ登録コマンド５０２は、前記問合せ登録コマンド５０１の「［Ｒａｎｇｅ  ２  ｍｉｎｕｔｅ］」が「［Ｊｕｍｐｉｎｇ  １０  ｍｉｎｕｔｅ］」へと変更になっており、１０分間隔で処理対象が切り替わることを表している。例えば、時間ウィンドウ（Ｒａｎｇｅ  ２  ｍｉｎｕｔｅ）が９：０１に入力されたデータは９：０３まで処理対象となり、９：０４に入力されたデータは９：０６まで処理対象となるのに対し、ジャンピングウィンドウ（Ｊｕｎｐｉｎｇ  １０  ｍｉｎｕｔｅ）は９：０１に入力されたデータも９：０４に入力されたデータも９：００−９：１０（９：１０を含まない）に処理対象となり、９：１０において９：１０−９：２０が処理対象となる。また、問合せ登録コマンド５０２は、前記問合せ登録コマンド５０１の「ＩＳＴＲＥＡＭ（）＜１  ｍｉｎｕｔｅ＞」が「ＲＳＴＲＥＡＭ［５  ｍｉｎｕｔｅ］」へと変更になっており、５分ごとに平均値のタプル集合を出力する。
【００７１】
前記コマンド入力部２１０において、前記ストリームデータ処理サーバ１００に問合せ登録コマンドを登録・設定するコマンドは、前記コマンドを管理するテーブル形式に変形し、記憶媒体に保持してもよい。
【００７２】
図６は、問合せ実行部２２６の一例を表した説明図である。
【００７３】
問合せ実行部２２６は、図５に示した前記問合せ登録コマンド５０１が実行された場合に生成される問合せ実行部２２６を表している。問合せ実行部２２６は、処理を行うオペレータ、及びオペレータ間をつなぐオペレータ連結キュー２３６から構成される。本説明図では、左端が入力で右端が出力となっている。入力データとして、ストリームデータ２１を入力する。ここで、前記ストリームデータとして入力されるデータ列のうち、個々のデータをタプル６０１とする。タプル６０１は前記オペレータで処理され、オペレータ連結キュー２３６に格納される。前記タプル６０１は、図２で示した前記ストリームデータ受信部２２１と、ＨＢＴ生成部２２４で処理された後、オペレータ連結キュー２３６を介して問合せ実行部２２６に入力される。また、実行木２４１の問合せの処理結果は出力結果２３として出力する。出力結果２３を別のストリームデータ２１として再入力することも可能である。
【００７４】
前記オペレータは、処理内容によって種類が異なる。図６に示すウィンドウオペレータ６１１、６１２は、前記ストリームデータ２１からデータ列の数を指定し、または、切り取るデータ列の時間間隔を指定してデータ列を切り取り、ストリームデータをタプル集合へと変換する処理を行う。切り取られたタプルは、ウィンドウオペレータ６１１、６１２中に保持される。選択オペレータ６１３、６１４は、予め設定された条件に基づいて図３に示した前記タプル３０１、３１１を出力するか否かを決定する処理を行う。結合オペレータ６１５は、２入力以上のストリームデータ２１を所定の条件のもとに結合する処理を行う。集計オペレータ６１６は、合計、平均、最大、最小などの予め設定した集計処理を行う。ストリーム化オペレータ６１７は、タプル集合を出力結果２３としてのストリームデータ２１へと変換する処理を行う。図６に示したオペレータ以外に、前記タプル２０３のカラムの一部のみを出力する処理を行う射影オペレータ等がある。
【００７５】
実行木２４１1は、図５に示した前記問合せ登録コマンド５０１、５０２が実行された場合に生成される実行木２４１を表している。実行木２４１1は、温度ストリームデータ２１1、湿度ストリームデータ２１2を入力とする。ウィンドウオペレータ６１１は、温度ストリームデータ２１1の過去２分間（［Ｒａｎｇｅ  ２  ｍｉｎｕｔｅ］）を、ウィンドウオペレータ６１１に保持し、ウィンドウに新たに入ったタプル、およびウィンドウから出たタプルを選択オペレータ６１３に出力する。
【００７６】
ウィンドウオペレータ６１２は、湿度ストリームデータ２１2の湿度センサＩＤごとの最新１個（［Ｐａｒｔｉｔｉｏｎ  ｂｙ  Ｓ１  湿度センサＩＤ  ｒｏｗｓ  １］）を、ウィンドウオペレータ６１２に保持し、ウィンドウに新たに入ったタプル、およびウィンドウから出たタプルを選択オペレータ６１４に出力する。
【００７７】
選択オペレータ６１３は、前記ウィンドウオペレータ６１１が出力したタプルに対して、温度が２０度以上である条件（Ｓ１．温度＞＝２０）を満たすタプルを結合オペレータ６１５に出力する。
【００７８】
選択オペレータ６１４は、前記ウィンドウオペレータ６１２が出力したタプルに対して、湿度が６０％以上である条件（Ｓ２．湿度＞＝６０）を満たすタプルを結合オペレータ６１５に出力する。
【００７９】
結合オペレータ６１５は、前記選択オペレータ６１３が出力したタプルの温度センサＩＤと、前記選択オペレータ６１４が出力したタプルの湿度センサＩＤとが一致する場合に、それぞれのタプルを結合し（ＷＨＥＲＥ  Ｓ１．温度センサＩＤ＝Ｓ２．湿度センサＩＤ）、集計オペレータ６１６に出力する。なお、結合オペレータ６１６は、結合対象のタプルを選択するため、一時保存領域に前記選択オペレータ６１３、前記選択オペレータ６１４の出力したタプルを保持する。なお、一時保存領域に保持するタプルは、データの実体であっても、ウィンドウオペレータ６１１、６１２へのポインタを含むデータであっても構わない。
【００８０】
集計オペレータ６１６は、前記結合オペレータ６１５の出力タプルに対して、温度ストリームデータ２１1の機器ＩＤごとに（ＧＲＯＵＰ  ＢＹ  Ｓ１．機器ＩＤ）温度の平均値（Ａｖｇ（Ｓ１．温度））、及び湿度の平均値（Ａｖｇ（Ｓ２．湿度））を計算し、温度センサＩＤ、温度の平均値、湿度の平均値をストリーム化オペレータ６１７に出力する。なお、集計オペレータ６１６は、集計値を算出するためのタプルを一時保存領域に保持する。
【００８１】
ストリーム化オペレータ６１７は、前記集計オペレータ６１６の出力タプルの増分のみをストリーム化して１分間遅延させた上で（ＩＳＴＲＥＡＭ＜１  ｍｉｎｕｔｅ＞）出力結果２３1として出力する。
【００８２】
上記実行木２４１1の動作の一例は、次のようになる。
【００８３】
例えば、前記ストリームデータ２１1にタプル（温度センサＩＤ、機器ＩＤ、温度）＝（１００１、２０１、２３℃）が９：００に入力されたとする。ストリームデータ受信部２２１において、前記タプルに対して図３に示した前記システムタイムスタンプカラム３０５に現在のシステム時刻情報が付与され、タプル６０１1（温度センサＩＤ、機器ＩＤ、温度、システムタイムスタンプ）＝（１００１、２０１、２３℃、９：００）が出力される。
【００８４】
また、ＨＢＴ生成部２２４1はデータが発生していない期間においても問い合わせ実行部２２６内の時刻を進めるためのハートビートタプル（ＨＢＴ）６０４1を出力する。ＨＢＴ６０４1は、ＨＢＴであることを表すＨＢＴフラグ、およびシステムタイムスタンプを有し、例えば、９：０３に出力されたＨＢＴ６０４1は「（ＨＢＴ、９：０３）」となる。ＨＢＴは各オペレータが受信すると、各オペレータが管理するオペレータ処理時刻を更新し、次のオペレータ連結キュー２３６に格納される。ＨＢＴの生成方法は後述する。
【００８５】
タプル６０１1は、ウィンドウオペレータ６１１において、過去２分間（［Ｒａｎｇｅ  ２  ｍｉｎｕｔｅ］）で切り取られるウィンドウにおいて、処理対象となる期間（生存期間）が９：００から９：０２までとなる。
【００８６】
ウィンドウオペレータ６１１は、タプル６０１1の生存期間を表すため、タプルの生存期間開始時にタプルの生存期間が開始したことを表すプラスフラグを有するプラスタプル６０２1を出力し、タプルの生存期間終了時にタプルの生存期間が終了したことを表すマイナスフラグを有するマイナスタプル６０３1を出力する。前記タプルのプラスタプル６０２1は「（＋、１００１、２０１、２３℃、９：００）」となり、マイナスタプル６０３1は「（−、１００１、２０１、２３℃、９：００）」となる。
【００８７】
前記ウィンドウオペレータ６１１は、プラスタプル６０２1は受信時に出力し、出力したタプルを一時保存領域に保持しておく。そして、前記ＨＢＴ６０４1を受信すると、ＨＢＴ６０４2をオペレータ連結キュー２３６に格納する。また、前記ウィンドウオペレータ６１１が管理する前記オペレータ処理時刻が「９：００」から「９：０３」に更新され、前記マイナスタプル６０３1を出力することができる。９：０３に出力されたＨＢＴ６０４1を用いて前記マイナスタプル６０３1を出力する場合、９：０２から９：０３までの時間が問い合わせ実行部２２６1のレイテンシとして表れてしまう。このレイテンシが前記課題で述べたレイテンシである。前記マイナスタプル６０３1を出力するレイテンシを短縮するためには、ウィンドウオペレータ６１１が９：０２に前記ＨＢＴを受信する必要がある。
【００８８】
なお、マイナスタプル６０３1はネガティブタプル(Ｎｅｇａｔｉｖｅ  Ｔｕｐｌｅ)と表現される場合もある。また、本方式以外に、タプルに生存期間終了を埋め込んで処理する等、上記生存期間を表す方式はいかなる方式でも構わない。
【００８９】
また、前記ＨＢＴ６０４1は結合オペレータ６１５のように２入力以上を扱うオペレータでも必要となる。例えば、結合オペレータ６１５は、時刻の古い順にオペレータ連結キュー２３６2、オペレータ連結キュー２３６3からタプルを取得する。
【００９０】
例えば、プラスタプル６０２2は「（＋、１００１、２０１、２１℃、８：４０）」が前記オペレータ連結キュー２３６2中、プラスタプル６０２3は「（＋、１００１、２０１、６９％、８：３０）」が前記オペレータ連結キュー２３６3中にある場合、前記プラスタプル６０２3を先に前記オペレータ連結キュー２３６3中から結合オペレータ６１５が取得する。次に、結合オペレータ６１５が前記プラスタプル６０２2を前記オペレータ連結キュー２３６2中から取得しようとするが、前記オペレータ連結キュー２３６3に８：４０以前のデータが格納されるかもしれないため、前記プラスタプル６０２2を取得できない。ここで、ＨＢＴ６０４3「（ＨＢＴ、８：４５）」が前記オペレータ連結キュー２３６3に格納されると、前記結合オペレータ６１５は、前記プラスタプル６０２2を取得し、処理を実行する。
【００９１】
また、集計オペレータ６１６では、ゴーストと呼ばれる生存開始と生存終了のタイムスタンプが同一であり、生存期間がないタプルが生成されることがある。例えば、集計対象のタプルの湿度カラムの値が「６４、６６、６８、７０、７２」である場合に、湿度カラムの平均値は「６８」となる。ここで、タイムスタンプ「８：２０」において、マイナスタプル６０３2「（−、６４、８：２０）」が到着した場合に、湿度の平均値は「６６、６８、７０、７２」の平均となるため「６９」となり、集計値「６９」を有するプラスタプルが生成される。しかしながら、同じタイムスタンプのプラスタプル６０２4「（＋、７４、８：２０）」が到着した場合に、湿度の平均値は「６６、６８、７０、７２、７４」の平均となるため「７０」となり、集計値「６９」を有するマイナスタプル、および集計値「７０」を有するプラスタプルが生成される。すなわち、前記集計値「６９」を有するプラスタプルは、生存期間がないタプルとなる。前記集計オペレータ６１１でゴーストを除去する場合、８：２０以後のシステムタイムスタンプを有するタプルが到着すればよく、例えば、８：２５のシステムタイムスタンプを有するＨＢＴ６０４3「（ＨＢＴ、８：４５）」が到着すると８：４０の集計値が確定するため、前記集計値「７０」を有するプラスタプルを出力することができる。
【００９２】
なお、本実施形態では、集計オペレータ６１６でゴーストを除去したが、他のオペレータで除去しても構わない。例えば、ストリーム化オペレータ６１７でゴーストを除去しても構わない。また、すべての集計オペレータ６１７がゴースト除去機能を有するとしているが、コマンドラインインターフェース（ＣＬＩ）形式、グラフィックユーザーインターフェース（ＧＵＩ）、表形式、設定ファイル、ＸＭＬファイルによる入力により、オペレータごとにゴースト除去機能をオンオフしてもよい。また、ゴースト除去機能を有する平均をＡＶＧ＿Ｇなどの問合せ上に記述してもよい。
【００９３】
また、本実施形態に示す実行木中のプラスタプル、およびＨＢＴは、オペレータ連結キュー内、およびグラフ構造において親子関係にあるオペレータ上では、時刻の逆転はなく、入力側のタイムスタンプが新しく、出力側のタイムスタンプが古い値となる。
【００９４】
図７は、問合せ実行木解析結果管理テーブル２３５の構成例を表した説明図である。
【００９５】
対象オペレータカラム７０１には、図６の前記問合せ実行木解析部２２５で抽出した該オペレータを格納する。設定項目カラム７０２には、前記問合せ実行木解析部２２５で抽出したオペレータに設定されているウィンドウのサイズ、遅延サイズ、出力間隔などの設定項目を格納する。前回実行時刻カラム７０３には、前記ジャンピングウィンドウ（Ｊｕｍｐｉｎｇ  Ｗｉｎｄｏｗ）や定期的な間隔で出力するストリーム化オペレータ（ＲＳｔｒｅａｍ）の場合に、該オペレータが前回処理を実行し、出力した時刻を格納する。
【００９６】
例えば、行７０４は、図５に示した問合せ登録コマンド５０１から生成された実行木を解析した結果、抽出したオペレータの問合せ実行木解析結果管理テーブル２３５を表している。抽出方法の詳細は後述する。
【００９７】
行７０４は、対象オペレータカラム７０１の値が「ウィンドウオペレータ６１１（Ｒａｎｇｅ  Ｗｉｎｄｏｗ）」、設定項目カラム７０２の値が「スライディングウィンドウサイズ＝２分」、前回実行時刻カラム７０３の値が「―」であることを表している。
【００９８】
ここで、問合せ実行木解析結果管理するテーブルは、図７に示した表形式の他に、設定ファイル、ＸＭＬファイルなど任意の形式でよい。以下のテーブルにおいても、同様とする。
【００９９】
図８は、ストリームデータ処理サーバ１００の全体の処理を表したフローチャートである。この処理はストリームデータ処理サーバ１００の管理者がストリームデータ処理部２２０を起動することなどで開始される。
【０１００】
まず、図２に示した前記問合せ実行木解析部２２５が登録クエリのクエリ実行木から発火オペレータを抽出し、前記問合せ実行木解析結果管理テーブル２３５に登録する（８０２）。前記ステップ８０２の処理の詳細内容は図９で後述する。なお、発火オペレータは、ストリームデータ２１の到着を待たずに処理を開始する必用のあるオペレータを指し、例えば、所定の時間間隔で処理結果を出力するオペレータなど、処理に関する時間的制約を有するオペレータである。
【０１０１】
次に、ＨＢＴ生成部２２４でストリームデータ２１を受け付けた時刻情報を他のＨＢＴ生成用データ処理時刻保持領域２３３に保持する（８０３）。前記ステップ８０３の処理の詳細内容は図１０で後述する。
【０１０２】
次に、次回発火時刻計算部２２３で次回発火時刻を計算し、次回発火時刻保持領域２３４に保持する（８０４）。前記ステップ８０４の処理の詳細内容は図１１で後述する。
【０１０３】
次に、前記ＨＢＴ生成部２２４で前記次回発火時刻保持領域２３４に保持された発火時刻において、ＨＢＴを挿入（発生）する（８０５）。前記ステップ８０５の処理の詳細内容は図１２で後述する。
【０１０４】
次に、前記コマンド入力部２１０でシステム終了コマンドを受け付けたか否かを判定する（８０６）。前記ステップ８０６でＮＯと判定された場合は、前記ステップ８０２に戻り、前記ステップ８０６でＹＥＳと判定された場合は、前記ストリームデータ処理サーバ１００の処理を終了する（８０７）。
【０１０５】
図９は、図８に示した前記ステップ８０２の発火オペレータの抽出及び登録処理を表したフローチャートである。
【０１０６】
下記に示すステップ９０３からステップ９１２までの処理を図２に示した問合せ実行部２２６中の全オペレータに対して問合せ実行木解析部２２５が繰り返す（９０２）。
【０１０７】
まず、対象オペレータが時間を表すスライディングウィンドウオペレータ（Ｒａｎｇｅ  Ｗｉｎｄｏｗ）か否かを判定する（９０３）。前記ステップ９０３でＹＥＳと判定された場合は、問合せ実行木グラフ解析結果管理テーブル２３５に該対象オペレータ、および該スライディングウィンドウサイズを登録する（９０４）。
【０１０８】
前記ステップ９０４が終了した場合、または前記ステップ９０３でＮＯと判定された場合、対象オペレータが時間を表すジャンピングウィンドウオペレータ（Ｊｕｍｐｉｎｇ  Ｗｉｎｄｏｗ）か否かを判定する（９０５）。前記ステップ９０５でＹＥＳと判定された場合は、問合せ実行木グラフ解析結果管理テーブル２３５に該対象オペレータ、および該ジャンピングウィンドウサイズを登録する（９０６）。
【０１０９】
前記ステップ９０６が終了した場合、または前記ステップ９０５でＮＯと判定された場合、対象オペレータが時間を表す遅延を発生させるストリーム化オペレータ（ＩＳｔｒｅａｍ、ＤＳｔｒｅａｍ、ＩＤＳｔｒｅａｍ）か否かを判定する（９０７）。前記ステップ９０７でＹＥＳと判定された場合は、問合せ実行木グラフ解析結果管理テーブル２３５に該対象オペレータ、および該遅延サイズを登録する（９０８）。
【０１１０】
前記ステップ９０８が終了した場合、または前記ステップ９０７でＮＯと判定された場合、対象オペレータが時間を表す定期的な間隔で出力するストリーム化オペレータ（ＲＳｔｒｅａｍ）か否かを判定する（９０９）。前記ステップ９０９でＹＥＳと判定された場合は、問合せ実行木グラフ解析結果管理テーブル２３５に該対象オペレータ、および該出力間隔を登録する（９１０）。
【０１１１】
前記ステップ９１０が終了した場合、または前記ステップ９０９でＮＯと判定された場合、対象オペレータがゴーストを除去する機能を有するオペレータ（Ｓｕｍ、Ｃｏｕｎｔ、Ａｖｅｒａｇｅ、Ｍｉｎ、Ｍａｘ、Ｍｅｄｉａｎ、Ｖａｒｉａｂｌｅ、Ｓｔａｎｄａｒｄ  Ｄｅｖｉａｔｉｏｎ、Ｌｉｍｉｔ）か否かを判定する（９１１）。前記ステップ９１１でＹＥＳと判定された場合は、問合せ実行木グラフ解析結果管理テーブル２３５に該対象オペレータ、および最小時間単位（例えば、１ミリ秒、１ナノ秒、１ミリ秒の下に通し番号を持つなど）を登録する（９１２）。
【０１１２】
前記ステップ９１２が終了した場合、または前記ステップ９１１でＮＯと判定された場合、前記ステップ９０２に戻り、再び前記ステップ９０３から前記ステップ９１２までを繰り返す。全オペレータに対して処理が終了した場合、前記ステップ８０２の処理を終了する（９１３）。
【０１１３】
以下では、図５に示した問合せ登録コマンド５０１、問合せ登録コマンド５０２、および図６に示した問合せ実行部２２６1を用いて、図７に示した問合せ実行木解析結果管理テーブル２３５を上記図９の処理で作成する例を示す。
【０１１４】
図５に示した問合せ登録コマンド５０１を登録すると、図６に示した問合せ実行部２２６1が生成される。ストリームデータ処理部２２０は前記問合せ実行部２２６1に対して、図９のフローチャートを実行する。
【０１１５】
まず、ウィンドウオペレータ６１１は、時間を表すスライディングウィンドウオペレータ（Ｒａｎｇｅ  ｗｉｎｄｏｗ、［Ｒａｎｇｅ  ２  ｍｉｎｕｔｅ］）であるため、前記ステップ９０３でＹＥＳと判定され、「ウィンドウオペレータ６１１」、および「スライディングウィンドウサイズ＝２分」が問合せ実行木解析結果管理テーブル２３５の行７０４に登録される。
【０１１６】
次に、ウィンドウオペレータ６１２は、グループ別行ウィンドウ（Ｐａｒｔｉｔｉｏｎｅｄ  ｗｉｎｄｏｗ、［Ｐａｒｔｉｔｉｏｎ  ｂｙ  Ｓ１  湿度センサＩＤ  ｒｏｗｓ  １］）であるため、前記ステップ９０３、９０５、９０７、９０９、９１１でいずれもＮＯと判定される。同様に、選択オペレータ６１３、選択オペレータ６１４、結合オペレータ６１５も、前記ステップ９０３、９０５、９０７、９０９、９１１でいずれもＮＯと判定される。
【０１１７】
集計オペレータ６１６は、ゴーストを除去する機能を有するオペレータ（Ａｖｇ（Ｓ１．温度）、Ａｖｇ（Ｓ２．湿度））であるため、前記ステップ９１１でＹＥＳと判定され、「集計オペレータ６１６」、および「時刻最小単位」が問合せ実行木解析結果管理テーブル２３５の行７０５に登録される。
【０１１８】
ストリーム化オペレータ６１７は、遅延を発生させるストリーム化オペレータ（ＩＳＴＲＥＡＭ（）＜１  ｍｉｎｕｔｅ＞）であるため、前記ステップ９０７でＹＥＳと判定され、「ストリーム化オペレータ６１７」、および「遅延サイズ＝１分」が問合せ実行木解析結果管理テーブル２３５の行７０６に登録される。
【０１１９】
また、図５に示した問合せ登録コマンド５０２を登録すると、図６に示した問合せ実行部２２６1と同様の問合せ実行部２２６が生成され、図９のフローチャートを実行する。
【０１２０】
前記問合せ登録コマンド５０２の［Ｊｕｍｐｉｎｇ  １０  ｍｉｎｕｔｅ］の記述は、時間を表すジャンピングウィンドウオペレータ（Ｊｕｍｐｉｎｇ  ｗｉｎｄｏｗ）を生成するため、前記ステップ９０５でＹＥＳと判定され、「ウィンドウオペレータｘｘｘ」、および「ジャンピングウィンドウサイズ＝１０分」が問合せ実行木解析結果管理テーブル２３５の行７０７に登録される。
【０１２１】
また、前記問合せ登録コマンド５０２のＲＳＴＲＥＡＭ［５  ｍｉｎｕｔｅ］の記述は、時間を表すジャンピングウィンドウオペレータ（ＲＳｔｒｅａｍ）を生成するため、前記ステップ９０９でＹＥＳと判定され、「ウィンドウオペレータｙｙｙ」、および「出力間隔＝５分」が問合せ実行木解析結果管理テーブル２３５の行７０８に登録される。
【０１２２】
なお、本実施形態では、すべての集計オペレータがゴースト除去機能を有するとしているが、コマンドラインインターフェース（ＣＬＩ）形式、グラフィックユーザーインターフェース（ＧＵＩ）、表形式、設定ファイル、ＸＭＬファイルによる入力により、オペレータごとにゴースト除去機能をオンオフしてもよい。また、ゴースト除去機能を有する平均をＡＶＧ＿Ｇなどの問合せ上に記述してもよい。
【０１２３】
上記処理によって、処理の開始に時間的制約のある発火オペレータが、問合せ実行木グラフ解析結果管理テーブル２３５に登録される。
【０１２４】
図１０は、図８に示した前記ステップ８０３のストリームデータの入力及び登録処理を表したフローチャートである。
【０１２５】
まず、ＨＢＴ生成部２２４は、図２に示したストリームデータ受信部２２１で該ストリームデータ２１を受け付けた否かを判定する（１００２）。前記ステップ１００２でＹＥＳと判定された場合は、該ストリームデータ２１を受け付けたＨＢＴ生成部２２４以外の次回発火時刻保持領域２３４に受け付けたストリームデータ２１の入力時刻情報を登録し（１００３）、ＨＢＴ生成部２２４でＨＢＴ生成用データ処理時刻保持領域２３３の最終データ入力時刻を受け付けたストリームデータ２１の入力時刻情報の値に更新する（１００４）。
【０１２６】
前記ステップ１００４が終了した場合、または前記ステップ１００２でＮＯと判定された場合は、前記ステップ８０３の処理を終了する（１００５）。
【０１２７】
図１１は、図８に示した前記ステップ８０４の次回発火時刻計算処理を表したフローチャートである。
【０１２８】
まず、次回発火時刻計算部２２３は、対象オペレータが時間を表すスライディングウィンドウオペレータ（Ｒａｎｇｅ  Ｗｉｎｄｏｗ）か否かを判定する（１１０２）。前記ステップ１１０２でＹＥＳと判定された場合は、次回発火時刻保持領域２３４に前記問合せ実行部２２６中の該対象オペレータに入力したタプルに付与されている該時刻情報＋前記問合せ実行木グラフ解析結果管理テーブル２３５に登録されている該スライディングウィンドウサイズの値を登録する（１１０３）。
【０１２９】
前記ステップ１１０３が終了した場合、または前記ステップ１１０２でＮＯと判定された場合、次回発火時刻計算部２２３は対象オペレータが時間を表すジャンピングウィンドウオペレータ（Ｊｕｍｐｉｎｇ  Ｗｉｎｄｏｗ）か否かを判定する（１１０４）。前記ステップ１１０４でＹＥＳと判定された場合は、次回発火時刻保持領域２３４に前記問合せ実行部２２６中の該対象オペレータで前回処理を実行した該時刻情報＋前記問合せ実行木グラフ解析結果管理テーブル２３５に登録されている該ジャンピングウィンドウサイズの値を登録する（１１０５）。
【０１３０】
前記ステップ１１０５が終了した場合、または前記ステップ１１０４でＮＯと判定された場合、次回発火時刻計算部２２３は対象オペレータが時間を表す遅延を発生させるストリーム化オペレータ（ＩＳｔｒｅａｍ、ＤＳｔｒｅａｍ、ＩＤＳｔｒｅａｍ）か否かを判定する（１１０６）。前記ステップ１１０６でＹＥＳと判定された場合は、次回発火時刻保持領域２３４に前記問合せ実行部２２６中の該対象オペレータに入力したタプルに付与されている該時刻情報＋前記問合せ実行木グラフ解析結果管理テーブル２３５に登録されている該遅延サイズの値を登録する（１１０７）。
【０１３１】
前記ステップ１１０７が終了した場合、または前記ステップ１１０６でＮＯと判定された場合、次回発火時刻計算部２２３は対象オペレータが時間を表す定期的な間隔で出力するストリーム化オペレータ（ＲＳｔｒｅａｍ）か否かを判定する（１１０８）。前記ステップ１１０８でＹＥＳと判定された場合は、次回発火時刻保持領域２３４に前記問合せ実行部２２６中の該対象オペレータで前回処理を実行した該時刻情報＋前記問合せ実行木グラフ解析結果管理テーブル２３５に登録されている該出力間隔の値を登録する（１１０９）。
【０１３２】
前記ステップ１１０９が終了した場合、または前記ステップ１１０８でＮＯと判定された場合、次回発火時刻計算部２２３は対象オペレータがゴーストを除去する機能を有するオペレータ（Ｓｕｍ、Ｃｏｕｎｔ、Ａｖｅｒａｇｅ、Ｍｉｎ、Ｍａｘ、Ｍｅｄｉａｎ、Ｖａｒｉａｂｌｅ、Ｓｔａｎｄａｒｄ  Ｄｅｖｉａｔｉｏｎ、Ｌｉｍｉｔ）か否かを判定する（１１１０）。前記ステップ１１１０でＹＥＳと判定された場合は、次回発火時刻保持領域２３４に前記問合せ実行部２２６中の該対象オペレータに入力したタプルに付与されている該時刻情報＋前記問合せ実行木グラフ解析結果管理テーブル２３５に登録されている最小時刻単位の値を登録する（１１１１）。
【０１３３】
前記ステップ１１１１が終了した場合、または前記ステップ１１１０でＮＯと判定された場合、前記ステップ８０４の処理を終了する（１１１２）。
【０１３４】
上記処理により、次回発火時刻保持領域２３４には、問合せ実行部２２６中のオペレータで前回処理を実行した時刻情報に、問合せ実行木グラフ解析結果管理テーブル２３５に登録されている時刻情報の和が格納される。すなわち、次回発火時刻保持領域２３４には、各オペレータが次回に処理を開始すべき時刻である次回発火時刻が格納される。
【０１３５】
図１２は、図８に示した前記ステップ８０５のＨＢＴ挿入（または発生）処理を表したフローチャートである。
【０１３６】
まず、図２に示した前記ＨＢＴ生成部２２４は前記システム時刻保持領域２３２に保持される現在のシステム時刻を取得する（１２０２）。次に、前記ＨＢＴ生成部２２４で前記次回発火時刻保持領域２３４に保持される最古の次回発火システム時刻を取得する（１２０３）。次に、ＨＢＴ生成部２２４で該現在のシステム時刻と該次回発火システム時刻を比較し、該現在のシステム時刻の値が該次回発火システム時刻の値以上（現在のシステム時刻の値＞＝次回発火システム時刻）か否かを判定する（１２０４）。
【０１３７】
前記ステップ１２０４でＹＥＳと判定された場合は、前記ＨＢＴ生成部２２４で前記ＨＢＴ用データ処理時刻保持領域２３３に保持される最終データ入力時刻を取得し、前記ＨＢＴ生成部２２４で該最終データ入力時刻と前記ステップ１２０３で取得した該次回発火システム時刻を比較し、該最終データ入力時刻が該次回発火システム時刻よりも小さい（最終データ入力時刻＜次回発火システム時刻）か否かを判定する（１２０６）。
【０１３８】
前記ステップ１２０６でＹＥＳと判定された場合は、前記ＨＢＴ生成部２２４で前記ＨＢＴ生成用データ処理時刻保持領域２３３に保持される最終データ入力時刻を前記ステップ１２０２で取得した該次回発火システム時刻の値に更新し（１２０７）、前記ＨＢＴ生成部２２４で該次回発火システム時刻のＨＢＴを送信する（１２０８）。
【０１３９】
前記ステップ１２０８が終了した場合、または前記ステップ１２０６でＮＯと判定された場合は、前記ＨＢＴ生成部２２４で前記次回発火時刻保持領域２３４に保持される前記ステップ１２０２で取得した該次回発火システム時刻の値を削除する（１２０９）。
【０１４０】
前記ステップ１２０９が終了した場合、または前記ステップ１２０４でＮＯと判定された場合は、前記ステップ８０５の処理を終了する（１２１０）。
【０１４１】
ここで、前記ステップ１２０３では、次回発火時刻保持領域２３４に保持される最古の次回発火システム時刻を取得しているが、前記ステップ１２０３で現在時刻の値以下であり、かつ最新の次回発火時刻を取得し、前記ステップ１２０９で該次回発火時刻の値以下の時刻情報を削除してもよい。
【０１４２】
上記処理により、現在のシステム時刻の値が次回発火システム時刻の値以上で、かつ、最終データ入力時刻が次回発火システム時刻よりも小さい、という条件を満たしたときにＨＢＴ生成部２２４は次回発火システム時刻のＨＢＴを送信する。これにより、図６に示した実行木２４１1のオペレータは、ストリームデータ２１の到着を待たずに処理を開始することができる。
【０１４３】
図１３は、次回発火時刻計算処理、およびＨＢＴ生成処理を例示したシーケンス図を表している。
【０１４４】
図１３では、図６に示した前記ストリームデータ受信部２２１、ＨＢＴ生成部２２４1、次回発火時刻保持領域２３４1、ＨＢＴ生成用データ処理時刻保持領域２３３1、ＨＢＴ生成部２２４2、次回発火時刻保持領域２３４2、ＨＢＴ生成用データ処理時刻保持領域２３３2、ウィンドウオペレータ６１１、ウィンドウオペレータ６１２、および図２に示した次回発火時刻計算部２２３、システム時刻保持領域２３２を用いて説明する。また、前記図８、図１０、図１１、図１２に示したフローチャートも用いて説明する。ここで、ＨＢＴ生成部２２４1、ＨＢＴ生成部２２４2、ウィンドウオペレータ６１１、ウィンドウオペレータ６１２は図２に示した問合せ実行木スケジューラ２２２によって、処理の実行順が制御される。
【０１４５】
まず、ストリームデータ受信部２２１に図６に示すストリームデータ２１1が入力されたとする（１３０１）。図３、および図４に示した通り温度ストリームデータ２１1の形態は、温度センサＩＤ３０２、機器ＩＤ３０３、温度３０４であり、前記１３０１では、温度センサＩＤ３０２の値が「１００１」、機器ＩＤ３０３の値が「２０１」、温度３０４の値が「２３℃」とする。前記１３０１では、形式を簡略化し、「２３℃」のみを示す。
【０１４６】
次に、ストリームデータ受信部２２１は、システム保持領域２３２に保持される現在時刻「９：００」を取得し（１３０２）、システムタイムスタンプ３０５の値に「９：００」を格納し、ＨＢＴ生成部２２４1に送信する（１３０３）。
【０１４７】
ＨＢＴ生成部２２４1は、図１０に示すフローチャートの処理に従い、前記ステップ１００２でＹＥＳと判定され、前記ステップ１００３でストリームデータ２１1のタプル「９：００、２３℃」を受け付けたＨＢＴ生成部２２４1以外の次回発火時刻保持領域２３４、すなわちＨＢＴ生成部２２４2の次回発火時刻保持領域２３４2に受け付けたストリームデータ２１1の入力時刻情報「９：００」を登録する(１３０４)。次に、ＨＢＴ生成部２２４1でＨＢＴ生成用データ処理時刻保持領域２３３1の最終データ入力時刻を受け付けたストリームデータ２１1の入力時刻情報「９：００」の値に更新し（１３０５）、ウィンドウオペレータ６１１に前記タプル「９：００、２３℃」を送信する（１３０６）。
【０１４８】
ウィンドウオペレータ６１１は、ウィンドウオペレータ６１１独自の処理を実行後、次回発火時刻の計算処理を実行する。図１１に示すフローチャートに従い、前記ステップ１１０２でＹＥＳと判定され、次回発火時刻保持領域２３４1、次回発火時刻保持領域２３４2にウィンドウオペレータ６１１に入力したタプル「９：００、２３℃」に付与されている時刻情報「９：００」＋図７に示した前記問合せ実行木グラフ解析結果管理テーブル２３５の行７０４に登録されているスライディングウィンドウサイズ「２分」＝「９：０２」の値を登録する（１３０８、１３０９）。ここで、次回発火時刻保持領域２３４2へは追記となり、次回発火時刻保持領域２３４2に格納されている時刻情報は、「９：００、９：０２」となる。次に、前記ステップ１１０４、１１０６、１１０８、１１１０でいずれもＮＯと判定され、処理を終了する。また、ウィンドウオペレータ６１１は、タプルが処理対象となったことを表すプラスフラグを付与してタプル「＋、９：００、２３℃」を図６に示した選択オペレータ６１３へ送信する(前記ウィンドウオペレータ６１１と前記選択オペレータ６１３をつなぐオペレータ連結キュー２３６に格納する) （１３１１）。
【０１４９】
ＨＢＴ生成部２２４2は、図１２に示すフローチャートに従い、前記ステップ１２０２で前記システム時刻保持領域２３２に保持される現在のシステム時刻「９：００」を取得し（１３２１）、前記ステップ１２０３で前記次回発火時刻保持領域２３４2に保持される最古の次回発火システム時刻「９：００」を取得する（１３２２）。前記ステップ１２０４では、該現在のシステム時刻「９：００」＞＝該次回発火システム時刻「９：００」の関係が成り立つためＹＥＳと判定され、前記ステップ１２０５でＨＢＴ生成用データ処理時刻保持領域２３３2の最終データ入力時刻「―（まだ更新されていないためデータは何も格納されていない）」を取得する（１３２３）。前記ステップ１２０６では、該最終データ入力時刻―（まだ更新されていないためデータは何も格納されていない）＜該次回発火システム時刻「９：００」の関係が成り立つためＹＥＳと判定され、前記ステップ１２０７でＨＢＴ生成用データ処理時刻保持領域２３３2に保持される最終データ入力時刻を前記ステップ１３２２で取得した次回発火システム時刻「９：００」の値に更新する（１３２４）。次に、前記ステップ１２０８では前記ステップ１３２２で取得した次回発火システム時刻「９：００」のＨＢＴ「ＨＢＴ、９：００」をウィンドウオペレータ６１２へ送信し（１３２５）、前記ステップ１２０９で次回発火時刻保持領域２３４2に保持される前記ステップ１３２２で取得した次回発火システム時刻「９：００」の値を削除する（１３２６）。ウィンドウオペレータ６１２は、グループ別行ウィンドウ（Ｐａｒｔｉｔｉｏｎｅｄ  ｗｉｎｄｏｗ）であるため、ＨＢＴ「ＨＢＴ、９：００」を受信しても何も処理を実行せず、ＨＢＴ「ＨＢＴ、９：００」を図６に示した選択オペレータ６１４へ送信する(前記ウィンドウオペレータ６１２と前記選択オペレータ６１４をつなぐオペレータ連結キュー２３６に格納する) （１３２７）。
【０１５０】
ＨＢＴ生成部２２４1は、図１２に示すフローチャートに従い、前記ステップ１２０２で前記システム時刻保持領域２３２に保持される現在のシステム時刻「９：０１」を取得し（１３３１）、前記ステップ１２０３で前記次回発火時刻保持領域２３４1に保持される最古の次回発火システム時刻「９：０２」を取得する（１３３２）。前記ステップ１２０４では、該現在のシステム時刻「９：０１」＞＝該次回発火システム時刻「９：０２」の関係が成り立たないためＮＯと判定され、処理を終了する。
【０１５１】
同様に、ＨＢＴ生成部２２４2は、図１２に示すフローチャートに従い、前記ステップ１２０２で前記システム時刻保持領域２３２に保持される現在のシステム時刻「９：０１」を取得し（１３４１）、前記ステップ１２０３で前記次回発火時刻保持領域２３４1に保持される最古の次回発火システム時刻「９：０２」を取得する（１３４２）。前記ステップ１２０４では、該現在のシステム時刻「９：０１」＞＝該次回発火システム時刻「９：０２」の関係が成り立たないためＮＯと判定され、処理を終了する。
【０１５２】
ＨＢＴ生成部２２４1は、図１２に示すフローチャートに従い、前記ステップ１２０２で前記システム時刻保持領域２３２に保持される現在のシステム時刻「９：０２」を取得し（１３５１）、前記ステップ１２０３で前記次回発火時刻保持領域２３４1に保持される最古の次回発火システム時刻「９：０２」を取得する（１３５２）。前記ステップ１２０４では、該現在のシステム時刻「９：０２」＞＝該次回発火システム時刻「９：０２」の関係が成り立つためＹＥＳと判定され、前記ステップ１２０５でＨＢＴ生成用データ処理時刻保持領域２３３1の最終データ入力時刻「９：００」を取得する（１３５３）。前記ステップ１２０６では、該最終データ入力時刻「９：００」＜該次回発火システム時刻「９：０２」の関係が成り立つためＹＥＳと判定され、前記ステップ１２０７でＨＢＴ生成用データ処理時刻保持領域２３３1に保持される最終データ入力時刻を前記ステップ１３５２で取得した次回発火システム時刻「９：０２」の値に更新する（１３５４）。次に、前記ステップ１２０８では前記ステップ１３５２で取得した次回発火システム時刻「９：０２」のＨＢＴ「ＨＢＴ、９：０２」をウィンドウオペレータ６１１へ送信し（１３５５）、前記ステップ１２０９で次回発火時刻保持領域２３４1に保持される前記ステップ１３５２で取得した次回発火システム時刻「９：０２」の値を削除する（１３５６）。ウィンドウオペレータ６１１は、ＨＢＴ「ＨＢＴ、９：０２」を図６に示した選択オペレータ６１３へ送信する(前記ウィンドウオペレータ６１１と前記選択オペレータ６１３をつなぐオペレータ連結キュー２３６に格納する) （１３５７）。また、前記ＨＢＴ「ＨＢＴ、９：０２」により、前記ステップ１３１１で送信したタプル「＋、９：００、２３℃」が処理対象から外れる（Ｒａｎｇｅ  ２  ｍｉｎｕｔｅという定義のため、９：００のタプルは９：０２に処理対象から外れる）ため、処理対象から外れたことをあらわすマイナスフラグ（−）を付与したタプル「−、９：００、２３℃」を図６に示した選択オペレータ６１３へ送信する(前記ウィンドウオペレータ６１２と前記選択オペレータ６１３をつなぐオペレータ連結キュー２３６に格納する) （１３５８）。
【０１５３】
同様に、ＨＢＴ生成部２２４2は、図１２に示すフローチャートに従い、前記ステップ１２０２で前記システム時刻保持領域２３２に保持される現在のシステム時刻「９：０２」を取得し（１３６１）、前記ステップ１２０３で前記次回発火時刻保持領域２３４2に保持される最古の次回発火システム時刻「９：０２」を取得する（１３６２）。前記ステップ１２０４では、該現在のシステム時刻「９：０２」＞＝該次回発火システム時刻「９：０２」の関係が成り立つためＹＥＳと判定され、前記ステップ１２０５でＨＢＴ生成用データ処理時刻保持領域２３３2の最終データ入力時刻「９：００」を取得する（１３６３）。前記ステップ１２０６では、該最終データ入力時刻「９：００」＜該次回発火システム時刻「９：０２」の関係が成り立つためＹＥＳと判定され、前記ステップ１２０７でＨＢＴ生成用データ処理時刻保持領域２３３2に保持される最終データ入力時刻を前記ステップ１３６２で取得した次回発火システム時刻「９：０２」の値に更新する（１３６４）。次に、前記ステップ１２０８では前記ステップ１３６２で取得した次回発火システム時刻「９：０２」のＨＢＴ「ＨＢＴ、９：０２」をウィンドウオペレータ６１２へ送信し（１３６５）、前記ステップ１２０９で次回発火時刻保持領域２３４2に保持される前記ステップ１３６２で取得した次回発火システム時刻「９：０２」の値を削除する（１３６６）。ウィンドウオペレータ６１２は、ＨＢＴ「ＨＢＴ、９：０２」を図６に示した選択オペレータ６１４へ送信する(前記ウィンドウオペレータ６１２と前記選択オペレータ６１４をつなぐオペレータ連結キュー２３６に格納する) （１３６７）。このとき、前記ウィンドウオペレータ６１２が前記ＨＢＴ「ＨＢＴ、９：０２」を受信しても、処理対象には変化は生じない。
【０１５４】
次に、ストリームデータ受信部２２１に図６に示すストリームデータ２１2が入力されたとする（１３７１）。図３、および図４に示した通り温度ストリームデータ２１2の形態は、湿度センサＩＤ３１２、機器ＩＤ３１３、湿度３１４であり、前記１３７１では、湿度センサＩＤ３１２の値が「２００１」、機器ＩＤ３１３の値が「２０１」、湿度３０４の値が「６７％」とする。前記１３７１では、形式を簡略化し、「６７％」のみを示す。
【０１５５】
次に、ストリームデータ受信部２２１は、システム保持領域２３２に保持される現在時刻「９：０３」を取得し（１３７２）、システムタイムスタンプ３１５の値に「９：０３」を格納し、ＨＢＴ生成部２２４2に送信する（１３７３）。
【０１５６】
以下、同様の処理を繰り返す。
【０１５７】
＜第一実施形態まとめ＞
ウィンドウによってストリームデータの処理対象が定義されるデータに対して処理し、時刻が進んだことを表すＨＢＴを前記ストリームデータに加えて挿入（発生）するストリームデータ処理方法において、受け付けた該ストリームデータの時刻情報を、前記ＨＢＴを生成するＨＢＴ生成部が前記ＨＢＴを挿入する時刻である発火時刻として次回発火時刻保持領域に保持する。また、前記ストリームデータの処理方法を表す問合せから前記ストリームデータを受け付けた時刻とは異なる時刻に前記ＨＢＴを生成する処理モジュールを抽出し、前記抽出した処理モジュール、および前記ストリームデータを受け付けた時刻情報から前記発火時刻を算出し、前記次回発火時刻保持領域に保持する。そして、前記次回発火時刻保持領域に保持された前記発火時刻において、前記ＨＢＴ生成部が前記ＨＢＴを発生する。上記処理により、本発明の目的である時刻制御情報を必要なとき挿入することが可能であることを示した。
【０１５８】
また、上記に示したように、本発明の処理では、時刻制御情報を必要なとき挿入すればよく、時刻制御情報の量を削減することができる。しかしながら、処理モジュールが必要なタイミングでは時刻制御情報が挿入されるため、低レイテンシであるストリームデータ処理を実現できる。
【０１５９】
以上、本発明の第一の実施形態について説明した。
【０１６０】
本発明は、上記に示した第一の実施形態に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。以下では、第一の実施形態とは異なる実施形態により、同様、または更なる効果を得ることが可能である、若しくは第一の実施形態と組み合わせることにより更なる効果を得ることが可能であることを説明する。
【０１６１】
例えば、図９に示したフローチャート、および図１３に示した次回発火時刻計算処理、およびＨＢＴ生成処理受信時の処理を例示したシーケンス図では、すべての前記次回発火領域に対して該次回発火時刻を格納していた。しかし、図１４に示したフローチャートのように、前記次回発火領域に対して該次回発火時刻を格納するか否かを判定することで、すべての次回発火時刻保持領域に該次回発火時刻を格納しなくてもよい。
【０１６２】
以下では、図１４に示すフローチャートを説明する。
【０１６３】
ストリームデータ処理部２２０は、すべてのＨＢＴ生成部２２４nを対象に下記に示す処理を繰り返す（１４０２）。
【０１６４】
前回のステップ１４０３の処理でＹＥＳと判定された場合、対象ＨＢＴ生成部２２４nは、次回発火時刻を格納しようとしている対象オペレータと実行木のグラフ構造で親子関係か否かを判定する（１４０３）。親子関係とは、図６に示した前記実行木２４１1において、対象となる２個のオペレータが、ストリームデータ２１が通る経路上にあるか否かで判定される。前記結合オペレータ６１５など２入力以上のストリームデータを扱う場合、出力側のオペレータはいずれの入力のオペレータとも親子関係となる。例えば、図６において、前記集計オペレータ６１６と、前記ＨＢＴ生成部２２４1は親子関係となる。
【０１６５】
前記ステップ１４０４が終了した場合、または前記ステップ１４０３でＮＯと判定された場合、対象ＨＢＴ生成部２２４nの次回発火時刻保持領域２３４nに該次回発火時刻を登録する（１４０４）。すべてのＨＢＴ生成部２２４nに対して前記ステップ１４０３、１４０４を処理した場合、処理を終了する（１４０５）。
【０１６６】
図１４に示したフローチャートでは、次回発火時刻を格納する時点で、次回発火時刻保持領域に格納するか否かを判定しているが、あらかじめ対象オペレータがどの次回発火時刻保持領域に格納するかを、テーブルに格納しておき、前記テーブルを参照してもよい。
【０１６７】
＜第二実施形態＞
以下では、本発明の第二の実施形態について説明する。
【０１６８】
第一の実施形態では、前記ストリームデータ処理サーバ１００において、データが発生していない期間においても時刻を進めるためのＨＢＴを、前記ＨＢＴ生成部２２４で必要なとき生成することにより、前記問合せ実行部２２６の処理待ちを解消することができることを示した。
【０１６９】
第二の実施形態では、複数の計算機において、第一の計算機における時刻情報を用いて第二の計算機においてストリームデータ処理を行う場合にも、第一の計算機における時刻情報を第二の計算機に送信する必要があり、上述した前記問合せ実行部２２６の処理待ちの問題と同様の問題が生じる。
【０１７０】
第二の実施形態では、複数の計算機において、第一の計算機における時刻情報を用いて第二の計算機においてストリームデータ処理を行う場合に、第一の計算機における時刻情報を第二の計算機に必要なとき時刻制御情報を送信することを特徴とする。なお、第二の実施形態では、前記問合せ実行部２２６内部で用いられるＨＢＴとは区別し、前記時刻制御情報をシステムタイムスタンプタプル（ＳＴＴ）と呼ぶ。ＳＴＴは、前記ＨＢＴと同様の形態であり、ＳＴＴであることを表すＳＴＴフラグ、および発生した時刻情報を有する。なお、ＳＴＴは他の形態でもよい。
【０１７１】
第一の実施形態で示したように、第二の計算機において、次回発火時刻を計算し、第一の計算機に送信する。前記第一の計算機は、該次回発火時刻に基づいて、ＳＴＴを第二の計算機に送信する。なお、第二の計算機における問合せ実行は第一の実施形態で示した処理方法でも、他の任意の方法でも構わない。例えば、ＨＢＴを用いずに問合せを処理しても構わない。
【０１７２】
図１５は本発明の第二の実施形態が適用されたストリームデータ処理サーバ、及び関連するシステム構成を示すブロック図である。
【０１７３】
ストリームデータ処理サーバ１００は、図１に示した前記ストリームデータ処理サーバ１００と同様であり、ＣＰＵ１１、メモリ１２、ＤＩＳＫ１３、Ｉ／Ｆ１４から構成され、前記メモリ１２は、オペレーティングシステム（ＯＳ）２００、コマンド入力部２１０、ストリームデータ処理部２２０から構成される。オペレーティングシステム（ＯＳ）２００、およびコマンド入力部２１０は、図２に示した前記オペレーティングシステム（ＯＳ）２００、および前記コマンド入力部２１０と同一である。ストリームデータ処理サーバ１００のストリームデータ処理部２２０Ａは、前記第一実施形態のストリームデータ処理部２２０からシステム時刻保持領域と次回発火時刻保持領域を削除し、ＳＴＴ受信部１５６２を加えたものである。
【０１７４】
また、アプリケーション動作サーバ１５００は、ＣＰＵ１５０１、メモリ１５０２、ＤＩＳＫ１５０３、Ｉ／Ｆ１５０４から構成され、前記メモリ１５０２は、オペレーティングシステム（ＯＳ）１５１０、コマンド入力部１５２０、ストリームデータ生成アプリケーション１５３０から構成される。前記ストリームデータ処理サーバ１００と前記アプリケーション動作サーバ１５００はＩ／Ｆ１４、およびＩ／Ｆ１５０４を介して図１に示すネットワーク１１２に接続される。
【０１７５】
図１５において、本発明の概要を説明する。アプリケーション動作サーバ１５００は、ストリームデータ２１を生成し、前記アプリケーション動作サーバ１５００が保持する時刻情報を付与し、ストリームデータ処理サーバ１００に送信する。前記ストリームデータ処理サーバ１００は、ユーザ１１４が計算機１１５から指令した問い合わせ、または計算機１１５上で実行されるアプリケーションが入力した問合せに基づいて、前記ストリームデータ２１を読み出し、前記アプリケーション動作サーバ１５００が保持する時刻情報に基づいて有意な情報に変換した後、出力結果２３を出力する。ここで、有意な情報とは、例えば、図１温度センサノード１０１の測定値は、測定値のデータ系列のままではユーザ１１４、１１６が理解できないので、一定時間の平均値に変換した情報である。
【０１７６】
以下では、前記ストリームデータ処理サーバ１００の構成を詳細に説明する。
【０１７７】
ストリームデータ処理部２２０は、ストリームデータ受信部１５６１、ＳＴＴ受信部１５６２、ストリームデータ処理部１５６３、次回発火時刻計算部１５６４、問合せ実行木グラフ解析部１５６５、問合せ実行用時刻保持領域１５７１、入力ストリームデータ保持バッファ１５７２、問合せ実行木解析結果管理テーブル１５７３、オペレータ連結キュー１５７４、出力結果保持バッファ１５７５から構成される。
【０１７８】
入力ストリームデータ保持バッファ１５７２は前記入力ストリームデータ保持バッファ２３１と同一である。
【０１７９】
ストリームデータ受信部１５６１は、前記入力ストリームデータ保持バッファ１５７２のデータを取得し、ストリームデータ処理実行部１５６３に出力する。なお、本実施形態では、前記アプリケーション動作サーバが付与した時刻情報に基づいて処理するため、前記ストリームデータ処理サーバ１００が保持するシステムの現在時刻は用いない。
【０１８０】
ストリームデータ処理実行部１５６３は、前記アプリケーション動作サーバが付与した時刻情報に基づいてストリームデータ２１を処理する。処理方法は任意の方法で良い。例えば、図２に示した前記問合せ実行部２２６、前記問合せ実行木スケジューラ２２２、前記ＨＢＴ生成部２２４を合わせたような処理部でよい。本実施形態では、前記問合せ実行部２２６で示したようなウィンドウ演算、選択演算、射影演算、結合演算、集計演算等のオペレータが木構造（実行木）になっているものとする。ストリームデータ処理実行部１５６３は、ストリームデータ受信部１５６１から出力されたデータを受信し、実行木の各オペレータが処理した結果を出力結果保持バッファ１５７５に格納する。前記各オペレータが処理した途中結果は、オペレータ連結キュー１５７４に格納される。
【０１８１】
オペレータ連結キュー１５７４、および出力結果保持バッファ１５７５は、前記オペレータ連結キュー２３６、および前記出力結果保持バッファ２３７と同一である。また、問合せ実行木解析部１５６５、および問合せ実行木解析結果管理テーブル１５７３は、前記問合せ実行木解析部２２５、および前記問合せ実行木解析結果管理テーブル２３５と同一である。
【０１８２】
次回発火時刻計算部１５６４は、前記問合せ実行木解析結果管理テーブル１５７３を参照し、入力ストリームデータの時刻情報、および前記問合せ実行木解析結果管理テーブル１５７３に格納されている前記問合せの設定情報に基づいて次回発火時刻を計算し、該次回発火時刻を次回発火時刻メッセージとしてＩ／Ｆ１４を介して前記アプリケーション動作サーバ１５００に送信する。前記次回発火時刻計算部１５６４は、前記ストリームデータ処理実行部１５６３において、前記問合せ実行木解析部１５６５で抽出したオペレータが実行される場合に呼び出される。
【０１８３】
ＳＴＴ受信部１５６２は、後述する前記アプリケーション動作サーバ１５００のＳＴＴ生成部１５４２より送信されたＳＴＴをＩ／Ｆ１４を介して受信し、ＳＴＴに付与される時刻情報を問合せ実行用時刻保持領域１５７１に保持する。問合せ実行用時刻保持領域１５７１は、前記アプリケーション動作サーバ１５００より送信される時刻情報を保持する領域であり、該時刻情報に基づいてストリームデータ処理実行部１５６３が問合せを実行する。
【０１８４】
次に、前記アプリケーション動作サーバ１５００の構成を詳細に説明する。
【０１８５】
コマンド入力部１５２０は、前記ユーザ１１４が計算機１１５から指令したコマンド、または前記計算機１１５上で実行されるアプリケーションにより入力されたコマンドを受け付ける。
【０１８６】
ストリームデータ生成アプリケーション１５３０は、ストリームデータ生成部１５３１、次回発火時刻メッセージ受信部１５４１、ＳＴＴ生成部１５４２、システム時刻保持領域１５５１、次回発火時刻保持領域１５５２から構成される。
【０１８７】
システム時刻保持領域１５５１は、システムの現在時刻を保持する領域である。なお、本実施形態では、システムの現在時刻は、前記アプリケーション動作サーバ１５００が有する絶対時刻情報（例えば、ＯＳ１５１０が管理する現在時刻）とする。また、システムの現在時刻は、他の計算機から入力される時刻情報により更新される値でもよい。
【０１８８】
ストリームデータ生成部１５３１は、前記ストリームデータ２１を生成し、前記システム時刻保持領域１５５１に保持されるシステムの現在時刻を前記ストリームデータ２１に付与し、Ｉ／Ｆ１５０４を介してストリームデータ処理サーバ１００に送信する。
【０１８９】
次回発火時刻メッセージ受信部１５４１は、前記アプリケーション動作サーバ１５００の次回発火時刻計算部１５６４より送信された前記次回発火時刻メッセージをＩ／Ｆ１５０４を介して受信し、次回発火時刻メッセージに付与される時刻情報を次回発火時刻保持領域１５５２に保持する。次回発火時刻保持領域１５５２は、前記次回発火時刻メッセージ受信部１５４１で受信した該次回発火時刻メッセージに付与される次回発火時刻を保持する領域である。
【０１９０】
ＳＴＴ生成部１５４２は、前記システム時刻保持領域１５５１、前記次回発火時刻保持領域１５５２を参照し、詳細は後述するが、前記システム時刻保持領域２３２に保持されるシステムの現在時刻、前記次回発火時刻保持領域２３４に保持される次回発火時刻から、前記発火時刻において、前記ＳＴＴをＩ／Ｆ１５０４を介して前記ストリームデータ処理サーバ１００に送信する。
【０１９１】
ここで、前記ストリームデータ２１、出力結果２３、次回発火時刻メッセージ、ＳＴＴ、オペレータが処理のために保持する一時保存データは、タプル形式（レコード形式）、ＸＭＬ形式、ＣＳＶファイル等のいかなるデータ形式でもよい。以下では、タプル形式を用いる例を説明する。また、前記ストリームデータ２１、出力結果２３、ＳＴＴ、オペレータが処理のために保持する一時保存データは、データの実体を持つ必要はなく、データの一部、若しくは全部をデータの実体を指し示すポインタを含んでいても構わない。
【０１９２】
また、アプリケーション動作サーバ１５００は、ストリームデータ処理を実行するサーバでも構わない。例えば、前記ストリームデータ生成部１５３１は、図１５に示した前記ストリームデータ処理部２２０であってもよい。そして、ストリームデータ処理を第一の計算機、および第二の計算機に分割して処理し、第一の計算機でストリームデータ処理した時刻情報を用いて、第二の計算機がストリームデータ処理を実行してもよい。
【０１９３】
図１６は、ストリームデータ処理サーバ１００、およびアプリケーション動作サーバ１５００の全体処理を表したフローチャートである。
【０１９４】
まず、図１５に示した前記ストリームデータ処理サーバ１００の前記問合せ実行木解析部１５６５で登録クエリのクエリ実行木から発火オペレータを抽出し、前記問合せ実行木解析結果管理テーブル１５７３に登録する（１６０２）。前記ステップ１６０２の処理の詳細内容は図９で示したフローチャートと同一である。
【０１９５】
次に、前記ストリームデータ処理サーバ１００の前記次回発火時刻計算部１５６４で次回発火時刻を計算し、前記アプリケーション動作サーバ１５００に次回発火時刻メッセージを送信する（１６０３）。前記ステップ１６０３の処理の詳細内容は図１７で後述する。
【０１９６】
次に、前記アプリケーション動作サーバ１５００の前記次回発火時刻メッセージ受信部１５４１で該次回発火時刻メッセージを受信し、前記アプリケーション動作サーバ１５００の次回発火時刻保持領域１５５２に保持する（１６０４）。
【０１９７】
次に、前記アプリケーション動作サーバ１５００の前記ＳＴＴ生成部１５４２で前記次回発火時刻保持領域１５５２に保持された発火時刻において、ＳＴＴを前記ストリームデータ処理サーバ１００に送信する（１６０５）。前記ステップ１６０５の処理の詳細内容は図１８で後述する。
【０１９８】
次に、前記ストリームデータ処理サーバ１００の前記コマンド入力部２１０でシステム終了コマンド受け付けたか否かを判定する（１６０６）。前記ステップ１６０６でＮＯと判定された場合は、前記ステップ１６０２に戻り、前記ステップ１６０６でＹＥＳと判定された場合は、前記ストリームデータ処理サーバ１００の処理を終了する（１６０７）。
【０１９９】
図１７は、図１６に示した前記ステップ１６０３の次回発火時刻計算処理を表したフローチャートである。
【０２００】
まず、ストリームデータ処理サーバ１００の次回発火時刻計算部１５６４が、対象オペレータが時間を表すスライディングウィンドウオペレータ（Ｒａｎｇｅ  Ｗｉｎｄｏｗ）か否かを判定する（１７０２）。前記ステップ１７０２でＹＥＳと判定された場合は、次回発火時刻計算部１５６４は、前記アプリケーション動作サーバ１５００に図１５に示した前記ストリームデータ処理実行部１５６３中の該対象オペレータに入力したタプルに付与されている該時刻情報＋前記問合せ実行木グラフ解析結果管理テーブル１５７３に登録されている該スライディングウィンドウサイズの値を次回発火時刻メッセージとして送信する（１７０３）。
【０２０１】
前記ステップ１７０３が終了した場合、または前記ステップ１７０２でＮＯと判定された場合、次回発火時刻計算部１５６４は、対象オペレータが時間を表すジャンピングウィンドウオペレータ（Ｊｕｍｐｉｎｇ  Ｗｉｎｄｏｗ）か否かを判定する（１７０４）。前記ステップ１７０４でＹＥＳと判定された場合は、次回発火時刻計算部１５６４が、前記アプリケーション動作サーバ１５００に前記ストリームデータ処理実行部１５６３中の該対象オペレータで前回処理を実行した該時刻情報＋前記問合せ実行木グラフ解析結果管理テーブル１５７３に登録されている該ジャンピングウィンドウサイズの値を次回発火時刻メッセージとして送信する（１７０５）。
【０２０２】
前記ステップ１７０５が終了した場合、または前記ステップ１７０４でＮＯと判定された場合、次回発火時刻計算部１５６４は、対象オペレータが時間を表す遅延を発生させるストリーム化オペレータ（ＩＳｔｒｅａｍ、ＤＳｔｒｅａｍ、ＩＤＳｔｒｅａｍ）か否かを判定する（１７０６）。前記ステップ１７０６でＹＥＳと判定された場合は、次回発火時刻計算部１５６４が、前記アプリケーション動作サーバ１５００に前記ストリームデータ処理実行部１５６３中の該対象オペレータに入力したタプルに付与されている該時刻情報＋前記問合せ実行木グラフ解析結果管理テーブル１５７３に登録されている該遅延サイズの値を次回発火時刻メッセージとして送信する（１７０７）。
【０２０３】
前記ステップ１７０７が終了した場合、または前記ステップ１７０６でＮＯと判定された場合、次回発火時刻計算部１５６４は、対象オペレータが時間を表す定期的な間隔で出力するストリーム化オペレータ（ＲＳｔｒｅａｍ）か否かを判定する（１７０８）。前記ステップ１７０８でＹＥＳと判定された場合は、次回発火時刻計算部１５６４が、前記アプリケーション動作サーバ１５００に前記ストリームデータ処理実行部１５６３中の該対象オペレータで前回処理を実行した該時刻情報＋前記問合せ実行木グラフ解析結果管理テーブル１５７３に登録されている該出力間隔の値を次回発火時刻メッセージとして送信する（１７０９）。
【０２０４】
前記ステップ１７０９が終了した場合、または前記ステップ１７０８でＮＯと判定された場合、次回発火時刻計算部１５６４は、対象オペレータがゴーストを除去する機能を有するオペレータ（Ｓｕｍ、Ｃｏｕｎｔ、Ａｖｅｒａｇｅ、Ｍｉｎ、Ｍａｘ、Ｍｅｄｉａｎ、Ｖａｒｉａｂｌｅ、Ｓｔａｎｄａｒｄ  Ｄｅｖｉａｔｉｏｎ、Ｌｉｍｉｔ）か否かを判定する（１７１０）。前記ステップ１７１０でＹＥＳと判定された場合は、次回発火時刻計算部１５６４が、前記アプリケーション動作サーバ１５００に前記ストリームデータ処理実行部１５６３中の該対象オペレータに入力したタプルに付与されている該時刻情報＋前記問合せ実行木グラフ解析結果管理テーブル１５７３に登録されている最小時刻単位の値を次回発火時刻メッセージとして送信する（１７１１）。
【０２０５】
前記ステップ１７１１が終了した場合、または前記ステップ１７１０でＮＯと判定された場合、前記ステップ１６０３の処理を終了する（１７１２）。
【０２０６】
上記の処理により、対象オペレータに入力したタプルに付与されている時刻情報に、問合せ実行木グラフ解析結果管理テーブル１５７３に登録されている時刻情報の和から、発火オペレータの次回発火時刻が計算され、次回発火時刻メッセージとしてアプリケーション動作サーバ１５００へ送信される。
【０２０７】
図１８は、図１６に示した前記ステップ１６０５で行われるアプリケーション動作サーバ１５００のＳＴＴ生成部１５４２の処理を表したフローチャートである。
【０２０８】
まず、図１５に示した前記ＳＴＴ生成部１５４２で前記システム時刻保持領域１５５１に保持される現在のシステム時刻を取得する（１８０２）。次に、前記ＳＴＴ生成部１５４２で前記次回発火時刻保持領域１５５１に保持される最古の次回発火システム時刻を取得する（１８０３）。次に、前記ＳＴＴ生成部１５４２で該現在のシステム時刻と該次回発火システム時刻を比較し、該現在のシステム時刻の値が該次回発火システム時刻の値以上（現在のシステム時刻の値＞＝次回発火システム時刻）か否かを判定する（１８０４）。
【０２０９】
前記ステップ１８０４でＹＥＳと判定された場合は、前記ＳＴＴ生成部１５４２で該次回発火システム時刻のＳＴＴを送信し（１８０５）、前記ＳＴＴ生成部１５４２で前記次回発火時刻保持領域１５５１に保持される前記ステップ１８０２で取得した該次回発火システム時刻の値を削除する（１８０６）。
【０２１０】
前記ステップ１８０６が終了した場合、または前記ステップ１８０４でＮＯと判定された場合は、前記ステップ１６０５の処理を終了する（１８０７）。
【０２１１】
ここで、前記ステップ１８０３では、前記次回発火時刻保持領域１５５１に保持される最古の次回発火システム時刻を取得しているが、前記ステップ１８０３で現在時刻の値以下であり、かつ最新の次回発火時刻を取得し、前記ステップ１８０６で該次回発火時刻の値以下の時刻情報を削除してもよい。
【０２１２】
以上、本発明の第二の実施形態について説明した。
【０２１３】
＜まとめ＞
本発明は、上記に示した第一、および第二の実施形態に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。また、上記に示した第一、および第二の実施形態を組み合わせた実施形態も可能である。
【０２１４】
例えば、上記の実施形態では、図２、図１５に示した次回発火時刻保持領域に保持するデータ量に制限を設けなかったが、メモリ上限値を定めて、上限値を超えた場合に、適切な処理をしてもよい。例えば、時刻情報の古いデータを削除する、入力ストリームデータを一時的に止める、入力ストリームデータの一部を削除して処理（シュレッディング）、してもよい。
【０２１５】
また、上記の実施形態では、次回発火時刻計算部、問合せ実行木解析部は前記ストリームデータ処理サーバ１００内として説明したが、前記ストリームデータ処理サーバ１００とは異なる別の計算機で処理しても構わない。
【０２１６】
また、上記の実施形態では、ストリームデータ処理サーバにおいて時刻制御情報（ＨＢＴ、およびＳＴＴ）を処理する例を説明したが、データベースシステム等のストリームデータ処理サーバ以外のシステムで、上記の実施形態で示した時刻制御情報を処理してもよい。
【０２１７】
また、上記の実施形態では、ストリームデータ処理サーバ１００、およびアプリケーション動作サーバ１５００は、任意のコンピュータシステムとして説明したが、前記ストリームデータ処理サーバ１００、および前記アプリケーション動作サーバ１５００で行う処理の一部、若しくは全部をストレージ装置で行ってもよい。
【０２１８】
また、上記の実施形態では、センサ基地局１０８が温度データ、および湿度データをストリームデータ２１としてストリームデータ処理サーバ１００に入力する例を説明したが、これに限定されるものではない。例えば、センサ基地局１０８に代わって多数のセンサノードを管理するセンサネットサーバが、センサノードの測定値をストリームデータ２１と出力し、ストリームデータ処理サーバ１００でユーザ１１６が理解可能な有意な情報を含む出力結果２３に変換し、計算機１１７へ提供するようにしてもよい。また、ストリームデータ処理サーバ１００に入力するデータは、ＲＦＩＤリーダーで読み込んだタグの情報、ＲＦＩＤを一元管理するＲＦＩＤミドルウェアシステムである計算機１１３から入力されるデータでもよい。また、株式情報提供サーバ１１８から入力されるデータでもよい。他にも、ＥＴＣシステムなどの交通情報、自動改札機やクレジットカードなどのＩＣカード情報、株価情報などの金融情報、製造工程管理情報、呼情報、システムログ、ネットワークアクセス情報、トレーサビリティ個品情報、監視映像メタデータ、Ｗｅｂクリックストリームなどでもよい。
【産業上の利用可能性】
【０２１９】
以上のように、本発明は時刻制御情報を必要なとき挿入（または発生）することで時刻制御情報の量を削減しつつ、低レイテンシであるストリームデータ処理を実現できる。特に、リアルタイムで処理する必要があるストリームデータの量が膨大な量になるファイナンシャルアプリケーション、交通情報システム、トレーサビリティシステム、センサモニタリングシステム、計算機システム管理などに適用することができる。
【図面の簡単な説明】
【０２２０】
【図１】本発明の計算機システムの一例を示すブロック図である。
【図２】本発明の第一実施形態を示したストリームデータ処理サーバの構成を示すブロック図である。
【図３ａ】本発明の第一実施形態を示し、ストリームデータ２１の好適なデータフォーマットの例を模式的に表した図である。
【図３ｂ】本発明の第一実施形態を示し、ストリームデータ２１の好適なデータフォーマットの他の例を模式的に表した図である。
【図４】本発明の第一実施形態を示し、ストリームデータ２１をストリームデータ処理サーバ１００に登録・設定する際の好適なコマンドの記述例を示す説明図である。
【図５】本発明の第一実施形態を示し、問合せ登録コマンドをストリームデータ処理サーバ１００に登録・設定する際の好適なコマンドの記述例を示す説明図である。
【図６】本発明の第一実施形態を示し、問合せ実行部２２６の一例を表した説明図である。
【図７】本発明の第一実施形態を示し、問合せ実行木解析結果管理テーブル２３５の構成例を表した図である。
【図８】本発明の第一実施形態を示し、全体処理を表したフローチャートである。
【図９】本発明の第一実施形態を示し、発火オペレータ抽出処理の処理手順を表したフローチャートである。
【図１０】本発明の第一実施形態を示し、ストリームデータ受付時刻情報を保持する処理手順を表したフローチャートである。
【図１１】本発明の第一実施形態を示し、次回発火時刻を計算する処理手順を表したフローチャートである。
【図１２】本発明の第一実施形態を示し、ＨＢＴを生成する処理手順を表したフローチャートである。
【図１３】本発明の第一実施形態を示し、次回発火時刻計算処理、およびＨＢＴ生成処理を例示したシーケンス図である。
【図１４】本発明の第一実施形態を示し、次回発火時刻を格納する次回発火時刻保持領域を選択する処理手順を表したフローチャートである。
【図１５】本発明の第二実施形態を示したストリームデータ処理サーバの構成を示すブロック図である。
【図１６】本発明の第二実施形態の全体処理を表したフローチャートである。
【図１７】本発明の第二実施形態を示し、次回発火時刻を送信する処理手順を表したフローチャートである。
【図１８】本発明の第二実施形態を示し、ＳＴＴを送信する処理手順を表したフローチャートである。
【符号の説明】
【０２２１】
１００  ストリームデータ処理サーバ
１１  ＣＰＵ
１２  ＭＥＭＯＲＹ
１３  ＤＩＳＫ
１４  Ｉ／Ｆ
２１  ストリームデータ
２２  コマンド
２３  出力結果
１０１  温度センサノード
１０２  湿度センサノード
１０３  ＲＦＩＤタグ
１０４  携帯電話
１０５  ネットワーク
１０６  ネットワーク
１０７  ネットワーク
１０８  センサ基地局
１０９  クレードル
１１０  ＲＦＩＤリーダー
１１１  携帯電話基地局
１１２  ネットワーク
１１３  中継計算機
１１４  ユーザ
１１５  計算機
１１６  ユーザ
１１７  計算機
１１８  株式提供サーバ
２００  オペレーティングシステム（ＯＳ）
２１０  コマンド入力部
２２０  ストリームデータ処理部
２２１  ストリームデータ受信部
２２２  問合せ実行木スケジューラ
２２３  次回発火時刻計算部
２２４  ＨＢＴ生成部
２２５  問合せ実行木解析部
２２６  問合せ実行部
２３１  入力ストリームデータ保持バッファ
２３２  システム時刻保持領域
２３３  ＨＢＴ生成用データ処理時刻保持領域
２３４  次回発火時刻保持領域
２３５  問合せ実行木解析結果管理テーブル
２３６  オペレータ連結キュー
２３７  出力結果保持バッファ
【図１】
2010108044.tif 000003
【図２】
2010108044.tif 000004
【図３ａ】
2010108044.tif 000005
【図３ｂ】
2010108044.tif 000006
【図４】
2010108044.tif 000007
【図５】
2010108044.tif 000008
【図６】
2010108044.tif 000009
【図７】
2010108044.tif 000010
【図８】
2010108044.tif 000011
【図９】
2010108044.tif 000012
【図１０】
2010108044.tif 000013
【図１１】
2010108044.tif 000014
【図１２】
2010108044.tif 000015
【図１３】
2010108044.tif 000016
【図１４】
2010108044.tif 000017
【図１５】
2010108044.tif 000018
【図１６】
2010108044.tif 000019
【図１７】
2010108044.tif 000020
【図１８】
2010108044.tif 000021