Data Warehouse サンプルについて

Data Warehouse サンプルは、メッセージ・フローを使用して売上データなどのデータをデータベースにアーカイブするシナリオを例示する、メッセージ・フロー・サンプル・アプリケーションです。データは、後で別のメッセージ・フローまたはアプリケーションがこれを分析できるよう、保管されます。

売上データは後日分析されるので、メッセージの保管は、指定された時間のレコードを容易に選択できるような方法でまとめられます。売上レコードの入った WebSphere MQ メッセージが書き込まれた日時は、そのメッセージがデータベースに挿入される時点で、独立した列値として保管されます。データベース表には以下の 4 つの列が含まれています。

この方法でデータを保管すると、特定の期間のレコードを取り出せます。例えば午前 9:00 から午後 12:00  までの間、および午後 12:01 から午後 5:00 の間を指定して、午前と午後の売上を比較できます。

付加的な日時列を使わないとすれば、アプリケーションはデータベースからレコードを全部読み取って全部調べ、関係のあるレコードだけを処理して、残りは廃棄しなければならなくなってしまうでしょう。レコードを全部読まなければならないとすれば大量の処理を無駄にすることになりますが、制御された綿密な方法でレコードを取り出すことができるなら、その無駄を省ける可能性があります。

このサンプルは、メッセージまたはその一部をデータベースにアーカイブする手法の一例を示します。これは、通常なら、データをアーカイブする必要があるときに、より複雑なメッセージ・フローの一部として組み込まれる種類の処理です。

サンプルの処理は、2 つのメッセージ・フローで構成されています。メッセージ・フローは、以下のとおりです。

メッセージ・フローの詳細と、メッセージ・フローが実行する処理を以下に示します。

WarehouseData メッセージ・フロー

WarehouseData メッセージ・フローは、以下の処理を実行します。

  1. XML ペイロードが入った WebSphere MQ メッセージを読み取ります。このペイロードには、アーカイブされるデータが入っています。
  2. メッセージ・ツリーの部分を BLOB に変換して、データベースに挿入できるようにします。
  3. メッセージ BLOB と、メッセージ WebSphere MQ がデータベースに書き込まれた日時を挿入します。
  4. WebSphere MQ 確認メッセージを送信し、データベースへのメッセージの挿入が成功したことを知らせます。

WarehouseData メッセージ・フローは、以下のノードから構成されています。

WarehouseData メッセージ・フローの画面取り

MQInput ノード DATAWAREHOUSE_IN_Q は XML メッセージを読み取ります。着信メッセージは自己定義型 XML 形式なので、メッセージが正常に解析されるようにメッセージ・セットやメッセージ・フォーマットを指定する必要はありません。

Compute ノード Warehouse_Input_Message は、ASBITSTREAM 関数を使用してメッセージ・ペイロード (ROOT.XML) 全体を BLOB に変換し、メッセージをデータベースに挿入し、最後に確認メッセージをフォーマット設定します。

MQOutput ノード DATAWAREHOUSE_OUT_Q は、出力メッセージを WebSphere MQ メッセージとして書き込みます。

データベースの処理中にエラーが起きた場合、メッセージが Compute ノード Create_Error_Message でフォーマット設定されて、MQOutput ノード DATAWAREHOUSE_FAILURE_Q でWebSphere MQ メッセージとして書き出されます。

VerifyDatabaseContents メッセージ・フロー

VerifyDatabaseContents メッセージ・フローは、以下の処理を実行します。

  1. WebSphere MQ メッセージを読み取ります。このメッセージには XML ペイロードが入っており、これはどの間隔 (開始時刻と終了時刻) のレコードのカウントを取得するかを指定します。
  2. データベースを照会し、指定された時間に関するレコードがいくつ存在するかを判別します。
  3. 応答メッセージをフォーマット設定します。
  4. WebSphere MQ メッセージを書き出します。

VerifyDatabaseContents メッセージ・フローは、以下のノードから構成されています。

VerifyDatabaseContents メッセージ・フローの画面取り

MQInput ノード DATAWAREHOUSE_VERIFY_CONTENTS_IN_Q は XML メッセージを読み取ります。着信メッセージは自己定義型 XML 形式なので、メッセージが正常に解析されるようにメッセージ・セットやメッセージ・フォーマットを指定する必要はありません。

Compute ノード Verify_Contents の実行するアクションは、次のとおりです。

  1. 着信メッセージから、データベース照会に使用する開始日時と終了日時を抽出します。
  2. アーカイブ・データベース表に対して SQL SELECT ステートメントを発行し、指定された時刻範囲内の、存在するレコードの数を判別します。
  3. 応答メッセージをフォーマット設定します。

MQOutput ノード DATAWAREHOUSE_VERIFY_CONTENTS_OUT_Q は、WebSphere MQ 出力メッセージを書き出します。

データベースの処理中にエラーが起きた場合、メッセージが Compute ノード Create_Error_Message でフォーマット設定されて、MQOutput ノード DATAWAREHOUSE_FAILURE_Q でWebSphere MQ メッセージとして書き出されます。

テスト・メッセージ

このサンプルでは、2 つのメッセージが使用されます。1 つ目はアーカイブされるメッセージで、2 つ目は Verify Database Content メッセージ・フローが使用される日時を指定するメッセージです。以下に両方のメッセージの例を示します。

アーカイブされるメッセージ

<SaleEnvelope>
<Header>
<SaleListCount>1</SaleListCount>
</Header>
<SaleList>
<Invoice>
<Initial>K</Initial>
<Initial>A</Initial>
<Surname>Braithwaite</Surname>
<Item>
<Code>00</Code>
<Code>01</Code>
<Code>02</Code>
<Description>Twister</Description>
<Category>Games</Category>
<Price>00.30</Price>
<Quantity>01</Quantity>
</Item>
<Item>
<Code>02</Code>
<Code>03</Code>
<Code>01</Code>
<Description>The Times Newspaper</Description>
<Category>Books and Media</Category>
<Price>00.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>00.50</Balance>
<Currency>Sterling</Currency>
</Invoice>
<Invoice>
<Initial>T</Initial>
<Initial>J</Initial>
<Surname>Dunnwin</Surname>
<Item>
<Code>04</Code>
<Code>05</Code>
<Code>01</Code>
<Description>The Origin of Species</Description>
<Category>Books and Media</Category>
<Price>22.34</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code>
<Code>07</Code>
<Code>01</Code>
<Description>Microscope</Description>
<Category>Miscellaneous</Category>
<Price>36.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>81.84</Balance>
<Currency>Euros</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>

検索日時を指定するメッセージ

<Archive_Query>
<Start_Time>
<Day>mm/dd/yyyy</Day>
<Time>hh:mm:ss</Time>
</Start_Time>
<End_Time>
<Day>mm/dd/yyyy</Day>
<Time>hh:mm:ss</Time>
</End_Time>
</Archive_Query>

メインページのアイコン   サンプルのホームに戻る