Chapitre 21. Connexions persistantes aux bases de données

Les connexions persistantes aux bases de données SQL sont des connexions qui ne se referment pas à la fin du script . Lorsqu' une connexion persistante est demandée , PHP s'assure qu'il n'y a pas une autre connexion identique (qui serait ouverte précédemment , avec le même nom d'hôte , d'utilisateur et le même mot de passe ) , et si une telle connexion existe , elle est utilisée . Sinon , elle est créée . Une connexion identique est une connexion qui a ouvert le même hôte , avec le même nom et le même mot de passe ( s'ils sont nécessaires ) .

Ceux qui ne sont pas rompus aux techniques des serveurs web et leur distribution de la charge de travail , se font parfois une fausse idée de ces connexions persistantes . En particulier , les connexions persistantes ne permettent pas l ' ouverture de plusieurs sessions avec le même lien , ne permettent pas la réalisation de transactions efficaces et ne font pas le café . En fait , pour être extrêmement clair sur le sujet , les connexions persistantes ne vous donnent aucune fonctionnalité de plus que les connexions non persistantes .

Alors pourquoi les connexions persistantes ?

Cela s ' explique par la manière avec laquelle les serveurs web fonctionnent . Il y a trois manières d ' utiliser PHP pour générer des pages .

La première est d' utiliser PHP comme un CGI (Common Interface Gateway ) . Lorsque PHP fonctionne de cette manière , une instance de l ' interpréteur PHP est créée puis détruite pour chaque page demandée . Etant donné que cet interpreteur est détruit après chaque requête , toutes les ressources acquises ( comme une connexion à une base SQL ) , sont purement et simplement détruites .

La deuxième méthode , et de loin , la plus prisée , est d' exécuter PHP sous la forme d 'un module sur un serveur multi-processus , ce qui revient à dire : Apache . Un tel serveur a typiquement un processus parent qui coordonne un ensemble de processus fils , qui servent les fichiers . Lorsque les requêtes parviennent depuis un client , elles sont transmises à un fils disponible . Cela signifie que si un client fait une deuxième requête , il peut être servi par un processus client différent du premier . Les connexions persistantes vous permettent alors de ne vous connecter à une base SQL que la première fois . Lors des connexions ultérieures , les processus fils pourront réutiliser la connexion ouverte précédemment .

La dernière méthode est d' utiliser PHP sous la forme d 'un module de serveur multi-threads . Actuellement , PHP 4 supporte ISAPI , WSAPI , et NSAPI ( sous Windows) , qui permettent tous d'utiliser PHP comme un module sur un serveur multi-threads tel que Netscape FastTrack (iPlanet) , Microsoft's Internet Information Server (IIS) , et O'Reilly 's WebSite Pro . Le comportement est essentiellement le même que pour les serveurs multi-processus décrits précédemment . Notez que SAPI n ' est pas disponible avec PHP 3 .

Si les connexions persistantes n ' ont aucune fonctionnalité de plus , à quoi servent-elles ?

La réponse est extrêmement simple : efficacité . Les connexions persistantes sont un bon moyen d ' accélérer les accès à une base SQL si le traitement de connexion à la base est long . Ce temps dépend de nombreux facteurs : le type de base de données , cette base est-elle sur le même serveur ou pas , quelle est la charge du serveur de base de données , etc.. . Si le temps de connexion est long , les connexions persistantes seront bien utiles , car une fois ouverte par un processus fils , la connexion est réutilisable sans avoir à se reconnecter . Si vous avez 20 processus fils , il suffit d ' avoir 20 connexions persistantes ouvertes , une par fils .

Notez que les connexions persistantes ont quelques inconvénients si vous hébergez une base de données , dont le nombre maximal de connexion risque d ' être atteint par les connexions persistantes . Si votre base de données accepte jusqu ' à 16 connexions simultanées et que , 17 processus essaient de se connecter , le dernier restera sur la touche . S' il y a des erreurs dans les scripts qui ne permettent pas de fermer la connexion (par exemple , une boucle infinie ) , votre serveur sera rapidement engorgé . Vérifiez la documentation de votre base de données pour savoir comment elle traite les connexions inactives ou abandonnées .

Résumons-nous : les connexions persistantes ont été définies pour avoir les mêmes fonctionnalités que les connexions non persistantes . Les deux types de connexions sont parfaitement interchangeables , et n ' affecteront pas le comportement de votre script : uniquement son efficacité .