Ich denke darüber nach, eine mandantenfähige App mit MongoDB zu erstellen. Ich habe noch keine Vermutungen darüber, wie viele Mieter ich noch haben würde, aber ich würde gerne in die Tausende skalieren können.
Ich kann mir drei Strategien vorstellen:
- Alle Mandanten in derselben Sammlung verwenden aus Sicherheitsgründen mandantenspezifische Felder
- 1 Sammlung pro Mandant in einer einzelnen gemeinsam genutzten Datenbank
- 1 Datenbank pro Mieter
Die Stimme in meinem Kopf deutet darauf hin, dass ich Option 2 wähle.
Gedanken und Implikationen, jemand?
mongodb
multi-tenant
Braintapper
quelle
quelle
Antworten:
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:
Ich würde mich für Variante 3 entscheiden, wenn:
Wenn Sie zusätzliche Details zu Ihrer Bewerbung veröffentlichen, kann ich Ihnen möglicherweise detailliertere Ratschläge geben.
quelle
Ich habe in den Kommentaren in diesem Link eine gute Antwort gefunden:
http://blog.boxedice.com/2010/02/28/notes-from-a-production-mongodb-deployment/
Grundsätzlich scheint Option 2 der beste Weg zu sein.
Zitat aus David Myttons Kommentar:
quelle
Es gibt einen vernünftigen Artikel über MSDN über die mandantenfähige Datenarchitektur, auf den Sie möglicherweise verweisen möchten. Einige Schlüsselthemen, die in diesem Artikel angesprochen werden:
Ebenfalls angesprochen werden einige Muster für die SaaS-Konfiguration (Software as a Service).
Ein Blick wert ist außerdem eine interessante Zusammenfassung der SQL Anywhere-Leute .
Meine persönliche Einstellung - es sei denn, Sie sind sich der erzwungenen Sicherheit / des erzwungenen Vertrauens sicher, würde ich Option 3 wählen oder wenn Bedenken hinsichtlich der Skalierbarkeit ein Zurückgreifen auf Option 2 zumindest verhindern. Das heißt ... ich bin kein Profi mit MongoDB. Ich werde ziemlich nervös, wenn ich ein gemeinsames "Schema" verwende - aber ich werde mich gerne erfahreneren Praktizierenden unterwerfen.
quelle
Ich würde mich für Option 2 entscheiden.
Sie können jedoch die Befehlszeilenoption mongod.exe --smallfiles festlegen. Dies bedeutet, dass die größte Dateigröße eines Bereichs 0,5 Gigabyte und nicht 2 Gigabyte beträgt. Ich habe das mit mongo 1.42 getestet. Option 3 ist also nicht unmöglich.
quelle
Nach meinen Recherchen in MongoDB. Trucos y consejos. Aplicaciones Multitenant. Diese Option wird nicht empfohlen, wenn Sie nicht wissen, wie viele Mandanten Sie haben können. Es können Tausende sein, und es wäre kompliziert, wenn es um das Sharding geht. Stellen Sie sich auch vor, Sie hätten Tausende von Sammlungen in einer einzigen Datenbank ... Also in Ihrem Fall wird empfohlen, Option eins zu verwenden. Wenn Sie nun eine begrenzte Anzahl von Benutzern haben, ist dies bereits anders und ja, Sie können Option zwei verwenden, wie Sie dachten.
quelle
Während die Diskussion hier über NoSQL und hauptsächlich MongoDB geführt wird, verwenden wir bei Citus PostgreSQL und erstellen eine verteilte / gesplittete Datenbank mit mehreren Mandanten.
Unser Anwendungsfallhandbuch führt Sie durch eine Beispiel-App, die das Schema und verschiedene mandantenfähige spezifische Funktionen abdeckt.
Für unstrukturiertere Daten verwenden wir die JSONB-Spalte von PostgreSQL, um solche und mandantenspezifische Daten zu speichern.
quelle