sql >> Databasteknik >  >> NoSQL >> MongoDB

Gör spring-data-mongodb till flera hyresgäster

Det finns en hel del sätt att flå katten här. Det handlar i princip om på vilken nivå du vill tillämpa hyresrätten.

Grunderna

Det grundläggande tillvägagångssättet är att binda någon form av nyckel som identifierar kunden per tråd, så att du kan ta reda på om kunden den aktuella utförandetråden handlar om. Detta uppnås vanligtvis genom att fylla i en ThreadLocal med viss autentiseringsrelaterad information eftersom du vanligtvis kan härleda hyresgästen från den inloggade användaren.

Om det nu är på plats finns det några alternativ för var du ska tillämpa hyresgästkunskapen. Låt mig kort beskriva de vanligaste:

Flerhyresrätt på databasnivå

Ett sätt att separera data för flera klienter är att ha individuella databaser per hyresgäst. Spring Data MongoDB:s kärnabstraktion för detta är MongoDBFactory gränssnitt. Det enklaste sättet här är att åsidosätta SimpleMongoDbFactory.getDb(String name) och anropa den överordnade metoden med databasnamnet t.ex. berikad av hyresgästprefixet eller liknande.

Flerhyresrätt på samlingsnivå

Ett annat alternativ är att ha hyresgästspecifika samlingar, t.ex. genom hyresgästför- eller efterfix. Denna mekanism kan faktiskt utnyttjas genom att använda språket Spring Expression (SpEl) i @Document annotations collectionName attribut. Exponera först hyresgästens prefix genom en springböna:

 @Component("tenantProvider")
 public class TenantProvider {

   public String getTenantId() {
     // … implement ThreadLocal lookup here
   }
 }

Använd sedan SpEL i dina domäntyper @Document kartläggning:

 @Document(collectionName = "#{tenantProvider.getTenantId()}_accounts"
 public class Account { … }

SpEl låter dig referera till vårbönor med namn och utföra metoder på dem. MongoTemplate (och därmed arkivabstraktionen transitivt) kommer att använda mappningsmetadata för dokumentklassen och mappningsundersystemet kommer att utvärdera collectionName attribut för att ta reda på om samlingen att interagera med.



  1. MongoDB Schema Planeringstips

  2. Hur skiljer sig aerospike från andra nosql-databaser med nyckel-värden?

  3. Guide till Upsert i MongoDB

  4. Förstå och hantera diskutrymme på din MongoDB-server