Самый эффективный способ подсчета рейтинга в играх в реальном времени

Я хочу знать самый быстрый и эффективный способ подсчета очков и рейтинга в режиме реального времени.

Я делаю ставку на футбол (игра, в которой пользователи пытаются предсказать исход игры до нее). В моей стране это называется «Quiniela».

Игроки ставят «прогнозы» как раз перед началом матча. Мой вопрос: с момента запуска игры, это самый эффективный способ (не только уровня кода, но и базы данных и сервера), чтобы рассчитать рейтинг игроков в «реальном времени» в качестве их прогнозов относительно фактического результата игры. ,

Например:

Если Team1 против Team2 играет,
пользователь U1 предсказал, что игра закончится 0-0,
U2 предсказал, что игра закончится 1: 0,
U3 предсказал, что игра закончится 1-1.

При начале игры U1 будет первым в рейтинге, потому что, если матч заканчивается так, его прогноз будет верным или, по крайней мере, наиболее точным.

Затем счет переключается на 1-0, и пользователь U1 будет последним в рейтинге (поскольку его прогноз больше не возможен), U2 будет первым, а U3 вторым.

Если оценка изменится на 1-1, U2 будет первым, U3 будет вторым (потому что он угадал часть результата), а U3 последним.

Я думал о создании дерева возможностей с одним уровнем (первый узел 0-0, с дочерними узлами 1-0 и 0-1), так как вы изменяете счет, меняете ранжирование «временно», и я бы держал его в кэше.

Как только игра закончится, я сохраню последнюю версию рейтинга в базе данных.

Есть более оптимальный способ решить эту проблему?
Это было предложено ранее и уже решено?
Я использую MySQL для базы данных, PHP (Cake Php) для сервера и несколько мобильных телефонов, которые время от времени запрашивают рейтинг.

Извините за мой хромой английский = (

0

Решение

Я бы использовал следующий подход:

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

Всякий раз, когда меняется игровой счет, пересчитайте все результаты. Когда игры закончены, вы можете просто скопировать временное ранжирование обратно в таблицу ранжирования.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]