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:
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");
}
}
Kommentar