Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

A-t-on vraiment toujours besoin de mySQL ?

4 réponses
Avatar
Patrick 'Zener' Brunet
Bonjour.

J'ai recréé mon site perso comme je me l'étais promis, je me suis pris au
jeu de l'accessibilité "sur mesure", bref j'ai besoin d'un système de
sessionning, et je retrouve donc finalement des problèmes déjà rencontrés
lorsque je faisais du contrôle de process avec archivage de résultats:

* C'est la base de données qui rame et qui représente 60% du délai
d'affichage d'une page.

Evidemment c'est incontournable, et seulement optimisable, quand on utilise
vraiment les possiiblités d'un SGBDR en faisant des inner join et consorts.

Mais en fait c'est rarement le cas: dans le sessionning par exemple, on fait
uniquement des "peek & poke" de records dans une ou deux tables, entrecoupés
de recherches simple sur un champ.

De même, les requêtes sont prédéfinies, et donc on pourrait rêver de les
compiler au lieu de les passer en SQL avec ré-analyse syntaxique à chaque
fois.

Et de même il y a le relogin systématique du même utilisateur (en fait celui
qui est gravé dans le script concerné), de plus dans le cadre d'une
transaction entre le serveur Web et le serveur SGBD du même ISP.

* Ce qui me conduit à me demander si pour ce genre d'application, il ne vaut
pas mieux remplacer la base mySQL par une base locale construite sur mesure
avec un script bien câblé et des fichiers de données locaux.

* Et je suis certain que ça a déjà été fait.

Connaîtriez-vous des liens vers de tels projets ?

Le but est de trouver des retours sur l'amélioration constatée des
performances et les éventuels problèmes de fiabilité/sécurité ; notamment
c'est la concurrence (version Web de la programmation thread-safe) qui me
préoccupe.

Merci,
Cordialement,

--
/***************************************\
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
\***************************************/

4 réponses

Avatar
Patrick Mevzek
Le Mon, 13 Mar 2006 18:03:15 +0100, Patrick 'Zener' Brunet a écrit :
J'ai recréé mon site perso comme je me l'étais promis, je me suis pris au
jeu de l'accessibilité "sur mesure", bref j'ai besoin d'un système de
sessionning,



Si vous parlez des sessions (sinon je ne sais pas ce que le
«sessionning») il n'est pas nécessaire d'utiliser un SGBDR pour gérer
les sessions. Cela peut-être avec des fichiers texte, ou avec des démons
comme memcached.

* C'est la base de données qui rame et qui représente 60% du délai
d'affichage d'une page.



C'est mesuré ou prédit comme valeur ?
Si c'est mesuré, comment ?

Evidemment c'est incontournable, et seulement optimisable, quand on utilise
vraiment les possiiblités d'un SGBDR en faisant des inner join et consorts.



On peut faire que ce ne soit pas la base de données l'élément limitant.

De même, les requêtes sont prédéfinies, et donc on pourrait rêver de les
compiler au lieu de les passer en SQL avec ré-analyse syntaxique à chaque
fois.



C'est à cela que servent les «prepared statements». Les bons SGBDRs
gardent les résultats de leur «compilation».

Et de même il y a le relogin systématique du même utilisateur (en fait celui
qui est gravé dans le script concerné),



Si vous parlez de connection à la base, cela peut se conserver, même si
MySQL n'est pas couteux à ce niveau là. Regardez du côté des
connexions persistantes, ou sinon de solution plus mousse costo, dans la
catégorie «DB pooling»

* Ce qui me conduit à me demander si pour ce genre d'application, il ne vaut
pas mieux remplacer la base mySQL par une base locale construite sur mesure
avec un script bien câblé et des fichiers de données locaux.



Personnellement, j'ai très peu compris dans ce qui précède, vos causes
qui entraineraient une telle conséquence, assez radicale.

Le but est de trouver des retours sur l'amélioration constatée des
performances et les éventuels problèmes de fiabilité/sécurité ;
notamment c'est la concurrence (version Web de la programmation
thread-safe) qui me préoccupe.



Il n'y a pas 50000 façons différentes de gérer la concurrence : cela
l'impose d'avoir un SGBDR avec des transactions, voire un «two phase
commit»
Sinon, c'est du bricolage qui ne tient pas la route.

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>
Avatar
Patrick 'Zener' Brunet
Bonjour.

