Sammlungsbasierte Mandantenfähigkeit mit Spring Data MongoDB

Unsere Spring Boot 1.3.3-Anwendung speichert Daten in MongoDB (2.6 oder 3.2) mit Spring Data MongoDB 1.8.4.

Wir müssen die Mandantenfähigkeit unterstützen. Wir haben uns für die Verwendung einer "sammlungsbasierten" Mandantenfähigkeit entschieden, d. H. Jeder Mandant verfügt über einen eigenen Sammlungssatz. Für die Entität Article lauten die Auflistungen beispielsweise "{tenantName} _articles".

Oliver Gierke erklärte freundlicherweise eine Implementierung inMaking Spring-Data-Mongodb Multi-Tenant mit zum Beispiel:

@Document(collectionName = "#{tenantProvider.getTenantId()}_articles")

Dies ist auf dem Papier sehr schön, scheint aber nicht für Anwendungen im wirklichen Leben anwendbar zu sein, da ich zwei Probleme gefunden habe, von denen eines ein Hauptproblem ist:

Fehler (Damit könnte ich leben): Beim Start der Anwendung erstellt Spring Boot in der Datenbank die Indizes für Entitäten mit benutzerdefinierten Indizes (z. B. @Indexed-Attribute). Da beim Start jedoch kein "aktueller Mandant" vorhanden ist, erstellt Spring Data irrelevante Sammlungen wie "_articles". Wie können wir das verhindern?

Issue 2 (Hauptproblem hier): Zur Laufzeit werden die Auflistungen mit mehreren Mandanten wie "{tenantName} _articles" erstellt und verwendet.ohne die benutzerdefinierten Indizes (abgesehen vom MongoDB-Standardindex für "_id"). Ich vermute, dass Spring Indizes zur Laufzeit ignoriert, weil es denkt, dass es den Job bereits beim Start erledigt hat. Dies ist ein großes Leistungsproblem. Wie können wir das beheben?

Vielen Dank für Ihre Zeit

Antworten auf die Frage(2)

Ihre Antwort auf die Frage