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

PHP & Base de données Discussion :

stocker des données en dur ?


Sujet :

PHP & Base de données

  1. #1
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut stocker des données en dur ?
    Bonjour,

    Je débute encore en php, j'aimerai savoir ce que vous me conseillez pour afficher sur mon site des données provenants de la base de données tels que les stats (nombre de visiteurs etc...).

    Ca fait à chaque affichage de page une requête sur ma table alors que cette variable pourrait être stockée qqes part.

    1) stocker cette donnée dans une mini table avec d'autres stats pour économiser pleins de requêtes.

    2) carrément faire des read/write file en php sur un fichier (genre txt) pour sauver le contenu de temps en temps et le lire le reste du temps. est-ce conseillé ou déconseillé ? plus lent que des appels en base de données ?

    merci d'avance pour vos conseilles à un débutant.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  2. #2
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    Citation Envoyé par Willpower Voir le message
    2) carrément faire des read/write file en php sur un fichier (genre txt) pour sauver le contenu de temps en temps et le lire le reste du temps. est-ce conseillé ou déconseillé ? plus lent que des appels en base de données ?
    C'est ce que je conseille pour ma part. Mais il faut penser à un système quotidien/hebdomadaire/.. selon le trafic qui permettrait de sauvegarder/récupérer le fichier et le remettre à 0 afin qu'il ne soit pas trop lourd au bout d'un moment.

  3. #3
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    ça se teste. au final une base de donnée sera un fichier écrit sur un disque, non?

    sauf qu'il y a des services en plus avec su sgbd.

    Si la base de données était considérablement plus performante en écriture, on utiliserait ça pour faire des log. mais voilà il y a la lecture qui est importante et retrouver la donnée. Retrouver une données parmi beaucoup. et la concurrence parce qu'en php tous le code peut être exécute simultanément ou jamais.

    Ta question n'a même pas bcp de sens. parce que tu vas dépendre des mécanisme de cache d’écriture & de lecture, de la saturation de ton espace de stockage et de la distance de celui-ci.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Ecrire le résultat de requête dans un cache n'a d'intérêt que dans certains cas :

    - La requête est complexe et longue à executer , dans ce cas on est certains qu'une simple lecture de fichier sera plus rapide, qu'un recalcul.

    - La base est sur un autre serveur , on s'affranchie donc des latences du réseau , en passant par un fichier de cache.

    - La base est limité en nombre de connexion et tu atteint souvent le maximum sans possibilité d'évoluer. Un fichier de cache délestera la base.

    Après faut pas non plus avoir la phobie de la requête , un SGBD est conçu pour stocker de nombreuses données et les récupérer

    Il faut aussi faire attention au cache qui parfois peux dérouter l'utilisateur qui peut ne pas voir une information tout de suite
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Tout dépend de la fraîcheur attendue du résultat de ces statistiques.

    S'il s'agit d'afficher, par exemple, un classement tel qu'il était à 1h du matin, tu peux avoir un programme qui fait les calculs à 1h du matin et qui enregistre le résultat dans un fichier texte. Inutile de recalculer le classement 382402 fois si le tableau du classement s'affiche autant de fois dans la journée.

    Si par contre ces stats doivent être mises à jour en quasi-temps réel après l'action des utilisateurs, alors il vaut mieux recalculer à chaque fois.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,
    Citation Envoyé par CinePhil Voir le message
    Si par contre ces stats doivent être mises à jour en quasi-temps réel après l'action des utilisateurs, alors il vaut mieux recalculer à chaque fois.
    Et quand le recalcul est long et compliqué, stocker le résultat dans une table séparée. Dans ce cas, il faut veiller à ce que tous les accès en écriture pour les éléments concernés soient verrouillés avec des procédures stockées. Ces dernières garderont tes stats à jour.

  7. #7
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Merci pour vos réponses, mais "arg", vous ne semblez pas avoir un avis commun sur la question, ce qui ne m'aide pas beaucoup dans mais décisions.

    Je fais essayer de formuler autrement :

    1) Pour une donnée qui ne change pas souvent y a-t'il une formule qui lie sa complexité de calcul aux nombres d'appels identiques tolérés (avant changements) pour caluler le moment où il devient intéressant de stocker la réponse sur le coté.

    Exemple: Un "SUM" de 10.000 valeurs sur une table 100.000 entrées, avec une mise à jour voulue (donc valeur approximative le reste du temps) tous les 2000 appels à la "requête ou donnée" ?

    2) Pour une simple variable mise à jour toutes les x temps(minute, heure, jour) , vous me conseillez un champ en base de données ou un fichier standard ?


    Encore merci de vos réponses.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Tes critères ne sont pas forcément suffisants ou assez précis pour te donner une réponse valable.
    tous les 2000 appels à la "requête ou donnée" ?
    Si ces 2000 appels surviennent chaque minute parce ton site est très fréquenté, inutile de faire un fichier externe qui sera obsolète toutes les minutes.

    Ce que nous essayions de dire est que, grosso modo, si une requête est lourde et appelée très souvent, il peut être plus intéressant de stocker le résultat de la requête dans une table mise à jour régulièrement (mais pas trop souvent bien sûr sinon ça ne vaut pas le coup).

    Ce qu'il faut savoir aussi, c'est que si la requête est exactement la même et que les données n'ont pas changé depuis sa dernière exécution, et que le résultat est encore en mémoire, le SGBD ne va pas rejouer la requête mais sortir directement le résultat de sa mémoire, ce qui est ultra rapide côté SGBD.

    Selon le SGBD utilisé, tu peux aussi regarder du côté des vues matérialisées. Si c'est MySQL, n'essaie même pas de chercher, ce mauvais SGBD ne les connaît pas !

    Dans tous les cas, je pense qu'il faut prototyper les solutions et les tester. Mais un bon SGBD avec une BDD bien modélisée et bien indexée doit être capable de donner le résultat d'une requête en une fraction de seconde, même avec des millions de lignes.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ce que nous essayions de dire est que, grosso modo, si une requête est lourde et appelée très souvent, il peut être plus intéressant de stocker le résultat de la requête dans une table mise à jour régulièrement (mais pas trop souvent bien sûr sinon ça ne vaut pas le coup).
    Je complèterais en ajoutant que dans certains cas, il est possible de ne pas recalculer tout depuis le début à chaque mise à jour mais partir du résultat déjà sauvegardé et ne tenir compte que du delta. Généralement ça facilite et accélère énormément le suivi de la valeur calculée.

  10. #10
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Si ces 2000 appels surviennent chaque minute parce ton site est très fréquenté, inutile de faire un fichier externe qui sera obsolète toutes les minutes.
    Je prend note de tes autres remarques et te remercie pour les informations que tu m'apportes, mais néanmoins, je n'arrive pas à être d'accord (ou à comprendre ton raisonnement) sur ce point.

    Pour moi, ce qui est déterminant c'est d'avantage le nombre de requêtes fournissant un résultat similaire que le "temps" durant lequel le résultat sera similaire.

    Si mon résultat ne change pas pendant 24h mais qu'il n'y a que 10 appels durant ces 24h, ça ne semble pas valoir la peine de stocker le résultat qqe part.

    Si au contraire, le résultat change toutes les 30 minutes mais qu'il y a 100.000 appels similaires (donnant le même résultat) durant ces 30 minutes, je préférerai stocker le résultat quelque part.

    ---

    @rawsrc: je note ton idée du delta, bien que celle-ci entraine 2 requêtes/lecture (le dernier résultat obtenu + le nouveau delta), dans le cas où la précision n'importe peu, je me passerai du delta. (mais je garde ton idée pour mes valeurs qui doivent être précises).
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je me contenterai de répondre en répétant la fin de mon précédent message :
    Citation Envoyé par CinéPhil
    Selon le SGBD utilisé, tu peux aussi regarder du côté des vues matérialisées. Si c'est MySQL, n'essaie même pas de chercher, ce mauvais SGBD ne les connaît pas !

    Dans tous les cas, je pense qu'il faut prototyper les solutions et les tester. Mais un bon SGBD avec une BDD bien modélisée et bien indexée doit être capable de donner le résultat d'une requête en une fraction de seconde, même avec des millions de lignes.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [C#]Comment stocker des données ?
    Par T0xF0x dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/07/2006, 10h18
  2. [VB]stocker des données de pages web dans une base
    Par tofito dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/02/2006, 11h02
  3. [MySQL] Stocker des données dans un tableau
    Par LadyArwen dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2006, 10h40
  4. Réponses: 2
    Dernier message: 15/06/2005, 17h32
  5. [XML] stocker des données dans un fichier XML
    Par R3iTt0R dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/05/2005, 16h51

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