bmmshayan Posted November 22, 2008 Report Share Posted November 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... Наверное сложно объяснил, но по другому и не знаю как объяснить. Факт в том что с этой проблемой я уже более года борюсь... проблема то ли в настройках сервера, то ли в скриптах... Исправляю это всякими транзакциями и.т.д. методами... Но ведь неужели нету какого-то способа по проще? Или никто с этим не сталкивался ранее? Всем заранее спасибо за помощь в разрешении вопроса! Quote Link to comment Share on other sites More sharing options...
Shurr Posted November 22, 2008 Report Share Posted November 22, 2008 bmmshayan Собственно использование транзакций и есть стандартный подход для решения подобных проблем. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.