2010-01-16 8 views
9

Estoy queriendo escuchar lo que otros piensan acerca de esto? Actualmente, hago una conexión de base de datos mysql dentro de un archivo de tipo de encabezado que luego se incluye en la parte superior de cada página de mi sitio. Entonces puedo ejecutar tantas consultas como quiera en esa 1 conexión abierta. SI la página está construida a partir de 6 archivos incluidos y hay 15 consultas diferentes de mysql, entonces todas se ejecutarán en esta conexión 1.En PHP/MySQL, ¿debo abrir múltiples conexiones de bases de datos o compartir 1?

Ahora a veces veo clases que hacen conexiones múltiples, como 1 por cada consulta.

¿Hay algún beneficio de usar un método sobre el otro? Creo que 1 conexión es mejor que múltiple, pero ¿podría estar equivocado?

+1

Con muchas bases de datos (por ejemplo PostgreSQL) conexiones de apertura es caro. Debe verificarse Auth, se asignan búferes ... a veces puede funcionar 30 milisegundos buenos en mi cuadro dev, si no más. Esto es menos cierto con mysql - las conexiones son más rápidas. Pero todavía habrá gastos generales, por lo que es deseable conectarse lo menos posible. –

Respuesta

10

crear conexiones pueden ser costosos ( no tengo una referencia para esta afirmación aúnEditar:Here it is Aha) por lo que parece como si el consenso es el uso de un menor número de conexiones. Usar una única conexión para todas las consultas en una sola página parece ser una mejor opción que las conexiones múltiples.

+0

+1, buen enlace ... –

+0

No solo debe utilizar una sola conexión por solicitud HTTP, debe considerar el uso de conexiones persistentes para escalar su aplicación. Tanto las interfaces mysqli como PDO en PHP admiten conexiones persistentes. – Kitson

6

En PHP + MySQL por lo general no hay mucho SENCE utilizar múltiples conexiones por página (apenas más lento y un poco más de memoria RAM consumida).

La única forma en que podría ser útil es cuando alteramos paremters de conexión que podría INTERFER con otras páginas (como el cotejo). Pero los buenos programas PHP usualmente nunca hacen ese tipo de cosas.

Además, es una buena idea para permitir las conexiones persistentes, por lo que el 1 de conexión de MySQL sería reutilizar en ejecuciones de páginas múltiples.

+0

+1 para sus dos primeros puntos - justo en el dinero. Pero en cuanto al último punto, las conexiones persistentes no son todo lo que se cree que son. Por un lado, cualquier estado de conexión pasa del script al script, lo que puede tener consecuencias no deseadas (tablas temporales que no se limpian, transacciones colgantes, etc.). Además, terminas con muchas de tus valiosas conexiones de bases de datos asociadas a subprocesos apache inactivos, lo cual es solo una pérdida de recursos. Es mejor usar un grupo de conexiones real, a lo largo de las líneas de SQLAlchemy –

2

Si realmente depende del nivel de actividad que sospecha que generará el sitio; si es un sitio web de alto tráfico, pronto se quedarán sin conexiones (a menos que configure las conexiones máximas de MySQL a un nivel estúpidamente alto, pero eso eventualmente hará que el servidor se detenga).

Por lo general, recomiendo que el anverso de un sitio web utilice un objeto de base de datos compartida (singleton is your friend), ya que no requiere mucha disciplina escribir con esto, es importante y no perderá Tiempo haciendo conexiones. Si necesita consultas concurrentes adicionales en el backend, no debería ser una gran oferta, ya que no es probable que sea un área con mucho tráfico.

1

no veo ningún beneficio del uso de múltiples conexiones, I 'd más bien creo que es un signo de mala estructura. Estas son las razones por las que se me ocurre no usar varias conexiones:

  • Debe inicializar la base de datos varias veces. Establecer las propiedades de conexión al establecer la conexión (como SET NAMES UTF8) tendría que hacerse en varias líneas.
  • Definitivamente es más lento que una sola conexión.
  • Una razón no técnica: Alguien que trabaja con su código más probable es que no va a esperar que podría pasar horas y la depuración de las propiedades de conexión que se había propuesto en otro contexto.

Tener un objeto de conexión global (o una clase que proporciona uno) es el enfoque mucho mejor en PHP.

1

¿Seguro de las clases que hacen múltiples conexiones son no sólo devolver una referencia a la conexión ya abierta cuando uno está abierto? He visto muchas cosas estructuradas de esa manera. Realmente es mejor para el rendimiento usar solo una conexión por página.

Cuestiones relacionadas