|
|
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть таблица пользователей(200-300 тыс записей) и таблица Игр. Нужно показывать топ10 игроков по количеству выигранных игр. И при этом показать изменение позиции в рейтинге по сравнению с прошедшим часом (Рейтинг обновляется раз в час). Подскажите как лучше сделать? Хранить для каждого пользователя старую позицию в рейтинге, тогда получается каждый час очень большой апдейт. Как лучше хранить все эти места. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 17:09 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
alekseyxxxxполучается каждый час очень большой апдейт. Заведи отдельную таблицу top10 и апдейт будет маленьким. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 17:14 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
А как показать изменение места игрока, которого не было в прошлый раз в топ10? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 17:19 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
alekseyxxxxА как показать изменение места игрока, которого не было в прошлый раз в топ10? С пустым старым местом. В чём проблема-то? Не слышал о LEFT JOIN? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 17:33 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
Поясните, не понимаю может сути. У меня человек не входил в таблицу top10. За час он туда попадает, мне надо показать сколько на сколько позиций он поднялся. Т.е. знать старое место в рейтинге час назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 17:38 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
alekseyxxxxмне надо показать сколько на сколько позиций он поднялся А, т.е. ты хочешь показать, что он поднялся с 1000-го места до 5-го? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 17:44 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
alekseyxxxx, Или поле в основной таблице и хранить прошлое место, или отдельная таблица. Примерно посчитай какой топ изменяется, т.е. максимум мест на которое может подняться игрок за час. Храни соответственно топ100 или топ1000 (не думаю что будет больше). Обновляй этот топ а потом из него выбирай свой топ10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 17:54 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Да хочу показать именно это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 18:06 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
Злой Бобр, Именно так хотел сделать, просто я забыл еще один важный момент. Необходимо пользователю также показывать под топ10 его текущее место. И изменение его позиции с прошедшим часом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 18:07 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
alekseyxxxxДа хочу показать именно это. Тогда тебе не остаётся ничего другого кроме как update всех 300к записей. Выбирай СУБД, которой это не делает проблем. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 18:19 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Думаю использовать редис отдельно для рейтингов. Делать выборку с LEFT JOIN каждый час, айди пользователя, и его количество очков записывать в редис. Такой апдейт происходит за 2-3сек. Обновление раз в час. Правильная ли такая архитектура, или можно придумать что нить еще) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 18:25 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
alekseyxxxxДумаю использовать редис отдельно для рейтингов. Для использования в проекте сразу двух СУБД нужны весьма веские основания. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 18:35 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
alekseyxxxxЗлой Бобр, Именно так хотел сделать, просто я забыл еще один важный момент. Необходимо пользователю также показывать под топ10 его текущее место. И изменение его позиции с прошедшим часом. Ну я ж вроде по русски написал. Храни в отдельной таблице Топ1000 к примеру. id_user, position1, position2 - ну это грубо так, я ж незнаю что там и как у тебя. Если непонятно - говори что именно. А то я не телепат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 20:36 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
Злой БобрХрани в отдельной таблице Топ1000 к примеру. ....а остальным 199 тысячам игроков отвечай "хрен вам, а не рейтинг, вы в полной жопе". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 21:04 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov....а остальным 199 тысячам игроков отвечай "хрен вам, а не рейтинг, вы в полной жопе". Ну да. По уму при выигрыше должно увеличиваться на 1 значение какого-то поля. По нему и отбирать. А хранимкой которая там раз в час будет запускаться делать срез этого поля. Но опять таки - значение поля может каждый день (10 дней, месяц, год) обнуляться. Не думаю что кто-то станет держать значения с начала времен. Поэтому все упирается в детали. Не зная деталей сложно дать однозначный ответ. А может там ведется статистика каждой игры и проигрыши тоже логируются. А может .... В общем - нехочу гадать. Исходя из первого поста указанная реализация оптимальна. Но если нам что-то недосказали - это уже проблемы ТС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2013, 21:40 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
Злой Бобр, Поясняю, пользователь щелкает на кнопку 'рейтинг' - у него открывается таблица из 10-ти человек, которые имеют больше всех побед. У каждого из 10-ти показывается изменение позиции с прошлым разом. Вот. И еще мне надо показать позицию текущего пользователя, он может быть 150 093 в рейтинге. И при этом у него также показать изменение позиции с прошлым разом. Да, рейтинг, обнуляется каждую неделю, но ведь чтобы достать рейтинг текущего пользователя, мне надо знать рейтинг всех. А не топ1000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2013, 01:02 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
alekseyxxxxтогда получается каждый час очень большой апдейт. Большой апдейт - это двести-триста миллионов. Да и то не очень большой. Описанная задача вызывает вопросы с постановочной точки зрения, но допустим, что оно так. Реальная проблема в вашем расчёте будет не в объёме обновлений, а в их согласованности. Судя по игрокам и пользователям, речь идёт о вебе и соответственно MySQL, и потребуется предпринять определённые усилия для того, чтобы у вас в рейтинге не оказалось два первых места или игрок на двух местах сразу (или на одном, но с дыркой на прежнем месте). Если Вас волнуют именно обновления, никто не мешает заменить их insert-ами, храня место игрока отдельно от игрока. Но смысл в этом имхо будет только если СУБД неэффективно выполняет операцию update, поскольку для согласованности всё равно скорее всего придётся блокировать всю таблицу на время расчёта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2013, 12:55 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
softwarerдля согласованности всё равно скорее всего придётся блокировать всю таблицу на время расчёта. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2013, 13:07 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
Рейтинг, alekseyxxxx, это как правило интегральная оценка по нескольким критериям. Таблица результатов - это не рейтинг, это таблица результатов. Какой идиот поставил вам задачу сформулированным вами образом, остается только догадываться. > У каждого из 10-ти показывается изменение позиции с прошлым разом. Прошлым разом чего? Подсчета очков? Определенного количества сыгранных игр? Игровым днем? Турниром? При проектировании основной источник проблем - кривая постановка задачи. > Да, рейтинг, обнуляется каждую неделю Клинический случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2013, 13:26 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
guest_20040621, Ну рейтинг или таблица результатов, мне не важно как назвать) Опишу еще раз подробно. Этот 'рейтинг' идет неделю. Т.е. показывает победивших наибольшее количество раз на неделю. Зачем это сделано, я сам не могу сказать, но задача у меня такая. Т.е. в понедельник в 0:00 этот рейтинг обнуляется и начинается новый. Пользователи в приложении должны видеть свои позиции. Позиции обновляются не в реалтайме, а один раз в час. Т.е. раз в час пересчитывать количество побед и обновлять таблицу, и показывать их изменение позиций по сравнению с прошлым пересчетом. Вообщем каждый пользователь должен видеть топ10 и свою позицию с изменением. Вообщем задача такая:)Надеюсь понятно, что требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2013, 13:48 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
> Ну рейтинг или таблица результатов, мне не важно как назвать Начните с точных формулировок. Увидите, насколько проще станет жить. > показывает победивших наибольшее количество раз на неделю Ну, и будете вы каждый час апдейтить всю таблицу. Спросите у умника, который формулировал задачу, что делать с пользователями с одинаковым количеством побед? Считать результаты личных встреч? Что делать, если личных встреч не было? Реально идиотская задача. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2013, 14:30 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
guest_20040621, В случае одинаковых результатов, выше будет тот, кто первее набрал этот результат. В таблице игра есть поле 'дата', придется по ней еще делать сортировку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2013, 14:34 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
alekseyxxxxХранить для каждого пользователя старую позицию в рейтинге, тогда получается каждый час очень большой апдейт. Как лучше хранить все эти места.Можно не апдэйтить 300 тыщ записей, а раз в час перезаливать отдельную табличку для этого (два поля, ИД+рейтинг). Это будет быстро, пару секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2013, 14:35 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
alekseyxxxx...Пользователи в приложении должны видеть свои позиции. Позиции обновляются не в реалтайме, а один раз в час. Т.е. раз в час пересчитывать количество побед и обновлять таблицу, и показывать их изменение позиций по сравнению с прошлым пересчетом. Вообщем каждый пользователь должен видеть топ10 и свою позицию с изменением. Тогда вариант с отдельной таблицей отпадает. Покажите структуру базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2013, 14:57 |
|
||
|
Спроектировать систему рейтингов
|
|||
|---|---|---|---|
|
#18+
> выше будет тот, кто первее набрал этот результат Как вы намерены определять предыдущее место для игроков, не принимавших участия в играх прошлого интервала (предыдущего обнуления)? Как намерены определять текущее место для игроков, не принимающих участие в играх в текущем интервале? Ноль побед, дата обновления одинакова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2013, 15:02 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38304856&tid=1541202]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 506ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...