multi-tenant-Architektur-Datenbank
Baue ich eine SAAS-Anwendung, und wir diskutieren über eine Datenbank pro Mandant vs gemeinsam genutzten Datenbanken. Ich habe viel gelesen, incluisve einige Themen hier bei SO aber ich habe immer noch viele Zweifel.
Unserer plataform sollten hochgradig anpassbar sein, der von jedem client. (Sie sollten in der Lage sein, um benutzerdefinierte Tabellen und benutzerdefinierte Felder hinzufügen zu vorhandenen Tabellen).
Die mehrere Datenbank-Leitbild, scheint groß in diesem Fall.
Das problem ist. sollte mein "user" - Tabelle in der master-Datenbank oder in jedem der client-Datenbank?.
Ein Benutzer kann eine oder mehrere Organisationen, so würde es vorhanden sein, in mehreren Datenbanken.
Auch, was die generische Tabellen wie die Länder, Tabelle, etc?
Es Sinn macht, in der master-Datenbank. Aber ich habe viele Tabellen mit einem created_by Feld, das einen Fremdschlüssel auf die user. Auch haben einige Berechtigung verknüpften Tabellen von client.
Ich würde Locker die power von fremden Schlüsseln, wenn mehrere Datenbanken, was bedeutet, dass mehr Anfragen an die Datenbank. Ich weiß, ich kann mit cross-join zwischen Datenbanken, wenn Sie in den gleichen server, aber dann habe ich Locker Skalierbarkeit. (Ich könnte Sie benötigen, um mehrere Datenbank-Server in Zukunft).
Ich dache über federated-Tabellen. Nicht sicher über die Leistung.
Den Technologien, die ich verwende, sind php und symfony 2-framework und mysql für die Datenbank.
Ich bin auch erschrocken über die Wartung eines solchen Systems. Wir erstellen könnte einige Skripte zum automatisieren der schema-änderungen in allen Datenbanken, aber wenn man 10k clients das würde bedeuten, dass 10k-Datenbanken.
Was ist Ihre opiniion über diese?
Die wichtigsten caracteristic meiner app sollte Flexibilität, so dass, wenn ein Kunde braucht etwas spezifischer als die Basis plataform nicht haben, sollte es möglich sein, es zu tun für ihn.
- Lesen Sie diese msdn.microsoft.com/en-us/library/aa479086.aspx
- Was ist die empfohlene StackExchange für diese Art von Frage. Nachdem alle, es ist ein gutes Thema für die Diskussion, wo die Leute lernen können.
- toll, eine weitere geschlossene Frage
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige klassische Probleme hier. Haben Sie schon einmal in http://highscalability.com/? Einige gute Fallbeispiele gibt.
Aus persönlicher Erfahrung, wenn Sie versuchen zu teilen clients an einem server, Sie werden feststellen, dass eine sehr erfolgreiche/aktive Benutzer dauern wird, bis alle Ressourcen der Maschine über die Zeit. Wir hatten einen einzigen client in einem SAAS, das zerstört einem shared-server-und die wir bewegen mussten, um ihn woanders.
Ich würde rip globalen Aufzählungen, die in einem Dienst. Sie können eine zentrale Datenbank für Dinge wie die Liste der Länder, Liste der Staaten, etc. und legte es hinter einem web-service-Schicht. Auch in dieser Datenbank können Sie user management/verwalten was server gehört, was user etc. Sie können ein management-portal, das liest/schreibt zu dieser Datenbank für die Verwaltung Ihrer Kundenbasis.
Wenn ich Tat eine SAAS wieder, ich würde klein anfangen und warten, bis die Schmerzen zu schlagen. Was Sie wirklich wollen, sind gute Hilfsmittel, um die Skalierung Probleme, wenn Sie auftreten. Habe einige Skripte bereit, mit der rolling-schema-änderungen auf Servern (keine Möglichkeit, dies zu vermeiden, sobald Sie mehr als einen server). Skripte zu nehmen-Maschinen, während Sie das schema zu modifizieren. Skripts migrieren eines Benutzers von einem shared server auf einen dedizierten ein.
Prüfen, einrichten der Replikation aus einer zentralen Datenbank. Dies würde die Pumpe bis global information, dass jeder Benutzer die partition/Datenbank benötigen würde, ohne, dass du viel zu schreiben von code.
Aber das größte Stück der Rat, den ich gesehen habe - und aus Erster hand erfahren - versuchen Sie nicht zu hart zu bauen, das nächste Facebook für die Skala. Einfach starten und sehen, was wirklich passiert, bevor Sie sich Gedanken über größere Skalierbarkeit. Sie werden überrascht sein, wie die user-Basis wächst, was skaliert gut ist und was nicht.