Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> A gdyby tak wywolac jeden skrypt dwa razy w tym samym czasie..., Potrzebny ktos znajacy dzialanie PHP i MYSQL :)
Amarel
post 30.03.2009, 19:30:38
Post #1





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

Ostrzeżenie: (10%)
X----


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? smile.gif Jesli tak jest to jak sie przed tym chronic?

Ten post edytował Amarel 30.03.2009, 19:32:04
Go to the top of the page
+Quote Post
dr_bonzo
post 30.03.2009, 19:37:25
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.
Go to the top of the page
+Quote Post
Amarel
post 30.03.2009, 19:54:30
Post #3





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

Ostrzeżenie: (10%)
X----


Ten skrypt jest uruchamiany tylko i wylacznie przez uzytkownikow strony, ktorzy go wywoluja.
Crona nie ma mozliwosci uruchamiania skryptu co sekunde, a Ajax ma smile.gif

Ten post edytował Amarel 30.03.2009, 19:55:13
Go to the top of the page
+Quote Post
michalg
post 30.03.2009, 19:55:11
Post #4





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

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


Cytat(Amarel @ 30.03.2009, 20:30:38 ) *
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ą.
Go to the top of the page
+Quote Post
Amarel
post 30.03.2009, 19:59:01
Post #5





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

Ostrzeżenie: (10%)
X----


Dziekuje bardzo za pomysly smile.gif Z pewnoscia sie przydadza.
Jesli ktos ma jeszcze jakies pomysly to chetnie je przeczytam.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 31.07.2025 - 10:49