Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-03-2009 12:50:18

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Adapteur MySqli ou Pdo_Mysql ?

Bonjour,
Lequel dois je utiliser pour les meilleures performances?

David

Hors ligne

 

#2 07-03-2009 14:38:10

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Adapteur MySqli ou Pdo_Mysql ?

ça change quasiment rien côté perf PDO ajoute une couche d'abstraction qui rend ton code plus portable d'une base à l'autre mais sinon c'est quasi identique

perso j'ai choisit PDO car de temps en temps j'ai un dev qui demande une base plus costaud que MySQL et je passe alors à PostgreSQL ou à Oracle
du coup pour réutiliser mes classe de persistance d'une application à une autre je n'ai pas à les développer pour chaque type de base.

j'utilise toujours les mêmes que j'enrichis au fur et à mesure. et s'il y a une particularité pour un moteur particulier alors je l'inclus dans ma classe et ainsi elle deviens portable

sinon côté perf c'est transparent
tu vas rencontrer des pb de perf avec ta base que si tes appels ne sont pas bon (comme utiliser dans des boucle les relation avec ZF au lieu de le faire dans la base) mais côté perf pure d'accès à la base c'est marginal

modif :
pour exemple j'ai une requête complexe (300 lignes de SQl) qui fait un gros calcul sur 15 tables que quelques centaines de milliers de lignes en PDO qui réponds entre 0.06s et 0.12s (PostgreSQL) ce n'est donc pas PDO qui pose PB
A+JYT

Dernière modification par sekaijin (07-03-2009 14:40:48)

Hors ligne

 

#3 07-03-2009 17:08:25

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Adapteur MySqli ou Pdo_Mysql ?

Ok je te remercie de ta réponse.
J'avais lu plusieurs fois sur internet qu'utiliser PDO ralentissait énormément une application.
En fait, j'avais peur d'alourdir encore mon appli en utilisant un ORM
Mais comme tu me rassures à ce sujet, je vais faire des tests avec PDO.
Pour info, voici tout ce qui se passe au chargement de ma page d'accueil, sachant que je n'utilise encore ni Zend_Db, ni Zend_View ni Zend_Form.

Temps initialisation application:

Initializer::routeStartup() =>
Initializer::setLocalisation : 27.3 millisecondes
Initializer::getEnv : 10 millisecondes
Initializer::loadConfig : 27.3 millisecondes
Initializer::loadDomaine : 13.5 millisecondes
Initializer::loadModules : 53 millisecondes
Initializer::setDatabases : 98.5 millisecondes
Initializer::setPlugins : 66.8 millisecondes
Initializer::setActionHelpers : 52 millisecondes
Initializer::setControllerDirectory : 5.8 millisecondes

RouterCustom::route() : 47 millisecondes
Initializer::preDispatch() : 31.6 millisecondes

Temps exécution requetes =>
message::getNbMessagesNonLus : 0.2 millisecondes
search::getHomeSelection : 6.2 millisecondes
search::getDerniersInscrits : 0.3 millisecondes
search::getUsedCountries : 0.2 millisecondes
temoignage::getListeTemoignages : 0.3 millisecondes
temoignage::getNbTemoignages : 0.2 millisecondes
zone::getListePays : 0.3 millisecondes

Total chargement Page (sans APC): 858.5 millisecondes

En utilisant APC, je divise par 3 le temps de chargement.

Hors ligne

 

#4 07-03-2009 20:53:37

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Adapteur MySqli ou Pdo_Mysql ?

le ralentissement vient bien plus souvent d'un mauvais usage que du connecteur que l'on utilise
avec ZF par exemple tu crée une classe table tu fais un fetchAll puis tu fais une boucle et pour chaque objet remonté tu fais un remonte les objets liés que tu parcourt dans une boucle pour remonter les objet liées à ces objets liées.

Dans ZF tu as des méthode toute prêtes pour remonter les objets liés pourquoi s'en priver.
mais si tu regarde bien
tu vas exploser ton temps de liaison à la base
en imaginant que tu aies 100 objets dans ta première table qui chacun son lié à 100 objets eux même lié à 100 objets
tu vas faire avec cette approche
1+ 100 + 100 x 100 requêtes soit 100101 requêtes en imaginant que tu ait un delta de 0.001 seconde entre PDO et MySQLi cela fait 100101 x 0.001 = 100 seconde de différence PDO plonbe donc tes perfs

mais en fait pour arriver au même résultat tu peux utiliser ta base pour ce qu'elle sait faire et le faire avec 1 seule requête avec des jointures et là le delta est de 0.001 seconde donc PDO ne plombe pas les perfs

on pourrais alors penser qu'il ne faut pas utiliser PDO parce que 100 seconde pour une mauvaise utilisation c'est beaucoup mais si tu regard de plus près tu verras que non. en suposant que ta base réponde en moyene en 0.01 seconde à ta requête avec la jointure tu as les temps de 0.01 pour MySQL et 0.011 Pour PDO
mais sans jointure tu vas avoir 100101 x 00.1 = 1001 seconde avec MySQLi et 1101 seconde avec PDO
de toute façon avec ou sans PDO c'est inacceptable

j'ai volontairement choisis des valeur fortes pour montrer l'amplitude de la chose. dans la réalité les disparités entre PDO et MySQLi sont bien plus minimes et les temps de réponses d'une base bien meilleur.

ce que je voulais montrer par là c'est que tu perd énormément plus en faisant un mauvais usage qu'en choisissant un connecteur ou un autre

A+JYT

Hors ligne

 

#5 08-03-2009 10:40:55

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Adapteur MySqli ou Pdo_Mysql ?

Oui je vois, en fait, si on fait des requetes correctes, on a quasiment aucune différence entre PDO et MySqli.
Comme la plupart de mes requetes font entre 0.2 et 6 ms, on peut imaginer que ce surcout lié à l'utilisation de PDO doit être négligeable surtout comparé aux 300 ms du chargement des librairies et initialisation des diverses configurations.
Je vais donc m'y atteler.
Merci encore pour tes conseils et ton implication (légendaire maintenant :-) ).

David

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages