Contenu | Rechercher | Menus

Annonce

Le forum rencontre en ce moment quelques soucis de charge, il est possible qu'une erreur soit affichée quand vous postez un message, ne rechargez pas la page au risque de poster une seconde fois votre message

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 24/04/2012, à 09:33

[PHP]Question cache et gestion de BDD

Salut smile

Me revoilà avec des questionnements sur le PHP.

Je viens de relire un bon petit tuto sur la gestion plutôt simple d'un cache. Et je trouvais ça relativement sympa, plus besoin de surcharger le site en connexion à la BDD, utiliser la gestion de fichier, ça se fait pas assez.

Mais la limite où se trouve t-elle ? Quel équilibre utiliser ?

Après réflexion personnelle, je vois le cache plutôt comme un support pour les données fixe, en gros qui ne sont pas mises à jours régulièrement, commes des articles, des news, voir des post de forum. Voir même un système de discussion instantanée, un livre d'or, etc..

Par contre, pour utiliser un moteur de recherche, établir des connexion entre certaines données, c'est je pense la BDD le mieux placé (dites moi si je me trompes hein), mais aussi la gestion des droits, de module d'utilisateur, messagerie privée, etc...

Ma réflexion est encore assez simpliste et pas vraiment poussée, c'est d'ailleurs la raison pour laquelle je viens poser les questions suivantes :
Avez-vous déjà travaillé sur un système de cache ? Comment avez vous procédez ? Quelle réflexion avez vous eu sur le sujet ? Quel équilibre avez vous installer entre utilisation de BDD et utilisation du cache ? Pourquoi ?

Voilà, débattons courtoisement big_smile

Morgiver

Hors ligne

#2 Le 24/04/2012, à 11:27

Re : [PHP]Question cache et gestion de BDD

Bonjour,

Qu'est-ce que tu caches exactement? Parce que si tu dois aller récupérer des données qui sont susceptibles de changer, il vaut mieux passer par la base de données. Je pense que les accès à la base sont rapides.

Mais il y a quand-même des moments où ça peut être utile. Mettons par exemple que tu aies un site e-commerce avec des milliers d'articles et des dizaines de catégories classées hiérarchiquement. Tu peux vouloir afficher un arbre de toutes les catégories et sous-catégories, avec à chaque fois à côté du nom de la catégorie le nombre d'articles dedans entre parenthèses.

Pour faire ça, tu peux faire une ou plusieurs requêtes SQL qui va te rechercher toutes les catégories, les classe en hiérarchie, recherche le nombre d'articles, génère un code HTML à coup de <ul> et <li>, etc. Tout ça peut être assez long en termes de CPU. Si tu as des milliers de visites par jour, ça peut devenir un problème.

Donc tu peux aller chercher ces infos une seule fois et enregistrer ton fragment de HTML dans un fichier texte, que tu ne devras rafraîchir que lorsque tu modifies une catégorie ou que tu ajoutes ou enlève un produit.

Je pense que ce genre de système se justifie pour des données qui sont souvent affichées, mais rarement changées. Comme tous les caches, en gros big_smile


Pffff…

Hors ligne

#3 Le 24/04/2012, à 12:11

Re : [PHP]Question cache et gestion de BDD

bon vu que la question est vague, peut-être que les procédure stockées peuvent y répondre...

l'idée générale est que le sur le temps d'execution d'une requete, le parseur sql en utilise une grosse partie, le fait de stocker la procédure dans mysql (par exemple) permet d'avoir une requete pré-parsée et donc diminue beaucoup le temps d'éxécution.


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#4 Le 24/04/2012, à 13:27

Re : [PHP]Question cache et gestion de BDD

Hum, en fait une question précise me taraude l'esprit, est-ce plus rapide de modifier une donnée sur un fichier ou dans une base de données ? (je sais que les base de données sont des fichiers, mais c'est plus complexe vu que cela suit une logique de BDD contrairement à un fichier texte qui ne contient que du texte et rien d'autres).

