(57)【要約】      （修正有）【課題】グラフデータの再帰クエリを用いたストリームデータ処理方法を提供する。【解決手段】ストリームデータ処理コンピュータは、ストリームデータである入力ストリームを受信し、クエリを実行する演算部の実行順序を管理し、ストリームデータである出力ストリームを出力するクエリ実行部と、前記クエリを実行する際に生成されるデータを格納する一時格納部を含むメモリと、を含む。前記演算部は、複数の静的再帰実行部と、判定演算部と、動的再帰実行部と、を含む。前記複数の静的再帰実行部は、前記クエリの静的再帰実行を再帰数の回数行う。前記判定演算部は、前記クエリの静的再帰実行が前記再帰数の回数行われた後で、予め設定された条件が満たされているか否かを判定する。前記動的再帰実行部は、前記予め設定された条件が満たされていない場合、動的再帰実行によって前記クエリの実行を続行する。【選択図】図２
2014123354.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、
ストリームデータである入力ストリームを受信し、クエリを実行する演算部の実行順序を管理し、ストリームデータである出力ストリームを出力する、クエリ実行部と、
前記クエリを実行する際に生成されるデータを格納する一時格納部を含むメモリと、を含むストリームデータ処理コンピュータであって、
前記演算部は、複数の静的再帰実行部と、判定演算部と、動的再帰実行部と、を含み、
前記複数の静的再帰実行部は、前記クエリの静的再帰実行を再帰数の回数行い、
前記判定演算部は、前記クエリの静的再帰実行が前記再帰数の回数行われた後で、予め設定された条件が満たされているか否かを判定し、
前記動的再帰実行部は、前記予め設定された条件が満たされていない場合、動的再帰の値に基づいて、前記複数の静的再帰実行部の最後の静的再帰実行部の最後の結果から、動的再帰実行によって前記クエリの実行を続行する、ストリームデータ処理コンピュータ。
【請求項２】
請求項１に記載のストリームデータ処理コンピュータであって、
前記予め設定条件は、前記複数の静的再帰実行部が前記クエリの静的再帰実行を前記再帰数の回数行った後に新たな結果を生成している場合に満たされる、ストリームデータ処理コンピュータ。
【請求項３】
請求項２に記載のストリームデータ処理コンピュータであって、
前記判定演算部は、前記複数の静的再帰実行部が前記クエリの静的再帰実行を前記再帰数の回数行った後に新たな結果を生成しているか否かを判定し、
前記動的再帰実行部は、前記新たな結果が生成されていない場合、前記複数の静的再帰実行部の最後の静的再帰実行部の最後の結果からの動的再帰実行を、前記動的再帰の値と同じ再帰回数行うことによって、前記クエリの実行を続行する、ストリームデータ処理コンピュータ。
【請求項４】
請求項１に記載のストリームデータ処理コンピュータであって、
クエリ解析部をさらに含み、
前記クエリ解析部は、実行ツリーにおいて、
前記クエリの静的再帰実行の前記再帰数と合致する数の静的再帰実行部を生成する、前記メモリにおける静的再帰クエリ生成部と、
前記判定演算部を生成する、前記メモリにおける判定演算部生成部と、
前記動的再帰実行部を生成する、前記メモリにおける動的再帰クエリ生成部と、を呼び出すストリームデータ処理コンピュータ。
【請求項５】
請求項４に記載のストリームデータ処理コンピュータであって、
前記クエリ解析部は、前記入力ストリームに基づいて、かつ前記クエリを解析することによって、複数のストリームの入力タプルの集合を含む前記実行ツリーを作成し、
前記演算部は、複数のデータ列を切り出す時間間隔を指定して前記複数のストリームからそれぞれ複数のデータ列を切り出す複数のスライディングウィンドウ演算部を含み、
前記複数の静的再帰実行部は、前記複数のストリームのための前記複数のスライディングウィンドウ演算部の後ろに配置され、
前記判定演算部は、前記最後の静的再帰実行部の後ろに配置され、
前記動的再帰実行部は、前記判定演算部の後ろに配置される、ストリームデータ処理コンピュータ。
【請求項６】
請求項１に記載のストリームデータ処理コンピュータであって、
前記動的再帰実行部は、前記最後の静的再帰実行部の前記最後の結果からの前記クエリの動的再帰実行を再帰数の回数行うか否かを、前記動的再帰の値と動的再帰実行の再帰した回数とに基づいて判定する再帰回数判定部を含む、ストリームデータ処理コンピュータ。
【請求項７】
請求項１に記載のストリームデータ処理コンピュータであって、
前記予め設定された条件は、パス重みとパス数の少なくとも一方に関する条件である、ストリームデータ処理コンピュータ。
【請求項８】
請求項１に記載のストリームデータ処理コンピュータであって、
前記クエリの静的再帰実行の前記再帰数と、前記動的再帰の値とは、予め定められている、ストリームデータ処理コンピュータ。
【請求項９】
請求項１に記載のストリームデータ処理コンピュータであって、
当該ストリームデータ処理コンピュータの資源使用量を監視する資源使用量監視部と、
前記測定された資源使用量に基づいて、前記クエリの静的再帰実行の前記再帰数及び前記動的再帰の値の少なくとも一方を調節する、再帰数調節部と、をさらに含む、ストリームデータ処理コンピュータ。
【請求項１０】
請求項９に記載のストリームデータ処理コンピュータであって、
再帰数調節設定コマンドに基づいて再帰数調節定義テーブルを更新する、再帰数調節設定部をさらに含み、
前記資源使用量監視部は、前記再帰数調節定義テーブルに基づいて当該ストリームデータ処理コンピュータの資源使用量を監視し、
前記再帰数調節設定部は、前記監視されている資源使用量と前記再帰数調節定義テーブルとに基づいて、前記クエリの静的再帰実行の前記再帰数及び前記動的再帰の値の少なくとも一方を変更する、ストリームデータ処理コンピュータ。
【請求項１１】
データプロセッサを制御してストリームデータ処理を行う複数の指示を格納しているコンピュータ読み取り可能非一時的記憶媒体であって、
前記ストリームデータ処理は、一時格納部を有するメモリを含むストリームデータ処理コンピュータにおいて、一次情報としてストリームデータ入力情報を受信し、前記受信した一次情報から予め定められた期間内の一次情報を取得することによって二次情報を生成し、
前記複数の指示は、
前記データプロセッサに、ストリームデータである入力ストリームを受信し、複数の静的再帰実行部と判定演算部と動的再帰実行部とを含む演算部の実行順序をクエリの実行のために管理し、ストリームデータである出力ストリームを出力させる指示と、
前記データプロセッサに、前記クエリを実行する際に生成されるデータを前記一時格納部に格納させる指示と、
前記複数の静的再帰実行部に、前記クエリの静的再帰実行を再帰数の回数行わせる指示と、
前記判定演算部に、前記クエリの静的再帰実行が前記再帰数の回数行われた後に、予め設定された条件が満たされているか否かを判定させる指示と、
前記動的再帰実行部に、前記予め設定された条件が満たされていない場合、動的再帰の値に基づいて、前記複数の静的再帰実行部の最後の静的再帰実行部の最後の結果からの動的再帰実行によって、前記クエリの実行を続行させる指示と、を含む、コンピュータ読み取り可能非一時的記憶媒体。
【請求項１２】
請求項１１に記載のコンピュータ読み取り可能非一時的記憶媒体であって、
前記予め設定された条件は、前記複数の静的再帰実行部が前記クエリの静的再帰実行を前記再帰数の回数行った後に、新たな結果を生成している場合に満たされる、コンピュータ読み取り可能非一時的記憶媒体。
【請求項１３】
請求項１２に記載のコンピュータ読み取り可能非一時的記憶媒体であって、
前記判定演算部に前記予め設定された条件が満たされているか否かを判定させる指示は、前記判定演算部に、前記複数の静的再帰実行部が前記クエリの静的再帰実行を前記再帰数の回数行った後に、新たな結果を生成しているか否かを判定させる指示を含み、
前記動的再帰実行部に前記クエリの実行を続行させる指示は、前記動的再帰実行部に、前記新たな結果が生成されていない場合、前記複数の静的再帰実行部の最後の静的再帰実行部の最後の結果からの動的再帰実行を、前記動的再帰の値と同じ再帰回数行うことによって、前記クエリの実行を続行させる、指示を含む、コンピュータ読み取り可能非一時的記憶媒体。
【請求項１４】
請求項１１に記載のコンピュータ読み取り可能非一時的記憶媒体であって、
前記複数の指示は、
前記データプロセッサに、実行ツリー内に、前記クエリの静的再帰実行の前記再帰数と合致する数の静的再帰実行部を生成させる指示と、
前記データプロセッサに、前記実行ツリー内に前記判定演算部を生成させる指示と、
前記データプロセッサに、前記実行ツリー内に前記動的再帰実行部を生成させる指示と、をさらに含む、コンピュータ読み取り可能非一時的記憶媒体。
【請求項１５】
請求項１４に記載のコンピュータ読み取り可能非一時的記憶媒体であって、
前記演算部は、複数のデータ列を切り出す時間間隔を指定して前記複数のストリームからそれぞれ複数のデータ列を切り出す複数のスライディングウィンドウ演算部を含み、
前記複数の指示は、
前記データプロセッサに、前記入力ストリームに基づいて、かつ前記クエリを解析することによって、複数のストリームの入力タプルの集合を含む前記実行ツリーを作成させる指示と、
前記データプロセッサに、前記複数の静的再帰実行部を、前記複数のストリームのための前記複数のスライディングウィンドウ演算部の後ろに配置させる指示と、
前記データプロセッサに、前記判定演算部を、前記最後の静的再帰実行部の後ろに配置させる指示と、
前記データプロセッサに、前記動的再帰実行部を、前記判定演算部の後ろに配置させる指示と、をさらに含む、コンピュータ読み取り可能非一時的記憶媒体。
【請求項１６】
請求項１１に記載のコンピュータ読み取り可能非一時的記憶媒体であって、
前記動的再帰実行部に、前記所定条件が満たされていない場合に動的再帰実行によって前記クエリの実行を続行させる指示は、前記動的再帰実行部に、前記最後の静的再帰実行部の前記最後の結果からの前記クエリの動的再帰実行を再帰数の回数行うか否かを、前記動的再帰の値と動的再帰実行の再帰した回数とに基づいて判定させる指示を含む、コンピュータ読み取り可能非一時的記憶媒体。
【請求項１７】
請求項１１に記載のコンピュータ読み取り可能非一時的記憶媒体であって、
前記予め設定されている条件は、パス重みとパス数の少なくとも一方に関する条件である、コンピュータ読み取り可能非一時的記憶媒体。
【請求項１８】
請求項１１に記載のコンピュータ読み取り可能非一時的記憶媒体であって、
前記クエリの静的再帰実行の前記再帰数及び前記動的再帰の値は、予め定められている、コンピュータ読み取り可能非一時的記憶媒体。
【請求項１９】
請求項１１に記載のコンピュータ読み取り可能非一時的記憶媒体であって、
前記複数の指示は、
前記データプロセッサに、前記ストリームデータ処理コンピュータの資源使用量を監視させる指示と、
前記データプロセッサに、前記監視されている資源使用量に基づいて、前記クエリの静的再帰実行の前記再帰数及び前記動的再帰の値の少なくとも一方を調節させる指示と、をさらに含む、コンピュータ読み取り可能非一時的記憶媒体。
【請求項２０】
請求項１９に記載のコンピュータ読み取り可能非一時的記憶媒体であって、
前記複数の指示は、
前記データプロセッサに、再帰数調節設定コマンドに基づいて再帰数調節定義テーブルを更新させる指示と、
前記データプロセッサに、前記再帰数調節定義テーブルに基づいて前記ストリームデータ処理コンピュータの資源使用量を監視させる指示と、
前記データプロセッサに、前記監視されている資源使用量及び前記再帰数調節定義テーブルに基づいて、前記クエリの静的再帰実行の前記再帰数及び前記動的再帰の値の少なくとも一方を変更させる指示と、をさらに含む、コンピュータ読み取り可能非一時的記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
本発明は、一般にコンピュータシステムに関し、より詳細には、グラフデータの再帰クエリを用いたストリームデータ処理方法に関する。
【０００２】
ストリームデータ処理は広く利用されている。ストレージ装置に格納されるデータを処理するデータベース管理システム（以下、ＤＢＭＳと称する）に連続して入力されるデータをリアルタイムで処理するデータ処理システムに対する需要が増大している。例えば、株取引を行うシステムにおいては、いかに速く株価の変化に反応できるかが最重要課題のひとつであり、従来のＤＢＭＳが実行する、いったんストレージ装置に株価データを格納し、格納されたデータを検索する方法では、株価の変化のスピードに応じて即座に対応できず、ビジネスチャンスを逃してしまう恐れがある。例えば、米国特許第５４９５６００号においては、格納されたクエリを定期的に発行する仕組みが開示されているが、この仕組みを、株価などのデータが入力された直後にクエリを実行することが重要な、リアルタイムデータ処理に適用するのは困難である。
【０００３】
連続して入力されるデータのことをストリームデータと定義し、ストリームデータのリアルタイム処理に適したデータ処理システムとして、ストリームデータ処理システムが提案されている。例えば、Ｒ．Ｍｏｔｗａｎｉ，Ｊ．Ｗｉｄｏｍ，Ａ．Ａｒａｓｕ、Ｂ．Ｂａｂｃｏｃｋ、Ｓ．Ｂａｂｕ、Ｍ．Ｄａｔａｒ，Ｇ．Ｍａｎｋｕ、Ｃ．Ｏｌｓｔｏｎ，Ｊ．Ｒｏｓｅｎｓｔｅｉｎ，Ｒ．Ｖａｒｍａ著、「Ｑｕｅｒｙ  Ｐｒｏｃｅｓｓｉｎｇ，Ｒｅｓｏｕｒｃｅ  Ｍａｎａｇｅｍｅｎｔ，ａｎｄ  Ａｐｐｒｏｘｉｍａｔｉｏｎ  ｉｎ  ａ  Ｄａｔａ  Ｓｔｒｅａｍ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ」（Ｐｒｏｃ．ｏｆ  ｔｈｅ  ２００３  Ｃｏｎｆ．ｏｎ  Ｉｎｎｏｖａｔｉｖｅ  Ｄａｔａ  Ｓｙｓｔｅｍｓ  Ｒｅｓｅａｒｃｈ（ＣＩＤＲ）  オンライン  ２００３年１月掲載  インターネットＵＲＬ＜ｈｔｔｐｓ：／／ｄａｔａｂａｓｅ．ｃｓ．ｗｉｓｃ．ｅｄｕ／ｃｉｄｒ／ｃｉｄｒ２００３／ｐｒｏｇｒａｍ／ｐ２２．ｐｄｆ＞  ２０１２年１月１９日検索）は、ストリームデータ処理システム「ＳＴＲＥＡＭ」を開示している。
【０００４】
このストリームデータ処理システムでは、まずクエリがシステムに登録され、クエリはデータが入ってくるたびに連続して実行される。この点が従来のＤＢＭＳと異なる点である。上述のＳＴＲＥＡＭでは、スライディングウィンドウと呼ばれる概念を採用している。スライディングウィンドウは、ストリームデータを効率よく処理するため、ストリームデータの一部を切り出し、そのデータに存続期間を設ける。スライディングウィンドウの仕様を含むクエリ記述言語の好適な例として、前述のＲ．Ｍｏｔｗａｎｉによる文献に開示された連続クエリ言語（ＣＱＬ：Ｃｏｎｔｉｎｕｏｕｓ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）がある。ＣＱＬはＤＢＭＳに広く使用されているＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）のＦＲＯＭ句において、ストリーム名に続いて括弧を用いてスライディングウィンドウを規定する拡張機能を有している。スライディングウィンドウを規定する代表的な方法には２種類あり、（１）切り出すデータ列数を指定する方法と、（２）切り出す列数のデータを含む時間間隔を指定する方法がある。例えば、前述のＲ．Ｍｏｔｗａｎｉによる文献の第２項に記載の「前５０行」は、方法（１）による好適な例であり、５０行に相当するデータが切り出され、処理される。また、同様に「前１５分の範囲」は、方法（２）による好適な例であり、１５分間分のデータが切り出され、処理される。方法（１）の場合、データの存続期間は５０個のデータが届くまで、と定義される。方法（２）の場合は、データの存続期間は１５分間と定義される。スライディングウィンドウによって切り出されたストリームデータはメモリに保持され、クエリ処理に利用される。
【０００５】
一つの課題は、グラフパス探索は、再帰手法を使用するという点である。ストリームデータ処理エンジンは、仮状態の集約結果を一時的に格納する一時保存部を有する。ところが、ストリームデータ処理エンジンが再帰手法を使用する場合、仮の状態を保持し続けるには莫大な処理コストがかかり、膨大なメモリスペースが必要となる。図１はグラフの例を示す。例えば、パス「Ａ→Ｐ」は、「Ａ→Ｄ→Ｌ→Ｍ→Ｏ→Ｐ」と算出される。ストリームデータ処理エンジンは、所定期間／所定数（１０分間、５０ノード、等)のグラフノード及びグラフエッジを保持する。グラフはノード／エッジの追加／削除だけでなく、スライディングウィンドウからの切り出しによっても変化する。例えば、グラフノード１０３が新たに加入された場合、ストリームデータエンジンは、一時的に格納されているデータ「Ａ→Ｄ→Ｌ→Ｍ→Ｏ」を元に計算することができる。新たにエッジ１０４を追加し、ノード１０５を削除し、エッジ１０６を削除する場合も同様である。ところが、エンジンはグラフに変更があるたびにすべての一時保存部のメンテナンスが必要となる。
【０００６】
Ｍｉｙｕｒｕ  Ｄａｙａｒａｔｈｎａ、Ｔｏｙｏｔａｒｏ  Ｓｕｚｕｎｕｍａ著、「Ｈｉｒｕｎｄｏ：Ａ  Ｍｅｃｈａｎｉｓｍ  ｆｏｒ  Ａｕｔｏｍａｔｅｄ  Ｐｒｏｄｕｃｔｉｏｎ  ｏｆ  Ｏｐｔｉｍｉｚｅｄ  Ｄａｔａ  Ｓｔｒｅａｍ  Ｇｒａｐｈｓ」（ＩＣＰＥ２０１２  ＡＣＭ／ＳＰＥＣ  ３ｒｄ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｅｎｇｉｎｅｅｒｉｎｇ、２０１２年４月、於米国ボストン）は、グラフデータのデータストリーム処理方法を示している。ただし、この方法は、クエリ内に埋め込まれた関数によってグラフデータを処理する。また、米国公開特許公報第２０１０／０１０６９４６号は、再帰クエリ方法を示している。しかし、この方法は、再帰数の設定を前提としていない。従来のＲＤＢＭＳ（Ｒｅｌａｔｉｏｎａｌ  ＤａｔａＢａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）には、数、すなわち再帰数を設定する機能を有するものもある。しかし、こうした従来のＲＤＢＭＳは、データセットを扱うのみであり、複数のデータストリームを扱うわけではなく、一時保存部もない。その結果、メンテナンスコストの低い再帰クエリ方法を提供するのは困難である。
【発明の概要】
【０００７】
本発明の好適な実施形態は、グラフデータの再帰クエリを用いたストリームデータ処理方法を提供する。具体的形態において、当該方法は、再帰クエリの段数を設定する。ストリームデータ処理エンジンは、実行ツリーを作成し、一時保存部（静的再帰実行部）に仮の集約結果を保持する。実行ツリー内の、「判定演算部」という特別な演算部が、静的再帰実行部が新たな結果を生成したか否かを判定する。新たな結果が生成されていない場合、動的再帰実行部においてパス探索が続行される。このように、静的再帰実行部が毎回グラフ内の全経路を検索する必要がない。この手法によれば、動的再帰実行部を利用することにより、一時保存部のメンテナンスを削減することができ、メモリスペースと処理コストの均衡をとることが可能となる。
【０００８】
本発明の一態において、ストリームデータ処理コンピュータは、プロセッサと、ストリームデータである入力ストリームを受信し、クエリを実行する演算部の実行順序を管理し、ストリームデータである出力ストリームを出力する、クエリ実行部と、前記クエリを実行する際に生成されるデータを格納する一時格納部を含むメモリと、を含む。前記演算部は、複数の静的再帰実行部と、判定演算部と、動的再帰実行部と、を含む。前記複数の静的再帰実行部は、前記クエリの静的再帰実行を再帰数の回数行う。前記判定演算部は、前記クエリの静的再帰実行が前記再帰数の回数行われた後で、予め設定された条件が満たされているか否かを判定する。前記動的再帰実行部は、前記予め設定された条件が満たされていない場合、動的再帰の値に基づいて、前記複数の静的再帰実行部の最後の静的再帰実行部の最後の結果から、動的再帰実行によって前記クエリの実行を続行する。
【０００９】
いくつかの実施形態において、前記予め設定条件は、前記複数の静的再帰実行部が前記クエリの静的再帰実行を前記再帰数の回数行った後に新たな結果を生成している場合に満たされる。前記判定演算部は、前記複数の静的再帰実行部が前記クエリの静的再帰実行を前記再帰数の回数行った後に新たな結果を生成しているか否かを判定する。前記動的再帰実行部は、前記新たな結果が生成されていない場合、前記複数の静的再帰実行部の最後の静的再帰実行部の最後の結果からの動的再帰実行を、前記動的再帰の値と同じ再帰回数行うことによって、前記クエリの実行を続行する。
【００１０】
特定の実施形態において、クエリ解析部は、実行ツリーにおいて、前記クエリの静的再帰実行の前記再帰数と合致する数の静的再帰実行部を生成する、前記メモリにおける静的再帰クエリ生成部と、前記判定演算部を生成する、前記メモリにおける判定演算部生成部と、前記動的再帰実行部を生成する、前記メモリにおける動的再帰クエリ生成部と、を呼び出す。前記クエリ解析部は、前記入力ストリームに基づいて、かつ前記クエリを解析することによって、複数のストリームの入力タプルの集合を含む前記実行ツリーを作成する。前記演算部は、複数のデータ列を切り出す時間間隔を指定して前記複数のストリームからそれぞれ複数のデータ列を切り出す複数のスライディングウィンドウ演算部を含む。前記複数の静的再帰実行部は、前記複数のストリームのための前記複数のスライディングウィンドウ演算部の後ろに配置される。前記判定演算部は、前記最後の静的再帰実行部の後ろに配置される。前記動的再帰実行部は、前記判定演算部の後ろに配置される。
【００１１】
いくつかの実施形態において、前記動的再帰実行部は、前記最後の静的再帰実行部の前記最後の結果からの前記クエリの動的再帰実行を再帰数の回数行うか否かを、前記動的再帰の値と動的再帰実行の再帰した回数とに基づいて判定する再帰回数判定部を含む。前記予め設定された条件は、パス重みとパス数の少なくとも一方に関する条件である。前記クエリの静的再帰実行の前記再帰数と、前記動的再帰の値とは、予め定められている。前記ストリームデータ処理コンピュータは、当該ストリームデータ処理コンピュータの資源使用量を監視する資源使用量監視部と、前記測定された資源使用量に基づいて、前記クエリの静的再帰実行の前記再帰数及び前記動的再帰の値の少なくとも一方を調節する、再帰数調節部と、をさらに含む。
【００１２】
特定の実施形態において、前記ストリームデータ処理コンピュータは、再帰数調節設定コマンドに基づいて再帰数調節定義テーブルを更新する、再帰数調節設定部をさらに含む。前記資源使用量監視部は、前記再帰数調節定義テーブルに基づいて当該ストリームデータ処理コンピュータの資源使用量を監視する。前記再帰数調節設定部は、前記監視されている資源使用量と前記再帰数調節定義テーブルとに基づいて、前記クエリの静的再帰実行の前記再帰数及び前記動的再帰の値の少なくとも一方を変更する。
【００１３】
本発明の他の態様は、データプロセッサを制御してストリームデータ処理を行う複数の指示を格納しているコンピュータ読み取り可能非一時的記憶媒体であって、前記ストリームデータ処理は、一時格納部を有するメモリを含むストリームデータ処理コンピュータにおいて、一次情報としてストリームデータ入力情報を受信し、前記受信した一次情報から予め定められた期間内の一次情報を取得することによって二次情報を生成する。前記複数の指示は、前記データプロセッサに、ストリームデータである入力ストリームを受信し、複数の静的再帰実行部と判定演算部と動的再帰実行部とを含む演算部の実行順序をクエリの実行のために管理し、ストリームデータである出力ストリームを出力させる指示と、前記データプロセッサに、前記クエリを実行する際に生成されるデータを前記一時格納部に格納させる指示と、前記複数の静的再帰実行部に、前記クエリの静的再帰実行を再帰数の回数行わせる指示と、前記判定演算部に、前記クエリの静的再帰実行が前記再帰数の回数行われた後に、予め設定された条件が満たされているか否かを判定させる指示と、前記動的再帰実行部に、前記予め設定された条件が満たされていない場合、動的再帰の値に基づいて、前記複数の静的再帰実行部の最後の静的再帰実行部の最後の結果からの動的再帰実行によって、前記クエリの実行を続行させる指示と、を含む。
【００１４】
本発明の、上記及び他の特徴や利点は、以下の具体的な実施形態の詳細な説明から、当業者には明らかとなるであろう。
【図面の簡単な説明】
【００１５】
【図１】図１は、グラフのサンプル例を示す。
【図２】図２は、本発明の第１の実施形態に係るストリームデータ処理サーバ２００の例を示す。
【図３】図３は、クエリの一例を示す。
【図４】図４は、ストリームデータの一例を示す。
【図５】図５は、再帰クエリ定義テーブルの一例を示す。
【図６】図６は、クエリが解析される際のクエリ実行部の処理フローの一例を示す。
【図７】図７は、第１の実施形態に係る図２のストリームデータ処理システムにおいて実行される全体処理を説明するフロー図の一例である。
【図８】図８は、図７のステップ７０５のクエリ解析を説明するフロー図の一例である。
【図９】図９は、第１の実施形態に係る図７のステップ７０６のクエリ実行を説明するフロー図の一例である。
【図１０】図１０は、図９の実行例を示す。
【図１１】図１１は、本発明の第２の実施例に係るストリームデータ処理サーバ２００の例を示す。
【図１２】図１２は、判定条件定義テーブルの一例を示す。
【図１３】図１３は、第２の実施形態に係る図１１のストリームデータ処理システム２００において実行される全体処理を説明するフロー図の一例である。
【図１４】図１４は、第２の実施形態に係る図１３のステップ１３０８のクエリ実行を説明するフロー図の一例である。
【図１５】図１５は、本発明の第３の実施形態に係るストリームデータ処理サーバの例を示す。
【図１６】図１６は、再帰数調節定義テーブルの一例を示す。
【図１７】図１７は、資源利用監視テーブルの一例を示す図である。
【図１８】図１８は、第２の実施例に係る図１５のストリームデータ処理システムにおいて実行される全体処理を説明するフロー図の一例である。
【図１９】図１９は、図１８のステップ１８１０の再帰数を調節する処理の詳細を説明するフロー図の一例である。
【発明を実施するための形態】
【００１６】
以下の本発明の詳細な説明では、本発明の開示の一部となる添付図面を参照しつつ、発明を実施する好適な実施形態が示される。尚、実施形態は発明を説明する目的で示されるものであり、限定する目的で示されるものではない。各図面において、類似した数字符号は、複数図面にわたり実質的に同様の構成要素を示す。尚、以下において記載し、図面にも示されるように、詳細な説明には様々な実施形態が示されるが、本発明は、以下に記載し、説明される実施形態に限定されるものではなく、当業者が現在あるいは将来的に知りうる、他の実施形態にも拡大適用することができる。本明細書中の「ある実施形態」、「本実施形態」、「これら実施形態」等の記載は、当該実施形態に関して記載された特有の特徴や構造、あるいは特性が本発明の少なくとも一つの実施形態に含まれることを意味し、本明細書の随所に見られるこれらの記載は、必ずしもすべて同一の実施形態に言及しているとは限らない。更に、以下の詳細な説明においては、本発明を完全に理解するため、具体的事項が数多く記載されるが、当業者にとっては、それらの具体的事項のすべてが、本発明を実施するに当たり、不可欠なものであるとは限らないことは明らかであろう。状況によって、周知の構造、材料、回路、処理、インターフェース等は詳細に記載されず、ブロック図で説明される場合もあるが、それは本発明を不必要に不明確にしないためのものである。
【００１７】
更に、以下に記載の本発明の詳細な説明の一部は、アルゴリズムやコンピュータ内の演算を表す記号表現の面から記載されるが、これらアルゴリズムの記述や記号表現は、データ処理技術に従事する者が、別の当業者にその革新的部分の本質を最も効果的に伝達するために使用する手段である。アルゴリズムとは、所望の最終状態、すなわち結果に至る、一続きの定められた処理ステップのまとまりである。本発明において、具体的な結果を得るために、各処理ステップは具体的な数量を物理的に操作して実行することが求められる。必ずしもそうではない場合もあるが、通常これら数量は、格納や転送、結合、比較、あるいはその他の操作が可能な、電気的あるいは磁気的な信号、すなわち、指示の形態をとる。これら信号は、ビット、値、要素、記号、文字、語、数、指示、等と称すると、慣用的な表現であることから、都合がよい場合もある。しかし、これらの語や類似語はすべて、適切な物理量と対応づけられており、単にこれらの物理量に付すのが便利な名称であるだけであるということは承知されたい。以下の記載から明らかなように、本発明の説明を通して、「処理」、「計算」、「算出」、「判定」、「表示」等の用語を用いた説明は、具体的記載がない限り、コンピュータ装置のレジスタやメモリ内の物理（電子）的数量を示すデータを操作したり、コンピュータ装置のレジスタやメモリ、あるいは、他の情報格納装置や送信装置、表示装置内において、同様に物理量として表す他のデータに変換する、コンピュータ装置やその他の情報処理装置の動作や処理を含みうることを理解されたい。
【００１８】
本発明は、更に、以下に記載の演算を行う装置に関する。当該装置は、要求された目的のため特別に構成されたものでも、１以上のコンピュータプログラムによって選択的に起動されたり設定されたりする１以上の汎用コンピュータを含むものであってもよい。こうしたコンピュータプログラムは、光ディスク、磁気ディスク、ＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｅｖｉｃｅ）（これらに限定されない）等の非一時的媒体や、電子情報の格納に適した他の種類の媒体等のコンピュータ読み取り可能な記憶媒体に格納されていてもよい。以下に示すアルゴリズムや表示は、特別なコンピュータや他の装置に固有に関わるものではない。各種の汎用機を以下に記載のアイデアに従ってプログラムや機能部とともに使用してもよいし、あるいは所望の処理ステップを実行する、より専門的な装置を構成するほうが都合がよいこともあろう。また、本発明は特別なプログラミング言語に基づかずに説明される。様々なプログラミング言語を用いて、以下に記載の本発明のアイデアを実現することができることが理解されよう。プログラミング言語による指示は１以上の処理装置、例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、プロセッサ、あるいはコントローラによって実行される。
【００１９】
本発明の好適な実施形態は、以下により詳細に記載されるとおり、グラフデータの再帰クエリを用いたストリームデータ処理のための装置、方法、及びコンピュータプログラムを提供する。
【００２０】
第１の実施形態
図２は、本発明の第１の実施形態に係るストリームデータ処理サーバ２００の一例を示している。ストリームデータ処理サーバ２００は、ＣＰＵ２０１、メモリ２０２、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）２０３、ＨＢＡ（Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ）２０４、及びＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）２０５を有する。メモリ２０２は、再帰クエリ設定部２１１、クエリ解析部２１２、静的再帰クエリ生成部２１３、動的再帰クエリ生成部２１４、判定演算部生成部２１５、再帰クエリ定義テーブル２１６、及びクエリ実行部２１７を格納する。クエリ実行部２１７は、スライディングウィンドウ２３２、静的再帰実行部２３３、判定演算部２３４、及び従来型パス探索部２４３と再帰回数判定部２４４とを有する動的再帰実行部２３５を含む。
【００２１】
再帰クエリ設定部２１１は、再帰クエリ定義コマンドを受信し、再帰クエリ定義テーブル２１６を更新する（図５及び図７参照）。クエリ解析部２１２は、クエリ２２１（図３参照）を解析し、クエリ実行部２１７を生成する（図８参照）。静的再帰クエリ生成部２１３は、クエリ２２１から静的再帰実行部２３３を生成する（図８、ステップ８０４から８０６参照）。動的再帰クエリ生成部２１４は、クエリ２２１から動的再帰実行部２３５を生成する（図８、ステップ８０８参照）。判定演算部生成部２１５は、クエリ２２１から判定演算部２３４を生成する（図８、ステップ８０７参照）。再帰クエリ定義テーブル２１６は、各クエリにおける再帰数（静的再帰／動的再帰）を管理する（図５参照）。クエリ実行部２１７は、スライディングウィンドウ２３２や、結合演算部２４１及び一時格納部２４２を有する静的再帰クエリ実行部２３３、判定演算部２３４、従来型パス探索部２４３と再帰回数判定部２４４とを有する動的再帰実行部２３５、等の複数の演算部を含む。これら演算部はキューで接続されている。クエリ実行部２１７は各演算部の実行順序をジョブスケジューリングアルゴリズム（ラウンドロビン方式、実行ツリーの葉から根への順序、等）によって管理し、入力ストリーム２３１（図４参照）を受信し、出力ストリーム２３６を出力する（図６参照）。
【００２２】
スライディングウィンドウ２３２を規定するには代表的な２種類の方法がある。（１）切り出すデータ列数を指定する方法と、（２）切り出す列数のデータを含む時間間隔を指定する方法である。静的再帰実行部２３３は、図６に示す静的再帰部６２０に関連し、結合演算部や射影演算部といった複数の演算部を有する。静的再帰実行部２３３は、実行ツリーを作成し、仮集約結果を一時格納部２４２に保持する、ストリームデータの処理エンジンである。実行ツリー内の「判定演算部」２３４という特別な演算部が、静的再帰実行部２３３が新しい結果を生成したか否かを判定する。判定演算部２３４は、図６の判定演算部６４１に関連し、再帰クエリ定義テーブル２１６を参照する。動的再帰実行部２３５は、図６に示す判定演算部６３１に関連する。判定演算部２３４が、静的再帰実行部２３３が新しい結果を生成していないと判定した場合、動的再帰実行部２３５は、静的再帰実行部２３３が最後に出した結果から、パス探索の続きを行う。結合演算部２４１は、複数のストリームを結合し、結合した結果を一時格納部２４２に保持する。一時格納部２４２は、仮集約データ、すなわち結合演算部２４１の結合結果を保存する。従来型パス探索部２４３は、従来型のパス探索を実行する。再帰回数判定部２４４は、再帰クエリ定義テーブル２１６を参照し、動的再帰実行部の再帰数が存在するか否かを判定する。
【００２３】
図３は、クエリの一例を示している。クエリ名はＱ１である（ｒｅｇｉｓｔｅｒ  ｑｕｅｒｙ  Ｑ１で規定）。このクエリは、エッジという名称のストリームの過去１０分間の範囲のタプルの集合（ＦＲＯＭ  ｅｄｇｅ［１０  ｍｉｎｕｔｅ］）と、パスという名称のストリームの過去１０分間の範囲のタプルの集合（ＦＲＯＭ  ｐａｔｈ［１０  ｍｉｎｕｔｅ］）と、ノードという名称のストリームの過去１０分間の範囲のタプルの集合（ＦＲＯＭ  ｅｄｇｅ［１０  ｍｉｎｕｔｅ］）と、を保持する。「Ｗｉｔｈ  ｒｅｃｕｒｓｉｖｅ・・・」で始まる部分を、起点、終点、パス、及びホップ数の関数として再帰的に実行する（ｗｉｔｈ  ｒｅｓｕｒｓｉｖｅ  ｅｘｉｓｔＰａｔｈ（ｏｒｉｇｉｎ，ｔａｒｇｅｔ，ｐａｔｈ、ｔｏｔａｌｈｏｐ）ａｓ（ｓｅｌｅｃｔ・・・））。具体的には以下の通りである。「ｏｒｉｇｉｎ＝ｐａｔｈ．ｏｒｉｇｉｎ」の条件を満たす場合（ｗｈｅｒｅ  ｏｒｉｇｉｎ＝ｐａｔｈ．ｏｒｉｇｉｎ）、エッジとパスとを結合する。結合した結果から「ｏｒｉｇｉｎ，ｔａｒｇｅｔ，ｏｒｉｇｉｎ｜｜'→'｜｜ｔａｒｇｅｔ，１」のカラムを抽出する（ｓｅｌｅｃｔ  ｏｒｉｇｉｎ，ｔａｒｇｅｔ，ｏｒｉｇｉｎ｜｜'→'｜｜ｔａｒｇｅｔ，１）。前のクエリの結果と後のクエリの結果を和結合する（ｓｅｌｅｃｔ  ｏｒｉｇｉｎ・・・ｕｎｉｏｎ  ａｌｌ  ｓｅｌｅｃｔ  ｉｎ．ｔａｒｇｅｔ・・・）。和結合の結果から「ｉｎ．ｔａｒｇｅｔ，ｏｕｔ．ｔａｒｇｅｔ，ｉｎ．ｐａｔｈ｜｜'→'｜｜ｏｕｔ．ｔａｒｇｅｔ，ｔｏｔａｌｈｏｐ＋１」の各カラムを抽出する（ｓｅｌｅｃｔ  ｉｎ．ｔａｒｇｅｔ，ｏｕｔ．ｔａｒｇｅｔ，ｉｎ．ｐａｔｈ｜｜'→'｜｜ｏｕｔ．ｔａｒｇｅｔ，ｔｏｔａｌｈｏｐ＋１）。「ｉｎ．ｔａｒｇｅｔ＝ｏｕｔ．ｔａｒｇｅｔ」の条件を満たす場合、現存パスとエッジを結合し、「ｉｎ．ｏｒｉｇｉｎ＜＞ｐａｔｈ．ｔａｒｇｅｔ」の条件を満たす場合、既存パスとパスとを結合する（ｗｈｅｒｅ  ｉｎ．ｔａｒｇｅｔ＝ｏｕｔ．ｏｒｉｇｉｎ  ａｎｄ  ｉｎ．ｏｒｉｇｉｎ＜＞ｐａｔｈ．ｔａｒｇｅｔ）。さらに、クエリは、「ｐａｔｈ」と「ｔｏｔａｌｈｏｐ」のカラムを抽出し（ｓｅｌｅｃｔ  ｐａｔｈ、ｔｏｔａｌｈｏｐ）、「ｔａｒｇｅｔ＝ｐａｔｈ．ｔａｒｇｅｔ」の条件を満たす場合に、既存パスとパスとを結合し、「ｐａｔｈ．ｏｒｉｇｉｎ＝ｎｏｄｅ．ｎｏｄｅｉｄ」であって、かつ、「ｐａｔｈ．ｔａｒｇｅｔ＝ｎｏｄｅ．ｎｏｄｅｉｄ」の条件を満たす場合は、パスとノードとを結合し、ホップ数における上位１０を降順に算出し、新たなデータ入力によって生ずる新しい結果のみを出力する（ｉｓｔｒｅａｍ（・・・）；）。
【００２４】
図４は、ストリームデータの例を示している。パスストリーム４０１は、検索対象のパス情報を示し、時刻のカラム「ｔｉｍｅ」４０２、パスＩＤのカラム「ｐｉｄ」４０３、起点のカラム「ｏｒｇ」４０４、及び終点のカラム「ｔａｒ」４０５を含む。エントリの例４０６、４０７が示されている。ノードストリーム４１１は、グラフにおけるノードの情報を示し、時刻のカラム「ｔｉｍｅ」４１２、ノードＩＤのカラム「ｎｉｄ」４１３、及び名称のカラム「ｌａｂ」４１４を含む。エントリの例４１５、４１６が示されている。９時１０分の時点で、１０分間のスライディングウィンドウにはノードＩＤがＡ、Ｓ、Ｃ、Ｄ、Ｅの５データが存在する。エントリ４１６が入力されると、エントリ４１５はウィンドウから消去される。エッジストリーム４１２は、グラフにおけるエッジの情報を示し、時刻のカラム「ｔｉｍｅ」４２２、エッジＩＤのカラム「ｅｉｄ」４２３、起点のカラム「ｏｒｇ」４２４、終点のカラム「ｔａｒ」４２５、及び重みのカラム「ｗｇｔ」４２６を含む。エントリの例４２７、４２８が示されている。
【００２５】
図５は、再帰クエリ定義テーブル５０１の一例を示している。このテーブルは、クエリごとに再帰クエリ回数を管理する。再帰クエリ定義テーブル５０１は、クエリの名称を示すクエリのカラム５０２、静的再帰実行部２３３の再帰数を示す静的再帰のカラム５０３、及び動的再帰のカラム５０４を含む。エントリの例５１１〜５１３が示されている。例えば、エントリ５１１は、クエリＱ１において、クエリ実行部２１７が、５段の静的再帰実行部２３３を有しており、動的再帰実行部２３５において更に５ホップ分の検索を行うことを示している。
【００２６】
図６は、クエリ２２１が解析された場合のクエリ実行部２１７の処理フローの一例を示す。本実行ツリーは、クエリ解析部２１２によって作成される。クエリ実行部２１７は、それぞれが処理を行う実行部として機能する演算部と、各演算部を互いに接続するキューによって構成される。図６において、左端が入力側を示し、右端が出力側を示す。入力タプルとして、パスストリーム６０１、エッジストリーム６０４、及びノードストリーム６０７が入力される。クエリ実行部２１７のクエリの処理結果は、リアルタイム出力結果６６５として出力される。演算部の種別は処理内容に応じて異なる。各演算部の実行順序はジョブスケジューリングアルゴリズム（ラウンドロビン方式、実行ツリーの葉から根への順序、等）によって管理される。スキャン演算部６０２、６０５、６０８はそれぞれ、入力タプル６０１、６０４、６０７にタイムスタンプを付与する。スライディングウィンドウ演算部６０３、６０６、６０９はそれぞれ、ストリームデータ６０１、６０４、６０７から、切り出すデータ列を含む時間間隔を指定する方法でデータ列を切り出し、ストリームデータ６０１、６０４、６０７をタプルの集合に変換する処理を行う（ｆｒｏｍ  ｐａｔｈ［１０  ｍｉｎｕｔｅ］、ｆｒｏｍ  ｅｄｇｅ［１０  ｍｉｎｕｔｅ］、ｆｒｏｍ  ｎｏｄｅ［１０  ｍｉｎｕｔｅ］）。射影演算部６２２、６２４、６３２、６３４、６６２は、カラムの一部のみを出力する処理を行う（「ｓｅｌｅｃｔ  ｏｒｉｇｉｎ，ｔａｒｇｅｔ，ｏｒｉｇｉｎ｜｜'−＞'｜｜ｔａｒｇｅｔ，１」、「ｓｅｌｅｃｔ  ｐａｔｈ，ｔｏｔａｌｈｏｐ」等）。結合演算部６２１、６２３、６３１、６３３、６６１は、所定の条件下で（「ｗｈｅｒｅ  ｏｒｉｇｉｎ＝ｐａｔｈ．ｏｒｉｇｉｎ」、「ｗｈｅｒｅ  ｔａｒｇｅｔ＝ｐａｔｈ．ｔａｒｇｅｔ"」等）、２つ以上のストリームデータを結合する処理を行う。結合演算部２４１は、仮の結合結果を保持する一時格納部２４２を有する。和結合演算部６２５、６３５はそれぞれ、射影演算部６２２の出力と射影演算部６２４の出力、射影演算部６３２の出力と射影演算部６３４の出力をマージする（「ｓｅｌｅｃｔ・・・ｕｎｉｏｎ  ａｌｌ  ｓｅｌｅｃｔ・・・」）。
【００２７】
静的再帰部６２０及び６３０はそれぞれ、要素６２１〜６２５、要素６３１〜６３５を含む（「ｗｉｔｈ  ｒｅｃｕｒｓｉｖｅ  ｅｘｉｓｔＰａｔｈ（ｏｒｉｇｉｎ，ｔａｒｇｅｔ，ｐａｔｈ，ｔｏｔａｌｈｏｐ）ａｓ（ｓｅｌｅｃｔ・・・）」）。静的再帰部の数は、図５に示した再帰クエリ定義テーブル５０１において定義されている。判定演算部６４１は、静的再帰実行部２３３が新たな結果を生成したか否かを判定する特別な演算部である。新たな結果を生成していない場合、動的再帰実行部２３５において、パス探索が続行される。図６における判定演算部６４１は、図２における判定演算部２３４と同一である。動的再帰部６５０は、静的再帰実行部２３３の最後の結果から従来型パス探索部６５１を実行する。図６における従来型経路探索部６５１は、図２における従来型パス探索部２４３と同一である。再帰回数判定部６５２は、図２における再帰回数判定部２４４と同一である。
【００２８】
ランキング演算部６６３は、ある特定のカラム（複数でもよい）の順位を計算する（「ｒａｎｋ  １０  ｗｉｔｈ  ｔｏｔａｌｈｏｐ  ｄｅｓｃ」）。ストリーミング演算部６６４は、タプルの集合をストリームデータに変換する処理を行う（「ｉｓｔｒｅａｍ（・・・）」）。尚、図６に示す演算部に加えて、タプルを所定条件に基づいて出力するか否かを決定する処理を行うフィルタ演算部や、和、平均、最大値、最小値、総数、分散、標準偏差、中央値等の導出に示される集約処理を行う集約演算部、その他の演算部がある。
【００２９】
図７は、第１の実施形態に係る、図２のストリームデータ処理システム２００において行われる処理の全体を説明するフロー図の一例である。処理は、ステップ７０１で開始される。再帰クエリ設定部２１１は、入力コマンドが、再帰クエリ定義コマンドであるか否かを判定する（ステップ７０２）。ステップ７０２において「ＹＥＳ」と判定された場合、再帰クエリ設定部２１１は再帰クエリ定義テーブル２１６を更新する（ステップ７０３）。一方、ステップ７０２において「ＮＯ」と判定された場合、クエリ解析部２１２が、入力コマンドはクエリ登録コマンドであるか否かを判定する（ステップ７０４）。ステップ７０４において「ＹＥＳ」と判定された場合、クエリ解析部２１２は、クエリを解析する（ステップ７０５）。ステップ７０５の詳細は図８に示す。ステップ７０４において「ＮＯ」と判定された場合、クエリ実行部２１７がクエリを実行する（ステップ７０６）。ステップ７０６の詳細は図９に示す。その後、クエリ解析部２１２は、入力コマンドがシステム終了コマンドであるか否かを判定する（ステップ７０７）。ステップ７０７において「ＹＥＳ」と判定された場合、処理は終了する（ステップ７０８）。ステップ７０７において「ＮＯ」と判定された場合、処理手順はステップ７０２に戻る。
【００３０】
図８は、図７におけるステップ７０５の処理、クエリ解析を説明するフロー図の一例である。まず、クエリ解析部２１２は、再帰クエリにおける、再帰クエリの部分とスライディングウィンドウの部分を除いた部分のクエリを従来の方法で解析し、クエリ実行部２１７内に実行ツリーを作成する（ステップ８０２）。クエリ解析部２１２は、再帰クエリ定義テーブル２１６を参照する（ステップ８０３）。静的再帰クエリ生成部２１３は、再帰クエリ定義テーブル２１６における静的再帰の値がゼロでないか判定する（ステップ８０４）。ステップ８０４において「ＹＥＳ」（すなわちゼロでない）と判定された場合、クエリ解析部２１２は、再帰クエリの部分を解析し、静的再帰実行部２３３を１つ生成する。そして、静的再帰実行部２３３は、スライディングウィンドウ演算部２３２（フィルタ演算部があればフィルタ演算部）の後ろに配置される（ステップ８０５）。静的再帰クエリ生成部２１３は、テーブルに規定された回数、静的再帰実行部を生成する処理を繰り返す（ステップ８０６）。判定演算部生成部２１５は判定演算部２３４を生成し、最後の静的再帰実行部の後ろに配置し、初めに解析された実行ツリーの残りの部分の最初の演算部と接続する（ステップ８０７）。また、動的再帰クエリ生成部２１４は、動的再帰実行部２３５を生成し、判定演算部２３４の後ろに配置し、初めに解析された実行ツリーの残りの部分における最初の演算部と接続する（ステップ８０８）。ステップ８０８の後、あるいは、ステップ８０４において「ＮＯ」と判定された場合、処理は終了する（ステップ８０９）。
【００３１】
図８の処理の例として、図３に示すクエリ３０１が登録される場合を示す。ステップ８０２において、クエリ解析部２１２は、図６における要素６０１〜６０９、並びに要素６６１〜６６５を生成する。ステップ８０３において、クエリ解析部２１２は、図５における再帰クエリ定義テーブル５０１の行５１１を参照する。ステップ８０４において、静的再帰クエリ生成部２１３は、静的再帰の値が５であるのでＹＥＳと判定する。ステップ８０５において、静的再帰クエリ生成部２１３は、要素６１１、６２１〜６２６を有する静的再帰部６２０を生成し、スライディングウィンドウ演算部である要素６０３と６０６の後ろに配置する。尚、既存パス６１１は初めからは存在しないため、最初の静的再帰部６０２は、既存パス６１１、結合演算部６２３、及び射影演算部６２４を含まない。ステップ８０６において、静的再帰クエリ生成部２１３は残りの４つ（静的再帰実行部の総数は５で、１つは既に生成済）の静的再帰部６３０・・・６７０、６８０を生成する。ステップ８０７において、判定演算部生成部２１５は、判定演算部６４１を生成し、最後の静的再帰部である要素６８０の後ろに配置し、第１の解析中実行ツリーの残り部分の最初の演算部である結合演算部６６１と接続する。ステップ８０８において、動的再帰クエリ生成部２１４が、動的再帰部６５０を生成し、初めに解析された実行ツリーの残り部分の最初の演算部である結合演算部６６１と接続する。
【００３２】
図９は、図７におけるステップ７０６の処理、第１の実施形態に係るクエリ実行を説明するフロー図の一例である。まず、クエリ実行部２１７は、次に実行する演算部を判定する（ステップ９０２）。クエリ実行部２１７は、ジョブスケジューリングアルゴリズム（ラウンドロビン方式、実行ツリーの葉から根への順序、等）を使って演算部の実行順を管理する。クエリ実行部２１７は、次の演算部が判定演算部であるか否かを判定する（ステップ９０３）。ステップ９０３において「ＹＥＳ」と判定された場合、図６における判定演算部６４１は、最後の静的再行部である要素６８０から新たな結果が出力されているか否かを判定する（ステップ９０４）。ステップ９０３において「ＮＯ」と判定された場合は、動的再帰部６５０が再帰クエリ定義テーブル２１６を参照する（ステップ９０５）。動的再帰部６５０は、最後の静的再帰部６８０の一時格納部（静的再帰実行部が存在しない場合はスライディングウィンドウのデータ）を参照する（ステップ９０６）。動的再帰部６５０の再帰回数判定部６５２は、再帰した回数、すなわち移動の回数（例えばホップ数）が、再帰クエリ定義テーブル２１６の動的再帰の値より大きいか否かを判定する（ステップ９０７）。ステップ９０７において「ＮＯ」と判定された場合、動的再帰部６５０の従来型パス探索部６５１は、エッジと既存パスを用いて１ホップ分移動する（ステップ９０８）。ステップ９０４において「ＹＥＳ」と判定された場合、またはステップ９０７において「ＹＥＳ」と判定された場合、クエリ実行部２１７は、次の演算部が判定演算部以外の演算部であるか否かを判定する（ステップ９０９）。ステップ９０９において「ＹＥＳ」と判定された場合、演算部が従来の方法により実行される（ステップ９１０）。ステップ９１０の後、またはステップ９０９において「ＮＯ」と判定された場合、処理は終了する（ステップ９１１）。
【００３３】
図１０は、図９の実行例を示す。図１０では、図６の実行ツリーを簡略化している。図４にパスストリーム４０１、エッジストリーム４１１、及びノードストリーム４２１が示されている。時刻９時９分において、スライディングウィンドウ６０３は、一時格納部に１０分間のデータ１０３１を保持している。同様に、スライディングウィンドウ６０６はデータ１０３２を、スライディングウィンドウ６０９はデータ１０３３を保持している。静的再帰部６２０、６３０、６８０はそれぞれ、一時格納部１００１、１００２、１００３を有する。
【００３４】
図９及び図１０の例において、パス「０、Ａ、Ｐ」は以下のように算出される。一時格納部１００１は、パス「Ａ、Ｂ、Ａ→Ｂ、１」を保持し、一時格納部１００２はパス「Ｂ、Ｅ、Ａ→Ｂ→Ｅ、２」を保持し、一時格納部１００３はパス「Ｏ、Ｐ、Ａ→Ｄ→Ｌ→Ｍ→Ｏ→Ｐ、５」を保持する。判定演算部６４１は、ステップ９０４において「ＹＥＳ」と判定する。最後に、出力データ１０２１「Ａ→Ｄ→Ｌ→Ｍ→Ｏ→Ｐ、５」が出力される。
【００３５】
第２の例として、パス１０４１を加える場合について記載する。一時格納部のデータ１００１、１００２、１００３は上記と同様に計算される。ステップ９０４において、判定演算部６４１は、「ＮＯ」と判定する。一時格納データ１００３が経路「Ｏ、Ｐ、Ａ→Ｄ→Ｌ→Ｍ→Ｏ→Ｐ、５」しか有しておらず、これは加入されたパス１０４１とは異なるからである。ステップ９０５において、動的再帰部６５０は再帰クエリ定義テーブル２１６を参照する。図５の再帰クエリ定義テーブル５０１は、Ｑ１についての動的再帰の値として５を示している。ステップ９０６において、動的再帰部６５０は、最後の静的再帰部６８０内の一時格納データ１００３を参照する。ステップ９０７において、再帰クエリ定義テーブル５０１における動的再帰の値が５であるため、「ＮＯ」と判定される。ステップ９０８において、動的再帰部６５０は「Ｏ、Ｐ、Ａ→Ｄ→Ｌ→Ｍ→Ｏ→Ｐ、５」から１ホップ移動する。動的再帰部６５０の再帰回数判定部６５２は、パス「Ｐ、Ｒ、Ａ→Ｄ→Ｌ→Ｍ→Ｏ→Ｐ→Ｒ、６」を出力する。ステップ９０７において再度「ＮＯ」と判定される。ステップ９０８において、再帰回数判定部６５２は、パス「Ｒ、Ｕ、Ａ→Ｄ→Ｌ→Ｍ→Ｏ→Ｐ→Ｒ→Ｕ、７」を出力し、最終的に出力データ１０２２「Ａ→Ｄ→Ｌ→Ｍ→Ｏ→Ｐ→Ｒ→Ｕ、７」が出力される。
【００３６】
第３の例として、新しいタプル１０４２（エッジ）を加える場合について記載する。この場合、４番目の静的再帰実行部の出力とタプル１０１４が結合される。ストリームデータ処理サーバ２００は、一時格納部を利用することによって、レイテンシを短縮して結果を算出することができる。
【００３７】
第４の例では、スライディングウィンドウは１０分間のデータしか保持しないため、一部のデータがスライディングウィンドウから切り出される。タプル１０１１がスライディングウィンドウ６０６から切り出された場合、スライディングウィンドウ６０６からマイナスタプル１０１１が出力される。タプル１０１１はタプル１０１２に移行する。静的再帰部６３０の結合演算部６３３は、静的再帰部６２０の出力とタプル１０１２とを結合する。結合演算部６３３はマイナスタプル１０１３を出力する。
【００３８】
第１の実施形態の方法によれば、静的再帰実行部は毎回グラフ内のパスのすべてを検索する必要はない。本方法によれば、動的再帰実行部を利用することにより、一時格納部のメンテナンスを削減することができ、メモリスペースと処理コストの均衡をとることが可能となる。
【００３９】
第２の実施形態
第１の実施形態では、判定演算部は、最後の静的再帰実行部から新たな結果が出力されるか否かを判定する。第２の実施形態においては、判定演算部は、この判定を、新たな結果の有無についてのみならず、ホップ数で表すパスの数（パス数）や、各パスの合計や平均で表すパスの重み（パス重み）（これらはパスコストやパス長として知られている）について行う。
【００４０】
図１１は、本発明の第２の実施形態に係る、ストリームデータ処理サーバ２００の一例を示している。図１１は、判定条件設定部１１０１と判定条件定義テーブル１１０２が加わり、条件チェック部１１１２を有する判定演算部１１１１が図２の判定演算部２３４に代わった以外は、図２（第１の実施形態）とほぼ同様である。判定条件設定部１１０１は、判定条件設定コマンドを受信し、判定条件定義テーブル１１０２を更新する。判定条件定義テーブル１１０２は、各クエリにおける判定演算部１１１１の判定方法を管理する（図１２参照）。条件チェック部１１１２は、判定条件定義テーブル１１０２内の条件に基づいて、動的再帰実行部の実行を判定する。
【００４１】
図１２は、判定条件定義テーブル１２０１の一例を示す。判定条件定義テーブル１２０１は、クエリのカラム１２０２、判定方法のカラム１２０３、及び判定条件のカラム１２０４を含む。エントリの例１２１１〜１２１３が示されている。エントリ１２１１は、第１の実施形態と同じ判定方法を示している。条件チェック部１１１２は、最後の静的再帰実行部から新たな結果が出力されているか否かを判定する。エントリ１２１２は、経路重み＜０．６という条件を示している。条件チェック部１１１２は、新たな結果の重みの最大値が０．６未満であるか否かを判定する。エントリ１２１３は、パス数＜３という条件を示している。条件チェック部１１１２は、新たな結果の数が３未満であるか否かを判定する。
【００４２】
図１３は、第２の実施形態に係る、図１１のストリームデータ処理システム２００において行われる処理の全体を説明するフロー図の一例である。ステップ１３０１〜１３０３は、図７のステップ７０１〜７０３と同様である。ステップ１３０６〜１３１０は、図７のステップ７０４〜７０８と同様である。新しいステップ１３０４において、判定条件設定部１１０１は、入力コマンドが判定条件設定コマンドであるか否かを判定する。ステップ１３０４において「ＹＥＳ」と判定された場合、判定条件設定部１１０１は、新しいステップ１３０５において判定条件定義テーブル１１０２を更新する。
【００４３】
図１４は、第２の実施形態に係る、図１３のステップ１３０８のクエリ実行を説明するフロー図の一例である。ステップ１４０１〜１４０３は、図９におけるステップ９０１〜９０３と同様である。ステップ１４０６〜１４１２は、図９におけるステップ９０５〜９１１と同様である。ステップ１４０４と１４０５が、図９のステップ９０４に置き換わっている。ステップ１４０４において、クエリ実行部２１７は、判定条件定義テーブル１１０２を参照する。ステップ１４０５において、条件チェック部１１１２は、新たな結果が判定条件定義テーブル１１０２の条件に合っているか否かを判定する。
【００４４】
第３の実施形態
第１の実施形態では、静的再帰及び動的再帰の回数はユーザによって設定される。第３の実施形態においては、ストリームデータ処理エンジンは、ＣＰＵ使用量やメモリ使用量等の資源監視情報に基づいて再帰数を調節する。ＣＰＵ／メモリを多く使用している場合は、静的再帰実行部の数を減少させる。クエリ実行部の一時格納部が縮小し、一時格納部のメンテナンス（たとえば、仮集約結果の更新等）が削減されるため、ＣＰＵ／メモリ使用量は低減する。一方、ＣＰＵ／メモリ使用が少ない場合、静的再帰実行部の数を増加させる。クエリ実行部はより多くの一時格納部を有し、一時格納部を使って計算を開始するため、実行レイテンシは短くなる。本実施形態において、ストリームデータ処理エンジンは、ＣＰＵ／メモリ使用量と実行レイテンシの均衡をとることができる。
【００４５】
図１５は、本発明の第３の実施形態に係る、ストリームデータ処理サーバ２００の一例を示している。図１５は、図２（第１の実施形態）とほぼ同様である。クエリ実行部２１７は簡略化されて示されているが、要素２３１〜２４４を含んでいる。要素１５０１〜１５０５が第３の実施形態において新たに加えられている。再帰数調節設定部１５０１は、再帰数調節設定コマンドを受信し、再帰数調節定義テーブル１５０４を更新する。資源使用量監視部１５０２は、ＣＰＵやメモリ等の資源使用量を測定し、資源使用量監視テーブル１５０５を更新する。再帰数調節部１５０３は、再帰数を変更し、資源使用量監視テーブル１５０５を更新し、クエリ実行部２１７に変更を加える。再帰数調節定義テーブル１５０４は、クエリ毎に監視資源、閾値情報、及び調節値を管理する（図１６参照）。資源使用量監視テーブル１５０５は、時間毎並びにクエリ毎に、資源使用量及び静的再帰の回数を管理する（図１７参照）。
【００４６】
図１６は、再帰数調節定義テーブル１６０１の一例を示している。再帰数調節定義テーブル１６０１は、クエリ名のカラム１６０２、監視資源のカラム１６０３、測定間隔のカラム１６０４、上限閾値のカラム１６０５、下限閾値のカラム１６０６、静的再帰初期値のカラム１６０７、調節方法のカラム１６０８、及び調節値のカラム１６０９を含む。図１６では、エントリ１６１１〜１６１３を示している。エントリ１６１１は、メモリ使用量が５０ＭＢより多い場合は、再帰数調節設定部１５０１が現在の静的再帰数から１を減じ、メモリ使用量が３０ＭＢより少ない場合は、再帰数調節設定部１５０１が現在の静的再帰数に１を加えることを示している。エントリ１６１２は、ＣＰＵ使用量が１０％より多い場合は、再帰数調節設定部１５０１が現在の静的再帰数から２０％分を減じ、ＣＰＵ使用量が５％より少ない場合は、再帰数調節設定部１５０１が現在の静的再帰数より２０％分多くすることを示している。エントリ１６１３は調節が不要であることを示している。
【００４７】
図１７は、資源使用量監視テーブル１７０１の一例を示している。資源使用量監視テーブル１７０１は、時刻のカラム１７０２、クエリのカラム１７０３、監視資源のカラム１７０４、資源使用量のカラム１７０５、及び静的再帰のカラム１７０６を含む。図１７では、エントリ１７１１〜１７１６を示している。エントリ１７１１は、９時のメモリ使用量が５５ＭＢであり、静的再帰数が５であることを示している。エントリ１７１３は、９時１０分のメモリ使用量が２８ＭＢであり、静的再帰数が４（現在回数５から１を減じた）であることを示している。
【００４８】
図１８は、第３の実施形態に係る、図１５のストリームデータ処理システム２００において行われる処理の全体を説明するフロー図の一例である。ステップ１８０１〜１８０３は、図７のステップ７０１〜７０３と同様である。ステップ１８０６〜１８０８は、図７のステップ７０４〜７０６と同様である。ステップ１８１１及び１８１２は、図７のステップ７０７及び７０８と同様である。ステップ１８０４〜１８０５、及びステップ１８０９〜１８１０が新たに加えられたステップである。ステップ１８０４において、再帰数調節設定部１５０１は、入力コマンドが再帰数調節設定コマンドであるか否かを判定する。ステップ１８０４において「ＹＥＳ」と判定された場合、再帰数調節設定部１５０１は、再帰数調節定義テーブル１５０４を更新する（ステップ１８０５）。ステップ１８０９において、資源使用量監視部１５０２は、資源を測定する時間イベントが発生したか否かを判定する。ステップ１８０９においてＹＥＳと判定された場合、再帰数調節部１５０３は、再帰数を調節する（ステップ１８１０）（図１９参照）。
【００４９】
図１９は、図１８のステップ１８１０の再帰数を調節する処理の詳細を説明するフロー図の一例である。処理は、ステップ１９０１において開始される。資源使用量監視部１５０２は、資源使用量を測定し、資源使用量監視テーブル１５０５を更新する（ステップ１９０２）。再帰数調節部１５０３は、資源使用量監視テーブル１５０５を参照し（ステップ１９０３）、測定値が上限閾値より高いか否かを判定する（ステップ１９０４）。ステップ１９０４において「ＹＥＳ」と判定された場合、再帰数調節部１５０３は、調節方法１６０８の値が割合であれば、新しい再帰数を旧再帰数×（１−調節値）に設定し、調節方法１６０８の値が設定量であれば、新しい再帰数を旧再帰数−調節値に設定する（ステップ１９０５）。一方、ステップ１９０４において「ＮＯ」と判定された場合、再帰数調節部１５０３は、測定値が下限閾値より低いか否かを判定する（ステップ１９０６）。ステップ１９０６において「ＹＥＳ」と判定された場合、再帰数調節部１５０３は、調節方法１６０８の値が割合であれば、新しい再帰数を旧再帰数＊（１＋調節値）に設定し、調節方法１６０８の値が設定量であれば、新しい再帰数を旧再帰数＋調節値に設定する（ステップ１９０７）。ステップ１９０５の後、あるいはステップ１９０７の後、再帰数調節部１５０３は、クエリ実行部２１７を変更する（ステップ１９０８）。
【００５０】
再帰数を調節する一例を説明する。時刻９時に、ステップ１８０９における時間間隔イベントが発生したとする。ステップ１９０２において、再帰数調節設定部１５０１は、再帰数調節定義テーブル１５０４を図１７のエントリ１７１１に示すように更新する。エントリ１７１１は、メモリ使用量が５５ＭＢであることを示している。現在のメモリ使用量５５ＭＢは、上限閾値の５０ＭＢより多いので、ステップ１９０４において、「ＹＥＳ」と判定される。ステップ１９０５において、新たな再帰数が、旧再帰数５−調節値１＝４と計算される。ステップ１９０８において、クエリ実行部２１７の次の１０分間の静的再帰の回数は、５から４に変更される。
【００５１】
別の例で、時刻９時１０分に、ステップ１８０９における時間間隔イベントが発生したとする。ステップ１９０２において、再帰数調節設定部１５０１は、再帰数調節定義テーブル１５０４を図１７のエントリ１７１３に示すように更新する。エントリ１７１３は、メモリ使用量が２８ＭＢであることを示している。現在のメモリ使用量２８ＭＢは、上限閾値の５０ＭＢ以下であるので、ステップ１９０４では「ＮＯ」と判定される。一方、ステップ１９０６においては、現在のメモリ使用量２８ＭＢは、下限閾値の３０ＭＢ未満であるので、「ＹＥＳ」と判定される。ステップ１９０７において、新たな再帰数が、旧再帰数４＋調節値１＝５と計算される。ステップ１９０８において、クエリ実行部２１７の次の１０分間の静的再帰数は、４から５に変更される。
【００５２】
本発明を実装するコンピュータや記憶装置は、上述の発明を実装するために使用される各機能部やプログラム、データ構造の格納や読み込みが可能な周知の入出力装置（例えば、ＣＤドライブやＤＶＤドライブ、フロッピードライブ、ハードドライブ、等）を備えることが可能である。これら機能部、プログラムやデータ構造は、コンピュータで読み取り可能な媒体上に符号化することができる。例えば、本発明のデータ構造は、本発明において使用されるプログラムが存在する１以上のコンピュータ読み取り可能媒体とは別のコンピュータ読み取り可能媒体に格納することができる。システム内の構成要素は例えば通信ネットワーク等のデジタルデータ通信用の形態あるいは媒体によって接続することができる。通信ネットワークの例としては、ローカルエリアネットワークや、インターネット等の広域ネットワーク、無線ネットワーク、ストレージエリアネットワーク、等がある。
【００５３】
実施例の記載において、本発明が完全に理解されるよう、説明のために多くの詳細な点が記載されたが、当業者には、これら具体的詳細のすべてが本発明を実践するために必要なわけではないことは明らかであろう。また、本発明は、通常はフローチャート、フロー図、構成図、ブロック図等で表される処理として記載することが可能であると理解されよう。フローチャートは、各演算を１つの連続した処理として記載するが、各演算の多くは、並行して同時に行うことができる。更に、各演算の順序は並べ替えることが可能である。
【００５４】
当技術分野において周知のとおり、上記記載の演算は、ハードウェア、ソフトウェア、あるいはソフトウェアとハードウェアの組み合わせによって行うことができる。本発明の実施例の様々な特徴は、回路や論理デバイス（ハードウェア）を利用して実装し、また他の特徴は機械読み取りが可能な媒体に格納された指示（ソフトウェア）を利用して実装してもよい。ソフトウェアは、プロセッサによって実行された場合、プロセッサが発明の実施例を実施する方法による処理を実行する。更に、本発明の実施例の一部はハードウェアのみによって実施され、実施例の別の一部はソフトウェアによってのみ実施されてもよい。また、記載された様々な機能は１つの構成単位において実施することも、いくつかの構成部分にいかように分配して実施することも可能である。ソフトウェアによって実施する場合、各方法による処理は、コンピュータ読み取り可能な媒体に格納された指示に基づいて、汎用コンピュータ等の処理装置によって実行されてもよい。所望であれば、各指示は圧縮された形式及び／または暗号化された形式で媒体に格納することができる。
【００５５】
上記記載から、本発明は、グラフ構造のデータ用再帰クエリを用いたストリームデータ処理の方法、装置、及びコンピュータ読み取り可能媒体に格納されたプログラムを提供することが明らかであろう。また、本明細書において、具体的実施例を記載し、説明したが、当業者には、同じ目的を達成するために意図されたいかなる手段も、開示された具体的実施例と置き換えることが可能であることが理解されよう。本開示は、本発明のいかなる変更例をも含むことを意図しており、以下の特許請求の範囲において使用される表現は、本発明を、本発明に開示された具体的実施例に限定して解釈するものではないことを理解されたい。本発明の範囲は、以下の特許請求の範囲によってのみ画定され、特許請求の範囲は、請求項の解釈の確立された原理に従い、各請求項が権利範囲として有する均等物の全てをも含めて解釈されるべきものである。
【図１】
2014123354.tif 000003
【図２】
2014123354.tif 000004
【図３】
2014123354.tif 000005
【図４】
2014123354.tif 000006
【図５】
2014123354.tif 000007
【図６】
2014123354.tif 000008
【図７】
2014123354.tif 000009
【図８】
2014123354.tif 000010
【図９】
2014123354.tif 000011
【図１０】
2014123354.tif 000012
【図１２】
2014123354.tif 000013
【図１３】
2014123354.tif 000014
【図１４】
2014123354.tif 000015
【図１５】
2014123354.tif 000016
【図１６】
2014123354.tif 000017
【図１７】
2014123354.tif 000018
【図１８】
2014123354.tif 000019
【図１９】
2014123354.tif 000020
【図１１】
2014123354.tif 000021
【外国語明細書】
2014123354000001.pdf
2014123354000002.pdf
2014123354000003.pdf
2014123354000004.pdf