Ich habe das gleiche Problem zu lösen und auch Varianten in Betracht zu ziehen. Da ich jahrelange Erfahrung in der Erstellung von SaaS-Anwendungen mit mehreren Mandanten habe, wollte ich auch die zweite Option auswählen, basierend auf meinen früheren Erfahrungen mit den relationalen Datenbanken.
Während meiner Recherche habe ich diesen Artikel auf der Mongodb-Support-Website gefunden (vor langer Zeit hinzugefügt, da er weg ist):
https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi -tenant.html
Die Jungs gaben an, um jeden Preis die 2. Option zu vermeiden, was meines Wissens nicht besonders spezifisch für Mongodb ist. Mein Eindruck ist, dass dies aufgrund der Besonderheiten des Datenbankdesigns für die meisten von mir untersuchten NoSQL-Datenbanken (CoachDB, Cassandra, CouchBase Server usw.) gilt.
Sammlungen (oder Buckets oder wie auch immer sie in verschiedenen DBs aufgerufen werden) sind nicht dasselbe wie Sicherheitsschemata in RDBMS, obwohl sie sich als Container für Dokumente verhalten, die für die Anwendung einer guten Mandantentrennung unbrauchbar sind. Ich konnte keine NoSQL-Datenbank finden, die Sicherheitsbeschränkungen basierend auf Sammlungen anwenden kann.
Natürlich können Sie die rollenbasierte Sicherheit von Mongodb verwenden, um den Zugriff auf Datenbank- / Serverebene einzuschränken. ( http://docs.mongodb.org/manual/core/authorization/ )
Ich würde die erste Option empfehlen, wenn:
- Sie haben genügend Zeit und Ressourcen, um die Komplexität des Entwurfs, der Implementierung und des Testens dieses Szenarios zu bewältigen.
- Wenn Sie keine großen Unterschiede in Struktur und Funktionalität in der Datenbank für verschiedene Mandanten haben.
- Mit Ihrem Anwendungsdesign können Mandanten zur Laufzeit nur minimale Anpassungen vornehmen.
- Wenn Sie den Speicherplatz optimieren und den Verbrauch von Hardwareressourcen minimieren möchten.
- Wenn Sie Tausende von Mietern haben wollen.
- Wenn Sie schnell und kostengünstig skalieren möchten.
- Wenn Sie KEINE Daten basierend auf Mandanten sichern möchten (führen Sie separate Sicherungen für jeden Mandanten durch). Dies ist auch in diesem Szenario möglich, aber der Aufwand wird enorm sein.
Ich würde mich für Variante 3 entscheiden, wenn:
- Sie werden eine kleine Liste von Mietern haben (mehrere hundert).
- Die Besonderheiten des Geschäfts erfordern, dass Sie in der Lage sind, große Unterschiede in der Datenbankstruktur für verschiedene Mandanten zu unterstützen (z. B. Integration in Systeme von Drittanbietern, Import-Export von Daten).
- Durch Ihr Anwendungsdesign können Kunden (Mandanten) wesentliche Änderungen an der Anwendungslaufzeit vornehmen (Hinzufügen von Modulen, Anpassen der Felder usw.).
- Wenn Sie über genügend Ressourcen verfügen, um schnell mit neuen Hardwareknoten skalieren zu können.
- Wenn Sie Versionen / Sicherungen von Daten pro Mandant aufbewahren müssen. Auch die Wiederherstellung wird einfach sein.
- Es gibt gesetzliche / behördliche Einschränkungen, die Sie dazu zwingen, verschiedene Mandanten in verschiedenen Datenbanken (sogar Rechenzentren) zu halten.
- Wenn Sie die sofort einsatzbereiten Sicherheitsfunktionen von Mongodb, z. B. Rollen, vollständig nutzen möchten.
- Es gibt große Größenunterschiede zwischen den Mietern (Sie haben viele kleine Mieter und wenige sehr große Mieter).
Wenn Sie zusätzliche Details zu Ihrer Bewerbung veröffentlichen, kann ich Ihnen möglicherweise detailliertere Ratschläge geben.