ストリームデータ処理基盤 uCosminexus Stream Data Platform - Application Framework システム構築・運用ガイド

[目次][索引][前へ][次へ]

11.8.3 時刻の調整方法

タイムスタンプ調整機能では次の流れでタプルの時刻を調整します。

  1. タイムスタンプの設定
    SDPサーバに到着したタプルに対し,タプルのレコードに設定された時刻情報から,指定された時刻単位よりも小さい単位を切り捨てた値をタプルのタイムスタンプとして設定します。例えば,時刻単位に「秒」を指定した場合,ミリ秒単位以下が切り捨てられた値が,タイムスタンプとして設定されます。
  2. タプルの保留
    調整する時刻の範囲内のタイムスタンプを持つタプルをタイムスタンプ調整機能内で保留します。
    調整する時刻の範囲よりも過去のタイムスタンプを持つタプルの場合,破棄します。
  3. 入力ストリームへの入力
    保留したタプルのうち,調整する時刻の範囲の遷移によって範囲外となったタプルを入力ストリームに入力します。

タプルの保留および入力ストリームへの入力では,基準時刻やタプルのレコードに設定された時刻,指定する時刻単位などによってタプルの時刻の調整方法,および入力ストリームへの入力順序が異なります。ここでは,タプルの時刻の調整方法,および入力ストリームへの入力順序について説明します。

<この項の構成>
(1) タプルの時刻の調整方法
(2) 入力ストリームへの入力順序

(1) タプルの時刻の調整方法

ここでは,次の場合に分けて,タプルの時刻の調整方法について説明します。

クエリグループ開始後の最初のタプルの場合
入力アダプターから送信されたタプルのレコードに設定された時刻を基準時刻として設定します。
クエリグループ開始後の最初のタプルの例を次の図に示します。なお,この例では,時刻単位を「秒」,調整する時刻の幅に「2」を指定した場合の処理について説明します。

図11-27 クエリグループ開始後の最初のタプルの例

[図データ]
入力アダプターから最初のタプル(レコードに設定された時刻は「09:00:01:015」)が送信されると,タイムスタンプ調整機能では基準時刻を「09:00:01」に設定します。
この場合の時刻の調整範囲は,「09:00:01〜08:59:59」となります。また,最初のタプルは「09:00:01」のタイムスタンプを持つタプルとしてタイムスタンプ調整機能内で保留されます。
タプルのレコードに設定された時刻が基準時刻よりも未来の場合
入力アダプターから送信されたタプルのレコードに設定された時刻が基準時刻よりも未来の時刻の場合,次の順序でタプルの時刻を調整します。
  1. 送信されたタプルのレコードに設定された時刻情報から,新しい基準時刻を設定します。これに伴って,調整する時刻範囲が遷移します。
    また,送信されたタプルはタイムスタンプ調整機能内で保留されます。
  2. 以前の基準時刻で調整する時刻範囲内だった保留タプルがある場合は,基準時刻の遷移で調整する時刻範囲外となったタプルを,タイムスタンプが古い順に入力ストリームへ入力します。なお,同一時刻のタプルが複数ある場合は,SDPサーバに到着した順序で入力ストリームへ入力します。
タプルのレコードに設定された時刻が基準時刻よりも未来の例を次の図に示します。なお,この例では,時刻単位を「秒」,調整する時刻の幅に「2」を指定した場合の処理について説明します。

図11-28 タプルのレコードに設定された時刻が基準時刻よりも未来の例

[図データ]
基準時刻が「09:00:01」,調整する時刻範囲が「09:00:01〜08:59:59」の場合に,入力アダプターから新しいタプル(レコードに設定された時刻は09:00:02:056)が送信されると,新しいタプルの時刻が基準時刻よりも未来の時刻のため,基準時刻は「09:00:02」に遷移します。これに伴って,時刻の調整範囲は「09:00:02〜09:00:00」に遷移します。
また,新しいタプルは「09:00:02」のタイムスタンプを持つタプルとしてタイムスタンプ調整機能内で保留されます。
時刻の調整範囲の遷移によって調整範囲から外れる「08:59:59」のタイムスタンプを持つタプルは入力ストリームに入力されます。
タプルのレコードに設定された時刻が調整する時刻の範囲内の場合
入力アダプターから送信されたタプルのレコードに設定された時刻が調整する時刻の範囲内の場合,送信されたタプルをタイムスタンプ調整機能内で保留します。
タプルのレコードに設定された時刻が調整する時刻の範囲内の例を次の図に示します。なお,この例では,時刻単位を「秒」,調整する時刻の幅に「2」を指定した場合の処理について説明します。

図11-29 タプルのレコードに設定された時刻が調整する時刻の範囲内の例

[図データ]
基準時刻が「09:00:01」,調整する時刻範囲が「09:00:01〜08:59:59」の場合に,入力アダプターから新しいタプル(レコードに設定された時刻は09:00:01:010)が送信されると,タプルのレコードに設定された時刻が調整する時刻の範囲内のため,タイムスタンプ調整機能内で「09:00:01」のタイムスタンプを持つタプルとして保留されます。さらに,入力アダプターからタプルのレコードに設定された時刻が「08:59:59.800」のタプルが送信された場合も同様に,タイムスタンプ調整機能内で「08:59:59」のタイムスタンプを持つタプルとして保留されます。
タプルのレコードに設定された時刻が調整する時刻範囲より過去の場合
入力アダプターから送信されたタプルのレコードに設定された時刻が,調整する時刻範囲よりも過去の場合,タプルを破棄して,タプルを破棄したことを示すログをタプルログに出力します。
タプルのレコードに設定された時刻が調整する時刻範囲より過去の例を次の図に示します。なお,この例では,時刻単位を「秒」,調整する時刻の幅に「2」を指定した場合の処理について説明します。

