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

PHP & Base de données Discussion :

Démon PHP pour ne pas ouvrir de connexion à la BDD systématiquement


Sujet :

PHP & Base de données

  1. #1
    Membre émérite
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2017
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 343
    Par défaut Démon PHP pour ne pas ouvrir de connexion à la BDD systématiquement
    Bonjour,

    le titre le décrit bien mais je ne suis pas expert en PHP et je dois plancher sur une idée. J'ai un script mimant une API écrite en PHP se connectant via ODBC à une base HFSQL. Ce script devra être utilisé sur un serveur distant du server où est la base de données, et l'ouverture de la base prend 10 secondes (c'est un comportement connu, rien de surprenant c'est le pilote ODBC qui réagit comme ça)
    Or à chaque appel API je vais me payer 10 secondes d'ouverture de base.

    Mon idée est que ceux qui ont besoin de requêter la base via leur code PHP le fassent à travers un démon PHP qui conserve une connexion ouverte à la base, ce qui élimine le temps d'ouverture. Est-ce possible, judicieux? Comment contourner cette latence à l'ouverture par un autre moyen?
    Suis preneur de toute idée!

    Merci

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    10 secondes, ça me paraît énorme ! T'es sûr qu'il n'y a pas un problème de configuration ?

    Tu as essayé les connexions persistantes PDO ?

    https://www.php.net/manual/fr/pdo.connections.php

  3. #3
    Membre émérite
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2017
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 343
    Par défaut
    Pour les connexion persistantes PDO, je ne connais pas, je vais plancher, merci.
    Pour les 10 secondes, j'ai demandé au support PC SOFT, et le comportement est normal. Ils m'ont expliqué la raison, le pilote fait des HDéclareExterne sur chaque fichier de la base, donc ok, j'ai compris...et en effet ça peut rien donner de mieux!

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2017
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 343
    Par défaut
    Citation Envoyé par Séb. Voir le message
    10 secondes, ça me paraît énorme ! T'es sûr qu'il n'y a pas un problème de configuration ?

    Tu as essayé les connexions persistantes PDO ?

    https://www.php.net/manual/fr/pdo.connections.php
    Après avoir testé, le premier appel mets 10 secondes, les suivants, 150 ms.
    En distant.
    En local, le premier appel mets 600 ms et les suivants, 40. J'ai remarqué qu'il fallait parfois 2 appels a 10 secondes/600 ms pour que la connexion "vive" réellement et se mette a dispo dans le cache et je ne sais pas pourquoi.

    Donc le gain est impressionnant mais je ne sais pas combien de temps vit la connexion, c'est un paramétrage du php.ini?

    Au début j'avais cette ligne:
    Et elle est devenue cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbh = new PDO($dsn, $user,$password,array(PDO::ATTR_PERSISTENT => true));
    Actuellement le user/mdp reste le même mais la base de données qu'on tape sera différente à chaque appel. C'est déduis d'un token d'authentification. J'en déduis que ça va quand même marcher dans ce cas car le cache de connexions se base sur le user et le mot de passe mais pas sur le nom de la database. Est-ce exact?

    Par ailleurs en arpentant un peu le web j'ai trouvé ça https://qastack.fr/programming/33320...nection-in-pdo
    Qui indique quand même que si on laisse un script en plan sur une erreur de base pendant une transac par exemple, le prochain script qui récupèrera la connexion va avoir un problème. Si quelqu'un a un retour d'expérience sur ça...on pourrait envisager de déclencher des fonctions de vérif avant chaque script pour s'assurer que tout est clean, mais c'est un point non négligeable. Les connexions persistantes n'ont pas l'air d'avoir très bonne presse.

    Et je n'ai pas non plus compris si quand un script réutilise une connexion, il y a réinitialisation ou pas, histoire de garder la connexion mais de ne pas rester sur l'erreur du script précédent, c'est un peu flou.

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Perso, n'ayant jamais utilisé les connexions persistantes, je n'ai pas plus d'infos que celles que tu peux glaner sur le net.

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Pour les 10 secondes, j'ai demandé au support PC SOFT, et le comportement est normal
    PCSoft est plus réputé pour ses pubs oléolé que pour la qualité de ses logiciels

    Pour faire simple une connexion persistante est liée au child process d'apache qui à géré la connexion. Donc tant que ce child process est libre , on réutilise la connexion , par contre si il est utilisé et qu'une autre requête arrive , on ouvre une autre connexion persistante et on reprend 10sec dans les dents. Si tu as un un site à fort traffic et donc de très nombreux sous process apache ca risque de pas améliorer des masses le problème.

    Comme tu as pu le lire les connexions persistantes apportent des problématiques assez lourdes , notamment au niveau des transactions ou des locks de tables qui se répercutent sur les requêtes qui réutiliseront cette connexion. C'est en général pour ca qu'on ne les recommande pas.
    Tu peux en lire un peu plus ici

    Le fait que le temps de connexion soit lié à la complexité de la base est juste inacceptable et devrait être une raison pour passer sur un "vrai" sgbd.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Cliquer pour ne pas ouvrir
    Par BlackoOSX dans le forum Cpcdos
    Réponses: 1
    Dernier message: 27/09/2014, 16h16
  2. Le serveur de rapports ne peut pas ouvrir une connexion
    Par cadabricadabra dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 09/01/2008, 15h28
  3. [Oracle] Problème d'installation de PHP pour la connexion aux données
    Par domray dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/04/2007, 09h26
  4. [Joomla!] Quel script de CMS en PHP choisir pour ne pas se planter ?
    Par PAYASS59 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 04/03/2007, 13h49
  5. Erreur dans un programme php pour une connexion à une bdd
    Par gaetan.tranvouez dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/06/2006, 21h06

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