RSS: Vše - Programování



Mysqlnd - native driver pro PHP

05. 05. 2008, 13:11:00,Programování,

Minulý čtvrtek spatřila světlo světa nová verze PHP, tentokráte s pořadovým číslem 5.2.6, která přináší opět větší stabilitu a výkon 5.2 větvi. Přesto naprostá většina PHP vývojářů (mě nevyjímaje) upíná své zraky k blížící se verzi 5.3. V době, kdy jsem psal článek o tom, co všechno nám PHP 5.3 přinese, se zdálo, že nová verze našeho oblíbeného jazyka doslova klepe na dveře. Leč, jak jsem zmínil již během své přednášky na konferenci WebCamp '08, datum vydání verze 5.3 se odsunulo až na přelom druhého a třetího čtvrtletí tohoto roku. Čekání si tak můžeme ukrátit alespoň představením plánovaných novinek: a jednou z těch nejzásadnějších je nový mysql native driver.

Mysql je bezesporu nejpopulárnější open-source databáze používaná společně s PHP, takže jakákoliv změna či optimalizace má ambice zasáhnout obrovské množství projektů. Potěšující je jistě ten fakt, že mysqlnd přináší (alespoň to tak zatím vypadá) pouze výhody a prakticky žádné komplikace. Ale postupně.

Hned na úvod musím zdůraznit, že se nejedná o nové API ve smyslu starších modulů mysql, mysqli či PDO. Mysqlnd pracuje podobně jako dosavadní knihovna libmysql na vrstvě "pod nimi" (jak názorně ukazuje následující obrázek), takže své oblíbené API nemusíte opouštět a své rozsáhlé programy přepisovat.

Vrstvy při práci s databází

Podporováno je jak PHP 5, tak i PHP 6, což je rozhodně dobrá zpráva směrem k životnosti na mysqlnd postavených řešení. Nový nativní driver pro propojení mysql a PHP vlastně nahrazuje univerzální "céčkovou" knihovnu libmysql. Tato specializace ve svém důsledku umožňuje šetřit čas, paměť a lépe kontrolovat činnost této vrstvy. Při této příležitosti je také vhodné zmínit to, že nová knihovna bude šířena s licencí shodnou s licencí PHP (nebude již zapotřebí vyjímky) a že bude mít svůj vlastní vývojový cyklus. To znamená, že vydávání nových verzí nebude nutně vázané na mysql.

Integrace s jádrem Zend přináší i další výhody - mysqlnd bude například respektovat konfiguraci obsaženou v souboru php.ini. Už by se vám tedy nemělo stávat to, že se vaše PHP aplikace dostanou přes nastavený memory limit pravě "za pomoci" práce s mysql databází.

Konfigurace mysqlnd vs. libmysql

Mysqlnd znovu přináší možnost perzistentního spojení (neptejte se - opravdu netuším proč), např. při použití mysqli je možné napsat:

mysqli_connect('p:localhost', ...)

Na původně plánované PHP streamy, které slibovaly jakési "uživatelské proxy" komunikace s databází, se zřejmě nedostane; zato vylepšených statistik, které nám umožní lépe ladit naše databázové aplikace, se dočkáme. Rozšířené budou informace dosažitelné přímo přes phpinfo(), ještě větší detaily se pak dozvíte přes mocnou trojici mysqli_get_client_stats(), mysqli_get_connection_stats() a mysqli_get_cache_stats(). Třikrát hurá!

A teď se zřejmě dostáváme k těm nejpodstatnějším změnám, které výrazně ovlivňují výkonnost a paměťovou náročnost aplikací. Třetí obrázek názorně ukazuje rozdíl mezi prací mysqlnd a libmysql. Obě dvě ukládají data získaná z databázového serveru do své vnitřní paměti, ale zatímco starší knihovna musí při dalším předávání dat vytvořit jejich kopii v části paměti, kam má PHP přístup, nový driver může díky vyšší integraci s jádrem Zend předat pouze odkaz (pointer) na místo, kde se data nalézají. V konečném důsledku by pak tento přístup mě ušetřit polovinu systémové paměti. Pěkné a jednoduché, že?

Práce s pamětí

Nový native driver také slibuje vyšší výkonnost. Trvání některých dílčích operací, mezi které patří například mysqli_affected_rows(), by se mělo zkrátit až na polovinu, nicméně v celkovém pohledu je obecně očekáváno zrychlení pohybující se lehce nad pěti procenty. S blížící se dobou vydání se jistě začne zvyšovat i počet benchmarků, které tyto teze ověří. Každopádně i toto na pohled relativně malé zrychlení může být u extrémně vytížených databázových aplikací podstatné. A hlavně - nebude vás to stát téměř žádnou námahu!

Doufám, že jste si udělali alespoň základní obrázek o tom, na co dalšího (kromě obehraných namespaces, pozdní statické vazby, atp.) se můžeme v PHP 5.3 těšit. A taktéž doufám, že jsem příliš neznudil ty, kteří si ode mě tyto informace vyslechli už na WebCampu.

PS: Nette už je na PHP 5.3 připraveno dopředu. Pište své aplikace také tak! :)

Pozn: Použité obrázky jsou převzaty ze starší prezentace Andreje Hristova.

Autor: Pavel Šindelka

Komentáře


Žádné komentáře. Můžete být první!

Komentovat


Tento článek byl uzavřen. Už není možné k němu přidávat komentáře ani hlasovat