18 votes

Avantages/inconvénients de l'utilisation de plusieurs bases de données par rapport à l'utilisation d'une seule base de données

J'ai besoin de concevoir une application Windows qui représente plusieurs "clients" dans SQL Server. Chaque client a le même modèle de données, mais il est indépendant.

quels seront les avantages/inconvénients d'utiliser plusieurs bases de données par rapport à une seule base de données.

quel est le meilleur moyen de réaliser ce travail. si l'on choisit une seule base de données, quelles seront les étapes à suivre pour cela.

Édité :

Une chose est que la base de données sera hébergée dans le compte cloud (Rackspace).

19voto

Gary Walker Points 8097

Ne stockez pas les données de plusieurs clients dans la même base de données - j'ai connu des entreprises qui ont dû passer beaucoup de temps / effort / argent à corriger cette erreur. J'ai même connu des clients refusant de partager un ordinateur de base de données même si les bases de données sont séparées - du côté positif, ces clients sont généralement prêts à payer pour le matériel supplémentaire.

  1. Les problèmes liés à la sécurité seule devraient vous empêcher de faire cela. Vous perdrez de gros clients à cause de cela.

  2. Si vous avez des clients qui refusent de mettre à jour leur logiciel, cela peut être très difficile si vous partagez une seule base de données. Des bases de données séparées permettent aux clients de continuer à utiliser l'ancienne structure de base de données jusqu'à ce qu'ils soient prêts à mettre à jour.

  3. Vous limitez artificiellement une partition de données naturelle qui pourrait offrir une évolutivité significative à votre solution. De petits clients multiples peuvent toujours partager un serveur de base de données, ils voient simplement leurs propres bases de données/catalogues, ou ils peuvent fonctionner sur des serveurs/instances de base de données séparés.

  4. Vous compliquez la conception de votre base de données car vous devrez distinguer les données des clients qui seraient autrement naturellement séparées, c'est-à-dire devoir fournir CustomerID sur chaque clause where.

  5. Vous ralentissez votre base de données en raison de plus de lignes dans toutes les tables. Vous utiliserez la mémoire de la base de données plus rapidement car CustomerID fait maintenant partie de chaque index, et moins d'enregistrements peuvent être stockés dans chaque nœud d'index. Votre base de données est également plus lente en raison de la perte de l'avantage inhérent de la localité de la référence.

  6. Un retour en arrière des données pour 1 client peut être très difficile, voire essentiellement impossible à mesure que la base de données grandit - vous aurez besoin de procédures personnalisées pour le faire qui sont beaucoup plus lentes et gourmandes en ressources qu'une restauration simple et standard à partir d'une sauvegarde.

  7. Les grandes bases de données peuvent être très difficiles à sauvegarder/restaurer en temps opportun, nécessitant éventuellement des dépenses supplémentaires en matériel pour le rendre assez rapide.

  8. Vos applications utilisant la base de données seront plus difficiles à maintenir et à tester.

  9. Les erreurs peuvent être beaucoup plus destructrices car vous pouvez compromettre tous vos clients par une seule erreur.

  10. Vous empêchez l'amélioration possible des performances à faible latence en contraignant votre base de données à un seul emplacement. Par exemple, un client étranger utilisera des réseaux lents et à haute latence tout le temps.

  11. Vous serez connu en tant que DBA stupide, ou DBA au chômage, ou peut-être les deux.

