Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Fragen / Anregungen zur DP (https://www.delphipraxis.net/29-fragen-anregungen-zur-dp/)
-   -   Caching der Forenbeiträge (https://www.delphipraxis.net/101038-caching-der-forenbeitraege.html)

Valle 7. Okt 2007 14:04


Caching der Forenbeiträge
 
Guten Morgen,

ich habe ein Frage zum Forensystem der DP. Ich habe gehört, dass die Forenbeiträge hier nicht in der bbCode Form gespeichert werden, sondern erst in HTML umgewandelt und anschließend so gespeichert werden. Ich habe eventuell vor, das gleiche Prinzip auch auf mein selbst programmiertes Forum anzuwenden. Dabei stellt sich mir aber eine Frage: Wenn ein User einen Beitrag editieren will, dann editiert er ja auch den bbCode. Wird in der DP dann sowohl die HTML- als auch die bbCode Version gespeichert? Wäre das nicht etwas viel? Wie ist es dann gemacht?

Freue mich auf eine Antwort!

Mit freundlichen Grüßen,

Valle

arbu man 7. Okt 2007 14:22

Re: Caching der Forenbeiträge
 
In der Datenbank liegt der Beitrag als BBCode Text, wenn er dann angefordert wie wird geschaut ob es den Beitrag bereits im Cache (der Cache ist ein Ordner im Dateisystem) gibt und ob dieser Cache gültig ist, wenn das der Fall ist wird der Beitrag aus dem Cache gesendet wenn nicht wird er halt neu erstellt und im Cache gespeichert.

mfg, Björn

Valle 7. Okt 2007 15:11

Re: Caching der Forenbeiträge
 
Vielen Dank erstmal für deine Antwort. Man könnte also sagen, dass im Endeffekt doch alles 2 Mal abgespeichert wird. Wäre es sinnvoll, wenn ich den gerenderten Beitrag bei meinem Forum dann doch in die Datenbank abspeichere? Im Prinzip macht es ja doch keinen Unterschied, ob es in einer Datenbank oder in einer Datei gespeichert wird. Eine Frage noch. Was heißt "ob dieser Cache gültig ist"? Was ist denn ein ungültiger?

Mit freundlichen Grüßen,

Valle

sakura 7. Okt 2007 15:17

Re: Caching der Forenbeiträge
 
Wenn ich mich recht entsinne, dann werden bei uns beide (HTML und BBCode) in der DB gespeichert. Der HTML Code verfällt, wenn der Beitrag (BBCode) sich ändert bzw. wenn dieser das letzte Mal vor 30 Tagen generiert wurde.

Da ganz alte Beiträge nur sehr selten abgefragt werden, könnte man also einen Cron-Job einrichten, welcher alle HTML-Caches älter als 50 Tage oder so einfach löscht. Dann wird die DB wieder etwas entrümpelt.

Falls Du fragst, wieso nur 30 Tage gültig? Einfach, Smilies können sich ändern, Implementierungen einiger BBCodes, etc. Würde man den Cache nicht verfallen lassen, so würden die alten, evtl. fehlerhaften, auf immer und ewig ausliefern ;)

...:cat:...

Matze 7. Okt 2007 15:19

Re: Caching der Forenbeiträge
 
Zitat:

Zitat von Valle
Wäre es sinnvoll, wenn ich den gerenderten Beitrag bei meinem Forum dann doch in die Datenbank abspeichere? Im Prinzip macht es ja doch keinen Unterschied, ob es in einer Datenbank oder in einer Datei gespeichert wird.

Je nach Komplexität der SQL-Abfragen kann ein Zugriff auf die Datenbank deutlich schneller sein als von einer Datei. Je weniger komplex und je weniger die Datenbank rechnen muss, desto schneller (mal abgesehen von den Indizes, denn davon hängt die Abfragezeit hauptsächlich ab).

Zitat:

Zitat von Valle
Eine Frage noch. Was heißt "ob dieser Cache gültig ist"? Was ist denn ein ungültiger?

Theoretisch könntest du ein Feld einfügen, dass beispielsweise den Timestamp enthält, wann der Cache abläuft. Dann könntest du erzwingen, dass er alle paar Tage/Wochen neu erstellt wird. Doch dies ist in der DP meines Wissens nicht so gelöst, doch da bin ich überfragt.


Edit: @Sakura: Es gibt hier noch zahlreiche Beiträge, die die DP-Weihnachtssmilies beinhalten. Daher denke ich, läuft der Cache nie ab.
Edit 2: Der Beweis ;)

