![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 1 Dołączył: 23.05.2007 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Pracuje wlaśnie nad projektem z wykorzystaniem frameworka Symfony i pojawił sie pierwszy problem. Problemem jest wydajność Propel-a. Fragment opisu schematu bazy danych:
Jak widać są tu 3 tabele test, asnwer, i tabela test_answer która odpowida za relacje "n do m" W skrypcie PHP mam:
No i w tym momencie pojawił się problem z wydajością PROPELa. Czas tworzenia kolekcji $test_answers rośnie po exponencie;) przy limicie ustawionym na 200 skrypt zostaje zakończony w wyniku przekroczenia limitu czasu(60sekund). No a wszystkich odpowiedzi mam do pobrania 214. W narzędziu WebDebug (część frameworka Symfony) widze, że wykonywane są tylko dwa zapytania do bazy: 1* pobranie testu 2* pobranie danych z tabel test_answer złączonej z answer Czyli nie ma problemu z zapętlaniem zapytań do bazy danych. Zresztą robie wszytsko zgodnie z instrukcją propel.phpdb.org/trac/wiki/Users/Documentation/1.2/ManyToManyRelationships Czy Propel jest aż tak mało wydajny?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Potrzebuję pełnych danych odpowiedzi na pytania testowe do przeliczenia wyników końcowych. Mogę oczywiście obejść Propela, skorzystac bezposrednio z Creola i operować na tablicach zamiast na obiektach. No ale zastanawia mnie ta bardzo niska wydajność. Jakieś pomysły?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował joebezucha 2.07.2007, 15:19:31 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 1 Dołączył: 23.05.2007 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za wysiłek pawel_k
Jeszcze dziś sprawdzę czy z uproszczeniem schematu bazy to będzie hulać jak trzeba... Bez uproszczeń sprawdzałem wydajność w zależności od setLimit(limit) czasy są w [ms] limit; query time; module/action time; full time; 1; 1.99; 459; 1328; 5; 1.72; 356; 1009; 10; 3.30; 529; 1196; 20; 2.20; 1000; 1756; 40; 2.32; 3839; 4487; 80; 2.70; 12414; 13167; 160; 3.90; 46567; 47259; Jak widać do 20 jest OK ale potem lawinowo wzrasta czas procesu ORM... Puki co zrobiłem to troche inaczej tzn robie własne złączenie tabel i pobieram bezposrednio obiekty klasy Answer. w akcji mam:
No i tutaj działa wszystko OK. Wyglada na to ze problem z wydajności występuje gdy Propel pobiera obiekty TestAnswer i jednoczesnie agregowane przez nie obiekty Answer. Moj komp: Athlon XP 1800+ RAM 896 MB WIN XP SP2 Dam znać jak wypadły testy z uproszczonym schematem bazy danych Zrobilem osobny projekt ze schematem uproszczonym do tej postaci co w poscie Pawła K. Niestety problem wydajnosci ciagle występuje. Czasy minimalnie sie zmniejszyły pownieważ mniej danych jest pobieranych no ale wykonanie trwa i tak grubo ponad 40sekund:/ Ktoś ma jakies pomysły w czym może tkwić problem?? Paweł jakiej wersji Propela uzywasz?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Ten post edytował joebezucha 5.07.2007, 08:46:59 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 23:02 |