Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Obciążony serwer a kolejkowanie zapytań?
Forum PHP.pl > Forum > Przedszkole
robos85
Na początku dodam, iż sprawa dotyczy sytuacji, gdy serwer jest bardzo obciążony i "muli".

Mam w bazie np. 1 przedmiot którego jest 10 sztuk. Użytkownik wchodzi na stronę, klika w button, wpisuje poprawnie captcha i jeżeli ilość sztuk jest większa od 0 to pobiera. Po tym, ilość jest pomniejszana o 1.
I tu mam problem. Gdy serwer baaardzo muli, a sztuk zostało np 1 dochodzi do takiej sytuacji:
W mniej więcej tym samym momencie captchę poprawnie wpisuje hmm, 20 userów. Wszyscy na raz wykonują zapytanie sprawdzające ilość sztuk. Po tym, jeżeli ilość > 0 wykonywane są operacje w php (mail, update 1 dodatkowej tabeli w bazie, zmiana w pliku) a na samym końcu po ich poprawnym wykonaniu ilość pomniejszana o 1. Lecz w mulącym serwerze zdarza się, że tych 20 userów dostanie wynik ilość > 0 gdyż np wykonanie żądania zajmuje 5sek. Trafiają akurat w "dziurę" pomiędzy wykonaniem SELECTa a końcowego UPDATEa i nagle z ilość pożądanej 0 robi mi się -19.

Jak temu zapobiec, aby np kolejkować zapytania w przypadku, gdy wykonywane jest żądanie? Transakcja chyba nie da nic bo i tak czy siak w tej dziurze może nastąpić sporo żądań. Czy jedynym rozwiązaniem jest przed SELECTem wykonanie LOCK TABLES ... WRITE, wykonanie zapytań + tych opisanych operacji i po zakończeniu ostatniej UNLOCK TABLES?


Z góry dzięki za odpowiedź i mam nadzieję, że problem opisałem wystarczająco.
tehaha
to nie możesz tego pomniejszenia o 1 wykonać od razu?
robos85
Nie, gdyż po samym pobraniu info o ilości s wykonywane jeszcze inne sprawdzenia + musi się jeszcze kilka rzeczy na 100% wykonać zanim będę mógł odjąć 1
tehaha
no to jeśli się coś nie powiedzie to dodasz z powrotem ten produkt
robos85
A co z LOCK TABLES?
Dobry pomysł?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.