図11-30 タプルのレコードに設定された時刻が調整する時刻範囲より過去の例

[図データ]
基準時刻が「09:00:01」,調整する時刻範囲が「09:00:01〜08:59:59」の場合に,入力アダプターから新しいタプル(レコードに設定された時刻は08:59:58:010)が送信されると,タプルのレコードに設定された時刻が調整する時刻の範囲よりも過去のため,タプルは破棄されます。タプルログには,タプルが破棄されたことを示すログが出力されます。

(2) 入力ストリームへの入力順序

タイムスタンプ調整機能によって時刻を調整されたタプルは,タイムスタンプ調整機能で設定されたタイムスタンプの昇順で入力ストリームに入力されます。また,同じタイムスタンプを持つタプルが複数あった場合は,SDPサーバに到着した順序で入力ストリームに入力されます。

このとき,タイムスタンプ調整機能で調整する時刻単位と範囲が異なると,同じストリームデータの場合でも,入力ストリームへのタプルの入力順序が異なります。

ここでは,調整する時刻単位と範囲の組み合わせの例ごとに,タイムスタンプ調整機能で設定されるタプルのタイムスタンプと,入力ストリームへのタプルの入力順序について説明します。

ここで説明する例では,次の表に示すAからEのタプルが,入力アダプターから送信されたとします。

タプル 入力アダプターからの送信順 タプルのレコードに設定された時刻
A 1 2009/03/01 12:15:22:345678901
B 2 2009/03/01 12:15:22:123456789
C 3 2009/03/01 12:15:23:123456789
D 4 2009/03/01 12:15:22:890123456
E 5 2009/03/01 12:15:24:123456789
時刻単位に「秒」,調整する時刻の範囲に「1」を指定した場合
時刻単位に「秒」,調整する時刻の範囲に「1」を指定した場合の,タイムスタンプ調整機能で設定するタプルのタイムスタンプ,および入力ストリームへのタプルの入力順序を次の表に示します。
なお,時刻単位に「秒」を指定した場合,「ミリ秒」以下が切り捨てられた値がタイムスタンプとして設定されます。
タプル 入力順 タイムスタンプ調整機能で設定したタイムスタンプ
A 1 2009/03/01 12:15:22:000000000
B 2 2009/03/01 12:15:22:000000000
C 4 2009/03/01 12:15:23:000000000
D 3 2009/03/01 12:15:22:000000000
E 5 2009/03/01 12:15:24:000000000
この例の場合,すべてのタプルが時刻調整範囲内となるため,すべてのタプルが入力ストリームに入力されます。
時刻単位に「ミリ秒」,調整する時刻の範囲に「999」を指定した場合の例
時刻単位に「ミリ秒」,調整する時刻の範囲に「999」を指定した場合の,タイムスタンプ調整機能で設定するタプルのタイムスタンプ,および入力ストリームへのタプルの入力順序を次の表に示します。
時刻単位に「ミリ秒」を指定した場合「マイクロ秒」以下が切り捨てられた値がタイムスタンプとして設定されます。
タプル 入力順 タイムスタンプ調整機能で設定したタイムスタンプ
A 2 2009/03/01 12:15:22:345000000
B 1 2009/03/01 12:15:22:123000000
C 4 2009/03/01 12:15:23:123000000
D 3 2009/03/01 12:15:22:890000000
E 5 2009/03/01 12:15:24:123000000
この例の場合,すべてのタプルが時刻調整範囲内となるため,すべてのタプルが入力ストリームに入力されます。
時刻単位に「マイクロ秒」,調整する時刻の範囲に「999」を指した場合の例
時刻単位に「マイクロ秒」,調整する時刻の範囲に「999」を指定した場合の,タイムスタンプ調整機能で設定するタプルのタイムスタンプ,および入力ストリームへのタプルの入力順序を次の表に示します。
時刻単位に「マイクロ秒」を指定した場合「ナノ秒」以下が切り捨てられた値がタイムスタンプとして設定されます。
タプル 入力順 タイムスタンプ調整機能で設定したタイムスタンプ
A 1 2009/03/01 12:15:22:345678000
B 破棄 設定されません。
C 2 2009/03/01 12:15:23:123456000
D 破棄 設定されません。
E 3 2009/03/01 12:15:24:123456000
この例の場合,タプルAのタイムスタンプが基準時刻となったあと,タプルBはこの基準時刻よりも過去の時刻情報を持ち,調整する時刻の範囲外となるため破棄されます。同様に,タプルDはタプルCよりも過去の時刻情報を持ち,調整する時刻の範囲外となるため破棄されます。
時刻単位に「秒」,調整する時刻の範囲に「0」を指定した場合
時刻単位に「秒」,調整する時刻の範囲に「0」を指定した場合の,タイムスタンプ調整機能で設定するタプルのタイムスタンプ,および入力ストリームへのタプルの入力順序を次の表に示します。
なお,時刻単位に「秒」を指定した場合,「ミリ秒」以下が切り捨てられた値がタイムスタンプとして設定されます。
タプル 入力順 タイムスタンプ調整機能で設定したタイムスタンプ
A 1 2009/03/01 12:15:22:000000000
B 2 2009/03/01 12:15:22:000000000
C 3 2009/03/01 12:15:22:000000000
D 破棄 設定されません。
E 4 2009/03/01 12:15:23:000000000
この例の場合,基準時刻だけが時刻調整範囲となります。タプルCが送信されるとタプルCのタイムスタンプが基準時刻となり,その基準時刻より過去の時刻情報を持つタプルDは破棄されます。