IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

Quel choix pour de meilleures performances ?


Sujet :

Zend_Db PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    protected $_primary = 'id';
    Et dans mon controller, pour obtenir mon résultat, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    ovh
    ovh est déconnecté
    Rédacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 842
    Par défaut
    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...

    Pensez à consulter les FAQs et les cours et tutoriels.
    FAQ Linux - Cours et tutoriels Linux - FAQ PHP - Cours et tutoriels PHP
    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 !

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 103
    Par défaut
    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.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Par défaut
    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.

    @+

  5. #5
    ovh
    ovh est déconnecté
    Rédacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 842
    Par défaut
    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...

    Pensez à consulter les FAQs et les cours et tutoriels.
    FAQ Linux - Cours et tutoriels Linux - FAQ PHP - Cours et tutoriels PHP
    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 !

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Par défaut
    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

  7. #7
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    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

Discussions similaires

  1. Conseil clé primaire pour les meilleurs performances ?
    Par ites dans le forum Optimisations
    Réponses: 23
    Dernier message: 04/07/2008, 10h36
  2. Taille du transaction.log pour les meilleures performances
    Par Tartenpion dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 25/10/2006, 14h52
  3. [Techno/Langage] Quel choix pour un gros développement orienté objet ?
    Par Neilos dans le forum Général Conception Web
    Réponses: 7
    Dernier message: 18/05/2006, 17h29
  4. Quel SGBD pour de bonnes performances en Insert ?
    Par arthix dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 03/05/2006, 17h48
  5. Quel langage pour une meilleure portabilité Win/Linux
    Par darkervein dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/04/2005, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo