1

他のシステムから情報を削除するシステムを開発しています。たとえば、Customers データベースがあり、最新の注文が 6 年以上経過している場合、顧客を削除できます。

これには、次の 2 つのアプローチが考えられます。

  1. Customer (顧客データベース用)、Order (注文データベース用) などの各システムのクラスを作成します。ポリモーフィズムの各クラスに Delete という関数を用意します。つまり、クライアントは各クラスで Delete を呼び出すことができます。これにより、必要なデータが削除されます。記録。
  2. エンティティに関する意思決定に必要なすべての情報 (注文など) を SSIS を使用してコピー データベースにコピーし、削除する必要があるすべての 1 つの大きなクエリを生成します。これは、データ ウェアハウス タイプのアプローチです。

どちらのオプションが優れているかを判断することはできません。

4

3 に答える 3

1

3 番目のアプローチは、複数のエージェントでメッセージング システムを使用することです。このアプローチは、非常に複雑なシナリオに最適です。

シナリオは次のとおりです。

ユーザーはコマンドを実行してエンティティ (注文、顧客など) を削除します。ユーザーが使用しているツールは、ユーザーの意図を表すメッセージをワーク キューに作成します (例: 「顧客 123 の削除」)。

メッセージは 1 つ以上のエージェントによって処理されます。各エージェントは、より大きな操作の一部に固有であり、関連するメッセージのみをリッスンします。すべてのエージェントは、単一の分散トランザクション内で動作します。これは、各エージェントが非常に狭い特定の範囲を持っていることを意味しますが、どのエージェントも操作全体を拒否できます。エージェントが他のサブタスクを実行する必要がある場合は、それらの操作 (顧客に属する各注文の削除など) のために追加のメッセージをキューに入れることができます。

このアプローチは、特に非常に複雑な相互作用の場合に、非常にうまく拡張できます。これにより、1 つのシステムが他のすべてのシステムについて知る必要がなくなります。各エージェントは、処理するメッセージを認識しており、そのメッセージに関連する特定のタスクを処理します。

最初はより多くのセットアップが必要ですが、非常に拡張可能です (既存のものに影響を与えることなく、新しいエージェント、メッセージなどを追加できます)。

このアプローチを使用する場合は、MassTransitのフレームワークを参照してください (他にもあります)。.NET で作業している場合、これは強力でありながら親しみやすい非常に優れたシステムです。Sagasは、複数のエージェント間の複雑な相互作用を調整するのに特に適しています。

于 2013-08-28T19:12:20.173 に答える
1

どちらにも利点と欠点があるようですが、個人的には、特に非常に大量のレコードを処理している場合は、レコードを削除するための連続ヒットでデータベースを拘束しないように、2 番目の方法を使用します。

于 2013-08-28T18:37:01.863 に答える