Qu'est-ce que cela donnerait un site entièrement sans base de données, ou chaque modification est faites directement sur fichier ?
Comme si on faisait un site entièrement en cache.

Hors ligne

#5 Le 24/04/2012, à 15:33

Re : [PHP]Question cache et gestion de BDD

Morgiver a écrit :

Hum, en fait une question précise me taraude l'esprit, est-ce plus rapide de modifier une donnée sur un fichier ou dans une base de données ? (je sais que les base de données sont des fichiers, mais c'est plus complexe vu que cela suit une logique de BDD contrairement à un fichier texte qui ne contient que du texte et rien d'autres).

Qu'est-ce que cela donnerait un site entièrement sans base de données, ou chaque modification est faites directement sur fichier ?
Comme si on faisait un site entièrement en cache.

Ça dépend.

De manière générale, les bases de données sont rapides et bien conçues, et il faut déjà leur en demander beaucoup avant de les mettre à genoux. Mais si tu suis mon exemple ci dessus avec le menu, ça peut être judicieux de mettre certaines choses en cache.

C'est difficile de dire si un site 100% basé sur des fichiers erait moins performant, parce que ça dépend beaucoup de ce que tu veux lui faire afficher comme données.

Tu dis que tu as en tête une question précise. À mon avis tu ferais mieux de la poser directement big_smile


Pffff…

Hors ligne

#6 Le 24/04/2012, à 16:39

Re : [PHP]Question cache et gestion de BDD

pour répondre à la question, mon avis de pas expert:

modification : BDD plus rapide que le fichier
afficher une donnée brut => fichier plus rapide
retrouver une donnée: BDD beaucoup beaucoup plus rapide que le fichier

dans le cas d'un faible trafic tout ces temps d'accès sont négligeable par rapport au temps de transit des données sur le réseau

mais l'intéret principal d'une BDD est à mon avis la gestion des accès concurent et la garanti que les donnée sont dans un état "stable"


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#7 Le 25/04/2012, à 09:38

Re : [PHP]Question cache et gestion de BDD

En fait j'essaye de préciser l'utilisation du cache, parce que déjà dans sa conception il y a plusieurs méthode, apparemment.

- Cache qui se met à jours toutes les X minutes.
- Cache qui est à jours tout le temps (chaque modification met à jours le cache).
- Ou les deux, en fonction du type de données ou d'affichage.

Rien que ça, j'ai du mal à savoir les avantages et les inconvénients des méthodes.

