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 :

Gestion de base de données multiples


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 951
    Par défaut Gestion de base de données multiples
    Bonjour,

    mon équipe va probablement devoir recoder entièrement un site souffrant d'une très grosse affluence en pleine saison.

    Utiliser le zend framework nous tente assez, cependant, je me demande comment gérer le fait d'utiliser plusieurs base de donnée (l'ORM n'est pas envisageable, pour des raisons de perf.)

    1/ stocker dans le registre les différentes connections possibles?
    lecture ecriture : session
    lecture ecriture : caddie
    lecture : données métier

    2/faire une factory encapsulant la logique du choix de la connection

    ...


    Qu'en pensez vous?
    comment feriez vous?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 70
    Par défaut
    Bonjour,

    Je ne sais pas si cela répondra entièrement à ta réponse, mais j'ai mis en ligne un système de setup, compatible pour Zend_Config, Zend_Cache, Zend_Db...

    La doc est ici : http://code.google.com/p/zendex/wiki/ZendexSetupFR

    Zendex_Setup n'est pas encore dans le SVN, il le sera ce soir.

    L'objectifi de Zendex_Setup est de pouvori configurer plusieurs connexions, sans pour autant se connecter à toutes les bases de données : en effet, la connexion est faite uniquement lorsque tu souhaite récupérer ta connexion.

  3. #3
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 951
    Par défaut
    Bonjour,

    ta réponse est assez sympa, à analyser.


    Cependant, il me semble qu'il y ait un défaut :

    lorsqu'on instancie une classe se basant sur PDO, une connection a la base est créer. Elle n'est libérée qu'a la destruction de l'objet PDO.

    cf : php.net
    Lorsque la connexion à la base de données a réussi, une instance de la classe PDO est retournée à votre script. La connexion est active tant que l'objet PDO l'est. Pour clore la connexion, vous devez détruire l'objet en vous assurant que toutes ses références sont effacées. Vous pouvez faire cela en assignant NULL à la variable gérant l'objet. Si vous ne le faites pas explicitement, PHP fermera automatiquement la connexion lorsque le script arrivera à la fin.
    Hors, nous sommes partis dans une autre optique, pour le site dont je parle :
    libérer la ressource des que la requête est finit, afin de pouvoir handler le maximum de clients simultanés (le défaut est constitué par des pics de connections imprévisibles)

    Je serait donc partisan, si je devait partir dans une voie similaire a la tienne, de pre-configurer différents types de connections possibles. Via, par exemple, des constantes de classe, dont la valeur correspondrait a un DSN dans un fichier de config ZEND. Et donc, d'encapsuler l'instanciation et la destruction des objet PDO dans une surclasse correspondant aux tiennes.

    C'est pour ça que je parlait de "factory".
    Je ne sait pas du tout si c'est la meilleur solution, mais je partirait dans cette voie.

    qu'en pense tu?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 70
    Par défaut
    Bonjour,

    Je n'ai pas totalement cerné ce que tu souhaites faire :

    Si j'ai bien compris, tu souhaite fermer la connexion à la fin de chaque requête (sql par exemple) ?

    Si oui, je ne suis pas sur que cela soit une bonne solution.

    Je pense qu'il vaut mieux une connexion pour plusieurs requêtes, plutôt qu'une connexion par requête.

  5. #5
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Comme _phoenix_, je pense que cela peut avoir un impact négatif sur les perfs si tu ouvres/fermes plusieurs fois la connexion dans un même php.

    Une piste serait peut-être d'essayer de regrouper tous les traitements BDD en début de php dans la mesure du possible et d'effectuer les traitements ( calculs, affichage ) après avoir refermé la connexion.

    Au final, il faudra peut-être se tourner vers une upgrade matériel pour faire face à l'augmentation de l'activité ( bien mettre en évidence les coûts/gain)

  6. #6
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 951
    Par défaut
    vous m'aviez convaicus, avec vos reponses, cependant, en relisant la doc du ZF, je suis tombé la dessus:
    http://framework.zend.com/manual/en/zend.db.html
    10.1.8. Closing a Connection

    Normally it is not necessary to close a database connection. PHP automatically cleans up all resources and the end of a request. Database extensions are designed to close the connection as the reference to the resource object is cleaned up.
    ok, mais ensuite :
    [Note] Does Zend_Db support persistent connections?

    The usage of persistent connections is not supported or encouraged in Zend_Db.

    Using persistent connections can cause an excess of idle connections on the RDBMS server, which causes more problems than any performance gain you might achieve by reducing the overhead of making connections.
    Et là, un doute m'envahit.

    soit, je comprend mal ce que veut dire "connection persistante"
    soit, j'ai bien compris, et le ZF ferme les connections a la fin de chaque requete.

    donc,
    je vous supplie de m'éclairer de votre savoir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/05/2007, 15h58
  2. Réponses: 5
    Dernier message: 06/05/2007, 14h33
  3. java et la gestion des bases de donnée access
    Par alita dans le forum JDBC
    Réponses: 1
    Dernier message: 24/03/2007, 18h21
  4. Réponses: 2
    Dernier message: 31/05/2006, 14h37

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