Nieuwe reacties bijhouden op server i.p.v. cookie

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 07-10 19:59
Mijn grootste punt van frustratie op het forum is dat ik regelmatig reacties mis in topics die ik volg doordat dit wordt bijgehouden middels 1 globale cookie.

Als ik weinig tijd heb en niet alle topics bijlees die een gekleurde ballon hebben dan heb ik bij mijn volgende bezoek geen idee meer waar ik gebleven was met lezen. Ook blijven topics die ik heb bijgelezen op 'nieuw' staan tot de timer in de cookie wordt aangepast. Maar wanneer dat precies gebeurt? Geen idee. Hierdoor mis ik reacties en komt het vooral ook veel voor dat ik reacties dubbel (of driedubbel) lees. Erg onprettig met lezen van het forum.

Ik run zelf een online forum waar we phpBB die op de server bijhoudt waar een gebruikers gebleven is met lezen. De tabel waarin dit wordt bijgehouden is super simpel want deze bestaat alleen uit een paar integers die gebruiker, topic en tijd aan elkaar knopen. Updates en joins zijn daardoor super snel waardoor de performance impact te verwaarlozen is. De logica voor het implementeren hiervan bij posten en lezen van topics is ook geen rocket science :)

Een ander groot voordeel van dit systeem is dat topics die ik op mijn telefoon lees ook op de desktop als gelezen staan gemarkeerd. Daarnaast is een vergelijkbaar systeem prima toe te passen op de frontpage voor nieuws en reacties.

[ Voor 15% gewijzigd door bartvb op 10-03-2017 14:47 ]


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 19:41

Hero of Time

Moderator LNX

There is only one Legend

Lees even Ik heb het even gehad met het Forum, Sessieduur door, want daar gaat het precies om wat je hier beschrijft. ;)

Je laatste stukje is wat warrig, wat bedoel je nou? Want zoals ik 't ken bij phpBB en hier, is dat ze hetzelfde werken. Als je op je mobiel wat leest en je bent na de sessie timeout (staat op een kwartier volgens eerder gelinkt topic) op je desktop, dan weet het ook waar je was gebleven.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 07-10 19:59
Met het laatste stukje bedoel ik vooral dat je in phpBB (als je ingelogd bent en als die feature aanstaat) helemaal niet afhankelijk bent van sessies en dergelijke. De software weet van ieder topic dat je bekijkt wanneer je dat topic voor het laatst hebt geopend. Als je dan iets leest op je telefoon wordt dat bijgehouden op de server. Open je vervolgens de site op je desktop dan zie je precies wat je wel/niet gelezen hebt, helemaal los van sessies e.d.

Maar helder, wist niet dat er een soort van vergelijkbare feature request was. Uit dat topic:
crisp schreef op zondag 3 januari 2016 @ 13:25:
[...]

Een dergelijke feature staat wel op onze eigen wenslijst, de vraag is echter hoe belangrijk dat wordt gevonden ten opzichte van andere (grote) wensen...
Zie dit topic dan als een poging om het hoger op de radar te krijgen :)

Het grootste bezwaar dat ik de afgelopen jaren heb gehoord is performance maar dat punt is echt te verwaarlozen. Al helemaal met de databaseservers van tegenwoordig. En het is ook niet zo dat er miljoenen gebruikers zitten te lezen in miljoenen topics.

En technisch wil ik best helpen met een opzet of het benchmarken van e.e.a. op mijn eigen dataset. In de basis is het echt een relatief eenvoudige feature. Wat het iets complexer maakt is het per forum als gelezen kunnen markeren van alle topics. Ik gebruik die feature zelf echter nooit. Combineren met een 'markeer alles als gelezen' is weer bijzonder eenvoudig.

In grote lijnen de techniek:

- Bij lezen van een topic: user_id, topic_id, read_time opslaan in de database
- Bij bekijken van lijst met topics: Join op tabel met read_times op (user_id, topic_id), de read_time gebruiken voor markeren van gelezen of niet
- Bij bekijken van lijst met topics: read_time achter de URL plakken (gebeurt nu ook al)
- Tabel opschonen bij verwijderen van topic
- Tabel opschonen bij verwijderen van user

Heel veel meer dan dit is het als je niet per forum wil kunnen resetten.

Als je een 'markeer alles als gelezen' mogelijkheid wil geven dan sla je die tijd op in het user object en gebruik je die tijd als deze later is dan de read_time die uit de database komt. Eventueel zou je op zo'n moment ook alle records uit deze tabel kunnen verwijderen van die gebruiker (maar dat is wat pittiger voor de database).

Acties:
  • 0 Henk 'm!

  • Femme
  • Registratie: Juni 1999
  • Laatst online: 09-10 13:33

Femme

Hardwareconnaisseur

Official Jony Ive fan

We hebben deze wens al eens onderzocht. De opslag van de key value paren waarin per gebruiker per topic de tijd van het laatste bezoek wordt opgeslagen is niet ideaal in MySQL. We geven de voorkeur aan de oplossing die asynchroon deze log bijhoudt in een snelle opslag die een efficiënte opruimmethode heeft. Het is niet nodig om de leestijd van hele oude topics bij te houden.

Ik zal de feature-request nog eens onder de aandacht brengen van de devvers om een idee te krijgen van de kosten die ermee gemoeid zijn.

Acties:
  • 0 Henk 'm!

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 07-10 19:59
Klopt, ene andere key/value store is natuurlijk ook een prima oplossing. Is iets complexer (want je moet twee data sources aan elkaar koppelen) maar heeft zeker ook wel wat voordelen.

Voor de beeldvorming de tabel die dit bijhoudt op mijn site (5 integers per row) is ongeveer 16GB (ruwe InnoDB file). Heel erg groot deel daarvan staat wel op disk maar zit niet in het geheugen omdat het idd vrijwel nooit wordt gebruikt. Niet perse nodig om dat allemaal bij te houden, maar wel prettig als een oud topic wordt gekickt. Maar met jullie eens dat dit maar een klein voordeel is. Belangrijkste factor voor ons wat eenvoud van implementatie.

Iig veel dank voor het nog eens bekijken van deze feature!

Acties:
  • 0 Henk 'm!

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 07-10 19:59
Wat overigens al flink zou helpen is als de timer voor wel/niet nieuw losgekoppeld op het forum losgekoppeld kan worden van de rest van de site. Als ik de frontpage of de pricewatch heb bekeken zegt dat niets over het wel of niet gelezen hebben van topics op het forum. Hierdoor mis ik regelmatig berichten. Dit lijkt me een relatief triviale aanpassing met best een grote verbetering in gebruikerservaring?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

bartvb schreef op maandag 27 maart 2017 @ 14:29:
Wat overigens al flink zou helpen is als de timer voor wel/niet nieuw losgekoppeld op het forum losgekoppeld kan worden van de rest van de site. Als ik de frontpage of de pricewatch heb bekeken zegt dat niets over het wel of niet gelezen hebben van topics op het forum. Hierdoor mis ik regelmatig berichten. Dit lijkt me een relatief triviale aanpassing met best een grote verbetering in gebruikerservaring?
De timer voor de 'is-nieuw' indicatie op het forum staat al (nog steeds) los van de rest van de site...

Intentionally left blank

Pagina: 1