JeuWeb - Crée ton jeu par navigateur
Forums lus/non lus, compromis entre stockage et pertinence - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Forums lus/non lus, compromis entre stockage et pertinence (/showthread.php?tid=4243)

Pages : 1 2 3


Forums lus/non lus, compromis entre stockage et pertinence - Sephi-Chan - 29-07-2009

Bonsoir,

En réfléchissant aux problématiques d'un forum, je me pose quelques questions au sujet de la qualité de l'information concernant l'état lu/non lu d'un message.

Si l'on souhaite une information parfaitement précise, il faudrait établir une table de relation entre une discussion et un utilisateur, cette table contiendrait la date de dernière consultation de chaque sujet et pour chaque utilisateur.

Rien que pour un petit forum comme JeuWeb, ça représente 2 220 utilisateurs, multiplié par 4 558, soit plus de 10 millions d'enregistrement (10 118 760). C'est énorme. Après on peut affiner, ne créer de relation que pour les membres actifs (dont la dernière activité est récente), etc.

Ma question est donc : est-ce qu'une table contenant tant d'enregistrement est-t-elle dangereuse (elle stock 2 entiers (indexés) et un timestamp) ?

Enfin, quelles sont les alternatives suffisamment précises (donc en dehors de la date du dernier passage pour toutes les discussions) ?


Sephi-Chan


RE: Forums lus/non lus, compromis entre stockage et pertinence - Anthor - 29-07-2009

Sujet assez complexe Smile

Pour tarschool, je ne stocke que le dernier message lu par un membre, il suffit donc ensuite de faire un left join sur la liste des topics. Les lignes obsolètes sont supprimés toutes les nuits par CRON.

Pour la liste des forums, je suis un peu plus bourrin, je parcoure la liste des messages du forum jusqu'à trouver un message non lu, mais comme j'utilise APC c'est instantané, et généralement la boucle est stoppé rapidement.

A chaque lecture j'insère une ligne avec le dernier post , le topic et le forum si besoin.


RE: Forums lus/non lus, compromis entre stockage et pertinence - Cartman34 - 30-07-2009

Sephi-Chan, c'est une question ennuteyuse en effet car il y a très peu d'autres alternatives.
Je reviens d'abord sur celle la.
MySQL est fait pour pouvoir gérer des millions d'entrées, ce n'est que eu genant.
Ceci dit plusieurs tables comme celle là provoquerait soit un ralentissement du au proc, soit du à la RAM qui surcharge.
Mais globalement, le nombre d'entrées influence beaucoup moins la vitesse d'exécution de la requete qu'on ne pourrait le penser.

Sinon, sur la base d'un système que j'ai fait pour les commentaires sur certains de mes sites et sur el fait qu'il y a un fichier données par table, tu peux créer des tables dynamique, soit pour chaque utilisateur, soit pour chaque topic, sous pour chaque forum...ca dépend du besoin, car les quantités ne seront pas du tout les mêmes.


RE: Forums lus/non lus, compromis entre stockage et pertinence - Sephi-Chan - 30-07-2009

(30-07-2009, 10:07 AM)IGstaff a écrit : Sephi-Chan, c'est une question ennuteyuse en effet car il y a très peu d'autres alternatives.
Je reviens d'abord sur celle la.
MySQL est fait pour pouvoir gérer des millions d'entrées, ce n'est que eu genant.
Ceci dit plusieurs tables comme celle là provoquerait soit un ralentissement du au proc, soit du à la RAM qui surcharge.
Mais globalement, le nombre d'entrées influence beaucoup moins la vitesse d'exécution de la requete qu'on ne pourrait le penser.

J'ai pu voir ça au boulot, la recherche sur de grosses tables n'est pas un problème, si les colonnes qui servent aux conditions sont indexées (donc en l'occurrence, même la date pourrait être indexée, pas seulement les foreign keys).

Le plus coûteux n'est pas tant la recherche, mais plutôt la création d'un sujet : cela créer une entrée dans la table de relation pour chaque utilisateur (donc beaucoup).

Quand un nouveau message est posté dans la discussion, c'est tout bête : on met simplement à jour la date de dernière activité de la discussion. De même, une fois qu'une utilisateur a lu une discussion, on change la date de dernière visualisation dans sa relation avec le sujet (phrase douteuse…).

Non vraiment, ce qui m'inquiète, c'est l'insertion massive et soudaine dès qu'on crée un sujet : est-ce que la base sera ralentie (si oui, dans quelle mesure et pour combien de temps ?) quand on lui demandera d'insérer 2000 entrées d'un coup ?

Si oui, alors faire en sorte de ne renseigner cette table que pour les utilisateurs qui ont été actifs récemment sera nécessaire, mais l'idéale serait de se passer de cette restriction (dans une optique d'exactitude des données). Les entrées vieilles d'un certain nombre de jours seront effacées régulièrement : si la personne n'a pas été voir le sujet, c'est que ça ne l'intéresse pas.


Sephi-Chan


RE: Forums lus/non lus, compromis entre stockage et pertinence - pascal - 30-07-2009

Est-ce vraiment utile d'un point de vue utilisateur ?

Lorsque je vais sur un forum, je vois :
- soit la liste des derniers messages non lus ( "Nouveaux messages", "Messages d'aujourd'hui" )
- soit dans un forum spécifique les messages non lus

