2

さまざまなバッジを処理するためにデータベースやモデルをセットアップする方法を理解しようとしています。スタック オーバーフローバッジを例に取りましょう。それぞれに異なるルールがあり、いくつかは単に変数が異なる場合があります (10 コメントと 100 コメントのように)。

私の質問は、アプリケーション内でこのタイプの検証/チェックをどのように設定するのですか? 各バッジには独自のメソッドが必要ですか?

4

3 に答える 3

1

リアルタイムで計算されるものもあれば、断続的に実行されるプロセスで計算されるものもあると思います。

たとえば、回答が 10 件の賛成票を獲得したときに表示されるバッジの場合、パフォーマンスへの影響はほとんどなく、リアルタイムで計算できます。

一方、1 日の評判の上限 x 回に到達したかどうかをチェックするバッジの場合は、1 日の終わりにしかチェックしないため、何らかのバッチ ジョブとして実行することをお勧めします。

重要な関心事は、物事を高速に実行し続けることです。スタック オーバーフローでは、1 日に数千 (場合によっては数万) の質問が寄せられ、おそらく数十万のコメントが寄せられます。計算が簡単でないものは、別のプロセスで実行する必要があります。コア機能をタイトで限定的かつクリーンに保ち、高いパフォーマンスを実現します。コアの投稿システム以外のプロセスで複雑な計算を実行すると、ユーザーのサイト使用能力に影響を与えることなく実行できます。タスクが十分に複雑な場合は、同じプロセスを複数のマシンで実行するだけで水平方向にスケーリングできます。

于 2010-12-21T01:22:01.437 に答える
1

必要な場合は、次のように実装します。

いくつかのキュー マネージャー (そのようなソフトウェアはたくさんあります) をセットアップし、キューからのメッセージを処理するブローカーを作成します。

トピックを表示した、コメントを編集した、回答を編集した、別の人の回答を編集した、賛成票を投じたなどのイベントが発生するたびに、イベントの説明を含むメッセージをもう 1 つ収集します。はい、そこには本当に膨大な量のメッセージが表示されます。

膨大な量のメッセージを収集したら、メッセージをスケジュールまたはリアルタイムで処理するブローカーを開始できます。

このスキーマを使用すると、ブローカーを必要なだけ複雑なバッジに拡張できます。

于 2010-12-21T01:22:44.917 に答える
1

SO は SQL Server から実行されるため、SQL Server エージェント ジョブを定期的に実行して統計を集計します。条件が満たされると、ジョブ内のストアド プロシージャが Badges/etc テーブルに挿入されます。

トリガーは別のオプションですが、複数のユーザーの範囲でトリガーの実行を遅らせることはできません。

于 2010-12-21T01:24:39.427 に答える