Zur Boardunity Forenstartseite
  #1  
Alt 03.01.2008, 17:21
Benutzerbild von MaMo
Viscacha Coder
 
Registriert seit: 09.2003
Beiträge: 812

Datenbankbasierte Gelesen-Markierung - Konzept


Hi,

ich überlege gerade, wie ich zusätzlich zur Sitzungsbasierten "Gelesen Markierung" (es wird mit dem Timestamp des letzten Besuchs verglichen, tw. sehr ungenau) von Foren und Themen eine Datenbankbasierte Markierung (jeder gelesene Beitrag wird im unperformantesten Fall für jeden Benutzer in die DB geschrieben, sehr genaue Markierung möglich) möglichst performant umsetzen kann. vBulletin hat es auch noch nicht lange integriert und nun wollte ich auch, da es doch nervt, dauernd unzureichende Markierungen vorzufinden. Wer hat Ideen oder kennt Konzepte? Theoretisch könnte ich einfach gucken wie es zB das vB macht, aber ohne Quelltext...?!

MfG MaMo
__________________
Forensoftware mit integriertem CMS: Viscacha 0.8!
  #2  
Alt 03.01.2008, 17:53
weiss meistens was er tut
 
Registriert seit: 11.2005
Beiträge: 427
ich denke ich kann dir guten Gewissens (da es ja auch in der Admindemo zu sehen ist) die ACP Stelle zitieren

Zitat:
1. Basierend auf dem Cookie und Inaktivität - Sobald ein Benutzer eine bestimmte Zeit (Cookie-Timeout) im Forum nicht mehr aktiv war, werden alle Themen und Foren als gelesen markiert. Einzelne Themen werden während einer Sitzung über Cookies als gelesen markiert.

Alle vBulletin-Versionen vor 3.5 verwendeten diese Einstellung.

2. Datenbank (keine automatische Markierung der Foren) - Gelesene Themen/Foren werden in der Datenbank gespeichert. Dadurch ist es möglich, dass gelesene und ungelesene Themen/Foren über einen längeren Zeitraum genau gespeichert werden. Hat man jedoch alle Themen eines Forums gelesen und klickt dann auf die Forum-Startseite, wird dieses Forum immer noch mit dem Symbol für neue Beiträge angezeigt. Erst wenn man das Forum erneut aufruft, wechselt das Symbol zu "Keine neuen Beiträge".

Diese Art erfordert mehr Speicherplatz und belastet den Server mehr, als die Markierung über Cookies und Inaktivität.

3. Datenbank (automatische Markierung der Foren) - diese Einstellung funktioniert genau wie die zweite Variante, jedoch werden dabei die Foren bereits als gelesen markiert, sobald das letzte Thema mit neuen Beiträgen gelesen wurde.

Diese Art ist für den Endbenutzer am praktischten, jedoch wird auch der Server am stärksten belastet.
die Categorie Hierarchy Mod für phpBB2 hat auch ein DB basierendes System, vielleicht interessant für dich

am einfachsten dürfte es doch sein, den Cookie eben im Profil mitzuspeichern und bei Bedarf zurückzuschreiben, statt pro neuer Anmeldung bei 0 zu beginnen - wobei IMO bei phpBB(2) auch dort eine Grenze einbaut wurde, da der User sich ja auch mal 1 Jahr nicht sehen lassen kann, da wird die Menge an Beiträgen schnell gewaltig

  #3  
Alt 03.01.2008, 18:26
Benutzerbild von Karsten Achterrath
Mitglied
 
Registriert seit: 02.2006
Beiträge: 192
Also, eigentlich gibt es ein sehr einfaches, aber dafür sehr Speicher intensive Variante.

Du hast eine neue Tabelle mit userID, theadID und eben lastVisit, wo man einen Timestamp abspeichert.
Das ist aber wie gesagt sehr Speicher intensiv bei vielen Mitgliedern und vielen Themen, da müsste man dann eben eine Zeit einführen wonach ein Thema automatisch als gelesen markiert ist, wenn dort die letzte aktuallierung war. Es gibt aber einige Methoden, das ist eine, die auch noch ein wenig ausgearbeitet werden muss.

