Partage
  • Partager sur Facebook
  • Partager sur Twitter

{MySQL} Optimisation

Comme ici :)

    7 mai 2006 à 11:58:17

    Bonjour,

    Je poste ici pour plusieurs choses :) :

    • Comment fait-on un accueil d'un forum de 4 requêtes seulement ? :o Quel genre de requêtes faut-il utiliser ? Quelle synthaxe ?
      Car il faut lister les catégories (1) ensuite dans chaques catégories lister les forums (si il y a 4 catégories par éxemple, 4) et bien sur attreper le nom du dernier sujet + le pseudo du membre par rapport à son ID...
    • Comment peut-on faire un système de cache ?

    ce sont des thèmes sur lesquels je bosse actuellement mais je ne trouve toujours pas !!! :o

    Je m'adresse tout particulièrement aux codeurs du site s'ils ont le temps de me laisser uen chtite réponse ca serait sympa :)

    Mais si d'autres savent comment faire je prend aussi :-°

    Merci d'avance :)

    ++
    • Partager sur Facebook
    • Partager sur Twitter
      7 mai 2006 à 12:03:21

      Les deux mots magiques : UNIONs et JOINTURES :)

      Ce n'est pas difficile de les utiliser, et du passeras de 30 à 1 requête par page ^^
      • Partager sur Facebook
      • Partager sur Twitter
        7 mai 2006 à 12:04:38

        Citation : free-k

        Les deux mots magiques : UNIONs et JOINTURES :)

        Ce n'est pas difficile de les utiliser, et du passeras de 30 à 1 requête par page ^^



        :euh: et comment on utilise ces trucs là ? o_O

        sinon ya pas un autre moyen plus "simple" disons ? :)

        sinon est-ce simple d'utiliser les jointures et les unions ? ^^

        ++
        • Partager sur Facebook
        • Partager sur Twitter
          7 mai 2006 à 12:08:22

          Voilà deux URL qui pourraient t'être utiles :

          http://dev.mysql.com/doc/refman/5.0/fr/union.html

          http://sqlpro.developpez.com/cours/sqlaz/jointures/

          Ce n'est pas difficile. Il suffit d'apprendre comment ça fonctionne, la syntaxe, et après, c'est comme le vélo ^^

          [EDIT]

          Citation : acid_burn

          Edit : Grilled ...



          niark niark niark..</span>
          • Partager sur Facebook
          • Partager sur Twitter
            7 mai 2006 à 12:11:09

            Les 4 requetes de l'accueil du forum du sdz sont :
            • Récupération de la session (information sur le membre, son groupe, etc...)
            • Récupération des amis
            • Mise à jour de la session (date de dernier clic et tout)
            • Récupération des catégories (jointures pour topic, jointure pour post, jointure pour pseudo, jointure pour lu/non lu)

            Les caches utilisés sont :
            • Livre d'or
            • Tuto du moment
            • Fil arianne (le vous êtes ici)
            • Nombre de connectés


            Faire un système de cache n'est pas compliquer, te enregistre le résultat de var_export dans un fichier .php, et tu fais un simple include pour t'en servir.

            Par exemple pour le livre d'or.
            Utilisation :

            require('cache/livredor.php');
            // la var $livredor contient tout (texte, pseudo, etc...)


            Création :

            $res = mysql_query('SELECT les trucs FROM livredor');
            $resultat = mysql_fetch_assoc($res);
            $fp = fopen('cache/livredor.php', 'w+');
            fputs($fp, '<?php $livredor = '.var_export($resultat, true).' ?>');
            fclose($fp);
            • Partager sur Facebook
            • Partager sur Twitter
              7 mai 2006 à 12:14:04

              Pour ta première question, ce n'est pas très compliqué, on peut afficher les catégories et les forums en une seule requète, ils suffit d'utiliser les jointures et ensuite une boucle bien faire =)
              Je te conseille de lire ce sours (à partir de la page 62), normalement tu devrais t'en sortir sans trop de difficultées :)

              Un petit conseil aussi, fais des tests sur phpMyAdmin, il te retourne de jolis tableaux et comme ça tu vois exactement ce que tu récupère, et tu débuggera plus facilement :]

              Pour ta deuxième question, regarde les fichiers cache de n'importe quel forum, en fait ce sont pour la plupart des fichiers php avec des tableaux dedans.
              Au lieu d'aller chercher la configuration de ton forum (nombre de messages par pages, version, nombre de membres etc.) dans ta base de donnée, dans ton fichier "cache" tu met un tableau :

              <?php
              $forum_config = array (
                'version' => '1.42',
                'nb_membres' => '42',
                'mess_par_pages' => '1337',
              [...]
              );
              ?>

              Bien entendu il faut mettre à jour ce fichier, mais sa mise à jour se fait uniquement quand une des infos dedans est modifiée, ce qui reste négligeable (normalement) par rapport au nombre d'affichages d'un page. Il te faudra ton savoir écrire dans un fichier, ce qui n'est pas du tout la fin du monde.

              Voilà, j'espère t'avoir aidé, et n'hésite pas si t'as d'autres questions :)

              @+

              iLUV

              edit : hum... je sens que je me suis fait violemment multi-griller, ça fait mal au rectum...
              • Partager sur Facebook
              • Partager sur Twitter
                7 mai 2006 à 12:25:54

                merci à tous :)

                et aussi à winzou pour son système de cache, tout con mais efficasse ^^ (bah oui, fallait quand même y penser ^^ )

                et dire que e107 a un système de cache qui s'enregistre dans la bdd :-°

                en tout cas merci à tous je vais potasser les tutos que vous avez postés et je vais mettre tout ca en oeuvre ^^

                ++ :)
                • Partager sur Facebook
                • Partager sur Twitter
                  7 mai 2006 à 12:28:12

                  Citation : php5

                  merci à tous :)

                  et aussi à winzou pour son système de cache, tout con mais efficasse ^^ (bah oui, fallait quand même y penser ^^ )

                  et dire que e107 a un système de cache qui s'enregistre dans la bdd :-°

                  en tout cas merci à tous je vais potasser les tutos que vous avez postés et je vais mettre tout ca en oeuvre ^^

                  ++ :)



                  olah malheureux ! ton système de cache tu l'enregistre _aussi_ dans la basse de donnée, c'est très important, imagine que ton petit fichier disparaisse, ou que tu sois à la première installation de ton forum, il faut bien les récupérer quelquepart ces données !
                  Si tu ne sais pas trop quoi prendre comme exemple, regarde punBB, il a la particularité d'être super simple à comprendre.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 mai 2006 à 12:34:50

                    Citation : iLUV

                    Citation : php5

                    merci à tous :)

                    et aussi à winzou pour son système de cache, tout con mais efficasse ^^ (bah oui, fallait quand même y penser ^^ )

                    et dire que e107 a un système de cache qui s'enregistre dans la bdd :-°

                    en tout cas merci à tous je vais potasser les tutos que vous avez postés et je vais mettre tout ca en oeuvre ^^

                    ++ :)



                    olah malheureux ! ton système de cache tu l'enregistre _aussi_ dans la basse de donnée, c'est très important, imagine que ton petit fichier disparaisse, ou que tu sois à la première installation de ton forum, il faut bien les récupérer quelquepart ces données !
                    Si tu ne sais pas trop quoi prendre comme exemple, regarde punBB, il a la particularité d'être super simple à comprendre.



                    mais en fait j'ai mon propre forum, et il est 0 % économique !!! c'est pour ca la V2 du forum va être super-économique mais j'aimerai bien savoir le faire :D

                    sinon, si je fait des jointures et des unions, on doit changer le format de nos table ? en MyISAM par éxemple ?

                    sinon, je revient sur le système de cache qu'il faut mettre dans la bdd : je vais suivre la marche de winzou... le sdz a 250 connectés simultanés en moyenne, et il est super rapide comme ca ! :D
                    puis winzou est un vrai pro franchement :o (mais ca veut pas dire que je te fait pas confiance :) )

                    ++ (de plus je vais commencer les templates c'est sur, plus organisé et ptetre plus rapide... :euh: )

                    edit :

                    J'ai cru comprendre les unions, si j'ai bien compris, je dois sélectuionner par éxemple un sujet et ses réponses, je dois donc faire ca :
                    (SELECT * FROM ns_messages_forum WHERE id='numero sujet' AND type='sujet' AND en_corbeille='0')
                    UNION
                    (SELECT * FROM ns_messages_forum WHERE sujet='numero_sujet' AND type='reponse' AND bloque='0' ORDER BY id ASC)
                    ORDER BY id ASC;


                    et à partir de cette requête je récupère un mysql_fetch_array que j'éxécute dans un while normal :)

                    c'est bien ca ? :euh:
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 mai 2006 à 12:42:12

                      alors déjà winzou c'est une quiche (avec des lardons (roses))

                      Quand je te dis d'enregistrer quand même ta cache dans la base de donnée, ça ne mange pas de pain, et comme c'est une requete que tu feras très rarement, ça ne ralentira pas ton forum du tout.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 mai 2006 à 12:48:31

                        Citation : iLUV

                        winzou c'est une quiche (avec des lardons (roses))



                        toi t'as envie d'avoir des problèmes :lol:

                        justement ce que je veux c'est être dans une optique très stricte : "Moins je vois de query(); dans mon script, mieux je me porte."

                        Donc je préfère la méthode fichier. En plus on m'as dit que le fichier c'est plus rapide que mysql :)
                        Puis aucuns risques que le fichier qoit supprimé, il sera seulement mis à jour, c'est tout :)

                        ++

                        EDIT : Sinon ai-je bien compris les unions ? :)

                        Citation : php5

                        J'ai cru comprendre les unions, si j'ai bien compris, je dois sélectuionner par éxemple un sujet et ses réponses, je dois donc faire ca :

                        (SELECT * FROM ns_messages_forum WHERE id='numero sujet' AND type='sujet' AND en_corbeille='0')
                        UNION
                        (SELECT * FROM ns_messages_forum WHERE sujet='numero_sujet' AND type='reponse' AND bloque='0' ORDER BY id ASC)
                        ORDER BY id ASC;



                        et à partir de cette requête je récupère un mysql_fetch_array que j'éxécute dans un while normal :)

                        c'est bien ca ? :euh:

                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 mai 2006 à 13:04:28

                          winzou pour ton système de cache je ne comprend pas, à quel moment ecris tu dans le fichier ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 mai 2006 à 13:11:55

                            Citation : acid_burn

                            winzou pour ton système de cache je ne comprend pas, à quel moment ecris tu dans le fichier ?



                            je pense qu'il vérifie le timestamp actuel et qu'il le compare au timestamp du fichier (dernière modif). si ca fait plus d'une minute il met à jour le fichier ^^

                            enfin je pense :euh:

                            ++
                            • Partager sur Facebook
                            • Partager sur Twitter
                              7 mai 2006 à 13:13:36

                              Oui c'est ce que je pensais aussi :)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                7 mai 2006 à 13:23:11

                                Bof comme système de cache s'il verifie à chaque minute si c'est changé.
                                Non je pense que le rechargement du fichier se fait a chaque fois que son contenu SQL est modifié.

                                Par exemple le systeme de cache que vous préconisez au niveau de la page (en PHP très très simplifié :D )

                                Page principale :

                                if ($timestamp_actuel >= $timestamp_vieux + 60)
                                {
                                $requete_cache = mysql_fetch_assoc(mysql_query("SELECT * FROM table_livreor"));
                                $fp = fopen('cache/livreor.php', 'w+');
                                fputs($fp, '<?php $livreor = '.var_export($requete_cache, true).' ?>');
                                fclose($fp);

                                include(cache/livreor.php);
                                }

                                else
                                {
                                include(cache/livreor.php);
                                }


                                ou a mon sens ce qui serait plus logique
                                Page principale :

                                include(cache/livreor.php);


                                et a coté dans le formulaire d'ecriture du livre d'or


                                if (isset($_POST['formulivredor']))
                                {
                                // inscription des données dans le livre d'or
                                // [Pleins de requetes php/sql ici]
                                // puis rechargement du cache
                                $requete_cache = mysql_fetch_assoc(mysql_query("SELECT * FROM table_livreor"));
                                $fp = fopen('cache/livreor.php', 'w+');
                                fputs($fp, '<?php $livreor = '.var_export($requete_cache, true).' ?>');
                                fclose($fp);
                                }
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  7 mai 2006 à 13:33:23

                                  Il y a un cron pour le livre d'or et le nombre de connectés.

                                  On écrit dans le fichier "tuto du moment" quand un validateur clic sur "promouvoir ce tuto".

                                  On écrit dans le fichier "fil arianne" euh... quasiment jamais :p (quand on édite une catégorie, mais c'est très rare)

                                  iluv a raison, ca dépend des caches mais généralement quand on écrit dans un cache on écrit dans la bdd en même temps. Le cache ne sert qu'à la _lecture_ (car on lit énormément plus qu'on n'écrit !)

                                  Et normalement on utilise pas de UNION (sauf cas très tordus)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    7 mai 2006 à 13:34:47

                                    Oki merci bon je vais esseyer d'utiliser crontab d'ubuntu pour gerer tout ça ^^
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      7 mai 2006 à 14:39:10

                                      ok, mais je comprend pas le truc :

                                      Citation : _w_inzou

                                      On écrit dans le fichier "fil arianne" euh... quasiment jamais :p (quand on édite une catégorie, mais c'est très rare)



                                      comment peut-on écrire rarement dans ce fichier ?

                                      on change quand même pas rarement de page... le sdz est très actif, donc il doit être fatigué le fichier à force...

                                      ++
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        7 mai 2006 à 14:45:44

                                        bah le cache est écrit une seule fois.
                                        Evidement on le __lit__ souvent, mais lire un fichier c'est instantané (0.1ms sur bart) !

                                        Si tu veux dans ces fichierrs (il y en a plusieurs), il y a le nom des catégories et 2-3 autres trucs. On a besoin de le réécrire uniquement quand on change le nom de la catégorie. Chose qu'on ne fait que très rarement ;)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          7 mai 2006 à 15:08:44

                                          aaa en fait à chaque page on as un fichier différent je comprend mieux :)

                                          mais je ferai pas de fil d'ariane :lol:

                                          sinon je sais toujours pas si mon union fonctionne... étant donnéque ej ne commencerai pas la v2 de mon forum avant quelques semaines je peux pas encore tester ^^ (pas le temps en plus de ca ^^ )

                                          sinon, j'ai essayé de générer une page de 100 news avec des templates, et quand je fais F5 au milieu de la page, ca actualise en restant au milieu, enfin !!! :lol: (cf mon autre sujet là-dessus :-° )

                                          ++, j'ai hâte de commencer cette "version" (qui est soit 2.5 ou 3) de mon site (je pense quand même que c'est 3, même si ca change pas tant que ca...)

                                          PS : ca sort quand les karatemplates ? :p (car je rame avec mon vieux phpLIB qui gère rien... :/ )
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            7 mai 2006 à 16:19:06

                                            Citation : php5

                                            sinon, j'ai essayé de générer une page de 100 news avec des templates, et quand je fais F5 au milieu de la page, ca actualise en restant au milieu, enfin !!! :lol: (cf mon autre sujet là-dessus :-° )


                                            ah ça ça m'intéresse ^^
                                            c'est quoi l'adresse de ton topic où tu cherches comment rester au milieu de la page stp ?
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              7 mai 2006 à 19:02:52

                                              Citation : stargatefan

                                              Citation : php5

                                              sinon, j'ai essayé de générer une page de 100 news avec des templates, et quand je fais F5 au milieu de la page, ca actualise en restant au milieu, enfin !!! :lol: (cf mon autre sujet là-dessus :-° )


                                              ah ça ça m'intéresse ^^
                                              c'est quoi l'adresse de ton topic où tu cherches comment rester au milieu de la page stp ?



                                              ce topic est aux oubliettes dans les pages 100, 150 :-°

                                              le problème n'est pas résolu, mais en faite j'ai trouvé le truc : il faut que ta page soit plutôt rapide à se générer, sinon le navig va croire que c'est une nouvelle page et donc va réinitialiser la page, après, tu met la taille que tu veux (faut pas que ce soit trop long non plus hein :D )

                                              bref, je vais essayer tout vos conseils :)

                                              merci à vous, ++
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                7 mai 2006 à 23:32:56

                                                Citation : php5

                                                le problème n'est pas résolu, mais en faite j'ai trouvé le truc : il faut que ta page soit plutôt rapide à se générer, sinon le navig va croire que c'est une nouvelle page et donc va réinitialiser la page, après, tu met la taille que tu veux (faut pas que ce soit trop long non plus hein :D )


                                                je comprends pas :euh: : il faut qu'elle soit super rapide à charger, et après on met la taille qu'on veut ? c'est là que je pige pas

                                                tu peux ré-expliquer stp ?

                                                merci d'avance ^^
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  8 mai 2006 à 10:54:07

                                                  bh tu peux mùettre une page de 50 Ko si t'as envie, le tout c'est qu'il faut qu'elle s'envoi rapidement !!! :D

                                                  sinon je pige pas les jointures, mysql met des jointures dans tout les sens on comprend pas le sens !!! :o

                                                  ++
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    12 mai 2006 à 18:33:14

                                                    up... :euh:

                                                    je comprend rien aux jointures !!! :o

                                                    juste que si l'on fait :

                                                    SELECT * FROM table1 T1, table2 T2 WHERE T1.id="34" AND T2.message IS NOT NULL;


                                                    on veut sélectionner que si le champ id de la table table1 est égal a 34 et que le champ message de la table table2 est innégal à NULL (rien).

                                                    mais ensuite, je sai spas faire un truc du genre :

                                                    Tu prend le champ MID de cette table, et tu le compare avec le champ ID de la table membre et tu sélectionne l'id et le pseudo du membre ayant le MID renseigné dans la base des messages...

                                                    pouvez-vous m'aider svp ?

                                                    merci

                                                    ++
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    {MySQL} Optimisation

                                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                    • Editeur
                                                    • Markdown