On m'a souvent dit que charger une page déjà construite était plus rapide que de charger un script PHP qui génère une page.
Mais la recherche de données est plus rapide dans une base de données relationnelle (tu m'étonnes, sinon ça s’appellerait pas "relationnelle").
Donc si je veux pouvoir faire en sorte que mes articles soient compris dans une recherche, il faut qu'ils soient dans la base de données, mais si j'ai envie de sauvegarder des ressources, il faut que je les mettent dans le cache, etc..,etc...

Ptin, plus jamais j'irais au boulot en rentrant de soirée xD J'ai mal au crâne xD

EDIT : En tout cas, merci à vous deux, vos explication m'éclaire quand même pas mal smile

Dernière modification par Morgiver (Le 25/04/2012, à 09:38)

Hors ligne

#8 Le 25/04/2012, à 09:54

Re : [PHP]Question cache et gestion de BDD

Les systèmes de cache c'est un peu comme n'importe quelle technologie: il y a des fois où c'est bien de les utiliser, et il y a des fois où ce n'est pas bien. Le fait d'utiliser un cache ajoute un peu de complexité à ton application, il faut se poser la question de savoir si ça vaut le coup ou pas. Et si tu l'utilises mal, ça peut même ralentir ton application.

Les caches peuvent être utiles de manière générale pour les données sur lesquelles tu as fait des traitements lourds que tu ne veux pas refaire à chaque fois. Si tes articles sont sous forme de HTML dans une BDD et que tu fais juste SELECT texte FROM articles WHERE id=5 puis que tu fais echo $article; ça ne vaut clairement pas la peine de mettre un système de cache.

Si tu as différents auteurs qui écrivent des articles, et que tu fais une page de présentation par auteur avec les résumés des articles qu'ils ont écrits, le nombre d'articles, et plein d'infos qui sont dispatchées dans plein de tables et de fichiers, et bien là, ça ne vaut pas la peine non plus big_smile Parce que ta page d'auteur ne sera sans doute pas très souvent visitée donc tu vas complexifier ton application avec une gestion du cache sans gagner grand chose en performance.

L'histoire du menu des catégories d'un site e-commerce que j'ai donné ci dessus par contre justifie un cache.

Conditions pour qu'un cache vaille la peine d'être mis en place: traitement lourd, page affichée souvent, beaucoup de données à rechercher dans la base avec des requêtes complexes.


Je parle bien sûr de cache pour la BDD uniquement, parce que c'est de ça que tu parles, mais si tu fais par exemple des traitements d'image avec GD, il faut cacher le résultat parce que ces traitements sont lourds en termes de CPU.


Pffff…

Hors ligne

#9 Le 25/04/2012, à 10:02

Re : [PHP]Question cache et gestion de BDD

bon je crois que je comprend ton projet à demi mot: UN BLOG avec du cache.

perso ça fait un moment que je cherche un truc optimal pour faire ce genre de chose, et par manque de mot clé correct j'ai végété un moment jusqu'a trouver une solution simple et élégante (de mon point de vu):  les SWG (Static Website Generator) représenté entre autre par ikiwiki et blogofile (je te laisse googler un peu...)


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#10 Le 25/04/2012, à 10:13

Re : [PHP]Question cache et gestion de BDD

Blogofile à l'air pas mal intéressant smile

Hors ligne

#11 Le 25/04/2012, à 11:04

Re : [PHP]Question cache et gestion de BDD

C'est uniquement pour une question de performances que tu veux mettre en place ce genre de chose?


Pffff…

Hors ligne

#12 Le 25/04/2012, à 11:07

Re : [PHP]Question cache et gestion de BDD

Bjr,
Discussion intéressante, surtout que je suis en train de coder un genre de SWG (mais en JS et cgi pour l'écriture, donc utilisation locale ou sur serveur web si cgi enable). Je me permet donc de participé à ce thread, bien que cela n'a rien à voir avec PHP (mais je suis tenté de m'y mettre)

Par contre, un truc qui me chagrine, pour le systeme de blog, on est d'accord que le dernier article et présenté en premier ? Donc si par exemple on a 10 pages d'articles, si on ajoute un article, le SWG va devoir réécrire ces 10 pages et les réuploader sur le site ...? C'est là que ca m'embête, devoir réup X pages pour chaque article ajouté ....
J'avais pensé faire un truc en JS, juste présenter sur les pages de blog un tout petit résumé de l'article et un lien qui ouvre l'article (géré par JS et xmlHttpRequest). Comme ça, les pages de blogs contiendront plus d'articles, et donc, moins de pages à upload ....!

Il y a aussi le XSLT, je trouve ça vraiment génial, mais dans mon appli, qui est prévu pour modifier des templates existantes, c'est un peu galère d'en faire un xsl (mais bien utile pour la gestion du menu par exemple, ou un systeme de news affiché sur toutes les pages, bien que cela peut aussi être fait via JS, mais avec bcp de requêtes serveurs nécessaire pour afficher une page) ....

J'ai une petite question, vu que les intervenant de ce thread ont l'air de connaitre le monde des serveurs, il est préférable de servir un gros fichier, ou plusieurs petits fichiers a la demande ?
D'un coté on utilse de la bande passante, de l'autre plus d'utilisation du serveur ... Parce que pour moi, l'idéal est de faire travailler le navigateur, donc via JS et un gros fichier qui contiendrait tous les articles (mais bon, si on a 200 articles, la taille du fichier risque d'être un peu trop importante, bien que si on compare le poids d'une image ... !)

Et quelle technologie la mieux adaptée, xslt, html/JS ou html/cgi (bien que le cgi ne soit pas installé sur tous les serveurs)

Bref, voilà mes questionnement.


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#13 Le 25/04/2012, à 11:47

Re : [PHP]Question cache et gestion de BDD

salut et en effet la discussion dérive un peu (complètement même) par rapport au titre original.

pour ton premier embêtement de réup tout le blog a chaque fois, je comprend, et je ne pense pas que les SWG soit adaptés à un hébergement mutualisé de base (= accès ftp+ serveur web), par contre dans le cas d'un serveur dédié (ou du moins suffisemment souple) le problème ne se pose pas, tu up uniquement tes modifications et le serveur refait le build (et si on considère que le blog est plus souvent visité que mis à jour, ça vaut carrément le coup)

concernant le dilemme bande passante vs CPU, j'aurais tendance à utiliser le CPU et économiser la BP (le premier dépend de toi alors que le second dépend du visiteur : le CPU du serveur ne change pas alors que la bp suivant la connexion du visiteur peux varier énormément)


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#14 Le 25/04/2012, à 12:25

Re : [PHP]Question cache et gestion de BDD

Mathieu147 a écrit :

C'est uniquement pour une question de performances que tu veux mettre en place ce genre de chose?

Hé bien je m'interroge sur la gestion des performance.
Mais également sur le fait que cela pourrait peut-être servir pour une gestion de site mirroir, faire en sorte que les mirroir se mettent à jours, sans devoir intervenir dans la base de données.

En même temps je ne sais pas vraiment ce que ça veut réellement dire, vu que je n'ai certainement pas les compétences pour juger mon propre code et avoir assez de recul pour dire si il est optimisé ou pas.

Hors ligne

#15 Le 25/04/2012, à 12:40

Re : [PHP]Question cache et gestion de BDD

@yohann
Thx pour les infos, je ne polluerais pas plus ce thread, dsl smile


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#16 Le 25/04/2012, à 13:50

Re : [PHP]Question cache et gestion de BDD

je pense pas que tu polluais ce thread, au contraire, je pense par contre que le titre du thread n'est pas très pertinent par rapport à son contenu


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#17 Le 25/04/2012, à 13:52

Re : [PHP]Question cache et gestion de BDD

Que mettrais tu ? Je peux le changer hein wink

Hors ligne

#18 Le 25/04/2012, à 17:06

Re : [PHP]Question cache et gestion de BDD

Bon alors, je suis allé un peu vite en critique, mais tu ne l'a pas mal prix, c'est cool!

parce qu'a relire, on est parti dans tous les sens. Et c'est pas évident de trouver le titre juste.
[Débat][Web] Quand et comment utiliser la mise en cache
(enfin bon, c'est pas sur que ce soit bcp mieux, et je voudrais pas te hijacker de ton topic non plus...)


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#19 Le 26/04/2012, à 10:06

Re : [PHP]Question cache et gestion de BDD

Morgiver a écrit :
Mathieu147 a écrit :

C'est uniquement pour une question de performances que tu veux mettre en place ce genre de chose?

Hé bien je m'interroge sur la gestion des performance.

La question des performances vs de la facilité de la programmation, ou de privilégier le CPU vs privilégier la bande passante ou les accès disque vs les accès à la BDD ne sont pas faciles à résoudre et sont surtout une question de choix.

Si tu regardes par exemple les langages de programmation, tu pourrais faire tout ce que tu veux en assembleur, mais ce serait très difficile à maintenir et très compliqué à écrire. Tu pourrais utiliser le C et avoir presque des aussi bonnes performances mais c'est beaucoup plus facile à maintenir. Puis il y a les langages de plus haut niveau qui ont des performances pas aussi élevées mais qui sont plus confortables à utiliser.

Si les langages de plus haut niveau sont plus confortables à utiliser, c'est que les langages de plus bas niveau sont plus complexes. Et donc, tu mets sans doute plus de temps pour écrire ton programme, et ils ont des meilleurs performances à condition que le programme soit correctement écrit.

Ici, c'est la même chose: si tu mets en place un système de cache, tu pourras donc avoir de meilleures performances, mais uniquement si tu écris correctement ton système. De plus, le temps que tu vas passer à écrire ton système de cache ne sera pas passé à autre chose et tu vas peut-être prendre du retard dans ton développement.

Inévitablement, ton système de cache va apporter des bugs et des conditions à vérifier pour le reste de ton application.

Je rejoins mon propre avis d'hier matin (:D) où je disais que, comme pour tout, il faut peser le pour et le contre. J'ai tendance à dire que si tu veux faire un système d'affichage d'articles qui sont récupérés en une seule requête, tu vas mettre en place un système très compliqué pour gagner 0,2% de performance. Clairement, ça ne vaut pas le coup.

Ceci dit, je ne connais pas ton application et je ne saurais pas te dire si tu dois ou non mettre un cache. Moi personnellement j'en mets pour les éléments assez évidents. Par exemple, j'ai un système de redimensionnement d'images dans mon CMS, et les images redimensionnées sont cachées parce que j'ai remarqué que la différence de performance était très clairement visible (affichage quasiment instantané vs plusieurs secondes de chargement).

Morgiver a écrit :

Mais également sur le fait que cela pourrait peut-être servir pour une gestion de site mirroir, faire en sorte que les mirroir se mettent à jours, sans devoir intervenir dans la base de données.

En même temps je ne sais pas vraiment ce que ça veut réellement dire, vu que je n'ai certainement pas les compétences pour juger mon propre code et avoir assez de recul pour dire si il est optimisé ou pas.

Tu dois faire un méga site que tu as besoin de miroirs?


Pffff…

Hors ligne

#20 Le 26/04/2012, à 11:31

Re : [PHP]Question cache et gestion de BDD

Mathieu147 a écrit :

Tu dois faire un méga site que tu as besoin de miroirs?

Personnellement, non.

Mais c'est une question que je me pose à propos d'une idée que j'ai eu il y a quelque temps déjà, dans ce post.

Une sorte de P2P pour site web. J'avais pas trop continué l'idée, par manque de compétences mais surtout d'idée.
Depuis que l'ODDNS à émergé, je recommence à me poser des questions.
Un des principaux problème pour un P2P de site web, c'est les bases de données. Comment faire pour synchroniser le tout en un minimum d'action. Le système de cache devient important à ce moment, car il permet une rapide propagation des données sans intervenir sur la base de données (et donc améliorant les perf). Mais peut-être que je me trompes de question, je ne sais pas, je cherche tongue

Hors ligne

#21 Le 26/04/2012, à 13:39

Re : [PHP]Question cache et gestion de BDD

bon on pars vraiment dans tout les sens :
pour les base de donnée en P2P en fait ça existe en BDD relationnelles les mysql et autres peuvent tourner sur des clusters mais le problème des verrou fait que les temps d'accès sont bcp trop long.
d'ou la création de nouveau type de bdd qui change le type de contrat passé avec l'utilisateur, on ne garantie plus l'integrité des donnée, mais des temps d'accès rapide.

mon discours est sans doute un peu confus, voila un schema qui illustre mieux ce que je veux dire
nosql

donc au vu de ce schema ce qu'il te faut est une bdd de type AP (qui à le meme inconvénient qu'une mise en cache à savoir aucune garantie qu'on accède bien aux donnée les plus récentes)

Dernière modification par yohann (Le 26/04/2012, à 13:41)


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

Haut de page ↑