ジョインの最適化

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  Altova MapForce Server 2019 Advanced Edition >

ジョインの最適化

大量のデータのセットがフィルターまたはジョインされるジョインの最適化は、データマッピングの実行の速度を向上します。

 

ジョインの最適化 は、マッピングの実行中に内部で発生するネスとされたグループを削除して作動します。  ネストされたループは、2番目のセット内でアイテム数の回数のセットの数が反復する際に発生します。マッピング 実行エンジン*にとりアイテムのシーケンスをループ(反復)することは、珍しいことではありません。ネストされた独立したループが発生すると (すなわち、他のループをループが反復すると ) マッピングは、マッピングの実行のために必要とされる時間の削減を行うジョインの最適化を活用することができます。入力データが大量な場合を除いてマッピングの実行中にネスとされたループに気が付くことは少ないです。しかしながら、多数の大量のレコードにより構成されるファイル または データベースを処理するマッピングの場合は問題が発生するかもしれません。

 

* マッピングの実行エンジンをして MapForce, MapForce Server、 または、 MapForce により生成された C#、 C++、 または Java プログラムを使用することができます。ジョインの最適化は、 MapForce Server Advanced Edition で使用することができます。

 

MapForce Server をターゲット 実行エンジンとして指定するには、  MapForce 内の BUILT-IN ( ic-builtin ) ツールバーボタンをクリックします。これにより、マッピングは最新の機能を使用することができます。他の変換言語を選択すると、 MapForce 機能の一部は選択された言語でサポートされない可能性があります。

 

上記のとおり、ジョインの最適化の主要な課題は、いかに効果的にネストされたループを扱うかです。ネストされたループの発生に焦点を当ててみましょう。

 

ネストされたループが発生する通常のケースはマッピングに少なくとも1つのジョインコンポーネントが含まれている場合です。  SQL JOIN モード** は不可能です。

 

** MapForce 内で条件の一部が満たされると、マッピング に "SQL Join モード" と呼ばれる特別な実行モードの使用が許可されます(マッピング がデータをデータベースから読み込む場合のみ適用されます)。 データがこの方法でジョインされると、ジョインのオペレーションは、データベースにより行われます ( SQL JOIN が実行されます)。これによりマッピング実行エンジン内のネスとされたループの必要性を削除します。SQL Join モードに関する詳細は、 MapForce ドキュメント参照してください (https://www.altova.com/documentation.html).

 

例えば、(Altova MapForce によりデザインされた) 下のイメージはジョインコンポーネントを使用した2 XML つのファイルからデータを結合するマッピングを示しています。MapForce がインストールされているマシンで、このマッピングは以下のパスで検索することができます: ..\Documents\Altova\MapForce2019\MapForceExamples\Tutorial\JoinPeopleInfo.mfd。  一部の個人の情報は最初の XML ファイル (EmailPhone) および2番目の XML ファイル (CityStreetNumber)のみに存在します。  マッピングの目的は、 ターゲット XML ファイルにマージされた両方のソース構造内で FirstNameLastName が対応する全ての個人のデータを書き込むことです。

mfs_map_JoinPeopleInfo

JoinPeopleInfo.mfd

MapForce 内では、 ジョインコンポーネントペアアイテムは、セット1の各アイテムをセット2内のアイテムと比較するカスタムの条件に従った2つのセットです。比較の総数は両方のセットのクロスジョイン(デカルト積)を表します。 例えば、 最初のセットに 50 アイテムが含まれ、2番目のセットに 100 アイテムが含まれていると、総数 5000 (50 x 100) の比較が行われます。 上のマッピングでは、ジョイントコンポーネントに接続されている2つの XML 構造の全てのインスタンスアイテムに従い、セットが比較されています。

 

メモ: ジョインの最適化 (MapForce Server Advanced Edition の機能) はジョインコンポーネント (MapForce の機能) 特別する必要があります。ジョインコンポーネントに関する詳細は、MapForce ドキュメント (https://www.altova.com/ja/documentation.html を参照してください )。

 

パフォーマンスの観点からは、ネスとされたループを含むマッピングは、実行するために更なる時間を要します。 ジョインされた両方のセットに百万単位のレコードが含まれていると過程してください。これにより、ジョインの最適化が役に立つ箇所で、 パフォーマンスを簡単に影響することができます。 広範囲では、ジョインの最適化は、大きなデータセットを検索(インデックス)するために最適化されているデータベースエンジンのように振舞います。上のマッピングで示されるように、ジョインの最適化はデータベースからのデータ以外のデータ以外のデータも扱います。 ジョインの最適化は、データの型に関わらず、作成が可能な箇所で、マッピングランタイムで必要とされるルックアップテーブルを作成することによりネストされたループを削除します。 これによりマッピングのパフォーマンスを大幅に向上し、マッピングの実行に必要な時間を結果的に削減します。

 

メモ:ジョインの最適化が発生すると、マッピングの実行にかかる時間は削減されますが、更に多くのメモリが必要となります。 メモリ使用のパターンは異なる複雑な要因により異なります。このため、異なる振る舞いが検知される可能性があります。

 

ジョインの最適化は、ジョインを使用するマッピングだけではなく、フィルターコンポーネントを使用するマッピングの速度を向上します。  MapForce 内で、フィルターは、アイテムのシーケンスを処理します (すなわち、 node/row 入力に接続されているアイテムの各インスタンスのためのブール値の条件を確認します)。ブール値 条件が関数に接続されている場合、他のアイテムのシーケンスを反復する必要があり、マッピングコンテキストが必要とする場合、ジョインに同様のシチュエーションが発生します。 フィルターが2セットになっているアイテムの比較を行う場合、ジョインの最適化の条件を満たします。

 

ジョインの最適化をマッピングのために活用するには、MapForce Server Advanced Edition により実行される必要があります。MapForce Server Advanced Edition を使用してマッピングを実行するには、MapForce を開き、メニューコマンド 「ファイル | MapForce Server 実行可能ファイルにコンパイルする」 を使用して、マッピング 実行 (.mfx) ファイルにコンパイルします。 . API メソッドを選択する言語を使用して .mfx ファイルを実行します。またはコマンドラインインターフェイスの run コマンドを使用して行います (以下も参照してください:しくみ)。


(C) 2019 Altova GmbH