Ich lerne mandantenfähige Anwendungen und wie die PostgreSQL-Schemata dafür verwendet werden können.
Als ich mich mit dem Thema befasste, fand ich einen Artikel , in dem der Autor eine schlechte Erfahrung bei der Verwendung von PostgreSQL-Schemas in Anwendungen mit mehreren Mandanten beschreibt. Die Hauptprobleme wären eine schlechte Leistung bei Migrationen und eine hohe Auslastung der Datenbankressourcen.
Es scheint, als würde ein einziges Schema (das die Tabellen unter den Mandanten teilt) zu einer besseren Leistung führen als ein getrenntes Schema für jeden Mandanten. Aber mir kommt es komisch vor. Ich würde das Gegenteil vermuten, da Indizes für kleinere Tabellen in der Regel leichter sind als Indizes für größere Tabellen.
Warum ist die Leistung schlechter, wenn Daten in vielen kleinen Tabellen (in mehreren Schemas) getrennt sind, als wenn Daten in einigen großen Tabellen (in einem einzelnen Schema) getrennt sind?
Leistung ist nicht unbedingt schlechter. Wie im Artikel erläutert, gibt es bestimmte Bedingungen, die den Schemaansatz je nach Anwendungsdesign und Arbeitsauslastung verbessern oder verschlechtern. Lassen Sie mich die Kompromisse zwischen den Ansätzen "Tenant-Schema" und "Shared-Table" erläutern:
Tenant-Schema ist am besten geeignet, wenn Sie eine relativ kleine Anzahl relativ großer Tenants haben. Ein Beispiel hierfür wäre eine Buchhaltungsanwendung mit nur bezahlten Abonnementbenutzern. Dinge, die es für Sie zur leistungsstärksten Option machen, sind:
Dinge, die es zu einer leistungsschwachen Option machen, sind:
Ob das Mandantenschema für Migrationen/Schemaänderungen schlecht ist, hängt davon ab, wie Sie sie durchführen. Es ist schlecht, um eine universelle Schemaänderung schnell einzuführen, aber gut, um Schemaänderungen als schrittweise Einführung für mehrere Mandanten bereitzustellen.
Shared Table funktioniert besser in Situationen, in denen Sie viele Mandanten haben und viele Ihrer Mandanten nur sehr wenige Daten haben. Ein Beispiel hierfür wäre eine Social Media-Mobilanwendung, die kostenlose Konten zulässt und daher Tausende von aufgegebenen Konten hat. Weitere Vorteile des Shared Table-Modells sind:
Der Hauptnachteil von Shared Table besteht darin, dass die Tenant-Filterbedingung an jede einzelne Abfrage in der Anwendungsebene angehängt werden muss. Es ist auch problematisch, weil:
Welches Modell "besser abschneidet", hängt also davon ab, welche Kompromisse Sie am schlimmsten treffen.
Es gibt auch ein Hybridmodell, "Tenant-View", bei dem die tatsächlichen Daten in gemeinsam genutzten Tabellen gespeichert werden. Jede Anwendungsverbindung verwendet jedoch Sicherheitsbarrierenansichten , um die Daten anzuzeigen. Dies hat einige der Nachteile jedes Modells. In erster Linie bietet es die Sicherheitsvorteile des Tenant-Schema-Modells mit einigen der Leistungsnachteile beider Modelle.