Sjednocení dotazů z routeru (NotORM)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
m4rty
Člen | 40
+
0
-

Zdravím, potřeboval bych poradit.

Napsal jsem si vlastní databázový router. Pro každý odkaz na stránce se hledá v databázi id aktuální stránky (ve funkci constructUrl()). Je možné nějakým způsobem tyto dotazy sloučit? Zjistil jsem, že Jakub Vrána vyvíjí NotORM2. Nahrál jsem si tedy tuto verzi (then branch), ale nevím jestli ji pro toto můžu nějakým způsobem použití.

Díky před za rady.

Panda
Člen | 569
+
0
-

Nedovedu si představit, jak by všechny dotazy šly sloučit už na úrovni routeru (router musí vrátit odkaz „teď“, nemůže čekat, jestli náhodou nebude ještě jeden odkaz). Na druhou stranu si ale dokážu dost dobře představit, že na úrovni routeru hodíš cache s kompletní překladovou tabulkou, kterou budeš pomocí tagů invalidovat při změně/přidání stránky a router se bude dotazovat databáze jen jednou za čas.

m4rty
Člen | 40
+
0
-

Překladovou tabulku používám, ale pouze pro hlavní strukturu webu. Ostatní odkazy potřebuji hledat tímto způsobem :/.

Panda
Člen | 569
+
0
-

A proc? Co je spatneho na stazeni cele tabulky do cache a jeji invdalidace pri zmeme? Ziskas vykon a funkcnost zustane stejna, jen musis do modelu pridat tu invalidaci.

hrach
Člen | 1838
+
0
-

Nevymyslej kolo, pouzij cache.

m4rty
Člen | 40
+
0
-

Ja mam totiz jednu spolecnou tabulku, kde mam obsazene informace o vsech zaznamech z databaze (url,nazev) a z te take generuji odkazy. Myslim ze by to bylo velmi narocne pokud bych mel ulozeno napr. 3000 clanku. Uz jsem to mel udelane jak rikas, ale vyhovuje mi vic aktualni reseni, protoze se zaznamy z DB budou casto menit. Akorat jsem tedy nedoresil jak udelat nejaky lazy loading na sjednoceni dotazu a volani najednou.

m4rty
Člen | 40
+
0
-

Mate recht. Udelam to nakonec za pouziti cache. Diky za popostrceni :-)

Panda
Člen | 569
+
0
-

Tento postup jsem zkoušel pro 1000 záznamů a nezaznamenal jsem žádný velký rozdíl ve výkonu. Pokud se chceš vyhnout velkým polím v cache, tak to rozděl podle IDčka do několika položek, tzn. články s ID 1 – 999 ukládej do cache pod názvem table-0, ID 1000 – 1999 pod názvem table-1 atd. Dá se předpokládat, že na jedné stránce budou články vždy zhruba ze stejné doby a tak se Ti načtou jen 1 – 2 tabulky.

Na méně než 1000 záznamů podle mě nemá moc smysl cache členit, nejhorší je na celém procesu ten diskový přístup. Pokud bys to chtěl ještě víc optimalizovat, tak memcache a s tou granularitou si trochu pohrát.

Co znamená „záznamy se budou často změnit“? Bude to častěji, než jednou za několik minut? Pokud ne, tak je cache lepší řešení. Invalidace cache zabere chvilku déle, ale děje se jen jednou za čas, kdežto odkazů na stránce mohou být i desítky.

// Doplnění: koukám, že než jsem post odeslal, tak už bylo rozhodnuto… :-) Snad to ale trošku pomůže ostatním při rozhodování.

Editoval Panda (2. 4. 2012 13:03)

m4rty
Člen | 40
+
0
-

Rozhodně cenný rady. Děkuju ještě jednou.