Ricordo dai podcast stackoverflow che Fog Creek utilizza un database per cliente per Fogbugz . Presumo che ciò significhi che i server di Fogbugz On Demand hanno decine di migliaia di database.
Stiamo appena iniziando a sviluppare un'app Web e abbiamo un problema simile da risolvere (molti clienti con i loro dati isolati).
Quali problemi dovrei aspettarmi con l'uso di un database per cliente? Come posso risolverli?
I miei pensieri iniziali
Vantaggi di un database per cliente
- Schema di database più semplice
- Backup più semplici: è possibile eseguire il backup di ogni cliente a sua volta senza influire realmente sugli altri clienti.
- Semplifica l'esportazione dei dati di un determinato cliente.
- Migliori prestazioni della cache: una scrittura su una delle tabelle più attive influisce solo sul singolo cliente che ha eseguito la scrittura.
- Più facile da scalare su hardware. Ad esempio, quando dobbiamo passare da 1 a 2 server, spostiamo solo metà dei nostri clienti sul nuovo server.
svantaggi
- MySQL può far fronte a 5.000 database? Le prestazioni farebbero schifo?
- Le modifiche allo schema possono essere difficili da replicare in tutti i database. Dovremmo davvero avere un piano automatizzato per questo, come il versioning dello schema e uno script che capisca come portare un database da una versione all'altra.
- Fare qualsiasi cosa comune a tutti i nostri clienti potrebbe essere imbarazzante o impossibile
- Simile al precedente, ma qualsiasi analisi che vogliamo eseguire su tutti i nostri clienti potrebbe essere impossibile. Come dovremmo tenere traccia dell'utilizzo tra tutti i clienti, ad esempio?
USE CompanyData;