Ich habe gesehen, SaaS-Anwendungen auf viele verschiedene Arten gehostet. Ist es eine gute Idee, Features und Module auf mehrere Datenbanken aufzuteilen? Zum Beispiel, Dinge wie die User-Tabelle auf eine DB und Feature/App-spezifische Tabellen auf eine andere DB und vielleicht andere gemeinsam genutzte Tabellen in einer anderen DB zu setzen?SaaS-Datenbank-Design - Mehrere Datenbanken? Teilt?
Antwort
Beginnen Sie mit einer Datenbank. Teilen Sie Daten/Funktionalität, wenn das Projekt es erfordert.Hier
ist, was wir von LinkedIn lernen können:
- Eine einzige Datenbank funktioniert nicht
- Referenzielle Integrität nicht möglich sein wird,
- Jeder Datenverlust ist ein Problem
- Caching ist gut, auch wenn es bescheiden wirksam ist
- unterschätzen nie Wachstumskurs
Quelle:
Fragen Sie sich: Was gewinnen Sie, wenn Sie alles in separate Datenbanken verschieben?
Eine Menge Schmerzen in Bezug auf das Management wäre meine Vermutung. Ich wäre persönlich sehr daran interessiert, alles in einer einzigen Datenbank zu haben, und wenn Sie Probleme haben, die später von einer einzigen Datenbank nicht gelöst werden können, dann migrieren Sie die Daten in mehrere Datenbanken.
Was ist mit Leistung und Skalierbarkeit? – Vyrotek
Eine einzige Datenbank ist am besten für die Datenintegrität geeignet, da dann Fremdschlüssel verwendet werden können. Sie können diese integrierte Datenintegrität nicht haben, wenn Sie die Daten in mehrere Datenbanken aufteilen. Dies ist kein Problem, wenn Ihre Daten nicht verwandt sind, aber wenn es verwandt ist, ist es möglich, dass Ihre eine Datenbank Daten enthält, die nicht mit einer anderen Datenbank übereinstimmen. In diesem Fall müssten Sie Code schreiben, der Ihre Datenbanken regelmäßig auf inkonsistente Daten überprüft, damit Sie entsprechend damit umgehen können.
Allerdings sind möglicherweise mehrere Datenbanken erforderlich, wenn Ihre Site/Anwendung hochgradig skalierbar sein soll (z. B. Internetskala). Zum Beispiel könnten Sie jede Datenbank auf einem anderen physischen Server hosten.
Die Aufteilung der Datenbank nach Funktionen ist möglicherweise keine gute Idee, es sei denn, Sie sehen starke Hinweise, die auf die Notwendigkeit hindeuten. Häufig müssen Sie möglicherweise zwei Datenbanken als Teil einer einzelnen Transaktion aktualisieren - und verteilte Transaktionen sind viel schwieriger zu handhaben. Wenn die Datenbank aufgeteilt werden muss, können Sie Sharding verwenden.
High Scalability ist ein gutes Blog zum Skalieren von SaaS-Anwendungen. Wie bereits erwähnt, ist das Teilen von Tabellen in Datenbanken, wie Sie es vorgeschlagen haben, generell eine schlechte Idee. Aber ein ähnliches Konzept ist Sharding, bei dem Sie das gleiche (oder ähnliche) Schema beibehalten, aber die Daten auf mehreren Servern aufteilen. Beispielsweise befinden sich Benutzer 1-5000 auf Server1 und Benutzer 5000-10000 auf Server2. Abhängig von den Abfragen, die Ihre Anwendung verwendet, kann dies eine effiziente Methode zur Skalierung sein.
Für SaaS-Anwendungen verwenden Sie mehrere Datenbanken für mehrere Mandanten, teilen diese jedoch normalerweise nicht modulweise auf.
Dies ist das am häufigsten verwendete Modell, das ich im SaaS-Anwendungsdesign gesehen habe. Ihr Basisschema wird für jeden Mandanten repliziert, den Sie Ihrer Anwendung hinzufügen.
es ein natürliches Design halten (so viel wie nötig denormalize, da weniger normalisieren je nach Bedarf). Teilen Sie das DB-Modell in seine Module auf und halten Sie die serviceorientierten Prinzipien im Hinterkopf, indem Sie Daten mit einem Service (dem die Daten gehören) konfrontieren.
Es gibt eine Vielzahl von Möglichkeiten, um es zu erreichen, aber die Fragen des Multi-Tenancy gehen tiefer als nur das Datenmodell. Ich hasse Produkt zu verstopfen, aber überprüfe SaaSGrid von meiner der Firma, die ich bei der Arbeit, Apprenda .we ist, ist ein Cloud-Betriebssystem, das Ihnen einzelne Mieter SOA-Anwendungen (das Gefühl, frei zu verwenden NHibernate für den Datenzugriff), die automatisch zu schreiben erlaubt einspritzt Mandantenfähigkeit in Ihre App Wenn Sie Ihre App veröffentlichen, können Sie beispielsweise ein Datenmodell auswählen (isolierte Datenbank oder gemeinsam genutzt) und SaaSGrid wird entsprechend bereitgestellt und Ihre App wird ohne Codeänderungen ausgeführt - schreiben Sie einfach Code, als ob es für einen einzelnen Mandanten wäre!
Warum überhaupt benutzen Datenbank?
Ich denke, es ist eine gute Idee zu verwenden, verteilte Speichersysteme wie Hadoop, Voldemort (von LinkedIn project-voldemort.com entwickelt und verwendet).
Ich denke, DB für sensetive Daten wie Geld Operationen gut, aber für alles andere können Sie verteilte Speicher verwenden.
möglich Duplikat [Was sind die Vorteile der Verwendung einer einzigen Datenbank für jeden Client verwenden?] (Http://stackoverflow.com/questions/13348/what-are-the-advantages-of-using-a-single- Datenbank für jeden Client) – givanse