1

私の要件では、Web サイトのすべてのユーザーは、他のユーザーに添付されたスコアを見ることができます。プロファイル パラメータに基づいて計算されます。他の誰かに対する私のスコアは 1 ですが、私に対する彼らのスコアは別のスコアになります。

これまでに行ったこと MySQL データベースのテーブルは次のようになります。

___UserID1___|___UserID2___|___Score___|___Last_Uopdated___
   1 | 2 | 45 | 1235686744
   2 | 1 | 24 | 1235645332

ユーザーが誰かのページを表示すると、私のスコアクラスは、このペアのレコードがデータベースに存在するかどうかを確認し、存在しない場合は計算して記録します。サイトのすべてのユーザー ページを絶対に見る人はいないため、これは問題なく機能します。

ここで、ユーザーをプルして、スコアに基づいて並べ替える必要があります。だから私は、cronjobを作成して毎晩実行できると思ったので、データベースのスコアを更新し、ユーザーのすべてのペアに対して両方の方法でスコアを作成します.

問題は、500,000 人を超えるユーザー向けのシステムを計画していて、データベースがダウンして巨大なデータベースが作成されるのではないかと心配していることです。したがって、500,000 の場合、2,500 億のレコードについて話していることになります... :/

この機能を作成する他の方法を知っている人はいますか? その場での計算かもしれません...または他の方法ですか?

4

1 に答える 1

0

私があなたの状況にあった場合、私はその場で計算を作成します。関数を使用してスコアを生成し、その値をデータベースに保存します。そうすれば、ユーザーがいずれかのページにアクセスするたびに、スコアが更新されます。これは、可能なすべての組み合わせで一度に関数を実行しようとするのではなく、段階的なアプローチです。さらに、データベースの災害はもうありません:)

すべてのユーザーをスコアでランク付けするページがある場合、すべてのユーザーを一度にフェッチするのではなく、ページ付けを使用してSQLクエリのORDER BYおよびOFFSET、LIMIT機能を使用するとはるかに簡単になります。

于 2012-08-26T07:07:54.960 に答える