要するに、私のプロジェクトは処理できるデータよりも速くデータを受信しており、データベース(EF6からSQL Server 2016)ベストプラクティスのアプローチが何であるか分かりません(Service Brokerを介したデータベースへのオフロード?他に何か?)書き込みイベントは十分に速く処理されないため、カスケードイベントログと重大なメモリクラッシュが発生します。イベントの処理が非常に高速で処理が困難なため、問題のあるバックログが発生する
書き込みイベントは低優先度であり、非同期タスクを使用しています。書き込みイベントは多くのデータと多くの関係を伴い、EFはそれらを効率的に処理していません(私はAddRangeを使用していますが、EFは多くのシングルインサートですべてを送信しています。 。
私はリレーションシップを元に戻そうとしましたが、データベースに処理を移しました。バッチ処理された「遅延」キュー(「空の私」イベントをトリガーする観測可能なキューインプリメンテーションしきい値が満たされたとき)、インバウンド書き込みイベントを非常に迅速に処理できる(キュー内の要求をダンプして移動する)が、これは私をどこにでも持ち込まなかった(驚くことではない。基本的に組み込みのメッセージキューの上にメッセージキューを追加しましたか?)。
私が間違っている場合は私を修正してください。しかし、EFは私が持っているものと同じくらい重い、関係の重いものとして正しいツールではないようです。 )。したがって、これを賢明に解決するために、EFをバイパスして、独自の一括書き込みクエリを実行するのは理にかなっているのですか?これはService Brokerにとって適切な使用ですか? Service Brokerを使用すると、データセットをキューに追加するだけで、フロントエンドが移動できるようになり、データベースはいつでもリレーションシップを処理して構築できます。これらの解決策は合理的かベストプラクティスか、間違った木を鳴らしていますか(あるいは口紅を豚に載せているかもしれません)?
ありがとうございます。
をマージ
@PiotrGwiazdaこれは時折持続的なバーストを伴う一定の流れです。私はそれらの外部のブローカーを見ていきます、ありがとう!私はデータ層に焦点を当て自分のSQLをロールバックする必要があることに同意します。結局、アプリケーションの吸気段階では、関係について気にしません(それは私がEFを下げていると思います)。それが私のコストがどこにあるのであれば、それらのタスクを割り当てることが理にかなっていますデータベースに転送します。 –