(57)【要約】  ストリームデータ処理を実行する複数の計算機、及び複数の計算機に分割クエリを割り当てる管理計算機を含む計算機システムであって、管理計算機は、複数のクエリを含む分析シナリオ、及び分析シナリオを複数の分割クエリに分割するための分割情報を受け付けるパラメータ入力部と、分析シナリオを解析することによってクエリグラフを生成するクエリ解析部と、を有し、クエリ解析部は、分析シナリオ及び分割情報に基づいて、フロー制御が必要な分割クエリを特定し、フロー制御が必要な分割クエリを複数の計算機に割り当てる場合、フロー制御が必要な分割クエリを割り当てる複数の計算機に対してフロー制御の設定を行う。
2017168497.tif 000002
【特許請求の範囲】
【請求項１】
ストリームデータ処理を実行する複数の計算機、及び前記複数の計算機に一つ以上のクエリを含む複数の分割クエリを割り当てる管理計算機を含む計算機システムであって、
前記複数の計算機の各々は、第１プロセッサ、前記第１プロセッサに接続される第１メモリ、及び前記第１プロセッサに接続され、外部装置と接続するための第１インタフェースを有し、
前記管理計算機は、第２プロセッサ、前記第２プロセッサに接続される第２メモリ、及び前記第２プロセッサに接続され、外部装置と接続するための第２インタフェースを有し、
前記管理計算機は、
前記ストリームデータ処理を実現するための複数のクエリを含む分析シナリオ、及び前記分析シナリオを前記複数の分割クエリに分割するための分割情報を受け付けるパラメータ入力部と、
前記分析シナリオを解析することによって、前記分析シナリオに含まれる前記複数のクエリの構成を示すクエリグラフを生成するクエリ解析部と、を有し、
前記クエリ解析部は、
前記分析シナリオ及び前記分割情報に基づいて、前記クエリによって処理されるデータの発生順番及び当該データの受信順番を整合させるためのフロー制御が必要な分割クエリを特定し、
前記フロー制御が必要な分割クエリを前記複数の計算機に割り当てる場合、前記フロー制御が必要な分割クエリが割り当てられる複数の計算機に対して前記フロー制御の設定を行うことを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記クエリ解析部は、前記複数の分割クエリの各々を、前記フロー制御が必要な分割クエリとして特定することを特徴とする計算機システム。
【請求項３】
請求項１に記載の計算機システムであって、
前記クエリは、一つ以上のオペレータを含み、
前記クエリ解析部は、前記オペレータの種別、及び前記フロー制御の要否を示す第１フラグが対応付けられたエントリを含むオペレータ種別情報を保持し、
前記クエリ解析部は、前記オペレータ種別情報を参照して、前記複数のクエリの中から、前記フロー制御が必要なオペレータが含まれるクエリを含む第１分割クエリを検索し、
前記第１分割クエリを前記フロー制御が必要な分割クエリとして特定することを特徴とする計算機システム。
【請求項４】
請求項３に記載の計算機システムであって、
前記クエリ解析部は、
前記第１分割クエリが検索された場合、前記クエリグラフを参照して、前記第１分割クエリが処理するデータの入力元となる分割クエリを検索し、
前記検索された分割クエリを前記フロー制御が必要な分割クエリとして特定することを特徴とする計算機システム。
【請求項５】
請求項３に記載の計算機システムであって、
前記クエリは、一つ以上のオペレータを含み、
前記クエリ解析部は、前記クエリの識別情報、及び前記クエリに入力され、任意の識別情報に基づいて集約された集約データの経路が一つであるか否かを示す第２フラグが対応付けられたエントリを含む経路情報を保持し、
前記オペレータ種別情報に含まれる前記エントリは、前記経路情報の参照の要否を示す第３フラグが対応付けられ、
前記クエリ解析部は、
前記オペレータ種別情報を参照して、前記複数のクエリの中から、前記フロー制御が必要であり、かつ、前記経路情報の参照が必要でないオペレータが含まれるクエリを含む第２分割クエリを検索し、
前記オペレータ種別情報及び前記経路情報を参照して、前記複数のクエリの中から、前記フロー制御が必要であり、かつ、前記集約データの経路が一つであるクエリを含む第３分割クエリを検索し、
前記第２分割クエリ及び前記第３分割クエリを前記フロー制御が必要な分割クエリとして特定することを特徴とする計算機システム。
【請求項６】
請求項１に記載の計算機システムであって、
前記複数の計算機は、
データを受信するデータ受信部と、
前記データ受信部が受信したデータを前記分割クエリに基づいて処理するクエリ処理部と、
前記クエリ処理部の処理結果を送信するデータ送信部と、を有し、
前記フロー制御が設定された前記分割クエリが割り当てられた前記データ受信部は、前記フロー制御を実行するフロー制御部を含み、
前記フロー制御部は、一時的に前記データを格納するデータ保存部を含み、
前記フロー制御部は、
前記データ受信部が前記データを受信した場合、前記受信したデータに含まれる時刻を取得し、
前記受信したデータから取得した時刻が所定の期間に含まれるか否かを判定し、
前記受信したデータから取得された時刻が前記所定の期間に含まれる場合、前記受信したデータを前記データ保存部に格納し、
前記受信したデータから取得された時刻が前記所定の期間に含まれない場合、前記データ保存部に格納されるデータを時系列順にソートし、前記ソートされたデータを前記クエリ処理部に出力することを特徴とする計算機システム。
【請求項７】
請求項１に記載の計算機システムであって、
前記複数の計算機は、
データを受信するデータ受信部と、
前記データ受信部が受信したデータを前記分割クエリに基づいて処理するクエリ処理部と、
前記クエリ処理部の処理結果を送信するデータ送信部と、を有し、
前記管理計算機は、前記フロー制御が設定された前記分割クエリを前記計算機に割り当てる場合に、前記フロー制御を実行するフロー制御部を前記データ受信部に設定することを特徴とする計算機システム。
【請求項８】
請求項１に記載の計算機システムであって、
前記複数の計算機は、
データを受信するデータ受信部と、
前記データ受信部が受信したデータを前記分割クエリに基づいて処理するクエリ処理部と、
前記クエリ処理部の処理結果を送信するデータ送信部と、を有し、
前記データ受信部は、非活性化状態の前記フロー制御を実行するフロー制御部を含み、
前記管理計算機は、前記フロー制御が設定された前記分割クエリを割り当てる場合に、前記フロー制御部を活性状態に設定することを特徴とする計算機システム。
【請求項９】
ストリームデータ処理を実行する複数の計算機、及び前記複数の計算機に一つ以上のクエリを含む複数の分割クエリを割り当てる管理計算機を含む計算機システムにおけるストリームデータ処理システムの設定方法であって、
前記複数の計算機の各々は、第１プロセッサ、前記第１プロセッサに接続される第１メモリ、及び前記第１プロセッサに接続され、外部装置と接続するための第１インタフェースを有し、
前記管理計算機は、第２プロセッサ、前記第２プロセッサに接続される第２メモリ、及び前記第２プロセッサに接続され、外部装置と接続するための第２インタフェースを有し、
前記管理計算機は、
前記ストリームデータ処理を実現するための複数のクエリを含む分析シナリオ、及び前記分析シナリオを前記複数の分割クエリに分割するための分割情報を受け付けるパラメータ入力部と、
前記分析シナリオを解析することによって、前記分析シナリオに含まれる前記複数のクエリの構成を示すクエリグラフを生成するクエリ解析部と、を有し、
前記クエリ解析部が、前記分析シナリオ及び前記分割情報に基づいて、前記クエリによって処理されるデータの発生順番及び当該データの受信順番を整合させるためのフロー制御が必要な分割クエリを特定する第１のステップと、
前記クエリ解析部が、前記フロー制御が必要な分割クエリを前記複数の計算機に割り当てる場合、前記フロー制御が必要な分割クエリが割り当てられる複数の計算機に対して前記フロー制御の設定を行う第２のステップと、を含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１０】
請求項９に記載のストリームデータ処理システムの設定方法であって、
前記第１のステップは、前記クエリ解析部が、前記複数の分割クエリの各々を、前記フロー制御が必要な分割クエリとして特定するステップを含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１１】
請求項９に記載のストリームデータ処理システムの設定方法であって、
前記クエリは、一つ以上のオペレータを含み、
前記クエリ解析部は、前記オペレータの種別、及び前記フロー制御の要否を示す第１フラグが対応付けられたエントリを含むオペレータ種別情報を保持し、
前記第１のステップは、
前記クエリ解析部が、前記オペレータ種別情報を参照して、前記複数のクエリの中から、前記フロー制御が必要なオペレータが含まれるクエリを含む第１分割クエリを検索する第３のステップと、
前記クエリ解析部が、前記第１分割クエリを前記フロー制御が必要な分割クエリとして特定する第４のステップと、を含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１２】
請求項１１に記載のストリームデータ処理システムの設定方法であって、
前記第４のステップは、
前記クエリ解析部が、前記クエリグラフを参照して、前記第１分割クエリが処理するデータの入力元となる分割クエリを検索するステップと、
前記クエリ解析部が、前記検索された分割クエリを前記フロー制御が必要な分割クエリとして特定するステップと、を含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１３】
請求項１１に記載のストリームデータ処理システムの設定方法であって、
前記クエリは、一つ以上のオペレータを含み、
前記クエリ解析部は、前記クエリの識別情報、及び前記クエリに入力され、任意の識別情報に基づいて集約された集約データの経路が一つであるか否かを示す第２フラグが対応付けられたエントリを含む経路情報を保持し、
前記オペレータ種別情報に含まれる前記エントリは、前記経路情報の参照の要否を示す第３フラグが対応付けられ、
前記第１のステップは、
前記クエリ解析部が、前記オペレータ種別情報を参照して、前記複数のクエリの中から、前記フロー制御が必要であり、かつ、前記経路情報の参照が必要でないオペレータが含まれるクエリを含む第２分割クエリを検索するステップと、
前記クエリ解析部が、前記オペレータ種別情報及び前記経路情報を参照して、前記複数のクエリの中から、前記フロー制御が必要であり、かつ、前記集約データの経路が一つであるクエリを含む第３分割クエリを検索するステップと、
前記クエリ解析部が、前記第２分割クエリ及び前記第３分割クエリを前記フロー制御が必要な分割クエリとして特定するステップと、を含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１４】
請求項９に記載のストリームデータ処理システムの設定方法であって、
前記複数の計算機は、
データを受信するデータ受信部と、
前記データ受信部が受信したデータを前記分割クエリに基づいて処理するクエリ処理部と、
前記クエリ処理部の処理結果を送信するデータ送信部と、を有し、
前記フロー制御が設定された前記分割クエリが割り当てられた前記データ受信部は、前記フロー制御を実行するフロー制御部を含み、
前記フロー制御部は、一時的に前記データを格納するデータ保存部を含み、
前記ストリームデータ処理システムの設定方法は、
前記フロー制御部が、前記データ受信部が前記データを受信した場合、前記受信したデータに含まれる時刻を取得するステップと、
前記フロー制御部が、前記受信したデータから取得した時刻が所定の期間に含まれるか否かを判定するステップと、
前記フロー制御部が、前記受信したデータから取得された時刻が前記所定の期間に含まれる場合、前記受信したデータを前記データ保存部に格納するステップと、
前記フロー制御部が、前記受信したデータから取得された時刻が前記所定の期間に含まれない場合、前記データ保存部に格納されるデータを時系列順にソートし、前記ソートされたデータを前記クエリ処理部に出力するステップと、を含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１５】
請求項９に記載のストリームデータ処理システムの設定方法であって、
前記複数の計算機は、
データを受信するデータ受信部と、
前記データ受信部が受信したデータを前記分割クエリに基づいて処理するクエリ処理部と、
前記クエリ処理部の処理結果を送信するデータ送信部と、を有し、
前記第２のステップは、前記クエリ解析部が、前記フロー制御を実行するフロー制御部を前記データ受信部に設定するステップを含むことを特徴とするストリームデータ処理システムの設定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フロー制御を組み込んだ分散型のストリームデータ処理システムの設定方法に関する。
【背景技術】
【０００２】
近年、リアルタイムにデータを集計し、また、分析することを可能とするストリームデータ処理システムが注目されている。ここで、ストリームデータとは、途切れることなく到来するデータ列である。ＩｏＴ時代では、システムの改善等のために様々な機器から取得されたデータの分析に、分散型のストリームデータ処理システムの利用が期待される。【０００３】
分散型のストリームデータ処理システムでは、分析処理等を構成する複数のクエリが複数の計算機に配置され、各計算機によってクエリが実行される。ネットワークの接続関係及び計算機の配置等によって、データの発生順番とデータの受信順番とが一致していない場合がある。【０００４】
実行される複数のクエリの中には、時系列順にデータを処理する必要があるクエリが含まれる。データの発生順番及びデータの受信順番が異なる場合、誤った処理結果が出力される。そのため、処理結果の整合性を保証するためには、データの発生順番及びデータの受信順番を整合させる仕組みが必要である。【０００５】
これを解決するための手段として特許文献１に記載されているような技術が知られている。特許文献１には、グループ単位に処理を分割できる集計処理において、実行モジュールが、タプル時刻に基づいて集計処理を分割し、分割時刻を後段の計算機における集計処理時刻として用いることが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開第２０１１／００９３４９１号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載の技術は、集計処理に限定されており、分割時刻が通信の遅延時間より細かい粒度の場合、データの発生順番及びデータの受信順番の不一致が発生する。また、特許文献１に記載の技術は、分散型のストリームデータ処理システムへの適応を前提としていない。【０００８】
そのため、従来、管理者等は、データの発生順番及びデータの受信順番の不一致を解消するために、通信の遅延時間、各クエリ間の接続、及び入出力されるデータの関係等を考慮して、データの発生順番及びデータの受信順番を整合させるためのクエリ及びデータを受信するソフトウェアを開発する必要があった。そのため、分散型のストリーム処理システムの設定に必要なコストが大きくなるという問題がある。【０００９】
本発明は、容易に、かつ、処理結果の整合性が保たれた分散型のストリームデータ処理システムの設定を実現するシステム及び方法を提供する。
【課題を解決するための手段】
【００１０】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、ストリームデータ処理を実行する複数の計算機、及び前記複数の計算機に一つ以上のクエリを含む複数の分割クエリを割り当てる管理計算機を含む計算機システムであって、前記複数の計算機の各々は、第１プロセッサ、前記第１プロセッサに接続される第１メモリ、及び前記第１プロセッサに接続され、外部装置と接続するための第１インタフェースを有し、前記管理計算機は、第２プロセッサ、前記第２プロセッサに接続される第２メモリ、及び前記第２プロセッサに接続され、外部装置と接続するための第２インタフェースを有し、前記管理計算機は、前記ストリームデータ処理を実現するための複数のクエリを含む分析シナリオ、及び前記分析シナリオを前記複数の分割クエリに分割するための分割情報を受け付けるパラメータ入力部と、前記分析シナリオを解析することによって、前記分析シナリオに含まれる前記複数のクエリの構成を示すクエリグラフを生成するクエリ解析部と、を有し、前記クエリ解析部は、前記分析シナリオ及び前記分割情報に基づいて、前記クエリによって処理されるデータの発生順番及び当該データの受信順番を整合させるためのフロー制御が必要な分割クエリを特定し、前記フロー制御が必要な分割クエリを前記複数の計算機に割り当てる場合、前記フロー制御が必要な分割クエリが割り当てられる複数の計算機に対して前記フロー制御の設定を行うことを特徴とする。
【発明の効果】
【００１１】
本発明によれば、管理計算機は、入力された情報に基づいてクエリの処理結果の整合性が保証された分散型のストリームデータ処理システムを設定することができる。前述した以外の課題、構成及び効果は、以下の実施例の説明によって明らかにされる。
【図面の簡単な説明】
【００１２】
【図１】実施例１の計算機システムの構成の一例を示す図である。
【図２】実施例１のクエリ振り分け計算機及びストリームデータ処理計算機のソフトウェア構成の一例を示す図である。
【図３】実施例１のクエリ解析部の処理の流れを示す図である。
【図４】実施例１のクエリグラフ管理情報の一例を示す図である。
【図５】実施例１の分割クエリ管理情報の一例を示す図である。
【図６】実施例１の分割情報を含む分析シナリオの一例を示す図である。
【図７】実施例１のオペレータ種別情報の一例を示す図である。
【図８】実施例１の経路情報の一例を示す図である。
【図９】実施例１の経路情報を含む分析シナリオの一例を示す図である。
【図１０】実施例１のクエリ解析部が実行する処理の一例を説明するフローチャートである。
【図１１】実施例１のフロー制御の要否判定処理の一例を説明するフローチャートである。
【図１２】実施例１のクエリ実行部が実行する処理の一例を説明するフローチャートである。
【図１３】実施例１のフロー制御部が実行するフロー制御処理の一例を説明するフローチャートである。
【図１４】実施例２のフロー制御の要否判定処理の一例を説明するフローチャートである。
【図１５Ａ】実施例３のフロー制御の要否判定処理の一例を説明するフローチャートである。
【図１５Ｂ】実施例３のフロー制御の要否判定処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明の実施例について図面を参照して詳細に説明する。
【実施例１】
【００１４】
図１は、実施例１の計算機システムの構成の一例を示す図である。【００１５】
実施例１の計算機システムは、クエリ振り分け計算機１００、複数のストリームデータ処理計算機１２０、複数のデータ送信計算機１４０、及びデータ受信計算機１６０から構成される。本実施例では、複数のストリームデータ処理計算機１２０を用いて分散型のストリームデータ処理システムが構築される。なお、データ受信計算機１６０は、複数存在してもよい。【００１６】
クエリ振り分け計算機１００は、ネットワーク１８１を介して複数のストリームデータ処理計算機１２０と接続する。また、複数のデータ送信計算機１４０及びデータ受信計算機１６０は、それぞれ、ネットワーク１８２を介して複数のストリームデータ処理計算機１２０と接続する。なお、本実施例はネットワーク１８１、１８２の種別に限定されない。ネットワーク１８１、１８２は、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）及びＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等が考えられる。また、本実施例は、各装置とネットワーク１８１、１８２との間の接続形式に限定されず、無線又は有線のいずれでもよい。【００１７】
クエリ振り分け計算機１００は、分析シナリオ２０１（図２参照）を受け付け、分析シナリオ２０１に基づいて複数のクエリから構成されるクエリグラフ３０１（図３参照）を生成する。また、クエリ振り分け計算機１００は、クエリグラフ３０１を分割することによって複数の分割クエリ２２０（図２参照）を生成し、複数のストリームデータ処理計算機１２０に複数の分割クエリ２２０を割り当てる。【００１８】
ここで、分割クエリ２２０は、分析シナリオ２０１に基づいて生成されたクエリグラフ３０１を分割することによって生成されるクエリ群である。分割クエリ２２０には、少なくとも一つのクエリが含まれる。【００１９】
クエリ振り分け計算機１００は、ハードウェア構成として、ＣＰＵ１０１、メモリ１０２、ストレージ装置１０３、ネットワークインタフェース１０４、及び入出力装置１０５を備える。なお、クエリ振り分け計算機１００は、ストレージ装置１０３及び入出力装置１０５を備えていなくてもよい。【００２０】
ＣＰＵ１０１は、メモリ１０２に格納されるプログラムを実行する演算装置である。ＣＰＵ１０１がプログラムを実行することによって、クエリ振り分け計算機１００が有する機能が実現される。以下の説明では、機能部を主語にして処理を説明する場合、ＣＰＵ１０１が当該機能部を実現するプログラムを実行していることを示す。【００２１】
メモリ１０２は、ＣＰＵ１０１が実行するプログラム及び当該プログラムによって使用される情報を格納する記憶装媒体である。メモリ１０２に格納されるプログラム及び情報については後述する。ストレージ装置１０３は、プログラム及び情報を格納する記憶媒体である。ストレージ装置１０３は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）又はＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶媒体が考えられる。なお、本実施例は記憶媒体の種類に限定されない。【００２２】
ネットワークインタフェース１０４は、ネットワークを介して他の装置と接続するためのインタフェースである。入出力装置１０５は、クエリ振り分け計算機１００に各種データを入力し、また、処理結果等を出力するためのインタフェースである。入出力装置１０５は、キーボード、マウス、タッチパネル、及びディスプレイ等を含む。【００２３】
ここで、メモリ１０２に格納されるプログラムについて説明する。メモリ１０２は、パラメータ入力部１１１及びクエリ解析部１１２を実現するプログラムを格納する。【００２４】
パラメータ入力部１１１は、クエリ振り分け計算機１００に対する各種パラメータ及び情報を受け付ける。クエリ解析部１１２は、分析シナリオ２０１（図２参照）の解析、及び分割クエリ２２０（図２参照）の割り当てを行う。【００２５】
本実施例のクエリ解析部１１２は、フロー制御が必要な分割クエリ２２０を特定することを特徴とする。ここで、フロー制御は、データの発生順番及びデータの受信順番を整合させるための制御を表す。これによって、処理結果の整合性を保証することができる。【００２６】
クエリ振り分け計算機１００のソフトウェア構成の詳細は、図２及び図３を用いて説明する。【００２７】
ストリームデータ処理計算機１２０は、データ送信計算機１４０から送信されるデータ（ストリームデータ）を受信し、割り当てられた分割クエリ２２０に従ってデータを処理する。ストリームデータ処理計算機１２０は、処理結果を他のストリームデータ処理計算機１２０又はデータ受信計算機１６０に出力する。【００２８】
なお、ストリームデータ処理計算機１２０が受信するデータには、タイムスタンプが含まれるものとする。【００２９】
ストリームデータ処理計算機１２０は、ハードウェア構成として、ＣＰＵ１２１、メモリ１２２、ストレージ装置１２３、ネットワークインタフェース１２４、及び入出力装置１２５を備える。【００３０】
ＣＰＵ１２１、メモリ１２２、ストレージ装置１２３、ネットワークインタフェース１２４、及び入出力装置１２５は、ＣＰＵ１０１、メモリ１０２、ストレージ装置１０３、ネットワークインタフェース１０４、及び入出力装置１０５と同一のものであるため説明を省略する。【００３１】
メモリ１２２は、クエリ実行部１３０を実現するプログラムを格納する。クエリ実行部１３０は、分割クエリ２２０に従って、データ送信計算機１４０又は他のストリームデータ処理計算機１２０から受信したデータを処理する。クエリ実行部１３０は、複数のプログラムモジュールから構成される。具体的には、クエリ実行部１３０は、データ受信部１３１、クエリ処理部１３２、及びデータ送信部１３３を含む。【００３２】
データ受信部１３１は、データ送信計算機１４０又は他のストリームデータ処理計算機１２０から送信されるデータの受信処理を実行する。クエリ処理部１３２は、分割クエリ２２０に従って受信したデータを処理する。データ送信部１３３は、クエリ処理部１３２から出力された処理結果を含むデータの送信処理を実行する。【００３３】
ストリームデータ処理計算機１２０のソフトウェア構成の詳細は、図２を用いて説明する。【００３４】
データ送信計算機１４０は、ストリームデータ処理計算機１２０が処理するデータを送信する。データ送信計算機１４０は、例えば、工場のセンサを管理する計算機等が考えられる。なお、センサそのものが、データ送信計算機１４０であってもよい。【００３５】
データ送信計算機１４０は、図示しないＣＰＵ、メモリ、及びネットワークインタフェースを備える。データ送信計算機１４０上では、アプリケーション１５１及びデータ送信部１５２が稼働する。本実施例は、アプリケーション１５１の種別に限定されない。データ送信部１５２は、アプリケーション１５１によって取得された値、又は、アプリケーション１５１の挙動等を示すデータの送信処理を実行する。【００３６】
データ受信計算機１６０は、ストリームデータ処理計算機１２０によって処理されたデータを受信する。データ受信計算機１６０は、図示しないＣＰＵ、メモリ、及びネットワークインタフェースを備える。データ受信計算機１６０上では、アプリケーション１７１及びデータ受信部１７２が稼働する。本実施例は、アプリケーション１７１の種別に限定されない。データ受信部１７２は、データの受信処理を実行する。【００３７】
なお、データ送信計算機１４０及びデータ受信計算機１６０のいずれかがクエリ振り分け部１１０を有してもよい。【００３８】
なお、図１では、クエリ振り分け計算機１００及びストリームデータ処理計算機１２０を物理的な計算機を用いて実現しているがこれに限定されない。例えば、仮想化技術を用いて生成された仮想計算機を用いてクエリ振り分け計算機１００及びストリームデータ処理計算機１２０を実現してもよい。【００３９】
図２は、実施例１のクエリ振り分け計算機１００及びストリームデータ処理計算機１２０のソフトウェア構成の一例を示す図である。【００４０】
まず、図２に示すストリームデータ処理計算機１２０に対するデータの入出力について説明する。ストリームデータ処理計算機１２０−１及びストリームデータ処理計算機１２０−２がデータ送信計算機１４０からデータを受信し、分割クエリ２２０に従って受信したデータの処理を実行する。ストリームデータ処理計算機１２０−１及びストリームデータ処理計算機１２０−２は、処理結果をストリームデータ処理計算機１２０−３に出力する。また、ストリームデータ処理計算機１２０−３は、ストリームデータ処理計算機１２０−１及びストリームデータ処理計算機１２０−２からデータを受信し、分割クエリ２２０に従って受信したデータの処理を実行する。ストリームデータ処理計算機１２０−３は、処理結果をデータ受信計算機１６０に出力する。【００４１】
次に、クエリ振り分け計算機１００に入力される情報及びクエリ振り分け計算機１００のソフトウェア構成について説明する。【００４２】
クエリ振り分け計算機１００には、分析シナリオ２０１、分割情報２０２、及び遅延許容時間２０３が入力される。【００４３】
分析シナリオ２０１は、複数のクエリを含む。また、クエリは、一つ以上のオペレータを含む。オペレータは、ストリームデータ処理における最小単位の処理を示す。オペレータは、例えば、データの抽出処理及びデータの集約処理等が対応する。【００４４】
分割情報２０２は、分析シナリオ２０１を分割するための情報である。分割情報２０２には、クエリグラフ３０１（図３参照）に含まれる複数のクエリの分割位置を示す情報が含まれる。本実施例では、分析シナリオ２０１に分割情報２０２が含まれるものとする。分割情報２０２の詳細については、図６を用いて説明する。【００４５】
遅延許容時間２０３は、フロー制御に使用する期間を指定するための値である。後述するように、フロー制御部２３０は、遅延許容時間２０３を用いてフロー制御を実行する。【００４６】
クエリ解析部１１２は、クエリグラフ生成部２１１、分割クエリ生成部２１２、及びフロー制御設定部２１３を含み、また、オペレータ種別情報２１５及び経路情報２１６を保持する。【００４７】
クエリグラフ生成部２１１は、分析シナリオ２０１からクエリグラフ３０１を生成する。分割クエリ生成部２１２は、分割情報２０２に基づいて、クエリグラフ３０１の分割位置を特定し、さらに、特定された分割位置に基づいてクエリグラフ３０１を分割することによって分割クエリ２２０を生成する。フロー制御設定部２１３は、フロー制御が必要な分割クエリ２２０を特定する。【００４８】
オペレータ種別情報２１５は、オペレータに対するフロー制御の要否を管理するための情報である。オペレータ種別情報２１５の詳細は、図７を用いて説明する。経路情報２１６は、クエリに入力されるデータであって、任意の識別情報に基づいて集約された集約データの経路を管理するための情報である。経路情報２１６の詳細は、図８を用いて説明する。【００４９】
クエリ解析部１１２は、分割クエリ２２０を割り当てるストリームデータ処理計算機１２０を決定し、決定されたストリームデータ処理計算機１２０に分割クエリ２２０を割り当てる。具体的には、以下のような処理が実行される。【００５０】
フロー制御が不要な分割クエリ２２０の場合、クエリ解析部１１２は、分割クエリ２２０をストリームデータ処理計算機１２０に割り当てる。フロー制御が必要な分割クエリ２２０の場合、クエリ解析部１１２は、遅延許容時間２０３を含む分割クエリ２２０をストリームデータ処理計算機１２０に割り当て、さらに、ストリームデータ処理計算機１２０に対してフロー制御部２３０の設定を行う。【００５１】
次に、ストリームデータ処理計算機１２０のソフトウェア構成について説明する。ストリームデータ処理計算機１２０−１及びストリームデータ処理計算機１２０−２は、フロー制御が必要な分割クエリ２２０が割り当てられたストリームデータ処理計算機１２０である。ストリームデータ処理計算機１２０−３は、フロー制御が不要な分割クエリ２２０が割り当てられたストリームデータ処理計算機１２０である。【００５２】
ストリームデータ処理計算機１２０−１及びストリームデータ処理計算機１２０−２のデータ受信部１３１は、フロー制御を実行するフロー制御部２３０を含む。フロー制御部２３０は、データ保存部２４０を含む。データ保存部２４０は、受信したデータを一時的に記憶する。【００５３】
一方、ストリームデータ処理計算機１２０−３のデータ受信部１３１は、フロー制御部２３０を含まない。【００５４】
フロー制御部２３０を含むデータ受信部１３１は、データを受信した場合、遅延許容時間２０３に基づいてフロー制御を実行し、フロー制御が実行されたデータをクエリ処理部１３２に出力する。一方、フロー制御部２３０を含まないデータ受信部１３１は、データを受信した場合、受信したデータをそのままクエリ処理部１３２に出力する。【００５５】
クエリ処理部１３２は、分割クエリ２２０に従って、データ受信部１３１から入力されたデータを用いて分割クエリ２２０に含まれるクエリを実行し、処理結果を含むデータをデータ送信部１３３に出力する。【００５６】
データ送信部１３３は、処理結果を含むデータを他のストリームデータ処理計算機１２０又はデータ受信計算機１６０に送信する。【００５７】
次に、クエリ解析部１１２の機能について説明する。【００５８】
図３は、実施例１のクエリ解析部１１２の処理の流れを示す図である。図４は、実施例１のクエリグラフ管理情報の一例を示す図である。図５は、実施例１の分割クエリ管理情報の一例を示す図である。図６は、実施例１の分割情報２０２を含む分析シナリオ２０１の一例を示す図である。図７は、実施例１のオペレータ種別情報２１５の一例を示す図である。図８は、実施例１の経路情報２１６の一例を示す図である。図９は、実施例１の経路情報２１６を含む分析シナリオ２０１の一例を示す図である。【００５９】
クエリグラフ生成部２１１について説明する。クエリグラフ生成部２１１は、分析シナリオ２０１を入力としてクエリグラフ３０１を生成する。図３に示すように、クエリグラフ３０１は木構造のデータであり、クエリがノードに対応する。また、図３に示すクエリグラフ３０１は、クエリＱ１及びクエリＱ３からクエリＱ６の順番にクエリが実行されることを示す。【００６０】
本実施例のクエリグラフ生成部２１１は、図４に示すようなクエリグラフ管理情報４００を生成する。クエリグラフ管理情報４００は、クエリグラフ３０１を管理するための情報であり、ノードＩＤ４０１及び接続ノードＩＤ４０２から構成されるエントリを複数含む。【００６１】
ノードＩＤ４０１は、クエリの識別情報である。接続ノードＩＤ４０２は、ノードＩＤ４０１に対応するクエリのデータが出力されるノード（クエリ）の識別情報である。【００６２】
なお、クエリグラフ生成部２１１は、クエリグラフ管理情報４００を必ずしも生成しなくてもよい。例えば、クエリグラフ生成部２１１は、分析シナリオ２０１に、クエリ間の接続を認識するためのポインタ等を埋め込む。【００６３】
分割クエリ生成部２１２について説明する。分割クエリ生成部２１２は、分割情報２０２及びクエリグラフ３０１を入力として、クエリグラフ３０１の分割位置を特定し、特定された分割位置に基づいてクエリグラフ３０１を分割することによって複数の分割クエリ２２０を生成する。【００６４】
図６に示す分析シナリオ２０１は、分割情報２０２を含む。具体的には、「／／ｏｐｔｉｏｎ  ｃｌｕｓｔｅｒ  ｂｅｇｉｎ」から「／／ｏｐｔｉｏｎ  ｃｌｕｓｔｅｒ  ｅｎｄ」に含まれるクエリが分割クエリ２２０を構成するクエリであることを示す。この場合、分割クエリ生成部２１２は、「／／ｏｐｔｉｏｎ  ｃｌｕｓｔｅｒ  ｅｎｄ」と次に登場する「／／ｏｐｔｉｏｎ  ｃｌｕｓｔｅｒ  ｂｅｇｉｎ」との間が分割位置であると判定する。【００６５】
本実施例の分割クエリ生成部２１２は、図５に示すような分割クエリ管理情報５００を生成する。分割クエリ管理情報５００は、分割クエリ２２０を管理するための情報であり、分割クエリＩＤ５０１、ノードＩＤ５０２、接続分割クエリＩＤ５０３、及びフロー制御フラグ５０４を含む。【００６６】
分割クエリＩＤ５０１は、分割クエリ２２０の識別情報である。ノードＩＤ５０２は、分割クエリ２２０に含まれるクエリの識別情報である。接続分割クエリＩＤ５０３は、分割クエリＩＤ５０１に対応する分割クエリ２２０のデータが出力される分割クエリ２２０の識別情報である。フロー制御フラグ５０４は、フロー制御が必要な分割クエリ２２０であるか否かを示すフラグである。フロー制御フラグ５０４の初期値は空欄であるものとする。フロー制御が必要な分割クエリ２２０であると判定された場合、フロー制御フラグ５０４には「ＯＮ」が格納される。【００６７】
フロー制御設定部２１３について説明する。フロー制御設定部２１３は、クエリグラフ３０１の分割結果に基づいて、フロー制御が必要な分割クエリ２２０を特定する。図３では、分割クエリ２２０−１、分割クエリ２２０−２、及び分割クエリ２２０−３が、フロー制御が必要な分割クエリ２２０であると判定されたことを示す。【００６８】
実施例１のフロー制御設定部２１３は、クエリグラフ３０１の分割結果に基づいて、フロー制御が必要な分割クエリ２２０を特定する。実施例２のフロー制御設定部２１３は、クエリグラフ３０１の分割結果及びオペレータ種別情報２１５に基づいて、フロー制御が必要な分割クエリ２２０を特定する。実施例３のフロー制御設定部２１３は、クエリグラフ３０１の分割結果、オペレータ種別情報２１５、及び経路情報２１６に基づいて、フロー制御が必要な分割クエリ２２０を特定する。【００６９】
次に、オペレータ種別情報２１５及び経路情報２１６について説明する。【００７０】
オペレータ種別情報２１５は、オペレータ種別７０１、フロー制御７０２、及びグループ化７０３を含む。【００７１】
オペレータ種別７０１は、オペレータの識別情報である。オペレータ種別７０１には、オペレータそのものが格納されてもよい。フロー制御７０２は、フロー制御が必要であるか否かを示すフラグである。グループ化７０３は、グループ化の対象となるオペレータであるか否かを示すフラグであり、また、経路情報２１６を参照するか否かを示すフラグとして用いられる。グループ化の対象となるオペレータである場合、グループ化７０３には「ＹＥＳ」が格納され、グループ化の対象となるオペレータでない場合、グループ化７０３には「ＮＯ」が格納される。【００７２】
経路情報２１６は、クエリＩＤ８０１、グループ化キー８０２、及び独立性８０３を含む。【００７３】
クエリＩＤ８０１は、クエリの識別情報であり、ノードＩＤ４０１と同一の識別情報が格納される。グループ化キー８０２は、グループ化する場合に使用されるキーの情報である。独立性８０３は、グループ化されたデータに独立性があるか否かを示すフラグである。【００７４】
クエリＩＤ８０１に対応するクエリに入力される、グループ化されたデータに独立性がある場合、独立性８０３には「ＹＥＳ」が格納される。クエリＩＤ８０１に対応するクエリに入力される、グループ化されたデータに独立性がない場合、独立性８０３には「ＮＯ」が格納される。【００７５】
同一の識別情報で集約された集約データの入力経路が一つの場合、当該データは独立性がある。一方、同一の識別情報で集約された集約データの入力経路が複数存在する場合、当該データは独立性がない。【００７６】
なお、図９に示すように、分析シナリオ２０１に経路情報２１６が含まれてもよい。図９の太文字部分は、クエリＱ１からクエリＱ２に入力される、ＩＤでグループ化されたデータは独立性があることを示す。【００７７】
次に、図１０及び図１１を用いて、クエリ振り分け計算機１００が実行する処理の詳細を説明する。【００７８】
図１０は、実施例１のクエリ解析部１１２が実行する処理の一例を説明するフローチャートである。【００７９】
クエリ解析部１１２は、分析シナリオ２０１が入力された場合、以下で説明する処理を開始する。【００８０】
まず、クエリ解析部１１２は、分析シナリオ２０１に基づいてクエリグラフ３０１を生成する（ステップＳ１０００）。【００８１】
具体的には、クエリグラフ生成部２１１が、分析シナリオ２０１に基づいてクエリグラフ３０１を生成する。このとき、クエリグラフ生成部２１１は、クエリグラフ管理情報４００を生成する。なお、クエリグラフ３０１の生成方法は公知の技術であるため説明を省略する。【００８２】
次に、クエリ解析部１１２は、クエリグラフ３０１を複数の分割クエリ２２０に分割できるか否かを判定する（ステップＳ１００１）。【００８３】
具体的には、分割クエリ生成部２１２は、分割情報２０２が入力されたか否かを判定する。分割情報２０２が入力されていない場合、分割クエリ生成部２１２は、クエリグラフ３０１を複数の分割クエリ２２０に分割できないと判定する。【００８４】
クエリグラフ３０１を複数の分割クエリ２２０に分割できないと判定された場合、クエリ解析部１１２は、ストリームデータ処理計算機１２０にクエリを割り当てる（ステップＳ１００４）。その後、クエリ解析部１１２は処理を終了する。【００８５】
具体的には、クエリ解析部１１２は、一つのストリームデータ処理計算機１２０に、クエリグラフ３０１に含まれる全てのクエリを割り当てる。【００８６】
クエリグラフ３０１を複数の分割クエリ２２０に分割できると判定された場合、クエリ解析部１１２は、分割情報２０２に基づいて、複数の分割クエリ２２０を生成する（ステップＳ１００２）。【００８７】
具体的には、分割クエリ生成部２１２が、分割情報２０２に基づいてクエリグラフ３０１の分割位置を特定し、特定された分割位置に基づいてクエリグラフ３０１を分割することによって、複数の分割クエリ２２０を生成する。このとき、分割クエリ生成部２１２は、クエリグラフ３０１の分割結果に基づいて分割クエリ管理情報５００を生成する。この時点では、分割クエリ管理情報５００の全てのエントリのフロー制御フラグ５０４は、空欄である。【００８８】
次に、クエリ解析部１１２は、フロー制御の要否判定処理を実行する（ステップＳ１００３）。フロー制御の要否判定処理では、フロー制御が必要な分割クエリ２２０が特定される。フロー制御の要否判定処理の詳細は、図１１を用いて説明する。【００８９】
次に、クエリ解析部１１２は、フロー制御の要否判定処理の処理結果に基づいて、ストリームデータ処理計算機１２０にクエリを割り当てる（ステップＳ１００４）。その後、クエリ解析部１１２は処理を終了する。具体的には、以下のような処理が実行される。【００９０】
クエリ解析部１１２は、複数の分割クエリ２２０の各々を割り当てるストリームデータ処理計算機１２０を決定する。クエリ解析部１１２は、分割クエリ管理情報５００のフロー制御フラグ５０４を参照し、フロー制御が必要な分割クエリ２２０であるか否かを判定する。【００９１】
フロー制御フラグ５０４が空欄の場合、クエリ解析部１１２は、分割クエリ２２０をストリームデータ処理計算機１２０に割り当てる。フロー制御フラグ５０４が「ＯＮ」の場合、クエリ解析部１１２は、遅延許容時間２０３を含む分割クエリ２２０をストリームデータ処理計算機１２０に割り当て、さらに、ストリームデータ処理計算機１２０に対してフロー制御部２３０の設定を行う。ここで、ストリームデータ処理計算機１２０に対するフロー制御部２３０の設定方法は、以下のような方法が考えられる。【００９２】
（設定方法１）ストリームデータ処理計算機１２０のデータ受信部１３１がフロー制御部２３０を含まない場合、クエリ解析部１１２は、データ受信部１３１にフロー制御部２３０を追加する。例えば、クエリ解析部１１２は、データ受信部１３１を実現するプログラムをストリームデータ処理計算機１２０にインストールする。【００９３】
（設定方法２）ストリームデータ処理計算機１２０のデータ受信部１３１がフロー制御を実行するフロー制御部２３０を含む場合、クエリ解析部１１２は、ストリームデータ処理計算機１２０にフロー制御部２３０の活性化を指示する。なお、フロー制御部２３０は、分割クエリ２２０の割り当て前は非活性化の状態であるものとする。【００９４】
前述したように、クエリ振り分け計算機１００は、フロー制御が必要な分割クエリ２２０が割り当てられるストリームデータ処理計算機１２０に対してのみ、フロー制御部２３０の設定を行う。以上がステップＳ１００４の処理の説明である。【００９５】
図１１は、実施例１のフロー制御の要否判定処理の一例を説明するフローチャートである。【００９６】
フロー制御設定部２１３は、分割クエリ２２０のループ処理を開始する（ステップＳ１１００）。【００９７】
具体的には、フロー制御設定部２１３は、分割クエリ管理情報５００を参照し、対象の分割クエリ２２０を選択する。本実施例では、データの出力の最終端の分割クエリ２２０からデータの入力方向に分割クエリ２２０を選択するものとする。例えば、図３に示すクエリグラフ３０１の場合、最初に分割クエリ２２０−４が選択され、次に、分割クエリ２２０−３が選択され、次に、分割クエリ２２０−１又は分割クエリ２２０−２が選択される。【００９８】
フロー制御設定部２１３は、選択された分割クエリ２２０を、フロー制御が必要な分割クエリ２２０として特定する（ステップＳ１１０１）。【００９９】
具体的には、フロー制御設定部２１３は、選択された分割クエリ２２０に対応するエントリのフロー制御フラグ５０４に「ＯＮ」を設定する。フロー制御設定部２１３は、必要に応じて、選択された分割クエリ２２０にフロー制御の実行を指示するフラグを追加する。【０１００】
次に、フロー制御設定部２１３は、全ての分割クエリ２２０に対して処理が完了したか否かを判定する（ステップＳ１１０２）。【０１０１】
全ての分割クエリ２２０に対して処理が完了していないと判定された場合、フロー制御設定部２１３は、ステップＳ１１００に戻り、同様の処理を実行する。【０１０２】
全ての分割クエリ２２０に対して処理が完了したと判定された場合、フロー制御設定部２１３は、処理を終了する。【０１０３】
実施例１では、クエリ解析部１１２は、分割クエリ２２０が割り当てられる全てのストリームデータ処理計算機１２０に対してフロー制御部２３０を設定する。【０１０４】
次に、図１２及び図１３を用いて、ストリームデータ処理計算機１２０が実行する処理の詳細を説明する。【０１０５】
図１２は、実施例１のクエリ実行部１３０が実行する処理の一例を説明するフローチャートである。【０１０６】
クエリ実行部１３０は、分割クエリ２２０の実行時にフロー制御が必要であるか否かを判定する（ステップＳ１２００）。【０１０７】
具体的には、クエリ実行部１３０は、分割クエリ２２０にフロー制御の実行を指示するフラグが含まれるか否かを判定する。なお、前述した判定方法は一例であってこれに限定されない。例えば、クエリ振り分け計算機１００から、分割クエリ２２０及び遅延許容時間２０３を受け取った場合に、クエリ実行部１３０は、分割クエリ２２０にフロー制御が必要であると判定してもよい。【０１０８】
分割クエリ２２０の実行時にフロー制御が必要であると判定された場合、クエリ実行部１３０は、データが入力されるまで待ち状態となる。クエリ実行部１３０は、データを受信した場合（ステップＳ１２０１）、フロー制御処理を実行する（ステップＳ１２０２）。具体的には、データ受信部１３１がデータを受信し、フロー制御部２３０を呼び出す。フロー制御処理の詳細は図１３を用いて説明する。【０１０９】
次に、クエリ実行部１３０は、データ受信部１３１からフロー制御処理が実行されたデータが出力されたか否かを判定する（ステップＳ１２０３）。【０１１０】
具体的には、クエリ処理部１３２が、データ受信部１３１からデータが出力されたか否かを判定する。【０１１１】
データ受信部１３１からフロー制御処理が実行されたデータが出力されていないと判定された場合、クエリ実行部１３０は、ステップＳ１２０３に戻り、データが出力されるまで待ち状態となる。【０１１２】
データ受信部１３１からフロー制御処理が実行されたデータが出力されたと判定された場合、クエリ実行部１３０は、分割クエリ２２０に基づいて、クエリを実行する（ステップＳ１２０４）。【０１１３】
具体的には、クエリ処理部１３２がクエリを実行する。なお、本実施例は、実行されるクエリの内容に限定されない。【０１１４】
次に、クエリ実行部１３０は、クエリの処理結果を含むデータを送信する（ステップＳ１２０５）。その後、クエリ実行部１３０は、ステップＳ１２０１に戻り、同様の処理を実行する。なお、クエリ実行部１３０は、所定の条件を満たした場合、又は、処理の終了指示を受け付けた場合、処理を終了する。【０１１５】
具体的には、データ送信部１３３が、クエリの処理結果を含むデータを他のストリームデータ処理計算機１２０又はデータ受信計算機１６０に送信する。【０１１６】
ステップＳ１２００において、分割クエリ２２０の実行時にフロー制御が必要でないと判定された場合、クエリ実行部１３０は、データが入力されるまで待ち状態となる。クエリ実行部１３０は、データを受信した場合（ステップＳ１２０６）、分割クエリ２２０に基づいて、クエリを実行する（ステップＳ１２０７）。このとき、データ受信部１３１が受信したデータは、そのままクエリ処理部１３２に出力される。【０１１７】
次に、クエリ実行部１３０は、クエリの処理結果を含むデータを送信する（ステップＳ１２０８）。その後、クエリ実行部１３０は、ステップＳ１２０６に戻り、同様の処理を実行する。なお、クエリ実行部１３０は、所定の条件を満たした場合、又は、処理の終了指示を受け付けた場合、処理を終了する。【０１１８】
図１３は、実施例１のフロー制御部２３０が実行するフロー制御処理の一例を説明するフローチャートである。【０１１９】
フロー制御部２３０は、変数Ｔｅｎｄに基準時刻を設定する（ステップＳ１３００）。その後、フロー制御部２３０は、データの受信を待ち続ける。具体的には、以下のような処理が実行される。【０１２０】
フロー制御部２３０は、初期起動時に、データ受信部１３１が初めてデータを受信した時刻、又は、クエリ振り分け計算機１００等の外部装置によって指定された時刻を基準時刻として変数Ｔｅｎｄに設定する。【０１２１】
ステップＳ１３０４からステップＳ１３００に戻る場合、変数Ｔｅｎｄの値が更新される。更新方法は、例えば、以下のような方法が考えられる。【０１２２】
（更新方法１）フロー制御部２３０は、変数Ｔｅｎｄに所定の時間を加算することによって算出された時刻を新たな基準時刻として変数Ｔｅｎｄに設定する。【０１２３】
（更新方法２）フロー制御部２３０は、データ受信部１３１が新たにデータを受信した場合、当該データの時刻を新たな基準時刻として変数Ｔｅｎｄに設定する。【０１２４】
なお、加算する時間は、クエリ振り分け計算機１００等の外部装置によって指定することができる。以上が、ステップＳ１３００の処理の説明である。【０１２５】
フロー制御部２３０は、データ受信部１３１がデータを受信した場合、データ受信部１３１が受信したデータから時刻を取得し、変数Ｔｄａｔａに取得された時刻を設定する（ステップＳ１３０１）。【０１２６】
次に、フロー制御部２３０は、下式（１）を満たすか否かを判定する（ステップＳ１３０２）。【０１２７】
【数１】
2017168497.tif 000003
【０１２８】
式（１）を満たすと判定された場合、フロー制御部２３０は、下式（２）を満たすか否かを判定する。ここで、変数Ｔｌａｔｅは、遅延許容時間２０３を示す変数である。【０１２９】
【数２】
2017168497.tif 000004
【０１３０】
式（２）を満たさない場合、フロー制御部２３０は、データ保存部２４０に格納されるデータをクエリ処理部１３２に出力する（ステップＳ１３０４）。その後、フロー制御部２３０は、ステップＳ１３００に戻り、同様の処理を実行する。【０１３１】
具体的には、フロー制御部２３０は、データ保存部２４０に格納されるデータを時系列順にソートし、ソートされたデータをクエリ処理部１３２に出力する。【０１３２】
ステップＳ１３０３において、式（２）を満たすと判定された場合、すなわち、受信したデータの時刻がＴｅｎｄから（Ｔｅｎｄ＋Ｔｌａｔｅ）の間に含まれる場合、フロー制御部２３０は、受信したデータをデータ保存部２４０に格納する（ステップＳ１３０６）。その後、フロー制御部２３０は、ステップＳ１３０１に戻り、同様の処理を実行する。【０１３３】
ステップＳ１３０２において、式（１）を満たさないと判定された場合、フロー制御部２３０は、例外処理を実行する（ステップＳ１３０５）。その後、フロー制御部２３０は、ステップＳ１３０１に戻り、同様の処理を実行する。【０１３４】
例外処理では、受信したデータの破棄、又は、予め指定された任意の処理が実行される。なお、本実施例は例外処理の内容に限定されない。【０１３５】
図１３では、フロー制御部２３０は、データの出力時に、データの出力順番を変更していたが本発明はこれに限定されない。例えば、フロー制御部２３０は、受信したデータをデータ保存部２４０に格納する時に、データの順番を変更してもよい。【０１３６】
実施例１によれば、クエリ振り分け計算機１００は、分析シナリオ２０１及び分割情報２０２に基づいて、分割クエリ２２０単位にフロー制御部２３０を自動的に設定することができる。【０１３７】
そのため、管理者等は、クエリ及びデータを受信するソフトウェアを開発することなく、容易にフロー制御を組み込んだ分散型のストリームデータ処理システムを設定できる。また、分散型のストリーム処理システムの設定に必要なコストを削減できる。
【実施例２】
【０１３８】
実施例２では、フロー制御の要否判定処理において、クエリ解析部１１２が、クエリに含まれるオペレーションの種別を考慮する点が実施例１と異なる。以下、実施例１との差異を中心に実施例２について説明する。【０１３９】
実施例２の計算機システムの構成は、実施例１の計算機システムと同一であるため説明を省略する。実施例２のクエリ振り分け計算機１００のハードウェア構成及びソフトウェア構成は実施例１のクエリ振り分け計算機１００と同一であるため説明を省略する。実施例２のストリームデータ処理計算機１２０のハードウェア構成及びソフトウェア構成は実施例１のストリームデータ処理計算機１２０と同一であるため説明を省略する。【０１４０】
また、実施例２のクエリ振り分け計算機１００が保持する情報は実施例１のクエリ振り分け計算機１００が保持する情報と同一であるため説明を省略する。【０１４１】
実施例２のクエリ解析部１１２が実行する処理は、実施例１のクエリ解析部１１２が実行する処理（図１０参照）と同一であるため説明を省略する。また、実施例２のクエリ実行部１３０が実行する処理は、実施例１のクエリ実行部１３０が実行する処理（図１２参照）と同一であるため説明を省略する。実施例２のフロー制御部２３０が実行する処理は、実施例１のフロー制御部２３０が実行する処理（図１３参照）と同一であるため説明を省略する。【０１４２】
実施例２では、フロー制御の要否判定処理が一部異なる。図１４は、実施例２のフロー制御の要否判定処理の一例を説明するフローチャートである。【０１４３】
フロー制御設定部２１３は、分割クエリ２２０のループ処理を開始する（ステップＳ１４００）。ステップＳ１４００の処理は、ステップＳ１１００の処理と同一である。【０１４４】
次に、フロー制御設定部２１３は、クエリのループ処理を開始する（ステップＳ１４０１）。【０１４５】
具体的には、フロー制御設定部２１３は、分割クエリ管理情報５００のノードＩＤ５０２を参照し、選択された分割クエリ２２０に含まれるクエリの中から対象のクエリを選択する。本実施例では、フロー制御設定部２１３は、出力側のクエリから入力側のクエリの方向にクエリを選択するものとする。例えば、ステップＳ１４００において、図３に示す分割クエリ２２０−２が選択された場合、フロー制御設定部２１３は、クエリＱ４を選択し、次に、クエリＱ３を選択する。【０１４６】
次に、フロー制御設定部２１３は、選択されたクエリにフロー制御が必要なオペレータが含まれるか否かを判定する（ステップＳ１４０２）。具体的には、以下のような処理が実行される。【０１４７】
フロー制御設定部２１３は、分析シナリオ２０１を参照して、選択されたクエリに含まれるオペレータを特定する。フロー制御設定部２１３は、特定されたオペレータを一つ選択し、オペレータ種別情報２１５を参照して、選択されたオペレータに対応するエントリを検索する。【０１４８】
フロー制御設定部２１３は、検索されたエントリのフロー制御７０２が「必要」であるか否かを判定する。検索されたエントリのフロー制御７０２が「必要」である場合、フロー制御設定部２１３は、選択されたクエリにフロー制御が必要なオペレータが含まれると判定する。検索されたエントリのフロー制御７０２が「必要」ではない場合、フロー制御設定部２１３は、他のクエリについても同様の処理を実行する。【０１４９】
選択されたクエリに含まれる全てのオペレータのフロー制御７０２が「必要」ではない場合、フロー制御設定部２１３は、選択されたクエリにフロー制御が必要なオペレータが含まれないと判定する。以上がステップＳ１４０２の処理の説明である。【０１５０】
選択されたクエリにフロー制御が必要なオペレータが含まれないと判定された場合、フロー制御設定部２１３は、選択された分割クエリ２２０に含まれる全てのクエリに対して処理が完了したか否かを判定する（ステップＳ１４０３）。【０１５１】
選択された分割クエリ２２０に含まれる全てのクエリに対して処理が完了していないと判定された場合、フロー制御設定部２１３は、ステップＳ１４０１に戻り、同様の処理を実行する。【０１５２】
選択された分割クエリ２２０に含まれる全てのクエリに対して処理が完了していると判定された場合、フロー制御設定部２１３は、全ての分割クエリ２２０について処理が完了したか否かを判定する（ステップＳ１４０４）。【０１５３】
全ての分割クエリ２２０について処理が完了していないと判定された場合、フロー制御設定部２１３は、ステップＳ１４００に戻り、同様の処理を実行する。【０１５４】
全ての分割クエリ２２０について処理が完了したと判定された場合、フロー制御設定部２１３は、処理を終了する。【０１５５】
ステップＳ１４０２において、選択されたクエリにフロー制御が必要なオペレータが含まれると判定された場合、フロー制御設定部２１３は、選択された分割クエリ２２０を、フロー制御が必要な分割クエリ２２０として特定する（ステップＳ１４０５）。ステップＳ１４０５の処理は、ステップＳ１１０１の処理と同一である。【０１５６】
次に、フロー制御設定部２１３は、選択された分割クエリ２２０が最上位の分割クエリ２２０であるか否かを判定する（ステップＳ１４０６）。【０１５７】
具体的には、フロー制御設定部２１３は、分割クエリ管理情報５００を参照し、最も入力側の分割クエリ２２０であるか否かを判定する。より具体的には、フロー制御設定部２１３は、選択された分割クエリ２２０にデータを入力する分割クエリ２２０が存在するか否かを判定する。選択された分割クエリ２２０にデータを入力する分割クエリ２２０が存在する場合、選択された分割クエリ２２０は最上位の分割クエリ２２０ではないと判定される。【０１５８】
例えば、図３に示すクエリグラフ３０１の分割クエリ２２０−３が選択された分割クエリ２２０である場合、分割クエリ２２０−１及び分割クエリ２２０−２が選択された分割クエリ２２０にデータを入力する分割クエリ２２０となる。【０１５９】
選択された分割クエリ２２０が最上位の分割クエリ２２０であると判定された場合、フロー制御設定部２１３は、処理を終了する。【０１６０】
選択された分割クエリ２２０が最上位の分割クエリ２２０ではないと判定された場合、フロー制御設定部２１３は、選択された分割クエリ２２０より上位の分割クエリ２２０を、フロー制御が必要な分割クエリ２２０として特定する（ステップＳ１４０７）。その後、フロー制御設定部２１３は、処理を終了する。【０１６１】
具体的には、フロー制御設定部２１３は、分割クエリ管理情報５００を参照して、選択された分割クエリ２２０より上位の分割クエリ２２０を特定する。ここで、上位の分割クエリ２２０は、ステップＳ１４０６の条件を満たす分割クエリ２２０を示す。フロー制御設定部２１３は、特定された分割クエリ２２０に対応するエントリのフロー制御フラグ５０４に「ＯＮ」を設定する。【０１６２】
図１４では、フロー制御設定部２１３は、フロー制御が必要なオペレータが含まれるクエリを含む分割クエリ２２０を検索するために、分割クエリ２２０単位でステップＳ１４０２の処理を実行する。【０１６３】
なお、フロー制御設定部２１３は、フロー制御が必要な分割クエリ２２０より上位の分割クエリ２２０に関する処理を省略してもよい。すなわち、ステップＳ１４０６及びステップＳ１４０７の処理を省略してもよい。この場合、フロー制御設定部２１３は、ステップＳ１４０５の処理の後、ステップＳ１４０４に進む。【０１６４】
実施例２は、実施例１と同様の効果を有する。また、実施例２では、クエリ振り分け計算機１００は、分割クエリ２２０毎にフロー制御の要否を判定する。これよって、処理結果の整合性を保ちつつ、システム全体の処理性能が高い分散型のストリームデータ処理システムの設定が可能となる。
【実施例３】
【０１６５】
実施例３では、フロー制御の要否判定処理において、クエリ解析部１１２が、クエリに含まれるオペレーションの種別及び入力される集約データの経路を考慮する点が実施例１と異なる。以下、実施例１との差異を中心に実施例３について説明する。【０１６６】
実施例３の計算機システムの構成は、実施例１の計算機システムと同一であるため説明を省略する。実施例３のクエリ振り分け計算機１００のハードウェア構成及びソフトウェア構成は実施例１のクエリ振り分け計算機１００と同一であるため説明を省略する。実施例３のストリームデータ処理計算機１２０のハードウェア構成及びソフトウェア構成は実施例１のストリームデータ処理計算機１２０と同一であるため説明を省略する。【０１６７】
また、実施例３のクエリ振り分け計算機１００が保持する情報は実施例１のクエリ振り分け計算機１００が保持する情報と同一であるため説明を省略する。【０１６８】
実施例３のクエリ解析部１１２が実行する処理は、実施例１のクエリ解析部１１２が実行する処理（図１０参照）と同一であるため説明を省略する。また、実施例３のクエリ実行部１３０が実行する処理は、実施例１のクエリ実行部１３０が実行する処理（図１２参照）と同一であるため説明を省略する。実施例３のフロー制御部２３０が実行する処理は、実施例１のフロー制御部２３０が実行する処理（図１３参照）と同一であるため説明を省略する。【０１６９】
実施例３では、フロー制御の要否判定処理が一部異なる。図１５Ａ及び図１５Ｂは、実施例３のフロー制御の要否判定処理の一例を説明するフローチャートである。【０１７０】
フロー制御設定部２１３は、分割クエリ２２０のループ処理を開始する（ステップＳ１５００）。ステップＳ１５００の処理は、ステップＳ１１００の処理と同一である。【０１７１】
次に、フロー制御設定部２１３は、クエリのループ処理を開始する（ステップＳ１５０１）。ステップＳ１５０１の処理は、ステップＳ１４０１の処理と同一である。【０１７２】
次に、フロー制御設定部２１３は、選択されたクエリにフロー制御が必要なオペレータが含まれるか否かを判定する（ステップＳ１５０２）。ステップＳ１５０２の処理は、ステップＳ１４０２の処理と同一である。【０１７３】
選択されたクエリにフロー制御が必要なオペレータが含まれないと判定された場合、フロー制御設定部２１３は、選択された分割クエリ２２０に含まれる全てのクエリに対して処理が完了したか否かを判定する（ステップＳ１５０３）。ステップＳ１５０３の処理は、ステップＳ１４０３の処理と同一である。【０１７４】
選択された分割クエリ２２０に含まれる全てのクエリに対して処理が完了していないと判定された場合、フロー制御設定部２１３は、ステップＳ１５０１に戻り、同様の処理を実行する。【０１７５】
選択された分割クエリ２２０に含まれる全てのクエリに対して処理が完了していると判定された場合、フロー制御設定部２１３は、全ての分割クエリ２２０について処理が完了したか否かを判定する（ステップＳ１５０４）。ステップＳ１５０４の処理は、ステップＳ１１０２の処理と同一である。【０１７６】
ステップＳ１５０２において、選択されたクエリにフロー制御が必要なオペレータが含まれると判定された場合、フロー制御設定部２１３は、選択されたクエリがグループ化クエリであるか否かを判定する（ステップＳ１５０５）。具体的には、以下のような処理が実行される。【０１７７】
フロー制御設定部２１３は、オペレータ種別情報２１５を参照し、選択されたクエリにグループ化７０３が「ＹＥＳ」であるオペレータが二つ以上含まれるか否かを判定する。このとき、フロー制御設定部２１３は、特定のオペレータの組合せについてのみ判定を行ってもよい。例えば、フロー制御設定部２１３は、オペレータ「ＰＡＲＴＩＴＩＯＮ  ＢＹ」及びオペレータ「ＧＲＯＵＰ  ＢＹ」のそれぞれのグループ化７０３が「ＹＥＳ」であるか否かを判定する。【０１７８】
前述した条件を満たさない場合、フロー制御設定部２１３は、選択されたクエリがグループ化クエリではないと判定する。【０１７９】
前述した条件を満たす場合、フロー制御設定部２１３は、選択されたクエリがグループ化クエリであると判定する。以上がステップＳ１５０５の処理の説明である。【０１８０】
選択されたクエリがグループ化クエリではないと判定された場合、フロー制御設定部２１３は、選択されたクエリが含まれる分割クエリ２２０を、フロー制御が必要な分割クエリ２２０として特定する（ステップＳ１５０６）。ステップＳ１５０６の処理は、ステップＳ１１０１の処理と同一である。【０１８１】
次に、フロー制御設定部２１３は、選択された分割クエリ２２０が最上位の分割クエリ２２０であるか否かを判定する（ステップＳ１５０７）。ステップＳ１５０７の処理は、ステップＳ１４０６の処理と同一の処理である。【０１８２】
選択された分割クエリ２２０が最上位の分割クエリ２２０であると判定された場合、フロー制御設定部２１３は、処理を終了する。【０１８３】
選択された分割クエリ２２０が最上位の分割クエリ２２０ではないと判定された場合、フロー制御設定部２１３は、選択された分割クエリ２２０より上位の分割クエリ２２０を、フロー制御が必要な分割クエリ２２０として特定する（ステップＳ１５０８）。その後、フロー制御設定部２１３は、処理を終了する。ステップＳ１５０８の処理は、ステップＳ１４０７の処理と同一の処理である。【０１８４】
ステップＳ１５０５において、選択されたクエリがグループ化クエリであると判定された場合、フロー制御設定部２１３は、選択されたクエリに入力される集約データの経路が独立であるか否かを判定する（ステップＳ１５０９）。【０１８５】
具体的には、フロー制御設定部２１３は、経路情報２１６を参照して、選択されたクエリに対応するエントリを検索する。さらに、フロー制御設定部２１３は、選択されたクエリにおけるグループ化のキーが検索されたエントリのグループ化キー８０２と一致し、かつ、独立性８０３が「ＹＥＳ」であるか否かを判定する。【０１８６】
前述した条件を満たす場合、フロー制御設定部２１３は、選択されたクエリに入力される集約データの経路が独立であると判定する。すなわち、集約データの経路が複数存在しない場合、当該経路が独立であることを示す。【０１８７】
選択されたクエリに入力される集約データの経路が独立ではないと判定された場合、フロー制御設定部２１３は、ステップＳ１５０６に進む。【０１８８】
選択されたクエリに入力される集約データの経路が独立であると判定された場合、フロー制御設定部２１３は、ステップＳ１５０３に進む。【０１８９】
図１５Ａ及び図１５Ｂでは、フロー制御設定部２１３は、フロー制御が必要、かつ、経路情報２１６を参照する必要がないオペレータが含まれるクエリを含む分割クエリ２２０、及び、フロー制御が必要であり、かつ、集約データの経路が独立であるクエリを含む分割クエリを検索するために、分割クエリ２２０単位でステップＳ１５０２、ステップＳ１５０５、ステップＳ１５０９の処理を実行する。【０１９０】
実施例３は、実施例１及び実施例２と同様の効果を有する。また、実施例３によれば、クエリ振り分け計算機１００は、より詳細なフロー制御の要否判定を行うため、より効率的な分散型のストリームデータ処理システムの設定が可能となる。【０１９１】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。【０１９２】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。【０１９３】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｊａｖａ等の広範囲のプログラム又はスクリプト言語で実装できる。【０１９４】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。【０１９５】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【図１】
2017168497.tif 000005
【図２】
2017168497.tif 000006
【図３】
2017168497.tif 000007
【図４】
2017168497.tif 000008
【図５】
2017168497.tif 000009
【図６】
2017168497.tif 000010
【図７】
2017168497.tif 000011
【図８】
2017168497.tif 000012
【図９】
2017168497.tif 000013
【図１０】
2017168497.tif 000014
【図１１】
2017168497.tif 000015
【図１２】
2017168497.tif 000016
【図１３】
2017168497.tif 000017
【図１４】
2017168497.tif 000018
【図１５Ａ】
2017168497.tif 000019
【図１５Ｂ】
2017168497.tif 000020
【手続補正書】
【提出日】平成30年1月4日(2018.1.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ストリームデータ処理を実行する複数の計算機、及び前記複数の計算機に一つ以上のクエリを含む複数の分割クエリを割り当てる管理計算機を含む計算機システムであって、
前記複数の計算機の各々は、第１プロセッサ、前記第１プロセッサに接続される第１メモリ、及び前記第１プロセッサに接続され、外部装置と接続するための第１インタフェースを有し、
前記管理計算機は、第２プロセッサ、前記第２プロセッサに接続される第２メモリ、及び前記第２プロセッサに接続され、外部装置と接続するための第２インタフェースを有し、
前記管理計算機は、
前記ストリームデータ処理を実現するための複数のクエリを含む分析シナリオ、及び前記分析シナリオを前記複数の分割クエリに分割するための分割情報を受け付けるパラメータ入力部と、
前記分析シナリオを解析することによって、前記分析シナリオに含まれる前記複数のクエリの構成を示すクエリグラフを生成するクエリ解析部と、を有し、
前記クエリ解析部は、
前記分析シナリオ及び前記分割情報に基づいて、前記クエリによって処理されるデータの発生順番及び当該データの受信順番を整合させるためのフロー制御が必要な分割クエリを特定し、
前記フロー制御が必要な分割クエリを前記複数の計算機に割り当てる場合、前記フロー制御が必要な分割クエリが割り当てられる複数の計算機に対して前記フロー制御の設定を行うことを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記クエリ解析部は、前記複数の分割クエリの各々を、前記フロー制御が必要な分割クエリとして特定することを特徴とする計算機システム。
【請求項３】
請求項１に記載の計算機システムであって、
前記クエリは、一つ以上のオペレータを含み、
前記クエリ解析部は、前記オペレータの種別、及び前記フロー制御の要否を示す第１フラグが対応付けられたエントリを含むオペレータ種別情報を保持し、
前記クエリ解析部は、前記オペレータ種別情報を参照して、前記複数の分割クエリの中から、前記フロー制御が必要なオペレータが含まれるクエリを含む第１分割クエリを検索し、
前記第１分割クエリを前記フロー制御が必要な分割クエリとして特定することを特徴とする計算機システム。
【請求項４】
請求項３に記載の計算機システムであって、
前記クエリ解析部は、
前記第１分割クエリが検索された場合、前記クエリグラフを参照して、前記第１分割クエリが処理するデータの入力元となる分割クエリを検索し、
前記検索された分割クエリを前記フロー制御が必要な分割クエリとして特定することを特徴とする計算機システム。
【請求項５】
請求項３に記載の計算機システムであって、
前記クエリ解析部は、前記クエリの識別情報、及び前記クエリに入力され、任意の識別情報に基づいて集約された集約データの経路が一つであるか否かを示す第２フラグが対応付けられたエントリを含む経路情報を保持し、
前記オペレータ種別情報に含まれる前記エントリは、前記経路情報の参照の要否を示す第３フラグが対応付けられ、
前記クエリ解析部は、
前記オペレータ種別情報を参照して、前記複数の分割クエリの中から、前記フロー制御が必要であり、かつ、前記経路情報の参照が必要でないオペレータが含まれるクエリを含む第２分割クエリを検索し、
前記オペレータ種別情報及び前記経路情報を参照して、前記複数の分割クエリの中から、前記フロー制御が必要であり、かつ、前記集約データの経路が一つであるクエリを含む第３分割クエリを検索し、
前記第２分割クエリ及び前記第３分割クエリを前記フロー制御が必要な分割クエリとして特定することを特徴とする計算機システム。
【請求項６】
請求項１に記載の計算機システムであって、
前記複数の計算機は、
データを受信するデータ受信部と、
前記データ受信部が受信したデータを前記分割クエリに基づいて処理するクエリ処理部と、
前記クエリ処理部の処理結果を送信するデータ送信部と、を有し、
前記フロー制御が設定された前記分割クエリが割り当てられた前記データ受信部は、前記フロー制御を実行するフロー制御部を含み、
前記フロー制御部は、一時的に前記データを格納するデータ保存部を含み、
前記フロー制御部は、
前記データ受信部が前記データを受信した場合、前記受信したデータに含まれる時刻を取得し、
前記受信したデータから取得した時刻が所定の期間に含まれるか否かを判定し、
前記受信したデータから取得された時刻が前記所定の期間に含まれる場合、前記受信したデータを前記データ保存部に格納し、
前記受信したデータから取得された時刻が前記所定の期間に含まれない場合、前記データ保存部に格納されるデータを時系列順にソートし、前記ソートされたデータを前記クエリ処理部に出力することを特徴とする計算機システム。
【請求項７】
請求項１に記載の計算機システムであって、
前記複数の計算機は、
データを受信するデータ受信部と、
前記データ受信部が受信したデータを前記分割クエリに基づいて処理するクエリ処理部と、
前記クエリ処理部の処理結果を送信するデータ送信部と、を有し、
前記管理計算機は、前記フロー制御が設定された前記分割クエリを前記計算機に割り当てる場合に、前記フロー制御を実行するフロー制御部を前記データ受信部に設定することを特徴とする計算機システム。
【請求項８】
請求項１に記載の計算機システムであって、
前記複数の計算機は、
データを受信するデータ受信部と、
前記データ受信部が受信したデータを前記分割クエリに基づいて処理するクエリ処理部と、
前記クエリ処理部の処理結果を送信するデータ送信部と、を有し、
前記データ受信部は、非活性化状態の前記フロー制御を実行するフロー制御部を含み、
前記管理計算機は、前記フロー制御が設定された前記分割クエリを割り当てる場合に、前記フロー制御部を活性状態に設定することを特徴とする計算機システム。
【請求項９】
ストリームデータ処理を実行する複数の計算機、及び前記複数の計算機に一つ以上のクエリを含む複数の分割クエリを割り当てる管理計算機を含む計算機システムにおけるストリームデータ処理システムの設定方法であって、
前記複数の計算機の各々は、第１プロセッサ、前記第１プロセッサに接続される第１メモリ、及び前記第１プロセッサに接続され、外部装置と接続するための第１インタフェースを有し、
前記管理計算機は、第２プロセッサ、前記第２プロセッサに接続される第２メモリ、及び前記第２プロセッサに接続され、外部装置と接続するための第２インタフェースを有し、
前記管理計算機は、
前記ストリームデータ処理を実現するための複数のクエリを含む分析シナリオ、及び前記分析シナリオを前記複数の分割クエリに分割するための分割情報を受け付けるパラメータ入力部と、
前記分析シナリオを解析することによって、前記分析シナリオに含まれる前記複数のクエリの構成を示すクエリグラフを生成するクエリ解析部と、を有し、
前記クエリ解析部が、前記分析シナリオ及び前記分割情報に基づいて、前記クエリによって処理されるデータの発生順番及び当該データの受信順番を整合させるためのフロー制御が必要な分割クエリを特定する第１のステップと、
前記クエリ解析部が、前記フロー制御が必要な分割クエリを前記複数の計算機に割り当てる場合、前記フロー制御が必要な分割クエリが割り当てられる複数の計算機に対して前記フロー制御の設定を行う第２のステップと、を含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１０】
請求項９に記載のストリームデータ処理システムの設定方法であって、
前記第１のステップは、前記クエリ解析部が、前記複数の分割クエリの各々を、前記フロー制御が必要な分割クエリとして特定するステップを含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１１】
請求項９に記載のストリームデータ処理システムの設定方法であって、
前記クエリは、一つ以上のオペレータを含み、
前記クエリ解析部は、前記オペレータの種別、及び前記フロー制御の要否を示す第１フラグが対応付けられたエントリを含むオペレータ種別情報を保持し、
前記第１のステップは、
前記クエリ解析部が、前記オペレータ種別情報を参照して、前記複数の分割クエリの中から、前記フロー制御が必要なオペレータが含まれるクエリを含む第１分割クエリを検索する第３のステップと、
前記クエリ解析部が、前記第１分割クエリを前記フロー制御が必要な分割クエリとして特定する第４のステップと、を含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１２】
請求項１１に記載のストリームデータ処理システムの設定方法であって、
前記第４のステップは、
前記クエリ解析部が、前記クエリグラフを参照して、前記第１分割クエリが処理するデータの入力元となる分割クエリを検索するステップと、
前記クエリ解析部が、前記検索された分割クエリを前記フロー制御が必要な分割クエリとして特定するステップと、を含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１３】
請求項１１に記載のストリームデータ処理システムの設定方法であって、
前記クエリ解析部は、前記クエリの識別情報、及び前記クエリに入力され、任意の識別情報に基づいて集約された集約データの経路が一つであるか否かを示す第２フラグが対応付けられたエントリを含む経路情報を保持し、
前記オペレータ種別情報に含まれる前記エントリは、前記経路情報の参照の要否を示す第３フラグが対応付けられ、
前記第１のステップは、
前記クエリ解析部が、前記オペレータ種別情報を参照して、前記複数の分割クエリの中から、前記フロー制御が必要であり、かつ、前記経路情報の参照が必要でないオペレータが含まれるクエリを含む第２分割クエリを検索するステップと、
前記クエリ解析部が、前記オペレータ種別情報及び前記経路情報を参照して、前記複数の分割クエリの中から、前記フロー制御が必要であり、かつ、前記集約データの経路が一つであるクエリを含む第３分割クエリを検索するステップと、
前記クエリ解析部が、前記第２分割クエリ及び前記第３分割クエリを前記フロー制御が必要な分割クエリとして特定するステップと、を含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１４】
請求項９に記載のストリームデータ処理システムの設定方法であって、
前記複数の計算機は、
データを受信するデータ受信部と、
前記データ受信部が受信したデータを前記分割クエリに基づいて処理するクエリ処理部と、
前記クエリ処理部の処理結果を送信するデータ送信部と、を有し、
前記フロー制御が設定された前記分割クエリが割り当てられた前記データ受信部は、前記フロー制御を実行するフロー制御部を含み、
前記フロー制御部は、一時的に前記データを格納するデータ保存部を含み、
前記ストリームデータ処理システムの設定方法は、
前記フロー制御部が、前記データ受信部が前記データを受信した場合、前記受信したデータに含まれる時刻を取得するステップと、
前記フロー制御部が、前記受信したデータから取得した時刻が所定の期間に含まれるか否かを判定するステップと、
前記フロー制御部が、前記受信したデータから取得された時刻が前記所定の期間に含まれる場合、前記受信したデータを前記データ保存部に格納するステップと、
前記フロー制御部が、前記受信したデータから取得された時刻が前記所定の期間に含まれない場合、前記データ保存部に格納されるデータを時系列順にソートし、前記ソートされたデータを前記クエリ処理部に出力するステップと、を含むことを特徴とするストリームデータ処理システムの設定方法。
【請求項１５】
請求項９に記載のストリームデータ処理システムの設定方法であって、
前記複数の計算機は、
データを受信するデータ受信部と、
前記データ受信部が受信したデータを前記分割クエリに基づいて処理するクエリ処理部と、
前記クエリ処理部の処理結果を送信するデータ送信部と、を有し、
前記第２のステップは、前記クエリ解析部が、前記フロー制御を実行するフロー制御部を前記データ受信部に設定するステップを含むことを特徴とするストリームデータ処理システムの設定方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
そのため、従来、管理者等は、データの発生順番及びデータの受信順番の不一致を解消するために、通信の遅延時間、各クエリ間の接続、及び入出力されるデータの関係等を考慮して、データの発生順番及びデータの受信順番を整合させるためのクエリ及びデータを受信するソフトウェアを開発する必要があった。そのため、分散型のストリームデータ処理システムの設定に必要なコストが大きくなるという問題がある。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００２１
【補正方法】変更
【補正の内容】
【００２１】
メモリ１０２は、ＣＰＵ１０１が実行するプログラム及び当該プログラムによって使用される情報を格納する記憶媒体である。メモリ１０２に格納されるプログラム及び情報については後述する。ストレージ装置１０３は、プログラム及び情報を格納する記憶媒体である。ストレージ装置１０３は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）又はＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶媒体が考えられる。なお、本実施例は記憶媒体の種類に限定されない。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００９２
【補正方法】変更
【補正の内容】
【００９２】
（設定方法１）ストリームデータ処理計算機１２０のデータ受信部１３１がフロー制御部２３０を含まない場合、クエリ解析部１１２は、データ受信部１３１にフロー制御部２３０を追加する。例えば、クエリ解析部１１２は、フロー制御部２３０を実現するプログラムをストリームデータ処理計算機１２０にインストールする。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１３７
【補正方法】変更
【補正の内容】
【０１３７】
そのため、管理者等は、クエリ及びデータを受信するソフトウェアを開発することなく、容易にフロー制御を組み込んだ分散型のストリームデータ処理システムを設定できる。また、分散型のストリームデータ処理システムの設定に必要なコストを削減できる。
【国際調査報告】
2017168497.tif 000021
2017168497.tif 000022