J'ai construit cette application web (php et mysql) qui stocke des informations pour diverses organisations (environ 20 clients actuellement).
Le scénario actuel stocke les informations relatives au client dans des bases de données individuelles, il y a donc 20 bases de données client et 1 base de données master.
L'un des principaux avantages ici est que, comme chaque base de données client est isolée, la numérotation des artefacts clients (rapports, audits), etc. est séquencée; donner à nos clients un sentiment de sécurité.
Chaque base de données possède environ 15 tables, et le plus grand nombre de lignes dans une table est d'environ 2000. Cela devrait être augmenté jusqu'à 5 000 enregistrements, au maximum.
La gestion d'une seule modification au niveau de la base de données signifie la modification de 20 bases de données, mais dans les rares cas où je dois effectuer une telle modification, j'utilise un script qui le fait en un seul appel de fonction.
Nous sommes sur un arrangement d'hébergement partagé, et notre FAI nous fournit un nombre limité. des bases de données; et c'est ce qui m'a amené à penser en termes de centralisation de la base de données; afin que TOUTES les données client puissent être stockées dans la base de données master.
Bien sûr, certains problèmes importants qui surgissent sont:
une. Maintenir la séquence des artefacts (cela pourrait être résolu en créant une clé de référence supplémentaire) b. Vitesse et performances (auquel cas je peux créer des index pour accélérer les choses) c. Sécurité: cela sera géré comme chaque requête qui récupère les informations client. suivra également leur client_id
À l'avenir, nous devrons peut-être envisager de comparer les ensembles de données d'une organisation à une autre, mais je pense que cela peut également être réalisé sur une base de données centralisée. Je suis quelque peu enclin (pour des raisons de performances et de maintenabilité) à passer à une base de données centralisée.
Pensez-vous que passer à une base de données centralisée est plus logique que de rester tel que nous sommes (sur des bases de données individuelles)?
Merci pour vos conseils.
Réponses:
Il existe des risques et des avantages hérités pour les deux systèmes. J'ai travaillé pour une société financière qui a accompagné environ 40 clients (banques nationales) sur 1 base de données. Nous avons ensuite acheté une autre entreprise qui vendait des logiciels similaires et qui était allée avec 1 base de données par client. Enfin, l'entreprise a fait faillite et nous avons dû exporter toutes les données des utilisateurs. Voici ce que les gens avec qui j'ai travaillé et que j'ai trouvé:
Avantages de Single DB:
Les inconvénients de Single DB:
Avantages de plusieurs bases de données:
Les inconvénients de plusieurs bases de données:
Au final ma recommandation après avoir vu et fait les deux c'est d'avoir de la "discipline"! Je pense que le choix multi-db est légèrement meilleur car il vous protège mais vous ne pouvez jamais laisser vos clients faire un choix qui vous oblige à ajouter des fonctionnalités uniquement à eux ou vous vous mettrez sur la voie de l'échec.
la source
J'aurais une base de données distincte pour des clients distincts. Un client peut l'exiger pour des raisons de sécurité - c'est-à-dire que seul son site a accès à ses données. Cela signifie également que si un client souhaite déplacer ses données, cela sera beaucoup plus facile à gérer.
Cela signifie également que s'il y a un problème avec la base de données d'un client, cela n'affecte pas tous les autres.
Si vous souhaitez comparer les données entre les clients, vous devez le faire séparément.
Si vous manquez de bases de données que vous pouvez avoir, vous devriez peut-être envisager de changer de fournisseur d'hébergement.
la source
La seule raison pour laquelle je n'aurais pas de base de données individuelle pour chaque client est si vous allez avoir des centaines ou des milliers de clients / bases de données. Cela pourrait devenir très difficile à gérer, y compris apporter des modifications à la base de données ou faire quelque chose dans toutes les bases de données. Les actions qui se produisent sur un grand nombre de bases de données multiples peuvent également être lentes car vous devez ouvrir (et donc fermer) autant de tables.
Mais à part ce cas, je pense que plusieurs bases de données sont meilleures.
Un avantage, qui peut ne pas être important mais peut être utile, est que chaque client obtient ses propres ID séquentiels (au lieu de sauter éventuellement un groupe car un autre client a ajouté des enregistrements).
De plus, plusieurs bases de données permettent aux sous-tables (comme le type de téléphone) d'être facilement personnalisables par client sans avoir besoin d'un ID d'enregistrement parent dans ces tables également.
la source
D'abord le séquençage des artefacts. Je suppose que vous utilisez des clés primaires entières pour fournir cela. Vraiment, vous devriez avoir une colonne "numéro d'artefact" séparée. Les PK devraient être des PK et rien d'autre. Les gens parlent de "clés naturelles" et autres et je grince des dents. Chaque fois que vous comptez sur le PK pour être plus qu'un identifiant, il revient à vous mordre. Si vous voulez connaître la séquence de quelque chose, enregistrez une date ou un numéro de séquence.
Je pense que dans votre cas, la gestion de la configuration vous conduirait à une seule base de données. Regardez ce qu'il vous en coûte à temps pour maintenir et mettre à niveau les bases de données. Quels sont les coûts associés à chaque version du logiciel? Pensez également au coût lorsque vous obtenez un nouveau client et devez créer une base de données et configurer l'application pour cela. Tout peut être automatisé, la question est de savoir si cela en vaudra la peine lorsque vous aurez 100 bases de données?
En fin de compte, il est plus facile de faire évoluer (partitionnement, matériel, partitionnement, etc.) une seule base de données que de faire de même pour 100 bases de données.
Je pense que les autres affiches ont fait quelques excellents points donc je ne vais pas les passer en revue.
la source
Pour ajouter aux avantages et aux inconvénients répertoriés jusqu'à présent:
Avantages de plusieurs bases de données:
Les problèmes de verrouillage sont évités; nous avons des bases de données où les clients peuvent déclencher des modifications DDL sur certaines tables. Pour les tables plus grandes (> 2 m d'enregistrements), cela verrouille la table pendant une durée considérable. Les seules personnes désavantagées sont leurs propres utilisateurs, c'est donc en quelque sorte acceptable.
Flexibilité - certains clients ont des souhaits spécifiques concernant les données qu'ils souhaitent stocker; multi-base de données nous a permis de modifier spécifiquement leur base de données, sans avoir à encombrer le modèle de données pour les autres clients.
Les inconvénients:
Bonne chance dans le choix!
la source
Je sais que vous avez déjà choisi une réponse, mais il semble qu'il y ait une autre solution qui n'a pas été suggérée:
Déplacez tout dans une base de données, mais créez des tables pour chaque client, en utilisant un préfixe, comme ceci:
C'est en quelque sorte le meilleur des deux mondes.
la source