Habitué à développer des applications web J2EE, je vais devoir en réaliser
une en php.
J'ai peur que les performances en souffrent grandement, notamment en ce qui
concerne les accès à la BD.
Existe-t-il en PHP un moyen de mettre en cache de scope application le
contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter
de les relancer inutilement ?
J'ai toujours un paquet de tables de références, modifiées une fois tous les
36 du mois, qui servent à alimenter des menus déroulants très récurrents.
J'ai 50 utilisateurs en simultané, sans cache ça va être très lent comparé à
ce que je peux faire en java.
Attention, je ne parle pas de cache HTML ni de session.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
francois
Existe-t-il en PHP un moyen de mettre en cache de scope application le contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter de les relancer inutilement ?
La réponse est simple : absolument aucun
Merci.
De rien ...
Existe-t-il en PHP un moyen de mettre en cache de scope application le
contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter
de les relancer inutilement ?
Existe-t-il en PHP un moyen de mettre en cache de scope application le contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter de les relancer inutilement ?
La réponse est simple : absolument aucun
Merci.
De rien ...
John GALLET
Bonjour,
J'ai peur que les performances en souffrent grandement, notamment en ce qui concerne les accès à la BD.
Peut-être donc est-il sous-optimal de voiloir faire du xxxx en yyyy ? (ici J2EE/php)
Existe-t-il en PHP un moyen de mettre en cache de scope application le contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter de les relancer inutilement ?
Moi y en a pas comprendre quoi y en a être "scope application" ;-)
Certaines couches d'abstraction SGBDR comme ADODB (http://adodb.sourceforge.net) disposent d'un cache SQL.
J'ai toujours un paquet de tables de références, modifiées une fois tous les 36 du mois, qui servent à alimenter des menus déroulants très récurrents.
Qui n'en a pas ?
J'ai 50 utilisateurs en simultané, sans cache ça va être très lent comparé à ce que je peux faire en java.
Ca reste à voir (à SGBD et schéma équivalents évidemment). Rien que la différence apportée par le fait d'avoir du C compilé et des drivers natifs (eux aussi en C) au lieu de JDBC par exemple, ça change pas mal de choses.
La première règle dans les problèmes de perfs, c'est de savoir 1) s'il y en a ou pas (ne pas crier avant d'être battu, même s'il vaut mieux prévoir à l'avance les écueils potentiels), 2) si oui, où ils sont, et ça passe par des traces précises.
a++; JG
Bonjour,
J'ai peur que les performances en souffrent grandement, notamment en ce qui
concerne les accès à la BD.
Peut-être donc est-il sous-optimal de voiloir faire du xxxx en yyyy ?
(ici J2EE/php)
Existe-t-il en PHP un moyen de mettre en cache de scope application le
contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter
de les relancer inutilement ?
Moi y en a pas comprendre quoi y en a être "scope application" ;-)
Certaines couches d'abstraction SGBDR comme ADODB
(http://adodb.sourceforge.net) disposent d'un cache SQL.
J'ai toujours un paquet de tables de références, modifiées une fois tous les
36 du mois, qui servent à alimenter des menus déroulants très récurrents.
Qui n'en a pas ?
J'ai 50 utilisateurs en simultané, sans cache ça va être très lent comparé à
ce que je peux faire en java.
Ca reste à voir (à SGBD et schéma équivalents évidemment). Rien que la
différence apportée par le fait d'avoir du C compilé et des drivers
natifs (eux aussi en C) au lieu de JDBC par exemple, ça change pas mal
de choses.
La première règle dans les problèmes de perfs, c'est de savoir 1) s'il y
en a ou pas (ne pas crier avant d'être battu, même s'il vaut mieux
prévoir à l'avance les écueils potentiels), 2) si oui, où ils sont, et
ça passe par des traces précises.
J'ai peur que les performances en souffrent grandement, notamment en ce qui concerne les accès à la BD.
Peut-être donc est-il sous-optimal de voiloir faire du xxxx en yyyy ? (ici J2EE/php)
Existe-t-il en PHP un moyen de mettre en cache de scope application le contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter de les relancer inutilement ?
Moi y en a pas comprendre quoi y en a être "scope application" ;-)
Certaines couches d'abstraction SGBDR comme ADODB (http://adodb.sourceforge.net) disposent d'un cache SQL.
J'ai toujours un paquet de tables de références, modifiées une fois tous les 36 du mois, qui servent à alimenter des menus déroulants très récurrents.
Qui n'en a pas ?
J'ai 50 utilisateurs en simultané, sans cache ça va être très lent comparé à ce que je peux faire en java.
Ca reste à voir (à SGBD et schéma équivalents évidemment). Rien que la différence apportée par le fait d'avoir du C compilé et des drivers natifs (eux aussi en C) au lieu de JDBC par exemple, ça change pas mal de choses.
La première règle dans les problèmes de perfs, c'est de savoir 1) s'il y en a ou pas (ne pas crier avant d'être battu, même s'il vaut mieux prévoir à l'avance les écueils potentiels), 2) si oui, où ils sont, et ça passe par des traces précises.
a++; JG
clifden
Habitué à développer des applications web J2EE, je vais devoir en réaliser une en php. J'ai peur que les performances en souffrent grandement, notamment en ce qui concerne les accès à la BD. Existe-t-il en PHP un moyen de mettre en cache de scope application le contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter de les relancer inutilement ?
Comme le dis François, il n'existe pas, de base, en php, de cache de BD. Maintenant, et cela sort du forum:
* Si bd=mysql et * si version >=4.1
Tu profitte alors du cache de requete de mysql. Il gere lui meme les requetes qui sont repetitives et met en cache leur resultats. Il gere très bien tout seul le fait de considerer un resultat de requete obsolete lorsque tu as fait un insert/update/delete sur les tables concernées. Donc, dans le cas de requetes du type: SELECT id,texte FROM table_liste ORDER BY texte qui te servent à fabriquer des SELECT/OPTION html, le cache mysql est là pour toi.
Maintenant, tu peux aussi faire, comme je l'ai fait pour un site, un systeme de cache php dont les données sont dans des objets. J'ai fait en sorte que ces objets s'initialise sans effectuer de requetes, et n'en font que lorsque l'appli a effectivement besoin. Ainsi, au début de chaque page, tu créé tout tes objets, et lorsque tu un appel un ensuite quand tu en as besoin, il fait à ce moment là la requete mysql. Si tu l'utilise une deuxième fois, il voit qu'il a déjà les données et te les renvois sans effectuer de requete SQL. Dans mon cas, j'ai en plus du mysql 4.1 derrière, et je profitte donc de son cache.
Habitué à développer des applications web J2EE, je vais devoir en réaliser
une en php.
J'ai peur que les performances en souffrent grandement, notamment en ce qui
concerne les accès à la BD.
Existe-t-il en PHP un moyen de mettre en cache de scope application le
contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter
de les relancer inutilement ?
Comme le dis François, il n'existe pas, de base, en php, de cache de BD.
Maintenant, et cela sort du forum:
* Si bd=mysql
et
* si version >=4.1
Tu profitte alors du cache de requete de mysql. Il gere lui meme les
requetes qui sont repetitives et met en cache leur resultats. Il gere
très bien tout seul le fait de considerer un resultat de requete
obsolete lorsque tu as fait un insert/update/delete sur les tables
concernées.
Donc, dans le cas de requetes du type:
SELECT id,texte FROM table_liste ORDER BY texte
qui te servent à fabriquer des SELECT/OPTION html, le cache mysql est là
pour toi.
Maintenant, tu peux aussi faire, comme je l'ai fait pour un site, un
systeme de cache php dont les données sont dans des objets. J'ai fait en
sorte que ces objets s'initialise sans effectuer de requetes, et n'en
font que lorsque l'appli a effectivement besoin. Ainsi, au début de
chaque page, tu créé tout tes objets, et lorsque tu un appel un ensuite
quand tu en as besoin, il fait à ce moment là la requete mysql. Si tu
l'utilise une deuxième fois, il voit qu'il a déjà les données et te les
renvois sans effectuer de requete SQL. Dans mon cas, j'ai en plus du
mysql 4.1 derrière, et je profitte donc de son cache.
Habitué à développer des applications web J2EE, je vais devoir en réaliser une en php. J'ai peur que les performances en souffrent grandement, notamment en ce qui concerne les accès à la BD. Existe-t-il en PHP un moyen de mettre en cache de scope application le contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter de les relancer inutilement ?
Comme le dis François, il n'existe pas, de base, en php, de cache de BD. Maintenant, et cela sort du forum:
* Si bd=mysql et * si version >=4.1
Tu profitte alors du cache de requete de mysql. Il gere lui meme les requetes qui sont repetitives et met en cache leur resultats. Il gere très bien tout seul le fait de considerer un resultat de requete obsolete lorsque tu as fait un insert/update/delete sur les tables concernées. Donc, dans le cas de requetes du type: SELECT id,texte FROM table_liste ORDER BY texte qui te servent à fabriquer des SELECT/OPTION html, le cache mysql est là pour toi.
Maintenant, tu peux aussi faire, comme je l'ai fait pour un site, un systeme de cache php dont les données sont dans des objets. J'ai fait en sorte que ces objets s'initialise sans effectuer de requetes, et n'en font que lorsque l'appli a effectivement besoin. Ainsi, au début de chaque page, tu créé tout tes objets, et lorsque tu un appel un ensuite quand tu en as besoin, il fait à ce moment là la requete mysql. Si tu l'utilise une deuxième fois, il voit qu'il a déjà les données et te les renvois sans effectuer de requete SQL. Dans mon cas, j'ai en plus du mysql 4.1 derrière, et je profitte donc de son cache.
Bruno Desthuilliers
Bonjour,
Habitué à développer des applications web J2EE, je vais devoir en réaliser une en php. J'ai peur que les performances en souffrent grandement, notamment en ce qui concerne les accès à la BD.
Pourquoi ?
Existe-t-il en PHP un moyen de mettre en cache de scope application le contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter de les relancer inutilement ?
Oui : une variable !-)
Ah, tu voulais dire "entre deux requêtes HTTP" ? Heu... tu peux toujours stocker quelques données en session, mais ce n'est pas forcément une idée aussi lumineuse qu'on pourrait le croire...
J'ai toujours un paquet de tables de références, modifiées une fois tous les 36 du mois, qui servent à alimenter des menus déroulants très récurrents. J'ai 50 utilisateurs en simultané, sans cache ça va être très lent comparé à ce que je peux faire en java.
Et si tu testais et profilais au lieu d'exposer tes a priori ?
En php, tu reconstruis le monde à chaque requête HTTP. Il faut le savoir, et concevoir ton appli en fonction. Si tu essaye de transposer tes habitudes Java en PHP, effectivement, ça risque de ramer fortement - mais le problème sera dû à ton appli, pas à PHP.
A savoir aussi, en PHP (en PHP4 en tous cas), l'instanciation d'objets coûte cher et l'accès aux méthodes/attributs aussi. Tu a donc intérêt à avoir le moins d'objets possibles et à tirer partie des structures de données natives (c'est à dire essentiellement des 'arrays', qui servent à la fois de liste et de table de hachage).
Bref, en php, plus tu fais simple et mieux ça fonctionne.
Bonjour,
Habitué à développer des applications web J2EE, je vais devoir en réaliser
une en php.
J'ai peur que les performances en souffrent grandement, notamment en ce qui
concerne les accès à la BD.
Pourquoi ?
Existe-t-il en PHP un moyen de mettre en cache de scope application le
contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter
de les relancer inutilement ?
Oui : une variable !-)
Ah, tu voulais dire "entre deux requêtes HTTP" ?
Heu... tu peux toujours stocker quelques données en session, mais ce
n'est pas forcément une idée aussi lumineuse qu'on pourrait le croire...
J'ai toujours un paquet de tables de références, modifiées une fois tous les
36 du mois, qui servent à alimenter des menus déroulants très récurrents.
J'ai 50 utilisateurs en simultané, sans cache ça va être très lent comparé à
ce que je peux faire en java.
Et si tu testais et profilais au lieu d'exposer tes a priori ?
En php, tu reconstruis le monde à chaque requête HTTP. Il faut le
savoir, et concevoir ton appli en fonction. Si tu essaye de transposer
tes habitudes Java en PHP, effectivement, ça risque de ramer fortement -
mais le problème sera dû à ton appli, pas à PHP.
A savoir aussi, en PHP (en PHP4 en tous cas), l'instanciation d'objets
coûte cher et l'accès aux méthodes/attributs aussi. Tu a donc intérêt à
avoir le moins d'objets possibles et à tirer partie des structures de
données natives (c'est à dire essentiellement des 'arrays', qui servent
à la fois de liste et de table de hachage).
Bref, en php, plus tu fais simple et mieux ça fonctionne.
Habitué à développer des applications web J2EE, je vais devoir en réaliser une en php. J'ai peur que les performances en souffrent grandement, notamment en ce qui concerne les accès à la BD.
Pourquoi ?
Existe-t-il en PHP un moyen de mettre en cache de scope application le contenu d'un table, ou le résultat de certaines requêtes SQL afin d'éviter de les relancer inutilement ?
Oui : une variable !-)
Ah, tu voulais dire "entre deux requêtes HTTP" ? Heu... tu peux toujours stocker quelques données en session, mais ce n'est pas forcément une idée aussi lumineuse qu'on pourrait le croire...
J'ai toujours un paquet de tables de références, modifiées une fois tous les 36 du mois, qui servent à alimenter des menus déroulants très récurrents. J'ai 50 utilisateurs en simultané, sans cache ça va être très lent comparé à ce que je peux faire en java.
Et si tu testais et profilais au lieu d'exposer tes a priori ?
En php, tu reconstruis le monde à chaque requête HTTP. Il faut le savoir, et concevoir ton appli en fonction. Si tu essaye de transposer tes habitudes Java en PHP, effectivement, ça risque de ramer fortement - mais le problème sera dû à ton appli, pas à PHP.
A savoir aussi, en PHP (en PHP4 en tous cas), l'instanciation d'objets coûte cher et l'accès aux méthodes/attributs aussi. Tu a donc intérêt à avoir le moins d'objets possibles et à tirer partie des structures de données natives (c'est à dire essentiellement des 'arrays', qui servent à la fois de liste et de table de hachage).
Bref, en php, plus tu fais simple et mieux ça fonctionne.