Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zabezpieczenie przed podwójnym pobraniem rekordu
dav
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.08.2013

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


Chcę pobrać jeden losowy wiersz z tabeli. Robię to za pomocą 2 skryptów, odpalanych w tym samym czasie.
Jak zabezpieczyć się przed tym, aby rekord nie został pobrany przez oba te skrypty, ale tylko przez jeden ?
Wiem że mogę sobie odpowiednio oflagować rekord, ale jeśli drugi skrypt odpali się kilka milisekund później to jest możliwość że też zdąży go pobrać zanim ten pierwszy go oflaguje.
Czy transakcje rozwiążą problem, czy należy zastosować blokownie tabel?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sazian
post
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


jedyne sensowne rozwiązanie to blokowanie tabel, przy kilku tysiącach skryptów może zauważysz spowolnienie

czyli robisz tak
lock
SELECT ....
UPDATE flaga=1 where ....
unlock

a jeszcze lepiej jeśli uda się to wepchnąć do funkcji mysql'a


edit:
myisam zakłada blokadę na całą tabelę przy każdym insert/update... a jakoś większość ludzi tego nawet nie zauważa, więc jeśli ręcznie zablokujesz blokadę to i tak większej różnicy nie będzie

Ten post edytował sazian 21.08.2013, 20:20:08
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: 15.10.2025 - 14:47