Recuerdo de los podcasts de stackoverflow que Fog Creek usa una base de datos por cliente para Fogbugz . Supongo que eso significa que los servidores Fogbugz On Demand tienen 10 de miles de bases de datos.
Recién estamos comenzando a desarrollar una aplicación web y tenemos un problema similar que resolver (muchos clientes con sus propios datos aislados).
¿Qué problemas debo esperar con el uso de una base de datos por cliente? ¿Cómo puedo resolverlos?
Mis pensamientos iniciales
Ventajas de una base de datos por cliente
- Esquema de base de datos más simple
- Copias de seguridad más simples: puede hacer copias de seguridad de cada cliente a su vez sin que realmente afecte a otros clientes.
- Facilita la exportación de datos de un cliente determinado.
- Mejor rendimiento de la memoria caché: una escritura en una de las tablas más activas solo afecta a ese único cliente que realizó la escritura.
- Más fácil de escalar a través del hardware. Por ejemplo, cuando necesitamos pasar de 1 a 2 servidores, simplemente trasladamos la mitad de nuestros clientes al nuevo servidor.
Desventajas
- ¿Puede MySQL hacer frente a 5.000 bases de datos? ¿El rendimiento apestaría?
- Los cambios en el esquema pueden ser difíciles de replicar en todas las bases de datos. Realmente tendríamos que tener un plan automatizado para esto, como versionar el esquema y un script que comprenda cómo llevar una base de datos de una versión a otra.
- Hacer cualquier cosa que sea común a todos nuestros clientes puede ser incómodo o imposible
- Similar a lo anterior, pero cualquier análisis que deseamos realizar en todos nuestros clientes puede ser imposible. ¿Cómo deberíamos rastrear el uso en todos los clientes, por ejemplo?
USE CompanyData;