ストリームデータ処理基盤 uCosminexus Stream Data Platform - Application Framework アプリケーション開発ガイド

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

2.5 時刻解像度の指定によるメモリ使用量増加の抑止

この節では,RANGEウィンドウを指定して大量の受信データを処理する場合などに,時刻解像度を指定することによってメモリ使用量の増加を抑止する方法について説明します。

RANGEウィンドウを指定したクエリの場合,一定時間内に受信したデータがすべて処理の対象になります。このため,指定する時間やデータの量によっては,メモリ使用量が増加して,システムの動作に影響が出るおそれがあります。

これに対して,時刻解像度を指定することで,RANGEウィンドウの処理対象となるデータの量を一定に抑えられます。

時刻解像度の指定とは,RANGEウィンドウで指定した範囲のリレーションを任意の単位時間に分割して,分割した時間ごとに演算処理を実行する機能のことです。なお,分割したリレーションのことをメッシュといいます。分割する間隔(ミリ秒単位)をメッシュ間隔といいます。

RANGEウィンドウで指定した時間の範囲で扱う受信データが多い場合,あらかじめメッシュ単位で演算を実行し,その結果を擬似タプルとして保持します。RANGEウィンドウでは,この擬似タプルを処理対象とすることで,RANGEウィンドウ内のタプル数を一定に保ちます。これによって,メモリ使用量の増加を抑止できます。

例えば,RANGEウィンドウ内のタプル数が10万個ある場合に,時刻解像度を指定して,10万個のタプルをあらかじめ8個の擬似タプルにしておけば,メモリ内に保持しておくタプルの個数は8個に抑えられます。

時刻解像度は,次の二つの条件を満たすクエリで指定できます。

時刻解像度を指定しない場合と指定した場合の演算の違いを次に示します。

図2-17 時刻解像度を指定しない場合と指定した場合の演算の違い

[図データ]

時刻解像度を指定しない場合,演算の対象は,RANGEウィンドウ内のすべてのタプルになります。例えば,RANGEウィンドウの範囲として1分間を指定している場合に,1分間に到着するタプルの総数が10万個ある場合,演算の対象は10万個になります。最大値を求める演算の場合,10万個のタプルをすべて比較して,最大値を求める必要があります。

一方,時刻解像度を指定した場合,演算の対象は,擬似タプルになります。擬似タプルは,あらかじめ指定したメッシュ間隔に応じて演算処理が実行された結果です。例えば,メッシュ間隔の指定によってRANGEウィンドウを8個に分割していた場合,擬似タプルは8個作成されます。最大値を求める演算の場合,8個の擬似タプルの内容を比較すれば,最大値を求められます。このように,時刻解像度を指定することで,RANGEウィンドウ内に保持するタプル数を削減し,メモリ使用量の増加を抑えられます。

ポイント
時刻解像度は,ストリームデータの送信レートが高く,RANGEウィンドウ内に生存する到着タプルが多い場合に指定すると効果的です。
時刻解像度を指定することで,Javaヒープ領域内のメモリ使用量を一定に保つことができるので,メモリ使用量の単調増加を抑止できます。
時刻解像度は,単位時間当たりの最大値(MAX),最小値(MIN),合計値(SUM)を求める処理ロジックを持つクエリに適用できます。
時刻解像度の指定例については,「2.6.2 時刻解像度を指定した定義例」を参照してください。