(57)【要約】【課題】検出されたイベントに関連する事象を見つけるのに要する時間を短くする。【解決手段】ストリームデータ処理において逆再生を行う。具体的には、計算機システム３は、基準時刻（例えばイベント検出時刻）以前の時刻を表すタイムスタンプのうち最も新しい時刻を表すタイムスタンプ（以下、基準最新スタンプ）を含んだ入力データ１４１から先に、複数の入力データ１４１を、入力データ１４１内のタイムスタンプ１４２が表す時刻が新しい順に処理する。その処理の結果を含んだ出力データ１７１の生成の仕方や出力タイミングは、クエリ１３１で指定されている、入力データ１４１の生存期間を基に制御する。これにより、逆再生で、正しく出力データが出力される。【選択図】図４
2010272022.tif 000002
【特許請求の範囲】
【請求項１】
時刻を表すタイムスタンプと演算対象の値とを含んだ入力データのストリームであるストリームデータ内の入力データの生存期間と演算方法とを表す情報を含んだ定義情報を記憶する定義情報記憶部と、
１又は複数の入力データ内の演算対象の値を用いた演算の結果を含んだ出力データの出力である再生を行う再生制御部と、
前記ストリームデータから、或る基準時刻以前の時刻を表すタイムスタンプを含んだ入力データのうち最新の時刻を表すタイムスタンプを含んだ入力データから先に、時間の逆順に入力データを取得し、取得した入力データを前記再生制御部に入力するデータ投入部と
を備え、
前記再生制御部が、下記の処理：
（ａ）入力された入力データを入力データのデータ集合に追加する；
（ｂ）前記データ集合における前記１又は複数の入力データ内の演算対象の値を用いて、前記定義情報が表す演算方法で演算を行う；
（ｃ）前記定義情報が表す生存期間を基に出力が可能か否かを判断する；
（ｄ）前記１又は複数の入力データ内のタイムスタンプと前記生存期間とに基づくタイムスタンプと、前記演算の結果とを含んだ出力データを生成する；
（ｅ）前記（ｃ）の結果が肯定的であれば、前記（ｄ）で生成された出力データを出力する、
を行う、
データ処理システム。
【請求項２】
前記生存期間は、時間と、データ集合に入られる入力データの最大数である最新データ個数とのいずれかで指定されており、
前記再生制御部は、入力処理部と、データ集合保存部と、演算処理部と、出力処理部と、出力判断部と、出力データ生成部とを有し、
前記（ａ）において、前記入力処理部が、前記データ投入部から入力された入力データを前記データ集合保存部に入力し、前記データ集合保存部が、入力された入力データを前記データ集合に追加し、
前記（ｂ）において、前記演算処理部が、前記データ集合内の前記１又は複数の入力データ内のタイムスタンプと、それら１又は複数の入力データ内の演算対象の値を用いた演算の結果とを含んだ内部データを生成し、
前記（ｃ）において、前記出力判断部が、出力が可能か否かを判断し、
前記（ｄ）において、前記出力データ生成部が、前記出力データを生成し、
前記（ｅ）において、前記（ｃ）の結果が肯定的であれば、前記出力処理部が、前記（ｄ）で生成された出力データを出力し、
前記出力データ生成部は、前記（ｂ）で生成された内部データを保存し、
（Ａ）前記生存期間が時間で指定されている場合、
前記（ａ）において、前記入力処理部が、入力される入力データ内のタイムスタンプが表す時刻を、その時刻に生存期間を足すことにより算出された時刻である正順での消滅時刻に補正し、前記データ集合保存部が、補正後のタイムスタンプを含んだ入力データをデータ集合に追加し、
前記（ｃ）において、前記出力判断部が、前記データ集合に最初に追加された入力データが消滅した以降であれば、出力可と判断し、
前記（ｄ）において、前記出力データ生成部が、最新の内部データ内のタイムスタンプと、直前の内部データ内の演算結果とを含んだ出力データを生成し、
（Ｂ）前記生存期間が最新データ個数で指定されている場合、
前記（ｃ）において、前記出力判断部が、前記データ集合に最新データ個数分の入力データが入力された以降であれば、出力可と判断し、
前記（ｄ）において、前記出力データ生成部が、保存されているタイムスタンプのうち最も過去に保存されたタイムスタンプと、最新の内部データ内演算結果とを含んだ出力データを生成する、
請求項１記載のデータ処理システム。
【請求項３】
前記内部データは、更に、データタイプを表す情報を含み、
前記内部データの基になった前記１又は複数の入力データを含んだ前記データ集合が、入力データが追加された時のデータ集合であれば、前記データタイプは「入力」という第１のタイプであり、そのデータ集合が、入力データが消滅する時のデータ集合であれば、前記データタイプは「消滅」という第２のタイプであり、
前記定義情報は、出力方法を表す情報を含み、
前記出力方法としては、入力データがデータ集合に追加された時に演算結果を出力する方法である「入力時」と、入力データがデータ集合から消滅する時に演算結果を出力する方法である「消滅時」とがあり、
前記出力判断部は、前記生存期間が時間で指定されており、且つ、前記データ集合に最初に追加された入力データが消滅した以降である場合、又は、前記生存期間が最新データ個数で指定されており、且つ、前記データ集合に最新データ個数分の入力データが入力された以降である場合において、
（Ｘ）前記出力方法が「入力時」である場合、
（ｘ１）前記内部データに含まれている情報が表すデータタイプが「入力」であれば、出力不可と判断し、
（ｘ２）前記内部データに含まれている情報が表すデータタイプが「消滅」であれば、出力可と判断し、
（Ｙ）前記出力方法が「消滅時」である場合、
（ｙ１）前記内部データに含まれている情報が表すデータタイプが「消滅」であれば、出力不可と判断し、
（ｙ２）前記内部データに含まれている情報が表すデータタイプが「入力」であれば、出力可と判断する、
請求項２記載のデータ処理システム。
【請求項４】
前記出力方法としては、入力データがデータ集合に追加された時と入力データがデータ集合から消滅する時のいずれの時にも出力する方法である「入力時・消滅時」と、一定時間間隔で演算結果を出力する方法である「一定間隔」とがあり、
前記出力判断部は、前記生存期間が時間で指定されており、且つ、前記データ集合に最初に追加された入力データが消滅した以降である場合、又は、前記生存期間が最新データ個数で指定されており、且つ、前記データ集合に最新データ個数分の入力データが入力された以降である場合において、前記出力方法が、「入力時・消滅時」又は「一定間隔」であれば、前記内部データ内の情報が表すデータタイプに関わらず出力可と判断する、
請求項３記載のデータ処理システム。
【請求項５】
前記出力方法が「一定間隔」である場合、前記出力処理部は、前記（ｅ）において、以下の処理：
（ｅ１）前記出力データ生成部によって生成された出力データが、最初に生成された出力データかどうかを判断する；
（ｅ２）前記（ｅ１）の判断の結果が肯定的である場合、
（ｅ２−１）その最初に生成された出力データを出力し、
（ｅ２−２）その出力データ内のタイムスタンプが表す時刻を起点として設定し、
（ｅ３）前記（ｅ２）の判断の結果が肯定的である場合、
（ｅ３−１）所定の時間間隔に従い、起点と前記生成された出力データ内のタイムスタンプが表す時刻の間で起点を除く時刻を表すタイムスタンプを生成し、
（ｅ３−２）生成されたタイムスタンプ毎に、そのタイムスタンプと、前記生成された出力データ内の演算結果とを含んだ新たな出力データを生成して出力し、
（ｅ３−３）前記（ｅ３−２）で最後に出力された出力データ内のタイムスタンプが表す時刻を起点として設定する、
を行う、
請求項４記載のデータ処理システム。
【請求項６】
前記再生制御部は、前記生存期間が時間で指定されている場合、
前記（ａ）において、入力される入力データ内のタイムスタンプが表す時刻を、その時刻に生存期間を足すことにより算出された時刻である正順での消滅時刻に補正し、補正後のタイムスタンプを含んだ入力データをデータ集合に追加し、
前記（ｃ）において、前記データ集合に最初に追加された入力データが消滅した以降であれば、出力可と判断し、
前記（ｄ）において、最新の内部データ内のタイムスタンプと、直前の内部データ内の演算結果とを含んだ出力データを生成する、
請求項１記載のデータ処理システム。
【請求項７】
前記再生制御部は、前記生存期間が、データ集合に入られる入力データの最大数である最新データ個数で指定されている場合、
前記（ｃ）において、前記データ集合に最新データ個数分の入力データが入力された以降であれば、出力可と判断し、
前記（ｄ）において、保存されているタイムスタンプのうち最も過去に保存されたタイムスタンプと、最新の内部データ内演算結果とを含んだ出力データを生成する、
請求項１記載のデータ処理システム。
【請求項８】
前記定義情報は、出力方法を表す情報を含み、前記出力方法としては、入力データがデータ集合に追加された時に演算結果を出力する方法があり、この場合、前記再生制御部は、入力データが消滅する時の前記データ集合に基づく演算の結果についてのみ、出力を可能と判断する、
請求項１、６又は７記載のデータ処理システム。
【請求項９】
前記定義情報は、出力方法を表す情報を含み、前記出力方法としては、入力データがデータ集合から消滅する時に演算結果を出力する方法があり、この場合、前記再生制御部は、入力データが追加された時のデータ集合に基づく演算の結果についてのみ、出力を可能と判断する、
請求項１、６乃至８のうちのいずれか１項に記載のデータ処理システム。
【請求項１０】
前記再生制御部は、複数のデータ集合の結合処理を行うとき、データ集合のタイムスタンプの同期をとる、
請求項１、６乃至９のうちのいずれか１項に記載のデータ処理システム。
【請求項１１】
前記再生制御部は、前記結合処理において、以下の処理：
（ｆ）結合処理の対象となるデータ集合に対して入力データの追加または削除が行われた場合、そのデータ集合である第１のデータ集合のコピーを保存する；
（ｇ）前記第１のデータ集合とは別系統のデータ集合である第２のデータ集合のコピーが存在するかどうかを判断する；
（ｈ）存在すると判断された場合、前記第１のデータ集合のコピーと、前記第２のデータ集合のコピーと、入力データ１４１の追加または削除が行われたことを示すデータタイプ１６４とを含んだデータ集合ユニットを作成し、前記第２のデータ集合のコピーを削除する；
を行い、
前記再生制御部は、前記結合処理内の前記（ｈ）で作成されたデータ集合ユニットを用いて演算を行う、
請求項１０記載のデータ処理システム。
【請求項１２】
前記データ投入部は、前記ストリームデータから、或る基準時刻以前の時刻を表すタイムスタンプを含んだ入力データのうち最新の時刻を表すタイムスタンプを含んだ入力データから先に、時間の逆順に入力データを取得することに並行して、前記基準時刻以降の時刻を表すタイムスタンプを含んだ入力データのうち最古の時刻を表すタイムスタンプを含んだ入力データから先に、時間順に入力データを取得して前記再生制御部に入力し、
前記再生制御部は、前記（ａ）乃至（ｅ）の処理と並行して、時間順に入力される入力データを用いた正再生を行う、
請求項１、６乃至１１のうちのいずれか１項に記載のデータ処理システム。
【請求項１３】
時刻を表すタイムスタンプと演算対象の値とを含んだ入力データのストリームであるストリームデータから、或る基準時刻以前の時刻を表すタイムスタンプを含んだ入力データのうち最新の時刻を表すタイムスタンプを含んだ入力データから先に、時間の逆順に入力データを取得し、
取得された入力データを入力データのデータ集合に追加し、
前記データ集合における前記１又は複数の入力データ内の演算対象の値を用いて、入力データの生存期間と演算方法とを表す情報を含んだ定義情報が表す演算方法で演算を行い、
前記定義情報が表す生存期間を基に出力が可能か否かを判断し、
前記１又は複数の入力データ内のタイムスタンプと前記生存期間とに基づくタイムスタンプと、前記演算の結果とを含んだ出力データを生成し、
出力が可能と判断された場合、前記生成された出力データを出力する、
ことをコンピュータに実行させるためのコンピュータプログラム。
【請求項１４】
記憶資源と、
前記記憶資源に接続されたプロセッサと
を備え、
前記記憶資源は、時刻を表すタイムスタンプと演算対象の値とを含んだ入力データのストリームであるストリームデータ内の入力データの生存期間と演算方法とを表す情報を含んだ定義情報を記憶し、
前記プロセッサが、下記の処理：
（ａ）前記ストリームデータから、或る基準時刻以前の時刻を表すタイムスタンプを含んだ入力データのうち最新の時刻を表すタイムスタンプを含んだ入力データから先に、時間の逆順に入力データを取得する；
（ｂ）前記取得された入力データを入力データのデータ集合に追加する；
（ｃ）前記データ集合における前記１又は複数の入力データ内の演算対象の値を用いて、入力データの生存期間と演算方法とを表す情報を含んだ定義情報が表す演算方法で演算を行う；
（ｄ）前記定義情報が表す生存期間を基に出力が可能か否かを判断する；
（ｅ）前記１又は複数の入力データ内のタイムスタンプと前記生存期間とに基づくタイムスタンプと、前記演算の結果とを含んだ出力データを生成する；
（ｆ）出力が可能と判断された場合、前記生成された出力データを出力する；
計算機システム。
【請求項１５】
（ｘ）時刻を表すタイムスタンプと演算対象の値とを含んだ入力データのストリームであるストリームデータから、或る基準時刻以前の時刻を表すタイムスタンプを含んだ入力データのうち最新の時刻を表すタイムスタンプを含んだ入力データから先に、時間の逆順に入力データを入力し、
（ａ）入力された入力データを入力データのデータ集合に追加し、
（ｂ）前記データ集合における前記１又は複数の入力データ内の演算対象の値を用いて、ストリームデータ内の入力データの生存期間と演算方法とを表す情報を含んだ定義情報が表す演算方法で演算を行い、
（ｃ）前記定義情報が表す生存期間を基に出力が可能か否かを判断し、
（ｄ）前記１又は複数の入力データ内のタイムスタンプと前記生存期間とに基づくタイムスタンプと、前記演算の結果とを含んだ出力データを生成し、
（ｅ）前記（ｃ）の結果が肯定的であれば、前記（ｄ）で生成された出力データを出力する、
データ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストリームデータ処理に関する。
【背景技術】
【０００２】
ストリームデータ処理を行うコンピュータシステムでは、一般に、時々刻々と到来するデータ（以下、「時系列データ」と言うことがある）が扱われる。時系列データは、ストリームデータを構成する一つの要素である。言い換えれば、ストリームデータは、時系列データの集合である。
【０００３】
時系列データは、その時系列データの発生時刻を表す情報であるタイムスタンプを含んでいる。ストリームデータ処理では、時系列データに対する演算（例えば、グループ分け、重複排除、和・差・積集合演算、集計演算、或いは、結合演算）が行われる。
【０００４】
ただし、時系列データは、無限に到来し続けるので、演算を行うためには、ストリームデータ（多数の時系列データ）を有限のデータ集合に区切る必要がある。ストリームデータを有限のデータ集合に区切る方法としては、例えば、スライディングウィンドウ方式を利用する方法がある（例えば非特許文献１）。
【０００５】
スライディングウィンドウ方式によれば、時系列データの生存期間が設定される。ストリームデータ処理は、例えば、以下の処理：
（１）設定された生存期間を基に、図２に示すように、入力されたストリームデータ４１から、或る時点における演算対象となるウィンドウ（データ集合）４２を取得する処理；
（２）データ集合４２に含まれている時系列データ（入力データ）４５に対する演算を行う処理；
（３）演算結果を含んだ出力データ４６のデータ集合４３内の出力データ４６を順次に出力する処理；
を含む。この結果、順次に出力された出力データ４６でストリームデータ４４が構築される。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】B.Babcock、 S.Babu、 M.Datar、 R.Motwani and J.WＩＤom、 "Modelsand issues in data stream systems"、 In Proc. ofPODS 2002、 pp.1-16.（2002）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
以下、適宜、時刻について「古い」／「新しい」と表現する。例えば、第１の時刻が第２の時刻より古いとは、第１の時刻が第２の時刻より過去であることを意味する。一方、第１の時刻が第２の時刻より新しいとは、第１の時刻が第２の時刻より未来であることを意味する。
【０００８】
ところで、時々刻々と到来した時系列データ（入力データ）は一旦蓄積される。そして、イベント（例えば、障害或いは障害の兆候）が検出された場合に、イベントが検出された時刻（以下、イベント検出時刻）よりも過去の時刻を表すタイムスタンプを含んだ入力データを基に、イベントに関連する事象（例えば、イベントの発生原因、以下、イベント関連事象）を探索する処理（以下、探索処理）が行われる。具体的には、例えば、基準となる時刻（以下、基準時刻）が設定され、その時刻を基準に、探索処理が行われる。探索処理では、例えば、基準時刻以降の時刻を表すタイムスタンプを含んだ入力データが、時間順に（時間軸方向に沿って）処理される。すなわち、最古タイムスタンプ（基準時刻以降の時刻を表すタイムスタンプのうち最も古い時刻を表すタイムスタンプ）を含んだ入力データから先に、複数の入力データが、タイムスタンプが表す時刻が古い順に処理される。イベント関連事象は、例えば、イベント関連事象に関わる入力データを基に生成された出力データから発見される。
【０００９】
イベント関連事象は、探索処理において発見される事象であるため、通常、イベント関連事象が生じた時刻（以下、イベント関連時刻）を探索処理の開始前に知ることはできない。そのため、基準時刻の設定が難しい。
【００１０】
イベント検出時刻から基準時刻までの時間が長いと、基準時刻がイベント関連時刻よりも過去の時刻となる可能性が高く、故に、探索処理でイベント関連事象が見つかる可能性が高い。しかし、この場合、イベント関連事象が見つかるまでに処理しなければならない時系列データがたくさん存在する可能性があり、それ故、イベント関連事象が見つかるまで、長い時間を要する可能性がある。
【００１１】
一方、イベント検出時刻から基準時刻までの時間が短いと、基準時刻がイベント関連時刻より未来の時刻となる可能性が高く、故に、探索処理でイベント関連事象が見つからない可能性が高い。この場合、基準時刻を変えて探索処理をやり直さなければならない。探索処理のやり直しが生じると、結局、イベント関連事象が見つかるまでに長い時間を要してしまう。
【００１２】
そこで、本発明の目的は、検出されたイベントに関連する事象を見つけるのに要する時間を短くすることにある。
【課題を解決するための手段】
【００１３】
基準時刻（例えばイベント検出時刻）以前の時刻を表すタイムスタンプのうち最も新しい時刻を表すタイムスタンプ（以下、基準最新スタンプ）を含んだ入力データから先に、複数の入力データが、入力データ内のタイムスタンプが表す時刻が新しい順に処理される。つまり、ストリームデータ処理において逆再生が行われる。
【００１４】
「ストリームデータ処理における逆再生」とは、ストリームデータ処理における正再生とは逆の順序での再生のことである。
【００１５】
「ストリームデータ処理における正再生」とは、時間順（以下、「正順」と言うことがある）での再生のことである。具体的には、ストリームデータ処理における正再生とは、図３Ａに示すように、入力データ内のタイムスタンプが表す時刻が古い順に、複数の入力データをデータ集合（ウィンドウ）に入力して処理し、その処理の結果として生成された複数の出力データ（５１〜５５）を、出力データ内のタイムスタンプが表す時刻が古い順（Ｔ＝１、２、３、４、５の順）に出力することである。この場合、或る時刻を基準に時間軸方向に沿って入力データが処理される。
【００１６】
一方、「ストリームデータ処理における逆再生」とは、時間順とは逆の順序（以下、「逆順」と言うことがある）での再生のことである。具体的には、ストリームデータ処理における逆再生とは、図３Ｂに示すように、入力データ内のタイムスタンプが表す時刻が新しい順に入力データをデータ集合に入力し、入力された入力データを処理し、その処理の結果として生成された複数の出力データ（６１〜６５）を、出力データ内のタイムスタンプが表す時刻が新しい順（Ｔ＝５、４、３、２、１の順）に出力することである。ここで、出力データが持つ処理の結果は、正再生時のタイムスタンプが同じ出力データが持つ処理の結果と同じである。この場合、ある時刻を基準に時間軸方向と逆方向に沿って入力データが処理される。
【００１７】
本発明によれば、基準最新スタンプを含んだ入力データから先に、複数の入力データが、逆順（すなわち時間を遡る順序）で処理される。これにより、イベント関連事象を見つけるのに要する時間を短くすることが期待できる。
【００１８】
なお、ストリームデータ処理における逆再生を採用するにあたり、幾つかの点、例えば以下の４つの点に留意することが望ましい。なお、以下の説明では、１つの入力データは、タイムスタンプ（Ｔ）と値（Ｖ）を含んでおり、１又は複数の入力データを用いた演算により生成された１つの出力データは、タイムスタンプ（Ｔ）と値（Ｖ）の合計とを含むとする。従って、演算は、集計であるとする。
【００１９】
＜第１の留意点＞。
【００２０】
第１の留意点は、出力データの作成に関する。
【００２１】
図４Ａに示すように、正再生では、入力データ（７１〜７２）が入力されると、そのときに生存している入力データの演算の結果が出力される（７３〜７４）。例えば、入力データ７１が入力された場合、生存している入力データは入力データ７１のみのため、入力データ７１と同じタイムスタンプ及び値（Ｔ＝１、合計＝１）を含んだ出力データ７３が出力される。次に、入力データ７２が入力された場合、生存している入力データは入力データ７１及び７２のため、入力データ７１のＶ＝１と入力データ７２のＶ＝２との合計である合計＝３と、入力データ７２のＴ＝２とを含んだ出力データ７４が出力される。
【００２２】
このとき、演算対象の入力データ（７１〜７２）のデータ集合は、ある時点から過去に遡った期間の中で発生したデータの集合である。つまり、入力データ７２が入力されたとき、そのデータよりも過去に発生した入力データ７１が、演算対象のデータ集合中に存在している。
【００２３】
従って、単純に時間軸と逆方向に入力データを入力して演算を行っても（つまり単純に逆再生を行っても）、演算結果を正しく再生することができない。具体的には、例えば、図４Ｂに示すように、逆再生では、タイムスタンプが表す時刻が新しい順に入力データが入力されるので、入力データ８２が入力され、その後で、入力データ８１が入力される。入力データ８２が入力されたときには、本来なら入力データ８１が演算対象のデータ集合中に存在しているはずだが、存在しない状態で演算が行われる。このため、誤った合計＝２を含んだ出力データ８４が出力されてしまう。また、入力データ８１が入力されたときには、入力データ８２は演算対象のデータ集合中に存在しないはずなのに、その入力データ８２が存在する状態で演算が行われる。このため、誤った合計＝３を含んだ出力データ８３が出力されてしまう。
【００２４】
そこで、入力データの生存期間を考慮して逆再生を行う必要がある。生存期間は、例えば、時間と最新データ個数のいずれかで指定（表現）される。「最新データ個数」とは、データ集合（ウィンドウ）に入れられる入力データの最大数である。
【００２５】
生存期間が時間で指定されている場合は、入力データ内のタイムスタンプが補正される。補正後のタイムスタンプが表す時刻は、補正前のタイムスタンプが表す時刻に生存期間を足すことにより算出される時刻である。補正後のタイムスタンプが表す時刻は、正順での消滅時刻（正再生において、入力データが消滅する時刻）、言い換えれば、逆順での入力時刻（逆再生において、入力データ内のタイムスタンプが表す時刻）である。一方、補正前のタイムスタンプが表す時刻は、正順での入力時刻（正再生において、入力データ内のタイムスタンプが表す時刻）、言い換えれば、逆順での消滅時刻（逆再生において、入力データが消滅する時刻）である。従って、逆再生では、入力データは、その入力データ内の補正前のタイムスタンプが表す時刻（言い換えれば、その入力データ内の補正後のタイムスタンプが表す時刻に生存期間が足された時刻）に、その入力データが消滅することになる。図４Ｃに示すように、入力データ（９２〜９１）内の補正後のタイムスタンプが表す時刻（Ｔ＝５、Ｔ＝４）に、入力データが存在しないとして演算が行われ、補正前のタイムスタンプが表す時刻（Ｔ＝２、Ｔ＝１）に、入力データ（９２〜９１）が存在するとして演算が行われる（図４Ｃの例では生存期間は３である）。この結果、正再生での入力時刻（Ｔ＝２、Ｔ＝１）の時点における演算対象のデータ集合の状態を正しく再生すること、つまり、本来の出力データ（９４〜９３）を得ることができる。出力データ（９４〜９３）は、出力データ９４、９３の順に出力される。つまり、正再生で出力される出力データ７３、７４と同じ出力データ９３、９４が、正再生の場合と逆の順序で出力される。
【００２６】
生存期間が最新データ個数で指定された場合は、入力データ内のタイムスタンプが表す時刻が新しい順に入力データが入力されたとき、データ集合の状態は、そのデータ集合に最後に入力された入力データ内のタイムスタンプが表す時刻での状態ではなく、そのデータ集合に最初に入力された入力データ内のタイムスタンプが表す時刻での状態である。つまり、データ集合の状態に対応した時刻は、指定された最新データ個数に応じてずれることになる。従って、この場合、出力データ内のタイムスタンプを、指定された最新データ個数に応じて補正する必要がある。
【００２７】
＜第２の留意点＞。
【００２８】
第２の留意点は、出力データを出力するタイミングに関する。
【００２９】
図５Ａに示すように、正再生では、入力データ（１０１〜１０３）をウィンドウ（データ集合）１００に入力するたびに出力データ（演算結果を含んだデータ）を出力することができる。
【００３０】
しかし、図５Ｂに示すように、逆再生では、Ｔ＝１０を含んだ入力データがウィンドウ１１０に入力されても、その時点では正しい演算結果は得られない。このケースでは、データ集合が正しく再現された時点、つまり、ウィンドウ１１０に、データの生存期間で指定した分の数（例えば６個）の入力データ（１１１〜１１６）が入力された時点で、最新の演算結果の出力を開始する必要がある。
【００３１】
そこで、生存期間が時間で指定された場合は、正再生では、最新の時刻を表すタイムスタンプを含んだ入力データが正順でデータ集合に入力されたときに、そのデータ集合が最新の状態となる。一方、逆再生では、データ集合に入力された入力データのうち最新の時刻を表すタイムスタンプを含んだ入力データが消滅するときが、そのデータ集合が最新の状態となる。したがって、最新の時刻を表すタイムスタンプを含んだ入力データが消滅した時点から、以降の最新の演算結果（出力データ）が出力される。
【００３２】
生存期間が最新データ個数で指定された場合は、データ集合の中が入力データで埋まったとき、つまり、指定された最新データ個数分の入力データがデータ集合に入力されたときが、そのデータ集合が最新の状態のときである。そのときから、以降の最新の演算結果（出力データ）が出力される。
【００３３】
＜第３の留意点＞。
【００３４】
第３の留意点は、データ集合の結合を行う際の同期化に関する。すなわち、データの生存期間や出力タイミングを考慮すると、或る入力データを入力した時点で、複数のデータ集合の間で、データ集合がどの時点（タイムスタンプ）の状態であるかがずれる場合がある。したがって、複数のデータ集合の結合を行う際、データ集合がどの時点の状態であるかのずれを考慮して、データ集合の同期化を行う必要がある。
【００３５】
＜第４の留意点＞。
【００３６】
第４の留意点は、ユーザが指定した出力タイミングと、逆再生での出力タイミングとの関係に関する。具体的には、例えば、入力データが入力された時に演算結果を出力するとユーザから指定されている場合は、逆再生では、入力データが消滅するときに演算結果が出力される。一方、入力データが削除される時に演算結果を出力するとユーザから指定されている場合は、逆再生では、入力データが入力されるときに演算結果が出力される。
【００３７】
本発明に係るストリームデータ処理技術は、様々な分野、例えば、株の取引データに基づく株価予測、たくさんの車両から収集された稼動データ（例えば、速度、進行方向などを表すデータ）を利用した渋滞予測、ＷＥＢサーバへのアクセスの監視、機器の稼動状況の監視、物流業等での車両等の運行管理、蓄積されたビジネスデータ（ビジネスに関するデータ）に基づく新たな経営指標の作成、収集された複数の診察データ（例えば、複数の患者の心電図データやスキャン画像データ等）に基づく異常パターンの発見などに適用することが期待できる。
【図面の簡単な説明】
【００３８】
【図１】図１は、本発明の一実施形態に係るデータ処理システムが適用された計算機システム３の構成を示す。
【図２】図２は、ストリームデータ処理の説明図である。
【図３】図３Ａは、正再生の結果を示す。図３Ｂは、逆再生の結果を示す。
【図４】図４Ａは、正再生の結果の具体例を示す。図４Ｂは、単純な逆再生の結果の具体例を示す。図４Ｃは、生存期間が考慮された逆再生の結果の具体例を示す。
【図５】図５Ａは、正再生での出力可能なタイミングの説明図である。図５Ｂは、逆再生での出力可能なタイミングの説明図である。
【図６】図６は、データ蓄積装置４のデータ構造を示す。
【図７】図７は、クエリ保存装置５のデータ構造を示す。
【図８】図８Ａは、クエリ１３１のデータ構造を示す。図８Ｂは、クエリ定義情報２３のデータ構造を示す。
【図９】図９Ａは、入力データ１４１のデータ構造を示す。図９Ｂは、データ集合１５１のデータ構造を示す。図９Ｃは、内部データ１６１のデータ構造を示す。図９Ｄは、出力データ１７１のデータ構造を示す。
【図１０】図１０は、再生制御プログラム１６内でのデータの流れを示す。
【図１１】図１１は、入力データ１４１の入力処理の流れを示す。
【図１２】図１２は、演算およびデータ出力の処理の流れを示す。
【図１３】図１３は、同期処理を行う必要がない場合で、且つ生存期間１３３が時間で指定されている場合の、出力データ１７１の生成方法を示す。
【図１４】図１４は、同期処理を行う必要がない場合で、且つ生存期間１３３が最新データ個数で指定されている場合の、出力データ１７１の生成方法を示す。
【図１５】図１５は、出力可否判断の処理の流れを示す（但し、出力方法１３５の指定は無し）。
【図１６】図１６は、データ集合１５１の同期化の流れを示す。
【図１７】図１７は、データ集合１５１の同期化処理のうち、結合演算の対象となるデータ集合１５１のコピーとタイムスタンプ１４２の組を、データ集合保存部３２に保存した後、実際に同期化を行う処理の具体例を示す。
【図１８】図１８は、出力可否判断の処理の流れを示す（但し、出力方法１３５の指定は有り）。
【図１９】図１９は、出力方法１３５として「一定間隔」が指定されている場合の出力処理の流れを示す。
【図２０】図２０は、図１９のステップＳ２７３とステップＳ２７４の具体例を示す。
【図２１】図２１は、クエリの連結処理の流れを示す。
【図２２】図２２は、第１の条件（データ集合が正常になる条件）が真になる条件が書かれた表を示す。
【図２３】図２３は、第２の条件（クエリ定義情報２３内の出力方法１３５と、演算結果のデータタイプ１６４との関係）が真／偽になる条件が書かれた表を示す。
【図２４】図２４は、ストリームデータ処理において逆再生を行うことの一つの効果の説明図である。
【図２５】図２５は、データ集合１５１の同期化処理のうち、結合演算の対象となるデータ集合１５１のコピーとタイムスタンプ１４２の組をデータ集合保存部３２に保存するまでの処理であって、生存期間が時間で指定されている場合の具体例を示す。
【図２６】図２６は、データ集合１５１の同期化処理のうち、結合演算の対象となるデータ集合１５１のコピーとタイムスタンプ１４２の組をデータ集合保存部３２に保存するまでの処理であって、生存期間が最新データ個数で指定されている場合の具体例を示す。
【発明を実施するための形態】
【００３９】
図１は、本発明の一実施形態に係るデータ処理システムが適用された計算機システム３の構成を示す。
【００４０】
計算機システム３は、１又は複数の計算機で構成されている。計算機システム３は、例えば、第１の監視システムと第２の監視システムを有する。第１の監視システムは、簡易的な情報を有する時系列データで構成される第１のストリームデータを処理し、第２の監視システムは、詳細な情報を有する時系列データで構成される第２のストリームデータを処理する。第１の監視システムが、第１のストリームデータを処理することによって何らかのイベントを検出し、第２の監視システムが、第２のストリームデータを処理することによって、第１の監視システムによって検出されたイベントに関する事象を探索する。第１及び第２の監視システムの少なくとも一方を、コンピュータプログラムで実現することができる。後述する再生制御プログラム１６は、第２の監視システムに相当する。
【００４１】
計算機システム３は、１又は複数のストリームデータソース１から、ネットワーク２を通じて、時系列データを受信する。
【００４２】
ストリームデータソース１は、時々刻々と時系列データを送信する。時系列データは、例えば、温度センサ等のデバイスから取得された値（情報）とその時系列データが作成された時刻を表すタイムスタンプとを含んでいる。
【００４３】
計算機システム３には、データ蓄積装置４と、クエリ保存装置５が接続される。データ蓄積装置４とクエリ保存装置５は、例えば、計算機システム３に接続された外部記憶装置で実現されても良いし、計算機システム３に内蔵されている記憶装置で実現されても良い。データ蓄積装置４とクエリ保存装置５は、別々の記憶装置で実現されても良いし、一つの記憶装置で実現されても良い。
【００４４】
データ蓄積装置４には、ストリームデータソース１から受信された時系列データが蓄積される。データ蓄積装置４のデータ構造を図６に示す。データ蓄積装置４は、ストリームデータテーブル１２１を保持する。ストリームデータテーブル１２１は、時系列データ毎に、ストリームＩＤ（１２２）と、タイムスタンプ（１２３）と、データ項目１（１２４）〜データ項目Ｎ（１２５）とを含む（Ｎは自然数）。ストリームＩＤ（１２２）は、時系列データの送信元のストリームデータソース１の識別子である。タイムスタンプ１２３は、時系列データが有するタイムスタンプが表す時刻である。データ項目１（１２４）〜データ項目Ｎ（１２５）は、時系列データに含まれている値を示す。なお、データ項目が１つだけの場合もあり得る。なお、時系列データは、このようにテーブル形式で管理することに限らず、他種の形式で管理されても良い。
【００４５】
クエリ保存装置５は、クエリ１３１を保存する。クエリ１３１は、特定の言語、例えば、ＳＱＬ（Structured Query Language）に類似した宣言型の検索言語ＣＱＬ（Continuous
Query Language）で記述される。クエリ保存装置５は、ファイルシステムであり、図７に示すように、ファイル名の付いたクエリ１３１をファイル形式で保存する。クエリ１３１は、解析されて、解析結果を表す情報であるクエリ定義情報が、主記憶装置１１に展開される。
【００４６】
図８Ａは、クエリ１３１のデータ構造を示し、図８Ｂは、クエリ定義情報２３のデータ構造を示す。クエリ１３１及びクエリ定義情報にそれぞれ含まれる情報は実質的に同一なので、同種の情報には同じ参照符号が付されている。
【００４７】
クエリ１３１及びクエリ定義情報２３は、ストリームＩＤ（１３２）、生存期間（１３３）、演算定義（１３４）及び出力方法（１３５）を含む。
【００４８】
ストリームＩＤ（１３２）は、クエリ１３１がどのストリームデータソース１から送信された時系列データを解析するかを示す情報（つまりストリームデータソース１の識別子）である。
【００４９】
生存期間（１３３）は、時系列データの生存期間を表す情報である。生存期間１３３を指定する（表現する）方法は幾つか考えられるが、本実施形態では、時間と最新データ個数のいずれかで指定される。
【００５０】
演算定義（１３４）は、時系列データに対してどのような演算を行うかを表す情報である。
【００５１】
出力方法（１３５）は、演算結果をどのように出力するかを表す情報である。出力方法（１３５）として指定される値は、例えば、時系列データが入力された時に演算結果を出力する「入力時」、時系列データが消滅するときに出力する「消滅時」、入力時と消滅時の両方で演算結果を出力する「入力時・消滅時」、及び、一定時間間隔で演算結果を出力する「一定間隔」のいずれかである。
【００５２】
再び図１を参照する。計算機システム３は、主記憶装置１１と、操作装置１２と、プロセッサ１３と、入力装置１４と、出力装置１５とを有する。
【００５３】
操作装置１２は、マンマシンインタフェースである。具体的には、例えば、操作装置１２は、ユーザから探索処理の指示を受け付ける。操作装置１２が探索処理の指示を受けると、後述のクエリ制御部２２およびデータ投入部２１に、探索処理の指示が通知される。
【００５４】
プロセッサ１３は、典型的にはマイクロプロセッサであり、主記憶装置１１にロードされた再生制御プログラム１６を実行する。このプログラム１６は、可搬型の記憶媒体（例えばＣＤ−ＲＯＭ）或いは遠隔のサーバ等のプログラムソースからインストールされたプログラムである。
【００５５】
入力装置１４は、ストリームデータソース１又はデータ蓄積装置４から入力される時系列データを受け付ける。その時系列データは、後述の入力処理部３１に入力される。また、入力装置１４は、クエリ保存装置５が保持するクエリ１３１を受け付ける。そのクエリ１３１は、後述のクエリ制御部２２に入力される。
【００５６】
出力装置１５は、後述の出力処理部３７が出力した出力データを、計算機システム３の外部に出力する。
【００５７】
主記憶装置１１は、再生制御プログラム１６を記憶する。再生制御プログラム１６は、データ投入部２１と、クエリ制御部２２と、再生制御部２４といった機能を有する。データ投入部２１、クエリ制御部２２、再生制御部２４（後述する入力処理部３１、データ集合保存部３２、同期処理部３３、演算処理部３４、出力処理部３７、出力判断部３５及び出力データ生成部３６）のうちのいずれか、或いは、それらのうちのいずれかの少なくとも一部分が、集積回路化するなどしてハードウェアで実現されても良い。以下の説明において、コンピュータプログラムが主語になる場合は、実際にはそのコンピュータプログラムを実行するプロセッサ１３によって処理が行われるものとする。
【００５８】
再生制御プログラム１６が利用するデータとして、図９Ａに示す入力データ１４１と、図９Ｂに示すデータ集合１５１と、図９Ｃに示す内部データ１６１と、図９Ｄに示す出力データ１７１とがある。
【００５９】
入力データ１４１は、データ蓄積装置４から入力された時系列データ（すなわち、入力されたストリームデータの一データ要素）である。入力データ１４１は、タイムスタンプ（１４２）、データ内容（１４３）、ストリームＩＤ（１４６）を有する。タイムスタンプ（１４２）は、図６に示したテーブル１２１に登録されているタイムスタンプ１２３である。データ内容（１４３）は、データ項目１（１４４）〜データ項目Ｎ（１４５）を有し、それは、そのテーブル１２１に登録されているデータ項目１（１２４）〜データ項目Ｎ（１２５）である。ストリームＩＤ（１４６）は、そのテーブル１２１に登録されているストリームＩＤ（１２２）である。
【００６０】
データ集合１５１は、クエリ１３１に記述した演算定義１３４の演算対象となる入力データ１４１の集合である。データ集合１５１は、入力データ１４１の他に、ストリームＩＤ（１５２）を含む。ストリームＩＤ（１５２）は、このデータ集合１５１に対応するクエリ１３１が有するストリームＩＤ（１３２）である。つまり、データ集合１５１は、クエリ１３１毎に作成される。
【００６１】
内部データ１６１は、再生制御プログラム１６内で演算結果を受け渡すために用いられるデータである。内部データ１６１は、タイムスタンプ（１６２）、データ内容（１６３）、データタイプ（１６４）を有する。タイムスタンプ（１６２）は、この内部データ１６１の基になった１又は複数の入力データ１４１内のタイムスタンプ１４２に基づいて決定された時刻を表す。データ内容（１６３）は、データ項目１（１６５）からデータ項目Ｍ（１６６）といった演算結果を含む。データタイプ（１６４）は、演算結果のタイプを表す情報である。データタイプ（１６４）としては、例えば、「入力」と「消滅」がある。データタイプ「入力」は、内部データ１６１内の演算結果が、データ集合１５１の中に新しい入力データが入力（追加）されたときの演算結果であることを意味する。データタイプ「消滅」は、内部データ１６１内の演算結果が、データ集合１５１の中で生存期間が終了した入力データ１４１が消滅したときの演算結果であることを意味する。
【００６２】
出力データ１７１は、演算結果として出力されるデータである。出力データ１７１は、入力データ１４１と同様、タイムスタンプ（１７２）、データ内容（１７３）、ストリームＩＤ（１７６）を持つ。タイムスタンプ（１７２）は、この出力データ１７１の基になった１又は複数の入力データ１４１内のタイムスタンプ１４２に基づいて決定された時刻、具体的には、この出力データ１７１に対応する内部データ１６１内のタイムスタンプ（１６２）である。データ内容（１７３）は、データ項目１（１７４）からデータ項目Ｌ（１７５）といった演算結果を含んでいる。これらは、具体的には、この出力データ１７１に対応する内部データ１６１内のデータ内容（１６３）に含まれているデータ項目１（１６５）からデータ項目Ｍ（１６６）である。ストリームＩＤ（１７６）は、出力データ１７１を時系列データととらえたときのデータ系列のＩＤを示し、後述の出力処理部３７で割り振られる。
【００６３】
図１０は、再生制御プログラム１６内でのデータの流れを示す。
【００６４】
入力データ１４１は、データ投入部２１から入力処理部３１に入力され、入力処理部３１からデータ集合保存部３２に保持される。そして、入力データ１４１の集合であるデータ集合１５１が、データ集合保存部３２から、同期処理部３３を介して又は介することなく、演算処理部３４に入力される。ここで、データ集合保存部３２から演算処理部３４にデータ集合１５１が入力されるとき、および、同期処理部３３から演算処理部３４にデータ集合１５１が入力されるときには、データタイプ１６４、および、データ集合１５１がどの時刻の状態であるかを示すタイムスタンプ１４２も一緒に入力される。また、データ集合保存部３２から同期処理部３３にデータ集合１５１が入力されるときには、データタイプ１６４も一緒に入力される。内部データ１６１は、演算処理部３４から出力処理部３７に入力され、出力処理部３７から出力判断部３５及び出力データ生成部３６に入力される。出力データ１７１は、出力データ生成部３６によって生成され、出力処理部３７に入力される。出力処理部３７に入力された出力データ１７１は、再生制御プログラム１６の外に出力される。
【００６５】
図１に示したクエリ制御部２２は、例えば、ユーザから、操作装置１２を通じて、探索処理の指示（例えば逆再生の指示）、及び、クエリ１３１のファイル名を受ける。ファイル名を受けた場合、クエリ制御部２２は、入力装置１４を通じて、クエリ保存装置５から、ユーザから指定されたファイル名を有するクエリ１３１を取得する。クエリ１３１を取得した場合、クエリ制御部２２は、そのクエリ１３１を解析し、その解析結果を表すクエリ定義情報２３（図８Ｂ参照）を保持する（例えば主記憶装置１１に格納する）。クエリ制御部２２は、クエリ定義情報２３を再生制御部２４に渡し、また、データ投入部２１に、データ入力の指示を出す。データ投入部２１に指示を出す際、クエリ制御部２２は、クエリ定義情報２３中のストリームＩＤ（１３２）を渡す。
【００６６】
データ投入部２１は、クエリ制御部２２からデータ入力の指示およびストリームＩＤ（１３２）を受けた場合、入力装置１４を通じて、データ蓄積装置４から、クエリ制御部２２から渡されたストリームＩＤ（１３２）を含んだ入力データ１４１を、タイムスタンプ１２３が表す時刻が新しい順に取得し、取得した入力データ１４１を入力処理部３１に入力する。
【００６７】
再生制御部２４は、クエリ制御部２２から渡されたクエリ定義情報２３の内容に基づいて、ストリームデータ処理における再生を制御する。再生としては、前述したように、正再生と逆再生がある。再生制御部２４は、再生制御部２４は、入力処理部３１、データ集合保存部３２、同期処理部３３、演算処理部３４、出力処理部３７、出力判断部３５及び出力データ生成部３６を有する。これらの機能（３１〜３７）は、クエリ定義情報２３を参照することができる。
【００６８】
入力処理部３１は、データ投入部２１から入力データ１４１を受け、クエリ定義情報２３内の生存期間１３３を参照する。生存期間１３３が時間で指定されている場合は、入力処理部３１は、入力データ１４１内のタイムスタンプ１４２が表す時刻に生存期間１３３を足すことで正順での消滅時刻を算出し、タイムスタンプ１４２を正順での消滅時刻を表すタイムスタンプ１４２に補正し、補正後のタイムスタンプを含んだ入力データ１４１をデータ集合保存部３２に入力する。生存期間１３３が最新データ個数で指定されている場合は、入力処理部３１は、入力データ１４１をそのままデータ集合保存部３２に入力する。
【００６９】
データ集合保存部３２は、クエリ定義情報２３内のストリームＩＤ（１３２）を参照し、そのストリームＩＤ（１３２）と同じストリームＩＤ（１５２）を持つデータ集合（ウィンドウ）１５１を保持する。また、データ集合保存部３２は、入力処理部３１から入力データ１４１を受け、その入力データ１４１内のストリームＩＤ（１４６）と同じストリームＩＤ（１５２）を有するデータ集合１５１に、その入力データ１４１を追加する。また、データ集合保存部３２は、データ集合１５１内の入力データ１４１のうち、そのデータ集合１５１に対応するクエリ定義情報２３内の生存期間１３３が表す期間が経過した入力データ１４１を削除する。データ集合保存部３２は、入力データ１４１の追加および削除の際、その追加または削除が行われたデータ集合１５１を、演算処理部３４に渡す。その際に、データ集合保存部３２は、入力データ１４１の追加の場合は、データタイプ１６４「入力」を、そのデータ集合１５１と一緒に演算処理部３４に渡す。一方、入力データ１４１の削除の場合は、データ集合保存部３２は、データタイプ１６４「消滅」を、演算処理部３４に、データ集合１５１と一緒に渡す。また、データ集合保存部３２は、そのデータ集合１５１がどの時刻の状態であるかを示すタイムスタンプ１４２を、演算処理部３４に、そのデータ集合１５１と一緒に渡す。ただし、クエリ定義情報２３から、データ集合１５１が結合演算の対象であり且つ同期化が必要であることが特定された場合、データ集合保存部３２は、データ集合１５１に入力データ１４１が追加または削除されても、データ集合１５１を演算処理部３４に渡さない。そのデータ集合１５１は同期処理部３３に渡される。ここでデータ集合保存部３２は、入力データ１４１の追加の場合は、データタイプ１６４「入力」を、入力データ１４１の削除の場合は、データタイプ１６４「消滅」を、同期処理部３３に、データ集合１５１と一緒に渡す。
【００７０】
同期処理部３３は、クエリ定義情報２３を参照し、演算定義１３４に従って、複数のデータ集合１５１に対して結合処理を行う場合は、タイムスタンプのずれが発生するので、データ集合１５１の同期化を行い、同期化した複数のデータ集合１５１を、演算処理部３４に渡す。まず、同期処理部３３は、データ集合保存部３２が保持するデータ集合１５１に入力データ１４１が追加または削除されたとき、そのデータ集合１５１のコピーを、データ集合保存部３２に保存する。また、その際、同期処理部３３は、別系統の入力データ１４１で、データ集合１５１のコピーを保存してあるものを取得し、その取得したデータ集合１５１のコピーと、入力データ１４１が追加または削除されたデータ集合１５１のコピーを、演算処理部３４に渡す。その際、入力データ１４１追加の場合は、データタイプ１６４「入力」が、データ集合１５１のコピーと一緒に演算処理部３４に渡され、一方、入力データ１４１の削除の場合は、データタイプ１６４「消滅」が、データ集合１５１のコピーと一緒に演算処理部３４に渡される。データ集合１５１のコピーが演算処理部３４に渡された後、同期処理部３３は、取得した別系統のデータ集合１５１のコピーを削除する。
【００７１】
演算処理部３４は、データ集合保存部３２または同期処理部３３から、１又は複数のデータ集合１５１とデータタイプ１６４とを受ける。演算処理部３４は、クエリ定義情報２３内の演算定義１３４に従って、受けたデータ集合１５１を用いて演算を行う。演算処理部３４は、演算結果と受けたデータタイプ１６４とを含んだ内部データ１６１を出力処理部３７に渡す。
【００７２】
出力判断部３５は、出力処理部３７から内部データ１６１を受け、演算結果を出力してよいかどうかを判断し、判断結果を出力処理部３７に返す。出力可と判断されるための条件は、下記第１及び第２の条件の両方が満たされていることである。内部データ１６１は、第２の条件の判定で用いられる。
【００７３】
第１の条件は、データ集合１５１が正常な状態であることである。入力データ１４１が正順で処理された場合、データ集合１５１の正常な最新の状態は、最新の入力データをそのデータ集合１５１に入力した時刻での状態である。図２２の表３２１に、第１の条件が真になる条件（つまり第１の条件が満たされる条件）が示されている。ただし、クエリ定義情報２３の演算定義１３４に結合処理が定義されている場合は、同期処理部３３においてデータ集合１５１が正常な状態であることを確認する。この場合、出力判断部３５においては、第１の条件は常に真と判断される。
【００７４】
すなわち、生存期間１３３が時間で指定されており、且つ、入力データ１４１が逆順にデータ集合１５１に入力された場合、入力データ１４１の発生時刻と消滅時刻が入れ替わる。この場合、データ集合１５１の正常な最新の状態は、最新の入力データ１４１の消滅時刻での状態である。このため、最新の時刻を表すタイムスタンプ１４２を有する入力データ１４１（最初に入力された入力データ）が消滅した時点から、第１の条件が真と判断される。
【００７５】
生存期間１３３が最新データ個数で指定されている場合、指定した最新データ個数分の入力データがデータ集合１５１に入力された時点（最新データ個数分の演算結果を取得した時点）以降に、第１の条件が真と判断される。
【００７６】
第２の条件は、クエリ定義情報２３内の出力方法１３５と、演算結果のデータタイプ１６４との関係である。第２の条件が真になる条件（つまり第２の条件が満たされる条件）が、図２３の表３３１に示されている。
【００７７】
すなわち、出力方法１３５が「データ入力時」の場合、正順での入力データ１４１の入力時、つまり、逆順での入力データ１４１の消滅時に、演算結果を出力する必要がある。このため、このケースでは、データタイプ１６４が「消滅」の場合に、第２の条件が真と判断される。
【００７８】
出力方法１３５が「データ消滅時」の場合、正順での入力データ１４１の消滅時、つまり、逆順での入力データ１４１の入力時に、演算結果を出力する必要がある。このため、このケースでは、データタイプ１６４が「入力」の場合に、第２の条件が真と判断される。
【００７９】
出力方法１３５が「データ入力・消滅時」または「一定間隔」の場合、および、出力方法１３５が指定されていない場合は、第２の条件は常に真である。
【００８０】
出力判断部３５は、第１の条件と第２の条件が両方とも真である場合に、出力可と判断する。いずれかの条件が偽である場合は、出力判断部３５は、出力不可と判断する。判断結果は、出力処理部３７に返される。
【００８１】
出力データ生成部３６は、出力処理部３７から内部データ１６１を受け、クエリ定義情報２３を参照して、以下の方法で出力データ１７１を生成し、生成した出力データ１７１を出力処理部３７に返す。
【００８２】
図１３は、同期処理を行う必要がない場合で、且つ生存期間１３３が時間で指定されている場合の、出力データ１７１の生成方法を示す。
【００８３】
内部データ１６１内のデータタイプ１６４が「入力」の場合、この内部データ１６１内のタイムスタンプ１６２は、正順での入力データ１４１の消滅時刻である。このため、演算結果は、入力データが存在しないとして演算された結果を出力する必要がある。
【００８４】
また、データタイプ１６４が「消滅」の場合は、この内部データ１６１内のタイムスタンプ１６２は、正順での入力データ１４１の入力時刻である。このため、演算結果は、消滅した入力データ１４１が存在するとして演算された結果を出力する必要がある。
【００８５】
そこで、いずれのケースでも、出力データ生成部３６は、直前のデータ内容（入力データ１４１の入力前又は消滅前での演算結果）２１４と、最新の内部データ２１１内のタイムスタンプ２１２とを含んだ出力データ２１５を生成する。直前のデータ内容（演算結果）２１４が無い場合は、出力データ２１５は生成されない。この場合は、データ集合１５１が正しい状態でない場合に該当するので、出力データ１７１が無くても問題ない。
【００８６】
出力データ生成部３６は、以上の処理を実行するために、クエリ定義情報２３内の生存期間１３３が時間で指定されている場合は、内部データ１６１を、次の演算結果を含んだ内部データ１６１を受けるまで保存する。
【００８７】
なお、ここで、「入力データが存在しない」または「消滅した入力データが存在する」としての演算を、演算処理部３４で行わず、出力データ生成部３６が、保持した直前の演算結果を用いて行う理由は、演算処理部３４のアルゴリズムを、正再生と逆再生で共通にすることにある。これにより、処理の高速化等の理由で演算処理部３４のアルゴリズムを変更した場合、変更後のアルゴリズムを正再生と逆再生の両方に適用することができる。
【００８８】
図１４は、同期処理を行う必要がない場合で、且つ生存期間１３３が最新データ個数で指定されている場合の、出力データ１７１の生成方法を示す。
【００８９】
この場合、最新データ個数分の入力データ１４１を基に生成された複数の内部データ内のタイムスタンプ（保存されている複数のタイムスタンプ）のうち、最後に受けた内部データ（最新の内部データ）内のタイムスタンプが、最古の時刻を表す。しかし、正順では、データ集合１５１の最新の状態は、データ集合１５１中の最新タイムスタンプが表す時刻での状態である。従って、このケースでは、出力データ生成部３６は、保存されているタイムスタンプのうち最も新しい（最も過去に保存された）タイムスタンプ２２５と最新のデータ内容（演算結果）２２３と含んだ出力データ２２４を生成する。具体的には、例えば、最新データ個数分の入力データ１４１を基に生成された複数の内部データ内のタイムスタンプが、Ｔ＝１０、９、８、７、６、５である場合、Ｔ＝５の内部データ（最新の内部データ）が入力されたときに、Ｔ＝５の内部データ内のデータ内容（演算結果）と、最新のタイムスタンプ（最も過去に保存されたタイムスタンプ）Ｔ＝１０とを含んだ出力データ２２４が生成される。
【００９０】
出力処理部３７は、演算処理部３４で行った演算結果の内部データ１６１を受け、受けた内部データ１６１を出力判断部３５に渡し、出力判断部３５から出力可否の判断結果を受ける。また、出力可否にかかわらず、出力処理部３７は、演算結果の内部データ１６１を出力データ生成部３６に渡し、出力データ１７１を出力データ生成部３６から受ける。出力可否判断の結果が出力可であったら、出力処理部３７は、以下の方法で、出力データ１７１を出力する。
【００９１】
すなわち、出力処理部３７は、クエリ定義情報２３内の出力方法１３５が「データ入力時」、「データ消滅時」、或いは「データ入力・消滅時」の場合、出力データ生成部３６から受け取った出力データ１７１を、そのまま出力する。
【００９２】
出力方法１３５が「一定間隔」であり、且つ、出力データ生成部３６から受けた出力データ１７１が、出力判断部３５が出力不可と判断した場合を除いて最初に受けた出力データである場合、出力処理部３７は、出力データ１７１をそのまま出力する。その出力データ１７１内のタイムスタンプ１７２が表す時刻は、次回出力時のタイムスタンプリスト生成の起点となる。
【００９３】
出力方法１３５が「一定間隔」であり、且つ、出力データ生成部３６から受けた出力データ１７１が、出力判断部３５が出力不可と判断した場合を除いて最初に受けた出力データでない場合（受けた出力データ１７１が２回目以降に受けた出力データの場合）、タイムスタンプ生成の起点から新しく受けた出力データ１７１内のタイムスタンプ１７２が表す時刻までの間で、指定時間間隔でタイムスタンプのリストが作成される。ここで、起点は含まれない。タイムスタンプのリストを作成した場合、出力処理部３７は、そのタイムスタンプで、受けた出力データ１７１のデータ内容１７３を持つ出力データ１７１を新たに生成し、その新たに生成した出力データ１７１を出力する（出力データ１７１は、単数の場合、複数の場合、或いは無い場合がある）。出力データ１７１が出力された場合、出力処理部３７は、タイムスタンプ生成の起点を、生成したタイムスタンプ中の最も古いものに置き換えて、次回出力時のタイムスタンプリスト生成の起点とする。
【００９４】
直前の出力データ１７１が存在しない場合は、出力判断部３５に関する上記第１の条件が満たされていない（つまり、「データ集合が正常な状態でない」に該当する）ので、データを出力する必要はない。
【００９５】
次に、ストリームデータ処理においての逆再生の具体的な流れを説明する。
【００９６】
図１１は、入力データ１４１の入力処理の流れを示す。
【００９７】
まず、ステップＳ１８１において、データ投入部２１は、クエリ制御部２２からデータ入力の指示を受けた場合、データ蓄積装置４から、入力データ１４１をタイムスタンプ１２３の時刻が新しい順（つまり逆順）に取得する。データ投入部２１は、取得した入力データを入力処理部３１に入力する。なお、このステップＳ１８１では、データ入力の指示を受けた時刻以前の時刻を表すタイムスタンプ１２３を含んだ入力データ１４１が逆順に取得されるが、それに代えて、データ入力の指示を受けた時刻よりも或る過去の時刻（例えばイベント検出時刻）以前の時刻を表すタイムスタンプ１２３を含んだ入力データ１４１が逆順に取得されても良い。
【００９８】
次に、ステップＳ１８２において、入力処理部３１は、クエリ制御部２２から渡されたクエリ定義情報２３を参照し、生存期間１３３の指定方法を調べる。生存期間１３３が時間で指定されている場合は、ステップＳ１８３が行われる。生存期間１３３が最新データ個数で指定されている場合は、ステップＳ１８３が行われることなくステップＳ１８４が行われる。
【００９９】
ステップＳ１８３において、入力処理部３１は、入力データ１４１内のタイムスタンプ１４２が表す時刻に、生存期間１３３として指定された時間を足すことにより、正順での消滅時刻を算出する。入力処理部３１は、入力データ１４１のタイムスタンプ１４２を、算出した消滅時刻を表すタイムスタンプ１４２に更新する。
【０１００】
ステップＳ１８４において、入力処理部３１は、入力データ１４１をデータ集合保存部３２に入力する。データ集合保存部３２は、入力データ１４１を、その入力データ１４１内のストリームＩＤ（１４６）と同じストリームＩＤ（１５２）を有するデータ集合１５１に追加する。
【０１０１】
図１２は、演算およびデータ出力の処理の流れを示す。図１２は、説明を分かり易くするために、クエリ１３１内に出力方法１３５の指定が無いとした場合の流れを示す。出力方法１３５の指定が有る場合の流れは、後述する。
【０１０２】
まず、ステップＳ１９１において、データ集合保存部３２は、データ集合１５１に対して入力データ１４１の追加または削除が行われた場合、そのデータ集合１５１を演算処理部３４に渡す。この際、データ集合保存部３２は、入力データ１４１の追加の場合はデータタイプ１６４「入力」を、入力データ１４１の削除の場合はデータタイプ１６４「消滅」を、データ集合１５１と一緒に演算処理部３４に渡す。演算処理部３４は、データ集合保存部３２からデータ集合１５１及びデータタイプ１６４を受けた場合、受けたデータ集合１５１を用いて演算を実行し、演算結果を含んだ内部データ１６１を生成する。
【０１０３】
次に、ステップＳ１９２において、演算処理部３４は、内部データ１６１に、データ集合保存部３２から受けたデータタイプ１６４を設定する。
【０１０４】
次に、ステップＳ１９３において、演算処理部３４は、内部データ１６１を出力処理部３７に渡す。出力処理部３７は、受けた内部データ１６１を出力判断部３５に渡す。出力判断部３５は、その内部データ１６１を基に出力可否を判断し、その判断の結果を出力処理部３７に返す。出力可否判断の処理の流れについては、後述する。
【０１０５】
次に、ステップＳ１９４において、出力処理部３７は、出力判断部３５から出力可否の判断結果を受けた場合、判断結果に関わらず、出力データ生成部３６に内部データ１６１を渡す。出力データ生成部３６は、クエリ定義情報２３を参照し、演算定義１３４の内容と生存期間１３３の指定方法を調べる。演算定義１３４に結合処理が定義されている場合は、ステップＳ２０１が行われる。結合処理が不要で、且つ生存期間１３３が時間で指定されている場合は、ステップＳ１９５が行われる。結合処理が不要で、且つ生存期間１３３が最新データ個数で指定されている場合は、ステップＳ１９７が行われる。
【０１０６】
ステップＳ１９５において、出力データ生成部３６は、出力データ生成部３６の中に保存されている内部データ（直前の演算結果を含んだ内部データ）１６１を参照する。出力データ生成部３６は、最新の演算結果を含んだ内部データ１６１内のタイムスタンプ１６２と、直前の演算結果を含んだ内部データ１６１内のデータ内容１６３とを含んだ出力データ１７１を生成する。出力データ生成部３６は、その生成した出力データ１７１を出力処理部３７に渡す。次に、ステップＳ１９６において、出力データ生成部３６は、直前の演算結果を含んだ内部データ１６１を削除し、最新の演算結果を含んだ内部データ（最古のタイムスタンプを含んだ内部データ）１６１を出力データ生成部３６の中に保存する。
【０１０７】
ステップＳ１９７において、出力データ生成部３６は、出力データ生成部３６の中に保存されている複数のタイムスタンプのうち最も前に保存したタイムスタンプ（それら複数のタイムスタンプのうちの最新のタイムスタンプ）と、最新の演算結果を含んだ内部データ１６１内のデータ内容１６３とを含んだ出力データ１７１を生成する。出力データ生成部３６は、その生成した出力データ１７１を出力処理部３７に渡す。次に、ステップＳ１９８において、出力データ生成部３６は、保存されている複数のタイムスタンプの中で最も前に保存したタイムスタンプを削除し、最新の演算結果を含んだ内部データ内のタイムスタンプを出力データ生成部３６の中に保存する。
【０１０８】
ステップＳ２０１において、出力データ生成部３６は、最新の演算処理結果である内部データ１６１のタイムスタンプ１６２とデータ内容１６３を含んだ出力データ１７１を生成する。出力データ生成部は、その生成した出力データ１７１を出力処理部３７に渡す。
【０１０９】
次に、ステップＳ１９９において、出力処理部３７は、出力データ生成部３６から出力データ１７１を受け、且つ、出力判断部３５から受けた出力判断結果が出力可を表す場合は、ステップＳ２００に進み、出力不可の場合は、処理を終了する。出力可の場合、ステップＳ２００において、出力処理部３７は、出力データ１７１を出力する。出力データ１７１の出力は、出力装置１５を通じて、計算機システム３の外部に出力する場合と、主記憶装置１１の中の別のプログラム（別の再生制御部２４を含む）に出力する場合がある。
【０１１０】
図１５は、出力可否判断の処理の流れを示す。この処理の流れは、図１２のステップＳ１９３で行う処理の流れである。ただし、クエリ１３１での出力方法１３５の指定は無いとする。出力方法１３５の指定が有る場合については、後述する。
【０１１１】
まず、ステップＳ２３１において、出力判断部３５は、クエリ定義情報２３を参照して、演算定義１３４に結合処理が定義されているか、および、生存期間１３３が、時間指定か最新データ個数指定かを調べる。演算定義１３４に結合処理が定義されている場合は、ステップＳ２３５が行われる。ステップＳ２３５では、出力判断部３５は、出力可と判断し、その判断結果を出力処理部３７に返し、処理を終了する。結合処理が不要で、且つ生存期間１３３が時間で指定されている場合は、ステップＳ２３２が行われる。結合処理が不要で、且つ生存期間１３３が最新データ個数で指定されている場合は、ステップＳ２３３が行われる。
【０１１２】
ステップＳ２３２において、出力判断部３５は、最初の入力データ１４１が消滅したかどうかを判断する。具体的には、例えば、出力判断部３５は、出力処理部３７から連続的に渡される内部データ１６１のデータタイプ１６４を参照し、初めて受けたデータタイプ１６４が「消滅」であれば、最初の入力データ１４１が消滅したと判断する。消滅したと判断したならば、ステップＳ２３５が行われる。ステップ２３５では、出力判断部３５は、出力可と判断して、その判断結果を出力処理部３７に返し、処理を終了する。消滅していないと判断したならば、ステップＳ２３４が行われる。ステップＳ２３４では、出力判断部３５は、出力不可と判断し、その判断結果を出力処理部３７に返し、処理を終了する。
【０１１３】
ステップＳ２３３において、出力判断部３５は、生存期間１３３に指定された最新データ個数分、データ集合１５１にデータが入力されたかを判断する。具体的には、例えば、出力判断部３５は、出力処理部３７から渡された内部データ１６１のうちデータタイプ１６４「入力」を含んだ内部データ１６１の数をカウントする。そのカウント値が、最新データ個数に基づく値（例えば最新データ個数それ自体）であれば、ステップＳ２３５が行われる。ステップＳ２３５では、出力判断部３５は、出力可と判断し、その判断結果を出力処理部３７に返し、処理を終了する。上記カウント値が、最新データ個数に基づく値でなければ、ステップＳ２３６が行われる。ステップＳ２３６では、出力判断部３５は、出力不可と判断し、その判断結果を出力処理部３７に返し、処理を終了する。
【０１１４】
図１６は、データ集合１５１の同期化（データ集合１５１同士の結合処理）の流れを示す。結合されたデータ集合１５１に対して、図１２に示した演算および出力処理が行われる。結合処理の対象となるデータ集合１５１は、クエリ定義情報２３（クエリ１３１）に指定されている。
【０１１５】
まず、ステップＳ２４１において、同期処理部３３は、結合処理の対象となるデータ集合１５１に入力データ１４１の追加または削除が行われた場合、クエリ定義情報２３の生存期間１３３を参照して、生存期間が時間指定か最新データ個数指定かを調べる。時間指定の場合は、ステップＳ２４２が実行される。最新データ個数指定の場合は、ステップＳ２４６が実行される。
【０１１６】
ステップＳ２４２において、同期処理部３３は、最初の入力データ１４１が消滅したかどうかを判断する。具体的には、例えば、同期処理部３３は、データ集合保存部３２からデータ集合１５１と一緒に渡されるデータタイプ１６４を参照して、初めて受けたデータタイプ１６４が「消滅」であれば、最初の入力データ１４１が消滅したと判断する。消滅したと判断したならば、ステップＳ２４３が行われる。消滅していないと判断したならば、処理を終了する。ステップＳ２４３では、同期処理部３３は、データ集合保存部３２から受取ったデータ集合１５１のコピーを、同期処理部３３の中で保存し、ステップＳ２４４に進む。Ｓ２４４では、同期処理部３３は、以前に図１６のフローチャートを実行したとき、今回ステップＳ２４３でコピーを保存したデータ集合と同系統のデータ集合のコピーを保存したかどうかを調べ、保存していればステップＳ２４５に進む。保存していなければ、処理を終了する。Ｓ２４５では、同期処理部３３は、今回Ｓ２４３でコピーを保存したデータ集合１５１に追加または削除した入力データ１４１のタイムスタンプ１４２を取得して、そのタイムスタンプ１４２と、以前にステップＳ２４３で保存したデータ集合１５１を組にして、データ集合保存部３２に保存する。このとき、以前にＳ２４３で保存したデータ集合１５１は削除して、ステップＳ２４８に進む。
【０１１７】
ステップＳ２４６において、同期処理部３３は、生存期間１３３に指定された最新データ個数分、データ集合１５１にデータが入力されたかを判断する。具体的には、例えば、同期処理部３３は、データ集合保存部３２からデータ集合１５１と一緒に渡されるデータタイプ１６４で「入力」のものの数をカウントする。そのカウント値が、最新データ個数に基づく値（例えば最新データ個数それ自体）であれば、ステップＳ２４７が行われる。カウント値が、最新データ個数に基づく値でなければ、処理を終了する。ステップＳ２４７では、同期処理部３３は、データ集合保存部３２から受取ったデータ集合１５１と、そのデータ集合１５１が保持する入力データのタイムスタンプで最新（最も未来の時刻を示す）のものを組にして、データ集合保存部３２に保存する。保存したら、ステップＳ２４８に進む。
【０１１８】
ステップＳ２４８において、同期処理部３３は、コピーしたデータ集合とは別系統のデータ集合のコピーが、データ集合保存部３２に存在するかどうかを判断する。存在する場合は、ステップＳ２４９において、同期処理部３３は、入力データ１４１の追加または削除が行われたデータ集合１５１のコピーと、既に保存されている別系統のデータ集合１５１のコピーと、入力データ１４１の追加または削除が行われたことを示すデータタイプ１６４とを、演算処理部３４に渡す。ただし、別系統のデータ集合のコピーで、組となっているタイムスタンプが、今回データを追加または削除したデータ集合と組のものより過去ものが複数ある場合は、その過去のもののうち、最も新しい（未来の時刻を示す）ものだけを、結合演算対象として演算処理部３４に渡す。次に、ステップＳ２５０において、同期処理部３３は、不要になった（以降の処理で結合演算対象となることのない）データ集合のコピーを、データ集合保存部３２から削除する。具体的には、データが入力または削除されたデータ集合のコピーと、それとは別系統のデータ集合のコピーの、組になっているタイムスタンプを比べて、データが新しい（未来の時刻を示す）もののデータ集合のコピーを、データ集合保存部３２から削除する。ステップＳ２４８において、データ集合１５１のコピーが存在しない場合は、同期処理部３３は、同期処理を行わず、処理を終了する。
【０１１９】
データ集合１５１の同期化処理のうち、結合演算の対象となるデータ集合１５１のコピーとタイムスタンプ１４２の組を、データ集合保存部３２に保存するまでの処理（図１６のステップＳ２４３〜Ｓ２４５、ステップＳ２４７）の具体例を、図２５および図２６に示す。図２５は、生存期間を時間指定した場合（ステップＳ２４３〜Ｓ２４５）で、図２６は、生存期間を最新データ個数で指定した場合（ステップＳ２４７）である。
【０１２０】
生存期間を時間指定した場合、図２５において、Ｔ＝１で入力データ（１７１３）がデータ集合に追加されると、同期処理部は、データが追加されたデータ集合のコピー（１７０２）を、同期処理部の中で保存する（図１６のステップＳ２４３に相当）。次に、以前に今回保存したデーッタ集合のコピー（１７０２）と同系統のデータ集合のコピー（１７０１）が保存されているかどうかを調べる（図１６のステップＳ２４４に相当）。図２５の例では存在するので、その以前保存したデータ集合のコピー（１７０１）と、今回入力されたデータのタイムスタンプ（Ｔ＝１）の組（１７０３）を、データ集合保存部３２に保存する（図１６のステップＳ２４５に相当）。データ集合のコピーとタイムスタンプの組（１７０３）をデータ集合保存部３２に保存したら、元のデータ集合のコピー（１７０１）は削除する。
【０１２１】
生存期間を最新データ個数指定した場合、図２６において、Ｔ＝１で入力データ（１７２１）がデータ集合に追加されると、同期処理部は、データが追加されたデータ集合（１７２１）をデータ集合保存部３２から受け取り、そのデータ集合（１７２１）の中の入力データから、最新のタイムスタンプ（Ｔ＝３）を探して取得する。取得したら、そのタイムスタンプ（Ｔ＝３）と、データ集合（１７２１）の組（１７２２）を、データ集合保存部３２に保存する。（以上、図１６のステップＳ２４７に相当。）
【０１２２】
図１７は、データ集合１５１の同期化処理のうち、結合演算の対象となるデータ集合１５１のコピーとタイムスタンプ１４２の組を、データ集合保存部３２に保存した後、実際に同期化を行う処理（図１６のステップＳ２４８〜ステップＳ２５０）の具体例を示す。
【０１２３】
同期処理部３３は、図１６のステップＳ２４５またはＳ２４７において、系統１のデータ集合のコピーとタイムスタンプ（Ｔ＝３）の組（２５１）をデータ集合保存部３２に保存したら、他の系統のデータ集合のコピーが存在するかを確認する（図１６のステップＳ２４８に相当）。この時点で、他の系統のデータ集合のコピーは存在しないから、同期処理部３３は、演算対象を演算処理部３４に渡すことはしない。
【０１２４】
同期処理部３３は、図１６のステップＳ２４５またはＳ２４７において、系統１のデータ集合のコピーとタイムスタンプ（Ｔ＝２）の組（２５２）をデータ集合保存部３２に保存したら、他の系統のデータ集合のコピーが存在するかを確認する（図１６のステップＳ２４８に相当）。この時点で、他の系統のデータ集合のコピーは存在しないから、同期処理部３３は、演算対象を演算処理部３４に渡すことはしない。
【０１２５】
同期処理部３３は、図１６のステップＳ２４５またはＳ２４７において、系統２のデータ集合のコピーとタイムスタンプ（Ｔ＝１）の組（２５３）をデータ集合保存部３２に保存する。
【０１２６】
保存した後、同期処理部３３は、系統１のデータ集合の各コピー（保存してある各コピー）（２５１、２５２）を取得する。そして、同期処理部３３は、演算対象（２５６）と（２５７）を作成し、それらを演算処理部３４に渡す（図１６のステップＳ２４８およびステップＳ２４９に相当）。演算対象（２５６）は、系統２のデータ集合（２５３）と、系統１のデータ集合のコピー（２５１）と、系統２のデータ集合（２５３）に入力データ１４１が追加または削除されたことを示すデータタイプ（２５４）とを含んでいる。演算対象（２５７）は、系統２のデータ集合（２５３）と、系統１のデータ集合のコピー（２５２）と、系統２のデータ集合（２５３）に入力データ１４１が追加または削除されたことを示すデータタイプ（２５５）とを含んでいる。同期処理部３３は、系統２のデータ集合（２５３）に対する、系統１のデータ集合（２５１、２５２）の結合処理を行ったら、組となっているタイムスタンプが未来の時刻を示す系統１のデータ集合のコピー（２５１、２５２）を削除する（図１６のステップＳ２５０に相当）。
【０１２７】
図１８は、クエリ１３１に出力方法１３５の指定が有る場合の、出力可否判断の処理の流れを示す。
【０１２８】
まず、ステップＳ２６１において、出力判断部３５は、出力処理部３７から内部データ１６１が渡された場合、クエリ定義情報２３を参照して、生存期間１３３が、時間指定か最新データ個数指定かを判断する。生存期間１３３が時間で指定されている場合、ステップＳ２６２が行われ、生存期間１３３が最新データ個数で指定されている場合、ステップＳ２６３が行われる。
【０１２９】
ステップＳ２６２において、出力判断部３５は、最初の入力データが消滅したかどうかを判断する。判断方法は、図１５のステップＳ２３２と同様である。消滅したと判断されれば、ステップＳ２６４が行われる。消滅していないと判断されれば、ステップＳ２６７が行われる。ステップＳ２６７では、出力判断部３５は、出力不可と判断し、その判断結果を出力処理部３７に返し、処理を終了する。
【０１３０】
ステップＳ２６３において、出力判断部３５は、生存期間１３３として指定された最新データ個数分、入力データがデータ集合に入力されたかを判断する。判断方法は、図１５のステップＳ２３３と同様である。最新データ個数分の入力データが入力されたと判断されれば、ステップＳ２６４が行われる。最新データ個数分の入力データが入力されていないと判断されれば、ステップＳ２６９が行われる。ステップＳ２６９では、出力判断部３５は、出力不可と判断し、その判断結果を出力処理部３７に返し、処理を終了する。
【０１３１】
ステップＳ２６４では、出力判断部３５は、クエリ定義情報２３を参照して、出力方法１３５の指定を調べる。出力方法１３５として「入力時」が指定されている場合は、ステップＳ２６５が行われる。出力方法１３５として「消滅時」が指定されている場合は、ステップＳ２６６が行われる。出力方法１３５として「入力時・消滅時」または「一定間隔」が指定されている場合は、ステップＳ２６８が行われる。ステップＳ２６８では、出力判断部３５は、出力可と判断し、その判断結果を出力処理部３７に返し、処理を終了する。
【０１３２】
ステップＳ２６５では、出力処理部３５は、出力処理部３７から渡された内部データ１６１のデータタイプ１６４を参照する。データタイプ１６４が「入力」の場合は、ステップＳ２６７が行われる。ステップＳ２６７では、出力判断部３５は、出力不可と判断し、その判断結果を出力処理部３７に返し、処理を終了する。データタイプ１６４が「消滅」の場合は、ステップＳ２６８が行われる。ステップＳ２６８では、出力処理部３５は、出力可と判断し、その判断結果を出力処理部３７に返し、処理を終了する。
【０１３３】
ステップＳ２６６では、出力判断部３５は、出力処理部３７から渡された内部データ１６１のデータタイプ１６４を参照する。データタイプ１６４が「消滅」の場合は、ステップＳ２６９が行われる。ステップＳ２６９では、出力判断部３５は、出力不可と判断し、その判断結果を出力処理部３７に返し、処理を終了する。データタイプ１６４が「入力」の場合は、ステップＳ２６８が行われる。出力判断部３５は、出力可と判断し、その判断結果を出力処理部３７に返し、処理を終了する。
【０１３４】
図１９は、出力方法１３５として「一定間隔」が指定されている場合の出力処理の流れを示す。なお、出力方法１３５が「入力時」、「消滅時」又は「入力時・消滅時」の場合、出力方法１３５の指定が無い場合と同様に、出力データ１７１がそのまま出力される。
【０１３５】
まず、ステップＳ２７１で、出力処理部３７は、出力データ生成部３６から渡された出力データ１７１が、最初に生成した出力データかどうかを判断する。「最初に生成した出力データ」とは、対象のデータ集合を基に初めて生成された内部データに対応する出力データである。具体的には、例えば、出力処理部３７は、最初に出力データ１７１を受けたときにフラグを立てて、そのフラグを、出力処理部３７の中に保存する。フラグが立っているかどうかで、渡された出力データが最初にせいせいされた出力データかどうかが判断される。ただし、出力判断部３５が出力不可と判断した場合、出力処理部３７はフラグを立てない。最初の出力データである場合、ステップＳ２７２が行われ、最初の出力データでない場合は、ステップＳ２７３が行われる。
【０１３６】
ステップＳ２７２では、出力処理部３７は、受けた出力データ１７１を出力データとして、ステップＳ２７５に進む。
【０１３７】
ステップＳ２７３では、出力処理部３７は、タイムスタンプ生成の起点（直前に行われた出力処理のステップＳ２７６で設定された起点）から、受けた出力データ１７１内のタイムスタンプが表す時刻までの間で、出力方法１３５に指定された時間間隔でタイムスタンプのリストを生成する。ここで、起点は含まれない。
【０１３８】
次に、ステップＳ２７４で、出力処理部３７は、ステップＳ２７３で生成したタイムスタンプリストに含まれているタイムスタンプと、出力データ生成部３６から受けた出力データ１７１内のデータ内容１７３とを含んだ出力データを新たに生成する。
【０１３９】
次に、ステップＳ２７５で、出力処理部３７は、生成した新たな出力データを、再生制御部２４の外部に出力する。出力された出力データは、前述したように、計算機システム３の外部に出力される場合と、主記憶装置１１の中の別のプログラム（別の再生制御部２４を含む）に出力される場合とがあり得る。
【０１４０】
次に、ステップＳ２７６で、出力処理部３７は、生成した新たな出力データのタイムスタンプの中で最も古い（過去の）タイムスタンプが表す時刻を、新たなタイムスタンプ生成の起点として設定する。
【０１４１】
図２０は、図１９のステップＳ２７３とステップＳ２７４の具体例を示す。クエリ１３１において、出力方法１３５として「一定間隔」が指定され、時間間隔＝３が設定されたとする。
【０１４２】
出力処理部３７は、タイムスタンプＴ＝１０を含んだ出力データ（初めての出力データ）２８１が渡された場合、その初めての出力データ２８１を出力し、２回目のタイムスタンプ生成の起点をＴ＝１０に設定する。
【０１４３】
出力処理部３７は、タイムスタンプＴ＝５を含んだ出力データ（２回目の出力データ）２８２が渡された場合、時間間隔＝３に従い、起点（Ｔ＝１０）と２回目の出力データ２８２のタイムスタンプ（Ｔ＝５）の間で起点を除くタイムスタンプ（Ｔ＝７）を、タイムスタンプリストとして生成する。Ｔ＝７は、起点Ｔ＝１０から、時間間隔＝３を引いた値である。出力処理部３７は、そのタイムスタンプリスト内のタイムスタンプＴ＝７と、２回目の出力データ２８２のデータ内容とを含んだ新たな出力データ２９２を生成し出力する。出力データ２９２を出力した場合、出力処理部３７は、次回（３回目）のタイムスタンプ生成の起点を、新たな出力データ中で最も古いＴ＝７に設定する。
【０１４４】
出力処理部３７は、タイムスタンプＴ＝０を含んだ出力データ（３回目の出力データ）２８３が渡された場合、時間間隔＝３に従い、起点（Ｔ＝７）と３回目の出力データ２８３内のタイムスタンプＴ＝０との間で起点を除いたタイムスタンプ（Ｔ＝４、Ｔ＝１）を、タイムスタンプリストとして生成する。Ｔ＝４は、起点Ｔ＝７から、時間間隔＝３を引いた値であり、Ｔ＝１は、求まったＴ＝４から、時間間隔＝３を引いた値である。出力処理部３７は、そのタイムスタンプリスト内のタイムスタンプ（Ｔ＝４、Ｔ＝１）と、３回目の出力データ２８３のデータ内容とを含んだ新たな出力データ（２９３、２９４）を生成し出力する。出力データ（２９３、２９４）を出力した場合、出力処理部３７は、次回（４回目）のタイムスタンプ生成の起点を、新たな出力データ中で最も古いＴ＝１に設定する。
【０１４５】
図２１は、クエリの連結処理の流れを示す。
【０１４６】
「クエリの連結処理」とは、第１のクエリに従う出力データを第２のクエリに従う再生の際の入力データとし、その入力データを基に出力データを出力することである。この場合、複数の再生制御部（３０１、３０２）が使用される。
【０１４７】
データ投入部２１は、入力データ３１１を第１の再生制御部３０１に入力する。第１の再生制御部３０１は、再生（例えば逆再生）の結果として出力する出力データ３１２を、第２の再生制御部３０２に入力する。第２の再生制御部３０２が再生（例えば逆再生）の結果として出力する出力データ３１３が、ストリームデータ処理における再生（例えば逆再生）の結果として出力された最終的な出力データである。
【０１４８】
以上、上述した実施形態によれば、ストリームデータ処理において逆再生が行われる。このため、基準時刻（例えば、データ投入部２１がデータ入力の指示を受けた時刻）以前の時刻を表すタイムスタンプのうち最新のタイムスタンプを含んだ入力データから逆順に入力データが処理される。これにより、イベントに関する事象の検出に要する時間を短くすることが期待できる。
【０１４９】
また、ストリームデータ処理において逆再生が可能になると、基準時刻（例えば現在時刻）から過去の入力データに基づく解析を行いながら、基準時刻から未来の入力データに基づくリアルタイムな解析を行うことが可能になり、入力データの解析をさらに効率的に行うことが期待できる。具体的には、例えば、データ投入部２１は、データ蓄積装置４から、基準時刻（例えばイベント検出時刻）以前の時刻を表すタイムスタンプを含んだ入力データ１４１のうち最新の時刻を表すタイムスタンプを含んだ入力データ１４１から先に、時間の逆順に入力データを取得することに並行して、基準時刻以降の時刻を表すタイムスタンプを含んだ入力データ１４１のうち最古の時刻を表すタイムスタンプを含んだ入力データから先に、時間順に入力データを取得して再生制御部２４（入力処理部３１）に入力する。再生制御部２４は、時間と逆順に入力される入力データを用いた逆再生と並行して、時間順に入力される入力データを用いた正再生を行う。再生制御部２４（出力制御部３７）は、逆再生の結果と正再生の結果を別々の画面（例えばグラフ）或いは同一の画面（例えばグラフ）に表示することができる。
【０１５０】
図２４に、入力ストリームデータ３４１内の過去の入力データの解析と未来の入力データのリアルタイムな監視を並行して行うことによる効果を示す。イベント（例えば障害兆候）の検出時刻を基準とした再生結果（過去と未来の双方向に再生された結果、つまり、逆再生と正再生の結果）を表すグラフ３４２が出力処理部３７によって生成され表示される。これにより、ストリームデータ３４１を監視するユーザにとって、イベントに関する事象（例えば、イベントの発生原因）を検知することが容易であると考えられる。なお、グラフ３２において、横軸は、時間を表し、縦軸は、演算結果（出力データ内のデータ内容に含まれている値）を表す。
【０１５１】
以上、本発明の好適な実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【符号の説明】
【０１５２】
１…ストリームデータソース  ３…計算機システム  ４…データ蓄積装置  ５…クエリ保存装置  ２１…データ投入部  ２２…クエリ制御部  ２３…クエリ定義情報  ２４…再生制御部  ３１…入力処理部  ３２…データ集合保存部  ３３…同期処理部  ３４…演算処理部  ３５…出力判断部  ３６…出力データ生成部  ３７…出力処理部
【図１】
2010272022.tif 000003
【図２】
2010272022.tif 000004
【図３】
2010272022.tif 000005
【図４】
2010272022.tif 000006
【図５】
2010272022.tif 000007
【図６】
2010272022.tif 000008
【図７】
2010272022.tif 000009
【図８】
2010272022.tif 000010
【図９】
2010272022.tif 000011
【図１０】
2010272022.tif 000012
【図１１】
2010272022.tif 000013
【図１２】
2010272022.tif 000014
【図１３】
2010272022.tif 000015
【図１４】
2010272022.tif 000016
【図１５】
2010272022.tif 000017
【図１６】
2010272022.tif 000018
【図１７】
2010272022.tif 000019
【図１８】
2010272022.tif 000020
【図１９】
2010272022.tif 000021
【図２０】
2010272022.tif 000022
【図２１】
2010272022.tif 000023
【図２２】
2010272022.tif 000024
【図２３】
2010272022.tif 000025
【図２４】
2010272022.tif 000026
【図２５】
2010272022.tif 000027
【図２６】
2010272022.tif 000028