2012-06-28 22 views
7

He hecho algunas investigaciones sobre esta pregunta (tanto a través de google y aquí), pero no he encontrado nada, sentí que coincidía con mi situación, así que estoy preguntando.¿Bases de datos múltiples o muchas tablas?

que tienen un proyecto que cuenta actualmente con una sola cuenta - un modelo de entorno, y busca expandirse a una cuenta - muchos entornos. Los entornos serán idénticos (al menos en lo que se refiere a la estructura de la tabla) y requerirán alrededor de 100 tablas. Estoy dividido entre dos enfoques posibles:

  1. utilizar una sola base de datos, la tabla de prefijo para separar cada medio ambiente y una tabla de cuentas sin prefijo
  2. utilizar muchas bases de datos - una base de datos central de cuentas, y una separada para cada uno entorno (el central probablemente tendrá otros datos centrales únicos, como tablas para nuestro software de foro)

¿Hay algún aumento/preocupación significativo en el rendimiento con cualquiera de los enfoques? Los datos (al menos por ahora) residen todos en el mismo servidor físico. Las consultas solo deben acceder a un único entorno (excepto en circunstancias muy excepcionales) y, por supuesto, al registro de las cuentas principales.

+0

encontrado este enlace http://stackoverflow.com/questions/696682/mysql-many-tables-or-many-databases –

+0

también este enlace http://forums.mysql.com/read.php?125,181078 , 181078 –

Respuesta

3

Interesante pregunta. Como respuesta estándar, sugeriría dejar que una instancia ejecute todas las cuentas. Es decir. la solución de prefijo. Este es el enfoque que utilizan los proveedores de hosting.

Parece tener sentido tener un RDBMS ejecutando el programa. Más fácil para copias de seguridad y otras tareas de todo el sistema. Sugeriría que, en términos de rendimiento, una instancia en ejecución va a ser mucho más eficiente que ejecutar un proceso separado para cada cuenta.

Si necesita habilitar el equilibrio de carga, el modelo 'prefijo' también sería más fácil de escalar ya que la mayoría de los RDBMS modernos tienen complementos/características para admitir este tipo de funcionalidad, en lugar de tener que configurarlo varias veces para cada instancia cada cuenta.

Los sistemas de bases de datos modernos son fácilmente capaces de manejar miles de solicitudes por segundo, no tendrán ninguna pérdida de rendimiento al buscar nombres de tablas personalizadas (con prefijo). Siempre que pueda obtener una forma simple de jerarquía (prefijo de cuenta) para separar cuentas, no debería tener problemas para ejecutar miles de tablas.

El único inconveniente potencial es la seguridad. Y en la mayoría de los casos, incluso tener varios servidores no solucionará su problema de seguridad.

0

yo diría que el uso de muchas bases de datos para permitir la futura modificación de los distintos entornos. Es dudoso que esté hablando de datos estáticos que usaría todo el sitio, cada sitio merece su propio conjunto de datos ...

Si no fuera por otro motivo, (como dije antes) para permitir modificaciones.

3

creo que sería más sencillo sólo para gestionar una base de datos. Esto facilitará mucho más el desarrollo y la configuración que tener muchas bases de datos de las que preocuparse por la configuración correcta.

En términos de rendimiento, puede dejar que el DBMS manejar la agrupación/material distribuido, por lo que no tendrá que preocuparse por ello. Dividir los datos usted mismo no va a hacer que las cosas sean más rápidas por lo general, ya que el DBMS puede (generalmente) hacer un trabajo mucho mejor en ese momento, entonces usted puede.

3

Tenemos en funcionamiento la base de datos múltiple, y diferentes proveedores de bases de datos (DB2, Oracle, MySQL). PITA ENORME, aunque parte de ese dolor puede deberse al hecho de que cada base de datos pertenece a un grupo diferente . Pero si alguna vez necesita unir datos (cree que las circunstancias son raras AHORA, pero espera ...) en la base de datos (a diferencia de la aplicación) lamentará la solución de servidor múltiple.

0

Actualmente, el proyecto que estoy trabajando es similar en ese sentido; una cuenta para múltiples sitios.

La solución que he pasado para que se delega la autenticación, un servicio que únicamente se ocupa de cuestiones de autenticación y verificable afirmaciones acerca de una identidad. Esto se puede combinar con la autorización también. Para tener una idea de lo que se requiere, puede consultar el proyecto OpenID y OAuth2 para obtener autorización.

La configuración de este servicio no es sencilla (aunque el sitio OpenID tiene guías de configuración), pero proporciona la flexibilidad para mover sus entornos a diferentes ubicaciones físicas sin tener que cambiar el código. De hecho, puede incluso mantener una sola base de datos y quizás mover un entorno a una máquina dedicada cuando gana más tracción que los demás.

Cuestiones relacionadas