Pregunta

Recuerdo que escuché que el proceso de conexión en mysql fue diseñado para ser muy rápido en comparación con otros RDBMS, y que, por lo tanto, usa a la biblioteca que proporciona la agrupación de conexiones (SQLAlchemy) no te ayudará mucho si habilitas la agrupación de conexiones.

¿Alguien tiene alguna experiencia con esto?

Estoy receloso de habilitarlo debido a la posibilidad de que si algún código hace algo con estado en una conexión de base de datos y (tal vez por error) no se limpie, el estado que normalmente se limpiaría al cerrar la conexión en su lugar, se propagará al código posterior que obtiene una conexión reciclada.

¿Fue útil?

Solución

No hay necesidad de preocuparse por el estado residual en una conexión cuando se usa el conjunto de conexiones de SQLA, a menos que su aplicación cambie las opciones de conexión, como los niveles de aislamiento de transacciones (que generalmente no es el caso). El grupo de conexiones de SQLA emite un connection.rollback () en la conexión cuando se vuelve a registrar, por lo que cualquier estado transaccional o bloqueos se borran.

Es posible que el tiempo de conexión de MySQL sea bastante rápido, especialmente si se está conectando a través de sockets Unix en la misma máquina. Si utiliza un grupo de conexiones, también quiere asegurarse de que las conexiones se reciclen después de un período de tiempo dado que la biblioteca cliente de MySQL cerrará las conexiones que están inactivas durante más de 8 horas automáticamente (en SQLAlchemy esta es la opción pool_recycle).

Puede hacer rápidamente un banco de conexiones de agrupación de conexiones frente a no con una aplicación SQLA cambiando la implementación de agrupación del valor predeterminado de QueuePool a NullPool, que es una implementación de agrupación que en realidad no agrupa nada: se conecta y se desconecta para Real cuando se adquiere la conexión proxy y luego se cierra.

Otros consejos

Incluso si la parte de conexión de MySQL en sí es bastante resbaladiza, presumiblemente todavía hay una conexión de red involucrada (ya sea de bucle invertido o física). Si está haciendo una gran cantidad de solicitudes, eso podría resultar muy costoso. Dependerá (como suele ser el caso) de lo que haga exactamente su aplicación, por supuesto, si está haciendo mucho trabajo por conexión, entonces eso dominará y no ganará mucho.

En caso de duda, haga una prueba comparativa, pero en general confío en que una biblioteca de agrupación de conexiones (al menos, una confiable) debería funcionar correctamente y restablecer las cosas de manera adecuada.

Respuesta corta: necesitas un punto de referencia.

Respuesta larga: depende. MySQL es rápido para la configuración de la conexión, por lo que evitar ese costo no es una buena razón para utilizar la agrupación de conexiones. El lugar donde gana es si las consultas son pocas y rápidas, ya que verá una ganancia con la agrupación.

La otra preocupación es cómo la aplicación trata el subproceso de SQL. Si no realiza transacciones SQL y no hace suposiciones sobre el estado del subproceso, la agrupación no será un problema. OTOH, el código que se basa en el cierre del hilo para descartar las tablas temporales o para deshacer las transacciones tendrá muchos problemas con la agrupación.

La agrupación de conexiones acelera el hecho de que no tiene que crear un objeto java.sql.Connection cada vez que realiza una consulta de base de datos. Utilizo el grupo de conexiones Tomcat a una base de datos mysql para aplicaciones web que realizan muchas consultas, durante la carga de usuarios alta hay una notable mejora en la velocidad.

Hice un servicio RESTful simple con Django y lo probé con y sin agrupación de conexiones. En mi caso, la diferencia fue bastante notable.

En una LAN, sin ella, el tiempo de respuesta fue de entre 1 y 5 segundos. Con ello, menos de 20 ms. Los resultados pueden variar, pero la configuración que estoy usando para MySQL & amp; Los servidores Apache son bastante estándar de gama baja.

Si está sirviendo páginas de UI a través de Internet, es posible que el tiempo adicional no sea perceptible para el usuario, pero en mi caso fue inaceptable, así que opté por usar el grupo. Espero que esto te ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top