Я кодирую игровой сервер (конкретный игровой сервер SAMP), и я хочу изменить способ сохранения данных игроков.Слишком много запросов? Игровой сервер
На данный момент данные загружаются из MySQL в переменные на сервере. Например, деньги игрока загружаются в переменную для каждого игрока под названием «Деньги» (выглядит немного так: DATA [playerid] [Деньги]).
Если игрок убивает другого игрока, их переменная DATA [playerid] [Kills] получает приращение. Затем, каждые несколько минут, и когда игрок отключается от сервера (т. Е. Закрывает игру, происходит сбой игры и т. Д.), Запускается запрос на обновление MySQL и просто хранит все из своих переменных в свою строку в таблице «игроков» в базе данных.
Однако, если сервер терпит крах, данные могут быть потеряны, даже если это займет всего несколько минут (игроки могут заработать приличную сумму денег в течение нескольких минут), поэтому я думаю об изменении его, чтобы вместо того, чтобы увеличивать переменную, она просто увеличивает конкретное поле в базе данных. Например, если игрок зарабатывает 100 долларов, запрос на обновление просто добавляет 100 к денежному полю в своей строке в db.
Очевидно, это означает, что если много игроков сражаются, количество убийств, смертей, денег и очков будет заработано, что означает, что на сервер MySQL отправляется множество запросов. Это вызовет проблемы, такие как замедление или сбой? Стоит ли гарантировать, что данные не будут потеряны? Я слышал от кого-то, что Twitter использовал для отправки тысяч запросов на один сервер MySQL.
Я также регистрирую сообщения чата, поэтому каждый раз, когда игрок отправляет сообщение чата, отправляется запрос. Это вызовет проблемы, если, скажем, 2-3 сообщения в секунду?
Если он падает, получите больший сервер БД! Лучше всего, вероятно, поместить данные в кеш памяти, такой как Redis, а затем периодически писать из Redis в MySQL. –
В основном каждое онлайн-игра теряет данные при сбое сервера. Вы не должны быть единственным исключением (предполагая, что это не настоящие деньги). Или ваш сервер часто сбой, что это должно быть проблемой? Это зависит от характеристик вашего сервера, если это вызовет проблемы. И тогда есть способы справиться с этим. Но почему бы вам просто не протестировать свой сервер (и потенциальные способы решения), изменив интервал «каждые несколько минут» на несколько шагов вниз «каждую секунду» (вы можете захотеть добавить маркер изменений, я думаю). Вы даже можете настроить его на текущий счет игрока (больше нагрузки, более высокий интервал). – Solarflare