Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 06/10/2011, 15h29   #1
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 72
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 72
Points : 34
Points : 34
Par défaut Demande d'info : Requête SQL

Bonjour,

Je réalise en ce moment un petit forum pour mon site.
Je le veux basique mais cependant optimisé.

Je me posais une question au sujet du comptage des messages.
Pour que se soit optimiser, au lieu de compter à chaque fois à l'aide d'une requête le nombre de message dans une catégorie et l'afficher, je souhaitais mettre un champ "nbMessage" dans ma catégorie et quand une personne ajoute un poste, incrémenter mon nombre de message.

Là il y aurait deux requêtes. La requête INSERT pour ajouter mon message et une requête UPDATE pour incrémenter mon nombre de message.
Est-il possible que la requête INSERT se face correctement mais que la requête UPDATE bug (si sa ne se produit ne serait-ce qu'une fois, j'aurais un décalage entre mon nombre de message réel et celui incrémenter).

Comment vous gèreriez ceci ?
Merci d'avance.

Olivier

Nota: J'ai penser lancer quelque fois une requete qui recalcule mais je pense que se serait contourner le problème.
Morrigan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 18h05   #2
Nouveau Membre du Club
 
Inscription : novembre 2007
Messages : 43
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : novembre 2007
Messages : 43
Points : 32
Points : 32
Je trouve l’idée pas mauvaise. C'est une sorte de cache en DB juste pour le nombre de ligne d'une table (Peut être qu'un cache pourrai le faire automatiquement).

Je ne voie pas pourquoi ta requête UPDATE buggerai si elle est correctement effectuée. A ce moment là, on pourrais tout remettre en cause.

Pense par contre à décrémenter le compteur quand un post est supprimé
greg91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 18h57   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Citation:
Pour que se soit optimiser, au lieu de compter à chaque fois à l'aide d'une requête le nombre de message dans une catégorie et l'afficher, je souhaitais mettre un champ "nbMessage" dans ma catégorie et quand une personne ajoute un poste, incrémenter mon nombre de message.
Ce que tu veux implémenter ici s'appelle un usage. Dans les bases de données relationnelles, les usages caractérisent un type particulier de données qui peuvent être calculées mais qui sont volontairement mises sous formes d'attributs afin d'optimiser les performances.

Dans ton cas, l'optimisation sera pauvre j'en ai peur, la fonction count est extrêmement rapide vu que les moteurs de stockage gardent un compteur en mémoire. Du coup tu perdra plus de temps avec tes updates que tu ne vas en gagner sur les select, le jeu n'en vaut pas la chandelle.

L'optimisation concerne plus généralement les tables et les index.

Citation:
Comment vous gèreriez ceci ?
Je commencerai par la conception des tables, tu trouvera sur developpez tout un tas de tutoriaux sur merise ou UML suivant la méthode de conception que tu utilise. Si ton projet n'est pas vraiment complexe, tu peux te dispenser d'utiliser une telle méthode et le faire "au feeling" mais gare !

Je te recommande d'utiliser MySQL Workbench pour la création de ton modèle de données: http://dev.mysql.com/downloads/workbench/

Pour ce qui est de l'implémentation: je te suggère fortement d'utiliser des tables InnoDB, ce moteur supporte les transactions et les clés étrangères qui tout deux garantissent (s'ils sont utilisés correctement bien sûr) l'intégrité des données du modèle, ce qui est clairement mandataire dans le cadre d'un forum.

Pour ce qui est de PHP: je te recommande fortement d'utiliser PDO et les requêtes préparées, là encore, il y a pléthore de tutoriaux sur le site. Les requêtes préparées permettront plus de sécurité et de rapidité.

Note: Plutôt que de ré-ré-réinventer la roue, tu devrais utiliser un CMS de type Forum comme PHPBB.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 19h09   #4
Nouveau Membre du Club
 
Aurélien LEQUOY
Inscription : février 2011
Messages : 33
Détails du profil
Informations personnelles :
Nom : Aurélien LEQUOY

Informations forums :
Inscription : février 2011
Messages : 33
Points : 35
Points : 35
Citation:
Envoyé par Benjamin Delespierre Voir le message
Note: Plutôt que de ré-ré-réinventer la roue, tu devrais utiliser un CMS de type Forum comme PHPBB.
Il a dit un forum simple et optimisé


regarde plutôt du coté de PunBB ou FluxBB (en français)

http://fluxbb.fr/forums/index.php
Aurélien LEQUOY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 19h16   #5
Nouveau Membre du Club
 
Aurélien LEQUOY
Inscription : février 2011
Messages : 33
Détails du profil
Informations personnelles :
Nom : Aurélien LEQUOY

Informations forums :
Inscription : février 2011
Messages : 33
Points : 35
Points : 35
Citation:
Envoyé par greg91 Voir le message
Je trouve l’idée pas mauvaise. C'est une sorte de cache en DB juste pour le nombre de ligne d'une table (Peut être qu'un cache pourrai le faire automatiquement).

Je ne voie pas pourquoi ta requête UPDATE buggerai si elle est correctement effectuée. A ce moment là, on pourrais tout remettre en cause.

Pense par contre à décrémenter le compteur quand un post est supprimé
Le problème récurent est que lorsque un développeur repasse derrière, il ne pense pas à tout et la mise à jour de ce compteur passe à la trappe. De même pour toi si tu reviens plusieurs moi après.

Plus la logique est dans la base de données plus ça t'évite de te tenir à jour tes infos coté logiciel et de risquer de créer des bug, tu y gagnera en temps et des erreurs en moins.

quand ton forum aura plusieurs milliers de visiteurs par heure et que ta base de données sera saturé tu pourras reconsidérer ce msg, mais en attendant met le plus de logique au niveau de ta base données.
Aurélien LEQUOY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 10h19   #6
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 72
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 72
Points : 34
Points : 34
Bonjour,

Merci de vos réponses. J'ai déjà pensé à l'utilisation de forum déjà tout prêt tel que PhpBB et les autres. Le soucis que je trouve dans ces forums c'est que :
- il nécessite une seconde inscription pour marcher (encore qu'on peut les lier avec son propre site mais il faut du coup utiliser les fonctions de PhpBB et le site deviens pénible à coder pour faire ses propres ajouts).
- ils ne permettent pas être intégré dans mon site (ce qui m'intéresse en faite le plus).

C'est pourquoi je comptais faire le mien avec les fonctionnalités de base.
Je vais donc regarder autour de PDO pour optimiser tout ça.

Merci.
Morrigan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 17h18   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Citation:
Je vais donc regarder autour de PDO pour optimiser tout ça.
Optimise ton MDD, le choix du client et du driver n'a pas (ou peu) d'incidence sur la rapidité de tes requêtes.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre 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 +2. Il est actuellement 01h01.


 
 
 
 
Partenaires

Hébergement Web