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:
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

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.
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);
}
...
$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();
$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.
Potpis
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
prezentacije, legalno bez troškova licenciranja