![]() |
![]() |
![]()
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? |
|
|
![]() |
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 14:47 |