Post by Julien ArlandisPour ma part je considère les sessions comme un mécanisme de mémoire
tampon consistant à dupliquer certaines données utilisateurs stockées
dans la base de données qui sont très sollicitées par les scripts, afin
d'économiser des connexions et des requêtes vers la base.
La session n'est pas un système de cache.
C'est un détournement du mécanisme standard des sessions. Une session
est l'ensemble des données relatives à l'état de ton application. Par
exemple, les tokens pour les formulaires, le modèle en cours de
modification ou création (par exemple, une ressource créée à travers
plusieurs formulaires, la sauvegarde automatique temporaire d'un
article, etc).
Lorsqu'on utilise les sessions en base de données, ça va
difficilement réduire les appels à la base de données.
Cette optimisation a priori peut avoir des effets désastreux. Le
back-end par défaut utilises des fichiers sur la machine qui héberge le
processus Apache ou PHP CGI. Ce qui signifie qu'on augmente les IO sur
le disque du serveur qui sert l'application. On sait que l'un des
principaux goulets d'étranglement des applications web est les IO disque
sur le serveur web. C'est pour ça qu'il existe d'autres backend pour les
sessions (Memcache, MySQL, etc). Pour peut que la session soit
lourdement utilisée comme cache applicatif, les serveurs peuvent
s'effondrer sous une forte charge.
Post by Julien ArlandisMais est ce que l'accès en lecture d'une variable de session est plus rapide qu'un
simple select sur une table indexée,
Comme toujours en informatique, dans les systèmes complexes : ça
dépend :o)
Post by Julien Arlandisc'est ce que j'ai toujours
inconsciemment pensé mais n'ayant jamais fait de mesure peut être que
cette hypothèse est erronée sous certaines conditions.
Utiliiser une optimisation sans faire de tests n'est pas une bonne
initiative. Ceci dit, c'est difficile de faire des tests de performance.
Je ne te jeterai pas la première pierre ;)
Post by Julien ArlandisEn particulier quand la BD est hébergée sur le même serveur que php, le gain de
performance est il réel?
Il faut tester. Mais il ne faut pas oublier d'inclure le temps
d'initialisation de la session. La déserialisation des données n'est pas
gratuite.
Post by Julien ArlandisAu sujet de la connexion à la base, est il
possible que les scripts se partagent la même connexion pour économiser
les authentifications (j'utilise PDO) ?
Dans un même script, une connexion sera unique (tout au moins avec
MySQL). C'est un comportement qui est géré par l'extension.
La connexion à la base de données peut être mutualisée entre les
différents appels à la base de donnée. On peut activer cette
fonctionnalité en utilisant une connexion permanente. *Mais* en
hébergement mutualisé, c'est généralement désactivé. La raison est que,
si tu a 10 000 clients qui conservent une connexion permanente vers la
base de donnée-- ça peut être quelque peu insoutenable. Il ne faut pas
non plus oublier que MySQL resterait aussi à l'écoute, ce qui signifie
qu'il doit aussi allouer des ressources à la connexion permanente. En
fait, les connexions permanentes sont déconseillées sur les systèmes
fortement sollicités. Désactiver Keep Alive sur Apache peut sauver un
serveur du passage à lighttpd.
Il n'y a pas de réponse générale. Il faut tester et s'adapter au
besoins de l'application (ou du site).