web-dev-qa-db-ja.com

ウェブサイトのランキングに最適なデータベース設計

私は、ウェブサイトをグローバルランクと特定の国でのランクの2つの方法でランク付けする必要があるプロジェクトに取り組んでいます。両方の計算に基づくさまざまな要因があります。ランクの計算が必要な国は200か国までです。

MySQLを使用しています

2つの質問があります-

グローバルランク

新しいウェブサイトが追加されるたびに-

  • データベースにWebサイトのランクを保存する場合、すべてのWebサイトのランクを再計算する必要があります。これは、新しいWebサイトが追加されるたびに多くの処理を必要とします。
  • または、他のオプションは、各Webサイトにスコアを割り当て、クエリが実行されるたびにスコアに基づいてorder byを実行してランクを割り当て、その位置を返すことです。 order byは高価な操作であるため、これはスケーラブルな方法ではないようです。

国ランクデータベースと更新

  • 各ウェブサイトの国別ランクをどのように保存すればよいですか?

  • 新しいウェブサイトが追加されたときにこれらのランクをすべて更新するにはどうすればよいですか?ここでの更新は、グローバルランクの場合よりもさらにコストがかかります。

  • 照会時にon-the-flyを生成して、結果をキャッシュする必要がありますか?

Playストアなどのウェブサイトは、パーソナライズされた結果と国ベースの結果をどのように表示しますか?

5
Ashish Gupta

billionsのWebサイトをランク付けしますか?もしそうなら、オンザフライと再計算は問題外です。

代わりに、問題に対処するバックグラウンドタスクを用意してください。表示するには、表にある情報を表示します。1日または2日古くなっている可能性があります(再計算にかかる時間によって異なります)。

_website_id_とrankのみを使用して、ランクを別のテーブルに配置します。これにより、再計算後の置換テーブル全体がアトミックで高速になります。おそらく、_website_id_、_country_code_(CHAR(2) CHARACTER SET ascii)、およびrankを含む2番目のテーブルです。

ランキングの計算方法については説明していません。そのため、バックグラウンドタスクとしてどのように計算するかについては説明できません。

5
Rick James