Mysql - Inteligentní cache - Krutá realita

Mysql - Inteligentní cache

29.04.2005

mysql-cache

Buďto jste programátoři a tvoříte si vlastní cestu a nebo jste naučení tupci, kteří kopírují příručky. Pokud zapadáte do první skupiny, můžete se mnou prohlédnout revoluční a extrémně efektivní práci s databází MySQL v PHP pomocí novodobé knihovny doplněné o mojí geniální funkci pro cachování obsahu webu.

Knihovna EzSQL

Justin Vincent, geniální autor knihovny EzSQL, která umožňuje vynikající spolupráci se šablonovacím systémem Smarty (podporovaný přímo vývojaři PHP) se jednoho dne dal do práce a napsal onu výše zmíněnou geniální knihovnu, která umožňuje extrémě rychlý vývoj aplikací.

Jak je to možné? Justin si jednoho dne řekl, že do knihovny napíše ty nejpoužívanější funkce pro co nejefektivnější kód. Takže jeho knihovna se dokáže připojit k databázi MySQL a načíst všechny výsledky dotazu do pole. Ale nejen to! Do pole můžete načíst pouze jeden řádek či jeden sloupec. Dokonce můžete pomocí jedné funkce do proměnné načíst pouze jednu hodnotu. Vše je uděláno tak, aby to bylo maximálně efektivní a jednoduché.

Příklad

$user = $db->get_row("SELECT name,email FROM users WHERE id = 2");   echo $user->name; echo $user->email;

Jak vidíte, kód je maximálně efektivní a jednoduchý. To samozřejmě nepochopí usedlí, neschopní a hloupí programátoři, kteří píšou po staru neustále ty samé dlouhé nepřehledné kusy kódu v PHP. Ti vám budou tvrdit, že toto je pomalé a neefektivní, ale chyba lávky, od čeho tu máme cache  :-D.

Cache v MySQL

I když MySQL ukládá do cache většinu výrazů, neumožňuje přímočaře zjistit, zda-li nedošlo ke změně určitých tabulek, což se vám hodí zejména v redakčních systémech. Pokud jste ovšem velmi progresivní a máte detailní znalosti databází jako já, můžete vzít geniální knihovnu EzSQL a rozšířit jí o novou revoluční funkci, která dokáže během milisekundy vygenerovat podle masky kontrolní součet několika tabulek, díky kterému zjistíte, zda-li nacachované stránky jsou opravdu aktuální. Tato jednoduše geniální funkce je ovšem založena na opravdu detailních znalostech databáze MySQL, takže se nelekejte, když něco nepochopíte.

function tablemd5($like = '%'){ $results = $this->get_results("SHOW TABLE STATUS FROM `".$this->dbname."` LIKE '".$like."'"); $string = ''; if(is_array($results)){ foreach ($results as $result){ $string .= $result->Update_time; } } return md5($string); }

Jak to funguje?

Relativně jednoduše, má funkce zjistí stav všech tabulek, který obsahuje datum poslední aktualizace, a vypočte kontrolní součet. Daný kontrolní součet lze dále využívat pro řízení cache výstupních webových stránek. Pokud některou tabulku chceme z tohoto součtu vyřadit, určíme její typ na InnoDB místo standardního MyIsam, protože u tabulky typu InnoDB není uvedeno datum poslední změny.

Kde stáhnout knihovnu

Mnou upravenou knihovnu můžete stáhnout zde - ez_sql.zip [4kB].

Přidat komentář