Je réponds à Patrick Mevzek
qui dans a écrit :
Le Mon, 13 Mar 2006 18:03:15 +0100, Patrick 'Zener' Brunet a écrit :

J'ai recréé mon site perso comme je me l'étais promis, je me suis
pris au jeu de l'accessibilité "sur mesure", bref j'ai besoin d'un
système de sessionning,



Si vous parlez des sessions (sinon je ne sais pas ce que le
«sessionning»)



Oui, navré pour le jargon métonymique :-)

il n'est pas nécessaire d'utiliser un SGBDR pour gérer
les sessions. Cela peut-être avec des fichiers texte, ou avec des
démons comme memcached.




C'est donc peut-être vers ce genre de solutions que je veux aller.

* C'est la base de données qui rame et qui représente 60% du délai
d'affichage d'une page.



C'est mesuré ou prédit comme valeur ?
Si c'est mesuré, comment ?




C'est une estimation grossière, qui de plus a valeur de moyenne d'un moment
à une autre.

Je me base sur le fait qu'ayant écrit le code, je connais bien les étapes du
chargement d'une page, et par ailleurs j'ai eu l'occasion de faire des
chargements partiels (avortés) en insérant des instructions de traçage type
echo.

Donc, en estimation visuelle, la phase d'accès à la BD (généralement 2
requêtes) qui précède l'inclusion du contenu choisi représente à peu près
les 2/3 du temps d'accès total.

J'aimerais bien affiner, mais je n'ai pas la maîtrise du serveur
d'hébergement, et chez moi sur EasyPHP le chargement est bien sûr
instantané. Ce qui confirmerait d'ailleurs le diagnostic...

Evidemment c'est incontournable, et seulement optimisable, quand on
utilise vraiment les possiiblités d'un SGBDR en faisant des inner
join et consorts.



On peut faire que ce ne soit pas la base de données l'élément
limitant.




Je veux bien, mais donc mon propos est de dire que pour cette application,
le choix standard est finalement surdimensionné.
Au fait j'en profite pour préciser qu'il y a de bonnes raisons pour
lesquelles ce site a besoin de sessions, et ne doit pas reposer sur les
cookies ni sur le Javascript. Donc tout doit être server-side.

De même, les requêtes sont prédéfinies, et donc on pourrait rêver de
les compiler au lieu de les passer en SQL avec ré-analyse syntaxique
à chaque fois.



C'est à cela que servent les «prepared statements». Les bons SGBDRs
gardent les résultats de leur «compilation».




Ce qui avait été fait dans les contextes "process" dont je parlais (avec des
"procédures stockées"). Mais là à vrai dire, je ne sais pas trop comment
procéder dans le contexte d'hébergement chez un ISP.

Et de même il y a le relogin systématique du même utilisateur (en
fait celui qui est gravé dans le script concerné),



Si vous parlez de connection à la base, cela peut se conserver, même
si MySQL n'est pas couteux à ce niveau là. Regardez du côté des
connexions persistantes, ou sinon de solution plus mousse costo, dans
la catégorie «DB pooling»




Je n'ai même pas de processus résident sur le serveur de l'ISP pour assurer
des tâches de fond !

Le code est donc complètement stateless, à part l'identifiant de session
renvoyé avec les requêtes HTTP.
Or celui-là pour l'utiliser, il faut accéder à la base, et donc faire un
mysql_connect(), lequel inclut donc un login avec les identifants imposés
par mon ISP.

A vrai dire j'ai pas mal progressé en PHP depuis 6 mois, mais je ne vois pas
comment contourner ce problème et retrouver mes ressources systèmes d'une
requête à l'autre.

Effectivement je pourrais le faire facilement s'il n'y avait pas ces
ressources systèmes, et si les états persistants consistaient en des scripts
et fichiers localisés dans le code du site.

* Ce qui me conduit à me demander si pour ce genre d'application, il
ne vaut pas mieux remplacer la base mySQL par une base locale
construite sur mesure avec un script bien câblé et des fichiers de
données locaux.



Personnellement, j'ai très peu compris dans ce qui précède, vos causes
qui entraineraient une telle conséquence, assez radicale.




J'ai donc précisé, il s'agit finalement de limiter la complexité de la "base
de données" au strict besoin du site.

Le but est de trouver des retours sur l'amélioration constatée des
performances et les éventuels problèmes de fiabilité/sécurité ;
notamment c'est la concurrence (version Web de la programmation
thread-safe) qui me préoccupe.