__________________
Karsten Achterrath
Die Signatur befindet sich im Offlinemodus, bitte versuchen Sie es später wieder.
  #4  
Alt 03.01.2008, 19:23
Benutzerbild von MaMo
Viscacha Coder
 
Registriert seit: 09.2003
Beiträge: 812
Hi,

danke Titus für den Text vom vB. Den kenne ich schon, er ist leider zu oberflächlich. Mir geht es detaillierter um die technische Umsetzung bzw. Optimierung des speicherlastigen Wegs von Karsten bzw. mir (siehe oben). Den CH-Mod hab ich mir eben kurz mal angesehen, das hab ich nicht so ganz durchgefunden, leider. Weiß zufällig jemand, wo die interessanten Stellen dort sind? Ansonsten muss ich mir das auch mal eingebaut ansehen und nicht so EasyMod mäßig...

MfG MaMo

__________________
Forensoftware mit integriertem CMS: Viscacha 0.8!
  #5  
Alt 03.01.2008, 19:56
Benutzerbild von Karsten Achterrath
Mitglied
 
Registriert seit: 02.2006
Beiträge: 192
Also eine andere zur ganzgenauen ist leider nicht wirklich bekannt, da man ja den User dem Thema zuordnen muss, und der letzte Besuch. Eine Methode wäre, das Themen die älter als 7 Tage aus der DAtenbank geöscht werden und automatisch als gelesen markiert gelten und man, wenn dort was neues kommt, die letzte aktivität denn beachtet und erst von da an wieder in die Datenbank aufnimmt.

__________________
Karsten Achterrath
Die Signatur befindet sich im Offlinemodus, bitte versuchen Sie es später wieder.
  #6  
Alt 06.01.2008, 12:41
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
Wieso macht ihr es euch denn so schwer? Ich hatte das damals bei meiner Foren-Software folgendermaßen gelöst:
Wenn der Benutzer das Forum aufruft, werden alle neuen Themen bzw. Beiträge seit seinem letzten Besuch aus der Datenbank geholt und in einer anderen Datenbanktabelle für diese Session (ich nenne jetzt sie mal session_newposts) gespeichert.
D.h. session_newposts besitzt folgende Felder:
sessionid
postid

Die Einträge in session_newposts werden dann entweder bei Aufruf der entsprechenden, neuen Beiträge oder nach dem Auslaufen der Session (d.h. nach einer Inaktivität von xx Minuten) gelöscht.

Zusätzlich könnte man die Sessions mit der userid versehen, um dem Benutzer zu erlauben, die neuen Beiträge vom letzten Besuch wiederherzustellen. (Es ist sonst sehr ärgerlich, wenn man den Rechner mal für 15 Minuten verlässt und plötzlich alle neuen Beiträge weg sind...) Bei der Wiederherstellung der alten Session denke ich jetzt an eine Art Popup-Fenster, welches beim erneuten Besuch geöffnet wird. Man kann dem Benutzer natürlich auch die ständige Wiederherstellung der jeweils letzten Session erlauben, sodass ungelesene Beiträge erst dann als gelesen gelten, wenn er sie wirklich aufgerufen hat (oder sie explizit als "gelesen" markiert). Dies allerdings mit der Einschränkung, dass ungelesene Beiträge, die nach xx Tagen / Wochen / Monaten nicht aufgerufen wurden, automatisch wieder aus der Datenbank gelöscht werden.

Um die Belastung der Datenbank so gering wie möglich zu halten, würde ich außerdem vorschlagen, dass wenn der Benutzer das Forum lange nicht besucht hat, bei seinem erneuten Besuch nicht alle neuen Beiträge aus der Datenbank geladen werden, sondern nur die der - sagen wir mal - letzten zwei Wochen.

Antwort


Stichworte
-

Themen-Optionen
Thema bewerten
Thema bewerten:

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.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Konzept: Speichern von geparsten Beiträgen Gérome Entwicklung und Konzeption sozialer Software 37 23.08.2005 21:32
Konzept Einfachheit = gut? MrNase Community Management, Administration und Moderation 8 31.01.2004 17:27
"Related Topics" - nach welchem Konzept? Gérome Programmierung und Datenbanken 8 29.01.2004 22:18






1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25