1

私は、ユーザーが実行するアクションのポイントを取得するアプリを持っています。簡単なアクションの場合は1ポイント、難しいアクションの場合は2ポイントです。私のアプリで獲得したポイントの総数と今週(月曜日の深夜以降)に獲得したポイントをユーザーに表示したいと思います。

すべてのアクションを、それらの時間とポイント数とともに記録するテーブルがあります。

私には2つの選択肢があり、どちらが良いかわかりません。

  1. ユーザーがレポートを見るたびにクエリを実行し、ユーザーが取得したポイントを合計します
  2. これまでに取得したポイント数(合計および週次)を記録する2つのフィールドを各ユーザーに追加します。毎週のポイント値は、毎週月曜日の深夜に0に設定されます。

最初のオプションの方が簡単ですが、多くのユーザーとアクションを取得するため、クエリに長い時間がかかるのではないかと心配しています。

2番目のオプションは、アクションの表と要約値の間の不一致のリスクを回避します。

私はあなたがここで最良の選択肢であると思うものに非常に興味があります。

ありがとう、ドリアン

4

2 に答える 2

0

オプション1を取ります。 後でスケーリングする

私の考えは、毎回テーブルをクエリするというより単純なアプローチを取ることです。サイトのユーザー数が多すぎてサーバーの速度が低下するという問題がある場合は、その時点で切り替えることができます。サーバーの速度が低下するほど多くのユーザーがいる場合は、おそらくアプリケーションの他の部分もスケーリングする必要がありますが、これらの初期段階でアプリケーションをスケーリングするためにひどく邪魔にならないようにしてください。スケーリングする必要があるときにスケーリングします。

私の見解は、37signalsの本「GettingReal」の第4章から取られています-後でスケールする http://gettingreal.37signals.com/ch04_Scale_Later.php

于 2010-12-25T08:39:44.547 に答える
0

どちらのソリューションも同じように機能します。あなたはそれを自分で正しく言います:最初の選択肢は実装が少し簡単ですが、ユーザーがスコアページに入るたびにスコアを合計する必要があります。一方、2番目の方法では、ユーザーテーブルに2つの追加属性を追加して維持するだけで済みます。注意深くプログラムすれば、これによってアプリケーションの整合性が危険にさらされることはほとんどありません。

于 2010-12-25T08:54:12.383 に答える