Thread Sehr lange Thread dynamisch nachladen
(19 answers)
Opened by bianca at 2011-01-07 20:23
da muss ich wohl etwas weiter ausholen...
2011-01-07T21:58:22 bianca selbstverständlich. über die technischen details brauchen wir uns da nicht unterhalten. ich sagte aber doch dazu ein paar dinge. diese lösung skaliert nicht. schau dir den kephra-thread an und stell dir vor, der wär ein baum. wenn du hunderte beiträge hast, dann wird es trotzdem zu viel für eine seite. deshalb muss irgendwann eine lösung her, auch einem baum auf mehrere seiten aufzuteilen. die frage ist nur wie. es geht auch um die performance im background. gäste rufen ja solche langen threads auch auf. das kostet dann auch traffic und cpu. d.h. es muss da auf jeden fall was gemacht werden, und ich mag daher nicht zuerst den aufwand mit dem nachladen machen, wenn es nur teilweise etwas bringt und man das problem durch eine andere lösung auch in den griff kriegen würde. Quote na wie ich schon sagte, man muss einen baum ggfs. auch in mehrere seiten aufteilen können. der thread, den du als beispiel gegeben hast, ist dafür das beste beispiel, denn er ist nicht geeignet für viele teilbäume, der ist eher lang als tief verschachtelt. das skaliert so nicht. Quote ich weiss nicht, ob ich hier in länge und breite nochmal den caching-mechanismus von battie ausführen soll. gegenfrage: wie stellst du dir das forum vor? glaubst du z.b., dass jeder beitrag bei jedem aufruf neu gerendert wird? in einem beitrag gibt es z.b. verweise wie [thread://123]. daraus wird dynamisch der titel geholt und angezeigt. das kostet zeit. bei der anzeige eines threads hole ich mir alles in die richtige struktur in form von objekten und speichere das in einem cache (filecache oder memcached z.b.). bei erneutem aufruf wird die struktur nur herausgeholt, ggfs. kleine änderungen gemacht, die userabhängig sind (z.b. gelesen? ja/nein) und das ganze ans template geschickt. so spar ich mir das erneute aufbauen der struktur aus der flachen datenbank und das rendern von bbcode. der thread wird nur wenige minuten gecacht, aber das ist ausreichend, da der regelfall ist, dass nur wenige aktuelle threads gerade beliebt sind, und bei denen lohnt dann das caching. bei einer wichtigen änderung lösche ich den cache dieses threads explizit. nach demselben verfahren cache ich die beiträge der letzten 24h, die liste der gerade aktiven user usw. usf. Quote sicher. das war ja auch so in der allerersten implementierung. dieser code (und die datenbankstruktur) hat eine kleine änderung erfahren, als ich die teilbäume implementiert habe. seitdem speichere ich pro teilbaum einen timestamp. du siehst, dein vorschlag ist leider schon zu simpel für die teilbäume gedacht. hat man jetzt noch die möglichkeit, den baum in seiten aufzuteilen, reicht auch das nicht mehr, da ein user einen teil zuerst aufrufen kann, der neuer ist. dadurch würde aber dann der ältere teil auch als gelesen markiert sein und man überliest ihn beim nächsten aufruf. es bleibt wirklich nur die speicherung eines timestamps pro user und beitrag statt pro thread. und, ich wiederhole mich, das könnten dann einige datenmengen werden, so dass ich mir überlegen muss, nach welchen kriterien ich solche datensätze nach einiger zeit lösche. für dieses forum wäre sicher alles von der menge her handhabbar, aber ich wills dann auch richtig machen, wenn ich es mache. Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |