ストリームデータのランキングクエリ処理方法およびランキングクエリ処理機構を有するストリームデータ処理システム
【課題】 (1)ウィンドウへのストリームデータの挿入に加えて、データの消滅の際にも整合性を保つためのランキング計算機構を実現する。
(2)ストリームデータ処理システムの汎用性を確保するため、アプリケーションにランキング計算結果を渡すための汎用インタフェース、およびそのインタフェースに従った出力機構を実現する。
【解決手段】 (1)ウィンドウへのストリームデータの挿入時、削除時に生成されるストリームタプルの符号を利用して順位情報を管理する機構を提供する。
(2)ランキング計算結果の差分情報のみを生成する機構、要求に応じて順位情報を付加する機構、さらに差分情報からランキング全体情報を生成する出力するインタフェース、ランキング計算結果の全体を生成する機構、およびこれらの機構を利用するためのインタフェースを提供する。
(2)ストリームデータ処理システムの汎用性を確保するため、アプリケーションにランキング計算結果を渡すための汎用インタフェース、およびそのインタフェースに従った出力機構を実現する。
【解決手段】 (1)ウィンドウへのストリームデータの挿入時、削除時に生成されるストリームタプルの符号を利用して順位情報を管理する機構を提供する。
(2)ランキング計算結果の差分情報のみを生成する機構、要求に応じて順位情報を付加する機構、さらに差分情報からランキング全体情報を生成する出力するインタフェース、ランキング計算結果の全体を生成する機構、およびこれらの機構を利用するためのインタフェースを提供する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、時々刻々と到来するストリームデータをリアルタイムに処理するストリームデータ処理システムにおける、ランキング計算方法、および該計算方法を有するストリームデータ処理システムに関する。
【背景技術】
【0002】
従来、企業情報システムのデータ管理の中心にはデータベース管理システム(以下、DBMSとする)が位置づけられていた。DBMSは、処理対象のデータをストレージに格納し、格納したデータに対してトランザクション処理に代表される高信頼な処理を実現している。これに対して、時々刻々と到着する大量のデータをリアルタイム処理するデータ処理システムに対する要求が高まっている。例えば、株取引を支援するファイナンシャルアプリケーションを考えた場合、株価の変動にいかに迅速に反応できるかがシステムの最重要の課題の一つである。従来のDBMSのように株式のデータを一旦記憶装置に格納してから、該格納データに関して検索を行うようなシステムでは、データの格納とそれに続く検索処理が株価変動のスピードに追いつくことができず、ビジネスチャンスを逃してしまうことになりかねない。例えば、米国特許5495600号(特許文献1)では、記憶されているクエリが周期的に実行される機構を開示しているが、この機構においても前述の株価のようにデータが入ってきた瞬間にクエリを実行することが重要となる。すなわちクエリの実行周期とデータ処理のタイミングのずれが許容できないので、前記のファイナンシャルアプリケーションに代表されるリアルタイムデータ処理には適用が困難であった。Java(R)に代表されるプログラミング言語を用いて、各種のリアルタイムアプリケーションを個別に作りこむアプローチは、開発期間の長期化、開発コストの高騰、該アプリケーションを利用する業務の変化への迅速な対応が難しいなどの問題があり、汎用のリアルタイムデータ処理機構が求められるようになっていた。
【0003】
このようなリアルタイムデータ処理に好適なデータ処理システムとして、ストリームデータ処理システムが提案されている。例えば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 (非特許文献1)にストリームデータ処理システムSTREAMが開示されている。
【0004】
ストリームデータ処理システムでは、従来のDBMSとは異なり、まずクエリ(問合せ)をシステムに登録し、データの到来と共に該クエリが継続的に実行される。ここでのストリームデータとは、映像ストリームのような論理的に継続する一つの大きなデータではなく、ファイナンシャルアプリケーションにおける株価配信データ、小売業でのPOSデータ、交通情報システムにおけるプローブカーデータ、計算機システム管理におけるエラーログ、センサやRFIDなどのユビキタスデバイスから発生するセンシングデータなど、比較的小さな論理的には独立した大量の時系列データである。ストリームデータは継続してシステムに到着し続けるため、その終わりを待ってから処理を開始するのでは実時間での処理は不可能である。また、システムに到着したデータは、データ処理の負荷に影響されることなく、その到着順を守って処理する必要がある。前記STREAMでは、システムに到来し続けるストリームデータを、最新10分間などの時間の幅、もしくは最新1000件などの個数の幅を指定してストリームデータの一部を切り取りながらリアルタイムの処理を実現するため、スライディングウィンドウ(以下単にウィンドウと呼ぶ)と呼ばれる概念を導入している。ウィンドウ指定を含むクエリの記述言語の好適な例としては非特許文献1に開示されているCQL(Continuous Query Language)をあげることができる。CQLは、DBMSで広く用いられているSQL(Structured Query Language)のFROM句に、ストリーム名に続いて括弧を用いることにより、ウィンドウを指定する拡張が施されている。SQLに関しては、C. J. Date、 Hugh Darwen著:“A Guide to SQL Standard (4th Edition)”、Addison−Wesley Professional; 4 edition (November 8、 1996)、ISBN: 0201964260(非特許文献2)が詳しい。
【0005】
図12のクエリ1201は非特許文献1の2.1節に示されているCQLによるクエリの例である。該クエリでは、あるWebプロキシサーバにおいて、ドメインstanford.eduからの現時点から過去1日分のアクセスの総数を計算する。Requestsは前記Webプロキシサーバに到来し続けるWebアクセスデータであり、従来のDBMSで取り扱うテーブル(表)のような静止化されたデータではなく、切れ目のないストリームデータとなる。そのため、アクセスの総数を計算は、ウィンドウ指定“[Range 1 Day Preceding]”による、ストリームデータのどの部分を対象とするかの指定なしでは、不可能となる。ウィンドウによって切り取られたストリームデータはメモリ上に保持され、クエリ処理に使用される。代表的なウィンドウの指定方法には、ウィンドウの幅を時間で指定するRangeウィンドウと、ウィンドウの幅をデータ数で指定するRowウィンドウがある。例えば、Rangeウィンドウを用いて、[Range 10 minutes]とすると、最新の10分間分がクエリ処理の対象となり、Rowウィンドウを用いて[Rows 10]とすると、最新の10件がクエリ処理の対象となる。
【0006】
ストリームデータ処理システムは、ファイナンシャルアプリケーション、小売業での売り上げモニタリング、交通情報システム、計算機システム管理に代表される、リアルタイム処理が必要とされる応用に対する適用が期待されている。以下、リアルタイム処理を必要とする応用をリアルタイムアプリケーションと呼ぶ。リアルタイムアプリケーションにおいては、膨大な情報から瞬時に重要度の高い情報を取り出すために、ある瞬間でのランキング計算が必要とされる場合が多い。例えばファイナンシャルアプリケーションでは、株価の値動きや取引量が大きい株に注目するためのランキング情報が重要であり、小売業の売り上げモニタリングでは、店舗別、商品別など様々な角度からの売上高、売上数のランキング情報が注目される。また、交通情報システムでは、渋滞度が高い、通行量が多い地区に注目するためのランキング情報が必要となり、計算機管理においても、重大なエラーの数、アクセス数など、管理対象の優先度をつけるためのランキング情報が必須となる。
【0007】
ランキング計算対象のデータが静止化されている場合、すなわちランキング付けしようとするデータが変更されない場合には、該データをランキング付けしようとするキー(以下、ランキングキー)でソーティングし、ソーティング結果の順位に従って、データを出力すればよい。例えば、データベースに格納されている株価の売上高の上位10位のランキング情報を計算する際には、その日の各銘柄別の売上高を集計し、売上高をランキングキーとして集計した結果をソートし、上位の10件を選択して出力すればよい。ユーザが投入したクエリからランキングキー(前述の例では売上高)を自動的に決定する方法が米国特許7251648号(特許文献2)で開示されている。米国公開特許US2006/0259457号(特許文献3)では、DBMSのクエリで最初のn行のみを出力する指定があった場合に、クエリ処理時に条件を追加することによって余分なデータ処理のコストを削減する方法が開示されている。また、前記SQLでは銘柄別の分類のためのGROUP BY句、売上高の総計を計算するための集計関数SUM、集計値に基づいてソーティングを実行するORDER BY句が準備されている。これらを組合せることで、データベースに格納されている一日の株取引データから売上高の高い順(もしくは低い順)のランキング計算結果を生成することができる。
【0008】
しかしながら、前記リアルタイムアプリケーションにおいては、新しいデータ(ストリームデータ)が次々に到来し続けるため、その静止化は困難である。DBMSを用いて、リアルタイムアプリケーション向けのランキング計算を実施しようとする場合、ストリームデータが到来するごとに該データをDBMSに格納し、DBMSで前記の分類、集計、ソーティング処理を行う必要がある。これらの処理では、基本的にデータベース内の大量のデータにアクセスする必要があり、処理コストが高い。そのため、リアルタイムアプリケーションから発生するストリームデータが高速で到来する場合、すなわちストリームデータの到来する時間間隔が短い場合には、該時間間隔内での処理の実行は不可能であり、DBMSを用いたリアルタイムアプリケーション向けのランキング計算の実現は困難であった。
【0009】
前述したように、ストリームデータ処理システムでは、無限に続くストリームデータから、処理の対象を前述のウィンドウで切り取って処理している。処理対象のデータは、ウィンドウ中に存在するデータのみであり、ウィンドウから押し出されたデータはランキング処理の対象から削除する必要がある。ウィンドウからデータが押し出されるタイミングは、ウィンドウの指定方法が時間である(前述のRangeウィンドウ)か、件数である(前述のRowウィンドウ)かによって異なる。件数指定の場合、処理対象のデータがウィンドウから押し出される時刻は、該データがウィンドウに入った瞬間には決定できず、後続のストリームデータによって決定される。一方、時間指定の場合には、処理対象のデータがウィンドウから押し出される時刻は、該データがウィンドウに入った瞬間に決定できるが、その消去タイミング(ウィンドウから押し出されるタイミング)は、後続のデータとは同期しない。
【0010】
ランキング計算においては、ウィンドウへのストリームデータの挿入の都度、ランキング計算を実行してランキング情報の整合性を保つ必要がある。それに加えて、ウィンドウからのデータの消滅の際にも同様にランキング情報の整合性を保つことが必要となる。とくにウィンドウが時間指定の場合には、後続のデータ到来とは同期しないウィンドウからのデータの消滅タイミングを考慮してランキング計算を実行する必要がある。
【0011】
さらに、ランキング計算では、処理の効率化によって、ストリームデータ処理システム利用の重要な目的の一つであるリアルタイム処理の制約を守る必要がある。加えて、ストリームデータ処理システムは汎用のデータ処理基盤であるため、ランキング計算結果の差分情報のみを渡す、ランキング計算結果全体を渡す、ランキング計算結果に順位情報を含めるなど利用するアプリケーションの要求に応えるための汎用のインタフェース、そのインタフェースに従う処理を実現する機構を準備する必要がある。以上の条件を満足するストリームデータ処理システム向けのランキング計算方法はこれまで実現されていなかった。
【0012】
【特許文献1】米国特許5495600号
【特許文献2】米国特許7251648号
【特許文献3】米国公開特許US2006/0259457号
【特許文献4】特開2006−338432号
【非特許文献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
【発明の開示】
【発明が解決しようとする課題】
【0013】
リアルタイムアプリケーションで必要となるランキング計算を実現するためにストリームデータ処理システムを用いる場合、ウィンドウへのストリームデータの挿入に加えて、該ストリームデータの消滅の際にも整合性を保つランキング処理の実現が必要となる。また、リアルタイムと呼べるランキング処理結果を得るには、処理対象ウィンドウの内部データの時々刻々の変化の度に実行するランキング更新の処理を高速化する必要がある。
【0014】
本発明の目的は、処理対象ウィンドウの内部データの時々刻々の変化の度に行なうランキング更新の演算を高速化でき、しかも処理結果の整合性を保つランキング処理方法及びシステムを提供するにある実現することにある。
【課題を解決するための手段】
【0015】
本願で開示される発明のうち、代表的な発明の概要は以下の通りである。すなわち、代表的実施態様ではウィンドウへのストリームデータの挿入、削除の度毎に、すなわちあるストリームタプルの生存期間の開始、及びあるストリームタプルの生存期間の終了の度毎に、生存期間にあるストリームタプルの範囲内でそれらのランキングを生成・更新し、かつ出力指定された順位の範囲を越えて、生存期間にあるストリームタプルの範囲内でバッファに保存するストリームデータ処理を採用する。
【0016】
ある時点でのランキング情報の出力だけから言えば、ランキング情報の保存は出力指定された順位のストリームタプルの範囲で行なえば一見充分であるかに思われる。しかしながら、新たなストリームタプルの受け付けに起因して、ウィンドウ内のストリームタプルへの挿入および削除が生じ、その挿入、削除の度にランキングそのものが変動する。したがって、整合性のあるランキング計算を継続して実行するには、その挿入・削除の度毎にランキング情報の更新が必要であり、かつ出力指定された順位の範囲を越えて、生存期間にあるストリームタプルの範囲内のストリームタプル及びそれらのランキング情報を保存する必要がある。
【0017】
さらに上記代表的実施態様は、受け付けたストリームタプルをランキング計算の処理対象としてウィンドウへ挿入し、該ストリームタプルのウィンドウ内での生存期間を決定し、生存期間の終了時には上記ウィンドウからの削除を行なうウィンドウマネージャと、ランキング計算を行うランキング処理モジュールとの2段階の処理機構を持ち、上記ウィンドウマネージャは、ウィンドウ内のストリームタプル全体の情報ではなく、刻々の変化部分を示すウィンドウ差分情報を上記ランキング処理モジュールに伝達し、上記ランキング処理モジュールは、伝達された上記ウィンドウ差分情報と、過去にランキング計算を行って保存した保存情報とを用いてランキングの更新を行う構成とした点に特徴を有する。具体的には当該ストリームタプルがウィンドウに挿入されたことを示す符号を付加したストリームタプル、および当該ストリームタプルがウィンドウから削除されたことを示す符号を付加したストリームタプルが上記のウィンドウ差分情報としてランキング処理モジュールに伝達され、ランキング処理モジュールでは該差分情報に基づいてランキング情報を更新し、ランキング情報保持バッファに保存するとともに、指定された形式でランキング出力情報を出力する。
【発明の効果】
【0018】
本発明を用いることにより、時々刻々と到来する大量データをリアルタイム処理するストリームデータ処理システムにおいて、入力されるストリームデータとの整合性を保ち、かつ高速、高効率のランキング計算が実現できる。本ランキング計算方法の適用により、リアルタイムアプリケーションで共通に利用可能なデータ処理基盤が提供できる。
【発明を実施するための最良の形態】
【0019】
図1および図16に、本発明のストリームデータ処理システムの好適な実現例を示す。アプリケーション1(102)を実行するクライアント計算機101、アプリケーション2(104)を実行するクライアント計算機103は、ネットワーク107を介してストリームデータ処理システム115に接続されている。ネットワーク107は、イーサネット、光ファイバなどで接続されるローカルエリアネットワーク(LAN)、もしくはLANよりも低速なインターネットを含んだワイドエリアネットワーク(WAN)でも差し支えない。また、クライアント計算機はパーソナルコンピュータ、ブレード型の計算機システムなどの任意のコンピュータシステムでよい。
【0020】
本実施例のストリームデータ処理システムが稼動する計算機をストリームデータ処理サーバと呼ぶ。図16に示すように、ストリームデータ処理サーバ1601は、イーサネットアダプタなどの通信インタフェース1602、CPU1603、メモリ1604、およびI/Oインタフェース1605を備えた計算機であり、ブレード型計算機システム、PCサーバなどの任意のコンピュータシステムでよい。ストリームデータ処理サーバでは、前記通信インタフェースを介して前記クライアント計算機、後述するデータソースにアクセスする。ストリームデータ処理サーバで、ストリームデータ処理結果、処理の中間結果、システム動作に必要な設定データを不揮発性のストレージに格納する場合には、ストリームデータ処理サーバに接続したストレージ装置1606を用いることができる。ストレージ装置1606は、ストリームデータ処理サーバのI/Oインタフェースを介して直接接続されるか、もしくは通信インタフェースを介してネットワーク接続される。
【0021】
ストリームデータ処理システム115は、前記ストリームデータ処理サーバ1601の上で動作する。図1にストリームデータ処理システムの主要構成要素を示す。アプリケーションは、まずストリームデータ処理システムにクエリを登録する(105)。登録されたクエリはクエリ管理テーブル(112)に格納される。クエリ登録の詳細な手順、ストリームデータ処理システム内部のデータの格納方法、格納形式、クエリを受け付けた後の解析方法、最適化方法、システムへの登録方法、ストリームデータ処理システムへのストリームの登録方法、システム内のデータ保持方法については、特開2006−338432号「ストリームデータ処理システムのクエリ処理方法」(特許文献4)に、その好適な実施の方法が開示されている。クエリ管理テーブルは、ストリームデータ処理サーバ上のメモリ1604に保持するのでも、ストリームデータ処理サーバに接続されているストレージ装置1606に格納するのでも差し支えない。
【0022】
ストリームデータ処理システムには、一つ以上のストリームデータソースであるストリームデータソース1(122)〜ストリームデータソースN(123)からネットワーク121を介して時々刻々と大量のデータが到来する。このデータをストリームデータと呼ぶ。ストリームデータの好適な例としては、ファイナンシャルアプリケーションにおける株価配信情報、小売業でのPOSデータ、交通情報システムにおけるプローブカー情報、計算機システム管理におけるエラーログなどが挙げられる。ストリームデータ処理システムでは、通信インタフェース1602を介してデータフローマネージャ119が受け付けたストリームデータをクエリ処理エンジン113にフィードする。
【0023】
前述したように、継続して到来する比較的小さな論理的には独立した大量の時系列データであるストリームデータを取り扱うために、ストリームデータ処理システムではウィンドウを用いる。図1のウィンドウマネージャ126は、到来するストリームデータに対して、クエリで指定されたウィンドウ演算を適用してストリームタプルを生成し、ストリームタプルのシステム内での生存期間を設定する。ストリームデータがウィンドウに挿入された時が生存期間の開始時刻、そしてウィンドウから該ストリームデータが削除される時が生存期間の終了時刻に相当する。
【0024】
図15を用いて、ウィンドウマネージャの構成と動作内容を説明する。ウィンドウマネージャ126は、ストリームデータ受付インタフェース1505、ストリームタプル保持バッファ1502、生存期間決定部1504、および差分情報生成部1506から構成される。ストリームデータ受付インタフェースは、受け付けたストリームデータの構成要素であるストリームタプルを、ストリームタプル保持バッファ1502に格納するとともに、生存期間決定部1506に格納したことを伝達する。生存期間決定部1506は前記ウィンドウ演算により各ストリームタプルの生存期間を決定し、生存期間が終了するストリームプルをストリーム保存バッファ1502から消去する。差分情報生成部1504は、ストリームタプルが該ストリームタプル保持バッファに格納されたタイミングで、プラスタプルを生成し、差分情報として出力する(1508)。同様に、ストリームタプルがストリームタプル保持バッファから消去されるタイミング(ストリームタプルの生存期間が終了するタイミング)でマイナスタプルを生成し、同様に差分情報として出力する(1508)。
【0025】
図16に示すように、ストリームタプル保持バッファ1502は、クエリ処理エンジン113内のメモリマネージャ117によって割り当てられるメモリ上に配置される。該メモリは、ストリームデータ処理サーバ1601上のメモリ1604、もしくは要求される性能要件、信頼性要件に応じて、ストリームデータ処理サーバに接続されたストレージ装置1606、もしくはストリームデータ処理サーバとネットワークで接続される、ストリームデータ処理サーバと同様の計算機資源を保持するサーバ計算機(図1のブロック133)上のメモリを利用してもよい。
【0026】
次に、図2を用いてランキング処理モジュールの構成を説明する。ランキング処理モジュール116はストリームタプル受付インタフェース206、順序・順位生成部204、ランキング情報保持バッファ202、ランキング情報保持テーブル203、順位管理インデックス208、およびランキング処理結果出力インタフェース207から構成される。図16に示すように、ランキング処理モジュールは、クエリ処理エンジン113内のメモリマネージャ117によって割り当てられるメモリ上に配置される。該メモリは、ストリームデータ処理サーバ1601上のメモリ1604、もしくは要求される性能要件、信頼性要件に応じて、ストリームデータ処理サーバに接続されたストレージ装置1606、もしくはストリームデータ処理サーバとネットワークで接続される、ストリームデータ処理サーバと同様の計算機資源を保持するサーバ計算機(図1のブロック133)上のメモリを利用してもよい。
【0027】
図17に本発明のストリームデータ処理における、ランキング情報生成のシーケンスを示す。前記ウィンドウマネージャ126は外部データソースから到来するストリームデータを受け付け(1701)、差分情報(符号付ストリームタプル)を生成する(1702)。ランキング処理モジュール116では、ストリームタプル受付インタフェース206が、前記ウィンドウマネージャから出力された差分情報(符号付ストリームタプル)を受け取り、順序・順位生成部204に転送する。順序・順位生成部では、ランキング情報保持バッファ202を参照しながら、受け取った符号付ストリームタプルをランキングバッファの適切な位置に追加、もしくはランキングバッファ内の適切な位置のランキング情報を削除し、前回の出力時とのランキング情報の差分(ランキング差分情報)を生成し(1705)、該ランキング差分情報をランキング処理結果出力インタフェース207に転送する(1706)。ランキング処理結果出力インタフェースでは、前記クエリによって指定されているデータの出力形式に従ってランキング情報を出力する。
【0028】
以下、具体的なクエリ、ストリームデータに対する、本実施例のランキング計算方法を説明する。図3(a)に示すクエリ301は、順位出力(順位そのものを出力すること)を指定しないランキング処理を命じるクエリである。1行目のSELECT句はs.idとs.valの値の組を出力対象とすることを、2行目のFROM句はストリームsを対象とすることを、同じく2行目のPartition By句はs.idの値でグルーピングしてそれぞれのs.valの値の最新の1件を保持することを、また3行目のLIMIT句は、s.valの値の降順に3件を出力すること意味する。本実施例のストリームデータ処理システムでは、予め入力されるクエリにて、ランキング計算の対象となるカラムと、ランキング付けの方向(昇順/降順)と、ランキング計算結果を出力する個数と、計算結果に順位情報を付与するか否かが指定される。クエリ301では、3行目のLIMIT句が、s.valの値の降順に3件を出力するランキング指定である。さらに、1行目のIDSTREAM句は、本クエリは出力として前回の出力時との差分情報のみを出力することを意味している。
【0029】
図4および図5(a)を用いて、クエリ301が設定されたストリームデータ処理システムに対して、ストリームデータが到来した際の処理内容を説明する。クエリ301がストリームデータ処理システム115に登録された場合、例えば特許文献4に示された方法でクエリ解析、クエリ最適化、クエリ生成が実行され、クエリ処理エンジンにクエリの実行形式が登録される。クエリ301はランキング計算指定を含むため、実行形式のクエリの実行時には、クエリ処理エンジン113内のランキング処理モジュール116でランキング計算が実行される。特許文献1で述べられているように、ストリームデータ処理システムでは、クエリは登録された後システム上で動作し続け、一つ一つのストリームデータがシステムに到来するたびに、その状態が変化する。
【0030】
クエリ301が登録されている状況で、図4に示すストリームデータが到来したことを仮定する。図4および図5(a)では、時刻の経過を縦軸にとり、時刻の経過と共にシステムに到来したストリームデータが各処理モジュールで処理される様子を模式的に表している。凡例402および502に示すように、本実施例では到来するストリームデータは{id,val}の形式と仮定しており、これを楕円で表現している。t1〜t7(401)は、405〜411の各ストリームデータがストリームデータ処理システムに到来する時刻を表している。例えば、ストリームデータ{a,50}(405)、及びストリームデータ{b,10}(406)はそれぞれ、時刻t1、t2にストリームデータ処理システムに到来することを示している。図4の横軸は到来したストリームデータが処理される位置、および生成されるデータを表している。さらに、図4の左側の角丸四角(1502)は、システムに到来した前記ストリームデータに対して、前記ウィンドウマネージャ(126)でウィンドウ演算“[Partition By s.id Rows 1]”(403)を適用した結果を格納した、ストリーム保持バッファの各時刻での状態を示している。また、右側の角丸四角(202)は、ウィンドウマネージャから到来するストリームタプルに対して、前記ランキング処理モジュール(116)内の順序・順位生成部(204)における、ランキング計算指定句“LIMIT 3 By s.val DESC”(404)の適用した結果を格納した、ランキング情報保持バッファの各時刻での状態を示している。
【0031】
前述したように、ウィンドウマネージャ126は、到来するストリームデータに対して、クエリで指定されたウィンドウ演算を適用してストリームタプルを生成し、ストリームタプルのシステム内での生存期間を設定する。図4の例では、生存期間の開始時刻は黒丸(426)、終了時刻は白丸427で表現されており、該ウィンドウ演算により、ストリームタプル{a,50}(405)の生存期間は時刻t1に始まり、時刻t7に終わることを示している。本実現例においては、ストリームデータの生存期間の開始時刻には、システム内部で前記のストリームデータに増加分を表す符号を付けたタプル(以下プラスタプル)が生成される。また、ウィンドウからストリームデータが削除された場合、先に出力されたプラスタプルへの参照を持つ、減少分を表す符号を付けたタプル(以下マイナスタプル)が生成される。以上の処理は、前記ウィンドウマネージャで実行される。例えば、図4の場合、時刻t1にはストリームデータ{a,50}(405)に対応するプラスタプル430が生成され、時刻t7に該ストリームデータのマイナスタプル431が生成されることとなる。ウィンドウ演算に続く、後段のクエリ処理は、本プラスタプルおよびマイナスタプルが到着したタイミングで該プラスタプルとマイナスタプルに起因して生成される差分情報に関して実行される。なおプラスタプル、マイナスタプルそのものの概念は前述の非特許文献1に紹介されている。
【0032】
クエリ301では、到来するストリームデータはまずウィンドウ演算“[Partition By s.id Rows 1]”(403)により、s.idの値毎に最新1個のみが保持される。具体的には、図4で時刻t1にストリームデータ{a,50}(405)が、時刻t2に{b,10}(406)が、時刻t3に{c,30}(407)が、時刻t4に{d,20}(408)が、そして時刻t5に{e,40}(409)がそれぞれ到来する。これら5つのストリームデータはs.idの値が異なるので、それぞれウィンドウに保持される。次に、時刻t6に新たなストリームデータ{e,15}(410)が到来すると、それまでウィンドウに保持されていたs.idの値がeのストリームデータ409はウィンドウから押し出される(削除される)。次に時刻t7に{a,45}(411)が到来すると、同様に{a,50}(405)がウィンドウから削除される。この様子を図示したのが図4の中央部分429である。例えば、ストリームデータ{a,50}(412)は時刻t1に到来し、時刻t7に{a,45}(418)が到来するまでウィンドウに保持される。この時、ストリームデータ{a、50}の生存期間はt1からt7(但し時刻t7は含まない)と表現する。図4の例では、生存期間の開始時刻は黒丸(426)、終了時刻は白丸(427)で、生存期間中は実線で表している。同様にして、{e,40}(417)の生存期間はt5からt6となる。一方、{b,10}(413)、{c,30}(414)、{d,20}(415)、{e,15}(417)、および{a,45}(418)については、時刻t7の時点では終了時刻が決定していないため、実線で表現されている。
【0033】
以上のように生存期間を持つストリームデータから、どのようにランキング情報を生成するかを、同じく図4を用いて説明する。図4の右側432に、ランキング計算指定句“LIMIT 3 By s.val DESC”(404)による処理結果を示す。前述したように、本ランキング指定句の意味は、s.valの値で降順に3件を抽出することである。今、ストリームデータ{a,50}(419)、{b,10}(420)、{c,30}(421)がそれぞれ時刻t1、t2、t3に到来する。これら3つのストリームデータは上位3件ランキング情報としてそれぞれ出力される。次に、時刻t4に{d,20}(422)が到来すると、そのs.valの値20は、これまでに保持されている{b、10}の10よりも大きいため、{b,10}が上位3件のランキング情報から削除されてその生存期間がt4で終了し(428)、{d,20}がランキング計算結果として出力される。次に時刻t5に{e,40}(423)が到来すると、そのs.valの値は40となるため、上位3件に含まれるため、ランキング情報として出力される。そしてこれまで上位3件に保持されていた中で最も値の小さい{d,20}がランキングから削除される。ところが、時刻t6には、前述したように{e、15}(417)の到来により{e,40}(416)がウィンドウから削除されるため、再び{d,20}(424)が上位3件に復活することになり、再びランキング計算結果として出力される。時刻t7には{a,50}(412)が{a、45}(418)に置き換わり、{a,45}のs.valの値45は上位3件に含まれるため、{a,45}(425)がランキング結果として出力される。
【0034】
以上のランキング計算の好適な実施方法を図2、図9、図10、図18、および図19を用いて説明する。ランキング処理モジュール116のストリームタプル受付インタフェース206が差分情報であるストリームタプルを受け取る(902)。すると、順序・順位生成部204はランキング情報保持バッファ202のバッファメンテナンスを実行する(903)。バッファメンテナンス処理の処理方法について、図2および図10を用いて説明する。順序・順位生成部204は、ストリームタプルを受け取ると、該ストリームタプルの符号がプラスであるかマイナスであるかをチェックする(1002)。符号がプラスの場合(1002でYesが選択された場合)、ランキング情報保持バッファ202のランキング情報保持テーブル203に受け取ったストリームタプルを追加し(1003)、ランキング情報保持バッファメンテナンス処理を終了する。ランキング情報保持バッファへのストリームタプル追加処理の詳細を図18のフローチャートを用いて説明する。順位・順序生成部では、追加対象のストリームタプル(符号がプラスのストリームタプル)を受け取ると、追加先のランキング情報保持テーブル203に順位管理インデックス208が付与されているかどうかをチェックする(1802)。順位管理インデックスは、順位付けの対象のカラムをキーとしたB+treeインデックスやハッシュインデックスで差し支えない。順位管理インデックスが存在する場合(ステップ1802でYesが選択された場合)には、順位・順序生成部は該インデックスを利用して追加対象のストリームタプルの、ランキング情報保持テーブルへの挿入位置を決定する(1803)。該インデックスが存在しない場合(ステップ1802でNoが選択された場合)には、順位・順序生成部はランキング情報保持テーブルを検索し、追加対象のストリームタプルの、ランキング情報保持テーブルへの挿入位置を決定する(1804)。挿入位置を決定した後、順位・順序生成部は追加対象のストリームタプルをランキング情報保持テーブルに挿入し(1805)、順位管理インデックスが存在する場合(ステップ1806でYesが選択された場合)には、該インデックスも更新してランキング情報保持バッファへのストリームタプル追加処理を終了する(1808)。
【0035】
好適なランキング情報保持バッファの実現形態では、追加されたストリームタプルの、ランキング指定されたカラムの値での順序関係が保持される。ストリームタプルの追加時に順序関係を保持しておく理由は、遅延処理により一括して順序関係を作成する方法では、リアルタイム処理アプリケーションの要求である即時の結果出力が困難であるためである。例えば、図3のクエリ301の場合には、順序付けの対象となるカラム(前述のランキングキー)はs.valであるので、図2のランキング情報保持バッファ中のランキング情報保持テーブル(203)ではs.valの降順に順位情報とストリームタプルを保持している。
【0036】
図10に戻って、受け取ったストリームタプルの符号がマイナスの場合(図10の1002でNoが選択された場合)、ランキング情報保持バッファ(202)から該ストリームタプルに対応する、符号がプラスのタプルを削除し(1004)、ランキング情報保持バッファメンテナンス処理を終了する。
【0037】
ランキング情報保持バッファからのストリームタプル削除処理の詳細を図19のフローチャートを用いて説明する。順位・順序生成部では、ランキング情報保持テーブル203に順位管理インデックス208が付与されているかどうかをチェックする(1902)。順位管理インデックスが存在する場合(ステップ1902でYesが選択された場合)には、順位・順序生成部は該インデックスを利用して、ランキング情報保持テーブル中の削除対象のストリームタプルを検索する(1903)。該インデックスが存在しない場合(ステップ1902でNoが選択された場合)には、順位・順序生成部はランキング情報保持テーブルを検索し、削除対象のストリームタプルを決定する(1904)。削除対象のストリームタプルが決定されると、順位・順序生成部では該ストリームタプルの削除処理を実行する(1905)。順位管理インデックスが存在する場合(ステップ1906でYesが選択された場合)には、順位管理インデックスも更新し、ランキング情報保持バッファからのストリームタプル削除処理を終了する。
【0038】
ここで図14を用いて、図3(a)のクエリを登録したストリームデータ処理システムに対して、図4で示したタイムチャートでストリームが到来する場合の、ランキング情報保持テーブルに保持されるランキング情報の変化の様子を説明する。図14では、左側のt0(1416)、t1(1404)、…、t7が時刻を、中央の符号付きの楕円(1405、1407、…)がウィンドウマネージャで生成された差分情報(符号付ストリームタプル)を、そして右側のテーブル(1417、1406、…、1415)がランキング情報保持テーブルに保持されるランキング情報を表す。便宜上時刻t1以前のt0にはランキング情報は存在しなかったと仮定する。
【0039】
時刻t1(1404)に、プラスの符号を持つストリームタプル{a,50}(1405)が到来すると、ランキング情報保持テーブルに該ストリームタプルが登録される(1406)。次に、時刻t2(1418)にプラスの符号を持つストリームタプル{b,10}(1407)が到来すると、その順位付け対象s.valの値である10を、ランキング情報保持テーブルに保持されているストリームタプルのs.valの値50と比較し、挿入位置が{a,50}(1405)の次と決定され、該挿入位置にストリームタプル{b,10}が挿入される(1408)。以下同様に、t3、t4、t5にそれぞれ、{c,30}、{d,20}、{e,40}が到来すると、これらのストリームタプルが順位付け対象のs.valの値の順にソートされて登録される。
【0040】
図4に示すように、時刻t6において{e,15}(408)が到来すると、図3(a)に示した1行指定のRowウィンドウクエリでは{e、40}がウィンドウから削除される(433)。そのため、図14に示すランキング処理モジュール(116)のストリームタプル受付インタフェース206には、マイナス符号の付いたストリームタプル{e,40}(1413)と、プラス符号の付いたストリームタプル{e,15}(1414)が到来する。順序・順位生成部204では、マイナス符号の付いたストリームタプル{e,40}に対応するプラス符号の付いたストリームタプルを検索、決定し(1412の上から2番目)、該ストリームタプルを削除する。そして、プラス符号の付いた新たなストリームタプル{e,15}(1414)の挿入位置を決定し(1415の上から4番目)、ランキング情報保持テーブルに該ストリームタプルを追加する。時刻t7についても同様である。
【0041】
本実施例では、ランキング情報保持バッファ内でのデータ構造がテーブルの場合を示したが、ランキング情報保持バッファ内でのデータ構造の他の好適な実現例としては、例えば図13に示すようなランキングキーをノードとした二分探索木(binary search tree)を挙げることができる。図13では、二分探索木のノード(ランキングキー)を四角1301で、ノードからポイントされるデータ本体(ストリームタプル)を円と楕円の組1302で示した。二分探索木を用いる場合には、ランキングキーをノードとして、あるノードの左側の子およびその全ての子孫ノードのランキングキーの値は、該ノードのランキングキーの値より小さく、右の子およびその全ての子孫ノードの値は該ノードのランキングキーの値と等しいもしくは大きくなるように構成する。図13の角丸四角1303内の二分探索木は、図4の時刻t5の時点でのランキング情報保持バッファが保持するデータの二分探索木での構成の例であり、保持しているデータの内容は図14のランキング情報保持テーブル1412と等しい。二分探索木を用いてランキングキーに基づいた順序を管理することで、前記プラスタプル、および前記マイナスタプル到来時の順序関係の管理を効率化することができる。さらに、ストリームタプルの順序関係を保持して管理するための他の好適なデータ構造としては、多くのDBMSのデータ管理機構で利用されるB+−Treeを利用するのでも差し支えない。
【0042】
ランキング情報保持バッファでは、ユーザに指定されたランキングの出力件数のみでなく、生存期間中のストリームデータに対応する全てのストリームタプルを保持する必要がある。例えば、図3のクエリ301では、ユーザからは上位3件のみを出力するように指示されているが、図4に示すストリームデータの系列がシステムに到来する場合、時刻t4で{d,20}(408)が到来した際に、前記ランキング情報保持バッファから、順位が4位となったストリームデータ{b,10}(406)に対応するストリームタプル433を削除してはならない。その理由は、ストリームデータ処理においては、新しいストリームデータがシステムに到来するときに加えて、ストリームデータの生存期間が終了した際にもランキングが変化するため、現在はユーザが指定した範囲外にあるストリームデータが、他のストリームデータの生存期間の終了によって、再びランキング結果として出力する必要が出てくるためである。例えば、図4では時刻t4で到来し、上位3件に含まれたストリームデータ{d,20}(408)が時刻t5に到来した{e,40}(409)によってランキング外に押し出されてしまっているが、時刻t6に到来した{e,15}(410)によって、{e,40}はウィンドウから消去される(433)ため、{d,20}は再びランキング計算結果に含まれる(424)必要がある。すなわち、ランキング情報保持バッファでは、ユーザに指定されたランキングの出力件数のみでなく、ウィンドウで管理されているストリームデータに対応する全て、すなわち生存期間中のストリームデータに対応する全てのストリームタプルを保持する必要がある。
【0043】
但し、ストリームタプルが到着した瞬間に上位50位以内に含まれていない場合には、該ストリームタプルはランキングの対象としないなどのアプリケーションの特別な条件が存在する場合には、該アプリケーションの条件に従ってランキング情報保持バッファで保持するストリームタプルの数を変更することは可能である。
【0044】
図9に戻って、順序・順位生成部では、受け取ったストリームタプルのバッファメンテナンス処理(903)の結果に基づき、該処理結果がランキングに影響するか否かをチェックする(904)。処理結果がランキングに影響を及ぼす場合とは、受け取ったストリームタプルに基づいたランキング情報保持バッファのメンテナンスの結果、クエリで指定されている範囲の順序に変更がある場合を指す。例えば、図3のクエリ301では、上位3件を出力の範囲に指定しているため、上位3位以内の順序に変更がある場合、処理結果がランキングに影響するか否かの判定(ステップ904)はYesとなる。例えば、図4で示した処理の場合、時刻t4で{d,20}が到来した場合には上位3位以内の順序に変更があるので、Yesの例となる。処理結果がランキングに影響する場合(ステップ904でYesが選択された場合)、順序出力指定があるかないかをチェックする(905)。順序出力指定がある場合(ステップ905でYesが選択された場合)、処理結果タプルへの順位情報カラムを追加して(906)、処理結果タプルを出力し(907)、ランキング処理を終了する(908)。順位出力の指定がない場合(ステップ905でNoが選択された場合)、処理結果タプルを出力し(907)、ランキング処理を終了する(908)。
【0045】
図3のクエリ301の場合には、順位出力の指定はないので、ランキング処理結果出力インタフェースから出力する処理結果タプルは、例えば図5の523に示すものであり、順位情報は付加されていない。順位出力の指定がある場合(ステップ905でYesが選択された場合)の例については後述する。
【0046】
前述したように、リアルタイムアプリケーションのランキング計算では、膨大な情報から瞬時に有用な情報を取り出す必要があるため、処理の効率化が必要となる。そこで、本実施例のストリームデータ処理システムでは、ランキングに変動があった差分だけを出力するインタフェースと、その時点のランキング内の全データを出力するインタフェースを備える。図5(a)中央の202は、図4で説明したクエリ301(図3)のウィンドウ演算“[Partition By s.id Rows 1]”、およびランキング計算指定句“LIMIT 3 By s.val DESC”の処理結果を格納したランキング情報保持バッファの各時刻での状態を示している。クエリ301では、最終的な出力形式として、IDSTREAM句が指定されている。IDSTREAM句は、ランキング計算の結果、ランキングに追加されたタプルを増加分タプルとして、ランキングから削除されたタプルを減少分タプルとして出力するインタフェースである。図5(a)では、IDSTREAM句(504)によって処理された後のストリームデータを図の右側の角丸四角523内に示した。ただし、該ストリームデータの黒丸は増加分、白丸は減少分を表す。以下、IDSTREAM句の処理の内容について説明する。時刻t1に{a,50}(505)がランキングに追加されるので、IDSTREAM句では処理結果の増加分ストリームデータとして{a,50}(512)を出力する。次に時刻t2、t3にそれぞれ{b,10}(506)および{c,30}(507)がランキングに追加されるので、{b,10}(514)および{c,30}(515)が増加分として出力される。時刻t4には、{d,20}(508)がランキングに挿入されると共に、{b,10}(506)がランキングから削除される。この場合、IDSTREAM句では、時刻t4に{d,20}(516)を増加分として、{b,10}(517)を減少分として出力する。増加分と減少分の情報のみを計算し、該情報を利用するクライアント計算機に送信することにより、ストリームデータ処理システムの処理コスト、および通信コストを削減することができる。例えば図5(a)の場合、t1からt7までの間に、クライアント計算機に対して11個の処理結果が送信されるが、各タイミングで上位n件の全結果を全て送信する場合にはn×7個の処理結果を送信する必要があり、特にnが大きい場合差分情報のみを送信する本発明の効果は高い。
【0047】
但し、クライアント計算機側でランキング情報を随時ユーザに提供し続ける必要がある場合には、クライアント計算機側で差分情報から全体のランキング情報を作成し続ける必要がある。本処理では、クライアント計算機側で状態(ステート)を管理する必要があるため、クライアント計算機の状態、リアルタイムアプリケーションの形態によっては実現が難しい場合もある。このような状況でもランキング情報を利用できるようにするために、本出願のストリームデータ処理システムでは、生成した差分ランキング情報から全体のランキング情報を生成し、出力するインタフェースを備える。図3(b)のクエリ302は、1行目のRSTREAM句以外はクエリ301と同一であり、1行目のSELECT句はs.idとs.valの値の組を出力対象とすることを、2行目のFROM句はストリームsを対象とすることを、同じく2行目のPartition By句はs.idの値でグルーピングしてそれぞれのs.valの値の最新の1件を保持することを、3行目のLIMIT句はs.valの値の降順に3件を出力することを指定する。クエリ301の1行目のIDSTREAM句が、前回の出力時との差分情報のみを出力するのに対して、クエリ302の1行目のRSTREAM句は、出力のタイミング毎に、出力指定範囲内のストリームタプル全てのランキング情報を出力することを意味している。図5(b)に、該インタフェースでのランキング計算出力結果を示す。図5(b)のランキング情報保持バッファ(202)の各時刻の状態は図5(a)の場合と同じである。LIMIT句の処理後に、図3(b)に示すクエリ302のRSTREAM句を適用した結果が図5(b)の右側の角丸四角526内に示すストリームデータとなる。以下図5(b)を用いて、ランキング計算結果の出力形式について説明する。時刻t1に{a,50}(505)がランキングに追加されるので、RSTREAM句では{a,50}(527)を出力する。次に時刻t2に{b,10}(506)がランキングに追加されると、RSTREAM句はランキング全体、すなわち{a,50}と{b,10}の2つのストリームデータを出力する(528)。次に時刻t3で{c,30}(507)がランキングに追加されると、{a,50}、{b,10}に加えて{c,30}が出力される(529)。次に、時刻t4で{d,20}(508)がランキングに挿入されると共に、{b,10}(506)がランキングから削除される。この場合、RSTREAM句では、時刻t4に{a,50}、{c,30}、{d,20}を出力する(530)。本処理を実現するためには、処理結果出力時にランキング処理結果出力インタフェース(207)で前回の出力時の出力内容を保持し、該出力内容と、順序・順位生成部(204)で新たに生成されたランキング情報とを組合せて、出力情報を生成すればよい。今回の説明では、RSTREAM句の出力タイミングは、入力となるストリームデータが到来した瞬間としたが、出力生成の負荷、通信コスト削減のために、例えば1秒毎などの一定間隔、入力タプルn個毎、出力タプルm個毎などでも差し支えない。
【0048】
次に、クエリで順位出力指定がある場合(図9のステップ905でYesが選択される場合)の例について、図6のクエリ601および602を用いて説明する。クエリ601では、クエリ301で出力したs.idとs.valに加えて、1行目のRANKING AS rank指定により、その時点での順位情報も加えて出力することが指定されている。また、クエリ601が前回出力した後の差分情報のみを出力するのに対して、クエリ602では、出力タイミング毎にランキング情報を全て出力する。
【0049】
最初に、順位出力指定を含む場合のランキング計算方法について、図7を用いて説明する。図7の左側の角丸四角(1502)は、ウィンドウ演算“[Partition By s.id Rows 1]”の処理結果を格納したストリームタプル保持バッファの各時刻での状態を示しており、図4と同じである。各時刻の状態に対して、順位出力指定を含むランキング計算の方法を説明する。図7の凡例702に示すように、楕円で囲まれた2つの値の組は{id,val}の形式のストリームデータを表す。また、凡例703に示すように、角丸四角形で囲まれた3つの値の組は、{rank,id,val}の形式のストリームデータを表す。ここで、rankは出力時のvalの値に基づいた順位である。
【0050】
時刻t1にストリームデータで{a,50}(705)が到来すると、本ストリームタプルはランキングに含まれ、かつその順位は1位であるので、ランキング計算結果は{1,a,50}(712)となる。次に時刻t2にストリームデータ{b、10}(706)が到来すると、本ストリームデータもランキングに含まれるので、{2,b,10}(713)が出力される。時刻t3に{c,30}(707)が到来すると、本ストリームデータもランキングに含まれ、かつそのvalの値30が{b,10}よりも大きいため順位は2位となり、同時に{b,10}の順位は3位となる。そのため、ランキング計算結果からは、{2,b,10}が削除され、{3,b,10}(714)および{2,c,30}(715)が追加される。続いて、時刻t4にストリームデータ{d,20}(708)が到来すると、そのvalの値20が{b,10}のvalの値10よりも大きいので、{3,b,10}がランキング計算結果から削除され、{3,d,20}(716)が計算結果に追加される。次に、時刻t5でストリームデータ{e,40}(709)が到来すると、そのvalの値40は現在ランキング計算結果に含まれている{c,30}および{d,20}よりも大きく、順位は2位となるため{2,e,40}(718)がランキング計算結果に含まれる。同時に、{3,d,20}がランキング計算結果から削除され、かつ{c,30}の順位が2位から3位に変化するため、{2,c,30}が削除され、{3,c,30}(717)が追加される。時刻t6、t7にそれぞれ{e,15}(710)および{a,45}(711)が到来する場合も同様である。これらのランキング計算処理は、図2の順序・順位生成部(204)で実行され、各時刻でのランキング計算処理結果はランキング情報保持バッファ(202)に格納される。計算の好適な実施方法は、図9のフローチャートでは、ランキング情報保持バッファメンテナンス(903)までは共通である。次に、順序出力指定があるかないかをチェックし(905)、順序出力指定がある場合(905でYesが選択された場合)には処理結果タプルの順位情報カラム追加処理を実施する(906)。順位情報追加処理は、ランキング情報処理バッファ(202)を利用する。前述したように、好適な実施例では、ランキング情報保持バッファでは、追加されたストリームタプルを、順序付けが指定されたカラムの値の順序関係を保持しながら管理する。例えば、クエリ601の場合には、クエリ301の場合と同様に、順序付けの対象となるカラムはs.valであるので、ランキング情報保持バッファ内でのデータ構造としては、図2の203に示すようなテーブル形式や、図13のs.valの値をキーにした二分探索木が実施の方法として挙げられる。順位情報の追加処理では、順位情報追加対象のストリームカラムがs.valをキーにした場合何番目にあるかを計算し、該順位をクエリで指定されたカラムの位置に追加する。例えば、クエリ601の場合には、SELECT句の最初のカラムに“RANKING AS rank”指定があるため、一番目のカラムに順位情報を含めて出力する。
【0051】
クエリ601では、最終的な出力形式として、IDSTREAM句が指定されている。クエリ301を用いて説明したように、IDSTREAM句は、ランキング計算の結果、ランキングに追加されたストリームデータを増加分として、ランキングから削除されたストリームデータを減少分として出力するインタフェースである。図8(a)では、IDSTREAM句(804)によって処理された後のストリームデータを図の右側(819)に示した。時刻t1に{a,50}(805)が到来した場合、出力カラムの先頭に前記順序・順位生成部で計算した順位情報をクエリで指定された1番目のカラムに追加して出力する。{a,50}が到来したときには、ストリームデータは1つしかなく、その順位は1位となるので、{1,a,50}(811)を出力する。次に時刻t2に{b,10}(806)が到来すると、その順位は2位となるので、{2,b,10}(812)を出力する。時刻t3に{c,30}(807)が到来すると、そのvalの値30は{a,50}のvalの値50よりは小さく、{b,10}のvalの値10よりは大きいため、その順位は2位となる。そのため、時刻t3では、{3,b,10}(813)および{2,c,30}(814)が増加分として出力されると共に、{2,b,10}(815)が減少分として出力される。図5で示したクエリ301の例では、{c,30}によりランキング出力に含まれる集合自体は変化しなかったため、増加分として{c,30}のみを出力した(515)が、図8のクエリ601の例では{c,30}の到来によって順位が変化するため、増加分、減少分を合わせて3つのストリームデータが出力される。同様にして、時刻t5およびt6では順位の変化に対応して、それぞれ4個(820)、(821)となり、クエリ301の場合よりも出力するストリームタプル数が増加している。クエリ601では、最終的な出力形式として、前記IDSTREAM句が指定されているため、増減分のストリームデータを出力しているが、順位出力指定がない場合と同様に、順位出力指定がある場合も各瞬間のランキングの全体を出力する要求もある。クエリ602がその例である。クエリ601のIDSTREAMのかわりにRSTREAMを指定する(829)ことによって、出力時点でのランキング計算結果全体を出力する。図8(b)はクエリ602の実行結果を示している。時刻t1〜t7のそれぞれの出力を822〜828に示した。
【0052】
以上の実施例では、ランキングの指定は降順でその開始順位は1位のみを示したが、ランキングの指定は昇順でも差し支えない。また、ランキング開始順位は任意の整数値での指定が可能である。例えば、図11のクエリ1101はストリームsから、s.idとs.valの値の組を、s.idの値でグルーピングしてそれぞれのs.valの値の最新の1件を保持し、開始順位10位からs.valの値の昇順に3件を出力することを示している。図3のクエリ301との違いは、3行目のOFFSET句とASC指定であり、前者が開始順位の指定、後者が昇順の指定である。OFFSET指定がある場合には、図9のランキング処理の受け取ったタプルがランキングに影響するか否かのチェック(904)は、受け取ったストリームタプルが、OFFSET句で指定された開始順位から、LIMIT句で指定された出力指定範囲に影響するか否かをチェックすればよい。ランキング情報の保持、管理に関しては、図2に示したランキング処理モジュール(116)でOFFSET指定なしの場合と同様に処理できる。
さらに、上述の実施例ではランキング付け対象のカラムが明示的にシステム投入されるが、ランキング付け対象のカラムを自動的に決定するシステムにも本発明は適用可能である。
【図面の簡単な説明】
【0053】
【図1】本発明におけるストリームデータ処理システムの構成を示す図。
【図2】本発明におけるランキング処理モジュールの構成を示す図。
【図3】本発明におけるランキング指定を含むクエリ(順位出力指定含まず)の例。
【図4】本発明におけるランキング計算の計算内容(順位出力指定含まず)を示す図。
【図5】本発明におけるランキング計算結果の出力結果(順位出力指定含まず)を示す図。
【図6】本発明におけるランキング指定を含むクエリ(順位出力指定含む)の例。
【図7】本発明におけるランキング計算の計算内容(順位出力指定含む)を示す図。
【図8】本発明におけるランキング計算結果の出力結果(順位出力指定含む)を示す図。
【図9】本発明におけるランキング処理手順を示すフローチャート。
【図10】本発明におけるランキング情報保持バッファメンテナンス処理手順を示すフローチャート。
【図11】本発明におけるランキング指定を含むクエリ(オフセット指定含む)の例。
【図12】クエリ処理言語CQLによるクエリ記述例。
【図13】本発明におけるランキング情報の二分探索木による表現の例。
【図14】本発明におけるランキング情報保持バッファ内のランキング情報保持テーブルの変化の様子を示す図。
【図15】本発明におけるウィンドウマネージャの構成を示す図。
【図16】本発明におけるクエリ処理エンジンの計算機上での実現例を示す図。
【図17】本発明におけるランキング計算方法を示すシーケンス図。
【図18】本発明におけるランキング情報保持バッファへのストリームタプル追加処理方法を示すフローチャート。
【図19】本発明におけるランキング情報保持バッファからのストリームタプル削除処理方法を示すフローチャート。
【符号の説明】
【0054】
115…ストリームデータ処理システム
107、121…ネットワーク
113…クエリ処理エンジン
116、…ランキング処理モジュール
202…ランキング情報保持バッファ
203…ランキング情報保持テーブル
204…順序・順位生成部
206…ストリームタプル受付インタフェース
207…ランキング処理結果出力インタフェース
208…順位管理インデックス
116…ランキング処理モジュール
117…メモリマネージャ
126…ウィンドウマネージャ
1502…ストリームタプル保持バッファ
1504…生存期間決定部
1505…ストリームデータ受付インタフェース
1506…差分情報生成部
301、302、601、602、1101、1201…クエリ
1601…ストリームデータ処理サーバ
1602…通信インタフェース
1603…CPU
1604…メモリ
1605…I/Oインタフェース
1606…ストレージ装置
【技術分野】
【0001】
本発明は、時々刻々と到来するストリームデータをリアルタイムに処理するストリームデータ処理システムにおける、ランキング計算方法、および該計算方法を有するストリームデータ処理システムに関する。
【背景技術】
【0002】
従来、企業情報システムのデータ管理の中心にはデータベース管理システム(以下、DBMSとする)が位置づけられていた。DBMSは、処理対象のデータをストレージに格納し、格納したデータに対してトランザクション処理に代表される高信頼な処理を実現している。これに対して、時々刻々と到着する大量のデータをリアルタイム処理するデータ処理システムに対する要求が高まっている。例えば、株取引を支援するファイナンシャルアプリケーションを考えた場合、株価の変動にいかに迅速に反応できるかがシステムの最重要の課題の一つである。従来のDBMSのように株式のデータを一旦記憶装置に格納してから、該格納データに関して検索を行うようなシステムでは、データの格納とそれに続く検索処理が株価変動のスピードに追いつくことができず、ビジネスチャンスを逃してしまうことになりかねない。例えば、米国特許5495600号(特許文献1)では、記憶されているクエリが周期的に実行される機構を開示しているが、この機構においても前述の株価のようにデータが入ってきた瞬間にクエリを実行することが重要となる。すなわちクエリの実行周期とデータ処理のタイミングのずれが許容できないので、前記のファイナンシャルアプリケーションに代表されるリアルタイムデータ処理には適用が困難であった。Java(R)に代表されるプログラミング言語を用いて、各種のリアルタイムアプリケーションを個別に作りこむアプローチは、開発期間の長期化、開発コストの高騰、該アプリケーションを利用する業務の変化への迅速な対応が難しいなどの問題があり、汎用のリアルタイムデータ処理機構が求められるようになっていた。
【0003】
このようなリアルタイムデータ処理に好適なデータ処理システムとして、ストリームデータ処理システムが提案されている。例えば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 (非特許文献1)にストリームデータ処理システムSTREAMが開示されている。
【0004】
ストリームデータ処理システムでは、従来のDBMSとは異なり、まずクエリ(問合せ)をシステムに登録し、データの到来と共に該クエリが継続的に実行される。ここでのストリームデータとは、映像ストリームのような論理的に継続する一つの大きなデータではなく、ファイナンシャルアプリケーションにおける株価配信データ、小売業でのPOSデータ、交通情報システムにおけるプローブカーデータ、計算機システム管理におけるエラーログ、センサやRFIDなどのユビキタスデバイスから発生するセンシングデータなど、比較的小さな論理的には独立した大量の時系列データである。ストリームデータは継続してシステムに到着し続けるため、その終わりを待ってから処理を開始するのでは実時間での処理は不可能である。また、システムに到着したデータは、データ処理の負荷に影響されることなく、その到着順を守って処理する必要がある。前記STREAMでは、システムに到来し続けるストリームデータを、最新10分間などの時間の幅、もしくは最新1000件などの個数の幅を指定してストリームデータの一部を切り取りながらリアルタイムの処理を実現するため、スライディングウィンドウ(以下単にウィンドウと呼ぶ)と呼ばれる概念を導入している。ウィンドウ指定を含むクエリの記述言語の好適な例としては非特許文献1に開示されているCQL(Continuous Query Language)をあげることができる。CQLは、DBMSで広く用いられているSQL(Structured Query Language)のFROM句に、ストリーム名に続いて括弧を用いることにより、ウィンドウを指定する拡張が施されている。SQLに関しては、C. J. Date、 Hugh Darwen著:“A Guide to SQL Standard (4th Edition)”、Addison−Wesley Professional; 4 edition (November 8、 1996)、ISBN: 0201964260(非特許文献2)が詳しい。
【0005】
図12のクエリ1201は非特許文献1の2.1節に示されているCQLによるクエリの例である。該クエリでは、あるWebプロキシサーバにおいて、ドメインstanford.eduからの現時点から過去1日分のアクセスの総数を計算する。Requestsは前記Webプロキシサーバに到来し続けるWebアクセスデータであり、従来のDBMSで取り扱うテーブル(表)のような静止化されたデータではなく、切れ目のないストリームデータとなる。そのため、アクセスの総数を計算は、ウィンドウ指定“[Range 1 Day Preceding]”による、ストリームデータのどの部分を対象とするかの指定なしでは、不可能となる。ウィンドウによって切り取られたストリームデータはメモリ上に保持され、クエリ処理に使用される。代表的なウィンドウの指定方法には、ウィンドウの幅を時間で指定するRangeウィンドウと、ウィンドウの幅をデータ数で指定するRowウィンドウがある。例えば、Rangeウィンドウを用いて、[Range 10 minutes]とすると、最新の10分間分がクエリ処理の対象となり、Rowウィンドウを用いて[Rows 10]とすると、最新の10件がクエリ処理の対象となる。
【0006】
ストリームデータ処理システムは、ファイナンシャルアプリケーション、小売業での売り上げモニタリング、交通情報システム、計算機システム管理に代表される、リアルタイム処理が必要とされる応用に対する適用が期待されている。以下、リアルタイム処理を必要とする応用をリアルタイムアプリケーションと呼ぶ。リアルタイムアプリケーションにおいては、膨大な情報から瞬時に重要度の高い情報を取り出すために、ある瞬間でのランキング計算が必要とされる場合が多い。例えばファイナンシャルアプリケーションでは、株価の値動きや取引量が大きい株に注目するためのランキング情報が重要であり、小売業の売り上げモニタリングでは、店舗別、商品別など様々な角度からの売上高、売上数のランキング情報が注目される。また、交通情報システムでは、渋滞度が高い、通行量が多い地区に注目するためのランキング情報が必要となり、計算機管理においても、重大なエラーの数、アクセス数など、管理対象の優先度をつけるためのランキング情報が必須となる。
【0007】
ランキング計算対象のデータが静止化されている場合、すなわちランキング付けしようとするデータが変更されない場合には、該データをランキング付けしようとするキー(以下、ランキングキー)でソーティングし、ソーティング結果の順位に従って、データを出力すればよい。例えば、データベースに格納されている株価の売上高の上位10位のランキング情報を計算する際には、その日の各銘柄別の売上高を集計し、売上高をランキングキーとして集計した結果をソートし、上位の10件を選択して出力すればよい。ユーザが投入したクエリからランキングキー(前述の例では売上高)を自動的に決定する方法が米国特許7251648号(特許文献2)で開示されている。米国公開特許US2006/0259457号(特許文献3)では、DBMSのクエリで最初のn行のみを出力する指定があった場合に、クエリ処理時に条件を追加することによって余分なデータ処理のコストを削減する方法が開示されている。また、前記SQLでは銘柄別の分類のためのGROUP BY句、売上高の総計を計算するための集計関数SUM、集計値に基づいてソーティングを実行するORDER BY句が準備されている。これらを組合せることで、データベースに格納されている一日の株取引データから売上高の高い順(もしくは低い順)のランキング計算結果を生成することができる。
【0008】
しかしながら、前記リアルタイムアプリケーションにおいては、新しいデータ(ストリームデータ)が次々に到来し続けるため、その静止化は困難である。DBMSを用いて、リアルタイムアプリケーション向けのランキング計算を実施しようとする場合、ストリームデータが到来するごとに該データをDBMSに格納し、DBMSで前記の分類、集計、ソーティング処理を行う必要がある。これらの処理では、基本的にデータベース内の大量のデータにアクセスする必要があり、処理コストが高い。そのため、リアルタイムアプリケーションから発生するストリームデータが高速で到来する場合、すなわちストリームデータの到来する時間間隔が短い場合には、該時間間隔内での処理の実行は不可能であり、DBMSを用いたリアルタイムアプリケーション向けのランキング計算の実現は困難であった。
【0009】
前述したように、ストリームデータ処理システムでは、無限に続くストリームデータから、処理の対象を前述のウィンドウで切り取って処理している。処理対象のデータは、ウィンドウ中に存在するデータのみであり、ウィンドウから押し出されたデータはランキング処理の対象から削除する必要がある。ウィンドウからデータが押し出されるタイミングは、ウィンドウの指定方法が時間である(前述のRangeウィンドウ)か、件数である(前述のRowウィンドウ)かによって異なる。件数指定の場合、処理対象のデータがウィンドウから押し出される時刻は、該データがウィンドウに入った瞬間には決定できず、後続のストリームデータによって決定される。一方、時間指定の場合には、処理対象のデータがウィンドウから押し出される時刻は、該データがウィンドウに入った瞬間に決定できるが、その消去タイミング(ウィンドウから押し出されるタイミング)は、後続のデータとは同期しない。
【0010】
ランキング計算においては、ウィンドウへのストリームデータの挿入の都度、ランキング計算を実行してランキング情報の整合性を保つ必要がある。それに加えて、ウィンドウからのデータの消滅の際にも同様にランキング情報の整合性を保つことが必要となる。とくにウィンドウが時間指定の場合には、後続のデータ到来とは同期しないウィンドウからのデータの消滅タイミングを考慮してランキング計算を実行する必要がある。
【0011】
さらに、ランキング計算では、処理の効率化によって、ストリームデータ処理システム利用の重要な目的の一つであるリアルタイム処理の制約を守る必要がある。加えて、ストリームデータ処理システムは汎用のデータ処理基盤であるため、ランキング計算結果の差分情報のみを渡す、ランキング計算結果全体を渡す、ランキング計算結果に順位情報を含めるなど利用するアプリケーションの要求に応えるための汎用のインタフェース、そのインタフェースに従う処理を実現する機構を準備する必要がある。以上の条件を満足するストリームデータ処理システム向けのランキング計算方法はこれまで実現されていなかった。
【0012】
【特許文献1】米国特許5495600号
【特許文献2】米国特許7251648号
【特許文献3】米国公開特許US2006/0259457号
【特許文献4】特開2006−338432号
【非特許文献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
【発明の開示】
【発明が解決しようとする課題】
【0013】
リアルタイムアプリケーションで必要となるランキング計算を実現するためにストリームデータ処理システムを用いる場合、ウィンドウへのストリームデータの挿入に加えて、該ストリームデータの消滅の際にも整合性を保つランキング処理の実現が必要となる。また、リアルタイムと呼べるランキング処理結果を得るには、処理対象ウィンドウの内部データの時々刻々の変化の度に実行するランキング更新の処理を高速化する必要がある。
【0014】
本発明の目的は、処理対象ウィンドウの内部データの時々刻々の変化の度に行なうランキング更新の演算を高速化でき、しかも処理結果の整合性を保つランキング処理方法及びシステムを提供するにある実現することにある。
【課題を解決するための手段】
【0015】
本願で開示される発明のうち、代表的な発明の概要は以下の通りである。すなわち、代表的実施態様ではウィンドウへのストリームデータの挿入、削除の度毎に、すなわちあるストリームタプルの生存期間の開始、及びあるストリームタプルの生存期間の終了の度毎に、生存期間にあるストリームタプルの範囲内でそれらのランキングを生成・更新し、かつ出力指定された順位の範囲を越えて、生存期間にあるストリームタプルの範囲内でバッファに保存するストリームデータ処理を採用する。
【0016】
ある時点でのランキング情報の出力だけから言えば、ランキング情報の保存は出力指定された順位のストリームタプルの範囲で行なえば一見充分であるかに思われる。しかしながら、新たなストリームタプルの受け付けに起因して、ウィンドウ内のストリームタプルへの挿入および削除が生じ、その挿入、削除の度にランキングそのものが変動する。したがって、整合性のあるランキング計算を継続して実行するには、その挿入・削除の度毎にランキング情報の更新が必要であり、かつ出力指定された順位の範囲を越えて、生存期間にあるストリームタプルの範囲内のストリームタプル及びそれらのランキング情報を保存する必要がある。
【0017】
さらに上記代表的実施態様は、受け付けたストリームタプルをランキング計算の処理対象としてウィンドウへ挿入し、該ストリームタプルのウィンドウ内での生存期間を決定し、生存期間の終了時には上記ウィンドウからの削除を行なうウィンドウマネージャと、ランキング計算を行うランキング処理モジュールとの2段階の処理機構を持ち、上記ウィンドウマネージャは、ウィンドウ内のストリームタプル全体の情報ではなく、刻々の変化部分を示すウィンドウ差分情報を上記ランキング処理モジュールに伝達し、上記ランキング処理モジュールは、伝達された上記ウィンドウ差分情報と、過去にランキング計算を行って保存した保存情報とを用いてランキングの更新を行う構成とした点に特徴を有する。具体的には当該ストリームタプルがウィンドウに挿入されたことを示す符号を付加したストリームタプル、および当該ストリームタプルがウィンドウから削除されたことを示す符号を付加したストリームタプルが上記のウィンドウ差分情報としてランキング処理モジュールに伝達され、ランキング処理モジュールでは該差分情報に基づいてランキング情報を更新し、ランキング情報保持バッファに保存するとともに、指定された形式でランキング出力情報を出力する。
【発明の効果】
【0018】
本発明を用いることにより、時々刻々と到来する大量データをリアルタイム処理するストリームデータ処理システムにおいて、入力されるストリームデータとの整合性を保ち、かつ高速、高効率のランキング計算が実現できる。本ランキング計算方法の適用により、リアルタイムアプリケーションで共通に利用可能なデータ処理基盤が提供できる。
【発明を実施するための最良の形態】
【0019】
図1および図16に、本発明のストリームデータ処理システムの好適な実現例を示す。アプリケーション1(102)を実行するクライアント計算機101、アプリケーション2(104)を実行するクライアント計算機103は、ネットワーク107を介してストリームデータ処理システム115に接続されている。ネットワーク107は、イーサネット、光ファイバなどで接続されるローカルエリアネットワーク(LAN)、もしくはLANよりも低速なインターネットを含んだワイドエリアネットワーク(WAN)でも差し支えない。また、クライアント計算機はパーソナルコンピュータ、ブレード型の計算機システムなどの任意のコンピュータシステムでよい。
【0020】
本実施例のストリームデータ処理システムが稼動する計算機をストリームデータ処理サーバと呼ぶ。図16に示すように、ストリームデータ処理サーバ1601は、イーサネットアダプタなどの通信インタフェース1602、CPU1603、メモリ1604、およびI/Oインタフェース1605を備えた計算機であり、ブレード型計算機システム、PCサーバなどの任意のコンピュータシステムでよい。ストリームデータ処理サーバでは、前記通信インタフェースを介して前記クライアント計算機、後述するデータソースにアクセスする。ストリームデータ処理サーバで、ストリームデータ処理結果、処理の中間結果、システム動作に必要な設定データを不揮発性のストレージに格納する場合には、ストリームデータ処理サーバに接続したストレージ装置1606を用いることができる。ストレージ装置1606は、ストリームデータ処理サーバのI/Oインタフェースを介して直接接続されるか、もしくは通信インタフェースを介してネットワーク接続される。
【0021】
ストリームデータ処理システム115は、前記ストリームデータ処理サーバ1601の上で動作する。図1にストリームデータ処理システムの主要構成要素を示す。アプリケーションは、まずストリームデータ処理システムにクエリを登録する(105)。登録されたクエリはクエリ管理テーブル(112)に格納される。クエリ登録の詳細な手順、ストリームデータ処理システム内部のデータの格納方法、格納形式、クエリを受け付けた後の解析方法、最適化方法、システムへの登録方法、ストリームデータ処理システムへのストリームの登録方法、システム内のデータ保持方法については、特開2006−338432号「ストリームデータ処理システムのクエリ処理方法」(特許文献4)に、その好適な実施の方法が開示されている。クエリ管理テーブルは、ストリームデータ処理サーバ上のメモリ1604に保持するのでも、ストリームデータ処理サーバに接続されているストレージ装置1606に格納するのでも差し支えない。
【0022】
ストリームデータ処理システムには、一つ以上のストリームデータソースであるストリームデータソース1(122)〜ストリームデータソースN(123)からネットワーク121を介して時々刻々と大量のデータが到来する。このデータをストリームデータと呼ぶ。ストリームデータの好適な例としては、ファイナンシャルアプリケーションにおける株価配信情報、小売業でのPOSデータ、交通情報システムにおけるプローブカー情報、計算機システム管理におけるエラーログなどが挙げられる。ストリームデータ処理システムでは、通信インタフェース1602を介してデータフローマネージャ119が受け付けたストリームデータをクエリ処理エンジン113にフィードする。
【0023】
前述したように、継続して到来する比較的小さな論理的には独立した大量の時系列データであるストリームデータを取り扱うために、ストリームデータ処理システムではウィンドウを用いる。図1のウィンドウマネージャ126は、到来するストリームデータに対して、クエリで指定されたウィンドウ演算を適用してストリームタプルを生成し、ストリームタプルのシステム内での生存期間を設定する。ストリームデータがウィンドウに挿入された時が生存期間の開始時刻、そしてウィンドウから該ストリームデータが削除される時が生存期間の終了時刻に相当する。
【0024】
図15を用いて、ウィンドウマネージャの構成と動作内容を説明する。ウィンドウマネージャ126は、ストリームデータ受付インタフェース1505、ストリームタプル保持バッファ1502、生存期間決定部1504、および差分情報生成部1506から構成される。ストリームデータ受付インタフェースは、受け付けたストリームデータの構成要素であるストリームタプルを、ストリームタプル保持バッファ1502に格納するとともに、生存期間決定部1506に格納したことを伝達する。生存期間決定部1506は前記ウィンドウ演算により各ストリームタプルの生存期間を決定し、生存期間が終了するストリームプルをストリーム保存バッファ1502から消去する。差分情報生成部1504は、ストリームタプルが該ストリームタプル保持バッファに格納されたタイミングで、プラスタプルを生成し、差分情報として出力する(1508)。同様に、ストリームタプルがストリームタプル保持バッファから消去されるタイミング(ストリームタプルの生存期間が終了するタイミング)でマイナスタプルを生成し、同様に差分情報として出力する(1508)。
【0025】
図16に示すように、ストリームタプル保持バッファ1502は、クエリ処理エンジン113内のメモリマネージャ117によって割り当てられるメモリ上に配置される。該メモリは、ストリームデータ処理サーバ1601上のメモリ1604、もしくは要求される性能要件、信頼性要件に応じて、ストリームデータ処理サーバに接続されたストレージ装置1606、もしくはストリームデータ処理サーバとネットワークで接続される、ストリームデータ処理サーバと同様の計算機資源を保持するサーバ計算機(図1のブロック133)上のメモリを利用してもよい。
【0026】
次に、図2を用いてランキング処理モジュールの構成を説明する。ランキング処理モジュール116はストリームタプル受付インタフェース206、順序・順位生成部204、ランキング情報保持バッファ202、ランキング情報保持テーブル203、順位管理インデックス208、およびランキング処理結果出力インタフェース207から構成される。図16に示すように、ランキング処理モジュールは、クエリ処理エンジン113内のメモリマネージャ117によって割り当てられるメモリ上に配置される。該メモリは、ストリームデータ処理サーバ1601上のメモリ1604、もしくは要求される性能要件、信頼性要件に応じて、ストリームデータ処理サーバに接続されたストレージ装置1606、もしくはストリームデータ処理サーバとネットワークで接続される、ストリームデータ処理サーバと同様の計算機資源を保持するサーバ計算機(図1のブロック133)上のメモリを利用してもよい。
【0027】
図17に本発明のストリームデータ処理における、ランキング情報生成のシーケンスを示す。前記ウィンドウマネージャ126は外部データソースから到来するストリームデータを受け付け(1701)、差分情報(符号付ストリームタプル)を生成する(1702)。ランキング処理モジュール116では、ストリームタプル受付インタフェース206が、前記ウィンドウマネージャから出力された差分情報(符号付ストリームタプル)を受け取り、順序・順位生成部204に転送する。順序・順位生成部では、ランキング情報保持バッファ202を参照しながら、受け取った符号付ストリームタプルをランキングバッファの適切な位置に追加、もしくはランキングバッファ内の適切な位置のランキング情報を削除し、前回の出力時とのランキング情報の差分(ランキング差分情報)を生成し(1705)、該ランキング差分情報をランキング処理結果出力インタフェース207に転送する(1706)。ランキング処理結果出力インタフェースでは、前記クエリによって指定されているデータの出力形式に従ってランキング情報を出力する。
【0028】
以下、具体的なクエリ、ストリームデータに対する、本実施例のランキング計算方法を説明する。図3(a)に示すクエリ301は、順位出力(順位そのものを出力すること)を指定しないランキング処理を命じるクエリである。1行目のSELECT句はs.idとs.valの値の組を出力対象とすることを、2行目のFROM句はストリームsを対象とすることを、同じく2行目のPartition By句はs.idの値でグルーピングしてそれぞれのs.valの値の最新の1件を保持することを、また3行目のLIMIT句は、s.valの値の降順に3件を出力すること意味する。本実施例のストリームデータ処理システムでは、予め入力されるクエリにて、ランキング計算の対象となるカラムと、ランキング付けの方向(昇順/降順)と、ランキング計算結果を出力する個数と、計算結果に順位情報を付与するか否かが指定される。クエリ301では、3行目のLIMIT句が、s.valの値の降順に3件を出力するランキング指定である。さらに、1行目のIDSTREAM句は、本クエリは出力として前回の出力時との差分情報のみを出力することを意味している。
【0029】
図4および図5(a)を用いて、クエリ301が設定されたストリームデータ処理システムに対して、ストリームデータが到来した際の処理内容を説明する。クエリ301がストリームデータ処理システム115に登録された場合、例えば特許文献4に示された方法でクエリ解析、クエリ最適化、クエリ生成が実行され、クエリ処理エンジンにクエリの実行形式が登録される。クエリ301はランキング計算指定を含むため、実行形式のクエリの実行時には、クエリ処理エンジン113内のランキング処理モジュール116でランキング計算が実行される。特許文献1で述べられているように、ストリームデータ処理システムでは、クエリは登録された後システム上で動作し続け、一つ一つのストリームデータがシステムに到来するたびに、その状態が変化する。
【0030】
クエリ301が登録されている状況で、図4に示すストリームデータが到来したことを仮定する。図4および図5(a)では、時刻の経過を縦軸にとり、時刻の経過と共にシステムに到来したストリームデータが各処理モジュールで処理される様子を模式的に表している。凡例402および502に示すように、本実施例では到来するストリームデータは{id,val}の形式と仮定しており、これを楕円で表現している。t1〜t7(401)は、405〜411の各ストリームデータがストリームデータ処理システムに到来する時刻を表している。例えば、ストリームデータ{a,50}(405)、及びストリームデータ{b,10}(406)はそれぞれ、時刻t1、t2にストリームデータ処理システムに到来することを示している。図4の横軸は到来したストリームデータが処理される位置、および生成されるデータを表している。さらに、図4の左側の角丸四角(1502)は、システムに到来した前記ストリームデータに対して、前記ウィンドウマネージャ(126)でウィンドウ演算“[Partition By s.id Rows 1]”(403)を適用した結果を格納した、ストリーム保持バッファの各時刻での状態を示している。また、右側の角丸四角(202)は、ウィンドウマネージャから到来するストリームタプルに対して、前記ランキング処理モジュール(116)内の順序・順位生成部(204)における、ランキング計算指定句“LIMIT 3 By s.val DESC”(404)の適用した結果を格納した、ランキング情報保持バッファの各時刻での状態を示している。
【0031】
前述したように、ウィンドウマネージャ126は、到来するストリームデータに対して、クエリで指定されたウィンドウ演算を適用してストリームタプルを生成し、ストリームタプルのシステム内での生存期間を設定する。図4の例では、生存期間の開始時刻は黒丸(426)、終了時刻は白丸427で表現されており、該ウィンドウ演算により、ストリームタプル{a,50}(405)の生存期間は時刻t1に始まり、時刻t7に終わることを示している。本実現例においては、ストリームデータの生存期間の開始時刻には、システム内部で前記のストリームデータに増加分を表す符号を付けたタプル(以下プラスタプル)が生成される。また、ウィンドウからストリームデータが削除された場合、先に出力されたプラスタプルへの参照を持つ、減少分を表す符号を付けたタプル(以下マイナスタプル)が生成される。以上の処理は、前記ウィンドウマネージャで実行される。例えば、図4の場合、時刻t1にはストリームデータ{a,50}(405)に対応するプラスタプル430が生成され、時刻t7に該ストリームデータのマイナスタプル431が生成されることとなる。ウィンドウ演算に続く、後段のクエリ処理は、本プラスタプルおよびマイナスタプルが到着したタイミングで該プラスタプルとマイナスタプルに起因して生成される差分情報に関して実行される。なおプラスタプル、マイナスタプルそのものの概念は前述の非特許文献1に紹介されている。
【0032】
クエリ301では、到来するストリームデータはまずウィンドウ演算“[Partition By s.id Rows 1]”(403)により、s.idの値毎に最新1個のみが保持される。具体的には、図4で時刻t1にストリームデータ{a,50}(405)が、時刻t2に{b,10}(406)が、時刻t3に{c,30}(407)が、時刻t4に{d,20}(408)が、そして時刻t5に{e,40}(409)がそれぞれ到来する。これら5つのストリームデータはs.idの値が異なるので、それぞれウィンドウに保持される。次に、時刻t6に新たなストリームデータ{e,15}(410)が到来すると、それまでウィンドウに保持されていたs.idの値がeのストリームデータ409はウィンドウから押し出される(削除される)。次に時刻t7に{a,45}(411)が到来すると、同様に{a,50}(405)がウィンドウから削除される。この様子を図示したのが図4の中央部分429である。例えば、ストリームデータ{a,50}(412)は時刻t1に到来し、時刻t7に{a,45}(418)が到来するまでウィンドウに保持される。この時、ストリームデータ{a、50}の生存期間はt1からt7(但し時刻t7は含まない)と表現する。図4の例では、生存期間の開始時刻は黒丸(426)、終了時刻は白丸(427)で、生存期間中は実線で表している。同様にして、{e,40}(417)の生存期間はt5からt6となる。一方、{b,10}(413)、{c,30}(414)、{d,20}(415)、{e,15}(417)、および{a,45}(418)については、時刻t7の時点では終了時刻が決定していないため、実線で表現されている。
【0033】
以上のように生存期間を持つストリームデータから、どのようにランキング情報を生成するかを、同じく図4を用いて説明する。図4の右側432に、ランキング計算指定句“LIMIT 3 By s.val DESC”(404)による処理結果を示す。前述したように、本ランキング指定句の意味は、s.valの値で降順に3件を抽出することである。今、ストリームデータ{a,50}(419)、{b,10}(420)、{c,30}(421)がそれぞれ時刻t1、t2、t3に到来する。これら3つのストリームデータは上位3件ランキング情報としてそれぞれ出力される。次に、時刻t4に{d,20}(422)が到来すると、そのs.valの値20は、これまでに保持されている{b、10}の10よりも大きいため、{b,10}が上位3件のランキング情報から削除されてその生存期間がt4で終了し(428)、{d,20}がランキング計算結果として出力される。次に時刻t5に{e,40}(423)が到来すると、そのs.valの値は40となるため、上位3件に含まれるため、ランキング情報として出力される。そしてこれまで上位3件に保持されていた中で最も値の小さい{d,20}がランキングから削除される。ところが、時刻t6には、前述したように{e、15}(417)の到来により{e,40}(416)がウィンドウから削除されるため、再び{d,20}(424)が上位3件に復活することになり、再びランキング計算結果として出力される。時刻t7には{a,50}(412)が{a、45}(418)に置き換わり、{a,45}のs.valの値45は上位3件に含まれるため、{a,45}(425)がランキング結果として出力される。
【0034】
以上のランキング計算の好適な実施方法を図2、図9、図10、図18、および図19を用いて説明する。ランキング処理モジュール116のストリームタプル受付インタフェース206が差分情報であるストリームタプルを受け取る(902)。すると、順序・順位生成部204はランキング情報保持バッファ202のバッファメンテナンスを実行する(903)。バッファメンテナンス処理の処理方法について、図2および図10を用いて説明する。順序・順位生成部204は、ストリームタプルを受け取ると、該ストリームタプルの符号がプラスであるかマイナスであるかをチェックする(1002)。符号がプラスの場合(1002でYesが選択された場合)、ランキング情報保持バッファ202のランキング情報保持テーブル203に受け取ったストリームタプルを追加し(1003)、ランキング情報保持バッファメンテナンス処理を終了する。ランキング情報保持バッファへのストリームタプル追加処理の詳細を図18のフローチャートを用いて説明する。順位・順序生成部では、追加対象のストリームタプル(符号がプラスのストリームタプル)を受け取ると、追加先のランキング情報保持テーブル203に順位管理インデックス208が付与されているかどうかをチェックする(1802)。順位管理インデックスは、順位付けの対象のカラムをキーとしたB+treeインデックスやハッシュインデックスで差し支えない。順位管理インデックスが存在する場合(ステップ1802でYesが選択された場合)には、順位・順序生成部は該インデックスを利用して追加対象のストリームタプルの、ランキング情報保持テーブルへの挿入位置を決定する(1803)。該インデックスが存在しない場合(ステップ1802でNoが選択された場合)には、順位・順序生成部はランキング情報保持テーブルを検索し、追加対象のストリームタプルの、ランキング情報保持テーブルへの挿入位置を決定する(1804)。挿入位置を決定した後、順位・順序生成部は追加対象のストリームタプルをランキング情報保持テーブルに挿入し(1805)、順位管理インデックスが存在する場合(ステップ1806でYesが選択された場合)には、該インデックスも更新してランキング情報保持バッファへのストリームタプル追加処理を終了する(1808)。
【0035】
好適なランキング情報保持バッファの実現形態では、追加されたストリームタプルの、ランキング指定されたカラムの値での順序関係が保持される。ストリームタプルの追加時に順序関係を保持しておく理由は、遅延処理により一括して順序関係を作成する方法では、リアルタイム処理アプリケーションの要求である即時の結果出力が困難であるためである。例えば、図3のクエリ301の場合には、順序付けの対象となるカラム(前述のランキングキー)はs.valであるので、図2のランキング情報保持バッファ中のランキング情報保持テーブル(203)ではs.valの降順に順位情報とストリームタプルを保持している。
【0036】
図10に戻って、受け取ったストリームタプルの符号がマイナスの場合(図10の1002でNoが選択された場合)、ランキング情報保持バッファ(202)から該ストリームタプルに対応する、符号がプラスのタプルを削除し(1004)、ランキング情報保持バッファメンテナンス処理を終了する。
【0037】
ランキング情報保持バッファからのストリームタプル削除処理の詳細を図19のフローチャートを用いて説明する。順位・順序生成部では、ランキング情報保持テーブル203に順位管理インデックス208が付与されているかどうかをチェックする(1902)。順位管理インデックスが存在する場合(ステップ1902でYesが選択された場合)には、順位・順序生成部は該インデックスを利用して、ランキング情報保持テーブル中の削除対象のストリームタプルを検索する(1903)。該インデックスが存在しない場合(ステップ1902でNoが選択された場合)には、順位・順序生成部はランキング情報保持テーブルを検索し、削除対象のストリームタプルを決定する(1904)。削除対象のストリームタプルが決定されると、順位・順序生成部では該ストリームタプルの削除処理を実行する(1905)。順位管理インデックスが存在する場合(ステップ1906でYesが選択された場合)には、順位管理インデックスも更新し、ランキング情報保持バッファからのストリームタプル削除処理を終了する。
【0038】
ここで図14を用いて、図3(a)のクエリを登録したストリームデータ処理システムに対して、図4で示したタイムチャートでストリームが到来する場合の、ランキング情報保持テーブルに保持されるランキング情報の変化の様子を説明する。図14では、左側のt0(1416)、t1(1404)、…、t7が時刻を、中央の符号付きの楕円(1405、1407、…)がウィンドウマネージャで生成された差分情報(符号付ストリームタプル)を、そして右側のテーブル(1417、1406、…、1415)がランキング情報保持テーブルに保持されるランキング情報を表す。便宜上時刻t1以前のt0にはランキング情報は存在しなかったと仮定する。
【0039】
時刻t1(1404)に、プラスの符号を持つストリームタプル{a,50}(1405)が到来すると、ランキング情報保持テーブルに該ストリームタプルが登録される(1406)。次に、時刻t2(1418)にプラスの符号を持つストリームタプル{b,10}(1407)が到来すると、その順位付け対象s.valの値である10を、ランキング情報保持テーブルに保持されているストリームタプルのs.valの値50と比較し、挿入位置が{a,50}(1405)の次と決定され、該挿入位置にストリームタプル{b,10}が挿入される(1408)。以下同様に、t3、t4、t5にそれぞれ、{c,30}、{d,20}、{e,40}が到来すると、これらのストリームタプルが順位付け対象のs.valの値の順にソートされて登録される。
【0040】
図4に示すように、時刻t6において{e,15}(408)が到来すると、図3(a)に示した1行指定のRowウィンドウクエリでは{e、40}がウィンドウから削除される(433)。そのため、図14に示すランキング処理モジュール(116)のストリームタプル受付インタフェース206には、マイナス符号の付いたストリームタプル{e,40}(1413)と、プラス符号の付いたストリームタプル{e,15}(1414)が到来する。順序・順位生成部204では、マイナス符号の付いたストリームタプル{e,40}に対応するプラス符号の付いたストリームタプルを検索、決定し(1412の上から2番目)、該ストリームタプルを削除する。そして、プラス符号の付いた新たなストリームタプル{e,15}(1414)の挿入位置を決定し(1415の上から4番目)、ランキング情報保持テーブルに該ストリームタプルを追加する。時刻t7についても同様である。
【0041】
本実施例では、ランキング情報保持バッファ内でのデータ構造がテーブルの場合を示したが、ランキング情報保持バッファ内でのデータ構造の他の好適な実現例としては、例えば図13に示すようなランキングキーをノードとした二分探索木(binary search tree)を挙げることができる。図13では、二分探索木のノード(ランキングキー)を四角1301で、ノードからポイントされるデータ本体(ストリームタプル)を円と楕円の組1302で示した。二分探索木を用いる場合には、ランキングキーをノードとして、あるノードの左側の子およびその全ての子孫ノードのランキングキーの値は、該ノードのランキングキーの値より小さく、右の子およびその全ての子孫ノードの値は該ノードのランキングキーの値と等しいもしくは大きくなるように構成する。図13の角丸四角1303内の二分探索木は、図4の時刻t5の時点でのランキング情報保持バッファが保持するデータの二分探索木での構成の例であり、保持しているデータの内容は図14のランキング情報保持テーブル1412と等しい。二分探索木を用いてランキングキーに基づいた順序を管理することで、前記プラスタプル、および前記マイナスタプル到来時の順序関係の管理を効率化することができる。さらに、ストリームタプルの順序関係を保持して管理するための他の好適なデータ構造としては、多くのDBMSのデータ管理機構で利用されるB+−Treeを利用するのでも差し支えない。
【0042】
ランキング情報保持バッファでは、ユーザに指定されたランキングの出力件数のみでなく、生存期間中のストリームデータに対応する全てのストリームタプルを保持する必要がある。例えば、図3のクエリ301では、ユーザからは上位3件のみを出力するように指示されているが、図4に示すストリームデータの系列がシステムに到来する場合、時刻t4で{d,20}(408)が到来した際に、前記ランキング情報保持バッファから、順位が4位となったストリームデータ{b,10}(406)に対応するストリームタプル433を削除してはならない。その理由は、ストリームデータ処理においては、新しいストリームデータがシステムに到来するときに加えて、ストリームデータの生存期間が終了した際にもランキングが変化するため、現在はユーザが指定した範囲外にあるストリームデータが、他のストリームデータの生存期間の終了によって、再びランキング結果として出力する必要が出てくるためである。例えば、図4では時刻t4で到来し、上位3件に含まれたストリームデータ{d,20}(408)が時刻t5に到来した{e,40}(409)によってランキング外に押し出されてしまっているが、時刻t6に到来した{e,15}(410)によって、{e,40}はウィンドウから消去される(433)ため、{d,20}は再びランキング計算結果に含まれる(424)必要がある。すなわち、ランキング情報保持バッファでは、ユーザに指定されたランキングの出力件数のみでなく、ウィンドウで管理されているストリームデータに対応する全て、すなわち生存期間中のストリームデータに対応する全てのストリームタプルを保持する必要がある。
【0043】
但し、ストリームタプルが到着した瞬間に上位50位以内に含まれていない場合には、該ストリームタプルはランキングの対象としないなどのアプリケーションの特別な条件が存在する場合には、該アプリケーションの条件に従ってランキング情報保持バッファで保持するストリームタプルの数を変更することは可能である。
【0044】
図9に戻って、順序・順位生成部では、受け取ったストリームタプルのバッファメンテナンス処理(903)の結果に基づき、該処理結果がランキングに影響するか否かをチェックする(904)。処理結果がランキングに影響を及ぼす場合とは、受け取ったストリームタプルに基づいたランキング情報保持バッファのメンテナンスの結果、クエリで指定されている範囲の順序に変更がある場合を指す。例えば、図3のクエリ301では、上位3件を出力の範囲に指定しているため、上位3位以内の順序に変更がある場合、処理結果がランキングに影響するか否かの判定(ステップ904)はYesとなる。例えば、図4で示した処理の場合、時刻t4で{d,20}が到来した場合には上位3位以内の順序に変更があるので、Yesの例となる。処理結果がランキングに影響する場合(ステップ904でYesが選択された場合)、順序出力指定があるかないかをチェックする(905)。順序出力指定がある場合(ステップ905でYesが選択された場合)、処理結果タプルへの順位情報カラムを追加して(906)、処理結果タプルを出力し(907)、ランキング処理を終了する(908)。順位出力の指定がない場合(ステップ905でNoが選択された場合)、処理結果タプルを出力し(907)、ランキング処理を終了する(908)。
【0045】
図3のクエリ301の場合には、順位出力の指定はないので、ランキング処理結果出力インタフェースから出力する処理結果タプルは、例えば図5の523に示すものであり、順位情報は付加されていない。順位出力の指定がある場合(ステップ905でYesが選択された場合)の例については後述する。
【0046】
前述したように、リアルタイムアプリケーションのランキング計算では、膨大な情報から瞬時に有用な情報を取り出す必要があるため、処理の効率化が必要となる。そこで、本実施例のストリームデータ処理システムでは、ランキングに変動があった差分だけを出力するインタフェースと、その時点のランキング内の全データを出力するインタフェースを備える。図5(a)中央の202は、図4で説明したクエリ301(図3)のウィンドウ演算“[Partition By s.id Rows 1]”、およびランキング計算指定句“LIMIT 3 By s.val DESC”の処理結果を格納したランキング情報保持バッファの各時刻での状態を示している。クエリ301では、最終的な出力形式として、IDSTREAM句が指定されている。IDSTREAM句は、ランキング計算の結果、ランキングに追加されたタプルを増加分タプルとして、ランキングから削除されたタプルを減少分タプルとして出力するインタフェースである。図5(a)では、IDSTREAM句(504)によって処理された後のストリームデータを図の右側の角丸四角523内に示した。ただし、該ストリームデータの黒丸は増加分、白丸は減少分を表す。以下、IDSTREAM句の処理の内容について説明する。時刻t1に{a,50}(505)がランキングに追加されるので、IDSTREAM句では処理結果の増加分ストリームデータとして{a,50}(512)を出力する。次に時刻t2、t3にそれぞれ{b,10}(506)および{c,30}(507)がランキングに追加されるので、{b,10}(514)および{c,30}(515)が増加分として出力される。時刻t4には、{d,20}(508)がランキングに挿入されると共に、{b,10}(506)がランキングから削除される。この場合、IDSTREAM句では、時刻t4に{d,20}(516)を増加分として、{b,10}(517)を減少分として出力する。増加分と減少分の情報のみを計算し、該情報を利用するクライアント計算機に送信することにより、ストリームデータ処理システムの処理コスト、および通信コストを削減することができる。例えば図5(a)の場合、t1からt7までの間に、クライアント計算機に対して11個の処理結果が送信されるが、各タイミングで上位n件の全結果を全て送信する場合にはn×7個の処理結果を送信する必要があり、特にnが大きい場合差分情報のみを送信する本発明の効果は高い。
【0047】
但し、クライアント計算機側でランキング情報を随時ユーザに提供し続ける必要がある場合には、クライアント計算機側で差分情報から全体のランキング情報を作成し続ける必要がある。本処理では、クライアント計算機側で状態(ステート)を管理する必要があるため、クライアント計算機の状態、リアルタイムアプリケーションの形態によっては実現が難しい場合もある。このような状況でもランキング情報を利用できるようにするために、本出願のストリームデータ処理システムでは、生成した差分ランキング情報から全体のランキング情報を生成し、出力するインタフェースを備える。図3(b)のクエリ302は、1行目のRSTREAM句以外はクエリ301と同一であり、1行目のSELECT句はs.idとs.valの値の組を出力対象とすることを、2行目のFROM句はストリームsを対象とすることを、同じく2行目のPartition By句はs.idの値でグルーピングしてそれぞれのs.valの値の最新の1件を保持することを、3行目のLIMIT句はs.valの値の降順に3件を出力することを指定する。クエリ301の1行目のIDSTREAM句が、前回の出力時との差分情報のみを出力するのに対して、クエリ302の1行目のRSTREAM句は、出力のタイミング毎に、出力指定範囲内のストリームタプル全てのランキング情報を出力することを意味している。図5(b)に、該インタフェースでのランキング計算出力結果を示す。図5(b)のランキング情報保持バッファ(202)の各時刻の状態は図5(a)の場合と同じである。LIMIT句の処理後に、図3(b)に示すクエリ302のRSTREAM句を適用した結果が図5(b)の右側の角丸四角526内に示すストリームデータとなる。以下図5(b)を用いて、ランキング計算結果の出力形式について説明する。時刻t1に{a,50}(505)がランキングに追加されるので、RSTREAM句では{a,50}(527)を出力する。次に時刻t2に{b,10}(506)がランキングに追加されると、RSTREAM句はランキング全体、すなわち{a,50}と{b,10}の2つのストリームデータを出力する(528)。次に時刻t3で{c,30}(507)がランキングに追加されると、{a,50}、{b,10}に加えて{c,30}が出力される(529)。次に、時刻t4で{d,20}(508)がランキングに挿入されると共に、{b,10}(506)がランキングから削除される。この場合、RSTREAM句では、時刻t4に{a,50}、{c,30}、{d,20}を出力する(530)。本処理を実現するためには、処理結果出力時にランキング処理結果出力インタフェース(207)で前回の出力時の出力内容を保持し、該出力内容と、順序・順位生成部(204)で新たに生成されたランキング情報とを組合せて、出力情報を生成すればよい。今回の説明では、RSTREAM句の出力タイミングは、入力となるストリームデータが到来した瞬間としたが、出力生成の負荷、通信コスト削減のために、例えば1秒毎などの一定間隔、入力タプルn個毎、出力タプルm個毎などでも差し支えない。
【0048】
次に、クエリで順位出力指定がある場合(図9のステップ905でYesが選択される場合)の例について、図6のクエリ601および602を用いて説明する。クエリ601では、クエリ301で出力したs.idとs.valに加えて、1行目のRANKING AS rank指定により、その時点での順位情報も加えて出力することが指定されている。また、クエリ601が前回出力した後の差分情報のみを出力するのに対して、クエリ602では、出力タイミング毎にランキング情報を全て出力する。
【0049】
最初に、順位出力指定を含む場合のランキング計算方法について、図7を用いて説明する。図7の左側の角丸四角(1502)は、ウィンドウ演算“[Partition By s.id Rows 1]”の処理結果を格納したストリームタプル保持バッファの各時刻での状態を示しており、図4と同じである。各時刻の状態に対して、順位出力指定を含むランキング計算の方法を説明する。図7の凡例702に示すように、楕円で囲まれた2つの値の組は{id,val}の形式のストリームデータを表す。また、凡例703に示すように、角丸四角形で囲まれた3つの値の組は、{rank,id,val}の形式のストリームデータを表す。ここで、rankは出力時のvalの値に基づいた順位である。
【0050】
時刻t1にストリームデータで{a,50}(705)が到来すると、本ストリームタプルはランキングに含まれ、かつその順位は1位であるので、ランキング計算結果は{1,a,50}(712)となる。次に時刻t2にストリームデータ{b、10}(706)が到来すると、本ストリームデータもランキングに含まれるので、{2,b,10}(713)が出力される。時刻t3に{c,30}(707)が到来すると、本ストリームデータもランキングに含まれ、かつそのvalの値30が{b,10}よりも大きいため順位は2位となり、同時に{b,10}の順位は3位となる。そのため、ランキング計算結果からは、{2,b,10}が削除され、{3,b,10}(714)および{2,c,30}(715)が追加される。続いて、時刻t4にストリームデータ{d,20}(708)が到来すると、そのvalの値20が{b,10}のvalの値10よりも大きいので、{3,b,10}がランキング計算結果から削除され、{3,d,20}(716)が計算結果に追加される。次に、時刻t5でストリームデータ{e,40}(709)が到来すると、そのvalの値40は現在ランキング計算結果に含まれている{c,30}および{d,20}よりも大きく、順位は2位となるため{2,e,40}(718)がランキング計算結果に含まれる。同時に、{3,d,20}がランキング計算結果から削除され、かつ{c,30}の順位が2位から3位に変化するため、{2,c,30}が削除され、{3,c,30}(717)が追加される。時刻t6、t7にそれぞれ{e,15}(710)および{a,45}(711)が到来する場合も同様である。これらのランキング計算処理は、図2の順序・順位生成部(204)で実行され、各時刻でのランキング計算処理結果はランキング情報保持バッファ(202)に格納される。計算の好適な実施方法は、図9のフローチャートでは、ランキング情報保持バッファメンテナンス(903)までは共通である。次に、順序出力指定があるかないかをチェックし(905)、順序出力指定がある場合(905でYesが選択された場合)には処理結果タプルの順位情報カラム追加処理を実施する(906)。順位情報追加処理は、ランキング情報処理バッファ(202)を利用する。前述したように、好適な実施例では、ランキング情報保持バッファでは、追加されたストリームタプルを、順序付けが指定されたカラムの値の順序関係を保持しながら管理する。例えば、クエリ601の場合には、クエリ301の場合と同様に、順序付けの対象となるカラムはs.valであるので、ランキング情報保持バッファ内でのデータ構造としては、図2の203に示すようなテーブル形式や、図13のs.valの値をキーにした二分探索木が実施の方法として挙げられる。順位情報の追加処理では、順位情報追加対象のストリームカラムがs.valをキーにした場合何番目にあるかを計算し、該順位をクエリで指定されたカラムの位置に追加する。例えば、クエリ601の場合には、SELECT句の最初のカラムに“RANKING AS rank”指定があるため、一番目のカラムに順位情報を含めて出力する。
【0051】
クエリ601では、最終的な出力形式として、IDSTREAM句が指定されている。クエリ301を用いて説明したように、IDSTREAM句は、ランキング計算の結果、ランキングに追加されたストリームデータを増加分として、ランキングから削除されたストリームデータを減少分として出力するインタフェースである。図8(a)では、IDSTREAM句(804)によって処理された後のストリームデータを図の右側(819)に示した。時刻t1に{a,50}(805)が到来した場合、出力カラムの先頭に前記順序・順位生成部で計算した順位情報をクエリで指定された1番目のカラムに追加して出力する。{a,50}が到来したときには、ストリームデータは1つしかなく、その順位は1位となるので、{1,a,50}(811)を出力する。次に時刻t2に{b,10}(806)が到来すると、その順位は2位となるので、{2,b,10}(812)を出力する。時刻t3に{c,30}(807)が到来すると、そのvalの値30は{a,50}のvalの値50よりは小さく、{b,10}のvalの値10よりは大きいため、その順位は2位となる。そのため、時刻t3では、{3,b,10}(813)および{2,c,30}(814)が増加分として出力されると共に、{2,b,10}(815)が減少分として出力される。図5で示したクエリ301の例では、{c,30}によりランキング出力に含まれる集合自体は変化しなかったため、増加分として{c,30}のみを出力した(515)が、図8のクエリ601の例では{c,30}の到来によって順位が変化するため、増加分、減少分を合わせて3つのストリームデータが出力される。同様にして、時刻t5およびt6では順位の変化に対応して、それぞれ4個(820)、(821)となり、クエリ301の場合よりも出力するストリームタプル数が増加している。クエリ601では、最終的な出力形式として、前記IDSTREAM句が指定されているため、増減分のストリームデータを出力しているが、順位出力指定がない場合と同様に、順位出力指定がある場合も各瞬間のランキングの全体を出力する要求もある。クエリ602がその例である。クエリ601のIDSTREAMのかわりにRSTREAMを指定する(829)ことによって、出力時点でのランキング計算結果全体を出力する。図8(b)はクエリ602の実行結果を示している。時刻t1〜t7のそれぞれの出力を822〜828に示した。
【0052】
以上の実施例では、ランキングの指定は降順でその開始順位は1位のみを示したが、ランキングの指定は昇順でも差し支えない。また、ランキング開始順位は任意の整数値での指定が可能である。例えば、図11のクエリ1101はストリームsから、s.idとs.valの値の組を、s.idの値でグルーピングしてそれぞれのs.valの値の最新の1件を保持し、開始順位10位からs.valの値の昇順に3件を出力することを示している。図3のクエリ301との違いは、3行目のOFFSET句とASC指定であり、前者が開始順位の指定、後者が昇順の指定である。OFFSET指定がある場合には、図9のランキング処理の受け取ったタプルがランキングに影響するか否かのチェック(904)は、受け取ったストリームタプルが、OFFSET句で指定された開始順位から、LIMIT句で指定された出力指定範囲に影響するか否かをチェックすればよい。ランキング情報の保持、管理に関しては、図2に示したランキング処理モジュール(116)でOFFSET指定なしの場合と同様に処理できる。
さらに、上述の実施例ではランキング付け対象のカラムが明示的にシステム投入されるが、ランキング付け対象のカラムを自動的に決定するシステムにも本発明は適用可能である。
【図面の簡単な説明】
【0053】
【図1】本発明におけるストリームデータ処理システムの構成を示す図。
【図2】本発明におけるランキング処理モジュールの構成を示す図。
【図3】本発明におけるランキング指定を含むクエリ(順位出力指定含まず)の例。
【図4】本発明におけるランキング計算の計算内容(順位出力指定含まず)を示す図。
【図5】本発明におけるランキング計算結果の出力結果(順位出力指定含まず)を示す図。
【図6】本発明におけるランキング指定を含むクエリ(順位出力指定含む)の例。
【図7】本発明におけるランキング計算の計算内容(順位出力指定含む)を示す図。
【図8】本発明におけるランキング計算結果の出力結果(順位出力指定含む)を示す図。
【図9】本発明におけるランキング処理手順を示すフローチャート。
【図10】本発明におけるランキング情報保持バッファメンテナンス処理手順を示すフローチャート。
【図11】本発明におけるランキング指定を含むクエリ(オフセット指定含む)の例。
【図12】クエリ処理言語CQLによるクエリ記述例。
【図13】本発明におけるランキング情報の二分探索木による表現の例。
【図14】本発明におけるランキング情報保持バッファ内のランキング情報保持テーブルの変化の様子を示す図。
【図15】本発明におけるウィンドウマネージャの構成を示す図。
【図16】本発明におけるクエリ処理エンジンの計算機上での実現例を示す図。
【図17】本発明におけるランキング計算方法を示すシーケンス図。
【図18】本発明におけるランキング情報保持バッファへのストリームタプル追加処理方法を示すフローチャート。
【図19】本発明におけるランキング情報保持バッファからのストリームタプル削除処理方法を示すフローチャート。
【符号の説明】
【0054】
115…ストリームデータ処理システム
107、121…ネットワーク
113…クエリ処理エンジン
116、…ランキング処理モジュール
202…ランキング情報保持バッファ
203…ランキング情報保持テーブル
204…順序・順位生成部
206…ストリームタプル受付インタフェース
207…ランキング処理結果出力インタフェース
208…順位管理インデックス
116…ランキング処理モジュール
117…メモリマネージャ
126…ウィンドウマネージャ
1502…ストリームタプル保持バッファ
1504…生存期間決定部
1505…ストリームデータ受付インタフェース
1506…差分情報生成部
301、302、601、602、1101、1201…クエリ
1601…ストリームデータ処理サーバ
1602…通信インタフェース
1603…CPU
1604…メモリ
1605…I/Oインタフェース
1606…ストレージ装置
【特許請求の範囲】
【請求項1】
継続的に到来する、タイムスタンプが付与された複数のストリームタプルで構成されるストリームデータを受け付け、予め登録されたクエリにより前記ストリームデータにクエリ処理を継続実行するストリームデータのランキングクエリ処理方法であって、
前記クエリにより指定するウィンドウ指定に従い、各ストリームタプルの到着に対応して、該ストリームタプルのウィンドウ中の生存期間、もしくはそれに加えて過去に到着したストリームタプルのウィンドウ中の生存期間の終了を決定し、
前記クエリにより指定するランキング処理に従い、あるストリームタプルの生存期間が開始するタイミング、及びあるストリームタプルの生存期間が終了するタイミング毎に、ストリームタプル間の順序付け対象項目に関するランキングを算出してそのランキング情報を更新し、
前記順序付け対象項目のランキングが前記クエリで指定する出力指定範囲に含まれるストリームタプルの集合を出力するとともに、該出力指定範囲を越えて生存期間内にあるストリームタプルの更新されたランキング情報を保存することを特徴とするストリームデータのランキングクエリ処理方法。
【請求項2】
前記ランキング情報の保存は、生存期間内にある全てのストリームタプルに亘って行うことを特徴とする請求項1のストリームデータのランキングクエリ処理方法。
【請求項3】
前記ランキング情報は、バッフア内に各ストリームタプルと順位を対応させた表として保存することを特徴とする請求項1のストリームデータのランキングクエリ処理方法。
【請求項4】
請求項1のストリームデータのランキングクエリ処理方法であって、前記クエリで順位出力の指定があった場合に、前記順序出力指定範囲に含まれるストリームタプルの各々に対して、該ストリームタプルの順位を付加し、ランキング情報として出力することを特徴とするストリームデータのランキングクエリ処理方法。
【請求項5】
請求項1のストリームデータのランキングクエリ処理方法であって、前記ランキング情報の出力の際に、前回の出力との差分情報を生成することを特徴とするストリームデータのランキングクエリ処理方法。
【請求項6】
請求項1のストリームデータのランキングクエリ処理方法であって、前記ランキング情報の出力の際に、ランキング全体情報を出力することを特徴とする、ストリームデータのランキングクエリ処理方法。
【請求項7】
ストリームタプルが到来した時、該ストリームタプルに生存期間の開始を示す符号を付加し、ストリームタプルの生存期間の終了が決定した時に該ストリームタプルにその生存期間の終了を示す別の符号を付加する段階を更に有し、符号が付加されたストリームタプルを用いて前記ランキング情報の更新が成されることを特徴とする請求項1のスとリームデータのランキングクエリ処理方法。
【請求項8】
継続的に到来する、タイムスタンプが付与された複数のストリームタプルで構成されるストリームデータを受け付け、予め登録されたクエリにより前記ストリームデータにクエリ処理を継続実行するストリームデータ処理システムであり、
到来するストリームタプルに対してクエリで指定されたウィンドウ演算を実行し、各ストリームタプルのウィンドウ中の生存期間を決定するウィンドウマネージャと、
該クエリで指定されたランキング処理を行い、該クエリで指定された出力指定範囲に含まれるストリームタプルの集合を出力するランキング処理モジュールとを有し、
前記ウィンドウマネージャは、各時点での前記ウィンドウへのストリームタプルの挿入、及び前記ウィンドウからのストリームタプルの削除を示すウィンドウ差分情報を生成して前記ランキング処理モジュールに伝達する差分情報生成部を備え、
前記ランキング処理モジュールには、前記ウィンドウマネージャの差分情報生成部から伝達されるウィンドウ差分情報と、保存した情報とから前記ウィンドウ中での生存期間にあるストリームタプルの範囲内でそれらのランキング情報を生成・更新する順序・順位生成部と、
前記ウィンドウ中の生存期間にあるストリームタプルの範囲内で該順序・順位制製部で更新したランキング情報を保存するランキング情報保持バッファを含むことを特徴とするストリームデータ処理システム。
【請求項9】
前記ランキング情報保持バッファは、各ストリームタプルとその順位を対応させた表として前記ランキング情報を保持することを特徴とするストリームデータ処理システム。
【請求項10】
前記差分情報生成部は、ストリームタプルが到来した時、該ストリームタプルに前記ウィンドウへの挿入を示す符号を付加し、決定したストリームタプルの生存期間の終了の時点で前記ウィンドウからの該ストリームタプルの削除を示す別の符号を付加し、それぞれ前記ウィンドウ差分情報として前記ランキング処理モジュールに伝達することを特徴とする請求項9のストリームデータ処理システム。
【請求項1】
継続的に到来する、タイムスタンプが付与された複数のストリームタプルで構成されるストリームデータを受け付け、予め登録されたクエリにより前記ストリームデータにクエリ処理を継続実行するストリームデータのランキングクエリ処理方法であって、
前記クエリにより指定するウィンドウ指定に従い、各ストリームタプルの到着に対応して、該ストリームタプルのウィンドウ中の生存期間、もしくはそれに加えて過去に到着したストリームタプルのウィンドウ中の生存期間の終了を決定し、
前記クエリにより指定するランキング処理に従い、あるストリームタプルの生存期間が開始するタイミング、及びあるストリームタプルの生存期間が終了するタイミング毎に、ストリームタプル間の順序付け対象項目に関するランキングを算出してそのランキング情報を更新し、
前記順序付け対象項目のランキングが前記クエリで指定する出力指定範囲に含まれるストリームタプルの集合を出力するとともに、該出力指定範囲を越えて生存期間内にあるストリームタプルの更新されたランキング情報を保存することを特徴とするストリームデータのランキングクエリ処理方法。
【請求項2】
前記ランキング情報の保存は、生存期間内にある全てのストリームタプルに亘って行うことを特徴とする請求項1のストリームデータのランキングクエリ処理方法。
【請求項3】
前記ランキング情報は、バッフア内に各ストリームタプルと順位を対応させた表として保存することを特徴とする請求項1のストリームデータのランキングクエリ処理方法。
【請求項4】
請求項1のストリームデータのランキングクエリ処理方法であって、前記クエリで順位出力の指定があった場合に、前記順序出力指定範囲に含まれるストリームタプルの各々に対して、該ストリームタプルの順位を付加し、ランキング情報として出力することを特徴とするストリームデータのランキングクエリ処理方法。
【請求項5】
請求項1のストリームデータのランキングクエリ処理方法であって、前記ランキング情報の出力の際に、前回の出力との差分情報を生成することを特徴とするストリームデータのランキングクエリ処理方法。
【請求項6】
請求項1のストリームデータのランキングクエリ処理方法であって、前記ランキング情報の出力の際に、ランキング全体情報を出力することを特徴とする、ストリームデータのランキングクエリ処理方法。
【請求項7】
ストリームタプルが到来した時、該ストリームタプルに生存期間の開始を示す符号を付加し、ストリームタプルの生存期間の終了が決定した時に該ストリームタプルにその生存期間の終了を示す別の符号を付加する段階を更に有し、符号が付加されたストリームタプルを用いて前記ランキング情報の更新が成されることを特徴とする請求項1のスとリームデータのランキングクエリ処理方法。
【請求項8】
継続的に到来する、タイムスタンプが付与された複数のストリームタプルで構成されるストリームデータを受け付け、予め登録されたクエリにより前記ストリームデータにクエリ処理を継続実行するストリームデータ処理システムであり、
到来するストリームタプルに対してクエリで指定されたウィンドウ演算を実行し、各ストリームタプルのウィンドウ中の生存期間を決定するウィンドウマネージャと、
該クエリで指定されたランキング処理を行い、該クエリで指定された出力指定範囲に含まれるストリームタプルの集合を出力するランキング処理モジュールとを有し、
前記ウィンドウマネージャは、各時点での前記ウィンドウへのストリームタプルの挿入、及び前記ウィンドウからのストリームタプルの削除を示すウィンドウ差分情報を生成して前記ランキング処理モジュールに伝達する差分情報生成部を備え、
前記ランキング処理モジュールには、前記ウィンドウマネージャの差分情報生成部から伝達されるウィンドウ差分情報と、保存した情報とから前記ウィンドウ中での生存期間にあるストリームタプルの範囲内でそれらのランキング情報を生成・更新する順序・順位生成部と、
前記ウィンドウ中の生存期間にあるストリームタプルの範囲内で該順序・順位制製部で更新したランキング情報を保存するランキング情報保持バッファを含むことを特徴とするストリームデータ処理システム。
【請求項9】
前記ランキング情報保持バッファは、各ストリームタプルとその順位を対応させた表として前記ランキング情報を保持することを特徴とするストリームデータ処理システム。
【請求項10】
前記差分情報生成部は、ストリームタプルが到来した時、該ストリームタプルに前記ウィンドウへの挿入を示す符号を付加し、決定したストリームタプルの生存期間の終了の時点で前記ウィンドウからの該ストリームタプルの削除を示す別の符号を付加し、それぞれ前記ウィンドウ差分情報として前記ランキング処理モジュールに伝達することを特徴とする請求項9のストリームデータ処理システム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【公開番号】特開2009−134689(P2009−134689A)
【公開日】平成21年6月18日(2009.6.18)
【国際特許分類】
【出願番号】特願2008−174086(P2008−174086)
【出願日】平成20年7月3日(2008.7.3)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.イーサネット
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
【公開日】平成21年6月18日(2009.6.18)
【国際特許分類】
【出願日】平成20年7月3日(2008.7.3)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.イーサネット
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
[ Back to top ]