[原理説明]
次に、図を用いて、本発明を実施するための形態について詳細に説明する。まず、図1の原理図を用いて、本発明を適用した一実施の形態である計算機システムの原理を説明する。
図1は、本発明を適用した計算機システムの機能を模式的に示す。計算機システムは、ストリームデータを生成・送信するデータ生成部100と、ストリームデータを受信・分析・演算するストリームデータ処理部200とから主にその特徴的部分が構成される。ストリームデータ生成部は、例えば、CPU等の演算装置とプログラムとの協働により実現される機能部であり、複数設けられている例を示している。
まず、S101で、ストリームデータ処理部200に対して、ストリーム定義1263及びクエリ定義1264の登録又は変更が行われる。ストリーム定義は、ストリームデータ処理の条件要素を表すものである。本原理図では、c1=「数値」、c2=「文字列」及びc3=「時刻」の例を上げている。
次に、S102で、ストリームデータ処理部200が、登録されたストリーム定義及びクエリ定義の特徴を表すクエリ情報を作成し、作成したクエリ情報をデータ生成部100に通知する。図1に示す例では、102によって作成されたクエリ情報は、クエリの分析結果として必要なカラムがc1であり、分析対象とするストリームデータの条件がc2=「‘AAA’」であり、分析範囲がストリームデータ「3つ」分であることを表している。
次に、S103で、データ生成部100が、ストリームデータを生成するためのデータをデータベースから取得(読込む)し、時系列に時刻情報を付して区分したストリームデータを生成する(図1において、時刻情報「12:00:00」〜「12:00:02」が夫々付された3つのデータ。)。
次に、S104で、データ生成部100が、取得したストリームデータを間引く処理を行う。間引く方法は、クエリ情報とストリームデータとを照らし合わせて2通りの方法が有る。
第1の方法は、ストリームデータがクエリ情報の条件に合っているかを判定し、合っている場合にクエリ情報に記載された必要なカラムのみを残し、その他のカラムを間引く方法である。
第2の方法は、ストリームデータがクエリ情報の条件に合っているかを判定し、合っていない場合にストリームデータそのものを間引く方法である。
次に、S105で、データ生成部100が、ストリームデータをストリームデータ処理部200に送信する。
最後に、S106で、ストリームデータ処理部200が、ストリームデータの分析を行う。図1の例では、クエリ定義である「入力データ3つの範囲で、c1の合計を出力する」に基づいて分析を行う。その後、演算を行い、演算結果を出力する(図1の例では、演算結果として「6」を出力する。)
なお、クエリ情報に記載された分析範囲が3つ分などの個数の範囲であり、ストリームデータすべてを間引く場合には、ストリームデータそのものを間引いたことを通知するためのデータ(以下、「nop(no−operation)データ」という。)を作成し、ストリームデータ処理部200に送信する。これは、nopデータをストリームデータ処理部200に通知することで、正しい分析結果を得るためである。即ちストリームデータ処理部200での分析において、例えば、直近3つ分のストリームデータを分析するといったデータの個数を分析範囲とした分析を行うものである場合、その直近3つ分のストリームデータの全てを分析することで正しい分析結果を出力することができるようになっている。従って、ストリームデータそのものを間引いた場合、ストリームデータ処理部200では、分析対象である間引かれたストリームデータを検出することが出来ず、正しい分析結果を出力することが出来ないこととなる。そこで、間引かれたデータに代えて、間引いたことを示すnopデータを通知することで、分析対象の条件に合わないデータも含めた正しい分析結果を出力することができる。
より詳細に説明すると、例えば、直近3つのストリームデータの平均値を分析する場合に、3つのうち1つ目のストリームデータが分析対象であり、残り2つが分析対象ではなく、これら3つのストリームデータの夫々の値が「n」とき、正しい分析結果は、「3分のn」となる。しかし、データ送信部で分析対象とならないストリームデータを送信しないとすると(即ち2つ目及び3つ目のストリームデータを送信しないとすると)、ストリームデータ処理部は、これら2つのストリームデータが送信されていないことを検知することができず、後続するストリームデータが分析対象となってしまい(4つ目及び5つ目のストリームデータと、1つ目のストリームデータとから分析を行ってしまい)、正しい分析結果を得ることができない。
そこで、分析を個数の範囲で行う場合には、S104で、データ生成部100がストリームデータそのものを間引いた際、nopデータを生成し、S105の送信処理でnopデータを送信し(2つ目及び3つ目のストリームデータに代えて送信し)、S106で、ストリームデータ処理部が、nopデータを分析範囲に含めるが分析対象としないように分析を行い、演算をすることで正しい結果を得られるようにするようにした。
従来であれば、ストリームデータ処理部200において、全てのストリームデータについて分析を行っていた為、要求にないデータを分析するという処理負荷が発生するという課題があった。これに対し本実施の形態では、ストリームデータ中の各種データのうち、分析の要求があるデータを管理し、要求のないデータを間引くことで、ストリームデータ処理部200で分析するストリームデータを削減するようになっている。更に、間引き処理を行うことで、ストリームデータ処理部で正しい分析結果を出力することができるように、間引いたデータの代わりにnopデータを送信するようになっている。以上が、本発明を適用した計算機システムの原理である。
なお、上述の計算機システムでは、S103において、データ生成部100が、ストリームデータを生成する方法として、データ生成部100が、夫々のストリームデータに対して時刻情報を付する例について述べたが、時刻情報の付与については、データ生成部100ではなく、ストリームデータ処理部200が、データ生成部100からストリームデータを受信した順に、夫々のストリームデータに付与する方式であってもよい。
[第1の実施形態]
次いで、本発明を適用した計算機システムの第1の実施形態について、図を用いて詳細に説明する。図2は、本発明を適用した第1の実施形態である計算機システム1の全体構成を示す。
本実施形態の計算機システム1は、データ送信計算機1100、ストリームデータ処理計算機1200及び結果受信計算機1300を含む。データ送信計算機1100とストリームデータ処理計算機1200はネットワーク1400を介して接続されており、ストリームデータ処理計算機1200と結果受信計算機1300とはネットワーク1500を介して接続されている。
本実施の形態では、データ送信計算機1100内のCPU1110との協働により起動するプログラムが、図1の原理図に示すデータ生成部100の機能に相当し、ストリームデータ処理計算機1200内のCPU1210との協働により起動するプログラムが、図1の原理図に示すストリームデータ処理部200の機能に相当する。また、本実施形態では、データ送信計算機1100、ストリームデータ処理計算機1200及び結果受信計算機をネットワーク1400若しくは1500を解して通信接続する構成としているが、本発明は、これら計算機を一体として構成することも、組合せにより一体として構成することも当然に可能である。また、本実施形態では、データ送信計算機1100に、間引部1131を設ける構成としているが、ストリームデータ処理計算機1200内の外部インタフェース内にアダプタとして設ける構成とすることもできる。
なお、本実施形態では、説明を簡単にするために、データ送信計算機1100では、ストリームデータの生成及び間引処理等を行うアプリケーションプログラムが1つ起動しているものとするが、上述した図1の原理図に示すように、アプリケーションプログラムは、複数起動する構成とすることもできる。
また、ストリームデータの例としては、ファイナンシャルアプリケーションにおける株価配信情報、小売業におけるPOSデータ、交通情報システムにおけるプローブカー情報及び計算機システム管理におけるエラーログなどが挙げられる。
データ送信計算機1100は、CPU1110,DISK1120及びメモリ1130を備える。ストリームデータ計算機1100は、ストリームデータを生成し、ストリームデータ処理計算機1200にストリームデータを送信するようになっている。ストリームデータの生成及び送信は、データ送信計算機1100上のプログラムとして実装されてもよいし、データ送信計算機1100上に搭載される専用ハードウェアとして搭載してもよい。
CPU1110は、メモリ1130上のプログラムを実行する。DISK1120は、メモリ1130上のプログラムが利用するデータを格納する。メモリ1130は、CPU1110によって実行されるプログラム及び当該プログラムの実行に必要なデータを記憶する。
メモリ1130は、プログラムとCPU1110との協働により、間引部1131(図1の「間引部」の機能に相当。)、データ送信部1132、接続部1133、クエリ情報テーブル1134(図1の「クエリ情報」に相当。)及びテーブル受信部1135といった機能部を構成する。接続部1133は、ストリームデータ処理計算機1200と接続し、テーブル受信部1135は、ストリームデータ処理計算機1200からクエリ情報テーブル1134を受信して、ストリームデータを生成する。間引部1131は、受信したクエリ情報テーブル1134に基づいて、ストリームデータを所定の条件により間引く処理を行う。データ送信部1132は、ネットワーク1400を介し、間引部1131が間引いたストリームデータをストリームデータ処理計算機1200に送信する。ストリームデータとして生成されるデータは、例えば、DISK1120から読み出してもよいし、プログラム内で生成してもよい。
ストリームデータ処理計算機1200は、CPU1210、DISK1220及びメモリ1230を備える。ストリームデータ処理計算機1200は、例えば、ブレード型計算機システム、PCサーバなどの計算機システムであってもよい。
ストリームデータ処理計算機1200は、データ送信部1132から送信されたストリームデータを受信し、分析し、その分析結果を、ネットワーク1500を介して、結果受信計算機1300に送信する。
メモリ1230には、オペレーティングシステム1240やオペレーティングシステム1240上で動作するプログラムと、CPU1210との協働により、データ送信部管理部1250、クエリ管理部1260及びストリームデータ処理部1270が構成される。
データ送信部管理部1250は、データ送信計算機1100を管理する。データ送信部管理部1250は、更に、送信部管理部1251、テーブル転送部1252及び送信部管理テーブル1253を含む。送信部管理部1251は、データ送信計算機1100と接続すると、データ送信計算機1100の情報を送信部管理テーブル1253に記録する。送信部管理テーブル1253は、ストリームデータ処理計算機1200と接続したデータ送信計算機1100の情報を記録したものであり、その内容は図6で後述する。
テーブル転送部1252は、ストリームデータ処理計算機1200が保持するクエリ情報テーブル1265を送信部管理テーブル1253に記録されたデータ送信計算機1100に対して転送する。クエリ情報テーブル1265の転送の契機は、例えば、データ送信計算機1100がストリームデータ処理計算機1200に接続したときでもよいし、データ送信計算機1100からクエリ情報テーブル1265の転送要求を受けたときでも良い。
クエリ管理部1260は、ストリームデータ処理計算機1200がストリームデータを分析する内容であるクエリを管理する機能部である。クエリ管理部1260は、更に、クエリ登録部1261、クエリ解析部1262、ストリーム定義1263(図1の「ストリーム定義」に相当。)、クエリ定義1264(図1の「クエリ定義」に相当。)及びクエリ情報テーブル1265を含む。
クエリ登録部1261は、クエリの登録を受け付け、ストリーム定義1263及びクエリ定義1264を記録する。クエリの登録は、ストリームデータ処理計算機1200自身が登録要求を行っても良いし、他の計算機から登録要求を受け付けても良い。
クエリ解析部1262は、クエリ登録部1261が記録したストリーム定義1263及びクエリ定義1264からクエリ情報テーブル1265を作成する。クエリ解析部1262がクエリ情報テーブル1265を作成する契機は、例えば、クエリ登録部1261がクエリ定義1264及びストリーム定義1263を登録したときでもよいし、クエリ情報テーブル1265の作成要求を受けたときでもよい。
ストリーム定義1263は、入力されるストリームデータのカラムの種類を表すものである(その内容は、図3を用いて後述する。)。クエリ定義1264は、ストリームデータ処理計算機1200がストリームデータの分析方法を表すものである(その内容は図4を用いて後述する。)。クエリ情報テーブル1265は、ストリーム定義1263及びクエリ定義1264に登録されたクエリの特徴を表すものである(その内容は、図5を用いて後述する。)。
ストリームデータ処理部1270は、ストリームデータの処理を行う機能部である。ストリームデータ処理部1270は、更に、ストリームデータ受信部1271、クエリ処理部1272及びストリームデータ送信部1273を含む。
ストリームデータ受信部1271は、データ送信計算機1100のデータ送信部1132から、ネットワーク1400を介して、ストリームデータを受信する。
クエリ処理部1272は、ストリームデータ受信部1271が受信したストリームデータを、クエリ定義1264に基づいて分析・演算する。
ストリームデータ送信部1273は、クエリ処理部1272が分析・演算した結果を、ネットワーク1500を介して、結果受信計算機1300に送信する。
結果受信計算機1300は、CPU1310、DISK1320及びメモリ1330を備える。結果受信計算機1300は、ストリームデータ処理計算機1200が分析・演算した結果のストリームデータを受信し、利用する。ストリームデータの受信及び利用の処理は、結果受信計算機1300上のプログラムとして実装されてもよいし、結果受信計算機1300上に搭載される専用ハードウェアとして搭載してもよい。
DISK1320は、メモリ1330上のプログラムが利用するデータを格納する。メモリ1330は、CPU1310によって実行されるプログラム及び当該プログラムの実行に必要なデータを記憶し、CPU1310との協働により、ストリームデータ受信部及びアプリケーション実行部を構成する。
ストリームデータ受信部1331は、ストリームデータ処理計算機1200のストリームデータ送信部1273から、ネットワーク1500を介して、ストリームデータを受信する。アプリケーション実行部1332は、ストリームデータ受信部1331から受信したストリームデータを利用する。ストリームデータの利用は、例えば、外部記憶装置への保存や、ディスプレイ装置への表示等、種々の態様がある。
ネットワーク1400及びネットワーク1500は、イーサネット(登録商標)、光ファイバなどで接続されるローカルエリアネットワーク(LAN)又はLANよりも低速なインターネットを含むワイドエリアネットワーク(WAN)であってもよい。
データ送信計算機1100、ストリームデータ処理計算機1200及び結果受信計算機1300は、パーソナルコンピュータ、ブレード型計算機システム等の任意のコンピュータシステムでもよい。メモリ1130、メモリ1230及びメモリ1330は、例えば、高速にアクセス可能な揮発性記憶媒体である。
以上が、第1の実施形態における計算機システム1の構成であるが、計算機システム1は、直接ストリームデータを受信する或いは他の計算機を介してストリームデータを受信する等の種々の構成にすることもできる。
次いで、本実施形態における定義、テーブル及びデータの内容を、図3〜図11を用いて説明する。
図3はストリーム定義1263の例を示す。ストリーム定義1263はストリームデータ処理計算機1200が受信するストリームデータのカラムの種類と、参照名とを定義するものである。ストリーム定義1263ではストリームデータs1及びs2の定義をしている。s1は、1カラム目がINTEGER型の参照名c1、2カラム目がVARCHAR(20)型の参照名c2である。また、s2は、1カラム目がINTEGER型の参照名c1、2カラム目がVARCHAR(20)型の参照名c2、3カラム目がTIMESTAMP型の参照名c3である。
図4は、クエリ定義1264の例を示す。クエリ定義1264はストリームデータ処理計算機1200が分析するクエリの内容を定義するものである。クエリ定義1264では、クエリ名を「q1」、選択するカラムを「s1のc1」並びに「s2のc2」、分析するストリームの範囲を「s1の1分間」並びに「s2の3個分」及び選択するストリームデータの条件を「s1のc1が10より大きくかつs2のc2が‘AAA’」とクエリを定義する例を示している。
図5は、クエリ情報テーブル1265の例を示す。クエリ情報テーブル1265は、クエリ定義1264の特徴を示し、データ送信計算機1100の間引部1131がストリームデータを間引く際に利用するテーブルである。クエリ情報テーブル1265は、ストリーム名501、SELECT502、FROM503及びWHERE504の保持し、それぞれクエリ定義1264の内容を格納する。例えば、1行目510では、ストリーム名S1について、クエリで選択されるカラムとしてc1がSELECT502に登録され、時間の範囲で分析を行うことを示す「RANGE」が、FROM503に登録され、選択対象となるストリームデータの条件として「c1が10より大きい」ことがWHERE504に登録されている例を表している。
ストリームデータ処理計算機1200は、クエリ情報テーブル1265を参照することで、ストリーム名s1については、10より大きいc1のみを必要としていることを判断することができる。また、間引部1131は、クエリ情報テーブル1265を参照することで、ストリーム名s1については、10より大きいc1のみを送信すれば十分であることを判断でき、その他のデータは間引いてよいと判断することができる。また、クエリ情報テーブル1265の2行目520のFROM503は、個数の範囲で分析することを示す「ROWS」になっている。個数の範囲で分析する場合に、ストリームデータそのものを間引くと、ストリームデータ処理計算機1200で分析する対象のストリームデータにずれが生じる。そのため、間引部1131は、クエリ情報テーブル1265を参照することで、s2についてはストリームデータそのものを間引く場合に、間引いたことを通知する必要があると判断することができる。
図6は、送信部管理テーブル1253の例を示す。送信部管理テーブル1253は、ストリームデータ処理計算機1200に接続したデータ送信計算機1100を管理するためのテーブルである。ここで、接続とはデータ送信計算機1100とストリームデータ処理計算機1200とが、通信経路を確保する処理のことであり、本実施形態では、送信部管理テーブル1253で、識別子601及びアドレス602を保持する例を適用している。ストリームデータ処理計算機1200は、データ送信計算機1100が接続するたびに、データ送信計算機1100の識別子とアドレスとを送信部管理テーブル1253に格納する。
図7は、s1用送信データの例を示す。ストリームデータ710は、1カラム目701がINTEGER型で値は「5」、2カラム目702がVARCHAR型で値は「‘AAA’」であることを示す。
図8は、s2用送信データの例を示す。ストリームデータ810は、1カラム目801がINTEGER型で値は「10」、2カラム目802がVARCHAR型で値は「‘AAA’」、3カラム目803がTIMESTAMP型で値は「12:00:00」であることを示す。
図9は、s1用の間引き済み送信データの例を示す。ストリームデータ910は、1カラム目にINTEGER型の値「15」を保持し、2カラム目902にはデータを保持していない。間引部1131は、クエリ情報テーブル1265を参照することで、s1はc1が10より大きいストリームデータであるc1のみを送信すればよいと判断することができる。ストリームデータ710のc1は10より小さいため(即ち「5」。)、ストリームデータ710は、データそのものが間引かれ、送信されない。ストリームデータ720は、c1が10より大きいため(即ち「15」。)送信対象となり、c1以外のデータは間引くことにより、ストリームデータ910を作成する。
図10は、s2用の間引き済み送信データの例を示す。ストリームデータ1010は、2カラム目1002にVARCHAR型の値「‘AAA’」を保持し、1カラム目1001及び3カラム目1003にはデータを保持しない。間引部1131はクエリ情報テーブル1265を参照することで、「s2はc2が‘AAA’のストリームデータの、c2のみを送信すればよい。」と判断することができる。ストリームデータ810は、c2が「‘AAA’」であることから送信対象であり、c2以外のデータは間引くことにで、ストリームデータ1010を作成する。
図11は、ストリームデータそのものを間引いたことを通知するためのnopデータ1100の例を示す。nopデータは、ストリームデータ処理計算機1200において、分析範囲には含まれるが、分析対象とはならないデータである。ストリームデータそのものを間引くことで、本来同じ分析範囲に含まれないストリームデータが分析されることを防ぐために、nopデータが利用される。ストリームデータ820は、c2が‘BBB’であるため、間引部1131によってストリームデータそのものが間引かれる。このとき、クエリ情報テーブル1265によれば、s2はFROMが「ROWS」となっており、個数の範囲で分析されるようになっている。このことから、間引部1131は、ストリームデータ820の代わりに、間引いたことを通知するnopデータ1100を作成する。
次に、本実施形態の処理の流れを、図12〜図17を用いて説明する。
図12は、ストリームデータ処理計算機1200が、クエリ登録を契機にクエリ情報テーブル1265を作成し、データ送信計算機1100に転送するフローを示す。まず、S1201で、クエリ登録部1261がクエリ定義1264及びストリーム定義1263を受け付ける。
次に、S1202で、クエリ解析部1262が、クエリ情報テーブル1265を作成する。
次に、S1203で、テーブル転送部1252が、クエリ情報テーブル1265をデータ送信計算機1100のテーブル受信部1135に転送する。
S1202及びS1203の処理により、ストリームデータ処理計算機1100のクエリ情報テーブル1265と、データ送信計算機1100のクエリ情報テーブル1134とは同じ内容となる。
なお、データ送信計算機1100がクエリ情報テーブル1134を取得する方法としては、データ送信計算機1100からクエリ情報テーブル1134の転送要求を送信し、テーブル転送部1252がその転送要求を受信することで転送してもよいし、逆に、テーブル転送部1252から、データ送信計算機1100にクエリ情報テーブル1134の転送要求を送信し、データ送信計算機1100がその転送要求を受信することで転送してもよい。また、テーブル転送部1252がクエリ定義1264をデータ処理計算機1100に転送し、データ処理計算機1100でクエリ情報テーブル1134を作成してもよい。また、クエリ定義の登録を、ストリームデータ処理計算機1200とデータ送信計算機1100の両方が行い、クエリ情報テーブル1134を作成してもよい。また、データ送信計算機1100が、クエリ情報テーブル1134の登録を外部の他の端末装置(例えば、計算機システムとネットワーク等で接続された管理端末等)から受け付けてもよい。
図13は、データ送信計算機1100で、クエリ情報テーブル1134が作成される処理フローを示す。クエリ情報テーブル1265作成は、クエリ解析部1261がクエリ定義1264を解析することで行われる。クエリ情報テーブル1134の作成の具体例を、図4に示すクエリ定義1264の例と、図5に示す、クエリ情報テーブル1265の例とを用いて説明する。
クエリ情報テーブル1134の作成が開始されると、まずS1310で、クエリ定義1264のFROM区に指定されているストリーム名を、クエリ情報テーブル1265のストリーム名501に記録する。具体的には、クエリ定義1264ではFROM区にs1及びs2が指定されているので、クエリ情報テーブル1265のストリーム名501にs1と、s2とを記録する。
次に、S1320で、SELECT502の記録を行う。まず、S1321で、クエリ定義1264のSELECT区にカラムの指定があるか判定する。カラムの指定がなければ、S1330に移る。カラムの指定がある場合は、S1322で、指定されたカラムを、クエリ情報テーブル1265のSELECT502の対応するストリームの行に記録する。具合的には、クエリ定義1264ではSELECT区に「s1.c1」及び「s2.c2」が指定されているので、クエリ情報テーブル1265のSELECT502に「c1」と、「c2」とを、それぞれ対応するストリーム名が記録された行510及び行520に記録する。
次に、s1330で、FROM503の記録を行う。まず、S1331で、クエリ定義1264のFROM区に指定されたストリームに「ROWS」指定があるかどうかを判定する。「ROWS」指定がない場合は、S1332で、クエリ情報テーブル1265のFROM503に「ROWS」でないことを記録する。「ROWS」指定がある場合は、S1333でクエリ情報テーブル1265のFROM503に「ROWS」であることを記録する。具体的には、クエリ定義1264のFROM区では、s1は「ROWS」指定でなく、s2が「ROWS」指定となっているため、クエリ情報テーブル1265のFROM503にRNAGEとROWSを、それぞれ対応するストリーム名が記録された行510及び行520に記録する。なお、FROM503はストリームが個数の範囲で分析されるかどうかを示せれば記録する内容は任意とする。例えば、「ROWS」の場合には○とし、そうでなければ×あるいは何も記録しないなどである。
次に、S1340で、WHERE504の記録を行う。まず、S1341でクエリ定義1264のWHERE区にカラム指定があるかどうかを判定する。カラム指定がない場合は、クエリ情報テーブル1134作成の処理を終了する。カラム指定がある場合は、S1342で、指定されたカラムの条件を、クエリ情報テーブル1265のWHERE504に記録する。具体的には、クエリ定義1264のWHERE区では、「s1.c1>10」及び「s2.c2=‘AAA’」となっているため、クエリ情報テーブル1265のWHERE504に、「c1>10」及び「c2=‘AAA’」を、それぞれ対応するストリーム名が記録された行510及び行520に記録する。なお、WHERE504はストリームデータそのものを間引くかどうかを判断できれば記録する条件は任意である。例えば、記載される条件は、間引く条件、あるいは間引かない条件などである。
SELECT502、FROM503及びWHERE504の記録は、任意の順番で行うことが考えられる。
図14は、送信部管理テーブル1253作成のフローを示す。まず、S1401で、データ送信計算機1100の接続部1133が、ストリームデータ処理計算機1200に接続する。この時、送信部管理部1251は、送信部管理テーブル1253作成を開始する。
S1402では、送信部管理部1251が、接続されたデータ送信計算機1100の識別子と、アドレスとを送信部管理テーブル1253に格納する。
図15は、ストリームデータ処理計算機1200から、クエリ情報テーブル1265をデータ送信計算機1100に転送するフローを示す。S1501及びS1502までは、データ送信計算機1100が接続してから送信部管理テーブル1253が作成されるまでの処理を示し、既に図14を用いて説明したものである。
S1502で、ストリームデータ処理計算機1200のテーブル転送部1253が、新たに接続したデータ送信計算機1100の情報を送信部管理テーブル1253から取得し、クエリ情報テーブル1265を、送信部管理テーブル1253から取得したデータ送信計算機1100宛に転送する。
次に、S1503で、転送されたクエリ情報テーブル1265の内容を、データ送信計算機1100のテーブル受信部1135が受信し、クエリ情報テーブル1134を更新する。
図16は、データ送信計算機1100の間引部1131が行うストリームデータ作成からストリームデータ送信までの間引き処理を示す。まず、S1601で送信するストリームデータの元となるデータをDISK1120から読込む。具体的には、例えば、s1用送信データ例700や、s2用送信データ例800を読込む。S1601では、送信元となるデータを作成できればよく、DISK1120から読込む他に、例えば、ストリームデータ送信計算機1100内で生成してもよいし、他の計算機からデータを受け付けても良いし、外部の端末から直接入力するとしてもよい。
S1610で、間引部1131は、ストリームデータそのものを間引く処理を行う。まず、S1611で、間引部1131は、クエリ情報テーブル1134のWHERE504に記載があるか判定する。記載がなければS1620に移る。記載がある場合は、S1612に移る。
S1612で、間引部1131は、読込んだデータがWHERE504の条件にあうかどうかを判断する。条件にあえば送信対象としてS1621に移り、条件にあわなければデータそのものを間引く対象としてS1641に移る。具体的には、クエリ情報テーブル1265には、ストリームs1のWHERE504に記載があるため、S1612の処理に移る。s1用送信データ例710はc=5であり、クエリ情報テーブル1265のWHERE504の条件「c1>10」に合わないため、データそのものを間引く対象となり、S11633に移る。s1用送信データ例720は「c=15」であり、クエリ情報テーブル1265のWHERE504の条件「c1>10」に合うため、送信する対象となり、S11621に移る。読込んだデータがs2用の場合も同様である。
次に、S1620で、カラムを間引く処理を行う。まず、S1621で、読込んだデータのカラムがクエリ情報テーブル1265のSELECT502に記載されているか判定する。記載されている場合にはS1622に移り、記載されてなければS1631に移る。
S1622で、SELECT502に記載されていたカラムについて、読込んだデータから送信用ストリームデータに格納する。具体的には、クエリ情報テーブル1265の行510では、SELECT502にs1の選択対象として「c1」が記載されている。そのため、S1610で送信対象となったs1用送信データ720の1カラム目を、s1用間引き済み送信データの1カラム目901に格納する。2カラム目はSELECT502に記載がないため、902は空とする。読込んだデータがs2用の場合も同様にカラムを間引く。S1620の処理により、間引き済みの送信データが作成される。
次に、S1630で、ストリームデータを送信する必要があるか判定したうえで送信処理を行う。S1631で、送信用のデータに値が格納されているかを判定する。格納されている場合にはS1632に移り、格納されていない場合にはS1641に移る。
S1632で、ストリームデータをストリームデータ処理計算機1200のストリームデータ受信部1271に送信する。具体的には、S1610及びS1620の処理で作成されたs1用の間引き済み送信データ910の、1列目に値が格納されているため、s1用の間引き済み送信データ910をストリームデータ処理計算機1200に送信する。
S1640で、送信対象のデータがない場合の処理を行う。まず、S1641で、送信先のストリームが個数の範囲で分析を行っているかを判定する。個数の範囲で分析を行っている場合にはS1642に移り、そうでなければ何も送信せずに次のデータを読込むS1601に移る。
S1642で、送信用データとしてnopデータ1100を作成し、S1632でnopデータを送信する。具体的には、s1用送信データ710そのものをS1612で間引いたときに、S1641に移る。クエリ情報テーブル500のFROM503の行510を見ると、s1は「RANGE」で分析しており、個数の範囲で分析していないことがわかる。そのため、s1用送信データ710をストリームデータ処理計算機1200に送信しない。また、s2用送信データ820はS1612でWHEREの条件に合わないため、S1641に移る。クエリ情報テーブル1265のFROM503の行520を見ると、s2は「ROWS」で分析しており、個数の範囲で分析していることがわかる。そのためnopデータ1100を作成し、送信することで、s2用の送信データを間引いたことを通知する。
図16に示す処理の流れで、データ作成、間引き及び送信処理が行われる。なお、データを間引くタイミングは、データ送信前であればいつでもよい。例えば、図16を用いて説明したとおり、S1611でデータを読込んだのちにデータ又はカラムを間引く方法でもよいし、あるいはデータまたはカラムを間引く必要があるか判定してから、必要なデータまたはカラムのみを送信用データとして読込んでも良い。
図17は、ストリームデータ処理計算機1200のストリームデータ受信部1271が、ストリームデータを受信したときのフローを示す。
まず、S1701でストリームデータ受信部1271がストリームデータを受信する。
次に、S1702で、クエリ処理部1272が受信したストリームデータがnopデータかどうかを判定する。nopデータでなければ、S1703に進み、通常通りに処理する。即ち受信したストリームデータをクエリ分析の範囲に含め、クエリ分析対象として処理する。
受信したストリームデータがnopであれば、S1704で、nopデータに対する処理を行う。nopを受信した場合は、クエリ分析の範囲に含めるが、分析の対象とはせずにクエリ処理を行う。例えば、3つ分のストリームデータの合計値を求めるクエリでは、1つ目のストリームデータが1、2つ目のストリームデータが2、3つ目のストリームデータがnopデータであった場合に、合計値として1+2を計算し3を導き出す。このとき、nopデータは、3つ分の範囲には含まれているが、合計値を算出する際には関与していない。
以上が、本発明を適用した計算機システム1の第1の実施形態の説明である。
[第1の実施形態の変形例]
次いで、第1の実施形態の変形例について説明する。本変形例では、第1の実施形態において、クエリの分析範囲として、更に時間の範囲を含んで分析を行う場合にもnopデータを作成するかどうかの判断を行うことを特徴とする。
時間の範囲で分析を行う場合であっても、分析対象となるストリームデータの個数を考慮するクエリであるときには、ストリームデータそのものを間引いたときにクエリ処理の結果が正しくならない。個数を考慮するクエリは、具体的には、分析対象となるストリームデータの個数を求めるクエリや、分析対象のストリームデータの平均値を求めるクエリの場合である。そこで、個数を考慮するクエリの場合にもnopを生成・送信を行うこととする。
まず、図13のクエリ情報テーブル1134を作成するフローの中で、クエリが時間の範囲で分析し個数を考慮しているかどうか判定し、クエリ情報テーブル1134に記録する。具体的には、例えば、クエリが時間の範囲で分析し個数を考慮している場合は、クエリ情報テーブル1134のFROM503にRANGE_COUNTと記録する或いはクエリ情報テーブル1134の新たな列に記録をするなどである。
次に、図16の間引き処理のフローで、S1640で送信データが何もない場合に、S1641で送信先ストリームがROWSかどうかを判定することと同様に、送信ストリームが時間の範囲で分析し個数を考慮しているどうかを判定する。個数を考慮していればnopデータを作成・送信し、個数を考慮していなければS1601に移り次のデータを読込む。具体的には、例えば、クエリ情報テーブル1134のFROM503にRANGE_COUNTと記載されていれば、nopデータを作成・送信し、そうでなければ次のデータを読込むなどである。
[第2の実施の形態]
次に、本発明を適用した計算機システム2000の第2の実施形態について説明する。第2の実施形態では、ストリームデータを間引くか否かの判断において、ストリームデータの滞留数に応じて判断を行う実施形態である。
図18に、第2の実施形態における計算機システム2000のシステム構成を示す。なお、以下の説明では、計算機システム2000の構成の内、第1の実施形態における計算機システム1と同様(若しくは同類)の機能構成を有するものは同一符号をもって詳細な説明を省略するものとし、相違点についてのみ詳細に説明するものとする。
図18に示す計算機システム2000と、第1の実施形態の計算機システム1とで特に異なる構成は、データ送信計算機2100がバッファ状態情報テーブル2150を有し、ストリームデータ処理計算機2200がバッファ状態情報テーブル1280を有し、間引部2110が、バッファ状態情報テーブル2150を参照しながら、ストリームデータの滞留数に応じて間引く処理を行うことである。
図19は、ストリームデータ処理計算機2200内のバッファ状態情報テーブル1280を示す。バッファ状態情報テーブル1280は、ストリームデータ処理計算機2200が受信したストリームデータ量を、ストリームごとに記録するものである。バッファ状態情報テーブル1280は、ストリームデータ名1281及び滞留数1282を記録し、保持する。
次に、バッファ状態情報テーブル1280を考慮した処理の流れを説明する。
図20は、バッファ状態情報テーブル1280を更新するフローを示す。
まず、S1901で、ストリームデータ計算機2200のストリームデータ受信部1271が、ストリームデータを受信する。
次に、S1902で、ストリームデータ受信部1271が、ストリームデータ受信部1271が受信しているものの未だクエリ処理部1272で処理されていないストリームデータの量を、受け付けるストリーム毎にバッファ状態情報テーブル1280に記録する。具体的には、ストリームデータ受信部1271が受け付けるストリームをバッファ状態情報テーブル1280のストリーム名1281に記載し、ストリームデータの量を滞留数1282に記録する。なお、バッファ状態情報テーブル1280はストリームデータ処理計算機2200の処理状態を示せればよい。滞留数1282は、クエリ処理部1272で処理されていないストリームデータの量でもよいし、クエリ処理部1272で分析の対象となりうるストリームデータ全体の量でもよいし或いは受信したストリームデータに基づき
分析・出力されるストリームデータの量でもよい。また、バッファ状態情報テーブル1280を更新するタイミングは、ストリームデータを受信したときでもよいし或いは定期的に更新してもよい。
図21は、バッファ状態情報テーブル1280をデータ送信計算機2100に転送するフローを示す。まず、S2001で、ストリームデータ処理計算機2200のバッファ状態情報テーブル1280が更新される。
次に、テーブル転送部1252が、ストリームデータ処理計算機2200のバッファ状態情報テーブル1280を、データ送信計算機2100に転送する。
次に、S2003で、データ送信計算機2100のテーブル受信部1135が転送されたバッファ状態情報テーブル1280を受信し、データ送信計算機2100のバッファ状態情報テーブル2150を更新する。なお、バッファ状態情報テーブルの転送のタイミングは、ストリームデータ処理計算機2200のストリームデータの状態を、データ送信計算機2100に通知できればいつでもよい。例えば、S2001に示したようにバッファ状態情報テーブル1280を更新したときでもよいし、定期的に転送するとしてもよい。
図22は、データ送信計算機2100で、バッファ状態情報テーブル2150を考慮した間引き部2110による間引き処理のフローである。
まず、S2101で、データ送信計算機2100においてストリームデータ送信処理が開始される。
次に、S2102で、間引部2110が、バッファ状態情報テーブル2150を参照し、送信先のストリームデータと、他のストリームの滞留数との滞留数1282について比較を行う。送信先のストリームの滞留数が他のストリームの滞留数よりも少なければS2104の処理に移り、多ければS2103の処理に移る。
S2103は、ストリームデータを間引いて送信する処理であり、図16の間引き処理と同様である。
S2104は、ストリームデータを間引かずに送信する処理であり、図16のS1601及びS1632と同様に、データを読込んだらそのままストリームデータとして送信を行うものである。
なお、S2102で間引き処理を行うかどうかの判断は、いつ行っても良い。例えば、S1601でデータを読込む前或いは後で毎回行ってもよいし、定期的に行っても良い。
この図22の処理により、ストリームデータ処理計算機2200における、各ストリームに対する処理状況を平準化し、処理の遅いストリームからの影響を排除することができる。