TOP игроков

Вообще сама задача создания TOPа - пустяковая, нужно просто решить по какому принципу она будет сортироваться (например по полученному опыты) и отсортировав игроков, вывести первых 10 (или 20, или 100).

Но вот задача будет посложнее если игроков уже далеко за 100000. Сортировка такого количества чисел, даже на мощном сервере может занять некоторое время. А т.к. структура игроков изменяемая придется блокировать ее, и в этот момент не обрабатывать другие запросы, от других игроков.

Простое решение данной проблемы - воспользоваться базой, туда же скидываются постоянно состояния игроков, сортировка по БД, занимает гораздо меньше времени (используется индексы), и не требует блокировки текущей структуры (а только самой БД - что вообще не критично для игрового процесса).

Однако есть сложность в том, что на момент построения топа у игроков будут другие значения опыта и даже уровней.
Потому решено было выдергивать первую тысячу игроков из базы, а затем сортировать ее в зависимости от текущих значений.
Кстати используем сейчас алгоритм "быстрой" сортировки, хотя для упорядоченного ряда наверное быстрее использовать сортировку "пузырьковым методом". Потом проверим - как наберем 1000 игроков :)

Комментарии

Место

А фильтры будут? Например по урону, по полученному урону, по золоту там... А собственная статистика у каждого игрока будет?

Конечно будет несколько

Конечно будет несколько топов. И у игрока будет вся его информация, грех уж скрывать!