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

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

パラレルストリーミング処理(Parallel Stream Processing、以下:PSP)は、DataSpider Cloudでメモリ消費を抑えながら大容量データを高速に処理する機構です。

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

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

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



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

処理の流れ

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

ステップ1:処理前

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

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

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

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

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

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

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

スマートコンパイラにより、スクリプトの内容を自動判別してパラレルストリーミング処理を適用します。
そのため、基本的にはパラレルストリーミングを意識することなくスクリプトを作成することが可能です。
詳細については、「スマートコンパイラ」を参照してください。

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

PSPに対応するコンポーネントとMapperロジックについてはヘルプを参照してください。
PSPに対応するコンポーネントのオペレーションについては、各オペレーションのページを参照してください。
PSPに対応するMapperロジックについては、「Mapperロジック一覧」を参照してください。

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

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

仕様制限

注意事項

PSPデータフロー中に条件分岐コンポーネントを配置する場合

PSPの結果データが条件分岐コンポーネントにより使用されなかった場合、パフォーマンスが劣化します。
PSPデータフローを無効化することで、パフォーマンス劣化を防ぐことができます。

以下のスクリプトは、CSVファイルを一行ずつ読み取り、その行がある条件を満たす場合にCSVファイルに書き込む処理です。マッピングとCSVファイルへの書き込みの間でPSPデータフローが有効になっており、条件に合致しない場合にパフォーマンスが劣化します。
PSPデータフロー中に条件分岐コンポーネントを配置した処理