![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 30.04.2006 Ostrzeżenie: (10%) ![]() ![]() |
Przypuscmy, ze mam skrypt, ktory wykonuje dana operacje w bazie danych, a po tym zapisuje sobie gdzies, ze juz to zrobil i za drugim wykonaniem juz nie bedzie wykonywal tej operacji.
Gdyby wywolac ten skrypt dwukrotnie dokladnie w tym samym czasie ( a jest to mozliwe, jesli sie ma na stronie kilkaset tysiecy uzytkownikow ) to wedlug mojej teorii ta operacja zostanie wykonana dwukrotnie. Zgadzacie sie z tym? ![]() Ten post edytował Amarel 30.03.2009, 19:32:04 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
HMmm, odpal skrypt z crona - bedzie odpalony tylko raz.
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 30.04.2006 Ostrzeżenie: (10%) ![]() ![]() |
Ten skrypt jest uruchamiany tylko i wylacznie przez uzytkownikow strony, ktorzy go wywoluja.
Crona nie ma mozliwosci uruchamiania skryptu co sekunde, a Ajax ma ![]() Ten post edytował Amarel 30.03.2009, 19:55:13 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Przypuscmy, ze mam skrypt, ktory wykonuje dana operacje w bazie danych, a po tym zapisuje sobie gdzies, ze juz to zrobil i za drugim wykonaniem juz nie bedzie wykonywal tej operacji. Rozumiem, że robisz coś takiego? 1) BEGIN 2) SELECT * FROM wykonane_operacje WHERE operacja = ? 3) wykonanie operacji, jakieś zapisy do różnych tabel itp 4) INSERT (operacja, ..., ...) VALUES (1, ?, ?) INTO wykonane_operacje 5) COMMIT Rozwiązania: 1) W tabeli, w której zapisujesz tę informacje (wykonane_opeacje) załóż unique na kolumnę (lub kolumny) które identyfikują (w tym przypadku kolumna operacja) to, że dana operacja została już zrobiona. W ten sposób baza danych nie dopuści do zapisania drugi raz tej samej operacji (przy próbie inserta). 2) Zakładanie locka na tabelę wykonane_operacje - między punktem 1 i 2. W ten sposób SELECT z innego skryptu będzie mógł być dopiero wykonany w momencie zwolniania locka (czyli punkt 5). Może spowodować niestety spowolnienie działania całego systemu z powodu oczekiwania na zwalnianie locków! P.S Nie znam Mysql, ale myślę że takie rzeczy tam są. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 30.04.2006 Ostrzeżenie: (10%) ![]() ![]() |
Dziekuje bardzo za pomysly
![]() Jesli ktos ma jeszcze jakies pomysly to chetnie je przeczytam. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 31.07.2025 - 10:49 |