|
|
|
Топ игроков
|
|||
|---|---|---|---|
|
#18+
Всех приветствую! Не совсем уверен в правильности выбора раздела, ну да надеюсь поправят если что. Есть игровое приложение, где надо организовать вывод топ игроков. Ситуация с виду довольно проста, есть таблица user, где помимо прочей инфы, есть поле score, которое хранит общий счет игрока. Соответственно топ игроков выдается запросом вида SELECT ... ORDER BY ... LIMIT Но, при заходе на страничку топа, игроку помимо скажем топ-10 игроков, должно сразу выдаваться его место в рейтенге. И должна быть в наличии кнопка "к себе", по клику на которую показываются соседние с игроком люди. Вот тут то и проблема....не совсем понимаю, как без лишних затрат решить задачу. И еще один минус, сумарное количество юзеров планируется довольно большое, скажем 5 миллионов. В таком виде обычный запрос SELECT ... ORDER BY ... LIMIT уже не кажется хорошей идей, даже если поле score сделать индексом. Еще усложнее - не хочется хранить все количество юзеров в одной таблице, скажем будет 50 таблиц, по 100 000 юзеров в каждой (скорее всего не на одном сервере), как тогда организовать топ с необходимыми условиями? 1) Вывод топ 10 с пролистыванием далее, тоесть листание топа по 10 игроков. 2) Вывод текущего места в топе конкретного игрока 3) Показать конкретного игрока и его соседей в топе. СУБД - mysql. Спасибо если дочитали :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2012, 15:22 |
|
||
|
Топ игроков
|
|||
|---|---|---|---|
|
#18+
ewb, решение зависит от того, насколько оперативно должен обновляться рейтинг. Можно, напр., рассчитывать его каждые N часов (как в ЖЖ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2012, 15:58 |
|
||
|
Топ игроков
|
|||
|---|---|---|---|
|
#18+
ewbЕще усложнее - не хочется хранить все количество юзеров в одной таблице, скажем будет 50 таблиц "Не хочется жить без боли, надо отрастить себе геморрой." Заведите под рейтинг отдельный сервер с какой-нибудь in-memory database. Она справится. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2012, 16:30 |
|
||
|
Топ игроков
|
|||
|---|---|---|---|
|
#18+
Ыewb, решение зависит от того, насколько оперативно должен обновляться рейтинг. Можно, напр., рассчитывать его каждые N часов (как в ЖЖ). Разумеется я тоже думал о кэшировании. Составление таблицы id_user | position | score и обновлении раз в несколько часов, но даже так, составление такой таблицы из 5 млн юзеров которые раскиданы на 50 таблиц уйдет уйма ресурсов и времени, что недопустимо. Dimitry SibiryakovЗаведите под рейтинг отдельный сервер с какой-нибудь in-memory database. Она справится. Да, пока это самое предпочтительное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2012, 18:51 |
|
||
|
Топ игроков
|
|||
|---|---|---|---|
|
#18+
ewb Составление таблицы id_user | position | score и обновлении раз в несколько часов, но даже так, составление такой таблицы из 5 млн юзеров которые раскиданы на 50 таблиц уйдет уйма ресурсов и времени, что недопустимо. И у всех этих миллионов юзеров за несколько часов все поменялось? Или таки подавляющее большинство пользователей можно не обновлять по причине неактивности? ewb В таком виде обычный запрос SELECT ... ORDER BY ... LIMIT уже не кажется хорошей идей, даже если поле score сделать индексом.Именно так, только над производной таблицей - быстро дешево и сердито. Добавьте туда еще дату последнего пересчета рейтинга. Весь вопрос только в том как эту таблицу поддерживать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2012, 19:39 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=53&tid=1541866]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 307ms |

| 0 / 0 |
