Lembro-me dos podcasts de stackoverflow que o Fog Creek usa um banco de dados por cliente para o Fogbugz . Suponho que isso signifique que os servidores Fogbugz On Demand tenham 10s de milhares de bancos de dados.
Estamos apenas começando a desenvolver um aplicativo Web e temos um problema semelhante a ser resolvido (muitos clientes com seus próprios dados isolados).
Quais problemas devo esperar com o uso de um banco de dados por cliente? Como posso resolvê-los?
Meus pensamentos iniciais
Vantagens de um banco de dados por cliente
- Esquema de banco de dados mais simples
- Backups mais simples - você pode fazer backup de cada cliente por vez, sem realmente impactar outros clientes.
- Facilita a exportação de dados de um determinado cliente.
- Melhor desempenho do cache - uma gravação em uma das tabelas mais ativas afeta apenas o cliente único que executou a gravação.
- Mais fácil de escalar no hardware. Por exemplo, quando precisamos passar de 1 para 2 servidores, apenas movemos metade de nossos clientes para o novo servidor.
Desvantagens
- O MySQL pode lidar com 5.000 bancos de dados? O desempenho seria péssimo?
- As alterações no esquema podem ser difíceis de replicar em todos os bancos de dados. Realmente teríamos que ter um plano automatizado para isso, como versionar o esquema e um script que entenda como levar um banco de dados de uma versão para outra.
- Fazer tudo o que é comum a todos os nossos clientes pode ser estranho ou impossível
- Semelhante ao anterior, mas qualquer análise que desejamos executar em todos os nossos clientes pode ser impossível. Como devemos rastrear o uso em todos os clientes, por exemplo?
USE CompanyData;