:-D 8-) :-) ;-) :-o :-( :evil: :idea:

Pro příspěvky je vyžadována podpora obrázků

Pro ověření zde prosím napište text, který vidíte na obrázku

od Kero

29.04.2005 #

Mozna je to mou neznalosti mysql, ale samotna fce mi neprijde prilis slozita. Dost by me ale zajimalo, co delat, kdyz jsou tedy data v cachi neaktualni - to by se hodilo. Pujdu se podivat na tu knihovni - vypada hezky a snad se to tam i dozvim.
Jinak ohledne usedlych atd. programatoru, dneska je drahy programatoruv cas (a ne tech par cyklu, co se usetri kdyz si to vsechno napise programator sam), nejsme v dobe opravdoveho programatora Mela ( http://www.cs.utah.edu/~elb/folklore/mel.html doporucuji precist), ackoliv mnozi fyzici tak stale programuji - a casto k tomu maji dobre duvody.

Hulanator 2ka?! od fi0dor

30.04.2005 #

Obcas sem zajdem pretoze pises vcelku prinosne veci -- presne ako je aj tento prispevok. Dnes ma vsak zarazila forma, akou si informacie podal  :(. Neviem preco, ale tento populizmus a chvalenkarstvo mi pripomina "tiez webdesignera" hul[ana|vata], a sami dobre vieme, co je to za "cloveka". Bez urazky, je to naozaj nutne  :)?

od tark

30.04.2005 #

Ach jo, ta knihovna neni psana pro mysql4.1  :(

od Llaik

30.04.2005 #

Pokud chci tabulku vyradit z vasi genialni funkce, tak ji mam zmenit typ z MyISAM na innoDB?

Ehm, a co kdyz ji chci vyradit a pritom ji mit MyISAM, jako doted? Pripadne co kdyz se zmenila jen jedna tabulka, jak zjistim ktera?

Slovo "genialni" jsem zrejme zvykly pouzivat v jinych souvislostech, omlouvam se  :)

PS: ta knihovna je efektivni pro lineho programatora, nebo pro velmi vytizeny stroj? Zelezo neni vzdy mozne prihazovat lopatou, i kdyz vetsinou to "stroj levnejsi programatora" plati, tak to nelze brat jako axiom.

od markon

30.04.2005 #

fi0dor: clanky se pokousim psat zabavnou formou a sledovat ohlas, obcas si proste jen hraju a kdyz pisu kazde druhe slovo genialni, tak vim ze se nekdo urcite chytne  ;-)

Re: Mysql - Inteligentní cache od markon

30.04.2005 #

Llaik: Pokud mas s programovanim hlubsi zkusenosti, vis ze min. 50% kodu se prepisuje, takze prehlednejsi kod = efektivnejsi. Vyhody nejsou hned, ale treba po druhem prepsani, kdy zjistis ze nad ten objektovy model lze dat globalni cache.

BTW tuhle knihovnu pouzivam na tomhle blogu kombinovanou s onou cache a ve zdrojaku HTML na konci mas napsany cas generovani, ktery je mnohdy mensi nez 1ms.

Re: Mysql - Inteligentní cache od markon

30.04.2005 #

2Llaik: zmenu jedne tabulky lze zjistit pomoci parametru Like. Typy tabulek je jedine omezeni, ale za to muze MySQL. U InnoDB v novejsich verzi lze zmenu zjistit jinak. Pockame ovsem na verzi 5, ktera tyhle veci umozni resit lepe a snadneji.

od dgx

30.04.2005 #

fi0dor: předpokládám, že to byl záměr  :-)

Při čtení tohoto článku mě napadlo ale něco jiného. Že je nejvyšší čas najít nového beránka. Nový vítr  :-)

od adrive

02.05.2005 #

no toto mi nepripada nejako genialne a toboz nie dokonale riesenie ... mozno na mysql... ale naco stracat cas tvojimi genialnimi hrackami, ktore bezia na show table status... o ezsql neviem toho moc, a idem trosku pogooglit, ale omnoho inteligentnejsie riesenie sa mi zda pouzit adodb bezi na viac databazach a cache. ma.

co ak chces cachovat view?

Re: Mysql - Inteligentní cache od Llaik

02.05.2005 #

2Markon: mimochodem - v cem mi pomuze fce, ktera vraci jen jeden radek? Predhlednosti? Ze pulka SELECTu je volana jednou fci a druha pulka jinou, ktera umi vratit vice radku?

To mi moc prospesne neprijde  :)