パラレルストリーミング処理

パラレルストリーミング処理とは

パラレルストリーミング処理(Parallel Streaming Processing、以下:PSP)は、DataSpider Servistaで大容量データを高速に処理する機構です。

Standalone版では使用できません。

PSPは、以下のような特徴を持っています。

パラレルストリーミング処理のアーキテクチャ

PSPは以下のアーキテクチャで動作します。読み込み処理、変換処理、書き込み処理をブロック単位で同時に別々のスレッドで処理します。



結果データを生成する(上図では、読み取り処理および変換処理)コンポーネントは、内部的に結果データを格納するブロック(例えば1000行単位)を2つ保持するようになっています。
結果データを生成するコンポーネントは書き込み可能な状態(データが消費されている状態)のブロックを検出すると、書き込み処理を行います。書き込み可能なブロックを検出できない状態(データが消費されていない状態)では、処理がブロックされます。
結果データを利用するコンポーネント(上図では、変換処理および書き込み処理)は、入力元のコンポーネントの結果データに、読み取り可能な状態(データの生成が完了した状態)のブロックを検出すると処理を開始します。読み取り可能なブロックを検出できない状態(データの生成が未完了な状態)では処理がブロックされます。

処理の流れ

「読み取り」-「変換」-「書き込み」の簡単なサンプルで、処理の流れを処理ステップごとに説明します。
各ステップのデータa、データb、データcは、読み取り用データの1ブロックを表します。

ステップ1:処理前

ステップ2:「データa」の読み取り

ステップ3:「データb」の読み取りと「データa」の変換

ステップ4:「データc」の読み取りと「データb」の変換および「データa」の書き込み

ステップ5:「データc」の変換と「データb」の書き込み

ステップ6:「データc」の書き込み

このように、データをブロック単位に分割し、そのブロック単位を並行して処理することで、超大容量データを高速に処理しています。

パラレルストリーミング処理の使いどころ

PSPの特徴のうち、「分散処理」には、適している処理と適していない処理が存在します。

適している処理

PSPは前述のように、各読み取り処理や書き込み処理、変換処理自体を高速にする機構ではありません。各処理を分散に、並行処理することによってスクリプト全体の処理を高速にしています。
そのため、PSPは以下のような処理に適しています。 処理が高速になる要因として、オブジェクト生成数の減少が挙げられます。
PSPの場合、ブロックサイズ(固定)x列分の配列しか持ちません。通常の処理の場合(非PSP)には、全行(可変)x列分の配列を生成します。
また、I/O処理時間の割合が大きいほど、パフォーマンス向上への効果が小さくなります。
ファイル系(ローカルのファイルへのアクセス)はI/O処理時間割合が小さい処理です。DB系やネットワーク越しのファイルアクセスはI/O処理時間割合が大きい処理です。

適していない処理

逆にPSPは次のような処理には適していません。つまり、PSPを行わなかった処理と比較してパフォーマンスの向上が期待できません。

パラレルストリーミング処理の使用方法

PSPをスクリプトで使用する方法は、スクリプト作成時に[パラレルストリーミング処理を行う]にチェックを入れてスクリプトを作成します。



PSPスクリプトはプロジェクトエクスプローラ上で「P」マークが付きます。

パラレルストリーミング処理で使用できるコンポーネント

PSPで使用できるコンポーネントは以下の通りです。 PSP スクリプトとしてスクリプトを作成すると、ツールパレットには使用できるアダプタ、コンバータのみ表示されるようになります。
PSPスクリプトで使用可能なMapperロジックについては、「Mapperロジック一覧」を参照してください。

パラレルストリーミング処理とスレッド

前項で説明したように、PSPでは複数のスレッドが協調して処理を行います。
PSPスクリプトではスクリプトのスレッドの他に、結果データを生成する(入力元となる)コンポーネントの数だけスレッドが生成されます。結果データを生成しない書き込みコンポーネントに関しては、スクリプトと同じスレッドで動作します。
例えば、「読み取り」-「変換」-「書き込み」のスクリプトでは、生成するスレッド数は「3」となります。
「読み取り」-「変換」-「変換」-「書き込み」のスクリプトでは、生成するスレッド数は「5」となります。

Tips

扱えるデータ量について

PSPスクリプト内で扱うことのできるデータ量は理論上制限がありません。

Mapperの数について

PSPスクリプト内で使用できるMapperの数について制限はありません。

スクリプト呼び出しについて

PSPを使用した場合もスクリプト呼び出し方法は通常と同じです。スクリプト間のデータの受け渡しについても通常の受け渡し方法と同様です。