SQL2005データベースに負荷の高い(多くの挿入/更新/削除)テーブルがあります。これらすべての変更に対して、可能な限りリアルタイムに近い状態で後処理を実行したいと思います(テーブルをロックしないように非同期で)。私はいくつかの可能な解決策を探しましたが、正しいと感じる1つのきちんとした解決策を見つけることができないようです。
後処理の種類もかなり重いので、Windowsリスナーサービスは実際に処理を多くのマシンに渡します。ただし、アプリケーションのこの部分はすでに稼働しており、完全に非同期であり、私が支援を必要としているものではありません-これは、CLRオブジェクトをロードすることができないという点で、設計上の決定に影響を与えるという理由だけで言及したいと思います処理を完了するためのDB。
したがって、単純な問題が残ります。テーブル内のデータが変更された場合、リモートサーバー上のc#コードで処理を実行したいと思います。
現在、「xp_cmdshell」を実行してWindowsサービスがリッスンしているイベントを発生させるexeを起動するSQLトリガーを使用することを考え出しました。これはただ気分が悪い。
しかし、私がオンラインで調べた他のソリューションもかなり複雑に感じます。たとえば、SQLCacheDependancyの設定には、ServiceBrokerの設定も含まれます。もう1つの可能な解決策は、Webサービスを呼び出すことができるCLRトリガーを使用することですが、これには、特にパフォーマンスが重要な場合に、それを実行するのに悪い方法であるという警告がオンラインで非常に多くあります。
理想的には、テーブルの変更に依存せず、アプリケーション内の呼び出しをインターセプトしてそこからサービスに通知します。残念ながら、一部のレガシーアプリケーションもデータに変更を加えており、テーブルの監視は瞬間。
どんな助けでも大歓迎です。
概要:
- テーブルデータの変更にリアルタイムで対応する必要があります
- パフォーマンスは重要です
- 大量のトラフィックが予想されます
- ポーリングとスケジュールされたタスクはオプションではありません(またはリアルタイム)
- サービスブローカーの実装が大きすぎます(ただし、解決策にすぎない可能性がありますか?)
- CLRコードはまだ除外されていませんが、提案された場合は実行する必要があります
- リスナー/モニターはリモートマシンである可能性があります(同じ物理ネットワークである可能性があります)