Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Połączenie z bazą MySQL z zewnatrz
Forum PHP.pl > Forum > Przedszkole
ARTURRO71
Witam,

Przeszukałem google i niestety nie znalazłem odpowiedzi na następujący problem.

Mam stronę oraz bazę danych MySQL na serwerze X.
Skrypty zamieszczone na serwerze łączące się z bazą MySQL działają bardzo szybko (czyli normalnie).
Jestem na etapie obrabianie dużych plików CSV a serwer ma ograniczenia czasowe na wykonanie skryptu do 30 sekund więc postanowłem odpalić taki skrypt z serwera na domowym komputerze - serwer WAMP/XAMPP itp.

Problem w tym, że gdy łącze się z domowego serwera z bazą MyQSL na serwerze X, połączenie trwa bardzo długo.
Skrypt na tym samym serwerze co baza MySQL wykonuje się poniżej 1 sekundy.
Skrypt odpalony z serwera domowego, który łączy się z bazą na serwerze X, wykonuje się ok 15-20 sekund.

Wiele postów znalazłem z tym problemem - niestety nigdzie nie ma odpowiedzi w tym temacie.


Czy to jest normalne, że łączenie do bazy MySQL z zewnątrz trwa zawsze tak długo questionmark.gif?
Może istnieje jakiś sposób na przyspieszenie tego połączenia questionmark.gif?

Bede wdzieczny za fachowa pomoc - napewno nie tylko mnie sie przyda.

Pozdrawiam.
viking
Nie jest normalne. Może wysyłasz duże porcje danych do tego serwera przy jednocześnie słabym upload łącza?
ARTURRO71
Za pomocą skryptu na serwerze domowym otwieram pli csv z tego samego folderu co skrypt poleceniem fopen potem fgetcsv, plik csv wielkości 9MB (60 tys linii) i dla każdej z linii odszukuje w bazie MySQL produkt o tym samym ID i aktualizuję mu cenę (baza MySQL na serwerze X, na którym stoi sklep internetowy).

Skrypt taki powinien wykonywać się ok 1-2 minut na serwerze gdzie stoi sklep, jednak serwer ten ma ograniczenia set_time_limit(30) i nie można niestety tego zmienić:/ dlatego odpalam skrypt z serwera domowego.
W domu taki skrypt wykonuje się ok 30 minut.

Porcje danych jakie wysyłam z każdym zapytaniem do bazy są bardzo małe ale jest 60.000 zapytań.
Upload mojego internetu w domu to 1Mbit.

Nie mam pojęcia czemu to tak długo trwa:(
ARTURRO71
Nikt nie wie jak temu zaradzić?
abort
Łączenie nie trwa długo - to jest chwila (tyle, ile zajmuje przekazanie pary login/pass).

UŻYWANIE bazy - to może trwać długo, w zależności od tego, ile danych przesyłasz łączem. Porównanie jest proste: jeśli baza jest na tym samym komputerze, co serwer WWW, to mamy właściwie tylko narzut na operacje I/O dysku. Jeśli serwer WWW i serwer SQL są podpięte via sieć (i to jeszcze ze słabą komunikacją), to pojawia się problem wydajności sieci. Masz mniej więcej taką samą sytuację jak kopiowanie pliku z dysku na dysk (to odpowiednik WWW i SQL na jednej maszynie) lub kopiowanie tego przez sieć ze słabym łączem (WWW i SQL via internet 1Mbit - bo równamy do słabszego parametru łącza).

Spróbuj podzielić to na części i odpalać na serwerze, gdzie stoi sklep. Skoro 60k rekordów wykonuje się w dwie minuty (w pesymistycznym wariancie), Ty załóż że może być czasami gorzej (jeszcze trzykrotnie) wyjdzie Ci, żeby podzielić jeden plik na kilka mniejszych plików po ok. 10 tysięcy rekordów.

Druga sprawa: spróbuj robić update bazy z crona - może się okazać (co jest częste), że limity na PHP wywoływane z CLI są inne niż na PHP wywoływane z WWW. Ba, może się zdarzyć, że tych limitów w ogóle nie będzie...
ARTURRO71
Dzięki za skrupulatne wyjaśnienie ABORT.
W weekend przysiąde nad metodami jakie podałeś, mam nadzieję że odpalenie skryptu za pomocą CRON przyniesie pożądany rezultat.

Napisze jak się z tym uporam smile.gif
ARTURRO71
CRON sprostał zadaniu... dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.