一部のサービスは、サードパーティによってお客様に提供されます。リモート サーバーで作成されたデータは、オンプレミスの SQL サーバーにレプリケートされます。データベースに直接アクセスできないサードパーティサーバーでいくつかの作業を実行する必要があります。彼らはその目的のために一連の API を公開しています。この作業は、リンクされた SQL サーバー上で SQL Server エージェント ジョブによって実行されます。
ビジネス シナリオ : 顧客は「バッジ」を受け取ることができます。バッジはUpdateCustomerBadgeInfo
、サード パーティのサーバーで Web メソッドを呼び出すことによって、顧客に与えることができます。
したがって、自動化されたタスクの一般的な要件は次のようになります。
「その日に 50 回以上ログインしたすべての顧客を見つけて、[has-no-life]
バッジを付与し、SMS 通知を送信する」
アルゴリズムは次のようになります。
- Select all the matching accounts into a #TempTable
for each customer record:
- Call UpdateCustomerBadgeInfo() method (via CLR)
- If successfully updated badge info-> Enqueue SMS message (queue table)
- Log successful actions (so that the record will not be picked up next time)
現在の動作方法の最大の問題は、WHILE ループで大きなデータセットを処理するのに多くの時間がかかることです。
そのため、サード パーティ プロバイダーは、顧客データのバッチ更新を実行するソリューションを作成しました。バッチ更新要求が送信され、後で検証と処理のためにサービスによって取得される、オンプレミスの SQL サーバーにテーブルを作成しました。
質問は :
この非同期モデルに適合するには、上記のアルゴリズムをどのように変更する必要がありますか?