Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony/Doctrine], Powolne działanie!!!
rsobczuk
post
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Witam ponownie,
no im więcej się programuje, tym więcej wychodzi kwiatków...
Ostatnio próbowałem w Symfony wczytać do bazy danych uploadowany plik CSV. Oczywiście upload się powiódł, ale problem polega na tym, że wczytała się tylko około połowa z 8000 wierszy pliku CSV.
Co może być powodem tego?
Używam PHP Doctrine. Symfony w najnowszej wersji 16 - Doctrine chyba też mam najnowsze.
Po uploadzie pliku, stronka rzeźbi, rzeźbi... rekordów w bazie przybywa, po czym po jakimś czasie wyskakuje biała strona i tyle - bez żadnych błedów - nawet w trybie dev - wszystko po mniej więcej 1 min 5sek do 1min 30 sek (mierzyłem kilka razy).

Czy symfony ma jakiś timeout? O co wogóle chodzi? Zrobiłem to tak, że wczytuję plik csv i każdą linię explode'uje z `,` jako separator i buduje zapytanie (poprzez funkcje modelu - prosty insert) i w pętli uruchamiam.

Niestety na obecną chwilę musiałem to zmodyfikować, żeby ruszyć z projektem i napisałem zwyczajnie w PHP skrypt odpalany z konsoli z parametrami i w Symfony odpalam go poleceniem exec.

Czy Symfony+Doctrine jest na tyle `kijowe`, że nie radzi sobie z długo wczytującymi się stronami?

Dodam jeszcze, że skrypt PHP - odpalany nawet przez stronkę robi takie coś w mig.... 5 sek, 10 sek... a w Symfony po półtorej minuty wczytała się połowa rekordów i wygenerowała się pusta strona...

Dzięki
Rafał
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(rsobczuk @ 9.07.2008, 16:08:33 ) *
Czy Symfony+Doctrine jest na tyle `kijowe`, że nie radzi sobie z długo wczytującymi się stronami?
Symfony to tylko narzędzie. Jak się walniesz młotekiem w palec to młotek będzie kijowy?
Skąd mamy wiedzieć co napisałeś i jak to napisałeś?

Jedyne co Ci mogę powiedzieć to to, że Doctrine nie jest dobrym wyborem.
Go to the top of the page
+Quote Post
rsobczuk
post
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Napisałem mniej więcej - co napisałem i jak skrypt wygląda... nie ma nic skomplikowanego w tym co zrobiłem - w funkcji dodającej rekord itp - tym bardziej, że cała stronka działa dobrze, jeżeli chodzi o szybkość, oprócz tego, że do dodania jest kilkanaście tysięcy rekordów.
Uważasz, że Propel jest lepszy?
RS
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Aaaa, wczytujesz te rekordy tworząc obiekt z każdego wiersza pliku i sapisując go?
To błąd. Doctrine tego nie pociągnie. Propel ma szansę.

A co do pytania: oczywiście że Propel jest lepszy. Dlaczego?
Bo ma większe mozliwości. Doctrine ma w planach to co Propel ma od dawna.
Go to the top of the page
+Quote Post
kwiateusz
post
Post #5


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




a moze zwyczajnie konczy Ci sie czas wykonywania skryptu? albo memory limit, zoptymalizuj zeby szybciej rzeźbiło...
Go to the top of the page
+Quote Post
rsobczuk
post
Post #6





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


OK. Jakaś tam wskazówka jest. Faktycznie tworzę nowy obiekt typu NowyWiersz, ustawiam jego właściwości i zapisuję... i tak kilkanaście tysięcy razy. Czy mam użyć jakiegoś destruktora po zapisaniu obiektu w bazie? Poproszę o jakąś dodatkową wskazówkę?

Funkcja wygląda mniej więcej tak:

  1. <?php
  2. $pNewRow = new NowyWiers();
  3. $pNewRow->par1 = 'aaa';
  4. $pNewRow->par2 = 'bbb';
  5. $pNewRow->par3 = 'ccc';
  6. $pNewRow->save();
  7. ?>


Przypomniałem sobie, że nie jest to funckja modelu, tylko zawarłem to we fragmencie `action`, ale to nie ważne.

Tak naprawdę nie ja zdecydowałem się użyć Doctrine. W pracy takiego czegoś używają, bo Propel nie obsługuje enum... (podobno) - prawda to?
Nie ważne... Zależy mi na tym, żeby rozwiązać problem tego zapisywania.

set_time_limit ustawiłem dość duży - 3 minuty... Co do pamięci to nie zmieniałem tego parametru. Zrobię to jak tylko będę mógł i dam znać na forum. Mimo wszystko Symfony pracuje baaaaardzo powoli przy czymś takim.

Dzięki
RS

Ten post edytował rsobczuk 9.07.2008, 16:04:56
Go to the top of the page
+Quote Post
mike
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


~kwiateusz to niewiele da, ponieważ Doctrine jest strasznie zasobożerny i dodatkowo ma problemy ze zwalnianiem zasobów po nieuzywanych już obiektach.
Go to the top of the page
+Quote Post
LBO
post
Post #8





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


może jakiś unset" title="Zobacz w manualu PHP" target="_manual?

uuuuuuu, to grubsza sprawa.

Ten post edytował LBO 9.07.2008, 17:53:06
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 Aktualny czas: 19.08.2025 - 16:00