Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 18/01/2010, 23h19   #1
Invité de passage
 
Inscription : octobre 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 4
Points : 0
Points : 0
Par défaut savez-vous comment créer un systeme de lu / non lu optimisé ?

Bonsoir,

je dispose d'un forum archaïque (en terme d'optimisation et de fonctionnalités) créer il y a 2 ans, aujourd'hui j'ai en moyenne (j'arrondis les moyennes) 50 membres connectés, 1700 nouveaux messages (hors MP) et 600 sujets uniques vus (par des membres connectés) par jour.

Mes membres se plaignent de la lenteur de "la bête" comme certains l'appellent, la page d'accueil pour un membre connecté peut mettre jusqu'à 6 secondes pour s'afficher. Dans le but d'offrir un forum plus performant à mes forumeurs je réfléchis à un nouveau forum avec plus de fonctionnalités et plus optimisé. Dans ma réflexion je bloque sur le système de lu / non lu, ce dernier génère autant de lignes dans la table que de sujet uniques vu, ma table fait plusieurs ko.

A vrai dire j'ai déjà réussi (sur le papier) à optimiser l'ensemble du forum, hors mis ce système de lu / non lu, je cherche donc des idées pour créer un systeme plus optimisé, j'y ai réfléchis durant un certain temps et franchement je me demande même si il est possible de faire autrement qu'avec la méthode utiliser dans ce tutoriel ^^

Merci d'avance !

Dernière modification par sabotage ; 19/01/2010 à 08h04.
apache35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2010, 09h38   #2
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 73
Points : 36
Points : 36
Bonjour,

Reprend moi si j'ai mal compris.
Pour schématiser tu as une table 'article' (id, nom, contenu, etc...) et une table 'stat_article' avec les champs suivants : id_article, id_user et la date de visualisation.

Si tu souhaite avoir le détail précis des visualisation, ta méthode semble être la bonne.
Si tu souhaite juste connaître le nombre de fois qu'un article est lu, rajoute un champs 'nb_view' par exemple à la table article, que tu incrémente à chaque lecture de l'article.

Maintenant une bdd qui fait quelques ko c'est pas énorme.
Les lenteurs peut-être d'un problème d'indexation des champs.
Vois la commande mysql 'describe'.
noreaga10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2010, 15h57   #3
Invité de passage
 
Inscription : octobre 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 4
Points : 0
Points : 0
Bonjour noreaga,

oui la table se présente sous cette forme :
id topic | id posteur | date de visualisation

Aucun des champs n'est indexé, à vrais dire je ne sais pas comment me servir des index, j'ai pourtant lu un tutoriel à ce sujet.

Dans le cas de cette table, une clé primaire sur id topic suffirait ?
apache35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2010, 17h30   #4
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 73
Points : 36
Points : 36
Si aucun des champs ne sont indexés en effet tu devrais gagner du temps sur tes requêtes, une fois les colonnes indexées.

Pour la syntaxe:
Code :
1
2
 
ALTER TABLE tbl_name ADD INDEX index_name (column);
Tu fais cela pour les deux colonnes user_id et artcle_id de ta table stat_article, et ça devrait rouler.
Pour le index_name, je crois que ça n'a pas d'importance, mets le même nom que tes colonnes.

Dis moi ce que ça donne.
noreaga10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2010, 18h58   #5
Invité de passage
 
Inscription : octobre 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 4
Points : 0
Points : 0
Merci noreaga !

J'avais cru comprendre qu'il existait plusieurs sortent d'index, c'est faux ?

J'avais prévu de faire une mise à jour sur mon site demain matin, je modifiai la bdd pour ajouter les index en même temps, je te dirai ce que ça donne.
apache35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2010, 08h56   #6
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 73
Points : 36
Points : 36
En effet il existe plusieurs sortent d'index.

Ce ne seront clairement pas des primary key, car tu auras forcément des doublons dans tes deux colonnes.
Ce sera des type KEY, je pense.

Je viens de trouver un super article:
http://www.dbnewz.com/2008/06/27/les...ts-efficacite/
noreaga10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2010, 20h02   #7
Membre confirmé
 
Inscription : décembre 2006
Messages : 296
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 296
Points : 223
Points : 223
Tu utilises quoi comme pilote de base de données ?
Je te conseille d'utiliser mysqli, c'est plus rapide et exploite mieux la mémoire que mysql. C'est assez facile de changer si les fonctions de connexion sont groupées.

Quand au index, attention, les lecteurs sont plus rapides, mais pas les écritures.

Si c'est sur un dédié, il peut être utile de vérifier le cache MySQL.
Si des sessions sont stockées en base, passer en MEMORY peut-être intéressant.

Voilà quelques pistes, bon courage.
__________________
Prestataires, inscrivez vous dans l'annuaire e-commerce des prestataires - foe.hn : un raccourcisseur d'url fun, avec API
max-mag est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 21h00.


 
 
 
 
Partenaires

Hébergement Web