Si je repasse le lendemain, les messages non lus à la visite précédente (ou à celle d'avant) ont disparu. Si je ne les ai pas lus, c'est que les sujets ne m'intéressaient pas. Je ne vais pas explicitement cliquer dessus ou les marquer comme lus pour qu'ils disparaissent de la liste.

Ce genre de système fonctionne bien, même s'il n'est pas strictement exact.

A+

Pascal


RE: Forums lus/non lus, compromis entre stockage et pertinence - Sephi-Chan - 30-07-2009

(30-07-2009, 10:32 AM)pascal a écrit : Est-ce vraiment utile d'un point de vue utilisateur ?

Lorsque je vais sur un forum, je vois :
- soit la liste des derniers messages non lus ( "Nouveaux messages", "Messages d'aujourd'hui" )
- soit dans un forum spécifique les messages non lus

Si je repasse le lendemain, les messages non lus à la visite précédente (ou à celle d'avant) ont disparu. Si je ne les ai pas lus, c'est que les sujets ne m'intéressaient pas. Je ne vais pas explicitement cliquer dessus ou les marquer comme lus pour qu'ils disparaissent de la liste.

Ce genre de système fonctionne bien, même s'il n'est pas strictement exact.

Pourtant, ça en gêne plus d'un, moi y compris.
Peut-être que conserver un système de ce genre en mettant en évidence une liste des messages les plus récents ?


Sephi-Chan


RE: Forums lus/non lus, compromis entre stockage et pertinence - Zamentur - 30-07-2009

oui je crois que c'est la méthode utilisé par fluxbb. Cependant moi çà m'embêtait.

Sinon pour répondre à Sephi à la création d'un sujet il ne faut pas créer une entrée par utilisateur.

Il est beaucoup plus intéressant je pense de faire l'inverse stocké l'id de la dernière réponse lu pour un topic. Ça prend moins de place et en plus on peux se permettre de griser tous les messages jusqu'à la dernière réponse consulté pour faciliter la lecture.

C'est malheureusement une fonctionnalité que j'ai pas encore rencontré mais que j'implémenterai sur Algol quand les trucs plus important seront fait.

NB: avec cette méthode il semble évident que les 2200 utilisateurs n'auront pas lu l'ensemble des 5000 topics soit beaucoup moins d'entrée que ce que tu dis.

Maintenant il est légitime de se poser la question si il est nécessaire de connaitre ce qu'on a jamais lu mais qui date...


RE: Forums lus/non lus, compromis entre stockage et pertinence - Allwise - 30-07-2009

+1 Zamentur. C'est pas la peine de rajouter / updater une entrée systématiquement à la création / mise à jour d'un topic. Si l'user va sur le topic ça lui crée une entrée, sinon ça ne fait rien du tout. S'il n'y a pas d'entrée dans ta table intermédiaire c'est que l'user n'a jamais lu le topic.

Mais +1 Pascal aussi.
Le problème avec ce système c'est que du coup, les gens vont naviguer, lire les discussions qui les intéressent, et quand ils reviendront plus tard, les forums seront toujours marqués comme "non lus" car ils n'auront pas visité les topics qui ne les intéressent pas. Alors qu'en réalité, ils ont lu le forum. Ils seront obligés de cliquer sur "Marquer comme lus" pour que tous les topics soient considérés comme tels et pour que lors de la prochaine connexion, seuls les forums qui contiennent de nouveaux messages s'allument. De même, dans la liste des topics, ceux qui contiennent des nouveaux messages ne ressortiront pas par rapport aux vieux topics qui n'ont pas été lus.

Pour ma part, c'est peut-être une question d'habitude car c'est le système employé partout, mais je trouve plus pratique de connaître les nouveaux messages depuis ma dernière connexion que tous les messages que je n'ai pas lus et dont je me tamponne le coquillard.

90% de l'activité d'un forum se passe sur les topics en première page. Les autres, les gens n'y atterrissent principalement que par les recherches, mais comme on le sait tous, très peu de gens prennent la peine d'effectuer une recherche avant de créer un topic... Donc les vieilles discussions, je dirais que c'est même pas la peine d'y penser. Tu pourrais activer ton système pour les topics dont la création remonte à J-x jours, et purger ta table des relations régulièrement avec une tache CRON.

Ce que tu pourrais faire en revanche, c'est permettre de mettre des discussions en favoris pour qu'elles ressortent visuellement dans la liste des topics.


RE: Forums lus/non lus, compromis entre stockage et pertinence - Morningkill - 30-07-2009

(30-07-2009, 11:23 AM)Allwise a écrit : Pour ma part, c'est peut-être une question d'habitude car c'est le système employé partout, mais je trouve plus pratique de connaître les nouveaux messages depuis ma dernière connexion que tous les messages que je n'ai pas lus et dont je me tamponne le coquillard.
Presque partout.
Le probléme, c'est que j'ai pas toujours le temps de lire d'un coup tout ce qui m'interesse.
Avec ton systéme, je l'ai dans l'os : je lis deux messages, et tout est marqué lu.
Alors qu'avec le systéme ici présent, je peux lire deux messages, et revenir plus tard sur la liste.
Y a un forum ou je ne vais plus parceque j'ai trop de messages a lire d'un coup, et du coup, j'en ai encore plus à lire, et donc cest encore pire Smile


RE: Forums lus/non lus, compromis entre stockage et pertinence - Sephi-Chan - 30-07-2009

Au vu de ce que vous dîtes, vos besoins différent beaucoup. Il faut que je trouve un système adapté à JeuWeb. Quel comportement préférez-vous vis à vis des nouveaux messages, sur ce forum ?

En ce qui me concerne, une liste des X derniers messages me conviendrait très bien. Le lu/non lu ne me sert pas à grand chose, vu que je consulte généralement JeuWeb avec la page Nouveaux messages.


Sephi-Chan