(57)【要約】  ストリームデータ処理システムは、移行対象の入力ストリームデータ（以下、データ）を蓄積し、データの移行を移行元及び移行先へ指示し、蓄積データの転送指示に応答して、蓄積データを移行先へ転送し、データの移行元への転送を停止して、蓄積データに引き続きデータを移行先へ転送する入力サーバ、移行の指示に応答して、入力サーバから転送された移行対象のデータを処理するクエリとクエリのあるデータの入力に対応する実行の完了に伴う中間値を移行先へ移行し、移行先からのクエリの実行の停止指示に応答して、クエリの実行を停止し、クエリの実行結果を移行先へ転送する移行元、及び、移行の指示に応答して、移行元から移行されたクエリの実行を開始し、入力サーバから転送される、蓄積データ及び引き続くデータの中の、移行された中間値に対応するデータまでを読み飛ばし、移行元から転送されたクエリの実行結果までの出力を破棄する移行先サーバを有する。
2016035128.tif 000002
【特許請求の範囲】
【請求項１】
移行対象の入力ストリームデータと前記入力ストリームデータを処理させる移行先サーバとを特定する情報を含む移行指示に応答して、前記移行対象の入力ストリームデータを蓄積し、前記移行対象の入力ストリームデータの移行を移行元サーバ及び前記移行先サーバへ指示し、前記移行先サーバからの蓄積データの転送指示に応答して、蓄積した前記移行対象の入力ストリームデータを前記移行先サーバへ転送し、蓄積した前記移行対象の入力ストリームデータの前記移行先サーバへの転送完了に応答して、前記移行対象の入力ストリームデータの前記移行元サーバへの転送を停止し、蓄積した前記移行対象の入力ストリームデータに引き続く前記移行対象の入力ストリームデータの前記移行先サーバへの転送を開始する入力サーバ、
前記入力サーバからの前記移行対象の入力ストリームデータの移行の前記指示に応答して、前記入力サーバから転送された前記移行対象の入力ストリームデータを処理する処理内容を定義したクエリの、前記移行対象の入力ストリームデータのあるデータの入力に対応する実行の完了に応じて、前記クエリと前記クエリの前記あるデータの入力に対応する実行の完了に伴う中間値を前記移行先サーバへ移行し、前記移行先サーバからの前記クエリの実行の停止指示に応答して、前記クエリの実行を停止し、前記クエリの実行結果を前記移行先サーバへ転送する前記移行元サーバ、及び、
前記入力サーバからの前記移行対象の入力ストリームデータの移行の前記指示に応答して、前記移行元サーバから移行された前記クエリの実行を開始し、前記蓄積データの前記転送指示を前記入力サーバへ出力し、前記入力サーバから転送される、前記蓄積した入力ストリームデータ及び引き続く前記移行対象の入力ストリームデータの中の、前記中間値に対応するデータまでを読み飛ばし、前記移行元サーバから転送された前記クエリの前記実行結果までの、前記クエリの実行結果の出力を破棄する前記移行先サーバを有することを特徴とするストリームデータ処理システム。
【請求項２】
前記クエリの実行は、前記入力ストリームデータから処理対象のデータを抽出し、抽出したデータをウィンドウと呼ぶ記憶領域に格納するウィンドウ演算、前記ウィンドウに格納された前記データを対象に所定の演算を実行し、実行結果をオペレータと呼ぶ記憶領域に格納する関係演算、及び、前記オペレータに格納されたデータを出力ストリームデータとしてストリーム化するストリーム化演算を含むことを特徴とする請求項１記載のストリームデータ処理システム。
【請求項３】
前記中間値は、前記ウィンドウ、前記オペレータ、及び、前記関係演算を実行するために用いるワークエリアの各データであることを特徴とする請求項２記載のストリームデータ処理システム。
【請求項４】
前記関係演算が所定の演算を実行する前記データが格納される前記ウィンドウは、前記入力ストリームデータのデータの数を定義したＲＯＷＳウィンドウ、前記入力ストリームデータのデータの範囲を定義したＲＡＮＧＥウィンドウ、および、前記入力ストリームデータの最新のデータを定義したＮＯＷウィンドウのいずれか一つであることを特徴とする請求項２記載のストリームデータ処理システム。
【請求項５】
前記クエリ対応に設けられる前記ウィンドウは、ＩＤを付して識別される複数の前記入力ストリームデータを格納するＰＡＲＴＩＴＩＯＮ  ＢＹウィンドウであることを特徴とする請求項２記載のストリームデータ処理システム。
【請求項６】
前記入力サーバは、処理対象の前記入力ストリームデータのデータ流量が最も小さいサーバを前記移行先サーバとし、処理対象の前記入力ストリームデータのデータ流量が閾値を超えるサーバである前記移行元サーバへの入力するストリームデータの中で、データ流量が多い方から２番目のストリームデータを前記移行対象の入力ストリームデータとして選択して、前記移行指示とすることを特徴とする請求項１記載のストリームデータ処理システム。
【請求項７】
入力サーバ、移行元サーバおよび移行先サーバを接続したストリームデータ処理システムにおけるストリームデータ処理方法であって、
前記入力サーバは、
移行対象の入力ストリームデータと前記入力ストリームデータを処理させる前記移行先サーバとを特定する情報を含む移行指示に応答して、前記移行対象の入力ストリームデータを蓄積し、
前記移行対象の入力ストリームデータの移行を前記移行元サーバ及び前記移行先サーバへ指示し、
前記移行先サーバからの蓄積データの転送指示に応答して、蓄積した前記移行対象の入力ストリームデータを前記移行先サーバへ転送し、
蓄積した前記移行対象の入力ストリームデータの前記移行先サーバへの転送完了に応答して、前記移行対象の入力ストリームデータの前記移行元サーバへの転送を停止し、
蓄積した前記移行対象の入力ストリームデータに引き続く前記移行対象の入力ストリームデータの前記移行先サーバへの転送を開始し、
前記移行元サーバは、
前記入力サーバからの前記移行対象の入力ストリームデータの移行の前記指示に応答して、前記入力サーバから転送された前記移行対象の入力ストリームデータを処理する処理内容を定義したクエリの、前記移行対象の入力ストリームデータのあるデータの入力に対応する実行の完了に応じて、前記クエリと前記クエリの前記あるデータの入力に対応する実行の完了に伴う中間値を前記移行先サーバへ移行し、
前記移行先サーバからの前記クエリの実行の停止指示に応答して、前記クエリの実行を停止し、
前記クエリの実行結果を前記移行先サーバへ転送し、
前記移行先サーバは、
前記入力サーバからの前記移行対象の入力ストリームデータの移行の前記指示に応答して、前記移行元サーバから移行された前記クエリの実行を開始し、
前記蓄積データの前記転送指示を前記入力サーバへ出力し、
前記入力サーバから転送される、前記蓄積した入力ストリームデータ及び引き続く前記移行対象の入力ストリームデータの中の、前記中間値に対応するデータまでを読み飛ばし、
前記移行元サーバから転送された前記クエリの前記実行結果までの、前記クエリの実行結果の出力を破棄することを特徴とするストリームデータ処理方法。
【請求項８】
前記クエリの実行は、
前記入力ストリームデータから処理対象のデータを抽出し、抽出したデータをウィンドウと呼ぶ記憶領域に格納するウィンドウ演算、
前記ウィンドウに格納された前記データを対象に所定の演算を実行し、実行結果をオペレータと呼ぶ記憶領域に格納する関係演算、および、
前記オペレータに格納されたデータを出力ストリームデータとしてストリーム化するストリーム化演算を含むことを特徴とする請求項７記載のストリームデータ処理方法。
【請求項９】
前記中間値は、前記ウィンドウ、前記オペレータ、及び、前記関係演算を実行するために用いるワークエリアの各データであることを特徴とする請求項８記載のストリームデータ処理方法。
【請求項１０】
前記関係演算が所定の演算を実行する前記データが格納される前記ウィンドウは、前記入力ストリームデータのデータの数を定義したＲＯＷＳウィンドウ、前記入力ストリームデータのデータの範囲を定義したＲＡＮＧＥウィンドウ、および、前記入力ストリームデータの最新のデータを定義したＮＯＷウィンドウのいずれか一つであることを特徴とする請求項８記載のストリームデータ処理方法。
【請求項１１】
前記クエリ対応に設けられる前記ウィンドウは、ＩＤを付して識別される複数の前記入力ストリームデータを格納するＰＡＲＴＩＴＩＯＮ  ＢＹウィンドウであることを特徴とする請求項８記載のストリームデータ処理方法。
【請求項１２】
前記入力サーバは、処理対象の前記入力ストリームデータのデータ流量が最も小さいサーバを前記移行先サーバとし、処理対象の前記入力ストリームデータのデータ流量が閾値を超えるサーバである前記移行元サーバへの入力するストリームデータの中で、データ流量が多い方から２番目のストリームデータを前記移行対象の入力ストリームデータとして選択して、前記移行指示とすることを特徴とする請求項７記載のストリームデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストリームデータの処理システム及びその処理方法に関する。
【背景技術】
【０００２】
ストリームデータ処理システムにおいて、処理内容を定義したクエリを実行中の計算機とは別に、新たに計算機を追加して，追加した計算機に一部のクエリを移行することにより、計算機負荷を分散させるスケールアウトを実現する方法が提案されている。【０００３】
たとえば，特許文献１は，クエリが定義する定義情報を基に、移行にかかるコストを計算し、計算した移行コストに応じて、移行するクエリを選択し、予め設定された移行方式でクエリを移行することを開示している。その移行方式として、クエリを実行するストリームデータ処理部が保存しているデータを移行先へコピーするコピー方式と、移行元と移行先のクエリの実行に伴うデータが一致するまで、移行元と移行先の双方へ同一のストリームデータを送信するウォームアップ方式が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−１４００３５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に開示された移行方式であるコピー方式は、ストリームデータ処理部が保存しているデータの移行先へのコピー中は、ストリームデータ処理部への新たなストリームデータの入力を一時的に停止させる必要があり、リアルタイム性が損なわれる。また、一時的に入力を停止させるストリームデータを記憶しておかなければ、停止期間中のストリームデータに欠損を生じる。【０００６】
ウォームアップ方式は、移行元と移行先のクエリの実行に伴うデータがいつまでも一致しない場合がある。極端な例として、移行対象のストリームデータが１時間間隔で入力されるような場合、少なくとも１時間は一致せず、場合によっては何時間も一致しないことになる。【０００７】
そこで、移行元と移行先のクエリの実行に伴うデータに欠損を生じさせずに、いつまでもデータ一致しないという状況を生じさせないこと、すなわち移行時間を短くすることが必要になる。
【課題を解決するための手段】
【０００８】
開示するストリームデータ処理システムは、移行対象の入力ストリームデータと入力ストリームデータを処理させる移行先サーバとを特定する情報を含む移行指示に応答して、移行対象の入力ストリームデータを蓄積し、移行対象の入力ストリームデータの移行を移行元サーバ及び移行先サーバへ指示し、移行先サーバからの蓄積データの転送指示に応答して、蓄積した移行対象の入力ストリームデータを移行先サーバへ転送し、蓄積した移行対象の入力ストリームデータの移行先サーバへの転送完了に応答して、移行対象の入力ストリームデータの移行元サーバへの転送を停止し、蓄積した移行対象の入力ストリームデータに引き続く移行対象の入力ストリームデータの移行先サーバへの転送を開始する入力サーバ、入力サーバからの移行対象の入力ストリームデータの移行の指示に応答して、入力サーバから転送された移行対象の入力ストリームデータを処理する処理内容を定義したクエリの、移行対象の入力ストリームデータのあるデータの入力に対応する実行の完了に応じて、クエリとクエリのあるデータの入力に対応する実行の完了に伴う中間値を移行先サーバへ移行し、移行先サーバからのクエリの実行の停止指示に応答して、クエリの実行を停止し、クエリの実行結果を移行先サーバへ転送する移行元サーバ、及び、入力サーバからの移行対象の入力ストリームデータの移行の指示に応答して、移行元サーバから移行されたクエリの実行を開始し、蓄積データの転送指示を入力サーバへ出力し、入力サーバから転送される、蓄積した入力ストリームデータ及び引き続く移行対象の入力ストリームデータの中の、中間値に対応するデータまでを読み飛ばし、移行元サーバから転送されたクエリの実行結果までの、クエリの実行結果の出力を破棄する移行先サーバを有する。
【発明の効果】
【０００９】
開示するストリームデータ処理システムによれば、移行時間を短くできる。
【図面の簡単な説明】
【００１０】
【図１】ストリームデータ処理部の概要図である。
【図２】ストリームデータ処理部の概要図である。
【図３】ストリームデータ処理システムの構成である。
【図４】データ振り分けテーブルである。
【図５】転送先管理部の処理フローチャートである。
【図６】ストリームデータ転送部の処理フローチャートである。
【図７】蓄積データ転送部の処理フローチャートである。
【図８】移行元処理部の処理フローチャートである。
【図９】移行先処理部の処理フローチャートである。
【図１０】タイミング制御部の処理フローチャートである。
【図１１】移行決定部の処理フローチャートである。
【発明を実施するための形態】
【００１１】
図１および図２は、ストリームデータ処理部の概要図である。図１は、処理内容（シナリオとも呼ぶ。）を定義するクエリを実行するストリームデータ処理部の一例である。ストリームデータ処理部１はクエリに従って、（１）入力ストリームデータから処理対象のデータを抽出し、抽出したデータをウィンドウ３と呼ぶ記憶領域に格納するウィンドウ演算２、（２）ウィンドウ３に格納されたデータを対象に所定の演算を実行し、実行結果をオペレータ５と呼ぶ記憶領域に格納する関係演算４、及び（３）オペレータ５に格納されたデータを出力ストリームデータとしてストリーム化するストリーム化演算６を実行する。
【００１２】
ウィンドウ３は、入力ストリームデータの各データの生成時刻Time（生成順序番号でもよい。）、そのデータのＩＤ（図２を用いて後述するように、入力ストリームデータにＩＤで識別される複数種類のデータが含まれる場合がある。）、及びそのデータの値VALを格納する。オペレータ５は、関係演算４の実行結果としての値VALを格納する。
【００１３】
クエリが定義する処理内容として、入力ストリームデータの最新の３つのデータの合計を求める簡単な例を説明する。煩雑さを避けるために、データをＤ（Time、ＩＤ、VAL）、または更に簡略化してＤ（Time）と表す。また、現時点を10：00とする。また関係演算４の実行結果としてのデータをVAL（Time）と表す。
【００１４】
ウィンドウ演算２は、09：59の時点でウィンドウ３にＤ（09：59）、Ｄ（09：58）、Ｄ（09：57）を格納して、関係演算４は実行結果としてVAL（09：59）を得るとともに、Ｄ（09：57）をウィンドウ３からワークエリアに移す。現時点10：00のＤ（10：00）が入力されると、ウィンドウ演算２は、入力ストリームデータからＤ（10：00）を抽出し、ウィンドウ３へ格納する。結果として、ウィンドウ３には、図１に示すように、Ｄ（10：00）、Ｄ（09：59）、Ｄ（09：58）が格納される。
【００１５】
関係演算４は、差分演算により最新の３つのデータの合計（VAL（10：00））を求めるために、VAL（10：00）＝VAL（09：59）−D(09：57)＋D(10：00)を実行し、実行結果であるVAL（10：00）をオペレータ５に格納する。また、関係演算４はＤ（09：58）をウィンドウ３からワークエリアに移す。この例では、ワークエリアに移すデータは１つであるが、複数の場合があり、かつ、関係演算４の実行結果又は実行の中間結果であるデータをワークエリアに格納する場合もある。例えば、Time＝ｔのデータD（ｔ）を最新のデータとして、VAL（ｔ）＝D（ｔ）＋D（ｔ−2）＋D（ｔ−4）＝VAL（ｔ−2）−D（ｔ−6）＋D（ｔ）を関係演算４が実行する場合、VAL（ｔ−2）及びD（ｔ−6）がワークエリアに格納されている必要がある。直前の処理は、VAL（ｔ−1）＝VAL（ｔ−3）−D（ｔ−7）＋D（ｔ−1）であり、オペレータ５には、VAL（ｔ−1）が格納され、VAL（ｔ−2）は格納されていない（VAL（ｔ−1）が上書きされている）可能性があるからである。一方、最新のデータ一つを処理対象として抽出する場合として後述するように、ワークエリアに格納するデータがない場合もある。
【００１６】
ストリーム化演算６はオペレータ５に格納されたVAL（10：00）を出力ストリームデータとして出力する。出力ストリームデータは、入力ストリームデータと同様に、VAL（Time、ＩＤ、VAL）の形式としてもよい。
【００１７】
以上のように、クエリが定義する処理内容の一環としてウィンドウ３が定義される。上例は、データが３つという数（個数）を定義している。個数を定義したウィンドウ３は、ＲＯＷＳウィンドウと呼ばれる。他のウィンドウ３の定義の例として、範囲（時間）がある。例えば、最新の１０分間のデータと定義する。この場合は、データの数としてみると、データは必ずしも周期的に入力されるとは限らないので、可変になる。時間を定義したウィンドウ３は、ＲＡＮＧＥウィンドウと呼ばれる。他のウィンドウ３の定義の例として、最新のデータ一つを処理対象として抽出する場合がある。この場合は、関係演算４は、ウィンドウ３に格納されている最新のデータ、または最新のデータと前回の実行結果VAL（Time）とを変数とする所定の演算を実行することになる。最新のデータ一つを処理対象とするように定義したウィンドウ３は、ＮＯＷウィンドウと呼ばれる。
【００１８】
図２は、異なるストリームデータに対して、同一の処理内容を定義するクエリを実行するストリームデータ処理部１の一例である。図１と対比して、異なる点を中心に説明する。図２に示すストリームデータ処理部１は、同一の処理内容を定義するクエリを実行する処理対象に、異なるＩＤで識別される複数のストリームデータを含んでいる。したがって、ウィンドウ３及びオペレータ５には、図２に示すように、ＩＤに対応付けて所定のデータが格納される。関係演算４は、ウィンドウ３に格納されるＩＤごとのデータを処理対象として所定の演算（例えば、上例の差分演算）を実行する。同一の処理内容の実行の対象となる、異なる複数のストリームデータは、たとえば、複数の同種のセンサのデータであって、これらに対する処理内容が同一の場合である。このように、異なるＩＤで識別されるストリームデータを格納するように定義したウィンドウ３は、ＰＡＲＴＩＴＩＯＮ  ＢＹウィンドウと呼ばれる。ＩＤに関して見れば、ＰＡＲＴＩＴＩＯＮ  ＢＹウィンドウは、前述のＲＯＷＳウィンドウ、ＲＡＮＧＥウィンドウ及びＮＯＷウィンドウのいずれかであり、ＰＡＲＴＩＴＩＯＮ  ＢＹウィンドウは、これらのいずれかと組み合わせて用いられる。
【００１９】
以上説明したストリームデータ処理部１の処理を実行しているサーバ（移行元サーバ、単に移行元）から、移行対象とするストリームデータを処理するストリームデータ処理部１を他のサーバ（移行先サーバ、単に移行先）に移行する移行処理を簡単に説明する。移行対象は、ストリームデータとクエリである。クエリの移行は、移行先に改めて同じクエリを定義するか、移行元のクエリを具体化したプログラムを移行先にコピーし、実行すればよい。
【００２０】
移行処理中にデータの欠損などを生じずに、データを移行先に短時間で移行することが課題である。ウィンドウ３として、４種類のタイプを説明した。４種類のタイプに対して共通のデータ移行は、ウィンドウ３、オペレータ５、及び関係演算４を実行するために用いるワークエリアの各データ（これらを纏めて中間値と呼ぶ。）を移行するとともに、入力ストリームデータの中の移行対象データを欠損または重複なく移行できればよい。
【００２１】
そこで、（１）移行処理の開始に伴って、移行対象の入力ストリームデータを蓄積する、（２）移行元において、移行対象の入力ストリームデータを処理するストリームデータ処理部を二重化し（分かり易くするために、元々のストリームデータ処理部を元ストリームデータ処理部、二重化のために追加したストリームデータ処理部を新規ストリームデータ処理部と呼ぶ。）、新規ストリームデータ処理部も実行する、二重化するタイミングは、ウィンドウ３とオペレータ５の内容の対応関係を維持するために、関係演算４の実行直後から、次のデータがウィンドウ演算２によってウィンドウ３に格納される直前までが望ましい、（３）新規ストリームデータ処理部が関係演算４を実行して、実行結果（オペレータ５の内容）を得たタイミング（ウィンドウ３とオペレータ５の内容が対応しているタイミング）で新規ストリームデータ処理部を停止し、停止した新規ストリームデータ処理部の中間値を移行先に移行（コピー）する、（４）中間値の移行完了に応じて、元ストリームデータ処理部を停止し、停止した元ストリームデータ処理部の中間値の中の、オペレータ５に格納されている、関係演算４の実行結果（上例のVAL（Time））を移行先に退避する、（５）ストリームデータ処理を移行先で再開し、蓄積した入力ストリームデータを移行先のストリームデータ処理部に入力する、このとき処理済みの入力ストリームデータとの重複を排除する（ウィンドウ３に格納されている最新テータまでの入力を読み飛ばす。）とともに、退避した元ストリームデータ処理部の中間値の中の、オペレータ５に格納されている、関係演算４の実行結果を参照して、出力済の出力ストリームデータとの重複を排除する（元ストリームデータ処理部が出力した出力ストリームデータを出力しない。）、（６）蓄積した入力ストリームデータの移行先への入力完了に応じて、入力ストリームデータを移行先のストリームデータ処理に入力する手順によって、移行対象の入力ストリームデータを処理するストリームデータ処理を移行する。
【００２２】
図３は、以上の手順の実行を実現する、ストリームデータ処理システムの構成である。ストリームデータ処理システムは、ストリームデータ処理を実行するサーバ２０、３０と、これらのサーバ２０、３０へ入力ストリームデータを振り分ける入力サーバ１０を有する。
【００２３】
入力サーバ１０は、移行決定部１１、転送先管理部１２、ストリームデータ転送部１３、蓄積データ転送部１４の各処理部と入力ストリームデータを一時的に蓄積するデータ一時記憶部１５を有する。
【００２４】
移行決定部１１は、クエリを実行するストリームデータ処理を移行すべきか否か、移行するときはどの入力ストリームデータを対象（移行対象データ）とするかを決定する。移行決定部１１の処理の詳細は、後述する。
【００２５】
転送先管理部１２は、入力ストリームデータのＩＤに対応して、ストリームデータ処理を実行するサーバ２０又は３０へ入力ストリームデータを振り分け、およびストリームデータ処理部の移行に処理に伴う入力ストリームデータのデータ一時記憶部１５への蓄積をストリームデータ転送部１３へ指示する。また、転送先管理部１２は、蓄積データ転送部１４へ、データ一時記憶部１５へ蓄積した入力ストリームデータの転送を指示する。
【００２６】
ストリームデータ転送部１３は、転送先管理部１２からの指示に対応して、入力ストリームデータの振り分け、および入力ストリームデータのデータ一時記憶部１５への蓄積を実行する。
【００２７】
蓄積データ転送部１４は、転送先管理部１２からの指示に応答して、データ一時記憶部１５へ蓄積してある入力ストリームデータをサーバ３０（ここでは、ストリームデータ処理をサーバ２０からサーバ３０移行するものとして説明する。）へ転送する。
【００２８】
サーバ２０は、ここではストリームデータ処理の移行元のサーバとして説明する。サーバ２０は、入力サーバ１０から転送される入力ストリームデータを処理するストリームデータ処理部２１、およびストリームデータ処理のサーバ３０への移行処理を実行する移行元処理部２６を有する。
【００２９】
ストリームデータ処理部２１は、ストリームデータ処理部（Ａ）２２（前述の元ストリームデータ処理部）、ストリームデータ処理部（Ａ）２２による中間値を格納する中間値記憶部（Ａ）２３、ストリームデータ処理部（Ｂ）２４（前述の新規ストリームデータ処理部）、ストリームデータ処理部（Ｂ）２４による中間値を格納する中間値記憶部（Ｂ）２５を有する。ストリームデータ処理部（Ｂ）２４および中間値記憶部（Ｂ）２５は、前述したように、ストリームデータ処理部（Ａ）２２による中間値を格納する中間値記憶部（Ａ）をコピーしたものである。実行するクエリによっては、中間値記憶部（Ａ）の容量が大きい場合もあり、このような場合にはスナップショットコピーを用いることにより、コピー処理を短時間で実行できるので、ストリームデータ処理部（Ａ）２２の実行を妨げずに前述の二重化するタイミングを守ることができる。図３には、移行対象のストリームデータ処理を実行するストリームデータ処理部（Ａ）２２を示し、移行対象でないストリームデータ処理を実行する他のストリームデータ処理部の図示を省略している。
【００３０】
サーバ３０は、ここではストリームデータ処理の移行先のサーバとして説明する。図３には、移行したストリームデータ処理を実行するストリームデータ処理部（Ａ）３１を示し、サーバ３０に元々存在するストリームデータ処理を実行する他のストリームデータ処理部の図示を省略している。サーバ３０は、移行された入力ストリームデータを処理するストリームデータ処理部３２、サーバ２０からのストリームデータ処理部の移行処理を実行する移行先処理部３４、および移行に伴う入力ストリームデータや出力ストリームデータの重複を排除するために、ストリームデータ処理部３２を制御するタイミング制御部３５を有する。
【００３１】
移行元処理部２６、移行先処理部３４およびタイミング制御部３５の詳細は後述する。また、図３の煩雑さを避けるために、前述した、停止したストリームデータ処理部（Ａ）２２の中間値記憶部（Ａ）２３の中の、オペレータ５に格納されている、関係演算４の実行結果を退避する、移行先の記憶領域、さらに後述するテーブルの図示を省略している。
【００３２】
図４は、図３では図示を省略した、入力サーバ１０が有するデータ振り分けテーブル４０である。データ振り分けテーブル４０は、入力ストリームデータに付されたＩＤ４１対応に、ストリームデータ処理を実行するサーバ４２（表中、図３のサーバ２０又はサーバ３０を表している。）、データ流量４３、および移行対象４４を含む。データ流量４３は、図４ではデータ数/分を単位としているが、bps（１秒当たりのビット数）などを単位としてもよい。データ流量４３は、後述する移行決定部１１が、移行対象を決定する際の目安にする項目であり、厳密である必要はない。したがって、ＲＡＮＧＥウィンドウの場合、平均値や理論値などを用いてもよい。
【００３３】
移行対象４４は、フラグとして機能する。移行決定部１１による移行対象の決定に伴って設定され、移行処理の完了に伴って削除される。図４の、ＩＤ４１がｋの入力ストリームデータを処理するストリームデータ処理を移行対象４４に、フラグではなく、移行先としてのサーバ３０と記してあるのは、図３の例とは異なり、移行先の選択対象のサーバが複数ある場合を想定して、移行先サーバを特定している。
【００３４】
本明細書では、図４に示すように、ＩＤを特定した入力ストリームデータもＩＤを特定しない複数の入力ストリームデータも、入力ストリームデータ又はストリームデータと呼ぶ。ＩＤを特定した入力ストリームデータか否かは、修飾語等による文脈から明らかになる。
【００３５】
以下、移行処理を中心に、ストリームデータ処理システムを構成する各処理部の動作を説明する。
【００３６】
図５は、転送先管理部１２の処理フローチャートである。転送先管理部１２は、データ振り分けテーブル４０の移行対象４４（移行対象フラグであり、移行指示である。）を参照し、移行対象のストリームデータ処理が処理する入力ストリームデータ（以下、移行対象の入力ストリームデータ）があるかを判定する（Ｓ１２０）。移行対象がないならば、Ｓ１２０を繰り返す。
【００３７】
移行対象があるならば、転送先管理部１２は、移行対象の入力ストリームデータのデータ一時記憶部１５への蓄積をストリームデータ転送部１３に指示済みかを判定する（Ｓ１２１）。蓄積の指示は、入力サーバ１０内の所定の記憶領域に、転送先管理部１２によって格納され、ストリームデータ転送部１３によって参照される。したがって、転送先管理部１２は、二重に蓄積を指示することはない。蓄積を指示済みならば、転送先管理部１２は、Ｓ１２３の処理へ移る。蓄積を指示済みでないならば、転送先管理部１２は、移行対象の入力ストリームデータのデータ一時記憶部１５への蓄積をストリームデータ転送部１３に指示する（Ｓ１２２）。
【００３８】
転送先管理部１２は、データ一時記憶部１５に蓄積してある移行対象の入力ストリームデータ（蓄積データ）の転送を蓄積データ転送部１４に指示済みかを判定する（Ｓ１２３）。この転送の指示も、入力サーバ１０内の所定の記憶領域に、転送先管理部１２によって格納され、蓄積データ転送部１４によって参照される。したがって、転送先管理部１２は、二重に蓄積データの転送を指示することはない。蓄積データの転送を指示済みならば、転送先管理部１２は、Ｓ１２６の処理へ移る。蓄積データの転送を指示済みでないならば、詳細を後述する、移行先であるサーバ３０のタイミング制御部３５から蓄積データの転送指示を受けたかを判定する（Ｓ１２４）。移行先から蓄積データの転送指示も入力サーバ１０内の所定の記憶領域に格納される。移行先は、図４の例ではサーバ３０であり、その移行先処理部３５から蓄積データの転送指示が送信されるので、入力サーバ１０（図示しない受信部）は受信した蓄積データの転送指示を入力サーバ１０内の所定の記憶領域に格納する。蓄積データの転送指示を受信していないならば、転送先管理部１２は、Ｓ１２６の処理へ移る。蓄積データの転送指示を受信しているならば、転送先管理部１２は、データ一時記憶部１５に蓄積してある移行対象の入力ストリームデータの転送を蓄積データ転送部１４に指示する（Ｓ１２５）。この転送の指示も、入力サーバ１０内の所定の記憶領域に転送先管理部１２によって格納される。
【００３９】
転送先管理部１２は、移行処理を移行元であるサーバ２０と移行先であるサーバ３０へ指示済みかを判定する（Ｓ１２６）。移行処理の指示は、移行元と移行先へ転送されるとともに、入力サーバ１０内の所定の記憶領域にストリームデータ転送部１３によって格納される。なお、移行処理の指示には、移行対象のストリーミングデータを特定するＩＤを含んでいる。図４の例では、ＩＤ＝ｋである。移行処理を指示済みならば、転送先管理部１２は、Ｓ１２８の処理へ移る。移行処理を指示済みでないならば、転送先管理部１２は、移行元であるサーバ２０と移行先であるサーバ３０へ、移行対象のストリーミングデータを特定するＩＤを含んだ、移行処理の指示を転送する。
【００４０】
なお、転送先管理部１２は、ストリームデータの欠損を防ぐために、移行元および移行先への移行処理の指示よりも早く、ストリームデータの蓄積を指示している。
【００４１】
転送先管理部１２は、蓄積データの転送完了通知があるかを判定する（Ｓ１２８）。蓄積データの転送完了通知も入力サーバ１０内の所定の記憶領域にストリームデータ転送部１３によって格納される。蓄積データの転送完了通知が、蓄積データ転送部１４でなく、ストリームデータ転送部１３によって格納される理由は、ストリームデータ転送部１３の説明として後述する。蓄積データの転送完了通知がないならば、転送先管理部１２は、Ｓ１２０の処理へ移る。蓄積データの転送完了通知があるならば、ストリームデータ転送部１３が移行した入力ストリームデータの移行先のサーバ３０に向けて転送を再開したことなので、転送先管理部１２は、データ振り分けテーブル４０の移行対象４４（移行対象フラグ）を削除し、入力サーバ１０内の所定の記憶領域に格納されている、蓄積の指示、蓄積データの転送の指示、移行先から蓄積データの転送指示、移行元および移行先への移行処理の指示、並びに蓄積データの転送完了通知を削除する。
【００４２】
なお、蓄積データの転送完了通知は、たとえば転送先管理部１２からの削除とストリームデータ転送部１３からの格納とを排他制御する必要があるが、本実施形態の動作の本質でないので、説明を省略する。
【００４３】
図６は、ストリームデータ転送部１３の処理フローチャートである。ストリームデータ転送部１３は、データ振り分けテーブル４０の移行対象４４を参照し、移行対象のストリームデータ処理が処理する入力ストリームデータがあるかを判定する（Ｓ１３０）。移行対象がないならば、ストリームデータ転送部１３はＳ１３７へ移る。Ｓ１３７は、データ振り分けテーブル４０の設定に従って、入力ストリームデータをサーバ２０又はサーバ３０に転送する通常時の処理である。
【００４４】
移行対象があるならば、転送先管理部１２によって入力サーバ１０内の所定の記憶領域に格納される蓄積指示があるかを、ストリームデータ転送部１３は判定する（Ｓ１３１）。蓄積指示がないならば、ストリームデータ転送部１３はＳ１３７へ移る。
【００４５】
蓄積指示があるならば、ストリームデータ転送部１３は、データ振り分けテーブル４０のＩＤ４１を参照し、入力ストリームデータは蓄積するＩＤのデータかを判定する（Ｓ１３２）。蓄積するＩＤのデータでないならば、ストリームデータ転送部１３はＳ１３７へ移る。蓄積するＩＤのデータならば、ストリームデータ転送部１３は、最初の蓄積データかを判定する（Ｓ１３３）。最初の蓄積データでないならば、ストリームデータ転送部１３はＳ１３５へ移る。
【００４６】
ストリームデータ転送部１３は、データ一時記憶部１５に蓄積データがあるかを判定する（Ｓ１３４）。データ一時記憶部１５に蓄積データがあるならば、ストリームデータ転送部１３は、蓄積すべきＩＤのデータをデータ一時記憶部１５に格納する（Ｓ１３５）。データ一時記憶部１５に蓄積データがないならば、蓄積すべきＩＤのデータをデータ一時記憶部１５に格納せずに、移行先のサーバ３０へ転送し、蓄積データの転送完了通知を入力サーバ１０内の所定の記憶領域に格納する（Ｓ１３６）。
【００４７】
Ｓ１３３〜Ｓ１３６の処理を分かり易く説明する。データ一時記憶部１５はＦＩＦＯ(First In First Out)でデータが格納され、取り出される。データは取り出されると、データ一時記憶部１５から削除されている。このような記憶部を用いたとき、蓄積データの転送の完了を蓄積データ転送部１４が検知するようにすると、蓄積データ転送部１４が蓄積データの転送の完了（データ一時記憶部１５に蓄積データがない状態）を検知した直後に、ストリームデータ転送部１３が新たな蓄積データをデータ一時記憶部１５に格納してしまう状態が発生する。この状態の発生を防ぐために、ストリームデータ転送部１３が蓄積データの転送の完了を検知する。ところが、データ一時記憶部１５に蓄積データがない状態は、蓄積開始直前までと蓄積データの移行先への転送完了直後に発生する。そこで、最初の蓄積データのとき、データ一時記憶部１５内の蓄積データの有無にかかわらず、データ一時記憶部１５に蓄積する。したがって、データ一時記憶部１５に蓄積データがない状態は、蓄積データの移行先への転送完了後に限られる。
【００４８】
図７は、蓄積データ転送部１４の処理フローチャートである。蓄積データ転送部１４は、転送先管理部１２によって入力サーバ１０内の所定の記憶領域に格納された、蓄積データの転送指示があるかを判定する（Ｓ１４０）。蓄積データの転送指示がないならば、蓄積データ転送部１４はＳ１４０の処理を繰り返す。
【００４９】
蓄積データの転送指示があるならば、蓄積データ転送部１４は、データ一時記憶部１５に移行対象の入力ストリームデータ（蓄積データ）があるかを判定する（Ｓ１４１）。蓄積データがないならば、蓄積データ転送部１４はＳ１４０に移る。蓄積データ転送部１４は、データ一時記憶部１５に格納されている蓄積データを移行先であるサーバ３０に順次転送し（Ｓ１４２）、Ｓ１４０に移る。
【００５０】
蓄積データの転送指示がないとき、蓄積データ転送部１４の処理を終了させてもよい。ただし、その場合は、転送先管理部１２は、蓄積データの転送を指示するときに、蓄積データ転送部１４を起動する必要がある。
【００５１】
図８は、移行元のサーバ２０の移行元処理部２６の処理フローチャートである。移行元処理部２６は、転送先管理部１２からの移行指示（図７のＳ１２７）に応答して起動される。
【００５２】
移行元処理部２６は、移行元のサーバ２０のストリームデータ処理部２１を２重化する（Ｓ２６０）。具体的には、図３において、ストリームデータ処理部（Ａ）２２をコピーして、ストリームデータ処理部（Ｂ）２４を生成し、中間値記憶部（Ａ）２３をコピーして、中間値記憶部（Ｂ）２５を生成する。図示を省略するが、生成したストリームデータ処理部（Ｂ）２４を実行させる。これらの生成方法や生成タイミングは前述したとおりである。
【００５３】
移行元処理部２６は、新規ストリームデータ処理部であるストリームデータ処理部（Ｂ）２４の中間値記憶部（Ｂ）２５に含まれるオペレータ５の内容は、元ストリームデータ処理部であるストリームデータ処理部（Ａ）２２の中間値記憶部（Ａ）２３に含まれるオペレータ５の内容と同じかを判定する（Ｓ２６１）。Ｓ２６０のコピー処理中（ストリームデータ処理部（Ｂ）２４の実行開始前）に、ストリームデータ処理部（Ａ）２２には新たなストリームデータが入力される可能性があるので、オペレータ５の内容を判定する。移行対象の入力ストリームデータの入力間隔が、コピー処理時間に比べて長ければ同じであり、短ければ異なっている可能性がある。この可能性を低下させるために、スナップショットコピーを用いてもよい。この判定は、移行先において、移行元の可能な限り新しい状態を反映するためであり、後述する移行処理中も同様の状態（移行元と移行先のオペレータ５の内容が異なる状態）が発生するので、必ずしも必要な処理ではない。
【００５４】
移行元処理部２６は、新規ストリームデータ処理部であるストリームデータ処理部（Ｂ）２４の実行を停止する（Ｓ２６２）。実行を停止するタイミングは、前述したように、ウィンドウ３とオペレータ５の内容の対応関係を維持するために、関係演算４の実行直後から、次のデータがウィンドウ演算２によってウィンドウ３に格納される直前までの時刻が望ましいので、関係演算４の実行直後とする。
【００５５】
移行元処理部２６は、停止したストリームデータ処理部（Ｂ）２４を移行先のサーバ３０へ移行する（Ｓ２６３）。この移行方法は前述したように、処理部を移行先にコピーするか、移行先に新たに生成すればよい。移行元処理部２６は、中間値記憶部（Ｂ）２５を移行先のサーバ３０へ移行する（Ｓ２６４）。
【００５６】
移行元処理部２６は、元ストリームデータ処理部であるストリームデータ処理部（Ａ）２２の停止指示を待つ（Ｓ２６５）。この停止指示は、後述するタイミング制御部３５から出力されるもので、移行先において、移行したストリームデータ処理の再開の準備が完了したタイミングで出力される。
【００５７】
移行元処理部２６は、ストリームデータ処理部（Ａ）２２の停止指示を受けたならば、元ストリームデータ処理部であるストリームデータ処理部（Ａ）２２の実行を停止する（Ｓ２６６）。この実行の停止タイミングも、ストリームデータ処理部（Ａ）２２の関係演算４の実行直後とする。
【００５８】
移行元処理部２６は、ストリームデータ処理部（Ａ）２２の関係演算４の実行結果であるオペレータ５の内容を移行先へ出力する（Ｓ２６７）。前述のコピー処理中と同様に、移行処理中に、ストリームデータ処理部（Ａ）２２が新たな入力ストリームデータを処理し、オペレータ５の内容を更新している可能性があるからである。
【００５９】
図９は、移行先のサーバ３０の移行先処理部３４の処理フローチャートである。移行先処理部３４は、転送先管理部１２からの移行指示（図７のＳ１２７）に応答して起動される。
【００６０】
移行先処理部３４は、移行元からのストリームデータ処理部（Ｂ）２４の移行を待ち（Ｓ３４０）、ストリームデータ処理部（Ｂ）２４を移行元のサーバ２０から移行し、ストリームデータ処理部（Ｃ）３２とする（Ｓ３４１）。この移行方法は前述したように、処理部を移行先にコピーするか、移行先に新たに生成すればよい。
【００６１】
移行先処理部３４は、中間値記憶部（Ｂ）２５を移行元のサーバ２０から移行し、中間値記憶部（Ｃ）３３とする（Ｓ３４２）。移行先処理部３４は、タイミング制御部３５を起動して（Ｓ３４３）、処理を終了する。
【００６２】
前述したように、移行処理中に、ストリームデータ処理部（Ａ）２２が新たな入力ストリームデータを処理し、オペレータ５の内容を更新している可能性があるので、オペレータ５の内容の更新に対応できれば（対応方法は、タイミング制御部３５の説明として後述する。）、移行元処理部２６のストリームデータ処理部の二重化せずに、すなわちストリームデータ処理部（Ｂ）２４及び中間値記憶部（Ｂ）２５を生成せずに、ストリームデータ処理部（Ａ）２２及び中間値記憶部（Ａ）２３からストリームデータ処理部（Ｃ）３２及び中間値記憶部（Ｃ）３３を生成（移行）してもよい。
【００６３】
ストリームデータ処理部（Ｂ）２４及び中間値記憶部（Ｂ）２５を介する処理としたのは、移行元のサーバ２０から移行先のサーバ３０への移行にはサーバ間通信が必要となり、サーバ間通信はサーバ内コピーよりも処理時間が長くなるので、ストリームデータ処理部（Ａ）２２とストリームデータ処理部（Ｃ）３２の処理の進捗の差が大きくなるからである。この処理の進捗の差は、前述のオペレータ５の内容の更新（更新回数）であるので、この更新に対応できればよいことになる。また、処理の進捗の差を短くするために、差がなくなることは保証できないが、スナップショットコピーを用いてもよい。
【００６４】
図１０は、移行先のサーバ３０のタイミング制御部３５の処理フローチャートである。タイミング制御部３５は、移行先処理部３４によるストリームデータ処理部（Ｃ）３２及び中間値記憶部（Ｃ）３３を生成（移行）の完了に伴って起動される。
【００６５】
タイミング制御部３５は、移行元のサーバ２０で実行中の元ストリームデータ処理部であるストリームデータ処理部（Ａ）２２の停止を指示する（Ｓ３５０）。
【００６６】
タイミング制御部３５は、移行元のサーバ２０から、ストリームデータ処理部（Ａ）２２の関係演算４の実行結果であるオペレータ５の内容（移行元処理部２６のＳ２６７で出力される。）を取得し（Ｓ３５１）、サーバ３０内の所定のワークエリアに格納する。
【００６７】
タイミング制御部３５は、転送先管理部１２に蓄積データの転送を指示する（Ｓ３５２）。タイミング制御部３５は、中間値記憶部（Ｃ）３３のウィンドウ３に格納されている最新データより新しいデータの入力を待つ（Ｓ３５３）。ウィンドウ３に格納されている最新データまでを、ストリームデータ処理部（Ｃ）３２は処理しているので、それよりも新しいデータを待つ。換言すると、ウィンドウ３に格納されている最新データまでを読み飛ばすことになる。この読み飛ばしにより、入力ストリーミングデータの重複、すなわち同じ入力ストリーミングデータを処理対象としたストリームデータ処理部（Ｃ）３２の処理の重複を避けることができる。
【００６８】
タイミング制御部３５は、ウィンドウ３に格納されている最新データより新しいデータを入力したならば、ストリームデータ処理部（Ｃ）３２を起動する（Ｓ３５４）。ストリームデータ処理部（Ｃ）３２の実行に伴いオペレータ５の内容が更新されるが、タイミング制御部３５は、このオペレータ５の内容がサーバ３０内の所定のワークエリアに格納したオペレータ５の内容（ストリームデータ処理部（Ａ）の実行結果）より以前のものかを判定し（Ｓ３５５）、以前のものであれば、ストリームデータ処理部（Ｃ）３２の実行に伴い得られたオペレータ５の内容を破棄する。具体的には、オペレータ５の内容が出力ストリームデータとして出力されないようにする。
【００６９】
タイミング制御部３５は、ストリームデータ処理部（Ｃ）３２の実行に伴い得られたオペレータ５の内容が、サーバ３０内の所定のワークエリアに格納したオペレータ５の内容を時間的に超えたならば、処理を終了する。
【００７０】
このように、ストリームデータ処理部（Ｃ）３２の実行に伴い得られたオペレータ５の内容を、ストリームデータ処理部（Ａ）の実行に伴い得られたオペレータ５の内容と比較し、データ（オペレータ５の内容）を破棄することにより、出力ストリーミングデータの重複、すなわち同じ入力ストリーミングデータを処理対象としたストリームデータ処理部（Ｃ）３２の出力データの重複を避けることができる。
【００７１】
なお、タイミング制御部３５は、以前や時間的に超えたとの判断には、前述のＤ（Time）のVAL（Time）の時刻データを用いる。
【００７２】
以上のように、入力ストリームデータのＩＤを特定して、ストリームデータ処理を移行するストリームデータ処理システムを説明した。ＩＤを特定することにより、複数のＩＤの入力ストリームデータを処理対象として同じクエリを実行するＰＡＲＴＩＴＩＯＮ  ＢＹウィンドウの個々のＩＤ対応のストリームデータ処理を移行できる。また、ＲＯＷＳウィンドウ、ＲＡＮＧＥウィンドウ及びＮＯＷウィンドウの場合は、入力ストリームデータのＩＤはクエリと１対１に対応しているので、クエリを特定して、ストリームデータ処理を移行することも可能である。
【００７３】
さらに、複数のＩＤの入力ストリームデータを処理対象として同じクエリを実行するＰＡＲＴＩＴＩＯＮ  ＢＹウィンドウのクエリを特定して、ストリームデータ処理を移行することも可能である。なぜならば、図４に示したデータ振り分けテーブル４０の移行対象４４として、同じクエリを実行する複数のＩＤを設定し、ＩＤごとに説明した各処理部を実行すればよいからである。
【００７４】
次に、ストリームデータ処理を移行の必要性を説明する。ストリームデータ処理の移行は、ストリームデータ処理を実行するサーバの過大な負荷を防止するために実行される。一般に、ストリームデータ処理を実行するサーバが、同時に他の処理も実行するように構築されることはまれであるので、ストリームデータ処理の実行に伴って、負荷が過大になっているサーバの一部の負荷を他のサーバに移行すればよい。たとえば、１台のサーバでストリームデータ処理を実行するストリームデータ処理システムにおいては、そのサーバの負荷が過大であれば、新規のサーバ（負荷なし）を追加し、追加したサーバに負荷の一部を移行する。複数台のサーバで、入力ストリームデータを分散して、各々がストリームデータ処理を実行するストリームデータ処理システムにおいては、過大な負荷のサーバを検知して、検知したサーバの負荷の一部を他のサーバに移行する。
【００７５】
サーバの負荷は、一般にサーバのＣＰＵ利用率で計測され、所定の閾値以上のＣＰＵ利用率であれば、そのサーバは過負荷と判定する。ストリームデータ処理システムにおいては、入力ストリームデータのサーバ毎のデータ流量（データ数/分）によって過負荷と判定することができる。なぜならば、ストリームデータ処理は、その関係演算４によって差分演算が用いられるからである。前述した例からも明らかなように、前回の実行結果であるオペレータ５の内容と、ウィンドウ３に格納される最新データおよびワーククエリに格納したデータを用いた差分演算を実行するので、差分演算を用いない場合に比べて、関係演算４の複雑さがＣＰＵ利用率を高くすることはない。
【００７６】
そこで、ストリームデータ転送部１３の説明では言及しなかったが、ストリームデータ転送部１３において、入力ストリームデータのＩＤ対応にデータ流量を計測し、データ振り分けテーブル４０(図４)のデータ流量４３に格納すればよい。
【００７７】
図１１は、ストリームデータ処理の移行を決定する移行決定部１１の処理フローチャートである。移行決定部１１は、データ振り分けテーブル４０のデータ流量４３をサーバ毎に算出する(Ｓ１１０)。移行決定部１１は、算出したデータ流量が、閾値を超えるサーバがあるかを判定する(Ｓ１１１)。閾値を超えるサーバがないならば、移行決定部１１は処理を終了する。閾値を超えるサーバがあるならば、移行決定部１１は、ＩＤを特定して移行対象のストリームデータを決定し、移行先(サーバ)を決定して決定した結果を、データ振り分けテーブル４０の移行対象のストリームデータに対応した移行対象４４に移行先(サーバ)を格納し、処理を終了する(Ｓ１１２)。
【００７８】
移行決定部１１は、移行先サーバとして、算出したデータ流量が最も小さいサーバを選択する。移行決定部１１は、移行対象として、閾値を超えるサーバに入力するストリームデータの中で、データ流量が多い方から２番目のストリームデータを選択する。
【００７９】
データ流量が低い（値が小さい）データを移行対象データとしても、負荷が過大なサーバの負荷を軽減できる可能性が低いからである。また、データ流量が最も高いデータを移行対象データとすると、移行元のサーバのアクセス頻度が低下する一方、移行先のサーバのデータ流量が上昇し、極端には、次の移動対象データの特定時には、移行先のサーバのデータ流量が閾値を超え、移行したデータを元のサーバに戻す現象が生じる可能性があるからである。
【００８０】
説明した実施形態によれば、入力ストリームデータの欠損を防止するために、入力ストリームデータの重複、出力ストリームデータの重複を許容して、移行処理のほとんどを実行し、移行処理の完了の直前に重複排除する処理を実行するので、移行を決定したストリームデータの移行時間を短くなる。
【符号の説明】
【００８１】
1：ストリームデータ処理部、２：ウィンドウ演算、３：ウィンドウ、４：関係演算、５：オペレータ、６：ストリーム化演算、１０：入力サーバ、１１：移行決定部、１２：転送先管理部、１３：ストリームデータ転送部、１４：蓄積データ転送部、１５：データ一時記憶部、２０、３０：サーバ、２１、３１：ストリームデータ処理部、２３、２５、３３：中間値記憶部、２６：移行元処理部、３４：移行先処理部、３５：タイミング制御部。
【図１】
2016035128.tif 000003
【図２】
2016035128.tif 000004
【図３】
2016035128.tif 000005
【図４】
2016035128.tif 000006
【図５】
2016035128.tif 000007
【図６】
2016035128.tif 000008
【図７】
2016035128.tif 000009
【図８】
2016035128.tif 000010
【図９】
2016035128.tif 000011
【図１０】
2016035128.tif 000012
【図１１】
2016035128.tif 000013
【国際調査報告】
2016035128.tif 000014
2016035128.tif 000015