Проблема с MySQL R7 -
Egor123 - 15.12.2012
После перехода с версии R6 на R7, которые, как всем известно, отличаются поточностью, возникла проблема с сохранением данных аккаунтов. Дело в том, что аккаунту, могут записаться чужие данные (в момент выхода игрока с сервера).
Полезная информация:
Возникает это чаще всего при большом онлайне на сервере.
Функция сохранения разбита на 4 запроса к базе.
На R6 такого не было.
Данные аккаунта сохраняются в базу только при отключение игрока с сервера.
Кто встречался с этим? Как решили?
Re: Проблема с MySQL R7 -
DANGER1979 - 15.12.2012
проблема у меня такая же.
Решения ещё не нашёл.
Причина я думаю, в том что данные не успевают сохраниться, как по циклу приходит новая операция сохранения, и поэтому третий игрок сохраняет данные на половину от второго игрока.
При загрузке такой проблемы не обнаружено.
Re: Проблема с MySQL R7 -
eakwarp - 15.12.2012
вероятно запросы кривые у вас.
Re: Проблема с MySQL R7 -
DANGER1979 - 15.12.2012
запросы прямее нету.
если бы они были кривые то не работало во всех случаях.
А речь идёт про редкие случаи сбоя работы.
Re: Проблема с MySQL R7 -
Egor123 - 15.12.2012
Quote:
Originally Posted by DANGER1979
проблема у меня такая же.
Решения ещё не нашёл.
Причина я думаю, в том что данные не успевают сохраниться, как по циклу приходит новая операция сохранения, и поэтому третий игрок сохраняет данные на половину от второго игрока.
При загрузке такой проблемы не обнаружено.
|
Не совсем правильное предположение, или я не так понял, но если, например, пустить на сервере цикл (при большом онлайне) сохранения всех данных в базу, то все пройдет успешно. Проблема возникает только при дисконекте игрока.
Видимо получает данные того, кто подключился на его id и успел авторизоваться, но это абсурд. Запрос не может выполняться более 5 секунд, даже если, он и немного задержится по пути.
Re: Проблема с MySQL R7 -
AirKite - 15.12.2012
eakwarp верно говорит. Дело в ваших кривых запросах. Подразумевается не самостоятельная строка запроса, а её составляющая в целевой системе.
Я так понял в определённом месте у вас есть несколько mysq_query, но т.к. они не привязаны к потокам а формирование строки запроса может происходить позже чем первый запрос, соответственно и позже чем зайдёт уже новый игрок под тем же ID. Выход: Формируйте строку или все строки сразу. В общем проблемы в самом плагине нет 100%
p.s. Использование потоков MySQL на самом деле кроет в себе ОЧЕНЬ много интересных моментов. Ваш случай такая мелочь на фоне остального, что наверное вам лучше следует вернутся к использованию по старинке.
Re: Проблема с MySQL R7 -
Egor123 - 15.12.2012
Quote:
Originally Posted by AirKite
eakwarp верно говорит. Дело в ваших кривых запросах. Подразумевается не самостоятельная строка запроса, а её составляющая в целевой системе.
Я так понял в определённом месте у вас есть несколько mysq_query, но т.к. они не привязаны к потокам а формирование строки запроса может происходить позже чем первый запрос, соответственно и позже чем зайдёт уже новый игрок под тем же ID. Выход: Формируйте строку или все строки сразу. В общем проблемы в самом плагине нет 100%
p.s. Использование потоков MySQL на самом деле кроет в себе ОЧЕНЬ много интересных моментов. Ваш случай такая мелочь на фоне остального, что наверное вам лучше следует вернутся к использованию по старинке.
|
И как можно устранить эту проблему? Вместо 4-ех использовать 1 запрос? Но тогда он получится очень очень большим и не факт, что пройдет...
Re: Проблема с MySQL R7 -
AirKite - 15.12.2012
Quote:
Originally Posted by Egor123
И как можно устранить эту проблему?
|
Я же уже написал выше. Если зачем то требуется выполнить несколько последовательных запросов уже после того как игрок вышел. То используй УЖЕ СФОРМИРОВАННЫЕ СТРОКИ или переменные в которые никаким образом не попадут данные от игрока с таким же идом. Но в любом случае лучше всего делать 1 запрос.
Quote:
Originally Posted by Egor123
Вместо 4-ех использовать 1 запрос? Но тогда он получится очень очень большим и не факт, что пройдет...
|
Что значит не факт что пройдёт? На чём это основано? Используй большой массив что бы точно всё влезло.
Re: Проблема с MySQL R7 -
DANGER1979 - 15.12.2012
У меня запрос один, т.е. для каждого игрока один запрос, но проблема такая имеется.
Re: Проблема с MySQL R7 -
eakwarp - 16.12.2012
Quote:
Originally Posted by DANGER1979
запросы прямее нету.
если бы они были кривые то не работало во всех случаях.
А речь идёт про редкие случаи сбоя работы.
|
Где нибудь хреново данные нулите, сессию не закрываете, и прочие подобные причины.
Re: Проблема с MySQL R7 -
Egor123 - 27.12.2012
Есть ли смысл в таком виде массива для форматирования запроса сохранения?
pawn Код:
new string[MAX_PLAYERS][4000];
stock SaveAccounts(playerid)
{
format(string[playerid], sizeof(string[playerid]), "блаблабла", блаблабла);
}
Сейчас же используется без [MAX_PLAYERS]
Re: Проблема с MySQL R7 -
eakwarp - 27.12.2012
Quote:
Originally Posted by Egor123
Есть ли смысл в таком виде массива для форматирования запроса сохранения?
pawn Код:
new string[MAX_PLAYERS][4000];
stock SaveAccounts(playerid) { format(string[playerid], sizeof(string[playerid]), "блаблабла", блаблабла); }
Сейчас же используется без [MAX_PLAYERS]
|
Только здесь сайзоф не сработает.
Re: Проблема с MySQL R7 -
AirKite - 27.12.2012
Quote:
Originally Posted by Egor123
Есть ли смысл в таком виде массива для форматирования запроса сохранения?
pawn Код:
new string[MAX_PLAYERS][4000];
stock SaveAccounts(playerid) { format(string[playerid], sizeof(string[playerid]), "блаблабла", блаблабла); }
Сейчас же используется без [MAX_PLAYERS]
|
Если уже додумался убрать [MAX_PLAYERS] то зачем в посте пишешь его? Что за блаблабла? Мы должны угадывать что там у тебя или как?
Re: Проблема с MySQL R7 -
Egor123 - 27.12.2012
Quote:
Originally Posted by AirKite
Если уже додумался убрать [MAX_PLAYERS] то зачем в посте пишешь его? Что за блаблабла? Мы должны угадывать что там у тебя или как?
|
Думаю если прочитать все сообщение, а не только код, то можно найти все ответы на свои вопросы. Под "блаблабла" код запроса сохранения данных аккаунта в таблицу.
Я не додумывался убирать MAX_PLAYERS потому что его и не использую.
По этому и интересуюсь, есть ли смысл в том, чтобы его добавить?
Re: Проблема с MySQL R7 -
AirKite - 27.12.2012
Quote:
Originally Posted by Egor123
Думаю если прочитать все сообщение, а не только код, то можно найти все ответы на свои вопросы. Под "блаблабла" код запроса сохранения данных аккаунта в таблицу.
Я не додумывался убирать MAX_PLAYERS потому что его и не использую.
По этому и интересуюсь, есть ли смысл в том, чтобы его добавить?
|
Прочитал я от и до, сразу не понял по тем или иным причинам. Теперь ясно. Есть в этом смысл или нет, зависит от других участков кода. Но в целом конечно я бы в любом случае так не стал делать.
Re: Проблема с MySQL R7 -
Stepashka - 27.12.2012
Quote:
Originally Posted by eakwarp
Только здесь сайзоф не сработает.
|
сработает, только надо правильно обратиться:
pawn Код:
new string[MAX_PLAYERS][4000];
stock SaveAccounts(playerid)
{
format(string[playerid], sizeof(string[]), "%s", "Lorem ipsum dolor sit amet");
}