Wat is de laatste, beste manier om informatie uit de database in een php object te verkrijgen. Met name snelheid moet voorop staan. Ben op dit moment bezig te kijken wat er de laatste maanden/jaren is verbeterd/bijgekomen na de ArrayAccess manier (offsetExists, offsetGet, offsetSet).
Ga eerst eens uitzoeken welke onderdelen van jouw applicatie langzaam zijn. Je kunt nog zo snel een resultset in een object zetten, wanneer je een tergend langzame query gebruikt om de data op te zoeken, zal het nooit snel worden. Slechte queries zijn veruit de belangrijkste reden dat een systeem langzaam is.
Bij voorkeur gekoppeld aan een MySQL database. Met bijvoorbeeld ArrayObject of technieken die er aan staan te komen met de PHP 6 versie.

En gemakshalve er vanuit gaan dat alle queries geoptimaliseerd zijn.
Dan nog zal het fetchen niet het meeste tijd in beslag nemen. Het ligt er ook een beetje aan hoe je er binnen de applicatie mee om gaat. Wil je alle rows uit de database in PHP objecten, tegelijkertijd hebben, of is één per keer voldoende.

In PHP5.3 & 6 zit MySQLnd, een client bibliotheek voor MySQL communicatie door de PHP community zelf gemaakt (eigenlijk door een of twee personen, maar voor de community :P) die optimaler omspringt met de data dan de standaard MySQL bibliotheek. Ook zitten er wat experimentele features in zoals fetchen op de achtergrond, dus terwijl je normale code doorloopt. Experimenteel, want voor zover de makers ermee getest hebben leverde het weinig tot geen snelheidswinst op.

Momenteel "hip" zijn de SPL functies, waarmee je PHP code extra functionaliteit kan geven, zoals objecten als iterator benaderen, of als array, maar bedenk dat daarbij juist weer teruggevallen wordt op die PHP code. PHP code is altijd langzamer dan de functies die in PHP zelf zitten, die in C geschreven zijn en netjes gecompileerd en al. PDO is ook leuk, maar ook daar zit een extra database-abstractielaag in die het niet sneller maakt (theoretisch gezien!)

Mijn tip: Gewoon MySQLi (of later MySQLnd) gebruiken en niet te veel abstracties erin zetten, zeker wanneer je ze eigenlijk niet nodig hebt.

En mijn mening: Optimaliseren doe ik pas wanneer het nodig is, optimaliseer eerst je broncode voor optimale leesbaarheid en optimale aanpasbaarheid. Je zal voorlopig verreweg het meeste tijd besteden aan lezen van je broncode om bugs op te lossen, en als je dan allemaal dubbele code en vreemde constructies hebt "omdat ze sneller zijn" is bugs fixen veel minder leuk. De winst die je haalt met de optimalisaties is vrij klein, je hebt meer winst door op de juiste plekjes te cachen naar bijvoorbeeld memcache. En let een beetje op je geheugenverbruik. Hoe meer geheugen je verbruikt, hoe minder processen er tegelijkertijd kunnen draaien hoe minder requests je tegelijkertijd kan laten afhandelen door je webserver. En al het geheugen dat je wel overhoudt kan je gebruiken om met APC een cache in te maken, of een memcache daemon in te draaien. Of als je database op de server staat is het heerlijke ruimte voor de query cache...
Nog eventjes wachten op MySQLnd dus!

Eerste kwartaal 2009 is deze gepland in versie 5.3 als ik me niet vergis.
Top reply Jelmer. Thx!

Reageren