Forum: Thread gelesen - pro User?

DarkRaver

Erfahrenes Mitglied
Hallo!
Ich habe folgende Frage:
In eigentlich allen Forensystemen gibt es ja für jeden User die Unterscheidung von Thread gelesen oder ungelesen, jenachdem ob er es getan hat. Ich bin da auch durch Code studieren nicht hintergekommen, wie diese das gemacht haben. Ich habe vor ein Like-System für z.B. User aber auch andere Dinge zu machen, und da ist eben auch die Frage wie dies gutmöglichst umgesetzt wird, auch mit großen Userzahlen.

Vielen dank schon einmal!
 
Ich weiß nicht, wie es führende Forensoftwareproduzenten gelöst haben, aber ich würde einfach eine simple Tabelle dafür anlegen:
ID (PK) -- ThreadID -- UserID

Eintrag vorhanden = gelesen
kein Eintrag vorhanden = ungelesen

Damit man es nicht immer auslesen muss, sollte man die Informationen beim Login in eine Session/Cookie speichern.

gruß
 
Wenn du es jetzt aber wie hier im Forum lösen möchtest, also dass du siehst, wenn jemand seit deinem letzten Besuch etwas neues geschrieben hat, dann solltest du den Zeitstempel speichern, wann der Nutzer das letzte Mal den Thread besucht hat, und dann mit dem Zeitstempel des letzten Beitrages vergleichen. Ist der Zeitstempel des neuen Beitrages größer, dann sollte der Thread als ungelesen markiert werden.
 
Hi

Ich will ja nicht Spielverderber sein,
aber so eine ThreadXUser-Tabelle erreicht astronomische Größen.

zB. für dieses Forum hier: ca. 48GB pro Byte, den eine Tabellenzeile braucht.
Wenn ein Eintrag aus zwei int32 besteht, kommt man schon auf ca. 400GB.

Kann zwar auch nicht sagen, wie vB das wirklich macht,
aber ein paar Ideen:

Speichersparender wäre zB. etwas Bereichsmäßiges, zB.
User x hat Thread 123-160 und 400-800 gelesen, den Rest nicht.
Ist aber auch aufwändiger zu programmieren
(zB. wenn jetzt 404 aktualisiert wird muss 400-800 in zwei SQL-Zeilen aufgeteilt werden...
umgekehrt ggf. Zeilen zusammenfügen etc.etc.)

Für die Geschwindigkeit vllt. eine Zweittabelle, die die Daten
von den gerade aktiven (eingeloggten) Usern enthält.
Beim Einloggen ggf. User reinladen, dort auch bearbeiten.
Beim Ausloggen zurück.
Bei zB. 30min Inaktivität (Cronjob) auch zurück.

Natürlich sinnvolle Indizes machen (ab und zu cronjobmäßig neu erstellen?) ...

Was Gäste angeht: Den letzten Besuchszeitpunkt per Cookie speichern
und beim nächsten Besuch einfach alles als neu anzeigen, was seitdem entstanden ist.
(Gäste verdienen nichts genaueres :p)
 
Danke für Eure Antworten.
Wie sollten die es beispielsweise mit dem Like-System gemacht haben? Eine Tabelle wer wann wo geliked hat wäre denke ich mal nicht so schön, die Datenbank würde, wie du schon geschrieben hast, einfach zu schnell vollaufen. Hier könnte man denke ich mal ein serialisiertes Array mit userIDs mit in die Datenbank speichern. Ist dies der richtige Weg hier, was denkt ihr?
Und zu dem Forum, wäre auch dies nicht umbedingt der schönste Weg mit Ranges zu arbeiten, hmmm....
Hat vielleicht jemand noch andere Ideen?
 
Ich hab hier eine nette Diskussion dazu gefunden, besonders der letzte Beitrag klingt interessant:
http://www.jex-treme.de/forum/archive/1023405500/thread.html

Allerdings muss ich sagen, die Ideen gehen ziemlich weit...
1) Die Idee von mir
2) Jeder User hat eine Spalte "gelesene Threads" wo die ThreadIDs per Komma getrennt sind: 12,134,251,993,23
3) Per Cookie -> über Array oder so wie in einer Spalte
4) Der letzte Vorschlag, den ich interessant finde, aber noch nicht ganz geblickt hab... nur schnell drüber gelesen

Edit:
so aus meinem Verständnis raus würde ich sagen, dass der letzte Vorschlag eine Art Erweiterung von meiner Kreuztabelle ist.
Dabei geht es darum, regelmäßig Einträge zu löschen, da diese eh als "gelesen" angesehen werden können. (Zum Beispiel alles was über 1 Monat alt ist)
Nach welchem Schema man die Einträge löscht, kann ja jeder für sich entscheiden.

also viel Glück damit!
 
Zuletzt bearbeitet:
Ich habe darüber schon vor Jahren nachdenken müssen. Eine Tabelle mit Einträgen pro User und Thread finde ich problematisch, weil sich das Ding sehr aufblähen wird.

Ich mache es seit Jahren so, dass ich einfach einen Zeitstempel bei jedem Login abspeichere. Wenn sich jemand einloggt, zeige ich ihm alle Beiträge, die nach dem vorherigen Login dazukamen als neu an. Finde, das ist ein guter Kompromiss und leicht umsetzbar.
 
Zurück