XML Framework

XML Frameworkとは

SkyOnDemandでは、処理コンポーネント間でのデータの受け渡しをする際には、必ずこのXML Frameworkを介して処理を行います。そのためXML Frameworkは、SkyOnDemandのデータハンドリングの心臓部にあたるといえます。

XML Frameworkの役割

XML Frameworkを経由してデータをやり取りすることにより、各処理コンポーネントはお互いにデータを透過的に扱えるようになります。
XML Frameworkには大きく2つの役割があります。 XML Framework アーキテクチャ

データモデル

XML Frameworkで使用されているデータモデルは、テーブルモデル型とXML型があります。

テーブルモデル型

テーブルモデル型とは、データを高速に処理(読み取り・変換・書き込み)するためのデータモデルです。
テーブルモデル型はCSV形式のデータやデータベースのレコード/カラム情報など、二次元配列として表現できるデータモデルを扱う際に適しています。
テーブルモデル型は実際のデータ(データベースの場合にはデータベースから抽出したデータ)以外の情報はほとんど生成されないため、非常にコンパクトなデータモデルとなっています。また、内部では、配列にアクセスするのと同様のデータアクセス速度となるため、非常に高速に処理を行うことができます。

テーブルモデル型に対応しているコンポーネントについては、各アダプタの「データモデル」の項を参照してください。

スキーマ

テーブルモデル型のスキーマ構造は以下の通りです。基本的に「行」、「列」の情報を保持しています。

<table>
  <row>
    <column></column>
    <column></column>
       :
  </row>
  <row>
    <column></column>
    <column></column>
       :
  </row>
    :
</table>

テーブルモデル型は上記のように同一のスキーマであるため、テーブルモデル型同士のデータの入出力の際に、値の変換やカラム順序の変換がない場合にはMapperは必要ありません。 Mapperを使用しない場合には、カラム順序は出現順序で処理されます。

Mapperとの関係

Mapperの入出力スキーマにテーブルモデル型のコンポーネントを指定した場合には、テーブルモデル型専用の変換エンジンに切り替えられます。テーブルモデル型専用の変換エンジンは大容量データに対応しており、非常に高速に変換処理が行われます。
テーブルモデル型専用変換エンジンは一部ロジックを除き、row要素(行)のループのみとなり、row要素(行)を超えての値のマッピングを行うことはできません。つまり、1行目の内容を2行目の内容に含めることはできません。

また、テーブルモデル型のコンポーネントをMapperの入力元または出力先とした場合、入出力スキーマの読み込みを行う必要はありません。

XML型

XML型とはデータを中間データとしてXML文字列で保持するデータモデルです。
XML型は構造を自由に設計できるため、処理によって構造が異なる場合に適しています。

XML型に対応している処理コンポーネントについては、各アダプタの「データモデル」の項を参照してください。

スキーマ

処理コンポーネントや操作によって異なります。
Salesforceアダプタのように、オブジェクトの項目からスキーマ生成するものもあれば、XMLアダプタなどのように特にスキーマを持たないもの、FTPアダプタのように固定のスキーマを持つものなどがあります。

Mapperとの関係

XML型がMapperの入出力のどちらかに設定された場合には、繰り返しのノードを自由に指定することができます。 これは、構造を自由に変換できることを意味します。
このようにXML型は非常に柔軟ではありますが、Mapper内部ではDOM(Document Object Model)形式で処理されるため、メモリ使用量が多くなります。そのため、大容量のデータを扱う際は、SkyOnDemand Serverのヒープサイズを確保する必要があります。
SkyOnDemand Serverのヒープサイズの変更方法については途お問い合わせください。

また、XML型のコンポーネントをMapperの入力元または出力先とした場合、一部コンポーネントを除き、入出力スキーマの読み込みを行う必要があります。

大容量データ処理

大容量データ処理とは

通常の処理はすべてのデータをメモリ中に保持しますが、大容量データ処理は処理に必要な最低限のデータのみメモリに格納し、ほかのデータをファイルに保存することで、大容量のデータの処理を実現することができます。

コンポーネントの処理で大容量のデータを扱う場合(主にアダプタの読み込み処理)に、スクリプトの設定もしくはアダプタの設定で[大容量データ処理を行う]を選択します。

テーブルモデル型のすべてのアダプタおよび、一部のXML型アダプタ([大容量データ処理]タブがあるのもの)、Mapperが大容量データ処理に対応しています。
大容量データ処理を行った場合、テーブルモデル型コンポーネント、XML型コンポーネント、Mapperいずれも結果データをメモリ中に保持するのではなく、SkyOnDemand Serverローカルのファイルに保存します。メモリ中には実際に処理を行うために必要な最小限のデータだけが格納されます。

XML型では固定のバッファサイズ分、もしくは1ノードあたりのデータ単位でメモリに格納されています。
テーブルモデル型では1行分のデータ単位でメモリに格納されます。1行分読み終えると、ファイルに保存されます。ファイルに書き出される際には書き込みバッファにデータが書き込まれるため、実際に1行ごとにファイルに書き込まれているわけではありません。

結果データをファイルに保存するため、結果データ分(XML型の場合には要素名などのデータ量も考慮に入れる必要があります。)のディスク空き容量が必要となります。生成されるファイルは結果データを使用するスクリプト処理が終了するタイミングで削除されます。

大容量データ処理に未対応のコンポーネントで大容量のデータを扱う際は、SkyOnDemand Serverのヒープサイズを確保する必要があります。
(入力元のコンポーネントが大容量データ処理を行っていた場合でも、結果データを受け取るコンポーネントが大容量データ処理に対応していないのであれば、大容量のデータをメモリ中に保持することになります。)
SkyOnDemand Serverのヒープサイズの変更方法については別途お問い合わせください。

SkyOnDemandでは、大容量データ処理以外にも、大容量データに対応した機能があります。詳細については、「大容量データの対応」を参照してください。