![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Czy normalne jest że ilość zwracanych danych przez obiekt sfOutputEscaperArrayDecorator (po wywołaniu polecenia doSelectJoinAll*()) jest nad wyraz duża? W sumie wygląda na to że pobierając np. jeden artykuł z tabeli z artykułami (czyli jeden wiersz) z bazy przy pomocy np. doSelectJoinAutor() by np. prócz ID autora dostać też jego Nazwisko (z osobnej tabeli 'Autor') -> Propel zwraca: 1) obiekt 'Artykuł' (ok) 1a) obiekt 'Autor' powiązany z poprzednim obiektem 'Artykuł' (ok) 1b) wszystkie obiekty 'Artykuł' powiązane z pobranym punkt wcześniej obiektem 'Autor' ((IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !) Czy idzie jakoś wyeliminować bezużyteczny pkt. 1b)(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (oczywiście bezużyteczny gdy pobrane dane chcę tylko wyświetlić) Bo jeżeli chcę pobrać jeden artykuł i jego autora, to propel zwróci mi tenże artykuł oraz dane autora, a poza tym 1000 obiektów typu 'Artykuł', które należą do tegoż autora.... Poprawnie to rozumiem? Jak tego uniknąć?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ================================================================ Przykład: Kod PHP:
Wygenerowane zapytanie przez w/w funkcję doSelectJoinCategory():
Zwrócone przez bazę wyniki:
( wiem że ostatnie pole może mało czytelne, ale WSZYSTKO do tej pory jest naprawdę super, tak jak powinno być! ) Tyle że........ podczas var_dump( $articles ) dostaję taki oto obiekt:
I to tylko dla jednego rekordu... Jakbym chciał pobrać ich 100, to aż strach pomyśleć jak obciążyłoby to pamięć :/. Obłęd. Ten post edytował Ravv 5.02.2009, 21:32:37 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nie no, jeszcze widoki tworzyć? Tylko po to by móc korzystać z Propela i jednocześnie używać mało zasobów?
Szczerze powiedziawszy - co daje korzystanie z Propela?? Bo jak na razie doczytałem się jednego -> abstrakcyjności jeżeli chodzi o bazy, w tym głownie przytaczany przykład w stylu "jak będziesz chciał zmienić nazwę tabeli/kolumny"... Ale tak szczerze powiedziawszy -> kto zmienia nazwy tabel / kolumn po zakończeniu tworzenia projektu?!?! może 0,00000000000001% programistów... Po drugie: kto zmienia nawet bazę na inną (np. z MySQL na Postgre)(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) No, tu może być więcej osób, może z 0,1%..... Nie widzę jak na razie sensu korzystania z metod Propela. Co prawda pisanie 'zapytań' jest prostsze, ale z doświadczenia wiadomo że te samo zapytanie generujące identyczne wyniki za pomocą Propela a czystego SQLa trwa KILKA RAZY dłużej... Szczęście w nieszczęściu że Propel rusza taką samą liczbę wierszy. Przykład: Wynik: 3 wiersze z artykułami połączone z nazwami regionów oraz nazwami kategorii do których należą. Wygenerowane zapytanie przez PROPEL:
Zapytanie moje:
Wynik identyczny. W pierwszym przypadku Propel rusza o dziwo 2 tabele, w drugim ruszam aż 5, ale ilość ruszonych wierszy w obydwu przypadkach jest taka sama (odpowiednio: 2*3 i 2*1*1*3*1). Ale najciekawsza jest różnica w czasie - zapytanie Propela trwa 0,0027s, moje 0,0006s. [poprawka: czas jest także taki sam ;> - nie dałem w swoim zapytaniu sortowania... teraz już poprawione] Nie wspomnę już o 2MB różnicy w wykorzystaniu zasobów pamięci serwera... 2MB! - dla 3 zwróconych rekordów! Wiem że Ameryki nie odkryłem, ale jednak - różnice są ogromne. Dlaczego ludzie korzystają z Propela to wciąż nie wiem. Akurat plus w przenośności systemu moim zdaniem nie rekompensuje różnic w wydajności (użytkownicy odwiedzają stronę codziennie, a system przenosi się raz na parę lat i to może max z 2x)... PS. Nie wiem jak z Propelem, ale od kumpla programisty słyszałem że Doctrine potrafi wypluć takie wyniki z bazy, że var_dump() na obiekcie z wynikami powoduje zawieszenie się przeglądarki... ehhh. Po Propelu też się tego bym spodziewał patrząc na przykład z pierwszego posta. Interesuje mnie na razie jedno: Istnieje możliwość zmuszenia Propela do wyplucia obiektu wynikowego zawierającego TYLKO obiekty stworzone ze zwróconych przez bazę wierszy? (z pominięciem całych odzwierciedlonych tam struktur nikomu nie potrzebnych w normalnym wyświetlaniu wyników) (IMG:http://forum.php.pl/style_emoticons/default/dry.gif) Ten post edytował Ravv 5.02.2009, 15:28:59 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 08:33 |