Je sais que Shopify n'utilise qu'une seule base de données pour tous les magasins. Mais comment peuvent-ils gérer leur base de données avec un si gros volume de données? Est-ce une bonne idée d'utiliser une base de données unique pour plus de 50 000 magasins?
sql-server
database-design
Farid Movsumov
la source
la source
Réponses:
Eh bien, cela dépend vraiment du schéma, du volume, etc. Qu'est-ce qu'un magasin stocke exactement? En quoi est-ce différent de stocker des données sur 50 000 chats ou 50 000 produits ou 50 000 noix à ailes?
Il y a plusieurs raisons (autres que le seul aspect de la taille en soi) pour lesquelles vous ne voudrez peut-être pas stocker les données de 50000 clients différents dans une seule base de données, si en effet les données peuvent être complètement séparées par le client (sans compter les tables de recherche comme les codes postaux ou tables spécifiques à l'application, qui peuvent être regroupées dans une seule base de données centrale):
si un client l'application devient trop, il n'y a pas moyen facile d'extraire seulement leurs données et le déplacer vers une autre instance, serveur, etc. à l' échelle, à moins que vous planifier à l' avance et partition sur quelque chose comme
CustomerID
et ont 50.000 groupes de fichiers (vous limité à 15 000 partitions de toute façon, ou 1 000 si vous utilisez une ancienne version de SQL Server, et avoir trop de groupes de fichiers peut être désastreux ). Notez également que le partitionnement nécessite Enterprise Edition.s'il s'avère que tous vos clients sont tout simplement trop gros pour cette instance, la mise à l'échelle signifie obtenir un nouveau matériel et y déplacer toute la base de données (et potentiellement le faire à nouveau).
la suppression d'un client peut être tout aussi pénible, car vous devrez supprimer quelques% de lignes de très grandes tables, et ce ne sera pas bon marché.
vous aurez probablement une large distribution des données clients (un client avec un milliard de lignes, un autre client avec 5 000). Cela peut conduire à des choses comme le reniflage de paramètres et des performances préjudiciables impliquant la cardinalité et la qualité du plan (car vous réutiliserez probablement les mêmes plans pour les mêmes requêtes contre des ensembles de données très différents).
tous vos clients sont soumis aux mêmes SLA et plans HA / DR. Soit vous avez l'intégralité de la base de données en mode de récupération complète avec des sauvegardes de journaux de n minutes, soit vous êtes simple et vous vous fiez aux sauvegardes complètes + diff. Si vous devez revenir en arrière en raison d'une erreur client ou si vous devez récupérer la base de données à un moment donné, cela affecte chaque client.
il peut y avoir des erreurs dans la récupération des données - des bogues dans les clauses where, par exemple, pourraient conduire un client à voir les données d'un autre client, ou toutes les données des autres clients.
il peut y avoir des implications juridiques (certaines entreprises auront des exigences strictes en place pour que vous ne placiez pas leurs données dans la même base de données que toute autre entreprise, et en particulier celle de leurs concurrents).
si la sécurité des données d'un client est importante, il est beaucoup plus facile d'y parvenir en utilisant la séparation de base de données que la séparation au sein d'une table.
Quelques avantages d'avoir chaque client dans une base de données distincte (ou au moins d'avoir plusieurs bases de données, chacune pour un groupe de clients):
DROP DATABASE
.Quelques inconvénients:
la source