2010-06-24 9 views
9

Ich entwickle eine benutzerdefinierte 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.MultiTenant im Vergleich zu mehreren DBs

Option 1 besteht darin, einen einzelnen DB zu haben und eine TenantId-Spalte in Tabellen, einen geeigneten Index und die Verwendung von 'wo tenantId = {...}' für jeden Datenbankzugriff zu verwenden.

Option 2 besteht darin, für jeden Client eine eigene DB zu erstellen, wodurch die Klauseln TenantId und Where vermieden werden.

Ich gehe davon aus, dass jeder Client Hunderttausende Datensätze haben wird, nicht Millionen.

Wie ich es sehe, wird es eine Gesamtzahl von Datenseiten geben, für welche Option ich auch gehe. 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 letztendlich zu SAN.

Hat jemand irgendwelche Ansichten dazu?

+1

Welche Methode haben Sie am Ende und warum? –

Antwort

4

Es gibt einen interessanten MSDN Artikel mit dem Titel Multi-Tenant Data Architecture, den Sie vielleicht auschecken möchten. Die Autoren machen eine kurze Analyse darüber, wo ein bestimmter Ansatz besser geeignet sein könnte als eine andere:

Die Anzahl, Art und Bedürfnisse der Mieter Sie erwarten, dass alle Ihre Datenarchitektur Entscheidung in unterschiedliche Weise beeinflussen dienen . Einige der folgenden Fragen können Sie in Richtung auf eine mehr isolierte Ansatz, während andere neigen Sie zu einer mehr gemeinsamen Ansatz neigen.

  • Wie viele Mietinteressenten do Sie ausrichten erwarten? Sie können nirgends sein in der Nähe in der Lage zu schätzen potenzielle Nutzung mit Autorität, aber in Bezug auf Größenordnungen denken: erstellen Sie eine Anwendung für Hunderte von Mietern? Tausende? Tens von Tausenden? Mehr? Je größer Sie erwarten, dass Ihre Mieterbasis, die wahrscheinlicher Sie ein mehr geteilter Ansatz betrachten werden.

  • Wie viel Speicherplatz erwarten Sie die durchschnittlichen Mieter Daten zu belegen? Wenn Sie erwarten, dass einige oder alle Mandanten sehr große Datenmengen speichern, ist der separate Datenbankansatz wahrscheinlich am besten. (In der Tat, Datenspeicherung Anforderungen zwingen Sie können trotzdem ein getrenntes Datenbankmodell zu übernehmen. Wenn ja, es wird viel einfacher zu gestalten, die Anwendung, die Art und Weise von den als Beginn an einen separate-Datenbank Ansatz zu bewegen später.)

  • Wie viele gleichzeitige Endbenutzer Sie erwarten, dass der durchschnittliche Mieter zu unterstützen? Je größer die Zahl ist, desto mehr geeignete eine isolierte Ansatz wird Endbenutzeranforderungen zu erfüllen sein.

  • Erwarten Sie alle pro-Tenant Wertdienste, wie pro-Tenant-Sicherung bieten und Fähigkeit wieder herzustellen? Solche Dienste sind einfacher durch einen isolierteren Ansatz zu bieten.

Beachten Sie, dass der "gemeinsame Ansatz" Option 1 ist, und der "isolierte Ansatz" ist die Option 2, in Ihrem Fall. In Bezug auf die ersten beiden Punkte sind Sie auf keiner der beiden Seiten voreingenommen, daher denke ich, dass ich meine Entscheidung auf die letzten beiden Punkte stützen würde.

+0

Der Link ist sehr interessant –

0

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 Sie Daten von mehreren Mandanten in einer Tabelle haben, können Tabellensperren und Suchabfragen über große Tabellen Ihre Lösung verlangsamen.

Der einzige Grund, eine db zu teilen, würde ich sehen, wenn Sie sehr viele Kunden und sehr geringe Anzahl von Zeilen pro Client haben.

Verwandte Themen