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 :

[SQL] Cycle SQL et cache php


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    dcz
    dcz est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 29
    Par défaut [SQL] Cycle SQL et cache php
    Bonjour,

    Je suis en train de developper un petit script pour faire des plans de site Google Sitemaps pour les forums phpBB et je me pose un petite question à propos du format à employer pour mettre en place un système de cache.

    Le problème est assez générale, c'est pour quoi je poste ici.
    L'intérêt d'éviter de lister 5000 éléments sans cache toutes les 3 minutes est assez évident.

    Principe :
    Le script sort une liste d'url (jusqu'à 50 000, mais 5000 est déjà beaucoup).

    Du coup, j'ai découpé l'énorme requête SQL en cycles.
    Disons que l'on configure un cycle de 200 éléments par requête.
    Le script les récupère et les envois directement par echo.

    Du coup, il est assez simple de créer un fichier de cache correspondant à un cycle et de le mettre à jour tous les jours.

    Question :
    Donc, j'ai procédé par étapes. J'ai tout d'abord simplement mis en cache un var_export(), puis un serialize() du résultat de la requête.
    Plus rapide.
    Puis, j'ai carrément essayé de mettre en cache un tableau contenant le résultat mis en forme plutôt que simplement le résultat de la requête SQL, en me disant que c'était toujours ça de moins à refaire.

    Ce qui veut dire que j'ai des trucs comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <url>
    <loc>http://localhost/forums/viewtopic.php?t=6</loc>
    <lastmod>2006-03-16T04:51:31+00:00</lastmod>
    <changefreq>always</changefreq>
    <priority>1.0</priority>
    </url>
    Dans chaque cellule du tableau.

    Les fichier caché sont de cette forme :

    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
    22
    23
    <?php 
    //mx Google sitemaps www.phpBB-SEO.com 
    // Gen Stats : 0.02244 s - 9 sql 
    // datas 
    if ( !defined('IN_PHPBB') && !defined('IN_PORTAL') ) 
    { 
    	die('Hacking attempt'); 
    } 
     $cached = unserialize('a:3:{i:77;s:178:"	<url>
    		<loc>http://localhost/forums/viewtopic.php?t=4</loc>
    		<lastmod>2006-03-16T04:50:19+00:00</lastmod>
    		<changefreq>always</changefreq>
    		<priority>1.0</priority>
    	</url>
    ";i:78;s:178:"	<url>
    		<loc>http://localhost/forums/viewtopic.php?t=3</loc>
    		<lastmod>2006-03-15T22:38:24+00:00</lastmod>
    		<changefreq>always</changefreq>
    		<priority>1.0</priority>
    	</url>
    ";}'); 
     $increment =  50; 
    ?>
    En plus long.

    Et je dois donc ajouter une petit boucle pour afficher les éléments du tableau.

    Et là, c'est semble t il beaucoup plus rapide que de seulement mettre en cache la requête.

    Du coup, je me suis dit qu'il était encore possible d'éviter de faire travailler php en utilisant un cache de cette forme :
    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
    22
    23
    24
    <?php 
    //mx Google sitemaps www.phpBB-SEO.com 
    // Gen Stats : 0.02244 s - 9 sql 
    // datas 
    if ( !defined('IN_PHPBB') && !defined('IN_PORTAL') ) 
    { 
    	die('Hacking attempt'); 
    } 
    ?>
       <url>
          <loc>http://localhost/forums/viewtopic.php?t=4</loc>
          <lastmod>2006-03-16T04:50:19+00:00</lastmod>
          <changefreq>always</changefreq>
          <priority>1.0</priority>
       </url>
       <url>
          <loc>http://localhost/forums/viewtopic.php?t=3</loc>
          <lastmod>2006-03-15T22:38:24+00:00</lastmod>
          <changefreq>always</changefreq>
          <priority>1.0</priority>
       </url>
    <?php 
     $increment =  50; 
    ?>
    Et de simplement l'afficher avec un include, mais quelle n'as pas été ma surprise! Sur une centaine d'éléments, séparés en deux fichiers, c'est deux fois plus long que la première méthode qui emplois pourtant une boucle supplémentaire pour l'affichage et un unserialize dans l'include.

    Alors je me demande si c'est normal, si cela pourrait être différent sur des cache de genre 250 éléments.
    Je pensait que le xml ne serait pas interprété et que l'on ne pouvait espérer aller plus vite. La c'est carrément deux fois plus long d'inclure le deuxième cache que de traiter le second.

    Voilà donc ma question je sais elle est longue, mais cela à gravement titillé ma curiosité donc si vous en êtes à lire la fin de ce message vous avez sûrement un début d'idée

    ++

  2. #2
    dcz
    dcz est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 29
    Par défaut
    Bon et ben après de plus ample tests, il se confirme que l'include de xml "plat" est plus lent que l'include d'un tableau sérialisé, voir c'est même plus lent que le SQL en testant sur 500 éléments en deux cycles, alors que la méthode sérialisée va au moins deux fois plus vite que sans cache.

    Donc j'ai ma réponse sur la marche à suivre, mais je ne comprend toujours pas.

    ++

  3. #3
    dcz
    dcz est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 29
    Par défaut
    lol, en fait, c'est bien ce que je pensait au début, hehe, mon premier cache était bien complet, mais pas en sortie donc, plus rapide c'est clair lol.

    Mais bon, pas si simple de faire la difference entre 1047 et 618 url listé sur un explorateur

    Donc tout est normal.

    ++

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

Discussions similaires

  1. [SQL] Optimiser une jointure dans PHP
    Par Invité dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 11/08/2006, 17h56
  2. [SQL] erreur dans la requette SQL ou dans le code PHP
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 11/07/2006, 21h21
  3. [SQL] requete sql dans php
    Par 18Marie dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 18/06/2006, 22h45
  4. Réponses: 3
    Dernier message: 20/05/2006, 23h28
  5. [SQL] liste deroulante et code php
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/01/2006, 10h00

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