さまざまなバッジを処理するためにデータベースやモデルをセットアップする方法を理解しようとしています。スタック オーバーフローバッジを例に取りましょう。それぞれに異なるルールがあり、いくつかは単に変数が異なる場合があります (10 コメントと 100 コメントのように)。
私の質問は、アプリケーション内でこのタイプの検証/チェックをどのように設定するのですか? 各バッジには独自のメソッドが必要ですか?
さまざまなバッジを処理するためにデータベースやモデルをセットアップする方法を理解しようとしています。スタック オーバーフローバッジを例に取りましょう。それぞれに異なるルールがあり、いくつかは単に変数が異なる場合があります (10 コメントと 100 コメントのように)。
私の質問は、アプリケーション内でこのタイプの検証/チェックをどのように設定するのですか? 各バッジには独自のメソッドが必要ですか?
リアルタイムで計算されるものもあれば、断続的に実行されるプロセスで計算されるものもあると思います。
たとえば、回答が 10 件の賛成票を獲得したときに表示されるバッジの場合、パフォーマンスへの影響はほとんどなく、リアルタイムで計算できます。
一方、1 日の評判の上限 x 回に到達したかどうかをチェックするバッジの場合は、1 日の終わりにしかチェックしないため、何らかのバッチ ジョブとして実行することをお勧めします。
重要な関心事は、物事を高速に実行し続けることです。スタック オーバーフローでは、1 日に数千 (場合によっては数万) の質問が寄せられ、おそらく数十万のコメントが寄せられます。計算が簡単でないものは、別のプロセスで実行する必要があります。コア機能をタイトで限定的かつクリーンに保ち、高いパフォーマンスを実現します。コアの投稿システム以外のプロセスで複雑な計算を実行すると、ユーザーのサイト使用能力に影響を与えることなく実行できます。タスクが十分に複雑な場合は、同じプロセスを複数のマシンで実行するだけで水平方向にスケーリングできます。
必要な場合は、次のように実装します。
いくつかのキュー マネージャー (そのようなソフトウェアはたくさんあります) をセットアップし、キューからのメッセージを処理するブローカーを作成します。
トピックを表示した、コメントを編集した、回答を編集した、別の人の回答を編集した、賛成票を投じたなどのイベントが発生するたびに、イベントの説明を含むメッセージをもう 1 つ収集します。はい、そこには本当に膨大な量のメッセージが表示されます。
膨大な量のメッセージを収集したら、メッセージをスケジュールまたはリアルタイムで処理するブローカーを開始できます。
このスキーマを使用すると、ブローカーを必要なだけ複雑なバッジに拡張できます。
SO は SQL Server から実行されるため、SQL Server エージェント ジョブを定期的に実行して統計を集計します。条件が満たされると、ジョブ内のストアド プロシージャが Badges/etc テーブルに挿入されます。
トリガーは別のオプションですが、複数のユーザーの範囲でトリガーの実行を遅らせることはできません。