MySQL Performance для Списков рекордов онлайн-игр

У меня есть вопрос о создании «Списков рекордов».

Допустим, у меня есть онлайн-игра с 1 000 000 активных пользователей. У каждого пользователя есть баллы от 0 до X. Теперь я хочу показать рейтинг-лист. Было бы безумно показывать все миллионы записей на одной странице, чтобы разделить их на Y страниц (100 записей на каждой странице => 10.000 страниц).

Я не совсем уверен, как решить это.

1. Самый простой способ сделать это — загрузить все записи по 1м.

в одном SELECT, получить результат и найти текущего пользователя с циклом for и показать эту конкретную страницу. (но все остальные 999.900 записей будут сохранены в ОЗУ, даже если они не отображаются). Для изменения страницы я мог бы просто использовать данные результата без второго вызова базы данных. (Так что меня не волнуют изменения очков за это время)

SELECT UserName, UserID, Points FROM UserAccount ORDER BY Points;

2. Моя вторая идея заключалась в том, чтобы загрузить каждую страницу индивидуально, но чем я не знаю

2.1, если это действительно лучшая производительность
2.2 Как получить правильную стартовую страницу, потому что у меня есть только очки пользователя, но не его место

Так как я мог решить эту проблему. Я действительно не знаю, с чем может справиться mysql. Более мелкие звонки лучше, чем один огромный звонок.
Могу ли я сохранить огромные данные результатов?
Второе решение будет обновлять все измененные точки с каждым изменением страницы, но я больше беспокоюсь о производительности, чем всегда обновляю данные списка.

Спасибо за помощь!
Markus

0

Решение

Используйте нумерацию страниц. В SQL это предложение «limit»:

SELECT UserName, UserID, Points FROM UserAccount ORDER BY Points LIMIT 0, 20;

Приведенный выше запрос вернет только первые 20 строк исходного выделения.

Вы можете передать параметры страницы через get, например: highscore.php? Page = 1 или? Page = 2 и так далее.

0

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

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

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