powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Топ игроков
5 сообщений из 5, страница 1 из 1
Топ игроков
    #37616388
ewb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всех приветствую!
Не совсем уверен в правильности выбора раздела, ну да надеюсь поправят если что.

Есть игровое приложение, где надо организовать вывод топ игроков.
Ситуация с виду довольно проста, есть таблица user, где помимо прочей инфы, есть поле score, которое хранит общий счет игрока.
Соответственно топ игроков выдается запросом вида SELECT ... ORDER BY ... LIMIT

Но, при заходе на страничку топа, игроку помимо скажем топ-10 игроков, должно сразу выдаваться его место в рейтенге.
И должна быть в наличии кнопка "к себе", по клику на которую показываются соседние с игроком люди.
Вот тут то и проблема....не совсем понимаю, как без лишних затрат решить задачу.

И еще один минус, сумарное количество юзеров планируется довольно большое, скажем 5 миллионов.
В таком виде обычный запрос SELECT ... ORDER BY ... LIMIT уже не кажется хорошей идей, даже если поле score сделать индексом.

Еще усложнее - не хочется хранить все количество юзеров в одной таблице, скажем будет 50 таблиц, по 100 000 юзеров в каждой (скорее всего не на одном сервере), как тогда организовать топ с необходимыми условиями?
1) Вывод топ 10 с пролистыванием далее, тоесть листание топа по 10 игроков.
2) Вывод текущего места в топе конкретного игрока
3) Показать конкретного игрока и его соседей в топе.

СУБД - mysql.

Спасибо если дочитали :)
...
Рейтинг: 0 / 0
Топ игроков
    #37616501
Ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ы
Гость
ewb,

решение зависит от того, насколько оперативно должен обновляться рейтинг. Можно, напр., рассчитывать его каждые N часов (как в ЖЖ).
...
Рейтинг: 0 / 0
Топ игроков
    #37616595
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ewbЕще усложнее - не хочется хранить все количество юзеров в одной таблице, скажем будет 50
таблиц

"Не хочется жить без боли, надо отрастить себе геморрой."

Заведите под рейтинг отдельный сервер с какой-нибудь in-memory database. Она справится.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Топ игроков
    #37616930
ewb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ыewb,
решение зависит от того, насколько оперативно должен обновляться рейтинг. Можно, напр., рассчитывать его каждые N часов (как в ЖЖ).
Разумеется я тоже думал о кэшировании.
Составление таблицы id_user | position | score и обновлении раз в несколько часов, но даже так, составление такой таблицы из 5 млн юзеров которые раскиданы на 50 таблиц уйдет уйма ресурсов и времени, что недопустимо.

Dimitry SibiryakovЗаведите под рейтинг отдельный сервер с какой-нибудь in-memory database. Она справится.

Да, пока это самое предпочтительное решение.
...
Рейтинг: 0 / 0
Топ игроков
    #37617011
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ewb Составление таблицы id_user | position | score и обновлении раз в несколько часов, но даже так, составление такой таблицы из 5 млн юзеров которые раскиданы на 50 таблиц уйдет уйма ресурсов и времени, что недопустимо.
И у всех этих миллионов юзеров за несколько часов все поменялось? Или таки подавляющее большинство пользователей можно не обновлять по причине неактивности?
ewb В таком виде обычный запрос SELECT ... ORDER BY ... LIMIT уже не кажется хорошей идей, даже если поле score сделать индексом.Именно так, только над производной таблицей - быстро дешево и сердито. Добавьте туда еще дату последнего пересчета рейтинга. Весь вопрос только в том как эту таблицу поддерживать.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Топ игроков
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]