2010-12-17 29 views
0

Ich habe ein System, das wir kürzlich entwickelt haben - eine Webanwendung über eine SQL-Server-Datenbank. Die SQL Server-Datenbank wurde als "Multi-Tenant" -Datenbank eingerichtet, wobei viele verschiedene "Installationen" unserer Website auf dieselbe Datenbank zugreifen.Zugriff auf Daten aus anderen Datenbanken - Systemarchitektur

Wir haben eine andere Anwendung, die in ähnlicher Weise läuft, mit dem Hauptunterschied, dass sie viele verschiedene 'Installationen' hat, die alle auf ihre eigenen Datenbanken zugreifen.

Alle diese Websites werden auf demselben Server ausgeführt, und alle Datenbanken befinden sich in derselben SQL Server-Instanz.

Jeder unserer Kunden hätte eines dieser Systeme und bis zu diesem Zeitpunkt hatten wir eine ziemlich leichte Integration zwischen diesen beiden Systemen, die über Web-Service-Aufrufe abgewickelt wurde.

Wir haben jetzt eine neue Änderung, die erfordert, dass ich eine Liste von Daten aus dem Multi-Tenant-System zurückgebe, aber basierend auf Kriterien, die in den Datenbanken des anderen Systems gespeichert sind. Ich kann ein paar Möglichkeiten, dies zu tun, aber frage mich, ob jemand irgendwelche guten Ideen hatte:

  1. Web-Service erneut - sie diese Idee nicht gefällt, da es bedeutet, eine Liste von Daten zu nehmen und einen Anruf tätigen für jeden einzelnen Gegenstand, der sowohl langsam als auch hässlich ist.

  2. Schreiben von dynamischem SQL innerhalb der Datenbankschicht, um einen Join auf .dbo.table zu machen, der auch ein bisschen hässlich ist und schwer zu pflegen sein kann.

  3. Replizieren Sie die Daten von einer Datenbank zur anderen. Hier tendiere ich dazu, allerdings besteht dann das Risiko, dass die Daten nicht mehr synchron sind.

ich etwas Gescheites über Ansichten in meiner Multi-Tenant-Datenbank tun mag, aber ich möchte nicht einen separaten Satz von Ansichten, die wir für das zweite System eine neue Datenbank erstellen jedes Mal zu schaffen haben ...

Antwort

1

je nach Geschäftsgröße gehe ich mit #1 oder #2.

#1 ist mehr scalabe und gut für heterogenus clients, aber schwerer zu implementieren und zu pflegen. Da Sie keine öffentlichen APIs haben, können Sie unter #2 gehen.

#2 braucht eine DBA-Experten und sehr fehleranfällig

#3 ist die schlechteste Lösung IMO da redundacy passieren würde, und es ist schwer, später zu lösen.

Was ich vorschlagen, ist ein kurzfristiger Plan und ein langfristiger Plan. Kurzfristig #1 oder #2 verwenden und gleichzeitig Ihre Datenbank neu gestalten. Dann können Sie dem System ein neues Datenmodell hinzufügen und es kann mit der alten dbase koexistieren. Wenn Sie versichern, dass seine Funktionalität zu neuen db wechselt, aber immer noch lgacy-System bleibt. Und schließlich, wenn neue db nach einer Weile kein Problem hat, verlassen Sie die Legacy-db von der Schaltung.

0

Ändern Sie das Datenmodell nicht. Es ist riskant. Mach einfach einen weiteren abstrakten Wrapper drüber.

Sie können die Datenbank auf einem anderen Server replizieren und diesen neuen Wrapper mit einer Kopie der Daten arbeiten lassen. Wenn Datenkorruption aufgetreten ist, einfach auf Hauptkopie wiederherstellen.

Verwandte Themen