Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/02/2014, 16:40
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿Crear conexión nueva por cada consulta?

Cita:
Una amiga que estudia esto en el IPN de México, me mencionó que la manera correcta(por seguridad) es hacer una conexión nueva por cada consulta, es decir.
En primer lugar, dile a tu amiga que no existe una forma "correcta" en desarrollo de software. Eso lo puede decir un estudiante o un autodidacta, pero no un profesional.
Lo que existen son las formas adecuadas para los escenarios en los que se está trabajando, es decir, hay modos convenientes para trabajar en determinados sistemas, pero no se pueden hacer obligatorios para todos los casos.
Por otro lado, también sería conveniente aclararle dos cosas:
1) El mayor costo en un acceso a la base de datos es generar la conexión. Esto es, lo que más genera costos de overhead es crear el enlace entre el cliente y el servidor, y luego destruirlo.
2) Abrir y cerrar conexiones ante cada consulta sólo funciona de forma "práctica" cuando no usas transacciones. En cuanto tengas ciclos relativamente complejos de ABM, eso no sirve.

Además de eso, abrir conexiones a la base implica hacer uso del pool de conexiones, que no se libera tan rápido como parece, y en algún momento (y en un sistema de alto nivel de concurrencia pasa fácilmente), el pool se satura de conexiones muertas sin limpiar, y colapsa.
Finalmente (por ahora), los administradores de las bases, como práctica de seguridad, suelen restringir la cantidad de conexiones/hora de un mismo usuario, lo que hará que eventualmente rechace accesos a la base de usuarios que utilizan tan pésima técnica, o te cobren extra por liberarte del límite.

¿Se va entendiendo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)