JP6205066B2 - ストリームデータ処理方法、ストリームデータ処理装置及び記憶媒体 - Google Patents

ストリームデータ処理方法、ストリームデータ処理装置及び記憶媒体 Download PDF

Info

Publication number
JP6205066B2
JP6205066B2 JP2016546261A JP2016546261A JP6205066B2 JP 6205066 B2 JP6205066 B2 JP 6205066B2 JP 2016546261 A JP2016546261 A JP 2016546261A JP 2016546261 A JP2016546261 A JP 2016546261A JP 6205066 B2 JP6205066 B2 JP 6205066B2
Authority
JP
Japan
Prior art keywords
tuple
thread
operator
query
stream data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016546261A
Other languages
English (en)
Other versions
JPWO2016035189A1 (ja
Inventor
常之 今木
常之 今木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Publication of JPWO2016035189A1 publication Critical patent/JPWO2016035189A1/ja
Application granted granted Critical
Publication of JP6205066B2 publication Critical patent/JP6205066B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • G06F16/2386Bulk updating operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24537Query rewriting; Transformation of operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24568Data stream processing; Continuous queries

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Operations Research (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、ストリームデータ処理の性能を向上させる技術に関する。
証券取引の自動化、交通情報処理の高度化、クリックストリームの解析といった、高いレートで継続的に発生する情報をリアルタイムに解析し、重要なイベントの発生に対して瞬時にアクションを起こす要求の高まりを背景に、高レートデータのリアルタイム処理を実現する、ストリームデータ処理が注目されている。
ストリームデータ処理は、様々なデータ処理に適用可能な汎用ミドルウェア技術であるため、個別案件ごとにシステムを構築するのでは間に合わないようなビジネス環境の急激な変化にも応えつつ、実世界のデータをリアルタイムにビジネスに反映することを可能とする。
ストリームデータ処理が対象とするストリームとは、タイムスタンプ付きのデータであるタプルが、連続して到来する時系列データである。ストリームデータ処理のユーザが、このストリームに対する監視ルールをクエリとして定義すると、クエリ定義をクエリグラフに変換する。クエリグラフは、オペレータと呼ばれる処理単位をノードとし、同オペレータ間のタプルキューをエッジとする、有向グラフである。入力ストリームを構成する個々のタプルについて、クエリグラフを通過させることで、データフロー的に処理を進める。データフロー型の処理であるため、クエリグラフを多段分割し、複数の計算資源によってパイプライン的に並列処理することで、スループット向上が可能である。
近年の計算機では、複数のCPUコア(またはプロセッサコア)を備えたマルチコアプロセッサが使用され、複数のスレッドを並列して実行する。ストリームデータ処理をマルチコアプロセッサで処理することで、高いスループットを得る技術として特許文献1が知られている。
特許文献1では、クエリ定義をクエリグラフに変換してオペレータ間の実行順序を決定するクエリパーサを備え、かつ複数のクエリ実行スレッドを備えてストリーム処理を実行する。実行順序では連続するオペレータの集合をステージと呼び、各ステージを構成するオペレータの計算コストの合計を、当該ステージの計算コストと呼ぶ。そして、クエリパーサは、各ステージの計算コストが、全オペレータの合計コストをCPUコア数で割った値よりも小さな値となるように、クエリグラフを複数のステージに分割する。各CPUコアは、入力ストリームから一つずつタプルを取り出して、クエリグラフの入口から出口まで当該タプルの処理を担当して実行する際に、各ステージの実行に先立って、処理を担当するタプルの一つ前のタプルについて当該ステージの処理が完了しているか否かを判定している。
国際公開第2014/041673号
上記従来例では、ひとつのタプルが複数のCPUコアで利用され、各CPUコアに割り当てられたタプル入出力バッファ、および全CPUコアが共有するオペレータ実行状態保持領域にタプルが格納される。各CPUコアは、あるオペレータの処理を完了すると、当該オペレータで不要になったタプル、およびタプル入力バッファのタプルを破棄する。いずれのオペレータでも利用されないタプルは、ストリームデータ処理部によってメモリ上から消去され、ストリームデータ処理部は、消去された領域を新たなタプルを格納する領域として回収する。
上記タプルを管理する場合、例えば、タプル毎に各オペレータの保持領域への出し入れをカウントするカウンタを用い、カウンタの値が0になったタプルを回収することができる。この例では、カウンタが複数のCPUコアからアクセスされるため、ひとつのCPUコアがカウンタをアクセスしている間は、他のCPUコアのアクセスを禁止する排他制御を行う必要がある。
この排他制御により、複数のCPUコアがカウンタにアクセスしようとすると、ひとつのCPUコアのみがアクセスを許可され、他のCPUコアは待機させられる。待機させられたCPUコアでは、オペレータ等の処理が遅延してしまい、システムのスループットが低下するという問題があった。
本発明は、プロセッサとメモリを含む計算機で、受信したタプルをクエリで処理するストリームデータ処理方法であって、前記計算機が、クエリ定義を受けて付けてクエリグラフに変換し、前記クエリグラフを構成するオペレータの実行順序を決定したクエリ実行制御情報を生成する第1のステップと、前記計算機が、前記タプルを格納する入力バッファと、前記オペレータの処理結果として結果タプルを格納する出力バッファと、前記タプルの増減数を格納する保存数増減情報を含む演算スレッドを生成して前記プロセッサに割り当てる第2のステップと、前記計算機が、前記オペレータ毎に前記タプルを一時的に格納可能な一時保存領域を前記メモリに設定する第3のステップと、前記計算機が、前記タプルを受け付けて前記クエリ実行制御情報により前記演算スレッドを実行し、前記演算スレッドは前記オペレータの処理が完了するたびに、前記一時保存領域と前記入力バッファまたは出力バッファとの間で入出力された前記タプルの増減数を当該タプル毎に前記保存数増減情報に格納する第4のステップと、前記計算機が、演算スレッドで前記クエリグラフを構成する最後のオペレータの処理を完了した後に、前記タプル毎に保存数増減情報の総和を演算し、前記総和と所定の閾値から不要になったタプルを特定する参照数一括更新処理を実行する第5のステップと、前記計算機が、前記特定されたタプルの領域を回収する第6のステップと、を含む。
本発明によれば、タプルを管理する情報をロックすることなく、複数のプロセッサによるストリームデータ処理のスループットを向上させることができる。
本発明の実施例を示し、ストリームデータ処理を行う計算機システムの一例を示すブロック図である。 本発明の実施例を示し、クエリ実行スレッドの一例を示すブロック図である。 本発明の実施例を示し、オペレータ実行状態保持領域の一例を示すブロック図である。 本発明の実施例を示し、タプルプールの一例を示すブロック図である。 本発明の実施例を示し、クエリ実行スレッドの一例を示すブロック図である。 本発明の実施例を示し、タプルプールと参照カウンタの関係の一例を示す図である。 本発明の実施例を示し、ストリームデータ処理の一例を示すブロック図である。 本発明の実施例を示し、クエリグラフの一例を示す図である。 本発明の実施例を示し、クエリグラフを分割したステージと処理時間の関係の一例を示す図である。 本発明の実施例を示し、各図で行われるステージの処理と時間の関係を示すタイムチャートである。 本発明の実施例を示し、各図で行われるクエリ実行処理の一例を示すフローチャートの前半部である。 本発明の実施例を示し、各図で行われるクエリ実行処理の一例を示すフローチャートの後半部である。 本発明の実施例を示し、参照カウンタ一括更新処理の一例を示すフローチャートである。 本発明の実施例を示し、ストリームデータ処理部が出力する画面イメージの一例である。 本発明の実施例を示し、参照カウンタの一括更新によりストリームデータ処理を行う例を示すブロック図である。 本発明の実施例を示し、コピーによりストリームデータ処理を行う例を示すブロック図である。 本発明の実施例を示し、ストリームデータ処理のスループットとコア数の関係を示すグラフである。 本発明の実施例を示し、各コアで行われるステージの処理と時間の関係の他の例を示すタイムチャートである。
以下、本発明の一実施形態について添付図面を用いて説明する。
図1は、ストリームデータ処理を行う計算機システムの一例を示すブロック図である。ストリームデータ処理サーバ100は、CPUコア9−1〜9−4を含むCPU90と、データやプログラムを保持するメモリ103と、ネットワーク150に接続されたネットワークインタフェース105と、データやプログラムを格納するストレージ106と、これらの計算機資源を接続する104を含む計算機である。
メモリ103には、ストリームデータ処理を定義するストリームデータ処理部110が配置される。ストリームデータ処理部110は、CPUコア(または演算コア)9−1〜9−4によって実行可能な実行イメージである。なお、CPUコア9−1〜9−4の総称を“−”のない符号9で表す。他の構成要素についても同様であり、個々の構成要素を−1〜−nで表し、構成要素全体を“−”のない符号で表すものとする。
ストリームデータ処理サーバ100は、ネットワークインタフェース105を介してネットワーク150に接続される。ネットワーク150に接続されたホスト計算機130は、クエリ登録コマンド実行インタフェース131を介して、ユーザによって定義されたストリームクエリ132を、ストリームデータ処理サーバ100に送信する。なお、ホスト計算機130は入出力装置133によって、ユーザからの入力を受け付け、ストリームデータ処理サーバ100等からの出力を表示する。ホスト計算機130からストリームクエリ132を受信したストリームデータ処理サーバ100は、ストリームデータ処理部110で、受信したクエリ定義(ストリームクエリ132)に従ってストリームデータ処理を実行可能なクエリグラフを構築する。
ストリームデータ処理サーバ100は、ネットワーク150に接続されたデータ発生器120から送信されるタプル121を受信する。なお、タプル121は、タイムスタンプが付与されたデータである。ストリームデータ処理サーバ100は、受信したタプルを前記クエリグラフに従って処理し、結果タプル141を生成する。ストリームデータ処理サーバ100は、この結果タプル141を、ネットワーク150に接続されたデータ受信機140に送信する。
ストリームデータ処理サーバ100のストレージ106は、ストリームデータ処理部110の実行イメージの他、一度受け取った前記ストリームクエリ132のテキストファイルを保存する。ストリームデータ処理部110は、起動時にストレージ106からこのクエリのファイルをロードし、クエリグラフを構築することも可能である。
ストリームデータ処理部110等の各機能部はプログラムとしてメモリ103にロードされる。CPU90は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、CPU90は、ストリームデータ処理プログラムに従って処理することでストリームデータ処理部110として機能する。他のプログラムについても同様である。さらに、CPU90は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
ストリームデータ処理部110の各機能を実現するプログラム、テーブル等の情報は、ストレージ106や不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
図4、図2A〜図2Cを用いて、ストリームデータ処理部110の論理構成を説明する。
図4は、ストリームデータ処理の一例を示すブロック図である。
ホスト計算機130のユーザがストリームクエリ132の登録操作を実行すると、クエリパーサ402が、ストリームクエリ132をクエリグラフ構成情報403に変換する。オペレータ実行順序決定部404は、クエリグラフ構成情報403を処理して、クエリグラフを構成するオペレータ間の実行順序を決定し、オペレータ実行順情報405として出力する。このオペレータ間の実行順序を決定する処理は、公知または周知の技術を用いることができ、例えば、特開2010−108152号公報の技術を適用すれば良い。
オペレータ処理コスト算出部406は、該クエリグラフにおける各オペレータの処理時間の見積り結果を計算コストとして算出する。参照カウンタ一括更新コスト算出部407は、該クエリグラフの最後に付加する参照カウンタ300の一括更新処理の処理時間の見積り結果を計算コストとして算出する。参照カウンタ一括更新コスト算出部407は処理時間の見積りを特許文献1に記載されたオペレータ処理コスト算出部406と同様に行えば良い。
オペレータ処理コスト算出部406の計算コストと、参照カウンタ一括更新コスト算出部407の計算コストをステージ分割決定部408に入力する。ステージ分割決定部408は、前記クエリグラフと参照カウンタ一括更新処理511を複数のステージに分割する。オペレータ処理コスト算出部406とステージ分割決定部408は前記特許文献1と同様である。
ここで、ステージとは、前記クエリグラフを構成するオペレータ間の実行順序において、連続する一つ以上のオペレータの集合を指す。本実施例では、ステージをひとつの処理単位として扱い、各CPUコア9がひとつのステージ単位で処理を実行する。
ストリームデータ処理サーバ100は、該クエリグラフにステージの分割結果を付与し、最終的にクエリ実行制御情報409を生成する。クエリ実行制御情報409は、CPUコア9の数に応じてクエリ実行スレッド200を生成し、CPUコア9に割り当てる。
本実施例では、ステージA、B、C、D、およびEのそれぞれが、図5Aで示すように、オペレータ(OP)1〜オペレータ(OP)10で構成されている。ステージの分割方法については、前記特許文献1と同様にして行うことができるので、ここでは詳述しない。なお、図示の例では、ステージA(521)がオペレータ1(501)、2(502)を含み、ステージB(522)がオペレータ3(503)、4(504)、5(505)を含み、ステージC(523)がオペレータ6(506)、7(507)を含み、ステージD(524)がオペレータ8(508)、9(509)を含み、ステージE(525)がオペレータ10(510)と参照カウンタ一括更新(511)を含む例を示す。以上、クエリ実行制御情報409の生成までが、クエリ登録時にストリームデータ処理サーバ100で行われる処理となる。
次に、クエリ実行時の処理を説明する。ストリームデータ処理サーバ100がクエリを実行するときには、クエリ実行スレッド200−1〜200−4が、当該計算機環境における計算リソース数(CPU90のコア数)に併せて処理を開始する。本実施例では、4つのCPUコア9−1〜9−4が利用可能である環境で、4つのクエリ実行スレッド200−1〜200−4を実行する例を示す。
本実施例でのストリームデータ処理は、ストリームデータ処理サーバ100へ順次到来するタプルの一つ一つに対してデータ処理を実行するクエリ実行スレッド200を一つずつバインドして並列に処理を実行する。つまり、複数のCPUコア9のそれぞれが、各々分割されたステージA〜Eを順次実行し、一つのタプル121に関する処理を一つのCPUコア9で完遂する。
このため、図4に示すタプル入力部450は、入力タプル121を受け付けると、個々のタプル121に、1ずつインクリメントする整数の連番を付与して、クエリ実行スレッド200−1〜200−4に渡す。クエリ実行スレッドのうち、実行休止中であるクエリ実行スレッド200−nの一つが、前記タプル121を処理する。
例えば、タプル121に連番“88”が付与され、クエリ実行スレッド200−1がタプル121の処理を担当すると仮定する。クエリ実行スレッド200−1は、この連番“88”を、オペレータ実行状態保持領域204−1に保持する。なお、オペレータ実行状態保持領域204−1は、オペレータ1の実行状態を保持する領域である。また、タプル121の一つ前のタプル、すなわち連番“87”のタプルの処理をクエリ実行スレッド200−4が担当すると仮定する。
クエリ実行スレッド200−1は、連番“88”のタプルについて、ステージAの処理から順に実行する。その実行に先立って、担当の連番“88”のタプルの一つ前のタプル、すなわちクエリ実行スレッド200−4が担当する連番“87”のタプルについて、クエリ実行スレッド200−1は、スレッド200−4でステージAの処理が完了しているか否かを判定する。
本実施例では、クエリ実行スレッド200−1〜200−4の各々は、自らが担当するタプル121の各ステージの処理実行が終了するごとに、クエリ実行状態保持領域430に設定された対応するステージの実行済みタプル連番フラグ(図示省略)の値を、担当するタプル(その当該ステージの実行が終了したタプル)の連番から、次の連番に書き換える。なお、この処理については前記特許文献1の技術を用いることができる。
クエリ実行スレッド200−1は、自らが担当するタプルの連番“88”と一致しない場合、すなわち一つ前の連番“87”のタプルのステージAの処理が完了していない場合には処理の開始を待機する。
クエリ実行スレッド200−4は連番“87”のタプルについてステージAの処理(すなわち、オペレータ2の処理)を完了した段階で、連番の値に1を加算する。クエリ実行スレッド200−1によるステージAの実行に先立つ判定は、例えば一定周期で繰り返して行い、このフラグ値の変更を判定した段階で、連番“88”についてのステージAの処理を開始する。
このように、各クエリ実行スレッド200−1〜200−4が、各ステージの処理を開始する前に、直前のタプルについて、当該ステージの処理が完了しているか否かを、クエリ実行スレッド200間で判定する。クエリ実行スレッド200間での処理の完了判定は、公知または周知の技術を用いることができる。
各ステージA〜Eのオペレータ(OP1〜OP10)の実行状態は、クエリ実行状態保持領域430上の、オペレータ実行状態保持領域204−1〜204−10で管理し、全てのクエリ実行スレッド200−1〜200−1で共有する。オペレータ実行状態保持領域204−1〜204−10は、各オペレータで利用するタプルの一時保存領域として機能する。
タプル入力部450は、登録されたタプルと、入力ストリームに付与された先頭のタプルのタイムスタンプを比較して、より過去の方から順に連番を付与して、クエリ実行スレッド200−1〜200−4に渡す。
クエリ実行スレッド200では、それぞれ入出力されたタプルについてステージA〜Eの処理が順次開始され、並列的に処理が実行される。クエリ実行スレッド200は、先行するタプル121の処理を追い越さないように各オペレータの処理を制御する。
クエリ実行スレッド200は、タプルを処理する際にタプルプール210を管理するタプル用領域管理部211からタプルデータと参照カウンタ300を格納するメモリ103上の領域212〜215を取得する。各オペレータは、メモリ103上の領域212〜215のポインタ(Pnt.0〜Pnt.3)を用いて演算を実行する。
また、Window、Join、GroupBy等の実行状態を有するオペレータは、図2Bで示すように、タプル(またはタプルのポインタ)を格納するオペレータ実行状態保持領域204−1〜204−10を有する。例えば、ステージAのオペレータ1(OP1)は、タプルを一時的に格納するオペレータ実行状態保持領域204−1を有し、入力タプルや生成したタプルを保存することができる。
前記オペレータ実行状態保持領域204−1に格納されたタプルは、不要になった段階で破棄される。本実施例では、オペレータ実行状態保持領域204−1のタプルが不要であるか否かを判定するために、最後のステージEで参照カウンタ一括更新の処理を実施し、参照カウンタ300の値が所定の値になったタプルを破棄し、タプル用領域管理部211は、当該タプルに割り当てられた領域を回収する。
クエリ実行スレッド200から出力されたタプルは、タプル出力部451から結果タプル141として出力される。ストリームデータ処理サーバ100は、ネットワーク150を介してデータ受信機140に結果タプル141を送信する。
本実施例では、タプルについて一連の処理を行うクエリ実行スレッド200が、最後のステージEに、参照カウンタ一括更新の処理を含めることで、参照カウンタ300の操作をひとつのCPUコア9に限定することができる。これにより、参照カウンタ300の排他制御(ロック)を不要にし、排他制御によるオーバーヘッドを低減するものである。
図2Aは、クエリ実行スレッド200−1の詳細を示すブロック図である。なお、クエリ実行スレッド200−2〜200−4も同様の構成である。クエリ実行スレッド200−1は、入力タプルまたは入力タプルのポインタを格納するタプル入力バッファ201と、出力または生成されたタプルを格納するタプル出力バッファ202と、クエリ実行スレッド200−1へ入出力されたタプルの増減を格納するタプル保存数増減リスト203と、を含んで上述のステージA〜Eを処理する。
すなわち、クエリ実行スレッド200−1がステージAの処理を実行した後、値を保持したステージBの処理を実行する。このときステージAを処理したときのタプル出力バッファ202は、値を保持したままステージBのタプル入力バッファ201として機能する。また、タプル入力バッファ201に格納されたタプルのポインタは、当該オペレータの実行完了時に破棄される。
図中タプル入力バッファ201またはタプル出力バッファ202は、タプルが格納された領域のポインタ(Pnt.0、Pnt.3)と、各ポインタの状態を示す符号が“+”または“−”で示される。符号“+”は、当該ポインタのタプルの生存期間が開始されたことを示し、符号“−”は、当該ポインタのタプルの生存期間が終了されたことを示す。
タプル保存数増減リスト203は、各ステージのオペレータによるタプルの入出力に応じた、オペレータ実行状態保持領域および各CPUコアの入出力バッファでの保存数の増減値を、タプル毎に管理する。203の一行目は、オペレータ9の処理において、図示のポインタ(Pnt.3)のタプルが生成され、タプル入力バッファ201に格納されたことを示す。2行目以降は、破棄(オペレータ10の処理後のタプル入力バッファのクリア)、保存(オペレータ実行状態保持領域204−10への格納)、保存(タプル出力バッファ202への格納)という順序でオペレータによる処理が行われた例を示す。また、同様に、図示のポインタ(Pnt.0)のタプルでは、破棄(オペレータ実行状態保持領域204−10からの削除)、保存(タプル出力バッファ202への格納)という順序でオペレータによる処理が行われた例を示す。
図2Bは、クエリ実行状態保持領域430に格納されるオペレータ実行状態保持領域204−10を示す。図4で示すように、オペレータ1〜9のオペレータ実行状態保持領域204−1〜204−9も同様に構成される。なお、図中205は、オペレータ実行状態保持領域204−10に保持されるタプルを格納する領域を示し、図中205の外側のタプル(Pnt.0)は、オペレータ実行状態保持領域204−10から破棄されるタプルを示す。
図2Cは、タプルプール210の一例を示すブロック図である。タプルプール210は、タプルにメモリ103の領域を割り当てるタプル用領域管理部211と、領域を割り当てたタプルが不要か否かを判定するための参照カウンタ300とを保持する。
図中タプルの領域212は、ポインタPnt.0で参照され、参照カウンタ300の値が“1”であることを示し、タプルの領域215は、値“DDD”のタプルに割り当てられ、ポインタPnt.3で参照され、参照カウンタ300の値が“0”であることを示している。そして、タプル用領域管理部211は、領域216、217を未割り当ての領域として確保している。
図3A、図3Bは、図2A、図2Cの次のステージに移行する前に、参照カウンタ一括更新の処理(511)を実行して、ポインタPnt.0のタプルを破棄し、タプルの領域212をタプル用領域管理部211が回収する例を示す。図3Aは、例えば、図2Aで前のステージを処理し、次のステージを開始する場合を示す。
クエリ実行スレッド200−1は、タプル入力バッファ201は、図2Aに示したタプル出力バッファ202であり、前のステージの処理で出力されたタプルを、次のステージの入力タプルとする例を示す。
図3Bは、例えば、図2AでステージEを処理し、オペレータ10(図5A参照)の次に参照カウンタ一括更新処理(511)を行う例を示す。クエリ実行スレッド200−1は、参照カウンタ一括更新処理(511)を実行して、タプル保存数増減リスト203のタプルのポインタ毎に総和を演算する。タプルプール210内のPnt.0の参照カウンタ300の値は“0”となり、ポインタPnt.3の参照カウンタ300の値は“1”となる。
参照カウンタ一括更新処理511では、当該処理を実行するクエリ実行スレッド200が、タプル保存数増減リスト203をポインタまたはタプル毎に集計し、集計した値が“0”となったタプルが不要と判定する。そして、クエリ実行スレッド200は、タプル用領域管理部211に、参照カウンタ300の値が“0”となった領域212を未割り当ての領域として回収させる。
以上の処理により、タプル用領域管理部211がタプルに割り当てたメモリ103の領域は、クエリ実行スレッド200がステージの最後で不要と判定すると、タプル用領域管理部211に回収され、新たなタプルを受け付ける領域として回復する。
<ステージ分割決定部>
次に、図5A〜図5Cを用いて、ステージ分割決定部408におけるステージの分割方法を説明する。本実施例では、図4のクエリパーサ402が受け付けたストリームクエリ132を、図5Aのオペレータ(OP)1〜オペレータ(OP)10で示すクエリグラフ構成情報403に変換し、参照カウンタ一括更新処理を付加した例を用いる。
オペレータ(OP)1〜オペレータ(OP)10+参照カウンタ一括更新処理のクエリグラフについて、オペレータ実行順序決定部404が決定するオペレータの実行順序は、オペレータ1〜10+参照カウンタ一括更新処理511の順番になるとする。また、本実施例では4つのCPUコア9でクエリを実行することを想定する。
オペレータ処理コスト算出部406が算出した、オペレータ1〜10の計算コストの総計は95となり、参照カウンタ一括更新コスト算出部407が算出した参照カウンタ一括更新の計算コストは5となり、計算コストの総和は100となる。
ステージ分割決定部408は、まず、クエリグラフの全計算コスト(例えば、100)を計算コア(CPUコア9)の数(例えば、4)で割った値である25に対して、さらに所定のマージンをとった22を、計算コストの閾値とする。
ステージ分割決定部408は、前記オペレータの実行順序に従って、オペレータの計算コストを順次加算していき、前記閾値(22)を超えないようにステージを分割する。
本実施例では、オペレータ1〜2の計算コストの和が21、OP1〜3の和が24となるため、閾値の22以下に収まるオペレータ1までを、最初のステージAとする。以降、同様の分割ポリシを適用することで、OP3〜5、OP6〜7、OP8〜9、およびOP10+参照カウンタ一括更新のステージB〜Eに分けられ、計5ステージ(521〜525)となる。
各ステージの計算コストは、それぞれステージA(521)が21、ステージB(522)が18、ステージC(523)が18、ステージD(524)が22、ステージE(525)が21となる。1タプルの処理時間に対する、各ステージの処理時間の割合は図5Bの530に示すとおりである。なお、図5Bは、クエリグラフを分割したステージと計算コストの関係の一例を示す図である。
ここで、タプル処理時間の1/4の間隔で入力タプル121が到来するケースにおいて、図4に示した構成に従って処理した場合、各タプルは、各計算コアにおいて、図5Cのタイムチャート531に示すようなスケジュールで処理されることになる。なお、図5Cは、各CPUコア9で行われるステージの処理と時間の関係を示すタイムチャート531である。なお、図中コア0は図1のCPUコア9−1を示し、コア1〜コア3はCPUコア9−2〜9−4に対応する。
本実施例による処理では、入力タプル121が等間隔で順次到来する入力状態では、図5Cのタイムチャート531に示すとおり全く空白時間(処理待ちの時間)が発生しない。入力タプル121の到来が不等間隔になった場合には、処理待ちが発生する場合がある。
上記では、全計算コストをコア数の4で割った値25に対して計算コストの閾値を22とし、この閾値を超過しない範囲で順次オペレータを統合してステージを決定していた。入力タプル121の到来が不等間隔になったときの空白時間の発生は、この計算コストの閾値の大きさに依存する。
全計算コストをコア数で割った値に対するマージンをより大きくし、つまり計算コストの閾値をより小さな値として各計算コアに分担させるステージの分割を細かくし、一つのステージの計算時間を十分小さくとれば、タプルの到来時間がばらつくことによる空白時間の発生は回避可能である。
入力タプル121の到来時間のばらつきによる最短到来間隔が分かっていれば、その最短到来間隔よりも各計算コアが分担するステージの処理時間を短くすることで空白時間の発生を完全に回避できる。したがって、本実施例では、入力タプル121が等間隔で順次到来するという限られた条件下のみでなく、到来時間がばらついても、低レイテンシ化、高スループット化の効果が得られる。
そして、図5Cで示すように、タプル0〜4が入力されると、まず、コア0にタプル0が割り当てられてクエリ実行スレッド200−1が開始される。クエリ実行スレッド200−1は先行するクエリ実行スレッド200がないので、各ステージA〜Eを順次実行する。
一方、タプル1が割り当てられたコア1は、上述したようにコア0がステージA0の処理が完了するのを待ってからステージA1の処理を開始する。他のコア2〜3も同様に、先行するクエリ実行スレッド200がステージAの処理を完了するのを待って、自クエリ実行スレッド200のステージAの処理を開始する。
したがって、本発明では、ある時刻で同一のステージを実行する他のコアはなく、各コア0〜3が異なるステージを順次並列的に処理する。したがって、参照カウンタ300を更新するステージE0〜E4は、異なる時刻で順次行われることになる。タプルを管理する参照カウンタ300をロックする必要がなくなって、複数のCPUコア9によるストリームデータ処理のスループットを向上させることが可能となる。
なお、オペレータ1〜10の計算コストや、参照カウンタ一括更新のコストは、予め設定した値を用いてもよい。
<クエリ実行>
図6A、図6Bは、各CPUコア9で行われるクエリ実行処理の一例を示すフローチャートである。ストリームデータ処理サーバ100は、入力タプル121を受信すると、各CPUコア9のクエリ実行スレッド200に受信した入力タプル121を投入し、クエリ実行処理を開始させる。
まず、クエリ実行スレッド200は、初回の処理でなければ、前段のオペレータで使用したタプル出力バッファ202を、次のオペレータで使用するタプル入力バッファ201とする(600)。なお、初回の処理であれば、タプル出力バッファ202とタプル入力バッファ201の入れ替えは行わない。
クエリ実行スレッド200は、ステップS601〜704の処理をタプル入力バッファ201のタプル毎に繰り返して実行する。まず、当該クエリ実行スレッド200は、タプル保存数増減リスト203に、処理を行う入力タプル121のポインタを追加し、当該タプルの保存数の増減値を“−1”に設定する(602)。
次に、クエリ実行スレッド200は、実行すべきオペレータ(window、join、GroupBy等)のタプル入力処理を実行する(603)。クエリ実行スレッド200は、上記の入力処理が当該オペレータのオペレータ実行状態保持領域(図中保持領域)204へ入力タプルをコピー(または保存)するか否かを判定する(604)。すなわち、オペレータがWindowなどの場合には入力タプルをオペレータ実行状態保持領域204へコピーするのでステップ605へ進み、一方、そうでない場合にはステップ606へ進む。
ステップ605では、クエリ実行スレッド200が、当該入力タプルの保存数の増減値を“+1”に設定し、タプル保存数増減リスト203に追加する。
ステップ606では、クエリ実行スレッド200が、上記入力処理において入力タプルをタプル出力バッファ202へコピー(または保存)するか否かを判定する。オペレータがFilterなどの場合には入力タプルをタプル出力バッファ202へコピー(または保存)するのでステップ607へ進み、一方、そうでない場合にはステップ608へ進む。
ステップ607では、クエリ実行スレッド200が、入力タプルをタプル出力バッファ202へコピーするので、当該入力タプルのタプル保存数増減リスト203の値に“+1”を加算する。
図6Bのステップ608において、クエリ実行スレッド200は、現在のオペレータの結果タプル生成処理を実行する。クエリ実行スレッド200が結果タプルを生成した場合、結果タプルを格納する領域122〜125と、参照カウンタ300をタプル用領域管理部211から取得する。
次に、ステップ609で、クエリ実行スレッド200は、上記結果タプル生成処理が当該オペレータのオペレータ実行状態保持領域(図中保持領域)204へ結果タプルをコピー(または保存)するか否かを判定する。すなわち、オペレータがJoinなどの場合には結果タプルをオペレータ実行状態保持領域204へコピー(または保存)するのでステップ610へ進み、一方、そうでない場合にはステップ611へ進む。ステップ610では、クエリ実行スレッド200が、当該結果タプルの保存数の増減値を“+1”に設定し、タプル保存数増減リスト203に追加する。
ステップ611では、クエリ実行スレッド200が、現在のオペレータの結果タプル出力処理を実行する。
ステップ612では、クエリ実行スレッド200が、上記出力処理において結果タプルをタプル出力バッファ202へコピー(または保存)するか否かを判定する。オペレータがGroupByなどの場合には結果タプルをタプル出力バッファ202へコピー(または保存)するのでステップ613へ進み、一方、そうでない場合にはステップ614へ進む。
ステップ613では、クエリ実行スレッド200が、結果タプルをタプル出力バッファ202へコピー(または保存)するので、当該結果タプルの保存数の増減値を“+1”に設定し、タプル保存数増減リスト203に追加する。
次に、ステップ614では、クエリ実行スレッド200が、上記出力処理において結果タプルをオペレータ実行状態保持領域204から破棄するか否かを判定する。オペレータがWindowやGroupByなどの場合には結果タプルをオペレータ実行状態保持領域204から破棄するのでステップ615へ進み、一方、そうでない場合にはステップ616へ進む。
ステップ615では、クエリ実行スレッド200が、結果タプルを破棄するので、当該結果タプルの保存数の増減値を“−1”に設定し、タプル保存数増減リスト203に追加する。
以上の処理により、各オペレータ1〜10においてタプル保存数増減リスト203の値がタプル毎に更新される。
<参照カウンタ一括更新>
図7は、各CPUコア9で行われる参照カウンタの一括更新処理の一例を示すフローチャートである。参照カウンタ一括更新処理(511)は、図5Aに示したように、ステージEのオペレータ10(510)の処理が完了した後にクエリ実行スレッド200で開始される。なお、図5Cでは、コア0〜コア3のステージE0〜E4で参照カウンタ一括更新処理が異なる時刻でそれぞれ実行される。
クエリ実行スレッド200は、タプル保存数増減リスト203に格納されたタプル毎にステップ700〜704の処理を繰り返す。ステップ701では、クエリ実行スレッド200がタプルの保存数増減リスト203からタプル毎の増減数を取得し、タプル毎に増減数の総和を算出する。クエリ実行スレッド200は、タプルプール210内で該当するタプルの参照カウンタ300に前記算出した総和を加算する(701)。
次に、クエリ実行スレッド200は、総和を加算した参照カウンタ300の値が“0”であるか否かを判定する(S702)。参照カウンタ300の値が“0”であれば、ステップ703へ進んで当該タプルに割り当てた領域をタプル用領域管理部211に返却する。上記処理をクエリ実行スレッド200のタプル保存数増減リスト203に格納されたタプルの全てについて実行することで、不要となったタプルの領域をタプル用領域管理部211に回収させることができる。
そして、本実施例では、タプル参照カウンタ300を排他的にロックする必要がないので、複数のCPUコア9の待機状態を削減してストリームデータ処理のスループットを向上させることができる。
図9は、参照カウンタの一括更新によりストリームデータ処理を行う例を示すブロック図である。図9は、各コア0〜3でクエリ実行スレッド200を実行し、それぞれ異なるオペレータを処理する例を示す。また、図中タプル保存数増減リスト203は、各コアで実行するクエリ実行スレッド200に対応付けられたものである。
図中コア0がGroupByのオペレータを実行して、オペレータ実行状態保持領域204の結果タプルをタプル出力バッファ202へ保存する例を示す。図中コア1は、Joinのオペレータを実行し、タプル入力バッファ201の入力タプル121をオペレータ実行状態保持領域204へ保存し、結果タプルをオペレータ実行状態保持領域204からタプル出力バッファ202へ保存する例を示す。
また、図中コア2はFilterのオペレータを実行して、タプル入力バッファ201からタプル出力バッファ202へ入力タプルを保存する例を示す。図中コア3はRowWindowの処理を実行して、タプル入力バッファ201の入力タプル121をオペレータ実行状態保持領域204へ保存し、結果タプルをオペレータ実行状態保持領域204からタプル出力バッファ202へ保存する例を示す。
各クエリ実行スレッド200は、それぞれのオペレータ処理を完了するたびに、当該オペレータの処理によって保存数が増減したタプルのポインタを、各クエリ実行スレッド200のタプル保存数増減リスト203に追加する。
タプル保存数増減リスト203には、タプルの一時保存領域として機能するオペレータ実行状態保持領域204と、クエリ実行スレッド200のタプル入力バッファ201またはタプル出力バッファ202との間で入出力されたタプルについて、タプルの増減数を当該タプルのポインタと対応付けて格納する。
そして、クエリグラフの最後のオペレータ(または最後のステージ)の処理が完了すると、クエリ実行スレッド200は参照カウンタ一括更新処理511を実行する。
クエリ実行スレッド200は、参照カウンタ一括更新処理511によって、タプル保存数増減リスト203の総和と所定の閾値(例えば、0)から不要になったタプルを判定し、不要と判定したタプルの領域をタプル用領域管理部211に回収させる。そして、回収した領域はタプルプール210に戻されて新たなタプルの格納先となる。
なお、上記実施例では、各CPUコア9が実行するクエリ実行スレッド200の最後のステージEで、オペレータ10が完了した後に、参照カウンタ300の更新処理を行う例(一括更新スレッド)を示したが、これに限定されるものではない。例えば、図12で示すように、参照カウンタ300の一括更新処理を行うコア4を割り当てるようにしても良い。図12は、各コアで行われるステージの処理と時間の関係の他の例を示すタイムチャート531Aである。
この例では、ステージEの参照カウンタ一括更新処理(511)に代わって、参照カウンタ300の一括更新処理を実行する一括更新専用スレッドU0〜U4を独立したコア4に割り当てる。なお、コア4はクエリ実行スレッド200を割り当てない図である。
そして、各クエリ実行スレッド200は、ステージE0〜E4のオペレータ10が完了する度に、コア4で一括更新専用スレッドU0〜U4を呼び出して起動し、参照カウンタ300の一括更新処理を実行させる。クエリ実行スレッド200を割り当てていないCPUコア9が存在する場合には、図12で示したように、一括更新専用スレッドを用いるようにしてもよい。また、一括更新専用スレッドを複数のCPUコア9に分割して実行しても良く、後述するように、ストリームデータ処理サーバ100は受け付けた分割数の一括更新専用スレッドをCPUコア9に割り当てるようにしてもよい。
図8は、ストリームデータ処理部110が出力する画面イメージの一例である。画面800は、例えば、ホスト計算機130の入出力装置133に表示され、クエリ実行の設定を受け付けるユーザインタフェースとして提供される。
画面800内のタプルメモリ管理では、上述の参照カウンタ一括更新処理とコピー処理(後述)の何れかを選択することができる。チェックボックス802を選択すると、上述のタプルプール210及びタプル用領域管理部211により参照カウンタ300でタプルを格納するメモリ103の領域が管理される。
一方、チェックボックス801を選択すると、図10に示すコピー処理によってタプルの管理が行われる。このコピー処理では、各図で実行されるクエリ実行スレッド200で、オペレータの処理毎にタプル入力バッファ201からオペレータ実行状態保持領域204へ入力タプルをコピーし、あるいは、オペレータ実行状態保持領域204からタプル出力バッファ202へ結果タプルをコピーする。または、タプル入力バッファ201と出力バッファ202の間でコピーを行う処理である。
画面800内の一括更新実行スレッドでは、参照カウンタ一括更新処理について、2つの処理方法の何れかを選択する。チェックボックス803を選択すると、図5Aに示したように最後のオペレータ処理の後に、参照カウンタ一括更新処理を行うステージを設定し、クエリ実行スレッド200で参照カウンタ300の更新処理を実行する。
一方、チェックボックス804を選択すると、図12に示したように、コア4で一括更新専用スレッドU0〜U4を起動して、参照カウンタ300の一括更新処理を実行させる。
また、画面800内の一括更新処理分割数では、一括更新専用スレッドを分割して実行するコア数をプルダウンメニュー805から選択することができる。
図10は、上述したコピーによりストリームデータ処理を行う例を示すブロック図である。図中コア0がGroupByのオペレータを実行して、オペレータ実行状態保持領域204からタプル出力バッファ202へ結果タプルをコピーする例を示す。図中コア1は、Joinのオペレータを実行し、タプル入力バッファ201からオペレータ実行状態保持領域204へ入力タプルをコピーし、結果タプルをオペレータ実行状態保持領域204からタプル出力バッファ202へコピーする例を示す。
また、図中コア2はFilterのオペレータを実行して、タプル入力バッファ201からタプル出力バッファ202へ入力タプルをコピーする例を示す。図中コア3はRowWindowの処理を実行して、タプル入力バッファ201からオペレータ実行状態保持領域204へ入力タプルをコピーし、結果タプルをオペレータ実行状態保持領域204からタプル出力バッファ202へコピーする例を示す。
図11は、ストリームデータ処理のスループットとCPUコア9の数の関係を示すグラフである。タプルのデータ量が小さい場合(X byte)及びタプルのデータ量が大きい場合(Y Kbyte)の双方で、タプルを格納するメモリ管理を参照カウンタ一括更新処理で行う本発明が、カウンタをロックする従来例に対して性能の向上を図ることができる。なお、図中X byteは数byte〜10byte程度で、Y Kbyteは数Kbyte程度を示す。また、縦軸はスループットの相対値を示し、例えば、数Mタプル/sec等で表すことができる。
また、図10に示したコピー処理では、タプルのデータ量が小さい場合に限って従来例よりも性能を向上させることができる。このため、図8に示したクエリ実行の設定画面で、コピー処理を選択可能とする例を示した。
<まとめ>
以上のように、本発明によれば、ストリームデータ処理サーバ100は、受け付けたストリームクエリ132からクエリグラフを生成し、クエリグラフから各オペレータの計算コストを算出する。そして、ストリームデータ処理サーバ100は、計算コストの総計が所定の閾値以内となるように1以上のオペレータを含むステージに分割して、ひとつのクエリグラフを複数のステージに分割したものをクエリ実行制御情報409として生成する。
ストリームデータ処理サーバ100は、複数のステージを含むクエリ実行制御情報409を順次実行するクエリ実行スレッド200を複数生成して、複数のCPUコア9に割り当てる。クエリ実行スレッド200は、先行するクエリ実行スレッド200の同一のステージ(またはオペレータ)が完了してから、自身のスレッドで当該ステージ(またはオペレータ)を実行する。
クエリ実行スレッド200は、各オペレータの処理が完了する度に、タプル保存数増減リスト203の値を更新する。タプル保存数増減リスト203の値は、オペレータ実行状態保持領域204と、タプル入力バッファ201またはタプル出力バッファ202との間で入出力されたタプルについて、タプルの増減数を当該タプルのポインタと対応付けてタプル保存数増減リスト203に格納する。
そして、クエリ実行スレッド200は、最後のステージ(またはオペレータ)の処理が完了すると、参照カウンタ300の一括更新処理を実行して、タプル保存数増減リスト203の総和から不要となったタプルを特定し、当該タプルの記憶領域を回収し、再利用する。
したがって、ある時点では、ひとつのステージ(またはオペレータ)は、ひとつのCPUコア9(=クエリ実行スレッド200)でのみ実行されるので、複数のCPUコア9が参照カウンタ一括更新処理を同時に行うことはない。このため、本発明によれば、参照カウンタ300の排他制御が不要となって、ストリームデータの処理性能を向上させることができるのである。
この参照カウンタ300の一括更新処理は、図5Aで示したように、ひとつのタプルに対するクエリ処理の内、最後のオペレータの後に参照カウンタ一括更新処理を付加する。あるいは、図12で示したように、ひとつのタプルに対するクエリ処理の内、最後のステージ(またはオペレータ)の後に独立したスレッドで参照カウンタ一括更新処理を実行する例の何れかで行うことができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、または置換のいずれもが、単独で、または組み合わせても適用可能である。
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、CPU90がそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。

Claims (9)

  1. プロセッサとメモリを含む計算機で、受信したタプルをクエリで処理するストリームデータ処理方法であって、
    前記計算機が、クエリ定義を受けて付けてクエリグラフに変換し、前記クエリグラフを構成するオペレータの実行順序を決定したクエリ実行制御情報を生成する第1のステップと、
    前記計算機が、前記タプルを格納する入力バッファと、前記オペレータの処理結果として結果タプルを格納する出力バッファと、前記タプルの増減数を格納する保存数増減情報を含む演算スレッドを生成して前記プロセッサに割り当てる第2のステップと、
    前記計算機が、前記オペレータ毎に前記タプルを一時的に格納可能な一時保存領域を前記メモリに設定する第3のステップと、
    前記計算機が、前記タプルを受け付けて前記クエリ実行制御情報により前記演算スレッドを実行し、前記演算スレッドは前記オペレータの処理が完了するたびに、前記一時保存領域と前記入力バッファまたは出力バッファとの間で入出力された前記タプルの増減数を当該タプル毎に前記保存数増減情報に格納する第4のステップと、
    前記計算機が、演算スレッドで前記クエリグラフを構成する最後のオペレータの処理を完了した後に、前記タプル毎に保存数増減情報の総和を演算し、前記総和と所定の閾値から不要になったタプルを特定する参照数一括更新処理を実行する第5のステップと、
    前記計算機が、前記特定されたタプルの領域を回収する第6のステップと、
    を含むことを特徴とするストリームデータ処理方法。
  2. 請求項1に記載のストリームデータ処理方法であって、
    前記第1のステップは、
    前記クエリ実行制御情報に含まれる前記クエリグラフを構成するオペレータのうち最後のオペレータの後に、前記参照数一括更新処理を付加し、
    前記第5のステップは、
    前記演算スレッドが、前記クエリグラフを構成する最後のオペレータの処理を完了した後に、前記参照数一括更新処理を実行することを特徴とするストリームデータ処理方法。
  3. 請求項1に記載のストリームデータ処理方法であって、
    前記第2のステップは、
    前記参照数一括更新処理を実行する独立した更新専用スレッドを生成して前記プロセッサに割り当てるステップを含み、
    前記第5のステップは、
    前記演算スレッドが、前記クエリグラフを構成する最後のオペレータの処理を完了した後に、前記更新専用スレッドを実行させることを特徴とするストリームデータ処理方法。
  4. 請求項1に記載のストリームデータ処理方法であって、
    前記プロセッサは複数のプロセッサを含み、
    前記第2のステップは、
    前記演算スレッドとして第1の演算スレッドと第2の演算スレッドを生成して前記プロセッサにそれぞれ割り当て、
    前記第4のステップは、
    前記第2の演算スレッドは、前記第1の演算スレッドと同一のオペレータの処理を実行する際には、前記第1の演算スレッドで前記同一のオペレータの処理が完了するまで待機した後に、当該第2の演算スレッドで前記同一のオペレータの実行を開始することを特徴とするストリームデータ処理方法。
  5. プロセッサとメモリとを含んで、受信したタプルをクエリで処理するストリームデータ処理装置であって、
    前記プロセッサが、クエリ定義を受けて付けてクエリグラフに変換し、前記クエリグラフを構成するオペレータの実行順序を決定したクエリ実行制御情報を生成し、前記タプルを格納する入力バッファと、前記オペレータの処理結果として結果タプルを格納する出力バッファと、前記タプルの増減数を格納する保存数増減情報を含む演算スレッドを生成し、前記オペレータ毎に前記タプルを一時的に格納可能な一時保存領域を前記メモリに設定し、
    前記プロセッサが、前記クエリ実行制御情報により前記演算スレッドを実行し、前記オペレータの処理が完了するたびに、前記一時保存領域と前記入力バッファまたは出力バッファとの間で入出力された前記タプルの増減数を当該タプル毎に前記保存数増減情報に格納し、
    前記プロセッサが、演算スレッドで前記クエリグラフを構成する最後のオペレータの処理を完了した後に、前記タプル毎に保存数増減情報の総和を演算し、前記総和と所定の閾値から不要になったタプルを特定する参照数一括更新処理を実行し、
    前記プロセッサが、前記特定されたタプルの領域を回収することを特徴とするストリームデータ処理装置。
  6. 請求項5に記載のストリームデータ処理装置であって、
    前記プロセッサは、前記クエリ実行制御情報に含まれる前記クエリグラフを構成するオペレータのうち最後のオペレータの後に、前記参照数一括更新処理を付加し、
    前記プロセッサは、
    前記演算スレッドが、前記クエリグラフを構成する最後のオペレータの処理を完了した後に、前記参照数一括更新処理を実行することを特徴とするストリームデータ処理装置。
  7. 請求項5に記載のストリームデータ処理装置であって、
    前記プロセッサは、前記参照数一括更新処理を実行する独立した更新専用スレッドを生成し、
    前記プロセッサは、前記演算スレッドが、前記クエリグラフを構成する最後のオペレータの処理を完了した後に、前記更新専用スレッドを実行させることを特徴とするストリームデータ処理装置。
  8. 請求項5に記載のストリームデータ処理装置であって、
    前記プロセッサは複数のプロセッサを含み、
    前記プロセッサは、前記演算スレッドとして第1の演算スレッドと第2の演算スレッドを生成して前記複数のプロセッサでそれぞれ実行し、
    前記第2の演算スレッドでは、前記プロセッサは、前記第1の演算スレッドと同一のオペレータの処理を実行する際には、前記第1の演算スレッドで前記同一のオペレータの処理が完了するまで待機した後に、当該第2の演算スレッドで前記同一のオペレータの実行を開始することを特徴とするストリームデータ処理装置。
  9. プロセッサとメモリを含む計算機で、受信したタプルをクエリで処理するプログラムを格納した記憶媒体であって、
    クエリ定義を受けて付けてクエリグラフに変換し、前記クエリグラフを構成するオペレータの実行順序を決定したクエリ実行制御情報を生成する第1の手順と、
    タプルを格納する入力バッファと、前記オペレータの処理結果として結果タプルを格納する出力バッファと、前記タプルの増減数を格納する保存数増減情報を含む演算スレッドを生成して前記プロセッサに割り当てる第2の手順と、
    前記オペレータ毎に前記タプルを一時的に格納可能な一時保存領域を前記メモリに設定する第3の手順と、
    前記タプルを受け付けて前記クエリ実行制御情報により前記演算スレッドを実行し、前記演算スレッドは前記オペレータの処理が完了するたびに、前記一時保存領域と前記入力バッファまたは出力バッファとの間で入出力された前記タプルの増減数を当該タプル毎に前記保存数増減情報に格納する第4の手順と、
    前記演算スレッドで前記クエリグラフを構成する最後のオペレータの処理を完了した後に、前記タプル毎に保存数増減情報の総和を演算し、前記総和と所定の閾値から不要になったタプルを特定する参照数一括更新処理を実行する第5の手順と、
    前記特定されたタプルの領域を回収する第6の手順と、
    を前記計算機に実行させるプログラムを格納した非一時的な計算機読み取り可能な記憶媒体。
JP2016546261A 2014-09-04 2014-09-04 ストリームデータ処理方法、ストリームデータ処理装置及び記憶媒体 Active JP6205066B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2014/073355 WO2016035189A1 (ja) 2014-09-04 2014-09-04 ストリームデータ処理方法、ストリームデータ処理装置及び記憶媒体

Publications (2)

Publication Number Publication Date
JPWO2016035189A1 JPWO2016035189A1 (ja) 2017-04-27
JP6205066B2 true JP6205066B2 (ja) 2017-09-27

Family

ID=55439288

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016546261A Active JP6205066B2 (ja) 2014-09-04 2014-09-04 ストリームデータ処理方法、ストリームデータ処理装置及び記憶媒体

Country Status (3)

Country Link
US (1) US20180189350A1 (ja)
JP (1) JP6205066B2 (ja)
WO (1) WO2016035189A1 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10713272B1 (en) 2016-06-30 2020-07-14 Amazon Technologies, Inc. Dynamic generation of data catalogs for accessing data
GB2568845B (en) * 2016-08-26 2021-12-08 1Qb Inf Tech Inc Method and system for performing real-time analytics on a plurality of data streams
US10963479B1 (en) 2016-11-27 2021-03-30 Amazon Technologies, Inc. Hosting version controlled extract, transform, load (ETL) code
US11277494B1 (en) 2016-11-27 2022-03-15 Amazon Technologies, Inc. Dynamically routing code for executing
US10621210B2 (en) 2016-11-27 2020-04-14 Amazon Technologies, Inc. Recognizing unknown data objects
US11481408B2 (en) 2016-11-27 2022-10-25 Amazon Technologies, Inc. Event driven extract, transform, load (ETL) processing
US11138220B2 (en) 2016-11-27 2021-10-05 Amazon Technologies, Inc. Generating data transformation workflows
US10545979B2 (en) 2016-12-20 2020-01-28 Amazon Technologies, Inc. Maintaining data lineage to detect data events
US11036560B1 (en) * 2016-12-20 2021-06-15 Amazon Technologies, Inc. Determining isolation types for executing code portions
US10901999B2 (en) * 2017-10-23 2021-01-26 International Business Machines Corporation Graph-based searching for data stream
CN110417609B (zh) * 2018-04-26 2021-02-09 中移(苏州)软件技术有限公司 一种网络流量的统计方法、装置、电子设备及存储介质
CN109542662B (zh) * 2018-11-23 2022-04-05 北京锐安科技有限公司 一种内存管理方法、装置、服务器及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5465413B2 (ja) * 2008-10-29 2014-04-09 株式会社日立製作所 ストリームデータ処理方法、及びそのシステム
JP5887418B2 (ja) * 2012-09-14 2016-03-16 株式会社日立製作所 ストリームデータ多重処理方法

Also Published As

Publication number Publication date
JPWO2016035189A1 (ja) 2017-04-27
WO2016035189A1 (ja) 2016-03-10
US20180189350A1 (en) 2018-07-05

Similar Documents

Publication Publication Date Title
JP6205066B2 (ja) ストリームデータ処理方法、ストリームデータ処理装置及び記憶媒体
AU2023201395B2 (en) Data stream processing language for analyzing instrumented software
US10831633B2 (en) Methods, apparatuses, and systems for workflow run-time prediction in a distributed computing system
US9569262B2 (en) Backfill scheduling for embarrassingly parallel jobs
US20130232495A1 (en) Scheduling accelerator tasks on accelerators using graphs
US8881165B2 (en) Methods, computer systems, and physical computer storage media for managing resources of a storage server
US20170206462A1 (en) Method and apparatus for detecting abnormal contention on a computer system
US10972555B2 (en) Function based dynamic traffic management for network services
US9965727B2 (en) Method and apparatus for resolving contention in a computer system
GB2558394A (en) Data processing
US10025624B2 (en) Processing performance analyzer and process manager
US20100269119A1 (en) Event-based dynamic resource provisioning
US20160110234A1 (en) Apparatus and method for processing complex event based on high load path
WO2016100534A1 (en) Data stream processing language for analyzing instrumented software
US9734461B2 (en) Resource usage calculation for process simulation
US20230401099A1 (en) Attributes for workloads, infrastructure, and data for automated edge deployment
US20240152453A1 (en) Mitigation of garbage collection overhead
US10101908B1 (en) Dynamic staging model

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161207

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170808

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170901

R150 Certificate of patent or registration of utility model

Ref document number: 6205066

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150