私は、ウェブサイトをグローバルランクと特定の国でのランクの2つの方法でランク付けする必要があるプロジェクトに取り組んでいます。両方の計算に基づくさまざまな要因があります。ランクの計算が必要な国は200か国までです。
MySQLを使用しています
2つの質問があります-
グローバルランク
新しいウェブサイトが追加されるたびに-
order by
を実行してランクを割り当て、その位置を返すことです。 order by
は高価な操作であるため、これはスケーラブルな方法ではないようです。国ランクデータベースと更新
各ウェブサイトの国別ランクをどのように保存すればよいですか?
新しいウェブサイトが追加されたときにこれらのランクをすべて更新するにはどうすればよいですか?ここでの更新は、グローバルランクの場合よりもさらにコストがかかります。
照会時にon-the-fly
を生成して、結果をキャッシュする必要がありますか?
Playストアなどのウェブサイトは、パーソナライズされた結果と国ベースの結果をどのように表示しますか?
billionsのWebサイトをランク付けしますか?もしそうなら、オンザフライと再計算は問題外です。
代わりに、問題に対処するバックグラウンドタスクを用意してください。表示するには、表にある情報を表示します。1日または2日古くなっている可能性があります(再計算にかかる時間によって異なります)。
_website_id
_とrank
のみを使用して、ランクを別のテーブルに配置します。これにより、再計算後の置換テーブル全体がアトミックで高速になります。おそらく、_website_id
_、_country_code
_(CHAR(2) CHARACTER SET ascii
)、およびrank
を含む2番目のテーブルです。
ランキングの計算方法については説明していません。そのため、バックグラウンドタスクとしてどのように計算するかについては説明できません。