Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PHP/mysqlnd dodatak za klijentsko keširanje MySQL upita

[es] :: PHP :: PHP/mysqlnd dodatak za klijentsko keširanje MySQL upita

[ Pregleda: 2730 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon PHP/mysqlnd dodatak za klijentsko keširanje MySQL upita24.06.2010. u 16:21 - pre 167 meseci
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.

http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
Prikačeni fajlovi
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: PHP/mysqlnd dodatak za klijentsko keširanje MySQL upita24.06.2010. u 21:52 - pre 167 meseci
Sjajna vest. Jel možda već neko ima informacije iz prve ruke oko svega ovoga? Jel imao neko prilike da isproba ovaj novi drajver, sa sve tim plugin-om za keširanje?
 
Odgovor na temu

zikaa
Zivorad Antonijevic
Beograd

Član broj: 10078
Poruke: 107
*.mbb.telenor.rs.

Sajt: zantonijevic.com


+1 Profil

icon Re: PHP/mysqlnd dodatak za klijentsko keširanje MySQL upita26.06.2010. u 20:49 - pre 167 meseci
Fenomenalno, moracu to da probam kolko odmah :)) i okacicu ovde kako ce se pokazati
 
Odgovor na temu

MMX
Miloš Malović
Platform engineer, Supplyframe
Beograd

SuperModerator
Član broj: 2423
Poruke: 2105
188.120.96.*

Jabber: mmx@elitesecurity.org
ICQ: 98797759
Sajt: www.mmx.rs


+11 Profil

icon Re: PHP/mysqlnd dodatak za klijentsko keširanje MySQL upita27.06.2010. u 06:01 - pre 167 meseci
Znači memcache u stvari funkcioniše kao struktura u kojoj se čuvaju izvršeni upiti (tako sam shvatio iz Goranovog koda)? Pre izvršenja, proveri se da li takav query postoji u memoriji, ukoliko da, vrati se keširani rezultat, ukoliko ne, izvršava se novi upit nad bazom.
↑ ↑ ↓ ↓ ← → ← → B A B A [select] [start]
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: PHP/mysqlnd dodatak za klijentsko keširanje MySQL upita27.06.2010. u 10:27 - pre 167 meseci
Memcache je interfejs prema memcached serveru tako da keš ostaje i između dva poziva. Memcache ima još mogućnosti, ali to je za posebnu temu. Uopšteno obrazac je takav, pred neku dužu operaciju pitaš da li je rezultat u kešu i ako nije izračunaš i smestiš u keš za naredne zahteve. Keširaju se stanja objekta, komadi HTML šablona, rezultati funkcija, rezultati upita i veb servisa,...

Za keširanje rezultata upita treba razmisliti od situacije do situacije u kakvom su odnosu SELECT i INSERT/DELETE, te pruža li MySQL serverski Query Cache dovoljno ubrzanje.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

[es] :: PHP :: PHP/mysqlnd dodatak za klijentsko keširanje MySQL upita

[ Pregleda: 2730 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.