(57)【要約】  プロセッサとメモリを備えた計算機で、データソースが付与したデータタイムスタンプとデータソースの識別子とを含む入力タプルを受信し、入力タプルを受信した時のシステムタイムスタンプを入力タプルに付与して保留タプルを生成し、データソースの識別子に対応するデータソース毎のキューに当該保留タプルを格納し、キューの先頭の保留タプルのデータタイムスタンプの順序でキューを並び替え、データタイムスタンプの値が最も小さい保留タプルを先頭に格納したキューで、先頭の保留タプルのシステムタイムスタンプに処理保留期間を加算した値よりも現在のシステムタイムスタンプの値の方が大きい場合、キューの先頭の保留タプルから入力タプルを取得して入力ストリームへ投入する。
2016067335.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリを備えた計算機で、複数のデータソースから受信した入力タプルを処理するストリームデータの処理方法であって、
前記計算機が、処理保留期間を設定する第１のステップと、
前記計算機が、前記データソースによって付与されたデータタイムスタンプと、前記データソースの識別子とを含む前記入力タプルを受信する第２のステップと、
前記計算機が、前記入力タプルを受信した時点のシステムタイムスタンプを当該入力タプルに付与して保留タプルを生成する第３のステップと、
前記計算機が、前記保留タプルの前記データソースの識別子に対応するデータソース毎のキューに当該保留タプルを格納する第４のステップと、
前記計算機が、前記キューの先頭の保留タプルのデータタイムスタンプを読み込んで、各キューを先頭の保留タプルのデータタイムスタンプの順序で並び替える第５のステップと、
前記計算機が、前記データタイムスタンプの値が最も小さい保留タプルを先頭に格納したキューで、前記先頭の保留タプルのシステムタイムスタンプを読み込んで、当該システムタイムスタンプに前記処理保留期間を加算した値よりも現在のシステムタイムスタンプの値の方が大きいか否かを判定する第６のステップと、
前記計算機が、現在のシステムタイムスタンプの値の方が大きいと判定した場合には、前記キューの先頭の保留タプルから入力タプルを取得して入力ストリームへ投入する第７のステップと、
前記計算機が、前記入力ストリームに投入した入力タプルに所定のクエリを実行する第８のステップと、
を含むことを特徴とするストリームデータの処理方法。
【請求項２】
請求項１に記載のストリームデータの処理方法であって、
前記第５のステップは、
時系列のルートノードを有するバランス型ツリーのうち前記キューの先頭の保留タプルのデータタイムスタンプに対応する位置に当該キューを格納し、各キューを先頭の保留タプルのデータタイムスタンプの順序で並び替えることを特徴とするストリームデータの処理方法。
【請求項３】
請求項２に記載のストリームデータの処理方法であって、
前記第７のステップは、
前記キューの先頭の保留タプルから入力タプルを取得して入力ストリームへ投入するステップと、
前記キューの先頭から次の保留タプルを先頭の保留タプルに繰り上げるステップと、
前記繰り上げた先頭の保留タプルのデータタイムスタンプに対応する前記ルートノードの配下に当該キューを移動するステップと、
を含むことを特徴とするストリームデータの処理方法。
【請求項４】
請求項３に記載のストリームデータの処理方法であって、
前記第７のステップは、
前記キューの先頭の保留タプルから入力タプルを取得して入力ストリームへ投入するステップと、
前記キューが空になった場合には、前記入力ストリームへ入力タプルを投入した回数が所定のツリー回収保留回数となる度に、当該キューを格納するツリーを削除するステップと、
を含むことを特徴とするストリームデータの処理方法。
【請求項５】
請求項４に記載のストリームデータの処理方法であって、
前記第１のステップは、
前記処理保留期間及び前記ツリー回収保留回数を受け付けることを特徴とするストリームデータの処理方法。
【請求項６】
プロセッサとメモリを備えた計算機で、複数のデータソースから受信した入力タプルを処理するストリームデータ処理装置であって、
前記データソースによって付与されたデータタイムスタンプと、前記データソースの識別子とを含む前記入力タプルを受信するタプル入力部と、
前記受信した入力タプルの順序を補正して入力ストリームに投入するタプル整列化部と、
前記入力ストリームへ投入された入力タプルに所定のクエリを実行するクエリ実行部と、を備え、
前記タプル整列化部は、
前記入力タプルを受信した時点のシステムタイムスタンプを当該入力タプルに付与して保留タプルを生成し、前記保留タプルの前記データソースの識別子に対応するデータソース毎のキューに当該保留タプルを格納し、前記キューの先頭の保留タプルのデータタイムスタンプを読み込んで、各キューを先頭の保留タプルのデータタイムスタンプの順序で並び替え、前記データタイムスタンプの値が最も小さい保留タプルを先頭に格納したキューで、前記先頭の保留タプルのシステムタイムスタンプを読み込んで、当該システムタイムスタンプに所定の処理保留期間を加算した値よりも現在のシステムタイムスタンプの値の方が大きいか否かを判定し、現在のシステムタイムスタンプの値の方が大きいと判定した場合には、前記キューの先頭の保留タプルから入力タプルを取得して入力ストリームへ投入することを特徴とするストリームデータ処理装置。
【請求項７】
請求項６に記載のストリームデータ処理装置であって、
前記タプル整列化部は、
時系列のルートノードを有するバランス型ツリーのうち前記キューの先頭の保留タプルのデータタイムスタンプに対応する位置に当該キューを格納し、各キューを先頭の保留タプルのデータタイムスタンプの順序で並び替えることを特徴とするストリームデータ処理装置。
【請求項８】
請求項７に記載のストリームデータ処理装置であって、
前記タプル整列化部は、
前記キューの先頭の保留タプルから入力タプルを取得して入力ストリームへ投入した後に、前記キューの先頭から次の保留タプルを先頭の保留タプルに繰り上げて、前記繰り上げた先頭の保留タプルのデータタイムスタンプに対応する前記ルートノードの配下に当該キューを移動することを特徴とするストリームデータ処理装置。
【請求項９】
請求項８に記載のストリームデータ処理装置であって、
前記タプル整列化部は、
前記キューの先頭の保留タプルから入力タプルを取得して入力ストリームへ投入した後に、前記キューが空になった場合には、前記入力ストリームへ入力タプルを投入した回数が所定のツリー回収保留回数となる度に、当該キューを格納するツリーを削除することを特徴とするストリームデータ処理装置。
【請求項１０】
請求項９に記載のストリームデータ処理装置であって、
前記処理保留期間及び前記ツリー回収保留回数を受け付ける受付部をさらに有することを特徴とするストリームデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストリームデータ処理の精度を向上させる技術に関する。
【背景技術】
【０００２】
証券取引の自動化、交通情報処理の高度化、クリックストリームの解析といった、高いレートで継続的に発生する情報をリアルタイムに解析し、重要なイベントの発生に対して瞬時にアクションを起こす要求の高まりを背景に、高レートデータのリアルタイム処理を実現する、ストリームデータ処理が注目されている。【０００３】
ストリームデータ処理は、様々なデータ処理に適用可能な汎用ミドルウェア技術であるため、個別案件ごとにシステムを構築するのでは間に合わないようなビジネス環境の急激な変化にも応えつつ、実世界のデータをリアルタイムにビジネスに反映することを可能とする。【０００４】
ストリームデータ処理が対象とするストリームとは、タイムスタンプ付きのデータであるタプルが、連続してストリームデータ処理サーバに到来する時系列データである。ストリームデータ処理のユーザが、このストリームに対する監視ルールをクエリとして定義すると、ストリームデータ処理サーバでは、クエリ定義をクエリグラフに変換する。【０００５】
クエリグラフは、オペレータと呼ばれる処理単位をノードとし、同オペレータ間のタプルキューをエッジとする、有向グラフである。入力ストリームを構成する個々のタプルについて、クエリグラフを通過させることで、データフロー的に処理を進める。【０００６】
この処理は、データフロー型の処理であるため、クエリグラフを多段分割し、複数の計算資源によってパイプライン的に並列処理することができる。並列処理により、複数のデータソースが出力したストリームデータを処理する技術として、特許文献１、２が知られている。【０００７】
特許文献１には、複数のストリームデータを結合してから処理する技術が開示されている。また、特許文献２には、複数のストリームデータ毎に独立したワークエリアを設ける技術が開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】米国特許第８３９１１６４号
【特許文献２】国際公開第２０１４／０４１６７３号
【発明の概要】
【発明が解決しようとする課題】
【０００９】
複数のデータソースからのストリームデータは、各データソースからストリームデータ処理サーバまでの経路の遅延などにより、タプルのタイムスタンプの順序でストリームデータ処理サーバに到着しない場合（Ｏｕｔ−ｏｆ−Ｏｒｄｅｒ）がある。【００１０】
上記特許文献１では、タプルと現在時刻に関連するタイムスタンプの減衰関数によって各タプルに重み付けを行っている。減衰関数は、よりタイムスタンプが新しいタプルに高い重みを与えているので、上述のようにＯｕｔ−ｏｆ−Ｏｒｄｅｒ（順序の逆転）が発生した場合には、タプルのタイムスタンプの順序を正確に維持できないという問題があった。また、上記特許文献２では、ワークエリアを独立させて同一データソース内では、部分的にタプルをソートする。しかしながら、特許文献２では、タプルの全体的な順序については不定となる、という問題があった。【００１１】
そこで本発明は、上記問題点に鑑みて成されたもので、ストリームデータ処理において、タプルのタイムスタンプの順序を維持することを目的とする。
【課題を解決するための手段】
【００１２】
本発明は、プロセッサとメモリを備えた計算機で、複数のデータソースから受信した入力タプルを処理するストリームデータの処理方法であって、前記計算機が、処理保留期間を設定する第１のステップと、前記計算機が、前記データソースによって付与されたデータタイムスタンプと、前記データソースの識別子とを含む前記入力タプルを受信する第２のステップと、前記計算機が、前記入力タプルを受信した時点のシステムタイムスタンプを当該入力タプルに付与して保留タプルを生成する第３のステップと、前記計算機が、前記保留タプルの前記データソースの識別子に対応するデータソース毎のキューに当該保留タプルを格納する第４のステップと、前記計算機が、前記キューの先頭の保留タプルのデータタイムスタンプを読み込んで、各キューを先頭の保留タプルのデータタイムスタンプの順序で並び替える第５のステップと、前記計算機が、前記データタイムスタンプの値が最も小さい保留タプルを先頭に格納したキューで、前記先頭の保留タプルのシステムタイムスタンプを読み込んで、当該システムタイムスタンプに前記処理保留期間を加算した値よりも現在のシステムタイムスタンプの値の方が大きいか否かを判定する第６のステップと、前記計算機が、現在のシステムタイムスタンプの値の方が大きいと判定した場合には、前記キューの先頭の保留タプルから入力タプルを取得して入力ストリームへ投入する第７のステップと、前記計算機が、前記入力ストリームに投入した入力タプルに所定のクエリを実行する第８のステップと、を含む。
【発明の効果】
【００１３】
本発明によれば、入力タプルのデータタイムスタンプの順序を維持して、ストリームデータ処理を行うことが可能となる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施例を示し、ストリームデータ処理を行う計算機システムの一例を示すブロック図である。
【図２Ａ】本発明の実施例を示し、ストリームデータ処理部の一例を示すブロック図である。
【図２Ｂ】本発明の実施例を示し、タプル整列化部の一例を示すブロック図である。
【図３Ａ】本発明の実施例を示し、ストリームデータ処理の一例を示すフローチャートの前半部である。
【図３Ｂ】本発明の実施例を示し、ストリームデータ処理の一例を示すフローチャートの後半部である。
【図４】本発明の実施例を示し、データソースと入力タプルと時刻の関係を示すブロック図である。
【図５】本発明の実施例を示し、ストリームデータ処理サーバのタプル整列化部が、データタイムスタンプの順序に入力タプルの順序を補正する処理の一例を示すブロック図である。
【図６】本発明の実施例を示し、時刻順整列ツリーの一例を示すブロック図である。
【図７】本発明の実施例を示し、データソース毎の入力タプルの処理でツリーの変更を示すブロック図である。
【図８】本発明の実施例を示し、データソース毎の入力タプルの処理で入力ストリームへの入力タプルの詰め込み完了を示すブロック図である。
【図９】本発明の実施例を示し、データソース毎の入力タプルの処理で、回収保留回数により入力ストリームへの入力タプルの詰め込み完了を示すブロック図である。
【図１０】本発明の実施例を示し、データソース毎の入力タプルの処理で、ツリーの削除を示すブロック図である。
【発明を実施するための形態】
【００１５】
以下、本発明の一実施形態について添付図面を用いて説明する。
【００１６】
図１は、ストリームデータ処理を行う計算機システムの一例を示すブロック図である。ストリームデータ処理サーバ１００は、ＣＰＵコア９０−１〜９０−４を含むＣＰＵ９０と、データやプログラムを保持するメモリ１０３と、ネットワーク１５０に接続されたネットワークインタフェース１０５と、データやプログラムを格納するストレージ１０６と、これらの計算機資源を接続するバス１０４を含む計算機である。
【００１７】
メモリ１０３には、ストリームデータ処理を定義するストリームデータ処理部１１０が格納される。ストリームデータ処理部１１０は、ＣＰＵコア（または演算コア）９０−１〜９０−４によって実行可能な実行イメージである。
【００１８】
ストリームデータ処理サーバ１００は、ネットワークインタフェース１０５を介してネットワーク１５０に接続される。ネットワーク１５０に接続されたホスト計算機１３０は、クエリの内容やタプルを整列させる設定を登録する登録インターフェース１３１を有する。ホスト計算機１３０のユーザは、登録インターフェース１３１を介してクエリを定義したストリームクエリ１３２や、タプルを整列させるパラメータを定義した入力タプル整列化設定１３３を生成して、ストリームデータ処理サーバ１００に送信する。入力タプル整列化設定１３３は、後述するように、ストリームデータ処理サーバ１００に到着したタプル（以下、入力タプル１２１とする）を、入力タプル１２１に付与されたデータタイムスタンプの順序でタプル整列化部２１１が並び替える際のパラメータを含む。なお、ホスト計算機１３０は入出力装置１６０によって、ユーザからの入力を受け付け、ストリームデータ処理サーバ１００等からの出力を表示する。
【００１９】
ホスト計算機１３０から入力タプル整列化設定１３３を受信したストリームデータ処理サーバ１００は、ストリームデータ処理部１１０のタプル入力部２１０で、複数のデータソースから受信した入力タプル１２１をデータタイムスタンプの順に整列させる。タプル入力部２１０は、ホスト計算機１３０から受信した入力タプル整列化設定１３３の内容に基づいて、複数のデータソースから受信した入力タプル１２１をデータタイムスタンプの順に整列させるタプル整列化部２１１を有する。
【００２０】
ホスト計算機１３０からストリームクエリ１３２を受信したストリームデータ処理サーバ１００は、ストリームデータ処理部１１０で、受信したクエリ定義（ストリームクエリ１３２）に従ってストリームデータ処理を実行可能なクエリグラフを構築する。
【００２１】
ストリームデータ処理サーバ１００は、ネットワーク１５０に接続されたデータ発生器（データソース）１２０から送信された入力タプル１２１を受信する。なお、入力タプル１２１は、データタイムスタンプとデータソースの識別子が付与されたデータである。なお、データタイムスタンプは、入力タプル１２１が送信されるときにデータソース（データ発生器１２０）で付与されたタイムスタンプである。
【００２２】
データ発生器１２０は、１以上で構成され、各データ発生器１２０がデータソースとなる。ストリームデータ処理サーバ１００は、複数のデータソースから入力タプル１２１（ストリームデータ）を受け付ける。
【００２３】
そして、ストリームデータ処理サーバ１００は、タプル入力部２１０のタプル整列化部２１１によって、受け付けた入力タプル１２１をデータタイムスタンプの順に整列させてから、前記クエリグラフに従って処理し、出力タプル１４１を生成する。ストリームデータ処理サーバ１００は、この出力タプル１４１を、ネットワーク１５０に接続された結果受信計算機１４０に送信する。
【００２４】
ストリームデータ処理サーバ１００のストレージ１０６は、ストリームデータ処理部１１０の実行イメージの他、一度受け取った前記ストリームクエリ１３２のテキストファイルを保存する。ストリームデータ処理部１１０は、起動時にストレージ１０６からこのクエリのファイルをロードし、クエリグラフを構築することも可能である。
【００２５】
ストリームデータ処理部１１０等の各機能部はプログラムとしてメモリ１０３にロードされる。ＣＰＵ９０は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、ＣＰＵ９０は、ストリームデータ処理プログラムに従って処理することでストリームデータ処理部１１０として機能する。他のプログラムについても同様である。さらに、ＣＰＵ９０は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【００２６】
ストリームデータ処理部１１０の各機能を実現するプログラム、テーブル等の情報は、ストレージ１０６や不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【００２７】
図２Ａ、図２Ｂは、ストリームデータ処理の一例を示すブロック図である。  図２Ａは、ストリームデータ処理部１１０の一例を示すブロック図である。図２Ｂは、タプル入力部２１０の一例を示すブロック図である。
【００２８】
図２Ａにおいて、ホスト計算機１３０のユーザがストリームクエリ１３２の登録操作を実行すると、クエリパーサ２０１が、ストリームクエリ１３２をクエリグラフ構成情報４０３に変換する。クエリ実行部２０３は、クエリグラフ構成情報２０２を処理して、クエリグラフを構成するオペレータ間の実行順序を決定し、クエリ実行部２０３に通知する。このオペレータ間の実行順序を決定する処理は、公知または周知の技術を用いることができ、例えば、特開２０１０−１０８１５２号公報の技術を適用すれば良い。
【００２９】
また、クエリパーサ２０１は、ストリームクエリ１３２からストリームデータの入力スキーマを入力ストリーム情報管理部２０４へ通知する。入力スキーマは、クエリで扱うデータの構成を示す。
【００３０】
クエリ実行部２０３は、入力ストリーム２１３−１〜２１３−３へ投入された入力タプルについてストリームデータ処理を実行する。入力ストリーム２１３−１〜２１３−３の総称を“−”のない符号２１３で表し、個々の構成要素を−１〜−ｎで表す。なお、他の構成要素についても同様であり、個々の構成要素を−１〜−ｎで表し、構成要素全体を“−”のない符号で表すものとする。
【００３１】
入力ストリーム２１３−１〜２１３−３には、後述するように、タプル入力部２１０−１〜２１０−３でデータタイムスタンプの順序で整列した入力タプル１２１が投入される。タプル入力部２１０−１〜２１０−３は、異なる種類のストリームデータ処理を行うものであり、それぞれが独立して機能する。クエリ実行部２０３では、入力ストリーム２１３−１〜２１３−３から入力された入力タプル１２１についてそれぞれ処理が実行される。
【００３２】
ホスト計算機１３０のユーザが入力タプル整列化設定１３３の登録操作を実行すると、入力タプル整列化設定受付部２０５が入力タプル整列化設定１３３の情報を受け付けて、タプル入力部２１０−１〜２１０−３へ入力する。なお、タプル入力部２１０−１〜２１０−３は同様の構成であるので、以下ではタプル入力部２１０−１について説明する。
【００３３】
入力タプル整列化設定１３３の情報は、入力タプル１２１のデータソース（データ発生器１２０）の識別子を格納するカラムの位置を示すデータソース識別カラム１３４と、入力タプル１２１のデータタイムスタンプを格納するカラムの位置を示すデータソース時刻カラム１３５と、後述するようにタプルを入力ストリーム２１３へ投入するまで保留する期間を決定する処理保留期間１３６と、後述するようにツリーの削除を保留する条件を決定するツリー回収保留回数１３７と、を含む。
【００３４】
データソース識別カラム１３４とデータソース時刻カラム１３５は、入力タプル１２１内でデータの位置を特定する情報である。処理保留期間１３６とツリー回収保留回数１３７は、ホスト計算機１３０が入力装置（図示省略）を介してユーザから受け付けた値であり、後述する処理を開始する際の閾値として機能する。入力タプル整列化設定受付部２０５は、ストリームデータ処理サーバ１００が受け付けた入力タプル整列化設定１３３を、各タプル入力部２１０へ通知する。
【００３５】
タプル入力部２１０は、受け付けた入力タプル整列化設定１３３に基づいて、入力キュー２１２へ入力された入力タプル１２１を、データソース毎にデータタイムスタンプの順序に補正して、入力ストリーム２１３へ投入する。
【００３６】
入力ストリーム２１３へ投入された入力タプルは、クエリ実行部２０３で所定のクエリ処理が行われる。クエリ実行結果は出力タプル１４１としてタプル出力部２０６出力される。本実施例では、出力タプル１４１は、ストリームデータ処理サーバ１００から図１に示す結果受信計算機１４０へ送信される。
【００３７】
上記タプル入力部２１０では、タプル整列化部２１１が、入力タプル１２１にストリームデータ処理サーバ１００のシステムタイムスタンプを付与して保留タプル５２１として生成する。
【００３８】
タプル整列化部２１１は、データソース毎に保留タプル５２１をデータソース別キュー２１９へキューイングし、時刻順整列ツリー２１８で後述する補正を行って、入力タプル１２１をデータタイムスタンプの順序に補正する。そして、タプル入力部２１０は、タプル整列化部２１１でデータタイムスタンプの順序に補正した入力タプル１２１を入力ストリーム２１３へ投入する。
【００３９】
図２Ｂは、タプル整列化部２１１の一例を示すブロック図である。タプル整列化部２１１は、入力タプル整列化設定受付部２０５から受け付けた入力タプル整列化設定１３３を格納する入力タプル整列化設定保存部２１４と、入力タプル１２１のデータソース毎のキュー（またはバッファ）を保管するデータソース別キュー保管部２１５と、データソース毎に設定されて入力タプル１２１（保留タプル５２１）を格納するデータソース別キュー２１９と、データソース別キュー２１９をリーフノードに格納する時刻順整列ツリー２１８と、システムタイムスタンプを生成するシステム時計２１６と、入力ストリーム２１３へ投入した入力タプル１２１を計数する連続タプル入力数計数部２１７と、入力ストリーム２１３へ投入した入力タプル１２１のデータタイムスタンプを記憶する最新データソース時刻記憶部２２０と、を含む。
【００４０】
データソース別キュー保管部２１５は、図５で示すように、データソースの識別子（図中ｉｄ００〜ｉｄ０３）毎に対応するデータソース別キュー２１９−０〜２１９−３（以下、Ｑ００〜Ｑ０３で示す）がそれぞれ設定された例を示す。
【００４１】
タプル整列化部２１１は、データソース別キューＱ００〜Ｑ０３に格納する入力タプル１２１（保留タプル５２１）のデータタイムスタンプの値に基づいて、時刻順整列ツリー２１８内でデータソース別キューＱ００〜Ｑ０３をリーフノード６１３として配置する。
【００４２】
そして、タプル整列化部２１１は、先頭の入力タプル１２１のデータタイムスタンプの順序でデータソース別キューＱ００〜Ｑ０３を整列させ、後述するようにシステムタイムスタンプに基づいて入力ストリーム２１３へ入力タプル１２１を投入する。
【００４３】
タプル入力部２１０から入力ストリーム２１３へ投入された入力タプル１２１は、クエリ実行部２０３で所定のクエリ処理が行われ、出力タプル１４１としてストリームデータ処理サーバ１００から出力される。
【００４４】
＜入力タプルとデータタイムスタンプ＞
図４は、ストリームデータ処理サーバ１００が、データソース毎に入力タプル１２１〜１２８を受け付ける処理を示すブロック図である。本発明では、ストリームデータ処理サーバ１００が、複数のデータ発生器１２０（以下、データソース１２０−０〜１２０−２）から受け付けた入力タプル１２１〜１２８を処理する。なお、以下では、個々の入力タプルを符号１２１〜１２８で示し、入力タプルの総称を符号１２１で示す。
【００４５】
データソース１２０−０〜１２０−２は、データタイムスタンプ（図中ＴＩＭＥ）と、データソース１２０の識別子（図中ＳＩＤ）を図示しないデータに付与した入力タプル１２１をストリームデータ処理サーバ１００へ送信する。
【００４６】
各データソース１２０は、データタイムスタンプの順序で、入力タプル１２１を送信する。しかしながら、ストリームデータ処理サーバ１００では、前記課題でも述べたように、通信経路の遅延や、通信経路上で行われる処理の遅延などによって、全てのデータソース１２０から受信した入力タプル１２１は、データタイムスタンプの順序で到着しない場合がある。
【００４７】
図４はストリームデータ処理サーバ１００が、入力タプル１２７、１２１、１２８、１２２、１２４、１２５の順で各入力タプルを受け付けた例を示す。各データソース１２０からはデータタイムスタンプの順序で、各入力タプル１２１がストリームデータ処理サーバ１００へ到着する。例えば、データソース１２０−２からは、データタイムスタンプが１０時０５分０．０１２秒の入力タプル１２７の後に、データタイムスタンプが１０時０５分１．７８９秒の入力タプル１２８がストリームデータ処理サーバ１００へ到着している。
【００４８】
一方、ストリームデータ処理サーバ１００に到着した全ての入力タプル１２１のデータタイムスタンプの順序は、データタイムスタンプが１０時０５分２．３４５秒の入力タプル１２２の後に、データタイムスタンプが１０時０５分１．４５６秒の入力タプル１２４が到着しており、異なるデータソース１２０間では、データタイムスタンプの順序が逆転する場合がある。
【００４９】
データソース１２０−１の入力タプル１２４は、データソース１２０−０の入力タプル１２１の後、かつ、データソース１２０−２の入力タプル１２８の前に、クエリ実行部２０３で処理をしなければ、前記課題で述べたようにデータタイムスタンプの順序でストリームデータ処理を行うことはできない。
【００５０】
そこで、本発明は、図４のように、データソース１２０間で入力タプルの到着順序とデータタイムスタンプの順序が一致しない場合に、タプル整列化部２１１が入力タプル１２１の順序を補正してから入力ストリーム２１３へ投入し、クエリ実行部２０３ではデータタイムスタンプの順序でクエリ処理を行う。
【００５１】
＜タプル整列化部＞
図５は、ストリームデータ処理サーバ１００のタプル整列化部２１１が、データタイムスタンプの順序に入力タプル１２１の順序を補正する処理の一例を示すブロック図である。
【００５２】
タプル整列化部２１１は、まず、ホスト計算機１３０から受け付けた入力タプル整列化設定１３３を入力タプル整列化設定保存部２１４に格納する。図示の例では、データソース識別カラム１３４に“ＳＩＤ”が格納され、データソース時刻カラム１３５に“ＴＩＭＥ”が格納され、処理保留期間１３６に“２秒”が格納され、ツリー回収保留回数１３７に“４回”が格納される。
【００５３】
図示の例では、ストリームデータ処理サーバ１００が、入力タプル１２７、１２１、１２８、１２２の順に受け付けてキューイングした後、入力タプル１２４が入力キュー２１２−１へ入力される。
【００５４】
タプル整列化部２１１は、システム時計２１６から現在時刻（システムタイムスタンプ）を取得して、入力された入力タプル１２４にシステムタイムスタンプを付加し、保留タプル５２４とする。タプル整列化部２１１は、データソース識別カラム１３４のＳＩＤに対応する入力タプル１２４のデータソース識別子＝ｉｄ０１を取得する。なお、本実施例では、入力タプルにシステムタイムスタンプを付加したものを保留タプルとする。
【００５５】
タプル整列化部２１１は、時刻順整列ツリー２１８を参照してデータソース識別子に対応するデータソース別キュー２１９がリーフノード６１３として存在するか否かを判定する。データソース別キュー２１９がリーフノード６１３として存在しない場合は、タプル整列化部２１１は、データソース別キュー保管部２１５からデータソース識別子に対応するデータソース別キュー２１９を選択する。
【００５６】
この例では、データソース識別子＝ｉｄ０１に対応するデータソース別キューはＱ０１（２１９−１）となる。そして、タプル整列化部２１１は、データソース別キューＱ０１に保留タプル５２４を格納する。
【００５７】
一方、データソース別キューＱ０１がリーフノード６１３として存在する場合は、タプル整列化部２１１が、当該データソース別キューＱ０１の末尾に新たな保留タプル５２４を追加する。
【００５８】
タプル整列化部２１１は、新たにデータソース別キューＱ０１を時刻順整列ツリー２１８へ（リーフノード６１３として）挿入する際に、データタイムスタンプを順序キーとして、ルートノード６１１に接続されるブランチ６１２のうち、保留タプル５２４のデータタイムスタンプを範囲に含むものを選択する。
【００５９】
タプル整列化部２１１は、受け付けた入力タプル１２４に現在のシステムタイムスタンプを付加してストリームデータ処理サーバ１００のシステムタイムスタンプを保留タプル５２４としてデータソース別キューＱ０１へ格納する。
【００６０】
その後、タプル整列化部２１１は、時刻順整列ツリー２１８内のデータソース別キュー２１９の先頭の保留タプル（以下、先頭タプル）のうち、最小（最古）のデータタイムスタンプを有する保留タプルのシステムタイムスタンプを取得する。図５において、先頭タプルのうち最古のデータタイムスタンプは、データソース別キューＱ０２の保留タプル５２７で、１０時５分０．０１２秒である。
【００６１】
タプル整列化部２１１は、システム時計２１６から取得した現在のシステムタイムスタンプと、最古のデータタイムスタンプを有する保留タプル５２７のシステムタイムスタンプに処理保留期間１３６（２秒）を加えた値とを比較する。
【００６２】
すなわち、タプル整列化部２１１は、現在のシステムタイムスタンプ（１０時７分４．５００秒）が、保留タプル５２７のシステムタイムスタンプ（１０時７分２．３００秒）に処理保留期間１３６の“２秒”を加算した値（１０時７分４．３００秒）を超えていれば、当該保留タプル５２７の入力タプル１２７を入力ストリーム２１３に投入する。
【００６３】
後述するように、時刻順整列ツリー２１８に接続されたデータソース別キューの先頭タプルのうち最古のデータタイムスタンプを持つ入力タプルを、順次入力ストリーム２１３へ投入することで、入力タプル１２１をデータタイムスタンプの順序で処理することができるのである。
【００６４】
タプル整列化部２１１は、保留タプル５２７から入力タプル１２７を取り出して、入力ストリーム２１３−１（以下、２１３）へ投入すると、連続タプル入力数計数部２１７の値に１を加算する。また、タプル整列化部２１１は、入力ストリーム２１３へ投入した入力タプル１２７のデータタイムスタンプの値を最新データソース時刻記憶部２２０に格納する。
【００６５】
なお、タプル整列化部２１１は、先頭タプルを入力ストリーム２１３へ投入した後、新たに先頭となった保留タプルのデータタイムスタンプを順序キーとして、データタイムスタンプの順序となるリーフノード６１３の位置へデータソース別キュー２１９を移動させる。
【００６６】
また、タプル整列化部２１１は、連続タプル入力数計数部２１７の値がツリー回収保留回数１３７を超えると、保留タプルがなくなったツリーを削除して計算機リソースを回収する。
【００６７】
タプル整列化部２１１は、上記の処理により入力タプル１２４にシステムタイムスタンプを付加して保留タプルを生成し、時刻順整列ツリー２１８に保留タプル５２４を挿入して、リーフノード６１３のデータソース別キュー２１９の位置をデータタイムスタンプの時刻順で並び替える。
【００６８】
そして、データタイムスタンプが最古の先頭タプルのシステムタイムスタンプに処理保留期間１３６を加えた時刻が、現在のシステムタイムスタンプ未満であれば、当該先頭タプルの入力タプル１２１を入力ストリームに投入していく。換言すれば、現在のシステムタイムスタンプが、先頭タプルのシステムタイムスタンプに処理保留期間１３６を加えた時刻を経過していれば、タプル整列化部２１１は、当該先頭タプルの入力タプル１２１を入力ストリームに投入する。
【００６９】
これにより、ストリームデータ処理サーバ１００は、複数のデータソース１２０から受け付けた入力タプル１２１をデータタイムスタンプの順序に補正してからクエリ処理を実現することができる。
【００７０】
また、タプル整列化部２１１は、ツリー回収保留回数１３７によって、時刻順整列ツリー２１８のうち、保留タプル５２１が入力ストリーム２１３へ投入されて空になったツリーを削除するタイミングを制御することができる。空になったツリーを削除するには、ストリームデータ処理サーバ１００に大きな負荷がかかるため、頻繁にツリーを削除する処理が行われるのを抑制できる。なお、削除可能な空のツリーは、最新データソース時刻記憶部２２０に格納されたデータタイムスタンプよりも前（古い）のツリーである。
【００７１】
＜時刻順整列ツリー＞
図６は、時刻順整列ツリー２１８の一例を示すブロック図である。時刻順整列ツリー２１８には、図６で示すように、ルートノード６１１にブランチ６１２（ＲＡ、ＲＢ、ＲＣ）が接続される。各ブランチ６１２には、データソース別キュー２１９がリーフノード６１３として接続されてツリーを構成する。
【００７２】
各ブランチ６１２には、先頭タプルのデータタイムスタンプが、ルートノード６１１に記憶されている順序キー（データタイムスタンプ）を区切りとする、時刻範囲に含まれるデータソース別キュー２１９が、リーフノード６１３として接続される。本実施例では、時刻順整列ツリー２１８としてバランス型ツリーを用いる例を示す。バランス型ツリーとしては、Ｂ＋ツリーやＢツリーを採用する例を示す。時刻順整列ツリー２１８は、これに限定されるものではなく、公知または周知の手法を採用することができる。
【００７３】
図６の例では、ルートノード６１１に、各ブランチ６１２（ＲＡ、ＲＢ、ＲＣ）の時刻範囲を区切る順序キーとして、１０：０５：０１．０および１０：０５：０２．０が記憶されている。図中、ＲＡは、１０時５分０１秒以下の時刻範囲のブランチである。ＲＢは、１０時５分０１秒を超え、１０時５分０２秒以下の時刻範囲のブランチである。ＲＣは、１０時５分０２秒を超える時刻範囲のブランチである。
【００７４】
図６において、ブランチＲＡのリーフノード６１３には、データソース別キュー２１９−２（以下、Ｑ０２）と２１９−０（以下、Ｑ００）が配置される。データソース別キューＱ０２の先頭タプルのデータタイムスタンプは、１０時５分０．０１２秒で、データソース別キューＱ００の先頭タプルのデータタイムスタンプは、１０時５分０．２３４秒であり、先頭タプルの時刻順では、Ｑ０２＜Ｑ００となっている。
【００７５】
そして、ブランチＲＢのリーフノード６１３には、データソース別キュー２１９−１（以下、Ｑ０１）が配置される。データソース別キューＱ０１の先頭タプルのデータタイムスタンプは、１０時５分０１．４５６秒である。リーフノード６１３において、データソース別キューＱ００〜Ｑ０２の先頭タプルのデータタイムスタンプは、時刻（時系列）の順序で並んでいる。
【００７６】
そして、各データソース別キュー２１９の内部では、先頭タプルから図中下方の保留タプルに向けてデータタイムスタンプの値が増大するようにキューイングされる。例えば、図示のデータソース別キューＱ０２では、先頭タプル（保留タプル５２７）のデータタイムスタンプは、１０時５分０．０１２秒であり、次の保留タプル５２８のデータタイムスタンプは１０時５分０１．７８９秒となり、データソース別キュー２１９の図中下方に向けて時刻が増大する。なお、以下では保留タプルの総称を符号５２１で示し、個々の保留タプルを符号５２１〜５２８で示す。
【００７７】
本発明の時刻順整列ツリー２１８では、リーフノード６１３の先頭タプルのデータタイムスタンプを順序キーとすることにより、ブランチ６１２を容易に決定することができる。
【００７８】
タプル整列化部２１１は、先頭タプルのデータタイムスタンプが時系列の順序を維持するようにデータソース別キュー２１９をノード間で移動して、リーフノード６１３を並び替える。これにより、複数のデータソース１２０から到着する入力タプル１２１の順序が、データタイムスタンプの順序から逸脱しても、処理保留期間１３６内であればデータタイムスタンプの順序に補正することが可能となるのである。
【００７９】
＜タプル整列化部で行われるタプル入力部の処理＞
図３Ａ、図３Ｂは、タプル整列化部２１１で行われる処理の一例を示すフローチャートである。なお、図３Ａはフローチャートの前半部で、図３Ｂは後半部である。この処理は、入力キュー２１２へ入力タプル１２１が入力されたときに繰り返して実行される。
【００８０】
タプル整列化部２１１は、ステップ３０１で、入力キュー２１２から入力タプル１２１を取得し、システム時計２１６から現在のシステムタイムスタンプを取得する。そして、タプル整列化部２１１は、入力タプル１２１にシステムタイムスタンプを付加して保留タプル５２１を生成する。
【００８１】
タプル整列化部２１１は、ステップ３０２で、保留タプル５２１のデータソース識別カラム１３４の値（データソース識別子：ＳＩＤ）をキーとして、データソース別キュー保管部２１５からデータソース別キュー２１９を選択する。
【００８２】
タプル整列化部２１１は、ステップ３０３で、時刻順整列ツリー２１８のリーフノード６１３に上記ステップ３０２で選択したデータソース別キュー２１９が存在するか否かを判定する。データソース別キュー２１９が存在する場合にはステップ３０５へ進み、データソース別キュー２１９が存在しない場合にはステップ３０４へ進む。
【００８３】
タプル整列化部２１１は、ステップ３０５で、データソース別キュー２１９が空であるか否かを判定する。データソース別キュー２１９が空であれば、ステップ３０７に進み、空でない場合にはステップ３０６へ進む。タプル整列化部２１１は、ステップ３０６で、データソース別キュー２１９の末尾に当該保留タプルを追加する。その後、ステップ３０９へ進む。
【００８４】
一方、ステップ３０３でデータソース別キュー３１９が存在しない場合、タプル整列化部２１１は、ステップ３０４で、データソース１２０の識別子に対応するデータソース別キュー２１９を生成し、データソース別キュー保管部２１５に格納する。その後、ステップ３０７へ進む。
【００８５】
タプル整列化部２１１は、ステップ３０７で、空のデータソース別キュー２１９に当該保留タプル５２１を追加する。その後、ステップ３０８へ進む。タプル整列化部２１１は、ステップ３０８で、保留タプル５２１のデータソース時刻カラム１３５の値（データタイムスタンプ）を順序キーとして、時刻順整列ツリー２１８で該当するリーフノード６１３の位置へデータソース別キュー２１９を挿入する。その後、ステップ３０９へ進む。
【００８６】
タプル整列化部２１１は、ステップ３０９で、時刻順整列ツリー２１８でデータタイムスタンプが最小（最古）のリーフノード６１３に位置するデータソース別キュー２１９の先頭タプルを取得する。そして、タプル整列化部２１１は、当該先頭タプルのシステムタイムスタンプについて、現在のシステムタイムスタンプの値が、先頭タプルのシステムタイムスタンプに処理保留期間１３６を加算した値を超えているか否かを判定する。
【００８７】
タプル整列化部２１１は、先頭タプルのシステムタイムスタンプ＋処理保留期間＜現在のシステムタイムスタンプであれば、図３Ｂのステップ３１１へ進み、そうでなければ、保留タプル５２１の追加のみで処理を終了する。
【００８８】
タプル整列化部２１１は、ステップ３１１で、当該先頭タプルからシステムタイムスタンプを削除した入力タプル１２１を、入力ストリーム２１３へ投入する。そして、タプル整列化部２１１は、当該入力タプル１２１のデータタイムスタンプを最新データソース時刻記憶部２２０に格納する。さらに、タプル整列化部２１１は、当該先頭タプルを当該データソース別キュー２１９から削除する。
【００８９】
タプル整列化部２１１は、ステップ３１２で、入力ストリーム２１３へ入力タプル１２１を１つ投入したので、連続タプル入力数計数部２１７の値をインクリメントする。
【００９０】
タプル整列化部２１１は、ステップ３１３で、連続タプル入力数計数部２１７の値がツリー回収保留回数１３７以上になったか否かを判定する。連続タプル入力数計数部２１７がツリー回収保留回数１３７以上であればステップ３１４へ進み、時刻順整列ツリー２１８のうち空のブランチを削除する。一方、連続タプル入力数計数部２１７がツリー回収保留回数１３７未満であればステップ３１５へ進む。
【００９１】
タプル整列化部２１１は、ステップ３１５で、時刻順整列ツリー２１８のルートノード６１１から、最新データソース時刻記憶部２２０に記憶された時刻より以前のブランチ６１２を削除する。そして、タプル整列化部２１１は、連続タプル入力数計数部２１７の値を０にリセットしてからステップ３１５へ進む。
【００９２】
タプル整列化部２１１は、ステップ３１５で、上記ステップ３１１で先頭タプルを削除したデータソース別キュー２１９が空であるか否かを判定する。当該データソース別キュー２１９が空であればステップ３１７へ進み、空でなければステップ３１６へ進む。
【００９３】
タプル整列化部２１１は、ステップ３１６で、上記ステップ３１１で削除した先頭タプルの次の保留タプル５２１を先頭タプルに繰り上げる。そして、タプル整列化部２１１は、新たな先頭タプルのデータタイムスタンプの値を順序キーとして、時刻順整列ツリー２１８のうち該当するリーフノード６１３の位置へ、新たな先頭タプルを格納したデータソース別キュー２１９を挿入する。その後、ステップ３１７へ進む。
【００９４】
タプル整列化部２１１は、ステップ３１７で、時刻順整列ツリー２１８のうち、データタイムスタンプが最小のリーフノード６１３を、その次に小さいリーフノード６１３へ移動する。
【００９５】
次に、タプル整列化部２１１は、図３Ａのステップ３０９へ戻って上記処理を繰り返し、データタイムスタンプが最小（最古）のリーフノード６１３で、先頭タプルのシステムタイムスタンプ＋処理保留期間１３６＜現在のシステムタイムスタンプの条件を満たす間は上記処理を繰り返す。
【００９６】
以上の処理により、新たに生成した保留タプル５２１をデータソース毎にデータソース別キュー２１９へ格納する処理と、処理保留期間１３６を経過していればデータタイムスタンプが最小の先頭タプルを入力ストリーム２１３へ投入する処理と、連続タプル入力数計数部２１７の値がツリー回収保留回数１３７以上であれば、空きツリーを回収する処理が所定の条件で行われる。
【００９７】
上記ステップ３０１〜３１２では、上記図５で示したように、入力タプル１２４にシステムタイムスタンプが付加された保留タプル５２４が生成され、データソース別キューＱ０１に格納される。データソース別キューＱ０１は、先頭タプルである保留タプル５２４のデータタイムスタンプに応じて、ブランチＲＢの配下のリーフノード６１３として配置される。
【００９８】
上記ステップ３１６、３１７で行われる処理について図７を用いて説明する。図７は、データソース毎の保留タプルの処理でデータソース別キューを移動する処理を示すブロック図である。
【００９９】
図７は、タプル整列化部２１１が、図５に示したデータソース別キューＱ０２の先頭タプル（保留タプル５２７）から入力タプル１２７を選択して入力ストリーム２１３へ投入した後に、異なるリーフノード６１３の位置へデータソース別キューＱ０２を挿入する例を示す。
【０１００】
まず、タプル整列化部２１１は、データソース別キューＱ０２から入力ストリーム２１３へ入力タプル１２７を投入し、先頭タプルを空にする。
【０１０１】
次に、タプル整列化部２１１は、先頭タプルの次の保留タプル５２８をデータソース別キューＱ０２の先頭タプルに繰り上げる。そして、タプル整列化部２１１は、先頭タプル（５２８）のデータタイムスタンプの値を順序キーとして、データソース別キューＱ０２を時刻順整列ツリー２１８のリーフノード６１３として挿入する。
【０１０２】
先頭タプルに入力タプル１２７が含まれていた時点では、データタイムスタンプが１０時５分０．０１２秒であったので、データソース別キューＱ０２はブランチＲＡの配下のリーフノード６１３で、データソース別キューＱ００の先頭タプルの値よりも時刻の値が小さい位置に挿入されていた。
【０１０３】
一方、データソース別キューＱ０２で保留タプル５２８が先頭タプルになると、入力タプル１２８のデータタイムスタンプは、１０時５分１．７８９秒であるので、ブランチＲＢの配下で、データタイムスタンプがデータソース別キューＱ０１よりも大きいリーフノード６１３として、データソース別キューＱ０２が挿入される。
【０１０４】
上記処理により、タプル整列化部２１１は、先頭タプルが更新されたデータソース別キューＱ０２を、新たな先頭タプルのデータタイムスタンプに対応するブランチ６１２の配下に移動させる。これにより、タプル整列化部２１１は、先頭タプルのデータタイムスタンプの順序でデータソース別キュー２１９を時刻順整列ツリー２１８上で整列させることができる。
【０１０５】
なお、ブランチＲＡの配下のリーフノード６１３には、データソース別キューＱ０２の定義が残される。データソース別キュー２１９は、後述するように、保留タプル５２１がなくなってもキューの定義と、ブランチ６１２及びリーフノード６１３が残る。また、タプル整列化部２１１は、入力ストリーム２１３へ入力タプル１２７を投入した後にデータソース別キューＱ０２が空となった場合、他のリーフノード６１３へのデータソース別キューＱ０２の移動（挿入）は実施しない。
【０１０６】
図８は、データソース毎の保留タプル５２１の処理で入力ストリームへのタプルの詰め込みが完了した状態を示すブロック図である。図８は、タプル整列化部２１１が、図５に示したデータソース別キューＱ００の先頭タプル（保留タプル５２１）から入力タプル１２１を選択して入力ストリーム２１３へ投入した後に、異なるリーフノード６１３としてデータソース別キューＱ００を挿入した後の例を示す。
【０１０７】
図示の例では、上記図３Ａのステップ３０９で行われる処理を示す。タプル整列化部２１１は、先頭タプルのデータタイムスタンプの値が最小のリーフノード６１３において、現在のシステムタイムスタンプの値が、保留タプル５２４に格納されたシステムタイムスタンプの値に処理保留期間１３６（２秒）を加算した値を超えていなければ、処理保留期間１３６内と判定する。この処理保留期間１３６において、タプル整列化部２１１は、入力ストリームへの入力タプル１２１の投入を行わずに処理を終了する。
【０１０８】
本発明では、ストリームデータ処理サーバ１００へ入力タプル１２１が到着したときのシステムタイムスタンプの値に処理保留期間１３６を加算した値まで、入力ストリーム２１３への投入を保留する。これにより、データソース間で通信経路の遅延時間が異なる場合でも、所定の処理保留期間１３６内でデータタイムスタンプの順序で入力タプル１２１を並び替えることができる。
【０１０９】
図９、図１０は、空になったデータソース別キューＱ００、Ｑ０２、リーフノード６１３及びブランチ６１２を削除する処理を示す。この処理は、図３Ｂのステップ３１１〜３１４に相当する。
【０１１０】
図９では、タプル整列化部２１１は、ストリームデータ処理サーバ１００で受信した入力タプル１２５にシステムタイムスタンプを付与して、保留タプル５２５としてデータソース別キューＱ０１へ格納する。
【０１１１】
そして、タプル整列化部２１１は、データソース別キューＱ０２の先頭タプル（１２８）を入力ストリーム２１３へ投入する。タプル整列化部２１１は、入力ストリーム２１３へ投入した入力タプル１２８のデータタイムスタンプ（１０時５分１．７８９秒）の値を最新データソース時刻記憶部２２０へ格納する（図３Ｂのステップ３１１）。
【０１１２】
次に、タプル整列化部２１１は、連続タプル入力数計数部２１７の値をインクリメントする（図３Ｂのステップ３１２）。タプル整列化部２１１は、連続タプル入力数計数部２１７の値がツリー回収保留回数１３７（４回）以上になったか否かを判定する（図３Ｂのステップ３１３）。
【０１１３】
連続タプル入力数計数部２１７の値が４になっているので、タプル整列化部２１１は、時刻順整列ツリー２１８のルートノード６１１から、最新データソース時刻記憶部２２０の時刻（１０時５分１．７８９秒）よりも以前のブランチ６１２及びリーフノード６１３を削除する（図３Ｂのステップ３１４）。
【０１１４】
図９の例では、直近に入力ストリーム２１３へ投入した入力タプル１２８のデータタイムスタンプは、１０時５分１．７８９秒であるので、当該時刻以前のブランチはＲＡである。したがって、同ブランチ６１２及びその配下のリーフノード６１３が、削除対象となる。
【０１１５】
図１０では、タプル整列化部２１１が、最新データソース時刻記憶部２２０の時刻（１０時５分１．７８９秒）以前のブランチ６１２及びその配下のリーフノード６１３を一括して削除する。その後、タプル整列化部２１１は、連続タプル入力数計数部２１７の値を０にリセットする。
【０１１６】
ここで、時刻順整列ツリー２１８の空きリーフノード６１３及びブランチ６１２を削除する処理は、計算機の負荷が高くなる処理である。本発明では、入力ストリーム２１３へ投入した入力タプル１２１の数が閾値以上になってから、空のデータソース別キューを含むリーフノード６１３及びブランチ６１２の削除を一括して行う。これにより、空きリーフノード６１３及びブランチ６１２の削除処理が頻繁に発生するのを防いで、ストリームデータ処理能力が低下するのを抑制することができる。
【０１１７】
＜まとめ＞
以上のように、本発明によれば、ストリームデータ処理サーバ１００は、データソース別キュー２１９に入力タプル１２１をデータソース１２０毎に格納し、データタイムスタンプが最も小さい（古い）入力タプル１２１を先頭タプルとする。そして、タプル整列化部２１１は、データソース別キュー２１９を先頭タプルのデータタイムスタンプ（時系列）の順序で並べ替える。
【０１１８】
タプル整列化部２１１は、入力タプル１２１をストリームデータ処理サーバ１００で受け付けた時点のシステムタイムスタンプを入力タプル１２１に付与して保留タプル５２１として管理する。保留タプル５２４のシステムタイムスタンプが処理保留期間１３６を経過するまで、タプル整列化部２１１は、入力タプル１２１を入力ストリーム２１３へ投入するのを保留する。
【０１１９】
そして、システムタイムスタンプが処理保留期間１３６を経過すると、タプル整列化部２１１は、先頭タプルのデータタイムスタンプが最も小さいデータソース別キュー２１９の先頭タプルを選択すれば、データタイムスタンプの順序で入力タプル１２１を投入することができる。
【０１２０】
これにより、データソース１２０毎にストリームデータ処理サーバ１００へ到着するまでの遅延時間が異なる場合でも、処理保留期間１３６の範囲で、データタイムスタンプの順序で入力ストリーム２１３へ投入することが可能となる。すなわち、処理保留期間１３６内に入力ストリーム２１３へ投入された入力タプル１２１の順序がデータタイムスタンプの順序であることを保証することができる。これにより、ストリームデータ処理サーバ１００の処理の精度を向上させることができる。
【０１２１】
また、データソース別キュー２１９の並べ替えを、時刻順整列ツリー２１８によって行うことで、入力ストリーム２１３へ投入する入力タプル１２１を、データタイムスタンプが最小の先頭タプルをもつデータソース別キューから効率的に選択することが可能となる。これにより、入力タプル１２１をデータタイムスタンプの順序で並び替えて入力ストリームへ投入する処理の負荷を抑制することができる。
【０１２２】
さらに、入力ストリーム２１３へ入力タプル１２１を投入した回数（連続タプル入力数計数部２１７の値）が所定値となるまで、入力タプル１２１がなくなった空のデータソース別キュー２１９、リーフノード６１３及びブランチ６１２の削除処理を保留する。これにより、時刻順整列ツリー２１８のブランチ６１２及びリーフノード６１３の削除処理が頻発するのを抑制することができ、ストリームデータの処理能力を維持することができる。
【０１２３】
なお、上記実施例では、ストリームデータ処理サーバ１００へ到着した入力タプル１２１の順序を決定する値としてシステムタイムスタンプを用いる例を示したが、ユニークな値を用いればよい。
【０１２４】
また、上記実施例では、データソース別キュー２１９を、Ｂ＋ツリーで構成された時刻順整列ツリー２１８のリーフノード６１３として配置する例を示したが、これに限定されるものではなく、データソース別キュー２１９のポインタを時刻順整列ツリー２１８で管理しても良い。あるいは、時刻順整列ツリー２１８を用いずに時系列の配列上でデータソース別キュー２１９またはデータソース別キュー２１９のポインタを管理するようにしてもよい。
【０１２５】
また、上記実施例では、ホスト計算機１３０から受け付けた入力タプル整列化設定１３３によって、タプル整列化部２１１が入力タプル１２１の順序を並び替える例を示したが、タプル整列化部２１１に予め入力タプル整列化設定１３３を設定しておいても良い。
【０１２６】
また、上記実施例では、タプル入力部２１０の内部にタプル整列化部２１１を設けたが、タプル入力部２１０とタプル整列化部２１１が一組であってもよい。
【０１２７】
また、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【０１２８】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【図１】
2016067335.tif 000003
【図２Ａ】
2016067335.tif 000004
【図２Ｂ】
2016067335.tif 000005
【図３Ａ】
2016067335.tif 000006
【図３Ｂ】
2016067335.tif 000007
【図４】
2016067335.tif 000008
【図５】
2016067335.tif 000009
【図６】
2016067335.tif 000010
【図７】
2016067335.tif 000011
【図８】
2016067335.tif 000012
【図９】
2016067335.tif 000013
【図１０】
2016067335.tif 000014
【国際調査報告】
2016067335.tif 000015
2016067335.tif 000016