Frage

Ich denke, einen Multi-Tenant-App schaffen mit MongoDB. Ich habe keine Vermutungen in Bezug darauf, wie viele Mieter ich noch würde, aber ich mag Skala in die Tausende können.

kann ich von drei Strategien denken:

  1. Alle Mieter in der gleichen Sammlung, mit mieterspezifische Felder für die Sicherheit
  2. 1 Collection pro Mieter in einer einzigen gemeinsamen DB
  3. 1 Datenbank pro Mieter

Die Stimme in meinem Kopf ist, was darauf hindeutet, dass ich gehe mit der Option 2

Die Gedanken und Implikationen, anyone?

War es hilfreich?

Lösung

Ich habe das gleiche Problem zu lösen und auch Varianten berücksichtigen. Wie ich habe viele Jahre Erfahrung im Erstellen von SaaS Multi-Tenant APPLICATIO ich die zweite Option auch mit den relationalen Datenbanken auf meine bisherigen Erfahrungen basierend auswählen werde.

Während meine Forschung zu machen, fand ich diesen Artikel auf mongodb Support-Website (zurück hinzugefügt, da es weg ist): https: // web .archive.org / web / 20140812091703 / http: //support.mongohq.com/use-cases/multi-tenant.html

Die angegebenen Jungs 2. Optionen, um jeden Preis zu vermeiden, die wie ich sie verstehe, ist nicht besonders spezifisch für mongodb. Mein Eindruck ist, dass dies für die meisten der NoSQL dbs anwendbar ist, ich recherchiert (CoachDB, Cassandra, Couchbase Server, etc.) aufgrund der Besonderheiten der Datenbank-Design.

Sammlungen (oder Eimern oder aber nennen sie es in verschiedenen DBs) sind nicht das gleiche wie Sicherheitsschemata in RDBMS trotz sie als Behälter verhalten sich für Dokumente, die sie für die Anwendung Trennung gute Mieter nutzlos sind. Ich konnte nicht NoSQL-Datenbank finden, die Sicherheitseinschränkungen basierend auf einer Sammlung anwenden kann.

