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 :

Exécuter plusieurs requêtes parallèlement


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 15
    Par défaut Exécuter plusieurs requêtes parallèlement
    Bonjour,

    J'ai un serveur php mysql. Et une application web dont les declencheurs appellent des scripts php via ajax. Tout ce passe bien, je peux me connecter à la bdd mysql via pdo, et mes script Ajax lance des script php et retourne des valeur json.

    je veux créér un dashbord dynamique, c'est a dire un ensemble de vue leger sur une seule pagem qui se rafraîchit toutes les 20s. J'ai donc des script JavaScript qui font des appels Ajax et récupérent les données et renseigne des champs via leur id.

    Le problème est que les différents script Ajax se font successivement et non en parallèle, c'est a dire que ces script font un appels Ajax, récupérent les données JSON, pendant ce temps les autres appels Ajax attendent. Hors je veux que chacun se lance et lit sa table puis affiche les données sans faire attendre les autres.

    En plus pendant que le dashboard se rafraîchit seul, je dois pouvoir faire des recherche sur une autre table, mais cette opération attends que toutes les opérations Ajax précédent soit terminé, donc ma requete Ajax tourne jusqu'à ce que les autres aient terminé.

    Comment faire de sorte à ce que je travail de manière fuilde sans attendre surtout ? j'ai tout essayé depuis 1 semaine. Svp de l'aide, merci.

    PS : je pensais au thread, mais vu que c'est une application web.
    PS: est ce une configuration supplementaire du serveur apache? ou des modules PHP? si oui merci de m'aider

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 704
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 704
    Par défaut
    utilisez vous des sessions dans le code php ?
    les sessions utilisent un fichier de verrou qui fait qu'une session php est ouverte seulement quand celle de l'autre script a été fermée.

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 360
    Billets dans le blog
    17
    Par défaut
    La piste de Mathieu est la bonne.

    La solution est, pour chaque script, de libérer le verrou du fichier de session plus vite en fermant la session au plus vite. Ainsi les traitements parallèles pourront être lancés rapidement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
     
    session_start();
     
    // ... On fait ce qu'on a à faire avec la session
     
    if (!isset($_SESSION['user']['is_connected'])) {
        header('HTTP/1.0 403 Forbidden');
        exit;
    }
     
    // On ferme la session au plus vite
    session_write_close(); // Ferme la session, mais ne la détruit pas
     
    // Traitements longs...
     
    require_once __DIR__ . '/path/to/header.php'; // Inclusion de PDO
     
    $sql = 'SELECT ALL ...';
     
    // ...

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 15
    Par défaut
    oui j'utilise des session PHP. En fait l'application possede un page d'authentification, et quand le user et pass sont bon, une session est initiée et reste ouverte jusqu'a ce que l'utilisateur clique sur deconnecter.
    Merci à vous de prendre le temps de m'aider.

    Mais si je ferme la session, l'utilisatur retournera à la page d'authentification (j'ai ecrit mon script php ainsi, c'est un fichier qui test si un session est cree, avec une valeur donné, sinon affiche la page d'authentification).

    Mais je vais tenter le script ci-dessus, et enlever la redirection vers la page d'authentification pour voir deja.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 15
    Par défaut
    Ah desole j'avais pa bien lu, la fonction session_write_close(); ferme la session, mais ne la détruit pas, ok j'essaie en ce moment.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 15
    Par défaut
    Seb et Mathhieu, vous étiez ou depuis longtemps
    Vous avez identifié et resolu mon probleme en quelque posts, j'ai souffert pendant 1 semaine.
    Pause: svp expliquez moi SVP que je comprenne la logique de ce truc. Donc quand une session PHP est active, alors PDO aussi attend que cette session soit liberée?

    Merci les gas, vraiment merci.
    PS: je peux utiliser dans tous les cas ce session_write_close ou alors c'est juste avant les requete de base de données?

    AUSSI session_write_close DOIT TOUJOURS ETRE PLACE AVANT LA REQUETE SQL OU PEUT IMPORTE L'ENDROIT? (JE VAIS TESTER CA EN ATTENDANT VOTRE REPONSE)

    Je mettrais le sujet à resolu après que vous m'ayez eclairé encore.

    MERCIIIIIIIII

  7. #7
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 704
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 704
    Par défaut
    la session n'influe pas sur une requete sql par exemple mais elle met en pause les autres scripts qui veulent lire une session.

    par défaut la session est fermée à la fin de l'exécution du script mais dans votre cas, vous pouvez améliorer le système en fermant la session dès que vous n'avez plus besoin de modifier une valeur.
    au moment de l'appel à "session_write_close", cela va libérer le verrou global et donc un 2e script qui est train de s'exécuter (et qui est pause au niveau de "session_start") va être libéré et pourra s'exécuter en parallèle.

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 15
    Par défaut
    je ne voulais pas mettre session_write_close(); avant chaque requete SQL utilisée dans plusieurs fichiers, donc dans ma page d'authentification qui teste si l'utilisateur a ouvert une session, j'ai mis ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //code de test si l'utilisateur a ouvert une session: si non redirige vers la page authentification
     
    //au cas ou il a ouvert une session, j'appelle la fonction
    if(isset($_SESSION["is_auth"])){
       session_write_close(); // Ferme la session, mais ne la détruit pas
    }
     
    //arrivé ici il a ouvert une session et session_write_close est appele, alors je parse l'URL pour rediriger vers la bonne fonction
    le fichier ou se trouve ce code est le fichier ou les requetes http arrivent avant d'etre routé vers la bonne fonction, du coup je peux centraliser les tests de session, par exemple.

    J'espere que ca ne posera pas un quelconque soucis apres, car je l'avoue je ne sais pas si j'utilise bien (et là ou il faut ) cette fameuse fonction session_write_close.

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 360
    Billets dans le blog
    17
    Par défaut
    PS: je peux utiliser dans tous les cas ce session_write_close ou alors c'est juste avant les requete de base de données?
    Il faut utiliser session_write_close() dès que tu n'as plus besoin de modifier tes valeurs de session.
    Pour optimiser la réactivité côté client, il faut donc appeler session_write_close() au plus vite, et surtout avant tout traitement long.

    La doc https://www.php.net/session_write-close :

    Termine la session courante, après avoir stocké les données.

    Les données de session sont généralement stockées à la fin de votre script, automatiquement, sans besoin d'appeler explicitement session_write_close(). Mais durant toute l'exécution du script, les données de session sont verrouillées en écriture, et un seul script peut opérer sur la session en même temps. Lorsque vous utilisez des frames avec des sessions, vous vous en rendrez compte en voyant les frames se rafraîchir les uns après les autres. Vous pouvez réduire le temps de calcul de ces pages en refermant la session aussitôt que possible, ce qui libère les données pour les autres scripts.

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 360
    Billets dans le blog
    17
    Par défaut
    donc dans ma page d'authentification qui teste si l'utilisateur a ouvert une session, j'ai mis ce code
    Cela signifie qu'après la vérif de l'authentification tu ne peux plus modifier tes variables de session (les modifs ne seront pas sauvegardées).
    Je ne pense pas que tu veuilles cela.

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 15
    Par défaut
    Ok, maintenant que vous avez explique, je comprends que je dois l'utiliser quand je n'aurai plus besoin d'ecrire (pas lire) des variables de sessions.
    Donc il faut que je repere les endroits ou l'endroit ou je n'ai plus besoin d'ecrire dans des variables de session et j'appelle la fonction session_write_close.

    Dans ce cas, juste apres l'authentification, je ne fais que lire mes données de session.

    Mais est il possible et recommandé d'utiliser session_write_close avant un gros script et de le reactiver apres le script (par exemple une boucle monstre) ?
    c'est ma derniere question.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /*enregistre la session*/
    session_write_close();
     
    //code gourmand executé
     
    /*besoin de sauvegarder un resultat apres le code gourmand/
    session_start();
    $_SESSION["v1"] = $data;

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

Discussions similaires

  1. Composant qui exécute plusieurs requêtes
    Par sinoun dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 10/06/2015, 16h13
  2. comment exécuter plusieurs requêtes ensemble avec Pentaho
    Par bfelicien2000 dans le forum Pentaho
    Réponses: 0
    Dernier message: 01/12/2010, 18h31
  3. Exécuter plusieurs requêtes à la suite
    Par FrenchFrogger dans le forum Sql*Plus
    Réponses: 2
    Dernier message: 14/10/2008, 20h16
  4. [Oracle] Exécuter plusieurs requêtes (block) en PHP vers Oracle
    Par hshamsan dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/04/2008, 10h42
  5. Exécuter plusieurs requêtes en même temps
    Par k_boy dans le forum Bases de données
    Réponses: 9
    Dernier message: 21/02/2008, 13h51

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