Frage

Stellen Sie sich ein Mobilgeräte-Manager-System vor, das Informationen für jeden Benutzer enthält, z. B. eine Tabelle, in der die Apps gespeichert sind, die er auf dem Telefon installiert hat, Prüfdetails, Benachrichtigungsinformationen usw.Ist es sinnvoll, für jeden Benutzer ein separates Schema mit den entsprechenden Tabellen zu erstellen?Die Anzahl der Tabellen ist für einen einzelnen Benutzer groß und beträgt jeweils etwa 30 Tabellen.Wäre es besser, ein separates Schema zu haben, in dem alle diese Informationen in diesen Tabellen abgelegt werden (wodurch wiederum riesige Tabellen entstehen?) oder ein Schema für jeden Benutzer?

Dank im Voraus

War es hilfreich?

Lösung

Ich möchte sehen, welche Methode hinsichtlich der Abfrage in der Datenbank effizienter ist.

In einer mandantenfähigen Datenbank ist das Abfragen nur ein Teil des Problems.Weitere Teile des Problems sind Kosten, Datenisolierung und -schutz, Wartung und Notfallwiederherstellung.Diese sind bedeutsam;Du kippen halten nur Abfrageeffizienz in einer mandantenfähigen Datenbank.

Mandantenfähige Lösungen reichen von einer Datenbank pro Mandant (nichts geteilt) bis zu einer Zeile pro Mandant (alles geteilt).

„Nichts geteilt“, „separate Datenbank“ oder eine Datenbank pro Mandant

  • Am teuersten pro Kunde.(Eine große Anzahl von Clients bedeutet eine große Anzahl von Servern.)
  • Höchster Grad an Datenisolation.
  • Die Notfallwiederherstellung für einen einzelnen Mandanten ist einfach und unkompliziert.
  • Wartung ist theoretisch schwieriger, da Änderungen in jeder Datenbank durchgeführt werden müssen.Aber Ihre DBMS unterstützen möglicherweise problemlos die Ausführung gespeicherter Prozeduren in jeder Datenbank.(SQL Server verfügt über eine undokumentierte gespeicherte Systemprozedur, zum Beispiel sp_msforeachdb.Sie können wahrscheinlich Ihre eigenen schreiben.) „Nichts teilen“ lässt sich auch am einfachsten anpassen, aber das wirft auch mehr Wartungsprobleme auf.
  • Niedrigste Anzahl von Zeilen pro Tabelle.Die Abfragegeschwindigkeit ist nahezu optimal.

„Alles geteilt“ oder „gemeinsames Schema“ oder „eine Datenbank pro Planet“

  • Am günstigsten pro Mieter.
  • Geringster Grad an Datenisolation.Jede Tabelle verfügt über eine Spalte, die angibt, zu welchem ​​Mandanten eine Zeile gehört.Da Mandantenzeilen in jeder Tabelle gemischt sind, ist es relativ einfach, versehentlich die Daten anderer Mandanten preiszugeben.
  • Die Notfallwiederherstellung für einen einzelnen Mieter ist relativ kompliziert;Sie müssen in vielen Tabellen einzelne Zeilen wiederherstellen.Andererseits ist eine Single-Tenant-Katastrophe relativ ungewöhnlich.Die meisten Katastrophen werden wahrscheinlich alle Mieter betreffen.
  • Da sich alle Mieter die Tische teilen, ist die bauliche Instandhaltung einfacher.Es erhöht jedoch den Kommunikationsaufwand, da Sie jede Änderung mit jedem Mieter kommunizieren und koordinieren müssen.Es ist nicht einfach anpassbar.
  • Höchste Anzahl von Zeilen pro Tabelle.Eine schnelle Abfrage ist schwieriger, aber es hängt davon ab, wie viele Mandanten und wie viele Zeilen.Sie könnten leicht in das VLDB-Territorium abrutschen.

Zwischen „nichts geteilt“ und „alles geteilt“ liegt „gemeinsames Schema“.

„Gemeinsames Schema“

  • Mandanten teilen sich eine Datenbank, aber jeder Mandant verfügt über ein eigenes benanntes Schema.Die Kosten liegen zwischen „nichts geteilt“ und „alles geteilt“;Große Systeme benötigen typischerweise weniger Server als „Shared Nothing“ und mehr Server als „Shared Everything“.
  • Viel bessere Isolation als „alles teilen“.Nicht ganz so viel Isolation wie „nichts geteilt“.(Sie können Berechtigungen für Schemas GEWÄHREN und REVOKEN.)
  • Die Notfallwiederherstellung für einen einzelnen Mandanten erfordert die Wiederherstellung eines von vielen Schemata.Dies ist je nach DBMS entweder relativ einfach oder ziemlich schwierig.
  • Wartung ist einfacher als „nichts teilen“;nicht so einfach wie „alles teilen“.Es ist relativ einfach, eine gespeicherte Prozedur zu schreiben, die in jedem Schema in einer Datenbank ausgeführt wird.Es ist einfacher, gemeinsame Tische zwischen Mietern zu teilen, als mit „nichts teilen“.
  • In der Regel mehr aktive Mandanten pro Server als „nichts gemeinsam genutzt“, was bedeutet, dass sie mehr Ressourcen gemeinsam nutzen (verschlechtern).Aber nicht so schlimm wie „Alles geteilt“.

Microsoft hat einen guten Artikel dazu Multi-Tenant-Architektur mit weiteren Details.(Der Link führt nur zu einer Seite eines mehrseitigen Dokuments.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top