2012-01-02 9 views
6

Así que tengo esta aplicación que tendría varios módulos, desde la gestión de proyectos a los módulos de contabilidad. La pregunta es, ¿debería tener una base de datos por cliente (empresa) o una base de datos que contenga todo?una base de datos por cliente o todos los clientes en una base de datos. ¿Cuál debería usar para una aplicación en línea?

1) ¿cuál sería mejor en cuanto a rendimiento?
2) va a ser mucho más difícil administrar múltiples bases de datos o es manejable.
3) Vamos a tener la misma aplicación para todos los usuarios, lo que significa que el mismo esquema se va a usar sin importar el número de bases de datos.
4) algunos clientes van a tener mucho de eso (los contadores, por ejemplo, pueden tener hasta 2 millones de filas agregadas por año en una tabla), mientras que otros van a utilizar mucha menos información.

¿Qué crees que debería usar?

+0

posible duplicado de [Esquemas múltiples frente a tablas enormes] (http://stackoverflow.com/questions/8340721/multiple-schemas-versus-enormous-tables) [Esta respuesta] (http://stackoverflow.com/a/8343142/562459) proporciona una buena visión general de los problemas. –

Respuesta

5

1) Tener bases de datos separadas permite una distribución más fácil de la carga en varios hosts, levanta el techo de muchas maneras; disco, memoria, bloqueo, CPU, tiempo de respaldo, etc. Si realmente quiere poner millones de filas en mysql, sin duda es una buena idea con bases de datos separadas (no solo esquemas) e incluso instancias separadas, de modo que los clientes que consumen recursos no impongan tiempo de inactividad a los que consumen menos recursos.

2) Va a ser exactamente N veces más difícil de administrar donde N es el número de bases de datos: o) Este costo adicional debe compararse con el costo de usar solo un db/schema y administrar la separación del cliente en código. También es intrínsecamente mucho más difícil de administrar si tiene que llamar al servicio de atención al cliente de su empresa de alojamiento, o incluso a su dBA gruñón local, en lugar de ejecutar un script ordenado desde la consola cada vez que necesita actualizar el esquema o crear una nueva base de datos.

Algunas bases de datos y los marcos de persistencia tienen soporte para multi-alquiler, Oracle tiene esta y el apoyo está empezando a surgir en Hibernate 4.

A pesar de que muchos argumentos apuntan en la dirección de las bases de datos separadas, que es general es posible usar solo una base de datos también.

+0

1) sí, ya tenemos algunos usuarios en una aplicación anterior que están creando aproximadamente 2 millones de filas al año (contadores especialmente). 2) el problema con esto es ¿cómo me aseguro de que todas las bases de datos se actualizaron cuando ejecuto el script? – redmoon7777

+0

@ redmoon7777 bien, eso depende completamente de usted, al igual que le corresponde a usted garantizar la separación de datos en un databse de multitenancy. –

+0

tienes razón. He estado buscando por varios días y todavía no puedo encontrar la respuesta "correcta". En este momento me estoy inclinando hacia múltiples bases de datos. – redmoon7777

0

la seguridad será un verdadero oso si no utiliza bases de datos separadas, independientemente de cualquier otra inquietud. Tendría que ser extremadamente cauteloso con la codificación para asegurarse de que una empresa no vea (o modifique o elimine) los datos de los demás.

+0

Siempre que la base de datos se encuentre detrás de un conjunto de scripts y no esté expuesta directamente a los clientes, no es tan difícil garantizar que los datos estén seguros. –

+0

¿qué tal el rendimiento? – redmoon7777

+0

Prefiero tener algún otro mecanismo que impida el acceso a los datos además de confiar en el código, especialmente cuando se utilizan codificadores contratados de competencia dudosa. –

3

En teoría, las bases de datos múltiples serán mejores para el rendimiento. Es decir, si pudiera ponerlos en controladores de disco separados. Pero en realidad probablemente todos estarán en el mismo disco, por lo que probablemente no habrá ganancia de rendimiento. Además, los discos adicionales se utilizan mejor como miembros adicionales de matrices RAID que como discos lógicos independientes adicionales a los que puede descargar datos.

Desde el punto de vista del mantenimiento, las bases de datos múltiples van a ser una pesadilla. Cada ALTERACIÓN a la base de datos tendrá que hacerse N veces, donde N es la cantidad de clientes. Por supuesto, nunca lo hará a mano, por lo que siempre tendrá que hacerlo mediante programación, y muy pronto comenzará a apreciar lo fácil que sería si pudiera hacer las mismas ALTERACIONES con unos pocos clics en la consola de administración en lugar de hacerlo tener que escribir código para hacerlos por usted todo el tiempo.

+0

tiene razón, pero ¿la administración de bases de datos es el único problema con el uso de múltiples bases de datos? – redmoon7777

+0

Bueno, no es muy conveniente tener múltiples bases de datos si planeas ejecutar cualquier consulta entre bases de datos, pero creo que si realmente tiene que hacerse, se puede hacer, por lo que no es un stop-stopper . –

+0

cierto, eso afectaría al script para reunir datos en todos los clientes a la vez. – redmoon7777

Cuestiones relacionadas