arbu man 7. Okt 2007 15:26

Re: Caching der Forenbeiträge
 
Zitat:

Eine Frage noch. Was heißt "ob dieser Cache gültig ist"? Was ist denn ein ungültiger?
Mit ungültig meinte ich sowas wie zu alt, eben wenn die Datei älter als 30 Tage ist, ist Cache ungültig.
Und ja irgendwo wird immer etwas doppelt gespeichert.

mfg, Björn

sakura 7. Okt 2007 15:31

Re: Caching der Forenbeiträge
 
Zitat:

Zitat von Matze
Edit: @Sakura: Es gibt hier noch zahlreiche Beiträge, die die DP-Weihnachtssmilies beinhalten. Daher denke ich, läuft der Cache nie ab.
Edit 2: Der Beweis ;)

Immer diese Pfuscher bei der Implementierung :mrgreen: Gérooooooome!

...:cat:...

Matze 7. Okt 2007 15:35

Re: Caching der Forenbeiträge
 
Zitat:

Zitat von arbu man
Und ja irgendwo wird immer etwas doppelt gespeichert.

Muss nicht sein. Theoretisch konnte man den HTML-Code wieder auf BBCode zurückwandeln lassen. Nur ob das so sinnvoll ist, weiß ich nicht, würde aber gehen. ;)

markusj 7. Okt 2007 16:22

Re: Caching der Forenbeiträge
 
Wer sagt denn, dass die Weihnachtssmileys bedeuten, dass der Cache niemals abläuft? Wäre ja gleich doppelte Speicherplatzverbrauch^^.
Ohne mich mit der Materie allzugut auszukennen würde ich doch vermuten, dass der Cache (der ja in erster Linie häufige Zugriffe abfangen soll, damit die Seite nicht jedes Mal frisch generiert werden muss), ein gewisses Verfallsdatum hat ...
Dass die Weihnachtssmileys noch vorhanden sind, führe ich auf eine entsprechende Implementierung zurück ... man kann ja auf den Time-Stamp zurückgreifen, oder, oder ...

mfG
Markus

Matze 7. Okt 2007 16:30

Re: Caching der Forenbeiträge
 
Zitat:

Zitat von markusj
Wer sagt denn, dass die Weihnachtssmileys bedeuten, dass der Cache niemals abläuft?

Naja im Beitrag schreibt man den Smileycode wie beispielsweise :), doch der Pfad zur eigentlichen Grafik befindet sich im Cache. Und da in Beiträgen von 2005 der Smileypfad der zu den Weihnachtssmileys ist, schließe ich daraus, dass der Cache nicht abläuft. Würde dieser nämlich neu aufgebaut werden, würde der Code :) zu einem Smiley ohne Wintermütze.

Edit: Rund den doppelten Speicherplatzverbrauch hat man beim Cachen sowieso. Nur den Cache zu laden geht schneller, als die Beiträge jedesmal neu zu parsen.

markusj 7. Okt 2007 17:28

Re: Caching der Forenbeiträge
 
Doppelte Widerspruch:
Zitat:

Zitat von Matze
Zitat:

Zitat von markusj
Wer sagt denn, dass die Weihnachtssmileys bedeuten, dass der Cache niemals abläuft?

