![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
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?
|
|
|
![]()
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
|
|
|
![]()
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
|
|
|
![]()
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ł? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 06:37 |