Il y a cependant quelques avantages à une conception de base de données partagée.

  1. Les schémas de table communs, les tables de code, les procédures stockées, etc. n'ont besoin d'être entretenus et stockés qu'à un seul endroit.

  2. Les coûts de licence peuvent être réduits dans certains cas.

  3. Certaines opérations de maintenance sont plus faciles, bien que presque certainement pires dans l'ensemble en utilisant une approche combinée.

  4. Si la plupart de vos clients sont très petits, vous pouvez avoir une faible utilisation des ressources en ne combinant pas les serveurs (c'est-à-dire un coût relativement élevé). Vous pouvez atténuer le coût élevé en regroupant les clients avec leur autorisation et leur compréhension explicites, mais en utilisant toujours des bases de données séparées pour les clients plus importants. Vous devez certainement être explicite et upfront avec vos clients dans cette situation.

Sauf le partage des coûts des serveurs, c'est toujours une très mauvaise idée - mais le coût peut aussi être un aspect très important. C'est vraiment la seule justification pour cette approche - évitez-la autant que possible cependant. Peut-être vaudrait-il mieux augmenter un peu plus le prix de votre produit, ou ne pas être en mesure de supporter des clients très petits pour un prix bon marché.


La lecture d'une analyse de la panne récente d'Atlassian révèle que cette erreur est précisément la raison pour laquelle ils ont tant de mal à se remettre.

Il y a cependant un problème :

Atlassian peut, en effet, restaurer toutes les données à un point de contrôle en quelques heures.

Cependant, s'ils le faisaient, alors que les ~400 entreprises impactées récupéreraient toutes leurs données, tout le monde perdrait toutes les données engagées depuis ce point

Maintenant, les données de chaque client doivent être restaurées sélectivement. Atlassian n'a pas d'outils pour le faire en masse.

L'article souligne également que certains clients migrent déjà loin d'Atlassian pour leur produit OpsGenie, et perdront certainement aussi des affaires futures. Au minimum, ce sera un gros problème pour leur entreprise.

Ils ont également commis une grosse erreur en ignorant le client pendant cette panne.

7voto

Lasse V. Karlsen Points 148037

Je suppose que par "clients multiples", vous ne stockez pas seulement les informations des clients, vous hébergez des bases de données pour une application pour les clients, comme des systèmes CRM.

Si c'est le cas, alors je ne stockerais certainement pas tout dans la même base de données.

Raisons:

  • La sauvegarde, lorsqu'un client appelle et dit qu'il a besoin de restaurer une sauvegarde parce qu'un stagiaire a réussi à nettoyer la base de données de production et non celle de test, vous ne voulez pas avoir à gérer tous les autres clients en même temps
  • Sécurité, même avec un bug dans l'application, il ne pourra pas accéder aux données des autres clients. De plus, imaginez si un client est un peu trop détendu dans ses propres considérations de sécurité et divulgue des mots de passe ou autre à, si les pirates découvrent un moyen d'accéder à la base de données de ce client, imaginez les conséquences si cela inclut également tous les autres clients que vous hébergez.
  • Politique, certains clients ne permettront pas de mélanger leurs données avec celles d'autres clients même si vous pouvez garantir à 100 % que l'accès à leurs données ne sera pas (accidentellement) donné à d'autres clients

En conclusion: des bases de données séparées.

3voto

Nadeem_MK Points 2451

Certains des avantages de chaque approche à prendre en compte sont :

Base de données unique

  • Les données provenant de différents services peuvent être liées ensemble par des contraintes de clé étrangère
  • Les extractions analytiques sont plus simples à écrire et plus rapides à exécuter
  • En cas de catastrophe, restaurer la plateforme à un état cohérent est plus facile
  • Pour des données référencées par plusieurs services, les données mises en cache par un service sont susceptibles d'être utilisées rapidement par un autre service
  • L'administration et la surveillance sont plus simples et moins chères initialement

Bases de données multiples

  • Le travail de maintenance, les problèmes matériels, les violations de sécurité, etc. n'ont pas nécessairement un impact sur l'ensemble de la plateforme
  • En supposant que chaque base de données est sur du matériel séparé, l'extension de plusieurs machines entraîne plus d'avantages de performance que l'extension d'une seule grosse machine

Source

2voto

T.S. Points 3446

Un jour, votre développeur fera une erreur et un client pourra accéder aux informations d'un autre client. Vous perdrez vos clients en conséquence. Cela seul devrait vous dire que plusieurs clients ne peuvent pas être dans une seule base de données. Personne ne voudra être votre client s'il sait cela.

Dois-je vraiment passer en revue tous les problèmes qui finiront par se produire si tel est le cas ? La réponse est simple ici - NON. Vous ne voulez pas avoir les informations de plusieurs clients dans la même base de données.

La seule fois où cela se produit est si vous avez une base de données multiplexeur pour suivre les connexions des clients, les sessions, etc. Mais les données utilisées et stockées par les clients doivent être dans une base de données dédiée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X