Ik moet hetzelfde probleem oplossen en ook varianten overwegen. Omdat ik jarenlange ervaring heb met het maken van SaaS multi-tenant-applicaties, zou ik ook de tweede optie selecteren op basis van mijn eerdere ervaring met de relationele databases.
Tijdens mijn onderzoek vond ik dit artikel op de ondersteuningssite van mongodb (lang geleden toegevoegd sinds het weg is):https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi -tenant.html
De jongens zeiden tegen elke prijs de 2e opties te vermijden, wat, zoals ik begrijp, niet bijzonder specifiek is voor mongodb. Mijn indruk is dat dit van toepassing is op de meeste NoSQL-databases die ik heb onderzocht (CoachDB, Cassandra, CouchBase Server, enz.) vanwege de specifieke kenmerken van het database-ontwerp.
Verzamelingen (of buckets of hoe ze het ook noemen in verschillende DB's) zijn niet hetzelfde als beveiligingsschema's in RDBMS, hoewel ze zich gedragen als een container voor documenten, ze zijn nutteloos voor het toepassen van een goede scheiding van huurders. Ik kon geen NoSQL-database vinden die beveiligingsbeperkingen kan toepassen op basis van verzamelingen.
Natuurlijk kunt u mongodb role-based security gebruiken om de toegang op database-/serverniveau te beperken. (http://docs.mongodb.org/manual/core/authorization/)
Ik zou de eerste optie aanbevelen wanneer:
- U heeft voldoende tijd en middelen om de complexiteit van het ontwerp, de implementatie en het testen van dit scenario aan te pakken.
- Als je niet veel verschillen in structuur en functionaliteit in de database wilt hebben voor verschillende tenants.
- Uw applicatie-ontwerp stelt huurders in staat om tijdens runtime slechts minimale aanpassingen aan te brengen.
- Als u de ruimte wilt optimaliseren en het gebruik van hardwarebronnen wilt minimaliseren.
- Als je duizenden huurders krijgt.
- Als u snel en tegen een goede prijs wilt uitbreiden.
- Als u GEEN back-up van gegevens gaat maken op basis van tenants (houd afzonderlijke back-ups voor elke tenant). Het is mogelijk om dat zelfs in dit scenario te doen, maar de inspanning zal enorm zijn.
Ik zou voor variant 3 gaan als:
- U krijgt een kleine lijst met huurders (enkele honderden).
- De specifieke kenmerken van het bedrijf vereisen dat u grote verschillen in de databasestructuur voor verschillende tenants kunt ondersteunen (bijv. integratie met systemen van derden, import-export van gegevens).
- Uw applicatie-ontwerp stelt klanten (tenants) in staat om significante wijzigingen aan te brengen in de runtime van de applicatie (modules toevoegen, velden aanpassen, enz.).
- Als je genoeg middelen hebt om snel uit te schalen met nieuwe hardware-nodes.
- Als u verplicht bent om versies/back-ups van gegevens per tenant te bewaren. Ook het terugzetten zal eenvoudig zijn.
- Er zijn wettelijke/regelgevende beperkingen die u dwingen om verschillende tenants in verschillende databases (zelfs datacenters) te houden.
- Als je de kant-en-klare beveiligingsfuncties van mongodb, zoals rollen, volledig wilt benutten.
- Er zijn grote verschillen in grootte tussen huurders (je hebt veel kleine huurders en weinig zeer grote huurders).
Als u aanvullende details over uw aanvraag plaatst, kan ik u misschien meer gedetailleerd advies geven.