Natürlich können Sie mongodb rollenbasierte Sicherheit verwenden, den Zugriff auf Datenbank / Server-Ebene zu beschränken. ( http://docs.mongodb.org/manual/core/authorization/ )

würde ich erste Option empfehlen, wenn:

  • Sie haben genug Zeit und Ressourcen mit der Komplexität der befassen Design, Implementierung und Testen dieses Szenarios.
  • Wenn Sie sich nicht viel Unterschiede in der Struktur haben, und Funktionalität in der Datenbank für verschiedene Mieter.
  • Ihr Anwendungsdesign ermöglicht es Mietern nur minimal machen Anpassungen zur Laufzeit.
  • Wenn Sie optimieren wollen Raum und Nutzung von Hardware minimieren Ressourcen.
  • Wenn Sie vorhaben, Tausende von Mietern haben.
  • Wenn Sie wollen schnell und zu gut Kosten skalieren.
  • Wenn Sie nicht auf die gesicherten Daten gehen auf die Mieter Basis (halten getrennt Sicherungen für jeden Mieter). Es ist möglich, dass auch in diesem zu tun Szenario aber der Aufwand wird sehr groß sein.

würde ich für die Variante 3, wenn:

  • Sie werden kleine Liste der Mieter (mehrere Hundert) haben.
  • Die Besonderheiten des Geschäfts erfordert, dass Sie der Lage sein, große Unterschiede in der Datenbankstruktur zur Unterstützung für verschiedene Mieter (z Integration mit 3rd-Party-Systeme, Import-Export von Daten).
  • Ihr Anwendungsdesign ermöglicht es Kunden (Mieter) wesentliche Änderungen in der Laufzeit der Anwendung zu machen (Hinzufügen von Modulen, die Anpassung der Felder usw.).
  • Wenn Sie genügend Ressourcen haben, schnell mit neuer Hardware-Knoten zu skalieren.
  • Wenn Sie erforderliche Versionen / Backups von Daten pro Mieter zu halten. die auch wieder herstellt einfach sein.
  • Es gibt rechtliche / regulatorische Beschränkungen, dass Sie Kräfte in verschiedenen Datenbanken unterschiedliche Mieter zu halten (auch Rechenzentren).
  • Wenn Sie in vollem Umfang die out-of-the-Box nutzen Sicherheitsfunktionen von mongodb wie Rollen.
  • Es gibt große Unterschiede in der Angelegenheit der Größe zwischen den Mietern (Sie haben viele kleine Mieter und wenige sehr große Mieter).

Wenn Sie weitere Informationen über Ihre Anwendung zu veröffentlichen, vielleicht kann ich Ihnen ausführlichere Ratschläge geben.

Andere Tipps

fand ich eine gute Antwort in den Kommentaren unter diesem Link:

http: //blog.boxedice .com / 2010/02/28 / Notizen-from-a-Produktion-mongodb-deployment /

Im Grunde Option # 2 scheint der beste Weg, um zu gehen.

Zitat von David Mytton Kommentar:

Wir entschieden uns, nicht um eine Datenbank zu haben pro Kunden wegen der Art und Weise MongoDB ordnet seine Datendateien. Jeder Datenbank verwendet eine eigene Reihe von Dateien ist:

Die erste Datei für eine Datenbank dbname.0, dann dbname.1 usw. dbname.0 wird 64MB, 128MB dbname.1 usw. sein, bis zu 2 GB. Sobald die Dateien erreichen 2GB Größe, jede nachfolgende Datei ist auch 2 GB.

Wenn also die letzte Daten-Datei vorhanden ist sagen wir, 1 GB, könnte diese Datei zu 90% leer sein wenn es vor kurzem erreicht wurde.

aus dem Handbuch.

Als Benutzer die Studie anmelden und geben Dinge ein zu gehen, würden wir mehr und mehr bekommen Datenbanken, die mindestens 2 GB waren in Größe, auch wenn die Gesamtheit der Daten Datei wurde nicht verwendet werden. Wir fanden diese verwendet, um eine massiver Mengenraum von Platten Vergleich mehrere Datenbanken für alle zu haben Kunden, wo der Speicherplatz kann sein zu maximaler Effizienz verwendet wird.

Sharding wird auf einer Pro-Sammlung sein Basis als Standard, präsentiert ein Problem, wo die Sammlung nie erreicht die Mindestgröße zu starten sharding, wie es der Fall für eine ganz einige von uns (z Sammlungen nur Speichern Details Benutzer-Login). Jedoch, wir haben beantragt, dass dies auch auf einer Pro-Datenbank durchgeführt werden kann, werden Niveau. Sehen http://jira.mongodb.org/browse/SHARDING-41

Es sind keine Performance-Abwägungen mit vielen Sammlungen. Sehen http://www.mongodb.org/display/DOCS / Verwenden von + a + Groß + Anzahl + von + Sammlungen

Es gibt einen vernünftigen Artikel auf MSDN über Multi-Tenant-Datenarchitektur , die Sie vielleicht beziehen möchten. Einige der wichtigsten Themen berührt durch diesen Artikel:

  • Wirtschaftliche Überlegungen
  • Sicherheit
  • Tenant Überlegungen
  • Regulatory (legal)
  • Geschicklichkeits Satz Bedenken

berührt auch auf einige Muster für Software as a Service (SaaS) Konfiguration sind.

Darüber hinaus lohnt sich ein Ganter heißt ein interessantes write-up aus dem SQL Anywhere Jungs .

Meine eigene persönliche nehmen - es sei denn, Sie bestimmte erzwungener Sicherheit / Vertrauen sind, würde ich gehen mit der Option 3, oder wenn Bedenken Skalierbarkeit Rückfall auf die Option 2 auf ein Minimum zu verbieten. Das sagte ... Ich bin kein Profi mit MongoDB. Ich ziemlich nervös ein gemeinsames „Schema“ können - aber ich werde glücklich defer zu mehr erfahrenen Praktikern

.

Ich würde für die Option gehen 2.

Allerdings könnten Sie mongod.exe Befehlszeilenoption --smallfiles gesetzt. Dies bedeutet, dass die größte Dateigröße von einem Umfang von 0,5 Gigabyte sein und nicht mehr als 2 Gigabyte. Getestet habe ich diese mit Mongo 1,42. So Option 3 ist nicht unmöglich.

Während die Diskussion hier auf NoSQL ist und in erster Linie MongoDB, in denen wir Citus PostgreSQL verwenden und den Aufbau eines verteilten / sharded Multi-Tenant-Datenbank.

Use-Case-Führer durch eine Wanderung Beispiel-App, für das Schema und verschiedene Multi-Tenant-spezifische Funktionen.

Für weitere unstrukturierte Daten verwenden wir PostgreSQLs JSONB Spalte solche und mandantenspezifische Daten zu speichern.

Nach meinen Recherchen in MongoDB. Trucos y consejos. Aplicaciones mandanten. diese Option, wenn Sie nicht wissen, nicht zu empfehlen, wie viele Mieter man haben kann, könnte es Tausende sein, und es wäre kompliziert sein, wenn es um sharding kommt, stellt auch Tausende von Sammlungen in einer einzigen Datenbank ... So in Ihrem Fall hat es wird empfohlen Option zu verwenden. Nun, wenn Sie nur eine begrenzte Anzahl von Benutzern haben werden, ist es schon wieder anders und ja, könnten Sie Option zwei, wie Sie dachten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top