[PHP MYSQL]Hier performance winst met prepared statements?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • sc0rpz
  • Registratie: November 2003
  • Laatst online: 23-09-2021
Overal waar je kijkt zie je dat je performance winst maakt als je prepared statements gebruikt in mysql. Maar dat de query dan wel vaak herhaalt moet worden want het kost 1 extra 'roundtrip' op de database.

Nu is mijn vraag, wat wordt er bedoelt met 'vaakt herhaalt', is dat binnen het script? Of gewoon het aantal query executies per tijdseenheid.

Ik heb hier nl een scriptje, wat aan een flash file gehangen wordt, en ik verwacht dat het script minimaal 10x per seconde wordt opgevraagd, om resultaten in de db op te slaan.

Ik heb nu deze code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$sqlUser = 'INSERT into users(iUserId, vFirstName, vLastName, vEmail, vIpAddress) VALUES("", ?, ?, ?, ?)';
    $sqlScore = 'INSERT into score(iUserId, dDistance , dTime, iPoints ,iTotal) VALUES(?, ?, ?, ?, ?)';
    $prepDb = $db->prepare($sqlUser);
    
    $prepDb->bind_param('ssss', $_GET['vFirstName'],$_GET['vLastName']$_GET['vEmail'], $_SERVER['REMOTE_ADDR']);
    
    if($prepDb->execute()){
        $insertId = $prepDb->insert_id;
        $prepDb = $db->prepare($sqlScore);
        $prepDb->bind_param('iddii', $_GET['vFirstName'],$_GET['vLastName']$_GET['vEmail'], $_SERVER['REMOTE_ADDR']);
//ETC

(Ik ga er dus vanuit dat dmv de prepped statements injectie onmogelijk is)

Dit script wordt dus zeer vaak achter elkaar aangeroepen, maar telkens wel een andere insert. Is het dan performancewijs slim om prepped statements te gebruiken?

Acties:
  • 0 Henk 'm!

Verwijderd

Nee. Niet gebruiken :)

Een prepared statement geld maar voor 1 mysql connectie.
Het heeft dus niet veel nut als je het 1x per php script gebruikt.

Deze dingen zijn handig als je een lus gebruikt, die tientallen of honderden keren een ingewikkelde (lees: tekstueel lange) query doorloopt. Het enige wat je namelijk skipt is het parsen van de query.

// OFFTOPIC
Denk je 10 extra gebuikers per seconde erbij te krijgen :D?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

PHP ondersteund (nog) niet de prepared statements van MySQL

edit:
waarom dan niet gebruiken? voor de performance hoef je het natuurlijk niet te doen, maar dat is niet het enige voordeel van een prepared statement ;)

[ Voor 71% gewijzigd door Erkens op 30-07-2007 14:02 ]


Acties:
  • 0 Henk 'm!

  • sc0rpz
  • Registratie: November 2003
  • Laatst online: 23-09-2021
Verwijderd schreef op maandag 30 juli 2007 @ 13:58:
Nee. Niet gebruiken :)

Een prepared statement geld maar voor 1 mysql connectie.
Het heeft dus niet veel nut als je het 1x per php script gebruikt.

Deze dingen zijn handig als je een lus gebruikt, die tientallen of honderden keren een ingewikkelde (lees: tekstueel lange) query doorloopt. Het enige wat je namelijk skipt is het parsen van de query.

// OFFTOPIC
Denk je 10 extra gebuikers per seconde erbij te krijgen :D?
Hmm dat dacht ik al... Thx voor het verhelderen

//OFFTOPIC
Nee verwacht ik niet, maar is een spelletje, dus mensen zullen vaak overnieuw spelen. Dan nog is 10/s misschien een beetje overdreven :9

Acties:
  • 0 Henk 'm!

  • sc0rpz
  • Registratie: November 2003
  • Laatst online: 23-09-2021
Erkens schreef op maandag 30 juli 2007 @ 14:00:
PHP ondersteund (nog) niet de prepared statements van MySQL
Wel apart dat ik ze gewoon gebruik dan he.

Wel eens van MySqli gehoord?

Acties:
  • 0 Henk 'm!

Verwijderd

Erkens schreef op maandag 30 juli 2007 @ 14:00:
PHP ondersteund (nog) niet de prepared statements van MySQL
???

Hoezo?

mysqli
PDO
MDB2

Op de laatste na wel alleen voor PHP5 en hoger, maar aangezien iedereen behoort over te stappen naar PHP5 dit jaar moet dat geen probleem zijn.

Voor PHP4 komt die support er dus ook nooit, PHP4 wordt niet meer verder uitgebreid.

[ Voor 8% gewijzigd door Verwijderd op 30-07-2007 14:04 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Erkens schreef op maandag 30 juli 2007 @ 14:00:
waarom dan niet gebruiken? voor de performance hoef je het natuurlijk niet te doen, maar dat is niet het enige voordeel van een prepared statement ;)
Daar heb je andere dingen voor dan prepared statements.
Parameterized queries. (Of is dat nu ook al hetzelfde in PHP? Ben even uit PHP proggen ;))
Zoals topicstarter meldde hebben prepared statements een extra overhead; parameterized queries niet.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op maandag 30 juli 2007 @ 14:09:
[...]


