(57)【要約】【課題】システム開発者がストリームデータの量やシステム構成を考慮することなく、ストリームデータ処理の負荷分散が行われるシステムでのクエリを定義できるようにする。【解決手段】ストリームデータ処理装置は、ストリームデータに基づいて複数の分割データを作成しそれらを複数の計算機に分散する。具体的には、ストリームデータ処理装置は、分割データの送信先の計算機の処理性能に基づく数のデータ要素で構成されたデータ要素群をストリームデータから取得し、そのデータ要素群の補助データ部を所定の値を基に決定する。ストリームデータ処理装置は、取得したデータ要素群とＥＮＤデータとを含んだ分割データを生成する。データ要素群は、補助データ部と結果利用データ部で構成される。【選択図】図１
2011128818.tif 000002
【特許請求の範囲】
【請求項１】
時系列の複数のデータ要素で構成されているストリームデータにおけるデータ要素を処理する複数の計算機に接続された装置であって、
ストリームデータソースからストリームデータを受信する通信インタフェースと、
前記通信インタフェースに接続されており、前記受信したストリームデータを記憶資源に蓄積し、前記記憶資源内のストリームデータを基に分割データを生成しその分割データを前記複数の計算機から送信先として選択した計算機に送信することで、複数の分割データを複数の計算機に分散するコントローラと
を有し、
データ要素は、タイムスタンプと値とを含んでおり、タイムスタンプは、そのタイムタンプを含んだデータ要素の発生した時刻を表しており、
分割データは、前記ストリームデータのうちの連続した二以上のデータ要素であるデータ要素群と、分割データの終端を表すデータであるＥＮＤデータとで構成されており、前記データ要素群は、第１のパートである補助データ部と、前記第１のパートの次のパートである結果利用データ部とで構成されており、
前記コントローラは、
（Ａ）分割データの送信先の計算機の処理性能に基づく数のデータ要素で構成されたデータ要素群を前記ストリームデータから取得し、
（Ｂ）前記（Ａ）で取得したデータ要素群の補助データ部を、処理内容とデータ範囲サイズであるウィンドウサイズとが前記送信先の計算機について定義されたクエリが表す前記ウィンドウサイズを基に決定し、
（Ｃ）前記データ要素群と前記ＥＮＤデータとを含んだ分割データを生成し、
（Ｄ）前記（Ｂ）で決定された補助データ部に続く結果利用データ部の先頭のデータ要素を特定するための情報である結果利用特定情報を、前記送信先の計算機に送信し、
（Ｅ）前記分割データを前記送信先の計算機に送信する、
ストリームデータ処理装置。
【請求項２】
請求項１記載の装置であって、
前記ウィンドウサイズは、データ要素の個数を表しており、
前記（Ｂ）で決定された補助データ部を構成するデータ要素の数Ｋは、前記ウィンドウサイズから１を引いた数である、
ストリームデータ処理装置。
【請求項３】
請求項２記載の装置であって、
前記コントローラは、以下の（Ｘ）を行い、
（Ｘ）前記送信先の計算機が単位時間当たりに処理可能なデータ要素の数である処理性能と、前記送信先のクエリで定義されているウィンドウサイズと、前記記憶資源に蓄積されているストリームデータを構成するデータ要素の数である蓄積データ要素数とに基づいて、負荷分散を行うか否かを判定する、
前記コントローラは、前記（Ｘ）の判定結果が肯定的の場合に、前記（Ａ）乃至（Ｅ）を行い、
前記（Ｘ）の判定結果は、下記の（ｘ１）及び（ｘ２）を満たす場合に肯定的となる、
（ｘ１）前記蓄積データ要素数が、前記処理性能よりも大きい、
（ｘ２）前記蓄積データ要素数が、前記ウィンドウサイズの２倍よりも大きい、
ストリームデータ処理装置。
【請求項４】
請求項２記載の装置であって、
前記コントローラは、以下の（Ｘ）を行い、
（Ｘ）前記送信先の計算機が単位時間当たりに処理可能なデータ要素の数である処理性能と、前記送信先のクエリで定義されているウィンドウサイズと、前記記憶資源に蓄積されているストリームデータを構成するデータ要素の数である蓄積データ要素数と、前記送信先の計算機において処理されずに蓄積されているデータ要素の数である処理待ち数とに基づいて、負荷分散を行うか否かを判定する、
前記コントローラは、前記（Ｘ）の判定結果が肯定的の場合に、前記（Ａ）乃至（Ｅ）を行い、
前記（Ｘ）の判定結果は、下記の（ｘ１）乃至（ｘ３）を満たす場合に肯定的となり、
（ｘ１）前記送信先の計算機の処理性能から前記処理待ち数を引いた値が、正の値である、
（ｘ２）前記蓄積データ要素数が、前記処理性能から前記処理待ち数を引いた値よりも大きい、
（ｘ３）前記蓄積データ要素数が、前記ウィンドウサイズの所定度合よりも大きい、
ストリームデータ処理装置。
【請求項５】
請求項１記載の装置であって、
前記ウィンドウサイズは、データ要素のタイムスタンプの範囲としての時間を表しており、
前記（Ｂ）で決定された補助データ部を構成するデータ要素の数Ｋは、前記ウィンドウサイズが表す値と同じである、
ストリームデータ処理装置。
【請求項６】
請求項５記載の装置であって、
前記コントローラは、以下の（Ｘ）を行い、
（Ｘ）前記送信先の計算機が単位時間当たりに処理可能なデータ要素の数である処理性能と、前記送信先のクエリで定義されているウィンドウサイズと、前記記憶資源に蓄積されているストリームデータを構成するデータ要素の数である蓄積データ要素数と、前記記憶資源に蓄積されているストリームデータのうち最古のデータ要素が有するタイムスタンプと最新のデータ要素が有するタイムスタンプとの差分である蓄積時間長とに基づいて、負荷分散を行うか否かを判定する、
前記コントローラは、前記（Ｘ）の判定結果が肯定的の場合に、前記（Ａ）乃至（Ｅ）を行い、
前記（Ｘ）の判定結果は、下記の（ｘ１）及び（ｘ２）を満たす場合に肯定的となり、
（ｘ１）前記蓄積データ要素数が、前記処理性能よりも大きい、
（ｘ２）前記蓄積時間長が、前記ウィンドウサイズの２倍よりも大きい、
ストリームデータ処理装置。
【請求項７】
請求項５記載の装置であって、
前記コントローラは、以下の（Ｘ）を行い、
（Ｘ）前記送信先の計算機が単位時間当たりに処理可能なデータ要素の数である処理性能と、前記送信先のクエリで定義されているウィンドウサイズと、前記記憶資源に蓄積されているストリームデータを構成するデータ要素の数である蓄積データ要素数と、前記記憶資源に蓄積されているストリームデータのうち最古のデータ要素が有するタイムスタンプと最新のデータ要素が有するタイムスタンプとの差分である蓄積時間長と、前記送信先の計算機において処理されずに蓄積されているデータ要素の数である処理待ち数とに基づいて、負荷分散を行うか否かを判定する、
前記コントローラは、前記（Ｘ）の判定結果が肯定的の場合に、前記（Ａ）乃至（Ｅ）を行い、
前記（Ｘ）の判定結果は、下記の（ｘ１）乃至（ｘ３）を満たす場合に肯定的となり、
（ｘ１）前記送信先の計算機の処理性能から前記処理待ち数を引いた値が、正の値である、
（ｘ２）前記蓄積データ要素数が、前記処理性能から前記処理待ち数を引いた値よりも大きい、
（ｘ３）前記蓄積時間長が、前記ウィンドウサイズの２倍よりも大きい、
ストリームデータ処理装置。
【請求項８】
請求項１記載の装置であって、
前記（Ａ）で取得されたデータ要素群を構成するデータ要素の数は、前記送信先の計算機が単位時間当たりに処理可能なデータ要素の数である処理性能と同じ数、又は、その数よりも１少ない数である、
ストリームデータ処理装置。
【請求項９】
請求項１記載の装置であって、
前記（Ａ）で取得されたデータ要素群を構成するデータ要素の数は、前記送信先の計算機が単位時間当たりに処理可能なデータ要素の数である処理性能から、前記送信先の計算機において処理されずに蓄積されているデータ要素の数である処理待ち数を引いた値と同じ数、又は、その数よりも１少ない数である、
ストリームデータ処理装置。
【請求項１０】
請求項１記載の装置であって、
前記コントローラは、前記（Ｅ）の後、前記分割データに含まれるデータ要素群のうち、そのデータ要素群の末端データ要素から連続したＫ個のデータ要素以外のデータ要素を削除し、
前記Ｋの値は、前記補助データ部を構成するデータ要素の数と同じ値である、
ストリームデータ処理装置。
【請求項１１】
時系列の複数のデータ要素で構成されているストリームデータの処理方法であって、
（Ａ）ストリームデータソースからストリームデータを受信し、
（Ｂ）前記受信したストリームデータを記憶資源に蓄積し、
（Ｃ）前記記憶資源内のストリームデータを基に分割データを生成し、その分割データを前記複数の計算機から送信先として選択した計算機に送信することで、複数の分割データを複数の計算機に分散し、
前記データ要素は、タイムスタンプと値とを含んでおり、タイムスタンプは、そのタイムタンプを含んだデータ要素の発生した時刻を表しており、
前記分割データは、前記ストリームデータのうちの連続した二以上のデータ要素であるデータ要素群と、分割データの終端を表すデータであるＥＮＤデータとで構成されており、前記データ要素群は、第１のパートである補助データ部と、前記第１のパートの次のパートである結果利用データ部とで構成されており、
前記（Ｃ）において、下記を行う、
（ｃ１）分割データの送信先の計算機の処理性能に基づく数のデータ要素で構成されたデータ要素群を前記ストリームデータから取得し、
（ｃ２）前記（ｃ１）で取得したデータ要素群の補助データ部を、処理内容とデータ範囲サイズであるウィンドウサイズとが前記送信先の計算機について定義されたクエリが表す前記ウィンドウサイズを基に決定し、
（ｃ３）前記データ要素群と前記ＥＮＤデータとを含んだ分割データを生成し、
（ｃ４）前記（ｃ２）で決定された補助データ部に続く結果利用データ部の先頭のデータ要素を特定するための情報である結果利用特定情報を、前記送信先の計算機に送信し、
（ｃ５）前記分割データを前記送信先の計算機に送信する、
ストリームデータ処理方法。
【請求項１２】
時系列の複数のデータ要素で構成されているストリームデータを処理するコンピュータプログラムであって、
（Ａ）ストリームデータソースからストリームデータを受信し、
（Ｂ）前記受信したストリームデータを記憶資源に蓄積し、
（Ｃ）前記記憶資源内のストリームデータを基に分割データを生成し、その分割データを前記複数の計算機から送信先として選択した計算機に送信することで、複数の分割データを複数の計算機に分散し、
をコンピュータに実行させ、
前記データ要素は、タイムスタンプと値とを含んでおり、タイムスタンプは、そのタイムタンプを含んだデータ要素の発生した時刻を表しており、
前記分割データは、前記ストリームデータのうちの連続した二以上のデータ要素であるデータ要素群と、分割データの終端を表すデータであるＥＮＤデータとで構成されており、前記データ要素群は、第１のパートである補助データ部と、前記第１のパートの次のパートである結果利用データ部とで構成されており、
前記（Ｃ）において、下記を前記コンピュータに実行させる、
（ｃ１）分割データの送信先の計算機の処理性能に基づく数のデータ要素で構成されたデータ要素群を前記ストリームデータから取得し、
（ｃ２）前記（ｃ１）で取得したデータ要素群の補助データ部を、処理内容とデータ範囲サイズであるウィンドウサイズとが前記送信先の計算機について定義されたクエリが表す前記ウィンドウサイズを基に決定し、
（ｃ３）前記データ要素群と前記ＥＮＤデータとを含んだ分割データを生成し、
（ｃ４）前記（ｃ２）で決定された補助データ部に続く結果利用データ部の先頭のデータ要素を特定するための情報である結果利用特定情報を、前記送信先の計算機に送信し、
（ｃ５）前記分割データを前記送信先の計算機に送信する、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストリームデータの処理技術に関する。
【背景技術】
【０００２】
近年、金融業界における株取引の小口化や、製造／流通業界におけるＲＦＩＤ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）やセンサの普及などにみられるように、各産業分野で取り扱うデータ量は飛躍的に増加している。加えて、これら取り扱うデータにおいては、金融業界における証券取引や、製造／流通業界における個品単位でのリアルタイムなトレース／監視などにみられるように、即時的な活用に意味がある場合が多い。このため、大量のデータを高速に処理することが可能なデータ処理システムが求められている。
【０００３】
大量のデータを高速に処理するシステムとして、ストリームデータ処理システムが提案されている（例えば特許文献１）。以下に、ストリームデータ処理システムを一般的なデータベース管理システム（以下、ＤＢＭＳ）と比較して説明する。なお、以下、ストリームデータを構成する個々のデータを、「データ要素」と呼ぶことにする。
【０００４】
ＤＢＭＳでは、分析するデータを２次記憶装置（例えばハードディスクドライブ等のディスク装置）に一旦格納した後、バッチ処理などで一括してデータを処理する。これに対して、ストリームデータ処理では、集計や分析などの処理内容を予めクエリとしてシステムに登録しておき、データがシステムの主記憶装置（例えば揮発性メモリ）へ到来した時点で、逐次的に処理を行う。これにより、ストリームデータ処理システムでは、システムに時々刻々と到来する大量の連続時系列データ（以下、ストリームデータ）を高速に処理することを可能としている。
【０００５】
ストリームデータ処理システムへ登録するクエリの例として、ＣＱＬ（Ｃｏｎｔｉｎｕｏｕｓ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）を挙げることができる（例えば特許文献１）。ＣＱＬでは、処理定義の他に、処理対象となるデータ範囲を指定する。このデータ範囲は、一般に「ウィンドウ」と呼ばれる。
【０００６】
ウィンドウのサイズの指定方法として、個数指定と時間指定がある。例えば、個数指定の場合は、「直近１０個分」といった指定が行われ、時間指定の場合は、「直近１時間分」といった指定が行われる。つまり、個数指定では、処理対象とされるデータ要素の数が指定され、時間指定では、処理対象とされるデータ要素のタイムスタンプの範囲としての時間が指定される。
【０００７】
ストリームデータ処理システムは、上記で述べたように、データの到来の度に、ウィンドウサイズ分のデータ要素の処理を逐次的に行う。このようなストリームデータ処理システムにおいても、従来方式であるラウンドロビン等の負荷分散技術が適用できることが望ましい
【０００８】
しかし、ストリームデータ処理システムに従来の負荷分散方式を単純に適用することはできない。すなわち、ストリームデータを、複数のストリームデータ処理サーバ（ストリームデータ処理を行うプログラムを実行する計算機）に、例えば均等に又はストリームデータ処理サーバ（以下、「サーバ」と略記する）の処理能力に応じて、分割して振り分けるだけでは、実現することができない。
【０００９】
特に、従来の負荷分散方式をストリームデータ処理システムに単純に適用できない例として、ストリームデータに対して端点を指定しないスライディングウィンドウと、ストリームデータに対して片方の端点を指定するランドマークウィンドウによって、データ範囲を指定した場合における処理が挙げられる（例えば非特許文献１）。
【００１０】
具体例として、自然数Ｎ（つまりＮは１以上の整数）という値を有したデータ要素を、スライディングウィンドウを用いて直近３個分のデータ要素のＳＵＭ演算処理を行う場合を、以下に示す。
【００１１】
サーバ１台での演算結果は、値「１」がサーバに到来した時に演算処理が行われ、結果、値は「１」となる。値「２」がサーバに到来した時に、前回の結果の値「１」に値「２」が加算され、結果値は「３」となる。値「３」がサーバに到来した時に、前回の結果の値「３」に３が加算され、結果値は「６」となる。値「４」がサーバに到来した時に、前回の結果の値「６」に、スライディングウィンドウの範囲から外れる値「１」を減算し、かつ到来した値「４」の加算が行われ、結果値は「９」となる。サーバは、上記にみられる差分演算処理をデータ到来の度に繰り返し、演算結果の値は順に「１」、「３」、「６」、「９」、「１２」、「１５」、・・・となる。
【００１２】
これに対し、サーバ２台を用いて、ストリームデータを１個ずつのデータ要素に分割し、それらのデータ要素を相互に振り分けてＳＵＭ演算処理を行うことを試みる。第１のサーバに値「１」が到来し、その時に演算処理が行われ、結果値は「１」となる。第２のサーバに値「２」が到来し、その時に演算処理が行われ、結果値は「２」となる。第１のサーバに値「３」が到来し、その時に、前回の結果の値「１」に値「３」が加算され、結果値は「４」となる。この差分演算処理が各サーバで交互に繰り返され、演算結果の値は順に「１」、「２」、「４」、「６」、「９」、・・・となり、サーバ１台で演算処理した結果と異なることが分かる。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開 ２００６−３３８４３２号公報
【非特許文献】
【００１４】
【非特許文献１】Ｌｕｋａｓｚ Ｇｏｌａｂａｎｄ Ｍ．Ｔａｍｅｒ¨Ｏｚｓｕ Ｉｓｓｕｅｓ ｉｎ ｄａｔａ ｓｔｒｅａｍ ｍａｎａｇｅｍｅｎｔ．ＳＩＧＭＯＤ Ｒｅｃ， Ｖｏｌ．３２， Ｎｏ．２， ｐｐ．５−１４，２００３
【発明の概要】
【発明が解決しようとする課題】
【００１５】
前述したように、ストリームデータ処理システムにおける負荷分散では、従来の負荷分散方式を単純に適用できない。このため、上記システムにおける負荷分散を実現するには、システム開発者は、ストリームデータの量やシステム構成を考慮しながらクエリを定義する必要がある。例えば、システム開発者は、サーバを直列とし、前段のサーバでフィルタリング処理や集約処理を行うことでストリームデータの量を削減して、後段のサーバで高負荷な業務処理を行うなどを考慮してクエリを定義する必要がある。
【００１６】
そこで、本発明の目的は、システム開発者がストリームデータの量やシステム構成を考慮することなく、ストリームデータ処理の負荷分散が行われるシステムでのクエリを定義できるようにすることにある。
【課題を解決するための手段】
【００１７】
ストリームデータ処理装置に、複数の計算機が接続される。ストリームデータ処理装置は、ストリームデータに基づいて作成した複数の分割データを複数の計算機に分散する。一つの分割データは以下の通りに作成される。すなわち、ストリームデータ処理装置は、分割データの送信先の計算機の処理性能に基づく数のデータ要素で構成されたデータ要素群をストリームデータから取得し、そのデータ要素群の補助データ部を所定の値を基に決定する。ストリームデータ処理装置は、取得したデータ要素群とＥＮＤデータとを含んだ分割データを生成し、分割データを送信先の計算機に送信する。データ要素群は、補助データ部と結果利用データ部で構成される。
【００１８】
ストリームデータ処理装置が受信したストリームデータソースから受信したストリームデータは、記憶資源に格納され、その記憶資源内のストリームデータを基に、分割データを作成することができる。記憶資源は、ストリームデータ処理装置の中にあっても外にあっても良い。
【発明の効果】
【００１９】
本発明によれば、システム開発者は、ストリームデータの量やシステム構成を考慮することなく、ストリームデータ処理の負荷分散が行われるシステムでのクエリを定義することができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の実施例１に係るストリームデータ処理システムの全体構成図である。
【図２】入力データ蓄積部１２３に格納されるストリームデータ状況表の一例を示す。
【図３】入力データ管理表１２４の一例を示す。
【図４】入力ストリーム定義の一例を示す。
【図５】個数指定によりウィンドウサイズが定義されたクエリ５１０の一例を示す。
【図６】時間指定によりウィンドウサイズが定義されたクエリ６１０の一例を示す。
【図７】サーバ管理表１２８の一例を示す。
【図８】分割データの構成を示す。
【図９】クエリ管理表１４９の一例を示す。
【図１０】分割データ管理表１５０の一例を示す。
【図１１】処理順序制御表１７６の一例を示す。
【図１２】サーバ情報取得部１２５がサーバ管理表１２８を更新する手順を示したフローチャートである。
【図１３】入力データ管理部１２６が負荷分散を行うか判定する処理を示したフローチャートである。
【図１４】図１３のステップ１３６０の詳細（入力キュー状態を非考慮）を示したフローチャートである。
【図１５】図１３のステップ１３８０の詳細（入力キュー状態を非考慮）を示したフローチャートである。
【図１６】図１３のステップ１３６０の詳細（入力キュー状態を考慮）を示したフローチャートである。
【図１７】図１３のステップ１３８０の詳細（入力キュー状態を考慮）を示したフローチャートである。
【図１８】図１４のステップ１４４０の指示に応答して行なわれる分割処理のフローチャートである。
【図１９】図１５のステップ１５５０の指示に応答して行なわれる分割処理のフローチャートである。
【図２０】図１６のステップ１６５０の指示に応答して行なわれる分割処理のフローチャートである。
【図２１】図１７のステップ１７６０の指示に応答して行なわれる分割処理のフローチャートである。
【図２２】分割処理での指示に応答して行なわれる送信処理のフローチャートである。
【図２３】クエリ処理部１４５による分割データの処理のフローチャートである。
【図２４】出力部１４８によって送信された処理結果の処理結果制御プログラム１７２による処理のフローチャートである。
【図２５】本発明の実施例２に係るストリームデータ処理システムの全体構成図である。
【図２６】データ分割指定画面１９２の一例を示す。
【図２７】データ分割指定管理表１９６の一例を示す。
【図２８】実施例２におけるサーバ管理表１２８の更新手順を示したフローチャートである。
【発明を実施するための形態】
【００２１】
以下、本発明の幾つかの実施例を、適宜図面を参照しながら説明する。その際、時刻について「古い」／「新しい」と表現することがある。例えば、第１の時刻が第２の時刻より古いとは、第１の時刻が第２の時刻より過去であることを意味する。一方、第１の時刻が第２の時刻より新しいとは、第１の時刻が第２の時刻より未来であることを意味する。
【実施例１】
【００２２】
本発明の実施例１の概要を説明する。なお、以下の説明でも、ストリームデータを構成する個々のデータを、「データ要素」と呼ぶことにする。データ要素は、例えば、ストリームデータソースで発生した時刻を表す情報であるタイムスタンプと、クエリに従う処理の対象となる値とを含む。データ要素は、例えば「タプル」と呼ばれるデータである。
【００２３】
実施例１に係るストリームデータ処理システムは複数の計算機を備える。複数の計算機は、入力制御用計算機と、複数のサーバ計算機と、出力制御用計算機とを含む。入力制御用計算機と出力制御用計算機は一体（同一の計算機）であっても良い。
【００２４】
入力制御用計算機は、本発明の実施例１に係るストリームデータ処理装置が適用された計算機である。
【００２５】
入力制御用計算機は、通信インタフェースと、通信インタフェースに接続されたコントローラ（以下、入力制御コントローラ）とを備える。入力制御コントローラは、メモリとプロセッサ（例えばＣＰＵ（Central Processing Unit））とを含み、プロセッサがメモリから入力データ制御プログラムを読み込んで実行することにより動作する。しかし、入力制御コントローラは、ハードウェア回路を含んでもよく、プロセッサによって行われる処理の一部がプロセッサに代えてハードウェア回路で実行されてもよい。
【００２６】
各サーバ計算機は、通信インタフェースと、通信インタフェースに接続されたコントローラ（以下、サーバコントローラ）とを備える。サーバコントローラは、メモリとプロセッサ（例えばＣＰＵ）とを含み、プロセッサがメモリからストリームデータ処理プログラムを読み込んで実行することにより動作する。しかし、サーバコントローラは、ハードウェア回路を含んでもよく、プロセッサによって行われる処理の一部がプロセッサに代えてハードウェア回路で実行されてもよい。
【００２７】
出力制御用計算機は、通信インタフェースと、通信インタフェースに接続されたコントローラ（以下、出力制御コントローラ）とを備える。出力制御コントローラは、メモリとプロセッサ（例えばＣＰＵ）とを含み、プロセッサがメモリから処理結果制御プログラムを読み込んで実行することにより動作する。しかし、出力制御コントローラは、ハードウェア回路を含んでもよく、プロセッサによって行われる処理の一部がプロセッサに代えてハードウェア回路で実行されてもよい。
【００２８】
ストリームデータを基に複数の分割データが生成され、複数の分割データが複数のサーバ計算機に分散される。これにより、ストリームデータの処理にかかる負荷が、複数のサーバ計算機に分散される。
【００２９】
ここで、「分割データ」は、補助データ部、結果利用データ部、および演算終了通知データ部から構成されており、それらは連続している。補助データ部が分割データの前部分にあり、演算終了通知データ部が分割データの後部分にあり、結果利用データ部が補助データ部と演算終了通知データ部との間に挟まれた中間部分にある。補助データ部及び結果利用データ部が、ストリームデータのうちの一以上のデータ要素で構成されており、演算終了通知データ部が、分割データの終わりを意味するデータ（ＥＮＤデータ）で構成されている。結果利用データ部に含まれるデータ要素中の値は、サーバ計算機にて処理され、且つ、そのサーバ計算機から処理結果として出力され得る。一方、補助データ部に含まれるデータ要素中の値は、サーバ計算機にて処理されるが、そのサーバ計算機から処理結果として出力されることがない。
【００３０】
以下、或る分割データの送信先が或るサーバ計算機（以下、対象サーバ）であるとして、説明を続ける。また、ＥＮＤデータは、データ要素の数としてカウントされても良いが、以下、説明をわかりやすくするために、ＥＮＤデータは、データ要素の数としてカウントされないとする。
【００３１】
入力制御コントローラは、ストリームデータソースから通信インタフェースを通じてストリームデータを受信し、受信したストリームデータを記憶資源に格納する。記憶資源は、入力制御用計算機の中にあっても外にあっても良い。入力制御コントローラは、定期的に（又は不定期的に）、ストリームデータのデータ量（又は、ストリームデータのデータ量及び蓄積時間長）を監視し、負荷分散を実行するか否かを判定する。具体的には、例えば、入力制御コントローラは、ストリームデータのデータ量と、対象サーバの処理性能を表したスループット（サーバスループット）と、クエリに定義されたデータ範囲のサイズ（ウィンドウサイズ）とに基づいて、負荷分散を実行するか否かを判断する。その判断では、入力キュー状態が考慮されてもよい。入力キュー状態とは、対象サーバが有するキュー（データ要素が入力されるキュー）に存在する未処理のデータ要素の数である。
【００３２】
入力制御コントローラは、負荷分散を実行すると判断した場合、対象サーバのサーバスループット（又は、サーバスループットと入力キュー状態）を基に、分割データのデータ量（分割データを構成するデータ要素の数）を決定する。そして、入力制御コントローラは、記憶資源に蓄積されているストリームデータから、決定したデータ量分のデータ要素を取得する。ここでは、連続した二以上のデータ要素が取得される。以下、その二以上のデータ要素を「データ要素群」と言う。
【００３３】
次に、入力制御コントローラは、対象サーバが有するクエリで定義されているウィンドウサイズを基に、データ要素群のうちの補助データ部を決定する（すなわち、データ要素群の先頭のデータ要素からどのデータ要素までを補助データ部に属するデータ要素であるかを決定する）。入力制御コントローラは、データ要素群の残りを結果利用データ部に決定する。
【００３４】
最後に、入力制御コントローラは、データ要素群の末端のデータ要素の後に、ＥＮＤデータを付加する。これにより、分割データが完成する。入力制御コントローラは、完成した分割データに、分割データのＩＤ（以下、分割データＩＤ）を付与し、分割データＩＤが付与された分割データを対象サーバに送信する。
【００３５】
なお、入力制御コントローラは、補助データ部及び結果利用データ部を決定した後、任意のタイミングで（例えば、分割データを送信する前、或いは、分割データと共に）、結果利用データ部に属する一以上のデータ要素のうちの先頭のデータ要素を特定可能にするための情報（以下、結果利用特定情報）を、対象サーバに送信する。結果利用特定情報は、別の言い方をすれば、補助データ部に属するデータ要素を特定可能にするための情報である。つまり、対象サーバは、分割データに含まれる二以上のデータ要素のうち、先頭のデータ要素から、結果利用特定情報から特定されるデータ要素より一つ前のデータ要素までが、補助データ部に属するデータ要素であり、結果利用特定情報から特定されるデータ要素及びそのデータ要素よりも後のデータ要素が、結果利用データ部に属するデータ要素であることがわかる。結果利用特定情報の一例としては、後に説明するように、結果利用データ部に属する一以上のデータ要素のうちの最古のデータ要素内のタイムスタンプを採用することができるが、それに限らず、他種の情報、例えば、補助データ部に属するデータ要素の数、及び、補助データ部の末端のデータ要素内のタイムスタンプのうちの少なくとも一つを採用することができる。
【００３６】
対象サーバのサーバコントローラが、入力制御コントローラから分割データを受信し、その分割データの処理を実行する。処理の実行では、分割データのうち、補助データ部に属する要素データ内の値は、処理されるものの処理結果としては出力されないよう破棄され、結果利用データ部に属する要素データ内の値は、処理され且つ処理結果として出力制御コントローラに送信される。補助データ部に属するデータ要素及び結果利用データ部に属するデータ要素は、上記の結果利用特定情報からわかる。サーバコントローラは、ＥＮＤデータを検出した場合、補助データ部ならびに結果利用データ部の処理が完了したことを認識して、ＥＮＤデータを出力制御コントローラに送信する。
【００３７】
出力制御コントローラは、クエリと分割データＩＤとのセットごとに、各サーバ計算機からの処理結果を管理する。ＥＮＤデータを受信すると、出力制御コントローラは、管理している処理結果を、ユーザからの要求に応じて送信する。
【００３８】
以下、実施例１を詳細に説明する。なお、以下、サーバ計算機の数を２とするが、サーバ計算機の数は２より多くてもよい。また、入力制御コントローラ、サーバコントローラ及び出力制御コントローラは、それぞれ、ＣＰＵ及び主記憶装置を有するとする。また、以下、説明が冗長にならないようにするために、ＣＰＵがコンピュータプログラムを実行することにより行われる処理を、そのコンピュータプログラムにより行われるとする。
【００３９】
図１は、本発明の実施例１に係るストリームデータ処理システムの全体構成図である。
【００４０】
ストリームデータ処理システムは、ストリームデータソース１０１からのストリームデータを分割して送信する入力制御用計算機１２０と、ストリームデータ処理を実行する第１及び第２のサーバ計算機１４０及び１６０と、サーバ計算機の処理結果を制御する出力制御用計算機１７０とを有する。通信ネットワーク（以下、ネットワーク）１１０に、ストリームデータソース１０１と、入力制御用計算機１２０と、第１及び第２のサーバ計算機１４０及び１６０とが接続されており、ネットワーク１１５に、第１及び第２のサーバ計算機１４０及び１６０と、出力制御用計算機１７０とが接続されている。ネットワーク１１０及び１１５は一体であっても良い。
【００４１】
ストリームデータソース１０１は、ストリームデータの発生源となるシステムである。ストリームデータは、時々刻々と発生する時系列データであり、例えば、ＰＯＳ（Ｐｏｉｎｔ  Ｏｆ  Ｓａｌｅｓ）データ、証券取引データ、センサから得られる温度データ及び／又は湿度データなどである。ストリームデータソース１０１は、ストリームデータを、ネットワーク１１０を介して入力制御用計算機１２０に送信する。
【００４２】
入力制御用計算機１２０は、主記憶装置１２１、ＣＰＵ１３１、２次記憶装置１３２および通信インタフェース１３３を有する。主記憶装置１２１には、オペレーティングシステム１３０および入力データ制御プログラム１２２が格納されている。オペレーティングシステム１３０および入力データ制御プログラム１２２は、可搬型記憶媒体またはネットワーク１１０を介して２次記憶装置１３２に導入され、主記憶装置１２１にロード後、ＣＰＵ１３１によって実行される。これは、図１に示した他の計算機におけるプログラムについても同様であってよい。
【００４３】
入力データ制御プログラム１２２は、ストリームデータソース１０１から送信されるストリームデータを格納する入力データ蓄積部１２３、入力データ蓄積部１２３に格納されたストリームデータの状態を格納する入力データ管理表１２４、入力データ蓄積部１２３を定期的（又は不定期的）に監視して負荷分散するか否かの判定を行う入力データ管理部１２６、入力データ蓄積部１２３に蓄積されたストリームデータを分割することにより分割データを生成する入力データ分割部１２７、各サーバ計算機からサーバ計算機の状態を取得するサーバ情報取得部１２５、サーバ情報取得部１２５から得たサーバ情報を格納するサーバ管理表１２８、及び、入力データ分割部１２７により生成された分割データを各サーバ計算機へ送信するデータ送信部１２９、を有するプログラムである。
【００４４】
第１のサーバ計算機１４０は、主記憶装置１４１、ＣＰＵ１５２、２次記憶装置１５３および通信インタフェース１５４を有する。主記憶装置１４１には、オペレーティングシステム１５１、ストリームデータに対して演算処理を行うストリームデータ処理プログラム１４３、およびストリームデータ処理プログラム１４３を監視するサーバ監視プログラム１４２が格納されている。
【００４５】
ストリームデータ処理プログラム１４３は、データ送信部１２９から送信される分割データを受信するデータ受信部１４４、サーバ計算機１４０に登録されているクエリを管理するクエリ管理表１４９、登録されているクエリを実行するクエリ処理部１４５（入力部１４６、演算処理実行部１４７、および出力部１４８を有する）、データ送信部１２９から分割データの管理情報を取得する分割データ管理情報受信部１５５、及び、取得した分割データの管理情報を格納する分割データ管理表１５０、を有するプログラムである。
【００４６】
第２のサーバ計算機１６０の構成は、第１のサーバ計算機１４０と同様である。すなわち、第２のサーバ計算機１６０も、ＣＰＵ、２次記憶装置、通信インタフェースおよび主記憶装置を有し、主記憶装置には、オペレーティングシステム、ストリームデータ処理プログラムおよびサーバ監視プログラムが格納されている。
【００４７】
出力制御用計算機１７０は、主記憶装置１７１、ＣＰＵ１７８、２次記憶装置１７９及び通信インタフェース１８０を有する。主記憶装置１７１には、オペレーティングシステム１７７および処理結果制御プログラム１７２が格納されている。
【００４８】
処理結果制御プログラム１７２は、ストリームデータ処理プログラム１４３から処理結果を受信する処理結果受信部１７３、処理結果を２次記憶装置１７９（または主記憶装置１７１）に格納しユーザプログラム（例えば、図示しないアプリケーションプログラム）へ処理結果を送信する処理結果管理部１７４、データ送信部１２９から処理順序情報を取得する処理順序受信部１７５、および処理順序情報や処理結果の格納場所情報を格納する処理順序制御表１７６、を有するプログラムである。
【００４９】
次に、図１を用いて、ストリームデータ処理システムにおける負荷分散の処理フローを説明する。
【００５０】
ストリームデータソース１０１は、ネットワーク１１０を通じて入力データ蓄積部１２３にストリームデータを送信する。入力データ管理部１２６は、定期的に入力データ蓄積部１２３を監視することで、ストリームデータの状況を把握し、把握した状況を表すよう入力データ管理表１２４を更新する。加えて、入力データ管理部１２６は、入力データ管理表１２４と、サーバ情報取得部１２５がサーバ監視プログラム１４２から取得したサーバ情報が格納されているサーバ管理表１２８とを参照し、負荷分散を実行するか否かを判定する。
【００５１】
負荷分散を実行すると判定した場合、入力データ管理部１２６は、入力データ分割部１２７に、各サーバ計算機に送信するストリームデータ（以下、「分割データ」と呼ぶ）の生成を指示する。
【００５２】
入力データ分割部１２７は、サーバ管理表１２８を参照して各サーバ計算機に送信する分割データの量を決定し、入力データ蓄積部１２３から各サーバ計算機に送信するストリームデータの取得や分割データＩＤの付与等を行い、分割データを生成する（各サーバ計算機に送信する分割データの内容の詳細については、後述する）。
【００５３】
分割データを生成した後、データ送信部１２９は、まず、ネットワーク１１０または１１５を通じて、分割データの管理情報を分割データ管理情報受信部１５５に送信し、処理順序情報を処理順序受信部１７５に送信する。情報送信後、分割データ管理情報受信部１５５は、分割データ管理表１５０を更新し、処理順序受信部１７５は、処理順序制御表１７６を更新する。次に、データ送信部１２９は、ネットワーク１１０を通じて、サーバ計算機１４０に、生成した分割データを送信する。最後に、データ送信部１２９は、分割データに対応するウィンドウサイズ（すなわちデータ範囲のサイズ）を加味して、入力データ蓄積部１２３から、送信した分割データを削除する。ただし、データ送信部１２９は、分割データの全てを削除するのではなく、分割データを構成する連続した複数のデータ要素のうちの、後側におけるＫ個のデータ要素を削除しない。Ｋは、後述の補助データ部に含まれるデータ要素の数である。つまり、データ送信部１２９は、分割データの後側部分におけるデータ要素であって、補助データ部を構成するデータ要素の数Ｋと同数のデータ要素を削除しないで残す。なぜなら、その残されたＫ個のデータ要素が、次の分割データの補助データ部におけるデータ要素になるからである。
【００５４】
データ受信部１４４は、ネットワーク１１０を通じて分割データを受信する。データ受信部１４４は、クエリ管理表１４９を参照して、受信した分割データに対応するクエリ処理部１４５を選択し、クエリ処理部１４５の入力部１４６に分割データを入力する。入力部１４６は、入力された分割データを演算処理実行部１４７に順次投入し、演算処理実行部１４７は、クエリに定義された処理内容を実行する。演算処理実行部１４７は、演算処理実行後、分割データ管理表１５０を参照し、演算処理の結果を表すデータ（処理結果データ）を出力部１４８に出力するか否かを判定する。出力すると判定された場合、出力部１４８からネットワーク１１５を通じて処理結果受信部１７３へ処理結果データが出力される。処理結果受信部１７３は、処理結果データを受信し、受信した処理結果データを、処理結果管理部１７４に出力する。処理結果管理部１７４は、処理結果データを２次記憶装置１７９または主記憶装置１７２に格納した後、処理順序制御表１７６を更新する。
【００５５】
入力部１４６から演算処理実行部１４７に、分割データの終端を示すデータ（以下、ＥＮＤデータ）が投入されると、演算処理実行部１４７は、クエリに定義された処理を行わずに、出力部１４８に、ＥＮＤデータを出力する。出力部１４８は、ＥＮＤデータを受け、ネットワーク１１５を通じて、そのＥＮＤデータを処理結果受信部１７３に送信する。処理結果受信部１７３は、ＥＮＤデータを受け、そのＥＮＤデータを処理結果管理部１７４に出力する。処理結果管理部１７４は、ＥＮＤデータを受け、処理順序制御表１７６を更新する。
【００５６】
以上、実施例１におけるストリームデータ処理システムの負荷分散の処理フローを説明した。なお、上記の説明では、分割データが第１のサーバ計算機１４０に送信されることを例に採ったが、分割データが第２のサーバ計算機１６０に送信された場合には、第２のサーバ計算機１６０において、第１のサーバ計算機１４０で行われる処理と同様の処理が行われる。
【００５７】
図２は、入力データ蓄積部１２３に格納されるストリームデータ状況表の一例を示す。
【００５８】
ストリームデータ状況表には、ストリームデータの種類毎に、ストリームＩＤ２１０、タイムスタンプ２２０、および値２３０が格納される。
【００５９】
ここで言う「ストリームＩＤ」とは、ストリームデータの種類を識別するためのユニークなＩＤであり、通常は予めユーザ等によってユニークな文字列の値で設定される。
【００６０】
ストリームデータの各データ要素は、タイムスタンプ及び値を含んでいる。つまり、ストリームデータ状況表には、ストリームＩＤ２１０毎に、データ要素が蓄積される。表に含まれるタイムスタンプ２２０は、データ要素に含まれているタイムスタンプであり、そのタイムスタンプは、そのデータ要素の発生時間を示す。表に含まれる値２３０は、データ要素に含まれる値であり、その値は、ストリームデータ処理における演算で使用される。
【００６１】
図２の例によれば、ストリームＩＤ２１０として、「Ｓ１」が格納されており、同ストリームＩＤ「Ｓ１」のストリームデータのデータ要素として、タイムスタンプ２２０が「１０：００：００」で値２３０が「３０」であるデータ要素と、タイムスタンプ２２０が「１０：００：０１」で値２３０が「２４」であるデータ要素と、タイムスタンプ２２０が「１０：００：０２」で値２３０が「４５」であるデータ要素とがそれぞれ格納されている。
【００６２】
図３は、入力データ管理表１２４の一例を示す。
【００６３】
入力データ管理表１２４は、ストリームＩＤ３１０毎に、データ量３２０、データ蓄積時間３３０を有する。データ量３２０は、データ要素の総数を表す情報である。データ蓄積時間３３０は、最古のデータ要素が有するタイムスタンプと最新のデータ要素が有するタイムスタンプとの差分を表す情報である。
【００６４】
入力データ管理部１２６は、入力データ蓄積部１２３に格納されているストリームデータ状況表を元に、入力データ管理表１２４を定期的に更新し、ストリームＩＤ３１０ごとに、ストリームデータのデータ量３２０と、データ蓄積時間３３０とを格納する。ストリームデータ量３２０は、入力データ蓄積部１２３の各ストリームＩＤ２１０に存在するストリームデータの個数をカウントすることで取得する。データ蓄積時間３３０は、入力データ蓄積部１２３の各ストリームＩＤ２１０に存在するストリームデータの内、最新のストリームデータと最古のストリームデータのタイムスタンプの差分で取得する。
【００６５】
図３の例によれば、ストリームＩＤ３１０として「Ｓ１」が記録され、同ストリームＩＤ「Ｓ１」のデータ量３２０として「１３５００個」が、データ蓄積時間３３０として「１０秒」がそれぞれ記録されている。
【００６６】
図４は、入力ストリーム定義の一例を示す。
【００６７】
入力ストリーム定義４１０は、第１のサーバ計算機１４０、および第２のサーバ計算機１６０に登録される。サーバ計算機１４０（１６０）に登録される入力ストリーム定義４１０は、そのサーバ計算機１４０（１６０）に入力されるストリームデータに関する情報、例えば、ストリームデータの種類、値の属性を表す情報を有する。
【００６８】
図４の例によれば、入力ストリーム定義４１０は、サーバ計算機１４０（１６０）のデータ受信部１４４が受信するストリームデータ（入力ストリーム）のストリームＩＤが「Ｓ１」（及び「Ｓ２」）であり、そのストリームデータが有する各データ要素の値が整数であり且つ変数「ｖａｌｕｅ」（及び変数「ｔｅｍｐｅｒａｔｕｒｅ」）であることを表している。
【００６９】
図５、および図６は、第１のサーバ計算機１４０、および第２のサーバ計算機１６０に登録されるクエリの例である。なお、クエリは、例えばＣＱＬ（Ｃｏｎｔｉｎｕｏｕｓ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）に基づいている。
【００７０】
図５は、個数指定によりウィンドウサイズが定義されたクエリ５１０の一例を示す。クエリ５１０は、クエリＩＤが「Ｑ１」であり、処理内容が、ストリームＩＤ「Ｓ１」に対応する直近１０個分のデータ要素の変数ｖａｌｕｅの値の合計値を演算することを示す。なお、クエリ５１０における「ＲＯＷＳ  １０」が、直近１０個分のデータ要素を意味し、それが、ウィンドウサイズに該当する。
【００７１】
図６は、時間指定によりウィンドウサイズが定義されたクエリ６１０の一例を示す。クエリ６１０は、クエリＩＤが「Ｑ２」であり、処理内容が、ストリームＩＤ「Ｓ２」に対応する直近３０秒分のデータ要素の変数ｔｅｍｐｅｒａｔｕｒｅの値の平均値を演算することを示す。なお、クエリ６１０における「ＲＡＮＧＥ  ３０  ｓｅｃｏｎｄｓ」が、直近３０秒分のデータ要素を意味し、それが、ウィンドウサイズに該当する。
【００７２】
図７は、サーバ管理表１２８の一例を示す。
【００７３】
サーバ管理表１２８は、サーバ計算機毎に、サーバ名７１０、ＩＰアドレス７２０、ストリームＩＤ７３０、クエリＩＤ７４０、ウィンドウサイズ７５０、スループット７６０、および入力キュー状態７７０を有する。
【００７４】
サーバ名７１０およびＩＰアドレス７２０は、サーバ計算機の名称およびＩＰアドレスを表す情報である。ストリームＩＤ７３０は、サーバ計算機に登録されたストリームＩＤである。クエリＩＤ７４０およびウィンドウサイズ７５０は、サーバ計算機に登録されたストリームＩＤに対応したクエリが有するクエリＩＤ及びウィンドウサイズを表す情報である。スループット７６０は、クエリＩＤに対応した、サーバ計算機の平均処理性能（スループット）を表す情報である。スループットは、単位時間（例えば１秒間）当たりに処理されるデータ要素の数を表す。入力キュー状態７７０は、クエリＩＤに対応したクエリ処理部１４５の入力部１４６が管理するキュー（入力キュー）で待ち状態となっているデータ要素（未処理のデータ要素）の数を表す。
【００７５】
図７の例によれば、サーバ名７１０およびＩＰアドレス７２０として、第１のサーバ計算機１４０のサーバ名である「サーバＡ」と、ＩＰアドレス「１９２．１６８．１．４」がそれぞれ記録されている。加えて、「サーバＡ」を有する行においては、第１のサーバ計算機１４０に登録されているストリームＩＤである「Ｓ１」と「Ｓ２」が、ストリームＩＤ７３０としてそれぞれ記録されている。
【００７６】
サーバ名「サーバＡ」について、ストリームＩＤ「Ｓ１」に対応するクエリＩＤ「Ｑ１」とウィンドウサイズ「１０個」が、ストリームＩＤ「Ｓ１」を有する行に、クエリＩＤ７４０およびウィンドウサイズ７５０としてそれぞれ記録されている。また、サーバ名「サーバＡ」について、スループット「１０００個／秒」および入力キュー状態「５０個」が、クエリＩＤ「Ｑ１」を有する行に、スループット７６０および入力キュー状態７７０としてそれぞれ記録されている。
【００７７】
さらに、サーバ名「サーバＡ」について、ストリームＩＤ「Ｓ２」に対応するクエリＩＤ「Ｑ２」とウィンドウサイズ「３０秒」が、ストリームＩＤ「Ｓ２」を有する行に、クエリＩＤ７４０およびウィンドウサイズ７５０としてそれぞれ記録されている。また、サーバ名「サーバＡ」について、スループット「５０個／秒」および入力キュー状態「２００個」が、クエリＩＤ「Ｑ２」を有する行に、スループット７６０および入力キュー状態７７０としてそれぞれ記録されている。
【００７８】
図８は、分割データの構成を示す。
【００７９】
分割データ８１０は、補助データ部８４０、結果利用データ部８３０、および演算終了通知データ部８２０から構成される。
【００８０】
結果利用データ部８３０は、入力データ蓄積部１２３から取得されたストリームデータにおける一以上のデータ要素で構成されている。このデータ部８３０に含まれるデータ要素は、演算処理実行部１４７にて演算処理され、出力部１４８に出力される。
【００８１】
補助データ部８４０は、入力データ蓄積部１２３から取得されたストリームデータにおける一以上のデータ要素で構成されている。このデータ部８４０に含まれるデータ要素は、結果利用データ部８３０の前部分に付与される。このデータ部８４０に含まれるデータ要素は、演算処理実行部１４７にて演算処理されるが、出力部１４８には出力されない。
【００８２】
演算終了通知データ部８２０は、演算処理実行部１４７にて演算処理対象となるデータの終端を示し、結果利用データ部の後部分に付与される。このデータ部８２０は、前述したＥＮＤデータで構成される。ＥＮＤデータは、演算処理実行部１４７にて演算処理はされず、補助データ部８４０および結果利用データ部８３０の処理後、出力部１４８に出力される。
【００８３】
図８によれば、補助データ部８４０の次に結果利用データ部８３０が続いており、結果利用データ部８３０の次に演算終了通知データ部８２０が続いている。
【００８４】
図８の例によれば、補助データ部８４０には、タイムスタンプが「１０：００：００」で値が「３０」のデータ要素から、タイムスタンプが「１０：００：２３」で値が「３４」のデータ要素までが存在する。結果利用データ部８３０には、タイムスタンプが「１０：００：２４」で値が「２５」のデータ要素から、タイムスタンプが「１０：００：５４」で値が「２８」のデータ要素までが存在する。演算終了通知データ部８２０には、タイムスタンプが「ＥＮＤ」で、値が「ＮＵＬＬ」であるＥＮＤデータが存在する。
【００８５】
図９は、クエリ管理表１４９の一例を示す。
【００８６】
クエリ管理表１４９は、ストリームＩＤ９１０毎に、クエリＩＤ９２０、およびウィンドウサイズ９３０を有する。
【００８７】
ストリームＩＤ９１０は、サーバ計算機に登録されたストリームＩＤである。クエリＩＤ９２０、およびウィンドウサイズ９３０は、サーバ計算機に登録されたストリームＩＤに対応するクエリＩＤおよびウィンドウサイズである。
【００８８】
図９の例によれば、ストリームＩＤ９１０として、第１のサーバ計算機１４０に登録されているストリームＩＤ「Ｓ１」と「Ｓ２」がそれぞれ記録されている。ストリームＩＤ「Ｓ１」が記録されている行には、クエリＩＤ「Ｑ１」とそのウィンドウサイズである「１０個」が、クエリＩＤ９２０とウィンドウサイズ９３０としてそれぞれ記録されている。ストリームＩＤ「Ｓ２」が記録されている行には、クエリＩＤ「Ｑ２」とそのウィンドウサイズである「３０秒」が、クエリＩＤ９２０とウィンドウサイズ９３０としてそれぞれ記録されている。
【００８９】
図１０は、分割データ管理表１５０の一例を示す。
【００９０】
分割データ管理表１５０は、クエリＩＤ１０１０毎に、分割データＩＤ１０２０、および演算対象開始時間１０３０を有する。
【００９１】
クエリＩＤ１０１０は、サーバ計算機に登録されているクエリのクエリＩＤである。分割データＩＤ１０２０は、データ送信部１２９が分割データに付与したユニークなＩＤである。演算対象開始時間１０３０は、分割データ８１０の結果利用データ部８３０における、最古のタイムスタンプである。
【００９２】
図１０の例によれば、クエリＩＤ１０１０として、第１のサーバ計算機１４０に登録されているクエリのＩＤ「Ｑ１」と「Ｑ２」がそれぞれ記録されている。クエリＩＤ「Ｑ１」が記録されている行には、分割データＩＤ１０２０として「０００００１」が記録されており、且つ、演算対象開始時間１０３０として「１０：００：２４」が記録されている。
【００９３】
図１１は、処理順序制御表１７６の一例を示す。
【００９４】
処理順序制御表１７６は、クエリＩＤ１１１０毎に、分割データＩＤ１１２０、ＥＮＤ送信有無１１３０、および処理結果格納場所１１４０を有する。
【００９５】
クエリＩＤ１１１０は、サーバ計算機に登録されているクエリのＩＤである。分割データＩＤ１１２０は、データ送信部１２９が分割データに付与したユニークなＩＤある。ＥＮＤ送信有無１１３０は、分割データ８１０の演算終了通知データ部８２０が送信されたか否かを表す情報である。処理結果格納場所１１４０は、処理結果受信部１７３から受信した演算処理結果を格納している記憶領域のアドレスを表す情報である。
【００９６】
図１１の例によれば、クエリＩＤ１１１０として、第１のサーバ計算機に登録されているクエリのクエリＩＤ「Ｑ１」と「Ｑ２」がそれぞれ記録されている。クエリＩＤ「Ｑ１」を有する行には、分割データＩＤ「０００００１」と「０００００２」がそれぞれ分割データＩＤ１１２０として記録されている。分割データＩＤ「０００００１」を有する行には、演算終了通知データ部８２０が送信されたことを示す値「有り」がＥＮＤ送信有無１１３０として記録されており、且つ、分割データＩＤ「０００００１」の分割データの演算処理結果が格納されている記憶領域のアドレスである「０ｘ３８４６２１Ｆ」が処理結果格納場所１１４０として記録されている。一方、分割データＩＤ「０００００２」を有する行には、演算終了通知データ部８２０が送信されていないことを示す値「無し」がＥＮＤ送信有無１１３０として記録されており、且つ、分割データＩＤ「０００００２」の分割データの演算処理結果が無いことを示す値「−」が処理結果格納場所１１４０として記録されている。
【００９７】
以下、本実施例で行われる処理を説明する。
【００９８】
図１２は、サーバ情報取得部１２５がサーバ管理表１２８を更新する手順を示したフローチャートである。
【００９９】
最初に、サーバ情報取得部１２５は、ネットワーク１１０を通じてサーバ監視プログラム１４２と通信を行い、サーバ情報取得を指示する（ステップ１２１０）。
【０１００】
次に、サーバ監視プログラム１４２は、クエリ管理表１４９を参照し、ストリームＩＤ９１０と、クエリＩＤ９２０と、ウィンドウサイズ９３０とを取得する（ステップ１２２０）。
【０１０１】
次に、サーバ監視プログラム１４２は、クエリ処理部１４５に問合せ、取得したクエリＩＤ９２０に対応するスループットを取得する（ステップ１２３０）。
【０１０２】
次に、サーバ監視プログラム１４２は、取得したクエリＩＤ９２０に対応するクエリ処理部１４５に存在する入力部１４６に問合せ、入力キュー状態を取得する（ステップ１２４０）。
【０１０３】
次に、サーバ監視プログラム１４２は、ステップ１２２０からステップ１２４０で取得したストリームＩＤ９１０、クエリＩＤ９２０、ウィンドウサイズ９３０、スループット、および入力キュー状態を、ネットワーク１１０を通じてサーバ情報取得部１２５に送信する（ステップ１２５０）。
【０１０４】
最後に、サーバ情報取得部１２５は、サーバ管理表１２８における、ステップ１２１０でサーバ情報取得を指示したサーバ監視プログラム１４２が存在するサーバ名が記録されている行、を更新する（ステップ１２６０）。すなわち、ステップ１２２０で取得したストリームＩＤ９１０、クエリＩＤ９２０、ウィンドウサイズ９３０を、ストリームＩＤ７３０、クエリＩＤ７４０、およびウィンドウサイズ７５０として記録し、ステップ１２３０で取得したスループットをスループット７６０として記録し、ステップ１２４０で取得した入力キュー状態を入力キュー状態７７０として記録する。
【０１０５】
図１３は、入力データ管理部１２６が負荷分散を行うか判定する処理を示したフローチャートである。
【０１０６】
最初に、入力データ分割部１２７は、分割データＩＤの値を「０」に設定する（ステップ１３００）。つまり、分割データＩＤの値がリセットされる。なお、分割データＩＤは、ストリームＩＤ３１０ごとに存在する。
【０１０７】
ストリームデータが入力データ蓄積部１２３に投入され続けている間（ステップ１３０５）、入力データ管理部１２６は、ステップ１３１０からステップ１３８０までの処理を繰り返す。
【０１０８】
すなわち、入力データ管理部１２６は、入力データ管理表１２４からデータ量３２０を取得する（ステップ１３１０）。
【０１０９】
取得されたデータ量３２０が「０」より多い数を表している場合（ステップ１３２０でＹＥＳ）、入力データ管理部１２６は、入力データ管理表１２４から、対応するストリームＩＤ３１０を取得する（ステップ１３３０）。なお、取得されたデータ量３２０が「０」である場合（ステップ１３２０でＮＯ）、ストリームデータが蓄積されていないということなので、負荷分散は不要であると判定されることになる。
【０１１０】
次に、入力データ管理部１２６は、サーバ管理表１２８から、取得したストリームＩＤ３１０に対応するウィンドウサイズ７５０を取得する（ステップ１３４０）。
【０１１１】
次に、入力データ管理部１２６は、取得したウィンドウサイズ７５０が個数指定か否かを判定する（ステップ１３５０）。
【０１１２】
ステップ１３５０の判定結果がＹＥＳの場合、入力データ管理部１２６は、個数指定時の負荷分散判定を行う（ステップ１３６０）。
【０１１３】
ステップ１３５０の判定結果がＮＯの場合、入力データ管理部１２６は、ステップ１３４０で取得されたウィンドウサイズ７５０が時間指定か否か判定する（ステップ１３７０）。
【０１１４】
ステップ１３７０の判定結果がＹＥＳの場合、入力データ管理部１２６は、時間指定時の負荷分散判定を行う（ステップ１３８０）。
【０１１５】
ストリームデータの入力データ蓄積部１２３への投入が完了すると、負荷分散判定処理が終了する（ステップ１３９０）。
【０１１６】
なお、ステップ１３６０の詳細は、図１４及び図１６に示される。ステップ１３５０の判定結果がＹＥＳの場合、入力データ管理部１２６は、入力キュー状態７７０が有効な情報でなければ（入力キュー状態７７０が「−」といった無効な値であれば）、図１４に示す処理を行い、入力キュー状態７７０が有効な情報であれば（入力キュー状態７７０が「−」といった無効な値でなければ）、図１６に示す処理を行う。
【０１１７】
ステップ１３８０の詳細は、図１５及び図１７に示される。ステップ１３７０の判定結果がＹＥＳの場合、入力データ管理部１２６は、入力キュー状態７７０が有効な情報でなければ（入力キュー状態７７０が「−」といった無効な値であれば）、図１５に示す処理を行い、入力キュー状態７７０が有効な情報であれば（入力キュー状態７７０が「−」といった無効な値でなければ）、図１７に示す処理を行う。
【０１１８】
図１４は、図１３のステップ１３６０の詳細（入力キュー状態を非考慮）を示したフローチャートである。
【０１１９】
最初に、入力データ管理部１２６は、サーバ管理表１２８から、ステップ１３３０で取得したストリームＩＤ３１０に対応するスループット７６０を取得する（ステップ１４１０）。
【０１２０】
次に、入力データ管理部１２６は、ステップ１３１０で取得したデータ量３２０が、スループット７６０（つまり単位時間当たりに処理可能なデータ要素の数）よりも大きいか判定する（ステップ１４２０）。
【０１２１】
ステップ１４２０の判定結果がＹＥＳの場合、入力データ管理部１２６は、データ量３２０が、ステップ１３４０で取得したウィンドウサイズ７５０の２倍よりも大きいか判定する（ステップ１４３０）。なお、２倍とする理由は、例えば次のとおりである。すなわち、個数指定の場合、分割データ量を最低でもウィンドウサイズの２倍以上にしないと、サーバの計算量だけが増えてしまい（例えば、補助データ量が多くて結果利用データが少ない、即ち、捨てる為の処理をサーバは多くしている）、逆にシステム全体のスループットが下がってしまうことにある。従って、Ｓ１４３０の判断において、データ量３２０の閾値は、ウィンドウサイズ７５０のＸ倍（Ｘは２以上の整数）の値とすることができる。これは、データ量がウィンドウサイズ７５０の２倍よりも大きいか否かの判断を行う他のステップにも適用することができる。
【０１２２】
ステップ１４３０の判定結果がＹＥＳの場合、入力データ管理部１２６は、入力データ分割部１２７に、スループット７６０を加味した分割処理（個数指定による分割処理）を指示する（ステップ１４４０）。
【０１２３】
ステップ１４２０又は１４３０の判定結果がＮＯの場合、負荷分散は行われない。
【０１２４】
図１５は、図１３のステップ１３８０の詳細（入力キュー状態を非考慮）を示したフローチャートである。
【０１２５】
最初に、入力データ管理部１２６は、入力データ管理表１２４から、Ｓ１３３０で取得したストリームＩＤ３１０に対応するデータ蓄積時間３３０を取得する（ステップ１５１０）。
【０１２６】
次に、入力データ管理部１２６は、サーバ管理表１２８から、ステップ１３３０で取得したストリームＩＤ３１０に対応するスループット７６０を取得する（ステップ１５２０）。
【０１２７】
次に、入力データ管理部１２６は、ステップ１３１０で取得したデータ量３２０が、スループット７６０よりも大きいか否かを判定する（ステップ１５３０）。
【０１２８】
ステップ１５３０の判定結果がＹＥＳの場合、入力データ管理部１２６は、データ蓄積時間３３０が、ステップ１３４０で取得したウィンドウサイズ７５０の２倍よりも長いか否かを判定する（ステップ１５４０）。
【０１２９】
ステップ１５４０の判定結果がＹＥＳの場合、入力データ管理部１２６は、入力データ分割部１２７に、スループット７６０を加味した分割処理（時間指定による分割処理）を指示する（ステップ１５５０）。
【０１３０】
ステップ１５３０又は１５４０の判定結果がＮＯの場合、負荷分散は行われない。
【０１３１】
図１６は、図１３のステップ１３６０の詳細（入力キュー状態を考慮）を示したフローチャートである。
【０１３２】
最初に、入力データ管理部１２６は、サーバ管理表１２８から、ステップ１３３０で取得したストリームＩＤ３１０に対応するスループット７６０および入力キュー状態７７０を取得する（ステップ１６１０）。
【０１３３】
次に、入力データ管理部１２６は、スループット７６０から入力キュー状態７７０を減算することにより得られた差が正の値か否かを判定する（ステップ１６２０）。
【０１３４】
ステップ１６２０の判定結果がＹＥＳの場合、入力データ管理部１２６は、ステップ１３１０で取得したデータ量３２０が、ステップ１６２０で得られた差よりも大きいか否かを判定する（ステップ１６３０）。
【０１３５】
ステップ１６３０の判定結果がＹＥＳの場合、入力データ管理部１２６は、データ量３２０が、ステップ１３４０で取得したウィンドウサイズ７５０の２倍よりも大きいか判定する（ステップ１６４０）。
【０１３６】
ステップ１６４０の判定結果がＹＥＳの場合、入力データ管理部１２６は、入力データ分割部１２７に、スループット７６０と入力キュー状態７７０を加味した分割処理（個数指定による分割処理）を指示する（ステップ１４４０）。
【０１３７】
ステップ１６２０、１６３０又は１６４０の判定結果がＮＯの場合、負荷分散は行われない。
【０１３８】
図１７は、図１３のステップ１３８０の詳細（入力キュー状態を考慮）を示したフローチャートである。
【０１３９】
最初に、入力データ管理部１２６は、入力データ管理表１２４から、ステップ１３３０で取得したストリームＩＤ３１０に対応するデータ蓄積時間３３０を取得する（ステップ１７１０）。
【０１４０】
次に、入力データ管理部１２６は、サーバ管理表１２８から、ステップ１３３０で取得したストリームＩＤ３１０に対応するスループット７６０、および入力キュー状態７７０を取得する（ステップ１７２０）。
【０１４１】
次に、入力データ管理部１２６は、スループット７６０から入力キュー状態７７０を減算することにより得られた差が正の値か否かを判定する（ステップ１７３０）。
【０１４２】
ステップ１７３０の判定結果がＹＥＳの場合、入力データ管理部１２６は、ステップ１３１０で取得したデータ量３２０が、ステップ１７３０で得られた差よりも大きいか否かを判定する（ステップ１７４０）。
【０１４３】
ステップ１７４０の判定結果がＹＥＳの場合、入力データ管理部１２６は、データ蓄積時間３３０が、ステップ１３４０で取得したウィンドウサイズ７５０の２倍よりも長いか判定する（ステップ１７５０）。
【０１４４】
ステップ１７５０の判定結果がＹＥＳの場合、入力データ管理部１２６は、入力データ分割部１２７に、スループット７６０と入力キュー状態７７０を加味した分割処理（時間指定による分割処理）を指示する（ステップ１７６０）。
【０１４５】
ステップ１７３０、１７４０又は１７５０の判定結果がＮＯの場合、負荷分散は行われない。
【０１４６】
図１８は、図１４のステップ１４４０の指示に応答して行なわれる分割処理のフローチャートである。
【０１４７】
最初に、入力データ分割部１２７は、ステップ１４１０で取得されたスループット７６０を、分割データ量として決定する（ステップ１８１０）。つまり、スループット７６０が表す、単位時間当りに処理されるデータ要素の数が、分割データを構成するデータ要素の数に決定される。
【０１４８】
次に、入力データ分割部１２７は、入力データ蓄積部１２３に蓄積されているストリームデータから、ステップ１８１０で決定した分割データ量と同数のデータ要素（以下、図１８の説明において「データ要素群」と言う）を取得する（ステップ１８２０）。
【０１４９】
次に、入力データ分割部１２７は、分割データＩＤが０より大きいか否かを判定する（ステップ１８３０）。
【０１５０】
ステップ１８３０の判定結果がＹＥＳの場合、入力データ管理部１２７は、Ｓ１８２０で取得したデータ要素群のうち、最古のタイムスタンプを持つデータ要素から数えて、Ｓ１３４０で取得したウィンドウサイズ７５０の値から１を減算した値番目のデータ要素までを、補助データ部８４０に含まれるデータ要素と決定する（ステップ１８６０）。そして、入力データ管理部１２７は、決定した補助データ部８４０の次のデータ要素（結果利用データ部８３０の先頭のデータ要素）が有するタイムスタンプを、演算対象開始時間とし、その演算対象開始時間を、ステップ１８２０で取得したデータ要素群の属性値として付与する（ステップ１８６５）。
【０１５１】
ステップ１８３０の判定結果がＮＯの場合、入力データ分割部１２７は、ステップ１８２０で取得したデータ要素群のうちの最古のタイムスタンプを、演算対象開始時間とし、演算対象開始時間１０３０を属性値として同データ要素群に付与する（ステップ１８４０）。
【０１５２】
次に、入力データ分割部１２７は、演算終了通知データ部８２０を、ステップ１８２０で取得したデータ要素群の後に付与する（ステップ１８７０）。
【０１５３】
次に、入力データ分割部１２７は、分割データＩＤをインクリメントし、ステップ１８２０で取得したデータ要素群に、インクリメント後の分割データＩＤを、属性値として付与する（ステップ１８８０）。このステップ１８８０で、分割データが完成する。
【０１５４】
次に、入力データ分割部１２７は、ステップ１８８０で生成された分割データを、データ送信部１２９に出力し、その分割データの送信処理を指示する（ステップ１８９０）。
【０１５５】
図１９は、図１５のステップ１５５０の指示に応答して行なわれる分割処理のフローチャートである。
【０１５６】
この図に示す分割処理は、図１８に示した分割処理と比べて、分割データＩＤが０より大きいと判定されたときに行われる処理が異なり、その他の処理は、図１８に示した分割処理と同様である。すなわち、ステップ１９６０は、図１８のステップ１８６０と異なるが、他のステップ１９１０、１９２０、１９３０、１９４０、１９７０、１９８０、１９９０及び１９９５は、図１８に示したステップ１８１０、１８２０、１８３０、１８４０、１８６５、１８７０、１８８０及び１８９０とそれぞれ同じである。
【０１５７】
ステップ１９６０では、入力データ管理部１２７は、Ｓ１９２０で取得したデータ要素群の内、最古のタイムスタンプを持つデータ要素から、Ｓ１３４０で取得したウィンドウサイズ７５０の値の範囲にあるデータ要素までを、補助データ部８４０に含まれるデータ要素と決定する。なお、ここで言う「データ要素群」とは、入力データ蓄積部１２３に蓄積されているストリームデータから出力された一以上のデータ要素であって、スループット７６０が表す、単位時間当たりに処理可能なデータ要素の数と同数のデータ要素である。
【０１５８】
図２０は、図１６のステップ１６５０の指示に応答して行なわれる分割処理のフローチャートである。
【０１５９】
この図に示す分割処理は、図１８に示した分割処理と比べて、分割データ量の決定の方法が異なり、その他の処理は、図１８に示した分割処理と同様である。すなわち、ステップ２０２０は、図１８のステップ１８１０と異なるが、他のステップ２０３０、２０４０、２０５０、２０７０、２０７５、２０８０、２０９０及び２１００は、図１８に示したステップ１８２０、１８３０、１８４０、１８６０、１８６５、１８７０、１８８０及び１８９０とそれぞれ同じである。
【０１６０】
ステップ２０２０では、入力データ分割部１２７は、ステップ１６１０にて取得したスループット７６０と入力キュー状態７７０の差分を計算し、分割データ量を決定する（ステップ２０２０）。つまり、スループット７６０が表す、単位時間当りに処理されるデータ要素の数と、入力キュー状態７７０が表すデータ要素数との差分（正の値）が、分割データを構成するデータ要素の数に決定される。
【０１６１】
図２１は、図１７のステップ１７６０の指示に応答して行なわれる分割処理のフローチャートである。
【０１６２】
この図に示す分割処理は、図１９に示した分割処理と比べて、分割データ量の決定の方法が異なり、その他の処理は、図１９に示した分割処理と同様である。すなわち、ステップ２１１０は、図１９のステップ１９１０と異なるが、他のステップ２１２０、２１３０、２１４０、２１６０、２１７０、２１８０、２１９０及び２１９５は、図１９に示したステップ１９２０、１９３０、１９４０、１９６０、１９７０、１９８０、１９９０及び１９９５とそれぞれ同じである。
【０１６３】
ステップ２１１０では、入力データ分割部１２７は、ステップ１７２０にて取得したスループット７６０と入力キュー状態７７０の差分を計算し、分割データ量を決定する（ステップ２０２０）。つまり、スループット７６０が表す、単位時間当りに処理されるデータ要素の数と、入力キュー状態７７０が表すデータ要素数との差分（正の値）が、分割データを構成するデータ要素の数に決定される。
【０１６４】
図２２は、分割処理での指示（図１８のステップ１８９０、図１９のステップ１９９５、図２０のステップ２１００、又は図２１のステップ２１９５での指示）に応答して行なわれる送信処理のフローチャートである。
【０１６５】
最初に、データ送信部１２９は、分割処理で決定された分割データＩＤと演算対象開始時間（属性値として付与された演算対象開示時間）を、分割データ管理情報受信部１５５に送信する（ステップ２２１０）。分割データ管理情報受信部１５５は、データ送信部１２９からの分割データＩＤ（属性値として付与されたＩＤ）と演算対象開始時間１０３０を、分割データ管理表１５０に、分割データＩＤ１０２０と演算対象開始時間１０３０としてそれぞれ記録する。
【０１６６】
次に、データ送信部１２９は、分割処理で決定された分割データＩＤと、ＥＮＤ送信有無の値「無し」を、処理順序受信部１７５に送信する（ステップ２２２０）。処理順序受信部１７５は、データ送信部１２９からの分割データＩＤと、ＥＮＤ送信有無の値「無し」とを、処理順序制御表１７６に、分割データＩＤ１１２０とＥＮＤ送信有無１１３０としてそれぞれ記録する。
【０１６７】
次に、データ送信部１２９は、分割処理で決定された分割データをデータ受信部１４４に送信する（ステップ２２３０）。
【０１６８】
次に、データ送信部１２９は、ステップ１３４０で取得されたウィンドウサイズ７５０が個数指定か否かを判定する（ステップ２２４０）。
【０１６９】
ステップ２２４０の判定結果がＹＥＳの場合、データ送信部１２９は、送信した分割データのうちの、最新のタイムスタンプを持つデータ要素から数えて、ウィンドウサイズ７５０の値から１を減算した値番目のデータ要素が有するタイムスタンプを記憶領域（例えばレジスタ）に記録する（ステップ２２５０）。そして、データ送信部１２９は、入力データ蓄積部１２３から、ステップ２２５０で記録したタイムスタンプよりも古いデータ要素を全て削除する（ステップ２２６０）。
【０１７０】
ステップ２２４０の判定結果がＮＯの場合、データ送信部１２９は、ステップ１３４０で取得されたウィンドウサイズ７５０が時間指定か否かを判定する（ステップ２２７０）。
【０１７１】
ステップ２２７０の判定結果がＹＥＳの場合、データ送信部１２９は、送信した分割データのうち、最新のタイムスタンプを持つデータ要素から、ウィンドウサイズ７５０の値の範囲にあるデータ要素の最古のタイムスタンプを記憶領域（例えばレジスタ）に記録する（ステップ２２８０）。そして、データ送信部１２９は、入力データ蓄積部１２３から、ステップ２２８０で記録したタイムスタンプよりも古いデータ要素を全て削除する（ステップ２２９０）。
【０１７２】
図２３は、クエリ処理部１４５による分割データの処理のフローチャートである。
【０１７３】
最初に、入力部１４６は、分割データを受信する（ステップ２３１０）。
【０１７４】
次に、入力部１４６は、分割データを演算処理実行部１４７に送信する（ステップ２３２０）。
【０１７５】
次に、演算処理実行部１４７は、受信した分割データが演算終了通知データ部８２０か否かを判定する（ステップ２３３０）。
【０１７６】
ステップ２３３０の判定結果がＹＥＳの場合、演算処理実行部１４７は、演算処理が終了していることを確認して、出力部１４８に演算終了通知データ部８２０を出力する（ステップ２３４０）。
【０１７７】
ステップ２３３０の判定結果がＮＯの場合、演算処理実行部１４７は、演算処理を実行し（ステップ２３５０）、分割データ管理表１５０を参照する（ステップ２３６０）。演算処理実行部１４７は、参照の結果、処理したストリームデータが演算対象開始時間１０３０の値以上か否かを判定する（ステップ２３７０）。
【０１７８】
ステップ２３７０の判定結果がＹＥＳの場合、演算処理実行部１４７は、演算処理結果を、出力部１４８に出力する（ステップ２３８０）。
【０１７９】
次に、出力部１４８は、入力された結果を処理結果受信部１７３に送信する（ステップ２３９０）。
【０１８０】
図２４は、出力部１４８によって送信された処理結果の処理結果制御プログラム１７２による処理のフローチャートである。
【０１８１】
最初に、処理結果受信部１７３は、出力部１４８から処理結果を受信する（ステップ２４１０）。
【０１８２】
次に、処理結果受信部１７３は、処理結果が演算終了通知データ部８２０か否かを判定する（ステップ２４２０）。
【０１８３】
ステップ２４２０の判定結果がＹＥＳの場合、処理結果受信部１７３は、処理順序受信部１７５へ演算終了通知データ部８２０を送信する（ステップ２４５０）。処理順序受信部１７５は、処理順序制御表１７６に、ＥＮＤ送信有無１１３０として「有り」を記録する（ステップ２４６０）。
【０１８４】
ステップ２４２０の判定結果がＮＯの場合、処理結果受信部１７３は、処理結果を処理結果管理部１７４に出力する（ステップ２４３０）。処理結果管理部１７４は、処理結果を主記憶装置１７１、または２次記憶装置１７９に格納し、処理順序制御表１７６の処理結果格納場所１１４０を更新する（ステップ２４４０）。
【０１８５】
以上、実施例１の説明である。
【０１８６】
なお、実施例１によれば、分割データ量は、サーバのスループットと同じであるが、それは、ＥＮＤデータがデータ要素の数としてカウントされないためである。ＥＮＤデータをデータ要素の数としてカウントする場合には、分割データ量は、サーバのスループットの値よりも１少ない値となる。また、サーバのスループットについての時間の単位と、時間指定でのウィンドウサイズに定義される時間の単位は、同一であることが望ましい（例えば「秒」で表されることが望ましい）。それらの単位が異なっている場合には、同一の単位に換算されることが望ましい。
【０１８７】
実施例１では、図１３から分かるように、ストリームデータが入力データ蓄積部１２３に投入され続けている間、図１３に示すループ１（すなわち、負荷分散するか否かの判定、分割データの生成、分割データの送信、及び、分割データの処理）が繰り返される。
【０１８８】
ループ１の繰り返しにおいて、分割データの送信先となるサーバ計算機は、所定の規則（例えばラウンドロビン）に従って切り替わる。具体的には、例えば、第１のサーバ計算機１４０に分割データがＮ回送信された場合（Ｎは自然数）、分割データの送信先として、第２のサーバ計算機１６０が選択される。その第２のサーバ計算機１６０に分割データがＮ回送信された場合、分割データの送信先として、再び第１のサーバ計算機１４０が選択される。図１３〜図２２で考慮されるウィンドウサイズは、分割データの送信先のサーバ計算機が有するクエリで定義されているウィンドウサイズであり、図１３〜図２２で考慮されるスループットは、分割データの送信先のサーバ計算機のスループットである。
【０１８９】
同一のストリームＩＤ及びクエリＩＤについて、第１のサーバ計算機１４０と第２のサーバ計算機のスループットは必ずしも同じでなくても良い。例えば、ストリームＩＤ「１」及びクエリＩＤ「１」について、第１のサーバ計算機１４０のスループットが１０００個／秒であっても、第２のサーバ計算機１４０のスループットが３００個／秒であっても良い。
【０１９０】
以下、実施例１に係る負荷分散が行われても、演算処理結果としては、サーバ計算機１台で演算処理した結果と同じであることを説明する。その際、サーバ計算機１台で処理するケースを「ケースＡ」とし、２台のサーバ計算機１４０及び１６０（実施例１）に従うケースを「ケースＢ」とする。ケースＢでは、両方のサーバ計算機１４０及び１６０について、ウィンドウサイズが個数指定で「３」であるとし、スループットが「５」であるとする。ケースＡ及びケースＢの両方について、ストリームデータを構成する各データ要素が、１つの自然数を有しており、そのストリームデータにおいて、自然数が連続しているとする。以下、値として自然数「Ｐ」を有するデータ要素を＜Ｐ＞と表現する。
【０１９１】
＜＜ケースＡ＞＞
（Ａ１）１回目で送信される分割データは、＜１＞、＜２＞、＜３＞、＜４＞及び＜５＞を有する。サーバ計算機から出力される処理結果は、１、３（１＋２）、６（１＋２＋３）、９（６＋４−１）、１２（９＋５−２）である。
（Ａ２）２回目で送信される分割データは、＜６＞、＜７＞、＜８＞、＜９＞及び＜１０＞を有する。サーバ計算機から出力される処理結果は、１５（１２＋６−３）、１８（１５＋７−４）、２１（１８＋８−５）、２４（２１＋９−６）、２７（２４＋１０−７）である。
（Ａ３）３回目で送信される分割データは、＜１１＞、＜１２＞、＜１３＞、＜１４＞及び＜１５＞を有する。サーバ計算機から出力される処理結果は、３０、３３、３６、３９、４２である。
【０１９２】
従って、ケースＡでは、処理結果として、１、３、６、９、１２、１５、１８、２１、２４、２７、３０、…、が出力制御計算機に出力される。
【０１９３】
＜＜ケースＢ＞＞
（Ｂ１）１回目で送信される分割データは、＜１＞、＜２＞、＜３＞、＜４＞及び＜５＞を有する。１回目の分割データなので、補助データ部は無い。この分割データは第１のサーバ計算機１４０に送信される。第１のサーバ計算機１４０から出力される処理結果は、１、３（１＋２）、６（１＋２＋３）、９（６＋４−１）、１２（９＋５−２）である。
（２）２回目で送信される分割データは、＜４＞、＜５＞、＜６＞、＜７＞及び＜８＞を有する。ウィンドウサイズ「３」より１つ少ない数が、補助データ部を構成するデータ要素の数（補助データ量）であるため、先頭から２個のデータ要素＜４＞及び＜５＞が、補助データ部を構成するデータ要素であり、残りのデータ要素＜６＞、＜７＞及び＜８＞が、結果利用データ部に属するデータ要素である。この分割データは第２のサーバ計算機１６０に送信される。第２のサーバ計算機１６０から出力される処理結果は、１５（９＋６）、１８（１５＋７−４）、２１（１８＋８−５）である。つまり、補助データ部を構成する＜４＞及び＜５＞は、演算処理の対象となり、結果利用データの演算処理に用いられるものの、処理結果としては出力されない。
（３）３回目で送信される分割データは、＜７＞、＜８＞、＜９＞、＜１０＞及び＜１１＞を有する。先頭から２個のデータ要素＜７＞及び＜８＞が、補助データ部を構成するデータ要素である。この分割データは第１のサーバ計算機１４０に送信される。第１のサーバ計算機１４０から出力される処理結果は、２４（２１＋９−６）、２７（２４＋１０−７）、３０（２７＋１１−８）である。
【０１９４】
従って、ケースＢでも、処理結果として、１、３、６、９、１２、１５、１８、２１、２４、２７、３０、…、が出力制御計算機に出力される。これは、ケースＡと全く同じである。
【０１９５】
以上、実施例１によれば、入力制御用計算機１２０が、ストリームデータを基に複数の分割データを送信し、複数の分割データをサーバ計算機１４０及び１６０に送信する。分割データのデータ量は、その分割データの送信先サーバ計算機１４０又は１６０のスループット（又は、スループット及び入力キュー状態）を基に決定される。また、分割データは、前述した補助データ部、結果利用データ部及び演算終了通知データ部から構成されるが、補助データ部のサイズ（補助データ部に含まれるデータ要素の数）は、送信先サーバ計算機１４０又は１６０のクエリで定義されているウィンドウサイズに基づいて決定される。そのため、システム開発者は、ストリームデータの量やシステム構成を考慮することなく、サーバ計算機毎のクエリを定義することができる。
【０１９６】
また、実施例１によれば、入力制御用計算機１２０が、ストリームデータの量を基に、負荷分散を行うか否かを判定する。このため、ストリームデータの増加量に応じた負荷分散が可能である。それ故、ストリームデータ量が決定しているバッチ型処理への適用だけでなく、絶え間なく発生するストリームデータを処理するオンライン型処理への適用も可能となっている。また、例えば、ストリームデータの量が所定の条件に合致するまで減った場合には、入力制御用計算機１２０は、ストリームデータを基に分割データを生成することを止め一つのサーバ計算機にストリームデータを送信するといった縮退処理を行うこことも可能である。
【実施例２】
【０１９７】
以下、本発明の実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する。
【０１９８】
実施例１では、補助データ量（補助データ部に含まれるデータ要素の数）は、クエリに定義されているウィンドウサイズに基づいて自動で決定されるが、実施例２では、補助データ量は、手動で設定される。
【０１９９】
図２５は、本発明の実施例２に係るストリームデータ処理システムの全体構成図である。
【０２００】
ユーザ指定用計算機１９０が、ネットワーク１１０に接続されている。ユーザ指定用計算機１９０は、ＣＰＵ１９３、２次記憶装置１９５、通信インタフェース１９７、および主記憶装置１９１から構成されている。主記憶装置１９１には、データ分割指定プログラム１９４、およびデータ分割指定管理表１９６が格納されている。
【０２０１】
データ分割指定プログラム１９４によって、補助データ量を入力するための画面（以下、ユーザ分割指定画面）が表示される。ユーザ分割指定画面は、計算機１９０が有する表示装置（図示せず）に表示されても良いし、ネットワーク１１０を通じて遠隔の表示装置に表示されても良い。
【０２０２】
図２６は、データ分割指定画面１９２の一例を示す。
【０２０３】
データ分割指定画面１９２は、第１のサーバ計算機１４０のサーバ名が表示されたサーバ名表示部２６２０と、第１のサーバ計算機１４０のＩＰアドレスが表示されたサーバＩＰアドレス表示部２６２５と、第１のサーバ計算機１４０に登録されているストリームＩＤ「Ｓ１」が表示されたストリームＩＤ表示部２６３０と、同サーバ計算機１４０に登録されているストリームＩＤ「Ｓ２」が表示されたストリームＩＤ表示部２６５０と、ストリームＩＤ「Ｓ１」に対応するクエリＩＤ「Ｑ１」の補助データ量２６４０を入力するテキストフィールド２６４５と、ストリームＩＤ「Ｓ２」に対応するクエリＩＤ「Ｑ２」の補助データ量２６６０を入力するテキストフィールド２６６５と、ＯＫボタン２６７０と、ＣＡＮＣＥＬボタン２６７５とを有する。
【０２０４】
この画面１９２は、例えば、ユーザがサーバＡを指定したときに表示される。サーバＡのＩＰアドレス、ストリームＩＤ及びクエリＩＤは、例えば、入力データ制御プログラム１２２に問い合わせることにより、サーバ管理表１２８から取得される。
【０２０５】
テキストフィールド２６４５に値が入力されると、データ分割指定プログラム１９４は、サーバ管理表１２８を参照して、この画面１９２に表示されているストリームＩＤ「Ｓ１」及びクエリＩＤ「Ｑ１」に対応するウィンドウサイズ７５０を特定し、入力された値が特定されたウィンドウサイズ７５０よりも大きいか否かを判定する。
【０２０６】
テキストフィールド２６４５に入力された値がウィンドウサイズ７５０と同じかそれよりも小さいと判定した場合、データ分割指定プログラム１９４は、入力エラーを示す画面を表示する。この画面は、テキストフィールド２６４５に入力される値は別の値であるべきことを示唆する。
【０２０７】
一方、テキストフィールド２６４５に入力された値がウィンドウサイズ７５０よりも大きいと判定した場合、データ分割指定プログラム１９４は、テキストフィールド２６４５に、入力された値を表示する。
【０２０８】
テキストフィールド２６６５についても、テキストフィールド２６４５についての判定と同様の判定が行われる。
【０２０９】
ＯＫボタン２６７０が押下されると、データ分割指定プログラム１９４は、テキストフィールド２６４５ならびにテキストフィールド２６６５に表示されている値を、データ分割指定管理表１９６に、補助データ量２６５０（図２７参照）としてそれぞれ記録する。
【０２１０】
図２７は、データ分割指定管理表１９６の一例を示す。
【０２１１】
データ分割指定管理表１９６は、分割データ８１０の補助データ部８２０の量を表す値を有する。具体的には、この表１９６は、サーバ名２６１０、ＩＰアドレス２６２０、ストリームＩＤ２６３０、クエリＩＤ２６４０、および補助データ量２６５０を有する。サーバ名２６１０、ＩＰアドレス２６２０、ストリームＩＤ２６３０及びクエリＩＤ２６４０は、図２６の画面１９２に表示されたサーバ名、ＩＰアドレス、ストリームＩＤ及びクエリＩＤであり、補助データ量２６５０は、ユーザからテキストフィールド２６６５に入力された値である。
【０２１２】
図２８は、実施例２におけるサーバ管理表１２８の更新手順を示したフローチャートである。
【０２１３】
最初に、サーバ情報取得部１２５は、ネットワーク１１０を通じてサーバ監視プログラム１４２と通信を行い、サーバ情報取得を指示する（ステップ２８１０）。
【０２１４】
次に、サーバ監視プログラム１４２は、サーバ情報取得部１２５からの指示に応答して、クエリ管理表１４９を参照し、ストリームＩＤ記録欄１０１０からストリームＩＤを、クエリＩＤ記録欄９２０からクエリＩＤを取得する（ステップ２８２０）。
【０２１５】
次に、サーバ監視プログラム１４２は、クエリ処理部１４５に問合せ、取得したクエリＩＤに対応するスループットを取得する（ステップ２８３０）。
【０２１６】
次に、サーバ監視プログラム１４２は、取得したクエリＩＤに対応するクエリ処理部１４５に存在する入力部１４６に問合せ、入力部１４６から入力キュー状態を取得する（ステップ２８４０）。
【０２１７】
次に、サーバ監視プログラム１４２は、ステップ２８２０からステップ２８４０で取得したストリームＩＤ、クエリＩＤ、スループット、および入力キュー状態を、サーバ情報取得部１２５に送信する（ステップ２８５０）。
【０２１８】
次に、サーバ情報取得部１２５は、データ分割指定管理表１９６を参照し、クエリＩＤに対応する補助データ量を取得する（ステップ２８６０）。次に、サーバ情報取得部１２５は、補助データ量が個数指定か否かを判定する（ステップ２８７０）。
【０２１９】
ステップ２８７０の判定結果がＹＥＳの場合、サーバ情報取得部１２５は、補助データ量の値に１を加算する（ステップ２８８０）。その理由は、下記の（１）及び（２）の通りである。
（１）このステップ２８８０での「補助データ量＋１」という値は、後述のステップ２８９０で、サーバ管理表１２８のウィンドウサイズ７５０として記録される。
（２）個数指定に従うウィンドウサイズの場合、分割処理では、補助データ部に含まれるデータ要素の数は、「ウィンドウサイズ−１」である。
【０２２０】
最後に、サーバ情報取得部１２５は、サーバ管理表１２８における該当の行（ステップ２８１０での指示先のサーバ監視プログラム１４２が存在するサーバ計算機の名称が記録されている行）を更新する（ステップ２８９０）。すなわち、サーバ情報取得部１２５は、ステップ２８２０で取得したストリームＩＤとクエリＩＤをストリームＩＤ７３０とクエリＩＤ７４０として記録し、ステップ２８３０で取得したスループットをスループット７６０として記録し、ステップ２８４０で取得した入力キュー状態を入力キュー状態７７０として記録し、ステップ２８６０またはステップ２８８０の補助データ量をウィンドウサイズ７５０として記録する。
【０２２１】
以上、本発明の幾つかの実施例を説明したが、本発明はこれらの実施例に限定されるものではない。
【０２２２】
例えば、上述した実施例１及び２では、入力データ制御プログラム１２２と処理結果制御プログラム１７２が別々の計算機に導入されているが、それらのプログラム１２２及び１７２は１台の計算機に導入されてもよい。その他、各装置、各プログラム、各フローチャートの具体的な構成は、本発明の趣旨を逸脱しない範囲で適宜変更（統合や分離など）が可能である。例えば、入力制御用計算機、複数のサーバ計算機及び出力制御用計算機のうちの少なくとも一つは、複数の計算機で構成されていてもよい。
【符号の説明】
【０２２３】
１０１…ストリームデータソース、１２０…入力制御用計算機、１４０…第１のサーバ計算機、１６０…第２のサーバ計算機、１７０…出力制御用計算機、１２１，１４１，１７１…主記憶装置、１３１，１５２，１７８…ＣＰＵ、１３２，１５３，１７９…２次記憶装置、１３３，１５４，１８０…通信インタフェース、１２２…入力データ制御プログラム、１４２…サーバ監視プログラム、１４３…ストリームデータ処理プログラム、１７２…処理結果制御プログラム、１３０，１５１，１７７…オペレーティングシステム、１１０，１１５…ネットワーク
【図１】
2011128818.tif 000003
【図２】
2011128818.tif 000004
【図３】
2011128818.tif 000005
【図４】
2011128818.tif 000006
【図５】
2011128818.tif 000007
【図６】
2011128818.tif 000008
【図７】
2011128818.tif 000009
【図８】
2011128818.tif 000010
【図９】
2011128818.tif 000011
【図１０】
2011128818.tif 000012
【図１１】
2011128818.tif 000013
【図１２】
2011128818.tif 000014
【図１３】
2011128818.tif 000015
【図１４】
2011128818.tif 000016
【図１５】
2011128818.tif 000017
【図１６】
2011128818.tif 000018
【図１７】
2011128818.tif 000019
【図１８】
2011128818.tif 000020
【図１９】
2011128818.tif 000021
【図２０】
2011128818.tif 000022
【図２１】
2011128818.tif 000023
【図２２】
2011128818.tif 000024
【図２３】
2011128818.tif 000025
【図２４】
2011128818.tif 000026
【図２５】
2011128818.tif 000027
【図２６】
2011128818.tif 000028
【図２７】
2011128818.tif 000029
【図２８】
2011128818.tif 000030