2010-05-10 13 views
5

Tengo una aplicación PHP que se ejecuta en un servidor Apache con bases de datos MySQL. Basado en el subdominio al que acceden los usuarios, los estoy conectando a una base de datos (sub1.domain.com se conecta a database_sub1 y sub2.domain.com se conecta a database_sub2). En este momento hay 10 combos de subdominio-base de datos, pero ese número podría crecer hasta más de 100.¿Debería preocuparme el rendimiento con las conexiones a múltiples bases de datos?

Entonces, ¿es esto algo malo?

Considerando mi situación, ¿es mysql_pconnect el camino a seguir?

Gracias, y por favor avíseme si hay más información útil.

Josh

+0

¿Puede decir de qué usuario o de la solicitud qué subdominio va a utilizar? –

Respuesta

0

Depende en parte en el resto de su configuración, pero siempre que cada transacción sólo implica una conexión a continuación, el código de cliente de base de datos debe realizar como era de esperar - casi lo mismo que con una sola base de datos, pero con más posibilidades de mejorar el rendimiento de los servidores de bases de datos, hasta el límite del ancho de banda de la red.

Si más de una conexión participa en una transacción, entonces probablemente necesite un administrador de transacciones que cumpla con XA, y estos generalmente conllevan una sobrecarga de rendimiento significativa.

0

No, no es algo malo.

Es cuestión de número de conexiones en paralelo en total. Esto se puede definir por "max_connections" en la configuración de MySQL (por defecto es 151 desde MySQL 5.1.15), y está limitado por la capacidad de su plataforma (es decir, 2048 < en Windows, más en Linux), hardware (RAM) y configuraciones del sistema (principalmente por límite de archivos abiertos). Puede ser un cuello de botella si tiene muchos usuarios paralelos, la cantidad de bases de datos no es importante.

Hice un script que conecta bases de datos de más de 400 en una ejecución (uno tras otro, no paralela) y me di MySQL + PHP manejar muy bien (no hay pérdidas de memoria significativas, no es gran generales). Así que supongo que no habrá ningún problema con su configuración.

Y, finalmente, mysql_pconnect generalmente no es bueno pensar en desarrollo web si no hay una sobrecarga significativa en la conexión de la base de datos per se. Tienes que administrarlo muy cuidadosamente para evitar problemas con max_connections, bloqueos, secuencias de comandos pendientes, etc. Creo que pconnect tiene un uso limitado (es decir, el trabajo cron se ejecuta cada segundo o algo así)

1

¿Es esta una aplicación que has escrito? ?

Si es así, desde el punto de vista del mantenimiento esto puede convertirse en una pesadilla.

¿Qué sucede cuando modifica el programa y necesita cambiar la base de datos?

A menos que tenga una herramienta de migración suave para ayudarlo a realizar cambios en todas sus bases de datos para el nuevo esquema, puede encontrarse en un mundo de dolor.

Sabemos que es posible ser demasiado lejos en este proyecto ahora, pero si un poco de relación adicional se agregará al esquema para diferenciar entre los dominios (empresas/usuarios), puede ejecutar a todos de una base de datos con poca sobrecarga adicional .

Si el rendimiento realmente se convierte en un problema (Read this) puede implementar Clustering u otra solución elegante, pero al menos no tendrá más de 100 bases de datos para mantener.

Cuestiones relacionadas