Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] ¿Crear conexión nueva por cada consulta?

Estas en el tema de ¿Crear conexión nueva por cada consulta? en el foro de Mysql en Foros del Web. Yo siempre he hecho lo siguiente para trabajar con mysql: ->Abrir conexion a la base de datos. ->consultar datos ->Insertar datos ->otra consulta ->cerrar conexion ...
  #1 (permalink)  
Antiguo 25/02/2014, 16:13
 
Fecha de Ingreso: febrero-2010
Mensajes: 49
Antigüedad: 14 años, 2 meses
Puntos: 1
¿Crear conexión nueva por cada consulta?

Yo siempre he hecho lo siguiente para trabajar con mysql:

->Abrir conexion a la base de datos.
->consultar datos
->Insertar datos
->otra consulta
->cerrar conexion

Generalmente uso la misma conexion para hacer varias cosas antes de cerrarla.
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.

->Abrir conexion a la base de datos.
->consultar datos
->cerrar conexion
->Abrir conexion a la base de datos.
->Insertar datos
->cerrar conexion
->Abrir conexion a la base de datos.
->otra consulta
->cerrar conexion

La pregunta es, cual es la menra correcta de hacerlo, ya que mi metodo ha sido hacer la menor cantidad de consultas a la base de datos, y solo hacer una conexion y mantenerla hasta que ya no me sirva.

una pregunta adicional, es si es posible hacer una doble insercion a una tabla.
ej:
insert into table1(relacion) values([insert into tablaRelacionada(id) values("dato")]);
y que en "relacion" quede guardado el id de lo que introduje en tablaRelacionada.

Gracias :)
  #2 (permalink)  
Antiguo 25/02/2014, 16:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
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)

Etiquetas: conexion, rendimiento
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:44.