Wykonanie metody

Mam taki problem a raczej zagadnienie czysto teoretyczne. Powiedzmy że mamy aukcje z jednym przedmiotem oraz opcją kup teraz. Co się stanie jak dwóch userów kliknie w tym samym momencie w guzik kup teraz. Czy jest możliwość wykrycia że na danym rekordzie wykonuje się już jakaś akcja i jak tego uniknąć.

Dobrym przykładem może być jeszcze giełda towarów ktoś wystawia zlecenie sprzedaży np złota w ilości 1 g po cenie 100 zł i jak się pojawią w tym samym czasie 2 oferty kupna złota po 100 zł to może się okazać że ktoś sprzedał 1 g i ma 200 zł a dwóch userów ma po 1 gramie złota.

Mam nadzieje że nie zagmatwałem i rozumiecie o co mi chodzi.

Nie ma czegos takiego ze 2 rzeczy dzieją się akurat w tej samej chwili, jedna zawsze jest troche wcześniej ;] Poczytaj o semaforach, tak by troche wiedzy zbudować, przykłady z przejazdem kolejowym, szkolny przykład zagłodzenia filozofów itp. A w SQL o Tranzakcjach.

Blok otoczony tranzakcja wykonuje sie atomowo, nic innego go nie zakłóci.

Dzięki, za odpowiedz myślałem że może powstać taki problem że gdzieś nagle postaną z 1 grama złota dwa i z tak samo z jednego 100 zł dwieście ;D Ale się myliłem i w tym przypadku cudu nie będzie ;(

Może jak to źle oprogramujesz, znaczy trzeba myśleć o takich rzeczach, wiedzieć co jest atomowe a co nie i się zabezpieczać poprzez dobry kod i obsługe wyjątków

Aby poprawnie obslugiwac takie zdarzenia nalezy przeczytac o:

  • transakcjach - w twoim przypadku - jezeli ktos kliknie w link “kup teraz” to zapis do bazy powinien byc atomowy, czyli w momencie zmiany rekordu w bazie, inny uzytkownik nie moze tego rekordu zmienic (mysql => patrz tutaj: http://dev.mysql.com/doc/refman/5.0/en/commit.html)

  • i druga wazna sprawa - optimistic locking - od razu jak drugi uzytkownik kliknie w “kup teraz” ma dostac informacje, ze rekord w miedzy czasie zostal zmieniony przez innego uzytkownika i nalezy odswiezyc aktualny stan rekordu na stronie (patrz tutaj: http://www.engineyard.com/blog/2011/a-guide-to-optimistic-locking/)

Rayan ma nowy screencast o optimistic locking jak by co

Dzięki za odpowiedz poczytałem o transakcjach i wydają się być bardzo dobrym rozwiązaniem co do optimistic locking nie jestem do końca przekonany w przypadku realizacji zleceń zakupu przykładowego złota bo jeżeli mamy ofertę na sprzedaż 10 g po 10 zł i ofertę kupna na 5 to pierwsza oferta zrealizuje się w 50% a druga w 100 % i ta pierwsza będzie zablokowana może realizację ofert przenieść do kolejki i robić w background job ( chyba dobrze to nazwałem )

Co myślicie o tym ?