Daar heb je andere dingen voor dan prepared statements.
Parameterized queries. (Of is dat nu ook al hetzelfde in PHP? Ben even uit PHP proggen ;))
Zoals topicstarter meldde hebben prepared statements een extra overhead; parameterized queries niet veel minder.
;)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op maandag 30 juli 2007 @ 14:03:
Op de laatste na wel alleen voor PHP5 en hoger, maar aangezien iedereen behoort over te stappen naar PHP5 dit jaar moet dat geen probleem zijn.
aangezien de meeste hosting providers nog geen PHP5 draaien en dat ik ze dat ook dit jaar niet meer zie doen (als ze dat wel doen voorzie ik grote problemen) ging ik uit van PHP4. Overigens doet die MDB2 geen echte prepared statements omdat dit niet aanwezig is ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Tjah, dit jaar zullen de hostingproviders toch echt over moeten aangezien PHP aan het einde van het jaar support gaat stopzetten. Daarna komen er nog wel een paar maanden security fixes maar that's it.

PHP4 wordt ook niet meer uitgebreid verder, enkel bugfixes en security fixes.

Ook vanuit de programming community is het besluit genomen dit jaar over te gaan naar PHP5, hosting providers nemen ook niet de moeite over te stappen als er niemand om vraagt. Dus vanaf nu gewoon alles doen met PHP5 spul en van je hoster PHP5 eisen. Hebben ze het niet of willen ze het niet installeren? Pech, dan naar een andere hoster die het wel aanbiedt.

Laat ze maar eens weten dat het gewoon niet OK was ze hebben gedaan. Dankzij lamme hosting providers zit de wereld nog steeds met 7 jaar oude PHP4 rommel terwijl PHP5 nu al lang genoeg stabiel is om overal voor gebruikt te worden.

Zie ook:

http://www.gophp5.org/

http://nl3.php.net/ (Bovenste bericht op de homepage, PHP 4 end of life announcement)

Het is belangrijk dat ontwikkelaars en tweakers hierin het voortouw nemen, anders gebeurt er dus helemaal niets is wel gebleken.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op maandag 30 juli 2007 @ 20:20:
Laat ze maar eens weten dat het gewoon niet OK was ze hebben gedaan. Dankzij lamme hosting providers zit de wereld nog steeds met 7 jaar oude PHP4 rommel terwijl PHP5 nu al lang genoeg stabiel is om overal voor gebruikt te worden.
Nu is dit natuurlijk erg offtopic, maar lamme hosting providers wil ik het niet noemen. Natuurlijk is PHP5 al jaren lang stabiel genoeg, het probleem is alleen de backwards compatibiliteit.
Onlangs nog van dichtbij mee gemaakt dat een hosting provider over ging op PHP5 zonder dit goed te communiceren met de klanten, waarna veel van deze klanten gedupeerd werden en op extra kosten gejaagd werden doordat hun sites niet (goed) meer functioneerde.

Uiteraard is het wel lam van ze als ze idd een PHP versie draaien van 7! jaar geleden. De laatste versie is van mei dit jaar. Verder geeft PHP.net aan dat iedereen moet upgraden naar 5.2 terwijl 6 al op de stapel ligt, de kans is dus ook aanwezig dat 5 overgeslagen zal gaan worden.

Maar het grootste probleem is toch echt PHP zelf, die het gewoon onmogelijk hebben gemaakt om op een fatsoenlijke manier beide versies naast elkaar te kunnen draaien zonder over te stappen op ranzige CGI toestanden ;)

offtopic:
Gelukkig host ik zelf, maar ook ik blijf voorlopig nog bij PHP4, ik kan het mijn klanten niet aandoen om "even" te upgraden, maar uiteraard bied ik wel een PHP5 testomgeving aan een paar maanden voordat ik eventueel over zal gaan en aangezien ik over ruim voldoende kennis beschik zal ik hen in die periode dan ook kosteloos bijstaan. Maar dit zal niet eerder zijn dan het tweede kwartaal 2008. Officiele support in de vorm van bugfixes zullen ze tot augustus nog doen, en daarna is er altijd nog de community zelf die met eventuele critieke bugfixes zullen komen mocht dit nodig zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Klopt, maar het was niet de schuld van PHP dat PHP5 niet backwards compatible was.

Dat is de schuld van Zend in principe, PHP5 gebruikt de Zend Engine 2 waar PHP4 de Zend Engine 1 gebruikt. Hierdoor is het vrij lastig zowel PHP4 als 5 op 1 server tegelijkertijd werkend te krijgen.

