1

私はピークパフォーマンス要件を持つプロジェクトに取り組んでいるので、効率のために複数の操作 (データベースへのデータの永続化など) を一括 (バッチ?) する必要があります。

ただし、次のようなわかりやすいフローをコードで維持したいと考えています。

input = Read();
parsed = Parse(input);
if (parsed.Count > 10)
{
   status = Persist(parsed);
   ReportSuccess(status);
   return;
}
ReportFailure();

ここで私が探している機能は、自動的に Persist() が一括で発生するようにすることです (つまり、非同期に) が、ユーザーに対しては同期であるかのように動作します (一括アクションが完了するまで、ユーザーはブロックする必要があります)。実装者が Persist(ICollection) を実装できるようにしてほしい。

あまりよく知らないフローベースのプログラミングについて調べました。ここで C# の fbp 用のライブラリを 1 つ見て、Microsoft の Workflow Foundation で少し遊んでみましたが、私の印象では、どちらも私が必要としているものにはやり過ぎです。一括フロー動作を実装するには何を使用しますか?

私が書いたものとまったく同じコードを取得したい(理解しやすくデバッグしやすい)ので、フローを相互に接続するために収量または構成を含むソリューションは、私の目的には不十分であることに注意してください。また、チェーン は私が探しているものではありません。最初にチェーンを構築してから実行したくはありません。単純なフローのように見えるコードが必要です (「A を実行し、B を実行し、C の場合は B を実行します。 D」を行います)。

4

4 に答える 4

1

一般的な問題 - Persist を呼び出す代わりに、通常はコマンド (またはそれらの行に沿った smt) を Persistor クラスにロードし、ループが終了した後、Persistor.Persist を呼び出してバッチを永続化します。

いくつかのポインター - SQL を生成している場合、永続化プログラムに追加するコマンドは、(組み込みオブジェクト、カスタム オブジェクト、または単にクエリ文字列を使用して) 何らかの形でクエリを表すことができます。ストアド プロシージャを呼び出している場合は、コマンドを使用して、persist メソッドを呼び出したときに SP に渡される xml の一部に何かを追加できます。

それが役立つことを願っています-これにはパターンがあると確信していますが、名前はわかりません:)

于 2009-04-27T18:14:17.630 に答える
0

これがSQLServerベースであるため、これが必要かどうかはわかりませんが、SSISDTSを調べてみましたか?

于 2008-09-17T22:02:36.417 に答える
0

できる簡単なことの 1 つは、単純にリストに追加して返すメッセージをプッシュする MemoryBuffer を作成することです。この MemoryBuffer には、定期的に呼び出されて「実際の」更新を行う System.Timers.Timer があります。

そのような実装の 1 つは、 http: //www.fantail.net.nz/wordpress/?p= 5 の Syslog サーバー (C#) で見つけることができます。ここでは、syslog メッセージがバッチで定期的に SQL Server に記録されます。

データベースにプッシュされる情報が重要な場合、このアプローチは適切ではない可能性があります。何か問題が発生した場合、MemoryBuffer 内のメッセージが失われるためです。

于 2009-05-03T02:38:47.750 に答える