Хочу чтобы никакие данные игрока не потерпели крушение (слетели).
Если например я сделаю так (после каждых переменных):
[pLevel] = 3;
Тут сохраняю запрос в базу данных, каждую переменную так. Это будет плохо для онлайна в 300 человек?
Вид для печати
Хочу чтобы никакие данные игрока не потерпели крушение (слетели).
Если например я сделаю так (после каждых переменных):
[pLevel] = 3;
Тут сохраняю запрос в базу данных, каждую переменную так. Это будет плохо для онлайна в 300 человек?
Он хочет сохранять данные сразу после их изменения, а не по таймеру во избежание краша сервера и слёта данных
Проблем никаких нет, есть вопрос, который меня интересует. Вроде все ясно пояснил.
Есть функция (например, их много): PINFO[playerid][pLVL] = 3;
При её использовании, я буду использовать Savenew(playerid); (например).
И так каждый раз я буду использовать запрос в базу данных, при каждом разе. Будут проблемы при онлайне в 300 человек? Очень интересует этот вопрос. Или лучше сохранять все самое необходимое сразу же, а только при выходе игрока сохранять остальное?
Понял, ну ты сам описал оптимальный вариант сохранения. Если у тебя не гавнокод - то ты даже не заметишь что у тебя в бд оптправляются запросы несколько раз в секунду. Как то проводили тесты и в БД добавлялось 100к запросов в секунду и ничего не подвисало, так что твои 300 запросов в секунду сервер даже не почувствует.Цитата:
сохранять все самое необходимое сразу же, а только при выходе игрока сохранять остальное
Я бы советовал делать некий генератор кода для отправки в бд.
Как это? Ну допустим так
записывать все переменные допустим в temp_playerInfoPHP код:
enum infoblock
{
vasya,
petya,
sasha
};
new playerInfo[MAX_PLAYERS][infoblock],
temp_playerInfo[MAX_PLAYERS][infoblock];
далее когда доходит дело до времени сохранения делать сверку с обычным блоком playerInfo
если есть разница между переменными,
- то делать запись из temp_playerInfo в playerInfo
- то добавлять в форматируемую строку данную переменную и т.д.
и так получится что постоянно много лишней инфы не попадёт под сейв тем самым и запрос быстрее выполняется и меньше нагрузки.
И вместо того, чтоб просто отправить запрос в БД, которая гораздо более предрасположена к большим нагрузкам, ты предлагаешь загружать сервер кучей лишних проверок и формированию запросов. Хм... :)
Если уж очень боитесь нагрузки, достаточно просто ограничивать действия, которые способствуют обновлению информации в БД, по времени (например, запрещать игроку передавать деньги чаще, чем раз в 5 секунд). Хотя если даже кто-то решит положить ваш сервер подобным способом (частым отправлением запросов), их быстрее кикнет сервером за превышение лимита пакетов (asklimit), нежели упадёт MySQL сервер.
В общем, идея хоть и интересная (но автор её не ты, признайся :blush2: :D), но не думаю, что все эти танцы с бубном того стоят. Есть достаточно крупных серверов, которые доказали, что от сохранения при изменении данных ничего серверу не станет. А помимо SA-MP есть куча примеров в виде сайтов с большой посещаемостью, которые так же работают через MySQL и не умирают.
Изначально я видел такой код в одном говно рп моде)
Потом в одной теме проскочило сообщение(вроде твоё) с таким предлогом,
автор не я, просто увидел такие махинации и понравились, вот и советую:pardon:
Как Вы там все пишите нагрузки от частых использований мелочных функций не будет?))
Ну а от таких проверок тем более так как это не функция которая вызывается из плагина или с набора функций samp
Либо ты вызываешь функцию, которая отправляет данные в плагин, который уже в своём, отдельном потоке переваривает эту информацию.
Либо ты постоянно делаешь кучу непонятных проверок, после делаешь операции перезаписи значений в массивах и только потом вызываешь функцию, которая отправляет данные в плагин, который уже в своём, отдельном потоке переваривает эту информацию.
Разница видна? :)