JP5331737B2 - ストリームデータ処理障害回復方法および装置 - Google Patents
ストリームデータ処理障害回復方法および装置 Download PDFInfo
- Publication number
- JP5331737B2 JP5331737B2 JP2010057404A JP2010057404A JP5331737B2 JP 5331737 B2 JP5331737 B2 JP 5331737B2 JP 2010057404 A JP2010057404 A JP 2010057404A JP 2010057404 A JP2010057404 A JP 2010057404A JP 5331737 B2 JP5331737 B2 JP 5331737B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- operator
- window
- computer
- state
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/1658—Data re-synchronization of a redundant component, or initial sync of replacement, additional or spare unit
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/202—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
- G06F11/2038—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant with a single idle spare processing component
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Hardware Redundancy (AREA)
Description
本発明は、ストリームデータ処理における障害回復技術に関し、特に、二重化構成において障害発生後の片系運用から二重系に復帰するための、待機系追加技術に関する。
株取引の自動化、交通情報処理の高度化、クリックストリームの解析といった、高いレートで継続的に発生する情報をリアルタイムに解析し、瞬時にアクションを起こす技術の進展を背景に、高レートデータのリアルタイム処理を実現する、ストリームデータ処理が注目されている。ストリームデータ処理は、様々なデータ処理に適用可能な汎用ミドルウェア技術であるため、個別案件ごとにシステムを構築するのでは間に合わないようなビジネス環境の急激な変化にも応えつつ、実世界のデータをリアルタイムにビジネスに反映することを可能とする。このストリームデータ処理の原理、実現方式は非特許文献1に開示されている。
ストリームデータ処理は、前述のように高レートデータのリアルタイム処理であるため、処理結果の出力データも高レートで継続的に発生することになる。従って、障害が発生してから再び結果を出力可能となるまでに要する時間は、秒未満のオーダに抑えることが要求される。このような回復時間を実現する方法として有効であるのは、全く同じ処理を実行する二つのサーバを用意し、アプリケーションに結果を出力しているサーバに障害が発生した場合は、結果出力の役目を他のサーバに切り替える、二重化構成の利用である。
二重化構成において障害が発生した後は、単一のサーバしか動作していない片系運用になるため、さらなる障害が発生した場合にシステムが停止してしまうことになる。システム停止を回避するため、単一動作中の現用系サーバに待機系サーバを追加して、再び二重化構成に復帰する必要がある。このとき、追加された待機系サーバの実行状態は初期状態であるため、現用系サーバの実行状態を待機系サーバにも再現する必要がある。
待機系サーバに実行状態を再現する一つ目の方法として、正常動作中から入力ストリームをバックアップしておき、待機系追加時にはバックアップデータを待機系サーバで再実行して現用系サーバの実行状態に追付かせる、アップストリーム バックアップ(Upstream Backup)方式が非特許文献2に開示されている。処理時間が長くなるほど、バックアップに必要なディスクやメモリなどの記憶容量は増大するが、次の理由で容量は一定以内に収まることが仮定できる。
ストリームデータ処理では、データ系列から直近の一部分を切り出すウィンドウ演算を利用することが可能である。ウィンドウ演算の定義は非特許文献3に開示されている。例えば、時間幅1分のウィンドウ演算によって切り出したデータに対して平均を算出する集約演算を適用すると、1分間の移動平均を算出する動作となる。この例においては、1分間データを流し続けるとウィンドウ内のデータが刷新されることになるため、初期状態から開始する待機系サーバにおいても直近1分間のデータを処理することで、現用系サーバと同じ実行状態になる。
待機系サーバに実行状態を再現する二つ目の方法として、待機系追加時に現用系サーバを一時停止して実行状態を静止化し、スナップショットとして待機系サーバに転送する方法が挙げられる。静止化してスナップショットを転送する方法は、データベースやトランザクションシステムで広く利用されている方法である。インメモリデータベースにおける静止化を利用した待機系追加方法が、特許文献1に開示されている。
B.Babcock、S.Babu、M.Datar、R.Motwani and J.Widom、"Models and issues in data stream systems"、In Proc. of PODS 2002、 pp.1−16.(2002)
J.H.Hwang、M.Balazinska、A.Rasin、U.Cetintemel、M.Stonebraker and S.B.Zdonik、"High−Availability Algorithms for Distributed Stream Processing"、In Proc. of ICDE 2005、 pp.779−790.(2005)
A.Arasu、S.Babu and J. Widom. "The CQL Continuous Query Language: Semantic Foundations and Query Execution"、(2005)
上述のように、Upstream Backup方式においては、保持しておくべきデータの範囲が処理の進行に伴って未来に進むことを前提とすることで、バックアップのための記憶容量が一定以内に収まることを仮定できる。
しかし、ウィンドウ演算としては、時間ウィンドウ(Rangeウィンドウ)以外にも、個数ウィンドウ(Rowsウィンドウ)、グループ別個数ウィンドウ(Partitionウィンドウ)、永続ウィンドウ(Unboundedウィンドウ)などが存在する。時間ウィンドウと異なり、これらのウィンドウでは一定時間データを流してもウィンドウが刷新されない可能性がある。例えば、証券取引の分析において銘柄毎に直近100件の出来高統計を算出するといった処理は、グループ別個数ウィンドウを利用することで容易に定義できる。このとき、取引が低調な銘柄が存在すると、その銘柄の取引データがウィンドウに残り続けることになる。また、分析開始から全取引の集計を算出するといった処理は、永続ウィンドウを利用することで容易に定義できるが、同ウィンドウには分析開始以降の全データが残るため、決して刷新されないことになる。
このようなケースにUpstream Backup方式を適用すると、保持しておくべきデータ範囲の起点が進行しないため、データの保持に必要な記憶容量が際限なく増大し、いずれオーバフローすることになる。
一方、スナップショットを利用する方法では、時間ウィンドウに限らず全てのウィンドウ演算を利用可能である。但し、現用系サーバを静止化する期間、結果の出力が停止することになるため、アプリケーションに対して処理の停止として影響を与えてしまうことになる。実行状態のデータサイズが大きい程、停止時間が増大する。
この問題に対して特許文献1では、二重化構成ではなく三重以上の構成を前提として、一台のサーバに障害が発生して二重構成以上になった場合は、現用系サーバのうちの一台を静止化して、追加する待機系サーバにスナップショットを転送する方法が開示されている。このとき、もう一台の現用系サーバは静止化しないため、前記のような処理停止を回避可能である。但し、三台のサーバが必要であるため、導入コスト、運用コストが増大してしまうことになる。
本発明の目的は、ストリームデータ処理の二重化構成において、待機系追加時に処理停止を発生させずに、全てのウィンドウ演算の利用を実現するストリームデータ処理障害回復方法および装置を提供することにある。
また、本発明の目的は、正常運用時においてバックアップしたデータを利用せずに、待機系サーバ追加時点における現用系サーバの実行状態を、静止化せずに待機系サーバに再現することが可能なストリームデータ処理障害回復方法および装置を提供することにある。
上記の目的を達成するため、本発明においては、複数の計算機群を用いた冗長構成におけるストリームデータ処理障害回復方法であって、計算機群は、データに対するクエリグラフ上のオペレータ集合による処理結果を出力する第一の計算機と、新たに追加された第二の計算機から構成され、第一の計算機は、第二の計算機が計算機群に追加されたことを表す待機系追加通知に基づく時刻を再現時刻とし、クエリグラフ上のオペレータ集合の実行ループにおいて、オペレータ集合中の状態複製の対象オペレータの実行時において、対象オペレータの実行状態に、再現時刻における状態からの変化があった場合に、状態の変化を表現する情報を記憶し、実行ループ中の所定のタイミングにおいて、対象オペレータの当該タイミングにおける実行状態と、状態の変化を表現する情報とから、再現時刻における対象オペレータの実行状態を再現し、第二の計算機に送信する構成のストリームデータ処理障害回復方法を提供する。
また、上記の目的を達成するため、本発明においては、複数の計算機群を用いた冗長構成において、ストリームデータ処理を実行する第一の計算機装置であって、インタフェース部と、記憶部と、データに対するクエリグラフ上のオペレータ集合による処理結果を出力する処理部とを備え、処理部は、オペレータ集合の実行状態を計算機群に新たに追加された他の計算機に再現する際、他の計算機が追加されたことを表す待機系追加通知に基づく再現時刻を決定し、クエリグラフ上のオペレータ集合の実行ループにおいて、オペレータ集合中の状態複製の対象オペレータの実行時において、対象オペレータの実行状態に、再現時刻における状態からの変化があった場合に、状態の変化を表現する情報を記憶部に記憶し、実行ループ中の所定のタイミングにおいて、対象オペレータの当該タイミングにおける実行状態と、記憶部に記憶された状態の変化を表現する情報とから、再現時刻における対象オペレータの実行状態を再現し、インタフェース部を介して他の計算機に送信する構成の計算機装置を提供する。
更に、上記の目的を達成するため、本発明においては、複数の計算機群を用いた冗長構成において、ストリームデータ処理を実行する第二の計算機装置であって、インタフェース部と、記憶部と、処理部とを備え、処理部は、当該計算機装置が計算機群に追加されたことを示す待機系追加通知を、計算機群の現用系を構成する他の計算機にインタフェース部を介して送出し、他の計算機が、待機系追加通知を受けたことを契機として決定した再現時刻における、状態複製の対象オペレータである全てのウィンドウ演算の実行状態を、インタフェース部を介して受信し、受信が完了したウィンドウ演算のデータを対象として、ウィンドウ演算を起点として、ウィンドウ演算の後段に位置する、直近のストリーム化演算を終点とする部分クエリグラフ上のオペレータの処理を実行する構成の計算機装置を提供する。
すなわち、上記の目的を達成するため、本発明の好適な態様においては、以下の手順で待機系追加を実行する。
(1)待機系サーバ追加時の、現用系サーバにおけるデータ処理実行時刻を再現時刻として記憶する。
(2)再現時刻以降のデータを複製して、待機系サーバにも送信を開始する。
(3)現用系サーバにおいてデータ処理を継続し、実行状態を保持するオペレータにおいて、再現時刻以降に発生した実行状態の変化を、オペレータ毎に記録しておく。
(4)現用系サーバにおいて、データ処理と並行して、実行状態を保持するオペレータ毎に、実行状態を待機系サーバにコピーする。このとき、コピー時点におけるオペレータの実行状態と、記録しておいた再現時刻以降の実行状態変化から、再現時刻におけるオペレータの実行状態を再現してコピーする。コピー完了後は、オペレータにおける(3)に示した実行状態の変化の記録を停止する。
(5)実行状態を保持するオペレータの全てについてコピーが完了したら、待機系サーバにおいて、複製した再現時刻以降のデータの処理を開始する。
(1)待機系サーバ追加時の、現用系サーバにおけるデータ処理実行時刻を再現時刻として記憶する。
(2)再現時刻以降のデータを複製して、待機系サーバにも送信を開始する。
(3)現用系サーバにおいてデータ処理を継続し、実行状態を保持するオペレータにおいて、再現時刻以降に発生した実行状態の変化を、オペレータ毎に記録しておく。
(4)現用系サーバにおいて、データ処理と並行して、実行状態を保持するオペレータ毎に、実行状態を待機系サーバにコピーする。このとき、コピー時点におけるオペレータの実行状態と、記録しておいた再現時刻以降の実行状態変化から、再現時刻におけるオペレータの実行状態を再現してコピーする。コピー完了後は、オペレータにおける(3)に示した実行状態の変化の記録を停止する。
(5)実行状態を保持するオペレータの全てについてコピーが完了したら、待機系サーバにおいて、複製した再現時刻以降のデータの処理を開始する。
ここで、(3)に記した、記録する実行状態の変化は、オペレータの実行状態から消滅した、再現時刻より前のタイムスタンプを持つデータの集合とする。また、(4)に記した、実行状態の再現は、コピー時点における実行状態のうち、再現時刻より前のタイムスタンプを持つデータの集合と、記録しておいた再現時刻以降の実行状態変化であるデータ集合の、和集合をとったデータ集合とする。
本発明により、ストリームデータ処理の二重化構成において、待機系追加時に静止化のような処理停止を発生させずに、時間ウィンドウに限らず全てのウィンドウ演算が利用可能となる。また、正常運用時においてバックアップしたデータを利用せずに、待機系サーバ追加時点における現用系サーバの実行状態を、静止化せずに待機系サーバに再現することが可能となる。
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
まず、図1および図2を用いて、第1の実施例を実現するためのストリームデータ処理システムの基本構成を説明する。
図1に示すように、ネットワーク104にストリームデータ処理サーバ100と計算機101、102、103が接続されている。本実施例のストリームデータ処理サーバ100は、図2に示すように、二台の計算機200および210から構成され、各計算機はそれぞれ、記憶部であるメモリ202および212、処理部である中央処理部(CPU)201および211、ネットワークインタフェース部(I/F)204および214、記憶部であるストレージ203および213、およびそれらを結合するバス205および215によって構成される。
メモリ202上に、現用系のストリームデータ処理の論理動作を定義する、現用系ストリームデータ処理システム206を配置する。現用系ストリームデータ処理システム206は、後で詳述するようにCPU201によって解釈実行可能な実行イメージである。また、メモリ212上に、待機系のストリームデータ処理の論理動作を定義する、待機系ストリームデータ処理システム216を配置する。待機系ストリームデータ処理システム216は、後で詳述するようにCPU211によって解釈実行可能な実行イメージである。
ストリームデータ処理サーバ100を構成する計算機200および210は、ネットワークI/F204および214を介して外部のネットワーク104に接続される。
ネットワーク104に接続された計算機101上で動作する、クエリ登録コマンド実行インタフェース105を介して、ユーザによって定義されたクエリ106を、ストリームデータ処理サーバ100を構成する計算機200および210が受取ると、ストリームデータ処理システム206および216は、この定義に従ってストリームデータ処理を実行可能なクエリグラフを自身の内部に構成する。この後、ネットワーク104に接続された計算機102上で動作するデータソース107によって送信されるデータ108を、ストリームデータ処理サーバ100を構成する計算機200および210が受取ると、このクエリグラフに従って処理し、結果データ110を生成する。この結果データ110は、ネットワーク104に接続された計算機103上で動作する結果利用アプリケーション109に送信する。ストレージ203および213は、ストリームデータ処理システム206および216の他、一度受取ったクエリ106を保存する。ストリームデータ処理システム206および216は、起動時にストレージ203および213からこの定義されたクエリをロードし、クエリグラフを構成することも可能である。
なお、ここで説明した構成は本実施例のシステムの一例であり、計算機200と210は一台の計算機で構成され、CPU201および211は、同一計算機上の二つのプロセッサであっても構わない。あるいは、一つのマルチコアCPUにおける二つの計算コアであっても構わない。また、メモリ206および216、ネットワークI/F204および214、ストレージ203および213は、それぞれが一つであって、一つの計算機に接続されるのであっても、あるいは二つの計算機に接続されて共有されるものであっても構わない。
次に、図3および図4を用いて、本実施例のストリームデータ処理におけるクエリとクエリグラフの一例を説明する。
図3に例示するクエリ300は、2つの入力ストリームsaおよびsb、4つのクエリq1、q2、q3、およびq4を定義するクエリである。ストリームデータ処理システムは、クエリ300の定義を受取ると、図4に示すように、自身の実行領域中に確保したクエリ実行ワークエリア420上に、オペレータ400〜412によって構成される、クエリグラフを生成する。クエリオペレータ400は入力ストリームsaをデータソースから受取るScanオペレータ、オペレータ403は入力ストリームsbをデータソースから受取るScanオペレータである。ストリームsaおよびsbは共に、文字列型のカラムidと、整数型のカラムvalの二つのカラムから構成されるデータの系列である。図4のクエリグラフは、以下に順次説明するように、クエリq1、q2、q3、およびq4に対応する4つの部分クエリグラフから構成される。
オペレータ401、402、404、405、406および407は、クエリq1に対応する部分クエリグラフを構成するオペレータ群である。オペレータ401は、ストリームsaに対して施されるグループ別個数ウィンドウ(PARTITION BY id ROWS 2)であり、カラムid別に最新2個のデータを切り出す。オペレータ404は、ストリームsbに対して施される時間ウィンドウ(RANGE 5 MINUTES)であり、直近5分以内のデータを切り出す。オペレータ402は、ウィンドウ401で切り出したデータに対して施されるフィルタオペレータ(sa.val > 100)であり、カラムvalの値が100より大きいデータのみを通過させる。オペレータ405は、ウィンドウ404で切り出したデータに対して施されるフィルタオペレータ(sb.val <> −1)であり、カラムvalの値が−1以外のデータを通過させる。オペレータ406は、結合オペレータ(sa.id = sb.id)であり、オペレータ402および405を通過したデータにおいて、カラムidが一致する組合せを生成する。オペレータ407は、クエリの結果を正規化するストリーム化演算である。
オペレータ408および409は、クエリq2に対応する部分クエリグラフを構成するオペレータ群である。オペレータ408は、永続ウィンドウ(UNBOUNDED)であり、クエリq1の結果データを全て保持する。オペレータ409は集約オペレータであり、カラムid別にsa.valとsb.valの平均を算出する。
オペレータ410および411は、クエリq3に対応する部分クエリグラフを構成するオペレータ群である。オペレータ410は射影オペレータであり、クエリq2の結果を加工する。オペレータ411はクエリの結果を正規化するストリーム化演算である。オペレータ412は、クエリq4に対応する部分クエリグラフを構成するオペレータであり、クエリの結果を正規化するストリーム化演算である。
一時保持領域413および414は、それぞれ結合オペレータ406および集約オペレータ409の実行状態を保持する領域である。一時保持領域413は、オペレータ406の左入力と右入力それぞれにおける、生存中のデータを保持する。これらは、反対側の入力に到来したデータの結合相手となる。一時保持領域414は、グループ別に集約結果のデータを一つずつ保持する。
上述した一時保存領域を持つ結合オペレータ、集約オペレータ以外に、ウィンドウ演算も、実行状態を保持するオペレータである。ウィンドウ演算は、個々の入力データに対して生存期間を定義し、生存中のデータを保持する。これら以外の、フィルタオペレータ、射影オペレータ、ストリーム化演算、Scanオペレータについては、実行状態を保持する必要はない。
次に、図5A〜図5Eを用いて、図4のクエリグラフの各オペレータの実行状態の一例を示す。図5Aのウィンドウ演算401にデータ501〜506を保持し、図5Bのウィンドウ演算404にデータ511〜517を保持している状態を表している。各データ中、長楕円で囲まれたものはデータのタイムスタンプを表し、左側の四角はカラムidの値を、右側の四角はカラムvalの値を表している。グループ別個数ウィンドウ401は、カラムid別に、最大2個のデータを保持している。時間ウィンドウ404は、タイムスタンプが9:55〜9:59までのデータを保持している。
図5Cの一時保持領域413は、オペレータ402からの左入力における生存中のデータ501〜505、およびオペレータ405からの右入力における生存中のデータ512、513、514、516、517を保持している。それぞれ、ウィンドウ演算401に保持しているデータ集合のうち、フィルタ条件sa.val>100を満たすデータの集合、およびウィンドウ演算404に保持しているデータ集合のうち、フィルタ条件sb.val<>−1を満たすデータの集合である。また、上述の通り結合条件がカラムidに関する等号条件であるため、カラムidの値をキーとして索引付けしており、カラムidの値別にグループ分けして保持している。
図5Dのウィンドウ演算408は、一時保持領域413に保持する、左入力のデータ集合と右入力のデータ集合の直積において、結合条件sa.id=sb.idを満たす組合せ521〜528を保持している。これらのデータのタイムスタンプは、組合せた左右データのうち遅い方のタイムスタンプをとる。
図5Eの一時保持領域414は、ウィンドウ演算408に保持しているデータをカラムid別にグループ分けして集約したデータを、各グループにつき一つずつ保持している。カラムidがa、bおよびcそれぞれについて、データ531、532、および533を保持している。
次に、図6を用いて、本実施例における待機系追加時の動作の概要を述べる。図2に示した現用系ストリームデータ処理システム206のみが動作している片系運用中に、待機系ストリームデータ処理システム216を追加する例を想定する。待機系ストリームデータ処理システム216を追加した際に、追加したことを現用系ストリームデータ処理システム206に通知する。現用系ストリームデータ処理システム206は、その時点のシステム時刻(この例では10:00)など、待機系追加通知を契機として決定した時刻を、再現時刻650として記憶部に記憶する。また、再現時刻以降の入力データ631〜637を、データ641〜647に複製して待機系にも投入する。ここで、現用系システムは再現時刻以降のデータ処理を継続する一方、待機系システムはこれらのデータを処理せずに、計算機210の内部の記憶部であるストレージ213等に保持しておく。
図6の待機系ストリームデータ処理システム216は、自身の実行領域に確保したクエリ実行ワークエリア620上に、オペレータ600〜612によって構成されるクエリグラフを生成する。このクエリグラフは、現用系のクエリ実行ワークエリア420上のクエリグラフと同一である。但し、実行状態を保持するウィンドウ演算601、604、608、および一時保持領域613、614は空の状態である。
一方、現用系のウィンドウ演算401、404、408それぞれに対して、状態変化記録領域651、652、653を生成する。現用系でのデータ処理の過程において、再現時刻10:00以降に各ウィンドウで発生した実行状態の変化を、対応する状態変化記録領域651、652、653に記録しておく。
次に、各ウィンドウ演算401、404、408の実行状態を、ウィンドウ演算601、604、608に順次コピーする。ここで、コピーする必要があるのは再現時刻10:00直前、即ち、10:00の入力データを処理する直前の実行状態である。
例として、この時点の実行状態が図5A〜図5Eに示した通りであったとする。まず、ウィンドウ演算404の実行状態を、ウィンドウ演算604にコピーする。コピー時刻が10:01(copy@10:01と表示、以下同じ)になったとすると、ウィンドウ演算404からは、10:01の5分前である9:56以前のデータは消滅している。消滅したデータはウィンドウ演算404における実行状態の変化として、状態変化記録領域652に記録する。コピー時刻10:01におけるウィンドウ演算404上のデータのうち、再現時刻10:00より前のデータと、状態変化記録領域652のデータを合せることで、ウィンドウ演算404の再現時刻10:00直前における実行状態を再現し、ウィンドウ演算604にコピーする。
同様に、ウィンドウ演算401の実行状態を10:02にコピーする場合も、状態変化記録領域651に、再現時刻10:00から10:02までのウィンドウ演算401の変化を記録しているので、コピー時刻10:02におけるウィンドウ演算401の実行状態と、状態変化記録領域651のデータから、10:00直前におけるウィンドウ演算401の実行状態を再現して、ウィンドウ演算601にコピーする。ウィンドウ演算408の実行状態を10:03にコピーする場合も同様である。コピー時刻におけるウィンドウ演算の実行状態と、状態変化記録領域のデータから、再現時刻におけるウィンドウ演算の実行状態を再現する方法の詳細は後述する。
図6に例示する本実施例のシステムによれば、10:00直前における現用系の各ウィンドウ演算の実行状態の、待機系620の各ウィンドウ演算601、604、608へのコピーが完了した後に、ウィンドウ演算からストリーム化演算に至る部分クエリグラフを、ウィンドウ演算601、604、608上のデータについて実行することで、クエリグラフ上に存在するウィンドウ演算以外の、実行状態を保持するオペレータの状態も、再現時刻10:00の直前における現用系の状態に再現することが可能である。図6の例では、角丸四角の破線で囲ったオペレータ群621および622が、ウィンドウ演算601、604、608からストリーム化演算607、611、612に至る部分クエリグラフを形成する。
部分クエリグラフ621を、ウィンドウ演算601および604に再現したデータに対して、ストリーム化演算607まで処理することで、グラフ上に存在するオペレータ606の10:00直前における実行状態を、一時保持領域613に再現する。また、部分クエリグラフ622を、ウィンドウ演算608および604に再現したデータに対して、ストリーム化演算611および612まで処理することで、グラフ上に存在するオペレータ609の10:00直前における実行状態を、一時保持領域614に再現する。
以上の処理によって、待機系のクエリ実行ワークエリア620に、10:00直前における現用系のクエリ実行ワークエリア420の実行状態を再現した後で、複製して保持していた再現時刻以降のデータ641〜647の処理の実行を開始する。これにて、二重化構成への復帰が完了する。
次に、図7を用いて、本実施例の時間ウィンドウにおける実行状態の再現方法を示す。破線四角700は、10:00直前における時間ウィンドウ404の実行状態を表す。この時点で、状態変化記録領域652は空である。破線四角701は10:01の状態である。この時、9:56以前のデータ511〜514がウィンドウ演算404から消滅し、状態変化記録領域652に記録されている。また、ウィンドウ演算404には10:01のデータ636が追加されている。状態変化記録領域652上のデータと、ウィンドウ演算404に保持しているデータ515、516、517、636のうち、再現時刻10:00以降のデータ636を除いたデータ515〜517をコピーすることで、10:00直前におけるウィンドウ演算404の実行状態と同一の実行状態を、ウィンドウ演算604に再現する。
個数ウィンドウにおける実行状態の再現方法も、時間ウィンドウにおける方法と同様である。図8を用いて、本実施例のグループ別個数ウィンドウにおける実行状態の再現方法を示す。
図8において、破線四角800は、10:00直前におけるグループ別個数ウィンドウ401の実行状態を表す。この時点で、状態変化記録領域651は空である。破線四角801は10:01の状態である。この時点までに、ウィンドウ演算401には、カラムidがbの二つのデータ631および633が追加されているため、上限である2個を超えて消滅したデータ502および503が、状態変化記録領域651に記録されている。また、カラムidがcのデータ634が追加されているため、消滅したデータ504が追加されている。その他、カラムidがdのデータ632が追加されている。破線四角802は、10:02の状態である。この時までに、カラムidがbのデータ635が追加されているため、データ631が消滅するが、再現時刻10:00以降のデータであるため、状態変化記録領域には記録しない。
状態変化記録領域651上のデータと、ウィンドウ演算401に保持しているデータのうち、再現時刻10:00以降のデータを除いたデータをコピーすることで、10:00直前におけるウィンドウ演算401の実行状態と同一の実行状態を、ウィンドウ演算601に再現する。
次に、図9を用いて、本実施例の永続ウィンドウにおける実行状態の再現方法を示す。破線四角900は、10:00直前における永続ウィンドウ408の実行状態を表す。この時点で、状態変化記録領域653は空である。破線四角901は10:03の状態である。この時までに、ウィンドウ演算408には、データ911〜918が追加されている。また状態変化記録領域は空のままである。実際、永続ウィンドウにおいては、状態変化記録領域は不要である。ウィンドウ演算408に保持しているデータのうち、再現時刻10:00以降のデータを除いたデータをコピーすることで、10:00直前におけるウィンドウ演算408の実行状態と同一の実行状態を、ウィンドウ演算608に再現する。
以上、図7〜9を用いて、本実施例のウィンドウ演算の種別毎に、再現時刻における実行状態の再現方法を示した。但し、ウィンドウ演算に保持されているデータが大量の場合には、一度にデータをコピーすると、静止化と同様の処理停止が発生してしまう。これを避けるために、一つのウィンドウ演算についてのコピーも、さらに細分化してコピーする必要がある。
そこで、本実施例の変形例として、一つのウィンドウ演算についてのコピーも、さらに細分化してコピーする方法を以下に説明する。なお、永続ウィンドウについては自明であるため割愛し、時間ウィンドウと個数ウィンドウの場合を説明する。
まず、図10を用いて、時間ウィンドウにおける、細分化した実行状態の再現方法を示す。破線四角1000は、10:00丁度における時間ウィンドウ404の実行状態を表す。状態変化記録領域652には、9:55のデータ511、512、513が記録されている。この時点で、二個のデータ511と512のみをウィンドウ演算604にコピーする。次に、破線四角1001は10:01の状態を表す。この時点で、三個のデータ513、514、515のみをウィンドウ演算604にコピーする。データ513、514をコピーすることで、状態変化記録領域652は空になるため、残り一個はウィンドウ演算404上のデータをコピーする。次に、破線四角1002は10:03の状態を表す。この時点までに9:57のデータ515は消滅しているが、既にコピー済であるため状態変化記録領域652には記録しない。この時点で、状態変化記録領域652に記録されているデータ516、およびウィンドウ演算404上のデータ517をコピーするが、残りのデータ636および637は再現時刻10:00以降のデータであるためコピーしない。これにて再現が完了する。
個数ウィンドウにおける、細分化した実行状態の再現方法も、時間ウィンドウにおける方法と同様である。
次に、図11を用いて、グループ別個数ウィンドウにおける、細分化した実行状態の再現方法を示す。グループ別個数ウィンドウでは、グループ順に細分化してコピーを進める。同図において、破線四角1100は、10:00丁度におけるウィンドウ演算401の実行状態を表す。状態変化記録領域651には、データ502が記録されている。この時点で、カラムidがaのグループに属するデータ501と、カラムidがbのグループに属するデータ502、503をコピーする。カラムidがaのグループについては、データ501をコピーすることで全データコピー済となるため、コピーが完了する。カラムidがbのグループについては、状態変化記録領域651のデータ502およびウィンドウ演算401のデータ503をコピーすると、残りのデータ631が再現時刻10:00以降のデータであるため、コピーが完了する。コピーしたデータ502は、状態変化記録領域651から削除する。
破線四角1101は、10:01におけるウィンドウ演算401の実行状態を表す。状態変化記録領域651には、データ504が記録されている。この時点までに9:57のデータ503は消滅しているが、既にコピー済であるため状態変化記録領域651には記録しない。この時点で、カラムidがcのグループについて、データ504、505をコピーし、残りのデータ634が再現時刻10:00以降のデータであるため、コピーが完了する。破線四角1102は、10:02におけるウィンドウ演算401の実行状態を表す。状態変化記録領域651は空である。この時点までに10:00のデータ631は消滅しているが、再現時刻以降のデータであるため状態変化記録領域651には記録しない。この時点で、カラムidがdのグループについて、データ506をコピーし、残りのデータ632が再現時刻10:00以降のデータであるため、コピーが完了する。
次に、図12において、本実施例のストリームデータ処理システムを実現するソフトウェアの機能ブロック構成図の一例を示す。現用系ストリームデータ処理システム206、および待機系ストリームデータ処理システム216に分けて示す。現用系サーバに障害が発生した場合には、待機系サーバが現用系サーバに切り替わるため、両サーバで実行するストリームデータ処理システムは同一となる。但し、ここでは説明を容易化するために、それぞれ異なる構造を持つシステムとして記載している。実際に図2の計算機200および210で動作させるストリームデータ処理システムは、206と216の両方の機能を併せ持ったシステムであることは自明である。
また、図12に示す機能ブロック構成図において、太線で示されたブロックはソフトウェア機能ブロックを示し、細線で示されたブロックは、記憶部を構成するメモリ202、212上に形成される記憶領域を示している。例えば、太線で示されたクエリ実行部1202、1252は、それぞれ計算機200、210の処理部であるCPU201、211で実行されるプログラムを示している。
一方、細線で示されるクエリ実行ワークエリア420、620やコピー対象オペレータリスト記憶領域1209、1259、更にコピーバッファ領域1208、1256等は、CPU201、211におけるプログラムの実行により、それぞれメモリ202、212上に形成される記憶領域を示している。クエリ実行ワークエリア420、620はそれぞれ図示の通りの保持領域を形成する。なお、特に断らないが、図13などの他の図面においても同様であり、太線、細線のブロックは、それぞれ機能プログラムとメモリ上の記憶領域を示している点、留意されたい。
さて、図12において、ストリームデータ処理システム206および216は、それぞれ、入力データを受信する入力データ受信部1205および1255、クエリグラフとオペレータの実行状態を保持するクエリ実行ワークエリア420および620、クエリ実行ワークエリアのデータに基づいてクエリを実行するクエリ実行部1202および1252、クエリ実行時刻を計時するシステム時計1204および1254、クエリ実行結果を出力する出力データ送信部1208および1258を備える。クエリ実行ワークエリア420および620には、それぞれ、オペレータ毎の実行状態を保持するオペレータ実行状態保持領域1221〜1223および1271〜1273を確保する。現用系のクエリ実行ワークエリア420には、各実行状態保持領域1221〜1223に対して、オペレータ状態変化記録領域1224〜1226も確保する。
現用系のストリームデータ処理システム206は、クエリ106を解析してクエリ実行ワークエリア上にクエリグラフを生成するクエリ解析部1210を備える。クエリ解析部1210は、クエリグラフ上のオペレータ群において、待機系追加時に実行状態をコピーするオペレータを選定する、コピー対象オペレータ選定部1211を含む。コピー対象オペレータ選定部1211で選定したオペレータ群は、コピー対象オペレータリスト記憶領域1209に記憶する。
さらに、待機系ストリームデータ処理システム216から待機系追加通知を受信する、待機系追加通知受信部1201、待機系追加時点のシステム時計1204における時刻を再現時刻として保存する、再現時刻記憶領域1231、クエリ実行ワークエリア420上に確保したオペレータ実行状態保持領域1221〜1223、およびオペレータ状態変化記録領域1224〜1226に保存されているデータから、コピー対象オペレータの再現時刻における実行状態を再現して、コピーバッファ領域1206に書き出す、ワークエリア実行状態書出し部1203、および、コピーバッファ領域1206上のデータを待機系のストリームデータ処理システム216に送信する、ワークエリアデータ送信部1207を備えている。
一方、待機系のストリームデータ処理システム216は、現用系のストリームデータ処理システム206に待機系追加通知を送信する、待機系追加通知送信部1251、現用系のストリームデータ処理システム206が備えるワークエリアデータ送信部1207からデータを受信してコピーバッファ1256に書き出す、ワークエリアデータ受信部1257、コピーバッファ1256のデータを、クエリ実行ワークエリア620上に確保したオペレータ実行状態1271〜1273に移動して、ウィンドウ演算からストリーム化演算までの部分クエリグラフの処理を実行する、追付き処理部1253を備える。
待機系のストリームデータ処理システム216は、現用系のストリームデータ処理システム206が備える待機系追加通知受信部1201から、待機系追加通知の返信として、クエリグラフの情報およびコピー対象リスト記憶領域1209に保持されているコピー対象オペレータ群の情報を受信し、前者の情報からクエリ実行ワークエリア620上にクエリグラフを生成し、後者の情報をコピー対象オペレータリスト記憶領域1259に記憶する。
さらに、現用系のストリームデータ処理システム206は、再現時刻以降のデータを複製して、待機系のストリームデータ処理システム216に送信する、複製データ送信部1232、および、現用系のストリームデータ処理システム206と待機系のストリームデータ処理システム216の出力結果を元にして、障害発生時にもデータの一貫性を保証しつつアプリケーションにデータを送信する、出力整合性保証部1233を備える。但し、複製データ送信部1232および出力整合性保証部1233は、現用系のストリームデータ処理システム206の外側で動作する構成も可能である。
次に、図13において、上述した図12の各ソフトウェアブロック間の実行シーケンスを示す。まず1300は、システム時計1204と入力データ受信部1205の関係を示す。ストリームデータ処理システム206が入力データに対してタイムスタンプを付与する場合においては、システム時計1204は計算機が持つ時計であり、入力データ受信部1205は各入力データの受信時におけるシステム時計1204の時刻をタイムスタンプとする。一方、入力データにタイムスタンプが付与されており、ストリームデータ処理システム206が該時刻に基づいてデータ処理を実行する場合は、入力データ受信部1205が各入力データの受信時に、入力データに付与されていたタイムスタンプをシステム時計1204にセットする。なお、これまでの説明において用いた、データのタイムスタンプ、再現時刻、コピー時点の時刻などの、時刻に関する用語は、全てシステム時計1204の時刻を基準としている。
待機系追加時には、待機系追加通知送信部1251が、待機系追加通知受信部1201の処理1301を起動する。処理1301は、入力データ受信部1205の処理1302を起動する。処理1302は、未だクエリ実行部1202に投入していない先頭データのタイムスタンプを、再現時刻記憶領域1231に設定する処理1303を起動する。また、前記先頭データ以降のデータを複製して複製データ送信部1232に渡す処理を開始する。処理1301は、処理1302完了後、ワークエリアデータ送信部1207の処理1304を起動し、複製データ送信部1232の処理1305を起動し、クエリ実行部1252の処理1315を起動する。処理1305は、入力データ送信部1205の処理1307によって複製データを受取り、入力データ受信部1255に送信するループ1306を実行する。
クエリ実行部1202は、クエリの実行を無限ループ1308で繰り返している。前記ループ1308を実行中に再現時刻記憶領域1231を確認する処理1309を実行し、再現時刻が設定されていた場合は、実行状態を待機系にコピーする動作に移行する。この動作においては、入力データ受信部1205からデータを受取る処理1311、受取ったデータを処理することが可能なオペレータを実行する処理、および、オペレータの実行状態をコピーバッファ領域1206に書き出す処理1312を繰り返す、ループ1310を実行する。
ワークエリアデータ送信部1207の処理1304は、コピーバッファ領域1206からデータを受取る処理1314、および受取ったデータをワークエリアデータ受信部1257に非同期に送信する処理1318を繰り返す、ループ1313を実行する。処理1318は、受信したデータをコピーバッファ領域1256に保存する。
待機系216のクエリ実行部1252の処理1315は、追付き処理部1253の処理1316を起動する。処理1316は、コピーバッファ1256に保存されたデータを読み込む処理1319を、全てのコピー対象オペレータの実行状態を受信完了するまで繰り返すループ1317を実行する。ループ1317の実行から抜けると、システム時計1254に再現時刻を設定する処理1320を実行し、クエリ実行処理1252に戻る。これにて、本実施例のシステムにおける二重化構成への復帰が完了する。
次に、図14、図15、図16において、本実施例のシステムにおける処理フローの一例を示す。
まず、図14は、待機系追加通知受信部1201における処理1301のフローである。処理1400は、入力データ受信部1205において、未だクエリ実行部1202に投入していないデータの先頭から複製を開始する。処理1401は、複製を開始した前記先頭データのタイムスタンプを、再現時刻として設定する。処理1402は、ワークエリアデータ送信部1207を起動する。処理1403は、複製データ送信部1232を起動する。処理1404は、待機系ストリームデータ処理システム216に、クエリグラフの情報、コピー対象オペレータの情報、および再現時刻の情報を送信して、クエリ実行部1252を起動する。
次に、図15は、クエリ実行部1202における、クエリ実行ループの処理フローである。処理1500は、コピー対象オペレータ通番を、コピー対象オペレータリストのサイズに初期設定する。初期設定後、ループ1501から1515までを無限ループで繰り返す。処理1502は、再現時刻が再現時刻記憶領域1231に記憶されているか否かを判定する。再現時刻が設定されている場合は、処理1503にて、コピー対象オペレータの通番を0にセットする。これにより、以降の処理においてオペレータ実行状態のコピー処理が実行されることになる。また、処理1502にて再度、真と判定されないように再現時刻の設定をクリアする。
処理1504にて、入力データ受信部1205からデータを読み込んだ後、ループ1505から1509までを、クエリグラフ上に実行可能なオペレータが存在する限り実行する。処理1506において、コピー対象オペレータ通番の値に基づいてオペレータ実行状態のコピー中と判定され、かつ当該オペレータがコピー対象オペレータである場合には、処理1508を実行し、それ以外の場合には、通常処理1507を実行する。処理1508では、通常処理に加えて実行状態の変化を記録する。処理1508の詳細は図24を用いて後述する。
ループ1505から1509を抜けた後、処理1510において、コピー対象オペレータ通番の値に基づいてオペレータ実行状態のコピー中と判定された場合は、処理1511〜1514で構成される、実行状態のコピー処理を実行する。処理1511は、コピー対象オペレータリストにおいて、コピーオペレータ通番目の、コピー対象オペレータの実行状態を、コピーバッファ領域1206に書き出す。処理1511の詳細は図25および図26を用いて後述する。
処理1511において、前記コピー対象オペレータのコピーが完了したと判定された場合は、処理1513にてコピー終了タグをコピーバッファ領域1206に書出し、処理1514にてコピー対象オペレータ通番をインクリメントすることで、コピー対象オペレータを次のオペレータに移す。このとき、全てのコピー対象オペレータについてコピーが完了したならば、コピー通番がコピー対象オペレータリストのサイズになるので、オペレータ実行状態のコピーが停止する。
次に、図16は、追付き処理部1253における処理1316のフローである。処理1600は、コピー対象オペレータ通番を0に設定する初期化処理である。ループ1601から1607の処理を、全てのコピー対象オペレータについて処理が完了するまで実行する。コピー対象オペレータリストにおいて、コピーオペレータ通番目の、コピー対象オペレータについて、ループ1602から1605の処理を、コピー終了タグをコピーバッファ領域1256から読み取るまで実行する。処理1603にて、コピーバッファ領域1256からデータを読み取り、処理1604にて、前記コピー対象オペレータの実行状態保持領域に、読み取ったデータを追加する。ループ1602から1605を抜けたら、処理1606にてコピー対象オペレータ通番をインクリメントすることで、コピー対象オペレータを次のオペレータに移す。
ループ1601から1607を抜けたら、処理1608にてウィンドウ演算からストリーム化演算に至る部分クエリグラフを実行し、処理1609にて再現時刻をシステム時計1254に設定して、処理1316を終了する。処理1608は、全てのコピー対象オペレータにおけるコピーの完了を待たずに、部分クエリ毎にウィンドウ演算のデータが揃った段階で処理を開始し、パイプライン的に並列実行するパイプライン並列実行による方法でも構わない。
次に、図17を用いて、実行状態を保持する、ウィンドウ演算以外のオペレータについても実行時刻を再現する方法を説明する。状態変化記録領域1701および1702は、それぞれ一時保持領域413および414の状態変化を記録する。コピー時点の10:02において、一時保持領域413と状態変化記録領域1701から、再現時刻10:00における一時保持領域413のデータを再現して、一時保持領域613にコピーする。また、コピー時点の10:03において、一時保持領域414と状態変化記録領域1702から、再現時刻10:00における一時保持領域414のデータを再現して、一時保持領域614にコピーする。
この方法においては、処理1608における部分クエリグラフの実行を必要としない。ウィンドウ演算で保持されるデータ数に比べて、結合オペレータで処理するデータ数が、前段のフィルタオペレータなどで大幅に削減されるような場合、あるいは集約オペレータで入力データ数に対して集約後のグループ数が大幅に削減されるような場合には、ウィンドウ演算のデータを処理することで実行状態を回復するよりも、このように実行状態を直接コピーする方が効率的である。
結合オペレータおよび集約オペレータにおける実行状態の再現方法を次に示す。
まず、図18を用いて、結合オペレータにおける実行状態の再現方法を示す。破線四角1800は、10:00直前における結合オペレータ406の一時保持領域413を表す。この時点で、状態変化記録領域1701は空である。破線四角1801は10:02の状態である。この時点までに、一時保持領域413において、データ631、633、634、635、636が追加され、データ502、503、504、512、513、514、631が消滅する。再現時刻10:00以降のデータである631以外の、消滅したデータは、状態変化記録領域1701に記録している。
状態変化記録領域1071上のデータと、一時保持領域413に保持しているデータのうち、再現時刻10:00以降のデータを除いたデータをコピーすることで、10:00直前における一時保持領域413と同一の状態を、一時保持領域613に再現する。
次に、図19を用いて、集約オペレータにおける実行状態の再現方法を示す。破線四角1900は、10:00直前における集約オペレータ409の一時保持領域414を表す。この時点で、状態変化記録領域1702は空である。破線四角1901は10:01の状態である。この時点までに、カラムidがbのグループについては、集約結果がデータ1912、1914、1915の順に更新され、カラムidがcのグループについては、集約結果がデータ1913から1916に更新される。ここで、再現時刻10:00より前の更新データ1912および1913は、状態変化記録領域1702に記録するが、再現時刻以降の更新データである1914は記録しない。破線四角1902は10:02の状態である。この時点までに、カラムidがaのグループについては、集約結果がデータ1911から1918に更新され、カラムidがbのグループについては、集約結果がデータ1915から1917に更新される。ここで、再現時刻10:00より前の更新データ1911は、状態変化記録領域1702に記録するが、再現時刻以降の更新データである1915は記録しない。
状態変化記録領域1072上のデータと、一時保持領域414に保持しているデータのうち、再現時刻10:00以降のデータを除いたデータ(この例においては、そのようなデータは存在しない)をコピーすることで、10:00直前における一時保持領域414と同一の状態を、一時保持領域614に再現する。
以上、図18、および図19を用いて、実行状態を一時保持領域に保持するオペレータである、結合オペレータおよび集約オペレータについて、再現時刻における一時保持領域の再現方法を示した。但し、一時保持領域に保持されているデータが大量の場合には、一度にデータをコピーすると、静止化と同様の処理停止が発生してしまう。これを避けるために、一つの一時保持領域についてのコピーも、さらに細分化してコピーする必要がある。この細分化コピーの方法を以下に示す。
まず、図20A、図20Bを用いて、結合オペレータにおける、細分化した一時保持領域の再現方法を示す。結合オペレータでは、索引付けによって分類したグループ順に細分化してコピーを進める。図20Aの破線四角2000は、10:00丁度における一時保持領域413の状態を表す。状態変化記録領域1701には、データ502、512、513が記録されている。この時点で、二個のデータのみをコピーする。ここでは、グループ順に、左入力におけるカラムidがaのグループに属するデータ501と、カラムidがbのグループに属するデータ502の二個をコピーすることになる。カラムidがaのグループについては、データ501をコピーすることで全データコピー済となるため、コピーが完了する。カラムidがbのグループについては、状態変化記録領域1701のデータ502をコピーして、中断する。データ502は状態変化記録領域1701から削除する。
図20Aの破線四角2001は、10:01における一時保持領域413の状態を表す。状態変化記録領域1701には、データ503、504、514が追加されている。この時点で、さらに二個のデータのみをコピーする。ここでは、前回のコピーで中断された、左入力におけるカラムidがbのグループから再開する。カラムidがbのグループについては、状態変化記録領域1701のデータ503をコピーし、一時保持領域413のデータ631および633が再現時刻10:00以降のデータであるため、コピーが完了する。カラムidがcのグループについては、状態変化記録領域1701のデータ504をコピーして、中断する。
図20Bの破線四角2002は、10:02における一時保持領域413の状態を表す。この時点までに、データ631が消滅しているが、再現時刻以降のデータであるため、状態変化記録領域1701には記録しない。この時点で、さらに4個のデータのみをコピーする。ここでは、前回のコピーで中断された、左入力におけるカラムidがcのグループから再開する。カラムidがcのグループについては、状態変化記録領域1701のデータ504をコピーし、一時保持領域413のデータ634が再現時刻10:00以降のデータであるため、コピーが完了する。右入力におけるカラムidがaのグループについては、状態変化記録領域1701のデータ512および514をコピーし、一時保持領域413にデータが存在しないため、コピーが完了する。カラムidがbのグループについては、状態変化記録領域1701にデータが存在しないため、一時保持領域413のデータ516をコピーし、残りのデータ636が再現時刻10:00以降のデータであるため、コピーが完了する。
図20Bの破線四角2003は、10:03における一時保持領域413の状態を表す。この時点までに、データ516が消滅しているが、コピー済のデータであるため、状態変化記録領域1701には記録しない。この時点で、さらに2個のデータをコピーする。ここでは、右入力におけるカラムidがcのグループから再開する。カラムidがcのグループについては、状態変化記録領域1701のデータ513および一時保持領域413のデータ517をコピーすることで、全データコピー済となるため、コピーが完了する。
次に、図21を用いて、集約オペレータにおける、細分化した一時保持領域の再現方法を示す。集約オペレータでは、集約単位のグループ順に細分化してコピーを進める。破線四角2100は、10:01における一時保持領域414の状態を表す。この時点までに、カラムidがbのグループについては、集約結果がデータ1912、1914、1915の順に更新され、カラムidがcのグループについては、集約結果がデータ1913から1916に更新される。ここで、再現時刻10:00より前の更新データ1912および1913は、状態変化記録領域1702に記録するが、再現時刻以降の更新データである1914は記録しない。この時点で、カラムidがaのグループをコピーする。状態変化記録領域1702にはカラムidがaのデータは存在せず、一時保持領域414上のデータ1911をコピーすることで全データコピー済となるため、コピーが完了する。
破線四角2101は、10:02における一時保持領域414の状態を表す。この時点までに、カラムidがbのグループについては、集約結果がデータ1915から1917に更新される。更新されたデータ1915は再現時刻以降のデータであるため、状態変化記録領域1702に記録しない。この時点で、カラムidがbのグループについては、状態変化記録領域1702のデータ1912をコピーし、一時保持領域414上のデータ1917が再現時刻以降のデータであるため、コピーが完了する。
破線四角2102は、10:03における一時保持領域414の状態を表す。この時点までに、カラムidがaのグループについては、集約結果がデータ1911から1918に更新される。更新されたデータ1911はコピー済であるため、状態変化記録領域1702に記録しない。この時点で、カラムidがcのグループについては、状態変化記録領域1702のデータ1913をコピーし、一時保持領域414上のデータ1916が再現時刻以降のデータであるため、コピーが完了する。
次に、図22、23を用い、本実施例の変形例として、永続ウィンドウにおける実行状態の再現を効率化する方法について説明する。
まず、図22を用いて、永続ウィンドウの後段に集約オペレータが位置するケースの効率化方法を示す。
集約オペレータは、個々の入力データではなく、全データの集約結果であるデータを保持するオペレータである。ここで、永続ウィンドウに保持された入力データは決して消滅することがないため、ウィンドウにデータが追加されない限り、集約結果が変化することはない。また、データが追加された場合も、それ以前から存在していたデータが消滅することはないため、個々のデータではなく、その集約結果さえ保持していれば、変化後の集約結果を算出することが可能である。
以上に基づき、永続ウィンドウを入力とする、実行状態を保持するオペレータが集約オペレータのみの場合は、当該集約オペレータの実行状態のみを再現し、永続ウィンドウの状態を再現しないことで、効率化を図る。
図22の例で、ウィンドウ演算408は永続ウィンドウである。永続ウィンドウ408を入力とする部分クエリグラフ622において、一時保持領域を持つオペレータは集約オペレータ409のみである。従って、永続ウィンドウ408の実行状態は再現せず、集約オペレータ409の実行状態を再現することで、実行状態の再現を効率化する。
次に、図23を用いて、永続ウィンドウで保持するデータが、マスタ表のような固定データであるケースの効率化方法を示す。
銘柄コードと銘柄名の対応表のようなマスタ表は、変化が発生しない固定的なデータ集合と捉えることができる。このようなデータは、データベースなどから永続ウィンドウにロードして参照するのが一般的な利用形態である。変化しないデータであれば、現用系の実行状態から再現するのではなく、元のデータを格納していたデータベース等から直接ロードすることでも等価と見做せる。
以上に基づき、変化しないマスタ表を保持する永続ウィンドウの実行状態は、データベース等からロードして再現することで、効率化を図る。
図23の例で、ウィンドウ演算2304および2306は永続ウィンドウである。永続ウィンドウ2304には、データベース2300に格納されているマスタ表2301を、データ2311〜2315に変換してロードしている。待機系追加時において、永続ウィンドウ2306には、マスタ表2301をデータ2321〜2325に変換してロードすることで、実行状態の再現を効率化する。なお、データ2321〜2325のタイムスタンプは、再現時刻より前の任意の時刻で構わない。
次に、図24を用いて、図15の処理1508を実現する処理フローの一例を示す。図24は、通常処理において、オペレータの実行状態から消滅するデータが発生した場合に、当該データを状態変化記録領域に記録するか否かを判定するフローである。処理2401にてコピー済のデータであるか否かを判定し、処理2402にて再現時刻以降のデータか否かを判定する。両処理において共に偽と判定されるデータは、待機系にコピーする必要があるので、状態変化記録領域に記録する。
次に、図25および図26を用いて、図15の処理1511を実現する処理フローの一例を示す。図25は、時間ウィンドウあるいは個数ウィンドウにおけるフローである。図26は、グループ別個数ウィンドウ、結合オペレータ、あるいは集約オペレータにおけるフローである。
時間ウィンドウあるいは個数ウィンドウにおいては、図25のループ2501から2507を、一度にコピーする回数だけ実行する。まず、処理2502にて状態変化記録領域にデータが存在すると判定された場合は、処理2503にて、その先頭のデータをコピーバッファ領域1206に移動する。このとき、当該データは状態変化記録領域から削除する。処理2502にて偽と判定された場合は、処理2504にてウィンドウにデータが存在するか否かを判定し、真と判定される場合は、処理2505にて再現時刻より前のタイムスタンプを持つデータが全てコピー済であるか否かを判定し、偽である場合は、未だコピーしていないデータをコピーバッファ領域1206にコピーする。ウィンドウが空であるか、再現時刻より前のタイムスタンプを持つデータが全てコピー済である場合は、コピーする必要があるデータがそれ以上存在しないことになるので、ループ2501から2507をブレークし、処理2508にて、当該オペレータについてのコピー完了を決定する。
グループ別個数ウィンドウ、結合オペレータ、あるいは集約オペレータにおいては、図26のループ2601から2609までを、一度にコピーする回数だけ実行する。角丸四角の破線で囲まれた処理2600は、コピー対象のデータキーについて処理する。コピー対象データキーの初期値は、例えば、図15の処理1503、あるいは処理1514にて、コピー対象オペレータを指定する際に設定することができる。
まず、処理2602にて状態変化記録領域に、対象データキーのデータが存在すると判定された場合は、処理2603にて、その先頭のデータをコピーバッファ領域1206に移動する。このとき、当該データは状態変化記録領域から削除する。処理2602にて偽と判定された場合は、処理2604にてウィンドウに対象データキーのデータが存在するか否かを判定し、真と判定される場合は、処理2605にて、対象データキーのデータに関して、再現時刻より前のタイムスタンプを持つデータが全てコピー済であるか否かを判定し、偽である場合は、未だコピーしていないデータをコピーバッファ領域1206にコピーする。対象データキーに関して、ウィンドウにデータが存在しないか、再現時刻より前のタイムスタンプを持つデータが全てコピー済である場合は、コピー必要なデータがそれ以上存在しないことになり、処理2607に移行する。
処理2607にて、まだ処理を終了していないデータキーが存在すると判定された場合は、処理2608にて対象データキーを変更して、ループ2601から2609を継続する。全てのデータキーについて処理を終了していると判定された場合は、ループ2601から2609をブレークし、処理2610にて、当該オペレータについてのコピー完了を決定する。
なお、結合オペレータと集約オペレータに関しては、処理2604および2605における用語「ウィンドウ」を「一時保持領域」に置き換えた説明となる。
100…ストリーム処理サーバ
101、102、103、200、210…計算機
104…ネットワーク
201、211…CPU
202、212…メモリ
203、213…ストレージ装置
204、214…ネットワークI/F
205、215…計算機内部バス
206、216…ストリームデータ処理システム
400〜412、600〜612…オペレータ
413、414、613、614…一時保持領域
651、652、653、1701、1702…状態変化記録領域
501〜506、511〜517、521〜528、531〜533、631〜637、641〜647、911〜918、1911〜1918…データ
1205、1255…入力データ受信部
1202、1252…クエリ実行部
1208、1258…出力データ送信部
1204、1254…システム時計
1201…待機系追加通知受信部
1251…待機系追加通知送信部
1207…ワークエリアデータ送信部
1208…ワークエリアデータ受信部
1203…ワークエリア実行状態書出し部
1253…追付き処理部。
101、102、103、200、210…計算機
104…ネットワーク
201、211…CPU
202、212…メモリ
203、213…ストレージ装置
204、214…ネットワークI/F
205、215…計算機内部バス
206、216…ストリームデータ処理システム
400〜412、600〜612…オペレータ
413、414、613、614…一時保持領域
651、652、653、1701、1702…状態変化記録領域
501〜506、511〜517、521〜528、531〜533、631〜637、641〜647、911〜918、1911〜1918…データ
1205、1255…入力データ受信部
1202、1252…クエリ実行部
1208、1258…出力データ送信部
1204、1254…システム時計
1201…待機系追加通知受信部
1251…待機系追加通知送信部
1207…ワークエリアデータ送信部
1208…ワークエリアデータ受信部
1203…ワークエリア実行状態書出し部
1253…追付き処理部。
Claims (15)
- 複数の計算機群を用いた冗長構成におけるストリームデータ処理障害回復方法であって、
前記計算機群は、データに対するクエリグラフ上のオペレータ集合による処理結果を出力する第一の計算機と、新たに追加された第二の計算機から構成され、
前記第一の計算機は、前記第二の計算機が前記計算機群に追加されたことを表す待機系追加通知に基づく時刻を再現時刻とし、
前記クエリグラフ上の前記オペレータ集合の実行ループにおいて、前記オペレータ集合中の状態複製の対象オペレータの実行時において、前記対象オペレータの実行状態に、前記再現時刻における状態からの変化があった場合に、状態の変化を表現する情報を記憶し、
前記実行ループ中の所定のタイミングにおいて、前記対象オペレータの前記タイミングにおける実行状態と、前記状態の変化を表現する情報とから、前記再現時刻における前記対象オペレータの実行状態を再現し、前記第二の計算機に送信する、
ことを特徴とするストリームデータ処理障害回復方法。 - 請求項1に記載のストリームデータ処理障害回復方法であって、
前記対象オペレータの実行状態を、前記対象オペレータが処理対象とする、生存期間中の前記データの集合によって表現し、
前記状態の変化を表現する情報である、前記再現時刻から前記タイミングまでに、前記実行状態を表現する前記データの集合から消滅した、前記再現時刻以前のデータの集合と、
前記タイミングにおける前記対象オペレータの実行状態を表現するデータの集合における、前記再現時刻以前の前記データの集合と、
の和集合であるデータ集合を、前記再現時刻における前記対象オペレータの実行状態とする、
ことを特徴とするストリームデータ処理障害回復方法。 - 請求項2に記載のストリームデータ処理障害回復方法であって、
前記タイミングにおいて、前記第一の計算機から前記第二の計算機に送信するデータの個数を制限し、
前記タイミングを複数回経過することで、前記再現時刻における前記実行状態を表現する全てのデータの集合を、前記第一の計算機から前記第二の計算機に送信する、
ことを特徴とするストリームデータ処理障害回復方法。 - 請求項1に記載のストリームデータ処理障害回復方法であって、
前記状態複製の対象オペレータがウィンドウ演算であり、
前記オペレータ集合中に含まれる全ての前記ウィンドウ演算について、実行状態を再現して、前記第二の計算機に送信し、前記第二の計算機が受信を完了した後に、
前記第二の計算機において、受信が完了した前記ウィンドウ演算のデータを対象として、
前記ウィンドウ演算を起点として、前記ウィンドウ演算の後段に位置する、直近のストリーム化演算を終点とする、部分クエリグラフ上のオペレータの処理を実行する、
ことを特徴とするストリームデータ処理障害回復方法。 - 請求項4に記載のストリームデータ処理障害回復方法であって、
前記第二の計算機において、前記ウィンドウ演算から、前記ストリーム化演算に至る、前記部分クエリグラフ上のオペレータの処理を、
前記部分クエリグラフのうち、入力とする全ての前記ウィンドウ演算の実行状態の受信が完了した部分クエリグラフから、順次パイプライン並列実行する、
ことを特徴とするストリームデータ処理障害回復方法。 - 請求項4に記載のストリームデータ処理障害回復方法であって、
前記ウィンドウ演算が永続ウィンドウであり、
前記永続ウィンドウを入力とする前記部分クエリグラフにおいて、前記永続ウィンドウが、集約オペレータの入力となっている場合、
前記永続ウィンドウを前記状態複製の対象オペレータから除外し、
前記集約オペレータを前記状態複製の対象オペレータに追加する、
ことを特徴とするストリームデータ処理障害回復方法。 - 請求項4に記載のストリームデータ処理障害回復方法であって、
前記ウィンドウ演算が永続ウィンドウであり、
前記第一の計算機において、前記永続ウィンドウのデータを外部記憶装置からロードしている場合に、
前記永続ウィンドウを前記状態複製の対象オペレータから除外し、
前記第二の計算機において、前記永続ウィンドウの実行状態を前記外部記憶装置から直接ロードする、
ことを特徴とするストリームデータ処理障害回復方法。 - 複数の計算機群を用いた冗長構成において、ストリームデータ処理を実行する計算機装置であって、
インタフェース部と、記憶部と、データに対するクエリグラフ上のオペレータ集合による処理結果を出力する処理部とを備え、
前記処理部は、
前記オペレータ集合の実行状態を前記計算機群に新たに追加された他の計算機に再現する際、
前記他の計算機が追加されたことを表す待機系追加通知に基づく再現時刻を決定し、
前記クエリグラフ上の前記オペレータ集合の実行ループにおいて、前記オペレータ集合中の状態複製の対象オペレータの実行時において、前記対象オペレータの実行状態に、前記再現時刻における状態からの変化があった場合に、状態の変化を表現する情報を前記記憶部に記憶し、
前記実行ループ中の所定のタイミングにおいて、前記対象オペレータの前記タイミングにおける実行状態と、記憶された前記状態の変化を表現する情報とから、前記再現時刻における前記対象オペレータの実行状態を再現し、前記インタフェース部を介して前記他の計算機に送信する、
ことを特徴とする計算機装置。 - 請求項8に記載の計算機装置であって、
前記処理部は、
前記対象オペレータの実行状態を、前記対象オペレータが処理対象とする、生存期間中のデータの集合によって表現し、
前記状態の変化を表現する情報である、前記再現時刻から前記タイミングまでに、前記実行状態を表現するデータ集合から消滅した、前記再現時刻以前のデータの集合と、
前記タイミングにおける、前記対象オペレータの実行状態を表現するデータの集合において、前記再現時刻以前のデータ集合と、
の和集合であるデータ集合を、前記再現時刻における前記対象オペレータの実行状態とする、
ことを特徴とする計算機装置。 - 請求項9に記載の計算機装置であって、
前記処理部は、
前記タイミングにおいて、送信するデータの個数を制限し、
前記タイミングを複数回経過することで、前記再現時刻における、前記実行状態を表現する、全てのデータの集合を前記他の計算機に送信する、
ことを特徴とする計算機装置。 - 複数の計算機群を用いた冗長構成において、ストリームデータ処理を実行する計算機装置であって、
インタフェース部と、記憶部と、処理部とを備え、
前記処理部は、
前記計算機装置が前記計算機群に追加されたことを示す待機系追加通知を、前記計算機群の現用系を構成する他の計算機に、前記インタフェース部を介して送出し、
前記他の計算機が、前記待機系追加通知を受けたことを契機として決定した再現時刻における、状態複製の対象オペレータである全てのウィンドウ演算の実行状態を、前記インタフェース部を介して受信し、
受信が完了した前記ウィンドウ演算のデータを対象として、前記ウィンドウ演算を起点として、前記ウィンドウ演算の後段に位置する、直近のストリーム化演算を終点とする部分クエリグラフ上のオペレータの処理を実行する、
ことを特徴とする計算機装置。 - 請求項11に記載の計算機装置であって、
前記処理部は、
前記ウィンドウ演算から前記ストリーム化演算に至る前記部分クエリグラフ上のオペレータの処理を、入力とする全てのウィンドウ演算の実行状態の受信が完了した前記部分クエリグラフから、順次パイプライン並列実行する、
ことを特徴とする計算機装置。 - 請求項11に記載の計算機装置であって、
前記ウィンドウ演算が永続ウィンドウであり、
前記処理部は、
前記永続ウィンドウを入力とする、前記部分クエリグラフにおいて、前記永続ウィンドウが、集約オペレータの入力となっている場合、
前記永続ウィンドウを、前記状態複製の対象オペレータから除外し、
前記集約オペレータを、前記状態複製の対象オペレータに追加する、
ことを特徴とする計算機装置。 - 請求項11に記載の計算機装置であって、
前記ウィンドウ演算が永続ウィンドウであり、
前記処理部は、
前記永続ウィンドウのデータを、外部記憶装置からロードしている場合に、
前記永続ウィンドウを、前記状態複製の対象オペレータから除外し、
前記永続ウィンドウの実行状態を、前記外部記憶装置から直接ロードする、
ことを特徴とする計算機装置。 - 請求項11に記載の計算機装置であって、
前記記憶部は、
前記再現時刻以降に受信するストリームデータを記憶し、
前記処理部は、前記部分クエリグラフ上のオペレータの処理を実行した後、
前記記憶部に記憶された前記ストリームデータの処理の実行を開始する、
ことを特徴とする計算機装置。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010057404A JP5331737B2 (ja) | 2010-03-15 | 2010-03-15 | ストリームデータ処理障害回復方法および装置 |
US13/389,971 US8904225B2 (en) | 2010-03-15 | 2010-08-24 | Stream data processing failure recovery method and device |
PCT/JP2010/064284 WO2011114548A1 (ja) | 2010-03-15 | 2010-08-24 | ストリームデータ処理障害回復方法および装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010057404A JP5331737B2 (ja) | 2010-03-15 | 2010-03-15 | ストリームデータ処理障害回復方法および装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2011192013A JP2011192013A (ja) | 2011-09-29 |
JP5331737B2 true JP5331737B2 (ja) | 2013-10-30 |
Family
ID=44648671
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010057404A Expired - Fee Related JP5331737B2 (ja) | 2010-03-15 | 2010-03-15 | ストリームデータ処理障害回復方法および装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8904225B2 (ja) |
JP (1) | JP5331737B2 (ja) |
WO (1) | WO2011114548A1 (ja) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9438656B2 (en) * | 2012-01-11 | 2016-09-06 | International Business Machines Corporation | Triggering window conditions by streaming features of an operator graph |
US9430117B2 (en) | 2012-01-11 | 2016-08-30 | International Business Machines Corporation | Triggering window conditions using exception handling |
WO2013137067A1 (ja) * | 2012-03-15 | 2013-09-19 | 日本電気株式会社 | 演算装置、演算方法及び演算プログラム |
US10956422B2 (en) | 2012-12-05 | 2021-03-23 | Oracle International Corporation | Integrating event processing with map-reduce |
KR101542526B1 (ko) * | 2014-03-24 | 2015-08-12 | 주식회사 이디엄 | 빅데이터 입력 및 처리 방법 |
US9614740B2 (en) | 2014-05-13 | 2017-04-04 | International Business Machines Corporation | Multifusion of a stream operator in a streaming application |
US9514032B2 (en) * | 2014-09-23 | 2016-12-06 | International Business Machines Corporation | Real-time usage checking of dynamically generated program output |
US10095547B1 (en) * | 2015-03-13 | 2018-10-09 | Twitter, Inc. | Stream processing at scale |
US20180046671A1 (en) * | 2015-10-30 | 2018-02-15 | Hitachi, Ltd. | Computer scale-out method, computer system, and storage medium |
US11573965B2 (en) | 2016-09-15 | 2023-02-07 | Oracle International Corporation | Data partitioning and parallelism in a distributed event processing system |
US10713249B2 (en) | 2016-09-15 | 2020-07-14 | Oracle International Corporation | Managing snapshots and application state in micro-batch based event processing systems |
US10439917B2 (en) * | 2016-11-15 | 2019-10-08 | At&T Intellectual Property I, L.P. | Recovering a replica in an operator in a data streaming processing system |
US10817334B1 (en) * | 2017-03-14 | 2020-10-27 | Twitter, Inc. | Real-time analysis of data streaming objects for distributed stream processing |
WO2018169430A1 (en) | 2017-03-17 | 2018-09-20 | Oracle International Corporation | Integrating logic in micro batch based event processing systems |
WO2018169429A1 (en) | 2017-03-17 | 2018-09-20 | Oracle International Corporation | Framework for the deployment of event-based applications |
JP2019097037A (ja) * | 2017-11-22 | 2019-06-20 | 富士通株式会社 | 情報処理システム及びデータ処理方法 |
JP7489183B2 (ja) * | 2019-11-19 | 2024-05-23 | 三菱重工業株式会社 | 演算装置、冗長化システムおよびプログラム、ならびに冗長化構成の構築方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4687253B2 (ja) * | 2005-06-03 | 2011-05-25 | 株式会社日立製作所 | ストリームデータ処理システムのクエリ処理方法 |
JP5192226B2 (ja) | 2007-12-27 | 2013-05-08 | 株式会社日立製作所 | 待機系計算機の追加方法、計算機及び計算機システム |
WO2009120301A2 (en) * | 2008-03-25 | 2009-10-01 | Square Products Corporation | System and method for simultaneous media presentation |
JP5465413B2 (ja) | 2008-10-29 | 2014-04-09 | 株式会社日立製作所 | ストリームデータ処理方法、及びそのシステム |
-
2010
- 2010-03-15 JP JP2010057404A patent/JP5331737B2/ja not_active Expired - Fee Related
- 2010-08-24 US US13/389,971 patent/US8904225B2/en not_active Expired - Fee Related
- 2010-08-24 WO PCT/JP2010/064284 patent/WO2011114548A1/ja active Application Filing
Also Published As
Publication number | Publication date |
---|---|
JP2011192013A (ja) | 2011-09-29 |
US8904225B2 (en) | 2014-12-02 |
US20120331333A1 (en) | 2012-12-27 |
WO2011114548A1 (ja) | 2011-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5331737B2 (ja) | ストリームデータ処理障害回復方法および装置 | |
US11327958B2 (en) | Table replication in a database environment | |
US20230129099A1 (en) | Adaptive query routing in a replicated database environment | |
US11010262B2 (en) | Database system recovery using preliminary and final slave node replay positions | |
JP6362685B2 (ja) | オンライン・ホット・スタンバイ・データベースのためのレプリケーション方法、プログラム、および装置 | |
JP5192226B2 (ja) | 待機系計算機の追加方法、計算機及び計算機システム | |
US8868492B2 (en) | Method for maximizing throughput and minimizing transactions response times on the primary system in the presence of a zero data loss standby replica | |
JP5308403B2 (ja) | データ処理の障害回復方法、システムおよびプログラム | |
US8832399B1 (en) | Virtualized consistency group using an enhanced splitter | |
US9996427B2 (en) | Parallel backup for distributed database system environments | |
US20130346366A1 (en) | Front end and backend replicated storage | |
JP4988370B2 (ja) | 結合セッション環境におけるセッションのクラスタのためのセッション情報の統合方法、システム、およびプログラム | |
US11544232B2 (en) | Efficient transaction log and database processing | |
Silvestre et al. | Clonos: Consistent causal recovery for highly-available streaming dataflows | |
US20230333945A1 (en) | Scalable Low-Loss Disaster Recovery for Data Stores | |
WO2019109256A1 (zh) | 一种日志管理方法、服务器和数据库*** | |
CN117677943A (zh) | 用于混合数据处理的数据一致性机制 | |
US20230315713A1 (en) | Operation request processing method, apparatus, device, readable storage medium, and system | |
US10140183B2 (en) | Efficient state tracking for clusters | |
Gog et al. | Falkirk wheel: Rollback recovery for dataflow systems | |
Trofimov et al. | Delivery, consistency, and determinism: rethinking guarantees in distributed stream processing | |
US20240126783A1 (en) | Recovery from loss of leader during asynchronous database transaction replication | |
WO2024081139A1 (en) | Consensus protocol for asynchronous database transaction replication with fast, automatic failover, zero data loss, strong consistency, full sql support and horizontal scalability |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20121011 |
|
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: 20130702 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130729 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |