/ / Multi-Tenancy mit Hibernate und Spring Data JPA, wie funktioniert der Schema-Ansatz?

Multi-Tenancy mit Hibernate und Spring Data JPA, wie funktioniert Schema-Ansatz - Hibernate, Spring-Mvc, Spring-Data-Jpa, Multi-Tenant

Ich habe die Hibernate-Dokumentation für Multitenancy gelesen (HIER) mehrmals sowie viele andere Threads.

Was ich habe: Ich habe eine funktionierende Anwendung, die Daten (z. B. Produkte) über den Rest-Service bereitstellt.

MYSQL (5.6) -> HIBERNATE (4.3.7 FINAL) -> SPRING DATA JPA (1.7.1) -> SPRING MVC (4.1.4) -> REST (Jackson -> Json)

Alles funktioniert gut (CRUD)

Ich habe mehrere Tabellen in meiner Anwendung (Kunden, Kundeninteresse, Produkte, Produktmarken, ...).

Warum frage ich:

Ich möchte Multi-Tenancy hinzufügen -> für jeden Mieter,Es sollte eigene Tabellen geben (tenantA_customers, tenantA_products, ...), aber es sollte immer die gleiche "Vorlage" verwendet werden (-> Kunde hat für jeden Mandanten die gleichen Attribute)

Also meine Fragen sind:

1) Wie funktioniert der SCHEMA-APPROACH aus dem Winterschlaf genau?

2) Funktioniert das mit multible-Tabellen?

Zusatzinformationen / Frage:

  • Es wird nicht so viele Mieter geben (<50 sicher)

Das MultiTenantConnectionProvider-Beispiel verwirrt mich ein wenig, weil es die Anweisung "use" hinzufügt. Ich dachte, es soll eine Datenbank "verwenden"? SRC: (Beispiel impl , "Dieser Ansatz ist nur für den SCHEMA-Ansatz relevant.")

Danke im Vorraus für deine Hilfe. Bitte lassen Sie mich wissen, wenn etwas unklar ist

Antworten:

2 für die Antwort № 1

Der Ruhezustand kommuniziert mit der zugrunde liegenden Datenbank über a Session Das ist eine Abstraktion über eine JDBC-Verbindung. Immer, wenn der Anwendungscode versucht, eine Datenbankoperation mit Hibernate auszuführen, wird der Hibernate verwendet Session Ruft eine JDBC-Verbindung ab und führt dann reguläre SQL über die so erhaltene Verbindung aus.

In der schematischen Herangehensweise an Multi-TenancyMandant wird ein separates Datenbankschema zugewiesen. Dadurch werden die Daten jedes Mandanten voneinander getrennt. Bevor die JDBC-Verbindung an die Hibernate-Sitzung übergeben wird, wird das Schema des aktuellen Mandanten für die JDBC-Verbindung festgelegt. Dadurch wird sichergestellt, dass beim Ausführen von SQL-Anweisungen für die Verbindung diese Anweisungen nur für die Daten des gewünschten Mandanten ausgeführt werden (durch das Datenbankschema garantiert).

Der SQL-Befehl zum Einstellen des Schemas variiert je nach Datenbank. Das von Ihnen genannte Beispiel funktioniert auf SQL Server und MySQL gut, da der Befehl zur Auswahl des Schemas lautet USE <schema name> auf diesen Datenbanken. Wie in den Beispielen erwähnt, müssen datenbankspezifische Befehle abhängig vom zugrunde liegenden Datenbanktyp verwendet werden.

Jede Datenbank hat Beschränkungen hinsichtlich der Anzahl vonTabellen (oder Objekte, um genau zu sein), die ein einzelnes Schema enthalten kann. Sie müssen sich auf die Dokumentation der von Ihnen verwendeten Datenbank beziehen, um festzustellen, wie viele Datenbankobjekte pro Schema vorhanden sein können. Alle modernen Datenbanken unterstützen jedoch mehr als 100 Objekte pro Schema. Die Anzahl der Tabellen, die Sie pro Schema haben können, sollte keine Sorge sein, es sei denn, Sie haben Millionen oder Milliarden Tabellen pro Mandant.