おそらく、1人のユーザーのポイントが増えるたびにすべてのユーザーのランクを更新するための最良のアプローチではありません。多くのユーザーがいる場合、これはバックエンドで厳しいものになります。
たとえばプロフィールページでユーザーのランクを表示したい場合は、ポイント順に並べられたすべてのユーザーのリストを取得するクエリを作成し、これを辞書などとして個別に保存して、大量にキャッシュすることができます。これはパフォーマンスに優れています。
したがって、ユーザーリストが次のようになっているとします(1111などがusersidです)。
USERS = {
1111: {'username': 'iskorum',
'points':99999
},
2222: {'username': 'sidarcy',
'points':9444
},
3333: {'username': 'joeblogs',
'points':37
}
}
実際にユーザーのランクを取得する場合は、この保存された辞書でユーザーの位置を簡単に見つけることができます。
ユーザーIDが1111だとしましょう
userrank = [i + 1 for i、x in enumerate(sorted(USERS))if x == 1111]
1を返します
追加のDBクエリは必要ありません
小さなサイトだけであれば、毎回ユーザーリストを取得し、そのリスト内の現在のユーザーの位置を見つけることに害はありません。
ただし、数千人のユーザーを期待している場合は、上記の方が適切なアプローチになる可能性があります。
編集:以下のコメントで説明されているように、毎回リストを並べ替えると大量のメモリを消費する可能性があるため、並べ替えられたリストもキャッシュする必要があります