Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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
tehaha
post
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


to nie możesz tego pomniejszenia o 1 wykonać od razu?
Go to the top of the page
+Quote Post
robos85
post
Post #3





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

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


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
Go to the top of the page
+Quote Post
tehaha
post
Post #4





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


no to jeśli się coś nie powiedzie to dodasz z powrotem ten produkt
Go to the top of the page
+Quote Post
robos85
post
Post #5





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

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


A co z LOCK TABLES?
Dobry pomysł?
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 06:37