Naja im Beitrag schreibt man den Smileycode wie beispielsweise :), doch der Pfad zur eigentlichen Grafik befindet sich im Cache. Und da in Beiträgen von 2005 der Smileypfad der zu den Weihnachtssmileys ist, schließe ich daraus, dass der Cache nicht abläuft. Würde dieser nämlich neu aufgebaut werden, würde der Code :) zu einem Smiley ohne Wintermütze.

Wer sagt denn, dass da ein Link auf das Icon von 2005 ist? Es reicht doch schon, wenn der Smiley-Parserteil bevor er den Link auf http://www.delphipraxis.net/images/s...s_icon_sad.gif einsetzt, überprüft, ob das Absendedatum des Posts im Bereicht liegt, in dem die Weihnachtssmileys gezeigt werden sollen ...

Zitat:

Zitat von Matze
Edit: Rund den doppelten Speicherplatzverbrauch hat man beim Cachen sowieso. Nur den Cache zu laden geht schneller, als die Beiträge jedesmal neu zu parsen.

Eigentlich braucht ein Beitrag sogar mehr Platz wie in BBCode-Form (Das ganze HTML-Gedöns aussenrum). Aber insgesamt ist der Cache wohl deutlich kleiner als die restliche Datenbank, sonst währe der Sinn des ganzen, oft benutzte Threads schneller und ressourcenschonender auszuliefern, doch verfehlt und man könnte alle Beiträge gleich als HTML speichern und bei (im Verhältnis zu Views viel seltener vorkommenden) Edits eine Rückkonvertierung durchführen ...

mfG
Markus

Matze 7. Okt 2007 17:34

Re: Caching der Forenbeiträge
 
Hi, ich verstehe nicht, was du meinst. :gruebel:

Zitat:

Zitat von markusj
Wer sagt denn, dass da ein Link auf das Icon von 2005 ist? Es reicht doch schon, wenn der Smiley-Parserteil bevor er den Link auf http://www.delphipraxis.net/images/s...s_icon_sad.gif einsetzt, überprüft, ob das Absendedatum des Posts im Bereicht liegt, in dem die Weihnachtssmileys gezeigt werden sollen ...

Der Weihnachts-Smiley-Link muss doch im Cache sein, denn sonst würde der Smiley nicht angezeigt werden. Der Beitrag wurde 2005 gecacht und meiner Meinung nach seitdem nicht mehr im Cache aktualisiert, daher diese Unterschiede. Im Cache ist der Beitrag komplett enthalten, wie er angezeigt wird, also rein in HTML-Form.

Falls ich dich falsch verstehe, bitte aufklären. ;) Wie man das umgehen kann, also mit dem extra Timestamp beispielsweise, habe ich ja bereits genannt, doch dies ist hier vermutlich nicht der Fall.

Zitat:

Zitat von Matze
Eigentlich braucht ein Beitrag sogar mehr Platz wie in BBCode-Form (Das ganze HTML-Gedöns aussenrum).

Daher schrieb ich "rund". ;)

Sicher können dir das jedoch nur 2 Leute beantworten: [user]Gérome[/user] und Daniel.

markusj 7. Okt 2007 17:53

Re: Caching der Forenbeiträge
 
Naja, mein Gedankengang war ganz einfach:
Vermutung a) Die Smileys sind statisch, ob in einem emulierten Filesystem oder in einer echten Struktur sei mal dahingestellt.
Vermutung b) Ein Cacheeintrag verfällt alle X-Tage
Schlussfolgerung: Der Cache bleibt schön schlank, die Smileys sind immer vorhanden, soll der Parser einen Beitrag, der nicht im Cache ist, abrufen, schaut er auf das Datum und ersetzt dann den Smileycode entweder durch einen Normalen oder eben einen Weihnachts-Smiley.
So bleiben gewünschte Smileys konsistent, während andere Smileys geupdated werden können ... und da die Smileys ja nicht im HTML-Code eingebettet sind, hat für mich der Beitrag erst mal nichts mit dem Code zu tun ... wäre ja ein Wahnsinnsaufwand, jeden Smiley in jedem Beitrag einzubetten ...

