Ich weiß, dass Shopify nur eine Datenbank für alle Shops verwendet. Aber wie können sie mit so großen Datenmengen mit ihrer Datenbank umgehen? Ist das eine gute Idee, eine einzelne Datenbank für mehr als 50.000 Geschäfte zu verwenden?
sql-server
database-design
Farid Movsumov
quelle
quelle
Antworten:
Nun, es hängt wirklich von Schema, Volumen usw. ab. Was genau speichert ein Geschäft? Wie unterscheidet es sich von der Speicherung von Daten über 50.000 Katzen oder 50.000 Produkte oder 50.000 Flügelnüsse?
Es gibt mehrere Gründe (außer nur den Größenaspekt für sich), warum Sie möglicherweise keine Daten für 50.000 verschiedene Kunden in einer einzigen Datenbank speichern möchten, wenn die Daten tatsächlich vollständig vom Kunden getrennt werden können (ohne Nachschlagetabellen wie Postleitzahlen oder anwendungsspezifische Tabellen, die in eine einzige zentrale Datenbank gelangen können):
Wenn ein Kunde aus der Anwendung herauswächst, gibt es keine einfache Möglichkeit, nur seine Daten zu extrahieren und auf eine andere Instanz, einen anderen Server usw. zu verschieben, um sie zu skalieren, es sei denn, Sie planen voraus und partitionieren auf so etwas wie
CustomerID
50.000 Dateigruppen (Sie sind begrenzt) ohnehin auf 15.000 Partitionen oder 1.000, wenn Sie eine ältere Version von SQL Server verwenden und zu viele Dateigruppen haben, kann katastrophal sein . Beachten Sie auch, dass für die Partitionierung die Enterprise Edition erforderlich ist.Wenn sich herausstellt, dass alle Ihre Kunden für diese Instanz einfach zu groß sind, bedeutet Skalieren, dass Sie neue Hardware erwerben und die gesamte Datenbank dorthin verschieben (und dies möglicherweise später erneut tun).
Das Löschen eines Kunden kann ebenso schmerzhaft sein, da Sie einige Prozent der Zeilen aus sehr großen Tabellen löschen müssen, und das ist nicht billig.
Sie werden wahrscheinlich eine breite Verbreitung von Kundendaten haben (ein Kunde mit einer Milliarde Zeilen, ein anderer Kunde mit 5.000). Dies kann zu Parameter-Sniffing und einer nachteiligen Leistung führen, die Kardinalität und Planqualität betrifft (da Sie wahrscheinlich dieselben Pläne für dieselben Abfragen für sehr unterschiedliche Datensätze wiederverwenden werden).
Alle Ihre Kunden unterliegen genau den gleichen SLAs und HA / DR-Plänen. Sie haben entweder die gesamte Datenbank im vollständigen Wiederherstellungsmodus mit n-minütigen Protokollsicherungen oder Sie sind einfach und verlassen sich auf vollständige + diff-Sicherungen. Wenn Sie aufgrund eines Kundenfehlers zurücksetzen müssen oder die Datenbank zu einem bestimmten Zeitpunkt wiederherstellen müssen, betrifft dies jeden einzelnen Kunden.
Es besteht die Möglichkeit von Fehlern beim Abrufen von Daten - Fehler, bei denen Klauseln beispielsweise dazu führen können, dass ein Kunde die Daten eines anderen Kunden oder alle Daten des anderen Kunden sieht .
Dies kann rechtliche Auswirkungen haben (einige Unternehmen haben strenge Anforderungen, dass Sie ihre Daten nicht in derselben Datenbank wie andere Unternehmen und insbesondere die ihrer Konkurrenten ablegen).
Wenn die Sicherheit der Daten eines Kunden wichtig ist, ist dies mit der Datenbanktrennung viel einfacher als mit der Trennung innerhalb einer Tabelle.
Einige Vorteile, wenn jeder Kunde in einer separaten Datenbank gespeichert ist (oder zumindest mehrere Datenbanken, jeweils für eine Gruppe von Kunden):
DROP DATABASE
.Einige Rückschläge:
quelle