(57)【要約】  データソースからストリームデータを受信してクエリを実行する第１の計算機に、前記クエリを実行する第２の計算機を追加する計算機のスケールアウト方法であって、管理計算機が、スケールアウトの要求を受け付けて、前記クエリの実行タイミングを書き換えた前記クエリの複製として書換クエリを生成し、前記書換クエリを含むスケールアウトの指令を前記第１の計算機と第２の計算機に送信し、前記第１及び第２の計算機が、前記スケールアウトの指令を受け付けて前記書換クエリを抽出し、前記抽出した書換クエリに切り替え、前記管理計算機へ前記書換クエリの準備が完了したことを通知し、前記管理計算機が、前記データソースに前記ストリームデータの送信先として前記第２の計算機を追加させる指令を送信する。
2017072938.tif 000002
【特許請求の範囲】
【請求項１】
データソースからストリームデータを受信してクエリを実行する第１の計算機に、前記クエリを実行する第２の計算機を追加する計算機のスケールアウト方法であって、
前記第１の計算機と第２の計算機に接続された管理計算機が、スケールアウトの要求を受け付ける第１のステップと、
前記管理計算機が、前記クエリの実行タイミングを書き換えた前記クエリの複製として書換クエリを生成する第２のステップと、
前記管理計算機が、前記書換クエリを含むスケールアウトの指令を前記第１の計算機と第２の計算機に送信する第３のステップと、
前記第１の計算機及び第２の計算機が、前記スケールアウトの指令を受け付けて前記書換クエリを抽出し、前記抽出した書換クエリに切り替える第４のステップと、
前記第１の計算機または第２の計算機が、前記管理計算機へ前記書換クエリの準備が完了したことを通知する第５のステップと、
前記管理計算機が、前記データソースに前記ストリームデータの送信先として前記第２の計算機を追加させる指令を送信し、前記第１の計算機と第２の計算機へ同一のストリームデータを送信させる第６のステップと、
を含むことを特徴とする計算機のスケールアウト方法。
【請求項２】
請求項１に記載の計算機のスケールアウト方法であって、
前記第４のステップは、
前記第１の計算機が、実行中の前記クエリを前記書換クエリに切り替えるステップと、
前記第２の計算機が、前記書換クエリの実行を開始するステップと、
をさらに含むことを特徴とする計算機のスケールアウト方法。
【請求項３】
請求項２に記載の計算機のスケールアウト方法であって、
前記第２のステップは
前記書換クエリは、前記第１の計算機で実行するクエリを第１の実行タイミングに切り替える第１の書換クエリと、第２の実行タイミングによって前記第２の計算機で実行する第２の書換クエリと、を含むことを特徴とする計算機のスケールアウト方法。
【請求項４】
請求項３に記載の計算機のスケールアウト方法であって、
前記第１の実行タイミングと前記第２の実行タイミングは、前記第１の書換クエリと前記第２の書換クエリからの出力が交互であることを特徴とする計算機のスケールアウト方法。
【請求項５】
請求項４に記載の計算機のスケールアウト方法であって、
前記クエリのウィンドウサイズが時間の場合、前記第１の実行タイミングと前記第２の実行タイミングは、前記第１の書換クエリと前記第２の書換クエリから出力される時間間隔が交互であることを特徴とする計算機のスケールアウト方法。
【請求項６】
請求項４に記載の計算機のスケールアウト方法であって、
前記クエリのウィンドウサイズがストリームデータのタプルの個数の場合、前記第１の実行タイミングと前記第２の実行タイミングは、前記第１の書換クエリと前記第２の書換クエリから出力されるタプルの個数が交互であることを特徴とする計算機のスケールアウト方法。
【請求項７】
請求項１に記載の計算機のスケールアウト方法であって、
前記第１のステップは、
前記管理計算機が、前記スケールアウトの対象となるクエリを選択するステップをさらに含み、
前記第２のステップは、
前記管理計算機が、前記選択されたクエリについて書換クエリを生成するステップをさらに含むことを特徴とする計算機のスケールアウト方法。
【請求項８】
請求項１に記載の計算機のスケールアウト方法であって、
前記第４のステップは、
前記第１の計算機及び第２の計算機の前記書換クエリの実行環境を同期させるステップをさらに含むことを特徴とする計算機のスケールアウト方法。
【請求項９】
請求項８に記載の計算機のスケールアウト方法であって、
前記第３のステップは、
前記データソースにストリームデータの送信を停止させるステップをさらに含み、
前記第６のステップは、
前記データソースにストリームデータの送信を再開させるステップをさらに含むことを特徴とする計算機のスケールアウト方法。
【請求項１０】
請求項８に記載の計算機のスケールアウト方法であって、
前記第６のステップは、
前記書換クエリに処理を切り替えるタプルを前記ストリームデータに挿入するステップをさらに含むことを特徴とする計算機のスケールアウト方法。
【請求項１１】
データソースからストリームデータを受信してクエリを実行する第１の計算機と、
前記第１の計算機の前記クエリを実行する第２の計算機を追加する管理計算機と、を有する計算機システムであって、
前記管理計算機は、
スケールアウトの要求を受け付けると、前記クエリの実行タイミングを書き換えた前記クエリの複製として書換クエリを生成し、前記書換クエリを含むスケールアウトの指令を前記第１の計算機と第２の計算機に送信し、
前記第１の計算機及び第２の計算機は、
前記スケールアウトの指令を受け付けて前記書換クエリを抽出し、前記抽出した書換クエリに切り替えて、前記管理計算機へ前記書換クエリの準備が完了したことを通知し、
前記管理計算機は、
前記データソースに前記ストリームデータの送信先に前記第２の計算機を追加する指令を送信し、前記第１の計算機と第２の計算機へ同一のストリームデータを送信させることを特徴とする計算機システム。
【請求項１２】
請求項１１に記載の計算機システムであって、
前記第１の計算機は、実行中の前記クエリを前記書換クエリに切り替え、前記第２の計算機が、前記書換クエリの実行を開始することを特徴とする計算機システム。
【請求項１３】
請求項１２に記載の計算機システムであって、
前記書換クエリは、前記第１の計算機で実行するクエリを第１の実行タイミングに切り替える第１の書換クエリと、第２の実行タイミングによって前記第２の計算機で実行する第２の書換クエリと、を含むことを特徴とする計算機システム。
【請求項１４】
請求項１３に記載の計算機システムであって、
前記第１の実行タイミングと前記第２の実行タイミングは、前記第１の書換クエリと前記第２の書換クエリからの出力が交互であることを特徴とする計算機システム。
【請求項１５】
プロセッサとメモリを備えた計算機で、データソースからストリームデータを受信してクエリを実行する第１の計算機に、前記クエリを実行する第２の計算機を追加するプログラムを格納した記憶媒体であって、
スケールアウトの要求を受け付ける第１の手順と、
前記クエリの実行タイミングを書き換えた前記クエリの複製として書換クエリを生成する第２の手順と、
前記書換クエリを含むスケールアウトの指令を前記第１の計算機と第２の計算機に送信し、前記第１の計算機及び第２の計算機に前記書換クエリに切り替えさせる第３の手順と、
前記第１の計算機または第２の計算機から、前記書換クエリの準備が完了した通知を受信する第４の手順と、
前記データソースに前記ストリームデータの送信先として前記第２の計算機を追加する指令を送信し、前記第１の計算機と第２の計算機へ同一のストリームデータを送信させる第５の手順と、
を前記計算機に実行させるプログラムを格納した非一時的な計算機読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストリームデータを処理する計算機システムに関する。
【背景技術】
【０００２】
ストリームデータ処理では、タイムスタンプを付与したタプルによって実行順序を厳密に保証して、高いリアルタイム処理性能が要求される。ストリームデータ処理では、より高性能なリアルタイムデータに対する処理能力を獲得するために、スケーラブルな性能向上を実現する必要がある。【０００３】
スケーラブルなストリームデータ処理の一例として特許文献３が知られている。特許文献３では、現用系の計算機の入力ストリーム及び各ウィンドウクエリの内部状態を、ある時刻から待機系の計算機に複製し、前記時刻に基づいて現用系と待機系が同期したことを保証することで待機系を動的に追加する技術が開示されている。【０００４】
また、特許文献２には、クエリへのデータ流入量やウィンドウサイズ、またはＣＰＵの利用率などから移動コストの低いクエリを抽出し、当該クエリを別のサーバへ動的に移動させる技術が開示されている。特許文献２は、クエリグラフの一部を他のサーバへ移動させることによるスケールアウトを実現する技術である。【０００５】
また、特許文献１には、スケーラブルな分散クラスタ型のストリーミングシステムで、コストモデルを用いてクエリの最適化を行い、分散システム上にクエリを配置する技術が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開第２０１３／０３４６３９０号明細書
【特許文献２】米国特許第８１９０５９９号明細書
【特許文献３】米国特許第８９０４２２５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記特許文献１は、静的なクエリの配置を最適化する技術であり、動的なスケールアウトを行うためには、最適化クエリの変更または再配置が必要となる、という問題があった。【０００８】
また、特許文献２では、クエリグラフの一部を他のノードへ移動させることで、処理負荷を他のノードに分散させるスケールアウトであって、処理負荷の高いクエリを複数のノードで並列実行することはできない、という問題があった。【０００９】
さらに、上記特許文献３では、動的に現用系のクエリを待機系に複製し、さらに、現用系と待機系とに入力するストリームを変更することで、動的なスケールアウトを実現することができる。【００１０】
しかしながら、上記特許文献３では、同一の入力ストリームを分割して現用系と待機系に分配することになる。このため、現用系と追加された待機系でのクエリが集計処理やソート処理のように連続した入力ストリームをウィンドウ処理するクエリの場合、各系で処理した結果ストリームを、他のノードで再加工（Ａｇｇｒｅｇａｔｅ）する必要が生じる。【００１１】
したがって、特許文献３では、入力ストリームの分割と配信の負荷が増大するだけではなく、再加工の負荷が加わることになり、計算機資源が不足する場合がある、という問題があった。【００１２】
そこで本発明は、上記問題点に鑑みてなされたものであり、ひとつの計算機で実行していたクエリを、動的に複数の計算機へ分散して実行することを目的とする。
【課題を解決するための手段】
【００１３】
本発明は、データソースからストリームデータを受信してクエリを実行する第１の計算機に、前記クエリを実行する第２の計算機を追加する計算機のスケールアウト方法であって、前記第１の計算機と第２の計算機に接続された管理計算機が、スケールアウトの要求を受け付ける第１のステップと、前記管理計算機が、前記クエリの実行タイミングを書き換えた前記クエリの複製として書換クエリを生成する第２のステップと、前記管理計算機が、前記書換クエリを含むスケールアウトの指令を前記第１の計算機と第２の計算機に送信する第３のステップと、前記第１の計算機及び第２の計算機が、前記スケールアウトの指令を受け付けて前記書換クエリを抽出し、前記抽出した書換クエリに切り替える第４のステップと、前記第１の計算機または第２の計算機が、前記管理計算機へ前記書換クエリの準備が完了したことを通知する第５のステップと、前記管理計算機が、前記データソースに前記ストリームデータの送信先として前記第２の計算機を追加させる指令を送信し、前記第１の計算機と第２の計算機へ同一のストリームデータを送信させる第６のステップと、を含む。
【発明の効果】
【００１４】
本発明によれば、計算機資源が不足するのを抑制しながら、ひとつの計算機で実行していたクエリを、動的に複数の計算機へ分散して実行することが可能となって、計算機の負荷を平準化させることが可能となる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施例を示し、ストリームデータを処理する計算機システムの一例を示すブロック図である。
【図２】本発明の第１の実施例を示し、ストリーム送受信計算機の一例を示すブロック図である。
【図３】本発明の第１の実施例を示し、運用管理計算機の一例を示すブロック図である。
【図４】本発明の第１の実施例を示し、サーバ計算機の一例を示すブロック図である。
【図５】本発明の第１の実施例を示し、計算機システムで行われるスケールアウト処理の一例を示すシーケンス図である。
【図６】本発明の第１の実施例を示し、データ送信先管理表の一例を示す図である。
【図７】本発明の第１の実施例を示し、書き換え後のデータ送信先管理表の一例を示す図である。
【図８】本発明の第１の実施例を示し、クエリ管理表の一例を示す図である。
【図９】本発明の第１の実施例を示し、クエリ変換テンプレートの一例を示す図である。
【図１０】本発明の第１の実施例を示し、第１のサーバ計算機と第２のサーバ計算機で処理されるタプルと時間の関係を示す図である。
【図１１】本発明の第１の実施例を示し、第１のサーバ計算機と第２のサーバ計算機で処理されるタプルと時間の関係を示す図である。
【図１２】本発明の第１の実施例を示し、クエリ変換テンプレートの一例を示す図である。
【図１３】本発明の第１の実施例を示し、第１のサーバ計算機と第２のサーバ計算機で処理されるタプルと時間の関係を示す図である。
【図１４】本発明の第１の変形例を示し、計算機システムで行われるスケールアウト処理の一例を示すシーケンス図である。
【図１５】本発明の第２の実施例を示し、サーバ計算機の一例を示すブロック図である。
【図１６】本発明の第２の実施例を示し、運用管理計算機の一例を示すブロック図である。
【図１７】本発明の第２の実施例を示し、クエリ状態表の一例を示す図である。
【図１８】本発明の第２の実施例を示し、サーバ状態表の一例を示す図である。
【図１９】本発明の第２の実施例を示し、クラスタ状態表の一例を示す図である。
【図２０】本発明の第２の実施例を示し、計算機システムで行われるスケールアウト処理の一例を示すフローチャートである。
【図２１】本発明の第２の実施例を示し、計算機システムで行われるスケールアウト処理の一例を示すシーケンス図である。
【図２２】本発明の第３の実施例を示し、サーバ計算機の一例を示すブロック図である。
【図２３】本発明の第３の変形例を示し、計算機システムで行われる処理の一例を示すシーケンス図である。
【図２４】本発明の第３の変形例を示し、計算機システムで行われる処理の一例を示すシーケンス図の前半部である。
【図２５】本発明の第３の変形例を示し、計算機システムで行われる処理の一例を示すシーケンス図の後半部である。
【発明を実施するための形態】
【００１６】
以下、本発明の一実施形態について添付図面を用いて説明する。
【実施例１】
【００１７】
図１は、本発明の第１の実施例を示し、ストリームデータを処理する計算機システムの一例を示すブロック図である。計算機システムは、ストリームデータを転送する送受信計算機２と、ストリームデータを処理する第１のサーバ計算機１−１と、第２のサーバ計算機１−２と、運用管理計算機３と、ストリームデータ処理の結果を利用するユーザ端末６を含む。【００１８】
ストリーム送受信計算機２と、第１のサーバ計算機１−１と、第２のサーバ計算機１−２及びユーザ端末６は業務ネットワーク４を介して接続され、ストリーム送受信計算機２が第１のサーバ計算機１−１及び第２のサーバ計算機１−２へストリームデータを供給する。第１のサーバ計算機１−１及び第２のサーバ計算機１−２の演算結果は、業務ネットワーク４を介してユーザ端末６へ出力される。【００１９】
また、第１のサーバ計算機１−１及び第２のサーバ計算機１−２は管理ネットワーク５を介して運用管理計算機３とストリーム送受信計算機２に接続される。なお、本実施例では、第１のサーバ計算機１−１と第２のサーバ計算機１−２の総称を「−」以降の符号のないサーバ計算機１として表示する。また、本実施例では、２台のサーバ計算機１でストリームデータの処理を行う例を示すが、２台以上であればよい。【００２０】
ストリーム送受信計算機２は、図示しないストリームデータのソースに接続される。ストリーム送受信計算機２は、各種センサやＩＣタグ等から取得した情報や、株価情報等の時々刻々と到来するデータであるストリームデータを、業務ネットワーク４を介してサーバ計算機１へ転送するストリームデータのソースとして機能する。なお、本実施例では、データソースをストリーム送受信計算機２として例を示すが、複数のセンサや計算機に接続された通信機器をデータソースとしてもよい。【００２１】
本実施例では、ストリームデータを識別する識別子としてストリームＩＤがストリームデータに付与されている。ストリームＩＤは、該ストリームデータが処理されるべきクエリを識別するためのものであり、ストリームＩＤは、予めユーザ等によって設定され、例えば、ストリームＩＤとして、Ｓ１、Ｓ２、及びＳ３等の文字列が割り当てられる。【００２２】
＜ストリーム送受信計算機＞
図２は、ストリーム送受信計算機２の一例を示すブロック図である。ストリーム送受信計算機２は、主記憶装置２１と、中央演算処理装置２２と、通信インタフェース２３と、を含む。【００２３】
主記憶装置２１は、プログラムやデータを格納する装置で有あり、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等で構成される。主記憶装置２１には、ストリーム送信プログラム２００がロードされて、中央演算処理装置２２によって実行される。【００２４】
ストリーム送信プログラム２００は、例えば、ストリーム送受信計算機２に入力されたストリームデータを宛先（サーバ計算機１）に送信するためのプログラムであって、データ送信部２０１と、データ送信先管理表２０２と、を含む。【００２５】
中央演算処理装置２２は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を含み、主記憶装置２１に読み込まれた各種プログラムを実行する。本実施形態では、中央演算処理装置２２は、図１に示すように、主記憶装置２１に読み込まれたストリーム送信プログラム２００を実行することになる。【００２６】
通信インタフェース２３は、業務ネットワーク４と管理ネットワーク５にそれぞれ接続される。ストリーム送受信計算機２は、業務ネットワーク４を介してストリームデータソースと第１のサーバ計算機１−１との間、第２のサーバ計算機１−２との間で、それぞれデータ通信（情報通信）を行う。また、通信インタフェース２３は、ストリーム送受信計算機２が、管理ネットワーク５を介して運用管理計算機３との間でデータ通信（情報通信）を行う際にも利用される。第１のサーバ計算機１−１または第２のサーバ計算機１−２との間のデータ通信においては、ストリーム送受信計算機２からストリームデータが第１のサーバ計算機１−１または第２のサーバ計算機１−２へそれぞれ送信される。【００２７】
また、ストリーム送受信計算機２と運用管理計算機３との間のデータ通信においては、所定のコマンドが運用管理計算機３からストリーム送受信計算機２へ送信される。該コマンドには、宛先（サーバ計算機）を変更（追加や削除）させるためのコマンド等が含まれる。【００２８】
本実施形態では、通信インタフェース２３として、イーサネットが採用されているが、イーサネット以外にも、ＦＤＤＩ（光ファイバのインタフェース）や、シリアルインタフェースや、ＵＳＢ等を利用することが可能である。【００２９】
次に、ストリーム送受信計算機２の主記憶装置２１にロードされたストリーム送信プログラム２００について説明する。【００３０】
ストリーム送信プログラム２００のデータ送信部２０１は、ストリーム送受信計算機２が受け付けたストリームデータを、通信インタフェース２３から業務ネットワーク４を介して宛先となる第１のサーバ計算機１−１または第２のサーバ計算機１−２へ送信する。【００３１】
データ送信部２０１は、受信したストリームデータからストリームＩＤを取得して、ストリームＩＤに対応する宛先情報をデータ送信先管理表２０２から取得する。そして、データ送信部２０１は、抽出した宛先情報のサーバ計算機１に対しストリームデータを送信（転送）する。【００３２】
図６、図７は、データ送信先管理表２０２の一例を示す図である。なお、図７は、スケールアウト処理によって書き換え後のデータ送信先管理表２０２の一例を示す図である。データ送信先管理表２０２は、ストリームデータの識別子を格納するストリームＩＤ２０２１と、宛先のＩＰアドレス（宛先情報）を格納する宛先ＩＰ２０２２とをひとつのエントリに含む。【００３３】
図７のデータ送信先管理表２０２は、運用管理計算機３からのコマンドに応じて、ストリームＩＤ＝Ｓ２に新たな送信先を追加した例を示す。データ送信部２０１は、データ送信先管理表２０２を書き換えた後は、ストリームＩＤ＝Ｓ２のストリームデータを、２つのサーバ計算機１へそれぞれ送信する。【００３４】
＜運用管理計算機＞
図３は、運用管理計算機３の一例を示すブロック図である。運用管理計算機３は、主記憶装置３１と、中央演算処理装置３２と、通信インタフェース３３と、補助記憶装置３４とを含む。主記憶装置３１は、上述したストリーム送受信計算機２の主記憶装置２１と同様に、プログラムやデータを格納するための装置であり、例えば、ＲＡＭが用いられる。主記憶装置３１には、運用管理プログラム３００とクエリ変換テンプレート３１０が搭載されている。【００３５】
運用管理プログラム３００は、ストリームデータ処理を行うサーバ計算機１を追加するスケールアウトを実行する。本実施例のスケールアウトでは、現在稼働中のサーバ計算機（本実施例では、現用系となる第１のサーバ計算機１−１）で実行されているクエリを、新たに追加されるサーバ計算機（本実施例では、待機系となる第２のサーバ計算機１−２）でも実行させる。なお、第２のサーバ計算機１−２は、予め待機系として設定されたサーバ計算機１である。【００３６】
ここで、本実施例のスケールアウトは、現在実行中のサーバ計算機１のクエリを書き換えて、実行タイミングを変更したクエリを新たに追加したサーバ計算機１に配布し、同一のストリームデータにより複数のサーバ計算機１を並列的に実行させ、計算機の負荷を分散させる。なお、書き換え後のクエリの実行タイミングは、第１のサーバ計算機１−１と第２のサーバ計算機１−２が、交互にストリームデータの処理結果を出力するように設定される。【００３７】
なお、本実施例１では、運用管理計算機３がサーバ計算機１にスケールアウトの指令を出力する例を示すが、指令を出力する契機については管理者からの指示や、図示しない監視部などで所定の条件が成立したときなど、公知または周知の技術を用いることができる。所定の条件が成立したときにスケールアウトの指令を送出する例としては、運用管理プログラム３００がクエリを実行中のサーバ計算機１の負荷を監視し、計算機の負荷が所定の閾値を超えたときに、スケールアウトの要求を出力すればよい。また、サーバ計算機１が複数のクエリを実行している場合には、スケールアウトの指令にスケールアウト対象のクエリを指定しても良い。【００３８】
運用管理プログラム３００は、コマンド送信部３０１と、クエリ生成部３０２と、クエリ管理表３０３とを含む。運用管理プログラム３００は、クエリ変換テンプレート３１０を用いて、スケールアウトする際にクエリの書き換えをサーバ計算機１に指令する。【００３９】
補助記憶装置３４は、運用管理プログラム３００やクエリ変換テンプレート３１０等のプログラムやデータを格納する不揮発性記憶媒体である。【００４０】
通信インタフェース３３は、運用管理計算機３が業務ネットワーク４を介して第１のサーバ計算機１−１または第２のサーバ計算機１−２との間でデータ通信（情報通信）を行う。また、通信インタフェース３３は、管理ネットワーク５を介してストリーム送受信計算機２とサーバ計算機１に接続され、スケールアウトの指令や追加したサーバ計算機１の情報などを送信する。【００４１】
中央演算処理装置３２は、ストリーム送受信計算機２の中央演算処理装置２２と同様であり、例えば、ＣＰＵを含んで主記憶装置３１にロードされたプログラムを実行する。本実施形態では、中央演算処理装置３２は、図３に示すように、主記憶装置３１に読み込まれた運用管理プログラム３００を実行する。【００４２】
運用管理プログラム３００を構成するコマンド送信部３０１とクエリ生成部３０２の各機能部はプログラムとして主記憶装置３１にロードされる。【００４３】
中央演算処理装置３２は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、中央演算処理装置３２は、コマンド生成プログラムに従って処理することでコマンド送信部３０１として機能する。他のプログラムについても同様である。さらに、中央演算処理装置３２は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。【００４４】
運用管理計算機３の各機能を実現するプログラム、テーブル等の情報は、補助記憶装置３４や不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。【００４５】
運用管理プログラム３００は、サーバ計算機１を管理し、スケールアウトの要求を受け付けると、スケールアウト先とスケールアウトするクエリを決定し、サーバ計算機１やストリーム送受信計算機２に指令する。なお、運用管理プログラム３００は、各サーバ計算機１で実行するクエリをクエリ管理表３０３で管理する。また、運用管理プログラム３００は、サーバ計算機１を関して所定の条件が成立したときに、スケールアウトの要求を生成してもよい。【００４６】
運用管理プログラム３００のコマンド送信部３０１は、スケールアウトの指令やスケールアウト先の追加指令を生成してサーバ計算機１やストリーム送受信計算機２に送信する。スケールアウトの指令には、クエリ生成部３０２が生成した書換クエリが含まれる。【００４７】
運用管理プログラム３００のクエリ生成部３０２は、スケールアウトを実施するクエリに対応する書換クエリをクエリ変換テンプレート３１０から読み込んで、実行形式のクエリとして生成する。この書換クエリは、クエリ変換テンプレート３１０に予め設定された書換内容に基づいたクエリで、サーバ計算機１毎に実行タイミングが異なる同一処理のクエリを複数のサーバ計算機１に実行させるものである。【００４８】
図８は、クエリ管理表３０３の一例を示す図である。クエリ管理表３０３は、クエリの識別子を格納するクエリＩＤ３０３１と、クエリの内容を格納するクエリ文字列３０３２と、クエリで処理するストリームデータの識別子を格納する実行対象ストリームＩＤ３０３３と、クエリを実効するサーバ計算機１の情報を格納する対象ノード３０３４と、をひとつのエントリに含む。【００４９】
本実施例では、サーバ計算機１の情報としてＩＰアドレスを用いる例を示すが、サーバ計算機１を特定可能な情報であればよい。運用管理プログラム３００は、クエリを実行するサーバ計算機１の追加、変更あるいは削除があったとき等にクエリ管理表３０３を更新する。図示の例では、第１のサーバ計算機１−１（１９２．１６８．０．２）で２つのクエリＱ１、Ｑ２が実行される例を示す。【００５０】
クエリ管理表３０３は、第１のサーバ計算機１−１が、例えばストリーム送受信計算機２から受信したストリームデータに応じて、処理対象とするクエリを特定するために使用されるものである。そのため、クエリ管理表３０３は、クエリの識別子記録欄、クエリ文字列記録、クエリの実行形式格納先記録、及びクエリの実行対象となるストリームＩＤ記録欄を含む。ここで、クエリの識別子とは、登録されたクエリを区別するために用いられる文字列のことを指し、以下では、該文字列を「クエリＩＤ」と表記してもよい。また、クエリの実行対象のストリームＩＤとは、該クエリが処理対象とするストリームデータを取得するに際して用いられるものである。【００５１】
図９は、書換クエリを生成するための変換ルールであるクエリ変換テンプレート３１０の一例を示す図である。クエリ変換テンプレート３１０は、クエリの識別子を格納するクエリＩＤ３１０１と、書換対象のクエリの内容を格納する元クエリ３１０２と、クエリで処理するストリームデータの識別子を格納する実行対象ストリームＩＤ３１０３と、クエリを実行するサーバ計算機１の情報を格納する対象ノード３１０４と、書き換え後のクエリの識別子を格納するクエリＩＤ３１０５と、書き換え後のクエリの内容を格納する書換クエリ３１０６と、をひとつのエントリに含む。【００５２】
図示の例では、第１のサーバ計算機１−１で実行する２つのクエリＱ１、Ｑ２を、サーバ計算機１−２（１９２．１６８．０．３）を加えてスケールアウトする例を示す。また、クエリ変換テンプレート３１０は、管理者などが運用管理計算機３に予め設定しておいたものである。【００５３】
例えば、クエリＩＤがＱ１−１に示される書換クエリの場合、クエリを実行するサーバ計算機１における計算機の識別番号（サーバ計算機１−１ではｎ＝１、サーバ計算機１−２ではｎ＝２）を表す変数ｎを用いた書換クエリが記載されている。このテンプレートにより、書換クエリは、サーバ計算機１−１上で奇数秒（２ｎ＋１秒）に実行される。【００５４】
なお、本実施例では、クエリ変換テンプレート３１０を運用管理計算機３に保持する例を示すが、サーバ計算機１のそれぞれに保持させてもよい。また、クエリ変換テンプレートは、変換対象となるクエリの一部のみについてテンプレートを記載する方法や、それらのテンプレートを一つ以上組合せて適用する方法でもよい。【００５５】
＜サーバ計算機＞
図４は、第１のサーバ計算機１−１の一例を示すブロック図である。なお、第２のサーバ計算機１−２は第１のサーバ計算機１−１と同様の構成であるので、重複した説明は省略する。【００５６】
サーバ計算機１は、主記憶装置１１と、中央演算処理装置１２と、通信インタフェース１３と、補助記憶装置１４とを含む。主記憶装置１１は、上述したストリーム送受信計算機２の主記憶装置２１と同様に、プログラムやデータを格納するための装置であり、例えば、ＲＡＭが用いられる。主記憶装置１１には、ストリームデータ処理プログラム１００がロードされている。【００５７】
ストリームデータ処理プログラム１００は、スケールアウトを実行する際に、クエリの切り替えと、追加されたサーバ計算機１との間でウィンドウ等の実行環境の同期を実施する。ストリームデータ処理プログラム１００は、データ通信部１１０と、クエリ処理部１２０と、命令受付部１３０とを含む。なお、実行環境の同期については、後述するように、コールドスタンバイ式とウォームスタンバイ式がある。【００５８】
中央演算処理装置１２は、ストリーム送受信計算機２の中央演算処理装置２２と同様であり、例えば、ＣＰＵを含んで主記憶装置１１にロードされたプログラムを実行する。本実施形態では、中央演算処理装置１２は、図４で示すように、主記憶装置１１に読み込まれたストリームデータ処理プログラム１００を実行する。【００５９】
通信インタフェース１３は、業務ネットワーク４と管理ネットワーク５にそれぞれ接続されて、ストリーム送受信計算機２からストリームデータを受信し、運用管理計算機３からスケールアウトなどのコマンドを受信する。【００６０】
補助記憶装置１４は、ストリームデータ処理プログラム１００等のプログラムやデータを格納する不揮発性記憶媒体で構成される。【００６１】
中央演算処理装置１２は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、中央演算処理装置１２は、ストリームデータ処理プログラム１００内のクエリ処理プログラムに従って処理することでクエリ処理部１２０として機能する。他のプログラムについても同様である。さらに、中央演算処理装置１２は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。【００６２】
サーバ計算機１の各機能を実現するプログラム、テーブル等の情報は、補助記憶装置１４や不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。【００６３】
ストリームデータ処理プログラム１００は、データ通信部１１０と、クエリ処理部１２０と、命令受付部１３０とを含む。【００６４】
ストリームデータ処理プログラム１００において、データ通信部１１０は、通信インタフェース１３及び業務ネットワーク４を介してストリーム送受信計算機２から第１のサーバ計算機１−１へ送信されるストリームデータを受信し、受信したストリームデータを、クエリ処理部５５に出力する機能を有する。【００６５】
クエリ処理部１２０は、入力部１２１と、演算処理実行部１２２と、ワークエリア１２３と、出力部１２４と、を含む。【００６６】
クエリ処理部１２０は、登録されたクエリに応じて、ストリームデータ処理を実行する。なお、本実施例では、第１のサーバ計算機１−１は、運用管理計算機３等によって予め設定されたクエリを実行する例を示す。【００６７】
クエリ処理部１２０において、入力部１２１は、データ通信部１１０から出力されるストリームデータを入力し、該入力したストリームデータを、演算処理実行部１２２に出力する。ワークエリア１２３は、演算処理実行部１２２から出力された処理対象のストリームデータを保存し、演算処理実行部１２２からのデータ読出し要求に応じて保存されているストリームデータを演算処理実行部１２２へ出力する。【００６８】
演算処理実行部１２２は、入力部１２１から与えられたストリームデータを読み込んで、予め設定されたクエリによってストリームデータ処理を実行する。演算処理実行部１２２におけるストリームデータ処理では、例えば、スライディングウィンドウにより過去に入力されたストリームデータを利用してクエリが実行される。このため、演算処理実行部１２２は、演算処理の対象にするストリームデータ（タプル）を、ワークエリア１２３へ格納する。【００６９】
ここで、スライディングウィンドウとは、クエリの中に設定されている演算処理の対象になるストリームデータを一時的に保存するためのデータ蓄積部のことを指す。スライディングウィンドウによって切り取られたストリームデータは、例えばサーバ計算機１−１の主記憶装置１１等に格納され、演算処理実行部１２２がクエリを実行する際に使用される。なお、スライディングウィンドウの指定を含むクエリの記述言語に係わる好適な一例としては、上述した特許文献２等に記載されているＣＱＬ（Ｃｏｎｔｉｎｕｏｕｓ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）を挙げることができる。【００７０】
クエリには、時間で処理対象とするストリームデータの範囲を指定するクエリと、処理対象となるストリームデータの個数で処理対象とするストリームデータの範囲を指定するクエリとが存在する。以後、クエリ記述言語によって記述された文字列を、「クエリ文字列」と表記し、時間で処理対象とするストリームデータの範囲を指定するクエリを、「時間ベースのクエリ」と表記し、処理対象となるストリームデータの個数で処理対象とするストリームデータの範囲を指定するクエリを、「個数ベースのクエリ」と表記する。【００７１】
演算処理実行部１２２において実行されるクエリが、時間ベースのクエリである場合には、演算処理実行部１２２は、入力部１２１を介してデータ通信部１１０から入力されたストリームデータを、ワークエリア１２３へ保存する。そして、演算処理実行部１２２は、ワークエリア１２３に保存されているストリームデータのうちで保存時間を経過したストリームデータについては、ワークエリア１２３から削除する。【００７２】
上記クエリが、個数ベースのクエリである場合にも、演算処理実行部１２２は、入力されたストリームデータを、ワークエリア１２３へ保存する。しかし、ワークエリア１２３に保存されているストリームデータの個数が、所定の保存個数を超えた場合には、例えば、ワークエリア１２３における保存時間の長いストリームデータから順に、演算処理実行部１２２がワークエリア１２３から削除する。【００７３】
出力部１２４は、演算処理実行部１２２によるクエリの実行結果を、データ通信部１１０及び通信インタフェース１３を介  して外部へ出力する。【００７４】
なお、以下の記述では、ワークエリア１２３を、「ウィンドウ」と表記し、ワークエリア１２３に保存（格納）されているデータ（ストリームデータ）を、「ウィンドウデータ」と表記し、ワークエリア１２３におけるストリームデータの保存時間、又は保存個数を、「ウィンドウサイズ」と表記してもよい。【００７５】
命令受付部１３０は、運用管理計算機３やスケールアウトの際のクラスタ内などから命令を受付ける。命令受付部１３０に与えられる命令としては、例えば、スケールアウトの指令や、クエリ登録命令あるいはクエリ削除命令が挙げられる。クエリ登録命令とは、ストリームデータ処理プログラム１００に入力するデータ（ストリームデータ）を、第１のサーバ計算機１−１に順次処理させるためのクエリを、クエリ処理部１２０に登録させるための命令である。【００７６】
＜スケールアウト処理＞
図５は、計算機システムで行われるスケールアウト処理の一例を示すシーケンス図である。この処理は、運用管理計算機３がスケールアウトの要求を受け付けたときに実行される。運用管理計算機３は、上述したように、所定の条件が成立したときや管理者からの指示などのスケールアウトの要求に基づいて、サーバ計算機１へスケールアウトの指令を出力する。なお、図示の例では、待機系の第２のサーバ計算機１−２を、第１のサーバ計算機１−１のクエリを実行するクラスタへ追加する例を示す。【００７７】
運用管理計算機３の  運用管理プログラム３００のコマンド送信部３０１は、所定の条件の成立や管理者からの指示によってスケールアウトの要求を受け付ける（Ｓ１１）。運用管理計算機３は、スケールアウトの対象となるクエリＩＤを取得して、図５に示したクエリ変換テンプレート３１０から対象ノード３１０４と、クエリＩＤ３１０５と書換クエリ３１０６を取得する（Ｓ１２）。【００７８】
図５の例では、第１のサーバ計算機１−１（１９２．１６８．０．２）のクエリＩＤ＝Ｑ１を、クエリ変換テンプレート３１０でクエリＩＤ＝Ｑ１−１とＱ１−２の２つの書換クエリを生成し、クエリＩＤ＝Ｑ１−２を第２のサーバ計算機１−２（１９２．１６８．０．３）へスケールアウトする例を示す。【００７９】
また、第１のサーバ計算機１−１のクエリＩＤ＝Ｑ２を、クエリ変換テンプレート３１０でクエリＩＤ＝Ｑ２−１とＱ２−２の２つの書換クエリを生成し、クエリＩＤ＝Ｑ２−２を第２のサーバ計算機１−２へスケールアウトする。なお、図５の例では、第１のサーバ計算機１−１のクエリＩＤ＝Ｑ１をＱ１−１にリネームし、クエリＩＤ＝Ｑ２はＱ２−１にリネームする。【００８０】
本実施例１では、第１のサーバ計算機１−１の書換クエリＱ１−１は、第１のサーバ計算機１−１で現在実行中のクエリＱ１と切り替えるクエリを示し、第２のサーバ計算機１−２の書換クエリＱ１−２は、第２のサーバ計算機１−２で新たに起動させるクエリとなる。なお、第１のサーバ計算機１−１の書換クエリＱ２−１も、第１のサーバ計算機１で現在実行中のクエリＱ２と切り替えるクエリを示し、第２のサーバ計算機１−２の書換クエリＱ２−２は、第２のサーバ計算機１−２で新たに起動させるクエリとなる。【００８１】
運用管理プログラム３００のコマンド送信部３０１は、取得した書換クエリ３１０６を対象ノード３１０４及びストリーム送受信計算機２に対してスケールアウトの指令に含めて送信する（Ｓ１３）。図５の例では、同一の処理を行うクエリの実行タイミングを対象ノード３１０４毎に書き換えて、２つのサーバ計算機１で並列的にストリームデータ処理を実行する。【００８２】
ストリーム送受信計算機２は、スケールアウトの指令を受信すると、第１のサーバ計算機１−１へ送信していたストリームデータのバッファリングを開始して、第１のサーバ計算機１−１へのストリームデータの送信を一時的に停止する（Ｓ１４）。【００８３】
第１のサーバ計算機１−１は、運用管理計算機３からのスケールアウトの指令を命令受付部１３０で受信する。命令受付部１３０は、スケールアウトの指令に含まれる書換クエリＱ１−１、Ｑ２−１を抽出してクエリ処理部１２０へ送信する（Ｓ１５）。【００８４】
第１のサーバ計算機１−１のクエリ処理部１２０は、受信した書換クエリＱ１−１、Ｑ２−１を展開して実行しているクエリＱ１，Ｑ２を書き換える準備を行う（Ｓ１６）。そして、クエリ処理部１２０は、命令受付部１３０へ書換の準備が完了したことをストリーム送受信計算機２へ通知する（Ｓ１７）。【００８５】
第２のサーバ計算機１−２は、運用管理計算機３からのスケールアウトの指令を命令受付部１３０で受信する。命令受付部１３０は、スケールアウトの指令に含まれる書換クエリＱ１−２、Ｑ２−２を抽出してクエリ処理部１２０へ送信する（Ｓ１８）。【００８６】
第２のサーバ計算機１−２のクエリ処理部１２０は、受信した書換クエリＱ１−２、Ｑ２−２を展開する（Ｓ１９）。そして、クエリ処理部１２０は、命令受付部１３０へクエリの書換の準備が完了したことをストリーム送受信計算機２へ通知する（Ｓ２０）。第２のサーバ計算機１−２の命令受付部１３０は、第１のサーバ計算機１−１の命令受付部１３０にクエリ書換の準備が完了したことを通知する（Ｓ２１）。なお、第２のサーバ計算機１−２では、現在、クエリを実行していないので、書換クエリ３１０６を展開するだけでよい。【００８７】
次に、第１のサーバ計算機１−１では、クエリ処理部１２０がクエリＱ１、Ｑ２のウィンドウ内のデータを読み出してから（Ｓ２２）、命令受付部１３０へウィンドウの内容を第２のサーバ計算機１−２の書換クエリのウィンドウへ複製する指示を送信する（Ｓ２３）。このとき、クエリ処理部１２０はクエリＱ１、Ｑ２のウィンドウのデータを書換クエリＱ１−１、Ｑ２−１のウィンドウに書き込んで同期させる。【００８８】
第１のサーバ計算機１−１は、クエリ処理部１２０が読み出したクエリＱ１、Ｑ２のウィンドウ内のデータを、第２のサーバ計算機１−２の命令受付部１３０に複製する指示を送信する（Ｓ２４）。【００８９】
第２のサーバ計算機１−２の命令受付部１３０は、ウィンドウの複製指示から第１のサーバ計算機１−１のクエリＱ１、Ｑ２のウィンドウ内のデータ複製を抽出し、クエリ処理部１２０へウィンドウの複製指示を送信する（Ｓ２５）。第２のサーバ計算機１−２のクエリ処理部１２０は、受信したウィンドウの複製の指示から第１のサーバ計算機１−１のクエリＱ１、Ｑ２のウィンドウの内容（複製）を第２のサーバ計算機１−２の書換クエリＱ１−２、Ｑ２−２で定義されたウィンドウに書き込む（Ｓ２６）。これにより、第１のサーバ計算機１−１と第２のサーバ計算機１−２の書換クエリ内のウィンドウの内容が同期する。【００９０】
第２のサーバ計算機１−２のクエリ処理部１２０は、ウィンドウの複製が完了した通知を命令受付部１３０へ通知する（Ｓ２７）。第２のサーバ計算機１−２の命令受付部１３０は、ウィンドウの複製が完了した通知を第１のサーバ計算機１−１の命令受付部１３０に通知する（Ｓ２８）。【００９１】
上記処理により、第１のサーバ計算機１−１と第２のサーバ計算機１−２は、実行タイミングのみが異なる同じ処理内容のクエリ（書換クエリ）が設定され、また、書換クエリのウィンドウは同期した状態となる。第１のサーバ計算機１−１の命令受付部１３０は、クエリ処理部１２０に対して、実行中のクエリを、展開しておいた書換クエリに切り替える指示を出力する（Ｓ２９）。クエリ処理部１２０は、実行中のクエリを停止して、展開しておいた書換クエリに切り替える（Ｓ３０）。なお、第２のサーバ計算機１−２では、この時点までに書換クエリの実行を開始させておけばよい。【００９２】
次に、第１のサーバ計算機１−１の命令受付部１３０は、運用管理計算機３に対して書換クエリの実行準備が完了したことを通知する（Ｓ３１）。運用管理計算機３は、スケールアウトの対象となる新たな計算機の宛先を追加する指令を、ストリーム送受信計算機２に送信する（Ｓ３２）。【００９３】
ストリーム送受信計算機２は、受信した宛先をデータ送信先管理表２０２に加えることで、ストリームデータの送信先を追加する（Ｓ３３）。なお、運用管理計算機３は、スケールアウトを実施するクエリが扱うストリームデータについて新たな宛先を通知すればよい。すなわち、ストリーム送受信計算機２は、ストリームＩＤ＝Ｓ２について第２のサーバ計算機１−２（１９２．１６８．０．３）の追加指令を受け付けると、図７に示すように、データ送信先管理表２０２の宛先ＩＰ２０２２に新たなエントリを加える。【００９４】
また、ストリーム送受信計算機２は、ストリームデータのバッファリングを解除して、第１のサーバ計算機１−１に加えて第２のサーバ計算機１−２にもストリームデータ（Ｓ１）の送信を実施する。【００９５】
以上の処理により、運用管理計算機３がスケールアウトの指令を出力すると、ストリーム送受信計算機２は、ストリームデータのバッファリングによって送信を一時的に中止する。そして、第１のサーバ計算機１−１と第２のサーバ計算機１−２は、書換クエリの展開と、クエリのウィンドウの状態の同期を実施する。ウィンドウの同期が完了すると第１のサーバ計算機１−１は、現在実行中のクエリを展開しておいた書換クエリに切り替える。そして、第１のサーバ計算機１−１は、運用管理計算機３へ書換クエリの準備が完了したことを通知し、運用管理計算機３は新たな計算機（第２のサーバ計算機１−２）をストリームデータの送信先に加えるようストリーム送受信計算機２に指令する。そして、ストリーム送受信計算機２は、新たな計算機を送信先に追加してから、バッファリングを停止してストリームデータの送信を再開する。【００９６】
上記図５に示した処理は、ウォームスタンバイ式と呼ぶ。ウォームスタンバイ式では、以上のように運用管理計算機３が書換クエリを生成して、スケールアウト対象のサーバ計算機１へ送信する。また、運用管理計算機３からの指令に基づいてストリーム送受信計算機２は第１のサーバ計算機１−１へのストリームデータの送信を中断する。【００９７】
そして、第１のサーバ計算機１−１がウィンドウの内容を複製し、追加する第２のサーバ計算機１−２に送信し、ウィンドウ内のデータを同期させる。同期が完了した後には、第１のサーバ計算機１−１は実行するクエリを書換クエリに切り替える。その後、運用管理計算機３はストリーム送受信計算機２にストリームデータの送信を再開させることで、ウォームスタンバイによる動的なスケールアウトが完了する。これにより、同一のストリームデータを使用しながら動的にスケールアウトを実施することが可能となる。【００９８】
なお、ストリーム送受信計算機２で実施するストリームデータのバッファリング開始の時期は、書換準備完了が第１のサーバ計算機１−１と第２のサーバ計算機１−２で保証されたタイミング（Ｓ２１）まで遅延させることが可能である。【００９９】
また、上記図５のウォームスタンバイ式では、ここでは静止化（ストリームデータの一時停止）をしてからウィンドウの複製を行ったが、これに限定されるものではない。スケールアウト対象の複数のサーバ計算機１間で最終的にウィンドウ内のデータが同期できれば、ストリームデータの送信を一時停止せずに複製処理を行い（更新されたウィンドウ処理はそのつどコピー）、所定量以上のコピーが終わってからストリーム送受信計算機２からのストリームデータを静止化してもよい。この場合、ストリーム送受信計算機２にバッファリングされる時間を短縮することで、サーバ計算機１で行われるクエリ処理の停止時間を短縮することができる。【０１００】
図１０は、第１のサーバ計算機１−１と第２のサーバ計算機１−２で処理されるタプルと時間の関係を示す図である。図中丸印がタプルを示し、図中実線がストリームデータ処理の結果を出力したタプルを示し、図中破線がストリームデータ処理の結果を出力しないタプルを示す。【０１０１】
図１０の例は、図９のクエリＩＤ＝Ｑ１を書き換えたクエリＩＤ＝Ｑ１−１、Ｑ１−２の例を示す。クエリＩＤ＝Ｑ１は、ウィンドウサイズが１分間のウィンドウで平均値を演算するクエリで、書き換え後のクエリＩＤ＝Ｑ１−１は、奇数秒毎に１分間のウィンドウで平均値を演算し、クエリＩＤ＝Ｑ１−２は、偶数秒毎に１分間のウィンドウで平均値を演算する。【０１０２】
すなわち、第１のサーバ計算機１−１と第２のサーバ計算機１−２は、同一の入力タプルでストリームデータ処理を実施し、１秒毎に交互にストリームデータ処理の演算結果を出力する。ストリームデータ処理の結果を利用するユーザ端末６では、第１のサーバ計算機１−１と第２のサーバ計算機１−２のストリームデータの演算結果をタプルの時系列で利用することができるので、前記従来例のように集約演算等を行う必要は無い。【０１０３】
また、入力タプルとしてストリームデータを送信するストリーム送受信計算機２は、前記従来例のようにタプルを取捨選択あるいは分割する必要が無いので、分散処理に関する負荷を抑制することができる。【０１０４】
なお、第１及び第２のサーバ計算機１−１、１−２には同じタプルが入力されるが、実行タイミングが異なる同じ処理内容のクエリからの出力は交互に行われるため、ストリームデータ処理の結果は交互に出力される。なお、本実施例では、クエリの実行を交互に行う例を示すが、これに限定されるものではない。例えば、時刻＝１秒の時点で、第１及び第２のサーバ計算機１−１、１−２が共にタプル１、２、３の演算を実行し、第１のサーバ計算機１−１のみがストリームデータの処理結果を出力するようにしてもよい。すなわち、複数のサーバ計算機１で同一のタプルの演算を実行し、ストリームデータの処理結果の出力を交互などの所定の順序で許可するようにすればよい。換言すれば、複数のサーバ計算機１で同一のタプルの演算を行うが、許可されたサーバ計算機１のみがストリームデータの処理結果を出力し、他のサーバ計算機１ではストリームデータの処理結果の出力が禁止（またはスキップ）される。なお、他のサーバ計算機１ではストリームデータの処理を禁止またはスキップしてもよい。【０１０５】
図１１は、第１のサーバ計算機１−１と第２のサーバ計算機１−２で処理されるタプルと時間の関係を示す図である。図中丸印がタプルを示し、図中実線がストリームデータ処理の結果を出力したタプルを示し、図中破線がストリームデータ処理の結果を出力しないタプルを示す。【０１０６】
図１１の例は、図９のクエリＩＤ＝Ｑ２を書き換えたクエリＩＤ＝Ｑ２−１、Ｑ２−２の例を示す。クエリＩＤ＝Ｑ２は、ウィンドウサイズが３個のウィンドウの平均値を演算するクエリで、クエリＩＤ＝Ｑ２−１とＱ２−２は、ウィンドウの演算を３回ずつ交互に実行する。【０１０７】
第１のサーバ計算機１−１と第２のサーバ計算機１−２は、同一の入力タプルでストリームデータ処理を実施し、ウィンドウの演算結果を３回ずつ交互に出力する。【０１０８】
ストリームデータ処理の結果を利用するユーザ端末６では、第１のサーバ計算機１−１と第２のサーバ計算機１−２のストリームデータの演算結果をタプルの時系列で利用することができるので、前記従来例のように集約演算等を行う必要は無い。したがって、計算機資源が不足するのを抑制することができる。【０１０９】
また、ストリームデータを送信するストリーム送受信計算機２は、前記従来例のようにストリームデータを分割する必要がないので、計算機資源が不足するのを抑制することができる。【０１１０】
図１２は、クエリ変換テンプレート３１０の一例を示す図である。図１２のクエリ変換テンプレート３１０は、前記図９のクエリＩＤ＝Ｑ２を書き換えたクエリＩＤ３１０５＝Ｑ２−１とＱ２−２の変形例を示す。図１２においては、第１のサーバ計算機１−１と第２のサーバ計算機１−２が、交互にウィンドウの演算を行う例を示す。【０１１１】
図１３は、第１のサーバ計算機１−１と第２のサーバ計算機１−２で処理されるタプルと時間の関係を示す図である。図中丸印がタプルを示し、図中実線がストリームデータ処理の結果を出力したタプルを示し、図中破線がストリームデータ処理の結果を出力しないタプルを示す。【０１１２】
図１３の例は、図１２に示したクエリＩＤ＝Ｑ２を書き換えたクエリＩＤ＝Ｑ２−１、Ｑ２−２の例を示す。書き換え後のクエリＩＤ＝Ｑ２−１は、奇数回毎に３個のウィンドウで平均値を演算し、クエリＩＤ＝Ｑ２−２は、偶数回毎に３個のウィンドウで平均値を演算する。【０１１３】
図１４は、上記実施例１の変形例を示し、計算機システムで行われるスケールアウト処理の一例を示すシーケンス図である。【０１１４】
ステップＳ１１、Ｓ１２、前記図５と同様であり、運用管理計算機３がスケールアウトの要求を生成し、クエリ変換テンプレート３１０から書換クエリＱ１−１、Ｑ１−２、Ｑ２−１、Ｑ２−２を生成する。そして、ステップＳ１３Ａでは、運用管理計算機３が書換クエリを含むスケールアウトの指令をスケールアウト対象のサーバ計算機１に送信する。【０１１５】
本変形例では図５と異なり、ストリーム送受信計算機２はストリームデータの送信を中断せず、第１のサーバ計算機１−１へストリームデータの送信を継続する。【０１１６】
次に、ステップＳ１５〜Ｓ２１では、スケールアウト対象の第１のサーバ計算機１−１と第２のサーバ計算機１−２が、スケールアウトの指令に含まれる書換クエリを、命令受付部１３０からクエリ処理部１２０へ送信し、各サーバ計算機１で書換クエリを展開しておく。【０１１７】
本変形例では図５と異なり、ストリーム送受信計算機２はストリームデータの送信を中断せず、第１のサーバ計算機１−１へストリームデータの送信を継続する。また、本変形例のサーバ計算機１は、前記図５と異なり、第１のサーバ計算機１−１の命令受付部１３０は、ウィンドウの複製を行わない。本変形例では、ウィンドウ内の複製に代わって、ストリーム送受信計算機２からストリームデータの送信を継続することで、書換クエリＱ１−１〜Ｑ２−２のウィンドウ内にデータを満たすことで第１のサーバ計算機１−１と第２のサーバ計算機１−２の書換クエリのウィンドウを同期させる。【０１１８】
次に、ステップＳ４１では、スケールアウトの対象の第１のサーバ計算機１−１と第２のサーバ計算機１−２が、展開が完了して書換クエリの準備ができたことをそれぞれ運用管理計算機３へ通知する。【０１１９】
運用管理計算機３は、スケールアウトの対象となる新たな計算機の宛先を追加する指令を、ストリーム送受信計算機２に送信する（Ｓ４２）。ストリーム送受信計算機２は、前記図５と同様に、受信した宛先をデータ送信先管理表２０２に追加することでストリームデータの送信先を追加する（Ｓ４３）。【０１２０】
次に、本変形例では、第１のサーバ計算機１−１と第２のサーバ計算機１−２に書換クエリによる処理を開始するタイミングを指示するために、ストリーム送受信計算機２がストリームデータにクエリ切替タプルを挿入する（Ｓ４４）。なお、クエリ切替タプルは、予め設定されたデータを含むタプルである。【０１２１】
次に、ストリーム送受信計算機２は、スケールアウト対象の第１のサーバ計算機１−１と第２のサーバ計算機１−２に、実行するクエリを切り替える切替指令を送信する（Ｓ４５）。新たに追加された第２のサーバ計算機１−２のクエリ処理部１２０は、クエリ内のウィンドウがタプルで満たされているか否かを判定することで、第１及び第２のサーバ計算機１のウィンドウが同期したことを検出する（Ｓ４６）と、第２のサーバ計算機１−２は、切り替えの準備が完了した通知をストリーム送受信計算機２へ送信する（Ｓ４７）。【０１２２】
ストリーム送受信計算機２は、切り替えの準備が完了した通知を受信すると、クエリの切り替えを各サーバ計算機１へ指令する（Ｓ４８）。【０１２３】
そして、第１のサーバ計算機１−１と第２のサーバ計算機１−２は、展開しておいた書換クエリに処理を切り替える（Ｓ４９）。なお、第１のサーバ計算機１−１では、クエリ切替タプルを受信すると、以降のタプルを書換クエリにて処理を開始する。また、第２のサーバ計算機１−２では、書換クエリを起動した後、クエリ切替タプルを受信するまで待機し、クエリ切替タプル以降のタプルについて書換クエリでストリームデータ処理を実行する。【０１２４】
以上のように、本変形例では、ストリーム送受信計算機２がストリームデータの送信を中断することなく、各サーバ計算機１で書き換えるクエリを先に準備しておく。そして、各サーバ計算機１では、書換クエリ内のウィンドウにタプルを充足することで、スケールアウト対象の複数のサーバ計算機１の書換クエリの実行環境を同期させておき、その後、実行するクエリを切り替えることで動的にスケールアウトを実施することがきる。【０１２５】
上記図１４に示した処理は、コールドスタンバイ式と呼ぶ。コールドスタンバイ式では、以上のように運用管理計算機３が書換クエリを生成して、スケールアウト対象のサーバ計算機１へ送信する。そして、サーバ計算機１では書換クエリを展開してからストリームデータを書換クエリ内のウィンドウへ入力し、ウィンドウを充足することで、スケールアウト対象のサーバ計算機１間でウィンドウを同期させる。その後、スケールアウト対象のサーバ計算機１で実行するクエリを切り替えることで、コールドスタンバイ式による動的なスケールアウトを行うことができる。【０１２６】
なお、上記実施例１では、運用管理計算機３は実行タイミングが異なる同一処理内容のクエリを新たなサーバ計算機１に配布して、スケールアウトを行うことで、サーバ計算機１の負荷の平準化や、サーバ計算機１に接続されたネットワーク帯域の平準化を図ることが可能である。また、本実施例１では、複数のサーバ計算機１のクエリの実行タイミングが交互であるため、ストリームデータの処理能力が向上しない場合が生じる。【０１２７】
また、上記実施例１では、２つのサーバ計算機１でスケールアウトを実施する例を示したが、３つ以上のサーバ計算機１でスケールアウトを実施してもよく、サーバ計算機１の数が増えるに連れて、ひとつのサーバ計算機１がクエリの処理（出力）をスキップする間隔または回数は増大することになる。【０１２８】
また、上記実施例１では、クエリ変換テンプレート３１０に予め書換クエリを設定しておく例を示したが、運用管理計算機３は、スケールアウト先のサーバ計算機１の数に応じて、ひとつのサーバ計算機１が書換クエリを実行（または結果を出力）する間隔を変更してもよい。【０１２９】
なお、上記実施例１では、運用管理計算機３は、図１において独立した計算機とした例を示したが、第１のサーバ計算機１−１または第２のサーバ計算機１−２の何れかに含めるようにしてもよい。また、上記実施例１では。ユーザ端末６がストリームデータ処理の結果を利用する例を示したが、これに限定されるものではない。例えば、第１のサーバ計算機１−１及び第２のサーバ計算機１−２の処理結果を、次のストリーム処理計算機群で処理するようにしてもよい。
【実施例２】
【０１３０】
前記実施例１では、第１のサーバ計算機１−１で稼働中のクエリを第２のサーバ計算機１−２へスケールアウトする例を示したが、本実施例２では、クエリを選択してスケールアウトを実施する例を示す。なお、スケールアウトの契機は前記実施例１と同様であり、運用管理計算機３で所定の条件が成立したときや、運用管理計算機３の管理者などがスケールアウトを指令したときである。また、スケールアウト対象のサーバ計算機１は、前記実施例１と同様であり、現用系となる第１のサーバ計算機１−１のクエリを、待機系となる第２のサーバ計算機１−２へスケールアウトする。【０１３１】
図１５、図１６は、本発明の第２の実施例のサーバ計算機１と運用管理計算機３の一例を示すブロック図である。図１の計算機システムのうち、第１のサーバ計算機１−１と第２のサーバ計算機１−２を、図１５のサーバ計算機１−１に置き換え、また、図１の運用管理計算機３を図１６の運用管理計算機３に置き換えるものとする。その他の構成は、前記実施例１と同様である。【０１３２】
図１５は、実施例２の第１のサーバ計算機１−１であり、実施例１と同様に第２のサーバ計算機１−２も同様の構成である。第１のサーバ計算機１−１は、図４に示した実施例１の構成に、クエリ管理部１４０と、サーバ状態表１８０と、クエリ管理表１９０と、クエリ状態表１９５を加えたものである。その他の構成は、前記実施例１と同様である。【０１３３】
クエリ管理部１４０は、ストリームデータ処理プログラム１００のクエリ処理部１２０において実行されるクエリの登録または削除を行う機能と、クエリ文字列（クエリの内容をユーザが理解可能なように、例えばソースコード等により表現されている）からクエリの実行形式（例えば、機械語、マシンが読んで分かる表現形式）を生成する機能と、を有する。【０１３４】
クエリ管理部１４０において、上記クエリ文字列から該クエリの実行形式を生成する手法については、本願出願においては、特に限定するものではなく、公知または周知の手法を用いることができる。【０１３５】
クエリ管理部１４０において、クエリ解析部１５０は、上述したクエリ文字列を解析する機能を有する。即ち、クエリ解析部１５０は、クエリの登録に際して命令受付部１３０から与えられるクエリ文字列を解析し、解析結果を、演算処理実行部１６０に与える。また、クエリ解析部１５０は、スケールアウトの対象となるクエリを選択するクエリ選定部１５１を含む。なお、クエリ選定部１５１によるクエリの選択は、ＣＰＵの利用率やネットワークの利用帯域と予め設定した閾値などに基づいて実施する。【０１３６】
演算処理実行部１６０は、クエリ解析部１５０から与えられるクエリの解析結果を受けて、該解析結果からより効率の良いクエリの実行形式を選択する（即ち、最適化処理を行う）ように機能する。クエリ生成部１７０は、演算処理実行部１６０において選択されたクエリの実行形式を生成する。【０１３７】
クエリ管理部１４０は、サーバ状態表１８０と、クエリ管理表１９０と、クエリ状態表１９５を管理する。【０１３８】
クエリ管理表１９０は、前記実施例１の図８に示した運用管理計算機３のクエリ管理表１９０と同様である。本実施例２では、サーバ計算機１毎に実行するクエリを管理する例を示す。【０１３９】
図１７は、クエリ状態表１９５の一例を示す図である。クエリ状態表１９５は、当該サーバ計算機１で稼働中のクエリの識別子を格納するクエリＩＤ１９５１と、クエリ毎のリソース使用量としてＣＰＵの使用率を格納するＣＰＵ利用率１９５２と、クエリ毎のリソース使用量としてウィンドウで使用しているデータの量を格納するウィンドウ内データ量１９５３と、当該クエリが使用しているネットワークの利用帯域を格納するネットワーク帯域１９５４と、クエリのウィンドウサイズを格納するウィンドウのデータ範囲１９５５と、クエリの処理量を示すデータの入力頻度（個／秒）を格納するデータ入力頻度１９５６と、当該クエリに予め設定された遅延時間の許容値を格納する遅延許容時間１９５７と、を含む。【０１４０】
クエリ管理部１４０は、所定の周期で各クエリの稼働状態を監視し、当該監視結果でクエリ状態表１９５を更新する。ここで、データ入力頻度とは、クエリの処理対象とするストリームデータが、単位時間当たりにサーバ計算機１に入力された個数を表し、クエリの処理量を示す値となる。【０１４１】
図１８は、サーバ状態表１８０の一例を示す図である。サーバ状態表１８０は、図１７のクエリ状態表１９５に、当該サーバ計算機１の識別子を格納するサーバＩＤ１８０１を付加したものである。サーバ状態表１８０は、所定のタイミングで運用管理計算機３へ送信される。【０１４２】
図１６は、実施例２の運用管理計算機３である。運用管理計算機３は、図３に示した実施例１のクエリ生成部３０２、クエリ管理表３０３に代わって、クエリ状態管理部３２０と、クラスタ状態管理部３３０と、クラスタ状態管理表３４０を有する。その他の構成は、前記実施例１と同様である。なお、クエリ状態管理部３２０と、クラスタ状態管理部３３０は、運用管理プログラム３００を構成するプログラムとして中央演算処理装置３２で実行される。【０１４３】
運用管理プログラム３００において、クラスタ状態管理部３３０は、全てのサーバ計算機１上のクエリの状態（即ち、各々のサーバ状態表１８０の内容）を収集する。クラスタ状態管理部３３０は、各サーバ計算機１（図１で示した例では、第１のサーバ計算機１−１と、第２のサーバ計算機１−２）のクエリ管理部１４０の管理下にあるサーバ状態表１８０の内容を収集して、クラスタ状態管理表３４０を生成する。【０１４４】
図１９は、クラスタ状態管理表３４０の一例を示す図である。クラスタ状態管理表３４０は、上記図１８のサーバ状態表１８０をサーバ計算機１のサーバＩＤ毎に結合したものである。クラスタ状態管理表３４０は、サーバ状態表１８０の識別子をサーバ計算機１毎にサーバＩＤ３４５０に設定し、その他は、図１７のクエリ状態表１９５と同様である。図示のクラスタ状態管理表３４０は、スケールアウト後の状態を示す。【０１４５】
クエリ状態管理部３２０は、スケールアウトの際に、現在稼働中のサーバ計算機（図１で示した第１のサーバ計算機１−１）において処理が実行されるべき全てのクエリの中から、新たに追加されたサーバ計算機（図１で示した、第２のサーバ計算機１−２）に追加するクエリを選択する。【０１４６】
すなわち、クエリ状態管理部３２０は、クエリを他のサーバ計算機１へ複製するコスト（複製コスト）を算出し、複製コストに基づいて、第１のサーバ計算機１−１から第２のサーバ計算機１−２へ複製するクエリを選択して実行させる。なお、複製コストは、現在稼働中の第１のサーバ計算機１−１から新たに追加された第２のサーバ計算機１−２へ、書換対象となるクエリが複製される時間（見込み）としてクエリ状態管理部３２０により算出される。複製コストの演算手法は、前記特許文献２に開示された移行コストと同様であるので、ここでは詳述しない。【０１４７】
本実施例２の計算機システムで実施されるスケールアウト処理は、運用管理計算機３が全てのクエリに係わる情報を収集し、収集した情報の中から複製コストを算出し、該算出した複製コストを基に、現用系の第１のサーバ計算機１−１から待機系の第２のサーバ計算機１−２へのクエリの複製時間が短く、且つ、クラスタを組むサーバ計算機１の負荷が均等になるようなクエリを１つ以上選択する。【０１４８】
そして、運用管理計算機３は、選択したクエリを、現用系の第１のサーバ計算機１−１から待機系の第２のサーバ計算機１−２へ複製して、実行タイミングを書き換える。なお、上記選択されたクエリを、現用系の第１のサーバ計算機１−１から待機系の第２のサーバ計算機１−２へ複製する際に、処理の遅延を発生させないようにするため、前記実施例１に示したウォームスタンバイ式ではなく、前記実施例１の変形例に示したコールドスタンバイ式によるクエリの複製処理が行われる。【０１４９】
次に、上述したスケールアウト処理の具体的な手順について説明する。【０１５０】
図２０は、スケールアウト処理の一例を示すフローチャートである。この処理は、スケールアウトの契機となったときに運用管理計算機３で実行される。【０１５１】
図２０において、運用管理プログラム３００を実行する運用管理計算機３が、各サーバ計算機１からサーバ状態表１８０を取得する（Ｓ１０１）。次に、運用管理計算機３は、取得したサーバ状態表１８０を結合してクラスタ状態管理表３４０を生成する（Ｓ１０２）。【０１５２】
次に、運用管理計算機３は、現用系の第１のサーバ計算機１−１から待機系の第２のサーバ計算機１−２へ複製するスケールアウト処理の複製コストをクエリ毎に算出する（Ｓ１０３）。【０１５３】
運用管理計算機３は、クエリ選択処理を実行する。クエリ選択処理の詳細については、前記特許文献２と同様であるので、ここでは詳述しない。クエリ選択処理により、例えば、クエリＩＤが「Ｑ１」及び「Ｑ２」のクエリがそれぞれスケールアウト対象のクエリとして選択される（ステップＳ１０４）。【０１５４】
上記クエリ選択処理が完了すると、運用管理計算機３は、ステップＳ１０５〜Ｓ１０７のループ処理によって、上記選択したクエリ毎にスケールアウト処理が実行される。【０１５５】
以上の処理によって、スケールアウト作業が完了し、現用系の第１のサーバ計算機１−１と、待機系の第２のサーバ計算機１−２では、クエリＱ１、Ｑ２の処理が交互に実行され、ストリームデータ処理の結果がユーザ端末６へ出力される。【０１５６】
上記クエリ選択処理では、待機系の第２のサーバ計算機１−２におけるＣＰＵ使用率と、リソース使用量目標値として予め設定された閾値との間に、
ＣＰＵ使用率≧リソース使用量目標値
という関係が成立すると判定されるまで、複製時間の短いクエリの選択が繰り返される。【０１５７】
本実施例においては、リソース使用量目標値を、例えば、５０％として運用管理計算機３で上記複製クエリ選択処理を開始する。運用管理計算機３は、複製時間の最も短いクエリであるクエリＱ２が、移行クエリとして選択する。これにより、現用系のサーバ計算機である第１のサーバ計算機１−１における合計ＣＰＵ使用率は、８０％になり、待機系の第２のサーバ計算機１−２における合計ＣＰＵ使用率は、２０％になる（図１８、図１９参照）。【０１５８】
ここで、待機系の第２のサーバ計算機１−２における合計ＣＰＵ使用率（２０％）が、リソース使用量目標値である５０％を超えていないため、運用管理計算機３は、再度、スケールアウト対象のクエリとして選択されていないクエリの中から、複製時間（見込み）が最も短いクエリをスケールアウト対象のクエリとして選択する。即ち、複製時間がクエリＱ２の次に短いクエリＱ１がスケールアウト対象のクエリとして選択される。上記処理の結果、第１のサーバ計算機１−１における合計ＣＰＵ使用率と第２のサーバ計算機１−２における合計ＣＰＵ使用率は、共に５０％になる（図１９参照）。【０１５９】
運用管理計算機３は、第２のサーバ計算機１−２における合計ＣＰＵ使用率がリソース使用量目標値である５０％に達したので、スケールアウト対象のクエリ選択処理の処理を終了する。上記処理の結果として、第１のサーバ計算機１−１から第２のサーバ計算機１−２へスケールアウトされるクエリとして、クエリＱ１及びクエリＱ２が選択されたことになる。【０１６０】
図２１は、計算機システムで行われるスケールアウト処理の一例を示すシーケンス図である。ステップＳ１０５〜Ｓ１０７で行われるスケールアウト処理の詳細について以下に説明する。【０１６１】
ステップＳ１１は、前記実施例１に示した図５と同様であり、運用管理計算機３がスケールアウトの要求を生成する。そして、ステップＳ１１Ａでは、運用管理計算機３が上記図２０のステップＳ１０４の処理によってスケールアウト対象のクエリを選択する。【０１６２】
ステップＳ１１は、前記実施例１に示した図５と同様であり、運用管理計算機３がクエリ変換テンプレート３１０を参照して書換クエリを生成する。そして、運用管理計算機３は、書換クエリを含むスケールアウトの指令をスケールアウト対象の第１のサーバ計算機１−１と第２のサーバ計算機１−２に送信する。【０１６３】
本実施例２では、以降の処理が前記変形例の図１４と同様であり、ストリーム送受信計算機２はストリームデータの送信を中断せず、第１のサーバ計算機１−１へストリームデータの送信を継続する。【０１６４】
本実施例２では、運用管理計算機３がスケールアウト対象のクエリを選択して書換クエリを生成し、スケールアウト対象のサーバ計算機１へ書換クエリを送信する。そして、ストリーム送受信計算機２がストリームデータの送信を継続し、各サーバ計算機１では、書換クエリ内のウィンドウにタプルを充足することで、スケールアウト対象の複数のサーバ計算機１間で書換クエリの実行環境を同期させておき、その後、実行するクエリを切り替えることで動的にスケールアウトを実施することがきる。
【実施例３】
【０１６５】
前記実施例２では、運用管理計算機３でスケールアウト対象のクエリを選択する例を示したが、本実施例３では、スケールアウト対象のクエリをサーバ計算機１で選択する例を示す。なお、その他の構成については前記実施例２と同様である。【０１６６】
図２２は、本発明の第３の実施例を示し、サーバ計算機の一例を示すブロック図である。図示の例は第１のサーバ計算機１−１を示すが、第２のサーバ計算機１−２も同様の構成であるので、重複する説明は省略する。実施例３のサーバ計算機１は、主記憶装置１１にクエリ変換テンプレート３１０Ａと、クラスタ状態管理表３４０Ａを加えた点が、前記実施例２との相違点である。その他の構成は、前記実施例２と同様である。クエリ変換テンプレート３１０Ａは、運用管理計算機３が保持するクエリ変換テンプレート３１０の複製である。また、クラスタ状態管理表３４０Ａは、運用管理計算機３が保持するクラスタ状態管理表３４０と同様の構成である。【０１６７】
図２３は、計算機システムで行われるスケールアウト処理の一例を示すシーケンス図である。【０１６８】
ステップＳ１１は、前記実施例１に示した図５と同様であり、運用管理計算機３がスケールアウトの要求を生成する。次に、ステップＳ１３Ｂでは、運用管理計算機３がスケールアウトの指令を、スケールアウト対象の第１のサーバ計算機１−１と第２のサーバ計算機１−２に送信する。なお、第２のサーバ計算機１−２は、予め待機系として設定されたサーバ計算機１である。【０１６９】
第１のサーバ計算機１−１の命令受付部１３０は、運用管理計算機３からのスケールアウト指令を受信すると、クエリ管理部１４０に対してクエリの書換の指示を送信する（Ｓ５３）。【０１７０】
書換の指示を受信したクエリ管理部１４０は、スケールアウト対象のクエリを選択する（Ｓ５４）。スケールアウト対象のクエリの選択は、前記実施例２の図２０に示したステップＳ１０１〜Ｓ１０４と同様の処理をクエリ管理部１４０で実施する。すなわち、クエリ管理部１４０は、クラスタ状態管理表３４０Ａを生成し、クラスタ状態管理表３４０Ａから実行中のクエリについてスケールアウトのコストを算出する（Ｓ１０３）。そして、スケールアウトのコストの低い順にクエリを選択してリソース使用量目標値の条件を満たすか否かを判定し、リソース使用量目標値の条件を満たすクエリをスケールアウト対象のクエリとして選択する（Ｓ１０４）。【０１７１】
次に、クエリ管理部１４０は、クエリ変換テンプレート３１０Ａを参照して、選択されたクエリの実行タイミングを書き換えた書換クエリを生成する（Ｓ５６）。クエリ管理部１４０は、生成した書換クエリをクエリ処理部１２０に送信する（Ｓ５６）。クエリ処理部１２０は、受信した書換クエリを展開して新たなストリームデータ処理の準備を実施する（Ｓ５７）。【０１７２】
書換クエリの展開が完了すると、クエリ処理部１２０は命令受付部１３０へ書換クエリの準備が完了した通知を送信する（Ｓ５８）。【０１７３】
待機系の第２のサーバ計算機１−２においても、前記ステップＳ５３〜Ｓ５８の処理が実行され、書換クエリが展開される。なお、図９で示したように、第２のサーバ計算機１−２は、クエリ変換テンプレート３１０Ａの対象ノード３１０４が第１のサーバ計算機１−１に対して異なるので、実行タイミングの異なる書換クエリが生成される。【０１７４】
第２のサーバ計算機１−２の命令受付部１３０は、書換クエリの準備が完了すると、第１のサーバ計算機１−１に書換クエリの準備が完了した通知を送信する（Ｓ６０）。第１のサーバ計算機１−１の命令受付部１３０は、スケールアウト対象のサーバ計算機１で書換クエリの準備が完了したことを運用管理計算機３へ通知する（Ｓ６１）。【０１７５】
運用管理計算機３は、スケールアウトの対象となる新たな計算機の宛先を追加する指令を、ストリーム送受信計算機２に送信する（Ｓ６２）。ストリーム送受信計算機２は、前記実施例１の図５と同様に、受信した宛先をデータ送信先管理表２０２に追加することで新たなストリームデータの送信先を追加する（Ｓ６３）。【０１７６】
次に、スケールアウト対象のサーバ計算機１に書換クエリを起動するタイミングを指示するため、ストリーム送受信計算機２はストリームデータにクエリ切替タプルを挿入する（Ｓ６４）。【０１７７】
次に、ストリーム送受信計算機２は、スケールアウト対象の第１のサーバ計算機１−１と第２のサーバ計算機１−２に、実行するクエリを切り替える切替指令を送信する（Ｓ６５）。【０１７８】
第１のサーバ計算機１−１と第２のサーバ計算機１−２は、展開しておいた書換クエリに切り替えて、ストリームデータ処理を開始する（Ｓ６６）。なお、第１のサーバ計算機１−１では、クエリ切替タプルを受信すると、以降のタプルを書換クエリにて処理を開始する。また、第２のサーバ計算機１−２では、書換クエリを起動した後、クエリ切替タプルを受信するまで待機し、クエリ切替タプル以降のタプルについて書換クエリでストリームデータ処理を実行する。【０１７９】
以上のように、本実施例３においても、スケールアウト対象のクエリをサーバ計算機１−２で選択して、動的にスケールアウト処理を実行することができるのである。【０１８０】
図２４、図２５は、第３の実施例の変形例を示し、計算機システムで行われるスケールアウト処理の一例を示すシーケンス図である。なお、図２４は、計算機システムで行われるスケールアウト処理の一例を示すシーケンス図の前半部である。また、図２５は、計算機システムで行われるスケールアウト処理の一例を示すシーケンス図の後半部である。【０１８１】
図２４、図２５は、上記図２３のコールドスタンバイ式の処理を、前記実施例１の図５に示したウォームスタンバイ式に変更したものである。【０１８２】
ステップＳ１１は、前記実施例１に示した図５と同様であり、運用管理計算機３がスケールアウトの要求を生成する。次に、ステップＳ１３Ｃでは、運用管理計算機３がスケールアウトの指令を、スケールアウト対象の第１のサーバ計算機１−１と第２のサーバ計算機１−２及びストリーム送受信計算機２に送信する。なお、第２のサーバ計算機１−２は、予め待機系として設定されたサーバ計算機１である。【０１８３】
ステップＳ１４では、ストリーム送受信計算機２が、スケールアウトの指令を受信すると、第１のサーバ計算機１−１へ送信していたストリームデータのバッファリングを開始して、第１のサーバ計算機１−１へのストリームデータの送信を一時的に停止する。【０１８４】
ステップＳ５３〜Ｓ６１は上記図２３と同様であり、第１のサーバ計算機１−１と第２のサーバ計算機１−２のクエリ管理部１４０がスケールアウト対象のクエリを選択して書換クエリを生成し、書換クエリの展開を完了させる。【０１８５】
書換クエリの展開が完了した後、第１のサーバ計算機１−１のクエリ処理部１２０は、現在のクエリのウィンドウの状態を読み出す（Ｓ７０）。クエリ処理部１２０は、読み出したウィンドウの情報を命令受付部１３０へ通知する。命令受付部１３０は、第２のサーバ計算機１−２の命令受付部１３０へウィンドウの複製指令を送信する（Ｓ７１）。【０１８６】
ステップＳ７０〜Ｓ７６では、前記実施例１の図５に示したステップＳ２２〜Ｓ２８と同様であり、第２のサーバ計算機１−２の命令受付部１３０は、第１のサーバ計算機１−１から受信したウィンドウ内のデータをクエリ処理部１２０に送信して、書換クエリ内のウィンドウの内容を、第１のサーバ計算機１−１のウィンドウの複製に置き換えて同期させる。【０１８７】
上記処理により、第１のサーバ計算機１−１と第２のサーバ計算機１−２は、実行タイミングのみが異なる同じクエリ（書換クエリ）が設定され、また、クエリのウィンドウは同期した状態となる。第１のサーバ計算機１−１の命令受付部１３０は、クエリ処理部１２０に対して、実行中のクエリを、展開しておいた書換クエリに切り替える指示を出力する（Ｓ７７）。クエリ処理部１２０は、実行中のクエリを停止して、展開しておいた書換クエリに切り替える（Ｓ７８）。【０１８８】
次に、第１のサーバ計算機１−１の命令受付部１３０は、運用管理計算機３に対して書換クエリの実行準備が完了したことを通知する（Ｓ７９）。運用管理計算機３は、スケールアウトの対象となる新たな計算機の宛先を追加する指令を、ストリーム送受信計算機２に送信する（Ｓ８０）。【０１８９】
ストリーム送受信計算機２は、受信した宛先をデータ送信先管理表２０２に加えることで、ストリームデータの送信を追加する（Ｓ８１）。そして、ストリーム送受信計算機２は、ストリームデータのバッファリングを解除して、第１のサーバ計算機１−１に加えて第２のサーバ計算機１−２にもストリームデータの送信を実施する。【０１９０】
以上の処理により、サーバ計算機１でスケールアウト対象のクエリを選択してからウォームスタンバイ式によって動的なスケールアウトを実施することができる。【０１９１】
＜まとめ＞
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。【０１９２】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。【０１９３】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。【０１９４】
＜補足＞
データソースからストリームデータを受信してクエリを実行する第１の計算機に、前記クエリを実行する第２の計算機を追加する計算機のスケールアウト方法であって、
前記第１の計算機と第２の計算機に接続された管理計算機が、スケールアウトの要求を受け付ける第１のステップと、
前記管理計算機が、前記第１の計算機と第２の計算機にスケールアウトを指令する第２のステップと、
前記第１の計算機と前記第２の計算機が、前記クエリの実行タイミングを書き換えた前記クエリの複製として書換クエリをそれぞれ生成する第３のステップと、
前記第１の計算機及び第２の計算機が、前記書換クエリに切り替える第４のステップと、
前記第１の計算機または第２の計算機が、前記管理計算機へ前記書換クエリの準備が完了したことを通知する第５のステップと、
前記管理計算機が、前記データソースに前記ストリームデータの送信先として前記第２の計算機を追加させる指令を送信し、前記第１の計算機と第２の計算機へ同一のストリームデータを送信させる第６のステップと、
を含むことを特徴とする計算機のスケールアウト方法。
【図１】
2017072938.tif 000003
【図２】
2017072938.tif 000004
【図３】
2017072938.tif 000005
【図４】
2017072938.tif 000006
【図５】
2017072938.tif 000007
【図６】
2017072938.tif 000008
【図７】
2017072938.tif 000009
【図８】
2017072938.tif 000010
【図９】
2017072938.tif 000011
【図１０】
2017072938.tif 000012
【図１１】
2017072938.tif 000013
【図１２】
2017072938.tif 000014
【図１３】
2017072938.tif 000015
【図１４】
2017072938.tif 000016
【図１５】
2017072938.tif 000017
【図１６】
2017072938.tif 000018
【図１７】
2017072938.tif 000019
【図１８】
2017072938.tif 000020
【図１９】
2017072938.tif 000021
【図２０】
2017072938.tif 000022
【図２１】
2017072938.tif 000023
【図２２】
2017072938.tif 000024
【図２３】
2017072938.tif 000025
【図２４】
2017072938.tif 000026
【図２５】
2017072938.tif 000027
【国際調査報告】
2017072938.tif 000028
2017072938.tif 000029
2017072938.tif 000030
2017072938.tif 000031