Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony/Doctrine]
Forum PHP.pl > Forum > PHP > Frameworki
rsobczuk
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ł
mike
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.
rsobczuk
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
mike
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.
kwiateusz
a moze zwyczajnie konczy Ci sie czas wykonywania skryptu? albo memory limit, zoptymalizuj zeby szybciej rzeźbiło...
rsobczuk
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
mike
~kwiateusz to niewiele da, ponieważ Doctrine jest strasznie zasobożerny i dodatkowo ma problemy ze zwalnianiem zasobów po nieuzywanych już obiektach.
LBO
może jakiś unset" title="Zobacz w manualu PHP" target="_manual?

uuuuuuu, to grubsza sprawa.
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.