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