Ich entwickle eine kundenspezifische CRM-Lösung, die über das Web / SaaS-Modell verkauft wird. Ich erwarte Zehner oder Hunderte von Kunden, die diese Lösung verwenden. Ich werde MS SQL als db-Engine verwenden.
Option 1 besteht darin, einen einzelnen DB zu haben und eine TenantId-Spalte in Tabellen sowie einen geeigneten Index einzufügen und 'where tenantId = {...}' für jeden DB-Zugriff zu verwenden.
Option 2 besteht darin, für jeden Client eine eigene Datenbank zu haben, wodurch die Klauseln TenantId und where vermieden werden.
Ich gehe davon aus, dass jeder Kunde Hunderttausende Datensätze haben wird, nicht Millionen.
Wie ich es sehe, wird es eine ganze Anzahl von Datenseiten geben, welche Option ich auch wählen mag. Die Entscheidung scheint zentriert zu sein, ob SQL besser in der Lage ist, mehrere DBs oder eine einzelne DB mit TenantId und Index zu verwalten. Anfänglich wird die Lösung auf einem einzelnen DB-Server ausgeführt, wechselt jedoch schließlich zu SAN.
Hat jemand irgendwelche Ansichten dazu?
Es gibt einen interessanten MSDN-Artikel mit dem Titel Multi-Tenant Data Architecture , den Sie verwenden können möchte auschecken. Die Autoren geben eine kurze Analyse darüber, wo ein bestimmter Ansatz geeigneter sein könnte als ein anderer:
Die Anzahl, Art und Bedürfnisse der Mieter erwarten Sie, alle Auswirkungen zu dienen Ihre Datenarchitektur Entscheidung in verschiedene Wege. Einige der folgenden Fragen können Sie zu mehr neigen isoliert Ansatz, während andere möglicherweise Voreingenommenheit gegenüber einem mehr geteilt nähern.
Wie viele potenzielle Mieter tun Sie erwarten zu zielen? Du kannst nirgends sein in der Nähe in der Lage zu schätzen voraussichtlicher Gebrauch mit Autorität, aber denke in Größenordnungen: Erstellen Sie eine Anwendung für Hunderte von Mietern? Tausende? Zehn von Tausenden? Mehr? Je größer du bist erwarte deine Mieterbasis, die Wahrscheinlicher, dass Sie berücksichtigen möchten ein gemeinsamer Ansatz.
Wie viel Speicherplatz erwartest du? die Daten des durchschnittlichen Mieters belegen? Wenn Sie einige oder alle Mieter erwarten speichern sehr große Datenmengen, die Separate-Datenbank-Ansatz ist wahrscheinlich Beste. (In der Tat, Datenspeicherung Anforderungen können dazu führen, dass Sie ein separates Datenbankmodell sowieso. Wenn ja, es wird viel einfacher sein, das zu entwerfen Anwendung so von der Anfang als zu a bewegen separater Datenbankansatz später.)
Wie viele gleichzeitige Endbenutzer tun Sie? erwarten, dass der durchschnittliche Mieter unterstützt? Je größer die Zahl, desto mehr ein eher isoliertes Vorgehen wird den Endbenutzeranforderungen entsprechen.
Erwarten Sie, dass jeder Per-Tenant angeboten wird Mehrwertdienste , wie z Mandantenfähige Sicherung und Wiederherstellung Fähigkeit? Solche Dienste sind einfacher durch ein isolierteres anbieten Annäherung.
Beachten Sie, dass der "gemeinsame Ansatz" die Option 1 und der "isolierte Ansatz" in Ihrem Fall die Option 2 ist. Sie sind bei den ersten beiden Punkten nicht voreingenommen, daher denke ich, dass ich meine Entscheidung auf die letzten beiden Punkte stützen würde.
Wenn Sie keine Daten zwischen den Mietern verknüpfen müssen, sollten Sie mehrere Datenbanken verwenden. Die Wartung ist einfacher, die Einrichtung ist einfacher und die Leistung wird viel besser. Wenn Daten von mehreren Mietern in einer Tabelle, Tabellensperren und Suche querys über große Tabellen mit und werden höchstwahrscheinlich Ihre Lösung verlangsamen.
Der einzige Grund, eine db zu teilen, würde ich sehen, wenn Sie sehr viele Klienten und sehr niedrige Anzahl von Reihen pro Klient haben.
Tags und Links sql multi-tenant