gratiszona

conexiones persistentes

Las conexiones persistentes son enlaces SQL que no se cierran cuando termina la ejecucion del archivo de comandos.
Cuando se pide una conexion persistente, PHP comprueba si hay ya una conexion persistente identica (que permanecia
abierta desde antes) - y si existe, la usa. Si no existe, crea un enlace. Una conexion ’identica’ es una conexion que se abrio
hacia el mismo "host", con el mismo nombre de usuario y la misma contraseña (donde sea aplicable).
La gente que no esta familiarizada con el modo como trabajan y distribuyen la carga los servidores "web"puede confundir
que persistente significa lo que no es. En particular, ellas no te dan la habilidad de abrir ’sesiones de usuario’ en el mismo
enlace SQL, no dan la habilidad de construir una transaccion de forma eficiente y no hacen un monton de otras cosas. De
hecho, para ser extremadamente claros sobre el tema las conexiones persistentes no te dan ninguna functionalidad que no
fuera posible con sus hermanas no-persistentes.
Por que?
Esto tiene que ver con el modo como funcionan los servidores "web". Hay tres modos en que un servidor "web"puede
utilizar PHP para generar paginas web.
El primer metodo es usar PHP como una capa CGI. Cuando corre de este modo, se crea y destruye una instancia del
interprete PHP por cada pagina solicitada (para una pagina PHP) a tu servidor. Debido a que se destruye despues de cada
peticion, cualquier recurso que adquiera (como un enlace a un servidor de base de datos SQL) se cierra cuando es
destruido. En este caso, no se gana nada si se intentan usar conexiones persistentes.
El segundo y mas popular, metodo es correr PHP como un modulo en un servidor web multiproceso, lo cual actualmente
solo incluye Apache. Un servidor multiproceso tiene tipicamente un proceso (el padre) que coordina un conjunto de
procesos (sus hijos) que realmente hacen el trabajo se servir las paginas web. Cuando entra cada peticion de un cliente, es
entregada a uno de los hijos que no este ya sirviendo a otro cliente. Esto significa que cuando el mismo cliente hace una
segunda petcion al servidor, puede ser atendidp por un proceso hijo distinto del de la primera vez. Lo que una conexion
persistente hace por ti en este caso es hacerlo de tal modo que cada proceso hijo solo necesita conectar a tu SQL server la
primera vez que sirve una pagina que hace uso de una conexion asi. Cuando otra pagina solicita una conexion a SQL
server, puede reutilizar la conexion que el hijo establecio previamente.
El ultimo metodo es usar PHP como un "plug-in"para un servidor web multihilo. En la actualidad es solamente teorico –
PHP no funciona aun como "plug-in"para ningun servidor web multihilo. Hay trabajo en progreso para soportar ISAPI
WSAPI y NSAPI (en Windows), lo cual permitira a PHP ser utilizado como "plug-in"para servidores web multihilo como
Netscape FastTrack, Internet Information Server (IIS) de Microsoft y O’Reilly’s WebSite Pro. Cuando esto ocurra, el
comportamiento sera exactamente el mismo que para el modelo de multiprocesador descrito anteriormente.
Si las conexiones persistentes no aportan ninguna funcionalidad añadida, para que son buenas?
La respuesta aqui es extremadamente simple – eficiencia. Las conexiones persistentes son buenas si las cabeceras de
control para crear un enlace a tu servidor SQL es alta. Que estas cabeceras sean o no realmente altas depende de muchos
factores. Como, que clase de base de datos es, si esta o no situada en el mismo ordenador que el servidor web, como esta
de cargada la maquina donde se encuentre el servidor SQL y otras asi. El hecho fundamental es que si la cabecera de
conexion es alta, las conexiones persistentes te ayudan considerablemente . Ellas hacen que el proceso hijo simplemente
conecte solamente una vez durante todo su intervalo de vida, en vez de cada vez que procesa una pagina que requiere
conectar al servidor SQL. Esto significa que por cada hijo que abrio una conexion persistente tendra su propia conexion
persistente al servidor. Por ejemplo, si tienes 20 procesos hijos distintos que corran un archivo de comandos que cree una
conexion persistente a tu servidor SQL, tendrias 20 conexiones diferentes a ti servidor SQL, una por cada hijo.
Un resumen importante. Las conexiones persistentes fueron diseñadas para tener una equivalencia uno-a-uno con las
conexiones normales. Eso significa que deberis siempre ser capaz de reemplazar las conexiones persistentes por
conexiones no persistentes y no cambiara, el modo como se comporta el archivo de comandos. Puede cambiar la eficiencia
del archivo de comandos (y probablemete lo hara), ¡pero no su comportamiento!
Anterior: conexiones en php