PHP4 is 7 jaar oud, dat er nog af en toe updates voor komen neemt niet weg dat de basis gewoon enorm oud en brak is. Windows XP krijgt ook nog steeds updates, toch blijft het een OS van bijna 7 jaar oud ;)

Zoals bij gophp5.org staat beschreven was het gewoon een vicieuze cirkel.

De hosters gaan niet naar PHP5.
Dus de proggers kunnen PHP4 niet dumpen.
Dus de gebruikers blijven PHP4 apps gebruiken.
Dus de hosters gaan niet naar PHP5.

Nu is het dus aan de proggers om gewoon over te gaan naar PHP5, daarmee worden de gebruikers en hosters geforceerd over te gaan naar PHP5.

Het zal een hoop geld en moeite kosten om alles over te krijgen, maar dat winnen we vanzelf weer terug met de betere mogelijkheden van PHP5.

Ik kan alleen maar hopen dat ze het voor PHP6 gewoon makkelijk mogelijk maken zowel PHP5 als PHP6 op eenzelfde server te draaien, dat zou heel veel schelen.

Grootste probleem waar veel mensen tegenaan lopen is dat PHP4 applicaties onder PHP5 niet zo zeer foutmeldingen geven, maar wel bugs gaan vertonen. Dat maakt het opsporen en fixen veel lastiger. Wanneer het ding gewoon overal fouten naar je hoofd zou gooien heb je het in no time gevonden en gefixed. Maar een bug moet je met testen tegenaan lopen en kun je ook makkelijk over het hoofd zien.

Ik denk niet dat je het gaat redden PHP5 over te slaan, daar let PHP wel op. Einde dit jaar zetten ze de support stop en tegen de tijd dat PHP6 zo ver is dat je het als hoster wilt gaan gebruiken zit je weer een jaar verder. Een heel jaar PHP4 hosten in een PHP5 wereld ga je niet redden natuurlijk.

Hoewel er ongetwijfeld providers zullen zijn die niet mee gaan, maar goed, aan ons de taak daar te klagen en anders weg te lopen als klant. We kunnen niet eeuwig met oude rommel blijven zitten.

[ Voor 27% gewijzigd door Verwijderd op 30-07-2007 22:08 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op maandag 30 juli 2007 @ 22:05:
Klopt, maar het was niet de schuld van PHP dat PHP5 niet backwards compatible was.

Dat is de schuld van Zend in principe, PHP5 gebruikt de Zend Engine 2 waar PHP4 de Zend Engine 1 gebruikt. Hierdoor is het vrij lastig zowel PHP4 als 5 op 1 server tegelijkertijd werkend te krijgen.
Dat is niet de exacte reden waarom het niet op dezelfde server kan draaien als apache module, met een paar source code hacks is dit namelijk wel mogelijk :)
PHP4 is 7 jaar oud, dat er nog af en toe updates voor komen neemt niet weg dat de basis gewoon enorm oud en brak is. Windows XP krijgt ook nog steeds updates, toch blijft het een OS van bijna 7 jaar oud ;)
PHP4.4 (dat is de huidige versie) die is van 2005, als je rekening gaat houden met de 4.0, dan moet je ook even in de gaten hebben dat 5.0 ook al ruim 4 jaar oud is. Als ik dat bij elkaar op tel dan draait PHP5 idd langer mee dan 4, dat is ook de reden waarom ik liever op 6 wacht en dan in 1x de boel omzet ipv dat straks nog een keer te doen :)
De hosters gaan niet naar PHP5.
Dus de proggers kunnen PHP4 niet dumpen.
Dus de gebruikers blijven PHP4 apps gebruiken.
Dus de hosters gaan niet naar PHP5.

Nu is het dus aan de proggers om gewoon over te gaan naar PHP5, daarmee worden de gebruikers en hosters geforceerd over te gaan naar PHP5.
Zelf develop ik PHP5 compatible, maar nog steeds voor PHP4, op deze manier is het geen probleem om over te stappen, kost alleen wel extra uren werk kwa testing etc.
Het zal een hoop geld en moeite kosten om alles over te krijgen, maar dat winnen we vanzelf weer terug met de betere mogelijkheden van PHP5.
Zo veel beter is het niet, voor de meeste toepassingen/sites zijn de nieuwe "mogelijkheden" gewoon overkill.
Ik kan alleen maar hopen dat ze het voor PHP6 gewoon makkelijk mogelijk maken zowel PHP5 als PHP6 op eenzelfde server te draaien, dat zou heel veel schelen.
yup, ik hoop dan ook dat ze eens een keertje naar ons willen luisteren...
Een heel jaar PHP4 hosten in een PHP5 wereld ga je niet redden natuurlijk.
Gaat makkelijk, vergis je niet hoeveel sites er bijvoorbeeld nog op PHP3 draaien, of bijvoorbeeld op ASP ipv ASP.NET ;)
We kunnen niet eeuwig met oude rommel blijven zitten.
uiteraard.


offtopic:
idee om deze discussie af te splitsen?
Pagina: 1