Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/07/2011, 09h44   #1
Membre régulier
 
Homme Vincent Leboulanger
Développeur informatique
Inscription : janvier 2005
Messages : 315
Détails du profil
Informations personnelles :
Nom : Homme Vincent Leboulanger
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2005
Messages : 315
Points : 80
Points : 80
Par défaut Quel choix pour de meilleures performances ?

Bonjour,

Voilà, je me pose la question suivante : quelle méthode de requêtage ou définition de modèle est la meilleur pour avoir de meilleure performance ?

J'explique un peu mon cas, actuellement, dans chaque model, je déclarais ma primaire de la façon suivante :

Code :
protected $_primary = 'id';
Et dans mon controller, pour obtenir mon résultat, je fais :

Code :
$row = $table->find($id);
Je dispose aussi de tables avec des clés primaires composées, j'ai vu que la même méthode pouvait être utilisée, mais une personne m'a fait la remarque qu'il est plus performance de ne pas déclarer les primaires dans les modèles, mais d'utiliser seulement les primaires au niveau SQL, c'est à dire qu'il me conseille de faire systématiquement des requêtes de la façon suivante :

Code :
1
2
3
4
5
$table= new Table();
		$data = $table->select()->setIntegrityCheck(false)
							->from('table')
							->where('id=1');
		$row = $table->fetchAll($data );
Pourriez-vous me donner votre avis svp ?

D'avance merci.

Vince
vince29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 00h11   #2
ovh
Rédacteur
 
Avatar de ovh
 
Homme
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 3 725
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2002
Messages : 3 725
Points : 6 310
Points : 6 310
Je vais jeter un gros pavé dans la mare
Mon avis est qu'il faut privilégier avant tout un code lisible et orienté fonctionnel.
Je m'explique.

Si on choisit d'utiliser un framework et à fortiori un ORM (même si Zend_Db_Table n'en est pas vraiment un, mais il s'en rapproche), il faut oublier les performances brutes et les optimisations SQL, car ce n'est pas du tout l'objectif de ce genre d'outil...

Dans une approche classique ("à l'ancienne") on écrit des requêtes SQL pour chaque affichage, optimisées pour renvoyer uniquement les colonnes dont on a besoin, avec les jointures qui vont bien etc.

Mais rappelons qu'ORM signifie Object Relational Mapping ! Le but est de s'abstraire autant que possible de l'aspect persistance pour se concentrer sur le modèle objet au niveau fonctionnel. Les requêtes SQL sont générées automatiquement par l'ORM et sont relativement basiques. Là où on faisait une grosse requête spécifique, l'ORM fera des tas de petites requêtes simples et des boucles. C'est moins joli au niveau DB certes, mais c'est nettement plus propre au niveau code.

Il faut essayer de se détacher de la notion de base de données, et de raisonner uniquement en terme d'objets métier (héritage entre entités, composition, méthodes, responsabilités de chaque entité... bref les bonnes pratiques de conception objet). La persistance est gérée par les couches basses et on ne s'en préoccupe plus vraiment. A tel point qu'avec un bon ORM, on devrait pouvoir changer le moteur de persistance de manière radicale : au lieu d'être une DB relationnelle, on pourrait utiliser des fichiers XML, les modèles doivent pouvoir s'utiliser de la même manière.

Les développeurs ont souvent tendance à vouloir faire du code système (sql) à tout prix, alors qu'avec un ORM le but est de faire de l'objet
__________________
Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.
Je n'ai rien à voir avec la société www.ovh.com !
ovh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 23h27   #3
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 98
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 98
Points : 28
Points : 28
Je suis d'accord sur l'aspect qu'un framework est là pour nous simplifier la vie au niveau codage, la réutilisation de code, sa lisibilité et qu'il y aura forcément des pertes de performance puisque l'on essai de généraliser des concepts.

Mais le modèle objet permet également de spécifier les comportements souhaitez.

Pourquoi un framework ne pourrait pas faire les deux?



Ne pouvons nous pas surcharger la méthode find pour y coder ce que l'on souhaite?



J'ai souvent l'impression que l'utilisation d'un framework est souvent lié à la "simplification" de programmation et à la perte de performance. Je trouve cela dommage. Car je pense que l'on peux faire les deux.
Akta3d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 09h51   #4
Membre confirmé
 
Patrick Barroca
Inscription : mai 2008
Messages : 178
Détails du profil
Informations personnelles :
Nom : Patrick Barroca

Informations forums :
Inscription : mai 2008
Messages : 178
Points : 204
Points : 204
Hello,

Je suis d'accord avec les 2 réponses précédentes
En utilisant un composant ZF normalement on accepte un compromis entre le temps de maintenance et la performance.
Tout framework ajoutera du code qui alourdi l'exécution.

Une fois que cela est dit, quand il y a un problème de performance, et uniquement à ce moment là, il faut profiler une exécution de l'application avec des données réelles et identifier les *vrais* goulets d'étranglements de ton appli. L'optimisation à priori est mauvaise car elle te prendra du temps pour des problèmes hypothétiques.

Si le goulet est une répétition de requêtes ou un type de requête venant d'un composant ZF, évidemment qu'il faut adapter le code, mais pas celui de ZF qui doit rester cohérent.
Il suffit de gérer le problème dans une couche à toi, en créant par exemple une méthode spécialisée dans un de tes objets.

À mon avis on peut dire que les problèmes de perfs apparaissent d'abord à des endroits imprévus et grossiers et qu'il vaut mieux investir du temps à coder les fonctionnalités de ton application puis tester sa montée en charge, la profiler et lever les plus gros lièvres à postériori.

@+
patbator est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 11h53   #5
ovh
Rédacteur
 
Avatar de ovh
 
Homme
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 3 725
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2002
Messages : 3 725
Points : 6 310
Points : 6 310
Totalement d'accord avec patbator

D'ailleurs, en général, les vrais problèmes de perf viennent d'un problème de conception dans la logique de tes objets métier, et plus rarement d'une requête SQL "non optimisée".
__________________
Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.
Je n'ai rien à voir avec la société www.ovh.com !
ovh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 10h28   #6
Membre régulier
 
Homme Vincent Leboulanger
Développeur informatique
Inscription : janvier 2005
Messages : 315
Détails du profil
Informations personnelles :
Nom : Homme Vincent Leboulanger
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2005
Messages : 315
Points : 80
Points : 80
Bonjour à tous,
et merci pour vos réponses qui sont très constructives.

Au final, j'ai privilégié la déclaration des primaires dans mes modèles, quitte à utiliser un framework, autant l'utiliser jusqu'au bout ...

Encore merci.

Vince
vince29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 23h13   #7
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Certaines personnes utilisent un framework pour se simplifier la vie sans avoir de reelles connaissances du langage ceux la sont voué à l echec tot ou tard. Mais pour les autres c est un gain de temps énorme et une reprise facile du code et ces derniers pour des soucis de performance seront agir en surchargeant en mettant en cache etc
5h4rk est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h58.


 
 
 
 
Partenaires

Hébergement Web