Ich bin ein SQL-Entwickler (nicht DBA oder Architekt) für ein kleines SaaS-Unternehmen (~ 50 Mitarbeiter). Ich habe die Aufgabe herauszufinden, wie man:
- Laden Sie Betriebsberichte aus unseren über 100 OLTP-Datenbanken herunter
- Lassen Sie diese Berichte für Daten aus mehreren Client-Datenbanken ausgeführt werden
- Positionieren Sie unser Unternehmen, um in Zukunft mehr analytikbasierte Lösungen anzubieten
Ich habe eine Reihe von Artikeln über verschiedene Technologien wie Transaktionsreplikation (insbesondere das Viele-zu-Eins- / Zentralabonnentenmodell), SQL Service Broker, Protokollversand, Änderungsverfolgung (CT) und Änderungsdatenerfassung (CDC) gelesen Dies ist nur für Unternehmen), und ich bin mir nicht sicher, welchen Weg ich am besten einschlagen soll.
Ich hoffe, dass einige von Ihnen mit Integrationskenntnissen auf ein ähnliches Setup wie wir gestoßen sind und mich auf einen erfolgreichen Weg weisen oder mich auf einige Ressourcen verweisen können, die hilfreich wären.
Aus Kostengründen muss unsere Lösung in SQL Server Standard Edition funktionieren. Außerdem muss die Lösung angemessen sein, um sie in unserer kleinen Organisation zu unterstützen / zu warten.
Grundlegende Einstellung:
Derzeit verfügen wir über mehr als 100 einzelne Client-Datenbanken, von denen die meisten auf SQL-Servern in unserem Rechenzentrum bereitgestellt werden. Einige werden jedoch auf Client-Servern in ihrem Rechenzentrum bereitgestellt, in die wir remote zugreifen können. Dies sind alles SQL Server 2008 R2-Datenbanken, aber wir planen, bald ein Upgrade auf SQL 2016 durchzuführen.
Wir verwenden Datenbankprojekte und Dacpacs, um sicherzustellen, dass das Schema für alle zu integrierenden Client-Datenbanken gleich ist. Da wir jedoch nicht alle Clients zwingen, gleichzeitig auf neue Versionen zu aktualisieren, sind einige Schemaunterschiede zwischen den Upgrades möglich. Die Lösung muss flexibel genug sein, um nicht zu brechen, wenn sich Client A in Softwareversion 1.0 und Client B in Version 1.1 befindet.
Betriebsberichte werden derzeit direkt aus der OLTP-Datenbank jedes Clients ausgeführt. Wir sind besorgt über die Auswirkungen, die dies auf die Leistung der Anwendung haben wird, wenn wir sie nicht auslagern.
Hohe Anforderungen:
Unsere Kunden sind SPD-Abteilungen (Hospital Sterile Processing Departments), die aktuelle Berichte darüber wünschen, was sie bisher verarbeitet haben, wo sich das Inventar befindet usw. Das Prozessinventar der SPD ist rund um die Uhr verfügbar, einschließlich an Wochenenden und Feiertagen. Da einer der Hauptzwecke dieser Bemühungen darin besteht, die operative Berichterstattung besser zu unterstützen, möchten wir, dass die Daten so zeitnah wie möglich sind, um die Anforderungen der Kunden weiterhin zu erfüllen.
Derzeit haben wir einige SPDs in separaten Datenbanken, die tatsächlich Teil desselben Krankenhaussystems sind. Diese Clients möchten die Möglichkeit haben, Berichte über alle SPDs in ihrem System zu erstellen.
Strategisch gesehen möchten wir die Möglichkeit haben, Daten für alle unsere Kunden einfach zu aggregieren, um unsere internen Analyseinitiativen zu unterstützen. Wir gehen davon aus, dass wir die gesammelten Betriebsdaten als Quelle für Data Marts / Warehouse verwenden können.
Gedanken so weit:
Die Transaktionsreplikation scheint die "Echtzeit" -Lösung zu sein. Ich fand diese Antwort besonders hilfreich, befürchte jedoch, dass sie aufgrund des Potenzials für Schemaunterschiede bei uns nicht funktioniert: SQL Server Many-to-One-Replikation
Der Protokollversand klingt nicht ideal, da das Protokoll nicht wiederhergestellt werden kann, während Abfragen aktiv sind. Entweder muss ich alle rausschmeißen, damit das Protokoll wiederhergestellt werden kann, oder die Daten werden veraltet. Ich bin mir nicht sicher, ob diese Methode zur Zentralisierung von Daten aus mehreren Datenbanken verwendet werden kann, da jedes ausgelieferte Protokoll nur für die einzelne Datenbank bestimmt ist, aus der es stammt.
Bei Verwendung des SQL Service Brokers kann die Latenz unvorhersehbar sein, wenn eine Warteschlange nicht mit der Anzahl der zu verarbeitenden Nachrichten Schritt halten konnte.
CT identifiziert nur eine Version für jede Tabellenzeile. Die Latenz hängt davon ab, wie schnell wir so etwas wie ein SSIS-Paket für jede Datenbank verarbeiten können, um die Daten abzurufen und in ein zentrales Repository einzufügen.
Müssen wir in Betracht ziehen, jede Datenbank einzeln zu replizieren und dann möglicherweise eine Art Datenvirtualisierungstechnik zu verwenden, um Daten aus den verschiedenen replizierten Quellen zu kombinieren?
Jeder Rat oder jede Anweisung, die Sie bereit sind zu geben, wäre sehr dankbar.