Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Топ игроков / 5 сообщений из 5, страница 1 из 1
16.01.2012, 15:22
    #37616388
ewb
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
16.01.2012, 15:58
    #37616501
Ы
Ы
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топ игроков
ewb,

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

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

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

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

Да, пока это самое предпочтительное решение.
...
Рейтинг: 0 / 0
16.01.2012, 19:39
    #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]