A webadmin rövidhírek sorozat keretében ezúttal is MySQL fókusz, memcached kiegészítéssel, PostgreSQL-ből is használható adatbázis proxy-val.

A MySQL nem túl régóta használható lehetősége a view támogatás. Az eddigi munkáim során valahogy sohasem hiányzott a lehetőség, hirtelen még olyan esetet sem tudok felidézni, hogy kellett volna, de kliens oldalon megoldottam. A view-k pedig többféle érdekes dologra is használhatóak, ezeket sorolja fel a belinkelt cikk is: adat tisztításra, “döntéshozatalra”, bonyolult táblák egyszerűsítésére, adattartalmak “szebbé tételére”, stb.
A memcached jó dolog. A belinkelt róla szóló wiki is, különös tekintettel a FAQ részekre, ahol elég jó kérdés-válasz párokat gyűjtöttek össze.
Az talán senkinek nem újdonság, hogy ha a MySQL konzolban a pontosvessző helyett \G-t írunk a lekérdezés végére (így simán, két karakterrel), akkor másfajta megjelenítésben nézegethetjük a lekérdezés eredményét (ez akkor jó, ha az oszlopos nézet használhatatlan, mert sok az oszlop). Ami számomra újdonság volt, hogy az adatbázis válaszok megjelenítőjét “pager”-nek hívják, és hogy írhatunk sajátot is.
Egy érdekes lehetőséget biztosít a MySQL a GROUP BY használatakor, főként mikor több oszlop szerint is csoportosítunk. Én valami olyan hasznos alkalmazását tudom elképzelni, hogy több oszlop szerint csoportosítás után még HAVING segítségével leszűkítjük a kört úgy, hogy csak pár sor maradjon, olyanok, melyeket amúgy nehéz lenne összehozni egy lekérdezésben, de célszerű együtt megjeleníteni. Másik érdekes alkalmazási terület az, amikor a szerveren olyan alkalmazásunk fut ami korlátozottan engedi csak az SQL lekérdezések eredményeinek manipulációját (pl. egy lekérdezést egy az egyben képes csak megjeleníteni, és nem engedi összeadni a sorokat), így kénytelenek vagyunk mindent SQL-ből megoldani.
URL kódolás és dekódolás MySQL-ben
Ha egy SQL lekérdezés során szeretnénk egy kész URL-t előállítani, akkor jöhet jól ez az UDF, avagy User Defined Function MySQL kiegészítés, amivel a PHP-ben megszokott urldecode/urlencode függvényeket használhatjuk SQL lekérdezéseken belül is.
Myosotis Connector (MySQL & PostgreSQL)
Többször emlegettem már a különböző proxy lehetőségeket, ezekkel legfőképpen az a baj, hogy kimutatható módon lassítják az adatbázis műveleteket. A Myosotis Connector nevű proxy ezzel szemben azt ígéri, hogy gyors – a saját tesztjeik alapján gyorsabb, mint a MySQL Proxy és az uni/cluster megoldások.
GROUP BY WITH ROLLUP jó dolog, éppen tegnap használtam. Ami tetszett benne, hogy minden szuper-aggregált sort külön kiértékel és nem simán összead. A MySQL doksiban persze egy SUM()-os példa van, ahol ez nem látszik, de ha mondjuk AVG()-et vagy COUNT(DISTINCT)-et használunk akkor más a leányzó fekvése.
Pölö: egy táblában kattintásokat számolunk és eltároljuk a datumot meg az IP-t ahonnan jött a katt.
Ekkor:
SELECT datum, COUNT(DISTINT ip) FROM tabla GROUP BY datum WITH ROLLUP
esetén lehet ez a válasz:
2008-07-14 | 30
2008-07-15 | 35
NULL | 57
Utolsó sor a lényeg, hogy nem 65 van ott. És ez nekem tetszik
Hát már több éve van view. Két ténylegesen is használt usecase-t nem taglal a cikk: az egyik (talán a fontosabb) a hozzáférés engedélyezés (egy adott usernek csak egy view-t engedünk látni), a másik pedig egyfajta adapter felhasználási mód: mondjuk egy third party rendszer csak adott néven, adott formában szeretne adatokat kiolvasni, ilyekor tudunk nyujtani a meglévő sémánk felett egy view-t.
Amire viszont vigyázni kell, hogy azért a MySQL-ben a view még olyan “mysqles”, simán előfordulhat, hogy view használata rosszabb végrehajtási tervet eredményez, mintha csak használnánk a definicióját. Ezt érdmes szem előtt tartani.
Üdv,
Felhő