2009-07-23 95 views
4

私は、1つのシステムから多数のレコードを選択し、(ビジネスルールに基づいて)複数の変換を行い、それらを別のシステムに挿入するというロジックを持っています。DDDを使用すると、バッチ処理はどのように実装されますか?

これらのレコードをそれぞれオブジェクトとしてインスタンス化し、それらのオブジェクトに対してトランスフォームを実行し、これらのオブジェクトのすべてを他のシステムに挿入するのは、高性能(およびメモリ)ヒットのようです。

DDDでこれを達成してクラス/オブジェクトをスキップし、SQL、ストアードプロシージャーを使用してストレートに行う最良の方法はありますか?

DDDを使用してこの目標を達成するより良い方法はありますか?

注:CouchDBのようなオブジェクトストアはオプションではありませんが、システムはSQLデータベースを使用します。

答えて

4

DDD上に構築された多くの分散システムでは、イベント駆動型アーキテクチャを使用しています。各エンティティがシステムによって変換されるような状態変更を受けるため、すべての変換を1つのバッチで実行するのではなくエンティティは、ある種のメッセージバスに公開されるイベントを発生させます(例えば、Mule for Java、MassTransit for .NET)。トランスフォーメーション・システムはこのイベントをサブスクライブし、各メッセージがシステムに到着すると、メッセージで識別されたエンティティーで変換を実行し、宛先システムに別のメッセージをパブリッシュします。

この種の「トリクル処理」は、システムに何らかの負荷をかけることなく、一日中一貫して実行することができ、時間外にジョブを実行する必要があります。パフォーマンスが懸念される場合は、この種のアーキテクチャを使用すると、COBの5分後に最後のレコードが変換され、バッチジョブが午前3時まで実行されなくなることがあります。終了)。

真夜中までにターゲットシステムを更新したくない場合は、メッセージを午前0時までキューに入れ、宛先システムのエンドポイントに公開します。

グレッグ・ヤングは、この種のアーキテクチャについて広範にブログし、発表しました。 InfoQで彼の仕事をチェックしてください。

+0

ありがとうございます。それは間違いなく調べるものです。再度、感謝します。 – Laz

関連する問題