Предположим, что есть некая онлайн-игра, у каждого игрока имеется ник (name) и некоторое количество набранных очков (score). Игра устроена таким образом, что количество очков может как увеличиваться, так и уменьшаться произвольным образом. В качестве очков может быть текущий опыт, игровые деньги, рейтинг Эло и т.п., это не принципиально.
Рейтингом игрока назовём его порядковый номер в списке, отсортированном сначала по убыванию score, затем по убыванию name, т.е. у игроков с одинаковым score будет разный рейтинг в зависимости от алфавитного порядка ников.
Задача состоит в том, что нужно уметь регулярно показывать каждому из игроков список из top 5 самых лучших игроков (тривиально), его собственный рейтинг, а также top 5 его друзей. Игроков в игре может быть и миллион, а друзей у игрока может быть и 10000.
Как правильно решается подобная задача в реальных хайлоадах?