Il n'y a pas 50000 façons différentes de gérer la concurrence : cela
l'impose d'avoir un SGBDR avec des transactions, voire un «two phase
commit»
Sinon, c'est du bricolage qui ne tient pas la route.



Je suis en mesure d'écrire un système séquentiel indexé pour faire ce que
fait actuellement pour mon site la base de données, je maîtrise plutôt bien
les mutex, et je n'ai pas une réputation de bricoleur dans le codage :-)

Mais donc ça m'intéresserait assez de savoir si d'autres ont déjà envisagé
ce problème. J'aime bien innover, mais en PHP pour le moment ça me tente
très moyennement...

Merci pour ces informations.
Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/
Avatar
Ned Baldessin
Quel intérêt d'optimiser un site perso qui ne va reçevoir que 3
requètes et demie par jour ?

Pour le reste, je n'ai rien à ajouter à la réponse très complète de
Patrick, si ce n'est ceci :

On 2006-03-13 18:56:05 +0100, Patrick Mevzek
said:
* Ce qui me conduit à me demander si pour ce genre d'application, il ne vaut
pas mieux remplacer la base mySQL par une base locale construite sur mesure
avec un script bien câblé et des fichiers de données locaux.



Personnellement, j'ai très peu compris dans ce qui précède, vos causes
qui entraineraient une telle conséquence, assez radicale.



SQLite ? Ce qui réglerait (par le bas) le problème de concurence,
puisqu'il me semble que SQLite ne permet pas les accès en paralelle.

--
My email address doesn't ride a horse.
Avatar
Patrick Mevzek
Le Mon, 13 Mar 2006 19:55:48 +0100, Patrick 'Zener' Brunet a écrit :
il n'est pas nécessaire d'utiliser un SGBDR pour gérer
les sessions. Cela peut-être avec des fichiers texte, ou avec des
démons comme memcached.



C'est donc peut-être vers ce genre de solutions que je veux aller.



En PHP, le mécanisme par défaut est basé sur des fichiers.

* C'est la base de données qui rame et qui représente 60% du délai
d'affichage d'une page.



C'est mesuré ou prédit comme valeur ?
Si c'est mesuré, comment ?




C'est une estimation grossière, qui de plus a valeur de moyenne d'un moment
à une autre.



Faites de vrais benchmarks alors. En tout cas avant de partir dans des
gros travaux d'optimisation.

J'aimerais bien affiner, mais je n'ai pas la maîtrise du serveur
d'hébergement, et chez moi sur EasyPHP le chargement est bien sûr
instantané. Ce qui confirmerait d'ailleurs le diagnostic...



C'est pour cela qu'on ne peut tirer aucune conclusion avant de faire des
benchmarks précis, c'est à dire lancer 10000 fois le code et moyenner.
Regardez dans PEAR, il y a une classe Benchmark.

Je veux bien, mais donc mon propos est de dire que pour cette
application, le choix standard est finalement surdimensionné. Au fait
j'en profite pour préciser qu'il y a de bonnes raisons pour lesquelles
ce site a besoin de sessions, et ne doit pas reposer sur les cookies ni



C'est orthogonal. Les sessions utilisent les cookies, le plus souvent.
Ou alors on ne parle pas de la même chose.

Le code est donc complètement stateless, à part l'identifiant de
session renvoyé avec les requêtes HTTP.
Or celui-là pour l'utiliser, il faut accéder à la base, et donc faire
un mysql_connect(), lequel inclut donc un login avec les identifants
imposés par mon ISP.



Cf mysql_pconnect. C'est l'interpréteur PHP l'environnement persistant.

A vrai dire j'ai pas mal progressé en PHP depuis 6 mois, mais je ne
vois pas comment contourner ce problème et retrouver mes ressources
systèmes d'une requête à l'autre.



Cela dépend des ressources.

Je suis en mesure d'écrire un système séquentiel indexé pour faire
ce que fait actuellement pour mon site la base de données, je maîtrise
plutôt bien les mutex, et je n'ai pas une réputation de bricoleur dans
le codage :-)



Libre à vous de recoder un SGBDR.

Mais donc ça m'intéresserait assez de savoir si d'autres ont déjà
envisagé ce problème.



Je pense que je vais rapidement laisser d'autres intervenants prendre la
relève. Je ne comprends toujours pas l'essentiel de ce que vous voulez
faire.

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>