He creado esta aplicación web (php y mysql) que almacena información para varias organizaciones (aproximadamente 20 clientes actualmente).
El escenario actual almacena información relacionada con el cliente en bases de datos individuales, por lo que hay 20 bases de datos de clientes y 1 base de datos maestra.
Una de las principales ventajas aquí es que a medida que cada cliente db está aislado, se secuencia la numeración de los artefactos del cliente (informes, auditorías), etc. dando a nuestros clientes una sensación de seguridad.
Cada base de datos tiene aproximadamente 15 tablas, y la mayoría de las filas en una tabla son alrededor de 2000. Se espera que esto supere los 5000 registros, como máximo.
Administrar un solo cambio de nivel de base de datos significa cambiar 20 bases de datos, pero en el raro caso de que necesite hacer dicho cambio, utilizo un script que hace esto en una sola llamada de función.
Estamos en un acuerdo de alojamiento compartido, y nuestro ISP nos proporciona un número limitado. de bases de datos; y eso es lo que me llevó a pensar en términos de centralizar la base de datos; para que TODOS los datos del cliente puedan almacenarse en la base de datos maestra.
Por supuesto, algunos problemas importantes que surgen son:
a. Mantener la secuencia de artefactos (esto podría solucionarse creando una clave de referencia adicional) b. Velocidad y rendimiento (en cuyo caso puedo crear índices para acelerar las cosas) c. Seguridad: esto se administrará como cada consulta que obtenga información del cliente. también rastreará su client_id
En el futuro, podríamos necesitar comparar los conjuntos de datos de una organización con otra, pero creo que eso también se puede lograr en una base de datos centralizada. Estoy algo inclinado (por razones de rendimiento y mantenimiento) a pasar a una base de datos centralizada.
¿Crees que pasar a una base de datos centralizada tiene más sentido que permanecer como estamos (en bases de datos individuales)?
Gracias por su consejo.
Respuestas:
Hay riesgos heredados y recompensas para ambos sistemas. Trabajé para una empresa financiera que apoyaba a aproximadamente 40 clientes (bancos nacionales) en 1 base de datos. Luego compramos otra compañía que vendía software similar y que se había ido con 1 base de datos por cliente. Finalmente, la empresa se declaró en quiebra y tuvimos que exportar todos los datos de los usuarios. Esto es lo que la gente con la que trabajé y que encontré:
Pro de Single DB:
Contras de DB simple:
Profesionales de múltiples bases de datos:
Contras de múltiples bases de datos:
¡Al final, mi recomendación de haber visto y hecho ambas cosas es tener "disciplina"! Creo que la opción multi-db es un poco mejor porque te protege, pero nunca puedes dejar que tus clientes hagan una elección que haga que agregues funcionalidades solo a ellos o te encaminarás al fracaso.
fuente
Tendría una base de datos separada para clientes separados. Un cliente puede exigir esto por razones de seguridad, es decir, solo su sitio tiene acceso a sus datos. También significa que si un cliente desea mover sus datos, será mucho más fácil de administrar.
También significa que si hay un problema con la base de datos de un cliente, no afecta a todos los demás.
Si desea comparar datos entre clientes, debe hacerlo por separado.
Si se está quedando sin bases de datos que puede tener, entonces tal vez debería considerar cambiar su proveedor de host.
fuente
La única razón por la que no tendría una base de datos individual para cada cliente es si va a tener 100 o 1000 de clientes / bases de datos. Esto podría ser realmente difícil de manejar, incluyendo hacer cambios en la base de datos o hacer algo en todas las bases de datos. Las acciones que se producen en un gran número de bases de datos múltiples también pueden ser lentas, ya que necesita abrir (y, por lo tanto, cerrar) tantas tablas.
Pero aparte de este caso, creo que varias bases de datos son mejores.
Una ventaja, que puede no ser importante, pero puede ser útil, es que cada cliente obtiene sus propios ID secuenciales (en lugar de posiblemente omitir un montón porque otros clientes agregaron registros).
Además, varias bases de datos permiten que las subtablas (como el tipo de teléfono) sean fácilmente personalizables por cliente sin la necesidad de una identificación de registro principal en estas tablas también.
fuente
Primero la secuencia de artefactos. Supongo que está utilizando claves primarias enteras para proporcionar esto. Realmente debería tener una columna separada de "número de artefacto". Los PK deben ser PK y nada más. La gente habla de "claves naturales" y cosas por el estilo, y me estremezco. Cada vez que confías en que el PK es más que un identificador, vuelve a morderte. Si desea conocer la secuencia de algo, guarde una fecha o un número de secuencia.
Creo que en su caso, la gestión de la configuración lo conduciría a una única base de datos. Mire lo que le cuesta a tiempo mantener y actualizar las bases de datos. ¿Qué costos están asociados con cada versión del software? También piense en el costo cuando obtenga un nuevo cliente y tenga que crear una base de datos y configurar la aplicación para ello. Cualquier cosa puede ser automatizada, la pregunta es, ¿valdrá la pena cuando tenga 100 bases de datos?
En el futuro, es más fácil escalar (particionar, hardware, fragmentación, etc.) una sola base de datos que hacer lo mismo para 100 bases de datos.
Creo que los otros carteles han hecho algunos puntos excelentes, así que no los repasaré.
fuente
Para agregar a las ventajas y desventajas enumeradas hasta ahora:
Profesionales de múltiples bases de datos:
Se evitan los problemas de bloqueo; Tenemos bases de datos donde los clientes pueden activar cambios DDL en algunas de las tablas. Para las tablas más grandes (> 2m de registros) esto bloquea la tabla durante un tiempo considerable. Las únicas personas en desventaja son sus propios usuarios, por lo que esto es aceptable.
Flexibilidad: algunos clientes tienen deseos específicos con respecto a los datos que desean almacenar; la base de datos múltiple nos permitió la flexibilidad de alterar su base de datos específicamente, sin tener que saturar el modelo de datos para los otros clientes.
Contras:
¡Buena suerte al elegir!
fuente
Sé que ya ha elegido una respuesta, pero parece que hay otra solución que no se sugirió:
Mueva todo a una base de datos, pero cree tablas para cada cliente, usando un prefijo, como este:
Es una especie de lo mejor de ambos mundos.
fuente