[ Goran Rakić @ 24.06.2010. 16:21 ] @
PHP 5.3 doneo je mysqlnd, novi drajver koji se koristi za povezivanje sa MySQL serverom preko mysql, mysqli i PDO_MYSQL funkcija. mysqlnd ima poseban API za pisanje dodataka u C-u koji se izvršavaju između PHP-a i poziva ka MySQL serveru. Ovo omogućava da posebni dodaci transparentno izmene sve mysql_*, mysqli_* i PDO_MYSQL funkcije i dodaju novi API. Novi MySQLnd Query Cache Plugin for PHP ne menja API PHP funkcija ali dodaje klijentsko keširanje MySQL upita. MySQL od izdanja 4.0.1 ima serversko keširanje rezultata. To grubo znači da će MySQL optimizer da prepozna iste SELECT upite i, ako u međuvremenu nije bilo izmena poslati keširani odgovor bez ponovnog izvršavanja upita. Međutim zahtev i podaci i dalje putuju do MySQL servera i nazad. Klijentsko keširanje do sada je uglavnom imalo sledeći obrazac koristeći memcached server i PECL/memcache klijent: Code (php): $mysqli = new mysqli; $memcache = new Memcache; ... $sql = 'SELECT * FROM ... LEFT JOIN ... LEFT JOIN ... WHERE ...'; $key = md5('mysql_'.$sql); if(!$large_result = $memcache->get($key)) { // nije keširano ili je keš istekao $r = $mysqli->query($sql); $large_result = $r->fetch_all(); $r->free(); // keširaj 60 sekundi $memcache->set($key, $large_result, MEMCACHE_COMPRESSED, 60); } Mysqlnd qc dodatak spušta ovaj kod nivo ispod svih mysqli poziva. Komentar - savet ⁄*qc=on*⁄ u upitu kaže dodatku da kešira ovaj upit Code (php): $r = $mysqli->query('/*qc=on*/'.$sql); $large_result = $r->fetch_all(); $r->free(); ![]() Za samo smeštanje podataka dodatak može da koristi memoriju procesa, memcached, APC,... a moguće je i napisati novi handler koji određuje prostor i strategiju. Taman dok se malo ne stabilizuje razvoj, biće zanimljivo isprobati ovo u narednom projektu. |