私は自分の質問に対する解決策を部分的に見つけましたが、結果に本当に満足していません。
私のアプリケーションはASP.NET MVC + MS SQL Serverで構成されています。
ケースは次のとおりです。
私はこのチュートリアル http://venkatbaggu.com/signalr-database-update-notifications-asp-net-mvc-usiing-sql-dependency/ に従って設定しました。
SqlDependency with broker serviceを使用して、SQLからプッシュ通知を取得し、OnChangeイベントを発生させます。問題は、このソリューションが非常に遅いことです。小さなデータベースでは毎秒1つのレコードしか保存されず、イベントはかなり大きな遅延で発生します。
SQLからデータ変更を取得する別のテクノロジーはありますか?または、私が使用しているソリューションには、何らかの最適化が必要ですか?
あなたはプログラムを更新するためにデータベースがいつ書き込まれたかを知る必要があるという点で、技術的な問題で概念的な問題を修正しようとしています、そしてあなたはそれを達成するためにこのSqlDependencyに依存しています。誤解しないでください。SqlDependencyは状況によっては最適です。ただし、このような状況では、サーバーで大量挿入が実行されている場合は、ほぼ確実に機能します。
ライブラリーには、最初のイベントの後(または、少し遅れて最後のイベントの後)にイベントのトリガーを無効にする機能があるか、適切にスケーリングされないソリューションが存在することになります。
代替ソリューションを提供します。バックエンドタスクが書き込みを開始したとき、書き込みが終了したとき、および書き込み中の1秒ごとに、データベースがそのタスクによって書き込まれたことを示すレコードを更新します。
アプリケーションは、データベースをポーリングしてその値を(たとえば5秒ごとに)頻繁にポーリングし、書き込まれたことを示すインジケーターがある場合は、更新を実行してフラグをリセットします。この場合、実行される次のチェックは最後のチェックの1秒後にのみ行われるため、データベースが変更された場合は、より頻繁に更新されます。
チェックをより正確にする必要がある場合は、必要に応じてより頻繁にチェックすることができます。重要なのは、プログラムがチェックと更新を必要な速度でのみ実行し、追加されたすべてのレコードに対してではないことです。つまり、100件のレコードが追加された場合、プログラムデータを100回更新する必要はありません。実際に20〜100レコードあたり0.1秒かかる場合、100レコードを最大で5回更新することになります。
http://sqltabledependency.somee.com/ をご覧ください。挿入された削除または更新されたレコードに関する情報を含む通知をSQL Serverから受信できます。