|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
Salut à tous. Je suis en train de développer un forum pour mon site internet. J'ai cherché un moyen de faire une classification messages lus/non-lus, comme on trouve sur tous les forums modernes. La seule solution que j'ai trouvé est de créer une variable de session pour chaque discussion ouverte. Je m'explique : pour tous les messages, j'utilise bien sur le système de timestamp, je compare le timestamp de la discussion à celui de la dernière connexion utilisateur. Pas de problème question optimisation. Mais si au cours de la visite, l'utilisateur regarde une discussion, elle doit être vu ensuite en 'lu'. Chose impossible avec la seule comparaison de timestamp. Donc, quand l'utilisateur regarde une discussion, une variable session est crée, de ce type : Cependant, j'imagine vite le bordel du serveur si plusieurs utilisateurs regardent plusieurs discussions au cours de la durée de vie de leur session
. Beaucoup de variables de session vont être créer sur le serveur. Donc ma question est : cela est il nuisible pour le confort d'utilisation (le serveur va ramé ?), y a t-il une solution différent pour réaliser ce que je veux faire ?!Merci. |
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() |
Je ne peux pas te dire pour la question des performances du serveur... Je serais tenté de dire que ça ne posera pas de problème, au pire un utilisateur visite quelques dizaines de discussions durant sa session, ça ne fait pas très très gros niveau taille du fichier... Mais bon, un membre plus expérimenté que moi aura sûrement la réponse
Sinon, je ne vois pas trop comment faire d'autre... Peut-être avec une sorte de variables de session dans la db ? Genre quand un utilisateur lit une discussion, tu insère une entrée temporaire dans une table ? Mmmmh... Ca n'a aucun sens, ça revient au même que des variables de sessions, sauf que c'est moins performant Non, à mon avis ta technique va bien
__________________
Wookai
|
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
Bah pour le nombre de visiteur j'en sais rien, ça dépend de la réussite de mon site
|
|
|
00
|
|
|
#4 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Salut
La solution la plus robuste est de conserver l'état pour chaque discussion et chaque utilisateur. Lorsqu'un utilisateur lit une discussion, enregistre en BDD le timestamp, l'id de la discussion et l'id du dernier message affiché, en plus de l'id utilisateur. Ce ne sont que quatre champs numériques. La clef primaire doit être id_thread + id_utilisateur, les deux autres champs étant des informations qui changent avec le temps. Utilise l'instruction REPLACE INTO si tu as MySQL, cela simplifiera les traitements. Un truc à propos de création de sites Web : ne te préoccupe pas des performances si la solution ne te semble pas sincèrement lourde. Tu pourras optimiser quand le site sera prêt, mais l'objectif actuel est qu'il soit prêt
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() |
Salut!
Il me semble bien que la taille du fichier temporaire de la session est limitée. Si tu enregistres trop d'informations, tu vas saturer. La solution est d'utiliser la base de données pour sauver ces informations, comme le suggère Yogui. Cordialement. [EDIT] -> 4ko maximum pour une session |
|
|
00
|
|
|
#6 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Surtout que, d'une session sur l'autre (d'un jour sur l'autre par exemple), ces informations seront perdues si elles ne sont pas mises en BDD...
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() |
C'est juste
La DB me semble donc une bonne solution ! Mais pour un gros forum, est-ce que ça ne fera pas beaucoup de données ? Sauvegarder l'état de chaque discussion pour chaque utilisateur, ça fait beaucoup (produit cartésien des deux tables...) !
__________________
Wookai
|
|
|
00
|
|
|
#8 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Non, fort heureusement, ce n'est pas le produit cartésien des deux tables !
Pour rappel, le produit cartésien de deux tables est chaque tuple d'une table pour chaque tuple de la seconde... Cela inclut tous les champs, alors qu'ici il ne s'agit que de 4 identifiants numériques (taille max chaque : 11).
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
Donc si cette solution est plus adaptée, pourquoi ne pas la mettre en place
Seulement, je ne vois pas vraiment la structure de la table que tu m'as décrites Yogui, pourrais-tu m'expliquer ? Merci |
|
|
00
|
|
|
#10 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Euh, sans avoir ta structure de tables à toi, je vais devoir te donner ma théorie...
thread (id, title) message (id, title, contents, post_date, status, #id_thread, #id_author) user (id, login, password, register_date) message_read (id_thread, id_user, #id_message, read_time)
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
C'est bon merci j'ai compris... enfin. Juste que je comprend pas l'intéret de read_time. En quoi elle pourrait m'être utile ?
|
|
|
00
|
|
|
#12 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
C'est une question d'habitude, toujours mettre un timestamp à tout ce qui est fait en BDD, sinon c'est difficile de faire des stats. Tu n'es pas sans savoir que les statistiques sont un outil fondamental pour un webmestre ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
), donc... C'est horrible, j'ai passé 5 mois à faire le site pour me rendre compte que mon site était nul, et ce n'est que maintenant que je comprend mieux le fonctionnement de Php/MySQL. Tu sais, ce déclic qu'on a, sans savoir pourquoi, mais on comprend bien mieux, on a un meilleur recul, on appréhende plus facilement les problèmes rencontrés. J'ai eu la même chose pour la POO . C'est peut etre ça qu'on appelle l'expérience . Bon je raconte un peu ma vie alors je m'en vais terminer mon forum moi... |
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() |
Au temps pour moi et mon erreur concernant le produit cartésien
Bref, solution à implémenter donc
__________________
Wookai
|
|
|
00
|
|
|
#15 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Si vraiment l'espace nécessaire te préoccupe, tu peux mettre en place un système de suppression des enregistrements concernant les sujets inactifs ou quelque chose comme cela
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() ![]() Inscription : octobre 2005 Messages : 3 398 ![]() |
Je vais implémenter tout ça. Merci beaucoup !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com