2

これは SO メタの質問ではありません。私はSOを例としてのみ使用しています。

StackoverFlow では、各回答、各コメント、各質問、各投票には、ある時点でバッジを生成する効果があります。つまり、すべてのアクションの後、クエリのリストがテストされます。

たとえば、A氏が賛成票を投じた場合、B氏は回答します。したがって、このB氏の回答が100回賛成票を投じられているかどうかを確認する必要があるため、B氏にバッジを与え、A氏が100回賛成票を投じたので、彼にバッジを与えます。

これは、アクションごとに少なくとも 100 個のクエリ/IfElse を実行する必要があることを意味します。

私の実際の例は、出席マシンからオンライン データを受信するアプリケーションを持っていることです。ユーザーが自分のカードを機械に見せたとき。これを受け取り、記録として保管します。この記録に基づいて、私は複数の計算を行いました。つまり、彼は遅れていますか。彼は3日続けて遅刻していますか。彼は右シフト(日勤/夜勤)ですか?今日は休み。これは残業ですか。彼は早いですか.......etc.,etc.,etc.

この種の要件に最適な戦略は何ですか。

更新: SO チームはこれについて私たちを案内できますか?

4

4 に答える 4

3

キューとワークフローを使用します。このようにして、更新の瞬間を実際の通知から切り離し、システムを拡張できるようにします。密結合、トリガーベース、または同様のソリューションは拡張できません。各更新は、すべての関係者が通知に反応するのを待つ必要があるためです。ワークフローを使用した処理エンジンの設計により、スキーマを変更せずにデータを変更することで、ステップと通知のコンシューマーを簡単に追加できます。

たとえば、MSDNがキューを使用してMSDNコンテンツに関する同様の問題を処理する方法を参照してください:MSDNアグリゲーションシステムの構築

于 2009-09-18T03:15:57.457 に答える
0

また、何をチェックするかはしきい値によって異なります。

例:過去3日間欠席していませんか?このチェックは、その人が2日間不在の場合にのみ必要です。

つまり、毎回すべてをチェックする必要はありません。
また、どのくらいの情報をすぐに更新する必要がありますか?SOはリアルタイムで更新しません。

于 2009-09-18T03:23:52.550 に答える
0

オンラインレプリケーションを使用して2つのデータベースを使用する必要がある場合があります。1つはリアルタイムデータを取得するためのもので、他には何もありません。次に、ハード計算を使用する場合があります(たとえば、10分ごとまたは要求によってすべての関連を計算します)。このデータベースを別のサーバーに配置します。

于 2009-09-18T03:28:31.817 に答える
0

これらの特別なケースがいつ発生するかを示すために、「フラグ」(他のテーブル、他の列など) を使用することはできませんか? そうすれば、大量のルックアップや結合よりも、(特殊なケースごとに) 1 つのルックアップを実行するだけで済みます。挿入時に変更 (3 日遅れなど) を記録できます。

于 2009-09-18T03:11:36.333 に答える