Optimalizace DataGridu
- Kenn
- Člen | 110
Začal jsem používat DG na docela velké databázi (80k záznamů) a můžu říct, že je nehorázně pomalý. Dotaz se joinuje na tři tabulky a hlavně filtrování je hrozně pomalé. Na localhostu jsem třicetisekundové načítání nějak neřešil, ale na ostrém serveru je i několik sekund moc (a to bych řekl, že má hosting rychlé servery).
Teď jde o to, jestli si udělat vlastní filtrovací formulář bez použití DG, což by mohlo načítání zrychlit, nebo jestli někdo máte nějaké tipy, jak DG zoptimalizovat tak, aby fungoval minimálně 10× rychleji :)
- Etch
- Člen | 403
Doufám, že to nebude OT a zmiňování už třeba vyřešené věci, ale pokud vím tak DG používá pro dotazy DataSource. A DataSource býval dosti problém ve spojení s MySQL, protože ta měla nějaký bug, že se nepoužíval index na subselecty, ale jak říkám třeba sem úplně mimo a tento problém už se vyřešil.
Editoval Etch (27. 2. 2010 15:09)
- Patrik Votoček
- Člen | 2221
cca pře 2ma měsíci jsem se o to pokoušel a budu to zkoušet znova. Ale mohl by jsi zkusit vyprofilovat DataGrid kde presneji je to slabe misto?
- Honza Kuchař
- Člen | 1662
Na 99% je to DataSource. S MySQL se to dá vyřešit tak, že vytvoříte
pohled (toho co bylo původně v subselectu). Potom DataSource
vytváříte: $ds = Dibi::dataSource("nazevView");
- Honza Kuchař
- Člen | 1662
Přejdi na PgSQL a budeš happy (už jen kvůlu PgAdmin III). Zatím si opravdu nemůžu stěžovat.
- Ondřej Mirtes
- Člen | 1536
honza: Je nějaký tutoriál, co vše řeší Pg jinak (co se týče syntaxe a rozdílnosti chování) oproti MySQL? Pochybuju, že jen bude stačit přehodit driver dibi v configu :)
- pekelnik
- Člen | 462
Ondřej Mirtes napsal(a):
honza: Je nějaký tutoriál, co vše řeší Pg jinak (co se týče syntaxe a rozdílnosti chování) oproti MySQL? Pochybuju, že jen bude stačit přehodit driver dibi v configu :)
asi nejmarkatnější rozdíl, který je třeba zažít je absence AUTO_INCREMENTu
postgres však obsahuje daleko mocnější nástroj a tím jsou SEQUENCE
my: CREATE TABLE foo ( id integer not null primary key auto_increment );
pg: CREATE TABLE foo ( id integer not null primary key default nextval('foo_id_seq') );
resp. použít pseudo-typ serial
pg: CREATE TABLE foo ( id serial not null primary key );
Editoval pekelnik (28. 2. 2010 13:47)
- Honza Kuchař
- Člen | 1662
Nerozepisoval bych tady jak přejít na PgSQL. Je to opravdu dost offtopic. Ale když už jsi to nakousl, tak sem přihodím odkaz na tutoriál, ze kterého jsem se s PgSQL naučil já. http://www.linuxsoft.cz/…cle_list.php?…
- Honza Kuchař
- Člen | 1662
Ondřej Mirtes napsal(a):
honza: Je nějaký tutoriál, co vše řeší Pg jinak (co se týče syntaxe a rozdílnosti chování) oproti MySQL? Pochybuju, že jen bude stačit přehodit driver dibi v configu :)
Pokud si vytvoříš stejně strukturu tabulek (to se dělá skoro stejně),
tak opravdu stačí přehodit driver. (taky mě to překvapilo) Ale dibi má
s PgSQL trochu problémy. Konkrétně s používáním polí (naštěstí jsem
zatím nepotřeboval) a s přetypováváním. (PgSQL totiž nedovolí srovnat
např.: datum a string. Vyhodí chybu. Proto se musí napsat něco ve stylu
WHERE "mojeDatum"::STRING LIKE '%99'
, no a protože pro toho dibi
nemá podporu, tak je to problém, naštěstí řešitelný, nicméně pak už
app není přenositelná na jinou db)
https://forum.dibiphp.com/…iewtopic.php?…
Editoval honzakuchar (28. 2. 2010 14:04)
- Kenn
- Člen | 110
Evidentně dobře položený dotaz.
Vrtak: hmm naprofilovat, to bych s tím musel mít zkušenosti. Jisté je, že 95% času renderování zaberou SQL dotazy.
Přechod na PGSQL mě už napadl kdysi dávno. Odradila mě nefunkčnost na Windows (až taková, že jsem obnovoval ze zálohy) a programovat na linuxu jaksi nezvládám. Neodhodlal jsem se přeučit klávesové zkratky na speciální znaky i když to asi jednou budu muset podstoupit.
Vidím to tak, že si holt jedno odpoledne sednu a naprogramuju si tu filtraci sám, což by nemělo zabrat tolik času a jako bonus budu mít výstup plně pod kontrolou a bude vypadat přesně, jak potřebuju.
- Patrik Votoček
- Člen | 2221
v prubehu tydne se k tomu snad dostanu. Dostal jsem od PetrP upravený DataSource který sice neumí tolik co původní v dibi ale měl by být několika násobě rychlejší. Pak dám vědět jak to dopadlo případně domluvím s petrem ať vám ho taky poskytne… :-)
- Honza Kuchař
- Člen | 1662
PgSQL mívalo problémy na Windows. Ale já mám PgSQL spuštěné pod Win jak na serveru, tak u sebe na PC a bez problému.