2

ユーザーがあるシステムからデータを取得し、他のシステムに送信できるようにするシステムを設計しています。宛先システムの 1 つは洗練された SOA (Web サービス) を備えており、もう 1 つは入力用にフラット ファイルを受け入れるメインフレームです。

PublishEvent テーブルと PublishEventType テーブルを持つデータベースを作成しました。発行されるイベントのタイプに固有の正規化されたテーブルもあります。

また、正規化されたデータ テーブルの平坦化されたバージョンである「インターフェイス」テーブルもあります。エンド・ユーザーには、インターフェース表にデータを入れるプロセスがあります。正確なプロセスはわかりません。結果を SQL テーブルにエクスポートできるのは、ある種のレポート アプリケーションだと思います。次に、SSIS パッケージを使用してインターフェイス テーブルからデータを取得し、それを正規化されたデータ構造に配置して、PublishEvent テーブルに新しい行を作成します。私が最初にリレーショナル テーブルを見せたとき、彼らは非常に混乱しているように見えたので、フラット テーブルを使用します。

PublishEvent テーブルの新しい行を監視する Windows サービスがあります。Windows サービスはプラグインで拡張されます (MEF フレームワークを使用)。どのプラグインが呼び出されるかは、PublishEvent 行の PublishEventTypeID フィールドの値によって異なります。

PublishEventTypeID 1 は、1 セットのテーブルからデータを読み取るプラグインを呼び出し、SOA Web サービスを呼び出します。PublishEventTypeID 2 は、別のテーブル セットからデータを読み取り、メインフレームに送信されるフラット ファイルを作成するプラグインを呼び出します。

これは、「Database as IPC」アンチパターンを実装しているようです。メッセージング ベースのシステムを使用するように設計を変更する必要がありますか? データをフラット テーブルに入れ、次に正規化されたテーブルに入れるプロセスは冗長ですか?

編集:これは.NET 3.5で開発されています

4

3 に答える 3

1

おそらくMOMの方が適切なソリューションですが、次の点も考慮する必要があります。

  1. 顧客のアーキテクチャの一部として、メッセージ ベースのシステムを既に導入していますか? そうでない場合、それを導入するのはやり過ぎかもしれません。
  2. メッセージベースのシステムの経験はありますか? Jason Plank が正しく述べたように、メッセージの時系列順の確保、デッド レター チャネルの管理など、特定のパターンを考慮する必要があります (詳細については、この本を参照してください)。
  3. インターフェイスのオプションが明らかに制限されているメインフレーム システムについて言及されました。「メッセージ」(DB ベースまたは MOM ベース) をメインフレームが消化できるものに変換するレイヤーを担当するのは誰ですか? それがあなたであると仮定すると、DB にアクセスすることによって (あなたにとって) それを行う方が簡単でしょうか (過去に問題に取り組んだことがあるかもしれません)、または DB を使用するか MOM を使用するかによって労力が異なりますか?

要約すると、DBルートに進むことに自信がある場合は、それを行う方が良いかもしれません-あなたが正しく提案したように、それは少し「アンチパターン」です.

于 2011-10-10T14:01:12.860 に答える
0

留意すべきいくつかの重要な項目は次のとおりです。

  1. 行順序の一貫性 - データ モデルは、生成されたデータの順序に依存していますか? もしそうなら、あなたのスキームは、元のデータが作成されるのと同じ順序でパブとサブのアクティビティを確実にしますか?

  2. どちらの側にも ID 列がありますか? データが挿入される順序に基づいて値が変化し続けるため、これらは問題です。Identity 列が唯一の主キー (代理キー) である場合、その値を変更するとデータが使用できなくなる可能性があります。

  3. 記録を失っていないことをどのように証明しますか? これは、特に何百万もの行がある場合、ソリューションの最も難しい部分です。

アーキテクチャに関しては、XMPP プロトコル (クライアント用の Smack (Java の場合) とサーバー用の eJabberD) を確認することをお勧めします。

于 2009-10-06T00:10:09.237 に答える
-1

.Net を使用している場合は、nServiceBus、Mass Transit、または RhinoServiceBus を調べてください。

于 2010-02-09T21:46:17.277 に答える