Forum Performance

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Forum Performance

    Hallo,

    ich entwickel momentan ein Forummodul für ein Communitysystem und habe da mal eine Frage zur Performance.

    Ich mache es so das ich zu jedem Thema in den Thementabelle die Anzahl der Antworten speicher, zu jedem Forum die Anzahl der Themen/Beiträge. So dauert das schreiben zwar länger weil man mehrere Tabellen updaten muss, das lesen geht aber wesentlich schneller als wenn man jedes mal zu jedem Thema alle Antwortdatensätze liest. So hatte ich es in einem älteren Forum mal gemacht und dort schon performance Probleme.

    Dann habe ich mir mal phpBB angesehen und gesehen das die eben auch die Anzahl der topics/antworten als feste Werte speichern, was irgendwo auch sinnvoll ist weil bei einem Forum ja der Lesezugriff schnell sein muss, der schreibzugriff ist ja eh verhältnissmässig gering.

    Nun habe ich eine Methode die ein neues Thema erstellt und das alleine braucht jetzt 4 Queries, was vorher nur 2 gebraucht hat, ich wollte nur mal fragen ob man das vielleicht doch anders lösen kann, mit weniger queries.

    Wobei jeder normale Seitenaufruf auch mindestens 4 queries ausführt, von daher ist es wohl eher unwichtig, aber da ich in mysql nicht sooo fit bin Frage ich mal, vielleicht kann man ja noch was lernen

    Hier der Code:
    PHP-Code:
    //
        // Neues Thema in DB eintragen
        //
        
    function addtopic() {
            
            
    $this->error $this->tmpl->checkform($this->formular,$this->formular['required'],NULL);
                
            if (empty(
    $this->error)) {
                
                
    //Eintragen
                
    $this->sql->dosql("INSERT INTO
                                                             forum_topics
                                                     SET
                                                             fid      = '"
    .$this->formular['fid']."',
                                                             uid      = '"
    .$_SESSION['uid']."',
                                                             text      = '"
    .$this->formular['topic']."',
                                                             replies= '0',
                                                             last_post_id= '0',
                                                            tstamp = '"
    .time()."'");
                                                            
                
    $topic_id $this->sql->getInsertId();
                
                
    $this->sql->dosql("INSERT INTO
                                                             forum_posts
                                                     SET
                                                             tid      = '"
    .$topic_id."',
                                                             uid      = '"
    .$_SESSION['uid']."',
                                                             text      = '"
    .$this->formular['text']."',
                                                            tstamp = '"
    .time()."'");
                
                
    $post_id $this->sql->getInsertId();
                
                
    //TOPIC last_post_id setzen
                
    $this->sql->dosql("UPDATE
                                                         forum_topics
                                                     SET
                                                             last_post_id = '
    $post_id'
                                                     WHERE
                                                             id =  '
    $topic_id'");
                
                
    //FORUM_ID Topicanzahl erhöhen            
                
    $this->sql->dosql("UPDATE
                                                         forum_id
                                                     SET
                                                             topics            = topics + 1,
                                                             last_post_id = '
    $post_id'
                                                     WHERE
                                                             id =  '"
    .$this->formular['fid']."'");

                
    $this->sql->disconnect();
                
    $this->gotoURL("/index.php?modul=forum&action=show&id=".$this->formular['fid']);
                
            } else {
            
                
    $this->sql->disconnect();
                
    $this->displayErr("error.tmpl.html");
            }
        } 

  • #2
    [...] aber da ich in mysql nicht sooo fit bin Frage ich mal
    ich find's ok

    Kommentar


    • #3
      gibts nen grund, warum du erst "forum_topics", dann "forum_posts" und dann wieder "forum_topics" verwendest, den ich auf die Schnelle übersehen habe. Eine Query könntest du doch sicher sparen.

      EDIT:
      Ja, ich hab ihn übersehen, weil du deine Variablen nicht sauber von den Strings trennst.
      Zuletzt geändert von TobiaZ; 07.10.2005, 10:06.

      Kommentar


      • #4
        Original geschrieben von TobiaZ
        gibts nen grund, warum du erst "forum_topics", dann "forum_posts" und dann wieder "forum_topics" verwendest, den ich auf die Schnelle übersehen habe. Eine Query könntest du doch sicher sparen.
        der grund ist folgender:
        Ich trage das Topic in die Topictabelle ein und hole mir die InsertID damit ich den post in die posttabelle mit der entsprechenden topic id eintragen kann

        Dann Update ich nochmal das Feld last_post_id in der Topictabelle weil ich ja erst jetzt die InsertID des posts habe.

        Oder geht das auch anders ?

        Kommentar


        • #5
          Ist so in Ordnung! Hatte nicht dran gedacht, dass es sich nur auf die neuen Threads bezieht.

          Kommentar


          • #6
            was meinst du mit nicht sauber ?
            '$post_id' besser '".$post_id."' ?

            Ein Kollege meinte mal bei normalen Vars müsste ich sowas nicht machen

            Aber konsequenter und korrekter ist es wohl wenn ich das überall so mache

            Kommentar


            • #7
              Ist ne Auslegungssache des müsste.

              Kommentar

              Lädt...
              X