ストリームデータ処理方法、及びシステム
【課題】
時間ウィンドウを含むクエリのメモリ使用量を一定に保ち、かつ全ての入力データを考慮した正確な計算処理を実現するストリームデータを提供する。
【解決手段】
ストリームデータ処理サーバ111は、クエリ時間解像度変更部130で、時間ウィンドウをより小さい幅のサブウィンドウに区切り、クエリ処理エンジン140はストリームデータ受付時にサブウィンドウ単位の集計処理を実行して集約タプルを生成し、時間ウィンドウを含むクエリの計算結果を、この集約タプルに対する集計処理によって計算する。
時間ウィンドウを含むクエリのメモリ使用量を一定に保ち、かつ全ての入力データを考慮した正確な計算処理を実現するストリームデータを提供する。
【解決手段】
ストリームデータ処理サーバ111は、クエリ時間解像度変更部130で、時間ウィンドウをより小さい幅のサブウィンドウに区切り、クエリ処理エンジン140はストリームデータ受付時にサブウィンドウ単位の集計処理を実行して集約タプルを生成し、時間ウィンドウを含むクエリの計算結果を、この集約タプルに対する集計処理によって計算する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、時々刻々と到来するストリームデータをリアルタイムに処理するストリームデータ処理方法、特に時間ウィンドウ利用のクエリのメモリ使用量の上限を定めるストリームデータ処理方法、及びそのシステムに関する。
【背景技術】
【0002】
従来、企業情報システムのデータ管理の中心にはデータベース管理システム(以下、DBMSとする)が位置づけられていた。DBMSは、処理対象のデータをストレージに格納し、格納したデータに対してトランザクション処理に代表される高信頼な処理を実現している。これに対して、時々刻々と到着する大量のデータをリアルタイム処理するデータ処理システムに対する要求が高まっている。例えば、株取引を支援する金融アプリケーションを考えた場合、株価の変動にいかに迅速に反応できるかがシステムの最重要の課題の一つである。従来のDBMSのように株式のデータを一旦記憶装置に格納してから、該格納データに関して検索を行うようなシステムでは、データの格納とそれに続く検索処理が株価変動のスピードに追いつくことができず、ビジネスチャンスを逃してしまうことになりかねない。
【0003】
このようなリアルタイムデータ処理に好適なデータ処理システムとして、ストリームデータ処理システムが提案されている。例えば非特許文献1にストリームデータ処理システム“STREAM”が開示されている。
【0004】
ストリームデータ処理システムでは、従来のDBMSとは異なり、まずクエリ(問合せ)をシステムに登録し、データの到来と共に該クエリが継続的に実行される。ここでのストリームデータとは、映像ストリームのような論理的に継続する一つの大きなデータではなく、金融アプリケーションにおける株価配信データ、小売業での販売時点情報管理(以下、POSとする)データ、交通情報システムにおけるプローブカーデータ、計算機システム管理におけるエラーログ、センサやRFID(Radio Frequency Identification)などのユビキタスデバイスから発生するセンシングデータなど、比較的小さな論理的には独立した大量の時系列データである。
【0005】
ストリームデータは継続してシステムに到着し続けるため、その終わりを待ってから処理を開始するのでは実時間での処理は不可能である。また、システムに到着したデータは、データ処理の負荷に影響されることなく、その到着順を守って処理する必要がある。前述のSTREAMでは、システムに到来し続けるストリームデータを、最新10分間などの時間の幅、もしくは最新1000件などの個数の幅を指定してストリームデータの一部を切り取りながらリアルタイムの処理を実現するため、スライディングウィンドウ(以下単にウィンドウと呼ぶ)と呼ばれる概念を導入している。ウィンドウ指定を含むクエリの記述言語の好適な例としては、非特許文献4に開示されているCQL(Continuous Query Language)をあげることができる。CQLは、DBMSで広く用いられているSQL(Structured Query Language)のFROM句に、ストリーム名に続いて括弧を用いることにより、ウィンドウを指定する拡張が施されている。SQLに関しては、非特許文献2が詳しい。
【0006】
図14のクエリ1101は非特許文献1の2.1節に示されているCQLによるクエリの例である。該クエリでは、あるWebプロキシサーバにおいて、ドメインstanford.eduからの現時点から過去1日分のアクセスの総数を計算する。Requestsは前記Webプロキシサーバに到来し続けるWebアクセスデータであり、従来のDBMSで取り扱うテーブル(表)のような静止化されたデータではなく、切れ目のないストリームデータとなる。そのため、アクセスの総数を計算は、ウィンドウ指定“[Range 1 Day Preceding]”による、ストリームデータのどの部分を対象とするかの指定なしでは、不可能となる。ウィンドウによって切り取られたストリームデータはメモリ上に保持され、クエリ処理に使用される。
【0007】
代表的なウィンドウの指定方法には、ウィンドウの幅を時間で指定するRangeウィンドウ(以下、時間ウィンドウ)と、ウィンドウの幅をデータ数で指定するRowウィンドウ(以下、行ウィンドウ)がある。例えば、時間ウィンドウを用いて、[Range 10 minutes]とすると、最新の10分間分がクエリ処理の対象となり、行ウィンドウを用いて[Rows 10]とすると、最新の10件がクエリ処理の対象となる。
【0008】
そこで、非特許文献3では、メモリに載らないストリームデータを磁気ディスクに格納する方法が開示されている。
【0009】
一方、特許文献1では処理対象のデータ量が増大した際に、サンプリングにより一部のデータを捨てることにより、メモリ使用量を削減する方法を開示している。
【0010】
【非特許文献1】R. Motwani,J. Widom,A. Arasu,B. Babcock,S. Babu,M. Datar,G. Manku,C. Olston,J. Rosenstein and R. Varma著:“Query Processing、 Resource Management、 and Approximation in a Data Stream Management System”,In Proc. of the 2003 Conf. on Innovative Data Systems Research (CIDR),January 2003、
【非特許文献2】C. J. Date,Hugh Darwen著:“A Guide to SQL Standard (4th Edition)”,Addison−Wesley Professional; 4 edition (November 8、 1996),ISBN: 0201964260
【非特許文献3】Motwani他:“Caching Queues in Memory Buffers”、In Proc. of SODA 2004
【非特許文献4】A. Arasu,S. Babu and J. Widom著:“The CQL continuous query language: semantic foundations and query execution”, The VLDB Journal,Volume 15,Issue 2, pp. 121−142 (June 2006)
【特許文献1】米国公開特許US2007/0226239号
【特許文献2】特開2006−338432号公開公報
【発明の開示】
【発明が解決しようとする課題】
【0011】
しかしながら、非特許文献1や非特許文献2のストリームデータ処理システムは、前述した金融アプリケーションのみならず、カープローブ、Webおよび計算機システムのアクセス監視、通信監視、製造監視など、高レートで発生するデータをリアルタイムに解析する様々なアプリケーションへの適用が期待されている。このようなアプリケーションでは、大量のデータが短い時間内にバースト的に到来することがある。例えば、金融アプリケーションの代表的な例である株式の取引システムにおいては、取引開始時、取引終了間際に大量の売り買いの注文が発生する。前述の時間ウィンドウを用いる場合、時間ウィンドウで指定した時間の幅Tに含まれるストリームデータが処理の対象となる。幅T内に含まれるデータの数はシステムに到来するストリームデータに依存するために、例えば1時間以内に到来する売買要求の数を予測することが困難であるように、予めその大きさを見積もることが難しい。ストリームデータ処理では、高速処理の要求からウィンドウ上のデータをメモリ上に展開するため、時間ウィンドウを利用した場合のメモリ使用量の見積りが困難となる。また、ストリームデータがバースト的に到来した場合、メモリの確保が難しくなりシステムの安定性が損なわれるリスクがある。
【0012】
さらに、高い性能が要求される金融・通信応用などでは、非特許文献3のような磁気ディスクの利用ではレイテンシ(latency)などの性能要件を満たせないことがある。また、特許文献1の方法では全ての入力データを反映した正確な計算が必要で、サンプリングが許されない応用には適用が困難である。
【0013】
リアルタイムデータ処理を実現するストリームデータ処理システムで時間ウィンドウを含むクエリを処理する場合には、システムに到来するストリームデータの増加時にもメモリ使用量を一定に保つ必要がある。加えて、金融応用などいくつかのアプリケーションでは、全ての入力データを考慮した近似を含まない正確な計算を実行する必要がある。
【0014】
以上の要求から、時間ウィンドウを利用したクエリを処理する際に、ストリームデータがバースト的に到来する場合でも、メモリ使用量の上限を規定でき、かつ全てのデータを考慮した正確な計算を実行できる処理方法が必要となる。しかし、このようなストリームデータ処理方法はこれまで実現されていなかった。
【0015】
本発明の目的は、時間ウィンドウを含むクエリのメモリ使用量を一定に保ち、かつ全ての入力データを考慮した正確な計算処理を実現するストリーム処理方法、及びそのシステムを提供することにある。
【課題を解決するための手段】
【0016】
上記目的を達成するため、本発明においては、ストリームデータに対しクエリ処理を行うシステムにおけるストリームデータ処理方法であって、クエリが、ある時間間隔内にシステムに到来したストリームデータを処理対象とする時間ウィンドウを含む場合に、時間ウィンドウをより小さい幅のサブウィンドウに区切り、このサブウィンドウ内に含まれるストリームデータを集約した少なくとも一つの集約タプルを生成し、この集約タプルを用いてクエリの処理結果を計算するストリームデータ処理方法、及びそのシステムを提供する。
【0017】
また、上記目的を達成するため、ストリームデータに対しクエリ処理を行うシステムにおけるストリームデータ処理方法であって、クエリが、ある時間間隔内にシステムに到来したストリームデータを処理対象とする時間ウィンドウを含む場合に、この時間ウィンドウをより小さい幅のサブウィンドウに区切り、受け付けたストリームタプルが新しいサブウィンドウに区分けされる場合に、このサブウィンドウ内に集約タプルを生成し、集約タプルの生存期間の終了時刻を、受け付けたストリームタプルのタイムスタンプにクエリで指定された前記時間ウィンドウの幅を加えた時刻に設定し、受け付けたストリームタプルが既存のサブウィンドウに区分けされる場合に、当該ストリームタプルを用いて集約タプルを更新し、更新した集約タプルの生存期間終了時刻を、受け付けたストリームタプルのタイムスタンプにクエリで指定された時間ウィンドウの幅を加えた時刻に設定し、設定した生存期間終了時刻に、集約タプルを消去するためのフラグをつけたストリームタプルを生成し、これら集約タプルを用いてクエリの処理結果を計算するストリームデータ処理方法、及びそのシステムを提供する。
【発明の効果】
【0018】
本発明を用いることにより、時間ウィンドウを含むクエリを処理する際に、入力となるストリームデータが増加した場合でも、メモリ使用量の上限を一定に保つことができ、システム安定性確保、および運用管理の容易化に寄与する。
【発明を実施するための最良の形態】
【0019】
以下、図面に基づき本発明の種々の実施形態を説明する。
【0020】
本願で開示される発明のうち、代表的な発明の概要は以下の通りである。すなわち、代表的実施態様では時間ウィンドウをより小さい幅のサブウィンドウに区切り、ストリームデータ受付時に該サブウィンドウ単位の集計処理を実行して集約タプルを生成し、この時間ウィンドウを含むクエリの計算結果を、集約タプルに対する集計処理によって計算する。
【0021】
例えば、幅Tの時間ウィンドウに含まれる売上データの総計を計算することを考える。幅Tの時間内に、10件の売上があった場合には時間ウィンドウは10件分のデータのみを保持すればよいが、10000件の売上があった場合には10000件のデータを保持しなければならない。そこで、時間ウィンドウの幅Tに対して、サブウィンドウの幅をTS(TS≦T)に設定し、TS時間単位に売上データを集計した集約タプルを生成してオリジナルのデータは破棄していく。これにより、オリジナルのデータの数によらず、TS時間単位の集約タプルのみをメモリ上に保持すればよく、メモリ使用量を一定化することができる。幅T全体分の売上の総計を計算する際には、各TSの集約タプルの総和を計算することで、近似を用いない正確な計算結果を得ることができる。
【0022】
ストリームデータ処理のウィンドウを用いた処理では、個々のストリームタプルは生存期間を持つ。集約タプルの生存終了時刻は、サブウィンドウ内の集計値が最後に更新された時刻、すなわち集約タプルの最終更新時刻から時間ウィンドウの幅Tを経過した時刻に設定される。集約タプルの生存終了時刻には、生存終了を示す集約タプルのマイナスタプルを生成し、サブウィンドウの総和を計算時に該マイナスタプルを反映して全体の集計値を再計算する。
【実施例1】
【0023】
図1に、第一の実施例に係わる、ストリームデータ処理システム(以下、単にシステムと呼ぶ場合がある)の一構成を示す。アプリケーション1(102)を実行するクライアント計算機101、アプリケーション2(104)を実行するクライアント計算機103は、ネットワーク110を介してストリームデータ処理システムが稼動するストリームデータ処理サーバ111に接続されている。ネットワーク110は、イーサネット(登録商標)、光ファイバなどで接続されるローカルエリアネットワーク(LAN)、もしくはLANよりも低速なインターネットを含んだワイドエリアネットワーク(WAN)でも差し支えない。また、クライアント計算機101、103はパーソナルコンピュータ(PC)、ブレード型の計算機システムなどの任意のコンピュータシステムでよい。
【0024】
ストリームデータ処理サーバ111は、インタフェース部を構成する通信インタフェース145及びI/Oインタフェース114、処理部を構成する中央処理部(CPU)113、記憶部であるメモリ112が、バス116で結合された計算機であり、ブレード型計算機システム、PCサーバなどの任意のコンピュータシステム、データ処理装置でよい。ストリームデータ処理サーバ111では、通信インタフェース145を介してクライアント計算機101、103、及び後述するデータソースにアクセスする。
【0025】
ストリームデータ処理サーバ111で、ストリームデータ処理結果、処理の中間結果、システム動作に必要な設定データを不揮発性のストレージに格納する場合には、ストリームデータ処理サーバ111に接続した記憶部であるストレージ装置115を用いることができる。ストレージ装置115は、ストリームデータ処理サーバ111のI/Oインタフェース114を介して直接接続される、もしくは通信インタフェース115を介してネットワーク接続される。
【0026】
ストリームデータ処理システムは、ストリームデータ処理サーバ111の上で動作する。図1にストリームデータ処理システムの主要構成要素を示す。メモリ112内に図示された時間解像度変更方法指示テーブル131、クエリ保持テーブル132以外のブロックは、CPU113上で動作する機能を模式的に示している。アプリケーション1、2は、まずストリームデータ処理システムで処理の対象とするストリーム105を登録し、該ストリームをどのように処理するかを記述したクエリ106を登録する。登録されたクエリはクエリ時間解像度変更部130で解析される。クエリ時間解像度変更部130は時間解像度書換え方法指示テーブル131を参照して、必要に応じてクエリの時間解像度を変更し、クエリをクエリ保持テーブル132に登録する。
【0027】
図11を用いてクエリ保持テーブルの好適な構成例を説明する。クエリ保持テーブルは、クエリ名(1401)、クエリ文字列(1402)、クエリ実行形式のアドレス(1403)、時間解像度変更方法指示テーブルのエントリ(1404)を含む。図11のクエリQ1のエントリは、図2のクエリ指定に対して図3の時間解像度変更指定が与えられ、そのエントリが図4の#1に格納されている場合の例である。本実施例では、時間解像度指定を含むクエリの実行に必要なクエリ保持テーブルが保持すべき最低限の項目のみを示したが、他にも、クエリの登録者、クエリの登録日時、クエリの実行開始時刻、クエリの実行終了時刻、クエリの実行対象のストリームなどの項目を含んでも差し支えない。時間解像度変更処理を用いない場合のストリームデータ処理システムのクエリ登録の手順、ストリームデータ処理システム内部のデータの格納方法、格納形式、クエリを受け付けた後の解析方法、最適化方法、クエリの実行形式の作成方法、システムへの登録方法、ストリームデータ処理システムへのストリームの登録方法、システム内のデータ保持方法については、特開2006−338432号公報「ストリームデータ処理システムのクエリ処理方法」に、その好適な実施の方法が開示されている。本発明では、該方法で作成されるクエリ保持テーブルに対して、時間解像度変更方法指示テーブルのエントリが含まれている。本エントリは、図6のフローチャートのステップ607でクエリ時間解像度変更部によって挿入され、クエリ処理エンジン140に登録される。クエリ保持テーブル132は、ストリームデータ処理サーバ111のメモリ112に保持するのでも、ストリームデータ処理サーバ111に接続されているストレージ装置115に格納するのでも差し支えない。
【0028】
ストリームデータ処理システムには、一つ以上のストリームデータソースであるストリームデータソース1(117)〜ストリームデータソースN(118)からネットワーク119を介して時々刻々と大量のデータが到来する。このデータをストリームデータと呼ぶ。ストリームデータの好適な例としては、金融アプリケーションにおける株価配信情報、小売業でのPOSデータ、交通情報システムにおけるプローブカー情報、計算機システム管理におけるエラーログなどが挙げられる。ストリームデータ処理システムでは、通信インタフェース145を介してデータフローマネージャ134が受け付けたストリームデータを、タイムスタンプを付与したストリームタプルに変換して、後述するクエリ処理エンジン140上にロードされたクエリ実行形式にフィードする。さらに、本発明ではクエリ実行形式をクエリ処理エンジンにロードする際に、クエリ解像度変更部は時間解像度変更方法指示テーブルを参照し、ロードするクエリに対応するサブウィンドウ幅の設定をサブウィンドウ管理部に、そして集約タプル集計関数を時間解像度変更クエリ結果生成部144に設定する。
【0029】
前述したように、継続して到来する比較的小さな論理的には独立した大量の時系列データであるストリームデータを取り扱うために、ストリームデータ処理システムではウィンドウを用いる。メモリ上にロードされたクエリ実行形式のウィンドウ処理には、ウィンドウマネージャ141が適用される。図1のウィンドウマネージャ141は、到来するストリームデータに対して、クエリで指定されたウィンドウ演算を適用して、ストリームタプルのシステム内での生存期間を設定する。ストリームデータがウィンドウに挿入された時が生存期間の開始時刻、そしてウィンドウから該ストリームデータが削除される時が生存期間の終了時刻に相当する。本実施例の時間解像度変更クエリ処理では、ウィンドウマネージャ141が受け付けたストリームタプルは、サブウィンドウ管理部142でサブウィンドウ単位に集計され、集計結果である集約タプルはサブウィンドウ情報管理バッファ143に格納される。時刻解像度変更クエリ結果生成部144では、サブウィンドウ単位の集計値にさらに集計計算を施すことにより、与えられたクエリに対する処理結果を生成し、データ処理結果出力部133を介してアプリケーションに結果107を返信する。
【0030】
以下、上述したそれぞれの処理を具体的に説明する。最初に、クエリの登録処理について図6を用いて説明する。アプリケーションからクエリが与えられると、処理が開始され(ステップ601)、クエリ時間解像度変更部130は該クエリに対する時間解像度変更の方法が指定されているか否かをチェックする(602)。時間解像度変更の方法が指定されている場合(ステップ602でYesが選択された場合)、クエリ時間解像度変更部は指定された項目を時間解像度変更方法指示テーブル131に登録すると共にクエリの実行形式を生成してクエリ保持テーブル132に登録し(607)、クエリ登録処理を終了する(608)。本実施例では、処理対象のクエリは図2のクエリQ1(201)であり、図3の301が時間解像度の変更の指定である。クエリの処理内容、および時間解像度変更内容の詳細については、後述する。
【0031】
アプリケーションから与えられたクエリに対する時間解像度変更の方法が指定されていない場合(ステップ602でNoが選択された場合)には、クエリ時間解像度変更部は時間解像度変更が可能か否かをチェックする(605)。不可能と判定された場合(ステップ605でNoが選択された場合)には、クエリ登録処理を終了する。本フローチャートでは変更が不可能である場合、クエリを登録しないことになっているが、アプリケーションに警告を出すなどして、時間解像度を変更せずに、すなわちメモリの使用量を一定化せずにクエリを実行させることも可能である。時間解像度変更が可能な場合(ステップ605でYesが選択された場合)、クエリ時間解像度変更部は時間解像度変更に必要な項目であるサブウィンドウの幅、解像度変更対象の入力ストリーム、集計対象、カラムを決定して(606)、これらの情報を時間解像度変更方法指示テーブル131に登録すると共にクエリの実行形式を生成してそのメモリ上のアドレスをクエリ保持テーブル132に登録し(607)する。最後に、クエリ時間解像度変更部は、前記クエリ実行形式をクエリ処理エンジン140に登録すると共に、該クエリに指定されたサブウィンドウ幅をサブウィンドウ管理部143に設定し、集約タプル集計関数を時間解像度変更クエリ結果生成部144に設定して(609)、クエリ登録処理を終了する。ステップ605の判定ステップは後述するが、該判定ステップ中で時間ウィンドウが設定されているウィンドウに対する最初の処理を集計処理に設定可能と判定された場合には、前記クエリの実行形式の生成の際に時間ウィンドウが設定されているストリームに対する最初の処理を集計処理に設定する。
【0032】
サブウィンドウの幅については、その幅を小さく取るとクエリ処理で保持すべき集約タプル数が増加するため、メモリ使用量が増加する。サブウィンドウ幅の決定方法としては、例えばサブウィンドウの数と、各サブウィンドウ中に保持される集計値の数の積を計算し、該計算値とそれぞれの集計値で利用するメモリ量の積を計算し、該計算値が利用可能なメモリ量に収まるようにサブウィンドウ幅を決定する方法が考えられる。
【0033】
時間解像度変更が可能か否かの判定方法について、図7を用いて説明する。まずクエリの出力結果が集計関数、および集計関数の引数のカラムで構成されているか否かをチェックする(702)。集計関数の引数以外のカラムを含む場合(ステップ702でNoが選択された場合)、時間解像度変更は不可能と判定し(704)、判定処理を終了する(710)。クエリの出力結果が集計関数、および集計関数の引数のカラムで構成されている場合(ステップ702でYesが選択された場合)、入力ストリームの数をチェックする(703)。入力ストリームが1つのみの場合、時間解像度変更可能と判定し(706)、判定処理を終了する(710)。
【0034】
入力ストリームが複数存在する場合、時間ウィンドウが設定されているウィンドウに対する最初の処理を集計処理に設定可能か否かをチェックする(705)。例えば、該ストリームに対する最初の処理がジョインであり、それに続いてグルーピングおよび集計処理が実行される実行プランを、グルーピングおよび集計処理を先に実行し、その後にジョイン処理を実行する実行プランに変換可能か否かをチェックする。該変換が可能か否かの判定方法、および変換方法は、S. Chaudhuri and K. Shim著:“Including Group−By in Query Optimization”, In Proc. of 20th VLDB, pp. 354−366, 1994の3節に開示されている。時間ウィンドウが設定されているウィンドウに対する最初の処理を集計処理に設定不可能な場合、(ステップ705でNoが選択される場合)、時間解像度変更不可能と判定して(704)、判定処理を終了する(710)。設定可能の場合(ステップ705でYesが選択された場合)、時間解像度変更が可能と判定して(706)、判定処理を終了する(710)。以上で、クエリの登録方法の説明を終了し、以降は登録されたクエリの時間解像度変更処理方法について説明する。
【0035】
図2に示したQ1は株式売買(stock)ストリームの最新1分間分を処理対象として銘柄名(brand)毎の売上高を計算し、計算結果を30秒毎に出力するクエリである。このQ1の場合、集計グループは銘柄名(brand)毎となる。時間解像度を変更せずにQ1を処理する場合には、1分間に大量の売買情報がストリームデータとして到来すると、時間ウィンドウにそれらの個別のデータを保持する必要があり、システムのメモリ使用量が増大する。そこで、Q1の株式売買ストリームを対象として、1分間の時間ウィンドウを30秒毎のサブウィンドウに区切ってサブウィンドウの集計値を計算し、該集計値の更なる集計(再度集計処理)によってクエリQ1の計算結果を求める方法を以下で説明する。
【0036】
ユーザ、もしくはアプリケーション(以下、単にアプリケーションとする)が該計算方法をシステムに対して指定する好適な時間解像度変更指示方法を図3の301に示す。301ではクエリQ1のストリームstockを対象として、時間解像度を30000msすなわち30秒に設定し、売上高SUM(price)を計算することを表している。
【0037】
図13を用いてシステムに時間解像度変更指示が入力された場合の登録処理方法を説明する。時間解像度変更指示が入力され、処理が開始すると(1301)、システムは該指示内容をチェックする(1302)。解像度変更対象のクエリ、ストリーム、カラム、集計関数がシステム中に存在しない場合(ステップ1303でNoが選択された場合)、登録エラーを出力し(1309)登録処理を終了する(1310)。解像度変更対象のクエリ、ストリーム、カラム、集計関数が存在する場合(ステップ1303でYesが選択された場合)、サブウィンドウの幅指定と時間解像度変更対象のクエリの時間ウィンドウの幅の関係をチェックする(1311)。サブウィンドウの幅指定が時間ウィンドウの幅よりも小さい場合(ステップ1311でYesが選択された場合)には、次のステップに進む。サブウィンドウの幅指定が時間ウィンドウ幅よりも大きい場合(ステップ1311でNoが選択された場合)には、サブウィンドウ幅指定を時間ウィンドウ幅にセットして(1312)、次のステップに進む。
【0038】
次に、サブウィンドウの幅指定がシステムの規定範囲内に収まっているか否かをチェックする(1304)。システムにおけるサブウィンドウの幅の規定範囲の最小値、最大値をそれぞれTMIN、TMAXとする。TMIN、TMAXは、システムが稼動しているハードウェア、オペレーティングシステム、システムが使用可能なリソース量を考慮して、システム設計者もしくはシステム管理者により決定される。例えば、オペレーティングシステムでの最小時間解像度がTOSMINの場合、サブウィンドウの幅はTOSMINよりは小さくできないためTMIN≧TOSMINである。時間解像度変更指示の幅指定TDISがシステムの規定範囲内におさまっている場合、すなわちTMIN≦TDIS≦TMAXの場合(ステップ1304でYesが選択された場合)には、指示内容を時間解像度変更方法指示テーブルに登録し(1308)、時間解像度変更指示登録処理を終了する(1310)。サブウィンドウの幅指定がシステムの規定範囲内に収まっていない場合、すなわちTDIS<TMIN、もしくはTDIS>TMAXの場合(ステップ1304でNoが選択された場合)、システムの時間解像度変更指示モードをチェックする。指示内容チェックモードがstrictの場合(ステップ1305でYesが選択された場合)、登録エラーを出力し(1309)登録処理を終了する(1310)。指示内容チェックモードがstrictでない場合(ステップ1305でNoが選択された場合)、クエリ時間解像度変更部(130)から警告を出力し(1306)、サブウィンドウ幅の指定が規定範囲の最小値より小さい場合(TDIS<TMINの場合)は幅を規定値の最小値に(TDIS=TMINに)、サブウィンドウの幅の指定が規定範囲の最大値より大きい場合(TDIS>TMAXの場合)は幅を規定値の最大値に(TDIS=TMAXに)セットし(1307)、指示内容を時間解像度変更方法指示テーブルに登録し(1308)、時間解像度変更指示登録処理を終了する(1310)。
【0039】
本実施例では、ステップ1305で指示内容チェックモードを参照している。指示内容チェックモードは、システム全体を対象として設定する方法でも、またクエリ単位で設定する方法でも差し支えない。またその格納場所は、クエリ保持テーブル132でも、システム接続されたストレージ装置115でも差し支えない。さらに、指示内容チェックモードの指定自体をシステムの規定値として、すなわちシステム構築時にチェックモードをstrictとするか否かを定め、実行時にはステップ1305のチェックを行わない実現方法も可能である。
【0040】
以上の登録結果は、例えば図4に示す形式で時間解像度変更方法指定テーブル131としてシステム中に管理される。時間解像度指示テーブル131は、各登録毎に、番号401、クエリ名402、入力ストリーム名403、サブウィンドウ幅404、対象集計関数405、対象カラム名406が管理される。
【0041】
クエリと時間解像度変更方法が指定された後、システムストリームデータが到来した際の処理シーケンスを、図5を用いて説明する。ストリームデータソース117はストリームデータを生成する。生成されたストリームデータ(501)は、ネットワーク116、通信インタフェース145を介して、システムのデータフローマネージャ134によって受け付けられる(502)。ストリームデータを受け付けたデータフローマネージャ134は、ストリームデータからタイムスタンプを保持するストリームタプルを生成し(503)、クエリ処理エンジン140に送信する。データフローマネージャ134は、ストリームデータがシステムに到着した時刻をタイムスタンプとして用いるサーバタイムスタンプモード、およびストリームデータに付与されている時刻情報をタイムスタンプとして用いるアプリケーションタイムスタンプモードのいずれかのモードでの動作が可能である。
【0042】
クエリ処理エンジン140のウィンドウマネージャ141がストリームタプルを受け取ると、ウィンドウマネージャ141内のサブウィンドウ管理部142は、サブウィンドウ単位の集計値を計算し、サブウィンドウ情報管理バッファ143に該集計値を追加、更新し(504)する。さらに、サブウィンドウ管理部142は、前記追加、更新に伴う新しい集計値に関する差分情報(プラスの符号付ストリームタプル)を生成し(505)、時間解像度変更クエリ結果生成部144に送信する。また、サブウィンドウ管理部142は、集約タプルの生存期間が終了する際には、該集約タプルをサブウィンドウ情報管理バッファ143から削除し、該削除に伴う差分情報(マイナスの符号付ストリームタプル)を生成し、時間解像度変更クエリ結果生成部144に送信する。時間解像度変更クエリ結果生成部144は、前記差分情報からクエリの計算結果を生成し(506)、データ処理結果出力部133に送信する。そしてデータ処理結果出力部133ではクエリで指定されたデータ出力方法に従ってクエリ処理結果をアプリケーションに送信する(507)。クエリでのデータ出力指定方法については後述する。
【0043】
以上説明した本実施例の一連の処理シーケンス中で、時間解像度変更の特徴的な処理はウィンドウマネージャ141内の処理であるので、図9を用いて前述のQ1に対して株式売買(stock)ストリームデータが到来した場合の処理を具体的に説明する。図9は時間経過に伴って、ウィンドウマネージャ141内でストリームタプルがどのように処理されていくかを示すシーケンス図である。時間は図の左側の矢印931で示すように図の上から下側に進行する。図の縦線932、933はそれぞれ、サブウィンドウ管理部142、および時間解像度変更クエリ結果生成部144での処理を示しており、901、902、903、934、943はそれぞれ、ウィンドウマネージャ141に送信されるストリームタプル、サブウィンドウ情報管理バッファ143で管理される集約タプル、ウィンドウマネージャ141で生成される差分情報、時間解像度変更クエリ結果生成部144で保持される集計結果、最終的にアプリケーションに返されるクエリ処理結果の凡例を表している。
【0044】
901に示されているように、stockストリームは銘柄(brand)と売買価格(price)を構成要素として保持し、ウィンドウマネージャに送付されるストリームタプルはbrand、priceとタイムスタンプ(time)を含んでいる。クエリQ1(201)は1分間の時間ウィンドウを持つ。Q1に図3で示される時間解像度変更指定(301)を適用した場合のクエリ処理方法を説明する。クエリ処理の開始時刻は10:01:00と仮定する。時刻10:01:00にストリームタプル{a,100;10:01:00}が到来する(904)。該ストリームタプルを受け付けたウィンドウマネージャは、サブウィンドウ管理部に集約タプル905を作成する。本実施例では、集約タプルにクエリの最終結果計算に必要なカラム(今回の場合、brandカラムとSUM(price)カラム)に加えて、集約タプルの生存期間終了時刻(exprire time)、時間解像度のサブウィンドウの区切りを識別するための情報(シーケンス番号:seq.#)が追加されている。集約タプルの生存終了時刻は、該集約タプルが生成された時刻(生存開始時刻)に、クエリの時間ウィンドウで指定された時間幅を加えることによって計算される。本実施例のクエリQ1では、時間ウィンドウの幅は1分であるので、集約タプルの生成時刻10:01:00の1分後の10:02:00が生存期間終了時刻として設定される。サブウィンドウの区切りを識別するための情報の管理方法は、本実施例のようにデータと同じレコードに含めても、もしくはデータから紐付けが可能な別データとして管理するのでも差し支えない。作成された集約タプル905はサブウィンドウ情報管理バッファ143に登録される。次に、ウィンドウマネージャは本集約タプルの作成に伴う集計値の変化を差分情報として出力する。差分情報の表現方法は各種のバリエーションが考えられるが、本実施例では符号付きのストリームタプルで表現する。集約タプル905の場合は、新規に集約タプルが生成されたので、差分情報としてはプラスの符号付きストリームタプル906が生成され、時間解像度変更クエリ結果生成部144に送信される。時間解像度変更クエリ結果生成部では、サブウィンドウ単位の集約タプルの差分情報を受け取り、クエリ全体での計算結果を生成する。差分情報としてはプラスの符号付きストリームタプル906を受け取った時には、それ以前の集計値は存在しないので、クエリ全体の集計値としてストリームタプル935を生成する。
【0045】
クエリQ1ではRSTREAM [30 SECOND]句指定により、クエリの計算結果はアプリケーションに30秒間隔で送信する指示がなされている。非特許文献5の6.3節には、ストリームデータ処理システムからの好適なストリームデータ出力方法が開示されている。一つ目はストリームシステム内の前回出力時からの増加分を出力するISTREAM句、二つ目はストリームシステム内の前回出力時からの減少分を出力するDSTREAM句、そして三つ目がその時点でのストリームシステム内の出力対象全体を出力するRSTREAM句である。本実施例では、RSTREAM句が指定された場合について説明するが、ISTREAM句、DSTREAM句が指定された場合にも本発明の適用は可能である。なお、RSTREAM句は非特許文献5では出力間隔の指定方法が示されていないが、本実施例ではRSTREAM句を拡張し、出力間隔の指定を可能としている。
【0046】
Q1の処理では、最初の出力として10:01:00にクエリ処理結果{a,100}が出力される(907)。続いて、時刻10:01:01にストリームタプル908が到来する。先に述べたとおり、本実施例では時間解像度は30秒に設定されているため、本ストリームタプルは先に処理されたストリームタプル904と同じサブウィンドウに区分される。そのため、ストリームタプルを受け付けたサブウィンドウ管理部142では、ストリームタプル904を追加した際に生成したシーケンス番号10281のエントリを更新して集約タプル909を作成する。更新処理では、集計値に加えて、その生存終了時刻の更新処理も実施される。この場合、入力となるストリームタプルのタイムスタンプが10:01:01であるので、該時刻にクエリの時間ウィンドウの幅1分間を加えた10:02:01に生存終了時刻が更新される。そしてこの更新に伴う差分情報として、更新前の値150を保持するプラスの符号を持つストリームタプル、および更新後の値100を保持するマイナスの符号を持つストリームタプル910を生成し、時間解像度変更クエリ結果生成部144に送信する。時間解像度変更クエリ結果生成部144では、該差分情報を用いてクエリ処理結果936を生成する。前述したように、Q1ではアプリケーションからのクエリ処理結果出力指定がRSTREAM句により30秒毎のため、このタイミングではアプリケーションには結果は出力されない。時刻10:01:11にストリームタプル911が到来した際にも、全く同様の更新処理が実行され、時間解像度変更クエリ結果生成部にクエリ処理結果のストリームタプル937が生成される。そして、時刻10:01:30のアプリケーションから指定された結果出力タイミングで、この時点のクエリ処理結果である{a,220}がアプリケーションに送信される。
【0047】
次に時刻10:01:59にストリームタプル915が到来する。本実施例の時間解像度は30秒であり、最初のサブウィンドウの区切りは10:01:00であるため、ストリームタプル915は、これまでに到来した三つのストリームタプル904、908、911とは異なるサブウィンドウに区分けされる。そのため、サブウィンドウ管理部142では、ストリームタプル915に対応する新たなシーケンス番号を持つ新しい集約タプルのエントリを作成し、サブウィンドウ情報管理バッファ143に格納する(916)。同時に、新しい集約タプル生成に伴う差分情報として、プラスの符号を持つストリームタプル917を生成し、時間解像度変更クエリ結果生成部144に送信する。時間解像度変更クエリ結果生成部144では、受け取った差分情報を利用して集計結果を更新する(938)。
【0048】
時刻10:02:00では、時刻10:01:30の時と同様に、この時点のクエリ処理結果である{a,340}がアプリケーションに送信される(918)。次に時刻10:02:05に新しいストリームタプル919が到来すると、該タプルはその前に到来したストリームタプル915とはサブウィンドウの区分けが異なるため、サブウィンドウ情報管理バッファ143に新たな集約タプルのエントリ920が生成され、該集約タプルの生成に伴う差分情報921が生成され、時間解像度変更クエリ結果生成部144でクエリ処理結果が更新される(939)。
【0049】
時刻10:02:11には、シーケンス番号が10281の集約タプルの生存期間が終了する。そこで、サブウィンドウ管理部142では、サブウィンドウ情報管理バッファ143からシーケンス番号10281の集約タプルのエントリを削除する(922)とともに、該削除処理に伴う差分情報を時間解像度変更クエリ結果生成部144に送信する(923)。時間解像度変更クエリ結果生成部144では、該差分情報を利用して、集計値を更新する(940)。以下、ストリームタプル924、927が到来した際にも同様の処理が行われ、10:02:30にクエリ処理結果{a,480}がアプリケーションに送信される(930)。
【0050】
本実施例では簡単のために、株式銘柄名(brand)が一種類の場合の処理シーケンスを示したが、複数の株式銘柄が存在する場合には、株式銘柄毎にサブウィンドウで集約タプルを管理することで同様の処理が可能である。すなわち、集約の単位を、クエリQ1で指定された集計グループである銘柄名(brand)毎とすることができる。
【0051】
以上の処理をまとめたフローチャートを図8に示す。最初に、サブウィンドウ情報管理バッファ143内にその生存期間終了時刻が現時刻以前の集約タプルのエントリが存在するか否かをチェックする(802)。存在しない場合(ステップ802でNoが選択された場合)には、次のステップに進む。これは図9に示した例では、時刻10:02:11以外の場合に相当する。存在する場合(ステップ802でYesが選択された場合)には、該エントリをサブウィンドウ情報管理バッファ143から削除し(804)、該エントリに対応する差分情報(マイナス符号付きのストリームタプル)をウィンドウマネージャから出力する(803)。本処理は、図9で示した例では時刻10:02:11のシーケンス番号10281の集約タプルエントリの削除処理に相当する。
【0052】
次に、ストリームタプルを受け取った時の処理を説明する。今説明の便宜上、受け取ったストリームタプルをtとする。ウィンドウマネージャ141がタイムスタンプ付きのストリームタプルtを受け取る(805)と、サブウィンドウ管理部142はtのタイムスタンプがサブウィンドウ情報管理バッファ143内の最新のシーケンス番号の時刻区切りを越えたか否かをチェックする(806)。超えない場合(ステップ806でNoが選択された場合)には、ストリームタプルtを用いて最新のシーケンス番号をもつ集約タプルを更新し(808)、更新した集約タプルの生存期間終了時刻を“tのタイムスタンプ+時間ウィンドウの幅”に設定し(809)、本更新処理に伴う差分情報をウィンドウマネージャ141から出力する(810)。本処理は図9の例では、ストリームタプル908、911、924、927の到来時の処理に相当する。
【0053】
tのタイムスタンプがサブウィンドウ情報管理バッファ143内の最新のシーケンス番号の時刻区切りを越える場合(ステップ806でYesが選択される場合)には、サブウィンドウ管理部142は新しいシーケンス番号を生成し(811)、サブウィンドウ情報管理バッファ143内に、該シーケンス番号を持つ新たな集約タプルのエントリを作成して該エントリにストリームタプルtを格納し(812)、作成した集約タプルの生存期間終了時刻を“tのタイムスタンプ+時間ウィンドウの幅”に設定し(813)、該集約タプル作成に伴う差分情報をウィンドウマネージャから出力する(814)。本処理は図9の例では、ストリームタプル915、919の到来時の処理に相当する。
【0054】
時間解像度変更クエリ結果生成部144では、ウィンドウマネージャ141から出力されたサブウィンドウ単位の集約タプルに関する差分情報を再度集計し、クエリ処理結果を生成する(815)。本再集計処理では、クエリで指定された集計、サブウィンドウ単位の集計(集約タプルの生成方法)、時間解像度変更クエリ結果生成部144の集計処理の組合せの好適な実施例を図12の表1201に示す。本処理は図9の例では、縦線933上のストリームタプル計算に相当する。本実施例の場合、クエリで指定された集計はSUM(総和)であるので、図12の表1201に示すとおり、サブウィンドウ管理部142では到来するストリームタプルのSUMをサブウィンドウ単位に計算し、時間解像度変更クエリ結果生成部でもウィンドウマネージャ141から出力された差分情報のSUMを計算している。図8に戻って、時間解像度変更クエリ結果生成部で生成したクエリ処理結果は、クエリで指定されたタイミングでアプリケーションに出力される(816)。本処理は図9の例では907、914、918、930の出力処理に相当する。
【0055】
以上説明した実施例では、図8および図9を用いて対象となるクエリとしてQ1のSUM(総和)を計算する場合のみを説明したが、図10に示した、MAX(最大値)を含んだクエリQ2(1001)、MIN(最小値)を含んだクエリQ3(1002)、COUNT(件数)を含んだクエリQ4(1003)、AVERAGE(平均値)を含んだクエリQ5(1004)についても本発明は適用が可能である。
【0056】
図12の表1201を用いて具体的な計算方法を説明する。図12では、i番目のサブウィンドウの集約タプルをTAiと表している(#5の場合のみ二種類の集約タプルを用いるため、TAi_1、TAi_2と表す)。この時、Q2については図12の#2に示すように、サブウィンドウ管理部142においてサブウィンドウ単位のMAX(最大値)を計算した集約タプルを生成した後、時間解像度変更クエリ結果生成部144において集約タプル間のMAX(最大値)を計算すればよい。
【0057】
同様に、Q3については図12の#3に示すように、サブウィンドウ単位のMIN(最小値)を計算した集約タプルを生成した後、集約タプル間のMIN(最小値)を計算すればよい。Q4については図12の#4に示すように、サブウィンドウ単位のCOUNT(件数)を計算した集約タプルを生成した後、該集約タプルのSUM(総和)を計算すればよい。SUM、MIN、MAXの場合は、集約タプルを計算する演算と集約タプルから最終的なクエリの処理結果を生成する際に同種の演算を用いたが、Q4のCOUNT(件数)の場合にはサブウィンドウ単位の集約タプルのCOUNTを計算してもサブウィンドウの数が計算されるだけであるので、注意が必要である。
最後に、Q5については図12の#5に示すように、集約タプルの全体の総和を集約タプル全体の件数で割ることによって計算すればよい。さらに、これらの基本集計演算を組み合わせたより複雑な集計値、統計値の計算についても、基本集計演算の計算結果を生成した後その計算結果を組み合わせることにより、本願のストリームデータ処理方法の適用が可能である。
【0058】
また、上述の実施例では図3で時間解像度指定の方法として、時間解像度変更の対象となるクエリ名、入力ストリーム名、サブウィンドウ幅、集計関数、カラム名を全て指定するインタフェースを示したが、システムへの初期設定等により、アプリケーションからの個別指定なしに、図12に示した変換により時間解像度変更が可能な全ての集計関数に対して時間解像度変更処理を実行することも可能である。この場合には、アプリケーションからの対象集計関数の指定は省略することができる。
【0059】
さらに、上述した実施例ではクエリがCQLの形式で与えられることを想定したが、手続き型言語、GUIなどの他の手段で与えられる場合にも本願発明のストリームデータ処理方法は適用が可能である。
【図面の簡単な説明】
【0060】
【図1】第一の実施例に係わるストリームデータ処理システムの構成を示す図である。
【図2】第一の実施例に係わる、時間解像度変更対象のクエリの一例を示す図である。
【図3】第一の実施例に係わる、クエリ時間解像度変更指定の一例を示す図である。
【図4】第一の実施例に係わる、クエリ時間解像度変更指定内容の格納例を示す図である。
【図5】第一の実施例に係わる、クエリ時間解像度変更処理のシーケンスを示す図である。
【図6】第一の実施例に係わる、クエリ登録処理のフローチャートを示す図である。
【図7】第一の実施例に係わる、時間解像度変更書換え可能性チェックおよび書換え処理のフローチャートを示す図である。
【図8】第一の実施例に係わる、クエリ時間解像度変更処理のフローチャートを示す図である。
【図9】第一の実施例に係わる、クエリ時間解像度変更処理の具体例を示す図である。
【図10】各実施例に係わる、時間解像度変更が可能なクエリの例を示す図である。
【図11】第一の実施例に係わる、クエリの格納例を示す図である。
【図12】各実施例に係わる、集計処理実現方法を示す表を示す図である。
【図13】第一の実施例に係わる、クエリ時間解像度変更指示登録処理のフローチャートを示す図である。
【図14】クエリ処理言語CQLによるクエリ記述例を示す図である。
【符号の説明】
【0061】
101、103…クライアント計算機
102、104…アプリケーション
111…ストリームデータ処理サーバ
110、119…ネットワーク
112…メモリ
130…クエリ時間解像度変更部
131…時間解像度変更方法指示テーブル
132…クエリ保持テーブル
133…データ処理結果出力部
134…データフローマネージャ
140…クエリ処理エンジン
141…ウィンドウマネージャ
142…サブウィンドウ管理部
143…サブウィンドウ情報管理バッファ
144…時間解像度変更クエリ結果生成部
116…バス
113…CPU
114…I/Oインタフェース
145…通信インタフェース
115…ストレージ
117、118…ストリームデータソース
904、908、911、915、919、924、927…ストリームタプル
905、909、912、916、920、922、925、928…集約タプル
906、910、913、917、921、923、926、929…符号付ストリームタプル。
【技術分野】
【0001】
本発明は、時々刻々と到来するストリームデータをリアルタイムに処理するストリームデータ処理方法、特に時間ウィンドウ利用のクエリのメモリ使用量の上限を定めるストリームデータ処理方法、及びそのシステムに関する。
【背景技術】
【0002】
従来、企業情報システムのデータ管理の中心にはデータベース管理システム(以下、DBMSとする)が位置づけられていた。DBMSは、処理対象のデータをストレージに格納し、格納したデータに対してトランザクション処理に代表される高信頼な処理を実現している。これに対して、時々刻々と到着する大量のデータをリアルタイム処理するデータ処理システムに対する要求が高まっている。例えば、株取引を支援する金融アプリケーションを考えた場合、株価の変動にいかに迅速に反応できるかがシステムの最重要の課題の一つである。従来のDBMSのように株式のデータを一旦記憶装置に格納してから、該格納データに関して検索を行うようなシステムでは、データの格納とそれに続く検索処理が株価変動のスピードに追いつくことができず、ビジネスチャンスを逃してしまうことになりかねない。
【0003】
このようなリアルタイムデータ処理に好適なデータ処理システムとして、ストリームデータ処理システムが提案されている。例えば非特許文献1にストリームデータ処理システム“STREAM”が開示されている。
【0004】
ストリームデータ処理システムでは、従来のDBMSとは異なり、まずクエリ(問合せ)をシステムに登録し、データの到来と共に該クエリが継続的に実行される。ここでのストリームデータとは、映像ストリームのような論理的に継続する一つの大きなデータではなく、金融アプリケーションにおける株価配信データ、小売業での販売時点情報管理(以下、POSとする)データ、交通情報システムにおけるプローブカーデータ、計算機システム管理におけるエラーログ、センサやRFID(Radio Frequency Identification)などのユビキタスデバイスから発生するセンシングデータなど、比較的小さな論理的には独立した大量の時系列データである。
【0005】
ストリームデータは継続してシステムに到着し続けるため、その終わりを待ってから処理を開始するのでは実時間での処理は不可能である。また、システムに到着したデータは、データ処理の負荷に影響されることなく、その到着順を守って処理する必要がある。前述のSTREAMでは、システムに到来し続けるストリームデータを、最新10分間などの時間の幅、もしくは最新1000件などの個数の幅を指定してストリームデータの一部を切り取りながらリアルタイムの処理を実現するため、スライディングウィンドウ(以下単にウィンドウと呼ぶ)と呼ばれる概念を導入している。ウィンドウ指定を含むクエリの記述言語の好適な例としては、非特許文献4に開示されているCQL(Continuous Query Language)をあげることができる。CQLは、DBMSで広く用いられているSQL(Structured Query Language)のFROM句に、ストリーム名に続いて括弧を用いることにより、ウィンドウを指定する拡張が施されている。SQLに関しては、非特許文献2が詳しい。
【0006】
図14のクエリ1101は非特許文献1の2.1節に示されているCQLによるクエリの例である。該クエリでは、あるWebプロキシサーバにおいて、ドメインstanford.eduからの現時点から過去1日分のアクセスの総数を計算する。Requestsは前記Webプロキシサーバに到来し続けるWebアクセスデータであり、従来のDBMSで取り扱うテーブル(表)のような静止化されたデータではなく、切れ目のないストリームデータとなる。そのため、アクセスの総数を計算は、ウィンドウ指定“[Range 1 Day Preceding]”による、ストリームデータのどの部分を対象とするかの指定なしでは、不可能となる。ウィンドウによって切り取られたストリームデータはメモリ上に保持され、クエリ処理に使用される。
【0007】
代表的なウィンドウの指定方法には、ウィンドウの幅を時間で指定するRangeウィンドウ(以下、時間ウィンドウ)と、ウィンドウの幅をデータ数で指定するRowウィンドウ(以下、行ウィンドウ)がある。例えば、時間ウィンドウを用いて、[Range 10 minutes]とすると、最新の10分間分がクエリ処理の対象となり、行ウィンドウを用いて[Rows 10]とすると、最新の10件がクエリ処理の対象となる。
【0008】
そこで、非特許文献3では、メモリに載らないストリームデータを磁気ディスクに格納する方法が開示されている。
【0009】
一方、特許文献1では処理対象のデータ量が増大した際に、サンプリングにより一部のデータを捨てることにより、メモリ使用量を削減する方法を開示している。
【0010】
【非特許文献1】R. Motwani,J. Widom,A. Arasu,B. Babcock,S. Babu,M. Datar,G. Manku,C. Olston,J. Rosenstein and R. Varma著:“Query Processing、 Resource Management、 and Approximation in a Data Stream Management System”,In Proc. of the 2003 Conf. on Innovative Data Systems Research (CIDR),January 2003、
【非特許文献2】C. J. Date,Hugh Darwen著:“A Guide to SQL Standard (4th Edition)”,Addison−Wesley Professional; 4 edition (November 8、 1996),ISBN: 0201964260
【非特許文献3】Motwani他:“Caching Queues in Memory Buffers”、In Proc. of SODA 2004
【非特許文献4】A. Arasu,S. Babu and J. Widom著:“The CQL continuous query language: semantic foundations and query execution”, The VLDB Journal,Volume 15,Issue 2, pp. 121−142 (June 2006)
【特許文献1】米国公開特許US2007/0226239号
【特許文献2】特開2006−338432号公開公報
【発明の開示】
【発明が解決しようとする課題】
【0011】
しかしながら、非特許文献1や非特許文献2のストリームデータ処理システムは、前述した金融アプリケーションのみならず、カープローブ、Webおよび計算機システムのアクセス監視、通信監視、製造監視など、高レートで発生するデータをリアルタイムに解析する様々なアプリケーションへの適用が期待されている。このようなアプリケーションでは、大量のデータが短い時間内にバースト的に到来することがある。例えば、金融アプリケーションの代表的な例である株式の取引システムにおいては、取引開始時、取引終了間際に大量の売り買いの注文が発生する。前述の時間ウィンドウを用いる場合、時間ウィンドウで指定した時間の幅Tに含まれるストリームデータが処理の対象となる。幅T内に含まれるデータの数はシステムに到来するストリームデータに依存するために、例えば1時間以内に到来する売買要求の数を予測することが困難であるように、予めその大きさを見積もることが難しい。ストリームデータ処理では、高速処理の要求からウィンドウ上のデータをメモリ上に展開するため、時間ウィンドウを利用した場合のメモリ使用量の見積りが困難となる。また、ストリームデータがバースト的に到来した場合、メモリの確保が難しくなりシステムの安定性が損なわれるリスクがある。
【0012】
さらに、高い性能が要求される金融・通信応用などでは、非特許文献3のような磁気ディスクの利用ではレイテンシ(latency)などの性能要件を満たせないことがある。また、特許文献1の方法では全ての入力データを反映した正確な計算が必要で、サンプリングが許されない応用には適用が困難である。
【0013】
リアルタイムデータ処理を実現するストリームデータ処理システムで時間ウィンドウを含むクエリを処理する場合には、システムに到来するストリームデータの増加時にもメモリ使用量を一定に保つ必要がある。加えて、金融応用などいくつかのアプリケーションでは、全ての入力データを考慮した近似を含まない正確な計算を実行する必要がある。
【0014】
以上の要求から、時間ウィンドウを利用したクエリを処理する際に、ストリームデータがバースト的に到来する場合でも、メモリ使用量の上限を規定でき、かつ全てのデータを考慮した正確な計算を実行できる処理方法が必要となる。しかし、このようなストリームデータ処理方法はこれまで実現されていなかった。
【0015】
本発明の目的は、時間ウィンドウを含むクエリのメモリ使用量を一定に保ち、かつ全ての入力データを考慮した正確な計算処理を実現するストリーム処理方法、及びそのシステムを提供することにある。
【課題を解決するための手段】
【0016】
上記目的を達成するため、本発明においては、ストリームデータに対しクエリ処理を行うシステムにおけるストリームデータ処理方法であって、クエリが、ある時間間隔内にシステムに到来したストリームデータを処理対象とする時間ウィンドウを含む場合に、時間ウィンドウをより小さい幅のサブウィンドウに区切り、このサブウィンドウ内に含まれるストリームデータを集約した少なくとも一つの集約タプルを生成し、この集約タプルを用いてクエリの処理結果を計算するストリームデータ処理方法、及びそのシステムを提供する。
【0017】
また、上記目的を達成するため、ストリームデータに対しクエリ処理を行うシステムにおけるストリームデータ処理方法であって、クエリが、ある時間間隔内にシステムに到来したストリームデータを処理対象とする時間ウィンドウを含む場合に、この時間ウィンドウをより小さい幅のサブウィンドウに区切り、受け付けたストリームタプルが新しいサブウィンドウに区分けされる場合に、このサブウィンドウ内に集約タプルを生成し、集約タプルの生存期間の終了時刻を、受け付けたストリームタプルのタイムスタンプにクエリで指定された前記時間ウィンドウの幅を加えた時刻に設定し、受け付けたストリームタプルが既存のサブウィンドウに区分けされる場合に、当該ストリームタプルを用いて集約タプルを更新し、更新した集約タプルの生存期間終了時刻を、受け付けたストリームタプルのタイムスタンプにクエリで指定された時間ウィンドウの幅を加えた時刻に設定し、設定した生存期間終了時刻に、集約タプルを消去するためのフラグをつけたストリームタプルを生成し、これら集約タプルを用いてクエリの処理結果を計算するストリームデータ処理方法、及びそのシステムを提供する。
【発明の効果】
【0018】
本発明を用いることにより、時間ウィンドウを含むクエリを処理する際に、入力となるストリームデータが増加した場合でも、メモリ使用量の上限を一定に保つことができ、システム安定性確保、および運用管理の容易化に寄与する。
【発明を実施するための最良の形態】
【0019】
以下、図面に基づき本発明の種々の実施形態を説明する。
【0020】
本願で開示される発明のうち、代表的な発明の概要は以下の通りである。すなわち、代表的実施態様では時間ウィンドウをより小さい幅のサブウィンドウに区切り、ストリームデータ受付時に該サブウィンドウ単位の集計処理を実行して集約タプルを生成し、この時間ウィンドウを含むクエリの計算結果を、集約タプルに対する集計処理によって計算する。
【0021】
例えば、幅Tの時間ウィンドウに含まれる売上データの総計を計算することを考える。幅Tの時間内に、10件の売上があった場合には時間ウィンドウは10件分のデータのみを保持すればよいが、10000件の売上があった場合には10000件のデータを保持しなければならない。そこで、時間ウィンドウの幅Tに対して、サブウィンドウの幅をTS(TS≦T)に設定し、TS時間単位に売上データを集計した集約タプルを生成してオリジナルのデータは破棄していく。これにより、オリジナルのデータの数によらず、TS時間単位の集約タプルのみをメモリ上に保持すればよく、メモリ使用量を一定化することができる。幅T全体分の売上の総計を計算する際には、各TSの集約タプルの総和を計算することで、近似を用いない正確な計算結果を得ることができる。
【0022】
ストリームデータ処理のウィンドウを用いた処理では、個々のストリームタプルは生存期間を持つ。集約タプルの生存終了時刻は、サブウィンドウ内の集計値が最後に更新された時刻、すなわち集約タプルの最終更新時刻から時間ウィンドウの幅Tを経過した時刻に設定される。集約タプルの生存終了時刻には、生存終了を示す集約タプルのマイナスタプルを生成し、サブウィンドウの総和を計算時に該マイナスタプルを反映して全体の集計値を再計算する。
【実施例1】
【0023】
図1に、第一の実施例に係わる、ストリームデータ処理システム(以下、単にシステムと呼ぶ場合がある)の一構成を示す。アプリケーション1(102)を実行するクライアント計算機101、アプリケーション2(104)を実行するクライアント計算機103は、ネットワーク110を介してストリームデータ処理システムが稼動するストリームデータ処理サーバ111に接続されている。ネットワーク110は、イーサネット(登録商標)、光ファイバなどで接続されるローカルエリアネットワーク(LAN)、もしくはLANよりも低速なインターネットを含んだワイドエリアネットワーク(WAN)でも差し支えない。また、クライアント計算機101、103はパーソナルコンピュータ(PC)、ブレード型の計算機システムなどの任意のコンピュータシステムでよい。
【0024】
ストリームデータ処理サーバ111は、インタフェース部を構成する通信インタフェース145及びI/Oインタフェース114、処理部を構成する中央処理部(CPU)113、記憶部であるメモリ112が、バス116で結合された計算機であり、ブレード型計算機システム、PCサーバなどの任意のコンピュータシステム、データ処理装置でよい。ストリームデータ処理サーバ111では、通信インタフェース145を介してクライアント計算機101、103、及び後述するデータソースにアクセスする。
【0025】
ストリームデータ処理サーバ111で、ストリームデータ処理結果、処理の中間結果、システム動作に必要な設定データを不揮発性のストレージに格納する場合には、ストリームデータ処理サーバ111に接続した記憶部であるストレージ装置115を用いることができる。ストレージ装置115は、ストリームデータ処理サーバ111のI/Oインタフェース114を介して直接接続される、もしくは通信インタフェース115を介してネットワーク接続される。
【0026】
ストリームデータ処理システムは、ストリームデータ処理サーバ111の上で動作する。図1にストリームデータ処理システムの主要構成要素を示す。メモリ112内に図示された時間解像度変更方法指示テーブル131、クエリ保持テーブル132以外のブロックは、CPU113上で動作する機能を模式的に示している。アプリケーション1、2は、まずストリームデータ処理システムで処理の対象とするストリーム105を登録し、該ストリームをどのように処理するかを記述したクエリ106を登録する。登録されたクエリはクエリ時間解像度変更部130で解析される。クエリ時間解像度変更部130は時間解像度書換え方法指示テーブル131を参照して、必要に応じてクエリの時間解像度を変更し、クエリをクエリ保持テーブル132に登録する。
【0027】
図11を用いてクエリ保持テーブルの好適な構成例を説明する。クエリ保持テーブルは、クエリ名(1401)、クエリ文字列(1402)、クエリ実行形式のアドレス(1403)、時間解像度変更方法指示テーブルのエントリ(1404)を含む。図11のクエリQ1のエントリは、図2のクエリ指定に対して図3の時間解像度変更指定が与えられ、そのエントリが図4の#1に格納されている場合の例である。本実施例では、時間解像度指定を含むクエリの実行に必要なクエリ保持テーブルが保持すべき最低限の項目のみを示したが、他にも、クエリの登録者、クエリの登録日時、クエリの実行開始時刻、クエリの実行終了時刻、クエリの実行対象のストリームなどの項目を含んでも差し支えない。時間解像度変更処理を用いない場合のストリームデータ処理システムのクエリ登録の手順、ストリームデータ処理システム内部のデータの格納方法、格納形式、クエリを受け付けた後の解析方法、最適化方法、クエリの実行形式の作成方法、システムへの登録方法、ストリームデータ処理システムへのストリームの登録方法、システム内のデータ保持方法については、特開2006−338432号公報「ストリームデータ処理システムのクエリ処理方法」に、その好適な実施の方法が開示されている。本発明では、該方法で作成されるクエリ保持テーブルに対して、時間解像度変更方法指示テーブルのエントリが含まれている。本エントリは、図6のフローチャートのステップ607でクエリ時間解像度変更部によって挿入され、クエリ処理エンジン140に登録される。クエリ保持テーブル132は、ストリームデータ処理サーバ111のメモリ112に保持するのでも、ストリームデータ処理サーバ111に接続されているストレージ装置115に格納するのでも差し支えない。
【0028】
ストリームデータ処理システムには、一つ以上のストリームデータソースであるストリームデータソース1(117)〜ストリームデータソースN(118)からネットワーク119を介して時々刻々と大量のデータが到来する。このデータをストリームデータと呼ぶ。ストリームデータの好適な例としては、金融アプリケーションにおける株価配信情報、小売業でのPOSデータ、交通情報システムにおけるプローブカー情報、計算機システム管理におけるエラーログなどが挙げられる。ストリームデータ処理システムでは、通信インタフェース145を介してデータフローマネージャ134が受け付けたストリームデータを、タイムスタンプを付与したストリームタプルに変換して、後述するクエリ処理エンジン140上にロードされたクエリ実行形式にフィードする。さらに、本発明ではクエリ実行形式をクエリ処理エンジンにロードする際に、クエリ解像度変更部は時間解像度変更方法指示テーブルを参照し、ロードするクエリに対応するサブウィンドウ幅の設定をサブウィンドウ管理部に、そして集約タプル集計関数を時間解像度変更クエリ結果生成部144に設定する。
【0029】
前述したように、継続して到来する比較的小さな論理的には独立した大量の時系列データであるストリームデータを取り扱うために、ストリームデータ処理システムではウィンドウを用いる。メモリ上にロードされたクエリ実行形式のウィンドウ処理には、ウィンドウマネージャ141が適用される。図1のウィンドウマネージャ141は、到来するストリームデータに対して、クエリで指定されたウィンドウ演算を適用して、ストリームタプルのシステム内での生存期間を設定する。ストリームデータがウィンドウに挿入された時が生存期間の開始時刻、そしてウィンドウから該ストリームデータが削除される時が生存期間の終了時刻に相当する。本実施例の時間解像度変更クエリ処理では、ウィンドウマネージャ141が受け付けたストリームタプルは、サブウィンドウ管理部142でサブウィンドウ単位に集計され、集計結果である集約タプルはサブウィンドウ情報管理バッファ143に格納される。時刻解像度変更クエリ結果生成部144では、サブウィンドウ単位の集計値にさらに集計計算を施すことにより、与えられたクエリに対する処理結果を生成し、データ処理結果出力部133を介してアプリケーションに結果107を返信する。
【0030】
以下、上述したそれぞれの処理を具体的に説明する。最初に、クエリの登録処理について図6を用いて説明する。アプリケーションからクエリが与えられると、処理が開始され(ステップ601)、クエリ時間解像度変更部130は該クエリに対する時間解像度変更の方法が指定されているか否かをチェックする(602)。時間解像度変更の方法が指定されている場合(ステップ602でYesが選択された場合)、クエリ時間解像度変更部は指定された項目を時間解像度変更方法指示テーブル131に登録すると共にクエリの実行形式を生成してクエリ保持テーブル132に登録し(607)、クエリ登録処理を終了する(608)。本実施例では、処理対象のクエリは図2のクエリQ1(201)であり、図3の301が時間解像度の変更の指定である。クエリの処理内容、および時間解像度変更内容の詳細については、後述する。
【0031】
アプリケーションから与えられたクエリに対する時間解像度変更の方法が指定されていない場合(ステップ602でNoが選択された場合)には、クエリ時間解像度変更部は時間解像度変更が可能か否かをチェックする(605)。不可能と判定された場合(ステップ605でNoが選択された場合)には、クエリ登録処理を終了する。本フローチャートでは変更が不可能である場合、クエリを登録しないことになっているが、アプリケーションに警告を出すなどして、時間解像度を変更せずに、すなわちメモリの使用量を一定化せずにクエリを実行させることも可能である。時間解像度変更が可能な場合(ステップ605でYesが選択された場合)、クエリ時間解像度変更部は時間解像度変更に必要な項目であるサブウィンドウの幅、解像度変更対象の入力ストリーム、集計対象、カラムを決定して(606)、これらの情報を時間解像度変更方法指示テーブル131に登録すると共にクエリの実行形式を生成してそのメモリ上のアドレスをクエリ保持テーブル132に登録し(607)する。最後に、クエリ時間解像度変更部は、前記クエリ実行形式をクエリ処理エンジン140に登録すると共に、該クエリに指定されたサブウィンドウ幅をサブウィンドウ管理部143に設定し、集約タプル集計関数を時間解像度変更クエリ結果生成部144に設定して(609)、クエリ登録処理を終了する。ステップ605の判定ステップは後述するが、該判定ステップ中で時間ウィンドウが設定されているウィンドウに対する最初の処理を集計処理に設定可能と判定された場合には、前記クエリの実行形式の生成の際に時間ウィンドウが設定されているストリームに対する最初の処理を集計処理に設定する。
【0032】
サブウィンドウの幅については、その幅を小さく取るとクエリ処理で保持すべき集約タプル数が増加するため、メモリ使用量が増加する。サブウィンドウ幅の決定方法としては、例えばサブウィンドウの数と、各サブウィンドウ中に保持される集計値の数の積を計算し、該計算値とそれぞれの集計値で利用するメモリ量の積を計算し、該計算値が利用可能なメモリ量に収まるようにサブウィンドウ幅を決定する方法が考えられる。
【0033】
時間解像度変更が可能か否かの判定方法について、図7を用いて説明する。まずクエリの出力結果が集計関数、および集計関数の引数のカラムで構成されているか否かをチェックする(702)。集計関数の引数以外のカラムを含む場合(ステップ702でNoが選択された場合)、時間解像度変更は不可能と判定し(704)、判定処理を終了する(710)。クエリの出力結果が集計関数、および集計関数の引数のカラムで構成されている場合(ステップ702でYesが選択された場合)、入力ストリームの数をチェックする(703)。入力ストリームが1つのみの場合、時間解像度変更可能と判定し(706)、判定処理を終了する(710)。
【0034】
入力ストリームが複数存在する場合、時間ウィンドウが設定されているウィンドウに対する最初の処理を集計処理に設定可能か否かをチェックする(705)。例えば、該ストリームに対する最初の処理がジョインであり、それに続いてグルーピングおよび集計処理が実行される実行プランを、グルーピングおよび集計処理を先に実行し、その後にジョイン処理を実行する実行プランに変換可能か否かをチェックする。該変換が可能か否かの判定方法、および変換方法は、S. Chaudhuri and K. Shim著:“Including Group−By in Query Optimization”, In Proc. of 20th VLDB, pp. 354−366, 1994の3節に開示されている。時間ウィンドウが設定されているウィンドウに対する最初の処理を集計処理に設定不可能な場合、(ステップ705でNoが選択される場合)、時間解像度変更不可能と判定して(704)、判定処理を終了する(710)。設定可能の場合(ステップ705でYesが選択された場合)、時間解像度変更が可能と判定して(706)、判定処理を終了する(710)。以上で、クエリの登録方法の説明を終了し、以降は登録されたクエリの時間解像度変更処理方法について説明する。
【0035】
図2に示したQ1は株式売買(stock)ストリームの最新1分間分を処理対象として銘柄名(brand)毎の売上高を計算し、計算結果を30秒毎に出力するクエリである。このQ1の場合、集計グループは銘柄名(brand)毎となる。時間解像度を変更せずにQ1を処理する場合には、1分間に大量の売買情報がストリームデータとして到来すると、時間ウィンドウにそれらの個別のデータを保持する必要があり、システムのメモリ使用量が増大する。そこで、Q1の株式売買ストリームを対象として、1分間の時間ウィンドウを30秒毎のサブウィンドウに区切ってサブウィンドウの集計値を計算し、該集計値の更なる集計(再度集計処理)によってクエリQ1の計算結果を求める方法を以下で説明する。
【0036】
ユーザ、もしくはアプリケーション(以下、単にアプリケーションとする)が該計算方法をシステムに対して指定する好適な時間解像度変更指示方法を図3の301に示す。301ではクエリQ1のストリームstockを対象として、時間解像度を30000msすなわち30秒に設定し、売上高SUM(price)を計算することを表している。
【0037】
図13を用いてシステムに時間解像度変更指示が入力された場合の登録処理方法を説明する。時間解像度変更指示が入力され、処理が開始すると(1301)、システムは該指示内容をチェックする(1302)。解像度変更対象のクエリ、ストリーム、カラム、集計関数がシステム中に存在しない場合(ステップ1303でNoが選択された場合)、登録エラーを出力し(1309)登録処理を終了する(1310)。解像度変更対象のクエリ、ストリーム、カラム、集計関数が存在する場合(ステップ1303でYesが選択された場合)、サブウィンドウの幅指定と時間解像度変更対象のクエリの時間ウィンドウの幅の関係をチェックする(1311)。サブウィンドウの幅指定が時間ウィンドウの幅よりも小さい場合(ステップ1311でYesが選択された場合)には、次のステップに進む。サブウィンドウの幅指定が時間ウィンドウ幅よりも大きい場合(ステップ1311でNoが選択された場合)には、サブウィンドウ幅指定を時間ウィンドウ幅にセットして(1312)、次のステップに進む。
【0038】
次に、サブウィンドウの幅指定がシステムの規定範囲内に収まっているか否かをチェックする(1304)。システムにおけるサブウィンドウの幅の規定範囲の最小値、最大値をそれぞれTMIN、TMAXとする。TMIN、TMAXは、システムが稼動しているハードウェア、オペレーティングシステム、システムが使用可能なリソース量を考慮して、システム設計者もしくはシステム管理者により決定される。例えば、オペレーティングシステムでの最小時間解像度がTOSMINの場合、サブウィンドウの幅はTOSMINよりは小さくできないためTMIN≧TOSMINである。時間解像度変更指示の幅指定TDISがシステムの規定範囲内におさまっている場合、すなわちTMIN≦TDIS≦TMAXの場合(ステップ1304でYesが選択された場合)には、指示内容を時間解像度変更方法指示テーブルに登録し(1308)、時間解像度変更指示登録処理を終了する(1310)。サブウィンドウの幅指定がシステムの規定範囲内に収まっていない場合、すなわちTDIS<TMIN、もしくはTDIS>TMAXの場合(ステップ1304でNoが選択された場合)、システムの時間解像度変更指示モードをチェックする。指示内容チェックモードがstrictの場合(ステップ1305でYesが選択された場合)、登録エラーを出力し(1309)登録処理を終了する(1310)。指示内容チェックモードがstrictでない場合(ステップ1305でNoが選択された場合)、クエリ時間解像度変更部(130)から警告を出力し(1306)、サブウィンドウ幅の指定が規定範囲の最小値より小さい場合(TDIS<TMINの場合)は幅を規定値の最小値に(TDIS=TMINに)、サブウィンドウの幅の指定が規定範囲の最大値より大きい場合(TDIS>TMAXの場合)は幅を規定値の最大値に(TDIS=TMAXに)セットし(1307)、指示内容を時間解像度変更方法指示テーブルに登録し(1308)、時間解像度変更指示登録処理を終了する(1310)。
【0039】
本実施例では、ステップ1305で指示内容チェックモードを参照している。指示内容チェックモードは、システム全体を対象として設定する方法でも、またクエリ単位で設定する方法でも差し支えない。またその格納場所は、クエリ保持テーブル132でも、システム接続されたストレージ装置115でも差し支えない。さらに、指示内容チェックモードの指定自体をシステムの規定値として、すなわちシステム構築時にチェックモードをstrictとするか否かを定め、実行時にはステップ1305のチェックを行わない実現方法も可能である。
【0040】
以上の登録結果は、例えば図4に示す形式で時間解像度変更方法指定テーブル131としてシステム中に管理される。時間解像度指示テーブル131は、各登録毎に、番号401、クエリ名402、入力ストリーム名403、サブウィンドウ幅404、対象集計関数405、対象カラム名406が管理される。
【0041】
クエリと時間解像度変更方法が指定された後、システムストリームデータが到来した際の処理シーケンスを、図5を用いて説明する。ストリームデータソース117はストリームデータを生成する。生成されたストリームデータ(501)は、ネットワーク116、通信インタフェース145を介して、システムのデータフローマネージャ134によって受け付けられる(502)。ストリームデータを受け付けたデータフローマネージャ134は、ストリームデータからタイムスタンプを保持するストリームタプルを生成し(503)、クエリ処理エンジン140に送信する。データフローマネージャ134は、ストリームデータがシステムに到着した時刻をタイムスタンプとして用いるサーバタイムスタンプモード、およびストリームデータに付与されている時刻情報をタイムスタンプとして用いるアプリケーションタイムスタンプモードのいずれかのモードでの動作が可能である。
【0042】
クエリ処理エンジン140のウィンドウマネージャ141がストリームタプルを受け取ると、ウィンドウマネージャ141内のサブウィンドウ管理部142は、サブウィンドウ単位の集計値を計算し、サブウィンドウ情報管理バッファ143に該集計値を追加、更新し(504)する。さらに、サブウィンドウ管理部142は、前記追加、更新に伴う新しい集計値に関する差分情報(プラスの符号付ストリームタプル)を生成し(505)、時間解像度変更クエリ結果生成部144に送信する。また、サブウィンドウ管理部142は、集約タプルの生存期間が終了する際には、該集約タプルをサブウィンドウ情報管理バッファ143から削除し、該削除に伴う差分情報(マイナスの符号付ストリームタプル)を生成し、時間解像度変更クエリ結果生成部144に送信する。時間解像度変更クエリ結果生成部144は、前記差分情報からクエリの計算結果を生成し(506)、データ処理結果出力部133に送信する。そしてデータ処理結果出力部133ではクエリで指定されたデータ出力方法に従ってクエリ処理結果をアプリケーションに送信する(507)。クエリでのデータ出力指定方法については後述する。
【0043】
以上説明した本実施例の一連の処理シーケンス中で、時間解像度変更の特徴的な処理はウィンドウマネージャ141内の処理であるので、図9を用いて前述のQ1に対して株式売買(stock)ストリームデータが到来した場合の処理を具体的に説明する。図9は時間経過に伴って、ウィンドウマネージャ141内でストリームタプルがどのように処理されていくかを示すシーケンス図である。時間は図の左側の矢印931で示すように図の上から下側に進行する。図の縦線932、933はそれぞれ、サブウィンドウ管理部142、および時間解像度変更クエリ結果生成部144での処理を示しており、901、902、903、934、943はそれぞれ、ウィンドウマネージャ141に送信されるストリームタプル、サブウィンドウ情報管理バッファ143で管理される集約タプル、ウィンドウマネージャ141で生成される差分情報、時間解像度変更クエリ結果生成部144で保持される集計結果、最終的にアプリケーションに返されるクエリ処理結果の凡例を表している。
【0044】
901に示されているように、stockストリームは銘柄(brand)と売買価格(price)を構成要素として保持し、ウィンドウマネージャに送付されるストリームタプルはbrand、priceとタイムスタンプ(time)を含んでいる。クエリQ1(201)は1分間の時間ウィンドウを持つ。Q1に図3で示される時間解像度変更指定(301)を適用した場合のクエリ処理方法を説明する。クエリ処理の開始時刻は10:01:00と仮定する。時刻10:01:00にストリームタプル{a,100;10:01:00}が到来する(904)。該ストリームタプルを受け付けたウィンドウマネージャは、サブウィンドウ管理部に集約タプル905を作成する。本実施例では、集約タプルにクエリの最終結果計算に必要なカラム(今回の場合、brandカラムとSUM(price)カラム)に加えて、集約タプルの生存期間終了時刻(exprire time)、時間解像度のサブウィンドウの区切りを識別するための情報(シーケンス番号:seq.#)が追加されている。集約タプルの生存終了時刻は、該集約タプルが生成された時刻(生存開始時刻)に、クエリの時間ウィンドウで指定された時間幅を加えることによって計算される。本実施例のクエリQ1では、時間ウィンドウの幅は1分であるので、集約タプルの生成時刻10:01:00の1分後の10:02:00が生存期間終了時刻として設定される。サブウィンドウの区切りを識別するための情報の管理方法は、本実施例のようにデータと同じレコードに含めても、もしくはデータから紐付けが可能な別データとして管理するのでも差し支えない。作成された集約タプル905はサブウィンドウ情報管理バッファ143に登録される。次に、ウィンドウマネージャは本集約タプルの作成に伴う集計値の変化を差分情報として出力する。差分情報の表現方法は各種のバリエーションが考えられるが、本実施例では符号付きのストリームタプルで表現する。集約タプル905の場合は、新規に集約タプルが生成されたので、差分情報としてはプラスの符号付きストリームタプル906が生成され、時間解像度変更クエリ結果生成部144に送信される。時間解像度変更クエリ結果生成部では、サブウィンドウ単位の集約タプルの差分情報を受け取り、クエリ全体での計算結果を生成する。差分情報としてはプラスの符号付きストリームタプル906を受け取った時には、それ以前の集計値は存在しないので、クエリ全体の集計値としてストリームタプル935を生成する。
【0045】
クエリQ1ではRSTREAM [30 SECOND]句指定により、クエリの計算結果はアプリケーションに30秒間隔で送信する指示がなされている。非特許文献5の6.3節には、ストリームデータ処理システムからの好適なストリームデータ出力方法が開示されている。一つ目はストリームシステム内の前回出力時からの増加分を出力するISTREAM句、二つ目はストリームシステム内の前回出力時からの減少分を出力するDSTREAM句、そして三つ目がその時点でのストリームシステム内の出力対象全体を出力するRSTREAM句である。本実施例では、RSTREAM句が指定された場合について説明するが、ISTREAM句、DSTREAM句が指定された場合にも本発明の適用は可能である。なお、RSTREAM句は非特許文献5では出力間隔の指定方法が示されていないが、本実施例ではRSTREAM句を拡張し、出力間隔の指定を可能としている。
【0046】
Q1の処理では、最初の出力として10:01:00にクエリ処理結果{a,100}が出力される(907)。続いて、時刻10:01:01にストリームタプル908が到来する。先に述べたとおり、本実施例では時間解像度は30秒に設定されているため、本ストリームタプルは先に処理されたストリームタプル904と同じサブウィンドウに区分される。そのため、ストリームタプルを受け付けたサブウィンドウ管理部142では、ストリームタプル904を追加した際に生成したシーケンス番号10281のエントリを更新して集約タプル909を作成する。更新処理では、集計値に加えて、その生存終了時刻の更新処理も実施される。この場合、入力となるストリームタプルのタイムスタンプが10:01:01であるので、該時刻にクエリの時間ウィンドウの幅1分間を加えた10:02:01に生存終了時刻が更新される。そしてこの更新に伴う差分情報として、更新前の値150を保持するプラスの符号を持つストリームタプル、および更新後の値100を保持するマイナスの符号を持つストリームタプル910を生成し、時間解像度変更クエリ結果生成部144に送信する。時間解像度変更クエリ結果生成部144では、該差分情報を用いてクエリ処理結果936を生成する。前述したように、Q1ではアプリケーションからのクエリ処理結果出力指定がRSTREAM句により30秒毎のため、このタイミングではアプリケーションには結果は出力されない。時刻10:01:11にストリームタプル911が到来した際にも、全く同様の更新処理が実行され、時間解像度変更クエリ結果生成部にクエリ処理結果のストリームタプル937が生成される。そして、時刻10:01:30のアプリケーションから指定された結果出力タイミングで、この時点のクエリ処理結果である{a,220}がアプリケーションに送信される。
【0047】
次に時刻10:01:59にストリームタプル915が到来する。本実施例の時間解像度は30秒であり、最初のサブウィンドウの区切りは10:01:00であるため、ストリームタプル915は、これまでに到来した三つのストリームタプル904、908、911とは異なるサブウィンドウに区分けされる。そのため、サブウィンドウ管理部142では、ストリームタプル915に対応する新たなシーケンス番号を持つ新しい集約タプルのエントリを作成し、サブウィンドウ情報管理バッファ143に格納する(916)。同時に、新しい集約タプル生成に伴う差分情報として、プラスの符号を持つストリームタプル917を生成し、時間解像度変更クエリ結果生成部144に送信する。時間解像度変更クエリ結果生成部144では、受け取った差分情報を利用して集計結果を更新する(938)。
【0048】
時刻10:02:00では、時刻10:01:30の時と同様に、この時点のクエリ処理結果である{a,340}がアプリケーションに送信される(918)。次に時刻10:02:05に新しいストリームタプル919が到来すると、該タプルはその前に到来したストリームタプル915とはサブウィンドウの区分けが異なるため、サブウィンドウ情報管理バッファ143に新たな集約タプルのエントリ920が生成され、該集約タプルの生成に伴う差分情報921が生成され、時間解像度変更クエリ結果生成部144でクエリ処理結果が更新される(939)。
【0049】
時刻10:02:11には、シーケンス番号が10281の集約タプルの生存期間が終了する。そこで、サブウィンドウ管理部142では、サブウィンドウ情報管理バッファ143からシーケンス番号10281の集約タプルのエントリを削除する(922)とともに、該削除処理に伴う差分情報を時間解像度変更クエリ結果生成部144に送信する(923)。時間解像度変更クエリ結果生成部144では、該差分情報を利用して、集計値を更新する(940)。以下、ストリームタプル924、927が到来した際にも同様の処理が行われ、10:02:30にクエリ処理結果{a,480}がアプリケーションに送信される(930)。
【0050】
本実施例では簡単のために、株式銘柄名(brand)が一種類の場合の処理シーケンスを示したが、複数の株式銘柄が存在する場合には、株式銘柄毎にサブウィンドウで集約タプルを管理することで同様の処理が可能である。すなわち、集約の単位を、クエリQ1で指定された集計グループである銘柄名(brand)毎とすることができる。
【0051】
以上の処理をまとめたフローチャートを図8に示す。最初に、サブウィンドウ情報管理バッファ143内にその生存期間終了時刻が現時刻以前の集約タプルのエントリが存在するか否かをチェックする(802)。存在しない場合(ステップ802でNoが選択された場合)には、次のステップに進む。これは図9に示した例では、時刻10:02:11以外の場合に相当する。存在する場合(ステップ802でYesが選択された場合)には、該エントリをサブウィンドウ情報管理バッファ143から削除し(804)、該エントリに対応する差分情報(マイナス符号付きのストリームタプル)をウィンドウマネージャから出力する(803)。本処理は、図9で示した例では時刻10:02:11のシーケンス番号10281の集約タプルエントリの削除処理に相当する。
【0052】
次に、ストリームタプルを受け取った時の処理を説明する。今説明の便宜上、受け取ったストリームタプルをtとする。ウィンドウマネージャ141がタイムスタンプ付きのストリームタプルtを受け取る(805)と、サブウィンドウ管理部142はtのタイムスタンプがサブウィンドウ情報管理バッファ143内の最新のシーケンス番号の時刻区切りを越えたか否かをチェックする(806)。超えない場合(ステップ806でNoが選択された場合)には、ストリームタプルtを用いて最新のシーケンス番号をもつ集約タプルを更新し(808)、更新した集約タプルの生存期間終了時刻を“tのタイムスタンプ+時間ウィンドウの幅”に設定し(809)、本更新処理に伴う差分情報をウィンドウマネージャ141から出力する(810)。本処理は図9の例では、ストリームタプル908、911、924、927の到来時の処理に相当する。
【0053】
tのタイムスタンプがサブウィンドウ情報管理バッファ143内の最新のシーケンス番号の時刻区切りを越える場合(ステップ806でYesが選択される場合)には、サブウィンドウ管理部142は新しいシーケンス番号を生成し(811)、サブウィンドウ情報管理バッファ143内に、該シーケンス番号を持つ新たな集約タプルのエントリを作成して該エントリにストリームタプルtを格納し(812)、作成した集約タプルの生存期間終了時刻を“tのタイムスタンプ+時間ウィンドウの幅”に設定し(813)、該集約タプル作成に伴う差分情報をウィンドウマネージャから出力する(814)。本処理は図9の例では、ストリームタプル915、919の到来時の処理に相当する。
【0054】
時間解像度変更クエリ結果生成部144では、ウィンドウマネージャ141から出力されたサブウィンドウ単位の集約タプルに関する差分情報を再度集計し、クエリ処理結果を生成する(815)。本再集計処理では、クエリで指定された集計、サブウィンドウ単位の集計(集約タプルの生成方法)、時間解像度変更クエリ結果生成部144の集計処理の組合せの好適な実施例を図12の表1201に示す。本処理は図9の例では、縦線933上のストリームタプル計算に相当する。本実施例の場合、クエリで指定された集計はSUM(総和)であるので、図12の表1201に示すとおり、サブウィンドウ管理部142では到来するストリームタプルのSUMをサブウィンドウ単位に計算し、時間解像度変更クエリ結果生成部でもウィンドウマネージャ141から出力された差分情報のSUMを計算している。図8に戻って、時間解像度変更クエリ結果生成部で生成したクエリ処理結果は、クエリで指定されたタイミングでアプリケーションに出力される(816)。本処理は図9の例では907、914、918、930の出力処理に相当する。
【0055】
以上説明した実施例では、図8および図9を用いて対象となるクエリとしてQ1のSUM(総和)を計算する場合のみを説明したが、図10に示した、MAX(最大値)を含んだクエリQ2(1001)、MIN(最小値)を含んだクエリQ3(1002)、COUNT(件数)を含んだクエリQ4(1003)、AVERAGE(平均値)を含んだクエリQ5(1004)についても本発明は適用が可能である。
【0056】
図12の表1201を用いて具体的な計算方法を説明する。図12では、i番目のサブウィンドウの集約タプルをTAiと表している(#5の場合のみ二種類の集約タプルを用いるため、TAi_1、TAi_2と表す)。この時、Q2については図12の#2に示すように、サブウィンドウ管理部142においてサブウィンドウ単位のMAX(最大値)を計算した集約タプルを生成した後、時間解像度変更クエリ結果生成部144において集約タプル間のMAX(最大値)を計算すればよい。
【0057】
同様に、Q3については図12の#3に示すように、サブウィンドウ単位のMIN(最小値)を計算した集約タプルを生成した後、集約タプル間のMIN(最小値)を計算すればよい。Q4については図12の#4に示すように、サブウィンドウ単位のCOUNT(件数)を計算した集約タプルを生成した後、該集約タプルのSUM(総和)を計算すればよい。SUM、MIN、MAXの場合は、集約タプルを計算する演算と集約タプルから最終的なクエリの処理結果を生成する際に同種の演算を用いたが、Q4のCOUNT(件数)の場合にはサブウィンドウ単位の集約タプルのCOUNTを計算してもサブウィンドウの数が計算されるだけであるので、注意が必要である。
最後に、Q5については図12の#5に示すように、集約タプルの全体の総和を集約タプル全体の件数で割ることによって計算すればよい。さらに、これらの基本集計演算を組み合わせたより複雑な集計値、統計値の計算についても、基本集計演算の計算結果を生成した後その計算結果を組み合わせることにより、本願のストリームデータ処理方法の適用が可能である。
【0058】
また、上述の実施例では図3で時間解像度指定の方法として、時間解像度変更の対象となるクエリ名、入力ストリーム名、サブウィンドウ幅、集計関数、カラム名を全て指定するインタフェースを示したが、システムへの初期設定等により、アプリケーションからの個別指定なしに、図12に示した変換により時間解像度変更が可能な全ての集計関数に対して時間解像度変更処理を実行することも可能である。この場合には、アプリケーションからの対象集計関数の指定は省略することができる。
【0059】
さらに、上述した実施例ではクエリがCQLの形式で与えられることを想定したが、手続き型言語、GUIなどの他の手段で与えられる場合にも本願発明のストリームデータ処理方法は適用が可能である。
【図面の簡単な説明】
【0060】
【図1】第一の実施例に係わるストリームデータ処理システムの構成を示す図である。
【図2】第一の実施例に係わる、時間解像度変更対象のクエリの一例を示す図である。
【図3】第一の実施例に係わる、クエリ時間解像度変更指定の一例を示す図である。
【図4】第一の実施例に係わる、クエリ時間解像度変更指定内容の格納例を示す図である。
【図5】第一の実施例に係わる、クエリ時間解像度変更処理のシーケンスを示す図である。
【図6】第一の実施例に係わる、クエリ登録処理のフローチャートを示す図である。
【図7】第一の実施例に係わる、時間解像度変更書換え可能性チェックおよび書換え処理のフローチャートを示す図である。
【図8】第一の実施例に係わる、クエリ時間解像度変更処理のフローチャートを示す図である。
【図9】第一の実施例に係わる、クエリ時間解像度変更処理の具体例を示す図である。
【図10】各実施例に係わる、時間解像度変更が可能なクエリの例を示す図である。
【図11】第一の実施例に係わる、クエリの格納例を示す図である。
【図12】各実施例に係わる、集計処理実現方法を示す表を示す図である。
【図13】第一の実施例に係わる、クエリ時間解像度変更指示登録処理のフローチャートを示す図である。
【図14】クエリ処理言語CQLによるクエリ記述例を示す図である。
【符号の説明】
【0061】
101、103…クライアント計算機
102、104…アプリケーション
111…ストリームデータ処理サーバ
110、119…ネットワーク
112…メモリ
130…クエリ時間解像度変更部
131…時間解像度変更方法指示テーブル
132…クエリ保持テーブル
133…データ処理結果出力部
134…データフローマネージャ
140…クエリ処理エンジン
141…ウィンドウマネージャ
142…サブウィンドウ管理部
143…サブウィンドウ情報管理バッファ
144…時間解像度変更クエリ結果生成部
116…バス
113…CPU
114…I/Oインタフェース
145…通信インタフェース
115…ストレージ
117、118…ストリームデータソース
904、908、911、915、919、924、927…ストリームタプル
905、909、912、916、920、922、925、928…集約タプル
906、910、913、917、921、923、926、929…符号付ストリームタプル。
【特許請求の範囲】
【請求項1】
ストリームデータに対しクエリ処理を行うシステムにおけるストリームデータ処理方法であって、
前記クエリが、ある時間間隔内に前記システムに到来した前記ストリームデータを処理対象とする時間ウィンドウを含む場合に、前記時間ウィンドウをより小さい幅のサブウィンドウに区切り、
前記サブウィンドウ内に含まれる前記ストリームデータを集約した少なくとも一つの集約タプルを生成し、
前記集約タプルを用いて前記クエリの処理結果を計算する、ことを特徴とするストリームデータ処理方法。
【請求項2】
前記集約タプルの集約単位が、前記クエリで指定された集計グループごとであることを特徴とする請求項1記載のストリームデータ処理方法。
【請求項3】
前記集約タプルに対して再度集計処理を実行して、前記クエリの処理結果を計算することを特徴とする請求項1記載のストリームデータ処理方法。
【請求項4】
ストリームデータに対しクエリ処理を行うシステムにおけるストリームデータ処理方法であって、
前記クエリが、ある時間間隔内に前記システムに到来した前記ストリームデータを処理対象とする時間ウィンドウを含む場合に、前記時間ウィンドウをより小さい幅のサブウィンドウに区切り、
受け付けたストリームタプルが新しい前記サブウィンドウに区分けされる場合に、前記サブウィンドウ内に集約タプルを生成し、前記集約タプルの生存期間の終了時刻を、受け付けた前記ストリームタプルのタイムスタンプに前記クエリで指定された前記時間ウィンドウの幅を加えた時刻に設定し、
受け付けたストリームタプルが既存の前記サブウィンドウに区分けされる場合に、当該ストリームタプルを用いて前記集約タプルを更新し、更新した前記集約タプルの生存期間終了時刻を、受け付けた前記ストリームタプルのタイムスタンプに前記クエリで指定された前記時間ウィンドウの幅を加えた時刻に設定し、
設定した前記生存期間終了時刻に、前記集約タプルを消去するためのフラグをつけたストリームタプルを生成し、
前記集約タプルを用いて前記クエリの処理結果を計算する、ことを特徴とするストリームデータ処理方法。
【請求項5】
前記集約の単位が前記クエリで指定された集計グループごとであることを特徴とする請求項4記載のストリームデータ処理方法。
【請求項6】
前記集約タプルに対して再度集計処理を実行して、前記クエリの処理結果を計算することを特徴とする請求項4記載のストリームデータ処理方法。
【請求項7】
ストリームデータに対しクエリ処理を行うストリームデータ処理システムであって、
前記ストリームデータが入力されるネットワークインタフェース部と、前記ストリームデータに対するクエリ処理する処理部と、前記クエリを保持する記憶部とを備え、
前記処理部は、前記クエリが、ある時間間隔内に前記システムに到来した前記ストリームデータを処理対象とする時間ウィンドウを含む場合に、前記時間ウィンドウをより小さい幅のサブウィンドウに区切り、前記サブウィンドウ内に含まれる前記ストリームデータを集約した少なくとも一つの集約タプルを生成し、前記クエリの処理結果を前記集約タプルを用いて計算する、
ことを特徴とするストリームデータ処理システム。
【請求項8】
前記処理部における前記集約の単位が前記クエリで指定された集計グループごとであることを特徴とする請求項7記載のストリームデータ処理システム。
【請求項9】
前記処理部は、前記サブウィンドウ内の集約結果である前記集約タプルに対して再度集計処理を実行して、前記クエリ処理結果を計算することを特徴とする請求項7記載のストリームデータ処理システム。
【請求項10】
前記処理部は、受け付けたストリームタプルが新しい前記サブウィンドウに区分けされる場合に、前記サブウィンドウ内に前記集約タプルを生成し、該集約タプルの生存期間の終了時刻を、受け付けた前記ストリームタプルのタイムスタンプに前記クエリで指定された時間ウィンドウの幅を加えた時刻に設定し、
受け付けたストリームタプルが既存の前記サブウィンドウに区分けされる場合に、該ストリームタプルを用いて前記集約タプルを更新し、更新した前記集約タプルの生存期間終了時刻を、受け付けた前記ストリームタプルのタイムスタンプに前記クエリで指定された時間ウィンドウの幅を加えた時刻に設定し、
設定した前記生存期間終了時刻に、前記集約タプルを消去するためのフラグをつけたストリームタプルを生成することを特徴とする請求項7記載のストリームデータ処理システム。
【請求項11】
前記処理部は、前記クエリの登録処理開始時に、前記時間ウィンドウを前記サブウィンドウに区切ることが可能か否かを判定する時間解像度変更可能性判定を実行することを特徴とする請求項7記載のストリームデータ処理システム。
【請求項12】
前記処理部は、前記時間解像度変更可能性判定を、前記クエリ処理結果が集計関数で構成されているか否かで判定することを特徴とする請求項11記載のストリームデータ処理システム。
【請求項13】
前記集計関数は、総和、最大値、最小値、件数、平均のいずれかであることを特徴とする請求項12記載のストリームデータ処理システム。
【請求項14】
前記処理部における前記集約の単位が前記クエリで指定された集計グループごとであることを特徴とする請求項10記載のストリームデータ処理システム。
【請求項15】
前記処理部は、前記サブウィンドウ内の集約結果である前記集約タプルに対して再度集計処理を実行して、前記クエリの処理結果を計算することを特徴とする請求項10記載のストリームデータ処理システム。
【請求項1】
ストリームデータに対しクエリ処理を行うシステムにおけるストリームデータ処理方法であって、
前記クエリが、ある時間間隔内に前記システムに到来した前記ストリームデータを処理対象とする時間ウィンドウを含む場合に、前記時間ウィンドウをより小さい幅のサブウィンドウに区切り、
前記サブウィンドウ内に含まれる前記ストリームデータを集約した少なくとも一つの集約タプルを生成し、
前記集約タプルを用いて前記クエリの処理結果を計算する、ことを特徴とするストリームデータ処理方法。
【請求項2】
前記集約タプルの集約単位が、前記クエリで指定された集計グループごとであることを特徴とする請求項1記載のストリームデータ処理方法。
【請求項3】
前記集約タプルに対して再度集計処理を実行して、前記クエリの処理結果を計算することを特徴とする請求項1記載のストリームデータ処理方法。
【請求項4】
ストリームデータに対しクエリ処理を行うシステムにおけるストリームデータ処理方法であって、
前記クエリが、ある時間間隔内に前記システムに到来した前記ストリームデータを処理対象とする時間ウィンドウを含む場合に、前記時間ウィンドウをより小さい幅のサブウィンドウに区切り、
受け付けたストリームタプルが新しい前記サブウィンドウに区分けされる場合に、前記サブウィンドウ内に集約タプルを生成し、前記集約タプルの生存期間の終了時刻を、受け付けた前記ストリームタプルのタイムスタンプに前記クエリで指定された前記時間ウィンドウの幅を加えた時刻に設定し、
受け付けたストリームタプルが既存の前記サブウィンドウに区分けされる場合に、当該ストリームタプルを用いて前記集約タプルを更新し、更新した前記集約タプルの生存期間終了時刻を、受け付けた前記ストリームタプルのタイムスタンプに前記クエリで指定された前記時間ウィンドウの幅を加えた時刻に設定し、
設定した前記生存期間終了時刻に、前記集約タプルを消去するためのフラグをつけたストリームタプルを生成し、
前記集約タプルを用いて前記クエリの処理結果を計算する、ことを特徴とするストリームデータ処理方法。
【請求項5】
前記集約の単位が前記クエリで指定された集計グループごとであることを特徴とする請求項4記載のストリームデータ処理方法。
【請求項6】
前記集約タプルに対して再度集計処理を実行して、前記クエリの処理結果を計算することを特徴とする請求項4記載のストリームデータ処理方法。
【請求項7】
ストリームデータに対しクエリ処理を行うストリームデータ処理システムであって、
前記ストリームデータが入力されるネットワークインタフェース部と、前記ストリームデータに対するクエリ処理する処理部と、前記クエリを保持する記憶部とを備え、
前記処理部は、前記クエリが、ある時間間隔内に前記システムに到来した前記ストリームデータを処理対象とする時間ウィンドウを含む場合に、前記時間ウィンドウをより小さい幅のサブウィンドウに区切り、前記サブウィンドウ内に含まれる前記ストリームデータを集約した少なくとも一つの集約タプルを生成し、前記クエリの処理結果を前記集約タプルを用いて計算する、
ことを特徴とするストリームデータ処理システム。
【請求項8】
前記処理部における前記集約の単位が前記クエリで指定された集計グループごとであることを特徴とする請求項7記載のストリームデータ処理システム。
【請求項9】
前記処理部は、前記サブウィンドウ内の集約結果である前記集約タプルに対して再度集計処理を実行して、前記クエリ処理結果を計算することを特徴とする請求項7記載のストリームデータ処理システム。
【請求項10】
前記処理部は、受け付けたストリームタプルが新しい前記サブウィンドウに区分けされる場合に、前記サブウィンドウ内に前記集約タプルを生成し、該集約タプルの生存期間の終了時刻を、受け付けた前記ストリームタプルのタイムスタンプに前記クエリで指定された時間ウィンドウの幅を加えた時刻に設定し、
受け付けたストリームタプルが既存の前記サブウィンドウに区分けされる場合に、該ストリームタプルを用いて前記集約タプルを更新し、更新した前記集約タプルの生存期間終了時刻を、受け付けた前記ストリームタプルのタイムスタンプに前記クエリで指定された時間ウィンドウの幅を加えた時刻に設定し、
設定した前記生存期間終了時刻に、前記集約タプルを消去するためのフラグをつけたストリームタプルを生成することを特徴とする請求項7記載のストリームデータ処理システム。
【請求項11】
前記処理部は、前記クエリの登録処理開始時に、前記時間ウィンドウを前記サブウィンドウに区切ることが可能か否かを判定する時間解像度変更可能性判定を実行することを特徴とする請求項7記載のストリームデータ処理システム。
【請求項12】
前記処理部は、前記時間解像度変更可能性判定を、前記クエリ処理結果が集計関数で構成されているか否かで判定することを特徴とする請求項11記載のストリームデータ処理システム。
【請求項13】
前記集計関数は、総和、最大値、最小値、件数、平均のいずれかであることを特徴とする請求項12記載のストリームデータ処理システム。
【請求項14】
前記処理部における前記集約の単位が前記クエリで指定された集計グループごとであることを特徴とする請求項10記載のストリームデータ処理システム。
【請求項15】
前記処理部は、前記サブウィンドウ内の集約結果である前記集約タプルに対して再度集計処理を実行して、前記クエリの処理結果を計算することを特徴とする請求項10記載のストリームデータ処理システム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【公開番号】特開2010−108073(P2010−108073A)
【公開日】平成22年5月13日(2010.5.13)
【国際特許分類】
【出願番号】特願2008−276977(P2008−276977)
【出願日】平成20年10月28日(2008.10.28)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
【公開日】平成22年5月13日(2010.5.13)
【国際特許分類】
【出願日】平成20年10月28日(2008.10.28)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
[ Back to top ]