Je me souviens des podcasts stackoverflow que Fog Creek utilise une base de données par client pour Fogbugz . Je suppose que cela signifie que les serveurs Fogbugz On Demand ont des dizaines de milliers de bases de données.
Nous commençons tout juste à développer une application Web et avons un problème similaire à résoudre (beaucoup de clients avec leurs propres données isolées).
À quels problèmes dois-je m'attendre avec l'utilisation d'une base de données par client? Comment puis-je les résoudre?
Mes pensées initiales
Avantages d'une base de données par client
- Schéma de base de données plus simple
- Sauvegardes plus simples: vous pouvez sauvegarder chaque client à son tour sans que cela ait réellement un impact sur les autres clients.
- Permet d’exporter facilement les données d’un client donné.
- Meilleures performances du cache - une écriture dans l'une des tables les plus actives n'a d'impact que sur le seul client qui a effectué l'écriture.
- Plus facile à adapter à travers le matériel. Par exemple, lorsque nous devons passer de 1 à 2 serveurs, nous ne déplaçons que la moitié de nos clients vers le nouveau serveur.
Désavantages
- MySQL peut-il gérer 5 000 bases de données? La performance serait-elle nulle?
- Les modifications apportées au schéma peuvent être difficiles à répliquer dans toutes les bases de données. Nous aurions vraiment besoin d'un plan automatisé pour cela, tel qu'une version du schéma et un script qui explique comment passer d'une base de données à une autre.
- Faire tout ce qui est commun à tous nos clients peut être gênant ou impossible
- Semblable à ce qui précède, mais toute analyse que nous souhaitons effectuer sur tous nos clients peut être impossible. Comment devrions-nous suivre l'utilisation de tous les clients, par exemple?
USE CompanyData;