MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mehrere Datenbanken in MongoDB für SaaS

Keine einfache Antwort, da vieles von Ihrer App-Architektur, Ihren Nutzungs- und Abfragemustern sowie der Verteilung auf die Clients abhängt (d. h. wird die Nutzungsrate bei allen Clients ungefähr gleich sein, oder könnten Sie 10 % der Clients haben, die 90 % der Ressourcen), wie viel Sie für das Management von Code vs. Ops ausgeben können und eine ganze Reihe anderer Probleme. Hier sind einige Dinge zu beachten:

1) eine einzige Datenbank zu haben, wird Ihre Betriebsverwaltung einfacher machen, weniger Rechenressourcen erfordern und Ihnen möglicherweise eine bessere Skalierung ermöglichen, aber das Codieren der Zugriffsebene wird schwieriger sein und Sie müssen Ihre Sicherheitsebene aus offensichtlichen Gründen wirklich gut gestalten. Sie verbrauchen auch weniger Ressourcen auf der Client-/Webserver-Seite, da es viel weniger Verbindungen geben wird.

Es gibt zwei beliebte Schemaoptionen, wenn man sich einer monolithischen Datenbank nähert:

  • Sie können alle ähnlichen Daten in einer Sammlung zusammenfassen (dh Profile für alle Konten gehen in dieselbe Sammlung) und jedem Dokument einen Client-ID-Schlüssel zuweisen, um zu identifizieren, welche Daten zu welchem ​​Konto gehören. Dies bietet Ihnen möglicherweise die besten Optionen (abhängig von Ihrer Schemaarchitektur) für die Aufskalierung mit den wenigsten Rechenressourcen.
  • Eine andere Möglichkeit besteht darin, Kundendaten nach Sammlungen zu trennen - jeder Kunde hat seine eigenen Sammlungen in der Datenbank, die mit einem Client-ID-Präfix identifiziert werden (dh:clientid_userprofiles).

2) Die Datenbank pro Client-Option bereitet Ihnen mehr Kopfzerbrechen bei der Betriebsverwaltung und kostet mehr, da Sie mehr Rechenressourcen benötigen. Andererseits sollten Ihre Codierungskosten geringer sein, da der Code einfacher zu schreiben ist. Es ermöglicht Ihnen auch, Ihre Ressourcen besser zwischen Heavy- und Light-Usern zu verteilen. Beispielsweise können Sie stark ausgelastete Clients auf leistungsstärkere Computer verschieben und Sharding auf Kundenbasis bereitstellen.

3) Sie könnten eine Kombination der beiden Optionen bereitstellen – dedizierte Datenbanken für High-End-Benutzer (Konten, die mehr bezahlen) und dann eine gemeinsam genutzte Datenbank mit Daten, die nach Sammlung für Low-End-Kunden und Test-/Freemium-Konten getrennt sind.

Beachten Sie, dass Sie sich die Startoption --smallfiles ansehen sollten, wenn Sie den Weg mit vielen Datenbanken gehen. Dies wird Ihnen in Situationen helfen, in denen Sie viele Leute haben, die "Testkonten" einrichten, aber nicht viel damit machen.

Wie auch immer, hoffentlich gibt Ihnen das oben Genannte Denkanstöße. Führen Sie eine Suche auf https://groups.google.com durch /forum/?fromgroups#!searchin/mongodb-user/multitenant da es eine Reihe von Diskussionen in den Mongo-Foren zu diesem speziellen Thema gegeben hat.

Was die Prüfungsauswirkungen betrifft, hängt davon ab, welchen Grad an Prüfungskonformität Sie einhalten müssen. Wenn Sie Fortune-1000-Kunden erwarten, werden Ihre Compliance-Anforderungen weitaus höher sein (und viel kostspieliger sein – denken Sie an 10 bis 100 US-Dollar an Tausende von Dollar), als wenn Ihre Kunden Startups sind, die vielleicht noch nie von SAS70 usw. gehört haben. Die Antwort hängt auch davon ab, welche Art von Daten Sie speichern - sind es Finanzdaten von Benutzern oder sind es nur Benutzerforen? Wenn Sie Bedenken haben, in Zukunft Sicherheitsaudits für große Unternehmen bestehen zu müssen, denken Sie im Grunde nicht einmal an den Ansatz der gemeinsamen Datenbank.