mfG
Markus

Matze 7. Okt 2007 18:04

Re: Caching der Forenbeiträge
 
Zitat:

Zitat von markusj
Vermutung b) Ein Cacheeintrag verfällt alle X-Tage
[...]
Schlussfolgerung: Der Cache bleibt schön schlank

Das wäre evtl. sinnvoll, doch es scheint in der DP nicht so zu sein. Da die ganzen Suchmaschinen ständig die DP durchwühlen würde die Datenbank so oder so recht voll mit gecachten Beiträgen sein.

Zitat:

Zitat von markusj
Schlussfolgerung: [...]

Da muss man nicht mal auf's Datum achten, denn wenn der Cache gelöscht werden sollte, dann würden die Parse-Funktionen die Smiley-Codes sowieso durch die aktuell eingestellten ersetzen.
Doch wie gesagt, ein Cache-Timeout scheint es nicht zu geben.

Zitat:

Zitat von markusj
und da die Smileys ja nicht im HTML-Code eingebettet sind, hat für mich der Beitrag erst mal nichts mit dem Code zu tun ... wäre ja ein Wahnsinnsaufwand, jeden Smiley in jedem Beitrag einzubetten ...

Der Originalbeitrag enthält den Smiley-Code, der Beitrag im Cache den zum Zeitpunkt der Erstellung generierten HTML-Code samt Smiley-URL, die damals aktuell war.

TBx 7. Okt 2007 18:09

Re: Caching der Forenbeiträge
 
@markusj & Matze: Was Ihr beide da schreibt, ist beides möglich. Wie es letztenendes funktioniert, kann Euch wohl nur Daniel verraten. Die Diskussion, in die Ihr Euch gerade verrennt, klährt jedenfalls nicht die Ausgangsfrage.

Gruß

Thomas

Daniel 7. Okt 2007 19:49

Re: Caching der Forenbeiträge
 
Ihr denkt alle viel zu kompliziert. *g*

Das Zeuch (die Beiträge) werden direkt nach dem Absenden mit ihren BBCodes in der Datenbank gespeichert, ganz so wie das phpBB vom Haus aus macht.

Bei Abrufen eines Beitrages wird geprüft, ob es für ihn bereits einen Cache-Eintrag gibt. Wenn ja, dann wird dieser herangezogen, andernfalls wird der BBCode geparst, in HTML-Darstellung gebracht und als solcher komprimiert in der Datenbank hinterlegt. HTML-Code lässt sich hervorragend komprimieren, so dass sich da sehr viel Platz sparen lässt.

Es wird gegenwärtig in der Tat ein Zeitstempel mitgeführt, so dass sich für jeden Eintrag im Cache das Alter bestimmen lässt. Im Moment werden dadurch jedoch keine Aktionen veranlasst.

Matze 7. Okt 2007 20:00

Re: Caching der Forenbeiträge
 
So in der Art hatten wir es ja zusammengetragen, nur dass es zusätzlich komprimiert wird, wusste ich nicht. :)

Zitat:

Zitat von Daniel
Es wird gegenwärtig in der Tat ein Zeitstempel mitgeführt, so dass sich für jeden Eintrag im Cache das Alter bestimmen lässt. Im Moment werden dadurch jedoch keine Aktionen veranlasst.

Zitat:

Zitat von sakura
Immer diese Pfuscher bei der Implementierung :mrgreen:

:mrgreen:

Valle 7. Okt 2007 20:33

Re: Caching der Forenbeiträge
 
Danke euch allen!
Ich erlaube mir die Idee mal zu kopieren... :duck: :twisted:

Mit freundlichen Grüßen,

Valle


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz