Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Obciążony serwer a kolejkowanie zapytań?
robos85
post
Post #1





Grupa: Zarejestrowani
Postów: 466
Pomógł: 11
Dołączył: 21.09.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


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.

Ten post edytował robos85 29.06.2010, 16:48:21
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 20:30