bmmshayan Опубликовано 22 ноября, 2008 Жалоба Поделиться Опубликовано 22 ноября, 2008 Привет всем! У меня достаточно серьезная проблема с "закликиванием" на сайте. Т.е. скрипты написаны правильно но при быстрой отправке большого количества POST или GET за короткий промежуток времени часто случается так, что скрипт может к примеру вместо одного раза - несколько раз сделать в БД INSERT или любую другую операцию. Наглядный пример - к примеру скрипт: <?..... инициализация БД .....$result=mysql_query("SELECT int_field FROM Table1 WHERE user_id='1'");$param=mysql_fetch_array($result);if ($param["int_field"]==1){ mysql_query("UPDATE Table1 SET int_field=int_field+1 WHERE user_id='1'");}?> это только пример чтобы Вы поняли о чем идет суть (ясное дело что в данном случае можно это все сделать одним запросом). Ну вот если скрипт запустить не 1 раз, а несколько раз за секунду, бывает такое что к примеру этот UPDATE происходит не 1 а много раз. Причина тому: А потому что при доступе к БД на её изменение технически происходит пауза (UPDATE ставится в очередь на исполнение) и если сервер достаточно нагружен - обе копии скрипта могут дойти до UPDATE и ждать очереди, а как только она к ним придет - 2 раза сработать... т.е. проигнорировать условие в if... Наверное сложно объяснил, но по другому и не знаю как объяснить. Факт в том что с этой проблемой я уже более года борюсь... проблема то ли в настройках сервера, то ли в скриптах... Исправляю это всякими транзакциями и.т.д. методами... Но ведь неужели нету какого-то способа по проще? Или никто с этим не сталкивался ранее? Всем заранее спасибо за помощь в разрешении вопроса! Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 22 ноября, 2008 Жалоба Поделиться Опубликовано 22 ноября, 2008 bmmshayan Собственно использование транзакций и есть стандартный подход для решения подобных проблем. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти