IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Cookies] Développement d'un forum : Pb de sujet lu ! [FAQ]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Par défaut [Cookies] Développement d'un forum : Pb de sujet lu !
    Bonjour,

    J'ai développé mon propre forum sur mon site.
    Cependant je suis confronté à un problème :
    Je souhaite pouvoir informer le membre des nouveaux messages sur un sujet.
    J'ai donc crée une table associant le membreID et le sujetID. Lorsque j'affiche la liste des sujets, je regarde si le membreID est présent avec le sujetID. Si il est présent cela signifie qu'il n'y a pas de nouveaux sujets, sinon cela signifie qu'un nouveau message a été posté.
    De plus lorsque qu'un message est posté sur un sujet, cela efface toutes les entrées comportant le sujetID.

    Le problème est que ma table comporte maintenant plusieurs millions d'enregistrements ce qui devient difficile à gérer et cela ralenti les requetes.

    Avez vous une autre solution pour gérer ce genre d'evenements ?
    Comment fonctionne phpBB pour gérer ça ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut
    Tu peux essayer de mettre un index sur ta table si ce n'est pas déja fait pour améliorer les perfs.
    Après je ne sais pas comment phpBB gère celà, tu peux essayer de limiter la fonctionnalité à la première page de ton forum ou revoir ton système.
    Perso je chargerai en session la liste des nouveaux messages pour l'utilisateur en considérant nouveaux sujets les sujets ayant eu une réponse depuis la dernière date (et heure) de connexion de l'utilisateur.
    Ensuite j'effacerai les id des nouveaux sujets de la session au fur et à mesure des consultations de l'utilisateur.

  3. #3
    Membre émérite Avatar de KibitO
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 616
    Par défaut
    Ah bah ça, je ne sais pas comment fonctionne phpBB en détail (surtout depuis leurs versions récentes), mais moi le fait de compter le nombre de post depuis le dernier message du membre me semblait le plus simple.

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 680
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 680
    Par défaut
    phpBB stocke ces informations de la façon suivante :
    - la date de dernière conenxion est stockée pour chaque personne
    - à la connexion, phpBB récupère toute la liste des nouveaux messages posté depuis la dernière connexion pour les marquer "non lu"
    - au fur et à mesure que les messages sont lu ils sont oté de la liste

    Il y a un inconvénient mais c'est le prix à payer pour ne pas surcharger la base : si tu te déconnectes les sujets que tu n'as pas encore lus passent quand même en "lu"

  5. #5
    Membre émérite Avatar de KibitO
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 616
    Par défaut
    C'est exactement ce qu'il se passe ici même et c'est assez rageant

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Par défaut
    J'avais essayé ce système d'enregistrer uniquement la date de dernière connexion mais c vrai que c un inconvient de marquer les sujets lus même si ils ne sont pas lu.

    Mais je crois que je vais quand même prendre la solution phpBB car ca me semble être le meilleur rapport poids de la base / fonctionnalité.

    Il aussi les forums genre hardware.fr, j'ai l'impression que leur système fonctionne bien, est ce que quelqu'un sait comment il fonctionne ?

    Merci en tout cas pour vos réponse

  7. #7
    Membre émérite Avatar de KibitO
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 616
    Par défaut
    Les sytèmes de drapeaux ? C'est vrai que c'est GENIAL

    Mais je n'ai pas réfléchi à comment ça pouvait se faire pour l'instant

    Ce doit être une sorte de marque page qui se reconnait à un INTEGER dans une association entre le message et l'utilisateur.
    (0=pas lu, 1=lu, 2=lu avec nouveaux messages etc.)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 40
    Par défaut
    salut

    je fais aussi un forum pour un site. je mets tout dans un cookie histoire de ne pas surcharger la base d'infos inutiles. Par conséquent il faut accepter les cookie pour avoir les drapeaux.

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Par défaut
    Salut,

    Comment stockes tu ces infos dans le cookie ?
    Est ce que tu stockes uniquement la date de derniere connexion ou tous les sujets lus ?

    Merci

  10. #10
    Membre émérite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Dans un cookie ? Et bien, je pleins les utilisateurs, s'ils doivent uploader 4Ko de données pour chacune des pages du forum, ça doit pas être très réactif.

    Pour ma part j'ai opté pour un système similaire à celui de Gwipi : j'ai une table contenant l'ID du membre, l'ID du sujet, ainsi que le nombre de messages lus dans celui ci. Le fait de n'avoir pratiquement aucune suppression dans cette table semble apporter un léger gain de perfs.
    Les seules suppressions prévues, seront faites en masse : par exemple pour tous les sujets dont le dernier message date de plus de 2 mois, j'efface les infos correspondantes dans cette table.

    S'il y a beaucoup d'accès concurrents, peut être faudrait il regarder du coté des tables InnoDB... qui sont censées gèrer ça beaucoup mieux.

    Coté PHP, pour optimiser les performances, je procède ainsi :
    - quand l'utilisateur arrive sur une listant les sujets, j'interroge la table pour les 30 sujets d'un coup ; c'est à dire en une seule requête.
    - je gère également un petit cache en session : je conserve les infos des 500 derniers sujets. Ainsi la table n'est pas interrogée trop souvent.
    - lorsque le visiteur consulte un sujet, je compare le nombre de message du sujets à celui stocké en session. Ainsi je ne mets à jour la table que si necessaire.

    Ca marche plutot bien, mais je n'ai pas un "gros" forum non plus... La table en question contient seulement 50'000 enregistrements actuellement.
    Il faudrait peut être regarder comment procède Phorum... il me semble qu'il gère ça assez bien.

  11. #11
    Membre chevronné
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par défaut
    Tu peux passer par la base de donnée pour stoquer les messages, lus, c'est ce que je fais pour mon forum, certes ca créé une table avec des dizaines de milliers d'enregistrement, mais au moins tu peux te déconnecter a volonté ca garde en mémoire les messages
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  12. #12
    Membre émérite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    dark_genova : c'est déjà ce qu'il fait, son problème est maintenant le nombre d'enregistrements.
    Le problème est que ma table comporte maintenant plusieurs millions d'enregistrements ce qui devient difficile à gérer et cela ralenti les requetes.

  13. #13
    Membre chevronné
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par défaut
    Ah oui effectivement j'aurais du mieux lire ...

    Disons que dans ce cas il peut optmiser ses requètes, par exemple sur mon forum je ne prend que les nouveaux messages depuis 7 jours a partir de la date de derniere connexion, ce qui élimine une grosse partie inutile des messages.

    De plus il faut penser a faire un script permettant de la vider de temps en temps car certains topics sont entérés ...

    Penser a mettre des index (j'ai testé avec et sans index, et clairement mettre un index optimise de plusieurs fois le temps d'éxécution de la requète).
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  14. #14
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Par défaut
    Hello,

    Mettre des indexs, c'est absolument indispensable.

    Sinon j'ai effectivement un script qui nettoye la table, suppression des sujets non lus depuis 1 mois, ... mais ça reste encore une grosse table.

    Je vais essayer de d'ajouter des critères de suppressions.

    Merci pour votre aide, je marque ce sujet "Résolu" mais n'hésitez pas à ajouter vos infos

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Forum: affichage des sujets, jointure
    Par legender dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/07/2007, 14h57
  2. Problème avec les cookies d'identification du forum sur mon poste
    Par Flow_75 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 3
    Dernier message: 13/03/2007, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo