AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Neue Beiträge in Threads

Ein Thema von Valle · begonnen am 26. Nov 2007 · letzter Beitrag vom 26. Nov 2007
Antwort Antwort
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#1

Neue Beiträge in Threads

  Alt 26. Nov 2007, 12:25
Guten Morgen,

ich habe seit einiger Zeit ein eigenes Forum (in PHP) und möchte es jetzt ein wenig optimieren. Wir haben mittlerweile 3000 Posts in 250 Threads und man merkt, dass die Datenbank langsam aber sicher überfordert wird.
Mein Problem ist, die Anzeige von neuen Posts. Ich habe in der User-Tabelle eine Spalte hinzugefügt, in der jeder Thread mit seinem letzen Update (letzten Post) via CSV gespeichert ist. Sieht dann ungefähhr so aus:

Code:
ID:Timestamp,...
35:2735907,26:0873593,92:8620735
Prinzip sollte klar sein, wenn nicht, einfach fragen. Das ganze geht, wie ich es hätte vorher wissen sollen, enorm auf die Performance. Außerdem verlangen meine User nach einer Möglichkeit, alle Themen als "Gelesen" zu markieren, was aktuell natürlich etwas lastig für MySQL ist.
Wie kann ich das jetzt am besten anstellen? Wie hat es denn die DP oder andere Foren gemacht? Ich möchte mich jetzt nur extrem ungern in andere Forensysteme einarbeiten...

Danke für eure Hilfe!

Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Neue Beiträge in Threads

  Alt 26. Nov 2007, 13:19
bei richtigem Schema und Indizes sollte eine derartige Redundanz überflüssig sein
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#3

Re: Neue Beiträge in Threads

  Alt 26. Nov 2007, 13:20
Zitat von Valle:
Wie hat es denn die DP oder andere Foren gemacht?
Unter der Haube der DP werkelt immernoch ein - wenn auch ziemlich aufgemotztes - phpBB.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#4

Re: Neue Beiträge in Threads

  Alt 26. Nov 2007, 13:30
Stichwört ist wohl Caching.

Ein Forum ändert sich eigendlich kaum. Es wir eigendlich fast nur lesend drauf zugegriffen.
Daher kannst du die Seiten prima Cachen.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Neue Beiträge in Threads

  Alt 26. Nov 2007, 13:47
hm.
Wenn ich das Problem richtig verstehe, geht es doch um die server-seitige Kennzeichnung, welcher Beitrag gelesen wurde und welcher nicht. Das ist doch gerade ein hoch-dynamischer Bereich in einem Forum.

Deine Architektur hierfür ist suboptimal. 3.000 Beiträge sollte jede Datenbank (die diesen Namen verdient) locker wegschnupfen. Rauf und runter.

Nach Deinem Ansatz musst Du mit jedem neuen Beitrag / Thema die komplette User-DB neu schreiben, um diesen Timestamp festhalten zu können. Aber warum? Halte doch einfach in jedem Thema den Zeitstempel der letzten Editierung / des letzten Beitrages fest. Und wenn es dann in der Themenliste um die Anzeige geht, vergleichst Du diesen Zeitstempel mit dem Datum des letzten Besuches des Users und hast das, was Du im Moment auch schon hast, deutlich einfacher erreichen können. Aber auch das ist nur eine grobe Abschätzung der gelesenen / ungelesenen Beiträge.


Insgesamt ist diese Angelegenheit ein wenig tricky, wenn sie mit wenigen Ressourcen auskommen soll, was bei Foren-Systemen fast immer der Fall ist. Greife Dir mal beispielsweise ein phpBB 3 und schaue, wie das dort gelöst ist. Du wirst auf eine nennenswerte Menge an Code stoßen, die sich um diese Aufgabe kümmert. Aber wenn Deine User ein zuverlässiges System haben wollen und Du etwas lernen möchtest, ist das Studieren von bereits existierenden Lösungen nicht verkehrt. Andernfalls nimm' einfach eine fertige Lösung und passe sie Deinen Erfordernissen an. Ich würde heute keine eigene Foren-Software mehr schreiben wollen.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Neue Beiträge in Threads

  Alt 26. Nov 2007, 14:06
Sers!

Hast mich doch tatsächlich dazu gebracht in den Sourcen meines PHPBBs (mit installiertem Categories Hierarchy Mod) nachzuschauen... scheinbar is es dort so gelöst, dass die Daten, ob ein Topic schon gelesen wurde, in Cookies gespeichert werden (irgendwie abhängig vom letzten Besuchsdatum). Genauer hab ichs mir allerdings nicht angeschaut, da ich grad nicht schlau aus dem Code wurde...
Es würde aber erklären, warum mein Forum Probleme mit der Anzeige der ungelesenen Topics hatte, als ich die Einstellungen der Cookies verhunzt hatte

Für genaueres würde ich dir - wie Daniel auch - empfehlen in den Sourcen fertiger Forensoftware zu schauen, wie die das gelöst haben...
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#7

Re: Neue Beiträge in Threads

  Alt 26. Nov 2007, 14:57
Zitat von Daniel:
Deine Architektur hierfür ist suboptimal. 3.000 Beiträge sollte jede Datenbank (die diesen Namen verdient) locker wegschnupfen. Rauf und runter.
Irgendwie ist das in dem Zusammenhang etwas widersprüchlich. Die 3.000 Beiträge sind für die Datenbank natürlich nichts, das meinte ich damit auch nicht. Es ging mir um meine Art, zu speichern, ob ein Thread seit dem letzten lesen sich geändert hat. Dabei muss der String in einer bestimmten Spalte in der User-Tabelle mit 2 Explode's auseinander genommen werden. Das übernimmt PHP für mich. Ach, was rede ich, ein Code sagt mehr als 1000 Worte.

Code:
if (!isset($_SESSION['id'])) return false;
$readen = explode("|", $_SESSION['threads_readen']);
foreach ($readen as $r) {
  $e = explode("-", $r);
  if ($e[0] == $thread) {
    return ($e[1] < $update);
  }
}
return true;
Dieses Prinzip kann auf Dauer nicht gut gehen. Ich werde eurem Vorschlag, mir mal andere Forensysteme genauer anzuschauen nachgehen, auch wenn ich schon ahne, auf was ich mich da einlasse.

Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Neue Beiträge in Threads

  Alt 26. Nov 2007, 15:18
Was hältst du davon das Datum des letzten Besuches zu speichern (bzw. des letzten Seitenaufrufs, bei dem man eingeloggt ist) (pro User natürlich ) und dann dieses mit den Daten (hier: Mehrzahl von Datum) der Posts zu vergleichen. Wenn das Datum eines Posts jünger als das des Besuches ist, is der Beitrag neu bzw. in dem Topic was hinzugekommen.

Das müsste doch viel einfacher zu bewerkstelligen sein. Sicher is es nicht das Gelbe vom Ei, aber vermutlich schneller...
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz